From 4c8e4e037acc54b4f3bfe52ff5f431527ae4b4a7 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 15 Oct 2023 01:01:17 +0000 Subject: [PATCH] deploy: ed4de694c1cd37843281b461c7b945c168416b30 --- .buildinfo | 4 + .nojekyll | 0 .../oneapi.repo | 7 + .../fk3.4-v20220730.patch | 18 + _images/taup_curve.jpg | Bin 0 -> 37885 bytes _images/taup_path.jpg | Bin 0 -> 42601 bytes _images/taup_slowplot.jpg | Bin 0 -> 57290 bytes _images/taup_velplot.jpg | Bin 0 -> 67574 bytes _images/taup_wavefront.gif | Bin 0 -> 94681 bytes _images/taup_wavefront.jpg | Bin 0 -> 61108 bytes _images/taup_wavefront_ray20-time25.jpg | Bin 0 -> 71129 bytes _sources/anaconda/index.md | 192 + _sources/cps/index.md | 20 + _sources/cps/install.md | 105 + _sources/cps/intro.md | 55 + _sources/fk/index.md | 19 + _sources/fk/install.md | 68 + _sources/fk/intro.md | 66 + _sources/gcap3d/index.md | 20 + _sources/gcap3d/intro.md | 43 + _sources/index.md | 47 + _sources/intel-oneapi/index.md | 105 + _sources/java/index.md | 41 + _sources/obspy/index.md | 17 + _sources/obspy/install.md | 21 + _sources/obspy/instrument-response.ipynb | 339 + _sources/obspy/instrument-response.md | 125 + _sources/obspy/intro.md | 55 + _sources/sod/index.md | 17 + _sources/sod/install.md | 45 + _sources/sod/intro.md | 72 + _sources/sod/recipe.md | 156 + _sources/taup/index.md | 17 + _sources/taup/install.md | 40 + _sources/taup/intro.md | 60 + _sources/taup/taup_curve.md | 87 + _sources/taup/taup_path.md | 87 + _sources/taup/taup_setsac.md | 59 + _sources/taup/taup_slowplot.md | 50 + _sources/taup/taup_table.md | 50 + _sources/taup/taup_time.md | 197 + _sources/taup/taup_velplot.md | 31 + _sources/taup/taup_wavefront.md | 128 + _sources/template/index.md | 17 + _sources/template/install.md | 18 + _sources/template/intro.md | 26 + _sources/template/style.md | 19 + _sources/utilities/distaz.md | 64 + _sources/utilities/saclst.md | 51 + ...e.b7bb847fb20b106c3d81b95245e65545.min.css | 1 + _sphinx_design_static/design-tabs.js | 27 + _static/basic.css | 906 ++ _static/check-solid.svg | 4 + _static/clipboard.min.js | 7 + _static/copy-button.svg | 5 + _static/copybutton.css | 94 + _static/copybutton.js | 248 + _static/copybutton_funcs.js | 73 + ...e.b7bb847fb20b106c3d81b95245e65545.min.css | 1 + _static/design-tabs.js | 27 + _static/doctools.js | 358 + _static/documentation_options.js | 14 + _static/favicon.ico | Bin 0 -> 15406 bytes _static/file.png | Bin 0 -> 286 bytes _static/images/logo_binder.svg | 19 + _static/images/logo_colab.png | Bin 0 -> 7601 bytes _static/images/logo_deepnote.svg | 1 + _static/images/logo_jupyterhub.svg | 1 + _static/jquery-3.5.1.js | 10872 ++++++++++++++++ _static/jquery.js | 2 + _static/language_data.js | 297 + _static/locales/ar/LC_MESSAGES/booktheme.po | 81 + _static/locales/bg/LC_MESSAGES/booktheme.po | 81 + _static/locales/bn/LC_MESSAGES/booktheme.po | 66 + _static/locales/ca/LC_MESSAGES/booktheme.po | 69 + _static/locales/cs/LC_MESSAGES/booktheme.po | 81 + _static/locales/da/LC_MESSAGES/booktheme.po | 81 + _static/locales/de/LC_MESSAGES/booktheme.po | 81 + _static/locales/el/LC_MESSAGES/booktheme.po | 81 + _static/locales/eo/LC_MESSAGES/booktheme.po | 81 + _static/locales/es/LC_MESSAGES/booktheme.po | 81 + _static/locales/et/LC_MESSAGES/booktheme.po | 81 + _static/locales/fi/LC_MESSAGES/booktheme.po | 81 + _static/locales/fr/LC_MESSAGES/booktheme.po | 81 + _static/locales/hr/LC_MESSAGES/booktheme.po | 81 + _static/locales/id/LC_MESSAGES/booktheme.po | 81 + _static/locales/it/LC_MESSAGES/booktheme.po | 81 + _static/locales/iw/LC_MESSAGES/booktheme.po | 81 + _static/locales/ja/LC_MESSAGES/booktheme.po | 81 + _static/locales/ko/LC_MESSAGES/booktheme.po | 81 + _static/locales/lt/LC_MESSAGES/booktheme.po | 81 + _static/locales/lv/LC_MESSAGES/booktheme.po | 81 + _static/locales/ml/LC_MESSAGES/booktheme.po | 69 + _static/locales/mr/LC_MESSAGES/booktheme.po | 69 + _static/locales/ms/LC_MESSAGES/booktheme.po | 69 + _static/locales/nl/LC_MESSAGES/booktheme.po | 81 + _static/locales/no/LC_MESSAGES/booktheme.po | 81 + _static/locales/pl/LC_MESSAGES/booktheme.po | 81 + _static/locales/pt/LC_MESSAGES/booktheme.po | 81 + _static/locales/ro/LC_MESSAGES/booktheme.po | 81 + _static/locales/ru/LC_MESSAGES/booktheme.po | 81 + _static/locales/sk/LC_MESSAGES/booktheme.po | 81 + _static/locales/sl/LC_MESSAGES/booktheme.po | 81 + _static/locales/sr/LC_MESSAGES/booktheme.po | 81 + _static/locales/sv/LC_MESSAGES/booktheme.po | 81 + _static/locales/ta/LC_MESSAGES/booktheme.po | 69 + _static/locales/te/LC_MESSAGES/booktheme.po | 69 + _static/locales/tg/LC_MESSAGES/booktheme.po | 81 + _static/locales/th/LC_MESSAGES/booktheme.po | 81 + _static/locales/tl/LC_MESSAGES/booktheme.po | 69 + _static/locales/tr/LC_MESSAGES/booktheme.po | 81 + _static/locales/uk/LC_MESSAGES/booktheme.po | 81 + _static/locales/ur/LC_MESSAGES/booktheme.po | 69 + _static/locales/vi/LC_MESSAGES/booktheme.po | 81 + .../locales/zh_CN/LC_MESSAGES/booktheme.po | 78 + .../locales/zh_TW/LC_MESSAGES/booktheme.po | 81 + _static/minus.png | Bin 0 -> 90 bytes _static/mystnb.css | 1722 +++ _static/plus.png | Bin 0 -> 90 bytes _static/pygments.css | 74 + _static/sbt-webpack-macros.html | 11 + _static/scripts/pydata-sphinx-theme.js | 32 + _static/scripts/sphinx-book-theme.js | 2 + _static/scripts/sphinx-book-theme.js.map | 1 + _static/searchtools.js | 525 + _static/sphinx-thebe.css | 129 + _static/sphinx-thebe.js | 126 + _static/styles/pydata-sphinx-theme.css | 6 + _static/styles/sphinx-book-theme.css | 8 + _static/styles/theme.css | 134 + _static/togglebutton.css | 160 + _static/togglebutton.js | 187 + _static/underscore-1.13.1.js | 2042 +++ _static/underscore.js | 6 + _static/vendor/fontawesome/5.13.0/LICENSE.txt | 34 + .../vendor/fontawesome/5.13.0/css/all.min.css | 5 + .../5.13.0/webfonts/fa-brands-400.eot | Bin 0 -> 133034 bytes .../5.13.0/webfonts/fa-brands-400.svg | 3570 +++++ .../5.13.0/webfonts/fa-brands-400.ttf | Bin 0 -> 132728 bytes .../5.13.0/webfonts/fa-brands-400.woff | Bin 0 -> 89824 bytes .../5.13.0/webfonts/fa-brands-400.woff2 | Bin 0 -> 76612 bytes .../5.13.0/webfonts/fa-regular-400.eot | Bin 0 -> 34390 bytes .../5.13.0/webfonts/fa-regular-400.svg | 803 ++ .../5.13.0/webfonts/fa-regular-400.ttf | Bin 0 -> 34092 bytes .../5.13.0/webfonts/fa-regular-400.woff | Bin 0 -> 16800 bytes .../5.13.0/webfonts/fa-regular-400.woff2 | Bin 0 -> 13584 bytes .../5.13.0/webfonts/fa-solid-900.eot | Bin 0 -> 202902 bytes .../5.13.0/webfonts/fa-solid-900.svg | 4938 +++++++ .../5.13.0/webfonts/fa-solid-900.ttf | Bin 0 -> 202616 bytes .../5.13.0/webfonts/fa-solid-900.woff | Bin 0 -> 103300 bytes .../5.13.0/webfonts/fa-solid-900.woff2 | Bin 0 -> 79444 bytes _static/webpack-macros.html | 29 + anaconda/index.html | 917 ++ cps/index.html | 669 + cps/install/index.html | 766 ++ cps/intro/index.html | 753 ++ fk/index.html | 668 + fk/install/index.html | 727 ++ fk/intro/index.html | 786 ++ gcap3d/index.html | 669 + gcap3d/intro/index.html | 752 ++ genindex/index.html | 553 + index.html | 735 ++ intel-oneapi/index.html | 751 ++ java/index.html | 687 + objects.inv | 8 + obspy/index.html | 667 + obspy/install/index.html | 669 + obspy/instrument-response/index.html | 921 ++ obspy/intro/index.html | 750 ++ search/index.html | 582 + searchindex.js | 1 + sod/index.html | 667 + sod/install/index.html | 705 + sod/intro/index.html | 769 ++ sod/recipe/index.html | 866 ++ taup/index.html | 667 + taup/install/index.html | 701 + taup/intro/index.html | 779 ++ taup/taup_curve/index.html | 781 ++ taup/taup_path/index.html | 778 ++ taup/taup_setsac/index.html | 753 ++ taup/taup_slowplot/index.html | 739 ++ taup/taup_table/index.html | 690 + taup/taup_time/index.html | 903 ++ taup/taup_velplot/index.html | 671 + taup/taup_wavefront/index.html | 805 ++ template/index.html | 667 + template/install/index.html | 683 + template/intro/index.html | 721 + template/style/index.html | 671 + utilities/distaz/index.html | 765 ++ utilities/saclst/index.html | 691 + 193 files changed, 62193 insertions(+) create mode 100644 .buildinfo create mode 100644 .nojekyll create mode 100644 _downloads/1cc59bc70bd1979df63e50172685f49e/oneapi.repo create mode 100644 _downloads/358f8a6762fae43b5eed5dad1b72f08f/fk3.4-v20220730.patch create mode 100644 _images/taup_curve.jpg create mode 100644 _images/taup_path.jpg create mode 100644 _images/taup_slowplot.jpg create mode 100644 _images/taup_velplot.jpg create mode 100644 _images/taup_wavefront.gif create mode 100644 _images/taup_wavefront.jpg create mode 100644 _images/taup_wavefront_ray20-time25.jpg create mode 100644 _sources/anaconda/index.md create mode 100644 _sources/cps/index.md create mode 100644 _sources/cps/install.md create mode 100644 _sources/cps/intro.md create mode 100644 _sources/fk/index.md create mode 100644 _sources/fk/install.md create mode 100644 _sources/fk/intro.md create mode 100644 _sources/gcap3d/index.md create mode 100644 _sources/gcap3d/intro.md create mode 100644 _sources/index.md create mode 100644 _sources/intel-oneapi/index.md create mode 100644 _sources/java/index.md create mode 100644 _sources/obspy/index.md create mode 100644 _sources/obspy/install.md create mode 100644 _sources/obspy/instrument-response.ipynb create mode 100644 _sources/obspy/instrument-response.md create mode 100644 _sources/obspy/intro.md create mode 100644 _sources/sod/index.md create mode 100644 _sources/sod/install.md create mode 100644 _sources/sod/intro.md create mode 100644 _sources/sod/recipe.md create mode 100644 _sources/taup/index.md create mode 100644 _sources/taup/install.md create mode 100644 _sources/taup/intro.md create mode 100644 _sources/taup/taup_curve.md create mode 100644 _sources/taup/taup_path.md create mode 100644 _sources/taup/taup_setsac.md create mode 100644 _sources/taup/taup_slowplot.md create mode 100644 _sources/taup/taup_table.md create mode 100644 _sources/taup/taup_time.md create mode 100644 _sources/taup/taup_velplot.md create mode 100644 _sources/taup/taup_wavefront.md create mode 100644 _sources/template/index.md create mode 100644 _sources/template/install.md create mode 100644 _sources/template/intro.md create mode 100644 _sources/template/style.md create mode 100644 _sources/utilities/distaz.md create mode 100644 _sources/utilities/saclst.md create mode 100644 _sphinx_design_static/design-style.b7bb847fb20b106c3d81b95245e65545.min.css create mode 100644 _sphinx_design_static/design-tabs.js create mode 100644 _static/basic.css create mode 100644 _static/check-solid.svg create mode 100644 _static/clipboard.min.js create mode 100644 _static/copy-button.svg create mode 100644 _static/copybutton.css create mode 100644 _static/copybutton.js create mode 100644 _static/copybutton_funcs.js create mode 100644 _static/design-style.b7bb847fb20b106c3d81b95245e65545.min.css create mode 100644 _static/design-tabs.js create mode 100644 _static/doctools.js create mode 100644 _static/documentation_options.js create mode 100644 _static/favicon.ico create mode 100644 _static/file.png create mode 100644 _static/images/logo_binder.svg create mode 100644 _static/images/logo_colab.png create mode 100644 _static/images/logo_deepnote.svg create mode 100644 _static/images/logo_jupyterhub.svg create mode 100644 _static/jquery-3.5.1.js create mode 100644 _static/jquery.js create mode 100644 _static/language_data.js create mode 100644 _static/locales/ar/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/bg/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/bn/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/ca/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/cs/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/da/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/de/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/el/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/eo/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/es/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/et/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/fi/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/fr/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/hr/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/id/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/it/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/iw/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/ja/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/ko/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/lt/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/lv/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/ml/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/mr/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/ms/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/nl/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/no/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/pl/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/pt/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/ro/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/ru/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/sk/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/sl/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/sr/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/sv/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/ta/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/te/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/tg/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/th/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/tl/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/tr/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/uk/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/ur/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/vi/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/zh_CN/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/zh_TW/LC_MESSAGES/booktheme.po create mode 100644 _static/minus.png create mode 100644 _static/mystnb.css create mode 100644 _static/plus.png create mode 100644 _static/pygments.css create mode 100644 _static/sbt-webpack-macros.html create mode 100644 _static/scripts/pydata-sphinx-theme.js create mode 100644 _static/scripts/sphinx-book-theme.js create mode 100644 _static/scripts/sphinx-book-theme.js.map create mode 100644 _static/searchtools.js create mode 100644 _static/sphinx-thebe.css create mode 100644 _static/sphinx-thebe.js create mode 100644 _static/styles/pydata-sphinx-theme.css create mode 100644 _static/styles/sphinx-book-theme.css create mode 100644 _static/styles/theme.css create mode 100644 _static/togglebutton.css create mode 100644 _static/togglebutton.js create mode 100644 _static/underscore-1.13.1.js create mode 100644 _static/underscore.js create mode 100644 _static/vendor/fontawesome/5.13.0/LICENSE.txt create mode 100644 _static/vendor/fontawesome/5.13.0/css/all.min.css create mode 100644 _static/vendor/fontawesome/5.13.0/webfonts/fa-brands-400.eot create mode 100644 _static/vendor/fontawesome/5.13.0/webfonts/fa-brands-400.svg create mode 100644 _static/vendor/fontawesome/5.13.0/webfonts/fa-brands-400.ttf create mode 100644 _static/vendor/fontawesome/5.13.0/webfonts/fa-brands-400.woff create mode 100644 _static/vendor/fontawesome/5.13.0/webfonts/fa-brands-400.woff2 create mode 100644 _static/vendor/fontawesome/5.13.0/webfonts/fa-regular-400.eot create mode 100644 _static/vendor/fontawesome/5.13.0/webfonts/fa-regular-400.svg create mode 100644 _static/vendor/fontawesome/5.13.0/webfonts/fa-regular-400.ttf create mode 100644 _static/vendor/fontawesome/5.13.0/webfonts/fa-regular-400.woff create mode 100644 _static/vendor/fontawesome/5.13.0/webfonts/fa-regular-400.woff2 create mode 100644 _static/vendor/fontawesome/5.13.0/webfonts/fa-solid-900.eot create mode 100644 _static/vendor/fontawesome/5.13.0/webfonts/fa-solid-900.svg create mode 100644 _static/vendor/fontawesome/5.13.0/webfonts/fa-solid-900.ttf create mode 100644 _static/vendor/fontawesome/5.13.0/webfonts/fa-solid-900.woff create mode 100644 _static/vendor/fontawesome/5.13.0/webfonts/fa-solid-900.woff2 create mode 100644 _static/webpack-macros.html create mode 100644 anaconda/index.html create mode 100644 cps/index.html create mode 100644 cps/install/index.html create mode 100644 cps/intro/index.html create mode 100644 fk/index.html create mode 100644 fk/install/index.html create mode 100644 fk/intro/index.html create mode 100644 gcap3d/index.html create mode 100644 gcap3d/intro/index.html create mode 100644 genindex/index.html create mode 100644 index.html create mode 100644 intel-oneapi/index.html create mode 100644 java/index.html create mode 100644 objects.inv create mode 100644 obspy/index.html create mode 100644 obspy/install/index.html create mode 100644 obspy/instrument-response/index.html create mode 100644 obspy/intro/index.html create mode 100644 search/index.html create mode 100644 searchindex.js create mode 100644 sod/index.html create mode 100644 sod/install/index.html create mode 100644 sod/intro/index.html create mode 100644 sod/recipe/index.html create mode 100644 taup/index.html create mode 100644 taup/install/index.html create mode 100644 taup/intro/index.html create mode 100644 taup/taup_curve/index.html create mode 100644 taup/taup_path/index.html create mode 100644 taup/taup_setsac/index.html create mode 100644 taup/taup_slowplot/index.html create mode 100644 taup/taup_table/index.html create mode 100644 taup/taup_time/index.html create mode 100644 taup/taup_velplot/index.html create mode 100644 taup/taup_wavefront/index.html create mode 100644 template/index.html create mode 100644 template/install/index.html create mode 100644 template/intro/index.html create mode 100644 template/style/index.html create mode 100644 utilities/distaz/index.html create mode 100644 utilities/saclst/index.html diff --git a/.buildinfo b/.buildinfo new file mode 100644 index 00000000..28e1849d --- /dev/null +++ b/.buildinfo @@ -0,0 +1,4 @@ +# Sphinx build info version 1 +# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. +config: 7539d2c8f641b42fd2325aae7eb56113 +tags: d77d1c0d9ca2f4c8421862c7c5a0d620 diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 00000000..e69de29b diff --git a/_downloads/1cc59bc70bd1979df63e50172685f49e/oneapi.repo b/_downloads/1cc59bc70bd1979df63e50172685f49e/oneapi.repo new file mode 100644 index 00000000..d854e3fd --- /dev/null +++ b/_downloads/1cc59bc70bd1979df63e50172685f49e/oneapi.repo @@ -0,0 +1,7 @@ +[oneAPI] +name=Intel(R) oneAPI repository +baseurl=https://yum.repos.intel.com/oneapi +enabled=1 +gpgcheck=1 +repo_gpgcheck=1 +gpgkey=https://yum.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB \ No newline at end of file diff --git a/_downloads/358f8a6762fae43b5eed5dad1b72f08f/fk3.4-v20220730.patch b/_downloads/358f8a6762fae43b5eed5dad1b72f08f/fk3.4-v20220730.patch new file mode 100644 index 00000000..5de29d66 --- /dev/null +++ b/_downloads/358f8a6762fae43b5eed5dad1b72f08f/fk3.4-v20220730.patch @@ -0,0 +1,18 @@ +diff --git a/Makefile b/Makefile +index 5676245..11aac94 100644 +--- a/Makefile ++++ b/Makefile +@@ -1,9 +1,10 @@ ++FC=gfortran + optimize=-O +-FFLAGS=$(optimize) -ffpe-trap=overflow,invalid,denormal ++FFLAGS=$(optimize) -ffpe-trap=overflow,invalid,denormal -ffixed-line-length-none + CFLAGS=$(optimize) + #if SAC library has been installed, uncomment the next two lines +-#CFLAGS=$(optimize) -DSAC_LIB +-#SACLIB=-L$(SACHOME)/lib -lsac -lsacio ++CFLAGS=$(optimize) -DSAC_LIB ++SACLIB=-L$(SACHOME)/lib -lsac -lsacio + # + + SUBS = fft.o Complex.o sacio.o diff --git a/_images/taup_curve.jpg b/_images/taup_curve.jpg new file mode 100644 index 0000000000000000000000000000000000000000..84cd94d42aae0bb234f31ba2fbbb86b37606c449 GIT binary patch literal 37885 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ť$J^SzA03!8BUN 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 P|)q_7$kx(f`Qlk&gb8Vq+`Ntw~jLIs-z> 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 literal 0 HcmV?d00001 diff --git a/_images/taup_slowplot.jpg b/_images/taup_slowplot.jpg new file mode 100644 index 0000000000000000000000000000000000000000..55324a4cb4015b0b70f6426d85e1d4a124bc82d6 GIT binary patch literal 57290 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 literal 0 HcmV?d00001 diff --git a/_images/taup_velplot.jpg b/_images/taup_velplot.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4f34177c7a92db63cd0e45f4429fa5046a7dc17b GIT binary patch literal 67574 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 F{|AT5 literal 0 HcmV?d00001 diff --git a/_images/taup_wavefront.jpg b/_images/taup_wavefront.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b357d04e19de6a176d24a57011897de64fc35c1e GIT binary patch literal 61108 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 e75v|5`uB=u(lz-QJn*pKDWjc0SFQT<{r> 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 literal 0 HcmV?d00001 diff --git a/_sources/anaconda/index.md b/_sources/anaconda/index.md new file mode 100644 index 00000000..da9ab7f0 --- /dev/null +++ b/_sources/anaconda/index.md @@ -0,0 +1,192 @@ +# Anaconda/Miniconda + +- 本节贡献者: {{田冬冬}}(作者)、{{姚家园}}(审稿) +- 最近更新时间:2023-09-23 + +--- + +[Anaconda](https://www.anaconda.com/download/) 是一个跨平台的、用于科学计算的 Python 发行版, +其提供了 Python、包管理器 `conda` 并内置了几百个科学计算相关的软件包。 +[Miniconda](https://docs.conda.io/en/latest/miniconda.html) 可以看做是 +Anaconda 的精简版,其只提供了 Python、包管理器 `conda` 以及相关的必须依赖包。 + +与 Anaconda 相比,Miniconda 安装包更小,安装速度更快,且安装后占用的硬盘空间更小。 +Anaconda 内置的数百个软件包也都可以很容易通过 `conda` 安装。因而, +**建议所有 Python 用户使用 Miniconda,而非 Linux 或 macOS 系统自带的 Python。** + +## 安装 + +1. 下载 Miniconda + + 根据自己使用的系统,从 [Miniconda 官方下载页面](https://docs.conda.io/en/latest/miniconda.html#latest-miniconda-installer-links) + 或 [清华大学 Miniconda 镜像](https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/) 下载对应的安装包。 + + - Linux 64 位系统: + [官方链接](https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh) | + [清华镜像](https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-Linux-x86_64.sh) + - Windows 64 位系统: + [官方链接](https://repo.anaconda.com/miniconda/Miniconda3-latest-Windows-x86_64.exe) | + [清华镜像](https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-Windows-x86_64.exe) + - macOS (Intel 芯片): + [官方链接](https://repo.anaconda.com/miniconda/Miniconda3-latest-MacOSX-x86_64.sh) | + [清华镜像](https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-MacOSX-x86_64.sh) + - macOS (M1 芯片): + [官方链接](https://repo.anaconda.com/miniconda/Miniconda3-latest-MacOSX-arm64.sh) + [清华镜像](https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-MacOSX-arm64.sh) + +2. 安装 Miniconda + + ::::{tab-set} + + :::{tab-item} Windows + 直接双击安装包即可安装。 + ::: + + :::{tab-item} Linux + ``` + $ bash Miniconda3-latest-Linux-x86_64.sh + ``` + ::: + + :::{tab-item} macOS + ``` + # Intel 芯片 + $ bash Miniconda3-latest-MacOSX-x86_64.sh + # M1 芯片 + $ bash Miniconda3-latest-MacOSX-arm64.sh + ``` + ::: + + :::: + + Miniconda 默认会安装到 {file}`${HOME}/miniconda3` 下,在安装过程中可以 + 设置为其他路径。 + + 安装通常只需要十几秒,在安装的最后会出现: + + ``` + Do you wish the installer to initialize Miniconda3 by running conda init? [yes|no] + [yes] >>> + ``` + + 建议输入 `yes`,此时安装包会向当前 SHELL 的配置文件(如 {file}`~/.bashrc` + 或 {file}`~/.zshrc`)中写入 `conda` 初始化语句。 + +3. 测试安装 + + 打开一个新的终端,在终端中输入 `python`,输出中看到 **Anaconda, Inc.** + 字样即代表安装完成: + + ``` + $ python + Python 3.8.5 (default, Sep 4 2020, 02:22:02) + [Clang 10.0.0 ] :: Anaconda, Inc. on darwin + Type "help", "copyright", "credits" or "license" for more information. + >>> + ``` + +# 配置 `conda` + +Anaconda/Miniconda 中提供的 `conda` 命令可以用于安装 Python 包、管理虚拟环境, +此外,也可以使用 Python 自带的工具 `pip` 来安装 Python 包,其详细用法见 +[pip 官方文档](https://pip.pypa.io/en/stable/)。我们建议尽可能使用 `conda` 来安装 Python 包, +仅在 conda 没有提供需要的程序包时才使用 `pip` 来安装。 + +在使用 `conda` 前需要对 `conda` 做简单的配置。 + +[conda-forge](https://conda-forge.org/) 是一个由社区维护的大量 Python 包的通道。 +为 conda 增加 conda-forge 通道,可以安装更多的软件包: +``` +$ conda config --add channels conda-forge +``` + +设置通道优先级为 strict。当一个包同时位于 conda-forge 和 main 通道时,总是使用 conda-forge 提供的包, +以避免混用 conda-forge 和 main 通道导致环境依赖关系解析变慢: +``` +$ conda config --set channel_priority true +``` + +显示通道 URL,以更清楚地知道每个包是从哪个通道安装的: +``` +$ conda config --set show_channel_urls true +``` + +配置使用国内清华源以加快软件包下载速度: +``` +$ conda config --add default_channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main +$ conda config --set 'custom_channels.conda-forge' https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud +``` + +设置 `conda` 使用更快的 libmamab solver: +``` +$ conda config --set solver libmamba +``` + +## 使用 conda + +以下仅介绍一些 `conda` 的常用命令,其详细用法见 +[conda 官方文档](https://docs.conda.io/projects/conda/en/latest/index.html)。 + +创建虚拟环境: +``` +# 虚拟环境名为 seismo-learn,初始 Python 版本与 base 环境相同 +$ conda create --name seismo-learn +``` + +激活虚拟环境: +``` +# 激活名为 seismo-learn 的虚拟环境 +$ conda activate seismo-learn +``` + +取消激活当前虚拟环境: +``` +$ conda deactivate +``` + +:::{note} +安装 Anaconda/Miniconda 后,打开终端默认会激活 base 环境。不经常使用 +Python 的读者可以通过如下命令取消此默认设置: + +``` +$ conda config --set auto_activate_base False +``` + +取消后,可以临时激活 base 环境: +``` +$ conda activate base +``` + +重新激活此默认设置: +``` +$ conda config --set auto_activate_base True +``` +::: + +搜索模块: +``` +$ conda search numpy +``` + +安装模块: +``` +$ conda install numpy +``` + +更新模块: +``` +$ conda update numpy +``` + +使用 pip 安装模块: +``` +$ pip install numpy +``` + +## 参考文档 + +- +- +- +- +- diff --git a/_sources/cps/index.md b/_sources/cps/index.md new file mode 100644 index 00000000..6ca20cb0 --- /dev/null +++ b/_sources/cps/index.md @@ -0,0 +1,20 @@ +# CPS + +- 软件名称: Computer Programs in Seismology +- 作者: [Robert B. Herrmann](https://www.eas.slu.edu/People/RBHerrmann/) +- 主页: +- 官方文档: +- 最新版本: v3.30 (2022-11-08) +- 适用平台: {{Linux}} {{macOS}} {{Windows}} +- 编程语言: Fortran、C +- 许可协议: 未知 + +--- + +:::{note} +CPS 在十几年前就发布了 3.30 版本,之后不断修复程序错误和更新代码,但并未更新版本号。 +因而 CPS v3.30 实际上有多个不同的小版本。 + +本教程仅在 Linux 和 macOS 系统下使用 v3.30 (2022-11-08) +测试通过,其余版本或系统可能有所差异。 +::: diff --git a/_sources/cps/install.md b/_sources/cps/install.md new file mode 100644 index 00000000..2c60289e --- /dev/null +++ b/_sources/cps/install.md @@ -0,0 +1,105 @@ +# 安装 + +- 本节贡献者: {{田冬冬}}(作者)、 {{姚家园}}(审稿) +- 最近更新日期: 2021-01-26 + +--- + +{{ install_notes }} + +1. 下载: + + CPS 源码需要先填写申请表格才可以下载。 + 在 填写表格并提交。 + + % CPS 的源码也可以直接 http://www.eas.slu.edu/eqc/eqc_cps/ 的 download 目录下载 + +2. 解压: + + ``` + $ tar -xvf NP330.Nov-08-2022.tgz + ``` + + 将解压得到的 {file}`PROGRAMS.330` 文件夹移至 {file}`~/src/` 目录下,并重命名为 {file}`CPS` + + ``` + $ mkdir -p ~/src/ + $ mv PROGRAMS.330 ~/src/CPS + ``` + +3. 安装依赖 + + ::::{tab-set} + + :::{tab-item} Fedora + ``` + $ sudo dnf install libX11-devel + ``` + ::: + + :::{tab-item} Ubuntu/Debian + ``` + $ sudo apt install libx11-dev + ``` + ::: + + :::{tab-item} macOS + ``` + # macOS 安装 XQuartz 后需要重启方可生效 + $ brew install --cask xquartz + ``` + :::: + +4. 配置: + + 若使用的是 Linux 系统,首先需要确认当前系统是 32 还是 64 位。 + 终端键入 `uname -a`,若输出中包含 `x86_64` 则是 64 位,若输出包含类似 + `i686` 则是 32 位。 + + 进入源码目录: + + ``` + $ cd ~/src/CPS + ``` + ::::{tab-set} + + :::{tab-item} 64 位 Linux 系统 + ``` + $ ./Setup LINUX6440 + ``` + ::: + + :::{tab-item} 32 位 Linux 系统 + ``` + $ ./Setup LINUX40 + ``` + ::: + + :::{tab-item} macOS 系统 + ``` + $ ./Setup OSX40 + ``` + ::: + :::: + + :::{note} + 终端键入 `./Setup` 可查询全部选项。 + ::: + +5. 编译: + + ``` + $ ./C + ``` + + 接下来会编译一段时间,最终在 bin 目录下应该生成一百多个可执行文件。 + +6. 修改环境变量,将 CPS 的 bin 路径添加到环境变量 **PATH** 中: + ``` + $ echo 'export PATH=${HOME}/src/CPS/bin:${PATH}' >> ~/.bashrc + $ source ~/.bashrc + ``` + +7. 检查安装是否成功 + + 终端键入一些 CPS 的命令,比如 `sdisp96 -h`,若出现该命令的使用选项则表示安装成功。 diff --git a/_sources/cps/intro.md b/_sources/cps/intro.md new file mode 100644 index 00000000..5446670b --- /dev/null +++ b/_sources/cps/intro.md @@ -0,0 +1,55 @@ +# 简介 + +- 本节贡献者: {{ 田冬冬 }}(作者)、{{ 姚家园 }}(审稿) +- 最近更新日期: 2021-01-26 + +--- + +CPS,全称 Computer Programs in Seismology, +着重于理解和解释地震波在地球地壳和上地幔中的传播。 +其可以计算**水平分层模型**下的理论地震图、反演面波频散和远震 P 波接收函数、 +反演震源深度、震源机制和地震矩、处理地震波形数据以及绘图。 +整个程序包很好地集成在一起,所有程序都使用相同的地球速度模型格式、波形格式和图形格式。 + +软件包中包含了完整的[说明文档](http://www.eas.slu.edu/eqc/eqc_cps/CPS/CPS330.html), +官方主页上还给了不少[教程](http://www.eas.slu.edu/eqc/eqc_cps/TUTORIAL/), +不仅仅教授如何使用软件,同时也介绍了很多地震学的基础知识。 +即使不使用该软件,文档和教程中的一些内容也是有参考价值的。 + +此外,官方主页上还有一些[讲义](http://www.eas.slu.edu/eqc/eqc_cps/workshop.html)和[用户问题和开发者解答](http://www.eas.slu.edu/eqc/eqc_cps/Questions)值得一看。 + +## 特色功能 + +1. 合成地震图 + + - 广义射线法 + - 波数积分法 + - 模态叠加法 + - 渐进射线理论 + +2. 地球结构反演 + + - 面波频散反演 + - 远震 P 波接收函数反演 + - 面波频散和接收函数联合反演 + +3. 震源反演 + + - 面波辐射花样反演震源机制 + - 波形反演震源深度、震源机制、矩张量 + +4. GSAC + + GSAC,全称 Generic Seismic Application Coding, + 可以认为是 SAC 的重新实现,作者给了一些需要重写 SAC 的理由。 + +5. CALPLOT + + 为了实现代码的易移植性,CPS 自带了 CALPLOT 绘图包。 + +## 引用 + +- Herrmann, R. B. (2013). + Computer Programs in Seismology: An Evolving Tool for Instruction and Research. + *Seismological Research Letters*, 84(6), 1081–1088. + diff --git a/_sources/fk/index.md b/_sources/fk/index.md new file mode 100644 index 00000000..dd12d162 --- /dev/null +++ b/_sources/fk/index.md @@ -0,0 +1,19 @@ +# fk + +- 软件名称: fk +- 作者: [Lupei Zhu](https://www.eas.slu.edu/People/LZhu/home.html) +- 主页: +- 最新版本: v3.4 +- 适用平台: {{Linux}} {{macOS}} +- 编程语言: Fortran, C, Perl +- 许可协议: MIT + +--- + +:::{note} +fk v3.4 发布于 2022 年,其之后程序中的一些小问题被修复,但并未更新版本号。 +因而 fk v3.4 实际上有多个不同的小版本。 + +本教程仅在 Linux 和 macOS 系统下使用 v3.4 (下载于 2023-05-01,软件包中 +文件的最新日期为 2022-07-30)测试通过,其余版本或系统可能有所差异。 +::: diff --git a/_sources/fk/install.md b/_sources/fk/install.md new file mode 100644 index 00000000..040f99d5 --- /dev/null +++ b/_sources/fk/install.md @@ -0,0 +1,68 @@ +# 安装 + +- 本节贡献者: {{ 田冬冬 }}(作者)、{{ 姚家园 }}(审稿) +- 最近更新日期: 2023-05-01 + +--- + +{{ install_notes }} + +1. 下载: + + ``` + $ wget http://www.eas.slu.edu/People/LZhu/downloads/fk3.4.tar + ``` + +2. 解压: + + ``` + $ tar -xvf fk3.4.tar + ``` + + 将解压得到的 {file}`fk` 文件夹移至 {file}`~/src/` 目录下: + + ``` + $ mkdir -p ~/src/ + $ mv fk ~/src/ + ``` + +3. 修改 fk 源码 + + fk3.4(下载于 2023-05-01,软件包中文件的最新日期为 2022-07-30)的 {file}`Makefile` 文件 + 存在,因而需要做一些小修改方可使用。主要修改如下: + + - 需要添加 `FC=gfortran` 指定使用 gfortran 编译器 + - 需要给变量 `FFLAGS` 加上 `-ffixed-line-length-none` 使得 Fortran 一行可以超过 72 字符 + - 第 6-7 行被注释了,所以 `fk` 无法使用 SAC 提供的滤波功能。 + 若已安装 SAC ,则可以将第 6—7 行的行首注释符号 `#` 去掉,并给变量 `SACLIB` + 加上 `-no-pie` 参数(若操作系统无法使用该参数,手动删除即可) + + :::{note} + 为了便于用户使用,我们对 fk 源码做了以上修改,并提供了 patch 文件,供用户使用。 + 下载 patch 文件 {download}`fk3.4-v20220730.patch`,将其放在 fk 源码目录下, + 然后执行如下命令即可修改源码: + + ``` + $ cd ~/src/fk/ + $ patch < fk3.4-v20220730.patch + ``` + ::: + +4. 进入源码目录并编译: + + ``` + $ cd ~/src/fk/ + $ make + $ make clean + ``` + +5. 修改环境变量,将 fk 路径添加到 **PATH** 中: + + ``` + $ echo 'export PATH=${HOME}/src/fk/:${PATH}'>> ~/.bashrc + $ source ~/.bashrc + ``` + +6. 检查安装是否成功 + + 终端键入 `fk.pl` 若出现 帮助信息则表示安装成功。 diff --git a/_sources/fk/intro.md b/_sources/fk/intro.md new file mode 100644 index 00000000..184cae97 --- /dev/null +++ b/_sources/fk/intro.md @@ -0,0 +1,66 @@ +# 简介 + +- 本节贡献者: {{ 田冬冬 }}(作者)、{{ 姚家园 }}(审稿) +- 最近更新日期: 2023-05-01 + +--- + +fk 可以用于计算**水平分层模型**下的理论格林函数并合成理论地震图。 + +## 功能 + +1. 支持计算爆炸源、双力偶和单力源下的格林函数和理论地震图 +2. 支持计算静态格林函数 +3. 理论上可以计算至任意高频 + +## 命令及脚本 + +fk 中提供了如下几个命令和脚本。通常只需要调用 `fk.pl` 生成格林函数,再 +调用 `syn` 将格林函数合成为三分量理论地震图: + +- `fk`:用于计算格林函数的主程序,也是 fk 的核心程序 +- `st_fk`:用于计算静态格林函数的主程序 +- `fk.pl`:对 `fk` 和 `st_fk` 的封装,一般情况下直接使用该脚本即可 +- `syn`:用于将格林函数合成为三分量理论地震图的程序 +- `fk2mt`:将 fk 生成的格林函数转换为地震矩张量的每个分量所对应的格林函数 +- `trav`:用于计算 P、S 初至到时的辅助程序 +- `sachd`:用于修改 SAC 头段的辅助程序 + +## 参考文献 + +若想要了解 fk 的基本原理,可以阅读如下文章: + +- Haskell, N. A. (1964). + Radiation pattern of surface waves from point sources in a multi-layered medium. + *Bulletin of the Seismological Society of America*, 54(1), 377–393. + +- Takeuchi, H., & Saito, M. (1972). + Seismic surface waves. + *Methods in Computational Physics: Advances in Research and Applications*, 11, 217-295. + +- Wang, C. Y., & Herrmann, R. B. (1980). + A numerical study of P-, SV-, and SH-wave generation in a plane layered medium. + *Bulletin of the Seismological Society of America*, 70(4), 1015–1036. + +- Zhu, L., & Rivera, L. A. (2002). + A note on the dynamic and static displacements from a point source in multilayered media. + *Geophysical Journal International*, 148(3), 619–627. + + +阅读的相关建议: + +1. 若想了解如何使用 fk,直接阅读本教程即可 +2. 若想了解 fk 中每个选项的物理含义,需阅读 Zhu and Rivera (2002) +3. 若想理解代码的实现细节,则需要在 Zhu and Rivera (2002) 的基础上,阅读其余三篇文章, + 至少要阅读 Haskell (1964) +4. 需要注意,尽管这几篇文献介绍的是同一种方法,但很多符号的定义是有区别的。 + 在推导代码中的公式时应以 Zhu and Rivera (2002) 为准。 + Zhu and Rivera (2002) 区别于前面其他文献的地方主要在于,其重新定义了传播矩阵, + 并将静态解与动态解统一到同一个公式中 + +## 引用 + +- Zhu, L., & Rivera, L. A. (2002). + A note on the dynamic and static displacements from a point source in multilayered media. + *Geophysical Journal International*, 148(3), 619–627. + diff --git a/_sources/gcap3d/index.md b/_sources/gcap3d/index.md new file mode 100644 index 00000000..b5dfc60d --- /dev/null +++ b/_sources/gcap3d/index.md @@ -0,0 +1,20 @@ +# gCAP3D + +- 软件名称: gCAP3D +- 作者: [Lupei Zhu](http://www.eas.slu.edu/People/LZhu/home.html) +- 主页: +- 最新版本: v1.2 +- 适用平台: {{Linux}} {{macOS}} +- 编程语言: C、Fortran、Perl +- 许可协议: MIT + +--- + +:::{note} +gCAP3D v1.2 发布后,程序中的一些小问题被开发者修复,但并未更新版本号。 +因而 gCAP3D v1.2 实际上有一些不同的小版本。 + +本教程仅在 Linux 和 macOS 系统下使用 v1.2 +(下载于 2021-01-13,软件包中文件的最新日期为 2020-01-31) +测试通过,其余版本或系统可能有所差异。 +::: \ No newline at end of file diff --git a/_sources/gcap3d/intro.md b/_sources/gcap3d/intro.md new file mode 100644 index 00000000..b0558b3d --- /dev/null +++ b/_sources/gcap3d/intro.md @@ -0,0 +1,43 @@ +# 简介 + +- 本节贡献者: {{ 田冬冬 }}(作者)、{{ 姚家园 }}(审稿) +- 最近更新日期: 2021-01-13 + +--- + +gCAP3D 可用于反演震源机制解。 + +## 功能 + +1. 支持反演完整的地震矩张量 +2. 支持使用三维模型下的格林函数 + +## 命令及脚本 + +gCAP3D 中提供了如下几个命令和脚本: + +- `cap3D`:用于反演地震矩张量的主程序,也是 gCAP3D 的核心程序 +- `cap3D.pl`:对 `cap3D` 的封装,一般情况下直接使用该脚本即可 +- `depth.pl`:用于读取 `cap3D` 输出的不同深度震源的结果,并估计最佳震源深度 +- `mtdcmp`:将地震矩张量分解为 ISO、DC 以及 CLVD 三个部分 +- `radpttn`:将 ISO、DC 以及 CLVD 三个部分合成为归一化的地震矩张量, + 并计算 P、SV 以及 SH 波的辐射花样 + +## 引用 + +- Zhao, L. S., & Helmberger, D. V. (1994). + Source estimation from broadband regional seismograms. + *Bulletin of the Seismological Society of America*, 84(1), 91-104. + +- Zhu, L., & Helmberger, D. V. (1996). + Advancement in source estimation techniques using broadband regional seismograms. + *Bulletin of the Seismological Society of America*, 86(5), 1634-1641. + +- Zhu, L., & Ben-Zion, Y. (2013). + Parametrization of general seismic potency and moment tensors for source inversion of seismic waveform data. + *Geophysical Journal International*, 194(2), 839-843. + +- Zhu, L., & Zhou, X. (2016). + Seismic moment tensor inversion using 3D velocity model and its application to the 2013 Lushan earthquake sequence. + *Physics and Chemistry of the Earth, Parts A/B/C*, 95, 10-18. + diff --git a/_sources/index.md b/_sources/index.md new file mode 100644 index 00000000..514f8f67 --- /dev/null +++ b/_sources/index.md @@ -0,0 +1,47 @@ +# 地震"学"软件 + +欢迎阅读由[地震"学"小组](https://github.com/orgs/seismo-learn/people)整理和维护的《地震"学"软件》。 + +本教程主要介绍一些地震学常用软件的安装及用法,并提供一些实用示例,供地震学专业的 +学生和工作者学习和使用。 + +欢迎使用这些软件的用户参与到教程的维护与更新中,以进一步改进和完善本教程, +造福更多的地震学工作者。 请通过如下方式给予反馈: + +1. {octicon}`comment-discussion` [留言参与讨论](https://github.com/orgs/seismo-learn/discussions) +2. {octicon}`issue-opened` 在教程源码仓库下[提交 Issue](https://github.com/seismo-learn/software/issues) +3. {octicon}`git-pull-request` 修改文档并[提交 Pull Request](https://github.com/seismo-learn/software/pulls) + +::::{grid} 1 2 2 4 +:gutter: 4 4 3 3 + +:::{grid-item-card} 数据下载 +- [](obspy/index.md) +- [](sod/index.md) +::: + +:::{grid-item-card} 数据处理 +- [](cps/index.md) +- [](obspy/index.md) +::: + +:::{grid-item-card} 震相走时 +- [](obspy/index.md) +- [](taup/index.md) +::: + +:::{grid-item-card} 合成地震图 +- [](cps/index.md) +- [](fk/index.md) +::: + +:::{grid-item-card} 震源机制反演 +- [](cps/index.md) +- [](gcap3d/index.md) +::: + +:::{grid-item-card} 实用工具 +- [](utilities/distaz.md) +- [](/utilities/saclst.md) +::: +:::: diff --git a/_sources/intel-oneapi/index.md b/_sources/intel-oneapi/index.md new file mode 100644 index 00000000..39cdd68c --- /dev/null +++ b/_sources/intel-oneapi/index.md @@ -0,0 +1,105 @@ +# Intel OneAPI 软件开发工具包 + +- 本节贡献者: {{ 田冬冬 }}(作者)、{{ 姚家园 }}(作者) +- 最近更新时间: 2022-01-08 + +--- + +[Intel oneAPI](https://software.intel.com/content/www/us/en/develop/tools/oneapi.html) +是 Intel 公司提供的免费软件开发工具包。该工具包中包含了 C/C++ 编译器(`icc` 命令) +和 Fortran 编译器(`ifort` 命令),以及 MKL 数学库、MPI 并行库等众多软件开发工具。 + +:::::{tab-set} + +::::{tab-item} Fedora +Fedora 系统下,官方手册提供了[多种安装方式](https://www.intel.com/content/www/us/en/developer/articles/guide/installation-guide-for-oneapi-toolkits.html)。 +这里,我们推荐使用 ``dnf`` 安装。 + +下载 {file}`.repo` 文件 {download}`oneapi.repo`,并将其放在 {file}`/etc/yum.repos.d` 目录下: +``` +$ sudo mv oneapi.repo /etc/yum.repos.d/ +``` + +根据自己的需要安装 C/C++ 或 Fortran 编译器,默认安装目录是 {file}`/opt/intel/oneapi`: +``` +# 安装 C/C++ 编译器 +$ sudo dnf install intel-oneapi-compiler-dpcpp-cpp-and-cpp-classic + +# 安装 Fortran 编译器 +$ sudo dnf install intel-oneapi-compiler-fortran +``` + +安装完成后还需要配置环境变量: +``` +$ echo "source /opt/intel/oneapi/setvars.sh >/dev/null 2>&1" >> ~/.bashrc +``` + +:::{dropdown} Intel 软件开发工具列表 +使用如下命令可以列出 Intel 软件仓库提供的所有软件包: +``` +$ sudo -E dnf --disablerepo="*" --enablerepo="oneAPI" list available +``` +::: +:::: + +::::{tab-item} Ubuntu +Ubuntu 系统下,官方手册提供了[多种安装方式](https://www.intel.com/content/www/us/en/developer/articles/guide/installation-guide-for-oneapi-toolkits.html)。 +这里,我们推荐使用 ``apt`` 安装。 + +添加 Intel 软件仓库: + +``` +# 下载 Intel 仓库公钥并添加到 apt 源密钥环中 +$ wget https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB +$ sudo apt-key add GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB +# 删除公钥文件 +$ rm GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB + +# 添加软件仓库 +$ sudo add-apt-repository "deb https://apt.repos.intel.com/oneapi all main" +$ sudo apt update +``` + +根据自己的需要安装 C/C++ 或 Fortran 编译器,默认安装目录是 {file}`/opt/intel/oneapi`: +``` +# 安装 C/C++ 编译器 +$ sudo apt install intel-oneapi-compiler-dpcpp-cpp-and-cpp-classic + +# 安装 Fortran 编译器 +$ sudo apt install intel-oneapi-compiler-fortran +``` + +安装完成后还需要配置环境变量: +``` +$ echo "source /opt/intel/oneapi/setvars.sh >/dev/null 2>&1" >> ~/.bashrc +``` + +:::{dropdown} Intel 软件开发工具列表 +使用如下命令可以列出 Intel 软件仓库提供的所有软件包: +``` +$ sudo -E apt-cache pkgnames intel +``` +::: +:::: + +::::{tab-item} macOS +macOS 下,官方手册提供了[多种安装方式](https://www.intel.com/content/www/us/en/developer/articles/guide/installation-guide-for-oneapi-toolkits.html)。 +这里,我们下载离线安装包进行安装。 + +根据自己的需要,从官网下载 [C/C++ 编辑器](https://software.intel.com/content/www/us/en/develop/articles/oneapi-standalone-components.html#compilerclassic) +或 [Fortran 编译器](https://software.intel.com/content/www/us/en/develop/articles/oneapi-standalone-components.html#fortran) 的离线安装包(Offline), +然后直接双击安装。默认安装目录是 {file}`/opt/intel/oneapi`。 + +安装完成后还需要配置环境变量: +``` +$ echo "source /opt/intel/oneapi/setvars.sh >/dev/null 2>&1" >> ~/.zshrc +``` + +:::{dropdown} Intel 软件开发工具列表 +Intel oneAPI 提供了众多软件开发工具,用户可以根据需要到 +[Intel 官网](https://software.intel.com/content/www/us/en/develop/articles/oneapi-standalone-components.html) +下载其他 macOS 离线安装包并安装。 +::: +:::: + +::::: diff --git a/_sources/java/index.md b/_sources/java/index.md new file mode 100644 index 00000000..5d1c31ac --- /dev/null +++ b/_sources/java/index.md @@ -0,0 +1,41 @@ +# Java 运行环境 + +- 本节贡献者: {{ 田冬冬 }}(作者)、{{ 姚家园 }}(审稿) +- 最近更新时间: 2021-01-26 + +--- + +运行 Java 语言写的程序时,需要安装 Java 运行环境。 + +在终端键入 `java -version`,若显示版本信息,则表示 Java 运行环境已安装: + +``` +$ java -version +openjdk 14.0.2 2020-07-14 +OpenJDK Runtime Environment (build 14.0.2+12-46) +OpenJDK 64-Bit Server VM (build 14.0.2+12-46, mixed mode, sharing) +``` + +否则,则需要安装 Java 运行环境。 + +::::{tab-set} + +:::{tab-item} Fedora +``` +$ sudo yum install java-latest-openjdk +``` +::: + +:::{tab-item} Ubuntu/Debian +``` +$ sudo apt install default-jdk +``` +::: + +:::{tab-item} macOS +``` +$ brew install openjdk +$ sudo ln -sfn $(brew --prefix)/opt/openjdk/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk.jdk +``` +::: +:::: diff --git a/_sources/obspy/index.md b/_sources/obspy/index.md new file mode 100644 index 00000000..8ce13be6 --- /dev/null +++ b/_sources/obspy/index.md @@ -0,0 +1,17 @@ +# ObsPy + +- 软件名称: ObsPy +- 作者: ObsPy Development Team +- 主页: +- 官方文档: +- 源码地址: +- 最新版本: ![GitHub release)](https://img.shields.io/github/v/release/obspy/obspy) +- 适用平台: {{Linux}} {{macOS}} {{Windows}} +- 编程语言: Python +- 许可协议: LGPL + +--- + +:::{note} +本教程仅在 Linux 系统下使用 ObsPy v1.4.0 测试通过,其余版本或系统可能有所差异。 +::: diff --git a/_sources/obspy/install.md b/_sources/obspy/install.md new file mode 100644 index 00000000..9a77ce34 --- /dev/null +++ b/_sources/obspy/install.md @@ -0,0 +1,21 @@ +# 安装 + +- 本节贡献者: {{ 姚家园 }}(作者)、{{ 田冬冬 }}(作者) +- 最近更新日期: 2022-07-04 + +--- + +1. {doc}`安装并配置 Anaconda/Miniconda ` + +2. 安装 ObsPy 及其依赖: + ``` + $ conda install obspy cartopy + ``` + +3. 检查安装是否成功 + + 终端键入以下命令,若出现 ObsPy 版本号则表示安装成功: + ``` + $ python -c "import obspy; print(obspy.__version__)" + 1.4.0 + ``` diff --git a/_sources/obspy/instrument-response.ipynb b/_sources/obspy/instrument-response.ipynb new file mode 100644 index 00000000..a182887b --- /dev/null +++ b/_sources/obspy/instrument-response.ipynb @@ -0,0 +1,339 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "140299d7", + "metadata": {}, + "source": [ + "# 仪器响应\n", + "\n", + "- 本节贡献者: {{田冬冬}}(作者)、{{姚家园}}(审稿)\n", + "- 最近更新日期: 2023-05-13\n", + "\n", + "---\n", + "\n", + "## 利用 SAC 零极点文件去除仪器响应\n", + "\n", + "SAC 零极点文件是一种常见的仪器响应格式。若有 SAC 零极点格式的仪器响应文件,\n", + "则可以使用 {func}`obspy.io.sac.sacpz.attach_paz` 函数将对应的零极点文件添加到\n", + "{class}`~obspy.core.trace.Trace` 的 `stats.paz` 属性中,再使用\n", + "{meth}`Trace.simulate ` 函数去除仪器响应。\n", + "\n", + "首先准备一些示例所需的波形数据和 SAC 零极点文件:" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "b008e009", + "metadata": {}, + "outputs": [], + "source": [ + "from obspy import UTCDateTime\n", + "from obspy.clients.fdsn import Client\n", + "from obspy.clients.iris.client import Client as irisClient\n", + "\n", + "starttime=UTCDateTime(\"2022-09-22T06:18:00\")\n", + "\n", + "# 下载 IU.ANMO 台站的三分量波形数据\n", + "client = Client(\"IRIS\")\n", + "st = client.get_waveforms(\"IU\", \"ANMO\", \"00\", \"BH?\", starttime, starttime + 720)\n", + "\n", + "# 下载 IU.ANMO 台站三分量对应的 SAC 零极点文件\n", + "irisclient = irisClient()\n", + "irisclient.sacpz(\"IU\", \"ANMO\", \"00\", \"BH1\", starttime, filename=\"IU.ANMO.00.BH1.SACPZ\")\n", + "irisclient.sacpz(\"IU\", \"ANMO\", \"00\", \"BH2\", starttime, filename=\"IU.ANMO.00.BH2.SACPZ\")\n", + "irisclient.sacpz(\"IU\", \"ANMO\", \"00\", \"BHZ\", starttime, filename=\"IU.ANMO.00.BHZ.SACPZ\")" + ] + }, + { + "cell_type": "markdown", + "id": "5465e699", + "metadata": {}, + "source": [ + "下面以其中一个波形为例,展示如何使用 SAC 零极点文件去除仪器响应:" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "ef03541e", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "IU.ANMO.00.BHZ | 2022-09-22T06:18:00.019538Z - 2022-09-22T06:29:59.994538Z | 40.0 Hz, 28800 samples\n" + ] + } + ], + "source": [ + "tr = st[2].copy() # 垂直分量\n", + "print(tr)" + ] + }, + { + "cell_type": "markdown", + "id": "c299da43", + "metadata": {}, + "source": [ + "{func}`obspy.io.sac.sacpz.attach_paz` 函数会读取并解析 SAC 零极点文件,并将\n", + "解析后的结果附加到 `Trace` 的 `stats.paz` 属性中:" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "eb25bbe1", + "metadata": {}, + "outputs": [], + "source": [ + "from obspy.io.sac.sacpz import attach_paz\n", + "\n", + "attach_paz(tr, paz_file=\"IU.ANMO.00.BHZ.SACPZ\")" + ] + }, + { + "cell_type": "markdown", + "id": "8d6267ef", + "metadata": {}, + "source": [ + "`Trace.stats.paz` 属性是一个词典,包含了 `poles`、`zeros` 和 `gain` 等属性:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "ba6042cc", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'digitizer_gain': 1.0,\n", + " 'gain': 1.093951e-10,\n", + " 'poles': [(-0.0123105-0.0124009j),\n", + " (-0.0123105+0.0124009j),\n", + " (-4.30268+0j),\n", + " (-4.30268+0j),\n", + " (-353.203+0j),\n", + " (-484.23-473.792j),\n", + " (-484.23+473.792j)],\n", + " 'seismometer_gain': 1.0,\n", + " 'sensitivity': 1.0,\n", + " 'zeros': [0j,\n", + " 0j,\n", + " 0j,\n", + " (-4.15782+0j),\n", + " (-4.15782+0j),\n", + " (-4957930+0j),\n", + " (-0.648766-7735670j),\n", + " (-0.648766+7735670j),\n", + " (-10615700+0j)]}\n" + ] + } + ], + "source": [ + "from pprint import pprint\n", + "pprint(dict(tr.stats.paz))" + ] + }, + { + "cell_type": "markdown", + "id": "da83db8d", + "metadata": {}, + "source": [ + "使用 {meth}`Trace.simulate ` 函数去除仪器响应:" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "a5625864", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "IU.ANMO.00.BHZ | 2022-09-22T06:18:00.019538Z - 2022-09-22T06:29:59.994538Z | 40.0 Hz, 28800 samples" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "tr.simulate(paz_remove=tr.stats.paz)" + ] + }, + { + "cell_type": "markdown", + "id": "4b65e2bd", + "metadata": {}, + "source": [ + "对于包含多个波形的 `Stream` 而言,同理。可以对 `Stream` 中的每个 `Trace` 进行循环,\n", + "为每个 `Trace` 附加对应的 SAC 零极点文件并去除仪器响应:\n", + "```\n", + "for tr in st:\n", + " attach_paz(tr, paz_file=f\"{tr.id}.SACPZ\")\n", + " tr.simulate(paz_remove=tr.stats.paz)\n", + "```\n", + "也可以在为每个 `Trace` 附加 SAC 零极点文件后,调用\n", + "{meth}`Stream.simulate ` 函数批量去除\n", + "仪器响应:\n", + "```\n", + "for tr in st:\n", + " attach_paz(tr, paz_file=f\"{tr.id}.SACPZ\")\n", + "st.simulate(paz_remove=\"self\")\n", + "```\n", + "\n", + "## 校正到 WWSP 仪器响应\n", + "\n", + "在使用地核震相研究地核结构时,有时会需要将波形校正到 WWSP\n", + "(即 World Wide Standard Seismograph Station short period)仪器响应。\n", + "SAC 软件中内置了 WWSP 仪器响应,可以直接使用命令 `transfer ... to wwsp` 将\n", + "波形校正到 WWSP 仪器。而 ObsPy 中没有内置 WWSP 仪器响应的信息,因而需要自行定义\n", + "WWSP 仪器响应信息并做校正。\n", + "\n", + "准备示例所需数据:" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "6cc2d58e", + "metadata": {}, + "outputs": [], + "source": [ + "from obspy import UTCDateTime\n", + "from obspy.clients.fdsn import Client\n", + "\n", + "starttime=UTCDateTime(\"2022-09-22T06:18:00\")\n", + "client = Client(\"IRIS\")\n", + "st = client.get_waveforms(\"IU\", \"ANMO\", \"00\", \"BH?\", starttime, starttime + 720)" + ] + }, + { + "cell_type": "markdown", + "id": "2476967f", + "metadata": {}, + "source": [ + "定义 WWSP 仪器响应,需要零极点和增益信息。这些信息可以从 SAC 源代码\n", + "{file}`sac/src/icm/wwsp.c` 中获得。定义如下:" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "4319a0fa", + "metadata": {}, + "outputs": [], + "source": [ + "paz_wwsp = {\n", + " \"poles\": [\n", + " -5.0136607 + 6.4615109j,\n", + " -5.0136607 - 6.4615109j,\n", + " -8.2981509 + 0.0j,\n", + " -8.6940765 - 7.1968661j,\n", + " -8.6940765 + 7.1968661j,\n", + " ],\n", + " \"zeros\": [0j, 0j, 0j],\n", + " \"gain\": 397.54767,\n", + " \"sensitivity\": 1.0,\n", + "}" + ] + }, + { + "cell_type": "markdown", + "id": "fd55a472", + "metadata": {}, + "source": [ + "定义好 WWSP 仪器响应后,即可使用 {meth}`Stream.simulate `\n", + "函数去除仪器响应:" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "9bb09c4c", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "3 Trace(s) in Stream:\n", + "IU.ANMO.00.BH1 | 2022-09-22T06:18:00.019538Z - 2022-09-22T06:29:59.994538Z | 40.0 Hz, 28800 samples\n", + "IU.ANMO.00.BH2 | 2022-09-22T06:18:00.019538Z - 2022-09-22T06:29:59.994538Z | 40.0 Hz, 28800 samples\n", + "IU.ANMO.00.BHZ | 2022-09-22T06:18:00.019538Z - 2022-09-22T06:29:59.994538Z | 40.0 Hz, 28800 samples" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "st.simulate(paz_simulate=paz_wwsp)" + ] + }, + { + "cell_type": "markdown", + "id": "077aec1b", + "metadata": {}, + "source": [ + "该方法也同样适用于其他 SAC 内置仪器响应。" + ] + } + ], + "metadata": { + "jupytext": { + "text_representation": { + "extension": ".md", + "format_name": "myst", + "format_version": 0.13, + "jupytext_version": "1.13.0" + } + }, + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.11" + }, + "source_map": [ + 12, + 29, + 45, + 48, + 51, + 55, + 59, + 61, + 64, + 66, + 68, + 95, + 102, + 106, + 119, + 122, + 124 + ] + }, + "nbformat": 4, + "nbformat_minor": 5 +} \ No newline at end of file diff --git a/_sources/obspy/instrument-response.md b/_sources/obspy/instrument-response.md new file mode 100644 index 00000000..9fa64003 --- /dev/null +++ b/_sources/obspy/instrument-response.md @@ -0,0 +1,125 @@ +--- +jupytext: + text_representation: + extension: .md + format_name: myst + format_version: 0.13 + jupytext_version: 1.13.0 +kernelspec: + display_name: Python 3 + language: python + name: python3 +--- + +# 仪器响应 + +- 本节贡献者: {{田冬冬}}(作者)、{{姚家园}}(审稿) +- 最近更新日期: 2023-05-13 + +--- + +## 利用 SAC 零极点文件去除仪器响应 + +SAC 零极点文件是一种常见的仪器响应格式。若有 SAC 零极点格式的仪器响应文件, +则可以使用 {func}`obspy.io.sac.sacpz.attach_paz` 函数将对应的零极点文件添加到 +{class}`~obspy.core.trace.Trace` 的 `stats.paz` 属性中,再使用 +{meth}`Trace.simulate ` 函数去除仪器响应。 + +首先准备一些示例所需的波形数据和 SAC 零极点文件: +```{code-cell} ipython3 +from obspy import UTCDateTime +from obspy.clients.fdsn import Client +from obspy.clients.iris.client import Client as irisClient + +starttime=UTCDateTime("2022-09-22T06:18:00") + +# 下载 IU.ANMO 台站的三分量波形数据 +client = Client("IRIS") +st = client.get_waveforms("IU", "ANMO", "00", "BH?", starttime, starttime + 720) + +# 下载 IU.ANMO 台站三分量对应的 SAC 零极点文件 +irisclient = irisClient() +irisclient.sacpz("IU", "ANMO", "00", "BH1", starttime, filename="IU.ANMO.00.BH1.SACPZ") +irisclient.sacpz("IU", "ANMO", "00", "BH2", starttime, filename="IU.ANMO.00.BH2.SACPZ") +irisclient.sacpz("IU", "ANMO", "00", "BHZ", starttime, filename="IU.ANMO.00.BHZ.SACPZ") +``` + +下面以其中一个波形为例,展示如何使用 SAC 零极点文件去除仪器响应: +```{code-cell} ipython3 +tr = st[2].copy() # 垂直分量 +print(tr) +``` + +{func}`obspy.io.sac.sacpz.attach_paz` 函数会读取并解析 SAC 零极点文件,并将 +解析后的结果附加到 `Trace` 的 `stats.paz` 属性中: +```{code-cell} ipython3 +from obspy.io.sac.sacpz import attach_paz + +attach_paz(tr, paz_file="IU.ANMO.00.BHZ.SACPZ") +``` +`Trace.stats.paz` 属性是一个词典,包含了 `poles`、`zeros` 和 `gain` 等属性: +```{code-cell} ipython3 +from pprint import pprint +pprint(dict(tr.stats.paz)) +``` +使用 {meth}`Trace.simulate ` 函数去除仪器响应: +```{code-cell} ipython3 +tr.simulate(paz_remove=tr.stats.paz) +``` + +对于包含多个波形的 `Stream` 而言,同理。可以对 `Stream` 中的每个 `Trace` 进行循环, +为每个 `Trace` 附加对应的 SAC 零极点文件并去除仪器响应: +``` +for tr in st: + attach_paz(tr, paz_file=f"{tr.id}.SACPZ") + tr.simulate(paz_remove=tr.stats.paz) +``` +也可以在为每个 `Trace` 附加 SAC 零极点文件后,调用 +{meth}`Stream.simulate ` 函数批量去除 +仪器响应: +``` +for tr in st: + attach_paz(tr, paz_file=f"{tr.id}.SACPZ") +st.simulate(paz_remove="self") +``` + +## 校正到 WWSP 仪器响应 + +在使用地核震相研究地核结构时,有时会需要将波形校正到 WWSP +(即 World Wide Standard Seismograph Station short period)仪器响应。 +SAC 软件中内置了 WWSP 仪器响应,可以直接使用命令 `transfer ... to wwsp` 将 +波形校正到 WWSP 仪器。而 ObsPy 中没有内置 WWSP 仪器响应的信息,因而需要自行定义 +WWSP 仪器响应信息并做校正。 + +准备示例所需数据: +```{code-cell} ipython +from obspy import UTCDateTime +from obspy.clients.fdsn import Client + +starttime=UTCDateTime("2022-09-22T06:18:00") +client = Client("IRIS") +st = client.get_waveforms("IU", "ANMO", "00", "BH?", starttime, starttime + 720) +``` + +定义 WWSP 仪器响应,需要零极点和增益信息。这些信息可以从 SAC 源代码 +{file}`sac/src/icm/wwsp.c` 中获得。定义如下: +```{code-cell} ipython +paz_wwsp = { + "poles": [ + -5.0136607 + 6.4615109j, + -5.0136607 - 6.4615109j, + -8.2981509 + 0.0j, + -8.6940765 - 7.1968661j, + -8.6940765 + 7.1968661j, + ], + "zeros": [0j, 0j, 0j], + "gain": 397.54767, + "sensitivity": 1.0, +} +``` +定义好 WWSP 仪器响应后,即可使用 {meth}`Stream.simulate ` +函数去除仪器响应: +```{code-cell} ipython +st.simulate(paz_simulate=paz_wwsp) +``` +该方法也同样适用于其他 SAC 内置仪器响应。 diff --git a/_sources/obspy/intro.md b/_sources/obspy/intro.md new file mode 100644 index 00000000..a6c10fdb --- /dev/null +++ b/_sources/obspy/intro.md @@ -0,0 +1,55 @@ +# 简介 + +- 本节贡献者: {{ 姚家园 }}(作者)、{{ 田冬冬 }}(审稿) +- 最近更新日期: 2021-01-02 + +--- + +ObsPy 是地震学数据处理的 Python 软件包,极大促进了地震学应用程序的快速开发。 +其可以用来读写多种地震学数据格式,下载地震目录、台站元数据和波形数据,以及处理和分析波形数据等, +满足了日常科研中与地震学数据相关的大部分需求。 + +## 特色功能 + +日常的地震学科研工作需要下载、处理和分析波形数据,然后提取出有效的 +观测物理量(如震相到时、振幅),用来反演震源和地下结构。下载、处理和分析波形数据的 +一般步骤如下: + +1. 下载地震目录 +2. 下载台站元数据,如台站位置和仪器响应 +3. 下载波形数据 +4. 波形数据格式转换 +5. 匹配地震和台站元数据 +6. 波形数据处理 +7. 波形数据分析 + +其他地震学软件(如 SOD、SAC)往往只具有以上一个或几个功能,ObsPy 的特色在于: + +1. 可以完成以上所有步骤 +2. 可以使用丰富的 Python 软件包,如 [NumPy](https://numpy.org/)、 + [SciPy](https://www.scipy.org/)、 + [Matplotlib](https://matplotlib.org/)、 + [pandas](https://pandas.pydata.org/) 等 +3. 支持目前绝大多数地震学数据格式的读写 +4. 生态良好,已有许多基于 ObsPy 开发的软件包 + +## 引用 + +如果使用 ObsPy(直接使用或作为其他程序包的依赖包)开展研究工作并发表了学术文章, +可以引用以下参考文献的任意一篇: + +- Beyreuther, M., Barsch, R., Krischer, L., Megies, T., Behr, Y., & Wassermann, J. (2010). + ObsPy: A Python Toolbox for Seismology. + *Seismological Research Letters*, 81(3), 530–533. + +- Megies, T., Beyreuther, M., Barsch, R., Krischer, L., & Wassermann, J. (2011). + ObsPy – What can it do for data centers and observatories? + *Annals Of Geophysics*, 54(1), 47-58. + +- Krischer, L., Megies, T., Barsch, R., Beyreuther, M., Lecocq, T., Caudron, C., & Wassermann, J. (2015). + ObsPy: a bridge for seismology into the scientific Python ecosystem. + *Computational Science & Discovery*, 8(1), 014003. + + +此外,也可引用实际使用的 ObsPy 版本, +如 ObsPy 1.4.0([10.5281/zenodo.6645832](https://doi.org/10.5281/zenodo.6645832))。 diff --git a/_sources/sod/index.md b/_sources/sod/index.md new file mode 100644 index 00000000..3218749f --- /dev/null +++ b/_sources/sod/index.md @@ -0,0 +1,17 @@ +# SOD + +- 软件名称: SOD +- 作者: [Philip Crotwell](https://github.com/crotwell) +- 主页: +- 官方文档: +- 源码地址: +- 最新版本: ![GitHub release)](https://img.shields.io/github/v/release/crotwell/sod) +- 适用平台: {{Linux}} {{macOS}} {{Windows}} +- 编程语言: Java +- 许可协议: GPL + +--- + +:::{note} +本教程仅在 Linux 和 macOS 系统下使用 v3.2.10 测试通过,其余版本或系统可能有所差异。 +::: diff --git a/_sources/sod/install.md b/_sources/sod/install.md new file mode 100644 index 00000000..fab8b4a8 --- /dev/null +++ b/_sources/sod/install.md @@ -0,0 +1,45 @@ +# 安装 + +- 本节贡献者: {{ 田冬冬 }}(作者)、{{ 姚家园 }}(审稿) +- 最近更新日期: 2020-12-30 + +--- + +{{ install_notes }} + +1. {doc}`安装 Java 运行环境 ` + +2. 下载: + + ``` + $ wget http://www.seis.sc.edu/downloads/sod/3.2.10/sod-3.2.10.tgz + ``` + +3. 解压: + + ``` + $ tar -xvf sod-3.2.10.tgz + ``` + +4. 将 SOD 安装到 {file}`~/opt/` 目录下: + + ``` + $ mkdir -p ~/opt/ + $ mv sod-3.2.10 ~/opt/ + ``` + +5. 修改环境变量,将 SOD 的 bin 路径添加到 PATH 中: + + ``` + $ echo 'export PATH=${HOME}/opt/sod-3.2.10/bin:${PATH}' >> ~/.bashrc + $ source ~/.bashrc + ``` + +6. 检查安装是否成功 + + 终端键入 `sod -v` 若出现 SOD 版本号则表示安装成功: + + ``` + $ sod -v + SOD 3.2.10 + ``` diff --git a/_sources/sod/intro.md b/_sources/sod/intro.md new file mode 100644 index 00000000..8ba9608b --- /dev/null +++ b/_sources/sod/intro.md @@ -0,0 +1,72 @@ +# 简介 + +- 本节贡献者: {{ 田冬冬 }}(作者)、{{ 姚家园 }}(审稿) +- 最近更新日期: 2021-07-10 + +--- + +SOD,全称是 Standing Order for Data,可以自动筛选并下载地震目录、台站元数据和波形数据, +并对波形数据做预处理。其具有高度可定制化的特点,可以满足日常科研中地震学数据下载的大部分需求。 + +## 特色功能 + +申请地震波形数据的一般流程为: + +1. 获取完整的地震目录,根据需求筛选出自己需要的地震事件 +2. 获取台站列表,根据需求对台站通道码、位置、震中距、方位角等进行筛选 +3. 根据发震时刻、震相走时、震中距等信息确定要申请的波形数据的起始、结束时间 +4. 申请数据 +5. 下载数据 +6. 数据解压以及预处理 + +SOD 的特色在于: + +1. 只需要一个配置文件(SOD 中称为 recipe)即可完成上面提到的全部步骤 + +2. 灵活的地震筛选规则: + + - 可以在 USGS、IRIS 等数据中心提供的地震目录的基础上,根据发震时刻、震源区域、深度、 + 震级等条件进行筛选 + - 可以由用户自行提供地震目录(需要满足 SOD 对地震目录的格式要求) + - 可以构建虚拟地震以申请连续波形数据 + - ... + +3. 灵活的台站筛选规则: + + - 可以选择一个或多个指定的台网、台站或通道 + - 可以筛选某个区域内的台站 + - 可以筛选在某个特定点的特定距离、方位角、反方位角内的台站 + - 可以下载指定通道的仪器响应文件 + - ... + +4. 灵活的波形筛选规则: + + - 仅下载震中距、方位角、反方位角满足条件的数据 + - 仅当某个震相存在时才下载该台站的数据(如仅当震中距大于 115 时才有 PKIKP 震相) + - 仅当地震与台站的连线中点位于某个区域是才下载数据(比如想要用 PcP 研究某个特定区域的核幔边界结构) + - 仅当指定震相的前后多少秒内没有其他震相干扰时才下载数据 + - 灵活的时窗截取规则,可以根据发震时刻、自动计算的震相理论到时等来设置数据时窗 + - 可直接生成 BREQ_FAST 文件以通过邮件方式申请数据 + - 可以将波形数据以多种格式保存到磁盘中,如 miniSEED、SAC、ASCII、WAV 等格式 + - ... + +5. 数据并行下载,速度快无延迟 + +6. 将数据写入磁盘前/后,可对数据进行常见的数据预处理 + +除了以上特色外,SOD 的配置文件有一个优点和一个明显的缺点: + +- 优点:入门很容易,因为别人写的配置文件一看就懂,修改起来也简单 +- 缺点:从头写配置文件较困难,因为 SOD 本身其实较为复杂 + +因此,[地震“学”小组](https://github.com/orgs/seismo-learn/people)创建了 +[SOD-recipes](https://github.com/seismo-learn/SOD-recipes) 项目, +用于收集、整理以及维护 SOD 的常见用法。用户可以通过阅读、修改和使用这些配置文件片段来理解 SOD 的用法。 +也欢迎更多用户贡献自己的配置文件。 + +## 引用 + +- Owens, T. J., Crotwell, H. P., Groves, C., & Oliver-Paul, P. (2004). + SOD: STANDING ORDER FOR DATA. + *Seismological Research Letters*, 75(4), 515–520. + diff --git a/_sources/sod/recipe.md b/_sources/sod/recipe.md new file mode 100644 index 00000000..fb23619c --- /dev/null +++ b/_sources/sod/recipe.md @@ -0,0 +1,156 @@ +# 配置文件 + +- 本节贡献者: {{ 田冬冬 }}(作者)、{{ 姚家园 }}(作者) +- 最近更新日期: 2022-08-16 + +--- + +运行 SOD 需要使用配置文件(称为 recipe),是一个 XML 格式的纯文本文件,其定义了数据筛选和处理的一系列规则。 +在终端输入以下命令,即可按照配置文件(假设文件名为 {file}`recipe.xml`)定义的规则下载数据: + +``` +$ sod -f recipe.xml +``` + +## 初识配置文件 + +### 运行第一个配置文件 + +在终端中执行以下命令,会生成一个名为 {file}`demo.xml` 的配置文件示例: + +``` +$ sod --demo -r > demo.xml +``` + +执行以下命令,运行该配置文件(大约需要一分钟): + +``` +$ sod -f demo.xml +Congratulations, valid recipe. +262 km WNW of Haveluloto, Tonga (-20.6, -177.7) 378 km 2003/01/04 05:15:03 UTC 6.5 mwc +25 km WSW of Bolitoc, Philippines (15.7, 119.7) 10 km 2003/01/06 23:43:50 UTC 6.0 mwb +... +... +Channel: II.AAK.00.BHE +Channel: II.AAK.00.BHN +Channel: II.AAK.00.BHZ +... +... +Got 1 seismograms for II.AAK.00.BHE for eq on 2003/01/06 23:43:50 UTC +Got 1 seismograms for II.ARU.00.BHE for eq on 2003/01/06 23:43:50 UTC +... +... +``` + +运行后,可以看到一系列输出信息: + +- `Congratulations, valid recipe.` 表明当前配置文件可以使用 +- 事件信息,如 `262 km WNW of Haveluloto, Tonga (-20.6, -177.7)` +- 通道信息,如 `Channel: II.AAK.00.BHE` +- 获取地震波形信息,如 `Got 1 seismograms for II.AAK.00.BHE` + +下载的地震波形数据保存在 {file}`seismograms` 目录中,每个地震事件的波形数据则默认保存在以发震 +发震时刻命名的目录中。 + +### SOD 数据库文件 + +每次执行 SOD 时,SOD 还会在当前目录生成一些日志文件(文件名以 `log` 为后缀)和一个数据库文件夹 {file}`SodDb`。 +这些日志文件记录了 SOD 的运行和报错信息。数据库文件夹里的数据库文件中包含了单次运行时的全部信息, +如选中了哪些事件、哪些台站、事件台站对所对应的波形,也包含了哪些数据已经下载、哪些数据尚未下载的信息。 + +在下载数据过程中,若 SOD 意外退出,或由于网络等问题某些数据未成功下载,仍可重新执行 SOD 命令, +继续下载那些尚未被下载的数据,即实现断点续传的功能,这是因为数据库记录了哪些数据已经下载、 +哪些数据尚未下载。再次运行 SOD 时,会有以下提示: + +``` +The database for this run, SodDb/SodDb.log appears to already exist. +This is fine if you want to restart a run that crashed, but if you are trying to +start a fresh SOD run, you may wish to delete this database directory first. +Otherwise, SOD will consider any work in this database as already completed and will not redo it. +``` + +若修改了当前目录中的配置文件,再次运行 SOD 前,建议删除上一次运行时生成的数据库文件夹 {file}`SodDb`。 + +## 配置文件结构 + +SOD 配置文件是一个 XML 格式的纯文本文件。可以用文本编辑器查看示例配置文件 {file}`demo.xml`, +对配置文件结构和格式有个初步印象。 + +:::{dropdown} XML 格式简介 + +XML 的全称是 E**x**tensible **M**arkup **L**anguage,即可扩展标记语言, +用来结构化、存储以及传输信息。这种文件格式是一种“树”状结构,从“根部”开始,不断扩展到“枝叶”。 +一个简单的 XML 文件如下: + +```xml + + + + + Child One + 10 + + + Child Two + 8 + + + +``` + +其中: + +- `` 是 XML 声明,定义了 XML 的版本信息(`1.0`) +- `` 和 `` 是一个根标签的开始标签和关闭标签 +- 标签可以嵌套多层,如 `root` 标签嵌套了一系列子标签 +- 所有标签都必须有关闭标签 +- 标签区分大小写 +- 若某个标签中没有嵌套其他标签,则该标签可以简写为 `` 的形式,例如 `` +- `` 用于注释 +::: + +配置文件的根标签为 `sod`,根标签下有五个子标签,分别是: + +- `properties`:SOD 程序相关的属性配置 [一般不用] +- `eventArm`:事件筛选规则 +- `networkArm`:台站/通道筛选规则 +- `waveformArm`:波形数据筛选规则、下载和处理波形数据 +- `waveformVectorArm`:处理三分量波形数据 [不常用] + +通常我们只需要用到 `eventArm`、`networkArm`、`waveformArm` 。 +`eventArm` 和 `networkArm` 是互相独立的, +而 `waveformArm` 则依赖于 `eventArm` 和 `networkArm`。 + +```{figure} http://www.seis.sc.edu/sod/images/documentation/tutorials/arm_overview.png +:align: center +:width: 50% + +SOD 配置文件的结构 +``` + +所有的配置文件都符合如下基本结构: + +```xml + + + + + + + + + + + + + + + + + + + + + + +``` diff --git a/_sources/taup/index.md b/_sources/taup/index.md new file mode 100644 index 00000000..5839790a --- /dev/null +++ b/_sources/taup/index.md @@ -0,0 +1,17 @@ +# TauP + +- 软件名称: TauP +- 作者: [Philip Crotwell](https://github.com/crotwell)、Thomas J. Owens +- 主页: +- 官方文档: +- 源码地址: +- 最新版本: ![GitHub release)](https://img.shields.io/github/v/release/crotwell/TauP) +- 适用平台: {{Linux}} {{macOS}} {{Windows}} +- 编程语言: Java +- 许可协议: LGPL + +--- + +:::{note} +本教程仅在 Linux 和 macOS 系统下使用 v2.6.1 测试通过,其余版本或系统可能有所差异。 +::: diff --git a/_sources/taup/install.md b/_sources/taup/install.md new file mode 100644 index 00000000..be3dfd2c --- /dev/null +++ b/_sources/taup/install.md @@ -0,0 +1,40 @@ +# 安装 + +- 本节贡献者: {{ 田冬冬 }}(作者)、{{ 姚家园 }}(审稿) +- 最近更新日期: 2023-05-04 + +--- + +{{ install_notes }} + +1. {doc}`安装 Java 运行环境 ` + +2. 下载: + + ``` + $ wget http://www.seis.sc.edu/downloads/TauP/TauP-2.6.1.tgz + ``` + +3. 解压: + + ``` + $ tar -xvf TauP-2.6.1.tgz + ``` + +4. 将 TauP 安装到 {file}`~/opt` 目录下: + + ``` + $ mkdir -p ~/opt/ + $ mv TauP-2.6.1 ~/opt/ + ``` + +5. 修改环境变量,将 TauP 的 bin 路径添加到 PATH 中: + + ``` + $ echo 'export PATH=${HOME}/opt/TauP-2.6.1/bin:${PATH}' >> ~/.bashrc + $ source ~/.bashrc + ``` + +6. 检查安装是否成功 + + 终端键入 `taup` 若出现 TauP 图形界面则表示安装成功。 diff --git a/_sources/taup/intro.md b/_sources/taup/intro.md new file mode 100644 index 00000000..e5a2a0da --- /dev/null +++ b/_sources/taup/intro.md @@ -0,0 +1,60 @@ +# 简介 + +- 本节贡献者: {{ 田冬冬 }}(作者)、{{ 姚家园 }}(审稿) +- 最近更新日期: 2021-06-04 + +--- + +TauP 用于计算一维球状分层模型下地震震相的走时和路径。 + +## 功能与特色 + +与传统的地震震相走时计算软件 ttimes 相比,TauP 具有更多的功能和特色: + +1. 计算震相走时、射线参数、反射点、穿透点、射线路径、走时曲线等 +2. 内置震相解析器,支持任意震相名 +3. 部分兼容 ttimes 震相名: `ttp` 表示常见 P 波震相; + 同理,还有 `tts`、`ttp+`、`tts+`、`ttbasic`、`ttall` +4. 自带多个地球参考模型:iasp91、prem、ak135 等 +5. 支持自定义速度模型 +6. 直接在球坐标系下求解方程,不必做展平变换,与部分震相的解析解相比,TauP 的最大 + 误差为 0.01 秒,而 ttimes 的最大误差为 0.05 秒 +7. ObsPy 提供了 [TauP 的 Python 接口](https://docs.obspy.org/packages/obspy.taup.html) + +TauP 目前还存在一些缺点: + +1. 采用线性插值,可能带来 0.01 秒的误差 +2. 不支持 PKPab、PKPbc 等震相名 + +## 工具 + +TauP 既提供了图形界面 `taup`,也提供了以下命令行工具: + +- {doc}`taup_time`:计算震相的走时、射线参数、出射角、入射角等 +- {doc}`taup_curve`:计算走时曲线 +- {doc}`taup_path`:计算射线路径 +- `taup pierce`:计算震相在波速不连续面和指定深度的反射点和穿透点 +- {doc}`taup_wavefront`:计算波前面 +- {doc}`taup_table`:计算走时表 +- {doc}`taup_setsac` :将震相走时写入 SAC 头段变量中 +- `taup create`:预计算速度模型 +- `taup phase`:通过语言描述震相的射线路径 +- {doc}`taup_slowplot`:绘制速度模型的慢度-深度剖面 +- {doc}`taup_velplot`:绘制速度模型的速度-深度剖面 +- `taup velmerge`:将部分速度模型与一个标准模型合并以构成一个新的速度模型 + +## 参考文献 + +TauP 的实现原理基于如下文献: + +- Buland, R., & Chapman, C. H. (1983). + The computation of seismic travel times. + *Bulletin of the Seismological Society of America*, 73(5), 1271–1302. + + +## 引用 + +- Crotwell, H. P., Owens, T. J., & Ritsema, J. (1999). + The TauP Toolkit: Flexible Seismic Travel-time and Ray-path Utilities. + *Seismological Research Letters*, 70(2), 154–160. + diff --git a/_sources/taup/taup_curve.md b/_sources/taup/taup_curve.md new file mode 100644 index 00000000..d6b436c6 --- /dev/null +++ b/_sources/taup/taup_curve.md @@ -0,0 +1,87 @@ +# taup curve + +- 本节贡献者: {{ 田冬冬 }}(作者)、{{ 姚家园 }}(审稿) +- 最近更新日期: 2021-05-31 + +--- + +`taup curve` 用于计算并绘制震相的走时曲线(走时-震中距关系曲线)。 + +## 基本用法 + +使用 `taup curve --help` 可查询该命令的完整用法和选项。大多数选项的含义与 +{doc}`taup_time` 相同,不再赘述。此处仅介绍常用用法。 + +计算震源深度为 300 km,P、S、PcP、ScS、PKiKP 震相的走时曲线: + +``` +$ taup curve -h 300 -ph P,S,PcP,ScS,PKiKP +``` + +该命令会将走时曲线信息以 GMT **plot** 或 **psxy** 命令可识别的格式输出到文件 +{file}`taup_curve.gmt` 中。 + +可以使用 `-o` 选项指定输出的文件名或输出到标准输出(屏幕)。例如,下面的第一行命令 +会将走时曲线输出到文件 {file}`time_curve.gmt` 中,第二行会输出到屏幕上: + +``` +$ taup_curve -h 300 -ph P,S,PcP,ScS,PKiKP -o time_curve +$ taup_curve -h 300 -ph P,S,PcP,ScS,PKiKP -o stdout +``` + +## 输出格式 + +输出的走时曲线用两列数据表示, + +- 第一列:震中距(单位为 °) +- 第二列:震相走时(单位为 s) + +多个震相的走时曲线之间用 `>` 符号分隔,其后接着当前走时曲线所对应的震相信息。 + +例如,上面命令输出的文件的内容为(仅显示部分): + +``` +> P for a source depth of 300.0 kilometers in the iasp91 model + 9.10 127.05 +10.99 150.20 +11.10 151.54 +11.21 152.81 +... +> S for a source depth of 300.0 kilometers in the iasp91 model + 9.96 250.39 +11.90 294.22 +13.34 326.40 +14.34 348.66 +... +``` + +`taup curve` 不仅可以输出震相走时,还支持输出折合走时(reduced traveltime) +或相对走时: + +- 使用 `-reddeg` 选项设置折合速度(reducing velocity),其单位为 °/s +- 使用 `-redkm` 选项设置折合速度(reducing velocity),其单位为 km/s +- 使用 `-rel` 选定指定某个参考震相,输出相对该参考震相的走时 + +## 绘制走时曲线 + +使用 `-gmt` 选项可以生成 GMT 绘图脚本({file}`taup_curve.gmt`),执行该脚本 +即可生成 PDF 格式的射线路径图: + +``` +$ taup_curve -h 300 -ph P,S,PcP,ScS,PKiKP -gmt +$ bash taup_curve.gmt +``` + +:::{note} +`taup curve` 命令生成的 GMT 脚本采用的是 GMT 5 语法。GMT 5 和 GMT 6 用户可以 +直接运行使用,而 GMT 4 用户则无法正确运行。 +::: + +绘制出来的图件效果如下: + +```{figure} taup_curve.jpg +:align: center +:width: 400 px + +`taup curve` 绘制的震相走时曲线 +``` diff --git a/_sources/taup/taup_path.md b/_sources/taup/taup_path.md new file mode 100644 index 00000000..585eedb3 --- /dev/null +++ b/_sources/taup/taup_path.md @@ -0,0 +1,87 @@ +# taup path + +- 本节贡献者: {{ 田冬冬 }}(作者)、{{ 姚家园 }}(审稿) +- 最近更新日期: 2021-05-31 + +--- + +`taup path` 用于计算并绘制射线的传播路径。 + +## 基本用法 + +使用 `taup path --help` 可查询该命令的完整用法和选项。大多数选项的含义与 +{doc}`taup_time` 相同,不再赘述。此处仅介绍常用用法。 + +计算震源深度为 300 km,震中距 60° 处,P、S、PcP、ScS、PKiKP 震相的射线路径: + +``` +$ taup path -h 300 -deg 60 -ph P,S,PcP,ScS,PKiKP +``` + +该命令会将射线路径信息以 GMT **plot** 或 **psxy** 命令可识别的格式输出到文件 +{file}`taup_path.gmt` 中。 + +可以使用 `-o` 选项指定输出的文件名或输出到标准输出(屏幕)。例如,下面的第一行命令 +会将射线路径输出到文件 {file}`raypath.gmt` 中,第二行会输出到屏幕上: + +``` +$ taup path -h 300 -deg 60 -ph P,S,PcP,ScS,PKiKP -o raypath +$ taup path -h 300 -deg 60 -ph P,S,PcP,ScS,PKiKP -o stdout +``` + +## 输出格式 + +输出的射线路径用两列数据表示, + +- 第一列:震中距(单位为 °) +- 第二列:射线与地球中心的距离(单位为 km) + +多个震相的射线路径之间用 `>` 符号分隔,其后接着当前射线路径所对应的震相信息。 + +例如,上面命令输出的文件的内容为(仅显示部分): + +``` +> P at 575.40 seconds at 60.00 degrees for a 300.0 km deep source in the iasp91 model with rayParam 6.760 s/deg. +0.00 6071.0 +0.06 6061.0 +0.07 6059.9 +0.08 6058.8 +... +> PcP at 617.92 seconds at 60.00 degrees for a 300.0 km deep source in the iasp91 model with rayParam 4.026 s/deg. +0.00 6071.0 +0.03 6061.0 +0.04 6059.9 +0.04 6058.8 +``` + +如果加上 `--withtime` 选项,则输出会多一列,最后一列则给出了射线路径上每个点 +对应的走时。 + +## 绘制射线路径 + +使用 `-svg` 选项可以直接绘制 SVG 格式的射线路径图: + +``` +$ taup path -h 300 -deg 60 -ph P,S,PcP,ScS,PKiKP -svg +``` + +使用 `-gmt` 选项可以生成 GMT 绘图脚本({file}`taup_path.gmt`),执行该脚本即可生成 PDF 格式的射线路径图: + +``` +$ taup path -h 300 -deg 60 -ph P,S,PcP,ScS,PKiKP -gmt +$ bash taup_path.gmt +``` + +:::{note} +`taup path` 命令生成的 GMT 脚本采用的是 GMT 5 语法。GMT 5 和 GMT 6 用户可以 +直接运行使用,而 GMT 4 用户则无法正确运行。 +::: + +绘制出来的图件效果如下: + +```{figure} taup_path.jpg +:align: center +:width: 400 px + +`taup path` 绘制的射线路径图 +``` diff --git a/_sources/taup/taup_setsac.md b/_sources/taup/taup_setsac.md new file mode 100644 index 00000000..a241bb1e --- /dev/null +++ b/_sources/taup/taup_setsac.md @@ -0,0 +1,59 @@ +# taup setsac + +- 本节贡献者: {{ 田冬冬 }}(作者)、{{ 姚家园 }}(审稿) +- 最近更新日期: 2021-05-31 + +--- + +{doc}`taup_time` 命令可以计算各震相的理论走时, +`taup setsac` 命令则用于计算理论走时并将走时信息写入到 SAC 文件头段变量中。 + +## 基本用法 + +使用 `taup setsac --help` 可查询该命令的完整用法和选项, +其用法相对简单,示例如下: + +``` +$ taup setsac -mod prem -evdpkm -ph P-0,S-1,PcP-8,ScS-9 *.SAC +``` + +- `-mod`:指定使用 PREM 模型,默认使用 iasp91 模型。 +- `-evdpkm`:由于历史原因,该命令默认 SAC 文件中的震源深度单位为米, + 而现在的 SAC 文件中的震源深度单位为千米。该选项设置深度的单位为 km。 +- `-ph P-0,S-1,PcP-8,ScS-9`:将 P 波到时标记到 SAC 头段变量 `T0` 中, + S 波到时标记到 `T1` 中,PcP 到时标记到 `T8`,ScS 到时标记到 `T9`。 + +## 说明 + +- SAC 中共有十个可用于存储时间的头段变量,即 `T0` 至 `T9` 。 +- 该命令在将震相走时标记到头段变量 `Tn` (n 取 0–9)的同时,还会修改对应的 + 头段变量 `KTn` 和 `USERn`,其中 `KTn` 中保存震相名, + `USERn` 中保存震相的射线参数(单位为 s/radian)。 +- 该命令计算的是震相的理论走时,还须知道发震时刻才能确定震相的理论到时, + 即震相的到时等于发震时刻加上震相的走时。 因而要求 SAC 头段变量 `O` (发震时刻) + 必须已赋值。 +- 该命令从 SAC 头段中读取地震深度和震中距信息,以计算震相理论到时。 + 因而要求 SAC 头段变量 `EVDP` (震源深度)必须已赋值。 + 若头段变量 `GCARC` (震中距,单位为 °)或 `DIST` (震中距,单位为 km)未赋值, + 而震源和台站位置的头段变量(`EVLA`、`EVLO`、`STLA`、`STLO`)已赋值, + 该命令可以自动计算震中距,但此时计算的震中距未考虑椭球校正,因而有一定的误差。 + 建议将 SAC 头段变量 `LCALDA` 设置为 `TURE`,则当事件和台站的坐标被写入 + 或被修改时,头段变量 `GCARC`、`DIST` 会自动计算,而 SAC 计算震中距时 + 考虑了地球的扁率(赤道半径 6378.160 km,扁率为 0.00335293)。 +- 在某些震中距,单个震相会有多个到时。比如在震中距 20° 附近,S 波会出现三分支现象 + (Triplication),TauP 会得到七个 S 波到时,但只有最早的到时会被写入到 SAC 头段中。 + +:::{warning} +若在执行该命令前,SAC 头段变量 `Tn` 中已有值,该命令会覆盖其原始值! +::: + +:::{warning} +若执行命令时忘记了指定 `-evdpkm` 选项,此时若震源深度小于 1 km (1000 m), +该命令会给出警告。 + +需要注意,一定不要按 {kbd}`Ctrl+C` 终止执行命令。因为 `taup setsac` +需要将 SAC 文件读入内存,进行修改,再将内存中的数据写回磁盘覆盖原文件。 +使用 {kbd}`Ctrl+C` 终止命令会导致文件写回磁盘失败,进而导致部分 SAC 文件损坏。 + +正确的做法是不理会这些警告,待程序执行完毕之后再加上 `-evdpkm` 选项重新执行。 +::: diff --git a/_sources/taup/taup_slowplot.md b/_sources/taup/taup_slowplot.md new file mode 100644 index 00000000..93cb7f6b --- /dev/null +++ b/_sources/taup/taup_slowplot.md @@ -0,0 +1,50 @@ +# taup slowplot + +- 本节贡献者: {{ 田冬冬 }}(作者)、{{ 姚家园 }}(审稿) +- 最近更新日期: 2021-06-01 + +--- + +`taup slowplot` 可以很方便地生成用于绘制慢度-深度剖面的 GMT 脚本。 + +## 慢度定义 + +此处的慢度定义为 $s = \frac{r}{v}$,单位为 s/rad。在球坐标系下, +射线参数(即水平慢度)的定义为 $p = \frac{r \sin\theta}{v}$,其中 +$\theta$ 是射线与径向的夹角。在地震波传播过程中,射线参数保持不变。 +因此,由于地球不同深度处的半径 r 和速度 v 不同,角度 $\theta$ 也会发生变化。 +在某一深度处,若 $\theta = 90$,则射线将在该深度折返。 +因而慢度-深度模型展示了某个射线参数对应的射线所能采样的最大深度。 + +## 基本用法 + +使用 `taup slowplot --help` 可查询该命令的完整用法和选项。此处仅介绍其常用用法。 + +绘制 iasp91 参考模型的慢度模型: + +``` +$ taup slowplot -mod iasp91 +``` + +执行该命令会生成脚本 {file}`iasp91_slow.gmt`。执行该脚本即可生成 PDF 格式的速度模型图片: + +``` +$ bash iasp91_slow.gmt +``` + +绘制出来的图件效果如下(图中蓝线为 P 波慢度,红线为 S 波慢度): + +```{figure} taup_slowplot.jpg +:align: center +:width: 400 px + +`taup slowplot` 绘制深度-慢度图 +``` + +例如,射线参数为 400 s/rad 的 P 波的折返深度约为 1500 km,因而无法采样到更深 +的地幔以及地核。 + +:::{note} +需要注意的是,由于外核 S 波速度为 0,所以外核仅允许 P 波通过。上图中, +在外核深度范围内(2889-5153.9 km),S 波慢度实际上采用的是 P 波慢度。 +::: diff --git a/_sources/taup/taup_table.md b/_sources/taup/taup_table.md new file mode 100644 index 00000000..211de40e --- /dev/null +++ b/_sources/taup/taup_table.md @@ -0,0 +1,50 @@ +# taup table + +- 本节贡献者: {{ 田冬冬 }}(作者)、{{ 姚家园 }}(审稿) +- 最近更新日期: 2021-06-04 + +--- + +`taup table` 用于计算一系列深度和震中距的震相走时表。 + +使用 `taup table --help` 可查询该命令的完整用法和选项。此处仅介绍常用用法。 + +计算 PKiKP 震相的走时表(默认使用 iasp91 模型): + +``` +$ taup table -ph PKiKP -o PKiKP_table.dat +``` + +该命令会将不同深度和震中距的 PKiKP 走时表输出到文件 {file}`PKiKP_table.dat` 中。 +以下展示该文件的部分内容: + +``` +... (省略很多行) +iasp91 30.00 15.0 PKiKP 1001.95 0.658 30.00 PKiKP +iasp91 31.00 15.0 PKiKP 1002.62 0.679 31.00 PKiKP +iasp91 32.00 15.0 PKiKP 1003.31 0.700 32.00 PKiKP +... (省略很多行) +``` + +其输出有 8 列,从左到右的含义分别是: + +1. 速度模型名称 +2. 震中距(度) +3. 震源深度(km) +4. 震相名 +5. 震相走时(秒) +6. 震相慢度(秒/度) +7. Purist 距离:地震波实际走过的圆弧距离。见 {doc}`taup_time` 中的相关说明 +8. Purist 震相名:地震波的“真实”震相名。见 {doc}`taup_time` 中的相关说明 + +可以与 `taup time` 命令的输出做对比,进一步验证输出中每列的含义: + +``` +$ taup time --ph PKiKP -mod iasp91 -deg 30 -h 15 + +Model: iasp91 +Distance Depth Phase Travel Ray Param Takeoff Incident Purist Purist + (deg) (km) Name Time (s) p (s/deg) (deg) (deg) Distance Name +----------------------------------------------------------------------------------- + 30.00 15.0 PKiKP 1001.95 0.658 1.97 1.97 30.00 = PKiKP +``` diff --git a/_sources/taup/taup_time.md b/_sources/taup/taup_time.md new file mode 100644 index 00000000..6ce2aaae --- /dev/null +++ b/_sources/taup/taup_time.md @@ -0,0 +1,197 @@ +# taup time + +- 本节贡献者: {{ 田冬冬 }}(作者)、{{ 姚家园 }}(审稿) +- 最近更新日期: 2021-05-31 + +--- + +`taup time` 命令可用于计算震相走时、射线参数、出射角、入射角等信息。 + +## 基本用法 + +使用 `taup time --help` 可查询该命令的完整用法和选项,此处仅介绍常用用法。 + +计算震源深度为 300 km,震中距 60° 处,P、S、PcP、ScS、PKiKP 震相的走时信息: + +``` +$ taup time -h 300 -deg 60 -ph P,S,PcP,ScS,PKiKP +``` + +- `-h`:震源深度(单位 km),默认深度为 0.0 km。 +- `-deg`:震中距(单位 °) +- `-ph`:以逗号分隔的震相名 + +TauP 默认使用 iasp91 模型,可以使用 `-mod` 选项设置其他 TauP 预定义速度模型: + +``` +$ taup time -mod prem -h 300 -deg 60 -ph P,S,PcP,ScS,PKiKP +$ taup time -mod ak135 -h 300 -deg 60 -ph P,S,PcP,ScS,PKiKP +``` + +TauP 默认台站位于地表,可使用 `--stadepth` 选项设置台站深度(单位为 km): + +``` +$ taup time -h 300 -deg 60 --stadepth 0.5 -ph P,S,PcP,ScS,PKiKP +``` + +若已知震源和台站位置,也可以使用 `-evt` 和 `-sta` 选项分别指定震源和台站的 +纬度和经度。例如,震源位于 (40 °N,10 °E),台站位于 (20 °S,10 °W): + +``` +$ taup time -h 300 -evt 40 10 -sta -20 -10 -ph P,S,PcP,ScS,PKiKP +``` + +:::{warning} +使用 `-evt` 和 `-sta` 选项时,`taup time` 会假设地球是完美球体, +来计算震源和台站的震中距,这会产生一定的误差。例如,根据以上参数 +`taup time` 计算得到的震中距约为 62.83°,P 波初至到时为 594.27 秒。 +而 ObsPy 的 +[gps2dist_azimuth](https://docs.obspy.org/packages/autogen/obspy.geodetics.base.gps2dist_azimuth.html#obspy.geodetics.base.gps2dist_azimuth) +函数计算得到的震中距约为 6959 km (采用 WGS84 椭球:赤道半径 6378.1370 km、 +扁率约为 0.0033528106647474805),在半径为 6371 km 的完美球状地球上约为 62.585° +(利用 [kilometers2degrees](https://docs.obspy.org/packages/autogen/obspy.geodetics.base.kilometers2degrees.html#obspy.geodetics.base.kilometers2degrees) +函数计算得到),使用 62.585° 直接计算的 P 波初至到时为 592.64 秒,二者相差 1.63 秒。 +::: + +在震中距比较小的情况下,可以使用 `-km` 选项指定震中距(单位为 km)。 +比如计算震源深度为 5 km,震中距 100 km 处,P、S、PcP、ScS、PKiKP 震相的走时信息: + +``` +$ taup time -h 5 -km 100 -ph P,S,PcP,ScS,PKiKP +``` + +## 输出格式 + +下面的命令计算了 PREM 模型下,震源深度 100 km,震中距 60° 处,P 和 pP 震相的走时信息。 +其输出为: + +``` +$ taup time -mod prem -h 100 -deg 60 -ph P,pP + +Model: prem +Distance Depth Phase Travel Ray Param Takeoff Incident Purist Purist + (deg) (km) Name Time (s) p (s/deg) (deg) (deg) Distance Name +----------------------------------------------------------------------------------- + 60.00 100.0 P 595.40 6.815 30.14 20.82 60.00 = P + 60.00 100.0 pP 618.89 6.890 149.49 21.06 60.00 = pP +``` + +输出共 9 列,从左到右分别为: + +1. 震中距(度):地震震中与台站的大圆弧路径长度 + +2. 震源深度(km) + +3. 震相名 + +4. 震相走时(秒) + +5. 射线参数(秒/度) + + :::{note} + 射线参数有三种常用单位:秒/度(s/deg )、秒/弧度(s/radian)、秒/千米(s/km)。 + 三者之间的关系为($R_0$ 为地球半径,假设为 6371 km): + + $$ + 1 s/deg = \frac{1}{\pi*R_0/180} s/km = 1/111.19492 s/km + $$ + + $$ + 1 s/deg = \frac{1}{\pi/180} s/radian = 57.29578 s/radian + $$ + ::: + +6. 出射角(度):即射线从震源出射时与**垂直向下**方向的夹角,取值范围为 0 到 180°。 + + - 0° 到 90° 表示射线向下出射(例如 P 震相) + - 90° 到 180° 表示射线向上出射(例如 pP 震相) + + :::{note} + 不同文章对出射角的定义不同,使用时应格外注意。 + + 老版本的 TauP 对出射角的定义不同,可视为 BUG,应避免使用老版本 TauP。 + ::: + +7. 入射角(度):射线入射到台站时与**垂直向上**方向的夹角。 + +8. Purist 距离:地震波实际走过的圆弧距离。 + + 该值可能与震中距不同,例如 50° 震中距处记录到的 PKKKP 震相,实际走过的 + 圆弧距离为 410°: + + ``` + $ taup time -deg 50 -ph PKKKP + + Model: iasp91 + Distance Depth Phase Travel Ray Param Takeoff Incident Purist Purist + (deg) (km) Name Time (s) p (s/deg) (deg) (deg) Distance Name + ----------------------------------------------------------------------------------- + 50.00 0.0 PKKKP 2519.56 2.242 6.72 6.72 410.00 = PKKKP + ``` + +9. Purist 震相名:地震波的“真实”震相名。 + + 例如,若想要计算 SS 震相在 660 km 不连续面的下表面的反射波走时,可指定其震相名为 + `S^660S`。由于 PREM 模型中 660 km 不连续面的“真实”深度为 670 km,此时 + TauP 实际返回的时从 670 km 处反射回的震相,此时 Purist 震相名会显示为 `S^670S`: + + ``` + $ taup time -mod prem -deg 120 -ph S^660S + + Model: prem + Distance Depth Phase Travel Ray Param Takeoff Incident Purist Purist + (deg) (km) Name Time (s) p (s/deg) (deg) (deg) Distance Name + ------------------------------------------------------------------------------------ + 120.00 0.0 S^660S 1975.75 12.336 20.79 20.79 120.00 * S^670S + ``` + +可以使用 `--rel` 选项输出相对于某个指定震相的走时差。例如, +下面的命令中,最后一列输出了所有震相相对于 PcP 震相的走时差: + +``` +$ taup time -mod prem -h 300 -deg 60 -ph P,S,PcP,ScS,PKiKP --rel PcP + +Model: prem +Distance Depth Phase Travel Ray Param Takeoff Incident Purist Purist Relative to + (deg) (km) Name Time (s) p (s/deg) (deg) (deg) Distance Name PcP +----------------------------------------------------------------------------------------------- + 60.00 300.0 P 574.72 6.739 33.65 20.58 60.00 = P -42.32 + 60.00 300.0 PcP 617.05 4.016 19.28 12.09 60.00 = PcP 0.00 + 60.00 300.0 PKiKP 993.45 1.245 5.88 3.72 60.00 = PKiKP 376.41 + 60.00 300.0 S 1043.98 12.659 34.16 21.37 60.00 = S 426.93 + 60.00 300.0 ScS 1134.89 7.480 19.38 12.43 60.00 = ScS 517.85 +``` + +## 信息提取 + +上面介绍的输出中包含了很多信息,想要在脚本中提取出想要的信息有些麻烦。所以 +`taup time` 提供了一些选项,使得在脚本中计算走时、射线参数更加方便。 + +### 走时 + +`--time` 选项使得输出中只包含走时信息,并且小数点的位数更多: + +``` +$ taup time -mod prem -h 300 -deg 60 -ph P,S,PcP,ScS,PKiKP --time +574.7245 617.047 993.4524 1043.9805 1134.8923 +``` + +需要注意的是,输出的走时不是按照 `-ph` 选项中震相的顺序进行排序的, +而是按照走时递增的顺序排序。比如这里,S 震相放在震相列表的第二位, +而 S 震相的走时 1043.9805 却放在第四位。 + +### 射线参数 + +`--rayp` 选项使得输出中只包含射线参数信息,并且小数点的位数更多: + +``` +$ taup time -mod prem -h 300 -deg 60 -ph P,S,PcP,ScS,PKiKP --rayp +6.739042 4.0158706 1.2450149 12.65922 7.480467 +``` + +此时,输出的射线参数是按照 `-ph` 选项中震相的顺序进行排序的。 + +:::{note} +`--rayp` 和 `--time` 选项不能一起使用。 +当两个选项同时使用时,会以后出现的选项为准。 +::: diff --git a/_sources/taup/taup_velplot.md b/_sources/taup/taup_velplot.md new file mode 100644 index 00000000..5751275f --- /dev/null +++ b/_sources/taup/taup_velplot.md @@ -0,0 +1,31 @@ +# taup velplot + +- 本节贡献者: {{ 田冬冬 }}(作者)、{{ 姚家园 }}(审稿) +- 最近更新日期: 2021-06-02 + +--- + +`taup velplot` 可以很方便地生成用于绘制速度-深度剖面的 GMT 脚本。 + +使用 `taup velplot --help` 可查询该命令的完整用法和选项。此处仅介绍其常用用法。 + +生成 iasp91 参考模型的速度-深度剖面绘图脚本: + +``` +$ taup velplot -mod iasp91 +``` + +执行以上命令生成的脚本 {file}`iasp91_vel.gmt`,生成 PDF 格式的速度-深度剖面: + +``` +$ bash iasp91_vel.gmt +``` + +绘制出来的图件效果如下(蓝线为 P 波速度,红线为 S 波速度): + +```{figure} taup_velplot.jpg +:align: center +:width: 400 px + +`taup velplot` 绘制速度-深度剖面 +``` diff --git a/_sources/taup/taup_wavefront.md b/_sources/taup/taup_wavefront.md new file mode 100644 index 00000000..a83a19bd --- /dev/null +++ b/_sources/taup/taup_wavefront.md @@ -0,0 +1,128 @@ +# taup wavefront + +- 本节贡献者: {{ 田冬冬 }}(作者)、{{ 姚家园 }}(审稿) +- 最近更新日期: 2021-06-05 + +--- + +`taup wavefront` 命令可用于生成波前面,即任意时刻地震波在地球内部的波场快照。 + +## 基本用法 + +使用 `taup wavefront --help` 可查询该命令的完整用法和选项。其选项与 +{doc}`taup_time` 几乎完全相同,故不再重复介绍。此处仅介绍常用用法。 + +计算震源深度为 300 km,震中距 60° 处,P 震相的波前面: + +``` +$ taup wavefront -ph P -deg 60 -h 300 +``` + +该命令会生成文件 {file}`taup_wavefront.gmt`,其包含了不同时刻(t=100, 200, 300, ...)的 +P 波的波前面信息,内容如下: + +``` +> P at 100.0 seconds +5.31 5151.8 100.00 254.331 +5.42 5158.7 100.00 260.031 +5.49 5163.9 100.00 264.250 +5.55 5167.7 100.00 267.326 +...(省略若干行) +> P at 200.0 seconds +15.69 4244.7 200.00 254.331 +15.93 4267.0 200.00 260.031 +16.10 4283.9 200.00 264.250 +16.23 4296.4 200.00 267.326 +...(省略若干行) +``` + +该文件包含四列,分别是:震中距(度)、深度(km)、走时(秒)、射线参数(秒/度)。可以直接使用文件的前两列进行绘图。 + +加上 `--gmt` 选项,则会生成一个绘制波前面的 GMT 脚本 {file}`taup_wavefront.gmt`: + +``` +$ taup wavefront -ph P -deg 60 -h 300 --gmt +``` + +使用如下命令执行该绘图脚本,即可得到 PDF 格式的波前面传播图: + +``` +$ bash taup_wavefront.gmt +``` + +绘制出来的图件效果如下: + +```{figure} taup_wavefront.jpg +:align: center +:width: 500 px + +`taup wavefront` 绘制波前面 +``` + +## 进阶用法 + +`taup wavefront` 提供的 `--rays` 选项可以进一步控制生成波前面时所使用的射线数目 +(即每个波前面用多少个点约束),而 `--timestep` 选项可以控制波前面的时间步长 +(即间隔多长时间产生一个波前面)。 + +以下示例中,每个波前面用 20 条射线计算,且每 25 秒计算一个波前面: + +``` +$ taup wavefront -ph P -deg 60 -h 300 --rays 20 --timestep 25 --gmt +$ bash taup_wavefront.gmt +``` + +绘制出来的图件效果如下: + +```{figure} taup_wavefront_ray20-time25.jpg +:align: center +:width: 500 px + +`taup wavefront` 绘制波前面 +``` + +## 波场动画 + +`taup wavefront` 提供的 `--timefiles` 选项可以将每个时刻的波前面信息输出到 +不同的文件中。有了每个时刻的波场信息,就可以制作波场动画了。 + +以下命令会生成几十个文件,每个文件包含一个波前面信息: + +``` +$ taup wavefront -ph P -deg 60 -h 300 --timestep 10 --timefiles +``` + +例如,{file}`taup_wavefront_025.gmt` 包含了第 25 秒时的波前面信息。 +这些文件可用于制图,并进一步生成动画。 + +将 `--timefiles` 选项与 `--gmt` 选项连用,则会对每个波前面生成一个单独的 GMT 绘图脚本: + +``` +$ taup wavefront -ph P -deg 60 -h 300 --timestep 10 --timefiles --gmt +``` + +以上命令会生成几十个 GMT 脚本。使用如下命令可以批量执行所有 GMT 脚本,生成多个 PDF 文件: + +``` +$ for i in $(ls taup_wavefront_*.gmt); do bash $i; done +``` + +使用 [GraphicsMagick](http://www.graphicsmagick.org/) 的 +[gm convert](http://www.graphicsmagick.org/convert.html) 命令 +可以将多个 PDF 文件转换为 GIF 动画: + +``` +$ gm convert -delay 10 -density 150x150 taup_wavefront_*.pdf taup_wavefront.gif +``` + +其中,`-delay 10` 表示每两张图的间隔是 10/100 秒,`-density 150x150` 设置动画的水平和 +垂直方向的像素点数。 + +生成的动画如下图所示: + +```{figure} taup_wavefront.gif +:align: center +:width: 500 px + +`taup wavefront` 绘制波场传播动画 +``` diff --git a/_sources/template/index.md b/_sources/template/index.md new file mode 100644 index 00000000..242bba27 --- /dev/null +++ b/_sources/template/index.md @@ -0,0 +1,17 @@ +# 教程模板 + +- 软件名称: Template +- 作者: [seismo-learn](https://seismo-learn.org) +- 主页: +- 官方文档: +- 源码地址: +- 最新版本: v1.0.0 (2021-01-02) +- 适用平台: {{Linux}} {{macOS}} {{Windows}} +- 编程语言: Python、C +- 许可协议: GPL、LGPL、MIT、未知 + +--- + +:::{note} +本教程仅在 Linux 和 macOS 系统下使用 v1.0.0 测试通过,其余版本或系统可能有所差异。 +::: \ No newline at end of file diff --git a/_sources/template/install.md b/_sources/template/install.md new file mode 100644 index 00000000..1ee59297 --- /dev/null +++ b/_sources/template/install.md @@ -0,0 +1,18 @@ +# 安装 + +- 本节贡献者: {{ 田冬冬 }}(作者)、{{ 姚家园 }}(审稿) +- 最近更新日期: 2021-01-02 + +--- + +{{ install_notes }} + +这一节将介绍如何在 Linux 和 macOS 上安装 XXX 软件。 + +1. 安装依赖包 +2. 下载源码 +3. 解压 +4. 编译 +5. 安装 +6. 修改环境变量 +7. 执行 XXX 命令测试 diff --git a/_sources/template/intro.md b/_sources/template/intro.md new file mode 100644 index 00000000..f35cc38d --- /dev/null +++ b/_sources/template/intro.md @@ -0,0 +1,26 @@ +# 简介 + +- 本节贡献者: {{ 田冬冬 }}(作者)、{{ 姚家园 }}(审稿) +- 最近更新日期: 2021-01-02 + +--- + +本文档是**地震“学”软件**的教程模板。该模板规定了软件教程中所需包含的内容, +以及内容的具体格式和风格。 + +## 使用说明 + +若想要为一个软件写教程,可直接复制本模板文件夹(位于 {file}`/source/template` 目录) +的全部内容,重命名,并更新软件的基本信息。 + +## 引用 + +有引用文献的软件应列出其引用文献。 +建议访问 网站,通过标题、DOI 或网址搜索相关文献, +然后选择 **American Geophysical Union** 风格,导出到剪贴板。 +例如: + +- Crotwell, H. P., Owens, T. J., & Ritsema, J. (1999). + The TauP Toolkit: Flexible Seismic Travel-time and Ray-path Utilities. + *Seismological Research Letters*, 70(2), 154–160. + diff --git a/_sources/template/style.md b/_sources/template/style.md new file mode 100644 index 00000000..1ec5c019 --- /dev/null +++ b/_sources/template/style.md @@ -0,0 +1,19 @@ +# 风格指南 + +- 本节贡献者: {{ 田冬冬 }}(作者)、{{ 姚家园 }}(审稿) +- 最近更新日期: 2021-02-06 + +--- + +1. 为每个软件创建单独的文件夹 + +2. 每个软件的教程应包括如下内容: + + - `index.md`:软件教程首页,列举软件的基本信息 + - `intro.md`:介绍软件的主要用途、功能、特色、缺点、相关文献及引用方式 + - `install.md`:软件安装说明 + - 其它可选教程 + - 使用说明 + - 实战练习 + +3. 其他规则请参考[《地震“学”贡献指南》](https://seismo-learn.org/contributing/) diff --git a/_sources/utilities/distaz.md b/_sources/utilities/distaz.md new file mode 100644 index 00000000..a42f9d6b --- /dev/null +++ b/_sources/utilities/distaz.md @@ -0,0 +1,64 @@ +# distaz + +- 本节贡献者: {{田冬冬}}(作者)、{{姚家园}}(审稿) +- 最近更新时间: 2021-01-12 + +--- + +{{ install_notes }} + +`distaz` 是一个可以用于计算球面上任意两点间球面距离、方位角和反方位角的小工具。 + +## 相关代码 + +`distaz` 代码很短,简单易懂,其采用的地球模型为椭球模型,精度上可以满足需求。 + +- C、Fortran、Java、Python 以及 CGI 版本: [由 USC 的一个小组整理](http://www.seis.sc.edu/software/distaz/) +- Matlab 版本: [由 specfem3d_globe 提供](https://github.com/geodynamics/specfem3d_globe/blob/master/utils/Visualization/VTK_ParaView/matlab/distaz.m) + +## 使用方法 + +仅以 C 语言版本的 `distaz` 为例,用如下命令即可编译: + +``` +$ cc distaz.c -o distaz -lm +``` + +并将生成的可执行文件移动到 {file}`~/bin/` 目录下: + +``` +$ mkdir -p ~/bin/ +$ mv distaz ~/bin/ +``` + +若 {file}`~/bin/` 路径尚未添加到环境变量 **PATH** 中,则执行如下命令: + +``` +$ echo 'export PATH=${HOME}/bin:${PATH}' >> ~/.bashrc +$ source ~/.bashrc +``` + +其输入为台站纬度、台站经度、事件纬度、事件经度: + +``` +sta_lat sta_lon evt_lat evt_lon +``` + +输出为震中距(单位为°)、反方位角和方位角: + +``` +Delta Baz Az +``` + +例如,台站位于(10°S,14°E),地震位于(40°N,50°W): + +``` +$ distaz -10 14 40 -50 +77.218 314.930 114.795 +``` + +:::{note} +C 语言版的 `distaz` 默认输出小数点后 3 位。可以将源码 {file}`distaz.c` 中 +`printf("%6.3f %6.3f %6.3f\n", delta, baz, az);` 的 `%6.3f` 修改为 +更高精度的输出格式(例如 `%8.5f`)以达到所需的精度。 +::: diff --git a/_sources/utilities/saclst.md b/_sources/utilities/saclst.md new file mode 100644 index 00000000..b548e6a5 --- /dev/null +++ b/_sources/utilities/saclst.md @@ -0,0 +1,51 @@ +# saclst + +- 本节贡献者: {{田冬冬}}(作者)、{{姚家园}}(审稿) +- 最近更新时间: 2021-01-09 + +--- + +`saclst` 是 SAC 软件自带的一个常用工具,用于列出头段变量的值。 + +使用 `saclst help` 可查询该命令的完整用法和选项。终端只键入 `saclst` +可查询简单用法,其语法很简单: + +``` +$ saclst header_lists f file_lists +``` + +- `header_lists`:要查看的头段变量名列表 +- `f`:关键字,表明接下来的所有参数都是 SAC 文件 +- `file_lists`:SAC 文件列表 + +:::{note} +使用 `saclst` 时,SAC 头段变量名并不区分大小写,除了头段变量 `F` 以外。 +`F` 用于存储事件的结束时刻相对于参考时刻的秒数,为了与关键字 `f` 区分, +使用 `saclst` 查看其值时,必须使用大写。 +::: + +查看单个文件的单个头段: + +``` +$ saclst npts f seis.SAC +seis.sac 1000 +``` + +查看单个文件的多个头段: + +``` +$ saclst npts delta F f seis.SAC +seis.sac 1000 0.025 10.233 +``` + +查看多个文件的多个头段: + +``` +$ saclst stla stlo evla evlo gcarc f N.*.U +N.AAKH.U 36.3726 137.92 -5.514 151.161 43.4752 +N.ABNH.U 34.6326 137.231 -5.514 151.161 42.0392 +N.AC2H.U 35.4786 137.735 -5.514 151.161 42.6857 +N.AGMH.U 35.787 137.717 -5.514 151.161 42.9798 +N.AGWH.U 43.0842 140.82 -5.514 151.161 49.2714 +N.AHIH.U 38.2799 139.549 -5.514 151.161 44.8874 +``` diff --git a/_sphinx_design_static/design-style.b7bb847fb20b106c3d81b95245e65545.min.css b/_sphinx_design_static/design-style.b7bb847fb20b106c3d81b95245e65545.min.css new file mode 100644 index 00000000..704c42ee --- /dev/null +++ b/_sphinx_design_static/design-style.b7bb847fb20b106c3d81b95245e65545.min.css @@ -0,0 +1 @@ +.sd-bg-primary{background-color:var(--sd-color-primary) !important}.sd-bg-text-primary{color:var(--sd-color-primary-text) !important}button.sd-bg-primary:focus,button.sd-bg-primary:hover{background-color:var(--sd-color-primary-highlight) !important}a.sd-bg-primary:focus,a.sd-bg-primary:hover{background-color:var(--sd-color-primary-highlight) !important}.sd-bg-secondary{background-color:var(--sd-color-secondary) !important}.sd-bg-text-secondary{color:var(--sd-color-secondary-text) !important}button.sd-bg-secondary:focus,button.sd-bg-secondary:hover{background-color:var(--sd-color-secondary-highlight) !important}a.sd-bg-secondary:focus,a.sd-bg-secondary:hover{background-color:var(--sd-color-secondary-highlight) !important}.sd-bg-success{background-color:var(--sd-color-success) !important}.sd-bg-text-success{color:var(--sd-color-success-text) !important}button.sd-bg-success:focus,button.sd-bg-success:hover{background-color:var(--sd-color-success-highlight) !important}a.sd-bg-success:focus,a.sd-bg-success:hover{background-color:var(--sd-color-success-highlight) !important}.sd-bg-info{background-color:var(--sd-color-info) !important}.sd-bg-text-info{color:var(--sd-color-info-text) !important}button.sd-bg-info:focus,button.sd-bg-info:hover{background-color:var(--sd-color-info-highlight) !important}a.sd-bg-info:focus,a.sd-bg-info:hover{background-color:var(--sd-color-info-highlight) !important}.sd-bg-warning{background-color:var(--sd-color-warning) !important}.sd-bg-text-warning{color:var(--sd-color-warning-text) !important}button.sd-bg-warning:focus,button.sd-bg-warning:hover{background-color:var(--sd-color-warning-highlight) !important}a.sd-bg-warning:focus,a.sd-bg-warning:hover{background-color:var(--sd-color-warning-highlight) !important}.sd-bg-danger{background-color:var(--sd-color-danger) !important}.sd-bg-text-danger{color:var(--sd-color-danger-text) !important}button.sd-bg-danger:focus,button.sd-bg-danger:hover{background-color:var(--sd-color-danger-highlight) !important}a.sd-bg-danger:focus,a.sd-bg-danger:hover{background-color:var(--sd-color-danger-highlight) !important}.sd-bg-light{background-color:var(--sd-color-light) !important}.sd-bg-text-light{color:var(--sd-color-light-text) !important}button.sd-bg-light:focus,button.sd-bg-light:hover{background-color:var(--sd-color-light-highlight) !important}a.sd-bg-light:focus,a.sd-bg-light:hover{background-color:var(--sd-color-light-highlight) !important}.sd-bg-muted{background-color:var(--sd-color-muted) !important}.sd-bg-text-muted{color:var(--sd-color-muted-text) !important}button.sd-bg-muted:focus,button.sd-bg-muted:hover{background-color:var(--sd-color-muted-highlight) !important}a.sd-bg-muted:focus,a.sd-bg-muted:hover{background-color:var(--sd-color-muted-highlight) !important}.sd-bg-dark{background-color:var(--sd-color-dark) !important}.sd-bg-text-dark{color:var(--sd-color-dark-text) !important}button.sd-bg-dark:focus,button.sd-bg-dark:hover{background-color:var(--sd-color-dark-highlight) !important}a.sd-bg-dark:focus,a.sd-bg-dark:hover{background-color:var(--sd-color-dark-highlight) !important}.sd-bg-black{background-color:var(--sd-color-black) !important}.sd-bg-text-black{color:var(--sd-color-black-text) !important}button.sd-bg-black:focus,button.sd-bg-black:hover{background-color:var(--sd-color-black-highlight) !important}a.sd-bg-black:focus,a.sd-bg-black:hover{background-color:var(--sd-color-black-highlight) !important}.sd-bg-white{background-color:var(--sd-color-white) !important}.sd-bg-text-white{color:var(--sd-color-white-text) !important}button.sd-bg-white:focus,button.sd-bg-white:hover{background-color:var(--sd-color-white-highlight) !important}a.sd-bg-white:focus,a.sd-bg-white:hover{background-color:var(--sd-color-white-highlight) !important}.sd-text-primary,.sd-text-primary>p{color:var(--sd-color-primary) !important}a.sd-text-primary:focus,a.sd-text-primary:hover{color:var(--sd-color-primary-highlight) !important}.sd-text-secondary,.sd-text-secondary>p{color:var(--sd-color-secondary) !important}a.sd-text-secondary:focus,a.sd-text-secondary:hover{color:var(--sd-color-secondary-highlight) !important}.sd-text-success,.sd-text-success>p{color:var(--sd-color-success) !important}a.sd-text-success:focus,a.sd-text-success:hover{color:var(--sd-color-success-highlight) !important}.sd-text-info,.sd-text-info>p{color:var(--sd-color-info) !important}a.sd-text-info:focus,a.sd-text-info:hover{color:var(--sd-color-info-highlight) !important}.sd-text-warning,.sd-text-warning>p{color:var(--sd-color-warning) !important}a.sd-text-warning:focus,a.sd-text-warning:hover{color:var(--sd-color-warning-highlight) !important}.sd-text-danger,.sd-text-danger>p{color:var(--sd-color-danger) !important}a.sd-text-danger:focus,a.sd-text-danger:hover{color:var(--sd-color-danger-highlight) !important}.sd-text-light,.sd-text-light>p{color:var(--sd-color-light) !important}a.sd-text-light:focus,a.sd-text-light:hover{color:var(--sd-color-light-highlight) !important}.sd-text-muted,.sd-text-muted>p{color:var(--sd-color-muted) !important}a.sd-text-muted:focus,a.sd-text-muted:hover{color:var(--sd-color-muted-highlight) !important}.sd-text-dark,.sd-text-dark>p{color:var(--sd-color-dark) !important}a.sd-text-dark:focus,a.sd-text-dark:hover{color:var(--sd-color-dark-highlight) !important}.sd-text-black,.sd-text-black>p{color:var(--sd-color-black) !important}a.sd-text-black:focus,a.sd-text-black:hover{color:var(--sd-color-black-highlight) !important}.sd-text-white,.sd-text-white>p{color:var(--sd-color-white) !important}a.sd-text-white:focus,a.sd-text-white:hover{color:var(--sd-color-white-highlight) !important}.sd-outline-primary{border-color:var(--sd-color-primary) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-primary:focus,a.sd-outline-primary:hover{border-color:var(--sd-color-primary-highlight) !important}.sd-outline-secondary{border-color:var(--sd-color-secondary) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-secondary:focus,a.sd-outline-secondary:hover{border-color:var(--sd-color-secondary-highlight) !important}.sd-outline-success{border-color:var(--sd-color-success) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-success:focus,a.sd-outline-success:hover{border-color:var(--sd-color-success-highlight) !important}.sd-outline-info{border-color:var(--sd-color-info) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-info:focus,a.sd-outline-info:hover{border-color:var(--sd-color-info-highlight) !important}.sd-outline-warning{border-color:var(--sd-color-warning) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-warning:focus,a.sd-outline-warning:hover{border-color:var(--sd-color-warning-highlight) !important}.sd-outline-danger{border-color:var(--sd-color-danger) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-danger:focus,a.sd-outline-danger:hover{border-color:var(--sd-color-danger-highlight) !important}.sd-outline-light{border-color:var(--sd-color-light) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-light:focus,a.sd-outline-light:hover{border-color:var(--sd-color-light-highlight) !important}.sd-outline-muted{border-color:var(--sd-color-muted) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-muted:focus,a.sd-outline-muted:hover{border-color:var(--sd-color-muted-highlight) !important}.sd-outline-dark{border-color:var(--sd-color-dark) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-dark:focus,a.sd-outline-dark:hover{border-color:var(--sd-color-dark-highlight) !important}.sd-outline-black{border-color:var(--sd-color-black) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-black:focus,a.sd-outline-black:hover{border-color:var(--sd-color-black-highlight) !important}.sd-outline-white{border-color:var(--sd-color-white) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-white:focus,a.sd-outline-white:hover{border-color:var(--sd-color-white-highlight) !important}.sd-bg-transparent{background-color:transparent !important}.sd-outline-transparent{border-color:transparent !important}.sd-text-transparent{color:transparent !important}.sd-p-0{padding:0 !important}.sd-pt-0,.sd-py-0{padding-top:0 !important}.sd-pr-0,.sd-px-0{padding-right:0 !important}.sd-pb-0,.sd-py-0{padding-bottom:0 !important}.sd-pl-0,.sd-px-0{padding-left:0 !important}.sd-p-1{padding:.25rem !important}.sd-pt-1,.sd-py-1{padding-top:.25rem !important}.sd-pr-1,.sd-px-1{padding-right:.25rem !important}.sd-pb-1,.sd-py-1{padding-bottom:.25rem !important}.sd-pl-1,.sd-px-1{padding-left:.25rem !important}.sd-p-2{padding:.5rem !important}.sd-pt-2,.sd-py-2{padding-top:.5rem !important}.sd-pr-2,.sd-px-2{padding-right:.5rem !important}.sd-pb-2,.sd-py-2{padding-bottom:.5rem !important}.sd-pl-2,.sd-px-2{padding-left:.5rem !important}.sd-p-3{padding:1rem !important}.sd-pt-3,.sd-py-3{padding-top:1rem !important}.sd-pr-3,.sd-px-3{padding-right:1rem !important}.sd-pb-3,.sd-py-3{padding-bottom:1rem !important}.sd-pl-3,.sd-px-3{padding-left:1rem !important}.sd-p-4{padding:1.5rem !important}.sd-pt-4,.sd-py-4{padding-top:1.5rem !important}.sd-pr-4,.sd-px-4{padding-right:1.5rem !important}.sd-pb-4,.sd-py-4{padding-bottom:1.5rem !important}.sd-pl-4,.sd-px-4{padding-left:1.5rem !important}.sd-p-5{padding:3rem !important}.sd-pt-5,.sd-py-5{padding-top:3rem !important}.sd-pr-5,.sd-px-5{padding-right:3rem !important}.sd-pb-5,.sd-py-5{padding-bottom:3rem !important}.sd-pl-5,.sd-px-5{padding-left:3rem !important}.sd-m-auto{margin:auto !important}.sd-mt-auto,.sd-my-auto{margin-top:auto !important}.sd-mr-auto,.sd-mx-auto{margin-right:auto !important}.sd-mb-auto,.sd-my-auto{margin-bottom:auto !important}.sd-ml-auto,.sd-mx-auto{margin-left:auto !important}.sd-m-0{margin:0 !important}.sd-mt-0,.sd-my-0{margin-top:0 !important}.sd-mr-0,.sd-mx-0{margin-right:0 !important}.sd-mb-0,.sd-my-0{margin-bottom:0 !important}.sd-ml-0,.sd-mx-0{margin-left:0 !important}.sd-m-1{margin:.25rem !important}.sd-mt-1,.sd-my-1{margin-top:.25rem !important}.sd-mr-1,.sd-mx-1{margin-right:.25rem !important}.sd-mb-1,.sd-my-1{margin-bottom:.25rem !important}.sd-ml-1,.sd-mx-1{margin-left:.25rem !important}.sd-m-2{margin:.5rem !important}.sd-mt-2,.sd-my-2{margin-top:.5rem !important}.sd-mr-2,.sd-mx-2{margin-right:.5rem !important}.sd-mb-2,.sd-my-2{margin-bottom:.5rem !important}.sd-ml-2,.sd-mx-2{margin-left:.5rem !important}.sd-m-3{margin:1rem !important}.sd-mt-3,.sd-my-3{margin-top:1rem !important}.sd-mr-3,.sd-mx-3{margin-right:1rem !important}.sd-mb-3,.sd-my-3{margin-bottom:1rem !important}.sd-ml-3,.sd-mx-3{margin-left:1rem !important}.sd-m-4{margin:1.5rem !important}.sd-mt-4,.sd-my-4{margin-top:1.5rem !important}.sd-mr-4,.sd-mx-4{margin-right:1.5rem !important}.sd-mb-4,.sd-my-4{margin-bottom:1.5rem !important}.sd-ml-4,.sd-mx-4{margin-left:1.5rem !important}.sd-m-5{margin:3rem !important}.sd-mt-5,.sd-my-5{margin-top:3rem !important}.sd-mr-5,.sd-mx-5{margin-right:3rem !important}.sd-mb-5,.sd-my-5{margin-bottom:3rem !important}.sd-ml-5,.sd-mx-5{margin-left:3rem !important}.sd-w-25{width:25% !important}.sd-w-50{width:50% !important}.sd-w-75{width:75% !important}.sd-w-100{width:100% !important}.sd-w-auto{width:auto !important}.sd-h-25{height:25% !important}.sd-h-50{height:50% !important}.sd-h-75{height:75% !important}.sd-h-100{height:100% !important}.sd-h-auto{height:auto !important}.sd-d-none{display:none !important}.sd-d-inline{display:inline !important}.sd-d-inline-block{display:inline-block !important}.sd-d-block{display:block !important}.sd-d-grid{display:grid !important}.sd-d-flex-row{display:-ms-flexbox !important;display:flex !important;flex-direction:row !important}.sd-d-flex-column{display:-ms-flexbox !important;display:flex !important;flex-direction:column !important}.sd-d-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}@media(min-width: 576px){.sd-d-sm-none{display:none !important}.sd-d-sm-inline{display:inline !important}.sd-d-sm-inline-block{display:inline-block !important}.sd-d-sm-block{display:block !important}.sd-d-sm-grid{display:grid !important}.sd-d-sm-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-sm-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 768px){.sd-d-md-none{display:none !important}.sd-d-md-inline{display:inline !important}.sd-d-md-inline-block{display:inline-block !important}.sd-d-md-block{display:block !important}.sd-d-md-grid{display:grid !important}.sd-d-md-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-md-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 992px){.sd-d-lg-none{display:none !important}.sd-d-lg-inline{display:inline !important}.sd-d-lg-inline-block{display:inline-block !important}.sd-d-lg-block{display:block !important}.sd-d-lg-grid{display:grid !important}.sd-d-lg-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-lg-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 1200px){.sd-d-xl-none{display:none !important}.sd-d-xl-inline{display:inline !important}.sd-d-xl-inline-block{display:inline-block !important}.sd-d-xl-block{display:block !important}.sd-d-xl-grid{display:grid !important}.sd-d-xl-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-xl-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}.sd-align-major-start{justify-content:flex-start !important}.sd-align-major-end{justify-content:flex-end !important}.sd-align-major-center{justify-content:center !important}.sd-align-major-justify{justify-content:space-between !important}.sd-align-major-spaced{justify-content:space-evenly !important}.sd-align-minor-start{align-items:flex-start !important}.sd-align-minor-end{align-items:flex-end !important}.sd-align-minor-center{align-items:center !important}.sd-align-minor-stretch{align-items:stretch !important}.sd-text-justify{text-align:justify !important}.sd-text-left{text-align:left !important}.sd-text-right{text-align:right !important}.sd-text-center{text-align:center !important}.sd-font-weight-light{font-weight:300 !important}.sd-font-weight-lighter{font-weight:lighter !important}.sd-font-weight-normal{font-weight:400 !important}.sd-font-weight-bold{font-weight:700 !important}.sd-font-weight-bolder{font-weight:bolder !important}.sd-font-italic{font-style:italic !important}.sd-text-decoration-none{text-decoration:none !important}.sd-text-lowercase{text-transform:lowercase !important}.sd-text-uppercase{text-transform:uppercase !important}.sd-text-capitalize{text-transform:capitalize !important}.sd-text-wrap{white-space:normal !important}.sd-text-nowrap{white-space:nowrap !important}.sd-text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sd-fs-1,.sd-fs-1>p{font-size:calc(1.375rem + 1.5vw) !important;line-height:unset !important}.sd-fs-2,.sd-fs-2>p{font-size:calc(1.325rem + 0.9vw) !important;line-height:unset !important}.sd-fs-3,.sd-fs-3>p{font-size:calc(1.3rem + 0.6vw) !important;line-height:unset !important}.sd-fs-4,.sd-fs-4>p{font-size:calc(1.275rem + 0.3vw) !important;line-height:unset !important}.sd-fs-5,.sd-fs-5>p{font-size:1.25rem !important;line-height:unset !important}.sd-fs-6,.sd-fs-6>p{font-size:1rem !important;line-height:unset !important}.sd-border-0{border:0 solid !important}.sd-border-top-0{border-top:0 solid !important}.sd-border-bottom-0{border-bottom:0 solid !important}.sd-border-right-0{border-right:0 solid !important}.sd-border-left-0{border-left:0 solid !important}.sd-border-1{border:1px solid !important}.sd-border-top-1{border-top:1px solid !important}.sd-border-bottom-1{border-bottom:1px solid !important}.sd-border-right-1{border-right:1px solid !important}.sd-border-left-1{border-left:1px solid !important}.sd-border-2{border:2px solid !important}.sd-border-top-2{border-top:2px solid !important}.sd-border-bottom-2{border-bottom:2px solid !important}.sd-border-right-2{border-right:2px solid !important}.sd-border-left-2{border-left:2px solid !important}.sd-border-3{border:3px solid !important}.sd-border-top-3{border-top:3px solid !important}.sd-border-bottom-3{border-bottom:3px solid !important}.sd-border-right-3{border-right:3px solid !important}.sd-border-left-3{border-left:3px solid !important}.sd-border-4{border:4px solid !important}.sd-border-top-4{border-top:4px solid !important}.sd-border-bottom-4{border-bottom:4px solid !important}.sd-border-right-4{border-right:4px solid !important}.sd-border-left-4{border-left:4px solid !important}.sd-border-5{border:5px solid !important}.sd-border-top-5{border-top:5px solid !important}.sd-border-bottom-5{border-bottom:5px solid !important}.sd-border-right-5{border-right:5px solid !important}.sd-border-left-5{border-left:5px solid !important}.sd-rounded-0{border-radius:0 !important}.sd-rounded-1{border-radius:.2rem !important}.sd-rounded-2{border-radius:.3rem !important}.sd-rounded-3{border-radius:.5rem !important}.sd-rounded-pill{border-radius:50rem !important}.sd-rounded-circle{border-radius:50% !important}.shadow-none{box-shadow:none !important}.sd-shadow-sm{box-shadow:0 .125rem .25rem var(--sd-color-shadow) !important}.sd-shadow-md{box-shadow:0 .5rem 1rem var(--sd-color-shadow) !important}.sd-shadow-lg{box-shadow:0 1rem 3rem var(--sd-color-shadow) !important}@keyframes sd-slide-from-left{0%{transform:translateX(-100%)}100%{transform:translateX(0)}}@keyframes sd-slide-from-right{0%{transform:translateX(200%)}100%{transform:translateX(0)}}@keyframes sd-grow100{0%{transform:scale(0);opacity:.5}100%{transform:scale(1);opacity:1}}@keyframes sd-grow50{0%{transform:scale(0.5);opacity:.5}100%{transform:scale(1);opacity:1}}@keyframes sd-grow50-rot20{0%{transform:scale(0.5) rotateZ(-20deg);opacity:.5}75%{transform:scale(1) rotateZ(5deg);opacity:1}95%{transform:scale(1) rotateZ(-1deg);opacity:1}100%{transform:scale(1) rotateZ(0);opacity:1}}.sd-animate-slide-from-left{animation:1s ease-out 0s 1 normal none running sd-slide-from-left}.sd-animate-slide-from-right{animation:1s ease-out 0s 1 normal none running sd-slide-from-right}.sd-animate-grow100{animation:1s ease-out 0s 1 normal none running sd-grow100}.sd-animate-grow50{animation:1s ease-out 0s 1 normal none running sd-grow50}.sd-animate-grow50-rot20{animation:1s ease-out 0s 1 normal none running sd-grow50-rot20}.sd-badge{display:inline-block;padding:.35em .65em;font-size:.75em;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.sd-badge:empty{display:none}a.sd-badge{text-decoration:none}.sd-btn .sd-badge{position:relative;top:-1px}.sd-btn{background-color:transparent;border:1px solid transparent;border-radius:.25rem;cursor:pointer;display:inline-block;font-weight:400;font-size:1rem;line-height:1.5;padding:.375rem .75rem;text-align:center;text-decoration:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;vertical-align:middle;user-select:none;-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none}.sd-btn:hover{text-decoration:none}@media(prefers-reduced-motion: reduce){.sd-btn{transition:none}}.sd-btn-primary,.sd-btn-outline-primary:hover,.sd-btn-outline-primary:focus{color:var(--sd-color-primary-text) !important;background-color:var(--sd-color-primary) !important;border-color:var(--sd-color-primary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-primary:hover,.sd-btn-primary:focus{color:var(--sd-color-primary-text) !important;background-color:var(--sd-color-primary-highlight) !important;border-color:var(--sd-color-primary-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-primary{color:var(--sd-color-primary) !important;border-color:var(--sd-color-primary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-secondary,.sd-btn-outline-secondary:hover,.sd-btn-outline-secondary:focus{color:var(--sd-color-secondary-text) !important;background-color:var(--sd-color-secondary) !important;border-color:var(--sd-color-secondary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-secondary:hover,.sd-btn-secondary:focus{color:var(--sd-color-secondary-text) !important;background-color:var(--sd-color-secondary-highlight) !important;border-color:var(--sd-color-secondary-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-secondary{color:var(--sd-color-secondary) !important;border-color:var(--sd-color-secondary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-success,.sd-btn-outline-success:hover,.sd-btn-outline-success:focus{color:var(--sd-color-success-text) !important;background-color:var(--sd-color-success) !important;border-color:var(--sd-color-success) !important;border-width:1px !important;border-style:solid !important}.sd-btn-success:hover,.sd-btn-success:focus{color:var(--sd-color-success-text) !important;background-color:var(--sd-color-success-highlight) !important;border-color:var(--sd-color-success-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-success{color:var(--sd-color-success) !important;border-color:var(--sd-color-success) !important;border-width:1px !important;border-style:solid !important}.sd-btn-info,.sd-btn-outline-info:hover,.sd-btn-outline-info:focus{color:var(--sd-color-info-text) !important;background-color:var(--sd-color-info) !important;border-color:var(--sd-color-info) !important;border-width:1px !important;border-style:solid !important}.sd-btn-info:hover,.sd-btn-info:focus{color:var(--sd-color-info-text) !important;background-color:var(--sd-color-info-highlight) !important;border-color:var(--sd-color-info-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-info{color:var(--sd-color-info) !important;border-color:var(--sd-color-info) !important;border-width:1px !important;border-style:solid !important}.sd-btn-warning,.sd-btn-outline-warning:hover,.sd-btn-outline-warning:focus{color:var(--sd-color-warning-text) !important;background-color:var(--sd-color-warning) !important;border-color:var(--sd-color-warning) !important;border-width:1px !important;border-style:solid !important}.sd-btn-warning:hover,.sd-btn-warning:focus{color:var(--sd-color-warning-text) !important;background-color:var(--sd-color-warning-highlight) !important;border-color:var(--sd-color-warning-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-warning{color:var(--sd-color-warning) !important;border-color:var(--sd-color-warning) !important;border-width:1px !important;border-style:solid !important}.sd-btn-danger,.sd-btn-outline-danger:hover,.sd-btn-outline-danger:focus{color:var(--sd-color-danger-text) !important;background-color:var(--sd-color-danger) !important;border-color:var(--sd-color-danger) !important;border-width:1px !important;border-style:solid !important}.sd-btn-danger:hover,.sd-btn-danger:focus{color:var(--sd-color-danger-text) !important;background-color:var(--sd-color-danger-highlight) !important;border-color:var(--sd-color-danger-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-danger{color:var(--sd-color-danger) !important;border-color:var(--sd-color-danger) !important;border-width:1px !important;border-style:solid !important}.sd-btn-light,.sd-btn-outline-light:hover,.sd-btn-outline-light:focus{color:var(--sd-color-light-text) !important;background-color:var(--sd-color-light) !important;border-color:var(--sd-color-light) !important;border-width:1px !important;border-style:solid !important}.sd-btn-light:hover,.sd-btn-light:focus{color:var(--sd-color-light-text) !important;background-color:var(--sd-color-light-highlight) !important;border-color:var(--sd-color-light-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-light{color:var(--sd-color-light) !important;border-color:var(--sd-color-light) !important;border-width:1px !important;border-style:solid !important}.sd-btn-muted,.sd-btn-outline-muted:hover,.sd-btn-outline-muted:focus{color:var(--sd-color-muted-text) !important;background-color:var(--sd-color-muted) !important;border-color:var(--sd-color-muted) !important;border-width:1px !important;border-style:solid !important}.sd-btn-muted:hover,.sd-btn-muted:focus{color:var(--sd-color-muted-text) !important;background-color:var(--sd-color-muted-highlight) !important;border-color:var(--sd-color-muted-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-muted{color:var(--sd-color-muted) !important;border-color:var(--sd-color-muted) !important;border-width:1px !important;border-style:solid !important}.sd-btn-dark,.sd-btn-outline-dark:hover,.sd-btn-outline-dark:focus{color:var(--sd-color-dark-text) !important;background-color:var(--sd-color-dark) !important;border-color:var(--sd-color-dark) !important;border-width:1px !important;border-style:solid !important}.sd-btn-dark:hover,.sd-btn-dark:focus{color:var(--sd-color-dark-text) !important;background-color:var(--sd-color-dark-highlight) !important;border-color:var(--sd-color-dark-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-dark{color:var(--sd-color-dark) !important;border-color:var(--sd-color-dark) !important;border-width:1px !important;border-style:solid !important}.sd-btn-black,.sd-btn-outline-black:hover,.sd-btn-outline-black:focus{color:var(--sd-color-black-text) !important;background-color:var(--sd-color-black) !important;border-color:var(--sd-color-black) !important;border-width:1px !important;border-style:solid !important}.sd-btn-black:hover,.sd-btn-black:focus{color:var(--sd-color-black-text) !important;background-color:var(--sd-color-black-highlight) !important;border-color:var(--sd-color-black-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-black{color:var(--sd-color-black) !important;border-color:var(--sd-color-black) !important;border-width:1px !important;border-style:solid !important}.sd-btn-white,.sd-btn-outline-white:hover,.sd-btn-outline-white:focus{color:var(--sd-color-white-text) !important;background-color:var(--sd-color-white) !important;border-color:var(--sd-color-white) !important;border-width:1px !important;border-style:solid !important}.sd-btn-white:hover,.sd-btn-white:focus{color:var(--sd-color-white-text) !important;background-color:var(--sd-color-white-highlight) !important;border-color:var(--sd-color-white-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-white{color:var(--sd-color-white) !important;border-color:var(--sd-color-white) !important;border-width:1px !important;border-style:solid !important}.sd-stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}.sd-octicon,.sd-material-icon{display:inline-block;fill:currentColor;vertical-align:middle}.sd-avatar-xs{border-radius:50%;object-fit:cover;object-position:center;width:1rem;height:1rem}.sd-avatar-sm{border-radius:50%;object-fit:cover;object-position:center;width:3rem;height:3rem}.sd-avatar-md{border-radius:50%;object-fit:cover;object-position:center;width:5rem;height:5rem}.sd-avatar-lg{border-radius:50%;object-fit:cover;object-position:center;width:7rem;height:7rem}.sd-avatar-xl{border-radius:50%;object-fit:cover;object-position:center;width:10rem;height:10rem}.sd-avatar-inherit{border-radius:50%;object-fit:cover;object-position:center;width:inherit;height:inherit}.sd-avatar-initial{border-radius:50%;object-fit:cover;object-position:center;width:initial;height:initial}.sd-card{background-clip:border-box;background-color:var(--sd-color-card-background);border:1px solid var(--sd-color-card-border);border-radius:.25rem;color:var(--sd-color-card-text);display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;position:relative;word-wrap:break-word}.sd-card>hr{margin-left:0;margin-right:0}.sd-card-hover:hover{border-color:var(--sd-color-card-border-hover);transform:scale(1.01)}.sd-card-body{-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem 1rem}.sd-card-title{margin-bottom:.5rem}.sd-card-subtitle{margin-top:-0.25rem;margin-bottom:0}.sd-card-text:last-child{margin-bottom:0}.sd-card-link:hover{text-decoration:none}.sd-card-link+.card-link{margin-left:1rem}.sd-card-header{padding:.5rem 1rem;margin-bottom:0;background-color:var(--sd-color-card-header);border-bottom:1px solid var(--sd-color-card-border)}.sd-card-header:first-child{border-radius:calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0}.sd-card-footer{padding:.5rem 1rem;background-color:var(--sd-color-card-footer);border-top:1px solid var(--sd-color-card-border)}.sd-card-footer:last-child{border-radius:0 0 calc(0.25rem - 1px) calc(0.25rem - 1px)}.sd-card-header-tabs{margin-right:-0.5rem;margin-bottom:-0.5rem;margin-left:-0.5rem;border-bottom:0}.sd-card-header-pills{margin-right:-0.5rem;margin-left:-0.5rem}.sd-card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1rem;border-radius:calc(0.25rem - 1px)}.sd-card-img,.sd-card-img-bottom,.sd-card-img-top{width:100%}.sd-card-img,.sd-card-img-top{border-top-left-radius:calc(0.25rem - 1px);border-top-right-radius:calc(0.25rem - 1px)}.sd-card-img,.sd-card-img-bottom{border-bottom-left-radius:calc(0.25rem - 1px);border-bottom-right-radius:calc(0.25rem - 1px)}.sd-cards-carousel{width:100%;display:flex;flex-wrap:nowrap;-ms-flex-direction:row;flex-direction:row;overflow-x:hidden;scroll-snap-type:x mandatory}.sd-cards-carousel.sd-show-scrollbar{overflow-x:auto}.sd-cards-carousel:hover,.sd-cards-carousel:focus{overflow-x:auto}.sd-cards-carousel>.sd-card{flex-shrink:0;scroll-snap-align:start}.sd-cards-carousel>.sd-card:not(:last-child){margin-right:3px}.sd-card-cols-1>.sd-card{width:90%}.sd-card-cols-2>.sd-card{width:45%}.sd-card-cols-3>.sd-card{width:30%}.sd-card-cols-4>.sd-card{width:22.5%}.sd-card-cols-5>.sd-card{width:18%}.sd-card-cols-6>.sd-card{width:15%}.sd-card-cols-7>.sd-card{width:12.8571428571%}.sd-card-cols-8>.sd-card{width:11.25%}.sd-card-cols-9>.sd-card{width:10%}.sd-card-cols-10>.sd-card{width:9%}.sd-card-cols-11>.sd-card{width:8.1818181818%}.sd-card-cols-12>.sd-card{width:7.5%}.sd-container,.sd-container-fluid,.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container-xl{margin-left:auto;margin-right:auto;padding-left:var(--sd-gutter-x, 0.75rem);padding-right:var(--sd-gutter-x, 0.75rem);width:100%}@media(min-width: 576px){.sd-container-sm,.sd-container{max-width:540px}}@media(min-width: 768px){.sd-container-md,.sd-container-sm,.sd-container{max-width:720px}}@media(min-width: 992px){.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container{max-width:960px}}@media(min-width: 1200px){.sd-container-xl,.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container{max-width:1140px}}.sd-row{--sd-gutter-x: 1.5rem;--sd-gutter-y: 0;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-top:calc(var(--sd-gutter-y) * -1);margin-right:calc(var(--sd-gutter-x) * -0.5);margin-left:calc(var(--sd-gutter-x) * -0.5)}.sd-row>*{box-sizing:border-box;flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--sd-gutter-x) * 0.5);padding-left:calc(var(--sd-gutter-x) * 0.5);margin-top:var(--sd-gutter-y)}.sd-col{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-auto>*{flex:0 0 auto;width:auto}.sd-row-cols-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}@media(min-width: 576px){.sd-col-sm{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-sm-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-sm-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-sm-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-sm-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-sm-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-sm-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-sm-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-sm-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-sm-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-sm-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-sm-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-sm-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-sm-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 768px){.sd-col-md{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-md-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-md-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-md-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-md-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-md-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-md-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-md-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-md-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-md-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-md-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-md-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-md-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-md-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 992px){.sd-col-lg{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-lg-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-lg-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-lg-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-lg-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-lg-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-lg-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-lg-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-lg-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-lg-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-lg-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-lg-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-lg-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-lg-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 1200px){.sd-col-xl{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-xl-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-xl-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-xl-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-xl-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-xl-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-xl-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-xl-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-xl-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-xl-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-xl-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-xl-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-xl-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-xl-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}.sd-col-auto{flex:0 0 auto;-ms-flex:0 0 auto;width:auto}.sd-col-1{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}.sd-col-2{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-col-3{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-col-4{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-col-5{flex:0 0 auto;-ms-flex:0 0 auto;width:41.6666666667%}.sd-col-6{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-col-7{flex:0 0 auto;-ms-flex:0 0 auto;width:58.3333333333%}.sd-col-8{flex:0 0 auto;-ms-flex:0 0 auto;width:66.6666666667%}.sd-col-9{flex:0 0 auto;-ms-flex:0 0 auto;width:75%}.sd-col-10{flex:0 0 auto;-ms-flex:0 0 auto;width:83.3333333333%}.sd-col-11{flex:0 0 auto;-ms-flex:0 0 auto;width:91.6666666667%}.sd-col-12{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-g-0,.sd-gy-0{--sd-gutter-y: 0}.sd-g-0,.sd-gx-0{--sd-gutter-x: 0}.sd-g-1,.sd-gy-1{--sd-gutter-y: 0.25rem}.sd-g-1,.sd-gx-1{--sd-gutter-x: 0.25rem}.sd-g-2,.sd-gy-2{--sd-gutter-y: 0.5rem}.sd-g-2,.sd-gx-2{--sd-gutter-x: 0.5rem}.sd-g-3,.sd-gy-3{--sd-gutter-y: 1rem}.sd-g-3,.sd-gx-3{--sd-gutter-x: 1rem}.sd-g-4,.sd-gy-4{--sd-gutter-y: 1.5rem}.sd-g-4,.sd-gx-4{--sd-gutter-x: 1.5rem}.sd-g-5,.sd-gy-5{--sd-gutter-y: 3rem}.sd-g-5,.sd-gx-5{--sd-gutter-x: 3rem}@media(min-width: 576px){.sd-col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-sm-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-sm-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-sm-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-sm-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-sm-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-sm-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-sm-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-sm-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-sm-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-sm-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-sm-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-sm-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-sm-0,.sd-gy-sm-0{--sd-gutter-y: 0}.sd-g-sm-0,.sd-gx-sm-0{--sd-gutter-x: 0}.sd-g-sm-1,.sd-gy-sm-1{--sd-gutter-y: 0.25rem}.sd-g-sm-1,.sd-gx-sm-1{--sd-gutter-x: 0.25rem}.sd-g-sm-2,.sd-gy-sm-2{--sd-gutter-y: 0.5rem}.sd-g-sm-2,.sd-gx-sm-2{--sd-gutter-x: 0.5rem}.sd-g-sm-3,.sd-gy-sm-3{--sd-gutter-y: 1rem}.sd-g-sm-3,.sd-gx-sm-3{--sd-gutter-x: 1rem}.sd-g-sm-4,.sd-gy-sm-4{--sd-gutter-y: 1.5rem}.sd-g-sm-4,.sd-gx-sm-4{--sd-gutter-x: 1.5rem}.sd-g-sm-5,.sd-gy-sm-5{--sd-gutter-y: 3rem}.sd-g-sm-5,.sd-gx-sm-5{--sd-gutter-x: 3rem}}@media(min-width: 768px){.sd-col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-md-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-md-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-md-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-md-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-md-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-md-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-md-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-md-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-md-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-md-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-md-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-md-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-md-0,.sd-gy-md-0{--sd-gutter-y: 0}.sd-g-md-0,.sd-gx-md-0{--sd-gutter-x: 0}.sd-g-md-1,.sd-gy-md-1{--sd-gutter-y: 0.25rem}.sd-g-md-1,.sd-gx-md-1{--sd-gutter-x: 0.25rem}.sd-g-md-2,.sd-gy-md-2{--sd-gutter-y: 0.5rem}.sd-g-md-2,.sd-gx-md-2{--sd-gutter-x: 0.5rem}.sd-g-md-3,.sd-gy-md-3{--sd-gutter-y: 1rem}.sd-g-md-3,.sd-gx-md-3{--sd-gutter-x: 1rem}.sd-g-md-4,.sd-gy-md-4{--sd-gutter-y: 1.5rem}.sd-g-md-4,.sd-gx-md-4{--sd-gutter-x: 1.5rem}.sd-g-md-5,.sd-gy-md-5{--sd-gutter-y: 3rem}.sd-g-md-5,.sd-gx-md-5{--sd-gutter-x: 3rem}}@media(min-width: 992px){.sd-col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-lg-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-lg-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-lg-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-lg-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-lg-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-lg-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-lg-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-lg-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-lg-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-lg-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-lg-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-lg-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-lg-0,.sd-gy-lg-0{--sd-gutter-y: 0}.sd-g-lg-0,.sd-gx-lg-0{--sd-gutter-x: 0}.sd-g-lg-1,.sd-gy-lg-1{--sd-gutter-y: 0.25rem}.sd-g-lg-1,.sd-gx-lg-1{--sd-gutter-x: 0.25rem}.sd-g-lg-2,.sd-gy-lg-2{--sd-gutter-y: 0.5rem}.sd-g-lg-2,.sd-gx-lg-2{--sd-gutter-x: 0.5rem}.sd-g-lg-3,.sd-gy-lg-3{--sd-gutter-y: 1rem}.sd-g-lg-3,.sd-gx-lg-3{--sd-gutter-x: 1rem}.sd-g-lg-4,.sd-gy-lg-4{--sd-gutter-y: 1.5rem}.sd-g-lg-4,.sd-gx-lg-4{--sd-gutter-x: 1.5rem}.sd-g-lg-5,.sd-gy-lg-5{--sd-gutter-y: 3rem}.sd-g-lg-5,.sd-gx-lg-5{--sd-gutter-x: 3rem}}@media(min-width: 1200px){.sd-col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-xl-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-xl-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-xl-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-xl-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-xl-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-xl-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-xl-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-xl-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-xl-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-xl-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-xl-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-xl-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-xl-0,.sd-gy-xl-0{--sd-gutter-y: 0}.sd-g-xl-0,.sd-gx-xl-0{--sd-gutter-x: 0}.sd-g-xl-1,.sd-gy-xl-1{--sd-gutter-y: 0.25rem}.sd-g-xl-1,.sd-gx-xl-1{--sd-gutter-x: 0.25rem}.sd-g-xl-2,.sd-gy-xl-2{--sd-gutter-y: 0.5rem}.sd-g-xl-2,.sd-gx-xl-2{--sd-gutter-x: 0.5rem}.sd-g-xl-3,.sd-gy-xl-3{--sd-gutter-y: 1rem}.sd-g-xl-3,.sd-gx-xl-3{--sd-gutter-x: 1rem}.sd-g-xl-4,.sd-gy-xl-4{--sd-gutter-y: 1.5rem}.sd-g-xl-4,.sd-gx-xl-4{--sd-gutter-x: 1.5rem}.sd-g-xl-5,.sd-gy-xl-5{--sd-gutter-y: 3rem}.sd-g-xl-5,.sd-gx-xl-5{--sd-gutter-x: 3rem}}.sd-flex-row-reverse{flex-direction:row-reverse !important}details.sd-dropdown{position:relative}details.sd-dropdown .sd-summary-title{font-weight:700;padding-right:3em !important;-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;user-select:none}details.sd-dropdown:hover{cursor:pointer}details.sd-dropdown .sd-summary-content{cursor:default}details.sd-dropdown summary{list-style:none;padding:1em}details.sd-dropdown summary .sd-octicon.no-title{vertical-align:middle}details.sd-dropdown[open] summary .sd-octicon.no-title{visibility:hidden}details.sd-dropdown summary::-webkit-details-marker{display:none}details.sd-dropdown summary:focus{outline:none}details.sd-dropdown .sd-summary-icon{margin-right:.5em}details.sd-dropdown .sd-summary-icon svg{opacity:.8}details.sd-dropdown summary:hover .sd-summary-up svg,details.sd-dropdown summary:hover .sd-summary-down svg{opacity:1;transform:scale(1.1)}details.sd-dropdown .sd-summary-up svg,details.sd-dropdown .sd-summary-down svg{display:block;opacity:.6}details.sd-dropdown .sd-summary-up,details.sd-dropdown .sd-summary-down{pointer-events:none;position:absolute;right:1em;top:1em}details.sd-dropdown[open]>.sd-summary-title .sd-summary-down{visibility:hidden}details.sd-dropdown:not([open])>.sd-summary-title .sd-summary-up{visibility:hidden}details.sd-dropdown:not([open]).sd-card{border:none}details.sd-dropdown:not([open])>.sd-card-header{border:1px solid var(--sd-color-card-border);border-radius:.25rem}details.sd-dropdown.sd-fade-in[open] summary~*{-moz-animation:sd-fade-in .5s ease-in-out;-webkit-animation:sd-fade-in .5s ease-in-out;animation:sd-fade-in .5s ease-in-out}details.sd-dropdown.sd-fade-in-slide-down[open] summary~*{-moz-animation:sd-fade-in .5s ease-in-out,sd-slide-down .5s ease-in-out;-webkit-animation:sd-fade-in .5s ease-in-out,sd-slide-down .5s ease-in-out;animation:sd-fade-in .5s ease-in-out,sd-slide-down .5s ease-in-out}.sd-col>.sd-dropdown{width:100%}.sd-summary-content>.sd-tab-set:first-child{margin-top:0}@keyframes sd-fade-in{0%{opacity:0}100%{opacity:1}}@keyframes sd-slide-down{0%{transform:translate(0, -10px)}100%{transform:translate(0, 0)}}.sd-tab-set{border-radius:.125rem;display:flex;flex-wrap:wrap;margin:1em 0;position:relative}.sd-tab-set>input{opacity:0;position:absolute}.sd-tab-set>input:checked+label{border-color:var(--sd-color-tabs-underline-active);color:var(--sd-color-tabs-label-active)}.sd-tab-set>input:checked+label+.sd-tab-content{display:block}.sd-tab-set>input:not(:checked)+label:hover{color:var(--sd-color-tabs-label-hover);border-color:var(--sd-color-tabs-underline-hover)}.sd-tab-set>input:focus+label{outline-style:auto}.sd-tab-set>input:not(.focus-visible)+label{outline:none;-webkit-tap-highlight-color:transparent}.sd-tab-set>label{border-bottom:.125rem solid transparent;margin-bottom:0;color:var(--sd-color-tabs-label-inactive);border-color:var(--sd-color-tabs-underline-inactive);cursor:pointer;font-size:var(--sd-fontsize-tabs-label);font-weight:700;padding:1em 1.25em .5em;transition:color 250ms;width:auto;z-index:1}html .sd-tab-set>label:hover{color:var(--sd-color-tabs-label-active)}.sd-col>.sd-tab-set{width:100%}.sd-tab-content{box-shadow:0 -0.0625rem var(--sd-color-tabs-overline),0 .0625rem var(--sd-color-tabs-underline);display:none;order:99;padding-bottom:.75rem;padding-top:.75rem;width:100%}.sd-tab-content>:first-child{margin-top:0 !important}.sd-tab-content>:last-child{margin-bottom:0 !important}.sd-tab-content>.sd-tab-set{margin:0}.sd-sphinx-override,.sd-sphinx-override *{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.sd-sphinx-override p{margin-top:0}:root{--sd-color-primary: #007bff;--sd-color-secondary: #6c757d;--sd-color-success: #28a745;--sd-color-info: #17a2b8;--sd-color-warning: #f0b37e;--sd-color-danger: #dc3545;--sd-color-light: #f8f9fa;--sd-color-muted: #6c757d;--sd-color-dark: #212529;--sd-color-black: black;--sd-color-white: white;--sd-color-primary-highlight: #0069d9;--sd-color-secondary-highlight: #5c636a;--sd-color-success-highlight: #228e3b;--sd-color-info-highlight: #148a9c;--sd-color-warning-highlight: #cc986b;--sd-color-danger-highlight: #bb2d3b;--sd-color-light-highlight: #d3d4d5;--sd-color-muted-highlight: #5c636a;--sd-color-dark-highlight: #1c1f23;--sd-color-black-highlight: black;--sd-color-white-highlight: #d9d9d9;--sd-color-primary-text: #fff;--sd-color-secondary-text: #fff;--sd-color-success-text: #fff;--sd-color-info-text: #fff;--sd-color-warning-text: #212529;--sd-color-danger-text: #fff;--sd-color-light-text: #212529;--sd-color-muted-text: #fff;--sd-color-dark-text: #fff;--sd-color-black-text: #fff;--sd-color-white-text: #212529;--sd-color-shadow: rgba(0, 0, 0, 0.15);--sd-color-card-border: rgba(0, 0, 0, 0.125);--sd-color-card-border-hover: hsla(231, 99%, 66%, 1);--sd-color-card-background: transparent;--sd-color-card-text: inherit;--sd-color-card-header: transparent;--sd-color-card-footer: transparent;--sd-color-tabs-label-active: hsla(231, 99%, 66%, 1);--sd-color-tabs-label-hover: hsla(231, 99%, 66%, 1);--sd-color-tabs-label-inactive: hsl(0, 0%, 66%);--sd-color-tabs-underline-active: hsla(231, 99%, 66%, 1);--sd-color-tabs-underline-hover: rgba(178, 206, 245, 0.62);--sd-color-tabs-underline-inactive: transparent;--sd-color-tabs-overline: rgb(222, 222, 222);--sd-color-tabs-underline: rgb(222, 222, 222);--sd-fontsize-tabs-label: 1rem} diff --git a/_sphinx_design_static/design-tabs.js b/_sphinx_design_static/design-tabs.js new file mode 100644 index 00000000..36b38cf0 --- /dev/null +++ b/_sphinx_design_static/design-tabs.js @@ -0,0 +1,27 @@ +var sd_labels_by_text = {}; + +function ready() { + const li = document.getElementsByClassName("sd-tab-label"); + for (const label of li) { + syncId = label.getAttribute("data-sync-id"); + if (syncId) { + label.onclick = onLabelClick; + if (!sd_labels_by_text[syncId]) { + sd_labels_by_text[syncId] = []; + } + sd_labels_by_text[syncId].push(label); + } + } +} + +function onLabelClick() { + // Activate other inputs with the same sync id. + syncId = this.getAttribute("data-sync-id"); + for (label of sd_labels_by_text[syncId]) { + if (label === this) continue; + label.previousElementSibling.checked = true; + } + window.localStorage.setItem("sphinx-design-last-tab", syncId); +} + +document.addEventListener("DOMContentLoaded", ready, false); diff --git a/_static/basic.css b/_static/basic.css new file mode 100644 index 00000000..d54be806 --- /dev/null +++ b/_static/basic.css @@ -0,0 +1,906 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +div.section::after { + display: block; + content: ''; + clear: left; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 270px; + margin-left: -100%; + font-size: 90%; + word-wrap: break-word; + overflow-wrap : break-word; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox form.search { + overflow: hidden; +} + +div.sphinxsidebar #searchbox input[type="text"] { + float: left; + width: 80%; + padding: 0.25em; + box-sizing: border-box; +} + +div.sphinxsidebar #searchbox input[type="submit"] { + float: left; + width: 20%; + border-left: none; + padding: 0.25em; + box-sizing: border-box; +} + + +img { + border: 0; + max-width: 100%; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li p.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; + margin-left: auto; + margin-right: auto; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable ul { + margin-top: 0; + margin-bottom: 0; + list-style-type: none; +} + +table.indextable > tbody > tr > td > ul { + padding-left: 0em; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + +/* -- general body styles --------------------------------------------------- */ + +div.body { + min-width: 450px; + max-width: 800px; +} + +div.body p, div.body dd, div.body li, div.body blockquote { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + +a.headerlink { + visibility: hidden; +} + +a.brackets:before, +span.brackets > a:before{ + content: "["; +} + +a.brackets:after, +span.brackets > a:after { + content: "]"; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, figure.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, figure.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, figure.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +img.align-default, figure.align-default, .figure.align-default { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-default { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar, +aside.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px; + background-color: #ffe; + width: 40%; + float: right; + clear: right; + overflow-x: auto; +} + +p.sidebar-title { + font-weight: bold; +} + +div.admonition, div.topic, blockquote { + clear: left; +} + +/* -- topics ---------------------------------------------------------------- */ + +div.topic { + border: 1px solid #ccc; + padding: 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- content of sidebars/topics/admonitions -------------------------------- */ + +div.sidebar > :last-child, +aside.sidebar > :last-child, +div.topic > :last-child, +div.admonition > :last-child { + margin-bottom: 0; +} + +div.sidebar::after, +aside.sidebar::after, +div.topic::after, +div.admonition::after, +blockquote::after { + display: block; + content: ''; + clear: both; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + margin-top: 10px; + margin-bottom: 10px; + border: 0; + border-collapse: collapse; +} + +table.align-center { + margin-left: auto; + margin-right: auto; +} + +table.align-default { + margin-left: auto; + margin-right: auto; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +table.footnote td, table.footnote th { + border: 0 !important; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +th > :first-child, +td > :first-child { + margin-top: 0px; +} + +th > :last-child, +td > :last-child { + margin-bottom: 0px; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure, figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption, figcaption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number, +figcaption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text, +figcaption span.caption-text { +} + +/* -- field list styles ----------------------------------------------------- */ + +table.field-list td, table.field-list th { + border: 0 !important; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +/* -- hlist styles ---------------------------------------------------------- */ + +table.hlist { + margin: 1em 0; +} + +table.hlist td { + vertical-align: top; +} + +/* -- object description styles --------------------------------------------- */ + +.sig { + font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; +} + +.sig-name, code.descname { + background-color: transparent; + font-weight: bold; +} + +.sig-name { + font-size: 1.1em; +} + +code.descname { + font-size: 1.2em; +} + +.sig-prename, code.descclassname { + background-color: transparent; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.sig-param.n { + font-style: italic; +} + +/* C++ specific styling */ + +.sig-inline.c-texpr, +.sig-inline.cpp-texpr { + font-family: unset; +} + +.sig.c .k, .sig.c .kt, +.sig.cpp .k, .sig.cpp .kt { + color: #0033B3; +} + +.sig.c .m, +.sig.cpp .m { + color: #1750EB; +} + +.sig.c .s, .sig.c .sc, +.sig.cpp .s, .sig.cpp .sc { + color: #067D17; +} + + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +:not(li) > ol > li:first-child > :first-child, +:not(li) > ul > li:first-child > :first-child { + margin-top: 0px; +} + +:not(li) > ol > li:last-child > :last-child, +:not(li) > ul > li:last-child > :last-child { + margin-bottom: 0px; +} + +ol.simple ol p, +ol.simple ul p, +ul.simple ol p, +ul.simple ul p { + margin-top: 0; +} + +ol.simple > li:not(:first-child) > p, +ul.simple > li:not(:first-child) > p { + margin-top: 0; +} + +ol.simple p, +ul.simple p { + margin-bottom: 0; +} + +dl.footnote > dt, +dl.citation > dt { + float: left; + margin-right: 0.5em; +} + +dl.footnote > dd, +dl.citation > dd { + margin-bottom: 0em; +} + +dl.footnote > dd:after, +dl.citation > dd:after { + content: ""; + clear: both; +} + +dl.field-list { + display: grid; + grid-template-columns: fit-content(30%) auto; +} + +dl.field-list > dt { + font-weight: bold; + word-break: break-word; + padding-left: 0.5em; + padding-right: 5px; +} + +dl.field-list > dt:after { + content: ":"; +} + +dl.field-list > dd { + padding-left: 0.5em; + margin-top: 0em; + margin-left: 0em; + margin-bottom: 0em; +} + +dl { + margin-bottom: 15px; +} + +dd > :first-child { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +dl > dd:last-child, +dl > dd:last-child > :last-child { + margin-bottom: 0; +} + +dt:target, span.highlighted { + background-color: #fbe54e; +} + +rect.highlighted { + fill: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +.classifier:before { + font-style: normal; + margin: 0 0.5em; + content: ":"; + display: inline-block; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +pre, div[class*="highlight-"] { + clear: both; +} + +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; + white-space: nowrap; +} + +div[class*="highlight-"] { + margin: 1em 0; +} + +td.linenos pre { + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + display: block; +} + +table.highlighttable tbody { + display: block; +} + +table.highlighttable tr { + display: flex; +} + +table.highlighttable td { + margin: 0; + padding: 0; +} + +table.highlighttable td.linenos { + padding-right: 0.5em; +} + +table.highlighttable td.code { + flex: 1; + overflow: hidden; +} + +.highlight .hll { + display: block; +} + +div.highlight pre, +table.highlighttable pre { + margin: 0; +} + +div.code-block-caption + div { + margin-top: 0; +} + +div.code-block-caption { + margin-top: 1em; + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +table.highlighttable td.linenos, +span.linenos, +div.highlight span.gp { /* gp: Generic.Prompt */ + user-select: none; + -webkit-user-select: text; /* Safari fallback only */ + -webkit-user-select: none; /* Chrome/Safari */ + -moz-user-select: none; /* Firefox */ + -ms-user-select: none; /* IE10+ */ +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + margin: 1em 0; +} + +code.xref, a code { + background-color: transparent; + font-weight: bold; +} + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +span.eqno a.headerlink { + position: absolute; + z-index: 1; +} + +div.math:hover a.headerlink { + visibility: visible; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file diff --git a/_static/check-solid.svg b/_static/check-solid.svg new file mode 100644 index 00000000..92fad4b5 --- /dev/null +++ b/_static/check-solid.svg @@ -0,0 +1,4 @@ + + + + diff --git a/_static/clipboard.min.js b/_static/clipboard.min.js new file mode 100644 index 00000000..54b3c463 --- /dev/null +++ b/_static/clipboard.min.js @@ -0,0 +1,7 @@ +/*! + * clipboard.js v2.0.8 + * https://clipboardjs.com/ + * + * Licensed MIT © Zeno Rocha + */ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ClipboardJS=e():t.ClipboardJS=e()}(this,function(){return n={686:function(t,e,n){"use strict";n.d(e,{default:function(){return o}});var e=n(279),i=n.n(e),e=n(370),u=n.n(e),e=n(817),c=n.n(e);function a(t){try{return document.execCommand(t)}catch(t){return}}var f=function(t){t=c()(t);return a("cut"),t};var l=function(t){var e,n,o,r=1 + + + + diff --git a/_static/copybutton.css b/_static/copybutton.css new file mode 100644 index 00000000..f1916ec7 --- /dev/null +++ b/_static/copybutton.css @@ -0,0 +1,94 @@ +/* Copy buttons */ +button.copybtn { + position: absolute; + display: flex; + top: .3em; + right: .3em; + width: 1.7em; + height: 1.7em; + opacity: 0; + transition: opacity 0.3s, border .3s, background-color .3s; + user-select: none; + padding: 0; + border: none; + outline: none; + border-radius: 0.4em; + /* The colors that GitHub uses */ + border: #1b1f2426 1px solid; + background-color: #f6f8fa; + color: #57606a; +} + +button.copybtn.success { + border-color: #22863a; + color: #22863a; +} + +button.copybtn svg { + stroke: currentColor; + width: 1.5em; + height: 1.5em; + padding: 0.1em; +} + +div.highlight { + position: relative; +} + +/* Show the copybutton */ +.highlight:hover button.copybtn, button.copybtn.success { + opacity: 1; +} + +.highlight button.copybtn:hover { + background-color: rgb(235, 235, 235); +} + +.highlight button.copybtn:active { + background-color: rgb(187, 187, 187); +} + +/** + * A minimal CSS-only tooltip copied from: + * https://codepen.io/mildrenben/pen/rVBrpK + * + * To use, write HTML like the following: + * + *

Short

+ */ + .o-tooltip--left { + position: relative; + } + + .o-tooltip--left:after { + opacity: 0; + visibility: hidden; + position: absolute; + content: attr(data-tooltip); + padding: .2em; + font-size: .8em; + left: -.2em; + background: grey; + color: white; + white-space: nowrap; + z-index: 2; + border-radius: 2px; + transform: translateX(-102%) translateY(0); + transition: opacity 0.2s cubic-bezier(0.64, 0.09, 0.08, 1), transform 0.2s cubic-bezier(0.64, 0.09, 0.08, 1); +} + +.o-tooltip--left:hover:after { + display: block; + opacity: 1; + visibility: visible; + transform: translateX(-100%) translateY(0); + transition: opacity 0.2s cubic-bezier(0.64, 0.09, 0.08, 1), transform 0.2s cubic-bezier(0.64, 0.09, 0.08, 1); + transition-delay: .5s; +} + +/* By default the copy button shouldn't show up when printing a page */ +@media print { + button.copybtn { + display: none; + } +} diff --git a/_static/copybutton.js b/_static/copybutton.js new file mode 100644 index 00000000..efcb35cd --- /dev/null +++ b/_static/copybutton.js @@ -0,0 +1,248 @@ +// Localization support +const messages = { + 'en': { + 'copy': 'Copy', + 'copy_to_clipboard': 'Copy to clipboard', + 'copy_success': 'Copied!', + 'copy_failure': 'Failed to copy', + }, + 'es' : { + 'copy': 'Copiar', + 'copy_to_clipboard': 'Copiar al portapapeles', + 'copy_success': '¡Copiado!', + 'copy_failure': 'Error al copiar', + }, + 'de' : { + 'copy': 'Kopieren', + 'copy_to_clipboard': 'In die Zwischenablage kopieren', + 'copy_success': 'Kopiert!', + 'copy_failure': 'Fehler beim Kopieren', + }, + 'fr' : { + 'copy': 'Copier', + 'copy_to_clipboard': 'Copier dans le presse-papier', + 'copy_success': 'Copié !', + 'copy_failure': 'Échec de la copie', + }, + 'ru': { + 'copy': 'Скопировать', + 'copy_to_clipboard': 'Скопировать в буфер', + 'copy_success': 'Скопировано!', + 'copy_failure': 'Не удалось скопировать', + }, + 'zh-CN': { + 'copy': '复制', + 'copy_to_clipboard': '复制到剪贴板', + 'copy_success': '复制成功!', + 'copy_failure': '复制失败', + }, + 'it' : { + 'copy': 'Copiare', + 'copy_to_clipboard': 'Copiato negli appunti', + 'copy_success': 'Copiato!', + 'copy_failure': 'Errore durante la copia', + } +} + +let locale = 'en' +if( document.documentElement.lang !== undefined + && messages[document.documentElement.lang] !== undefined ) { + locale = document.documentElement.lang +} + +let doc_url_root = DOCUMENTATION_OPTIONS.URL_ROOT; +if (doc_url_root == '#') { + doc_url_root = ''; +} + +/** + * SVG files for our copy buttons + */ +let iconCheck = ` + ${messages[locale]['copy_success']} + + +` + +// If the user specified their own SVG use that, otherwise use the default +let iconCopy = ``; +if (!iconCopy) { + iconCopy = ` + ${messages[locale]['copy_to_clipboard']} + + + +` +} + +/** + * Set up copy/paste for code blocks + */ + +const runWhenDOMLoaded = cb => { + if (document.readyState != 'loading') { + cb() + } else if (document.addEventListener) { + document.addEventListener('DOMContentLoaded', cb) + } else { + document.attachEvent('onreadystatechange', function() { + if (document.readyState == 'complete') cb() + }) + } +} + +const codeCellId = index => `codecell${index}` + +// Clears selected text since ClipboardJS will select the text when copying +const clearSelection = () => { + if (window.getSelection) { + window.getSelection().removeAllRanges() + } else if (document.selection) { + document.selection.empty() + } +} + +// Changes tooltip text for a moment, then changes it back +// We want the timeout of our `success` class to be a bit shorter than the +// tooltip and icon change, so that we can hide the icon before changing back. +var timeoutIcon = 2000; +var timeoutSuccessClass = 1500; + +const temporarilyChangeTooltip = (el, oldText, newText) => { + el.setAttribute('data-tooltip', newText) + el.classList.add('success') + // Remove success a little bit sooner than we change the tooltip + // So that we can use CSS to hide the copybutton first + setTimeout(() => el.classList.remove('success'), timeoutSuccessClass) + setTimeout(() => el.setAttribute('data-tooltip', oldText), timeoutIcon) +} + +// Changes the copy button icon for two seconds, then changes it back +const temporarilyChangeIcon = (el) => { + el.innerHTML = iconCheck; + setTimeout(() => {el.innerHTML = iconCopy}, timeoutIcon) +} + +const addCopyButtonToCodeCells = () => { + // If ClipboardJS hasn't loaded, wait a bit and try again. This + // happens because we load ClipboardJS asynchronously. + if (window.ClipboardJS === undefined) { + setTimeout(addCopyButtonToCodeCells, 250) + return + } + + // Add copybuttons to all of our code cells + const COPYBUTTON_SELECTOR = 'div.highlight pre'; + const codeCells = document.querySelectorAll(COPYBUTTON_SELECTOR) + codeCells.forEach((codeCell, index) => { + const id = codeCellId(index) + codeCell.setAttribute('id', id) + + const clipboardButton = id => + `` + codeCell.insertAdjacentHTML('afterend', clipboardButton(id)) + }) + +function escapeRegExp(string) { + return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string +} + +/** + * Removes excluded text from a Node. + * + * @param {Node} target Node to filter. + * @param {string} exclude CSS selector of nodes to exclude. + * @returns {DOMString} Text from `target` with text removed. + */ +function filterText(target, exclude) { + const clone = target.cloneNode(true); // clone as to not modify the live DOM + if (exclude) { + // remove excluded nodes + clone.querySelectorAll(exclude).forEach(node => node.remove()); + } + return clone.innerText; +} + +// Callback when a copy button is clicked. Will be passed the node that was clicked +// should then grab the text and replace pieces of text that shouldn't be used in output +function formatCopyText(textContent, copybuttonPromptText, isRegexp = false, onlyCopyPromptLines = true, removePrompts = true, copyEmptyLines = true, lineContinuationChar = "", hereDocDelim = "") { + var regexp; + var match; + + // Do we check for line continuation characters and "HERE-documents"? + var useLineCont = !!lineContinuationChar + var useHereDoc = !!hereDocDelim + + // create regexp to capture prompt and remaining line + if (isRegexp) { + regexp = new RegExp('^(' + copybuttonPromptText + ')(.*)') + } else { + regexp = new RegExp('^(' + escapeRegExp(copybuttonPromptText) + ')(.*)') + } + + const outputLines = []; + var promptFound = false; + var gotLineCont = false; + var gotHereDoc = false; + const lineGotPrompt = []; + for (const line of textContent.split('\n')) { + match = line.match(regexp) + if (match || gotLineCont || gotHereDoc) { + promptFound = regexp.test(line) + lineGotPrompt.push(promptFound) + if (removePrompts && promptFound) { + outputLines.push(match[2]) + } else { + outputLines.push(line) + } + gotLineCont = line.endsWith(lineContinuationChar) & useLineCont + if (line.includes(hereDocDelim) & useHereDoc) + gotHereDoc = !gotHereDoc + } else if (!onlyCopyPromptLines) { + outputLines.push(line) + } else if (copyEmptyLines && line.trim() === '') { + outputLines.push(line) + } + } + + // If no lines with the prompt were found then just use original lines + if (lineGotPrompt.some(v => v === true)) { + textContent = outputLines.join('\n'); + } + + // Remove a trailing newline to avoid auto-running when pasting + if (textContent.endsWith("\n")) { + textContent = textContent.slice(0, -1) + } + return textContent +} + + +var copyTargetText = (trigger) => { + var target = document.querySelector(trigger.attributes['data-clipboard-target'].value); + + // get filtered text + let exclude = '.linenos'; + + let text = filterText(target, exclude); + return formatCopyText(text, '>>> |\\.\\.\\. |\\$ |In \\[\\d*\\]: | {2,5}\\.\\.\\.: | {5,8}:', true, true, true, true, '', '') +} + + // Initialize with a callback so we can modify the text before copy + const clipboard = new ClipboardJS('.copybtn', {text: copyTargetText}) + + // Update UI with error/success messages + clipboard.on('success', event => { + clearSelection() + temporarilyChangeTooltip(event.trigger, messages[locale]['copy'], messages[locale]['copy_success']) + temporarilyChangeIcon(event.trigger) + }) + + clipboard.on('error', event => { + temporarilyChangeTooltip(event.trigger, messages[locale]['copy'], messages[locale]['copy_failure']) + }) +} + +runWhenDOMLoaded(addCopyButtonToCodeCells) \ No newline at end of file diff --git a/_static/copybutton_funcs.js b/_static/copybutton_funcs.js new file mode 100644 index 00000000..dbe1aaad --- /dev/null +++ b/_static/copybutton_funcs.js @@ -0,0 +1,73 @@ +function escapeRegExp(string) { + return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string +} + +/** + * Removes excluded text from a Node. + * + * @param {Node} target Node to filter. + * @param {string} exclude CSS selector of nodes to exclude. + * @returns {DOMString} Text from `target` with text removed. + */ +export function filterText(target, exclude) { + const clone = target.cloneNode(true); // clone as to not modify the live DOM + if (exclude) { + // remove excluded nodes + clone.querySelectorAll(exclude).forEach(node => node.remove()); + } + return clone.innerText; +} + +// Callback when a copy button is clicked. Will be passed the node that was clicked +// should then grab the text and replace pieces of text that shouldn't be used in output +export function formatCopyText(textContent, copybuttonPromptText, isRegexp = false, onlyCopyPromptLines = true, removePrompts = true, copyEmptyLines = true, lineContinuationChar = "", hereDocDelim = "") { + var regexp; + var match; + + // Do we check for line continuation characters and "HERE-documents"? + var useLineCont = !!lineContinuationChar + var useHereDoc = !!hereDocDelim + + // create regexp to capture prompt and remaining line + if (isRegexp) { + regexp = new RegExp('^(' + copybuttonPromptText + ')(.*)') + } else { + regexp = new RegExp('^(' + escapeRegExp(copybuttonPromptText) + ')(.*)') + } + + const outputLines = []; + var promptFound = false; + var gotLineCont = false; + var gotHereDoc = false; + const lineGotPrompt = []; + for (const line of textContent.split('\n')) { + match = line.match(regexp) + if (match || gotLineCont || gotHereDoc) { + promptFound = regexp.test(line) + lineGotPrompt.push(promptFound) + if (removePrompts && promptFound) { + outputLines.push(match[2]) + } else { + outputLines.push(line) + } + gotLineCont = line.endsWith(lineContinuationChar) & useLineCont + if (line.includes(hereDocDelim) & useHereDoc) + gotHereDoc = !gotHereDoc + } else if (!onlyCopyPromptLines) { + outputLines.push(line) + } else if (copyEmptyLines && line.trim() === '') { + outputLines.push(line) + } + } + + // If no lines with the prompt were found then just use original lines + if (lineGotPrompt.some(v => v === true)) { + textContent = outputLines.join('\n'); + } + + // Remove a trailing newline to avoid auto-running when pasting + if (textContent.endsWith("\n")) { + textContent = textContent.slice(0, -1) + } + return textContent +} diff --git a/_static/design-style.b7bb847fb20b106c3d81b95245e65545.min.css b/_static/design-style.b7bb847fb20b106c3d81b95245e65545.min.css new file mode 100644 index 00000000..704c42ee --- /dev/null +++ b/_static/design-style.b7bb847fb20b106c3d81b95245e65545.min.css @@ -0,0 +1 @@ +.sd-bg-primary{background-color:var(--sd-color-primary) !important}.sd-bg-text-primary{color:var(--sd-color-primary-text) !important}button.sd-bg-primary:focus,button.sd-bg-primary:hover{background-color:var(--sd-color-primary-highlight) !important}a.sd-bg-primary:focus,a.sd-bg-primary:hover{background-color:var(--sd-color-primary-highlight) !important}.sd-bg-secondary{background-color:var(--sd-color-secondary) !important}.sd-bg-text-secondary{color:var(--sd-color-secondary-text) !important}button.sd-bg-secondary:focus,button.sd-bg-secondary:hover{background-color:var(--sd-color-secondary-highlight) !important}a.sd-bg-secondary:focus,a.sd-bg-secondary:hover{background-color:var(--sd-color-secondary-highlight) !important}.sd-bg-success{background-color:var(--sd-color-success) !important}.sd-bg-text-success{color:var(--sd-color-success-text) !important}button.sd-bg-success:focus,button.sd-bg-success:hover{background-color:var(--sd-color-success-highlight) !important}a.sd-bg-success:focus,a.sd-bg-success:hover{background-color:var(--sd-color-success-highlight) !important}.sd-bg-info{background-color:var(--sd-color-info) !important}.sd-bg-text-info{color:var(--sd-color-info-text) !important}button.sd-bg-info:focus,button.sd-bg-info:hover{background-color:var(--sd-color-info-highlight) !important}a.sd-bg-info:focus,a.sd-bg-info:hover{background-color:var(--sd-color-info-highlight) !important}.sd-bg-warning{background-color:var(--sd-color-warning) !important}.sd-bg-text-warning{color:var(--sd-color-warning-text) !important}button.sd-bg-warning:focus,button.sd-bg-warning:hover{background-color:var(--sd-color-warning-highlight) !important}a.sd-bg-warning:focus,a.sd-bg-warning:hover{background-color:var(--sd-color-warning-highlight) !important}.sd-bg-danger{background-color:var(--sd-color-danger) !important}.sd-bg-text-danger{color:var(--sd-color-danger-text) !important}button.sd-bg-danger:focus,button.sd-bg-danger:hover{background-color:var(--sd-color-danger-highlight) !important}a.sd-bg-danger:focus,a.sd-bg-danger:hover{background-color:var(--sd-color-danger-highlight) !important}.sd-bg-light{background-color:var(--sd-color-light) !important}.sd-bg-text-light{color:var(--sd-color-light-text) !important}button.sd-bg-light:focus,button.sd-bg-light:hover{background-color:var(--sd-color-light-highlight) !important}a.sd-bg-light:focus,a.sd-bg-light:hover{background-color:var(--sd-color-light-highlight) !important}.sd-bg-muted{background-color:var(--sd-color-muted) !important}.sd-bg-text-muted{color:var(--sd-color-muted-text) !important}button.sd-bg-muted:focus,button.sd-bg-muted:hover{background-color:var(--sd-color-muted-highlight) !important}a.sd-bg-muted:focus,a.sd-bg-muted:hover{background-color:var(--sd-color-muted-highlight) !important}.sd-bg-dark{background-color:var(--sd-color-dark) !important}.sd-bg-text-dark{color:var(--sd-color-dark-text) !important}button.sd-bg-dark:focus,button.sd-bg-dark:hover{background-color:var(--sd-color-dark-highlight) !important}a.sd-bg-dark:focus,a.sd-bg-dark:hover{background-color:var(--sd-color-dark-highlight) !important}.sd-bg-black{background-color:var(--sd-color-black) !important}.sd-bg-text-black{color:var(--sd-color-black-text) !important}button.sd-bg-black:focus,button.sd-bg-black:hover{background-color:var(--sd-color-black-highlight) !important}a.sd-bg-black:focus,a.sd-bg-black:hover{background-color:var(--sd-color-black-highlight) !important}.sd-bg-white{background-color:var(--sd-color-white) !important}.sd-bg-text-white{color:var(--sd-color-white-text) !important}button.sd-bg-white:focus,button.sd-bg-white:hover{background-color:var(--sd-color-white-highlight) !important}a.sd-bg-white:focus,a.sd-bg-white:hover{background-color:var(--sd-color-white-highlight) !important}.sd-text-primary,.sd-text-primary>p{color:var(--sd-color-primary) !important}a.sd-text-primary:focus,a.sd-text-primary:hover{color:var(--sd-color-primary-highlight) !important}.sd-text-secondary,.sd-text-secondary>p{color:var(--sd-color-secondary) !important}a.sd-text-secondary:focus,a.sd-text-secondary:hover{color:var(--sd-color-secondary-highlight) !important}.sd-text-success,.sd-text-success>p{color:var(--sd-color-success) !important}a.sd-text-success:focus,a.sd-text-success:hover{color:var(--sd-color-success-highlight) !important}.sd-text-info,.sd-text-info>p{color:var(--sd-color-info) !important}a.sd-text-info:focus,a.sd-text-info:hover{color:var(--sd-color-info-highlight) !important}.sd-text-warning,.sd-text-warning>p{color:var(--sd-color-warning) !important}a.sd-text-warning:focus,a.sd-text-warning:hover{color:var(--sd-color-warning-highlight) !important}.sd-text-danger,.sd-text-danger>p{color:var(--sd-color-danger) !important}a.sd-text-danger:focus,a.sd-text-danger:hover{color:var(--sd-color-danger-highlight) !important}.sd-text-light,.sd-text-light>p{color:var(--sd-color-light) !important}a.sd-text-light:focus,a.sd-text-light:hover{color:var(--sd-color-light-highlight) !important}.sd-text-muted,.sd-text-muted>p{color:var(--sd-color-muted) !important}a.sd-text-muted:focus,a.sd-text-muted:hover{color:var(--sd-color-muted-highlight) !important}.sd-text-dark,.sd-text-dark>p{color:var(--sd-color-dark) !important}a.sd-text-dark:focus,a.sd-text-dark:hover{color:var(--sd-color-dark-highlight) !important}.sd-text-black,.sd-text-black>p{color:var(--sd-color-black) !important}a.sd-text-black:focus,a.sd-text-black:hover{color:var(--sd-color-black-highlight) !important}.sd-text-white,.sd-text-white>p{color:var(--sd-color-white) !important}a.sd-text-white:focus,a.sd-text-white:hover{color:var(--sd-color-white-highlight) !important}.sd-outline-primary{border-color:var(--sd-color-primary) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-primary:focus,a.sd-outline-primary:hover{border-color:var(--sd-color-primary-highlight) !important}.sd-outline-secondary{border-color:var(--sd-color-secondary) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-secondary:focus,a.sd-outline-secondary:hover{border-color:var(--sd-color-secondary-highlight) !important}.sd-outline-success{border-color:var(--sd-color-success) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-success:focus,a.sd-outline-success:hover{border-color:var(--sd-color-success-highlight) !important}.sd-outline-info{border-color:var(--sd-color-info) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-info:focus,a.sd-outline-info:hover{border-color:var(--sd-color-info-highlight) !important}.sd-outline-warning{border-color:var(--sd-color-warning) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-warning:focus,a.sd-outline-warning:hover{border-color:var(--sd-color-warning-highlight) !important}.sd-outline-danger{border-color:var(--sd-color-danger) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-danger:focus,a.sd-outline-danger:hover{border-color:var(--sd-color-danger-highlight) !important}.sd-outline-light{border-color:var(--sd-color-light) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-light:focus,a.sd-outline-light:hover{border-color:var(--sd-color-light-highlight) !important}.sd-outline-muted{border-color:var(--sd-color-muted) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-muted:focus,a.sd-outline-muted:hover{border-color:var(--sd-color-muted-highlight) !important}.sd-outline-dark{border-color:var(--sd-color-dark) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-dark:focus,a.sd-outline-dark:hover{border-color:var(--sd-color-dark-highlight) !important}.sd-outline-black{border-color:var(--sd-color-black) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-black:focus,a.sd-outline-black:hover{border-color:var(--sd-color-black-highlight) !important}.sd-outline-white{border-color:var(--sd-color-white) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-white:focus,a.sd-outline-white:hover{border-color:var(--sd-color-white-highlight) !important}.sd-bg-transparent{background-color:transparent !important}.sd-outline-transparent{border-color:transparent !important}.sd-text-transparent{color:transparent !important}.sd-p-0{padding:0 !important}.sd-pt-0,.sd-py-0{padding-top:0 !important}.sd-pr-0,.sd-px-0{padding-right:0 !important}.sd-pb-0,.sd-py-0{padding-bottom:0 !important}.sd-pl-0,.sd-px-0{padding-left:0 !important}.sd-p-1{padding:.25rem !important}.sd-pt-1,.sd-py-1{padding-top:.25rem !important}.sd-pr-1,.sd-px-1{padding-right:.25rem !important}.sd-pb-1,.sd-py-1{padding-bottom:.25rem !important}.sd-pl-1,.sd-px-1{padding-left:.25rem !important}.sd-p-2{padding:.5rem !important}.sd-pt-2,.sd-py-2{padding-top:.5rem !important}.sd-pr-2,.sd-px-2{padding-right:.5rem !important}.sd-pb-2,.sd-py-2{padding-bottom:.5rem !important}.sd-pl-2,.sd-px-2{padding-left:.5rem !important}.sd-p-3{padding:1rem !important}.sd-pt-3,.sd-py-3{padding-top:1rem !important}.sd-pr-3,.sd-px-3{padding-right:1rem !important}.sd-pb-3,.sd-py-3{padding-bottom:1rem !important}.sd-pl-3,.sd-px-3{padding-left:1rem !important}.sd-p-4{padding:1.5rem !important}.sd-pt-4,.sd-py-4{padding-top:1.5rem !important}.sd-pr-4,.sd-px-4{padding-right:1.5rem !important}.sd-pb-4,.sd-py-4{padding-bottom:1.5rem !important}.sd-pl-4,.sd-px-4{padding-left:1.5rem !important}.sd-p-5{padding:3rem !important}.sd-pt-5,.sd-py-5{padding-top:3rem !important}.sd-pr-5,.sd-px-5{padding-right:3rem !important}.sd-pb-5,.sd-py-5{padding-bottom:3rem !important}.sd-pl-5,.sd-px-5{padding-left:3rem !important}.sd-m-auto{margin:auto !important}.sd-mt-auto,.sd-my-auto{margin-top:auto !important}.sd-mr-auto,.sd-mx-auto{margin-right:auto !important}.sd-mb-auto,.sd-my-auto{margin-bottom:auto !important}.sd-ml-auto,.sd-mx-auto{margin-left:auto !important}.sd-m-0{margin:0 !important}.sd-mt-0,.sd-my-0{margin-top:0 !important}.sd-mr-0,.sd-mx-0{margin-right:0 !important}.sd-mb-0,.sd-my-0{margin-bottom:0 !important}.sd-ml-0,.sd-mx-0{margin-left:0 !important}.sd-m-1{margin:.25rem !important}.sd-mt-1,.sd-my-1{margin-top:.25rem !important}.sd-mr-1,.sd-mx-1{margin-right:.25rem !important}.sd-mb-1,.sd-my-1{margin-bottom:.25rem !important}.sd-ml-1,.sd-mx-1{margin-left:.25rem !important}.sd-m-2{margin:.5rem !important}.sd-mt-2,.sd-my-2{margin-top:.5rem !important}.sd-mr-2,.sd-mx-2{margin-right:.5rem !important}.sd-mb-2,.sd-my-2{margin-bottom:.5rem !important}.sd-ml-2,.sd-mx-2{margin-left:.5rem !important}.sd-m-3{margin:1rem !important}.sd-mt-3,.sd-my-3{margin-top:1rem !important}.sd-mr-3,.sd-mx-3{margin-right:1rem !important}.sd-mb-3,.sd-my-3{margin-bottom:1rem !important}.sd-ml-3,.sd-mx-3{margin-left:1rem !important}.sd-m-4{margin:1.5rem !important}.sd-mt-4,.sd-my-4{margin-top:1.5rem !important}.sd-mr-4,.sd-mx-4{margin-right:1.5rem !important}.sd-mb-4,.sd-my-4{margin-bottom:1.5rem !important}.sd-ml-4,.sd-mx-4{margin-left:1.5rem !important}.sd-m-5{margin:3rem !important}.sd-mt-5,.sd-my-5{margin-top:3rem !important}.sd-mr-5,.sd-mx-5{margin-right:3rem !important}.sd-mb-5,.sd-my-5{margin-bottom:3rem !important}.sd-ml-5,.sd-mx-5{margin-left:3rem !important}.sd-w-25{width:25% !important}.sd-w-50{width:50% !important}.sd-w-75{width:75% !important}.sd-w-100{width:100% !important}.sd-w-auto{width:auto !important}.sd-h-25{height:25% !important}.sd-h-50{height:50% !important}.sd-h-75{height:75% !important}.sd-h-100{height:100% !important}.sd-h-auto{height:auto !important}.sd-d-none{display:none !important}.sd-d-inline{display:inline !important}.sd-d-inline-block{display:inline-block !important}.sd-d-block{display:block !important}.sd-d-grid{display:grid !important}.sd-d-flex-row{display:-ms-flexbox !important;display:flex !important;flex-direction:row !important}.sd-d-flex-column{display:-ms-flexbox !important;display:flex !important;flex-direction:column !important}.sd-d-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}@media(min-width: 576px){.sd-d-sm-none{display:none !important}.sd-d-sm-inline{display:inline !important}.sd-d-sm-inline-block{display:inline-block !important}.sd-d-sm-block{display:block !important}.sd-d-sm-grid{display:grid !important}.sd-d-sm-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-sm-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 768px){.sd-d-md-none{display:none !important}.sd-d-md-inline{display:inline !important}.sd-d-md-inline-block{display:inline-block !important}.sd-d-md-block{display:block !important}.sd-d-md-grid{display:grid !important}.sd-d-md-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-md-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 992px){.sd-d-lg-none{display:none !important}.sd-d-lg-inline{display:inline !important}.sd-d-lg-inline-block{display:inline-block !important}.sd-d-lg-block{display:block !important}.sd-d-lg-grid{display:grid !important}.sd-d-lg-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-lg-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 1200px){.sd-d-xl-none{display:none !important}.sd-d-xl-inline{display:inline !important}.sd-d-xl-inline-block{display:inline-block !important}.sd-d-xl-block{display:block !important}.sd-d-xl-grid{display:grid !important}.sd-d-xl-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-xl-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}.sd-align-major-start{justify-content:flex-start !important}.sd-align-major-end{justify-content:flex-end !important}.sd-align-major-center{justify-content:center !important}.sd-align-major-justify{justify-content:space-between !important}.sd-align-major-spaced{justify-content:space-evenly !important}.sd-align-minor-start{align-items:flex-start !important}.sd-align-minor-end{align-items:flex-end !important}.sd-align-minor-center{align-items:center !important}.sd-align-minor-stretch{align-items:stretch !important}.sd-text-justify{text-align:justify !important}.sd-text-left{text-align:left !important}.sd-text-right{text-align:right !important}.sd-text-center{text-align:center !important}.sd-font-weight-light{font-weight:300 !important}.sd-font-weight-lighter{font-weight:lighter !important}.sd-font-weight-normal{font-weight:400 !important}.sd-font-weight-bold{font-weight:700 !important}.sd-font-weight-bolder{font-weight:bolder !important}.sd-font-italic{font-style:italic !important}.sd-text-decoration-none{text-decoration:none !important}.sd-text-lowercase{text-transform:lowercase !important}.sd-text-uppercase{text-transform:uppercase !important}.sd-text-capitalize{text-transform:capitalize !important}.sd-text-wrap{white-space:normal !important}.sd-text-nowrap{white-space:nowrap !important}.sd-text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sd-fs-1,.sd-fs-1>p{font-size:calc(1.375rem + 1.5vw) !important;line-height:unset !important}.sd-fs-2,.sd-fs-2>p{font-size:calc(1.325rem + 0.9vw) !important;line-height:unset !important}.sd-fs-3,.sd-fs-3>p{font-size:calc(1.3rem + 0.6vw) !important;line-height:unset !important}.sd-fs-4,.sd-fs-4>p{font-size:calc(1.275rem + 0.3vw) !important;line-height:unset !important}.sd-fs-5,.sd-fs-5>p{font-size:1.25rem !important;line-height:unset !important}.sd-fs-6,.sd-fs-6>p{font-size:1rem !important;line-height:unset !important}.sd-border-0{border:0 solid !important}.sd-border-top-0{border-top:0 solid !important}.sd-border-bottom-0{border-bottom:0 solid !important}.sd-border-right-0{border-right:0 solid !important}.sd-border-left-0{border-left:0 solid !important}.sd-border-1{border:1px solid !important}.sd-border-top-1{border-top:1px solid !important}.sd-border-bottom-1{border-bottom:1px solid !important}.sd-border-right-1{border-right:1px solid !important}.sd-border-left-1{border-left:1px solid !important}.sd-border-2{border:2px solid !important}.sd-border-top-2{border-top:2px solid !important}.sd-border-bottom-2{border-bottom:2px solid !important}.sd-border-right-2{border-right:2px solid !important}.sd-border-left-2{border-left:2px solid !important}.sd-border-3{border:3px solid !important}.sd-border-top-3{border-top:3px solid !important}.sd-border-bottom-3{border-bottom:3px solid !important}.sd-border-right-3{border-right:3px solid !important}.sd-border-left-3{border-left:3px solid !important}.sd-border-4{border:4px solid !important}.sd-border-top-4{border-top:4px solid !important}.sd-border-bottom-4{border-bottom:4px solid !important}.sd-border-right-4{border-right:4px solid !important}.sd-border-left-4{border-left:4px solid !important}.sd-border-5{border:5px solid !important}.sd-border-top-5{border-top:5px solid !important}.sd-border-bottom-5{border-bottom:5px solid !important}.sd-border-right-5{border-right:5px solid !important}.sd-border-left-5{border-left:5px solid !important}.sd-rounded-0{border-radius:0 !important}.sd-rounded-1{border-radius:.2rem !important}.sd-rounded-2{border-radius:.3rem !important}.sd-rounded-3{border-radius:.5rem !important}.sd-rounded-pill{border-radius:50rem !important}.sd-rounded-circle{border-radius:50% !important}.shadow-none{box-shadow:none !important}.sd-shadow-sm{box-shadow:0 .125rem .25rem var(--sd-color-shadow) !important}.sd-shadow-md{box-shadow:0 .5rem 1rem var(--sd-color-shadow) !important}.sd-shadow-lg{box-shadow:0 1rem 3rem var(--sd-color-shadow) !important}@keyframes sd-slide-from-left{0%{transform:translateX(-100%)}100%{transform:translateX(0)}}@keyframes sd-slide-from-right{0%{transform:translateX(200%)}100%{transform:translateX(0)}}@keyframes sd-grow100{0%{transform:scale(0);opacity:.5}100%{transform:scale(1);opacity:1}}@keyframes sd-grow50{0%{transform:scale(0.5);opacity:.5}100%{transform:scale(1);opacity:1}}@keyframes sd-grow50-rot20{0%{transform:scale(0.5) rotateZ(-20deg);opacity:.5}75%{transform:scale(1) rotateZ(5deg);opacity:1}95%{transform:scale(1) rotateZ(-1deg);opacity:1}100%{transform:scale(1) rotateZ(0);opacity:1}}.sd-animate-slide-from-left{animation:1s ease-out 0s 1 normal none running sd-slide-from-left}.sd-animate-slide-from-right{animation:1s ease-out 0s 1 normal none running sd-slide-from-right}.sd-animate-grow100{animation:1s ease-out 0s 1 normal none running sd-grow100}.sd-animate-grow50{animation:1s ease-out 0s 1 normal none running sd-grow50}.sd-animate-grow50-rot20{animation:1s ease-out 0s 1 normal none running sd-grow50-rot20}.sd-badge{display:inline-block;padding:.35em .65em;font-size:.75em;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.sd-badge:empty{display:none}a.sd-badge{text-decoration:none}.sd-btn .sd-badge{position:relative;top:-1px}.sd-btn{background-color:transparent;border:1px solid transparent;border-radius:.25rem;cursor:pointer;display:inline-block;font-weight:400;font-size:1rem;line-height:1.5;padding:.375rem .75rem;text-align:center;text-decoration:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;vertical-align:middle;user-select:none;-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none}.sd-btn:hover{text-decoration:none}@media(prefers-reduced-motion: reduce){.sd-btn{transition:none}}.sd-btn-primary,.sd-btn-outline-primary:hover,.sd-btn-outline-primary:focus{color:var(--sd-color-primary-text) !important;background-color:var(--sd-color-primary) !important;border-color:var(--sd-color-primary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-primary:hover,.sd-btn-primary:focus{color:var(--sd-color-primary-text) !important;background-color:var(--sd-color-primary-highlight) !important;border-color:var(--sd-color-primary-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-primary{color:var(--sd-color-primary) !important;border-color:var(--sd-color-primary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-secondary,.sd-btn-outline-secondary:hover,.sd-btn-outline-secondary:focus{color:var(--sd-color-secondary-text) !important;background-color:var(--sd-color-secondary) !important;border-color:var(--sd-color-secondary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-secondary:hover,.sd-btn-secondary:focus{color:var(--sd-color-secondary-text) !important;background-color:var(--sd-color-secondary-highlight) !important;border-color:var(--sd-color-secondary-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-secondary{color:var(--sd-color-secondary) !important;border-color:var(--sd-color-secondary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-success,.sd-btn-outline-success:hover,.sd-btn-outline-success:focus{color:var(--sd-color-success-text) !important;background-color:var(--sd-color-success) !important;border-color:var(--sd-color-success) !important;border-width:1px !important;border-style:solid !important}.sd-btn-success:hover,.sd-btn-success:focus{color:var(--sd-color-success-text) !important;background-color:var(--sd-color-success-highlight) !important;border-color:var(--sd-color-success-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-success{color:var(--sd-color-success) !important;border-color:var(--sd-color-success) !important;border-width:1px !important;border-style:solid !important}.sd-btn-info,.sd-btn-outline-info:hover,.sd-btn-outline-info:focus{color:var(--sd-color-info-text) !important;background-color:var(--sd-color-info) !important;border-color:var(--sd-color-info) !important;border-width:1px !important;border-style:solid !important}.sd-btn-info:hover,.sd-btn-info:focus{color:var(--sd-color-info-text) !important;background-color:var(--sd-color-info-highlight) !important;border-color:var(--sd-color-info-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-info{color:var(--sd-color-info) !important;border-color:var(--sd-color-info) !important;border-width:1px !important;border-style:solid !important}.sd-btn-warning,.sd-btn-outline-warning:hover,.sd-btn-outline-warning:focus{color:var(--sd-color-warning-text) !important;background-color:var(--sd-color-warning) !important;border-color:var(--sd-color-warning) !important;border-width:1px !important;border-style:solid !important}.sd-btn-warning:hover,.sd-btn-warning:focus{color:var(--sd-color-warning-text) !important;background-color:var(--sd-color-warning-highlight) !important;border-color:var(--sd-color-warning-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-warning{color:var(--sd-color-warning) !important;border-color:var(--sd-color-warning) !important;border-width:1px !important;border-style:solid !important}.sd-btn-danger,.sd-btn-outline-danger:hover,.sd-btn-outline-danger:focus{color:var(--sd-color-danger-text) !important;background-color:var(--sd-color-danger) !important;border-color:var(--sd-color-danger) !important;border-width:1px !important;border-style:solid !important}.sd-btn-danger:hover,.sd-btn-danger:focus{color:var(--sd-color-danger-text) !important;background-color:var(--sd-color-danger-highlight) !important;border-color:var(--sd-color-danger-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-danger{color:var(--sd-color-danger) !important;border-color:var(--sd-color-danger) !important;border-width:1px !important;border-style:solid !important}.sd-btn-light,.sd-btn-outline-light:hover,.sd-btn-outline-light:focus{color:var(--sd-color-light-text) !important;background-color:var(--sd-color-light) !important;border-color:var(--sd-color-light) !important;border-width:1px !important;border-style:solid !important}.sd-btn-light:hover,.sd-btn-light:focus{color:var(--sd-color-light-text) !important;background-color:var(--sd-color-light-highlight) !important;border-color:var(--sd-color-light-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-light{color:var(--sd-color-light) !important;border-color:var(--sd-color-light) !important;border-width:1px !important;border-style:solid !important}.sd-btn-muted,.sd-btn-outline-muted:hover,.sd-btn-outline-muted:focus{color:var(--sd-color-muted-text) !important;background-color:var(--sd-color-muted) !important;border-color:var(--sd-color-muted) !important;border-width:1px !important;border-style:solid !important}.sd-btn-muted:hover,.sd-btn-muted:focus{color:var(--sd-color-muted-text) !important;background-color:var(--sd-color-muted-highlight) !important;border-color:var(--sd-color-muted-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-muted{color:var(--sd-color-muted) !important;border-color:var(--sd-color-muted) !important;border-width:1px !important;border-style:solid !important}.sd-btn-dark,.sd-btn-outline-dark:hover,.sd-btn-outline-dark:focus{color:var(--sd-color-dark-text) !important;background-color:var(--sd-color-dark) !important;border-color:var(--sd-color-dark) !important;border-width:1px !important;border-style:solid !important}.sd-btn-dark:hover,.sd-btn-dark:focus{color:var(--sd-color-dark-text) !important;background-color:var(--sd-color-dark-highlight) !important;border-color:var(--sd-color-dark-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-dark{color:var(--sd-color-dark) !important;border-color:var(--sd-color-dark) !important;border-width:1px !important;border-style:solid !important}.sd-btn-black,.sd-btn-outline-black:hover,.sd-btn-outline-black:focus{color:var(--sd-color-black-text) !important;background-color:var(--sd-color-black) !important;border-color:var(--sd-color-black) !important;border-width:1px !important;border-style:solid !important}.sd-btn-black:hover,.sd-btn-black:focus{color:var(--sd-color-black-text) !important;background-color:var(--sd-color-black-highlight) !important;border-color:var(--sd-color-black-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-black{color:var(--sd-color-black) !important;border-color:var(--sd-color-black) !important;border-width:1px !important;border-style:solid !important}.sd-btn-white,.sd-btn-outline-white:hover,.sd-btn-outline-white:focus{color:var(--sd-color-white-text) !important;background-color:var(--sd-color-white) !important;border-color:var(--sd-color-white) !important;border-width:1px !important;border-style:solid !important}.sd-btn-white:hover,.sd-btn-white:focus{color:var(--sd-color-white-text) !important;background-color:var(--sd-color-white-highlight) !important;border-color:var(--sd-color-white-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-white{color:var(--sd-color-white) !important;border-color:var(--sd-color-white) !important;border-width:1px !important;border-style:solid !important}.sd-stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}.sd-octicon,.sd-material-icon{display:inline-block;fill:currentColor;vertical-align:middle}.sd-avatar-xs{border-radius:50%;object-fit:cover;object-position:center;width:1rem;height:1rem}.sd-avatar-sm{border-radius:50%;object-fit:cover;object-position:center;width:3rem;height:3rem}.sd-avatar-md{border-radius:50%;object-fit:cover;object-position:center;width:5rem;height:5rem}.sd-avatar-lg{border-radius:50%;object-fit:cover;object-position:center;width:7rem;height:7rem}.sd-avatar-xl{border-radius:50%;object-fit:cover;object-position:center;width:10rem;height:10rem}.sd-avatar-inherit{border-radius:50%;object-fit:cover;object-position:center;width:inherit;height:inherit}.sd-avatar-initial{border-radius:50%;object-fit:cover;object-position:center;width:initial;height:initial}.sd-card{background-clip:border-box;background-color:var(--sd-color-card-background);border:1px solid var(--sd-color-card-border);border-radius:.25rem;color:var(--sd-color-card-text);display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;position:relative;word-wrap:break-word}.sd-card>hr{margin-left:0;margin-right:0}.sd-card-hover:hover{border-color:var(--sd-color-card-border-hover);transform:scale(1.01)}.sd-card-body{-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem 1rem}.sd-card-title{margin-bottom:.5rem}.sd-card-subtitle{margin-top:-0.25rem;margin-bottom:0}.sd-card-text:last-child{margin-bottom:0}.sd-card-link:hover{text-decoration:none}.sd-card-link+.card-link{margin-left:1rem}.sd-card-header{padding:.5rem 1rem;margin-bottom:0;background-color:var(--sd-color-card-header);border-bottom:1px solid var(--sd-color-card-border)}.sd-card-header:first-child{border-radius:calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0}.sd-card-footer{padding:.5rem 1rem;background-color:var(--sd-color-card-footer);border-top:1px solid var(--sd-color-card-border)}.sd-card-footer:last-child{border-radius:0 0 calc(0.25rem - 1px) calc(0.25rem - 1px)}.sd-card-header-tabs{margin-right:-0.5rem;margin-bottom:-0.5rem;margin-left:-0.5rem;border-bottom:0}.sd-card-header-pills{margin-right:-0.5rem;margin-left:-0.5rem}.sd-card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1rem;border-radius:calc(0.25rem - 1px)}.sd-card-img,.sd-card-img-bottom,.sd-card-img-top{width:100%}.sd-card-img,.sd-card-img-top{border-top-left-radius:calc(0.25rem - 1px);border-top-right-radius:calc(0.25rem - 1px)}.sd-card-img,.sd-card-img-bottom{border-bottom-left-radius:calc(0.25rem - 1px);border-bottom-right-radius:calc(0.25rem - 1px)}.sd-cards-carousel{width:100%;display:flex;flex-wrap:nowrap;-ms-flex-direction:row;flex-direction:row;overflow-x:hidden;scroll-snap-type:x mandatory}.sd-cards-carousel.sd-show-scrollbar{overflow-x:auto}.sd-cards-carousel:hover,.sd-cards-carousel:focus{overflow-x:auto}.sd-cards-carousel>.sd-card{flex-shrink:0;scroll-snap-align:start}.sd-cards-carousel>.sd-card:not(:last-child){margin-right:3px}.sd-card-cols-1>.sd-card{width:90%}.sd-card-cols-2>.sd-card{width:45%}.sd-card-cols-3>.sd-card{width:30%}.sd-card-cols-4>.sd-card{width:22.5%}.sd-card-cols-5>.sd-card{width:18%}.sd-card-cols-6>.sd-card{width:15%}.sd-card-cols-7>.sd-card{width:12.8571428571%}.sd-card-cols-8>.sd-card{width:11.25%}.sd-card-cols-9>.sd-card{width:10%}.sd-card-cols-10>.sd-card{width:9%}.sd-card-cols-11>.sd-card{width:8.1818181818%}.sd-card-cols-12>.sd-card{width:7.5%}.sd-container,.sd-container-fluid,.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container-xl{margin-left:auto;margin-right:auto;padding-left:var(--sd-gutter-x, 0.75rem);padding-right:var(--sd-gutter-x, 0.75rem);width:100%}@media(min-width: 576px){.sd-container-sm,.sd-container{max-width:540px}}@media(min-width: 768px){.sd-container-md,.sd-container-sm,.sd-container{max-width:720px}}@media(min-width: 992px){.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container{max-width:960px}}@media(min-width: 1200px){.sd-container-xl,.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container{max-width:1140px}}.sd-row{--sd-gutter-x: 1.5rem;--sd-gutter-y: 0;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-top:calc(var(--sd-gutter-y) * -1);margin-right:calc(var(--sd-gutter-x) * -0.5);margin-left:calc(var(--sd-gutter-x) * -0.5)}.sd-row>*{box-sizing:border-box;flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--sd-gutter-x) * 0.5);padding-left:calc(var(--sd-gutter-x) * 0.5);margin-top:var(--sd-gutter-y)}.sd-col{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-auto>*{flex:0 0 auto;width:auto}.sd-row-cols-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}@media(min-width: 576px){.sd-col-sm{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-sm-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-sm-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-sm-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-sm-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-sm-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-sm-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-sm-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-sm-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-sm-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-sm-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-sm-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-sm-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-sm-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 768px){.sd-col-md{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-md-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-md-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-md-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-md-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-md-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-md-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-md-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-md-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-md-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-md-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-md-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-md-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-md-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 992px){.sd-col-lg{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-lg-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-lg-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-lg-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-lg-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-lg-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-lg-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-lg-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-lg-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-lg-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-lg-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-lg-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-lg-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-lg-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 1200px){.sd-col-xl{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-xl-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-xl-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-xl-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-xl-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-xl-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-xl-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-xl-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-xl-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-xl-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-xl-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-xl-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-xl-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-xl-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}.sd-col-auto{flex:0 0 auto;-ms-flex:0 0 auto;width:auto}.sd-col-1{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}.sd-col-2{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-col-3{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-col-4{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-col-5{flex:0 0 auto;-ms-flex:0 0 auto;width:41.6666666667%}.sd-col-6{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-col-7{flex:0 0 auto;-ms-flex:0 0 auto;width:58.3333333333%}.sd-col-8{flex:0 0 auto;-ms-flex:0 0 auto;width:66.6666666667%}.sd-col-9{flex:0 0 auto;-ms-flex:0 0 auto;width:75%}.sd-col-10{flex:0 0 auto;-ms-flex:0 0 auto;width:83.3333333333%}.sd-col-11{flex:0 0 auto;-ms-flex:0 0 auto;width:91.6666666667%}.sd-col-12{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-g-0,.sd-gy-0{--sd-gutter-y: 0}.sd-g-0,.sd-gx-0{--sd-gutter-x: 0}.sd-g-1,.sd-gy-1{--sd-gutter-y: 0.25rem}.sd-g-1,.sd-gx-1{--sd-gutter-x: 0.25rem}.sd-g-2,.sd-gy-2{--sd-gutter-y: 0.5rem}.sd-g-2,.sd-gx-2{--sd-gutter-x: 0.5rem}.sd-g-3,.sd-gy-3{--sd-gutter-y: 1rem}.sd-g-3,.sd-gx-3{--sd-gutter-x: 1rem}.sd-g-4,.sd-gy-4{--sd-gutter-y: 1.5rem}.sd-g-4,.sd-gx-4{--sd-gutter-x: 1.5rem}.sd-g-5,.sd-gy-5{--sd-gutter-y: 3rem}.sd-g-5,.sd-gx-5{--sd-gutter-x: 3rem}@media(min-width: 576px){.sd-col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-sm-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-sm-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-sm-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-sm-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-sm-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-sm-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-sm-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-sm-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-sm-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-sm-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-sm-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-sm-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-sm-0,.sd-gy-sm-0{--sd-gutter-y: 0}.sd-g-sm-0,.sd-gx-sm-0{--sd-gutter-x: 0}.sd-g-sm-1,.sd-gy-sm-1{--sd-gutter-y: 0.25rem}.sd-g-sm-1,.sd-gx-sm-1{--sd-gutter-x: 0.25rem}.sd-g-sm-2,.sd-gy-sm-2{--sd-gutter-y: 0.5rem}.sd-g-sm-2,.sd-gx-sm-2{--sd-gutter-x: 0.5rem}.sd-g-sm-3,.sd-gy-sm-3{--sd-gutter-y: 1rem}.sd-g-sm-3,.sd-gx-sm-3{--sd-gutter-x: 1rem}.sd-g-sm-4,.sd-gy-sm-4{--sd-gutter-y: 1.5rem}.sd-g-sm-4,.sd-gx-sm-4{--sd-gutter-x: 1.5rem}.sd-g-sm-5,.sd-gy-sm-5{--sd-gutter-y: 3rem}.sd-g-sm-5,.sd-gx-sm-5{--sd-gutter-x: 3rem}}@media(min-width: 768px){.sd-col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-md-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-md-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-md-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-md-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-md-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-md-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-md-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-md-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-md-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-md-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-md-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-md-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-md-0,.sd-gy-md-0{--sd-gutter-y: 0}.sd-g-md-0,.sd-gx-md-0{--sd-gutter-x: 0}.sd-g-md-1,.sd-gy-md-1{--sd-gutter-y: 0.25rem}.sd-g-md-1,.sd-gx-md-1{--sd-gutter-x: 0.25rem}.sd-g-md-2,.sd-gy-md-2{--sd-gutter-y: 0.5rem}.sd-g-md-2,.sd-gx-md-2{--sd-gutter-x: 0.5rem}.sd-g-md-3,.sd-gy-md-3{--sd-gutter-y: 1rem}.sd-g-md-3,.sd-gx-md-3{--sd-gutter-x: 1rem}.sd-g-md-4,.sd-gy-md-4{--sd-gutter-y: 1.5rem}.sd-g-md-4,.sd-gx-md-4{--sd-gutter-x: 1.5rem}.sd-g-md-5,.sd-gy-md-5{--sd-gutter-y: 3rem}.sd-g-md-5,.sd-gx-md-5{--sd-gutter-x: 3rem}}@media(min-width: 992px){.sd-col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-lg-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-lg-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-lg-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-lg-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-lg-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-lg-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-lg-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-lg-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-lg-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-lg-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-lg-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-lg-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-lg-0,.sd-gy-lg-0{--sd-gutter-y: 0}.sd-g-lg-0,.sd-gx-lg-0{--sd-gutter-x: 0}.sd-g-lg-1,.sd-gy-lg-1{--sd-gutter-y: 0.25rem}.sd-g-lg-1,.sd-gx-lg-1{--sd-gutter-x: 0.25rem}.sd-g-lg-2,.sd-gy-lg-2{--sd-gutter-y: 0.5rem}.sd-g-lg-2,.sd-gx-lg-2{--sd-gutter-x: 0.5rem}.sd-g-lg-3,.sd-gy-lg-3{--sd-gutter-y: 1rem}.sd-g-lg-3,.sd-gx-lg-3{--sd-gutter-x: 1rem}.sd-g-lg-4,.sd-gy-lg-4{--sd-gutter-y: 1.5rem}.sd-g-lg-4,.sd-gx-lg-4{--sd-gutter-x: 1.5rem}.sd-g-lg-5,.sd-gy-lg-5{--sd-gutter-y: 3rem}.sd-g-lg-5,.sd-gx-lg-5{--sd-gutter-x: 3rem}}@media(min-width: 1200px){.sd-col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-xl-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-xl-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-xl-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-xl-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-xl-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-xl-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-xl-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-xl-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-xl-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-xl-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-xl-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-xl-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-xl-0,.sd-gy-xl-0{--sd-gutter-y: 0}.sd-g-xl-0,.sd-gx-xl-0{--sd-gutter-x: 0}.sd-g-xl-1,.sd-gy-xl-1{--sd-gutter-y: 0.25rem}.sd-g-xl-1,.sd-gx-xl-1{--sd-gutter-x: 0.25rem}.sd-g-xl-2,.sd-gy-xl-2{--sd-gutter-y: 0.5rem}.sd-g-xl-2,.sd-gx-xl-2{--sd-gutter-x: 0.5rem}.sd-g-xl-3,.sd-gy-xl-3{--sd-gutter-y: 1rem}.sd-g-xl-3,.sd-gx-xl-3{--sd-gutter-x: 1rem}.sd-g-xl-4,.sd-gy-xl-4{--sd-gutter-y: 1.5rem}.sd-g-xl-4,.sd-gx-xl-4{--sd-gutter-x: 1.5rem}.sd-g-xl-5,.sd-gy-xl-5{--sd-gutter-y: 3rem}.sd-g-xl-5,.sd-gx-xl-5{--sd-gutter-x: 3rem}}.sd-flex-row-reverse{flex-direction:row-reverse !important}details.sd-dropdown{position:relative}details.sd-dropdown .sd-summary-title{font-weight:700;padding-right:3em !important;-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;user-select:none}details.sd-dropdown:hover{cursor:pointer}details.sd-dropdown .sd-summary-content{cursor:default}details.sd-dropdown summary{list-style:none;padding:1em}details.sd-dropdown summary .sd-octicon.no-title{vertical-align:middle}details.sd-dropdown[open] summary .sd-octicon.no-title{visibility:hidden}details.sd-dropdown summary::-webkit-details-marker{display:none}details.sd-dropdown summary:focus{outline:none}details.sd-dropdown .sd-summary-icon{margin-right:.5em}details.sd-dropdown .sd-summary-icon svg{opacity:.8}details.sd-dropdown summary:hover .sd-summary-up svg,details.sd-dropdown summary:hover .sd-summary-down svg{opacity:1;transform:scale(1.1)}details.sd-dropdown .sd-summary-up svg,details.sd-dropdown .sd-summary-down svg{display:block;opacity:.6}details.sd-dropdown .sd-summary-up,details.sd-dropdown .sd-summary-down{pointer-events:none;position:absolute;right:1em;top:1em}details.sd-dropdown[open]>.sd-summary-title .sd-summary-down{visibility:hidden}details.sd-dropdown:not([open])>.sd-summary-title .sd-summary-up{visibility:hidden}details.sd-dropdown:not([open]).sd-card{border:none}details.sd-dropdown:not([open])>.sd-card-header{border:1px solid var(--sd-color-card-border);border-radius:.25rem}details.sd-dropdown.sd-fade-in[open] summary~*{-moz-animation:sd-fade-in .5s ease-in-out;-webkit-animation:sd-fade-in .5s ease-in-out;animation:sd-fade-in .5s ease-in-out}details.sd-dropdown.sd-fade-in-slide-down[open] summary~*{-moz-animation:sd-fade-in .5s ease-in-out,sd-slide-down .5s ease-in-out;-webkit-animation:sd-fade-in .5s ease-in-out,sd-slide-down .5s ease-in-out;animation:sd-fade-in .5s ease-in-out,sd-slide-down .5s ease-in-out}.sd-col>.sd-dropdown{width:100%}.sd-summary-content>.sd-tab-set:first-child{margin-top:0}@keyframes sd-fade-in{0%{opacity:0}100%{opacity:1}}@keyframes sd-slide-down{0%{transform:translate(0, -10px)}100%{transform:translate(0, 0)}}.sd-tab-set{border-radius:.125rem;display:flex;flex-wrap:wrap;margin:1em 0;position:relative}.sd-tab-set>input{opacity:0;position:absolute}.sd-tab-set>input:checked+label{border-color:var(--sd-color-tabs-underline-active);color:var(--sd-color-tabs-label-active)}.sd-tab-set>input:checked+label+.sd-tab-content{display:block}.sd-tab-set>input:not(:checked)+label:hover{color:var(--sd-color-tabs-label-hover);border-color:var(--sd-color-tabs-underline-hover)}.sd-tab-set>input:focus+label{outline-style:auto}.sd-tab-set>input:not(.focus-visible)+label{outline:none;-webkit-tap-highlight-color:transparent}.sd-tab-set>label{border-bottom:.125rem solid transparent;margin-bottom:0;color:var(--sd-color-tabs-label-inactive);border-color:var(--sd-color-tabs-underline-inactive);cursor:pointer;font-size:var(--sd-fontsize-tabs-label);font-weight:700;padding:1em 1.25em .5em;transition:color 250ms;width:auto;z-index:1}html .sd-tab-set>label:hover{color:var(--sd-color-tabs-label-active)}.sd-col>.sd-tab-set{width:100%}.sd-tab-content{box-shadow:0 -0.0625rem var(--sd-color-tabs-overline),0 .0625rem var(--sd-color-tabs-underline);display:none;order:99;padding-bottom:.75rem;padding-top:.75rem;width:100%}.sd-tab-content>:first-child{margin-top:0 !important}.sd-tab-content>:last-child{margin-bottom:0 !important}.sd-tab-content>.sd-tab-set{margin:0}.sd-sphinx-override,.sd-sphinx-override *{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.sd-sphinx-override p{margin-top:0}:root{--sd-color-primary: #007bff;--sd-color-secondary: #6c757d;--sd-color-success: #28a745;--sd-color-info: #17a2b8;--sd-color-warning: #f0b37e;--sd-color-danger: #dc3545;--sd-color-light: #f8f9fa;--sd-color-muted: #6c757d;--sd-color-dark: #212529;--sd-color-black: black;--sd-color-white: white;--sd-color-primary-highlight: #0069d9;--sd-color-secondary-highlight: #5c636a;--sd-color-success-highlight: #228e3b;--sd-color-info-highlight: #148a9c;--sd-color-warning-highlight: #cc986b;--sd-color-danger-highlight: #bb2d3b;--sd-color-light-highlight: #d3d4d5;--sd-color-muted-highlight: #5c636a;--sd-color-dark-highlight: #1c1f23;--sd-color-black-highlight: black;--sd-color-white-highlight: #d9d9d9;--sd-color-primary-text: #fff;--sd-color-secondary-text: #fff;--sd-color-success-text: #fff;--sd-color-info-text: #fff;--sd-color-warning-text: #212529;--sd-color-danger-text: #fff;--sd-color-light-text: #212529;--sd-color-muted-text: #fff;--sd-color-dark-text: #fff;--sd-color-black-text: #fff;--sd-color-white-text: #212529;--sd-color-shadow: rgba(0, 0, 0, 0.15);--sd-color-card-border: rgba(0, 0, 0, 0.125);--sd-color-card-border-hover: hsla(231, 99%, 66%, 1);--sd-color-card-background: transparent;--sd-color-card-text: inherit;--sd-color-card-header: transparent;--sd-color-card-footer: transparent;--sd-color-tabs-label-active: hsla(231, 99%, 66%, 1);--sd-color-tabs-label-hover: hsla(231, 99%, 66%, 1);--sd-color-tabs-label-inactive: hsl(0, 0%, 66%);--sd-color-tabs-underline-active: hsla(231, 99%, 66%, 1);--sd-color-tabs-underline-hover: rgba(178, 206, 245, 0.62);--sd-color-tabs-underline-inactive: transparent;--sd-color-tabs-overline: rgb(222, 222, 222);--sd-color-tabs-underline: rgb(222, 222, 222);--sd-fontsize-tabs-label: 1rem} diff --git a/_static/design-tabs.js b/_static/design-tabs.js new file mode 100644 index 00000000..36b38cf0 --- /dev/null +++ b/_static/design-tabs.js @@ -0,0 +1,27 @@ +var sd_labels_by_text = {}; + +function ready() { + const li = document.getElementsByClassName("sd-tab-label"); + for (const label of li) { + syncId = label.getAttribute("data-sync-id"); + if (syncId) { + label.onclick = onLabelClick; + if (!sd_labels_by_text[syncId]) { + sd_labels_by_text[syncId] = []; + } + sd_labels_by_text[syncId].push(label); + } + } +} + +function onLabelClick() { + // Activate other inputs with the same sync id. + syncId = this.getAttribute("data-sync-id"); + for (label of sd_labels_by_text[syncId]) { + if (label === this) continue; + label.previousElementSibling.checked = true; + } + window.localStorage.setItem("sphinx-design-last-tab", syncId); +} + +document.addEventListener("DOMContentLoaded", ready, false); diff --git a/_static/doctools.js b/_static/doctools.js new file mode 100644 index 00000000..e1bfd708 --- /dev/null +++ b/_static/doctools.js @@ -0,0 +1,358 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Sphinx JavaScript utilities for all documentation. + * + * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/** + * select a different prefix for underscore + */ +$u = _.noConflict(); + +/** + * make the code below compatible with browsers without + * an installed firebug like debugger +if (!window.console || !console.firebug) { + var names = ["log", "debug", "info", "warn", "error", "assert", "dir", + "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace", + "profile", "profileEnd"]; + window.console = {}; + for (var i = 0; i < names.length; ++i) + window.console[names[i]] = function() {}; +} + */ + +/** + * small helper function to urldecode strings + * + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL + */ +jQuery.urldecode = function(x) { + if (!x) { + return x + } + return decodeURIComponent(x.replace(/\+/g, ' ')); +}; + +/** + * small helper function to urlencode strings + */ +jQuery.urlencode = encodeURIComponent; + +/** + * This function returns the parsed url parameters of the + * current request. Multiple values per key are supported, + * it will always return arrays of strings for the value parts. + */ +jQuery.getQueryParameters = function(s) { + if (typeof s === 'undefined') + s = document.location.search; + var parts = s.substr(s.indexOf('?') + 1).split('&'); + var result = {}; + for (var i = 0; i < parts.length; i++) { + var tmp = parts[i].split('=', 2); + var key = jQuery.urldecode(tmp[0]); + var value = jQuery.urldecode(tmp[1]); + if (key in result) + result[key].push(value); + else + result[key] = [value]; + } + return result; +}; + +/** + * highlight a given string on a jquery object by wrapping it in + * span elements with the given class name. + */ +jQuery.fn.highlightText = function(text, className) { + function highlight(node, addItems) { + if (node.nodeType === 3) { + var val = node.nodeValue; + var pos = val.toLowerCase().indexOf(text); + if (pos >= 0 && + !jQuery(node.parentNode).hasClass(className) && + !jQuery(node.parentNode).hasClass("nohighlight")) { + var span; + var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.className = className; + } + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + node.parentNode.insertBefore(span, node.parentNode.insertBefore( + document.createTextNode(val.substr(pos + text.length)), + node.nextSibling)); + node.nodeValue = val.substr(0, pos); + if (isInSVG) { + var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); + var bbox = node.parentElement.getBBox(); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute('class', className); + addItems.push({ + "parent": node.parentNode, + "target": rect}); + } + } + } + else if (!jQuery(node).is("button, select, textarea")) { + jQuery.each(node.childNodes, function() { + highlight(this, addItems); + }); + } + } + var addItems = []; + var result = this.each(function() { + highlight(this, addItems); + }); + for (var i = 0; i < addItems.length; ++i) { + jQuery(addItems[i].parent).before(addItems[i].target); + } + return result; +}; + +/* + * backward compatibility for jQuery.browser + * This will be supported until firefox bug is fixed. + */ +if (!jQuery.browser) { + jQuery.uaMatch = function(ua) { + ua = ua.toLowerCase(); + + var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || + /(webkit)[ \/]([\w.]+)/.exec(ua) || + /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || + /(msie) ([\w.]+)/.exec(ua) || + ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || + []; + + return { + browser: match[ 1 ] || "", + version: match[ 2 ] || "0" + }; + }; + jQuery.browser = {}; + jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; +} + +/** + * Small JavaScript module for the documentation. + */ +var Documentation = { + + init : function() { + this.fixFirefoxAnchorBug(); + this.highlightSearchWords(); + this.initIndexTable(); + this.initOnKeyListeners(); + }, + + /** + * i18n support + */ + TRANSLATIONS : {}, + PLURAL_EXPR : function(n) { return n === 1 ? 0 : 1; }, + LOCALE : 'unknown', + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext : function(string) { + var translated = Documentation.TRANSLATIONS[string]; + if (typeof translated === 'undefined') + return string; + return (typeof translated === 'string') ? translated : translated[0]; + }, + + ngettext : function(singular, plural, n) { + var translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated === 'undefined') + return (n == 1) ? singular : plural; + return translated[Documentation.PLURALEXPR(n)]; + }, + + addTranslations : function(catalog) { + for (var key in catalog.messages) + this.TRANSLATIONS[key] = catalog.messages[key]; + this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')'); + this.LOCALE = catalog.locale; + }, + + /** + * add context elements like header anchor links + */ + addContextElements : function() { + $('div[id] > :header:first').each(function() { + $('
\u00B6'). + attr('href', '#' + this.id). + attr('title', _('Permalink to this headline')). + appendTo(this); + }); + $('dt[id]').each(function() { + $('\u00B6'). + attr('href', '#' + this.id). + attr('title', _('Permalink to this definition')). + appendTo(this); + }); + }, + + /** + * workaround a firefox stupidity + * see: https://bugzilla.mozilla.org/show_bug.cgi?id=645075 + */ + fixFirefoxAnchorBug : function() { + if (document.location.hash && $.browser.mozilla) + window.setTimeout(function() { + document.location.href += ''; + }, 10); + }, + + /** + * highlight the search words provided in the url in the text + */ + highlightSearchWords : function() { + var params = $.getQueryParameters(); + var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : []; + if (terms.length) { + var body = $('div.body'); + if (!body.length) { + body = $('body'); + } + window.setTimeout(function() { + $.each(terms, function() { + body.highlightText(this.toLowerCase(), 'highlighted'); + }); + }, 10); + $('') + .appendTo($('#searchbox')); + } + }, + + /** + * init the domain index toggle buttons + */ + initIndexTable : function() { + var togglers = $('img.toggler').click(function() { + var src = $(this).attr('src'); + var idnum = $(this).attr('id').substr(7); + $('tr.cg-' + idnum).toggle(); + if (src.substr(-9) === 'minus.png') + $(this).attr('src', src.substr(0, src.length-9) + 'plus.png'); + else + $(this).attr('src', src.substr(0, src.length-8) + 'minus.png'); + }).css('display', ''); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) { + togglers.click(); + } + }, + + /** + * helper function to hide the search marks again + */ + hideSearchWords : function() { + $('#searchbox .highlight-link').fadeOut(300); + $('span.highlighted').removeClass('highlighted'); + var url = new URL(window.location); + url.searchParams.delete('highlight'); + window.history.replaceState({}, '', url); + }, + + /** + * helper function to focus on search bar + */ + focusSearchBar : function() { + $('input[name=q]').first().focus(); + }, + + /** + * make the url absolute + */ + makeURL : function(relativeURL) { + return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL; + }, + + /** + * get the current relative url + */ + getCurrentURL : function() { + var path = document.location.pathname; + var parts = path.split(/\//); + $.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() { + if (this === '..') + parts.pop(); + }); + var url = parts.join('/'); + return path.substring(url.lastIndexOf('/') + 1, path.length - 1); + }, + + initOnKeyListeners: function() { + // only install a listener if it is really needed + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && + !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) + return; + + $(document).keydown(function(event) { + var activeElementType = document.activeElement.tagName; + // don't navigate when in search box, textarea, dropdown or button + if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT' + && activeElementType !== 'BUTTON') { + if (event.altKey || event.ctrlKey || event.metaKey) + return; + + if (!event.shiftKey) { + switch (event.key) { + case 'ArrowLeft': + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) + break; + var prevHref = $('link[rel="prev"]').prop('href'); + if (prevHref) { + window.location.href = prevHref; + return false; + } + break; + case 'ArrowRight': + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) + break; + var nextHref = $('link[rel="next"]').prop('href'); + if (nextHref) { + window.location.href = nextHref; + return false; + } + break; + case 'Escape': + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) + break; + Documentation.hideSearchWords(); + return false; + } + } + + // some keyboard layouts may need Shift to get / + switch (event.key) { + case '/': + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) + break; + Documentation.focusSearchBar(); + return false; + } + } + }); + } +}; + +// quick alias for translations +_ = Documentation.gettext; + +$(document).ready(function() { + Documentation.init(); +}); diff --git a/_static/documentation_options.js b/_static/documentation_options.js new file mode 100644 index 00000000..7f2df830 --- /dev/null +++ b/_static/documentation_options.js @@ -0,0 +1,14 @@ +var DOCUMENTATION_OPTIONS = { + URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), + VERSION: '', + LANGUAGE: 'None', + COLLAPSE_INDEX: false, + BUILDER: 'dirhtml', + FILE_SUFFIX: '.html', + LINK_SUFFIX: '.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '', + NAVIGATION_WITH_KEYS: true, + SHOW_SEARCH_SUMMARY: true, + ENABLE_SEARCH_SHORTCUTS: true, +}; \ No newline at end of file diff --git a/_static/favicon.ico b/_static/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..bb295e84368d15b66302a19760269aa601058dbf GIT binary patch literal 15406 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 T_&;-gW+-{^`?>yqbKrjgZ25nj literal 0 HcmV?d00001 diff --git a/_static/file.png b/_static/file.png new file mode 100644 index 0000000000000000000000000000000000000000..a858a410e4faa62ce324d814e4b816fff83a6fb3 GIT binary patch literal 286 zcmV+(0pb3MP)s`hMrGg#P~ix$^RISR_I47Y|r1 z_CyJOe}D1){SET-^Amu_i71Lt6eYfZjRyw@I6OQAIXXHDfiX^GbOlHe=Ae4>0m)d(f|Me07*qoM6N<$f}vM^LjV8( literal 0 HcmV?d00001 diff --git a/_static/images/logo_binder.svg b/_static/images/logo_binder.svg new file mode 100644 index 00000000..45fecf75 --- /dev/null +++ b/_static/images/logo_binder.svg @@ -0,0 +1,19 @@ + + + + +logo + + + + + + + + diff --git a/_static/images/logo_colab.png b/_static/images/logo_colab.png new file mode 100644 index 0000000000000000000000000000000000000000..b7560ec216b2d1b6f77855525fe966c741833428 GIT binary patch literal 7601 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 diff --git a/_static/images/logo_jupyterhub.svg b/_static/images/logo_jupyterhub.svg new file mode 100644 index 00000000..60cfe9f2 --- /dev/null +++ b/_static/images/logo_jupyterhub.svg @@ -0,0 +1 @@ +logo_jupyterhubHub diff --git a/_static/jquery-3.5.1.js b/_static/jquery-3.5.1.js new file mode 100644 index 00000000..50937333 --- /dev/null +++ b/_static/jquery-3.5.1.js @@ -0,0 +1,10872 @@ +/*! + * jQuery JavaScript Library v3.5.1 + * https://jquery.com/ + * + * Includes Sizzle.js + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: 2020-05-04T22:49Z + */ +( function( global, factory ) { + + "use strict"; + + if ( typeof module === "object" && typeof module.exports === "object" ) { + + // For CommonJS and CommonJS-like environments where a proper `window` + // is present, execute the factory and get jQuery. + // For environments that do not have a `window` with a `document` + // (such as Node.js), expose a factory as module.exports. + // This accentuates the need for the creation of a real `window`. + // e.g. var jQuery = require("jquery")(window); + // See ticket #14549 for more info. + module.exports = global.document ? + factory( global, true ) : + function( w ) { + if ( !w.document ) { + throw new Error( "jQuery requires a window with a document" ); + } + return factory( w ); + }; + } else { + factory( global ); + } + +// Pass this if window is not defined yet +} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { + +// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 +// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode +// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common +// enough that all such attempts are guarded in a try block. +"use strict"; + +var arr = []; + +var getProto = Object.getPrototypeOf; + +var slice = arr.slice; + +var flat = arr.flat ? function( array ) { + return arr.flat.call( array ); +} : function( array ) { + return arr.concat.apply( [], array ); +}; + + +var push = arr.push; + +var indexOf = arr.indexOf; + +var class2type = {}; + +var toString = class2type.toString; + +var hasOwn = class2type.hasOwnProperty; + +var fnToString = hasOwn.toString; + +var ObjectFunctionString = fnToString.call( Object ); + +var support = {}; + +var isFunction = function isFunction( obj ) { + + // Support: Chrome <=57, Firefox <=52 + // In some browsers, typeof returns "function" for HTML elements + // (i.e., `typeof document.createElement( "object" ) === "function"`). + // We don't want to classify *any* DOM node as a function. + return typeof obj === "function" && typeof obj.nodeType !== "number"; + }; + + +var isWindow = function isWindow( obj ) { + return obj != null && obj === obj.window; + }; + + +var document = window.document; + + + + var preservedScriptAttributes = { + type: true, + src: true, + nonce: true, + noModule: true + }; + + function DOMEval( code, node, doc ) { + doc = doc || document; + + var i, val, + script = doc.createElement( "script" ); + + script.text = code; + if ( node ) { + for ( i in preservedScriptAttributes ) { + + // Support: Firefox 64+, Edge 18+ + // Some browsers don't support the "nonce" property on scripts. + // On the other hand, just using `getAttribute` is not enough as + // the `nonce` attribute is reset to an empty string whenever it + // becomes browsing-context connected. + // See https://github.com/whatwg/html/issues/2369 + // See https://html.spec.whatwg.org/#nonce-attributes + // The `node.getAttribute` check was added for the sake of + // `jQuery.globalEval` so that it can fake a nonce-containing node + // via an object. + val = node[ i ] || node.getAttribute && node.getAttribute( i ); + if ( val ) { + script.setAttribute( i, val ); + } + } + } + doc.head.appendChild( script ).parentNode.removeChild( script ); + } + + +function toType( obj ) { + if ( obj == null ) { + return obj + ""; + } + + // Support: Android <=2.3 only (functionish RegExp) + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call( obj ) ] || "object" : + typeof obj; +} +/* global Symbol */ +// Defining this global in .eslintrc.json would create a danger of using the global +// unguarded in another place, it seems safer to define global only for this module + + + +var + version = "3.5.1", + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + + // The jQuery object is actually just the init constructor 'enhanced' + // Need init if jQuery is called (just allow error to be thrown if not included) + return new jQuery.fn.init( selector, context ); + }; + +jQuery.fn = jQuery.prototype = { + + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + + // Return all the elements in a clean array + if ( num == null ) { + return slice.call( this ); + } + + // Return just the one element from the set + return num < 0 ? this[ num + this.length ] : this[ num ]; + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + each: function( callback ) { + return jQuery.each( this, callback ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map( this, function( elem, i ) { + return callback.call( elem, i, elem ); + } ) ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + even: function() { + return this.pushStack( jQuery.grep( this, function( _elem, i ) { + return ( i + 1 ) % 2; + } ) ); + }, + + odd: function() { + return this.pushStack( jQuery.grep( this, function( _elem, i ) { + return i % 2; + } ) ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); + }, + + end: function() { + return this.prevObject || this.constructor(); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: arr.sort, + splice: arr.splice +}; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[ 0 ] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + + // Skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !isFunction( target ) ) { + target = {}; + } + + // Extend jQuery itself if only one argument is passed + if ( i === length ) { + target = this; + i--; + } + + for ( ; i < length; i++ ) { + + // Only deal with non-null/undefined values + if ( ( options = arguments[ i ] ) != null ) { + + // Extend the base object + for ( name in options ) { + copy = options[ name ]; + + // Prevent Object.prototype pollution + // Prevent never-ending loop + if ( name === "__proto__" || target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject( copy ) || + ( copyIsArray = Array.isArray( copy ) ) ) ) { + src = target[ name ]; + + // Ensure proper type for the source value + if ( copyIsArray && !Array.isArray( src ) ) { + clone = []; + } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) { + clone = {}; + } else { + clone = src; + } + copyIsArray = false; + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend( { + + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + isPlainObject: function( obj ) { + var proto, Ctor; + + // Detect obvious negatives + // Use toString instead of jQuery.type to catch host objects + if ( !obj || toString.call( obj ) !== "[object Object]" ) { + return false; + } + + proto = getProto( obj ); + + // Objects with no prototype (e.g., `Object.create( null )`) are plain + if ( !proto ) { + return true; + } + + // Objects with prototype are plain iff they were constructed by a global Object function + Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; + return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; + }, + + isEmptyObject: function( obj ) { + var name; + + for ( name in obj ) { + return false; + } + return true; + }, + + // Evaluates a script in a provided context; falls back to the global one + // if not specified. + globalEval: function( code, options, doc ) { + DOMEval( code, { nonce: options && options.nonce }, doc ); + }, + + each: function( obj, callback ) { + var length, i = 0; + + if ( isArrayLike( obj ) ) { + length = obj.length; + for ( ; i < length; i++ ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } else { + for ( i in obj ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } + + return obj; + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArrayLike( Object( arr ) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + return arr == null ? -1 : indexOf.call( arr, elem, i ); + }, + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + for ( ; j < len; j++ ) { + first[ i++ ] = second[ j ]; + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var length, value, + i = 0, + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArrayLike( elems ) ) { + length = elems.length; + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return flat( ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +} ); + +if ( typeof Symbol === "function" ) { + jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; +} + +// Populate the class2type map +jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), +function( _i, name ) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +} ); + +function isArrayLike( obj ) { + + // Support: real iOS 8.2 only (not reproducible in simulator) + // `in` check used to prevent JIT error (gh-2145) + // hasOwn isn't used here due to false negatives + // regarding Nodelist length in IE + var length = !!obj && "length" in obj && obj.length, + type = toType( obj ); + + if ( isFunction( obj ) || isWindow( obj ) ) { + return false; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; +} +var Sizzle = +/*! + * Sizzle CSS Selector Engine v2.3.5 + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://js.foundation/ + * + * Date: 2020-03-14 + */ +( function( window ) { +var i, + support, + Expr, + getText, + isXML, + tokenize, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + 1 * new Date(), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + nonnativeSelectorCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + // Instance methods + hasOwn = ( {} ).hasOwnProperty, + arr = [], + pop = arr.pop, + pushNative = arr.push, + push = arr.push, + slice = arr.slice, + + // Use a stripped-down indexOf as it's faster than native + // https://jsperf.com/thor-indexof-vs-for/5 + indexOf = function( list, elem ) { + var i = 0, + len = list.length; + for ( ; i < len; i++ ) { + if ( list[ i ] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|" + + "ismap|loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + + // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram + identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + + "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + + // "Attribute values must be CSS identifiers [capture 5] + // or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + + whitespace + "*\\]", + + pseudos = ":(" + identifier + ")(?:\\((" + + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: + // 1. quoted (capture 3; capture 4 or capture 5) + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + + // 2. simple (capture 6) + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + + // 3. anything else (capture 2) + ".*" + + ")\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rwhitespace = new RegExp( whitespace + "+", "g" ), + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + + "*" ), + rdescend = new RegExp( whitespace + "|>" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + identifier + ")" ), + "CLASS": new RegExp( "^\\.(" + identifier + ")" ), + "TAG": new RegExp( "^(" + identifier + "|[*])" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + + whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + + whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rhtml = /HTML$/i, + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + + // CSS escapes + // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])", "g" ), + funescape = function( escape, nonHex ) { + var high = "0x" + escape.slice( 1 ) - 0x10000; + + return nonHex ? + + // Strip the backslash prefix from a non-hex escape sequence + nonHex : + + // Replace a hexadecimal escape sequence with the encoded Unicode code point + // Support: IE <=11+ + // For values outside the Basic Multilingual Plane (BMP), manually construct a + // surrogate pair + high < 0 ? + String.fromCharCode( high + 0x10000 ) : + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }, + + // CSS string/identifier serialization + // https://drafts.csswg.org/cssom/#common-serializing-idioms + rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, + fcssescape = function( ch, asCodePoint ) { + if ( asCodePoint ) { + + // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER + if ( ch === "\0" ) { + return "\uFFFD"; + } + + // Control characters and (dependent upon position) numbers get escaped as code points + return ch.slice( 0, -1 ) + "\\" + + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; + } + + // Other potentially-special ASCII characters get backslash-escaped + return "\\" + ch; + }, + + // Used for iframes + // See setDocument() + // Removing the function wrapper causes a "Permission Denied" + // error in IE + unloadHandler = function() { + setDocument(); + }, + + inDisabledFieldset = addCombinator( + function( elem ) { + return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset"; + }, + { dir: "parentNode", next: "legend" } + ); + +// Optimize for push.apply( _, NodeList ) +try { + push.apply( + ( arr = slice.call( preferredDoc.childNodes ) ), + preferredDoc.childNodes + ); + + // Support: Android<4.0 + // Detect silently failing push.apply + // eslint-disable-next-line no-unused-expressions + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + pushNative.apply( target, slice.call( els ) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + + // Can't trust NodeList.length + while ( ( target[ j++ ] = els[ i++ ] ) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var m, i, elem, nid, match, groups, newSelector, + newContext = context && context.ownerDocument, + + // nodeType defaults to 9, since context defaults to document + nodeType = context ? context.nodeType : 9; + + results = results || []; + + // Return early from calls with invalid selector or context + if ( typeof selector !== "string" || !selector || + nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { + + return results; + } + + // Try to shortcut find operations (as opposed to filters) in HTML documents + if ( !seed ) { + setDocument( context ); + context = context || document; + + if ( documentIsHTML ) { + + // If the selector is sufficiently simple, try using a "get*By*" DOM method + // (excepting DocumentFragment context, where the methods don't exist) + if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) { + + // ID selector + if ( ( m = match[ 1 ] ) ) { + + // Document context + if ( nodeType === 9 ) { + if ( ( elem = context.getElementById( m ) ) ) { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + + // Element context + } else { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( newContext && ( elem = newContext.getElementById( m ) ) && + contains( context, elem ) && + elem.id === m ) { + + results.push( elem ); + return results; + } + } + + // Type selector + } else if ( match[ 2 ] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Class selector + } else if ( ( m = match[ 3 ] ) && support.getElementsByClassName && + context.getElementsByClassName ) { + + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // Take advantage of querySelectorAll + if ( support.qsa && + !nonnativeSelectorCache[ selector + " " ] && + ( !rbuggyQSA || !rbuggyQSA.test( selector ) ) && + + // Support: IE 8 only + // Exclude object elements + ( nodeType !== 1 || context.nodeName.toLowerCase() !== "object" ) ) { + + newSelector = selector; + newContext = context; + + // qSA considers elements outside a scoping root when evaluating child or + // descendant combinators, which is not what we want. + // In such cases, we work around the behavior by prefixing every selector in the + // list with an ID selector referencing the scope context. + // The technique has to be used as well when a leading combinator is used + // as such selectors are not recognized by querySelectorAll. + // Thanks to Andrew Dupont for this technique. + if ( nodeType === 1 && + ( rdescend.test( selector ) || rcombinators.test( selector ) ) ) { + + // Expand context for sibling selectors + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || + context; + + // We can use :scope instead of the ID hack if the browser + // supports it & if we're not changing the context. + if ( newContext !== context || !support.scope ) { + + // Capture the context ID, setting it first if necessary + if ( ( nid = context.getAttribute( "id" ) ) ) { + nid = nid.replace( rcssescape, fcssescape ); + } else { + context.setAttribute( "id", ( nid = expando ) ); + } + } + + // Prefix every selector in the list + groups = tokenize( selector ); + i = groups.length; + while ( i-- ) { + groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " + + toSelector( groups[ i ] ); + } + newSelector = groups.join( "," ); + } + + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch ( qsaError ) { + nonnativeSelectorCache( selector, true ); + } finally { + if ( nid === expando ) { + context.removeAttribute( "id" ); + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {function(string, object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key + " " ) > Expr.cacheLength ) { + + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return ( cache[ key + " " ] = value ); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created element and returns a boolean result + */ +function assert( fn ) { + var el = document.createElement( "fieldset" ); + + try { + return !!fn( el ); + } catch ( e ) { + return false; + } finally { + + // Remove from its parent by default + if ( el.parentNode ) { + el.parentNode.removeChild( el ); + } + + // release memory in IE + el = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split( "|" ), + i = arr.length; + + while ( i-- ) { + Expr.attrHandle[ arr[ i ] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + a.sourceIndex - b.sourceIndex; + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( ( cur = cur.nextSibling ) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return ( name === "input" || name === "button" ) && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for :enabled/:disabled + * @param {Boolean} disabled true for :disabled; false for :enabled + */ +function createDisabledPseudo( disabled ) { + + // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable + return function( elem ) { + + // Only certain elements can match :enabled or :disabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled + if ( "form" in elem ) { + + // Check for inherited disabledness on relevant non-disabled elements: + // * listed form-associated elements in a disabled fieldset + // https://html.spec.whatwg.org/multipage/forms.html#category-listed + // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled + // * option elements in a disabled optgroup + // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled + // All such elements have a "form" property. + if ( elem.parentNode && elem.disabled === false ) { + + // Option elements defer to a parent optgroup if present + if ( "label" in elem ) { + if ( "label" in elem.parentNode ) { + return elem.parentNode.disabled === disabled; + } else { + return elem.disabled === disabled; + } + } + + // Support: IE 6 - 11 + // Use the isDisabled shortcut property to check for disabled fieldset ancestors + return elem.isDisabled === disabled || + + // Where there is no isDisabled, check manually + /* jshint -W018 */ + elem.isDisabled !== !disabled && + inDisabledFieldset( elem ) === disabled; + } + + return elem.disabled === disabled; + + // Try to winnow out elements that can't be disabled before trusting the disabled property. + // Some victims get caught in our net (label, legend, menu, track), but it shouldn't + // even exist on them, let alone have a boolean value. + } else if ( "label" in elem ) { + return elem.disabled === disabled; + } + + // Remaining elements are neither :enabled nor :disabled + return false; + }; +} + +/** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ +function createPositionalPseudo( fn ) { + return markFunction( function( argument ) { + argument = +argument; + return markFunction( function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ ( j = matchIndexes[ i ] ) ] ) { + seed[ j ] = !( matches[ j ] = seed[ j ] ); + } + } + } ); + } ); +} + +/** + * Checks a node for validity as a Sizzle context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ +function testContext( context ) { + return context && typeof context.getElementsByTagName !== "undefined" && context; +} + +// Expose support vars for convenience +support = Sizzle.support = {}; + +/** + * Detects XML nodes + * @param {Element|Object} elem An element or a document + * @returns {Boolean} True iff elem is a non-HTML XML node + */ +isXML = Sizzle.isXML = function( elem ) { + var namespace = elem.namespaceURI, + docElem = ( elem.ownerDocument || elem ).documentElement; + + // Support: IE <=8 + // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes + // https://bugs.jquery.com/ticket/4833 + return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" ); +}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var hasCompare, subWindow, + doc = node ? node.ownerDocument || node : preferredDoc; + + // Return early if doc is invalid or already selected + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Update global variables + document = doc; + docElem = document.documentElement; + documentIsHTML = !isXML( document ); + + // Support: IE 9 - 11+, Edge 12 - 18+ + // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( preferredDoc != document && + ( subWindow = document.defaultView ) && subWindow.top !== subWindow ) { + + // Support: IE 11, Edge + if ( subWindow.addEventListener ) { + subWindow.addEventListener( "unload", unloadHandler, false ); + + // Support: IE 9 - 10 only + } else if ( subWindow.attachEvent ) { + subWindow.attachEvent( "onunload", unloadHandler ); + } + } + + // Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only, + // Safari 4 - 5 only, Opera <=11.6 - 12.x only + // IE/Edge & older browsers don't support the :scope pseudo-class. + // Support: Safari 6.0 only + // Safari 6.0 supports :scope but it's an alias of :root there. + support.scope = assert( function( el ) { + docElem.appendChild( el ).appendChild( document.createElement( "div" ) ); + return typeof el.querySelectorAll !== "undefined" && + !el.querySelectorAll( ":scope fieldset div" ).length; + } ); + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties + // (excepting IE8 booleans) + support.attributes = assert( function( el ) { + el.className = "i"; + return !el.getAttribute( "className" ); + } ); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert( function( el ) { + el.appendChild( document.createComment( "" ) ); + return !el.getElementsByTagName( "*" ).length; + } ); + + // Support: IE<9 + support.getElementsByClassName = rnative.test( document.getElementsByClassName ); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programmatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert( function( el ) { + docElem.appendChild( el ).id = expando; + return !document.getElementsByName || !document.getElementsByName( expando ).length; + } ); + + // ID filter and find + if ( support.getById ) { + Expr.filter[ "ID" ] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute( "id" ) === attrId; + }; + }; + Expr.find[ "ID" ] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var elem = context.getElementById( id ); + return elem ? [ elem ] : []; + } + }; + } else { + Expr.filter[ "ID" ] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== "undefined" && + elem.getAttributeNode( "id" ); + return node && node.value === attrId; + }; + }; + + // Support: IE 6 - 7 only + // getElementById is not reliable as a find shortcut + Expr.find[ "ID" ] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var node, i, elems, + elem = context.getElementById( id ); + + if ( elem ) { + + // Verify the id attribute + node = elem.getAttributeNode( "id" ); + if ( node && node.value === id ) { + return [ elem ]; + } + + // Fall back on getElementsByName + elems = context.getElementsByName( id ); + i = 0; + while ( ( elem = elems[ i++ ] ) ) { + node = elem.getAttributeNode( "id" ); + if ( node && node.value === id ) { + return [ elem ]; + } + } + } + + return []; + } + }; + } + + // Tag + Expr.find[ "TAG" ] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( tag ); + + // DocumentFragment nodes don't have gEBTN + } else if ( support.qsa ) { + return context.querySelectorAll( tag ); + } + } : + + function( tag, context ) { + var elem, + tmp = [], + i = 0, + + // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( ( elem = results[ i++ ] ) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Class + Expr.find[ "CLASS" ] = support.getElementsByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21) + // We allow this because of a bug in IE8/9 that throws an error + // whenever `document.activeElement` is accessed on an iframe + // So, we allow :focus to pass through QSA all the time to avoid the IE error + // See https://bugs.jquery.com/ticket/13378 + rbuggyQSA = []; + + if ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) { + + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert( function( el ) { + + var input; + + // Select is set to empty string on purpose + // This is to test IE's treatment of not explicitly + // setting a boolean content attribute, + // since its presence should be enough + // https://bugs.jquery.com/ticket/12359 + docElem.appendChild( el ).innerHTML = "" + + ""; + + // Support: IE8, Opera 11-12.16 + // Nothing should be selected when empty strings follow ^= or $= or *= + // The test attribute must be unknown in Opera but "safe" for WinRT + // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section + if ( el.querySelectorAll( "[msallowcapture^='']" ).length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !el.querySelectorAll( "[selected]" ).length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ + if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { + rbuggyQSA.push( "~=" ); + } + + // Support: IE 11+, Edge 15 - 18+ + // IE 11/Edge don't find elements on a `[name='']` query in some cases. + // Adding a temporary attribute to the document before the selection works + // around the issue. + // Interestingly, IE 10 & older don't seem to have the issue. + input = document.createElement( "input" ); + input.setAttribute( "name", "" ); + el.appendChild( input ); + if ( !el.querySelectorAll( "[name='']" ).length ) { + rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" + + whitespace + "*(?:''|\"\")" ); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !el.querySelectorAll( ":checked" ).length ) { + rbuggyQSA.push( ":checked" ); + } + + // Support: Safari 8+, iOS 8+ + // https://bugs.webkit.org/show_bug.cgi?id=136851 + // In-page `selector#id sibling-combinator selector` fails + if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { + rbuggyQSA.push( ".#.+[+~]" ); + } + + // Support: Firefox <=3.6 - 5 only + // Old Firefox doesn't throw on a badly-escaped identifier. + el.querySelectorAll( "\\\f" ); + rbuggyQSA.push( "[\\r\\n\\f]" ); + } ); + + assert( function( el ) { + el.innerHTML = "" + + ""; + + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + var input = document.createElement( "input" ); + input.setAttribute( "type", "hidden" ); + el.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE8 + // Enforce case-sensitivity of name attribute + if ( el.querySelectorAll( "[name=d]" ).length ) { + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( el.querySelectorAll( ":enabled" ).length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: IE9-11+ + // IE's :disabled selector does not pick up the children of disabled fieldsets + docElem.appendChild( el ).disabled = true; + if ( el.querySelectorAll( ":disabled" ).length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: Opera 10 - 11 only + // Opera 10-11 does not throw on post-comma invalid pseudos + el.querySelectorAll( "*,:x" ); + rbuggyQSA.push( ",.*:" ); + } ); + } + + if ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches || + docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector ) ) ) ) { + + assert( function( el ) { + + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( el, "*" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( el, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + } ); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( "|" ) ); + + /* Contains + ---------------------------------------------------------------------- */ + hasCompare = rnative.test( docElem.compareDocumentPosition ); + + // Element contains another + // Purposefully self-exclusive + // As in, an element does not contain itself + contains = hasCompare || rnative.test( docElem.contains ) ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + ) ); + } : + function( a, b ) { + if ( b ) { + while ( ( b = b.parentNode ) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + // Document order sorting + sortOrder = hasCompare ? + function( a, b ) { + + // Flag for duplicate removal + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + // Sort on method existence if only one input has compareDocumentPosition + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + // Calculate position if both inputs belong to the same document + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + // Otherwise we know they are disconnected + 1; + + // Disconnected nodes + if ( compare & 1 || + ( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) { + + // Choose the first element that is related to our preferred document + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( a == document || a.ownerDocument == preferredDoc && + contains( preferredDoc, a ) ) { + return -1; + } + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( b == document || b.ownerDocument == preferredDoc && + contains( preferredDoc, b ) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } : + function( a, b ) { + + // Exit early if the nodes are identical + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + // Parentless nodes are either documents or disconnected + if ( !aup || !bup ) { + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + /* eslint-disable eqeqeq */ + return a == document ? -1 : + b == document ? 1 : + /* eslint-enable eqeqeq */ + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + + // If the nodes are siblings, we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + // Otherwise we need full lists of their ancestors for comparison + cur = a; + while ( ( cur = cur.parentNode ) ) { + ap.unshift( cur ); + } + cur = b; + while ( ( cur = cur.parentNode ) ) { + bp.unshift( cur ); + } + + // Walk down the tree looking for a discrepancy + while ( ap[ i ] === bp[ i ] ) { + i++; + } + + return i ? + + // Do a sibling check if the nodes have a common ancestor + siblingCheck( ap[ i ], bp[ i ] ) : + + // Otherwise nodes in our document sort first + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + /* eslint-disable eqeqeq */ + ap[ i ] == preferredDoc ? -1 : + bp[ i ] == preferredDoc ? 1 : + /* eslint-enable eqeqeq */ + 0; + }; + + return document; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + setDocument( elem ); + + if ( support.matchesSelector && documentIsHTML && + !nonnativeSelectorCache[ expr + " " ] && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch ( e ) { + nonnativeSelectorCache( expr, true ); + } + } + + return Sizzle( expr, document, null, [ elem ] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + + // Set document vars if needed + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( ( context.ownerDocument || context ) != document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + + // Set document vars if needed + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( ( elem.ownerDocument || elem ) != document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + + // Don't get fooled by Object.prototype properties (jQuery #13807) + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + return val !== undefined ? + val : + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + ( val = elem.getAttributeNode( name ) ) && val.specified ? + val.value : + null; +}; + +Sizzle.escape = function( sel ) { + return ( sel + "" ).replace( rcssescape, fcssescape ); +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + // Unless we *know* we can detect duplicates, assume their presence + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( ( elem = results[ i++ ] ) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + // Clear input after sorting to release objects + // See https://github.com/jquery/sizzle/pull/225 + sortInput = null; + + return results; +}; + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + + // If no nodeType, this is expected to be an array + while ( ( node = elem[ i++ ] ) ) { + + // Do not traverse comment nodes + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + + // Use textContent for elements + // innerText usage removed for consistency of new lines (jQuery #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + + // Do not include comment or processing instruction nodes + + return ret; +}; + +Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[ 1 ] = match[ 1 ].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[ 3 ] = ( match[ 3 ] || match[ 4 ] || + match[ 5 ] || "" ).replace( runescape, funescape ); + + if ( match[ 2 ] === "~=" ) { + match[ 3 ] = " " + match[ 3 ] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[ 1 ] = match[ 1 ].toLowerCase(); + + if ( match[ 1 ].slice( 0, 3 ) === "nth" ) { + + // nth-* requires argument + if ( !match[ 3 ] ) { + Sizzle.error( match[ 0 ] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[ 4 ] = +( match[ 4 ] ? + match[ 5 ] + ( match[ 6 ] || 1 ) : + 2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) ); + match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" ); + + // other types prohibit arguments + } else if ( match[ 3 ] ) { + Sizzle.error( match[ 0 ] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[ 6 ] && match[ 2 ]; + + if ( matchExpr[ "CHILD" ].test( match[ 0 ] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[ 3 ] ) { + match[ 2 ] = match[ 4 ] || match[ 5 ] || ""; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + + // Get excess from tokenize (recursively) + ( excess = tokenize( unquoted, true ) ) && + + // advance to the next closing parenthesis + ( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) { + + // excess is a negative index + match[ 0 ] = match[ 0 ].slice( 0, excess ); + match[ 2 ] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { + return true; + } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + ( pattern = new RegExp( "(^|" + whitespace + + ")" + className + "(" + whitespace + "|$)" ) ) && classCache( + className, function( elem ) { + return pattern.test( + typeof elem.className === "string" && elem.className || + typeof elem.getAttribute !== "undefined" && + elem.getAttribute( "class" ) || + "" + ); + } ); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + /* eslint-disable max-len */ + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + /* eslint-enable max-len */ + + }; + }, + + "CHILD": function( type, what, _argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, _context, xml ) { + var cache, uniqueCache, outerCache, node, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType, + diff = false; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( ( node = node[ dir ] ) ) { + if ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) { + + return false; + } + } + + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + + // Seek `elem` from a previously-cached index + + // ...in a gzip-friendly way + node = parent; + outerCache = node[ expando ] || ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex && cache[ 2 ]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( ( node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + ( diff = nodeIndex = 0 ) || start.pop() ) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + } else { + + // Use previously-cached element index if available + if ( useCache ) { + + // ...in a gzip-friendly way + node = elem; + outerCache = node[ expando ] || ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex; + } + + // xml :nth-child(...) + // or :nth-last-child(...) or :nth(-last)?-of-type(...) + if ( diff === false ) { + + // Use the same loop as above to seek `elem` from the start + while ( ( node = ++nodeIndex && node && node[ dir ] || + ( diff = nodeIndex = 0 ) || start.pop() ) ) { + + if ( ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) && + ++diff ) { + + // Cache the index of each encountered element + if ( useCache ) { + outerCache = node[ expando ] || + ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + uniqueCache[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction( function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf( seed, matched[ i ] ); + seed[ idx ] = !( matches[ idx ] = matched[ i ] ); + } + } ) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + + // Potentially complex pseudos + "not": markFunction( function( selector ) { + + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction( function( seed, matches, _context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( ( elem = unmatched[ i ] ) ) { + seed[ i ] = !( matches[ i ] = elem ); + } + } + } ) : + function( elem, _context, xml ) { + input[ 0 ] = elem; + matcher( input, null, xml, results ); + + // Don't keep the element (issue #299) + input[ 0 ] = null; + return !results.pop(); + }; + } ), + + "has": markFunction( function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + } ), + + "contains": markFunction( function( text ) { + text = text.replace( runescape, funescape ); + return function( elem ) { + return ( elem.textContent || getText( elem ) ).indexOf( text ) > -1; + }; + } ), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // http://www.w3.org/TR/selectors/#lang-pseudo + "lang": markFunction( function( lang ) { + + // lang value must be a valid identifier + if ( !ridentifier.test( lang || "" ) ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( ( elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( ( elem = elem.parentNode ) && elem.nodeType === 1 ); + return false; + }; + } ), + + // Miscellaneous + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && + ( !document.hasFocus || document.hasFocus() ) && + !!( elem.type || elem.href || ~elem.tabIndex ); + }, + + // Boolean properties + "enabled": createDisabledPseudo( false ), + "disabled": createDisabledPseudo( true ), + + "checked": function( elem ) { + + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return ( nodeName === "input" && !!elem.checked ) || + ( nodeName === "option" && !!elem.selected ); + }, + + "selected": function( elem ) { + + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + // eslint-disable-next-line no-unused-expressions + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + "empty": function( elem ) { + + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), + // but not by others (comment: 8; processing instruction: 7; etc.) + // nodeType < 6 works because attributes (2) do not appear as children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos[ "empty" ]( elem ); + }, + + // Element/input types + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + + // Support: IE<8 + // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" + ( ( attr = elem.getAttribute( "type" ) ) == null || + attr.toLowerCase() === "text" ); + }, + + // Position-in-collection + "first": createPositionalPseudo( function() { + return [ 0 ]; + } ), + + "last": createPositionalPseudo( function( _matchIndexes, length ) { + return [ length - 1 ]; + } ), + + "eq": createPositionalPseudo( function( _matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + } ), + + "even": createPositionalPseudo( function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "odd": createPositionalPseudo( function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "lt": createPositionalPseudo( function( matchIndexes, length, argument ) { + var i = argument < 0 ? + argument + length : + argument > length ? + length : + argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "gt": createPositionalPseudo( function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ) + } +}; + +Expr.pseudos[ "nth" ] = Expr.pseudos[ "eq" ]; + +// Add button/input type pseudos +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +// Easy API for creating new setFilters +function setFilters() {} +setFilters.prototype = Expr.filters = Expr.pseudos; +Expr.setFilters = new setFilters(); + +tokenize = Sizzle.tokenize = function( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || ( match = rcomma.exec( soFar ) ) ) { + if ( match ) { + + // Don't consume trailing commas as valid + soFar = soFar.slice( match[ 0 ].length ) || soFar; + } + groups.push( ( tokens = [] ) ); + } + + matched = false; + + // Combinators + if ( ( match = rcombinators.exec( soFar ) ) ) { + matched = match.shift(); + tokens.push( { + value: matched, + + // Cast descendant combinators to space + type: match[ 0 ].replace( rtrim, " " ) + } ); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] || + ( match = preFilters[ type ]( match ) ) ) ) { + matched = match.shift(); + tokens.push( { + value: matched, + type: type, + matches: match + } ); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +}; + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[ i ].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + skip = combinator.next, + key = skip || dir, + checkNonElements = base && key === "parentNode", + doneName = done++; + + return combinator.first ? + + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + return false; + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var oldCache, uniqueCache, outerCache, + newCache = [ dirruns, doneName ]; + + // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching + if ( xml ) { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || ( elem[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ elem.uniqueID ] || + ( outerCache[ elem.uniqueID ] = {} ); + + if ( skip && skip === elem.nodeName.toLowerCase() ) { + elem = elem[ dir ] || elem; + } else if ( ( oldCache = uniqueCache[ key ] ) && + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { + + // Assign to newCache so results back-propagate to previous elements + return ( newCache[ 2 ] = oldCache[ 2 ] ); + } else { + + // Reuse newcache so results back-propagate to previous elements + uniqueCache[ key ] = newCache; + + // A match means we're done; a fail means we have to keep checking + if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) { + return true; + } + } + } + } + } + return false; + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[ i ]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[ 0 ]; +} + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[ i ], results ); + } + return results; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( ( elem = unmatched[ i ] ) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction( function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( + selector || "*", + context.nodeType ? [ context ] : context, + [] + ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( ( elem = temp[ i ] ) ) { + matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem ); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( ( elem = matcherOut[ i ] ) ) { + + // Restore matcherIn since elem is not yet a final match + temp.push( ( matcherIn[ i ] = elem ) ); + } + } + postFinder( null, ( matcherOut = [] ), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( ( elem = matcherOut[ i ] ) && + ( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) { + + seed[ temp ] = !( results[ temp ] = elem ); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + } ); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[ 0 ].type ], + implicitRelative = leadingRelative || Expr.relative[ " " ], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + ( checkContext = context ).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + + // Avoid hanging onto element (issue #299) + checkContext = null; + return ret; + } ]; + + for ( ; i < len; i++ ) { + if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) { + matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ]; + } else { + matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[ j ].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + + // If the preceding token was a descendant combinator, insert an implicit any-element `*` + tokens + .slice( 0, i - 1 ) + .concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } ) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, outermost ) { + var elem, j, matcher, + matchedCount = 0, + i = "0", + unmatched = seed && [], + setMatched = [], + contextBackup = outermostContext, + + // We must always have either seed elements or outermost context + elems = seed || byElement && Expr.find[ "TAG" ]( "*", outermost ), + + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ), + len = elems.length; + + if ( outermost ) { + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + outermostContext = context == document || context || outermost; + } + + // Add elements passing elementMatchers directly to results + // Support: IE<9, Safari + // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id + for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( !context && elem.ownerDocument != document ) { + setDocument( elem ); + xml = !documentIsHTML; + } + while ( ( matcher = elementMatchers[ j++ ] ) ) { + if ( matcher( elem, context || document, xml ) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + + // They will have gone through all possible matchers + if ( ( elem = !matcher && elem ) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // `i` is now the count of elements visited above, and adding it to `matchedCount` + // makes the latter nonnegative. + matchedCount += i; + + // Apply set filters to unmatched elements + // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` + // equals `i`), unless we didn't visit _any_ elements in the above loop because we have + // no element matchers and no seed. + // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that + // case, which will result in a "00" `matchedCount` that differs from `i` but is also + // numerically zero. + if ( bySet && i !== matchedCount ) { + j = 0; + while ( ( matcher = setMatchers[ j++ ] ) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !( unmatched[ i ] || setMatched[ i ] ) ) { + setMatched[ i ] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + + // Generate a function of recursive functions that can be used to check each element + if ( !match ) { + match = tokenize( selector ); + } + i = match.length; + while ( i-- ) { + cached = matcherFromTokens( match[ i ] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( + selector, + matcherFromGroupMatchers( elementMatchers, setMatchers ) + ); + + // Save selector and tokenization + cached.selector = selector; + } + return cached; +}; + +/** + * A low-level selection function that works with Sizzle's compiled + * selector functions + * @param {String|Function} selector A selector or a pre-compiled + * selector function built with Sizzle.compile + * @param {Element} context + * @param {Array} [results] + * @param {Array} [seed] A set of elements to match against + */ +select = Sizzle.select = function( selector, context, results, seed ) { + var i, tokens, token, type, find, + compiled = typeof selector === "function" && selector, + match = !seed && tokenize( ( selector = compiled.selector || selector ) ); + + results = results || []; + + // Try to minimize operations if there is only one selector in the list and no seed + // (the latter of which guarantees us context) + if ( match.length === 1 ) { + + // Reduce context if the leading compound selector is an ID + tokens = match[ 0 ] = match[ 0 ].slice( 0 ); + if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" && + context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) { + + context = ( Expr.find[ "ID" ]( token.matches[ 0 ] + .replace( runescape, funescape ), context ) || [] )[ 0 ]; + if ( !context ) { + return results; + + // Precompiled matchers will still verify ancestry, so step up a level + } else if ( compiled ) { + context = context.parentNode; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr[ "needsContext" ].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[ i ]; + + // Abort if we hit a combinator + if ( Expr.relative[ ( type = token.type ) ] ) { + break; + } + if ( ( find = Expr.find[ type ] ) ) { + + // Search, expanding context for leading sibling combinators + if ( ( seed = find( + token.matches[ 0 ].replace( runescape, funescape ), + rsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) || + context + ) ) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + + // Compile and execute a filtering function if one is not provided + // Provide `match` to avoid retokenization if we modified the selector above + ( compiled || compile( selector, match ) )( + seed, + context, + !documentIsHTML, + results, + !context || rsibling.test( selector ) && testContext( context.parentNode ) || context + ); + return results; +}; + +// One-time assignments + +// Sort stability +support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando; + +// Support: Chrome 14-35+ +// Always assume duplicates if they aren't passed to the comparison function +support.detectDuplicates = !!hasDuplicate; + +// Initialize against the default document +setDocument(); + +// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) +// Detached nodes confoundingly follow *each other* +support.sortDetached = assert( function( el ) { + + // Should return 1, but returns 4 (following) + return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1; +} ); + +// Support: IE<8 +// Prevent attribute/property "interpolation" +// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx +if ( !assert( function( el ) { + el.innerHTML = ""; + return el.firstChild.getAttribute( "href" ) === "#"; +} ) ) { + addHandle( "type|href|height|width", function( elem, name, isXML ) { + if ( !isXML ) { + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); + } + } ); +} + +// Support: IE<9 +// Use defaultValue in place of getAttribute("value") +if ( !support.attributes || !assert( function( el ) { + el.innerHTML = ""; + el.firstChild.setAttribute( "value", "" ); + return el.firstChild.getAttribute( "value" ) === ""; +} ) ) { + addHandle( "value", function( elem, _name, isXML ) { + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { + return elem.defaultValue; + } + } ); +} + +// Support: IE<9 +// Use getAttributeNode to fetch booleans when getAttribute lies +if ( !assert( function( el ) { + return el.getAttribute( "disabled" ) == null; +} ) ) { + addHandle( booleans, function( elem, name, isXML ) { + var val; + if ( !isXML ) { + return elem[ name ] === true ? name.toLowerCase() : + ( val = elem.getAttributeNode( name ) ) && val.specified ? + val.value : + null; + } + } ); +} + +return Sizzle; + +} )( window ); + + + +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; + +// Deprecated +jQuery.expr[ ":" ] = jQuery.expr.pseudos; +jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; +jQuery.escapeSelector = Sizzle.escape; + + + + +var dir = function( elem, dir, until ) { + var matched = [], + truncate = until !== undefined; + + while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { + if ( elem.nodeType === 1 ) { + if ( truncate && jQuery( elem ).is( until ) ) { + break; + } + matched.push( elem ); + } + } + return matched; +}; + + +var siblings = function( n, elem ) { + var matched = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + matched.push( n ); + } + } + + return matched; +}; + + +var rneedsContext = jQuery.expr.match.needsContext; + + + +function nodeName( elem, name ) { + + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + +}; +var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); + + + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, not ) { + if ( isFunction( qualifier ) ) { + return jQuery.grep( elements, function( elem, i ) { + return !!qualifier.call( elem, i, elem ) !== not; + } ); + } + + // Single element + if ( qualifier.nodeType ) { + return jQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + } ); + } + + // Arraylike of elements (jQuery, arguments, Array) + if ( typeof qualifier !== "string" ) { + return jQuery.grep( elements, function( elem ) { + return ( indexOf.call( qualifier, elem ) > -1 ) !== not; + } ); + } + + // Filtered directly for both simple and complex selectors + return jQuery.filter( qualifier, elements, not ); +} + +jQuery.filter = function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + if ( elems.length === 1 && elem.nodeType === 1 ) { + return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; + } + + return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + } ) ); +}; + +jQuery.fn.extend( { + find: function( selector ) { + var i, ret, + len = this.length, + self = this; + + if ( typeof selector !== "string" ) { + return this.pushStack( jQuery( selector ).filter( function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + } ) ); + } + + ret = this.pushStack( [] ); + + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, self[ i ], ret ); + } + + return len > 1 ? jQuery.uniqueSort( ret ) : ret; + }, + filter: function( selector ) { + return this.pushStack( winnow( this, selector || [], false ) ); + }, + not: function( selector ) { + return this.pushStack( winnow( this, selector || [], true ) ); + }, + is: function( selector ) { + return !!winnow( + this, + + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + typeof selector === "string" && rneedsContext.test( selector ) ? + jQuery( selector ) : + selector || [], + false + ).length; + } +} ); + + +// Initialize a jQuery object + + +// A central reference to the root jQuery(document) +var rootjQuery, + + // A simple way to check for HTML strings + // Prioritize #id over to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + // Shortcut simple #id case for speed + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, + + init = jQuery.fn.init = function( selector, context, root ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Method init() accepts an alternate rootjQuery + // so migrate can support jQuery.sub (gh-2101) + root = root || rootjQuery; + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector[ 0 ] === "<" && + selector[ selector.length - 1 ] === ">" && + selector.length >= 3 ) { + + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && ( match[ 1 ] || !context ) ) { + + // HANDLE: $(html) -> $(array) + if ( match[ 1 ] ) { + context = context instanceof jQuery ? context[ 0 ] : context; + + // Option to run scripts is true for back-compat + // Intentionally let the error be thrown if parseHTML is not present + jQuery.merge( this, jQuery.parseHTML( + match[ 1 ], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { + for ( match in context ) { + + // Properties of context are called as methods if possible + if ( isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[ 2 ] ); + + if ( elem ) { + + // Inject the element directly into the jQuery object + this[ 0 ] = elem; + this.length = 1; + } + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || root ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(DOMElement) + } else if ( selector.nodeType ) { + this[ 0 ] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( isFunction( selector ) ) { + return root.ready !== undefined ? + root.ready( selector ) : + + // Execute immediately if ready is not present + selector( jQuery ); + } + + return jQuery.makeArray( selector, this ); + }; + +// Give the init function the jQuery prototype for later instantiation +init.prototype = jQuery.fn; + +// Initialize central reference +rootjQuery = jQuery( document ); + + +var rparentsprev = /^(?:parents|prev(?:Until|All))/, + + // Methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend( { + has: function( target ) { + var targets = jQuery( target, this ), + l = targets.length; + + return this.filter( function() { + var i = 0; + for ( ; i < l; i++ ) { + if ( jQuery.contains( this, targets[ i ] ) ) { + return true; + } + } + } ); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + matched = [], + targets = typeof selectors !== "string" && jQuery( selectors ); + + // Positional selectors never match, since there's no _selection_ context + if ( !rneedsContext.test( selectors ) ) { + for ( ; i < l; i++ ) { + for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { + + // Always skip document fragments + if ( cur.nodeType < 11 && ( targets ? + targets.index( cur ) > -1 : + + // Don't pass non-elements to Sizzle + cur.nodeType === 1 && + jQuery.find.matchesSelector( cur, selectors ) ) ) { + + matched.push( cur ); + break; + } + } + } + } + + return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); + }, + + // Determine the position of an element within the set + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; + } + + // Index in selector + if ( typeof elem === "string" ) { + return indexOf.call( jQuery( elem ), this[ 0 ] ); + } + + // Locate the position of the desired element + return indexOf.call( this, + + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[ 0 ] : elem + ); + }, + + add: function( selector, context ) { + return this.pushStack( + jQuery.uniqueSort( + jQuery.merge( this.get(), jQuery( selector, context ) ) + ) + ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter( selector ) + ); + } +} ); + +function sibling( cur, dir ) { + while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} + return cur; +} + +jQuery.each( { + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, _i, until ) { + return dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, _i, until ) { + return dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, _i, until ) { + return dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return siblings( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return siblings( elem.firstChild ); + }, + contents: function( elem ) { + if ( elem.contentDocument != null && + + // Support: IE 11+ + // elements with no `data` attribute has an object + // `contentDocument` with a `null` prototype. + getProto( elem.contentDocument ) ) { + + return elem.contentDocument; + } + + // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only + // Treat the template element as a regular one in browsers that + // don't support it. + if ( nodeName( elem, "template" ) ) { + elem = elem.content || elem; + } + + return jQuery.merge( [], elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var matched = jQuery.map( this, fn, until ); + + if ( name.slice( -5 ) !== "Until" ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + matched = jQuery.filter( selector, matched ); + } + + if ( this.length > 1 ) { + + // Remove duplicates + if ( !guaranteedUnique[ name ] ) { + jQuery.uniqueSort( matched ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + matched.reverse(); + } + } + + return this.pushStack( matched ); + }; +} ); +var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); + + + +// Convert String-formatted options into Object-formatted ones +function createOptions( options ) { + var object = {}; + jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { + object[ flag ] = true; + } ); + return object; +} + +/* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + createOptions( options ) : + jQuery.extend( {}, options ); + + var // Flag to know if list is currently firing + firing, + + // Last fire value for non-forgettable lists + memory, + + // Flag to know if list was already fired + fired, + + // Flag to prevent firing + locked, + + // Actual callback list + list = [], + + // Queue of execution data for repeatable lists + queue = [], + + // Index of currently firing callback (modified by add/remove as needed) + firingIndex = -1, + + // Fire callbacks + fire = function() { + + // Enforce single-firing + locked = locked || options.once; + + // Execute callbacks for all pending executions, + // respecting firingIndex overrides and runtime changes + fired = firing = true; + for ( ; queue.length; firingIndex = -1 ) { + memory = queue.shift(); + while ( ++firingIndex < list.length ) { + + // Run callback and check for early termination + if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && + options.stopOnFalse ) { + + // Jump to end and forget the data so .add doesn't re-fire + firingIndex = list.length; + memory = false; + } + } + } + + // Forget the data if we're done with it + if ( !options.memory ) { + memory = false; + } + + firing = false; + + // Clean up if we're done firing for good + if ( locked ) { + + // Keep an empty list if we have data for future add calls + if ( memory ) { + list = []; + + // Otherwise, this object is spent + } else { + list = ""; + } + } + }, + + // Actual Callbacks object + self = { + + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + + // If we have memory from a past run, we should fire after adding + if ( memory && !firing ) { + firingIndex = list.length - 1; + queue.push( memory ); + } + + ( function add( args ) { + jQuery.each( args, function( _, arg ) { + if ( isFunction( arg ) ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && toType( arg ) !== "string" ) { + + // Inspect recursively + add( arg ); + } + } ); + } )( arguments ); + + if ( memory && !firing ) { + fire(); + } + } + return this; + }, + + // Remove a callback from the list + remove: function() { + jQuery.each( arguments, function( _, arg ) { + var index; + while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + + // Handle firing indexes + if ( index <= firingIndex ) { + firingIndex--; + } + } + } ); + return this; + }, + + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? + jQuery.inArray( fn, list ) > -1 : + list.length > 0; + }, + + // Remove all callbacks from the list + empty: function() { + if ( list ) { + list = []; + } + return this; + }, + + // Disable .fire and .add + // Abort any current/pending executions + // Clear all callbacks and values + disable: function() { + locked = queue = []; + list = memory = ""; + return this; + }, + disabled: function() { + return !list; + }, + + // Disable .fire + // Also disable .add unless we have memory (since it would have no effect) + // Abort any pending executions + lock: function() { + locked = queue = []; + if ( !memory && !firing ) { + list = memory = ""; + } + return this; + }, + locked: function() { + return !!locked; + }, + + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( !locked ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + queue.push( args ); + if ( !firing ) { + fire(); + } + } + return this; + }, + + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; + + +function Identity( v ) { + return v; +} +function Thrower( ex ) { + throw ex; +} + +function adoptValue( value, resolve, reject, noValue ) { + var method; + + try { + + // Check for promise aspect first to privilege synchronous behavior + if ( value && isFunction( ( method = value.promise ) ) ) { + method.call( value ).done( resolve ).fail( reject ); + + // Other thenables + } else if ( value && isFunction( ( method = value.then ) ) ) { + method.call( value, resolve, reject ); + + // Other non-thenables + } else { + + // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: + // * false: [ value ].slice( 0 ) => resolve( value ) + // * true: [ value ].slice( 1 ) => resolve() + resolve.apply( undefined, [ value ].slice( noValue ) ); + } + + // For Promises/A+, convert exceptions into rejections + // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in + // Deferred#then to conditionally suppress rejection. + } catch ( value ) { + + // Support: Android 4.0 only + // Strict mode functions invoked without .call/.apply get global-object context + reject.apply( undefined, [ value ] ); + } +} + +jQuery.extend( { + + Deferred: function( func ) { + var tuples = [ + + // action, add listener, callbacks, + // ... .then handlers, argument index, [final state] + [ "notify", "progress", jQuery.Callbacks( "memory" ), + jQuery.Callbacks( "memory" ), 2 ], + [ "resolve", "done", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 0, "resolved" ], + [ "reject", "fail", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 1, "rejected" ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + "catch": function( fn ) { + return promise.then( null, fn ); + }, + + // Keep pipe for back-compat + pipe: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + + return jQuery.Deferred( function( newDefer ) { + jQuery.each( tuples, function( _i, tuple ) { + + // Map tuples (progress, done, fail) to arguments (done, fail, progress) + var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; + + // deferred.progress(function() { bind to newDefer or newDefer.notify }) + // deferred.done(function() { bind to newDefer or newDefer.resolve }) + // deferred.fail(function() { bind to newDefer or newDefer.reject }) + deferred[ tuple[ 1 ] ]( function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && isFunction( returned.promise ) ) { + returned.promise() + .progress( newDefer.notify ) + .done( newDefer.resolve ) + .fail( newDefer.reject ); + } else { + newDefer[ tuple[ 0 ] + "With" ]( + this, + fn ? [ returned ] : arguments + ); + } + } ); + } ); + fns = null; + } ).promise(); + }, + then: function( onFulfilled, onRejected, onProgress ) { + var maxDepth = 0; + function resolve( depth, deferred, handler, special ) { + return function() { + var that = this, + args = arguments, + mightThrow = function() { + var returned, then; + + // Support: Promises/A+ section 2.3.3.3.3 + // https://promisesaplus.com/#point-59 + // Ignore double-resolution attempts + if ( depth < maxDepth ) { + return; + } + + returned = handler.apply( that, args ); + + // Support: Promises/A+ section 2.3.1 + // https://promisesaplus.com/#point-48 + if ( returned === deferred.promise() ) { + throw new TypeError( "Thenable self-resolution" ); + } + + // Support: Promises/A+ sections 2.3.3.1, 3.5 + // https://promisesaplus.com/#point-54 + // https://promisesaplus.com/#point-75 + // Retrieve `then` only once + then = returned && + + // Support: Promises/A+ section 2.3.4 + // https://promisesaplus.com/#point-64 + // Only check objects and functions for thenability + ( typeof returned === "object" || + typeof returned === "function" ) && + returned.then; + + // Handle a returned thenable + if ( isFunction( then ) ) { + + // Special processors (notify) just wait for resolution + if ( special ) { + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ) + ); + + // Normal processors (resolve) also hook into progress + } else { + + // ...and disregard older resolution values + maxDepth++; + + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ), + resolve( maxDepth, deferred, Identity, + deferred.notifyWith ) + ); + } + + // Handle all other returned values + } else { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Identity ) { + that = undefined; + args = [ returned ]; + } + + // Process the value(s) + // Default process is resolve + ( special || deferred.resolveWith )( that, args ); + } + }, + + // Only normal processors (resolve) catch and reject exceptions + process = special ? + mightThrow : + function() { + try { + mightThrow(); + } catch ( e ) { + + if ( jQuery.Deferred.exceptionHook ) { + jQuery.Deferred.exceptionHook( e, + process.stackTrace ); + } + + // Support: Promises/A+ section 2.3.3.3.4.1 + // https://promisesaplus.com/#point-61 + // Ignore post-resolution exceptions + if ( depth + 1 >= maxDepth ) { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Thrower ) { + that = undefined; + args = [ e ]; + } + + deferred.rejectWith( that, args ); + } + } + }; + + // Support: Promises/A+ section 2.3.3.3.1 + // https://promisesaplus.com/#point-57 + // Re-resolve promises immediately to dodge false rejection from + // subsequent errors + if ( depth ) { + process(); + } else { + + // Call an optional hook to record the stack, in case of exception + // since it's otherwise lost when execution goes async + if ( jQuery.Deferred.getStackHook ) { + process.stackTrace = jQuery.Deferred.getStackHook(); + } + window.setTimeout( process ); + } + }; + } + + return jQuery.Deferred( function( newDefer ) { + + // progress_handlers.add( ... ) + tuples[ 0 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onProgress ) ? + onProgress : + Identity, + newDefer.notifyWith + ) + ); + + // fulfilled_handlers.add( ... ) + tuples[ 1 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onFulfilled ) ? + onFulfilled : + Identity + ) + ); + + // rejected_handlers.add( ... ) + tuples[ 2 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onRejected ) ? + onRejected : + Thrower + ) + ); + } ).promise(); + }, + + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 5 ]; + + // promise.progress = list.add + // promise.done = list.add + // promise.fail = list.add + promise[ tuple[ 1 ] ] = list.add; + + // Handle state + if ( stateString ) { + list.add( + function() { + + // state = "resolved" (i.e., fulfilled) + // state = "rejected" + state = stateString; + }, + + // rejected_callbacks.disable + // fulfilled_callbacks.disable + tuples[ 3 - i ][ 2 ].disable, + + // rejected_handlers.disable + // fulfilled_handlers.disable + tuples[ 3 - i ][ 3 ].disable, + + // progress_callbacks.lock + tuples[ 0 ][ 2 ].lock, + + // progress_handlers.lock + tuples[ 0 ][ 3 ].lock + ); + } + + // progress_handlers.fire + // fulfilled_handlers.fire + // rejected_handlers.fire + list.add( tuple[ 3 ].fire ); + + // deferred.notify = function() { deferred.notifyWith(...) } + // deferred.resolve = function() { deferred.resolveWith(...) } + // deferred.reject = function() { deferred.rejectWith(...) } + deferred[ tuple[ 0 ] ] = function() { + deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); + return this; + }; + + // deferred.notifyWith = list.fireWith + // deferred.resolveWith = list.fireWith + // deferred.rejectWith = list.fireWith + deferred[ tuple[ 0 ] + "With" ] = list.fireWith; + } ); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( singleValue ) { + var + + // count of uncompleted subordinates + remaining = arguments.length, + + // count of unprocessed arguments + i = remaining, + + // subordinate fulfillment data + resolveContexts = Array( i ), + resolveValues = slice.call( arguments ), + + // the master Deferred + master = jQuery.Deferred(), + + // subordinate callback factory + updateFunc = function( i ) { + return function( value ) { + resolveContexts[ i ] = this; + resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; + if ( !( --remaining ) ) { + master.resolveWith( resolveContexts, resolveValues ); + } + }; + }; + + // Single- and empty arguments are adopted like Promise.resolve + if ( remaining <= 1 ) { + adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject, + !remaining ); + + // Use .then() to unwrap secondary thenables (cf. gh-3000) + if ( master.state() === "pending" || + isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { + + return master.then(); + } + } + + // Multiple arguments are aggregated like Promise.all array elements + while ( i-- ) { + adoptValue( resolveValues[ i ], updateFunc( i ), master.reject ); + } + + return master.promise(); + } +} ); + + +// These usually indicate a programmer mistake during development, +// warn about them ASAP rather than swallowing them by default. +var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; + +jQuery.Deferred.exceptionHook = function( error, stack ) { + + // Support: IE 8 - 9 only + // Console exists when dev tools are open, which can happen at any time + if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { + window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); + } +}; + + + + +jQuery.readyException = function( error ) { + window.setTimeout( function() { + throw error; + } ); +}; + + + + +// The deferred used on DOM ready +var readyList = jQuery.Deferred(); + +jQuery.fn.ready = function( fn ) { + + readyList + .then( fn ) + + // Wrap jQuery.readyException in a function so that the lookup + // happens at the time of error handling instead of callback + // registration. + .catch( function( error ) { + jQuery.readyException( error ); + } ); + + return this; +}; + +jQuery.extend( { + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + } +} ); + +jQuery.ready.then = readyList.then; + +// The ready event handler and self cleanup method +function completed() { + document.removeEventListener( "DOMContentLoaded", completed ); + window.removeEventListener( "load", completed ); + jQuery.ready(); +} + +// Catch cases where $(document).ready() is called +// after the browser event has already occurred. +// Support: IE <=9 - 10 only +// Older IE sometimes signals "interactive" too soon +if ( document.readyState === "complete" || + ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { + + // Handle it asynchronously to allow scripts the opportunity to delay ready + window.setTimeout( jQuery.ready ); + +} else { + + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed ); +} + + + + +// Multifunctional method to get and set values of a collection +// The value/s can optionally be executed if it's a function +var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + len = elems.length, + bulk = key == null; + + // Sets many values + if ( toType( key ) === "object" ) { + chainable = true; + for ( i in key ) { + access( elems, fn, i, key[ i ], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !isFunction( value ) ) { + raw = true; + } + + if ( bulk ) { + + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; + + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, _key, value ) { + return bulk.call( jQuery( elem ), value ); + }; + } + } + + if ( fn ) { + for ( ; i < len; i++ ) { + fn( + elems[ i ], key, raw ? + value : + value.call( elems[ i ], i, fn( elems[ i ], key ) ) + ); + } + } + } + + if ( chainable ) { + return elems; + } + + // Gets + if ( bulk ) { + return fn.call( elems ); + } + + return len ? fn( elems[ 0 ], key ) : emptyGet; +}; + + +// Matches dashed string for camelizing +var rmsPrefix = /^-ms-/, + rdashAlpha = /-([a-z])/g; + +// Used by camelCase as callback to replace() +function fcamelCase( _all, letter ) { + return letter.toUpperCase(); +} + +// Convert dashed to camelCase; used by the css and data modules +// Support: IE <=9 - 11, Edge 12 - 15 +// Microsoft forgot to hump their vendor prefix (#9572) +function camelCase( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); +} +var acceptData = function( owner ) { + + // Accepts only: + // - Node + // - Node.ELEMENT_NODE + // - Node.DOCUMENT_NODE + // - Object + // - Any + return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); +}; + + + + +function Data() { + this.expando = jQuery.expando + Data.uid++; +} + +Data.uid = 1; + +Data.prototype = { + + cache: function( owner ) { + + // Check if the owner object already has a cache + var value = owner[ this.expando ]; + + // If not, create one + if ( !value ) { + value = {}; + + // We can accept data for non-element nodes in modern browsers, + // but we should not, see #8335. + // Always return an empty object. + if ( acceptData( owner ) ) { + + // If it is a node unlikely to be stringify-ed or looped over + // use plain assignment + if ( owner.nodeType ) { + owner[ this.expando ] = value; + + // Otherwise secure it in a non-enumerable property + // configurable must be true to allow the property to be + // deleted when data is removed + } else { + Object.defineProperty( owner, this.expando, { + value: value, + configurable: true + } ); + } + } + } + + return value; + }, + set: function( owner, data, value ) { + var prop, + cache = this.cache( owner ); + + // Handle: [ owner, key, value ] args + // Always use camelCase key (gh-2257) + if ( typeof data === "string" ) { + cache[ camelCase( data ) ] = value; + + // Handle: [ owner, { properties } ] args + } else { + + // Copy the properties one-by-one to the cache object + for ( prop in data ) { + cache[ camelCase( prop ) ] = data[ prop ]; + } + } + return cache; + }, + get: function( owner, key ) { + return key === undefined ? + this.cache( owner ) : + + // Always use camelCase key (gh-2257) + owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; + }, + access: function( owner, key, value ) { + + // In cases where either: + // + // 1. No key was specified + // 2. A string key was specified, but no value provided + // + // Take the "read" path and allow the get method to determine + // which value to return, respectively either: + // + // 1. The entire cache object + // 2. The data stored at the key + // + if ( key === undefined || + ( ( key && typeof key === "string" ) && value === undefined ) ) { + + return this.get( owner, key ); + } + + // When the key is not a string, or both a key and value + // are specified, set or extend (existing objects) with either: + // + // 1. An object of properties + // 2. A key and value + // + this.set( owner, key, value ); + + // Since the "set" path can have two possible entry points + // return the expected data based on which path was taken[*] + return value !== undefined ? value : key; + }, + remove: function( owner, key ) { + var i, + cache = owner[ this.expando ]; + + if ( cache === undefined ) { + return; + } + + if ( key !== undefined ) { + + // Support array or space separated string of keys + if ( Array.isArray( key ) ) { + + // If key is an array of keys... + // We always set camelCase keys, so remove that. + key = key.map( camelCase ); + } else { + key = camelCase( key ); + + // If a key with the spaces exists, use it. + // Otherwise, create an array by matching non-whitespace + key = key in cache ? + [ key ] : + ( key.match( rnothtmlwhite ) || [] ); + } + + i = key.length; + + while ( i-- ) { + delete cache[ key[ i ] ]; + } + } + + // Remove the expando if there's no more data + if ( key === undefined || jQuery.isEmptyObject( cache ) ) { + + // Support: Chrome <=35 - 45 + // Webkit & Blink performance suffers when deleting properties + // from DOM nodes, so set to undefined instead + // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) + if ( owner.nodeType ) { + owner[ this.expando ] = undefined; + } else { + delete owner[ this.expando ]; + } + } + }, + hasData: function( owner ) { + var cache = owner[ this.expando ]; + return cache !== undefined && !jQuery.isEmptyObject( cache ); + } +}; +var dataPriv = new Data(); + +var dataUser = new Data(); + + + +// Implementation Summary +// +// 1. Enforce API surface and semantic compatibility with 1.9.x branch +// 2. Improve the module's maintainability by reducing the storage +// paths to a single mechanism. +// 3. Use the same single mechanism to support "private" and "user" data. +// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) +// 5. Avoid exposing implementation details on user objects (eg. expando properties) +// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 + +var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + rmultiDash = /[A-Z]/g; + +function getData( data ) { + if ( data === "true" ) { + return true; + } + + if ( data === "false" ) { + return false; + } + + if ( data === "null" ) { + return null; + } + + // Only convert to a number if it doesn't change the string + if ( data === +data + "" ) { + return +data; + } + + if ( rbrace.test( data ) ) { + return JSON.parse( data ); + } + + return data; +} + +function dataAttr( elem, key, data ) { + var name; + + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = getData( data ); + } catch ( e ) {} + + // Make sure we set the data so it isn't changed later + dataUser.set( elem, key, data ); + } else { + data = undefined; + } + } + return data; +} + +jQuery.extend( { + hasData: function( elem ) { + return dataUser.hasData( elem ) || dataPriv.hasData( elem ); + }, + + data: function( elem, name, data ) { + return dataUser.access( elem, name, data ); + }, + + removeData: function( elem, name ) { + dataUser.remove( elem, name ); + }, + + // TODO: Now that all calls to _data and _removeData have been replaced + // with direct calls to dataPriv methods, these can be deprecated. + _data: function( elem, name, data ) { + return dataPriv.access( elem, name, data ); + }, + + _removeData: function( elem, name ) { + dataPriv.remove( elem, name ); + } +} ); + +jQuery.fn.extend( { + data: function( key, value ) { + var i, name, data, + elem = this[ 0 ], + attrs = elem && elem.attributes; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = dataUser.get( elem ); + + if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { + i = attrs.length; + while ( i-- ) { + + // Support: IE 11 only + // The attrs elements can be null (#14894) + if ( attrs[ i ] ) { + name = attrs[ i ].name; + if ( name.indexOf( "data-" ) === 0 ) { + name = camelCase( name.slice( 5 ) ); + dataAttr( elem, name, data[ name ] ); + } + } + } + dataPriv.set( elem, "hasDataAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each( function() { + dataUser.set( this, key ); + } ); + } + + return access( this, function( value ) { + var data; + + // The calling jQuery object (element matches) is not empty + // (and therefore has an element appears at this[ 0 ]) and the + // `value` parameter was not undefined. An empty jQuery object + // will result in `undefined` for elem = this[ 0 ] which will + // throw an exception if an attempt to read a data cache is made. + if ( elem && value === undefined ) { + + // Attempt to get data from the cache + // The key will always be camelCased in Data + data = dataUser.get( elem, key ); + if ( data !== undefined ) { + return data; + } + + // Attempt to "discover" the data in + // HTML5 custom data-* attrs + data = dataAttr( elem, key ); + if ( data !== undefined ) { + return data; + } + + // We tried really hard, but the data doesn't exist. + return; + } + + // Set the data... + this.each( function() { + + // We always store the camelCased key + dataUser.set( this, key, value ); + } ); + }, null, value, arguments.length > 1, null, true ); + }, + + removeData: function( key ) { + return this.each( function() { + dataUser.remove( this, key ); + } ); + } +} ); + + +jQuery.extend( { + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = dataPriv.get( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || Array.isArray( data ) ) { + queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // Clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // Not public - generate a queueHooks object, or return the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { + empty: jQuery.Callbacks( "once memory" ).add( function() { + dataPriv.remove( elem, [ type + "queue", key ] ); + } ) + } ); + } +} ); + +jQuery.fn.extend( { + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[ 0 ], type ); + } + + return data === undefined ? + this : + this.each( function() { + var queue = jQuery.queue( this, type, data ); + + // Ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + } ); + }, + dequeue: function( type ) { + return this.each( function() { + jQuery.dequeue( this, type ); + } ); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while ( i-- ) { + tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } +} ); +var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; + +var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); + + +var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; + +var documentElement = document.documentElement; + + + + var isAttached = function( elem ) { + return jQuery.contains( elem.ownerDocument, elem ); + }, + composed = { composed: true }; + + // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only + // Check attachment across shadow DOM boundaries when possible (gh-3504) + // Support: iOS 10.0-10.2 only + // Early iOS 10 versions support `attachShadow` but not `getRootNode`, + // leading to errors. We need to check for `getRootNode`. + if ( documentElement.getRootNode ) { + isAttached = function( elem ) { + return jQuery.contains( elem.ownerDocument, elem ) || + elem.getRootNode( composed ) === elem.ownerDocument; + }; + } +var isHiddenWithinTree = function( elem, el ) { + + // isHiddenWithinTree might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + + // Inline style trumps all + return elem.style.display === "none" || + elem.style.display === "" && + + // Otherwise, check computed style + // Support: Firefox <=43 - 45 + // Disconnected elements can have computed display: none, so first confirm that elem is + // in the document. + isAttached( elem ) && + + jQuery.css( elem, "display" ) === "none"; + }; + + + +function adjustCSS( elem, prop, valueParts, tween ) { + var adjusted, scale, + maxIterations = 20, + currentValue = tween ? + function() { + return tween.cur(); + } : + function() { + return jQuery.css( elem, prop, "" ); + }, + initial = currentValue(), + unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), + + // Starting value computation is required for potential unit mismatches + initialInUnit = elem.nodeType && + ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && + rcssNum.exec( jQuery.css( elem, prop ) ); + + if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { + + // Support: Firefox <=54 + // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) + initial = initial / 2; + + // Trust units reported by jQuery.css + unit = unit || initialInUnit[ 3 ]; + + // Iteratively approximate from a nonzero starting point + initialInUnit = +initial || 1; + + while ( maxIterations-- ) { + + // Evaluate and update our best guess (doubling guesses that zero out). + // Finish if the scale equals or crosses 1 (making the old*new product non-positive). + jQuery.style( elem, prop, initialInUnit + unit ); + if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { + maxIterations = 0; + } + initialInUnit = initialInUnit / scale; + + } + + initialInUnit = initialInUnit * 2; + jQuery.style( elem, prop, initialInUnit + unit ); + + // Make sure we update the tween properties later on + valueParts = valueParts || []; + } + + if ( valueParts ) { + initialInUnit = +initialInUnit || +initial || 0; + + // Apply relative offset (+=/-=) if specified + adjusted = valueParts[ 1 ] ? + initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : + +valueParts[ 2 ]; + if ( tween ) { + tween.unit = unit; + tween.start = initialInUnit; + tween.end = adjusted; + } + } + return adjusted; +} + + +var defaultDisplayMap = {}; + +function getDefaultDisplay( elem ) { + var temp, + doc = elem.ownerDocument, + nodeName = elem.nodeName, + display = defaultDisplayMap[ nodeName ]; + + if ( display ) { + return display; + } + + temp = doc.body.appendChild( doc.createElement( nodeName ) ); + display = jQuery.css( temp, "display" ); + + temp.parentNode.removeChild( temp ); + + if ( display === "none" ) { + display = "block"; + } + defaultDisplayMap[ nodeName ] = display; + + return display; +} + +function showHide( elements, show ) { + var display, elem, + values = [], + index = 0, + length = elements.length; + + // Determine new display value for elements that need to change + for ( ; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + + display = elem.style.display; + if ( show ) { + + // Since we force visibility upon cascade-hidden elements, an immediate (and slow) + // check is required in this first loop unless we have a nonempty display value (either + // inline or about-to-be-restored) + if ( display === "none" ) { + values[ index ] = dataPriv.get( elem, "display" ) || null; + if ( !values[ index ] ) { + elem.style.display = ""; + } + } + if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { + values[ index ] = getDefaultDisplay( elem ); + } + } else { + if ( display !== "none" ) { + values[ index ] = "none"; + + // Remember what we're overwriting + dataPriv.set( elem, "display", display ); + } + } + } + + // Set the display of the elements in a second loop to avoid constant reflow + for ( index = 0; index < length; index++ ) { + if ( values[ index ] != null ) { + elements[ index ].style.display = values[ index ]; + } + } + + return elements; +} + +jQuery.fn.extend( { + show: function() { + return showHide( this, true ); + }, + hide: function() { + return showHide( this ); + }, + toggle: function( state ) { + if ( typeof state === "boolean" ) { + return state ? this.show() : this.hide(); + } + + return this.each( function() { + if ( isHiddenWithinTree( this ) ) { + jQuery( this ).show(); + } else { + jQuery( this ).hide(); + } + } ); + } +} ); +var rcheckableType = ( /^(?:checkbox|radio)$/i ); + +var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i ); + +var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); + + + +( function() { + var fragment = document.createDocumentFragment(), + div = fragment.appendChild( document.createElement( "div" ) ), + input = document.createElement( "input" ); + + // Support: Android 4.0 - 4.3 only + // Check state lost if the name is set (#11217) + // Support: Windows Web Apps (WWA) + // `name` and `type` must use .setAttribute for WWA (#14901) + input.setAttribute( "type", "radio" ); + input.setAttribute( "checked", "checked" ); + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + + // Support: Android <=4.1 only + // Older WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE <=11 only + // Make sure textarea (and checkbox) defaultValue is properly cloned + div.innerHTML = ""; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; + + // Support: IE <=9 only + // IE <=9 replaces "; + support.option = !!div.lastChild; +} )(); + + +// We have to close these tags to support XHTML (#13200) +var wrapMap = { + + // XHTML parsers do not magically insert elements in the + // same way that tag soup parsers do. So we cannot shorten + // this by omitting or other required elements. + thead: [ 1, "", "
" ], + col: [ 2, "", "
" ], + tr: [ 2, "", "
" ], + td: [ 3, "", "
" ], + + _default: [ 0, "", "" ] +}; + +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +// Support: IE <=9 only +if ( !support.option ) { + wrapMap.optgroup = wrapMap.option = [ 1, "" ]; +} + + +function getAll( context, tag ) { + + // Support: IE <=9 - 11 only + // Use typeof to avoid zero-argument method invocation on host objects (#15151) + var ret; + + if ( typeof context.getElementsByTagName !== "undefined" ) { + ret = context.getElementsByTagName( tag || "*" ); + + } else if ( typeof context.querySelectorAll !== "undefined" ) { + ret = context.querySelectorAll( tag || "*" ); + + } else { + ret = []; + } + + if ( tag === undefined || tag && nodeName( context, tag ) ) { + return jQuery.merge( [ context ], ret ); + } + + return ret; +} + + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + dataPriv.set( + elems[ i ], + "globalEval", + !refElements || dataPriv.get( refElements[ i ], "globalEval" ) + ); + } +} + + +var rhtml = /<|&#?\w+;/; + +function buildFragment( elems, context, scripts, selection, ignored ) { + var elem, tmp, tag, wrap, attached, j, + fragment = context.createDocumentFragment(), + nodes = [], + i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( toType( elem ) === "object" ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); + + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); + + // Convert html into DOM nodes + } else { + tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); + + // Deserialize a standard representation + tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; + + // Descend through wrappers to the right content + j = wrap[ 0 ]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, tmp.childNodes ); + + // Remember the top-level container + tmp = fragment.firstChild; + + // Ensure the created nodes are orphaned (#12392) + tmp.textContent = ""; + } + } + } + + // Remove wrapper from fragment + fragment.textContent = ""; + + i = 0; + while ( ( elem = nodes[ i++ ] ) ) { + + // Skip elements already in the context collection (trac-4087) + if ( selection && jQuery.inArray( elem, selection ) > -1 ) { + if ( ignored ) { + ignored.push( elem ); + } + continue; + } + + attached = isAttached( elem ); + + // Append to fragment + tmp = getAll( fragment.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( attached ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( ( elem = tmp[ j++ ] ) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + return fragment; +} + + +var + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, + rtypenamespace = /^([^.]*)(?:\.(.+)|)/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +// Support: IE <=9 - 11+ +// focus() and blur() are asynchronous, except when they are no-op. +// So expect focus to be synchronous when the element is already active, +// and blur to be synchronous when the element is not already active. +// (focus and blur are always synchronous in other supported browsers, +// this just defines when we can count on it). +function expectSync( elem, type ) { + return ( elem === safeActiveElement() ) === ( type === "focus" ); +} + +// Support: IE <=9 only +// Accessing document.activeElement can throw unexpectedly +// https://bugs.jquery.com/ticket/13393 +function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } +} + +function on( elem, types, selector, data, fn, one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + on( elem, type, selector, data, types[ type ], one ); + } + return elem; + } + + if ( data == null && fn == null ) { + + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return elem; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return elem.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + } ); +} + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + + var handleObjIn, eventHandle, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.get( elem ); + + // Only attach events to objects that accept data + if ( !acceptData( elem ) ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Ensure that invalid selectors throw exceptions at attach time + // Evaluate against documentElement in case elem is a non-element node (e.g., document) + if ( selector ) { + jQuery.find.matchesSelector( documentElement, selector ); + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !( events = elemData.events ) ) { + events = elemData.events = Object.create( null ); + } + if ( !( eventHandle = elemData.handle ) ) { + eventHandle = elemData.handle = function( e ) { + + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? + jQuery.event.dispatch.apply( elem, arguments ) : undefined; + }; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // There *must* be a type, no attaching namespace-only handlers + if ( !type ) { + continue; + } + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend( { + type: type, + origType: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join( "." ) + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !( handlers = events[ type ] ) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener if the special events handler returns false + if ( !special.setup || + special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var j, origCount, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); + + if ( !elemData || !( events = elemData.events ) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[ 2 ] && + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || + selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || + special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove data and the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + dataPriv.remove( elem, "handle events" ); + } + }, + + dispatch: function( nativeEvent ) { + + var i, j, ret, matched, handleObj, handlerQueue, + args = new Array( arguments.length ), + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( nativeEvent ), + + handlers = ( + dataPriv.get( this, "events" ) || Object.create( null ) + )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[ 0 ] = event; + + for ( i = 1; i < arguments.length; i++ ) { + args[ i ] = arguments[ i ]; + } + + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( ( handleObj = matched.handlers[ j++ ] ) && + !event.isImmediatePropagationStopped() ) { + + // If the event is namespaced, then each handler is only invoked if it is + // specially universal or its namespaces are a superset of the event's. + if ( !event.rnamespace || handleObj.namespace === false || + event.rnamespace.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || + handleObj.handler ).apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( ( event.result = ret ) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var i, handleObj, sel, matchedHandlers, matchedSelectors, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Find delegate handlers + if ( delegateCount && + + // Support: IE <=9 + // Black-hole SVG instance trees (trac-13180) + cur.nodeType && + + // Support: Firefox <=42 + // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) + // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click + // Support: IE 11 only + // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) + !( event.type === "click" && event.button >= 1 ) ) { + + for ( ; cur !== this; cur = cur.parentNode || this ) { + + // Don't check non-elements (#13208) + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { + matchedHandlers = []; + matchedSelectors = {}; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matchedSelectors[ sel ] === undefined ) { + matchedSelectors[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) > -1 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matchedSelectors[ sel ] ) { + matchedHandlers.push( handleObj ); + } + } + if ( matchedHandlers.length ) { + handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); + } + } + } + } + + // Add the remaining (directly-bound) handlers + cur = this; + if ( delegateCount < handlers.length ) { + handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); + } + + return handlerQueue; + }, + + addProp: function( name, hook ) { + Object.defineProperty( jQuery.Event.prototype, name, { + enumerable: true, + configurable: true, + + get: isFunction( hook ) ? + function() { + if ( this.originalEvent ) { + return hook( this.originalEvent ); + } + } : + function() { + if ( this.originalEvent ) { + return this.originalEvent[ name ]; + } + }, + + set: function( value ) { + Object.defineProperty( this, name, { + enumerable: true, + configurable: true, + writable: true, + value: value + } ); + } + } ); + }, + + fix: function( originalEvent ) { + return originalEvent[ jQuery.expando ] ? + originalEvent : + new jQuery.Event( originalEvent ); + }, + + special: { + load: { + + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + click: { + + // Utilize native event to ensure correct state for checkable inputs + setup: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Claim the first handler + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + // dataPriv.set( el, "click", ... ) + leverageNative( el, "click", returnTrue ); + } + + // Return false to allow normal processing in the caller + return false; + }, + trigger: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Force setup before triggering a click + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + leverageNative( el, "click" ); + } + + // Return non-false to allow normal event-path propagation + return true; + }, + + // For cross-browser consistency, suppress native .click() on links + // Also prevent it if we're currently inside a leveraged native-event stack + _default: function( event ) { + var target = event.target; + return rcheckableType.test( target.type ) && + target.click && nodeName( target, "input" ) && + dataPriv.get( target, "click" ) || + nodeName( target, "a" ); + } + }, + + beforeunload: { + postDispatch: function( event ) { + + // Support: Firefox 20+ + // Firefox doesn't alert if the returnValue field is not set. + if ( event.result !== undefined && event.originalEvent ) { + event.originalEvent.returnValue = event.result; + } + } + } + } +}; + +// Ensure the presence of an event listener that handles manually-triggered +// synthetic events by interrupting progress until reinvoked in response to +// *native* events that it fires directly, ensuring that state changes have +// already occurred before other listeners are invoked. +function leverageNative( el, type, expectSync ) { + + // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add + if ( !expectSync ) { + if ( dataPriv.get( el, type ) === undefined ) { + jQuery.event.add( el, type, returnTrue ); + } + return; + } + + // Register the controller as a special universal handler for all event namespaces + dataPriv.set( el, type, false ); + jQuery.event.add( el, type, { + namespace: false, + handler: function( event ) { + var notAsync, result, + saved = dataPriv.get( this, type ); + + if ( ( event.isTrigger & 1 ) && this[ type ] ) { + + // Interrupt processing of the outer synthetic .trigger()ed event + // Saved data should be false in such cases, but might be a leftover capture object + // from an async native handler (gh-4350) + if ( !saved.length ) { + + // Store arguments for use when handling the inner native event + // There will always be at least one argument (an event object), so this array + // will not be confused with a leftover capture object. + saved = slice.call( arguments ); + dataPriv.set( this, type, saved ); + + // Trigger the native event and capture its result + // Support: IE <=9 - 11+ + // focus() and blur() are asynchronous + notAsync = expectSync( this, type ); + this[ type ](); + result = dataPriv.get( this, type ); + if ( saved !== result || notAsync ) { + dataPriv.set( this, type, false ); + } else { + result = {}; + } + if ( saved !== result ) { + + // Cancel the outer synthetic event + event.stopImmediatePropagation(); + event.preventDefault(); + return result.value; + } + + // If this is an inner synthetic event for an event with a bubbling surrogate + // (focus or blur), assume that the surrogate already propagated from triggering the + // native event and prevent that from happening again here. + // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the + // bubbling surrogate propagates *after* the non-bubbling base), but that seems + // less bad than duplication. + } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) { + event.stopPropagation(); + } + + // If this is a native event triggered above, everything is now in order + // Fire an inner synthetic event with the original arguments + } else if ( saved.length ) { + + // ...and capture the result + dataPriv.set( this, type, { + value: jQuery.event.trigger( + + // Support: IE <=9 - 11+ + // Extend with the prototype to reset the above stopImmediatePropagation() + jQuery.extend( saved[ 0 ], jQuery.Event.prototype ), + saved.slice( 1 ), + this + ) + } ); + + // Abort handling of the native event + event.stopImmediatePropagation(); + } + } + } ); +} + +jQuery.removeEvent = function( elem, type, handle ) { + + // This "if" is needed for plain objects + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle ); + } +}; + +jQuery.Event = function( src, props ) { + + // Allow instantiation without the 'new' keyword + if ( !( this instanceof jQuery.Event ) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = src.defaultPrevented || + src.defaultPrevented === undefined && + + // Support: Android <=2.3 only + src.returnValue === false ? + returnTrue : + returnFalse; + + // Create target properties + // Support: Safari <=6 - 7 only + // Target should not be a text node (#504, #13143) + this.target = ( src.target && src.target.nodeType === 3 ) ? + src.target.parentNode : + src.target; + + this.currentTarget = src.currentTarget; + this.relatedTarget = src.relatedTarget; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || Date.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + constructor: jQuery.Event, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + isSimulated: false, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + + if ( e && !this.isSimulated ) { + e.preventDefault(); + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopPropagation(); + } + }, + stopImmediatePropagation: function() { + var e = this.originalEvent; + + this.isImmediatePropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopImmediatePropagation(); + } + + this.stopPropagation(); + } +}; + +// Includes all common event props including KeyEvent and MouseEvent specific props +jQuery.each( { + altKey: true, + bubbles: true, + cancelable: true, + changedTouches: true, + ctrlKey: true, + detail: true, + eventPhase: true, + metaKey: true, + pageX: true, + pageY: true, + shiftKey: true, + view: true, + "char": true, + code: true, + charCode: true, + key: true, + keyCode: true, + button: true, + buttons: true, + clientX: true, + clientY: true, + offsetX: true, + offsetY: true, + pointerId: true, + pointerType: true, + screenX: true, + screenY: true, + targetTouches: true, + toElement: true, + touches: true, + + which: function( event ) { + var button = event.button; + + // Add which for key events + if ( event.which == null && rkeyEvent.test( event.type ) ) { + return event.charCode != null ? event.charCode : event.keyCode; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) { + if ( button & 1 ) { + return 1; + } + + if ( button & 2 ) { + return 3; + } + + if ( button & 4 ) { + return 2; + } + + return 0; + } + + return event.which; + } +}, jQuery.event.addProp ); + +jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { + jQuery.event.special[ type ] = { + + // Utilize native event if possible so blur/focus sequence is correct + setup: function() { + + // Claim the first handler + // dataPriv.set( this, "focus", ... ) + // dataPriv.set( this, "blur", ... ) + leverageNative( this, type, expectSync ); + + // Return false to allow normal processing in the caller + return false; + }, + trigger: function() { + + // Force setup before trigger + leverageNative( this, type ); + + // Return non-false to allow normal event-path propagation + return true; + }, + + delegateType: delegateType + }; +} ); + +// Create mouseenter/leave events using mouseover/out and event-time checks +// so that event delegation works in jQuery. +// Do the same for pointerenter/pointerleave and pointerover/pointerout +// +// Support: Safari 7 only +// Safari sends mouseenter too often; see: +// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 +// for the description of the bug (it existed in older Chrome versions as well). +jQuery.each( { + mouseenter: "mouseover", + mouseleave: "mouseout", + pointerenter: "pointerover", + pointerleave: "pointerout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mouseenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +} ); + +jQuery.fn.extend( { + + on: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn ); + }, + one: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? + handleObj.origType + "." + handleObj.namespace : + handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each( function() { + jQuery.event.remove( this, types, fn, selector ); + } ); + } +} ); + + +var + + // Support: IE <=10 - 11, Edge 12 - 13 only + // In IE/Edge using regex groups here causes severe slowdowns. + // See https://connect.microsoft.com/IE/feedback/details/1736512/ + rnoInnerhtml = /\s*$/g; + +// Prefer a tbody over its parent table for containing new rows +function manipulationTarget( elem, content ) { + if ( nodeName( elem, "table" ) && + nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { + + return jQuery( elem ).children( "tbody" )[ 0 ] || elem; + } + + return elem; +} + +// Replace/restore the type attribute of script elements for safe DOM manipulation +function disableScript( elem ) { + elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; + return elem; +} +function restoreScript( elem ) { + if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { + elem.type = elem.type.slice( 5 ); + } else { + elem.removeAttribute( "type" ); + } + + return elem; +} + +function cloneCopyEvent( src, dest ) { + var i, l, type, pdataOld, udataOld, udataCur, events; + + if ( dest.nodeType !== 1 ) { + return; + } + + // 1. Copy private data: events, handlers, etc. + if ( dataPriv.hasData( src ) ) { + pdataOld = dataPriv.get( src ); + events = pdataOld.events; + + if ( events ) { + dataPriv.remove( dest, "handle events" ); + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + } + + // 2. Copy user data + if ( dataUser.hasData( src ) ) { + udataOld = dataUser.access( src ); + udataCur = jQuery.extend( {}, udataOld ); + + dataUser.set( dest, udataCur ); + } +} + +// Fix IE bugs, see support tests +function fixInput( src, dest ) { + var nodeName = dest.nodeName.toLowerCase(); + + // Fails to persist the checked state of a cloned checkbox or radio button. + if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + dest.checked = src.checked; + + // Fails to return the selected option to the default selected state when cloning options + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } +} + +function domManip( collection, args, callback, ignored ) { + + // Flatten any nested arrays + args = flat( args ); + + var fragment, first, scripts, hasScripts, node, doc, + i = 0, + l = collection.length, + iNoClone = l - 1, + value = args[ 0 ], + valueIsFunction = isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( valueIsFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return collection.each( function( index ) { + var self = collection.eq( index ); + if ( valueIsFunction ) { + args[ 0 ] = value.call( this, index, self.html() ); + } + domManip( self, args, callback, ignored ); + } ); + } + + if ( l ) { + fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + // Require either new content or an interest in ignored elements to invoke the callback + if ( first || ignored ) { + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item + // instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( collection[ i ], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !dataPriv.access( node, "globalEval" ) && + jQuery.contains( doc, node ) ) { + + if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { + + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl && !node.noModule ) { + jQuery._evalUrl( node.src, { + nonce: node.nonce || node.getAttribute( "nonce" ) + }, doc ); + } + } else { + DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); + } + } + } + } + } + } + + return collection; +} + +function remove( elem, selector, keepData ) { + var node, + nodes = selector ? jQuery.filter( selector, elem ) : elem, + i = 0; + + for ( ; ( node = nodes[ i ] ) != null; i++ ) { + if ( !keepData && node.nodeType === 1 ) { + jQuery.cleanData( getAll( node ) ); + } + + if ( node.parentNode ) { + if ( keepData && isAttached( node ) ) { + setGlobalEval( getAll( node, "script" ) ); + } + node.parentNode.removeChild( node ); + } + } + + return elem; +} + +jQuery.extend( { + htmlPrefilter: function( html ) { + return html; + }, + + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var i, l, srcElements, destElements, + clone = elem.cloneNode( true ), + inPage = isAttached( elem ); + + // Fix IE cloning issues + if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && + !jQuery.isXMLDoc( elem ) ) { + + // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + fixInput( srcElements[ i ], destElements[ i ] ); + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + cloneCopyEvent( srcElements[ i ], destElements[ i ] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + // Return the cloned set + return clone; + }, + + cleanData: function( elems ) { + var data, elem, type, + special = jQuery.event.special, + i = 0; + + for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { + if ( acceptData( elem ) ) { + if ( ( data = elem[ dataPriv.expando ] ) ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataPriv.expando ] = undefined; + } + if ( elem[ dataUser.expando ] ) { + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataUser.expando ] = undefined; + } + } + } + } +} ); + +jQuery.fn.extend( { + detach: function( selector ) { + return remove( this, selector, true ); + }, + + remove: function( selector ) { + return remove( this, selector ); + }, + + text: function( value ) { + return access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().each( function() { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + this.textContent = value; + } + } ); + }, null, value, arguments.length ); + }, + + append: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + } ); + }, + + prepend: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.insertBefore( elem, target.firstChild ); + } + } ); + }, + + before: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + } ); + }, + + after: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + } ); + }, + + empty: function() { + var elem, + i = 0; + + for ( ; ( elem = this[ i ] ) != null; i++ ) { + if ( elem.nodeType === 1 ) { + + // Prevent memory leaks + jQuery.cleanData( getAll( elem, false ) ); + + // Remove any remaining nodes + elem.textContent = ""; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map( function() { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + } ); + }, + + html: function( value ) { + return access( this, function( value ) { + var elem = this[ 0 ] || {}, + i = 0, + l = this.length; + + if ( value === undefined && elem.nodeType === 1 ) { + return elem.innerHTML; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { + + value = jQuery.htmlPrefilter( value ); + + try { + for ( ; i < l; i++ ) { + elem = this[ i ] || {}; + + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch ( e ) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function() { + var ignored = []; + + // Make the changes, replacing each non-ignored context element with the new content + return domManip( this, arguments, function( elem ) { + var parent = this.parentNode; + + if ( jQuery.inArray( this, ignored ) < 0 ) { + jQuery.cleanData( getAll( this ) ); + if ( parent ) { + parent.replaceChild( elem, this ); + } + } + + // Force callback invocation + }, ignored ); + } +} ); + +jQuery.each( { + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1, + i = 0; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone( true ); + jQuery( insert[ i ] )[ original ]( elems ); + + // Support: Android <=4.0 only, PhantomJS 1 only + // .get() because push.apply(_, arraylike) throws on ancient WebKit + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +} ); +var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); + +var getStyles = function( elem ) { + + // Support: IE <=11 only, Firefox <=30 (#15098, #14150) + // IE throws on elements created in popups + // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" + var view = elem.ownerDocument.defaultView; + + if ( !view || !view.opener ) { + view = window; + } + + return view.getComputedStyle( elem ); + }; + +var swap = function( elem, options, callback ) { + var ret, name, + old = {}; + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.call( elem ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; +}; + + +var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); + + + +( function() { + + // Executing both pixelPosition & boxSizingReliable tests require only one layout + // so they're executed at the same time to save the second computation. + function computeStyleTests() { + + // This is a singleton, we need to execute it only once + if ( !div ) { + return; + } + + container.style.cssText = "position:absolute;left:-11111px;width:60px;" + + "margin-top:1px;padding:0;border:0"; + div.style.cssText = + "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + + "margin:auto;border:1px;padding:1px;" + + "width:60%;top:1%"; + documentElement.appendChild( container ).appendChild( div ); + + var divStyle = window.getComputedStyle( div ); + pixelPositionVal = divStyle.top !== "1%"; + + // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 + reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; + + // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 + // Some styles come back with percentage values, even though they shouldn't + div.style.right = "60%"; + pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; + + // Support: IE 9 - 11 only + // Detect misreporting of content dimensions for box-sizing:border-box elements + boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; + + // Support: IE 9 only + // Detect overflow:scroll screwiness (gh-3699) + // Support: Chrome <=64 + // Don't get tricked when zoom affects offsetWidth (gh-4029) + div.style.position = "absolute"; + scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12; + + documentElement.removeChild( container ); + + // Nullify the div so it wouldn't be stored in the memory and + // it will also be a sign that checks already performed + div = null; + } + + function roundPixelMeasures( measure ) { + return Math.round( parseFloat( measure ) ); + } + + var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, + reliableTrDimensionsVal, reliableMarginLeftVal, + container = document.createElement( "div" ), + div = document.createElement( "div" ); + + // Finish early in limited (non-browser) environments + if ( !div.style ) { + return; + } + + // Support: IE <=9 - 11 only + // Style of cloned element affects source element cloned (#8908) + div.style.backgroundClip = "content-box"; + div.cloneNode( true ).style.backgroundClip = ""; + support.clearCloneStyle = div.style.backgroundClip === "content-box"; + + jQuery.extend( support, { + boxSizingReliable: function() { + computeStyleTests(); + return boxSizingReliableVal; + }, + pixelBoxStyles: function() { + computeStyleTests(); + return pixelBoxStylesVal; + }, + pixelPosition: function() { + computeStyleTests(); + return pixelPositionVal; + }, + reliableMarginLeft: function() { + computeStyleTests(); + return reliableMarginLeftVal; + }, + scrollboxSize: function() { + computeStyleTests(); + return scrollboxSizeVal; + }, + + // Support: IE 9 - 11+, Edge 15 - 18+ + // IE/Edge misreport `getComputedStyle` of table rows with width/height + // set in CSS while `offset*` properties report correct values. + // Behavior in IE 9 is more subtle than in newer versions & it passes + // some versions of this test; make sure not to make it pass there! + reliableTrDimensions: function() { + var table, tr, trChild, trStyle; + if ( reliableTrDimensionsVal == null ) { + table = document.createElement( "table" ); + tr = document.createElement( "tr" ); + trChild = document.createElement( "div" ); + + table.style.cssText = "position:absolute;left:-11111px"; + tr.style.height = "1px"; + trChild.style.height = "9px"; + + documentElement + .appendChild( table ) + .appendChild( tr ) + .appendChild( trChild ); + + trStyle = window.getComputedStyle( tr ); + reliableTrDimensionsVal = parseInt( trStyle.height ) > 3; + + documentElement.removeChild( table ); + } + return reliableTrDimensionsVal; + } + } ); +} )(); + + +function curCSS( elem, name, computed ) { + var width, minWidth, maxWidth, ret, + + // Support: Firefox 51+ + // Retrieving style before computed somehow + // fixes an issue with getting wrong values + // on detached elements + style = elem.style; + + computed = computed || getStyles( elem ); + + // getPropertyValue is needed for: + // .css('filter') (IE 9 only, #12537) + // .css('--customProperty) (#3144) + if ( computed ) { + ret = computed.getPropertyValue( name ) || computed[ name ]; + + if ( ret === "" && !isAttached( elem ) ) { + ret = jQuery.style( elem, name ); + } + + // A tribute to the "awesome hack by Dean Edwards" + // Android Browser returns percentage for some values, + // but width seems to be reliably pixels. + // This is against the CSSOM draft spec: + // https://drafts.csswg.org/cssom/#resolved-values + if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { + + // Remember the original values + width = style.width; + minWidth = style.minWidth; + maxWidth = style.maxWidth; + + // Put in the new values to get a computed value out + style.minWidth = style.maxWidth = style.width = ret; + ret = computed.width; + + // Revert the changed values + style.width = width; + style.minWidth = minWidth; + style.maxWidth = maxWidth; + } + } + + return ret !== undefined ? + + // Support: IE <=9 - 11 only + // IE returns zIndex value as an integer. + ret + "" : + ret; +} + + +function addGetHookIf( conditionFn, hookFn ) { + + // Define the hook, we'll check on the first run if it's really needed. + return { + get: function() { + if ( conditionFn() ) { + + // Hook not needed (or it's not possible to use it due + // to missing dependency), remove it. + delete this.get; + return; + } + + // Hook needed; redefine it so that the support test is not executed again. + return ( this.get = hookFn ).apply( this, arguments ); + } + }; +} + + +var cssPrefixes = [ "Webkit", "Moz", "ms" ], + emptyStyle = document.createElement( "div" ).style, + vendorProps = {}; + +// Return a vendor-prefixed property or undefined +function vendorPropName( name ) { + + // Check for vendor prefixed names + var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), + i = cssPrefixes.length; + + while ( i-- ) { + name = cssPrefixes[ i ] + capName; + if ( name in emptyStyle ) { + return name; + } + } +} + +// Return a potentially-mapped jQuery.cssProps or vendor prefixed property +function finalPropName( name ) { + var final = jQuery.cssProps[ name ] || vendorProps[ name ]; + + if ( final ) { + return final; + } + if ( name in emptyStyle ) { + return name; + } + return vendorProps[ name ] = vendorPropName( name ) || name; +} + + +var + + // Swappable if display is none or starts with table + // except "table", "table-cell", or "table-caption" + // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display + rdisplayswap = /^(none|table(?!-c[ea]).+)/, + rcustomProp = /^--/, + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: "0", + fontWeight: "400" + }; + +function setPositiveNumber( _elem, value, subtract ) { + + // Any relative (+/-) values have already been + // normalized at this point + var matches = rcssNum.exec( value ); + return matches ? + + // Guard against undefined "subtract", e.g., when used as in cssHooks + Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : + value; +} + +function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { + var i = dimension === "width" ? 1 : 0, + extra = 0, + delta = 0; + + // Adjustment may not be necessary + if ( box === ( isBorderBox ? "border" : "content" ) ) { + return 0; + } + + for ( ; i < 4; i += 2 ) { + + // Both box models exclude margin + if ( box === "margin" ) { + delta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); + } + + // If we get here with a content-box, we're seeking "padding" or "border" or "margin" + if ( !isBorderBox ) { + + // Add padding + delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + + // For "border" or "margin", add border + if ( box !== "padding" ) { + delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + + // But still keep track of it otherwise + } else { + extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + + // If we get here with a border-box (content + padding + border), we're seeking "content" or + // "padding" or "margin" + } else { + + // For "content", subtract padding + if ( box === "content" ) { + delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + } + + // For "content" or "padding", subtract border + if ( box !== "margin" ) { + delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } + } + + // Account for positive content-box scroll gutter when requested by providing computedVal + if ( !isBorderBox && computedVal >= 0 ) { + + // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border + // Assuming integer scroll gutter, subtract the rest and round down + delta += Math.max( 0, Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + computedVal - + delta - + extra - + 0.5 + + // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter + // Use an explicit zero to avoid NaN (gh-3964) + ) ) || 0; + } + + return delta; +} + +function getWidthOrHeight( elem, dimension, extra ) { + + // Start with computed style + var styles = getStyles( elem ), + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322). + // Fake content-box until we know it's needed to know the true value. + boxSizingNeeded = !support.boxSizingReliable() || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + valueIsBorderBox = isBorderBox, + + val = curCSS( elem, dimension, styles ), + offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ); + + // Support: Firefox <=54 + // Return a confounding non-pixel value or feign ignorance, as appropriate. + if ( rnumnonpx.test( val ) ) { + if ( !extra ) { + return val; + } + val = "auto"; + } + + + // Support: IE 9 - 11 only + // Use offsetWidth/offsetHeight for when box sizing is unreliable. + // In those cases, the computed value can be trusted to be border-box. + if ( ( !support.boxSizingReliable() && isBorderBox || + + // Support: IE 10 - 11+, Edge 15 - 18+ + // IE/Edge misreport `getComputedStyle` of table rows with width/height + // set in CSS while `offset*` properties report correct values. + // Interestingly, in some cases IE 9 doesn't suffer from this issue. + !support.reliableTrDimensions() && nodeName( elem, "tr" ) || + + // Fall back to offsetWidth/offsetHeight when value is "auto" + // This happens for inline elements with no explicit setting (gh-3571) + val === "auto" || + + // Support: Android <=4.1 - 4.3 only + // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) + !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && + + // Make sure the element is visible & connected + elem.getClientRects().length ) { + + isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; + + // Where available, offsetWidth/offsetHeight approximate border box dimensions. + // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the + // retrieved value as a content box dimension. + valueIsBorderBox = offsetProp in elem; + if ( valueIsBorderBox ) { + val = elem[ offsetProp ]; + } + } + + // Normalize "" and auto + val = parseFloat( val ) || 0; + + // Adjust for the element's box model + return ( val + + boxModelAdjustment( + elem, + dimension, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox, + styles, + + // Provide the current computed size to request scroll gutter calculation (gh-3589) + val + ) + ) + "px"; +} + +jQuery.extend( { + + // Add in style property hooks for overriding the default + // behavior of getting and setting a style property + cssHooks: { + opacity: { + get: function( elem, computed ) { + if ( computed ) { + + // We should always get a number back from opacity + var ret = curCSS( elem, "opacity" ); + return ret === "" ? "1" : ret; + } + } + } + }, + + // Don't automatically add "px" to these possibly-unitless properties + cssNumber: { + "animationIterationCount": true, + "columnCount": true, + "fillOpacity": true, + "flexGrow": true, + "flexShrink": true, + "fontWeight": true, + "gridArea": true, + "gridColumn": true, + "gridColumnEnd": true, + "gridColumnStart": true, + "gridRow": true, + "gridRowEnd": true, + "gridRowStart": true, + "lineHeight": true, + "opacity": true, + "order": true, + "orphans": true, + "widows": true, + "zIndex": true, + "zoom": true + }, + + // Add in properties whose names you wish to fix before + // setting or getting the value + cssProps: {}, + + // Get and set the style property on a DOM Node + style: function( elem, name, value, extra ) { + + // Don't set styles on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { + return; + } + + // Make sure that we're working with the right name + var ret, type, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ), + style = elem.style; + + // Make sure that we're working with the right name. We don't + // want to query the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Gets hook for the prefixed version, then unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // Check if we're setting a value + if ( value !== undefined ) { + type = typeof value; + + // Convert "+=" or "-=" to relative numbers (#7345) + if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { + value = adjustCSS( elem, name, ret ); + + // Fixes bug #9237 + type = "number"; + } + + // Make sure that null and NaN values aren't set (#7116) + if ( value == null || value !== value ) { + return; + } + + // If a number was passed in, add the unit (except for certain CSS properties) + // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append + // "px" to a few hardcoded values. + if ( type === "number" && !isCustomProp ) { + value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); + } + + // background-* props affect original clone's values + if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { + style[ name ] = "inherit"; + } + + // If a hook was provided, use that value, otherwise just set the specified value + if ( !hooks || !( "set" in hooks ) || + ( value = hooks.set( elem, value, extra ) ) !== undefined ) { + + if ( isCustomProp ) { + style.setProperty( name, value ); + } else { + style[ name ] = value; + } + } + + } else { + + // If a hook was provided get the non-computed value from there + if ( hooks && "get" in hooks && + ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { + + return ret; + } + + // Otherwise just get the value from the style object + return style[ name ]; + } + }, + + css: function( elem, name, extra, styles ) { + var val, num, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ); + + // Make sure that we're working with the right name. We don't + // want to modify the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Try prefixed name followed by the unprefixed name + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // If a hook was provided get the computed value from there + if ( hooks && "get" in hooks ) { + val = hooks.get( elem, true, extra ); + } + + // Otherwise, if a way to get the computed value exists, use that + if ( val === undefined ) { + val = curCSS( elem, name, styles ); + } + + // Convert "normal" to computed value + if ( val === "normal" && name in cssNormalTransform ) { + val = cssNormalTransform[ name ]; + } + + // Make numeric if forced or a qualifier was provided and val looks numeric + if ( extra === "" || extra ) { + num = parseFloat( val ); + return extra === true || isFinite( num ) ? num || 0 : val; + } + + return val; + } +} ); + +jQuery.each( [ "height", "width" ], function( _i, dimension ) { + jQuery.cssHooks[ dimension ] = { + get: function( elem, computed, extra ) { + if ( computed ) { + + // Certain elements can have dimension info if we invisibly show them + // but it must have a current display style that would benefit + return rdisplayswap.test( jQuery.css( elem, "display" ) ) && + + // Support: Safari 8+ + // Table columns in Safari have non-zero offsetWidth & zero + // getBoundingClientRect().width unless display is changed. + // Support: IE <=11 only + // Running getBoundingClientRect on a disconnected node + // in IE throws an error. + ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? + swap( elem, cssShow, function() { + return getWidthOrHeight( elem, dimension, extra ); + } ) : + getWidthOrHeight( elem, dimension, extra ); + } + }, + + set: function( elem, value, extra ) { + var matches, + styles = getStyles( elem ), + + // Only read styles.position if the test has a chance to fail + // to avoid forcing a reflow. + scrollboxSizeBuggy = !support.scrollboxSize() && + styles.position === "absolute", + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991) + boxSizingNeeded = scrollboxSizeBuggy || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + subtract = extra ? + boxModelAdjustment( + elem, + dimension, + extra, + isBorderBox, + styles + ) : + 0; + + // Account for unreliable border-box dimensions by comparing offset* to computed and + // faking a content-box to get border and padding (gh-3699) + if ( isBorderBox && scrollboxSizeBuggy ) { + subtract -= Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + parseFloat( styles[ dimension ] ) - + boxModelAdjustment( elem, dimension, "border", false, styles ) - + 0.5 + ); + } + + // Convert to pixels if value adjustment is needed + if ( subtract && ( matches = rcssNum.exec( value ) ) && + ( matches[ 3 ] || "px" ) !== "px" ) { + + elem.style[ dimension ] = value; + value = jQuery.css( elem, dimension ); + } + + return setPositiveNumber( elem, value, subtract ); + } + }; +} ); + +jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, + function( elem, computed ) { + if ( computed ) { + return ( parseFloat( curCSS( elem, "marginLeft" ) ) || + elem.getBoundingClientRect().left - + swap( elem, { marginLeft: 0 }, function() { + return elem.getBoundingClientRect().left; + } ) + ) + "px"; + } + } +); + +// These hooks are used by animate to expand properties +jQuery.each( { + margin: "", + padding: "", + border: "Width" +}, function( prefix, suffix ) { + jQuery.cssHooks[ prefix + suffix ] = { + expand: function( value ) { + var i = 0, + expanded = {}, + + // Assumes a single number if not a string + parts = typeof value === "string" ? value.split( " " ) : [ value ]; + + for ( ; i < 4; i++ ) { + expanded[ prefix + cssExpand[ i ] + suffix ] = + parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; + } + + return expanded; + } + }; + + if ( prefix !== "margin" ) { + jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; + } +} ); + +jQuery.fn.extend( { + css: function( name, value ) { + return access( this, function( elem, name, value ) { + var styles, len, + map = {}, + i = 0; + + if ( Array.isArray( name ) ) { + styles = getStyles( elem ); + len = name.length; + + for ( ; i < len; i++ ) { + map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); + } + + return map; + } + + return value !== undefined ? + jQuery.style( elem, name, value ) : + jQuery.css( elem, name ); + }, name, value, arguments.length > 1 ); + } +} ); + + +function Tween( elem, options, prop, end, easing ) { + return new Tween.prototype.init( elem, options, prop, end, easing ); +} +jQuery.Tween = Tween; + +Tween.prototype = { + constructor: Tween, + init: function( elem, options, prop, end, easing, unit ) { + this.elem = elem; + this.prop = prop; + this.easing = easing || jQuery.easing._default; + this.options = options; + this.start = this.now = this.cur(); + this.end = end; + this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); + }, + cur: function() { + var hooks = Tween.propHooks[ this.prop ]; + + return hooks && hooks.get ? + hooks.get( this ) : + Tween.propHooks._default.get( this ); + }, + run: function( percent ) { + var eased, + hooks = Tween.propHooks[ this.prop ]; + + if ( this.options.duration ) { + this.pos = eased = jQuery.easing[ this.easing ]( + percent, this.options.duration * percent, 0, 1, this.options.duration + ); + } else { + this.pos = eased = percent; + } + this.now = ( this.end - this.start ) * eased + this.start; + + if ( this.options.step ) { + this.options.step.call( this.elem, this.now, this ); + } + + if ( hooks && hooks.set ) { + hooks.set( this ); + } else { + Tween.propHooks._default.set( this ); + } + return this; + } +}; + +Tween.prototype.init.prototype = Tween.prototype; + +Tween.propHooks = { + _default: { + get: function( tween ) { + var result; + + // Use a property on the element directly when it is not a DOM element, + // or when there is no matching style property that exists. + if ( tween.elem.nodeType !== 1 || + tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { + return tween.elem[ tween.prop ]; + } + + // Passing an empty string as a 3rd parameter to .css will automatically + // attempt a parseFloat and fallback to a string if the parse fails. + // Simple values such as "10px" are parsed to Float; + // complex values such as "rotate(1rad)" are returned as-is. + result = jQuery.css( tween.elem, tween.prop, "" ); + + // Empty strings, null, undefined and "auto" are converted to 0. + return !result || result === "auto" ? 0 : result; + }, + set: function( tween ) { + + // Use step hook for back compat. + // Use cssHook if its there. + // Use .style if available and use plain properties where available. + if ( jQuery.fx.step[ tween.prop ] ) { + jQuery.fx.step[ tween.prop ]( tween ); + } else if ( tween.elem.nodeType === 1 && ( + jQuery.cssHooks[ tween.prop ] || + tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { + jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); + } else { + tween.elem[ tween.prop ] = tween.now; + } + } + } +}; + +// Support: IE <=9 only +// Panic based approach to setting things on disconnected nodes +Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { + set: function( tween ) { + if ( tween.elem.nodeType && tween.elem.parentNode ) { + tween.elem[ tween.prop ] = tween.now; + } + } +}; + +jQuery.easing = { + linear: function( p ) { + return p; + }, + swing: function( p ) { + return 0.5 - Math.cos( p * Math.PI ) / 2; + }, + _default: "swing" +}; + +jQuery.fx = Tween.prototype.init; + +// Back compat <1.8 extension point +jQuery.fx.step = {}; + + + + +var + fxNow, inProgress, + rfxtypes = /^(?:toggle|show|hide)$/, + rrun = /queueHooks$/; + +function schedule() { + if ( inProgress ) { + if ( document.hidden === false && window.requestAnimationFrame ) { + window.requestAnimationFrame( schedule ); + } else { + window.setTimeout( schedule, jQuery.fx.interval ); + } + + jQuery.fx.tick(); + } +} + +// Animations created synchronously will run synchronously +function createFxNow() { + window.setTimeout( function() { + fxNow = undefined; + } ); + return ( fxNow = Date.now() ); +} + +// Generate parameters to create a standard animation +function genFx( type, includeWidth ) { + var which, + i = 0, + attrs = { height: type }; + + // If we include width, step value is 1 to do all cssExpand values, + // otherwise step value is 2 to skip over Left and Right + includeWidth = includeWidth ? 1 : 0; + for ( ; i < 4; i += 2 - includeWidth ) { + which = cssExpand[ i ]; + attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; + } + + if ( includeWidth ) { + attrs.opacity = attrs.width = type; + } + + return attrs; +} + +function createTween( value, prop, animation ) { + var tween, + collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), + index = 0, + length = collection.length; + for ( ; index < length; index++ ) { + if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { + + // We're done with this property + return tween; + } + } +} + +function defaultPrefilter( elem, props, opts ) { + var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, + isBox = "width" in props || "height" in props, + anim = this, + orig = {}, + style = elem.style, + hidden = elem.nodeType && isHiddenWithinTree( elem ), + dataShow = dataPriv.get( elem, "fxshow" ); + + // Queue-skipping animations hijack the fx hooks + if ( !opts.queue ) { + hooks = jQuery._queueHooks( elem, "fx" ); + if ( hooks.unqueued == null ) { + hooks.unqueued = 0; + oldfire = hooks.empty.fire; + hooks.empty.fire = function() { + if ( !hooks.unqueued ) { + oldfire(); + } + }; + } + hooks.unqueued++; + + anim.always( function() { + + // Ensure the complete handler is called before this completes + anim.always( function() { + hooks.unqueued--; + if ( !jQuery.queue( elem, "fx" ).length ) { + hooks.empty.fire(); + } + } ); + } ); + } + + // Detect show/hide animations + for ( prop in props ) { + value = props[ prop ]; + if ( rfxtypes.test( value ) ) { + delete props[ prop ]; + toggle = toggle || value === "toggle"; + if ( value === ( hidden ? "hide" : "show" ) ) { + + // Pretend to be hidden if this is a "show" and + // there is still data from a stopped show/hide + if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { + hidden = true; + + // Ignore all other no-op show/hide data + } else { + continue; + } + } + orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); + } + } + + // Bail out if this is a no-op like .hide().hide() + propTween = !jQuery.isEmptyObject( props ); + if ( !propTween && jQuery.isEmptyObject( orig ) ) { + return; + } + + // Restrict "overflow" and "display" styles during box animations + if ( isBox && elem.nodeType === 1 ) { + + // Support: IE <=9 - 11, Edge 12 - 15 + // Record all 3 overflow attributes because IE does not infer the shorthand + // from identically-valued overflowX and overflowY and Edge just mirrors + // the overflowX value there. + opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; + + // Identify a display type, preferring old show/hide data over the CSS cascade + restoreDisplay = dataShow && dataShow.display; + if ( restoreDisplay == null ) { + restoreDisplay = dataPriv.get( elem, "display" ); + } + display = jQuery.css( elem, "display" ); + if ( display === "none" ) { + if ( restoreDisplay ) { + display = restoreDisplay; + } else { + + // Get nonempty value(s) by temporarily forcing visibility + showHide( [ elem ], true ); + restoreDisplay = elem.style.display || restoreDisplay; + display = jQuery.css( elem, "display" ); + showHide( [ elem ] ); + } + } + + // Animate inline elements as inline-block + if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { + if ( jQuery.css( elem, "float" ) === "none" ) { + + // Restore the original display value at the end of pure show/hide animations + if ( !propTween ) { + anim.done( function() { + style.display = restoreDisplay; + } ); + if ( restoreDisplay == null ) { + display = style.display; + restoreDisplay = display === "none" ? "" : display; + } + } + style.display = "inline-block"; + } + } + } + + if ( opts.overflow ) { + style.overflow = "hidden"; + anim.always( function() { + style.overflow = opts.overflow[ 0 ]; + style.overflowX = opts.overflow[ 1 ]; + style.overflowY = opts.overflow[ 2 ]; + } ); + } + + // Implement show/hide animations + propTween = false; + for ( prop in orig ) { + + // General show/hide setup for this element animation + if ( !propTween ) { + if ( dataShow ) { + if ( "hidden" in dataShow ) { + hidden = dataShow.hidden; + } + } else { + dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); + } + + // Store hidden/visible for toggle so `.stop().toggle()` "reverses" + if ( toggle ) { + dataShow.hidden = !hidden; + } + + // Show elements before animating them + if ( hidden ) { + showHide( [ elem ], true ); + } + + /* eslint-disable no-loop-func */ + + anim.done( function() { + + /* eslint-enable no-loop-func */ + + // The final step of a "hide" animation is actually hiding the element + if ( !hidden ) { + showHide( [ elem ] ); + } + dataPriv.remove( elem, "fxshow" ); + for ( prop in orig ) { + jQuery.style( elem, prop, orig[ prop ] ); + } + } ); + } + + // Per-property setup + propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); + if ( !( prop in dataShow ) ) { + dataShow[ prop ] = propTween.start; + if ( hidden ) { + propTween.end = propTween.start; + propTween.start = 0; + } + } + } +} + +function propFilter( props, specialEasing ) { + var index, name, easing, value, hooks; + + // camelCase, specialEasing and expand cssHook pass + for ( index in props ) { + name = camelCase( index ); + easing = specialEasing[ name ]; + value = props[ index ]; + if ( Array.isArray( value ) ) { + easing = value[ 1 ]; + value = props[ index ] = value[ 0 ]; + } + + if ( index !== name ) { + props[ name ] = value; + delete props[ index ]; + } + + hooks = jQuery.cssHooks[ name ]; + if ( hooks && "expand" in hooks ) { + value = hooks.expand( value ); + delete props[ name ]; + + // Not quite $.extend, this won't overwrite existing keys. + // Reusing 'index' because we have the correct "name" + for ( index in value ) { + if ( !( index in props ) ) { + props[ index ] = value[ index ]; + specialEasing[ index ] = easing; + } + } + } else { + specialEasing[ name ] = easing; + } + } +} + +function Animation( elem, properties, options ) { + var result, + stopped, + index = 0, + length = Animation.prefilters.length, + deferred = jQuery.Deferred().always( function() { + + // Don't match elem in the :animated selector + delete tick.elem; + } ), + tick = function() { + if ( stopped ) { + return false; + } + var currentTime = fxNow || createFxNow(), + remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), + + // Support: Android 2.3 only + // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) + temp = remaining / animation.duration || 0, + percent = 1 - temp, + index = 0, + length = animation.tweens.length; + + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( percent ); + } + + deferred.notifyWith( elem, [ animation, percent, remaining ] ); + + // If there's more to do, yield + if ( percent < 1 && length ) { + return remaining; + } + + // If this was an empty animation, synthesize a final progress notification + if ( !length ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + } + + // Resolve the animation and report its conclusion + deferred.resolveWith( elem, [ animation ] ); + return false; + }, + animation = deferred.promise( { + elem: elem, + props: jQuery.extend( {}, properties ), + opts: jQuery.extend( true, { + specialEasing: {}, + easing: jQuery.easing._default + }, options ), + originalProperties: properties, + originalOptions: options, + startTime: fxNow || createFxNow(), + duration: options.duration, + tweens: [], + createTween: function( prop, end ) { + var tween = jQuery.Tween( elem, animation.opts, prop, end, + animation.opts.specialEasing[ prop ] || animation.opts.easing ); + animation.tweens.push( tween ); + return tween; + }, + stop: function( gotoEnd ) { + var index = 0, + + // If we are going to the end, we want to run all the tweens + // otherwise we skip this part + length = gotoEnd ? animation.tweens.length : 0; + if ( stopped ) { + return this; + } + stopped = true; + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( 1 ); + } + + // Resolve when we played the last frame; otherwise, reject + if ( gotoEnd ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + deferred.resolveWith( elem, [ animation, gotoEnd ] ); + } else { + deferred.rejectWith( elem, [ animation, gotoEnd ] ); + } + return this; + } + } ), + props = animation.props; + + propFilter( props, animation.opts.specialEasing ); + + for ( ; index < length; index++ ) { + result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); + if ( result ) { + if ( isFunction( result.stop ) ) { + jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = + result.stop.bind( result ); + } + return result; + } + } + + jQuery.map( props, createTween, animation ); + + if ( isFunction( animation.opts.start ) ) { + animation.opts.start.call( elem, animation ); + } + + // Attach callbacks from options + animation + .progress( animation.opts.progress ) + .done( animation.opts.done, animation.opts.complete ) + .fail( animation.opts.fail ) + .always( animation.opts.always ); + + jQuery.fx.timer( + jQuery.extend( tick, { + elem: elem, + anim: animation, + queue: animation.opts.queue + } ) + ); + + return animation; +} + +jQuery.Animation = jQuery.extend( Animation, { + + tweeners: { + "*": [ function( prop, value ) { + var tween = this.createTween( prop, value ); + adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); + return tween; + } ] + }, + + tweener: function( props, callback ) { + if ( isFunction( props ) ) { + callback = props; + props = [ "*" ]; + } else { + props = props.match( rnothtmlwhite ); + } + + var prop, + index = 0, + length = props.length; + + for ( ; index < length; index++ ) { + prop = props[ index ]; + Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; + Animation.tweeners[ prop ].unshift( callback ); + } + }, + + prefilters: [ defaultPrefilter ], + + prefilter: function( callback, prepend ) { + if ( prepend ) { + Animation.prefilters.unshift( callback ); + } else { + Animation.prefilters.push( callback ); + } + } +} ); + +jQuery.speed = function( speed, easing, fn ) { + var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { + complete: fn || !fn && easing || + isFunction( speed ) && speed, + duration: speed, + easing: fn && easing || easing && !isFunction( easing ) && easing + }; + + // Go to the end state if fx are off + if ( jQuery.fx.off ) { + opt.duration = 0; + + } else { + if ( typeof opt.duration !== "number" ) { + if ( opt.duration in jQuery.fx.speeds ) { + opt.duration = jQuery.fx.speeds[ opt.duration ]; + + } else { + opt.duration = jQuery.fx.speeds._default; + } + } + } + + // Normalize opt.queue - true/undefined/null -> "fx" + if ( opt.queue == null || opt.queue === true ) { + opt.queue = "fx"; + } + + // Queueing + opt.old = opt.complete; + + opt.complete = function() { + if ( isFunction( opt.old ) ) { + opt.old.call( this ); + } + + if ( opt.queue ) { + jQuery.dequeue( this, opt.queue ); + } + }; + + return opt; +}; + +jQuery.fn.extend( { + fadeTo: function( speed, to, easing, callback ) { + + // Show any hidden elements after setting opacity to 0 + return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() + + // Animate to the value specified + .end().animate( { opacity: to }, speed, easing, callback ); + }, + animate: function( prop, speed, easing, callback ) { + var empty = jQuery.isEmptyObject( prop ), + optall = jQuery.speed( speed, easing, callback ), + doAnimation = function() { + + // Operate on a copy of prop so per-property easing won't be lost + var anim = Animation( this, jQuery.extend( {}, prop ), optall ); + + // Empty animations, or finishing resolves immediately + if ( empty || dataPriv.get( this, "finish" ) ) { + anim.stop( true ); + } + }; + doAnimation.finish = doAnimation; + + return empty || optall.queue === false ? + this.each( doAnimation ) : + this.queue( optall.queue, doAnimation ); + }, + stop: function( type, clearQueue, gotoEnd ) { + var stopQueue = function( hooks ) { + var stop = hooks.stop; + delete hooks.stop; + stop( gotoEnd ); + }; + + if ( typeof type !== "string" ) { + gotoEnd = clearQueue; + clearQueue = type; + type = undefined; + } + if ( clearQueue ) { + this.queue( type || "fx", [] ); + } + + return this.each( function() { + var dequeue = true, + index = type != null && type + "queueHooks", + timers = jQuery.timers, + data = dataPriv.get( this ); + + if ( index ) { + if ( data[ index ] && data[ index ].stop ) { + stopQueue( data[ index ] ); + } + } else { + for ( index in data ) { + if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { + stopQueue( data[ index ] ); + } + } + } + + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && + ( type == null || timers[ index ].queue === type ) ) { + + timers[ index ].anim.stop( gotoEnd ); + dequeue = false; + timers.splice( index, 1 ); + } + } + + // Start the next in the queue if the last step wasn't forced. + // Timers currently will call their complete callbacks, which + // will dequeue but only if they were gotoEnd. + if ( dequeue || !gotoEnd ) { + jQuery.dequeue( this, type ); + } + } ); + }, + finish: function( type ) { + if ( type !== false ) { + type = type || "fx"; + } + return this.each( function() { + var index, + data = dataPriv.get( this ), + queue = data[ type + "queue" ], + hooks = data[ type + "queueHooks" ], + timers = jQuery.timers, + length = queue ? queue.length : 0; + + // Enable finishing flag on private data + data.finish = true; + + // Empty the queue first + jQuery.queue( this, type, [] ); + + if ( hooks && hooks.stop ) { + hooks.stop.call( this, true ); + } + + // Look for any active animations, and finish them + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && timers[ index ].queue === type ) { + timers[ index ].anim.stop( true ); + timers.splice( index, 1 ); + } + } + + // Look for any animations in the old queue and finish them + for ( index = 0; index < length; index++ ) { + if ( queue[ index ] && queue[ index ].finish ) { + queue[ index ].finish.call( this ); + } + } + + // Turn off finishing flag + delete data.finish; + } ); + } +} ); + +jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) { + var cssFn = jQuery.fn[ name ]; + jQuery.fn[ name ] = function( speed, easing, callback ) { + return speed == null || typeof speed === "boolean" ? + cssFn.apply( this, arguments ) : + this.animate( genFx( name, true ), speed, easing, callback ); + }; +} ); + +// Generate shortcuts for custom animations +jQuery.each( { + slideDown: genFx( "show" ), + slideUp: genFx( "hide" ), + slideToggle: genFx( "toggle" ), + fadeIn: { opacity: "show" }, + fadeOut: { opacity: "hide" }, + fadeToggle: { opacity: "toggle" } +}, function( name, props ) { + jQuery.fn[ name ] = function( speed, easing, callback ) { + return this.animate( props, speed, easing, callback ); + }; +} ); + +jQuery.timers = []; +jQuery.fx.tick = function() { + var timer, + i = 0, + timers = jQuery.timers; + + fxNow = Date.now(); + + for ( ; i < timers.length; i++ ) { + timer = timers[ i ]; + + // Run the timer and safely remove it when done (allowing for external removal) + if ( !timer() && timers[ i ] === timer ) { + timers.splice( i--, 1 ); + } + } + + if ( !timers.length ) { + jQuery.fx.stop(); + } + fxNow = undefined; +}; + +jQuery.fx.timer = function( timer ) { + jQuery.timers.push( timer ); + jQuery.fx.start(); +}; + +jQuery.fx.interval = 13; +jQuery.fx.start = function() { + if ( inProgress ) { + return; + } + + inProgress = true; + schedule(); +}; + +jQuery.fx.stop = function() { + inProgress = null; +}; + +jQuery.fx.speeds = { + slow: 600, + fast: 200, + + // Default speed + _default: 400 +}; + + +// Based off of the plugin by Clint Helfers, with permission. +// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ +jQuery.fn.delay = function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = window.setTimeout( next, time ); + hooks.stop = function() { + window.clearTimeout( timeout ); + }; + } ); +}; + + +( function() { + var input = document.createElement( "input" ), + select = document.createElement( "select" ), + opt = select.appendChild( document.createElement( "option" ) ); + + input.type = "checkbox"; + + // Support: Android <=4.3 only + // Default value for a checkbox should be "on" + support.checkOn = input.value !== ""; + + // Support: IE <=11 only + // Must access selectedIndex to make default options select + support.optSelected = opt.selected; + + // Support: IE <=11 only + // An input loses its value after becoming a radio + input = document.createElement( "input" ); + input.value = "t"; + input.type = "radio"; + support.radioValue = input.value === "t"; +} )(); + + +var boolHook, + attrHandle = jQuery.expr.attrHandle; + +jQuery.fn.extend( { + attr: function( name, value ) { + return access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each( function() { + jQuery.removeAttr( this, name ); + } ); + } +} ); + +jQuery.extend( { + attr: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set attributes on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + // Attribute hooks are determined by the lowercase version + // Grab necessary hook if one is defined + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + hooks = jQuery.attrHooks[ name.toLowerCase() ] || + ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); + } + + if ( value !== undefined ) { + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + } + + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + elem.setAttribute( name, value + "" ); + return value; + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + ret = jQuery.find.attr( elem, name ); + + // Non-existent attributes return null, we normalize to undefined + return ret == null ? undefined : ret; + }, + + attrHooks: { + type: { + set: function( elem, value ) { + if ( !support.radioValue && value === "radio" && + nodeName( elem, "input" ) ) { + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + } + }, + + removeAttr: function( elem, value ) { + var name, + i = 0, + + // Attribute names can contain non-HTML whitespace characters + // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 + attrNames = value && value.match( rnothtmlwhite ); + + if ( attrNames && elem.nodeType === 1 ) { + while ( ( name = attrNames[ i++ ] ) ) { + elem.removeAttribute( name ); + } + } + } +} ); + +// Hooks for boolean attributes +boolHook = { + set: function( elem, value, name ) { + if ( value === false ) { + + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + elem.setAttribute( name, name ); + } + return name; + } +}; + +jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) { + var getter = attrHandle[ name ] || jQuery.find.attr; + + attrHandle[ name ] = function( elem, name, isXML ) { + var ret, handle, + lowercaseName = name.toLowerCase(); + + if ( !isXML ) { + + // Avoid an infinite loop by temporarily removing this function from the getter + handle = attrHandle[ lowercaseName ]; + attrHandle[ lowercaseName ] = ret; + ret = getter( elem, name, isXML ) != null ? + lowercaseName : + null; + attrHandle[ lowercaseName ] = handle; + } + return ret; + }; +} ); + + + + +var rfocusable = /^(?:input|select|textarea|button)$/i, + rclickable = /^(?:a|area)$/i; + +jQuery.fn.extend( { + prop: function( name, value ) { + return access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + return this.each( function() { + delete this[ jQuery.propFix[ name ] || name ]; + } ); + } +} ); + +jQuery.extend( { + prop: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set properties on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + return ( elem[ name ] = value ); + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + return elem[ name ]; + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + + // Support: IE <=9 - 11 only + // elem.tabIndex doesn't always return the + // correct value when it hasn't been explicitly set + // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + // Use proper attribute retrieval(#12072) + var tabindex = jQuery.find.attr( elem, "tabindex" ); + + if ( tabindex ) { + return parseInt( tabindex, 10 ); + } + + if ( + rfocusable.test( elem.nodeName ) || + rclickable.test( elem.nodeName ) && + elem.href + ) { + return 0; + } + + return -1; + } + } + }, + + propFix: { + "for": "htmlFor", + "class": "className" + } +} ); + +// Support: IE <=11 only +// Accessing the selectedIndex property +// forces the browser to respect setting selected +// on the option +// The getter ensures a default option is selected +// when in an optgroup +// eslint rule "no-unused-expressions" is disabled for this code +// since it considers such accessions noop +if ( !support.optSelected ) { + jQuery.propHooks.selected = { + get: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent && parent.parentNode ) { + parent.parentNode.selectedIndex; + } + return null; + }, + set: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent ) { + parent.selectedIndex; + + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + } + }; +} + +jQuery.each( [ + "tabIndex", + "readOnly", + "maxLength", + "cellSpacing", + "cellPadding", + "rowSpan", + "colSpan", + "useMap", + "frameBorder", + "contentEditable" +], function() { + jQuery.propFix[ this.toLowerCase() ] = this; +} ); + + + + + // Strip and collapse whitespace according to HTML spec + // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace + function stripAndCollapse( value ) { + var tokens = value.match( rnothtmlwhite ) || []; + return tokens.join( " " ); + } + + +function getClass( elem ) { + return elem.getAttribute && elem.getAttribute( "class" ) || ""; +} + +function classesToArray( value ) { + if ( Array.isArray( value ) ) { + return value; + } + if ( typeof value === "string" ) { + return value.match( rnothtmlwhite ) || []; + } + return []; +} + +jQuery.fn.extend( { + addClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + if ( cur.indexOf( " " + clazz + " " ) < 0 ) { + cur += clazz + " "; + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( !arguments.length ) { + return this.attr( "class", "" ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + + // This expression is here for better compressibility (see addClass) + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + + // Remove *all* instances + while ( cur.indexOf( " " + clazz + " " ) > -1 ) { + cur = cur.replace( " " + clazz + " ", " " ); + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value, + isValidValue = type === "string" || Array.isArray( value ); + + if ( typeof stateVal === "boolean" && isValidValue ) { + return stateVal ? this.addClass( value ) : this.removeClass( value ); + } + + if ( isFunction( value ) ) { + return this.each( function( i ) { + jQuery( this ).toggleClass( + value.call( this, i, getClass( this ), stateVal ), + stateVal + ); + } ); + } + + return this.each( function() { + var className, i, self, classNames; + + if ( isValidValue ) { + + // Toggle individual class names + i = 0; + self = jQuery( this ); + classNames = classesToArray( value ); + + while ( ( className = classNames[ i++ ] ) ) { + + // Check each className given, space separated list + if ( self.hasClass( className ) ) { + self.removeClass( className ); + } else { + self.addClass( className ); + } + } + + // Toggle whole class name + } else if ( value === undefined || type === "boolean" ) { + className = getClass( this ); + if ( className ) { + + // Store className if set + dataPriv.set( this, "__className__", className ); + } + + // If the element has a class name or if we're passed `false`, + // then remove the whole classname (if there was one, the above saved it). + // Otherwise bring back whatever was previously saved (if anything), + // falling back to the empty string if nothing was stored. + if ( this.setAttribute ) { + this.setAttribute( "class", + className || value === false ? + "" : + dataPriv.get( this, "__className__" ) || "" + ); + } + } + } ); + }, + + hasClass: function( selector ) { + var className, elem, + i = 0; + + className = " " + selector + " "; + while ( ( elem = this[ i++ ] ) ) { + if ( elem.nodeType === 1 && + ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { + return true; + } + } + + return false; + } +} ); + + + + +var rreturn = /\r/g; + +jQuery.fn.extend( { + val: function( value ) { + var hooks, ret, valueIsFunction, + elem = this[ 0 ]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || + jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && + "get" in hooks && + ( ret = hooks.get( elem, "value" ) ) !== undefined + ) { + return ret; + } + + ret = elem.value; + + // Handle most common string cases + if ( typeof ret === "string" ) { + return ret.replace( rreturn, "" ); + } + + // Handle cases where value is null/undef or number + return ret == null ? "" : ret; + } + + return; + } + + valueIsFunction = isFunction( value ); + + return this.each( function( i ) { + var val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( valueIsFunction ) { + val = value.call( this, i, jQuery( this ).val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + + } else if ( typeof val === "number" ) { + val += ""; + + } else if ( Array.isArray( val ) ) { + val = jQuery.map( val, function( value ) { + return value == null ? "" : value + ""; + } ); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + } ); + } +} ); + +jQuery.extend( { + valHooks: { + option: { + get: function( elem ) { + + var val = jQuery.find.attr( elem, "value" ); + return val != null ? + val : + + // Support: IE <=10 - 11 only + // option.text throws exceptions (#14686, #14858) + // Strip and collapse whitespace + // https://html.spec.whatwg.org/#strip-and-collapse-whitespace + stripAndCollapse( jQuery.text( elem ) ); + } + }, + select: { + get: function( elem ) { + var value, option, i, + options = elem.options, + index = elem.selectedIndex, + one = elem.type === "select-one", + values = one ? null : [], + max = one ? index + 1 : options.length; + + if ( index < 0 ) { + i = max; + + } else { + i = one ? index : 0; + } + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // Support: IE <=9 only + // IE8-9 doesn't update selected after form reset (#2551) + if ( ( option.selected || i === index ) && + + // Don't return options that are disabled or in a disabled optgroup + !option.disabled && + ( !option.parentNode.disabled || + !nodeName( option.parentNode, "optgroup" ) ) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + }, + + set: function( elem, value ) { + var optionSet, option, + options = elem.options, + values = jQuery.makeArray( value ), + i = options.length; + + while ( i-- ) { + option = options[ i ]; + + /* eslint-disable no-cond-assign */ + + if ( option.selected = + jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 + ) { + optionSet = true; + } + + /* eslint-enable no-cond-assign */ + } + + // Force browsers to behave consistently when non-matching value is set + if ( !optionSet ) { + elem.selectedIndex = -1; + } + return values; + } + } + } +} ); + +// Radios and checkboxes getter/setter +jQuery.each( [ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + set: function( elem, value ) { + if ( Array.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); + } + } + }; + if ( !support.checkOn ) { + jQuery.valHooks[ this ].get = function( elem ) { + return elem.getAttribute( "value" ) === null ? "on" : elem.value; + }; + } +} ); + + + + +// Return jQuery for attributes-only inclusion + + +support.focusin = "onfocusin" in window; + + +var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + stopPropagationCallback = function( e ) { + e.stopPropagation(); + }; + +jQuery.extend( jQuery.event, { + + trigger: function( event, data, elem, onlyHandlers ) { + + var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, + eventPath = [ elem || document ], + type = hasOwn.call( event, "type" ) ? event.type : event, + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; + + cur = lastElement = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf( "." ) > -1 ) { + + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split( "." ); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf( ":" ) < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) + event.isTrigger = onlyHandlers ? 2 : 3; + event.namespace = namespaces.join( "." ); + event.rnamespace = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === ( elem.ownerDocument || document ) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { + lastElement = cur; + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( + dataPriv.get( cur, "events" ) || Object.create( null ) + )[ event.type ] && + dataPriv.get( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && handle.apply && acceptData( cur ) ) { + event.result = handle.apply( cur, data ); + if ( event.result === false ) { + event.preventDefault(); + } + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( ( !special._default || + special._default.apply( eventPath.pop(), data ) === false ) && + acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name as the event. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + + if ( event.isPropagationStopped() ) { + lastElement.addEventListener( type, stopPropagationCallback ); + } + + elem[ type ](); + + if ( event.isPropagationStopped() ) { + lastElement.removeEventListener( type, stopPropagationCallback ); + } + + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + // Piggyback on a donor event to simulate a different one + // Used only for `focus(in | out)` events + simulate: function( type, elem, event ) { + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true + } + ); + + jQuery.event.trigger( e, null, elem ); + } + +} ); + +jQuery.fn.extend( { + + trigger: function( type, data ) { + return this.each( function() { + jQuery.event.trigger( type, data, this ); + } ); + }, + triggerHandler: function( type, data ) { + var elem = this[ 0 ]; + if ( elem ) { + return jQuery.event.trigger( type, data, elem, true ); + } + } +} ); + + +// Support: Firefox <=44 +// Firefox doesn't have focus(in | out) events +// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 +// +// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 +// focus(in | out) events fire after focus & blur events, +// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order +// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 +if ( !support.focusin ) { + jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler on the document while someone wants focusin/focusout + var handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + + // Handle: regular nodes (via `this.ownerDocument`), window + // (via `this.document`) & document (via `this`). + var doc = this.ownerDocument || this.document || this, + attaches = dataPriv.access( doc, fix ); + + if ( !attaches ) { + doc.addEventListener( orig, handler, true ); + } + dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this.document || this, + attaches = dataPriv.access( doc, fix ) - 1; + + if ( !attaches ) { + doc.removeEventListener( orig, handler, true ); + dataPriv.remove( doc, fix ); + + } else { + dataPriv.access( doc, fix, attaches ); + } + } + }; + } ); +} +var location = window.location; + +var nonce = { guid: Date.now() }; + +var rquery = ( /\?/ ); + + + +// Cross-browser xml parsing +jQuery.parseXML = function( data ) { + var xml; + if ( !data || typeof data !== "string" ) { + return null; + } + + // Support: IE 9 - 11 only + // IE throws on parseFromString with invalid input. + try { + xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); + } catch ( e ) { + xml = undefined; + } + + if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { + jQuery.error( "Invalid XML: " + data ); + } + return xml; +}; + + +var + rbracket = /\[\]$/, + rCRLF = /\r?\n/g, + rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, + rsubmittable = /^(?:input|select|textarea|keygen)/i; + +function buildParams( prefix, obj, traditional, add ) { + var name; + + if ( Array.isArray( obj ) ) { + + // Serialize array item. + jQuery.each( obj, function( i, v ) { + if ( traditional || rbracket.test( prefix ) ) { + + // Treat each array item as a scalar. + add( prefix, v ); + + } else { + + // Item is non-scalar (array or object), encode its numeric index. + buildParams( + prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", + v, + traditional, + add + ); + } + } ); + + } else if ( !traditional && toType( obj ) === "object" ) { + + // Serialize object item. + for ( name in obj ) { + buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); + } + + } else { + + // Serialize scalar item. + add( prefix, obj ); + } +} + +// Serialize an array of form elements or a set of +// key/values into a query string +jQuery.param = function( a, traditional ) { + var prefix, + s = [], + add = function( key, valueOrFunction ) { + + // If value is a function, invoke it and use its return value + var value = isFunction( valueOrFunction ) ? + valueOrFunction() : + valueOrFunction; + + s[ s.length ] = encodeURIComponent( key ) + "=" + + encodeURIComponent( value == null ? "" : value ); + }; + + if ( a == null ) { + return ""; + } + + // If an array was passed in, assume that it is an array of form elements. + if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { + + // Serialize the form elements + jQuery.each( a, function() { + add( this.name, this.value ); + } ); + + } else { + + // If traditional, encode the "old" way (the way 1.3.2 or older + // did it), otherwise encode params recursively. + for ( prefix in a ) { + buildParams( prefix, a[ prefix ], traditional, add ); + } + } + + // Return the resulting serialization + return s.join( "&" ); +}; + +jQuery.fn.extend( { + serialize: function() { + return jQuery.param( this.serializeArray() ); + }, + serializeArray: function() { + return this.map( function() { + + // Can add propHook for "elements" to filter or add form elements + var elements = jQuery.prop( this, "elements" ); + return elements ? jQuery.makeArray( elements ) : this; + } ) + .filter( function() { + var type = this.type; + + // Use .is( ":disabled" ) so that fieldset[disabled] works + return this.name && !jQuery( this ).is( ":disabled" ) && + rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && + ( this.checked || !rcheckableType.test( type ) ); + } ) + .map( function( _i, elem ) { + var val = jQuery( this ).val(); + + if ( val == null ) { + return null; + } + + if ( Array.isArray( val ) ) { + return jQuery.map( val, function( val ) { + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ); + } + + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ).get(); + } +} ); + + +var + r20 = /%20/g, + rhash = /#.*$/, + rantiCache = /([?&])_=[^&]*/, + rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, + + // #7653, #8125, #8152: local protocol detection + rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, + rnoContent = /^(?:GET|HEAD)$/, + rprotocol = /^\/\//, + + /* Prefilters + * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) + * 2) These are called: + * - BEFORE asking for a transport + * - AFTER param serialization (s.data is a string if s.processData is true) + * 3) key is the dataType + * 4) the catchall symbol "*" can be used + * 5) execution will start with transport dataType and THEN continue down to "*" if needed + */ + prefilters = {}, + + /* Transports bindings + * 1) key is the dataType + * 2) the catchall symbol "*" can be used + * 3) selection will start with transport dataType and THEN go to "*" if needed + */ + transports = {}, + + // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression + allTypes = "*/".concat( "*" ), + + // Anchor tag for parsing the document origin + originAnchor = document.createElement( "a" ); + originAnchor.href = location.href; + +// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport +function addToPrefiltersOrTransports( structure ) { + + // dataTypeExpression is optional and defaults to "*" + return function( dataTypeExpression, func ) { + + if ( typeof dataTypeExpression !== "string" ) { + func = dataTypeExpression; + dataTypeExpression = "*"; + } + + var dataType, + i = 0, + dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; + + if ( isFunction( func ) ) { + + // For each dataType in the dataTypeExpression + while ( ( dataType = dataTypes[ i++ ] ) ) { + + // Prepend if requested + if ( dataType[ 0 ] === "+" ) { + dataType = dataType.slice( 1 ) || "*"; + ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); + + // Otherwise append + } else { + ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); + } + } + } + }; +} + +// Base inspection function for prefilters and transports +function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { + + var inspected = {}, + seekingTransport = ( structure === transports ); + + function inspect( dataType ) { + var selected; + inspected[ dataType ] = true; + jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { + var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); + if ( typeof dataTypeOrTransport === "string" && + !seekingTransport && !inspected[ dataTypeOrTransport ] ) { + + options.dataTypes.unshift( dataTypeOrTransport ); + inspect( dataTypeOrTransport ); + return false; + } else if ( seekingTransport ) { + return !( selected = dataTypeOrTransport ); + } + } ); + return selected; + } + + return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); +} + +// A special extend for ajax options +// that takes "flat" options (not to be deep extended) +// Fixes #9887 +function ajaxExtend( target, src ) { + var key, deep, + flatOptions = jQuery.ajaxSettings.flatOptions || {}; + + for ( key in src ) { + if ( src[ key ] !== undefined ) { + ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; + } + } + if ( deep ) { + jQuery.extend( true, target, deep ); + } + + return target; +} + +/* Handles responses to an ajax request: + * - finds the right dataType (mediates between content-type and expected dataType) + * - returns the corresponding response + */ +function ajaxHandleResponses( s, jqXHR, responses ) { + + var ct, type, finalDataType, firstDataType, + contents = s.contents, + dataTypes = s.dataTypes; + + // Remove auto dataType and get content-type in the process + while ( dataTypes[ 0 ] === "*" ) { + dataTypes.shift(); + if ( ct === undefined ) { + ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); + } + } + + // Check if we're dealing with a known content-type + if ( ct ) { + for ( type in contents ) { + if ( contents[ type ] && contents[ type ].test( ct ) ) { + dataTypes.unshift( type ); + break; + } + } + } + + // Check to see if we have a response for the expected dataType + if ( dataTypes[ 0 ] in responses ) { + finalDataType = dataTypes[ 0 ]; + } else { + + // Try convertible dataTypes + for ( type in responses ) { + if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { + finalDataType = type; + break; + } + if ( !firstDataType ) { + firstDataType = type; + } + } + + // Or just use first one + finalDataType = finalDataType || firstDataType; + } + + // If we found a dataType + // We add the dataType to the list if needed + // and return the corresponding response + if ( finalDataType ) { + if ( finalDataType !== dataTypes[ 0 ] ) { + dataTypes.unshift( finalDataType ); + } + return responses[ finalDataType ]; + } +} + +/* Chain conversions given the request and the original response + * Also sets the responseXXX fields on the jqXHR instance + */ +function ajaxConvert( s, response, jqXHR, isSuccess ) { + var conv2, current, conv, tmp, prev, + converters = {}, + + // Work with a copy of dataTypes in case we need to modify it for conversion + dataTypes = s.dataTypes.slice(); + + // Create converters map with lowercased keys + if ( dataTypes[ 1 ] ) { + for ( conv in s.converters ) { + converters[ conv.toLowerCase() ] = s.converters[ conv ]; + } + } + + current = dataTypes.shift(); + + // Convert to each sequential dataType + while ( current ) { + + if ( s.responseFields[ current ] ) { + jqXHR[ s.responseFields[ current ] ] = response; + } + + // Apply the dataFilter if provided + if ( !prev && isSuccess && s.dataFilter ) { + response = s.dataFilter( response, s.dataType ); + } + + prev = current; + current = dataTypes.shift(); + + if ( current ) { + + // There's only work to do if current dataType is non-auto + if ( current === "*" ) { + + current = prev; + + // Convert response if prev dataType is non-auto and differs from current + } else if ( prev !== "*" && prev !== current ) { + + // Seek a direct converter + conv = converters[ prev + " " + current ] || converters[ "* " + current ]; + + // If none found, seek a pair + if ( !conv ) { + for ( conv2 in converters ) { + + // If conv2 outputs current + tmp = conv2.split( " " ); + if ( tmp[ 1 ] === current ) { + + // If prev can be converted to accepted input + conv = converters[ prev + " " + tmp[ 0 ] ] || + converters[ "* " + tmp[ 0 ] ]; + if ( conv ) { + + // Condense equivalence converters + if ( conv === true ) { + conv = converters[ conv2 ]; + + // Otherwise, insert the intermediate dataType + } else if ( converters[ conv2 ] !== true ) { + current = tmp[ 0 ]; + dataTypes.unshift( tmp[ 1 ] ); + } + break; + } + } + } + } + + // Apply converter (if not an equivalence) + if ( conv !== true ) { + + // Unless errors are allowed to bubble, catch and return them + if ( conv && s.throws ) { + response = conv( response ); + } else { + try { + response = conv( response ); + } catch ( e ) { + return { + state: "parsererror", + error: conv ? e : "No conversion from " + prev + " to " + current + }; + } + } + } + } + } + } + + return { state: "success", data: response }; +} + +jQuery.extend( { + + // Counter for holding the number of active queries + active: 0, + + // Last-Modified header cache for next request + lastModified: {}, + etag: {}, + + ajaxSettings: { + url: location.href, + type: "GET", + isLocal: rlocalProtocol.test( location.protocol ), + global: true, + processData: true, + async: true, + contentType: "application/x-www-form-urlencoded; charset=UTF-8", + + /* + timeout: 0, + data: null, + dataType: null, + username: null, + password: null, + cache: null, + throws: false, + traditional: false, + headers: {}, + */ + + accepts: { + "*": allTypes, + text: "text/plain", + html: "text/html", + xml: "application/xml, text/xml", + json: "application/json, text/javascript" + }, + + contents: { + xml: /\bxml\b/, + html: /\bhtml/, + json: /\bjson\b/ + }, + + responseFields: { + xml: "responseXML", + text: "responseText", + json: "responseJSON" + }, + + // Data converters + // Keys separate source (or catchall "*") and destination types with a single space + converters: { + + // Convert anything to text + "* text": String, + + // Text to html (true = no transformation) + "text html": true, + + // Evaluate text as a json expression + "text json": JSON.parse, + + // Parse text as xml + "text xml": jQuery.parseXML + }, + + // For options that shouldn't be deep extended: + // you can add your own custom options here if + // and when you create one that shouldn't be + // deep extended (see ajaxExtend) + flatOptions: { + url: true, + context: true + } + }, + + // Creates a full fledged settings object into target + // with both ajaxSettings and settings fields. + // If target is omitted, writes into ajaxSettings. + ajaxSetup: function( target, settings ) { + return settings ? + + // Building a settings object + ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : + + // Extending ajaxSettings + ajaxExtend( jQuery.ajaxSettings, target ); + }, + + ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), + ajaxTransport: addToPrefiltersOrTransports( transports ), + + // Main method + ajax: function( url, options ) { + + // If url is an object, simulate pre-1.5 signature + if ( typeof url === "object" ) { + options = url; + url = undefined; + } + + // Force options to be an object + options = options || {}; + + var transport, + + // URL without anti-cache param + cacheURL, + + // Response headers + responseHeadersString, + responseHeaders, + + // timeout handle + timeoutTimer, + + // Url cleanup var + urlAnchor, + + // Request state (becomes false upon send and true upon completion) + completed, + + // To know if global events are to be dispatched + fireGlobals, + + // Loop variable + i, + + // uncached part of the url + uncached, + + // Create the final options object + s = jQuery.ajaxSetup( {}, options ), + + // Callbacks context + callbackContext = s.context || s, + + // Context for global events is callbackContext if it is a DOM node or jQuery collection + globalEventContext = s.context && + ( callbackContext.nodeType || callbackContext.jquery ) ? + jQuery( callbackContext ) : + jQuery.event, + + // Deferreds + deferred = jQuery.Deferred(), + completeDeferred = jQuery.Callbacks( "once memory" ), + + // Status-dependent callbacks + statusCode = s.statusCode || {}, + + // Headers (they are sent all at once) + requestHeaders = {}, + requestHeadersNames = {}, + + // Default abort message + strAbort = "canceled", + + // Fake xhr + jqXHR = { + readyState: 0, + + // Builds headers hashtable if needed + getResponseHeader: function( key ) { + var match; + if ( completed ) { + if ( !responseHeaders ) { + responseHeaders = {}; + while ( ( match = rheaders.exec( responseHeadersString ) ) ) { + responseHeaders[ match[ 1 ].toLowerCase() + " " ] = + ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] ) + .concat( match[ 2 ] ); + } + } + match = responseHeaders[ key.toLowerCase() + " " ]; + } + return match == null ? null : match.join( ", " ); + }, + + // Raw string + getAllResponseHeaders: function() { + return completed ? responseHeadersString : null; + }, + + // Caches the header + setRequestHeader: function( name, value ) { + if ( completed == null ) { + name = requestHeadersNames[ name.toLowerCase() ] = + requestHeadersNames[ name.toLowerCase() ] || name; + requestHeaders[ name ] = value; + } + return this; + }, + + // Overrides response content-type header + overrideMimeType: function( type ) { + if ( completed == null ) { + s.mimeType = type; + } + return this; + }, + + // Status-dependent callbacks + statusCode: function( map ) { + var code; + if ( map ) { + if ( completed ) { + + // Execute the appropriate callbacks + jqXHR.always( map[ jqXHR.status ] ); + } else { + + // Lazy-add the new callbacks in a way that preserves old ones + for ( code in map ) { + statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; + } + } + } + return this; + }, + + // Cancel the request + abort: function( statusText ) { + var finalText = statusText || strAbort; + if ( transport ) { + transport.abort( finalText ); + } + done( 0, finalText ); + return this; + } + }; + + // Attach deferreds + deferred.promise( jqXHR ); + + // Add protocol if not provided (prefilters might expect it) + // Handle falsy url in the settings object (#10093: consistency with old signature) + // We also use the url parameter if available + s.url = ( ( url || s.url || location.href ) + "" ) + .replace( rprotocol, location.protocol + "//" ); + + // Alias method option to type as per ticket #12004 + s.type = options.method || options.type || s.method || s.type; + + // Extract dataTypes list + s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; + + // A cross-domain request is in order when the origin doesn't match the current origin. + if ( s.crossDomain == null ) { + urlAnchor = document.createElement( "a" ); + + // Support: IE <=8 - 11, Edge 12 - 15 + // IE throws exception on accessing the href property if url is malformed, + // e.g. http://example.com:80x/ + try { + urlAnchor.href = s.url; + + // Support: IE <=8 - 11 only + // Anchor's host property isn't correctly set when s.url is relative + urlAnchor.href = urlAnchor.href; + s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== + urlAnchor.protocol + "//" + urlAnchor.host; + } catch ( e ) { + + // If there is an error parsing the URL, assume it is crossDomain, + // it can be rejected by the transport if it is invalid + s.crossDomain = true; + } + } + + // Convert data if not already a string + if ( s.data && s.processData && typeof s.data !== "string" ) { + s.data = jQuery.param( s.data, s.traditional ); + } + + // Apply prefilters + inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); + + // If request was aborted inside a prefilter, stop there + if ( completed ) { + return jqXHR; + } + + // We can fire global events as of now if asked to + // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) + fireGlobals = jQuery.event && s.global; + + // Watch for a new set of requests + if ( fireGlobals && jQuery.active++ === 0 ) { + jQuery.event.trigger( "ajaxStart" ); + } + + // Uppercase the type + s.type = s.type.toUpperCase(); + + // Determine if request has content + s.hasContent = !rnoContent.test( s.type ); + + // Save the URL in case we're toying with the If-Modified-Since + // and/or If-None-Match header later on + // Remove hash to simplify url manipulation + cacheURL = s.url.replace( rhash, "" ); + + // More options handling for requests with no content + if ( !s.hasContent ) { + + // Remember the hash so we can put it back + uncached = s.url.slice( cacheURL.length ); + + // If data is available and should be processed, append data to url + if ( s.data && ( s.processData || typeof s.data === "string" ) ) { + cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; + + // #9682: remove data so that it's not used in an eventual retry + delete s.data; + } + + // Add or update anti-cache param if needed + if ( s.cache === false ) { + cacheURL = cacheURL.replace( rantiCache, "$1" ); + uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) + + uncached; + } + + // Put hash and anti-cache on the URL that will be requested (gh-1732) + s.url = cacheURL + uncached; + + // Change '%20' to '+' if this is encoded form body content (gh-2658) + } else if ( s.data && s.processData && + ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { + s.data = s.data.replace( r20, "+" ); + } + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + if ( jQuery.lastModified[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); + } + if ( jQuery.etag[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); + } + } + + // Set the correct header, if data is being sent + if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { + jqXHR.setRequestHeader( "Content-Type", s.contentType ); + } + + // Set the Accepts header for the server, depending on the dataType + jqXHR.setRequestHeader( + "Accept", + s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? + s.accepts[ s.dataTypes[ 0 ] ] + + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : + s.accepts[ "*" ] + ); + + // Check for headers option + for ( i in s.headers ) { + jqXHR.setRequestHeader( i, s.headers[ i ] ); + } + + // Allow custom headers/mimetypes and early abort + if ( s.beforeSend && + ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { + + // Abort if not done already and return + return jqXHR.abort(); + } + + // Aborting is no longer a cancellation + strAbort = "abort"; + + // Install callbacks on deferreds + completeDeferred.add( s.complete ); + jqXHR.done( s.success ); + jqXHR.fail( s.error ); + + // Get transport + transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); + + // If no transport, we auto-abort + if ( !transport ) { + done( -1, "No Transport" ); + } else { + jqXHR.readyState = 1; + + // Send global event + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); + } + + // If request was aborted inside ajaxSend, stop there + if ( completed ) { + return jqXHR; + } + + // Timeout + if ( s.async && s.timeout > 0 ) { + timeoutTimer = window.setTimeout( function() { + jqXHR.abort( "timeout" ); + }, s.timeout ); + } + + try { + completed = false; + transport.send( requestHeaders, done ); + } catch ( e ) { + + // Rethrow post-completion exceptions + if ( completed ) { + throw e; + } + + // Propagate others as results + done( -1, e ); + } + } + + // Callback for when everything is done + function done( status, nativeStatusText, responses, headers ) { + var isSuccess, success, error, response, modified, + statusText = nativeStatusText; + + // Ignore repeat invocations + if ( completed ) { + return; + } + + completed = true; + + // Clear timeout if it exists + if ( timeoutTimer ) { + window.clearTimeout( timeoutTimer ); + } + + // Dereference transport for early garbage collection + // (no matter how long the jqXHR object will be used) + transport = undefined; + + // Cache response headers + responseHeadersString = headers || ""; + + // Set readyState + jqXHR.readyState = status > 0 ? 4 : 0; + + // Determine if successful + isSuccess = status >= 200 && status < 300 || status === 304; + + // Get response data + if ( responses ) { + response = ajaxHandleResponses( s, jqXHR, responses ); + } + + // Use a noop converter for missing script + if ( !isSuccess && jQuery.inArray( "script", s.dataTypes ) > -1 ) { + s.converters[ "text script" ] = function() {}; + } + + // Convert no matter what (that way responseXXX fields are always set) + response = ajaxConvert( s, response, jqXHR, isSuccess ); + + // If successful, handle type chaining + if ( isSuccess ) { + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + modified = jqXHR.getResponseHeader( "Last-Modified" ); + if ( modified ) { + jQuery.lastModified[ cacheURL ] = modified; + } + modified = jqXHR.getResponseHeader( "etag" ); + if ( modified ) { + jQuery.etag[ cacheURL ] = modified; + } + } + + // if no content + if ( status === 204 || s.type === "HEAD" ) { + statusText = "nocontent"; + + // if not modified + } else if ( status === 304 ) { + statusText = "notmodified"; + + // If we have data, let's convert it + } else { + statusText = response.state; + success = response.data; + error = response.error; + isSuccess = !error; + } + } else { + + // Extract error from statusText and normalize for non-aborts + error = statusText; + if ( status || !statusText ) { + statusText = "error"; + if ( status < 0 ) { + status = 0; + } + } + } + + // Set data for the fake xhr object + jqXHR.status = status; + jqXHR.statusText = ( nativeStatusText || statusText ) + ""; + + // Success/Error + if ( isSuccess ) { + deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); + } else { + deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); + } + + // Status-dependent callbacks + jqXHR.statusCode( statusCode ); + statusCode = undefined; + + if ( fireGlobals ) { + globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", + [ jqXHR, s, isSuccess ? success : error ] ); + } + + // Complete + completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); + + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); + + // Handle the global AJAX counter + if ( !( --jQuery.active ) ) { + jQuery.event.trigger( "ajaxStop" ); + } + } + } + + return jqXHR; + }, + + getJSON: function( url, data, callback ) { + return jQuery.get( url, data, callback, "json" ); + }, + + getScript: function( url, callback ) { + return jQuery.get( url, undefined, callback, "script" ); + } +} ); + +jQuery.each( [ "get", "post" ], function( _i, method ) { + jQuery[ method ] = function( url, data, callback, type ) { + + // Shift arguments if data argument was omitted + if ( isFunction( data ) ) { + type = type || callback; + callback = data; + data = undefined; + } + + // The url can be an options object (which then must have .url) + return jQuery.ajax( jQuery.extend( { + url: url, + type: method, + dataType: type, + data: data, + success: callback + }, jQuery.isPlainObject( url ) && url ) ); + }; +} ); + +jQuery.ajaxPrefilter( function( s ) { + var i; + for ( i in s.headers ) { + if ( i.toLowerCase() === "content-type" ) { + s.contentType = s.headers[ i ] || ""; + } + } +} ); + + +jQuery._evalUrl = function( url, options, doc ) { + return jQuery.ajax( { + url: url, + + // Make this explicit, since user can override this through ajaxSetup (#11264) + type: "GET", + dataType: "script", + cache: true, + async: false, + global: false, + + // Only evaluate the response if it is successful (gh-4126) + // dataFilter is not invoked for failure responses, so using it instead + // of the default converter is kludgy but it works. + converters: { + "text script": function() {} + }, + dataFilter: function( response ) { + jQuery.globalEval( response, options, doc ); + } + } ); +}; + + +jQuery.fn.extend( { + wrapAll: function( html ) { + var wrap; + + if ( this[ 0 ] ) { + if ( isFunction( html ) ) { + html = html.call( this[ 0 ] ); + } + + // The elements to wrap the target around + wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); + + if ( this[ 0 ].parentNode ) { + wrap.insertBefore( this[ 0 ] ); + } + + wrap.map( function() { + var elem = this; + + while ( elem.firstElementChild ) { + elem = elem.firstElementChild; + } + + return elem; + } ).append( this ); + } + + return this; + }, + + wrapInner: function( html ) { + if ( isFunction( html ) ) { + return this.each( function( i ) { + jQuery( this ).wrapInner( html.call( this, i ) ); + } ); + } + + return this.each( function() { + var self = jQuery( this ), + contents = self.contents(); + + if ( contents.length ) { + contents.wrapAll( html ); + + } else { + self.append( html ); + } + } ); + }, + + wrap: function( html ) { + var htmlIsFunction = isFunction( html ); + + return this.each( function( i ) { + jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); + } ); + }, + + unwrap: function( selector ) { + this.parent( selector ).not( "body" ).each( function() { + jQuery( this ).replaceWith( this.childNodes ); + } ); + return this; + } +} ); + + +jQuery.expr.pseudos.hidden = function( elem ) { + return !jQuery.expr.pseudos.visible( elem ); +}; +jQuery.expr.pseudos.visible = function( elem ) { + return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); +}; + + + + +jQuery.ajaxSettings.xhr = function() { + try { + return new window.XMLHttpRequest(); + } catch ( e ) {} +}; + +var xhrSuccessStatus = { + + // File protocol always yields status code 0, assume 200 + 0: 200, + + // Support: IE <=9 only + // #1450: sometimes IE returns 1223 when it should be 204 + 1223: 204 + }, + xhrSupported = jQuery.ajaxSettings.xhr(); + +support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); +support.ajax = xhrSupported = !!xhrSupported; + +jQuery.ajaxTransport( function( options ) { + var callback, errorCallback; + + // Cross domain only allowed if supported through XMLHttpRequest + if ( support.cors || xhrSupported && !options.crossDomain ) { + return { + send: function( headers, complete ) { + var i, + xhr = options.xhr(); + + xhr.open( + options.type, + options.url, + options.async, + options.username, + options.password + ); + + // Apply custom fields if provided + if ( options.xhrFields ) { + for ( i in options.xhrFields ) { + xhr[ i ] = options.xhrFields[ i ]; + } + } + + // Override mime type if needed + if ( options.mimeType && xhr.overrideMimeType ) { + xhr.overrideMimeType( options.mimeType ); + } + + // X-Requested-With header + // For cross-domain requests, seeing as conditions for a preflight are + // akin to a jigsaw puzzle, we simply never set it to be sure. + // (it can always be set on a per-request basis or even using ajaxSetup) + // For same-domain requests, won't change header if already provided. + if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { + headers[ "X-Requested-With" ] = "XMLHttpRequest"; + } + + // Set headers + for ( i in headers ) { + xhr.setRequestHeader( i, headers[ i ] ); + } + + // Callback + callback = function( type ) { + return function() { + if ( callback ) { + callback = errorCallback = xhr.onload = + xhr.onerror = xhr.onabort = xhr.ontimeout = + xhr.onreadystatechange = null; + + if ( type === "abort" ) { + xhr.abort(); + } else if ( type === "error" ) { + + // Support: IE <=9 only + // On a manual native abort, IE9 throws + // errors on any property access that is not readyState + if ( typeof xhr.status !== "number" ) { + complete( 0, "error" ); + } else { + complete( + + // File: protocol always yields status 0; see #8605, #14207 + xhr.status, + xhr.statusText + ); + } + } else { + complete( + xhrSuccessStatus[ xhr.status ] || xhr.status, + xhr.statusText, + + // Support: IE <=9 only + // IE9 has no XHR2 but throws on binary (trac-11426) + // For XHR2 non-text, let the caller handle it (gh-2498) + ( xhr.responseType || "text" ) !== "text" || + typeof xhr.responseText !== "string" ? + { binary: xhr.response } : + { text: xhr.responseText }, + xhr.getAllResponseHeaders() + ); + } + } + }; + }; + + // Listen to events + xhr.onload = callback(); + errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); + + // Support: IE 9 only + // Use onreadystatechange to replace onabort + // to handle uncaught aborts + if ( xhr.onabort !== undefined ) { + xhr.onabort = errorCallback; + } else { + xhr.onreadystatechange = function() { + + // Check readyState before timeout as it changes + if ( xhr.readyState === 4 ) { + + // Allow onerror to be called first, + // but that will not handle a native abort + // Also, save errorCallback to a variable + // as xhr.onerror cannot be accessed + window.setTimeout( function() { + if ( callback ) { + errorCallback(); + } + } ); + } + }; + } + + // Create the abort callback + callback = callback( "abort" ); + + try { + + // Do send the request (this may raise an exception) + xhr.send( options.hasContent && options.data || null ); + } catch ( e ) { + + // #14683: Only rethrow if this hasn't been notified as an error yet + if ( callback ) { + throw e; + } + } + }, + + abort: function() { + if ( callback ) { + callback(); + } + } + }; + } +} ); + + + + +// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) +jQuery.ajaxPrefilter( function( s ) { + if ( s.crossDomain ) { + s.contents.script = false; + } +} ); + +// Install script dataType +jQuery.ajaxSetup( { + accepts: { + script: "text/javascript, application/javascript, " + + "application/ecmascript, application/x-ecmascript" + }, + contents: { + script: /\b(?:java|ecma)script\b/ + }, + converters: { + "text script": function( text ) { + jQuery.globalEval( text ); + return text; + } + } +} ); + +// Handle cache's special case and crossDomain +jQuery.ajaxPrefilter( "script", function( s ) { + if ( s.cache === undefined ) { + s.cache = false; + } + if ( s.crossDomain ) { + s.type = "GET"; + } +} ); + +// Bind script tag hack transport +jQuery.ajaxTransport( "script", function( s ) { + + // This transport only deals with cross domain or forced-by-attrs requests + if ( s.crossDomain || s.scriptAttrs ) { + var script, callback; + return { + send: function( _, complete ) { + script = jQuery( " +{% endmacro %} diff --git a/_static/scripts/pydata-sphinx-theme.js b/_static/scripts/pydata-sphinx-theme.js new file mode 100644 index 00000000..0e00c4ca --- /dev/null +++ b/_static/scripts/pydata-sphinx-theme.js @@ -0,0 +1,32 @@ +!function(t){var e={};function n(i){if(e[i])return e[i].exports;var o=e[i]={i:i,l:!1,exports:{}};return t[i].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=t,n.c=e,n.d=function(t,e,i){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:i})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var o in t)n.d(i,o,function(e){return t[e]}.bind(null,o));return i},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=2)}([function(t,e){t.exports=jQuery},function(t,e,n){"use strict";n.r(e),function(t){ +/**! + * @fileOverview Kickass library to create and place poppers near their reference elements. + * @version 1.16.1 + * @license + * Copyright (c) 2016 Federico Zivolo and contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +var n="undefined"!=typeof window&&"undefined"!=typeof document&&"undefined"!=typeof navigator,i=function(){for(var t=["Edge","Trident","Firefox"],e=0;e=0)return 1;return 0}();var o=n&&window.Promise?function(t){var e=!1;return function(){e||(e=!0,window.Promise.resolve().then((function(){e=!1,t()})))}}:function(t){var e=!1;return function(){e||(e=!0,setTimeout((function(){e=!1,t()}),i))}};function r(t){return t&&"[object Function]"==={}.toString.call(t)}function a(t,e){if(1!==t.nodeType)return[];var n=t.ownerDocument.defaultView.getComputedStyle(t,null);return e?n[e]:n}function s(t){return"HTML"===t.nodeName?t:t.parentNode||t.host}function l(t){if(!t)return document.body;switch(t.nodeName){case"HTML":case"BODY":return t.ownerDocument.body;case"#document":return t.body}var e=a(t),n=e.overflow,i=e.overflowX,o=e.overflowY;return/(auto|scroll|overlay)/.test(n+o+i)?t:l(s(t))}function u(t){return t&&t.referenceNode?t.referenceNode:t}var f=n&&!(!window.MSInputMethodContext||!document.documentMode),d=n&&/MSIE 10/.test(navigator.userAgent);function c(t){return 11===t?f:10===t?d:f||d}function h(t){if(!t)return document.documentElement;for(var e=c(10)?document.body:null,n=t.offsetParent||null;n===e&&t.nextElementSibling;)n=(t=t.nextElementSibling).offsetParent;var i=n&&n.nodeName;return i&&"BODY"!==i&&"HTML"!==i?-1!==["TH","TD","TABLE"].indexOf(n.nodeName)&&"static"===a(n,"position")?h(n):n:t?t.ownerDocument.documentElement:document.documentElement}function p(t){return null!==t.parentNode?p(t.parentNode):t}function m(t,e){if(!(t&&t.nodeType&&e&&e.nodeType))return document.documentElement;var n=t.compareDocumentPosition(e)&Node.DOCUMENT_POSITION_FOLLOWING,i=n?t:e,o=n?e:t,r=document.createRange();r.setStart(i,0),r.setEnd(o,0);var a,s,l=r.commonAncestorContainer;if(t!==l&&e!==l||i.contains(o))return"BODY"===(s=(a=l).nodeName)||"HTML"!==s&&h(a.firstElementChild)!==a?h(l):l;var u=p(t);return u.host?m(u.host,e):m(t,p(e).host)}function g(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"top",n="top"===e?"scrollTop":"scrollLeft",i=t.nodeName;if("BODY"===i||"HTML"===i){var o=t.ownerDocument.documentElement,r=t.ownerDocument.scrollingElement||o;return r[n]}return t[n]}function v(t,e){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],i=g(e,"top"),o=g(e,"left"),r=n?-1:1;return t.top+=i*r,t.bottom+=i*r,t.left+=o*r,t.right+=o*r,t}function _(t,e){var n="x"===e?"Left":"Top",i="Left"===n?"Right":"Bottom";return parseFloat(t["border"+n+"Width"])+parseFloat(t["border"+i+"Width"])}function b(t,e,n,i){return Math.max(e["offset"+t],e["scroll"+t],n["client"+t],n["offset"+t],n["scroll"+t],c(10)?parseInt(n["offset"+t])+parseInt(i["margin"+("Height"===t?"Top":"Left")])+parseInt(i["margin"+("Height"===t?"Bottom":"Right")]):0)}function y(t){var e=t.body,n=t.documentElement,i=c(10)&&getComputedStyle(n);return{height:b("Height",e,n,i),width:b("Width",e,n,i)}}var w=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")},E=function(){function t(t,e){for(var n=0;n2&&void 0!==arguments[2]&&arguments[2],i=c(10),o="HTML"===e.nodeName,r=N(t),s=N(e),u=l(t),f=a(e),d=parseFloat(f.borderTopWidth),h=parseFloat(f.borderLeftWidth);n&&o&&(s.top=Math.max(s.top,0),s.left=Math.max(s.left,0));var p=S({top:r.top-s.top-d,left:r.left-s.left-h,width:r.width,height:r.height});if(p.marginTop=0,p.marginLeft=0,!i&&o){var m=parseFloat(f.marginTop),g=parseFloat(f.marginLeft);p.top-=d-m,p.bottom-=d-m,p.left-=h-g,p.right-=h-g,p.marginTop=m,p.marginLeft=g}return(i&&!n?e.contains(u):e===u&&"BODY"!==u.nodeName)&&(p=v(p,e)),p}function k(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=t.ownerDocument.documentElement,i=D(t,n),o=Math.max(n.clientWidth,window.innerWidth||0),r=Math.max(n.clientHeight,window.innerHeight||0),a=e?0:g(n),s=e?0:g(n,"left"),l={top:a-i.top+i.marginTop,left:s-i.left+i.marginLeft,width:o,height:r};return S(l)}function A(t){var e=t.nodeName;if("BODY"===e||"HTML"===e)return!1;if("fixed"===a(t,"position"))return!0;var n=s(t);return!!n&&A(n)}function I(t){if(!t||!t.parentElement||c())return document.documentElement;for(var e=t.parentElement;e&&"none"===a(e,"transform");)e=e.parentElement;return e||document.documentElement}function O(t,e,n,i){var o=arguments.length>4&&void 0!==arguments[4]&&arguments[4],r={top:0,left:0},a=o?I(t):m(t,u(e));if("viewport"===i)r=k(a,o);else{var f=void 0;"scrollParent"===i?"BODY"===(f=l(s(e))).nodeName&&(f=t.ownerDocument.documentElement):f="window"===i?t.ownerDocument.documentElement:i;var d=D(f,a,o);if("HTML"!==f.nodeName||A(a))r=d;else{var c=y(t.ownerDocument),h=c.height,p=c.width;r.top+=d.top-d.marginTop,r.bottom=h+d.top,r.left+=d.left-d.marginLeft,r.right=p+d.left}}var g="number"==typeof(n=n||0);return r.left+=g?n:n.left||0,r.top+=g?n:n.top||0,r.right-=g?n:n.right||0,r.bottom-=g?n:n.bottom||0,r}function x(t){return t.width*t.height}function j(t,e,n,i,o){var r=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0;if(-1===t.indexOf("auto"))return t;var a=O(n,i,r,o),s={top:{width:a.width,height:e.top-a.top},right:{width:a.right-e.right,height:a.height},bottom:{width:a.width,height:a.bottom-e.bottom},left:{width:e.left-a.left,height:a.height}},l=Object.keys(s).map((function(t){return C({key:t},s[t],{area:x(s[t])})})).sort((function(t,e){return e.area-t.area})),u=l.filter((function(t){var e=t.width,i=t.height;return e>=n.clientWidth&&i>=n.clientHeight})),f=u.length>0?u[0].key:l[0].key,d=t.split("-")[1];return f+(d?"-"+d:"")}function L(t,e,n){var i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,o=i?I(e):m(e,u(n));return D(n,o,i)}function P(t){var e=t.ownerDocument.defaultView.getComputedStyle(t),n=parseFloat(e.marginTop||0)+parseFloat(e.marginBottom||0),i=parseFloat(e.marginLeft||0)+parseFloat(e.marginRight||0);return{width:t.offsetWidth+i,height:t.offsetHeight+n}}function F(t){var e={left:"right",right:"left",bottom:"top",top:"bottom"};return t.replace(/left|right|bottom|top/g,(function(t){return e[t]}))}function R(t,e,n){n=n.split("-")[0];var i=P(t),o={width:i.width,height:i.height},r=-1!==["right","left"].indexOf(n),a=r?"top":"left",s=r?"left":"top",l=r?"height":"width",u=r?"width":"height";return o[a]=e[a]+e[l]/2-i[l]/2,o[s]=n===s?e[s]-i[u]:e[F(s)],o}function M(t,e){return Array.prototype.find?t.find(e):t.filter(e)[0]}function B(t,e,n){return(void 0===n?t:t.slice(0,function(t,e,n){if(Array.prototype.findIndex)return t.findIndex((function(t){return t[e]===n}));var i=M(t,(function(t){return t[e]===n}));return t.indexOf(i)}(t,"name",n))).forEach((function(t){t.function&&console.warn("`modifier.function` is deprecated, use `modifier.fn`!");var n=t.function||t.fn;t.enabled&&r(n)&&(e.offsets.popper=S(e.offsets.popper),e.offsets.reference=S(e.offsets.reference),e=n(e,t))})),e}function H(){if(!this.state.isDestroyed){var t={instance:this,styles:{},arrowStyles:{},attributes:{},flipped:!1,offsets:{}};t.offsets.reference=L(this.state,this.popper,this.reference,this.options.positionFixed),t.placement=j(this.options.placement,t.offsets.reference,this.popper,this.reference,this.options.modifiers.flip.boundariesElement,this.options.modifiers.flip.padding),t.originalPlacement=t.placement,t.positionFixed=this.options.positionFixed,t.offsets.popper=R(this.popper,t.offsets.reference,t.placement),t.offsets.popper.position=this.options.positionFixed?"fixed":"absolute",t=B(this.modifiers,t),this.state.isCreated?this.options.onUpdate(t):(this.state.isCreated=!0,this.options.onCreate(t))}}function q(t,e){return t.some((function(t){var n=t.name;return t.enabled&&n===e}))}function Q(t){for(var e=[!1,"ms","Webkit","Moz","O"],n=t.charAt(0).toUpperCase()+t.slice(1),i=0;i1&&void 0!==arguments[1]&&arguments[1],n=Z.indexOf(t),i=Z.slice(n+1).concat(Z.slice(0,n));return e?i.reverse():i}var et="flip",nt="clockwise",it="counterclockwise";function ot(t,e,n,i){var o=[0,0],r=-1!==["right","left"].indexOf(i),a=t.split(/(\+|\-)/).map((function(t){return t.trim()})),s=a.indexOf(M(a,(function(t){return-1!==t.search(/,|\s/)})));a[s]&&-1===a[s].indexOf(",")&&console.warn("Offsets separated by white space(s) are deprecated, use a comma (,) instead.");var l=/\s*,\s*|\s+/,u=-1!==s?[a.slice(0,s).concat([a[s].split(l)[0]]),[a[s].split(l)[1]].concat(a.slice(s+1))]:[a];return(u=u.map((function(t,i){var o=(1===i?!r:r)?"height":"width",a=!1;return t.reduce((function(t,e){return""===t[t.length-1]&&-1!==["+","-"].indexOf(e)?(t[t.length-1]=e,a=!0,t):a?(t[t.length-1]+=e,a=!1,t):t.concat(e)}),[]).map((function(t){return function(t,e,n,i){var o=t.match(/((?:\-|\+)?\d*\.?\d*)(.*)/),r=+o[1],a=o[2];if(!r)return t;if(0===a.indexOf("%")){var s=void 0;switch(a){case"%p":s=n;break;case"%":case"%r":default:s=i}return S(s)[e]/100*r}if("vh"===a||"vw"===a){return("vh"===a?Math.max(document.documentElement.clientHeight,window.innerHeight||0):Math.max(document.documentElement.clientWidth,window.innerWidth||0))/100*r}return r}(t,o,e,n)}))}))).forEach((function(t,e){t.forEach((function(n,i){K(n)&&(o[e]+=n*("-"===t[i-1]?-1:1))}))})),o}var rt={placement:"bottom",positionFixed:!1,eventsEnabled:!0,removeOnDestroy:!1,onCreate:function(){},onUpdate:function(){},modifiers:{shift:{order:100,enabled:!0,fn:function(t){var e=t.placement,n=e.split("-")[0],i=e.split("-")[1];if(i){var o=t.offsets,r=o.reference,a=o.popper,s=-1!==["bottom","top"].indexOf(n),l=s?"left":"top",u=s?"width":"height",f={start:T({},l,r[l]),end:T({},l,r[l]+r[u]-a[u])};t.offsets.popper=C({},a,f[i])}return t}},offset:{order:200,enabled:!0,fn:function(t,e){var n=e.offset,i=t.placement,o=t.offsets,r=o.popper,a=o.reference,s=i.split("-")[0],l=void 0;return l=K(+n)?[+n,0]:ot(n,r,a,s),"left"===s?(r.top+=l[0],r.left-=l[1]):"right"===s?(r.top+=l[0],r.left+=l[1]):"top"===s?(r.left+=l[0],r.top-=l[1]):"bottom"===s&&(r.left+=l[0],r.top+=l[1]),t.popper=r,t},offset:0},preventOverflow:{order:300,enabled:!0,fn:function(t,e){var n=e.boundariesElement||h(t.instance.popper);t.instance.reference===n&&(n=h(n));var i=Q("transform"),o=t.instance.popper.style,r=o.top,a=o.left,s=o[i];o.top="",o.left="",o[i]="";var l=O(t.instance.popper,t.instance.reference,e.padding,n,t.positionFixed);o.top=r,o.left=a,o[i]=s,e.boundaries=l;var u=e.priority,f=t.offsets.popper,d={primary:function(t){var n=f[t];return f[t]l[t]&&!e.escapeWithReference&&(i=Math.min(f[n],l[t]-("right"===t?f.width:f.height))),T({},n,i)}};return u.forEach((function(t){var e=-1!==["left","top"].indexOf(t)?"primary":"secondary";f=C({},f,d[e](t))})),t.offsets.popper=f,t},priority:["left","right","top","bottom"],padding:5,boundariesElement:"scrollParent"},keepTogether:{order:400,enabled:!0,fn:function(t){var e=t.offsets,n=e.popper,i=e.reference,o=t.placement.split("-")[0],r=Math.floor,a=-1!==["top","bottom"].indexOf(o),s=a?"right":"bottom",l=a?"left":"top",u=a?"width":"height";return n[s]r(i[s])&&(t.offsets.popper[l]=r(i[s])),t}},arrow:{order:500,enabled:!0,fn:function(t,e){var n;if(!G(t.instance.modifiers,"arrow","keepTogether"))return t;var i=e.element;if("string"==typeof i){if(!(i=t.instance.popper.querySelector(i)))return t}else if(!t.instance.popper.contains(i))return console.warn("WARNING: `arrow.element` must be child of its popper element!"),t;var o=t.placement.split("-")[0],r=t.offsets,s=r.popper,l=r.reference,u=-1!==["left","right"].indexOf(o),f=u?"height":"width",d=u?"Top":"Left",c=d.toLowerCase(),h=u?"left":"top",p=u?"bottom":"right",m=P(i)[f];l[p]-ms[p]&&(t.offsets.popper[c]+=l[c]+m-s[p]),t.offsets.popper=S(t.offsets.popper);var g=l[c]+l[f]/2-m/2,v=a(t.instance.popper),_=parseFloat(v["margin"+d]),b=parseFloat(v["border"+d+"Width"]),y=g-t.offsets.popper[c]-_-b;return y=Math.max(Math.min(s[f]-m,y),0),t.arrowElement=i,t.offsets.arrow=(T(n={},c,Math.round(y)),T(n,h,""),n),t},element:"[x-arrow]"},flip:{order:600,enabled:!0,fn:function(t,e){if(q(t.instance.modifiers,"inner"))return t;if(t.flipped&&t.placement===t.originalPlacement)return t;var n=O(t.instance.popper,t.instance.reference,e.padding,e.boundariesElement,t.positionFixed),i=t.placement.split("-")[0],o=F(i),r=t.placement.split("-")[1]||"",a=[];switch(e.behavior){case et:a=[i,o];break;case nt:a=tt(i);break;case it:a=tt(i,!0);break;default:a=e.behavior}return a.forEach((function(s,l){if(i!==s||a.length===l+1)return t;i=t.placement.split("-")[0],o=F(i);var u=t.offsets.popper,f=t.offsets.reference,d=Math.floor,c="left"===i&&d(u.right)>d(f.left)||"right"===i&&d(u.left)d(f.top)||"bottom"===i&&d(u.top)d(n.right),m=d(u.top)d(n.bottom),v="left"===i&&h||"right"===i&&p||"top"===i&&m||"bottom"===i&&g,_=-1!==["top","bottom"].indexOf(i),b=!!e.flipVariations&&(_&&"start"===r&&h||_&&"end"===r&&p||!_&&"start"===r&&m||!_&&"end"===r&&g),y=!!e.flipVariationsByContent&&(_&&"start"===r&&p||_&&"end"===r&&h||!_&&"start"===r&&g||!_&&"end"===r&&m),w=b||y;(c||v||w)&&(t.flipped=!0,(c||v)&&(i=a[l+1]),w&&(r=function(t){return"end"===t?"start":"start"===t?"end":t}(r)),t.placement=i+(r?"-"+r:""),t.offsets.popper=C({},t.offsets.popper,R(t.instance.popper,t.offsets.reference,t.placement)),t=B(t.instance.modifiers,t,"flip"))})),t},behavior:"flip",padding:5,boundariesElement:"viewport",flipVariations:!1,flipVariationsByContent:!1},inner:{order:700,enabled:!1,fn:function(t){var e=t.placement,n=e.split("-")[0],i=t.offsets,o=i.popper,r=i.reference,a=-1!==["left","right"].indexOf(n),s=-1===["top","left"].indexOf(n);return o[a?"left":"top"]=r[n]-(s?o[a?"width":"height"]:0),t.placement=F(e),t.offsets.popper=S(o),t}},hide:{order:800,enabled:!0,fn:function(t){if(!G(t.instance.modifiers,"hide","preventOverflow"))return t;var e=t.offsets.reference,n=M(t.instance.modifiers,(function(t){return"preventOverflow"===t.name})).boundaries;if(e.bottomn.right||e.top>n.bottom||e.right2&&void 0!==arguments[2]?arguments[2]:{};w(this,t),this.scheduleUpdate=function(){return requestAnimationFrame(i.update)},this.update=o(this.update.bind(this)),this.options=C({},t.Defaults,a),this.state={isDestroyed:!1,isCreated:!1,scrollParents:[]},this.reference=e&&e.jquery?e[0]:e,this.popper=n&&n.jquery?n[0]:n,this.options.modifiers={},Object.keys(C({},t.Defaults.modifiers,a.modifiers)).forEach((function(e){i.options.modifiers[e]=C({},t.Defaults.modifiers[e]||{},a.modifiers?a.modifiers[e]:{})})),this.modifiers=Object.keys(this.options.modifiers).map((function(t){return C({name:t},i.options.modifiers[t])})).sort((function(t,e){return t.order-e.order})),this.modifiers.forEach((function(t){t.enabled&&r(t.onLoad)&&t.onLoad(i.reference,i.popper,i.options,t,i.state)})),this.update();var s=this.options.eventsEnabled;s&&this.enableEventListeners(),this.state.eventsEnabled=s}return E(t,[{key:"update",value:function(){return H.call(this)}},{key:"destroy",value:function(){return W.call(this)}},{key:"enableEventListeners",value:function(){return Y.call(this)}},{key:"disableEventListeners",value:function(){return z.call(this)}}]),t}();at.Utils=("undefined"!=typeof window?window:t).PopperUtils,at.placements=J,at.Defaults=rt,e.default=at}.call(this,n(4))},function(t,e,n){t.exports=n(5)},function(t,e,n){ +/*! + * Bootstrap v4.6.1 (https://getbootstrap.com/) + * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */ +!function(t,e,n){"use strict";function i(t){return t&&"object"==typeof t&&"default"in t?t:{default:t}}var o=i(e),r=i(n);function a(t,e){for(var n=0;n=4)throw new Error("Bootstrap's JavaScript requires at least jQuery v1.9.1 but less than v4.0.0")}};d.jQueryDetection(),o.default.fn.emulateTransitionEnd=f,o.default.event.special[d.TRANSITION_END]={bindType:"transitionend",delegateType:"transitionend",handle:function(t){if(o.default(t.target).is(this))return t.handleObj.handler.apply(this,arguments)}};var c=o.default.fn.alert,h=function(){function t(t){this._element=t}var e=t.prototype;return e.close=function(t){var e=this._element;t&&(e=this._getRootElement(t)),this._triggerCloseEvent(e).isDefaultPrevented()||this._removeElement(e)},e.dispose=function(){o.default.removeData(this._element,"bs.alert"),this._element=null},e._getRootElement=function(t){var e=d.getSelectorFromElement(t),n=!1;return e&&(n=document.querySelector(e)),n||(n=o.default(t).closest(".alert")[0]),n},e._triggerCloseEvent=function(t){var e=o.default.Event("close.bs.alert");return o.default(t).trigger(e),e},e._removeElement=function(t){var e=this;if(o.default(t).removeClass("show"),o.default(t).hasClass("fade")){var n=d.getTransitionDurationFromElement(t);o.default(t).one(d.TRANSITION_END,(function(n){return e._destroyElement(t,n)})).emulateTransitionEnd(n)}else this._destroyElement(t)},e._destroyElement=function(t){o.default(t).detach().trigger("closed.bs.alert").remove()},t._jQueryInterface=function(e){return this.each((function(){var n=o.default(this),i=n.data("bs.alert");i||(i=new t(this),n.data("bs.alert",i)),"close"===e&&i[e](this)}))},t._handleDismiss=function(t){return function(e){e&&e.preventDefault(),t.close(this)}},s(t,null,[{key:"VERSION",get:function(){return"4.6.1"}}]),t}();o.default(document).on("click.bs.alert.data-api",'[data-dismiss="alert"]',h._handleDismiss(new h)),o.default.fn.alert=h._jQueryInterface,o.default.fn.alert.Constructor=h,o.default.fn.alert.noConflict=function(){return o.default.fn.alert=c,h._jQueryInterface};var p=o.default.fn.button,m=function(){function t(t){this._element=t,this.shouldAvoidTriggerChange=!1}var e=t.prototype;return e.toggle=function(){var t=!0,e=!0,n=o.default(this._element).closest('[data-toggle="buttons"]')[0];if(n){var i=this._element.querySelector('input:not([type="hidden"])');if(i){if("radio"===i.type)if(i.checked&&this._element.classList.contains("active"))t=!1;else{var r=n.querySelector(".active");r&&o.default(r).removeClass("active")}t&&("checkbox"!==i.type&&"radio"!==i.type||(i.checked=!this._element.classList.contains("active")),this.shouldAvoidTriggerChange||o.default(i).trigger("change")),i.focus(),e=!1}}this._element.hasAttribute("disabled")||this._element.classList.contains("disabled")||(e&&this._element.setAttribute("aria-pressed",!this._element.classList.contains("active")),t&&o.default(this._element).toggleClass("active"))},e.dispose=function(){o.default.removeData(this._element,"bs.button"),this._element=null},t._jQueryInterface=function(e,n){return this.each((function(){var i=o.default(this),r=i.data("bs.button");r||(r=new t(this),i.data("bs.button",r)),r.shouldAvoidTriggerChange=n,"toggle"===e&&r[e]()}))},s(t,null,[{key:"VERSION",get:function(){return"4.6.1"}}]),t}();o.default(document).on("click.bs.button.data-api",'[data-toggle^="button"]',(function(t){var e=t.target,n=e;if(o.default(e).hasClass("btn")||(e=o.default(e).closest(".btn")[0]),!e||e.hasAttribute("disabled")||e.classList.contains("disabled"))t.preventDefault();else{var i=e.querySelector('input:not([type="hidden"])');if(i&&(i.hasAttribute("disabled")||i.classList.contains("disabled")))return void t.preventDefault();"INPUT"!==n.tagName&&"LABEL"===e.tagName||m._jQueryInterface.call(o.default(e),"toggle","INPUT"===n.tagName)}})).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',(function(t){var e=o.default(t.target).closest(".btn")[0];o.default(e).toggleClass("focus",/^focus(in)?$/.test(t.type))})),o.default(window).on("load.bs.button.data-api",(function(){for(var t=[].slice.call(document.querySelectorAll('[data-toggle="buttons"] .btn')),e=0,n=t.length;e0,this._pointerEvent=Boolean(window.PointerEvent||window.MSPointerEvent),this._addEventListeners()}var e=t.prototype;return e.next=function(){this._isSliding||this._slide("next")},e.nextWhenVisible=function(){var t=o.default(this._element);!document.hidden&&t.is(":visible")&&"hidden"!==t.css("visibility")&&this.next()},e.prev=function(){this._isSliding||this._slide("prev")},e.pause=function(t){t||(this._isPaused=!0),this._element.querySelector(".carousel-item-next, .carousel-item-prev")&&(d.triggerTransitionEnd(this._element),this.cycle(!0)),clearInterval(this._interval),this._interval=null},e.cycle=function(t){t||(this._isPaused=!1),this._interval&&(clearInterval(this._interval),this._interval=null),this._config.interval&&!this._isPaused&&(this._updateInterval(),this._interval=setInterval((document.visibilityState?this.nextWhenVisible:this.next).bind(this),this._config.interval))},e.to=function(t){var e=this;this._activeElement=this._element.querySelector(".active.carousel-item");var n=this._getItemIndex(this._activeElement);if(!(t>this._items.length-1||t<0))if(this._isSliding)o.default(this._element).one("slid.bs.carousel",(function(){return e.to(t)}));else{if(n===t)return this.pause(),void this.cycle();var i=t>n?"next":"prev";this._slide(i,this._items[t])}},e.dispose=function(){o.default(this._element).off(v),o.default.removeData(this._element,"bs.carousel"),this._items=null,this._config=null,this._element=null,this._interval=null,this._isPaused=null,this._isSliding=null,this._activeElement=null,this._indicatorsElement=null},e._getConfig=function(t){return t=l({},b,t),d.typeCheckConfig(g,t,y),t},e._handleSwipe=function(){var t=Math.abs(this.touchDeltaX);if(!(t<=40)){var e=t/this.touchDeltaX;this.touchDeltaX=0,e>0&&this.prev(),e<0&&this.next()}},e._addEventListeners=function(){var t=this;this._config.keyboard&&o.default(this._element).on("keydown.bs.carousel",(function(e){return t._keydown(e)})),"hover"===this._config.pause&&o.default(this._element).on("mouseenter.bs.carousel",(function(e){return t.pause(e)})).on("mouseleave.bs.carousel",(function(e){return t.cycle(e)})),this._config.touch&&this._addTouchEventListeners()},e._addTouchEventListeners=function(){var t=this;if(this._touchSupported){var e=function(e){t._pointerEvent&&w[e.originalEvent.pointerType.toUpperCase()]?t.touchStartX=e.originalEvent.clientX:t._pointerEvent||(t.touchStartX=e.originalEvent.touches[0].clientX)},n=function(e){t._pointerEvent&&w[e.originalEvent.pointerType.toUpperCase()]&&(t.touchDeltaX=e.originalEvent.clientX-t.touchStartX),t._handleSwipe(),"hover"===t._config.pause&&(t.pause(),t.touchTimeout&&clearTimeout(t.touchTimeout),t.touchTimeout=setTimeout((function(e){return t.cycle(e)}),500+t._config.interval))};o.default(this._element.querySelectorAll(".carousel-item img")).on("dragstart.bs.carousel",(function(t){return t.preventDefault()})),this._pointerEvent?(o.default(this._element).on("pointerdown.bs.carousel",(function(t){return e(t)})),o.default(this._element).on("pointerup.bs.carousel",(function(t){return n(t)})),this._element.classList.add("pointer-event")):(o.default(this._element).on("touchstart.bs.carousel",(function(t){return e(t)})),o.default(this._element).on("touchmove.bs.carousel",(function(e){return function(e){t.touchDeltaX=e.originalEvent.touches&&e.originalEvent.touches.length>1?0:e.originalEvent.touches[0].clientX-t.touchStartX}(e)})),o.default(this._element).on("touchend.bs.carousel",(function(t){return n(t)})))}},e._keydown=function(t){if(!/input|textarea/i.test(t.target.tagName))switch(t.which){case 37:t.preventDefault(),this.prev();break;case 39:t.preventDefault(),this.next()}},e._getItemIndex=function(t){return this._items=t&&t.parentNode?[].slice.call(t.parentNode.querySelectorAll(".carousel-item")):[],this._items.indexOf(t)},e._getItemByDirection=function(t,e){var n="next"===t,i="prev"===t,o=this._getItemIndex(e),r=this._items.length-1;if((i&&0===o||n&&o===r)&&!this._config.wrap)return e;var a=(o+("prev"===t?-1:1))%this._items.length;return-1===a?this._items[this._items.length-1]:this._items[a]},e._triggerSlideEvent=function(t,e){var n=this._getItemIndex(t),i=this._getItemIndex(this._element.querySelector(".active.carousel-item")),r=o.default.Event("slide.bs.carousel",{relatedTarget:t,direction:e,from:i,to:n});return o.default(this._element).trigger(r),r},e._setActiveIndicatorElement=function(t){if(this._indicatorsElement){var e=[].slice.call(this._indicatorsElement.querySelectorAll(".active"));o.default(e).removeClass("active");var n=this._indicatorsElement.children[this._getItemIndex(t)];n&&o.default(n).addClass("active")}},e._updateInterval=function(){var t=this._activeElement||this._element.querySelector(".active.carousel-item");if(t){var e=parseInt(t.getAttribute("data-interval"),10);e?(this._config.defaultInterval=this._config.defaultInterval||this._config.interval,this._config.interval=e):this._config.interval=this._config.defaultInterval||this._config.interval}},e._slide=function(t,e){var n,i,r,a=this,s=this._element.querySelector(".active.carousel-item"),l=this._getItemIndex(s),u=e||s&&this._getItemByDirection(t,s),f=this._getItemIndex(u),c=Boolean(this._interval);if("next"===t?(n="carousel-item-left",i="carousel-item-next",r="left"):(n="carousel-item-right",i="carousel-item-prev",r="right"),u&&o.default(u).hasClass("active"))this._isSliding=!1;else if(!this._triggerSlideEvent(u,r).isDefaultPrevented()&&s&&u){this._isSliding=!0,c&&this.pause(),this._setActiveIndicatorElement(u),this._activeElement=u;var h=o.default.Event("slid.bs.carousel",{relatedTarget:u,direction:r,from:l,to:f});if(o.default(this._element).hasClass("slide")){o.default(u).addClass(i),d.reflow(u),o.default(s).addClass(n),o.default(u).addClass(n);var p=d.getTransitionDurationFromElement(s);o.default(s).one(d.TRANSITION_END,(function(){o.default(u).removeClass(n+" "+i).addClass("active"),o.default(s).removeClass("active "+i+" "+n),a._isSliding=!1,setTimeout((function(){return o.default(a._element).trigger(h)}),0)})).emulateTransitionEnd(p)}else o.default(s).removeClass("active"),o.default(u).addClass("active"),this._isSliding=!1,o.default(this._element).trigger(h);c&&this.cycle()}},t._jQueryInterface=function(e){return this.each((function(){var n=o.default(this).data("bs.carousel"),i=l({},b,o.default(this).data());"object"==typeof e&&(i=l({},i,e));var r="string"==typeof e?e:i.slide;if(n||(n=new t(this,i),o.default(this).data("bs.carousel",n)),"number"==typeof e)n.to(e);else if("string"==typeof r){if(void 0===n[r])throw new TypeError('No method named "'+r+'"');n[r]()}else i.interval&&i.ride&&(n.pause(),n.cycle())}))},t._dataApiClickHandler=function(e){var n=d.getSelectorFromElement(this);if(n){var i=o.default(n)[0];if(i&&o.default(i).hasClass("carousel")){var r=l({},o.default(i).data(),o.default(this).data()),a=this.getAttribute("data-slide-to");a&&(r.interval=!1),t._jQueryInterface.call(o.default(i),r),a&&o.default(i).data("bs.carousel").to(a),e.preventDefault()}}},s(t,null,[{key:"VERSION",get:function(){return"4.6.1"}},{key:"Default",get:function(){return b}}]),t}();o.default(document).on("click.bs.carousel.data-api","[data-slide], [data-slide-to]",E._dataApiClickHandler),o.default(window).on("load.bs.carousel.data-api",(function(){for(var t=[].slice.call(document.querySelectorAll('[data-ride="carousel"]')),e=0,n=t.length;e0&&(this._selector=a,this._triggerArray.push(r))}this._parent=this._config.parent?this._getParent():null,this._config.parent||this._addAriaAndCollapsedClass(this._element,this._triggerArray),this._config.toggle&&this.toggle()}var e=t.prototype;return e.toggle=function(){o.default(this._element).hasClass("show")?this.hide():this.show()},e.show=function(){var e,n,i=this;if(!(this._isTransitioning||o.default(this._element).hasClass("show")||(this._parent&&0===(e=[].slice.call(this._parent.querySelectorAll(".show, .collapsing")).filter((function(t){return"string"==typeof i._config.parent?t.getAttribute("data-parent")===i._config.parent:t.classList.contains("collapse")}))).length&&(e=null),e&&(n=o.default(e).not(this._selector).data("bs.collapse"))&&n._isTransitioning))){var r=o.default.Event("show.bs.collapse");if(o.default(this._element).trigger(r),!r.isDefaultPrevented()){e&&(t._jQueryInterface.call(o.default(e).not(this._selector),"hide"),n||o.default(e).data("bs.collapse",null));var a=this._getDimension();o.default(this._element).removeClass("collapse").addClass("collapsing"),this._element.style[a]=0,this._triggerArray.length&&o.default(this._triggerArray).removeClass("collapsed").attr("aria-expanded",!0),this.setTransitioning(!0);var s="scroll"+(a[0].toUpperCase()+a.slice(1)),l=d.getTransitionDurationFromElement(this._element);o.default(this._element).one(d.TRANSITION_END,(function(){o.default(i._element).removeClass("collapsing").addClass("collapse show"),i._element.style[a]="",i.setTransitioning(!1),o.default(i._element).trigger("shown.bs.collapse")})).emulateTransitionEnd(l),this._element.style[a]=this._element[s]+"px"}}},e.hide=function(){var t=this;if(!this._isTransitioning&&o.default(this._element).hasClass("show")){var e=o.default.Event("hide.bs.collapse");if(o.default(this._element).trigger(e),!e.isDefaultPrevented()){var n=this._getDimension();this._element.style[n]=this._element.getBoundingClientRect()[n]+"px",d.reflow(this._element),o.default(this._element).addClass("collapsing").removeClass("collapse show");var i=this._triggerArray.length;if(i>0)for(var r=0;r0},e._getOffset=function(){var t=this,e={};return"function"==typeof this._config.offset?e.fn=function(e){return e.offsets=l({},e.offsets,t._config.offset(e.offsets,t._element)),e}:e.offset=this._config.offset,e},e._getPopperConfig=function(){var t={placement:this._getPlacement(),modifiers:{offset:this._getOffset(),flip:{enabled:this._config.flip},preventOverflow:{boundariesElement:this._config.boundary}}};return"static"===this._config.display&&(t.modifiers.applyStyle={enabled:!1}),l({},t,this._config.popperConfig)},t._jQueryInterface=function(e){return this.each((function(){var n=o.default(this).data("bs.dropdown");if(n||(n=new t(this,"object"==typeof e?e:null),o.default(this).data("bs.dropdown",n)),"string"==typeof e){if(void 0===n[e])throw new TypeError('No method named "'+e+'"');n[e]()}}))},t._clearMenus=function(e){if(!e||3!==e.which&&("keyup"!==e.type||9===e.which))for(var n=[].slice.call(document.querySelectorAll('[data-toggle="dropdown"]')),i=0,r=n.length;i0&&a--,40===e.which&&adocument.documentElement.clientHeight;n||(this._element.style.overflowY="hidden"),this._element.classList.add("modal-static");var i=d.getTransitionDurationFromElement(this._dialog);o.default(this._element).off(d.TRANSITION_END),o.default(this._element).one(d.TRANSITION_END,(function(){t._element.classList.remove("modal-static"),n||o.default(t._element).one(d.TRANSITION_END,(function(){t._element.style.overflowY=""})).emulateTransitionEnd(t._element,i)})).emulateTransitionEnd(i),this._element.focus()}},e._showElement=function(t){var e=this,n=o.default(this._element).hasClass("fade"),i=this._dialog?this._dialog.querySelector(".modal-body"):null;this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE||document.body.appendChild(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),o.default(this._dialog).hasClass("modal-dialog-scrollable")&&i?i.scrollTop=0:this._element.scrollTop=0,n&&d.reflow(this._element),o.default(this._element).addClass("show"),this._config.focus&&this._enforceFocus();var r=o.default.Event("shown.bs.modal",{relatedTarget:t}),a=function(){e._config.focus&&e._element.focus(),e._isTransitioning=!1,o.default(e._element).trigger(r)};if(n){var s=d.getTransitionDurationFromElement(this._dialog);o.default(this._dialog).one(d.TRANSITION_END,a).emulateTransitionEnd(s)}else a()},e._enforceFocus=function(){var t=this;o.default(document).off("focusin.bs.modal").on("focusin.bs.modal",(function(e){document!==e.target&&t._element!==e.target&&0===o.default(t._element).has(e.target).length&&t._element.focus()}))},e._setEscapeEvent=function(){var t=this;this._isShown?o.default(this._element).on("keydown.dismiss.bs.modal",(function(e){t._config.keyboard&&27===e.which?(e.preventDefault(),t.hide()):t._config.keyboard||27!==e.which||t._triggerBackdropTransition()})):this._isShown||o.default(this._element).off("keydown.dismiss.bs.modal")},e._setResizeEvent=function(){var t=this;this._isShown?o.default(window).on("resize.bs.modal",(function(e){return t.handleUpdate(e)})):o.default(window).off("resize.bs.modal")},e._hideModal=function(){var t=this;this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._showBackdrop((function(){o.default(document.body).removeClass("modal-open"),t._resetAdjustments(),t._resetScrollbar(),o.default(t._element).trigger("hidden.bs.modal")}))},e._removeBackdrop=function(){this._backdrop&&(o.default(this._backdrop).remove(),this._backdrop=null)},e._showBackdrop=function(t){var e=this,n=o.default(this._element).hasClass("fade")?"fade":"";if(this._isShown&&this._config.backdrop){if(this._backdrop=document.createElement("div"),this._backdrop.className="modal-backdrop",n&&this._backdrop.classList.add(n),o.default(this._backdrop).appendTo(document.body),o.default(this._element).on("click.dismiss.bs.modal",(function(t){e._ignoreBackdropClick?e._ignoreBackdropClick=!1:t.target===t.currentTarget&&("static"===e._config.backdrop?e._triggerBackdropTransition():e.hide())})),n&&d.reflow(this._backdrop),o.default(this._backdrop).addClass("show"),!t)return;if(!n)return void t();var i=d.getTransitionDurationFromElement(this._backdrop);o.default(this._backdrop).one(d.TRANSITION_END,t).emulateTransitionEnd(i)}else if(!this._isShown&&this._backdrop){o.default(this._backdrop).removeClass("show");var r=function(){e._removeBackdrop(),t&&t()};if(o.default(this._element).hasClass("fade")){var a=d.getTransitionDurationFromElement(this._backdrop);o.default(this._backdrop).one(d.TRANSITION_END,r).emulateTransitionEnd(a)}else r()}else t&&t()},e._adjustDialog=function(){var t=this._element.scrollHeight>document.documentElement.clientHeight;!this._isBodyOverflowing&&t&&(this._element.style.paddingLeft=this._scrollbarWidth+"px"),this._isBodyOverflowing&&!t&&(this._element.style.paddingRight=this._scrollbarWidth+"px")},e._resetAdjustments=function(){this._element.style.paddingLeft="",this._element.style.paddingRight=""},e._checkScrollbar=function(){var t=document.body.getBoundingClientRect();this._isBodyOverflowing=Math.round(t.left+t.right)
',trigger:"hover focus",title:"",delay:0,html:!1,selector:!1,placement:"top",offset:0,container:!1,fallbackPlacement:"flip",boundary:"scrollParent",customClass:"",sanitize:!0,sanitizeFn:null,whiteList:B,popperConfig:null},X={animation:"boolean",template:"string",title:"(string|element|function)",trigger:"string",delay:"(number|object)",html:"boolean",selector:"(string|boolean)",placement:"(string|function)",offset:"(number|string|function)",container:"(string|element|boolean)",fallbackPlacement:"(string|array)",boundary:"(string|element)",customClass:"(string|function)",sanitize:"boolean",sanitizeFn:"(null|function)",whiteList:"object",popperConfig:"(null|object)"},$={HIDE:"hide.bs.tooltip",HIDDEN:"hidden.bs.tooltip",SHOW:"show.bs.tooltip",SHOWN:"shown.bs.tooltip",INSERTED:"inserted.bs.tooltip",CLICK:"click.bs.tooltip",FOCUSIN:"focusin.bs.tooltip",FOCUSOUT:"focusout.bs.tooltip",MOUSEENTER:"mouseenter.bs.tooltip",MOUSELEAVE:"mouseleave.bs.tooltip"},G=function(){function t(t,e){if(void 0===r.default)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this.element=t,this.config=this._getConfig(e),this.tip=null,this._setListeners()}var e=t.prototype;return e.enable=function(){this._isEnabled=!0},e.disable=function(){this._isEnabled=!1},e.toggleEnabled=function(){this._isEnabled=!this._isEnabled},e.toggle=function(t){if(this._isEnabled)if(t){var e=this.constructor.DATA_KEY,n=o.default(t.currentTarget).data(e);n||(n=new this.constructor(t.currentTarget,this._getDelegateConfig()),o.default(t.currentTarget).data(e,n)),n._activeTrigger.click=!n._activeTrigger.click,n._isWithActiveTrigger()?n._enter(null,n):n._leave(null,n)}else{if(o.default(this.getTipElement()).hasClass("show"))return void this._leave(null,this);this._enter(null,this)}},e.dispose=function(){clearTimeout(this._timeout),o.default.removeData(this.element,this.constructor.DATA_KEY),o.default(this.element).off(this.constructor.EVENT_KEY),o.default(this.element).closest(".modal").off("hide.bs.modal",this._hideModalHandler),this.tip&&o.default(this.tip).remove(),this._isEnabled=null,this._timeout=null,this._hoverState=null,this._activeTrigger=null,this._popper&&this._popper.destroy(),this._popper=null,this.element=null,this.config=null,this.tip=null},e.show=function(){var t=this;if("none"===o.default(this.element).css("display"))throw new Error("Please use show on visible elements");var e=o.default.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){o.default(this.element).trigger(e);var n=d.findShadowRoot(this.element),i=o.default.contains(null!==n?n:this.element.ownerDocument.documentElement,this.element);if(e.isDefaultPrevented()||!i)return;var a=this.getTipElement(),s=d.getUID(this.constructor.NAME);a.setAttribute("id",s),this.element.setAttribute("aria-describedby",s),this.setContent(),this.config.animation&&o.default(a).addClass("fade");var l="function"==typeof this.config.placement?this.config.placement.call(this,a,this.element):this.config.placement,u=this._getAttachment(l);this.addAttachmentClass(u);var f=this._getContainer();o.default(a).data(this.constructor.DATA_KEY,this),o.default.contains(this.element.ownerDocument.documentElement,this.tip)||o.default(a).appendTo(f),o.default(this.element).trigger(this.constructor.Event.INSERTED),this._popper=new r.default(this.element,a,this._getPopperConfig(u)),o.default(a).addClass("show"),o.default(a).addClass(this.config.customClass),"ontouchstart"in document.documentElement&&o.default(document.body).children().on("mouseover",null,o.default.noop);var c=function(){t.config.animation&&t._fixTransition();var e=t._hoverState;t._hoverState=null,o.default(t.element).trigger(t.constructor.Event.SHOWN),"out"===e&&t._leave(null,t)};if(o.default(this.tip).hasClass("fade")){var h=d.getTransitionDurationFromElement(this.tip);o.default(this.tip).one(d.TRANSITION_END,c).emulateTransitionEnd(h)}else c()}},e.hide=function(t){var e=this,n=this.getTipElement(),i=o.default.Event(this.constructor.Event.HIDE),r=function(){"show"!==e._hoverState&&n.parentNode&&n.parentNode.removeChild(n),e._cleanTipClass(),e.element.removeAttribute("aria-describedby"),o.default(e.element).trigger(e.constructor.Event.HIDDEN),null!==e._popper&&e._popper.destroy(),t&&t()};if(o.default(this.element).trigger(i),!i.isDefaultPrevented()){if(o.default(n).removeClass("show"),"ontouchstart"in document.documentElement&&o.default(document.body).children().off("mouseover",null,o.default.noop),this._activeTrigger.click=!1,this._activeTrigger.focus=!1,this._activeTrigger.hover=!1,o.default(this.tip).hasClass("fade")){var a=d.getTransitionDurationFromElement(n);o.default(n).one(d.TRANSITION_END,r).emulateTransitionEnd(a)}else r();this._hoverState=""}},e.update=function(){null!==this._popper&&this._popper.scheduleUpdate()},e.isWithContent=function(){return Boolean(this.getTitle())},e.addAttachmentClass=function(t){o.default(this.getTipElement()).addClass("bs-tooltip-"+t)},e.getTipElement=function(){return this.tip=this.tip||o.default(this.config.template)[0],this.tip},e.setContent=function(){var t=this.getTipElement();this.setElementContent(o.default(t.querySelectorAll(".tooltip-inner")),this.getTitle()),o.default(t).removeClass("fade show")},e.setElementContent=function(t,e){"object"!=typeof e||!e.nodeType&&!e.jquery?this.config.html?(this.config.sanitize&&(e=Q(e,this.config.whiteList,this.config.sanitizeFn)),t.html(e)):t.text(e):this.config.html?o.default(e).parent().is(t)||t.empty().append(e):t.text(o.default(e).text())},e.getTitle=function(){var t=this.element.getAttribute("data-original-title");return t||(t="function"==typeof this.config.title?this.config.title.call(this.element):this.config.title),t},e._getPopperConfig=function(t){var e=this;return l({},{placement:t,modifiers:{offset:this._getOffset(),flip:{behavior:this.config.fallbackPlacement},arrow:{element:".arrow"},preventOverflow:{boundariesElement:this.config.boundary}},onCreate:function(t){t.originalPlacement!==t.placement&&e._handlePopperPlacementChange(t)},onUpdate:function(t){return e._handlePopperPlacementChange(t)}},this.config.popperConfig)},e._getOffset=function(){var t=this,e={};return"function"==typeof this.config.offset?e.fn=function(e){return e.offsets=l({},e.offsets,t.config.offset(e.offsets,t.element)),e}:e.offset=this.config.offset,e},e._getContainer=function(){return!1===this.config.container?document.body:d.isElement(this.config.container)?o.default(this.config.container):o.default(document).find(this.config.container)},e._getAttachment=function(t){return z[t.toUpperCase()]},e._setListeners=function(){var t=this;this.config.trigger.split(" ").forEach((function(e){if("click"===e)o.default(t.element).on(t.constructor.Event.CLICK,t.config.selector,(function(e){return t.toggle(e)}));else if("manual"!==e){var n="hover"===e?t.constructor.Event.MOUSEENTER:t.constructor.Event.FOCUSIN,i="hover"===e?t.constructor.Event.MOUSELEAVE:t.constructor.Event.FOCUSOUT;o.default(t.element).on(n,t.config.selector,(function(e){return t._enter(e)})).on(i,t.config.selector,(function(e){return t._leave(e)}))}})),this._hideModalHandler=function(){t.element&&t.hide()},o.default(this.element).closest(".modal").on("hide.bs.modal",this._hideModalHandler),this.config.selector?this.config=l({},this.config,{trigger:"manual",selector:""}):this._fixTitle()},e._fixTitle=function(){var t=typeof this.element.getAttribute("data-original-title");(this.element.getAttribute("title")||"string"!==t)&&(this.element.setAttribute("data-original-title",this.element.getAttribute("title")||""),this.element.setAttribute("title",""))},e._enter=function(t,e){var n=this.constructor.DATA_KEY;(e=e||o.default(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),o.default(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusin"===t.type?"focus":"hover"]=!0),o.default(e.getTipElement()).hasClass("show")||"show"===e._hoverState?e._hoverState="show":(clearTimeout(e._timeout),e._hoverState="show",e.config.delay&&e.config.delay.show?e._timeout=setTimeout((function(){"show"===e._hoverState&&e.show()}),e.config.delay.show):e.show())},e._leave=function(t,e){var n=this.constructor.DATA_KEY;(e=e||o.default(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),o.default(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusout"===t.type?"focus":"hover"]=!1),e._isWithActiveTrigger()||(clearTimeout(e._timeout),e._hoverState="out",e.config.delay&&e.config.delay.hide?e._timeout=setTimeout((function(){"out"===e._hoverState&&e.hide()}),e.config.delay.hide):e.hide())},e._isWithActiveTrigger=function(){for(var t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1},e._getConfig=function(t){var e=o.default(this.element).data();return Object.keys(e).forEach((function(t){-1!==Y.indexOf(t)&&delete e[t]})),"number"==typeof(t=l({},this.constructor.Default,e,"object"==typeof t&&t?t:{})).delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),d.typeCheckConfig(W,t,this.constructor.DefaultType),t.sanitize&&(t.template=Q(t.template,t.whiteList,t.sanitizeFn)),t},e._getDelegateConfig=function(){var t={};if(this.config)for(var e in this.config)this.constructor.Default[e]!==this.config[e]&&(t[e]=this.config[e]);return t},e._cleanTipClass=function(){var t=o.default(this.getTipElement()),e=t.attr("class").match(V);null!==e&&e.length&&t.removeClass(e.join(""))},e._handlePopperPlacementChange=function(t){this.tip=t.instance.popper,this._cleanTipClass(),this.addAttachmentClass(this._getAttachment(t.placement))},e._fixTransition=function(){var t=this.getTipElement(),e=this.config.animation;null===t.getAttribute("x-placement")&&(o.default(t).removeClass("fade"),this.config.animation=!1,this.hide(),this.show(),this.config.animation=e)},t._jQueryInterface=function(e){return this.each((function(){var n=o.default(this),i=n.data("bs.tooltip"),r="object"==typeof e&&e;if((i||!/dispose|hide/.test(e))&&(i||(i=new t(this,r),n.data("bs.tooltip",i)),"string"==typeof e)){if(void 0===i[e])throw new TypeError('No method named "'+e+'"');i[e]()}}))},s(t,null,[{key:"VERSION",get:function(){return"4.6.1"}},{key:"Default",get:function(){return K}},{key:"NAME",get:function(){return W}},{key:"DATA_KEY",get:function(){return"bs.tooltip"}},{key:"Event",get:function(){return $}},{key:"EVENT_KEY",get:function(){return".bs.tooltip"}},{key:"DefaultType",get:function(){return X}}]),t}();o.default.fn[W]=G._jQueryInterface,o.default.fn[W].Constructor=G,o.default.fn[W].noConflict=function(){return o.default.fn[W]=U,G._jQueryInterface};var J="popover",Z=o.default.fn[J],tt=new RegExp("(^|\\s)bs-popover\\S+","g"),et=l({},G.Default,{placement:"right",trigger:"click",content:"",template:''}),nt=l({},G.DefaultType,{content:"(string|element|function)"}),it={HIDE:"hide.bs.popover",HIDDEN:"hidden.bs.popover",SHOW:"show.bs.popover",SHOWN:"shown.bs.popover",INSERTED:"inserted.bs.popover",CLICK:"click.bs.popover",FOCUSIN:"focusin.bs.popover",FOCUSOUT:"focusout.bs.popover",MOUSEENTER:"mouseenter.bs.popover",MOUSELEAVE:"mouseleave.bs.popover"},ot=function(t){var e,n;function i(){return t.apply(this,arguments)||this}n=t,(e=i).prototype=Object.create(n.prototype),e.prototype.constructor=e,u(e,n);var r=i.prototype;return r.isWithContent=function(){return this.getTitle()||this._getContent()},r.addAttachmentClass=function(t){o.default(this.getTipElement()).addClass("bs-popover-"+t)},r.getTipElement=function(){return this.tip=this.tip||o.default(this.config.template)[0],this.tip},r.setContent=function(){var t=o.default(this.getTipElement());this.setElementContent(t.find(".popover-header"),this.getTitle());var e=this._getContent();"function"==typeof e&&(e=e.call(this.element)),this.setElementContent(t.find(".popover-body"),e),t.removeClass("fade show")},r._getContent=function(){return this.element.getAttribute("data-content")||this.config.content},r._cleanTipClass=function(){var t=o.default(this.getTipElement()),e=t.attr("class").match(tt);null!==e&&e.length>0&&t.removeClass(e.join(""))},i._jQueryInterface=function(t){return this.each((function(){var e=o.default(this).data("bs.popover"),n="object"==typeof t?t:null;if((e||!/dispose|hide/.test(t))&&(e||(e=new i(this,n),o.default(this).data("bs.popover",e)),"string"==typeof t)){if(void 0===e[t])throw new TypeError('No method named "'+t+'"');e[t]()}}))},s(i,null,[{key:"VERSION",get:function(){return"4.6.1"}},{key:"Default",get:function(){return et}},{key:"NAME",get:function(){return J}},{key:"DATA_KEY",get:function(){return"bs.popover"}},{key:"Event",get:function(){return it}},{key:"EVENT_KEY",get:function(){return".bs.popover"}},{key:"DefaultType",get:function(){return nt}}]),i}(G);o.default.fn[J]=ot._jQueryInterface,o.default.fn[J].Constructor=ot,o.default.fn[J].noConflict=function(){return o.default.fn[J]=Z,ot._jQueryInterface};var rt="scrollspy",at=o.default.fn[rt],st={offset:10,method:"auto",target:""},lt={offset:"number",method:"string",target:"(string|element)"},ut=function(){function t(t,e){var n=this;this._element=t,this._scrollElement="BODY"===t.tagName?window:t,this._config=this._getConfig(e),this._selector=this._config.target+" .nav-link,"+this._config.target+" .list-group-item,"+this._config.target+" .dropdown-item",this._offsets=[],this._targets=[],this._activeTarget=null,this._scrollHeight=0,o.default(this._scrollElement).on("scroll.bs.scrollspy",(function(t){return n._process(t)})),this.refresh(),this._process()}var e=t.prototype;return e.refresh=function(){var t=this,e=this._scrollElement===this._scrollElement.window?"offset":"position",n="auto"===this._config.method?e:this._config.method,i="position"===n?this._getScrollTop():0;this._offsets=[],this._targets=[],this._scrollHeight=this._getScrollHeight(),[].slice.call(document.querySelectorAll(this._selector)).map((function(t){var e,r=d.getSelectorFromElement(t);if(r&&(e=document.querySelector(r)),e){var a=e.getBoundingClientRect();if(a.width||a.height)return[o.default(e)[n]().top+i,r]}return null})).filter((function(t){return t})).sort((function(t,e){return t[0]-e[0]})).forEach((function(e){t._offsets.push(e[0]),t._targets.push(e[1])}))},e.dispose=function(){o.default.removeData(this._element,"bs.scrollspy"),o.default(this._scrollElement).off(".bs.scrollspy"),this._element=null,this._scrollElement=null,this._config=null,this._selector=null,this._offsets=null,this._targets=null,this._activeTarget=null,this._scrollHeight=null},e._getConfig=function(t){if("string"!=typeof(t=l({},st,"object"==typeof t&&t?t:{})).target&&d.isElement(t.target)){var e=o.default(t.target).attr("id");e||(e=d.getUID(rt),o.default(t.target).attr("id",e)),t.target="#"+e}return d.typeCheckConfig(rt,t,lt),t},e._getScrollTop=function(){return this._scrollElement===window?this._scrollElement.pageYOffset:this._scrollElement.scrollTop},e._getScrollHeight=function(){return this._scrollElement.scrollHeight||Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)},e._getOffsetHeight=function(){return this._scrollElement===window?window.innerHeight:this._scrollElement.getBoundingClientRect().height},e._process=function(){var t=this._getScrollTop()+this._config.offset,e=this._getScrollHeight(),n=this._config.offset+e-this._getOffsetHeight();if(this._scrollHeight!==e&&this.refresh(),t>=n){var i=this._targets[this._targets.length-1];this._activeTarget!==i&&this._activate(i)}else{if(this._activeTarget&&t0)return this._activeTarget=null,void this._clear();for(var o=this._offsets.length;o--;)this._activeTarget!==this._targets[o]&&t>=this._offsets[o]&&(void 0===this._offsets[o+1]||t li > .active":".active";n=(n=o.default.makeArray(o.default(i).find(a)))[n.length-1]}var s=o.default.Event("hide.bs.tab",{relatedTarget:this._element}),l=o.default.Event("show.bs.tab",{relatedTarget:n});if(n&&o.default(n).trigger(s),o.default(this._element).trigger(l),!l.isDefaultPrevented()&&!s.isDefaultPrevented()){r&&(e=document.querySelector(r)),this._activate(this._element,i);var u=function(){var e=o.default.Event("hidden.bs.tab",{relatedTarget:t._element}),i=o.default.Event("shown.bs.tab",{relatedTarget:n});o.default(n).trigger(e),o.default(t._element).trigger(i)};e?this._activate(e,e.parentNode,u):u()}}},e.dispose=function(){o.default.removeData(this._element,"bs.tab"),this._element=null},e._activate=function(t,e,n){var i=this,r=(!e||"UL"!==e.nodeName&&"OL"!==e.nodeName?o.default(e).children(".active"):o.default(e).find("> li > .active"))[0],a=n&&r&&o.default(r).hasClass("fade"),s=function(){return i._transitionComplete(t,r,n)};if(r&&a){var l=d.getTransitionDurationFromElement(r);o.default(r).removeClass("show").one(d.TRANSITION_END,s).emulateTransitionEnd(l)}else s()},e._transitionComplete=function(t,e,n){if(e){o.default(e).removeClass("active");var i=o.default(e.parentNode).find("> .dropdown-menu .active")[0];i&&o.default(i).removeClass("active"),"tab"===e.getAttribute("role")&&e.setAttribute("aria-selected",!1)}o.default(t).addClass("active"),"tab"===t.getAttribute("role")&&t.setAttribute("aria-selected",!0),d.reflow(t),t.classList.contains("fade")&&t.classList.add("show");var r=t.parentNode;if(r&&"LI"===r.nodeName&&(r=r.parentNode),r&&o.default(r).hasClass("dropdown-menu")){var a=o.default(t).closest(".dropdown")[0];if(a){var s=[].slice.call(a.querySelectorAll(".dropdown-toggle"));o.default(s).addClass("active")}t.setAttribute("aria-expanded",!0)}n&&n()},t._jQueryInterface=function(e){return this.each((function(){var n=o.default(this),i=n.data("bs.tab");if(i||(i=new t(this),n.data("bs.tab",i)),"string"==typeof e){if(void 0===i[e])throw new TypeError('No method named "'+e+'"');i[e]()}}))},s(t,null,[{key:"VERSION",get:function(){return"4.6.1"}}]),t}();o.default(document).on("click.bs.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]',(function(t){t.preventDefault(),dt._jQueryInterface.call(o.default(this),"show")})),o.default.fn.tab=dt._jQueryInterface,o.default.fn.tab.Constructor=dt,o.default.fn.tab.noConflict=function(){return o.default.fn.tab=ft,dt._jQueryInterface};var ct="toast",ht=o.default.fn[ct],pt={animation:!0,autohide:!0,delay:500},mt={animation:"boolean",autohide:"boolean",delay:"number"},gt=function(){function t(t,e){this._element=t,this._config=this._getConfig(e),this._timeout=null,this._setListeners()}var e=t.prototype;return e.show=function(){var t=this,e=o.default.Event("show.bs.toast");if(o.default(this._element).trigger(e),!e.isDefaultPrevented()){this._clearTimeout(),this._config.animation&&this._element.classList.add("fade");var n=function(){t._element.classList.remove("showing"),t._element.classList.add("show"),o.default(t._element).trigger("shown.bs.toast"),t._config.autohide&&(t._timeout=setTimeout((function(){t.hide()}),t._config.delay))};if(this._element.classList.remove("hide"),d.reflow(this._element),this._element.classList.add("showing"),this._config.animation){var i=d.getTransitionDurationFromElement(this._element);o.default(this._element).one(d.TRANSITION_END,n).emulateTransitionEnd(i)}else n()}},e.hide=function(){if(this._element.classList.contains("show")){var t=o.default.Event("hide.bs.toast");o.default(this._element).trigger(t),t.isDefaultPrevented()||this._close()}},e.dispose=function(){this._clearTimeout(),this._element.classList.contains("show")&&this._element.classList.remove("show"),o.default(this._element).off("click.dismiss.bs.toast"),o.default.removeData(this._element,"bs.toast"),this._element=null,this._config=null},e._getConfig=function(t){return t=l({},pt,o.default(this._element).data(),"object"==typeof t&&t?t:{}),d.typeCheckConfig(ct,t,this.constructor.DefaultType),t},e._setListeners=function(){var t=this;o.default(this._element).on("click.dismiss.bs.toast",'[data-dismiss="toast"]',(function(){return t.hide()}))},e._close=function(){var t=this,e=function(){t._element.classList.add("hide"),o.default(t._element).trigger("hidden.bs.toast")};if(this._element.classList.remove("show"),this._config.animation){var n=d.getTransitionDurationFromElement(this._element);o.default(this._element).one(d.TRANSITION_END,e).emulateTransitionEnd(n)}else e()},e._clearTimeout=function(){clearTimeout(this._timeout),this._timeout=null},t._jQueryInterface=function(e){return this.each((function(){var n=o.default(this),i=n.data("bs.toast");if(i||(i=new t(this,"object"==typeof e&&e),n.data("bs.toast",i)),"string"==typeof e){if(void 0===i[e])throw new TypeError('No method named "'+e+'"');i[e](this)}}))},s(t,null,[{key:"VERSION",get:function(){return"4.6.1"}},{key:"DefaultType",get:function(){return mt}},{key:"Default",get:function(){return pt}}]),t}();o.default.fn[ct]=gt._jQueryInterface,o.default.fn[ct].Constructor=gt,o.default.fn[ct].noConflict=function(){return o.default.fn[ct]=ht,gt._jQueryInterface},t.Alert=h,t.Button=m,t.Carousel=E,t.Collapse=D,t.Dropdown=j,t.Modal=R,t.Popover=ot,t.Scrollspy=ut,t.Tab=dt,t.Toast=gt,t.Tooltip=G,t.Util=d,Object.defineProperty(t,"__esModule",{value:!0})}(e,n(0),n(1))},function(t,e){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(t){"object"==typeof window&&(n=window)}t.exports=n},function(t,e,n){"use strict";n.r(e);n(0),n(3),n.p;$((function(){var t=document.querySelector("div.bd-sidebar");let e=parseInt(sessionStorage.getItem("sidebar-scroll-top"),10);if(isNaN(e)){var n=document.getElementById("bd-docs-nav").querySelectorAll(".active");if(n.length>0){var i=n[n.length-1],o=i.getBoundingClientRect().y-t.getBoundingClientRect().y;if(i.getBoundingClientRect().y>.5*window.innerHeight){let e=.25;t.scrollTop=o-t.clientHeight*e,console.log("[PST]: Scrolled sidebar using last active link...")}}}else t.scrollTop=e,console.log("[PST]: Scrolled sidebar using stored browser position...");window.addEventListener("beforeunload",()=>{sessionStorage.setItem("sidebar-scroll-top",t.scrollTop)})})),$((function(){$(window).on("activate.bs.scrollspy",(function(){document.querySelectorAll("#bd-toc-nav a").forEach(t=>{t.parentElement.classList.remove("active")});document.querySelectorAll("#bd-toc-nav a.active").forEach(t=>{t.parentElement.classList.add("active")})}))}))}]); \ No newline at end of file diff --git a/_static/scripts/sphinx-book-theme.js b/_static/scripts/sphinx-book-theme.js new file mode 100644 index 00000000..a8a305eb --- /dev/null +++ b/_static/scripts/sphinx-book-theme.js @@ -0,0 +1,2 @@ +!function(e){var t={};function n(o){if(t[o])return t[o].exports;var r=t[o]={i:o,l:!1,exports:{}};return e[o].call(r.exports,r,r.exports,n),r.l=!0,r.exports}n.m=e,n.c=t,n.d=function(e,t,o){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:o})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var o=Object.create(null);if(n.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(o,r,function(t){return e[t]}.bind(null,r));return o},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=0)}([function(e,t,n){e.exports=n(1)},function(e,t,n){"use strict";n.r(t);n.p;var o=e=>{"loading"!=document.readyState?e():document.addEventListener?document.addEventListener("DOMContentLoaded",e):document.attachEvent("onreadystatechange",(function(){"complete"==document.readyState&&e()}))};window.initThebeSBT=()=>{var e=$("div.section h1")[0];$(e).next().hasClass("thebe-launch-button")||$("").insertAfter($(e)),initThebe()},window.printPdf=e=>{let t=$(e).attr("aria-describedby"),n=$("#"+t).detach();window.print(),$("body").append(n)},window.toggleFullScreen=()=>{var e=document.fullscreenElement&&null!==document.fullscreenElement||document.webkitFullscreenElement&&null!==document.webkitFullscreenElement;let t=document.documentElement;e?(console.log("[SBT]: Exiting full screen"),document.exitFullscreen?document.exitFullscreen():document.webkitExitFullscreen&&document.webkitExitFullscreen()):(console.log("[SBT]: Entering full screen"),t.requestFullscreen?t.requestFullscreen():t.webkitRequestFullscreen&&t.webkitRequestFullscreen())},o(()=>{$(document).ready((function(){$('[data-toggle="tooltip"]').tooltip({trigger:"hover",delay:{show:500,hide:100}})}))}),o(()=>{var e=document.getElementById("site-navigation"),t=e.querySelectorAll(".active"),n=t[t.length-1];void 0!==n&&n.offsetTop>.5*$(window).height()&&(e.scrollTop=n.offsetTop-.2*$(window).height())}),o(()=>{var e=[];let t=new IntersectionObserver((t,n)=>{t.forEach(t=>{if(t.isIntersecting)e.push(t.target);else for(let n=0;n0?$("div.bd-toc").removeClass("show"):$("div.bd-toc").addClass("show")});let n=[];["marginnote","sidenote","margin","margin-caption","full-width","sidebar","popout"].forEach(e=>{n.push("."+e,".tag_"+e,"."+e.replace("-","_"),".tag_"+e.replace("-","_"))}),document.querySelectorAll(n.join(", ")).forEach(e=>{t.observe(e)}),new IntersectionObserver((e,t)=>{e[0].boundingClientRect.y<0?document.body.classList.add("scrolled"):document.body.classList.remove("scrolled")}).observe(document.querySelector(".sbt-scroll-pixel-helper"))}),o((function(){new MutationObserver((e,t)=>{e.forEach(e=>{0!==e.addedNodes.length&&void 0!==e.addedNodes[0].data&&-1!=e.addedNodes[0].data.search("Inserted RTD Footer")&&e.addedNodes.forEach(e=>{document.getElementById("rtd-footer-container").append(e)})})}).observe(document.body,{childList:!0})}))}]); +//# sourceMappingURL=sphinx-book-theme.js.map \ No newline at end of file diff --git a/_static/scripts/sphinx-book-theme.js.map b/_static/scripts/sphinx-book-theme.js.map new file mode 100644 index 00000000..dccd768e --- /dev/null +++ b/_static/scripts/sphinx-book-theme.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/sphinx_book_theme/assets/styles/index.scss","webpack:///./src/sphinx_book_theme/assets/scripts/index.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","sbRunWhenDOMLoaded","cb","document","readyState","addEventListener","attachEvent","window","initThebeSBT","title","$","next","hasClass","insertAfter","initThebe","printPdf","el","tooltipID","attr","tooltipTextDiv","detach","print","append","toggleFullScreen","isInFullScreen","fullscreenElement","webkitFullscreenElement","docElm","documentElement","console","log","exitFullscreen","webkitExitFullscreen","requestFullscreen","webkitRequestFullscreen","ready","tooltip","trigger","delay","show","hide","navbar","getElementById","active_pages","querySelectorAll","active_page","length","undefined","offsetTop","height","scrollTop","onScreenItems","tocObserver","IntersectionObserver","entries","observer","forEach","entry","isIntersecting","push","target","ii","splice","removeClass","addClass","marginSelector","replace","join","observe","boundingClientRect","y","body","classList","add","remove","querySelector","MutationObserver","mutationList","mutation","addedNodes","data","search","node","childList"],"mappings":"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","file":"scripts/sphinx-book-theme.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n","export default __webpack_public_path__ + \"styles/sphinx-book-theme.css\";","// Import CSS variables\n// ref: https://css-tricks.com/getting-javascript-to-talk-to-css-and-sass/\nimport \"../styles/index.scss\";\n\n/**\n * A helper function to load scripts when the DOM is loaded.\n * This waits for everything to be on the page first before running, since\n * some functionality doesn't behave properly until everything is ready.\n */\nvar sbRunWhenDOMLoaded = (cb) => {\n if (document.readyState != \"loading\") {\n cb();\n } else if (document.addEventListener) {\n document.addEventListener(\"DOMContentLoaded\", cb);\n } else {\n document.attachEvent(\"onreadystatechange\", function () {\n if (document.readyState == \"complete\") cb();\n });\n }\n};\n\n/**\n * Toggle full-screen with button\n *\n * There are some browser-specific hacks in here:\n * - Safari requires a `webkit` prefix, so this uses conditionals to check for that\n * ref: https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API\n */\nvar toggleFullScreen = () => {\n var isInFullScreen =\n (document.fullscreenElement && document.fullscreenElement !== null) ||\n (document.webkitFullscreenElement &&\n document.webkitFullscreenElement !== null);\n let docElm = document.documentElement;\n if (!isInFullScreen) {\n console.log(\"[SBT]: Entering full screen\");\n if (docElm.requestFullscreen) {\n docElm.requestFullscreen();\n } else if (docElm.webkitRequestFullscreen) {\n docElm.webkitRequestFullscreen();\n }\n } else {\n console.log(\"[SBT]: Exiting full screen\");\n if (document.exitFullscreen) {\n document.exitFullscreen();\n } else if (document.webkitExitFullscreen) {\n document.webkitExitFullscreen();\n }\n }\n};\n\n/**\n * Sidebar scroll on load.\n *\n * Detect the active page in the sidebar, and scroll so that it is centered on\n * the screen.\n */\nvar scrollToActive = () => {\n var navbar = document.getElementById(\"site-navigation\");\n var active_pages = navbar.querySelectorAll(\".active\");\n var active_page = active_pages[active_pages.length - 1];\n // Only scroll the navbar if the active link is lower than 50% of the page\n if (\n active_page !== undefined &&\n active_page.offsetTop > $(window).height() * 0.5\n ) {\n navbar.scrollTop = active_page.offsetTop - $(window).height() * 0.2;\n }\n};\n\n/**\n * Called when the \"print to PDF\" button is clicked.\n * This is a hack to prevent tooltips from showing up in the printed PDF.\n */\nvar printPdf = (el) => {\n // Detach the tooltip text from DOM to hide in PDF\n // and then reattach it for HTML\n let tooltipID = $(el).attr(\"aria-describedby\");\n let tooltipTextDiv = $(\"#\" + tooltipID).detach();\n window.print();\n $(\"body\").append(tooltipTextDiv);\n};\n\n/**\n * Manage scrolling behavior. This is primarily two things:\n *\n * 1. Hide the Table of Contents any time sidebar content is on the screen.\n *\n * This will be triggered any time a sidebar item enters or exits the screen.\n * It adds/removes items from an array if they have entered the screen, and\n * removes them when they exit the screen. It hides the TOC if anything is\n * on-screen.\n *\n * ref: https://developer.mozilla.org/en-US/docs/Web/API/Intersection_Observer_API\n *\n * 2. Add a `scrolled` class to to trigger CSS changes.\n */\nvar initTocHide = () => {\n var onScreenItems = [];\n let hideTocCallback = (entries, observer) => {\n // Check whether any sidebar item is displayed\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n // If an element just came on screen, add it our list\n onScreenItems.push(entry.target);\n } else {\n // Otherwise, if it's in our list then remove it\n for (let ii = 0; ii < onScreenItems.length; ii++) {\n if (onScreenItems[ii] === entry.target) {\n onScreenItems.splice(ii, 1);\n break;\n }\n }\n }\n });\n\n // Hide the TOC if any margin content is displayed on the screen\n if (onScreenItems.length > 0) {\n $(\"div.bd-toc\").removeClass(\"show\");\n } else {\n $(\"div.bd-toc\").addClass(\"show\");\n }\n };\n let manageScrolledClassOnBody = (entries, observer) => {\n // The pixel is at the top, so if we're < 0 that it means we've scrolled\n if (entries[0].boundingClientRect.y < 0) {\n document.body.classList.add(\"scrolled\");\n } else {\n document.body.classList.remove(\"scrolled\");\n }\n };\n\n // Set up the intersection observer to watch all margin content\n let tocObserver = new IntersectionObserver(hideTocCallback);\n // TODO: deprecate popout after v0.5.0\n const selectorClasses = [\n \"marginnote\",\n \"sidenote\",\n \"margin\",\n \"margin-caption\",\n \"full-width\",\n \"sidebar\",\n \"popout\",\n ];\n let marginSelector = [];\n selectorClasses.forEach((ii) => {\n // Use three permutations of each class name because `tag_` and `_` used to be supported\n marginSelector.push(\n ...[\n `.${ii}`,\n `.tag_${ii}`,\n `.${ii.replace(\"-\", \"_\")}`,\n `.tag_${ii.replace(\"-\", \"_\")}`,\n ]\n );\n });\n document.querySelectorAll(marginSelector.join(\", \")).forEach((ii) => {\n tocObserver.observe(ii);\n });\n\n // Set up the observer to check if we've scrolled from top of page\n let scrollObserver = new IntersectionObserver(manageScrolledClassOnBody);\n scrollObserver.observe(document.querySelector(\".sbt-scroll-pixel-helper\"));\n};\n\n/**\n * Activate Thebe with a custom button click.\n */\nvar initThebeSBT = () => {\n var title = $(\"div.section h1\")[0];\n if (!$(title).next().hasClass(\"thebe-launch-button\")) {\n $(\"\").insertAfter($(title));\n }\n initThebe();\n};\n\n/**\n * Use Bootstrap helper function to enable tooltips.\n */\nvar initTooltips = () => {\n $(document).ready(function () {\n $('[data-toggle=\"tooltip\"]').tooltip({\n trigger: \"hover\",\n delay: { show: 500, hide: 100 },\n });\n });\n};\n\n/**\n * MutationObserver to move the ReadTheDocs button\n */\nfunction initRTDObserver() {\n const mutatedCallback = (mutationList, observer) => {\n mutationList.forEach((mutation) => {\n // Check whether the mutation is for RTD, which will have a specific structure\n if (mutation.addedNodes.length === 0) {\n return;\n }\n if (mutation.addedNodes[0].data === undefined) {\n return;\n }\n if (mutation.addedNodes[0].data.search(\"Inserted RTD Footer\") != -1) {\n mutation.addedNodes.forEach((node) => {\n document.getElementById(\"rtd-footer-container\").append(node);\n });\n }\n });\n };\n\n const observer = new MutationObserver(mutatedCallback);\n const config = { childList: true };\n observer.observe(document.body, config);\n}\n\n/**\n * Set up callback functions for UI click actions\n */\nwindow.initThebeSBT = initThebeSBT;\nwindow.printPdf = printPdf;\nwindow.toggleFullScreen = toggleFullScreen;\n\n/**\n * Set up functions to load when the DOM is ready\n */\nsbRunWhenDOMLoaded(initTooltips);\nsbRunWhenDOMLoaded(scrollToActive);\nsbRunWhenDOMLoaded(initTocHide);\nsbRunWhenDOMLoaded(initRTDObserver);\n"],"sourceRoot":""} \ No newline at end of file diff --git a/_static/searchtools.js b/_static/searchtools.js new file mode 100644 index 00000000..0a44e858 --- /dev/null +++ b/_static/searchtools.js @@ -0,0 +1,525 @@ +/* + * searchtools.js + * ~~~~~~~~~~~~~~~~ + * + * Sphinx JavaScript utilities for the full-text search. + * + * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +if (!Scorer) { + /** + * Simple result scoring code. + */ + var Scorer = { + // Implement the following function to further tweak the score for each result + // The function takes a result array [filename, title, anchor, descr, score] + // and returns the new score. + /* + score: function(result) { + return result[4]; + }, + */ + + // query matches the full name of an object + objNameMatch: 11, + // or matches in the last dotted part of the object name + objPartialMatch: 6, + // Additive scores depending on the priority of the object + objPrio: {0: 15, // used to be importantResults + 1: 5, // used to be objectResults + 2: -5}, // used to be unimportantResults + // Used when the priority is not in the mapping. + objPrioDefault: 0, + + // query found in title + title: 15, + partialTitle: 7, + // query found in terms + term: 5, + partialTerm: 2 + }; +} + +if (!splitQuery) { + function splitQuery(query) { + return query.split(/\s+/); + } +} + +/** + * Search Module + */ +var Search = { + + _index : null, + _queued_query : null, + _pulse_status : -1, + + htmlToText : function(htmlString) { + var virtualDocument = document.implementation.createHTMLDocument('virtual'); + var htmlElement = $(htmlString, virtualDocument); + htmlElement.find('.headerlink').remove(); + docContent = htmlElement.find('[role=main]')[0]; + if(docContent === undefined) { + console.warn("Content block not found. Sphinx search tries to obtain it " + + "via '[role=main]'. Could you check your theme or template."); + return ""; + } + return docContent.textContent || docContent.innerText; + }, + + init : function() { + var params = $.getQueryParameters(); + if (params.q) { + var query = params.q[0]; + $('input[name="q"]')[0].value = query; + this.performSearch(query); + } + }, + + loadIndex : function(url) { + $.ajax({type: "GET", url: url, data: null, + dataType: "script", cache: true, + complete: function(jqxhr, textstatus) { + if (textstatus != "success") { + document.getElementById("searchindexloader").src = url; + } + }}); + }, + + setIndex : function(index) { + var q; + this._index = index; + if ((q = this._queued_query) !== null) { + this._queued_query = null; + Search.query(q); + } + }, + + hasIndex : function() { + return this._index !== null; + }, + + deferQuery : function(query) { + this._queued_query = query; + }, + + stopPulse : function() { + this._pulse_status = 0; + }, + + startPulse : function() { + if (this._pulse_status >= 0) + return; + function pulse() { + var i; + Search._pulse_status = (Search._pulse_status + 1) % 4; + var dotString = ''; + for (i = 0; i < Search._pulse_status; i++) + dotString += '.'; + Search.dots.text(dotString); + if (Search._pulse_status > -1) + window.setTimeout(pulse, 500); + } + pulse(); + }, + + /** + * perform a search for something (or wait until index is loaded) + */ + performSearch : function(query) { + // create the required interface elements + this.out = $('#search-results'); + this.title = $('

' + _('Searching') + '

').appendTo(this.out); + this.dots = $('').appendTo(this.title); + this.status = $('

 

').appendTo(this.out); + this.output = $('