From 691d1d66f337e275eb9dd29cac0e37e09e85e94f Mon Sep 17 00:00:00 2001 From: Ruud Beukema <beukema@astron.nl> Date: Tue, 10 Oct 2017 09:53:34 +0000 Subject: [PATCH] Task #10948: merged specific trunk revisions into task branch --- .gitattributes | 96 +- CEP/Calibration/BBSControl/package.dox | 11 - .../BBSControl/scripts/SolverPlot.py | 15 +- .../BBSControl/scripts/addClearcalColumns.py | 12 +- CEP/Calibration/BBSKernel/package.dox | 15 - CEP/Calibration/BBSTools/scripts/BBStiming.py | 2 - CEP/Calibration/ElementResponse/package.dox | 7 - CEP/Calibration/StationResponse/package.dox | 5 - CEP/Calibration/{ => doc}/package.dox | 0 CEP/DP3/DPPP/package.dox | 16 - CEP/DP3/SPWCombine/package.dox | 5 - CEP/DP3/{ => doc}/package.dox | 0 .../AWImager2/include/AWImager2/FFTCMatrix.h | 159 +- .../LofarFT/include/LofarFT/FFTCMatrix.h | 166 +- CEP/Imager/{ => doc}/package.dox | 0 CEP/LMWCommon/package.dox | 12 - CEP/MS/package.dox | 11 - CEP/ParmDB/package.dox | 13 - CEP/doc/package.dox | 9 + CEP/package.dox | 5 - CEP/pyparmdb/package.dox | 3 - CMake/LofarDoxygen.cmake | 5 + CMake/docscripts/doxygen.cfg.in | 2497 ++++- CMake/docscripts/py_filter.sh | 2 + CMake/variants/variants.lofar-documentation | 17 + Docker/docker.md | 3 + Docker/lofar-documentation/Dockerfile | 265 + .../build_documentation.sh | 51 + .../lofar_documentation.md | 118 + LCS/ACC/ALC/package.dox | 9 - LCS/ACC/PLC/package.dox | 7 - LCS/ACC/{ => doc}/package.dox | 0 LCS/AMC/package.dox | 34 - LCS/ApplCommon/package.dox | 11 - LCS/Blob/package.dox | 23 - LCS/Common/package.dox | 19 - LCS/LACE/package.dox | 4 - LCS/Messaging/package.dox | 9 - LCS/Stream/{ => doc}/package.dox | 0 LCS/Tools/package.dox | 7 - LCS/Tools/src/makePackage.py | 3 +- LCS/Transport/package.dox | 5 - LCS/{ => doc}/package.dox | 2 +- LCS/pyparameterset/package.dox | 3 - LCS/pytools/package.dox | 3 - LTA/LTAIngest/doc/README.txt | 1 - LTA/LTAIngest/doc/ingest_sequence_diagram.png | Bin 108665 -> 0 bytes .../doc/ingest_sequence_diagram.puml | 108 - LTA/LTAIngest/doc/lta_ingest.md | 266 + LTA/doc/package.dox | 11 + .../doc/lta_storage_overview.md | 3 + MAC/APL/APLCommon/{ => doc}/package.dox | 0 MAC/APL/APLCommon/src/swlevel | 10 +- MAC/APL/CEPCU/{ => doc}/package.dox | 0 MAC/APL/CUDaemons/{ => doc}/package.dox | 0 MAC/APL/CURTDBDaemons/{ => doc}/package.dox | 0 MAC/APL/MainCU/{ => doc}/package.dox | 0 .../PAC/CAL_Protocol/{ => doc}/package.dox | 0 .../PAC/IBS_Protocol/{ => doc}/package.dox | 0 .../PAC/LBA_Calibration/{ => doc}/package.dox | 0 MAC/APL/PAC/{ => doc}/package.dox | 0 .../PIC/RSP_Protocol/{ => doc}/package.dox | 0 MAC/APL/PIC/{ => doc}/package.dox | 0 MAC/APL/RTCCommon/{ => doc}/package.dox | 0 MAC/APL/RTDBCommon/{ => doc}/package.dox | 0 MAC/APL/StationCU/{ => doc}/package.dox | 0 MAC/APL/TestCtlr/{ => doc}/package.dox | 0 MAC/APL/VHECR/{ => doc}/package.dox | 0 MAC/APL/{ => doc}/package.dox | 0 .../data/Coordinates/make_conf_files.py | 2 +- MAC/Deployment/data/{ => doc}/package.dox | 0 MAC/Deployment/{ => doc}/package.dox | 0 MAC/GCF/PVSS/{ => doc}/package.dox | 0 MAC/GCF/RTDB/{ => doc}/package.dox | 0 MAC/GCF/TM/{ => doc}/package.dox | 0 MAC/GCF/TM/include/GCF/TM/GCF_Fsm.h | 16 +- MAC/GCF/{ => doc}/package.dox | 0 MAC/MACIO/{ => doc}/package.dox | 0 MAC/Navigator2/panels/navigator.pnl | 33 + MAC/doc/package.dox | 9 + RTCP/Cobalt/CoInterface/{ => doc}/package.dox | 0 RTCP/Cobalt/GPUProc/{ => doc}/package.dox | 0 RTCP/Cobalt/InputProc/{ => doc}/package.dox | 0 RTCP/Cobalt/OpenCL_FFT/{ => doc}/package.dox | 0 RTCP/Cobalt/OutputProc/{ => doc}/package.dox | 0 RTCP/Cobalt/{ => doc}/package.dox | 0 RTCP/{ => doc}/package.dox | 2 +- SAS/Feedback_Service/{ => doc}/package.dox | 0 SAS/OTDB/{ => doc}/package.dox | 0 .../ResourceAssigner/doc/package.dox | 6 + SAS/ResourceAssignment/doc/package.dox | 10 + SAS/doc/package.dox | 9 + SubSystems/CCU_MAC/doc/package.dox | 9 + SubSystems/CN_MAC/doc/package.dox | 9 + SubSystems/DataManagement/doc/package.dox | 9 + SubSystems/Dragnet/doc/package.dox | 9 + SubSystems/LCU_MAC/doc/package.dox | 9 + SubSystems/LTAIngest/doc/package.dox | 9 + SubSystems/MCU_MAC/doc/package.dox | 9 + SubSystems/Offline/doc/package.dox | 9 + SubSystems/Online_Cobalt/doc/package.dox | 9 + SubSystems/Online_OutputProc/doc/package.dox | 9 + SubSystems/RAServices/doc/package.dox | 9 + SubSystems/SAS_OTDB/doc/package.dox | 9 + SubSystems/SAS_Tools/doc/package.dox | 9 + SubSystems/ST_MAC/doc/package.dox | 9 + SubSystems/WinCC_DB/doc/package.dox | 9 + SubSystems/doc/package.dox | 7 + doc/doxygen/CMakeLists.txt | 2 +- doc/doxygen/quick-guide.dox | 38 + doc/doxygen/styling/CMakeLists.txt | 39 + doc/doxygen/styling/LOFAR_logo.png | Bin 0 -> 10617 bytes doc/doxygen/styling/bootstrap.min.css.in | 5 + doc/doxygen/styling/bootstrap.min.js.in | 7 + doc/doxygen/styling/customdoxygen.css.in | 458 + doc/doxygen/styling/doxy-boot.js.in | 271 + doc/doxygen/styling/footer.html.in | 24 + .../styling/glyphicons-halflings-regular.eot | Bin 0 -> 20127 bytes .../styling/glyphicons-halflings-regular.svg | 288 + .../styling/glyphicons-halflings-regular.ttf | Bin 0 -> 45404 bytes .../styling/glyphicons-halflings-regular.woff | Bin 0 -> 23424 bytes doc/doxygen/styling/header.html.in | 47 + doc/doxygen/styling/jquery-2.1.1.js.in | 9190 +++++++++++++++++ doc/doxygen/styling/jquery-2.1.1.min.js.in | 4 + doc/doxygen/styling/jquery.powertip.min.js.in | 8 + doc/mainpage.md | 75 + doc/package.dox | 7 + doc/release_notes.md | 90 + doc/sw_documentation_template.md | 96 + package.dox | 2 - 130 files changed, 14343 insertions(+), 595 deletions(-) delete mode 100644 CEP/Calibration/BBSControl/package.dox delete mode 100644 CEP/Calibration/BBSKernel/package.dox delete mode 100644 CEP/Calibration/ElementResponse/package.dox delete mode 100644 CEP/Calibration/StationResponse/package.dox rename CEP/Calibration/{ => doc}/package.dox (100%) delete mode 100644 CEP/DP3/DPPP/package.dox delete mode 100644 CEP/DP3/SPWCombine/package.dox rename CEP/DP3/{ => doc}/package.dox (100%) rename CEP/Imager/{ => doc}/package.dox (100%) delete mode 100644 CEP/LMWCommon/package.dox delete mode 100644 CEP/MS/package.dox delete mode 100644 CEP/ParmDB/package.dox create mode 100644 CEP/doc/package.dox delete mode 100644 CEP/package.dox delete mode 100644 CEP/pyparmdb/package.dox create mode 100755 CMake/docscripts/py_filter.sh create mode 100644 CMake/variants/variants.lofar-documentation create mode 100644 Docker/docker.md create mode 100644 Docker/lofar-documentation/Dockerfile create mode 100755 Docker/lofar-documentation/build_documentation.sh create mode 100644 Docker/lofar-documentation/lofar_documentation.md delete mode 100644 LCS/ACC/ALC/package.dox delete mode 100644 LCS/ACC/PLC/package.dox rename LCS/ACC/{ => doc}/package.dox (100%) delete mode 100644 LCS/AMC/package.dox delete mode 100644 LCS/ApplCommon/package.dox delete mode 100644 LCS/Blob/package.dox delete mode 100644 LCS/Common/package.dox delete mode 100644 LCS/LACE/package.dox delete mode 100644 LCS/Messaging/package.dox rename LCS/Stream/{ => doc}/package.dox (100%) delete mode 100644 LCS/Tools/package.dox delete mode 100644 LCS/Transport/package.dox rename LCS/{ => doc}/package.dox (92%) delete mode 100644 LCS/pyparameterset/package.dox delete mode 100644 LCS/pytools/package.dox delete mode 100644 LTA/LTAIngest/doc/README.txt delete mode 100644 LTA/LTAIngest/doc/ingest_sequence_diagram.png delete mode 100644 LTA/LTAIngest/doc/ingest_sequence_diagram.puml create mode 100644 LTA/LTAIngest/doc/lta_ingest.md create mode 100644 LTA/doc/package.dox create mode 100644 LTA/ltastorageoverview/doc/lta_storage_overview.md rename MAC/APL/APLCommon/{ => doc}/package.dox (100%) rename MAC/APL/CEPCU/{ => doc}/package.dox (100%) rename MAC/APL/CUDaemons/{ => doc}/package.dox (100%) rename MAC/APL/CURTDBDaemons/{ => doc}/package.dox (100%) rename MAC/APL/MainCU/{ => doc}/package.dox (100%) rename MAC/APL/PAC/CAL_Protocol/{ => doc}/package.dox (100%) rename MAC/APL/PAC/IBS_Protocol/{ => doc}/package.dox (100%) rename MAC/APL/PAC/LBA_Calibration/{ => doc}/package.dox (100%) rename MAC/APL/PAC/{ => doc}/package.dox (100%) rename MAC/APL/PIC/RSP_Protocol/{ => doc}/package.dox (100%) rename MAC/APL/PIC/{ => doc}/package.dox (100%) rename MAC/APL/RTCCommon/{ => doc}/package.dox (100%) rename MAC/APL/RTDBCommon/{ => doc}/package.dox (100%) rename MAC/APL/StationCU/{ => doc}/package.dox (100%) rename MAC/APL/TestCtlr/{ => doc}/package.dox (100%) rename MAC/APL/VHECR/{ => doc}/package.dox (100%) rename MAC/APL/{ => doc}/package.dox (100%) rename MAC/Deployment/data/{ => doc}/package.dox (100%) rename MAC/Deployment/{ => doc}/package.dox (100%) rename MAC/GCF/PVSS/{ => doc}/package.dox (100%) rename MAC/GCF/RTDB/{ => doc}/package.dox (100%) rename MAC/GCF/TM/{ => doc}/package.dox (100%) rename MAC/GCF/{ => doc}/package.dox (100%) rename MAC/MACIO/{ => doc}/package.dox (100%) create mode 100644 MAC/doc/package.dox rename RTCP/Cobalt/CoInterface/{ => doc}/package.dox (100%) rename RTCP/Cobalt/GPUProc/{ => doc}/package.dox (100%) rename RTCP/Cobalt/InputProc/{ => doc}/package.dox (100%) rename RTCP/Cobalt/OpenCL_FFT/{ => doc}/package.dox (100%) rename RTCP/Cobalt/OutputProc/{ => doc}/package.dox (100%) rename RTCP/Cobalt/{ => doc}/package.dox (100%) rename RTCP/{ => doc}/package.dox (95%) rename SAS/Feedback_Service/{ => doc}/package.dox (100%) rename SAS/OTDB/{ => doc}/package.dox (100%) create mode 100644 SAS/ResourceAssignment/ResourceAssigner/doc/package.dox create mode 100644 SAS/ResourceAssignment/doc/package.dox create mode 100644 SAS/doc/package.dox create mode 100644 SubSystems/CCU_MAC/doc/package.dox create mode 100644 SubSystems/CN_MAC/doc/package.dox create mode 100644 SubSystems/DataManagement/doc/package.dox create mode 100644 SubSystems/Dragnet/doc/package.dox create mode 100644 SubSystems/LCU_MAC/doc/package.dox create mode 100644 SubSystems/LTAIngest/doc/package.dox create mode 100644 SubSystems/MCU_MAC/doc/package.dox create mode 100644 SubSystems/Offline/doc/package.dox create mode 100644 SubSystems/Online_Cobalt/doc/package.dox create mode 100644 SubSystems/Online_OutputProc/doc/package.dox create mode 100644 SubSystems/RAServices/doc/package.dox create mode 100644 SubSystems/SAS_OTDB/doc/package.dox create mode 100644 SubSystems/SAS_Tools/doc/package.dox create mode 100644 SubSystems/ST_MAC/doc/package.dox create mode 100644 SubSystems/WinCC_DB/doc/package.dox create mode 100644 SubSystems/doc/package.dox create mode 100644 doc/doxygen/styling/CMakeLists.txt create mode 100644 doc/doxygen/styling/LOFAR_logo.png create mode 100644 doc/doxygen/styling/bootstrap.min.css.in create mode 100644 doc/doxygen/styling/bootstrap.min.js.in create mode 100644 doc/doxygen/styling/customdoxygen.css.in create mode 100644 doc/doxygen/styling/doxy-boot.js.in create mode 100644 doc/doxygen/styling/footer.html.in create mode 100644 doc/doxygen/styling/glyphicons-halflings-regular.eot create mode 100644 doc/doxygen/styling/glyphicons-halflings-regular.svg create mode 100644 doc/doxygen/styling/glyphicons-halflings-regular.ttf create mode 100644 doc/doxygen/styling/glyphicons-halflings-regular.woff create mode 100644 doc/doxygen/styling/header.html.in create mode 100644 doc/doxygen/styling/jquery-2.1.1.js.in create mode 100644 doc/doxygen/styling/jquery-2.1.1.min.js.in create mode 100644 doc/doxygen/styling/jquery.powertip.min.js.in create mode 100644 doc/mainpage.md create mode 100644 doc/package.dox create mode 100644 doc/release_notes.md create mode 100644 doc/sw_documentation_template.md delete mode 100644 package.dox diff --git a/.gitattributes b/.gitattributes index b320e7fe1b6..330172a49cf 100644 --- a/.gitattributes +++ b/.gitattributes @@ -150,7 +150,6 @@ CEP/Calibration/BBSTools/test/CMakeLists.txt -text CEP/Calibration/ElementResponse/CMakeLists.txt -text CEP/Calibration/ElementResponse/include/ElementResponse/CMakeLists.txt -text CEP/Calibration/ElementResponse/include/ElementResponse/ElementResponse.h -text -CEP/Calibration/ElementResponse/package.dox -text CEP/Calibration/ElementResponse/src/CMakeLists.txt -text CEP/Calibration/ElementResponse/src/DefaultCoeffHBA.cc -text CEP/Calibration/ElementResponse/src/DefaultCoeffLBA.cc -text @@ -197,7 +196,6 @@ CEP/Calibration/StationResponse/include/StationResponse/MathUtil.h -text CEP/Calibration/StationResponse/include/StationResponse/Station.h -text CEP/Calibration/StationResponse/include/StationResponse/TileAntenna.h -text CEP/Calibration/StationResponse/include/StationResponse/Types.h -text -CEP/Calibration/StationResponse/package.dox -text CEP/Calibration/StationResponse/src/AntennaField.cc -text CEP/Calibration/StationResponse/src/AntennaFieldHBA.cc -text CEP/Calibration/StationResponse/src/AntennaFieldLBA.cc -text @@ -212,6 +210,7 @@ CEP/Calibration/StationResponse/src/Station.cc -text CEP/Calibration/StationResponse/src/TileAntenna.cc -text CEP/Calibration/StationResponse/src/Types.cc -text CEP/Calibration/StationResponse/src/makeresponseimage.cc -text +CEP/Calibration/doc/package.dox -text CEP/Calibration/pystationresponse/test/tStationBeamNCP.in.MS/ANTENNA/table.dat -text CEP/Calibration/pystationresponse/test/tStationBeamNCP.in.MS/ANTENNA/table.f0 -text CEP/Calibration/pystationresponse/test/tStationBeamNCP.in.MS/ANTENNA/table.info -text @@ -333,7 +332,6 @@ CEP/DP3/DPPP/include/DPPP/Stokes.h -text CEP/DP3/DPPP/include/DPPP/SubtractMixed.h -text CEP/DP3/DPPP/include/DPPP/SubtractNew.h -text CEP/DP3/DPPP/include/DPPP/UVWCalculator.h -text -CEP/DP3/DPPP/package.dox -text CEP/DP3/DPPP/share/HBAdefault -text CEP/DP3/DPPP/share/LBAdefault -text CEP/DP3/DPPP/src/Apply.cc -text @@ -462,6 +460,7 @@ CEP/DP3/TestDynDPPP/test/CMakeLists.txt -text CEP/DP3/TestDynDPPP/test/tTestDynStep.cc -text CEP/DP3/TestDynDPPP/test/tTestDynStep.run -text CEP/DP3/TestDynDPPP/test/tTestDynStep.sh -text +CEP/DP3/doc/package.dox -text CEP/GSM/bremen/Makefile -text CEP/GSM/bremen/cleanup.py -text CEP/GSM/bremen/doc/project.pdf -text @@ -748,6 +747,7 @@ CEP/Imager/LofarFT/src/LofarCubeSkyEquation.cc -text CEP/Imager/LofarFT/src/LofarVisibilityResampler.cc -text CEP/Imager/LofarFT/src/LofarVisibilityResamplerBase.cc -text CEP/Imager/LofarFT/src/addImagingInfo -text +CEP/Imager/doc/package.dox -text CEP/LAPS/DBToQDeamon/src/DBToQDeamon.py eol=lf CEP/LAPS/DPUservice/CMakeLists.txt -text CEP/LAPS/DPUservice/src/CMakeLists.txt -text @@ -1223,6 +1223,7 @@ CEP/PyBDSM/test/setpythonpath.run_tmpl -text CEP/PyBDSM/test/tbdsm_process_image.in -text CEP/PyBDSM/test/tbdsm_process_image.in_fits -text svneol=unset#image/x-fits CEP/PyBDSM/test/tbdsm_process_image.py -text +CEP/doc/package.dox -text CMake/FindALGLIB.cmake -text CMake/FindAOFlagger.cmake -text CMake/FindCUDADriver.cmake -text @@ -1236,6 +1237,7 @@ CMake/FindWINCC.cmake -text CMake/LibFindMacros.cmake -text CMake/LofarPackageList.cmake eol=lf CMake/TODO -text +CMake/docscripts/py_filter.sh -text CMake/get_casacore_deps.sh eol=lf CMake/testscripts/assay -text CMake/testscripts/checkfloat -text @@ -1259,9 +1261,11 @@ CMake/variants/variants.fs5 -text CMake/variants/variants.head01 -text CMake/variants/variants.lcs157 -text CMake/variants/variants.lexar -text +CMake/variants/variants.lofar-documentation -text CMake/variants/variants.lotar -text CMake/variants/variants.macrenting2 -text Docker/docker-build-all.sh -text +Docker/docker.md -text Docker/dynspec/Dockerfile -text Docker/dynspec/bashrc -text Docker/dynspec/chuser.sh -text @@ -1273,6 +1277,9 @@ Docker/lofar-base/bashrc.d/01-python-casacore -text Docker/lofar-base/bashrc.d/50-lofar -text Docker/lofar-base/casarc -text Docker/lofar-base/chuser.sh -text +Docker/lofar-documentation/Dockerfile -text +Docker/lofar-documentation/build_documentation.sh -text +Docker/lofar-documentation/lofar_documentation.md -text Docker/lofar-outputproc/Dockerfile.tmpl -text Docker/lofar-pipeline/Dockerfile.tmpl -text Docker/lofar-pipeline/bashrc.d/10-aoflagger -text @@ -1443,6 +1450,7 @@ JAVA/LofarUtils/src/nl/astron/lofar/lofarutils/validation/TimeVectorValidator.ja JAVA/LofarUtils/src/nl/astron/lofar/lofarutils/validation/Validators.java -text JAVA/LofarUtils/src/nl/astron/lofar/lofarutils/validation/WantsValidationStatus.java -text JAVA/pom.xml -text svneol=unset#application/xml +LCS/ACC/doc/package.dox -text LCS/AMC/AMCImpl/src/AMCServer.cc -text LCS/AMC/amc_main_classes.png -text LCS/AMC/amc_package.png -text @@ -1565,7 +1573,6 @@ LCS/Messaging/include/Messaging/MonitoringMessage.h -text LCS/Messaging/include/Messaging/ProgressMessage.h -text LCS/Messaging/include/Messaging/ServiceMessage.h -text LCS/Messaging/include/Messaging/ToBus.h -text -LCS/Messaging/package.dox -text LCS/Messaging/patch.txt -text LCS/Messaging/python/CMakeLists.txt -text LCS/Messaging/python/examples/ToUpperClient -text @@ -1665,6 +1672,7 @@ LCS/PyStationModel/test/datasets/t_antennasets_parser.antennaset_conf_test_sampl LCS/PyStationModel/test/t_antennasets_parser.py -text LCS/PyStationModel/test/t_antennasets_parser.run -text LCS/PyStationModel/test/t_antennasets_parser.sh -text +LCS/Stream/doc/package.dox -text LCS/Tools/src/checkcomp.py -text LCS/Tools/src/countalllines -text LCS/Tools/src/countlines -text @@ -1673,6 +1681,7 @@ LCS/Tools/src/countpurecodecomm -text LCS/Tools/src/fillreview -text LCS/Tools/src/makecov -text LCS/Tools/src/processgcov -text +LCS/doc/package.dox -text LCU/Firmware/images/ap3b_v6_2.hex -text LCU/Firmware/images/ap3b_v7_13.bit -text LCU/Firmware/images/ap3b_v7_13.hex -text @@ -2043,13 +2052,13 @@ LTA/LTAIngest/LTAIngestServer/LTAIngestWebServer/lib/CMakeLists.txt -text LTA/LTAIngest/LTAIngestServer/LTAIngestWebServer/lib/ingestwebserver.py -text LTA/LTAIngest/LTAIngestServer/LTAIngestWebServer/lib/static/js/highcharts.js -text LTA/LTAIngest/LTAIngestServer/LTAIngestWebServer/lib/static/js/jquery.min.js -text -LTA/LTAIngest/doc/README.txt -text -LTA/LTAIngest/doc/ingest_sequence_diagram.png -text -LTA/LTAIngest/doc/ingest_sequence_diagram.puml -text +LTA/LTAIngest/doc/lta_ingest.md -text LTA/LTAIngest/test/CMakeLists.txt -text +LTA/doc/package.dox -text LTA/ltastorageoverview/CMakeLists.txt -text LTA/ltastorageoverview/bin/CMakeLists.txt -text LTA/ltastorageoverview/bin/ltastorageoverviewscraper -text +LTA/ltastorageoverview/doc/lta_storage_overview.md -text LTA/ltastorageoverview/lib/CMakeLists.txt -text LTA/ltastorageoverview/lib/__init__.py -text LTA/ltastorageoverview/lib/create_db_ltastorageoverview.sql -text @@ -2067,6 +2076,7 @@ LTA/ltastorageoverview/test/test_lso_webservice.sh -text LTA/ltastorageoverview/test/test_store.py -text LTA/ltastorageoverview/test/test_store.run -text LTA/ltastorageoverview/test/test_store.sh -text +MAC/APL/APLCommon/doc/package.dox -text MAC/APL/APLCommon/include/APL/APLCommon/AntennaField.h -text MAC/APL/APLCommon/src/AntennaField.cc -text MAC/APL/APLCommon/src/StartDaemon_Protocol.prot -text svneol=native#application/octet-stream @@ -2088,6 +2098,7 @@ MAC/APL/CASATools/include/CASATools/CasaConverter.h -text MAC/APL/CASATools/src/CasaConverter.cc -text MAC/APL/CASATools/test/tCasaConverter.cc -text MAC/APL/CASATools/test/tCasaConverter.log_prop -text +MAC/APL/CEPCU/doc/package.dox -text MAC/APL/CEPCU/src/CEPHardwareMonitor/BlueGeneMonitor.cc -text MAC/APL/CEPCU/src/CEPHardwareMonitor/BlueGeneMonitor.h -text MAC/APL/CEPCU/src/CEPHardwareMonitor/CEPHWMonitor.dpl -text @@ -2130,6 +2141,8 @@ MAC/APL/CUDaemons/PVSSGateway_Stub/PVSSGatewayStub.cc -text MAC/APL/CUDaemons/PVSSGateway_Stub/PVSSGatewayStub.conf -text MAC/APL/CUDaemons/PVSSGateway_Stub/PVSSGatewayStub.h -text MAC/APL/CUDaemons/PVSSGateway_Stub/PVSSGatewayStubMain.cc -text +MAC/APL/CUDaemons/doc/package.dox -text +MAC/APL/CURTDBDaemons/doc/package.dox -text MAC/APL/CURTDBDaemons/src/LogProcessor/LogProcessor.conf -text MAC/APL/CURTDBDaemons/src/LogProcessor/LogProcessor.log_prop -text MAC/APL/CURTDBDaemons/src/PVSSGateway/CMakeLists.txt -text @@ -2141,6 +2154,7 @@ MAC/APL/CURTDBDaemons/src/PVSSGateway/PVSSGatewayMain.cc -text MAC/APL/CURTDBDaemons/test/tPVSSGateway.cc -text MAC/APL/DEPENDENCIES -text svneol=native#application/octet-stream MAC/APL/MD_Protocol/src/MD_Protocol.prot -text +MAC/APL/MainCU/doc/package.dox -text MAC/APL/MainCU/src/CRTriggerControl/CMakeLists.txt -text MAC/APL/MainCU/src/CRTriggerControl/PVSSDatapointDefs.h -text MAC/APL/MainCU/src/CRTriggerControl/TriggerControl.cc -text @@ -2151,6 +2165,7 @@ MAC/APL/MainCU/src/CRTriggerControl/crctl.h -text MAC/APL/MainCU/src/MACScheduler/claimTest.cc -text MAC/APL/MainCU/src/MACScheduler/claimTest.h -text MAC/APL/MainCU/src/ObservationControl/ObservationControl.conf.in -text +MAC/APL/PAC/CAL_Protocol/doc/package.dox -text MAC/APL/PAC/Cal_Server/src/ACC.cc -text MAC/APL/PAC/Cal_Server/src/ACC.h -text MAC/APL/PAC/Cal_Server/src/AntennaArray.cc -text @@ -2165,6 +2180,7 @@ MAC/APL/PAC/Cal_Server/src/SharedResource.h -text MAC/APL/PAC/Cal_Server/src/SourceCatalog.conf.in -text MAC/APL/PAC/Cal_Server/src/SubArrayMgr.cc -text MAC/APL/PAC/Cal_Server/src/SubArrayMgr.h -text +MAC/APL/PAC/IBS_Protocol/doc/package.dox -text MAC/APL/PAC/IBS_Protocol/src/IBS_Protocol.prot -text MAC/APL/PAC/ICAL_Protocol/include/APL/ICAL_Protocol/AntennaGains.h -text MAC/APL/PAC/ICAL_Protocol/include/APL/ICAL_Protocol/SpectralWindow.h -text @@ -2218,6 +2234,7 @@ MAC/APL/PAC/ITRFCalServer/test/tCalServer.cc -text MAC/APL/PAC/ITRFCalServer/test/tCalServer.h -text MAC/APL/PAC/ITRFCalServer/test/tSubArrayMgr.cc -text MAC/APL/PAC/ITRFCalServer/test/tSubArrayMgr.log_prop -text +MAC/APL/PAC/LBA_Calibration/doc/package.dox -text MAC/APL/PAC/LBA_Calibration/src/statcal.m -text MAC/APL/PAC/LBA_Calibration/test/20080118_083229_acc_512x96x96.dat.gz -text svneol=unset#application/x-gzip MAC/APL/PAC/LBA_Calibration/test/antpos.dat -text @@ -2231,6 +2248,7 @@ MAC/APL/PAC/SHMInfo_Server/test/mis.btsw -text svneol=native#application/octet-s MAC/APL/PAC/SHMInfo_Server/test/mis.io -text svneol=native#application/octet-stream MAC/APL/PAC/SHMInfo_Server/test/mis.pol -text svneol=native#application/octet-stream MAC/APL/PAC/SHMInfo_Server/test/test.sh -text svneol=native#application/octet-stream +MAC/APL/PAC/doc/package.dox -text MAC/APL/PIC/RSP_Driver/src/BMRead.cc -text MAC/APL/PIC/RSP_Driver/src/BMRead.h -text MAC/APL/PIC/RSP_Driver/src/BMWrite.cc -text @@ -2285,6 +2303,7 @@ MAC/APL/PIC/RSP_Driver/test/tRCUCables.in_4 -text MAC/APL/PIC/RSP_Driver/test/tRCUCables.in_5 -text MAC/APL/PIC/RSP_Driver/test/tRCUCables.in_6 -text MAC/APL/PIC/RSP_Driver/test/tRCUCables.in_CableAtts -text +MAC/APL/PIC/RSP_Protocol/doc/package.dox -text MAC/APL/PIC/RSP_Protocol/include/APL/RSP_Protocol/Bitmode.h -text MAC/APL/PIC/RSP_Protocol/include/APL/RSP_Protocol/SDOMode.h -text MAC/APL/PIC/RSP_Protocol/include/APL/RSP_Protocol/SDOSelection.h -text @@ -2296,9 +2315,12 @@ MAC/APL/PIC/RSP_Protocol/test/tRCUSettings.stdout -text MAC/APL/PIC/TBB_Driver/src/UdpIpTools.cc -text MAC/APL/PIC/TBB_Driver/test/StubRawEvent.cc -text MAC/APL/PIC/TBB_Driver/test/StubRawEvent.h -text +MAC/APL/PIC/doc/package.dox -text MAC/APL/PIC/rsuctl/lofar.jpg -text svneol=unset#unset MAC/APL/PIC/rsuctl/ndump.tgz -text svneol=unset#unset +MAC/APL/RTCCommon/doc/package.dox -text MAC/APL/RTCCommon/test/tTimestamp.cc -text +MAC/APL/RTDBCommon/doc/package.dox -text MAC/APL/RTDBCommon/include/APL/RTDBCommon/RTDButilities.h -text MAC/APL/RTDBCommon/src/CM_Protocol.prot -text MAC/APL/RTDBCommon/src/RTDButilities.cc -text @@ -2314,6 +2336,7 @@ MAC/APL/RTDBCommon/test/tRTDButilities.dpl -text MAC/APL/RTDBCommon/test/tRTDButilities.h -text MAC/APL/RTDBCommon/test/tRTDButilities.run eol=lf MAC/APL/RTDBCommon/test/tRTDButilities.sh eol=lf +MAC/APL/StationCU/doc/package.dox -text MAC/APL/StationCU/src/ClockProtocol/Clock_Protocol.prot -text MAC/APL/StationCU/src/HardwareMonitor/EC_Protocol.prot -text MAC/APL/StationCU/src/HardwareMonitor/HardwareMonitor.conf -text @@ -2327,9 +2350,12 @@ MAC/APL/StationCU/src/TBBControl/startTBB.sh -text svneol=unset#text/x-shellscri MAC/APL/StationCU/src/TBBControl/stopTBB.sh -text svneol=unset#text/x-shellscript MAC/APL/StationCU/src/TBBControl/trigctl.cc -text MAC/APL/StationCU/src/TBBControl/trigctl.h -text +MAC/APL/TestCtlr/doc/package.dox -text +MAC/APL/VHECR/doc/package.dox -text MAC/APL/VHECR/include/VHECR/VHECRsettings.h -text MAC/APL/VHECR/src/VHECRsettings.cc -text MAC/APL/VHECR/test/2008-01-24_TRIGGER.dat -text +MAC/APL/doc/package.dox -text MAC/Config/Apc/b1.apc -text svneol=native#application/octet-stream MAC/Config/Apc/b2.apc -text svneol=native#application/octet-stream MAC/Config/Apc/d1.apc -text svneol=native#application/octet-stream @@ -3015,6 +3041,8 @@ MAC/Deployment/data/StaticMetaData/iHBADeltas/RS511-iHBADeltas.conf -text MAC/Deployment/data/StaticMetaData/iHBADeltas/SE607-iHBADeltas.conf -text MAC/Deployment/data/StaticMetaData/iHBADeltas/UK608-iHBADeltas.conf -text MAC/Deployment/data/StaticMetaData/iHBADeltas/iHBADeltas_default.conf -text +MAC/Deployment/data/doc/package.dox -text +MAC/Deployment/doc/package.dox -text MAC/Docs/LOFAR-MAC-Development-environment.doc -text svneol=unset#unset MAC/Docs/PVSS-Readme.doc -text MAC/Drivers/spid/tools/Makefile -text svneol=native#application/octet-stream @@ -3023,6 +3051,7 @@ MAC/GCF/LogSys/CLP/src/CodeLoggingProcessor.log_prop.in -text svneol=native#appl MAC/GCF/LogSys/KVLogSys/src/KVL_Protocol.prot -text svneol=native#application/octet-stream MAC/GCF/LogSys/KVLogSys/src/KeyValueLoggerSys.conf.in -text svneol=native#application/octet-stream MAC/GCF/LogSys/KVLogSys/src/KeyValueLoggerSys.log_prop.in -text svneol=native#application/octet-stream +MAC/GCF/PVSS/doc/package.dox -text MAC/GCF/PVSS/src/GCF_DynTypes.h -text MAC/GCF/PVSS/src/GCF_PVTypes.cc -text MAC/GCF/PVSS/test/tPVSSinfo.run eol=lf @@ -3033,6 +3062,7 @@ MAC/GCF/PVSS/test/tPerformance.sh eol=lf MAC/GCF/PVSS/test/testDPType.dpl -text MAC/GCF/PVSS/test/testFuncs.sh eol=lf MAC/GCF/README -text svneol=native#application/octet-stream +MAC/GCF/RTDB/doc/package.dox -text MAC/GCF/RTDB/include/GCF/RTDB/GCF_RTDBPort.h -text MAC/GCF/RTDB/src/GCF_RTDBPort.cc -text MAC/GCF/RTDB/src/PortResponse.h -text @@ -3049,6 +3079,7 @@ MAC/GCF/RTDB/test/tRTDBPort.h -text MAC/GCF/RTDB/test/tRTDBPort.run eol=lf MAC/GCF/RTDB/test/tRTDBPort.sh eol=lf MAC/GCF/RTDB/test/writeScript.ctl -text +MAC/GCF/TM/doc/package.dox -text MAC/GCF/TM/include/GCF/TM/TestTask.h -text MAC/GCF/TM/src/TestFramework/TestFW_Protocol.prot -text MAC/GCF/TM/src/TestFramework/TestTask.cc -text @@ -3079,8 +3110,10 @@ MAC/GCF/_PAL/SAL/test/Echo_Protocol.prot -text svneol=native#application/octet-s MAC/GCF/_PAL/SAL/test/sal-test.conf.in -text svneol=native#application/octet-stream MAC/GCF/_PALlight/PMLlight/src/gcf-pmllight.conf.in -text svneol=native#application/octet-stream MAC/GCF/_PALlight/PMLlight/src/genTypeInfo -text svneol=native#application/octet-stream +MAC/GCF/doc/package.dox -text MAC/MACIO/autogen/MACIO.py -text MAC/MACIO/autogen/pytocol.tpl -text +MAC/MACIO/doc/package.dox -text MAC/MACIO/include/MACIO/DoubleVector.h -text MAC/MACIO/include/MACIO/KVTLogger.h -text MAC/MACIO/include/MACIO/Marshalling.tcc -text @@ -3763,6 +3796,7 @@ MAC/_System/lofar29.journal -text svneol=native#application/octet-stream MAC/_System/lofar29.sysconf -text svneol=native#application/octet-stream MAC/_System/lofar30.journal -text svneol=native#application/octet-stream MAC/_System/lofar30.sysconf -text svneol=native#application/octet-stream +MAC/doc/package.dox -text RTCP/Cobalt/BrokenAntennaInfo/CMakeLists.txt -text RTCP/Cobalt/BrokenAntennaInfo/test/CMakeLists.txt -text RTCP/Cobalt/BrokenAntennaInfo/test/debugbeaminfo.py -text @@ -3770,6 +3804,7 @@ RTCP/Cobalt/BrokenAntennaInfo/test/failedtilesinfo.parset -text RTCP/Cobalt/BrokenAntennaInfo/test/tfailedtilesinfo.run -text RTCP/Cobalt/BrokenAntennaInfo/test/tfailedtilesinfo.sh -text RTCP/Cobalt/BrokenAntennaInfo/test/tfailedtilesinfo.stdout -text +RTCP/Cobalt/CoInterface/doc/package.dox -text RTCP/Cobalt/CoInterface/src/SelfDestructTimer.cc -text RTCP/Cobalt/CoInterface/src/SelfDestructTimer.h -text RTCP/Cobalt/CoInterface/test/tLTAFeedback.in_reference/Observation220133_feedback -text @@ -3893,6 +3928,7 @@ RTCP/Cobalt/GPUProc/doc/cobalt-memo-beamformer-math/station-ppf-FIR-Coeffs16384K RTCP/Cobalt/GPUProc/doc/cobalt-memo-beamformer-math/wetenschappelijke-methode.pdf -text svneol=unset#application/pdf RTCP/Cobalt/GPUProc/doc/metaTest/skampi_coll.ski -text RTCP/Cobalt/GPUProc/doc/metaTest/skampi_pt2pt.ski -text +RTCP/Cobalt/GPUProc/doc/package.dox -text RTCP/Cobalt/GPUProc/doc/performance-review/runperftests.sh eol=lf RTCP/Cobalt/GPUProc/doc/pipeline-buffers.txt -text RTCP/Cobalt/GPUProc/doc/rtcp-usage.txt -text @@ -3972,6 +4008,7 @@ RTCP/Cobalt/GPUProc/test/t_generate_globalfs_locations.in_parset -text RTCP/Cobalt/GPUProc/test/t_generate_globalfs_locations.sh eol=lf RTCP/Cobalt/GPUProc/test/t_gpu_utils.sh eol=lf RTCP/Cobalt/InputProc/doc/Cobalt-New-InputSection.jpg -text svneol=unset#image/jpeg +RTCP/Cobalt/InputProc/doc/package.dox -text RTCP/Cobalt/InputProc/src/Delays/printDelays.log_prop -text RTCP/Cobalt/InputProc/src/ping_intl.sh -text RTCP/Cobalt/InputProc/test/tMPI.run eol=lf @@ -3982,6 +4019,7 @@ RTCP/Cobalt/InputProc/test/tPacketReader.in_16bit -text RTCP/Cobalt/InputProc/test/tPacketReader.in_8bit -text RTCP/Cobalt/InputProc/test/tPacketReader.sh eol=lf RTCP/Cobalt/InputProc/test/t_generateRSP.sh eol=lf +RTCP/Cobalt/OpenCL_FFT/doc/package.dox -text RTCP/Cobalt/OpenCL_FFT/src/AccelerateError.pdf -text RTCP/Cobalt/OpenCL_FFT/src/CMakeLists.txt -text RTCP/Cobalt/OpenCL_FFT/src/Error.pdf -text @@ -4001,6 +4039,7 @@ RTCP/Cobalt/OpenCL_FFT/src/libOpenCL_FFT.a.not -text RTCP/Cobalt/OpenCL_FFT/src/main.cpp -text RTCP/Cobalt/OpenCL_FFT/src/param.txt -text RTCP/Cobalt/OpenCL_FFT/src/procs.h -text +RTCP/Cobalt/OutputProc/doc/package.dox -text RTCP/Cobalt/OutputProc/etc/sudoers.d/setcap_cobalt -text RTCP/Cobalt/OutputProc/scripts/bf-output-loss.sh eol=lf RTCP/Cobalt/OutputProc/src/odirect.c -text @@ -4042,6 +4081,8 @@ RTCP/Cobalt/clAmdFft/samples/statisticalTimer.h -text RTCP/Cobalt/clAmdFft/samples/stdafx.cpp -text RTCP/Cobalt/clAmdFft/samples/stdafx.h -text RTCP/Cobalt/clAmdFft/samples/targetver.h -text +RTCP/Cobalt/doc/package.dox -text +RTCP/doc/package.dox -text SAS/DataManagement/CMakeLists.txt -text SAS/DataManagement/Cleanup/AutoCleanupService/CMakeLists.txt -text SAS/DataManagement/Cleanup/AutoCleanupService/autocleanupservice -text @@ -4088,7 +4129,7 @@ SAS/DataManagement/StorageQueryService/test/test_storagequery_service_and_rpc.py SAS/DataManagement/StorageQueryService/test/test_storagequery_service_and_rpc.run -text SAS/DataManagement/StorageQueryService/test/test_storagequery_service_and_rpc.sh -text SAS/Feedback_Service/CMakeLists.txt -text -SAS/Feedback_Service/package.dox -text +SAS/Feedback_Service/doc/package.dox -text SAS/Feedback_Service/src/CMakeLists.txt -text SAS/Feedback_Service/src/Feedback.cc -text SAS/Feedback_Service/src/Feedback.h -text @@ -4297,6 +4338,7 @@ SAS/OTDB/bin/create_new_database.sh -text svneol=unset#application/x-shellscript SAS/OTDB/bin/momIDs -text SAS/OTDB/bin/repairTree.py -text SAS/OTDB/bin/revertDefaultTemplates.py -text +SAS/OTDB/doc/package.dox -text SAS/OTDB/include/OTDB/DefaultTemplate.h -text SAS/OTDB/sql/README! -text SAS/OTDB/sql/assignProcessType_func.sql -text @@ -4434,6 +4476,7 @@ SAS/ResourceAssignment/ResourceAssigner/CMakeLists.txt -text SAS/ResourceAssignment/ResourceAssigner/bin/CMakeLists.txt -text SAS/ResourceAssignment/ResourceAssigner/bin/resourceassigner -text SAS/ResourceAssignment/ResourceAssigner/bin/resourceassigner.ini -text +SAS/ResourceAssignment/ResourceAssigner/doc/package.dox -text SAS/ResourceAssignment/ResourceAssigner/lib/CMakeLists.txt -text SAS/ResourceAssignment/ResourceAssigner/lib/__init__.py -text SAS/ResourceAssignment/ResourceAssigner/lib/config.py -text @@ -4765,6 +4808,7 @@ SAS/ResourceAssignment/TaskPrescheduler/test/t_cobaltblocksize.sh -text SAS/ResourceAssignment/TaskPrescheduler/test/test_taskprescheduler.py -text SAS/ResourceAssignment/TaskPrescheduler/test/test_taskprescheduler.run -text SAS/ResourceAssignment/TaskPrescheduler/test/test_taskprescheduler.sh -text +SAS/ResourceAssignment/doc/package.dox -text SAS/Scheduler/src/.default_settings.set -text SAS/Scheduler/src/LOFAR_libScheduler.pro -text SAS/Scheduler/src/conflictdialog.ui -text @@ -5038,15 +5082,25 @@ SAS/XSD/SAS/LofarHistorical.xsd -text SAS/XSD/SAS/LofarProject.xsd -text SAS/XSD/SAS/LofarSpecification.xsd -text SAS/XSD/SAS/LofarTrigger.xsd -text +SAS/doc/package.dox -text +SubSystems/CCU_MAC/doc/package.dox -text +SubSystems/CN_MAC/doc/package.dox -text SubSystems/DataManagement/CMakeLists.txt -text SubSystems/DataManagement/DataManagement.ini -text +SubSystems/DataManagement/doc/package.dox -text +SubSystems/Dragnet/doc/package.dox -text SubSystems/Dragnet/scripts/LOFAR-Dragnet-activate.sh eol=lf SubSystems/Dragnet/scripts/LOFAR-Dragnet-deploy.sh eol=lf SubSystems/Dragnet/scripts/casacore-measures-tables/apply_casacore_measures_data.sh eol=lf SubSystems/Dragnet/scripts/casacore-measures-tables/casacore_measures_common.sh eol=lf SubSystems/Dragnet/scripts/casacore-measures-tables/cron-update-IERS-DRAGNET.sh eol=lf SubSystems/Dragnet/scripts/casacore-measures-tables/get_casacore_measures_data.sh eol=lf +SubSystems/LCU_MAC/doc/package.dox -text SubSystems/LTAIngest/CMakeLists.txt -text +SubSystems/LTAIngest/doc/package.dox -text +SubSystems/MCU_MAC/doc/package.dox -text +SubSystems/Offline/doc/package.dox -text +SubSystems/Online_Cobalt/doc/package.dox -text SubSystems/Online_Cobalt/install/init.d-qpidd.sh eol=lf SubSystems/Online_Cobalt/install/install_DAL.sh eol=lf SubSystems/Online_Cobalt/install/install_IERS.sh eol=lf @@ -5189,9 +5243,35 @@ SubSystems/Online_Cobalt/validation/system/users/localhome.test eol=lf SubSystems/Online_Cobalt/validation/system/users/login-shell.test -text SubSystems/Online_Cobalt/validation/system/users/sudo.test eol=lf SubSystems/Online_Cobalt/validation/validate eol=lf +SubSystems/Online_OutputProc/doc/package.dox -text SubSystems/RAServices/CMakeLists.txt -text SubSystems/RAServices/RAServices.ini -text +SubSystems/RAServices/doc/package.dox -text +SubSystems/SAS_OTDB/doc/package.dox -text SubSystems/SAS_Tools/CMakeLists.txt -text +SubSystems/SAS_Tools/doc/package.dox -text +SubSystems/ST_MAC/doc/package.dox -text +SubSystems/WinCC_DB/doc/package.dox -text +SubSystems/doc/package.dox -text +doc/doxygen/styling/CMakeLists.txt -text +doc/doxygen/styling/LOFAR_logo.png -text +doc/doxygen/styling/bootstrap.min.css.in -text +doc/doxygen/styling/bootstrap.min.js.in -text +doc/doxygen/styling/customdoxygen.css.in -text +doc/doxygen/styling/doxy-boot.js.in -text +doc/doxygen/styling/footer.html.in -text +doc/doxygen/styling/glyphicons-halflings-regular.eot -text +doc/doxygen/styling/glyphicons-halflings-regular.svg -text +doc/doxygen/styling/glyphicons-halflings-regular.ttf -text +doc/doxygen/styling/glyphicons-halflings-regular.woff -text +doc/doxygen/styling/header.html.in -text +doc/doxygen/styling/jquery-2.1.1.js.in -text +doc/doxygen/styling/jquery-2.1.1.min.js.in -text +doc/doxygen/styling/jquery.powertip.min.js.in -text +doc/mainpage.md -text +doc/package.dox -text +doc/release_notes.md -text +doc/sw_documentation_template.md -text /jenkins_make -text /lofar_config.h.cmake -text support/tools/MoM/convert_split_and_rename_mom_database_sqldump.py -text diff --git a/CEP/Calibration/BBSControl/package.dox b/CEP/Calibration/BBSControl/package.dox deleted file mode 100644 index ec89c380fb2..00000000000 --- a/CEP/Calibration/BBSControl/package.dox +++ /dev/null @@ -1,11 +0,0 @@ -// \ingroup Calibration - -// \defgroup BBSControl BBSControl - -// BBSControl contains the control part of the BlackBoard Selfcal system. It -// consists of: -// - classes that define so-called strategies and steps, which are -// used to describe a self-calibration algorithm; -// - global and local controllers; -// - database access layer for the blackboard database system. - diff --git a/CEP/Calibration/BBSControl/scripts/SolverPlot.py b/CEP/Calibration/BBSControl/scripts/SolverPlot.py index d871165a436..fd30647c5db 100644 --- a/CEP/Calibration/BBSControl/scripts/SolverPlot.py +++ b/CEP/Calibration/BBSControl/scripts/SolverPlot.py @@ -9,7 +9,7 @@ class SolverPlot: - def __init__(self, parent): + def __init__(self, parent): QtGui.QMainWindow.__init__(self, parent) self.setGeometry(300, 300, 350, 300) @@ -22,7 +22,7 @@ class SolverPlot: # Create a histogram of "data" - def createHisto( data ): + def createHisto(self, data): n, bins, patches = pl.hist(data, 50, normed=1, histtype='stepfilled') pl.setp(patches, 'facecolor', 'g', 'alpha', 0.75) return @@ -37,18 +37,17 @@ class SolverPlot: self.canvas.print_figure(path, dpi=self.dpi) self.statusBar().showMessage('Saved to %s' % path, 2000) - def createSubplot(plot): - - return + def createSubplot(self, plot): + pass # Create Plot on canvas - def plot(): + def plot(self): ax.plot(list, "r+") ax.set_title(colname) plt.draw() return # Plotting function, update on change of plotting parameters - def replot(): - return + def replot(self): + pass diff --git a/CEP/Calibration/BBSControl/scripts/addClearcalColumns.py b/CEP/Calibration/BBSControl/scripts/addClearcalColumns.py index cac7ef746e1..b7cb1ef3124 100644 --- a/CEP/Calibration/BBSControl/scripts/addClearcalColumns.py +++ b/CEP/Calibration/BBSControl/scripts/addClearcalColumns.py @@ -1,4 +1,4 @@ -!#/usr/bin/env python +#!/usr/bin/env python # # Script that creates (if not already present) MODEL_DATA and CORRECTED_DATA # columns in a MS @@ -29,7 +29,7 @@ else: # Check if we got a gds file or a single MS, i.e. a directory # or if it is a gds file, i.e. text file # -if os.path.isdir(filename) # directory, i.e. single MS +if os.path.isdir(filename): # directory, i.e. single MS addClearcalColumns(filename) else: # gds executeGDS(filename) @@ -40,7 +40,7 @@ else: # gds # returns true/false accordingy # def hasColumn(table, name): - if name is in table.colnames(): + if name in table.colnames(): return True else: return False @@ -102,7 +102,9 @@ def parseGDS(gdsFilename): for line in lines: # get "NParts" (number of parts) if line.find("NParts"): - numParts= + # Illegal statement below, replaced by pass + # numParts= + pass else: raise ValueError @@ -120,7 +122,7 @@ def parseGDS(gdsFilename): # Add columns to multiple files in list MSfilenames # def multipleFiles(MSfilenames): - if !isinstance(MSfilename, list): + if not isinstance(MSfilename, list): print "multipleFiles() MSfilenames is not a list" else: for filename in MSfilenames: diff --git a/CEP/Calibration/BBSKernel/package.dox b/CEP/Calibration/BBSKernel/package.dox deleted file mode 100644 index 98a49598c15..00000000000 --- a/CEP/Calibration/BBSKernel/package.dox +++ /dev/null @@ -1,15 +0,0 @@ -// \ingroup Calibration - -// \defgroup BBSKernel BBSKernel -// BBSKernel contains the kernel of the BlackBoard Selfcal system. The kernel -// consists of classes to perform predict, differentiate (Prediff), and solve -// operations. - -// @{ - -// \defgroup Expr Expr -// This module contains classes that can be used to build expressions trees that -// model the sky and the behaviour of the instrument. - -// @} - diff --git a/CEP/Calibration/BBSTools/scripts/BBStiming.py b/CEP/Calibration/BBSTools/scripts/BBStiming.py index 48ccfb56cd0..8d3d8b0d08c 100755 --- a/CEP/Calibration/BBSTools/scripts/BBStiming.py +++ b/CEP/Calibration/BBSTools/scripts/BBStiming.py @@ -140,8 +140,6 @@ class BBSTiming: identifiedSteps=[] # we need a dictionary, because every step has substeps stepDict={} # dictionary for a particular substep - - if self. for line in lines: line.upper() # convert all to upper for string matching if line.find("ALL") != -1: # we use "ALL" as indicator for a step, it is common to all steps and appears only once diff --git a/CEP/Calibration/ElementResponse/package.dox b/CEP/Calibration/ElementResponse/package.dox deleted file mode 100644 index fe991be455e..00000000000 --- a/CEP/Calibration/ElementResponse/package.dox +++ /dev/null @@ -1,7 +0,0 @@ -// \ingroup Calibration - -// \defgroup ElementResponse ElementResponse -// The ElementResponse package contains functions to evaluate the semi-analytic -// models of the LOFAR LBA and HBA dual dipole antenna. The implementation is -// based on "Mathematical-physical analysis of the generic dual-dipole antenna" -// by J.P. Hamaker. diff --git a/CEP/Calibration/StationResponse/package.dox b/CEP/Calibration/StationResponse/package.dox deleted file mode 100644 index e87a2095590..00000000000 --- a/CEP/Calibration/StationResponse/package.dox +++ /dev/null @@ -1,5 +0,0 @@ -// \ingroup Calibration - -// \defgroup StationResponse StationResponse -// The StationResponse package contains functions to evaluate the array factor -// and the station response of a LOFAR station. diff --git a/CEP/Calibration/package.dox b/CEP/Calibration/doc/package.dox similarity index 100% rename from CEP/Calibration/package.dox rename to CEP/Calibration/doc/package.dox diff --git a/CEP/DP3/DPPP/package.dox b/CEP/DP3/DPPP/package.dox deleted file mode 100644 index f584863b299..00000000000 --- a/CEP/DP3/DPPP/package.dox +++ /dev/null @@ -1,16 +0,0 @@ -// \ingroup DP3 -// -// \defgroup DPPP DPPP (Default Pre-Processing Pipeline) -// -// This package contains classes and programs to do the pre-processing -// of the visibility data. Currently it consists of various flaggers -// and some classes for other features. -// -// NDPPP is the new program to do flagging and averaging of -// visibility data in a MeasurementSet. It can also do demixing (i.e., -// subtraction of the A-team sources) and station summation. -// It is easily extendible with new classes for new features. -// -// @{ -// \defgroup NDPPP NDPPP (new version) -// @} diff --git a/CEP/DP3/SPWCombine/package.dox b/CEP/DP3/SPWCombine/package.dox deleted file mode 100644 index b46336bce0c..00000000000 --- a/CEP/DP3/SPWCombine/package.dox +++ /dev/null @@ -1,5 +0,0 @@ -// \ingroup DP3 -// \defgroup SPWCombine Spectral Window Combine. -// SPWCombines takes takes all Spectral windows in the input -// measurementset(s), and writes their data as a single Spectral Window -// into the output Measurementset. diff --git a/CEP/DP3/package.dox b/CEP/DP3/doc/package.dox similarity index 100% rename from CEP/DP3/package.dox rename to CEP/DP3/doc/package.dox diff --git a/CEP/Imager/AWImager2/include/AWImager2/FFTCMatrix.h b/CEP/Imager/AWImager2/include/AWImager2/FFTCMatrix.h index 1b6b3763a0c..8525bc48fab 100644 --- a/CEP/Imager/AWImager2/include/AWImager2/FFTCMatrix.h +++ b/CEP/Imager/AWImager2/include/AWImager2/FFTCMatrix.h @@ -31,60 +31,60 @@ namespace LOFAR { - // This class uses FFTW to do a forward or backward FFT on square - // 2D arrays. It can have an odd or even number of elements. - // - // The data are flipped correctly, so the center is in the middle of the - // result. The result of the backward transform is normalized. - // - // The class can be used to do multiple FFTs. - // Before an FFT can be executed, a plan needs to be made for FFTW. - // Thereafter the data array can be filled and the FFT can be executed. - // The data array is an internal well-aligned array of complex values. - // The array is enlarged if an FFT of a larger size is planned. - // The user has access to the internal array to get or set its values. - // Note that a casacore Array object can easily be created from it like: - // <srcblock> - // FFTCMatrix fftmat; - // fftmat.plan (128, true); - // Array<Complex> array(IPosition(2, fftmat.size(), fftmat.size()), - // fftmat.data(), SHARE); - // </srcblocK> - // Note it is important to recreate the Array after each plan, because - // plan can resize the buffer (thus change its data pointer). - // - // It is also possible to pass a Matrix object to be FFT-ed. The matrix - // is overwritten with the result. - // One has the option to normalize the result of the forward or backward FFT. - // - // It is not safe to share an FFTCMatrix object between multiple threads, - // but it is safe to have an FFTCMatrix object per thread. - // A call to plan is locked, because FFTW's plan function is not thread-safe. + /// This class uses FFTW to do a forward or backward FFT on square + /// 2D arrays. It can have an odd or even number of elements. + /// + /// The data are flipped correctly, so the center is in the middle of the + /// result. The result of the backward transform is normalized. + /// + /// The class can be used to do multiple FFTs. + /// Before an FFT can be executed, a plan needs to be made for FFTW. + /// Thereafter the data array can be filled and the FFT can be executed. + /// The data array is an internal well-aligned array of complex values. + /// The array is enlarged if an FFT of a larger size is planned. + /// The user has access to the internal array to get or set its values. + /// Note that a casacore Array object can easily be created from it like: + /// \code{.cpp} + /// FFTCMatrix fftmat; + /// fftmat.plan (128, true); + /// Array<Complex> array(IPosition(2, fftmat.size(), fftmat.size()), + /// fftmat.data(), SHARE); + /// \endcode + /// Note it is important to recreate the Array after each plan, because + /// plan can resize the buffer (thus change its data pointer). + /// + /// It is also possible to pass a Matrix object to be FFT-ed. The matrix + /// is overwritten with the result. + /// One has the option to normalize the result of the forward or backward FFT. + /// + /// It is not safe to share an FFTCMatrix object between multiple threads, + /// but it is safe to have an FFTCMatrix object per thread. + /// A call to plan is locked, because FFTW's plan function is not thread-safe. class FFTCMatrix { public: - // Construct an empty object. - // The function 'plan' should be called before an FFT can be done. + /// Construct an empty object. + /// The function 'plan' should be called before an FFT can be done. FFTCMatrix(); - // Copy constructor calls the reserve function with the reservation of that. - // It's defined for convenience only (e.g. to use a vector<FFTCMatrix>). + /// Copy constructor calls the reserve function with the reservation of that. + /// It's defined for convenience only (e.g. to use a vector<FFTCMatrix>). FFTCMatrix (const FFTCMatrix& that); ~FFTCMatrix() { clear(); clear_padding();} - // Assigment calls the reserve function with the reservation of that. - // It's defined for convenience only (e.g. to use a vector<FFTCMatrix>). + /// Assigment calls the reserve function with the reservation of that. + /// It's defined for convenience only (e.g. to use a vector<FFTCMatrix>). FFTCMatrix& operator= (const FFTCMatrix& that); - // Reserve data buffer space. - // Doing this can be useful to avoid frequent resizing, but it can also - // be used to make the reservation smaller. - // <br>It clears the current plan if the size differs from the current - // reservation. + /// Reserve data buffer space. + /// Doing this can be useful to avoid frequent resizing, but it can also + /// be used to make the reservation smaller. + /// <br>It clears the current plan if the size differs from the current + /// reservation. void reserve (size_t size); // Clear all info in the object (reset to state of default constructor). @@ -96,45 +96,45 @@ namespace LOFAR { size_t size() const { return itsSize; } - // Get the reservation. + /// Get the reservation. size_t reserved() const { return itsReserved; } - // Get a pointer to the internal buffer (to set or get data). + /// Get a pointer to the internal buffer (to set or get data). const std::complex<float>* data() const { return itsData; } std::complex<float>* data() { return itsData; } - // Create an FFTW plan for the given size and direction. - // The internal data buffer is enlarged if needed. - // <br>The data buffer should be filled AFTER making the plan, because - // the FFTW plan generator can destroy the data in the buffer. - // <br>This is the only function that is not thread-safe, so it is - // enclosed in a critical section. - // <br> The 'flags' argument tells how FFTW should create the plan if - // there is no wisdom available for the given FFT size. - // <ul> - // <li> FFTW_ESTIMATE is fast, but will only do a rough estimation. - // <li> FFTW_MEASURE will do some actual FFTs to find the best plan. - // <li> FFTW_PATIENT will do more FFTs to find the best plan. - // <li> FFTW_EXHAUSTIVE will do even more FFTs (and take a lot of time). - // </ul> + /// Create an FFTW plan for the given size and direction. + /// The internal data buffer is enlarged if needed. + /// <br>The data buffer should be filled AFTER making the plan, because + /// the FFTW plan generator can destroy the data in the buffer. + /// <br>This is the only function that is not thread-safe, so it is + /// enclosed in a critical section. + /// <br> The 'flags' argument tells how FFTW should create the plan if + /// there is no wisdom available for the given FFT size. + /// <ul> + /// <li> FFTW_ESTIMATE is fast, but will only do a rough estimation. + /// <li> FFTW_MEASURE will do some actual FFTs to find the best plan. + /// <li> FFTW_PATIENT will do more FFTs to find the best plan. + /// <li> FFTW_EXHAUSTIVE will do even more FFTs (and take a lot of time). + /// </ul> void plan (size_t size, bool forward, int nthreads=1, unsigned flags=FFTW_ESTIMATE); - // Do the FFT. - // The output is scaled (with 1/size^2) if done in the backward direction. + /// Do the FFT. + /// The output is scaled (with 1/size^2) if done in the backward direction. void fft(); - // Do the FFT in a normalized way. - // The output is scaled (with size^2) if done in the forward direction. + /// Do the FFT in a normalized way. + /// The output is scaled (with size^2) if done in the forward direction. void normalized_fft(); - // Do an FFT of the given data array which is changed in-place. - // It first makes the plan, thereafter does the FFT. - // These function are similar to fft and normalized_fft but use the - // given data array. + /// Do an FFT of the given data array which is changed in-place. + /// It first makes the plan, thereafter does the FFT. + /// These function are similar to fft and normalized_fft but use the + /// given data array. void forward (size_t size, std::complex<float>* data, int nthreads=1, unsigned flags=FFTW_ESTIMATE); @@ -163,38 +163,37 @@ namespace LOFAR { int nthreads=1, unsigned flags=FFTW_ESTIMATE); - /// private: - // Flip the quadrants as needed for the FFT. - // <srcblock> - // q1 q2 gets q4 q3 - // q3 q4 q2 q1 - // </srcblock> + /// Flip the quadrants as needed for the FFT. + /// <srcblock> + /// q1 q2 gets q4 q3 + /// q3 q4 q2 q1 + /// </srcblock> void flip (bool toZero); - // The output flip can be avoided by negating every other input element. - // This function will do the (input) flip and negation jointly. - // This is only possible for a size that is a multiple of 4. + /// The output flip can be avoided by negating every other input element. + /// This function will do the (input) flip and negation jointly. + /// This is only possible for a size that is a multiple of 4. void negatedFlip(); - // Flip the quadrants while applying the given scale factor. + /// Flip the quadrants while applying the given scale factor. void scaledFlip (bool toZero, float factor); - // Flip input into output. + /// Flip input into output. void flip (const std::complex<float>* __restrict__ in, std::complex<float>* __restrict__ out, bool toZero); void scaledFlip (const std::complex<float>* __restrict__ in, std::complex<float>* __restrict__ out, bool toZero, float factor); - // Give the optimal odd FFTW size for the given FFT size. - // It uses FFTW's rule: - // size = 2^a * 3^b * 5^c * 7^d * 11^e * 13^f with e+f<=1 + /// Give the optimal odd FFTW size for the given FFT size. + /// It uses FFTW's rule: + /// size = 2^a * 3^b * 5^c * 7^d * 11^e * 13^f with e+f<=1 static int optimalOddFFTSize (int size); - // Get all optimal odd FFTW sizes. + /// Get all optimal odd FFTW sizes. static const int* getOptimalOddFFTSizes(); - // Get number of optimal odd FFTW sizes. + /// Get number of optimal odd FFTW sizes. static int nOptimalOddFFTSizes(); private: diff --git a/CEP/Imager/LofarFT/include/LofarFT/FFTCMatrix.h b/CEP/Imager/LofarFT/include/LofarFT/FFTCMatrix.h index e06ea886be5..96fcf369c7f 100644 --- a/CEP/Imager/LofarFT/include/LofarFT/FFTCMatrix.h +++ b/CEP/Imager/LofarFT/include/LofarFT/FFTCMatrix.h @@ -30,108 +30,109 @@ namespace LOFAR { - // This class uses FFTW to do a forward or backward FFT on square - // 2D arrays. It can have an odd or even number of elements. - // - // The data are flipped correctly, so the center is in the middle of the - // result. The result of the backward transform is normalized. - // - // The class can be used to do multiple FFTs. - // Before an FFT can be executed, a plan needs to be made for FFTW. - // Thereafter the data array can be filled and the FFT can be executed. - // The data array is an internal well-aligned array of complex values. - // The array is enlarged if an FFT of a larger size is planned. - // The user has access to the internal array to get or set its values. - // Note that a casacore Array object can easily be created from it like: - // <srcblock> - // FFTCMatrix fftmat; - // fftmat.plan (128, true); - // Array<Complex> array(IPosition(2, fftmat.size(), fftmat.size()), - // fftmat.data(), SHARE); - // </srcblocK> - // Note it is important to recreate the Array after each plan, because - // plan can resize the buffer (thus change its data pointer). - // - // It is also possible to pass a Matrix object to be FFT-ed. The matrix - // is overwritten with the result. - // One has the option to normalize the result of the forward or backward FFT. - // - // It is not safe to share an FFTCMatrix object between multiple threads, - // but it is safe to have an FFTCMatrix object per thread. - // A call to plan is locked, because FFTW's plan function is not thread-safe. + /// This class uses FFTW to do a forward or backward FFT on square + /// 2D arrays. It can have an odd or even number of elements. + /// + /// The data are flipped correctly, so the center is in the middle of the + /// result. The result of the backward transform is normalized. + /// + /// The class can be used to do multiple FFTs. + /// Before an FFT can be executed, a plan needs to be made for FFTW. + /// Thereafter the data array can be filled and the FFT can be executed. + /// The data array is an internal well-aligned array of complex values. + /// The array is enlarged if an FFT of a larger size is planned. + /// The user has access to the internal array to get or set its values. + /// Note that a casacore Array object can easily be created from it like: + /// \code{.cpp} + /// FFTCMatrix fftmat; + /// fftmat.plan (128, true); + /// Array<Complex> array(IPosition(2, fftmat.size(), fftmat.size()), + /// fftmat.data(), SHARE); + /// \endcode + /// Note it is important to recreate the Array after each plan, because + /// plan can resize the buffer (thus change its data pointer). + /// + /// It is also possible to pass a Matrix object to be FFT-ed. The matrix + /// is overwritten with the result. + /// One has the option to normalize the result of the forward or backward FFT. + /// + /// It is not safe to share an FFTCMatrix object between multiple threads, + /// but it is safe to have an FFTCMatrix object per thread. + /// A call to plan is locked, because FFTW's plan function is not thread-safe. class FFTCMatrix { public: - // Construct an empty object. - // The function 'plan' should be called before an FFT can be done. + /// Construct an empty object. + /// The function 'plan' should be called before an FFT can be done. FFTCMatrix(); - // Copy constructor calls the reserve function with the reservation of that. - // It's defined for convenience only (e.g. to use a vector<FFTCMatrix>). + /// Copy constructor calls the reserve function with the reservation of that. + /// It's defined for convenience only (e.g. to use a vector<FFTCMatrix>). FFTCMatrix (const FFTCMatrix& that); ~FFTCMatrix() { clear(); } - // Assigment calls the reserve function with the reservation of that. - // It's defined for convenience only (e.g. to use a vector<FFTCMatrix>). + /// Assigment calls the reserve function with the reservation of that. + /// It's defined for convenience only (e.g. to use a vector<FFTCMatrix>). FFTCMatrix& operator= (const FFTCMatrix& that); - // Reserve data buffer space. - // Doing this can be useful to avoid frequent resizing, but it can also - // be used to make the reservation smaller. - // <br>It clears the current plan if the size differs from the current - // reservation. + /// Reserve data buffer space. + /// Doing this can be useful to avoid frequent resizing, but it can also be used + /// to make the reservation smaller. + /// + /// It clears the current plan if the size differs from the current reservation. void reserve (size_t size); - // Clear all info in the object (reset to state of default constructor). + /// Clear all info in the object (reset to state of default constructor). void clear(); - // Get the size (of a single axis). + /// Get the size (of a single axis). size_t size() const { return itsSize; } - // Get the reservation. + /// Get the reservation. size_t reserved() const { return itsReserved; } - // Get a pointer to the internal buffer (to set or get data). + /// Get a pointer to the internal buffer (to set or get data). const std::complex<float>* data() const { return itsData; } std::complex<float>* data() { return itsData; } - // Create an FFTW plan for the given size and direction. - // The internal data buffer is enlarged if needed. - // <br>The data buffer should be filled AFTER making the plan, because - // the FFTW plan generator can destroy the data in the buffer. - // <br>This is the only function that is not thread-safe, so it is - // enclosed in a critical section. - // <br> The 'flags' argument tells how FFTW should create the plan if - // there is no wisdom available for the given FFT size. - // <ul> - // <li> FFTW_ESTIMATE is fast, but will only do a rough estimation. - // <li> FFTW_MEASURE will do some actual FFTs to find the best plan. - // <li> FFTW_PATIENT will do more FFTs to find the best plan. - // <li> FFTW_EXHAUSTIVE will do even more FFTs (and take a lot of time). - // </ul> + /// Create an FFTW plan for the given size and direction. + /// The internal data buffer is enlarged if needed. + /// + /// The data buffer should be filled AFTER making the plan, because + /// the FFTW plan generator can destroy the data in the buffer. + /// + /// This is the only function that is not thread-safe, so it is + /// enclosed in a critical section. + /// + /// The 'flags' argument tells how FFTW should create the plan if + /// there is no wisdom available for the given FFT size. + /// - FFTW_ESTIMATE is fast, but will only do a rough estimation. + /// - FFTW_MEASURE will do some actual FFTs to find the best plan. + /// - FFTW_PATIENT will do more FFTs to find the best plan. + /// - FFTW_EXHAUSTIVE will do even more FFTs (and take a lot of time). void plan (size_t size, bool forward, int nthreads=1, unsigned flags=FFTW_ESTIMATE); - // Do the FFT. - // The output is scaled (with 1/size^2) if done in the backward direction. + /// Do the FFT. + /// The output is scaled (with 1/size^2) if done in the backward direction. void fft(); - // Do the FFT in a normalized way. - // The output is scaled (with size^2) if done in the forward direction. + /// Do the FFT in a normalized way. + /// The output is scaled (with size^2) if done in the forward direction. void normalized_fft(); - // Do an FFT of the given data array which is changed in-place. - // It first makes the plan, thereafter does the FFT. - // These function are similar to fft and normalized_fft but use the - // given data array. + /// Do an FFT of the given data array which is changed in-place. + /// It first makes the plan, thereafter does the FFT. + /// These function are similar to fft and normalized_fft but use the + /// given data array. void forward (size_t size, std::complex<float>* data, int nthreads=1, unsigned flags=FFTW_ESTIMATE); @@ -145,38 +146,39 @@ namespace LOFAR { int nthreads=1, unsigned flags=FFTW_ESTIMATE); - /// private: - // Flip the quadrants as needed for the FFT. - // <srcblock> - // q1 q2 gets q4 q3 - // q3 q4 q2 q1 - // </srcblock> + /// Flip the quadrants as needed for the FFT. + /// \code{.txt} + /// q1 q2 gets q4 q3 + /// q3 q4 q2 q1 + /// \endcode void flip (bool toZero); - // The output flip can be avoided by negating every other input element. - // This function will do the (input) flip and negation jointly. - // This is only possible for a size that is a multiple of 4. + /// The output flip can be avoided by negating every other input element. + /// This function will do the (input) flip and negation jointly. + /// This is only possible for a size that is a multiple of 4. void negatedFlip(); - // Flip the quadrants while applying the given scale factor. + /// Flip the quadrants while applying the given scale factor. void scaledFlip (bool toZero, float factor); - // Flip input into output. + /// Flip input into output. void flip (const std::complex<float>* __restrict__ in, std::complex<float>* __restrict__ out, bool toZero); void scaledFlip (const std::complex<float>* __restrict__ in, std::complex<float>* __restrict__ out, bool toZero, float factor); - // Give the optimal odd FFTW size for the given FFT size. - // It uses FFTW's rule: - // size = 2^a * 3^b * 5^c * 7^d * 11^e * 13^f with e+f<=1 + /// Give the optimal odd FFTW size for the given FFT size. + /// It uses FFTW's rule: + /// \code{.txt} + /// size = 2^a * 3^b * 5^c * 7^d * 11^e * 13^f with e+f<=1 + /// \endcode static int optimalOddFFTSize (int size); - // Get all optimal odd FFTW sizes. + /// Get all optimal odd FFTW sizes. static const int* getOptimalOddFFTSizes(); - // Get number of optimal odd FFTW sizes. + /// Get number of optimal odd FFTW sizes. static int nOptimalOddFFTSizes(); private: diff --git a/CEP/Imager/package.dox b/CEP/Imager/doc/package.dox similarity index 100% rename from CEP/Imager/package.dox rename to CEP/Imager/doc/package.dox diff --git a/CEP/LMWCommon/package.dox b/CEP/LMWCommon/package.dox deleted file mode 100644 index e0c566bcc2a..00000000000 --- a/CEP/LMWCommon/package.dox +++ /dev/null @@ -1,12 +0,0 @@ -// \ingroup Imager - -// \defgroup LMWCommon LMWCommon -// LMWCommon contains the common code for the LOFAR Master/Worker framework. -// It consists of code to send/receive commands and data, but also -// code that describe the various part of the system. These ar: -// <ul> -// <li> A descripton of the cluster telling which nodes are available -// and which file ssytems they have access to. -// <li> A description of a distributed data set telling -// which parts it consists of and where they are located. -// </ul> diff --git a/CEP/MS/package.dox b/CEP/MS/package.dox deleted file mode 100644 index 67011db0725..00000000000 --- a/CEP/MS/package.dox +++ /dev/null @@ -1,11 +0,0 @@ -// \ingroup CEP - -// \defgroup MS MS -// MS contains the code to deal with a Casacore MeasurementSet. -// -// The class VdsMaker creates a description file of a distributed MS, -// so the BBS and imager software know where the MS parts are located. -// Class MsDesc contains some code for the older BBS3 software. -// -// Class MScreate creates a (distributed) MeasurementSet. Its data -// should be filled in by simulator software like MeqTrees or BBS. diff --git a/CEP/ParmDB/package.dox b/CEP/ParmDB/package.dox deleted file mode 100644 index b5e6b9960c8..00000000000 --- a/CEP/ParmDB/package.dox +++ /dev/null @@ -1,13 +0,0 @@ -// \ingroup CEP -// \defgroup ParmDB ParmDB -// Package ParmDB does the handling of the calibration parameters. -// It does three things: -// <ol> -// </li> Reading and writing the parameters into a data base. The -// interface to the data base is abstract, so in principle any data base -// can be used. So far, only CasaTables are supported (class ParmDBCasa). -// </li> Caching parameters for a given work domain. -// </li> Evaluating a parameter for a given predict grid. -// Optionally its perturbed values are calculated as well. -// </ol> -// diff --git a/CEP/doc/package.dox b/CEP/doc/package.dox new file mode 100644 index 00000000000..4b85a8b76ea --- /dev/null +++ b/CEP/doc/package.dox @@ -0,0 +1,9 @@ +/** + +\ingroup Packages +\defgroup CEP CEP + +The CEP package contains the LOFAR CEntral Processing software. + +*/ + diff --git a/CEP/package.dox b/CEP/package.dox deleted file mode 100644 index b2924441ef1..00000000000 --- a/CEP/package.dox +++ /dev/null @@ -1,5 +0,0 @@ -// \ingroup LOFAR - -// \defgroup CEP CEP -// The CEP package contains the LOFAR CEntral Processing software. - diff --git a/CEP/pyparmdb/package.dox b/CEP/pyparmdb/package.dox deleted file mode 100644 index bd22642391c..00000000000 --- a/CEP/pyparmdb/package.dox +++ /dev/null @@ -1,3 +0,0 @@ -// \ingroup CEP -// \defgroup ParmFacade ParmFacade -// High level interface to Parameter Data Base diff --git a/CMake/LofarDoxygen.cmake b/CMake/LofarDoxygen.cmake index bf97854c149..e9a5e2002f4 100644 --- a/CMake/LofarDoxygen.cmake +++ b/CMake/LofarDoxygen.cmake @@ -28,6 +28,11 @@ if("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}") if(BUILD_DOCUMENTATION) # Locate the doxygen programs. find_package(Doxygen REQUIRED) + + find_python_module(doxypypy REQUIRED) + + set(ENV{PATH} "${CMAKE_CURRENT_BINARY_DIR}/py_filter.sh:$ENV{PATH}") + message(STATUS "PATH content is: $ENV{PATH}") # Document all source code, unless BUILD_PACKAGES is defined. if(NOT DEFINED BUILD_PACKAGES) diff --git a/CMake/docscripts/doxygen.cfg.in b/CMake/docscripts/doxygen.cfg.in index a380ee93869..81d1119c88f 100644 --- a/CMake/docscripts/doxygen.cfg.in +++ b/CMake/docscripts/doxygen.cfg.in @@ -1,43 +1,2454 @@ -ALWAYS_DETAILED_SEC = YES -CASE_SENSE_NAMES = YES -JAVADOC_AUTOBRIEF = YES -DETAILS_AT_TOP = YES -DISTRIBUTE_GROUP_DOC = YES -ALIASES = "template=\par Template requirements:\n" -EXTRACT_ALL = YES -EXTRACT_PRIVATE = YES -EXTRACT_STATIC = YES -MAX_INITIALIZER_LINES = 0 -WARNINGS = YES -FILE_PATTERNS = *.dox *.cl *.cu *.cuh *.h *.idl -RECURSIVE = YES -EXCLUDE_SYMLINKS = YES -EXCLUDE_PATTERNS = */build/* */demo/* */test/* */installed/* */.svn/* -FILTER_SOURCE_FILES = YES -SOURCE_BROWSER = YES -REFERENCED_BY_RELATION = YES -REFERENCES_RELATION = YES -ALPHABETICAL_INDEX = YES -COLS_IN_ALPHA_INDEX = 3 -ENUM_VALUES_PER_LINE = 1 -GENERATE_LATEX = NO -MACRO_EXPANSION = YES -EXPAND_ONLY_PREDEF = YES -PREDEFINED = DOXYGEN_SHOULD_SKIP_THIS \ - BOOST_PP_IS_ITERATING \ - restrict= \ - __attribute__(x)= \ - @DOXYGEN_PREDEFINED@ -ALLEXTERNALS = YES -CLASS_GRAPH = YES -COLLABORATION_GRAPH = YES -SEARCHENGINE = NO -HAVE_DOT = @DOXYGEN_DOT_FOUND@ -DOT_PATH = @DOXYGEN_DOT_PATH@ -PROJECT_NAME = @CMAKE_PROJECT_NAME@ -OUTPUT_DIRECTORY = @CMAKE_BINARY_DIR@/doc -STRIP_FROM_PATH = @CMAKE_SOURCE_DIR@ -INPUT = @DOXYGEN_INPUT@ -IMAGE_PATH = @DOXYGEN_INPUT@ -INPUT_FILTER = @CMAKE_SOURCE_DIR@/CMake/docscripts/slash2spanning.pl -GENERATE_TAGFILE = @CMAKE_PROJECT_NAME@.tag +# Doxyfile 1.8.11 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project. +# +# All text after a double hash (##) is considered a comment and is placed in +# front of the TAG it is preceding. +# +# All text after a single hash (#) is considered a comment and will be ignored. +# The format is: +# TAG = value [value, ...] +# For lists, items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (\" \"). + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the config file +# that follow. The default is UTF-8 which is also the encoding used for all text +# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv +# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv +# for the list of possible encodings. +# The default value is: UTF-8. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by +# double-quotes, unless you are using Doxywizard) that should identify the +# project for which the documentation is generated. This name is used in the +# title of most generated pages and in a few other places. +# The default value is: My Project. + +PROJECT_NAME = @CMAKE_PROJECT_NAME@ + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. This +# could be handy for archiving the generated documentation or if some version +# control system is used. + +PROJECT_NUMBER = $(DOX_REVISION_SLUG) + +# Using the PROJECT_BRIEF tag one can provide an optional one line description +# for a project that appears at the top of each page and should give viewer a +# quick idea about the purpose of the project. Keep the description short. + +PROJECT_BRIEF = + +# With the PROJECT_LOGO tag one can specify a logo or an icon that is included +# in the documentation. The maximum height of the logo should not exceed 55 +# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy +# the logo to the output directory. + +PROJECT_LOGO =LOFAR_logo.png + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path +# into which the generated documentation will be written. If a relative path is +# entered, it will be relative to the location where doxygen was started. If +# left blank the current directory will be used. + +OUTPUT_DIRECTORY = @CMAKE_BINARY_DIR@/doc + +# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub- +# directories (in 2 levels) under the output directory of each output format and +# will distribute the generated files over these directories. Enabling this +# option can be useful when feeding doxygen a huge amount of source files, where +# putting all generated files in the same directory would otherwise causes +# performance problems for the file system. +# The default value is: NO. + +CREATE_SUBDIRS = YES + +# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII +# characters to appear in the names of generated files. If set to NO, non-ASCII +# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode +# U+3044. +# The default value is: NO. + +# ALLOW_UNICODE_NAMES = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, +# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), +# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, +# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), +# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, +# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, +# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, +# Ukrainian and Vietnamese. +# The default value is: English. + +OUTPUT_LANGUAGE = English + +# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member +# descriptions after the members that are listed in the file and class +# documentation (similar to Javadoc). Set to NO to disable this. +# The default value is: YES. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief +# description of a member or function before the detailed description +# +# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. +# The default value is: YES. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator that is +# used to form the text in various listings. Each string in this list, if found +# as the leading text of the brief description, will be stripped from the text +# and the result, after processing the whole list, is used as the annotated +# text. Otherwise, the brief description is used as-is. If left blank, the +# following values are used ($name is automatically replaced with the name of +# the entity):The $name class, The $name widget, The $name file, is, provides, +# specifies, contains, represents, a, an and the. + +ABBREVIATE_BRIEF = + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# doxygen will generate a detailed section even if there is only a brief +# description. +# The default value is: NO. + +ALWAYS_DETAILED_SEC = YES + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. +# The default value is: NO. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path +# before files name in the file list and in the header files. If set to NO the +# shortest path that makes the file name unique will be used +# The default value is: YES. + +FULL_PATH_NAMES = YES + +# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path. +# Stripping is only done if one of the specified strings matches the left-hand +# part of the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the path to +# strip. +# +# Note that you can specify absolute paths here, but also relative paths, which +# will be relative from the directory where doxygen is started. +# This tag requires that the tag FULL_PATH_NAMES is set to YES. + +STRIP_FROM_PATH = @CMAKE_SOURCE_DIR@ + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the +# path mentioned in the documentation of a class, which tells the reader which +# header file to include in order to use a class. If left blank only the name of +# the header file containing the class definition is used. Otherwise one should +# specify the list of include paths that are normally passed to the compiler +# using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but +# less readable) file names. This can be useful is your file systems doesn't +# support long names like on DOS, Mac, or CD-ROM. +# The default value is: NO. + +SHORT_NAMES = YES + +# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the +# first line (until the first dot) of a Javadoc-style comment as the brief +# description. If set to NO, the Javadoc-style will behave just like regular Qt- +# style comments (thus requiring an explicit @brief command for a brief +# description.) +# The default value is: NO. + +JAVADOC_AUTOBRIEF = YES + +# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first +# line (until the first dot) of a Qt-style comment as the brief description. If +# set to NO, the Qt-style will behave just like regular Qt-style comments (thus +# requiring an explicit \brief command for a brief description.) +# The default value is: NO. + +QT_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a +# multi-line C++ special comment block (i.e. a block of //! or /// comments) as +# a brief description. This used to be the default behavior. The new default is +# to treat a multi-line C++ comment block as a detailed description. Set this +# tag to YES if you prefer the old behavior instead. +# +# Note that setting this tag to YES also means that rational rose comments are +# not recognized any more. +# The default value is: NO. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the +# documentation from any documented member that it re-implements. +# The default value is: YES. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new +# page for each member. If set to NO, the documentation of a member will be part +# of the file/class/namespace that contains it. +# The default value is: NO. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen +# uses this value to replace tabs by spaces in code fragments. +# Minimum value: 1, maximum value: 16, default value: 4. + +TAB_SIZE = 4 + +# This tag can be used to specify a number of aliases that act as commands in +# the documentation. An alias has the form: +# name=value +# For example adding +# "sideeffect=@par Side Effects:\n" +# will allow you to put the command \sideeffect (or @sideeffect) in the +# documentation, which will result in a user-defined paragraph with heading +# "Side Effects:". You can put \n's in the value part of an alias to insert +# newlines. + +ALIASES = "template=\par Template requirements:\n" + + +# This tag can be used to specify a number of word-keyword mappings (TCL only). +# A mapping has the form "name=value". For example adding "class=itcl::class" +# will allow you to use the command class in the itcl::class meaning. + +TCL_SUBST = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources +# only. Doxygen will then generate output that is more tailored for C. For +# instance, some of the names that are used will be different. The list of all +# members will be omitted, etc. +# The default value is: NO. + +OPTIMIZE_OUTPUT_FOR_C = NO + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or +# Python sources only. Doxygen will then generate output that is more tailored +# for that language. For instance, namespaces will be presented as packages, +# qualified scopes will look different, etc. +# The default value is: NO. + +OPTIMIZE_OUTPUT_JAVA = NO + +# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran +# sources. Doxygen will then generate output that is tailored for Fortran. +# The default value is: NO. + +OPTIMIZE_FOR_FORTRAN = NO + +# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL +# sources. Doxygen will then generate output that is tailored for VHDL. +# The default value is: NO. + +OPTIMIZE_OUTPUT_VHDL = NO + +# Doxygen selects the parser to use depending on the extension of the files it +# parses. With this tag you can assign which parser to use for a given +# extension. Doxygen has a built-in mapping, but you can override or extend it +# using this tag. The format is ext=language, where ext is a file extension, and +# language is one of the parsers supported by doxygen: IDL, Java, Javascript, +# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: +# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: +# Fortran. In the later case the parser tries to guess whether the code is fixed +# or free formatted code, this is the default for Fortran type files), VHDL. For +# instance to make doxygen treat .inc files as Fortran files (default is PHP), +# and .f files as C (default is Fortran), use: inc=Fortran f=C. +# +# Note: For files without extension you can use no_extension as a placeholder. +# +# Note that for custom extensions you also need to set FILE_PATTERNS otherwise +# the files are not read by doxygen. + +EXTENSION_MAPPING = + +# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments +# according to the Markdown format, which allows for more readable +# documentation. See http://daringfireball.net/projects/markdown/ for details. +# The output of markdown processing is further processed by doxygen, so you can +# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in +# case of backward compatibilities issues. +# The default value is: YES. + +MARKDOWN_SUPPORT = YES + +# When enabled doxygen tries to link words that correspond to documented +# classes, or namespaces to their corresponding documentation. Such a link can +# be prevented in individual cases by putting a % sign in front of the word or +# globally by setting AUTOLINK_SUPPORT to NO. +# The default value is: YES. + +AUTOLINK_SUPPORT = YES + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want +# to include (a tag file for) the STL sources as input, then you should set this +# tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); +# versus func(std::string) {}). This also make the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. +# The default value is: NO. + +BUILTIN_STL_SUPPORT = YES + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. +# The default value is: NO. + +CPP_CLI_SUPPORT = NO + +# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: +# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen +# will parse them like normal C++ but will assume all classes use public instead +# of private inheritance when no explicit protection keyword is present. +# The default value is: NO. + +SIP_SUPPORT = NO + +# For Microsoft's IDL there are propget and propput attributes to indicate +# getter and setter methods for a property. Setting this option to YES will make +# doxygen to replace the get and set methods by a property in the documentation. +# This will only work if the methods are indeed getting or setting a simple +# type. If this is not the case, or you want to show the methods anyway, you +# should set this option to NO. +# The default value is: YES. + +IDL_PROPERTY_SUPPORT = YES + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. +# The default value is: NO. + +DISTRIBUTE_GROUP_DOC = YES + +# If one adds a struct or class to a group and this option is enabled, then also +# any nested class or struct is added to the same group. By default this option +# is disabled and one has to add nested compounds explicitly via \ingroup. +# The default value is: NO. + +# GROUP_NESTED_COMPOUNDS = NO + +# Set the SUBGROUPING tag to YES to allow class member groups of the same type +# (for instance a group of public functions) to be put as a subgroup of that +# type (e.g. under the Public Functions section). Set it to NO to prevent +# subgrouping. Alternatively, this can be done per class using the +# \nosubgrouping command. +# The default value is: YES. + +SUBGROUPING = YES + +# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions +# are shown inside the group in which they are included (e.g. using \ingroup) +# instead of on a separate page (for HTML and Man pages) or section (for LaTeX +# and RTF). +# +# Note that this feature does not work in combination with +# SEPARATE_MEMBER_PAGES. +# The default value is: NO. + +INLINE_GROUPED_CLASSES = NO + +# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions +# with only public data fields or simple typedef fields will be shown inline in +# the documentation of the scope in which they are defined (i.e. file, +# namespace, or group documentation), provided this scope is documented. If set +# to NO, structs, classes, and unions are shown on a separate page (for HTML and +# Man pages) or section (for LaTeX and RTF). +# The default value is: NO. + +INLINE_SIMPLE_STRUCTS = NO + +# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or +# enum is documented as struct, union, or enum with the name of the typedef. So +# typedef struct TypeS {} TypeT, will appear in the documentation as a struct +# with name TypeT. When disabled the typedef will appear as a member of a file, +# namespace, or class. And the struct will be named TypeS. This can typically be +# useful for C code in case the coding convention dictates that all compound +# types are typedef'ed and only the typedef is referenced, never the tag name. +# The default value is: NO. + +TYPEDEF_HIDES_STRUCT = NO + +# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This +# cache is used to resolve symbols given their name and scope. Since this can be +# an expensive process and often the same symbol appears multiple times in the +# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small +# doxygen will become slower. If the cache is too large, memory is wasted. The +# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range +# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 +# symbols. At the end of a run doxygen will report the cache usage and suggest +# the optimal cache size from a speed point of view. +# Minimum value: 0, maximum value: 9, default value: 0. + +LOOKUP_CACHE_SIZE = 2 + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in +# documentation are documented, even if no documentation was available. Private +# class members and static file members will be hidden unless the +# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES. +# Note: This will also disable the warnings about undocumented members that are +# normally produced when WARNINGS is set to YES. +# The default value is: NO. + +EXTRACT_ALL = YES + +# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will +# be included in the documentation. +# The default value is: NO. + +EXTRACT_PRIVATE = YES + +# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal +# scope will be included in the documentation. +# The default value is: NO. + +EXTRACT_PACKAGE = NO + +# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be +# included in the documentation. +# The default value is: NO. + +EXTRACT_STATIC = YES + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined +# locally in source files will be included in the documentation. If set to NO, +# only classes defined in header files are included. Does not have any effect +# for Java sources. +# The default value is: YES. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. If set to YES, local methods, +# which are defined in the implementation section but not in the interface are +# included in the documentation. If set to NO, only methods in the interface are +# included. +# The default value is: NO. + +EXTRACT_LOCAL_METHODS = NO + +# If this flag is set to YES, the members of anonymous namespaces will be +# extracted and appear in the documentation as a namespace called +# 'anonymous_namespace{file}', where file will be replaced with the base name of +# the file that contains the anonymous namespace. By default anonymous namespace +# are hidden. +# The default value is: NO. + +EXTRACT_ANON_NSPACES = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all +# undocumented members inside documented classes or files. If set to NO these +# members will be included in the various overviews, but no documentation +# section is generated. This option has no effect if EXTRACT_ALL is enabled. +# The default value is: NO. + +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. If set +# to NO, these classes will be included in the various overviews. This option +# has no effect if EXTRACT_ALL is enabled. +# The default value is: NO. + +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend +# (class|struct|union) declarations. If set to NO, these declarations will be +# included in the documentation. +# The default value is: NO. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any +# documentation blocks found inside the body of a function. If set to NO, these +# blocks will be appended to the function's detailed documentation block. +# The default value is: NO. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation that is typed after a +# \internal command is included. If the tag is set to NO then the documentation +# will be excluded. Set it to YES to include the internal documentation. +# The default value is: NO. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file +# names in lower-case letters. If set to YES, upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. +# The default value is: system dependent. + +CASE_SENSE_NAMES = YES + +# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with +# their full class and namespace scopes in the documentation. If set to YES, the +# scope will be hidden. +# The default value is: NO. + +HIDE_SCOPE_NAMES = NO + +# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will +# append additional text to a page's title, such as Class Reference. If set to +# YES the compound reference will be hidden. +# The default value is: NO. + +# HIDE_COMPOUND_REFERENCE= NO + +# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of +# the files that are included by a file in the documentation of that file. +# The default value is: YES. + +SHOW_INCLUDE_FILES = YES + +# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each +# grouped member an include statement to the documentation, telling the reader +# which file to include in order to use the member. +# The default value is: NO. + +# SHOW_GROUPED_MEMB_INC = NO + +# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include +# files with double quotes in the documentation rather than with sharp brackets. +# The default value is: NO. + +FORCE_LOCAL_INCLUDES = NO + +# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the +# documentation for inline members. +# The default value is: YES. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the +# (detailed) documentation of file and class members alphabetically by member +# name. If set to NO, the members will appear in declaration order. +# The default value is: YES. + +SORT_MEMBER_DOCS = YES + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief +# descriptions of file, namespace and class members alphabetically by member +# name. If set to NO, the members will appear in declaration order. Note that +# this will also influence the order of the classes in the class list. +# The default value is: NO. + +SORT_BRIEF_DOCS = NO + +# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the +# (brief and detailed) documentation of class members so that constructors and +# destructors are listed first. If set to NO the constructors will appear in the +# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. +# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief +# member documentation. +# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting +# detailed member documentation. +# The default value is: NO. + +SORT_MEMBERS_CTORS_1ST = NO + +# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy +# of group names into alphabetical order. If set to NO the group names will +# appear in their defined order. +# The default value is: NO. + +SORT_GROUP_NAMES = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by +# fully-qualified names, including namespaces. If set to NO, the class list will +# be sorted only by class name, not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the alphabetical +# list. +# The default value is: NO. + +SORT_BY_SCOPE_NAME = NO + +# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper +# type resolution of all parameters of a function it will reject a match between +# the prototype and the implementation of a member function even if there is +# only one candidate or it is obvious which candidate to choose by doing a +# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still +# accept a match between prototype and implementation in such cases. +# The default value is: NO. + +STRICT_PROTO_MATCHING = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo +# list. This list is created by putting \todo commands in the documentation. +# The default value is: YES. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test +# list. This list is created by putting \test commands in the documentation. +# The default value is: YES. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug +# list. This list is created by putting \bug commands in the documentation. +# The default value is: YES. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO) +# the deprecated list. This list is created by putting \deprecated commands in +# the documentation. +# The default value is: YES. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional documentation +# sections, marked by \if <section_label> ... \endif and \cond <section_label> +# ... \endcond blocks. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the +# initial value of a variable or macro / define can have for it to appear in the +# documentation. If the initializer consists of more lines than specified here +# it will be hidden. Use a value of 0 to hide initializers completely. The +# appearance of the value of individual variables and macros / defines can be +# controlled using \showinitializer or \hideinitializer command in the +# documentation regardless of this setting. +# Minimum value: 0, maximum value: 10000, default value: 30. + +MAX_INITIALIZER_LINES = 0 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at +# the bottom of the documentation of classes and structs. If set to YES, the +# list will mention the files that were used to generate the documentation. +# The default value is: YES. + +SHOW_USED_FILES = YES + +# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This +# will remove the Files entry from the Quick Index and from the Folder Tree View +# (if specified). +# The default value is: YES. + +SHOW_FILES = YES + +# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces +# page. This will remove the Namespaces entry from the Quick Index and from the +# Folder Tree View (if specified). +# The default value is: YES. + +SHOW_NAMESPACES = YES + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from +# the version control system). Doxygen will invoke the program by executing (via +# popen()) the command command input-file, where command is the value of the +# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided +# by doxygen. Whatever the program writes to standard output is used as the file +# version. For an example see the documentation. + +FILE_VERSION_FILTER = + +# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed +# by doxygen. The layout file controls the global structure of the generated +# output files in an output format independent way. To create the layout file +# that represents doxygen's defaults, run doxygen with the -l option. You can +# optionally specify a file name after the option, if omitted DoxygenLayout.xml +# will be used as the name of the layout file. +# +# Note that if you run doxygen from a directory containing a file called +# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE +# tag is left empty. + +LAYOUT_FILE = + +# The CITE_BIB_FILES tag can be used to specify one or more bib files containing +# the reference definitions. This must be a list of .bib files. The .bib +# extension is automatically appended if omitted. This requires the bibtex tool +# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. +# For LaTeX the style of the bibliography can be controlled using +# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the +# search path. See also \cite for info how to create references. + +CITE_BIB_FILES = + +#--------------------------------------------------------------------------- +# Configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated to +# standard output by doxygen. If QUIET is set to YES this implies that the +# messages are off. +# The default value is: NO. + +QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES +# this implies that the warnings are on. +# +# Tip: Turn warnings on while writing the documentation. +# The default value is: YES. + +WARNINGS = YES + +# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate +# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag +# will automatically be disabled. +# The default value is: YES. + +WARN_IF_UNDOCUMENTED = YES + +# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some parameters +# in a documented function, or documenting parameters that don't exist or using +# markup commands wrongly. +# The default value is: YES. + +WARN_IF_DOC_ERROR = YES + +# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that +# are documented, but have no documentation for their parameters or return +# value. If set to NO, doxygen will only warn about wrong or incomplete +# parameter documentation, but not about the absence of documentation. +# The default value is: NO. + +WARN_NO_PARAMDOC = NO + +# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when +# a warning is encountered. +# The default value is: NO. + +# WARN_AS_ERROR = NO + +# The WARN_FORMAT tag determines the format of the warning messages that doxygen +# can produce. The string should contain the $file, $line, and $text tags, which +# will be replaced by the file and line number from which the warning originated +# and the warning text. Optionally the format may contain $version, which will +# be replaced by the version of the file (if it could be obtained via +# FILE_VERSION_FILTER) +# The default value is: $file:$line: $text. + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning and error +# messages should be written. If left blank the output is written to standard +# error (stderr). + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# Configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag is used to specify the files and/or directories that contain +# documented source files. You may enter file names like myfile.cpp or +# directories like /usr/src/myproject. Separate the files or directories with +# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING +# Note: If this tag is empty the current directory is searched. + +INPUT = @DOXYGEN_INPUT@ + +# This tag can be used to specify the character encoding of the source files +# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses +# libiconv (or the iconv built into libc) for the transcoding. See the libiconv +# documentation (see: http://www.gnu.org/software/libiconv) for the list of +# possible encodings. +# The default value is: UTF-8. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and +# *.h) to filter out the source-files in the directories. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# read by doxygen. +# +# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp, +# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, +# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, +# *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.pyw, *.f90, *.f, *.for, *.tcl, +# *.vhd, *.vhdl, *.ucf, *.qsf, *.as and *.js. + +FILE_PATTERNS = *.dox \ + *.md \ + *.cl \ + *.cu \ + *.cuh \ + *.h \ + *.idl \ + *.py \ + *. + +# The RECURSIVE tag can be used to specify whether or not subdirectories should +# be searched for input files as well. +# The default value is: NO. + +RECURSIVE = YES + +# The EXCLUDE tag can be used to specify files and/or directories that should be +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. +# +# Note that relative paths are relative to the directory from which doxygen is +# run. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or +# directories that are symbolic links (a Unix file system feature) are excluded +# from the input. +# The default value is: NO. + +EXCLUDE_SYMLINKS = YES + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. +# +# Note that the wildcards are matched against the file with absolute path, so to +# exclude all test directories for example use the pattern */test/* + +EXCLUDE_PATTERNS = */build/* \ + */demo/* \ + */test/* \ + */installed/* \ + */.svn/* + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the +# output. The symbol name can be a fully qualified name, a word, or if the +# wildcard * is used, a substring. Examples: ANamespace, AClass, +# AClass::ANamespace, ANamespace::*Test +# +# Note that the wildcards are matched against the file with absolute path, so to +# exclude all test directories use the pattern */test/* + +EXCLUDE_SYMBOLS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or directories +# that contain example code fragments that are included (see the \include +# command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and +# *.h) to filter out the source-files in the directories. If left blank all +# files are included. + +EXAMPLE_PATTERNS = + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude commands +# irrespective of the value of the RECURSIVE tag. +# The default value is: NO. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or directories +# that contain images that are to be included in the documentation (see the +# \image command). + +IMAGE_PATH = @DOXYGEN_INPUT@ + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command: +# +# <filter> <input-file> +# +# where <filter> is the value of the INPUT_FILTER tag, and <input-file> is the +# name of an input file. Doxygen will then use the output that the filter +# program writes to standard output. If FILTER_PATTERNS is specified, this tag +# will be ignored. +# +# Note that the filter must not add or remove lines; it is applied before the +# code is scanned, but not when the output code is generated. If lines are added +# or removed, the anchors will not be placed correctly. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# properly processed by doxygen. + +INPUT_FILTER = @CMAKE_SOURCE_DIR@/CMake/docscripts/slash2spanning.pl + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. The filters are a list of the form: pattern=filter +# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how +# filters are used. If the FILTER_PATTERNS tag is empty or if none of the +# patterns match the file name, INPUT_FILTER is applied. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# properly processed by doxygen. + +FILTER_PATTERNS = *.py=@CMAKE_SOURCE_DIR@/CMake/docscripts/py_filter.sh + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will also be used to filter the input files that are used for +# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). +# The default value is: NO. + +FILTER_SOURCE_FILES = YES + +# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file +# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and +# it is also possible to disable source filtering for a specific pattern using +# *.ext= (so without naming a filter). +# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. + +FILTER_SOURCE_PATTERNS = + +# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that +# is part of the input, its contents will be placed on the main page +# (index.html). This can be useful if you have a project on for instance GitHub +# and want to reuse the introduction page also for the doxygen output. + +USE_MDFILE_AS_MAINPAGE = mainpage.md + +#--------------------------------------------------------------------------- +# Configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will be +# generated. Documented entities will be cross-referenced with these sources. +# +# Note: To get rid of all source code in the generated output, make sure that +# also VERBATIM_HEADERS is set to NO. +# The default value is: NO. + +SOURCE_BROWSER = YES + +# Setting the INLINE_SOURCES tag to YES will include the body of functions, +# classes and enums directly into the documentation. +# The default value is: NO. + +INLINE_SOURCES = YES + +# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any +# special comment blocks from generated source code fragments. Normal C, C++ and +# Fortran comments will always remain visible. +# The default value is: YES. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES then for each documented +# function all documented functions referencing it will be listed. +# The default value is: NO. + +REFERENCED_BY_RELATION = YES + +# If the REFERENCES_RELATION tag is set to YES then for each documented function +# all documented entities called/used by that function will be listed. +# The default value is: NO. + +REFERENCES_RELATION = YES + +# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set +# to YES then the hyperlinks from functions in REFERENCES_RELATION and +# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will +# link to the documentation. +# The default value is: YES. + +REFERENCES_LINK_SOURCE = YES + +# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the +# source code will show a tooltip with additional information such as prototype, +# brief description and links to the definition and documentation. Since this +# will make the HTML file larger and loading of large files a bit slower, you +# can opt to disable this feature. +# The default value is: YES. +# This tag requires that the tag SOURCE_BROWSER is set to YES. + +SOURCE_TOOLTIPS = YES + +# If the USE_HTAGS tag is set to YES then the references to source code will +# point to the HTML generated by the htags(1) tool instead of doxygen built-in +# source browser. The htags tool is part of GNU's global source tagging system +# (see http://www.gnu.org/software/global/global.html). You will need version +# 4.8.6 or higher. +# +# To use it do the following: +# - Install the latest version of global +# - Enable SOURCE_BROWSER and USE_HTAGS in the config file +# - Make sure the INPUT points to the root of the source tree +# - Run doxygen as normal +# +# Doxygen will invoke htags (and that will in turn invoke gtags), so these +# tools must be available from the command line (i.e. in the search path). +# +# The result: instead of the source browser generated by doxygen, the links to +# source code will now point to the output of htags. +# The default value is: NO. +# This tag requires that the tag SOURCE_BROWSER is set to YES. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a +# verbatim copy of the header file for each class for which an include is +# specified. Set to NO to disable this. +# See also: Section \class. +# The default value is: YES. + +VERBATIM_HEADERS = YES + +# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the +# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the +# cost of reduced performance. This can be particularly helpful with template +# rich C++ code for which doxygen's built-in parser lacks the necessary type +# information. +# Note: The availability of this option depends on whether or not doxygen was +# generated with the -Duse-libclang=ON option for CMake. +# The default value is: NO. + +# CLANG_ASSISTED_PARSING = NO + +# If clang assisted parsing is enabled you can provide the compiler with command +# line options that you would normally use when invoking the compiler. Note that +# the include paths will already be set by doxygen for the files and directories +# specified with INPUT and INCLUDE_PATH. +# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. + +# CLANG_OPTIONS = + +#--------------------------------------------------------------------------- +# Configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all +# compounds will be generated. Enable this if the project contains a lot of +# classes, structs, unions or interfaces. +# The default value is: YES. + +ALPHABETICAL_INDEX = YES + +# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in +# which the alphabetical index list will be split. +# Minimum value: 1, maximum value: 20, default value: 5. +# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. + +COLS_IN_ALPHA_INDEX = 3 + +# In case all classes in a project start with a common prefix, all classes will +# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag +# can be used to specify a prefix (or a list of prefixes) that should be ignored +# while generating the index headers. +# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output +# The default value is: YES. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a +# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of +# it. +# The default directory is: html. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each +# generated HTML page (for example: .htm, .php, .asp). +# The default value is: .html. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a user-defined HTML header file for +# each generated HTML page. If the tag is left blank doxygen will generate a +# standard header. +# +# To get valid HTML the header file that includes any scripts and style sheets +# that doxygen needs, which is dependent on the configuration options used (e.g. +# the setting GENERATE_TREEVIEW). It is highly recommended to start with a +# default header using +# doxygen -w html new_header.html new_footer.html new_stylesheet.css +# YourConfigFile +# and then modify the file new_header.html. See also section "Doxygen usage" +# for information on how to generate the default header that doxygen normally +# uses. +# Note: The header is subject to change so you typically have to regenerate the +# default header when upgrading to a newer version of doxygen. For a description +# of the possible markers and block names see the documentation. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_HEADER =header.html + +# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each +# generated HTML page. If the tag is left blank doxygen will generate a standard +# footer. See HTML_HEADER for more information on how to generate a default +# footer and what special commands can be used inside the footer. See also +# section "Doxygen usage" for information on how to generate the default footer +# that doxygen normally uses. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_FOOTER =footer.html + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style +# sheet that is used by each HTML page. It can be used to fine-tune the look of +# the HTML output. If left blank doxygen will generate a default style sheet. +# See also section "Doxygen usage" for information on how to generate the style +# sheet that doxygen normally uses. +# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as +# it is more robust and this tag (HTML_STYLESHEET) will in the future become +# obsolete. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_STYLESHEET = + +# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined +# cascading style sheets that are included after the standard style sheets +# created by doxygen. Using this option one can overrule certain style aspects. +# This is preferred over using HTML_STYLESHEET since it does not replace the +# standard style sheet and is therefore more robust against future updates. +# Doxygen will copy the style sheet files to the output directory. +# Note: The order of the extra style sheet files is of importance (e.g. the last +# style sheet in the list overrules the setting of the previous ones in the +# list). For an example see the documentation. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_EXTRA_STYLESHEET =customdoxygen.css + +# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or +# other source files which should be copied to the HTML output directory. Note +# that these files will be copied to the base HTML output directory. Use the +# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these +# files. In the HTML_STYLESHEET file, use the file name only. Also note that the +# files will be copied as-is; there are no commands or markers available. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_EXTRA_FILES =doxy-boot.js \ + bootstrap.min.css \ + bootstrap.min.js \ + jquery-2.1.1.min.js \ + jquery.powertip.min.js \ + glyphicons-halflings-regular.ttf \ + glyphicons-halflings-regular.woff + +# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen +# will adjust the colors in the style sheet and background images according to +# this color. Hue is specified as an angle on a colorwheel, see +# http://en.wikipedia.org/wiki/Hue for more information. For instance the value +# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 +# purple, and 360 is red again. +# Minimum value: 0, maximum value: 359, default value: 220. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_HUE = 220 + +# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors +# in the HTML output. For a value of 0 the output will use grayscales only. A +# value of 255 will produce the most vivid colors. +# Minimum value: 0, maximum value: 255, default value: 100. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_SAT = 100 + +# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the +# luminance component of the colors in the HTML output. Values below 100 +# gradually make the output lighter, whereas values above 100 make the output +# darker. The value divided by 100 is the actual gamma applied, so 80 represents +# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not +# change the gamma. +# Minimum value: 40, maximum value: 240, default value: 80. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_GAMMA = 80 + +# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML +# page will contain the date and time when the page was generated. Setting this +# to YES can help to show when doxygen was last run and thus if the +# documentation is up to date. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_TIMESTAMP = YES + +# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML +# documentation will contain sections that can be hidden and shown after the +# page has loaded. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_DYNAMIC_SECTIONS = YES + +# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries +# shown in the various tree structured indices initially; the user can expand +# and collapse entries dynamically later on. Doxygen will expand the tree to +# such a level that at most the specified number of entries are visible (unless +# a fully collapsed tree already exceeds this amount). So setting the number of +# entries 1 will produce a full collapsed tree by default. 0 is a special value +# representing an infinite number of entries and will result in a full expanded +# tree by default. +# Minimum value: 0, maximum value: 9999, default value: 100. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_INDEX_NUM_ENTRIES = 1 + +# If the GENERATE_DOCSET tag is set to YES, additional index files will be +# generated that can be used as input for Apple's Xcode 3 integrated development +# environment (see: http://developer.apple.com/tools/xcode/), introduced with +# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a +# Makefile in the HTML output directory. Running make will produce the docset in +# that directory and running make install will install the docset in +# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at +# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html +# for more information. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_DOCSET = NO + +# This tag determines the name of the docset feed. A documentation feed provides +# an umbrella under which multiple documentation sets from a single provider +# (such as a company or product suite) can be grouped. +# The default value is: Doxygen generated docs. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_FEEDNAME = "Doxygen generated docs" + +# This tag specifies a string that should uniquely identify the documentation +# set bundle. This should be a reverse domain-name style string, e.g. +# com.mycompany.MyDocSet. Doxygen will append .docset to the name. +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_BUNDLE_ID = org.doxygen.Project + +# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify +# the documentation publisher. This should be a reverse domain-name style +# string, e.g. com.mycompany.MyDocSet.documentation. +# The default value is: org.doxygen.Publisher. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_PUBLISHER_ID = org.doxygen.Publisher + +# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. +# The default value is: Publisher. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_PUBLISHER_NAME = Publisher + +# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three +# additional HTML index files: index.hhp, index.hhc, and index.hhk. The +# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop +# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on +# Windows. +# +# The HTML Help Workshop contains a compiler that can convert all HTML output +# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML +# files are now used as the Windows 98 help format, and will replace the old +# Windows help format (.hlp) on all Windows platforms in the future. Compressed +# HTML files also contain an index, a table of contents, and you can search for +# words in the documentation. The HTML workshop also contains a viewer for +# compressed HTML files. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_HTMLHELP = NO + +# The CHM_FILE tag can be used to specify the file name of the resulting .chm +# file. You can add a path in front of the file if the result should not be +# written to the html output directory. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +CHM_FILE = + +# The HHC_LOCATION tag can be used to specify the location (absolute path +# including file name) of the HTML help compiler (hhc.exe). If non-empty, +# doxygen will try to run the HTML help compiler on the generated index.hhp. +# The file has to be specified with full path. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +HHC_LOCATION = + +# The GENERATE_CHI flag controls if a separate .chi index file is generated +# (YES) or that it should be included in the master .chm file (NO). +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +GENERATE_CHI = NO + +# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) +# and project file content. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +CHM_INDEX_ENCODING = + +# The BINARY_TOC flag controls whether a binary table of contents is generated +# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it +# enables the Previous and Next buttons. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members to +# the table of contents of the HTML help documentation and to the tree view. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +TOC_EXPAND = NO + +# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and +# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that +# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help +# (.qch) of the generated HTML documentation. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_QHP = NO + +# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify +# the file name of the resulting .qch file. The path specified is relative to +# the HTML output folder. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QCH_FILE = + +# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help +# Project output. For more information please see Qt Help Project / Namespace +# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_NAMESPACE = org.doxygen.Project + +# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt +# Help Project output. For more information please see Qt Help Project / Virtual +# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- +# folders). +# The default value is: doc. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_VIRTUAL_FOLDER = doc + +# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom +# filter to add. For more information please see Qt Help Project / Custom +# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- +# filters). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_CUST_FILTER_NAME = + +# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the +# custom filter to add. For more information please see Qt Help Project / Custom +# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- +# filters). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_CUST_FILTER_ATTRS = + +# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this +# project's filter section matches. Qt Help Project / Filter Attributes (see: +# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_SECT_FILTER_ATTRS = + +# The QHG_LOCATION tag can be used to specify the location of Qt's +# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the +# generated .qhp file. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHG_LOCATION = + +# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be +# generated, together with the HTML files, they form an Eclipse help plugin. To +# install this plugin and make it available under the help contents menu in +# Eclipse, the contents of the directory containing the HTML and XML files needs +# to be copied into the plugins directory of eclipse. The name of the directory +# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. +# After copying Eclipse needs to be restarted before the help appears. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_ECLIPSEHELP = NO + +# A unique identifier for the Eclipse help plugin. When installing the plugin +# the directory name containing the HTML and XML files should also have this +# name. Each documentation set should have its own identifier. +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. + +ECLIPSE_DOC_ID = org.doxygen.Project + +# If you want full control over the layout of the generated HTML pages it might +# be necessary to disable the index and replace it with your own. The +# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top +# of each HTML page. A value of NO enables the index and the value YES disables +# it. Since the tabs in the index contain the same information as the navigation +# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +DISABLE_INDEX = NO + +# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index +# structure should be generated to display hierarchical information. If the tag +# value is set to YES, a side panel will be generated containing a tree-like +# index structure (just like the one that is generated for HTML Help). For this +# to work a browser that supports JavaScript, DHTML, CSS and frames is required +# (i.e. any modern browser). Windows users are probably better off using the +# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can +# further fine-tune the look of the index. As an example, the default style +# sheet generated by doxygen has an example that shows how to put an image at +# the root of the tree instead of the PROJECT_NAME. Since the tree basically has +# the same information as the tab index, you could consider setting +# DISABLE_INDEX to YES when enabling this option. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_TREEVIEW = NO + +# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that +# doxygen will group on one line in the generated HTML documentation. +# +# Note that a value of 0 will completely suppress the enum values from appearing +# in the overview section. +# Minimum value: 0, maximum value: 20, default value: 4. +# This tag requires that the tag GENERATE_HTML is set to YES. + +ENUM_VALUES_PER_LINE = 4 + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used +# to set the initial width (in pixels) of the frame in which the tree is shown. +# Minimum value: 0, maximum value: 1500, default value: 250. +# This tag requires that the tag GENERATE_HTML is set to YES. + +TREEVIEW_WIDTH = 250 + +# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to +# external symbols imported via tag files in a separate window. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +EXT_LINKS_IN_WINDOW = YES + +# Use this tag to change the font size of LaTeX formulas included as images in +# the HTML documentation. When you change the font size after a successful +# doxygen run you need to manually remove any form_*.png images from the HTML +# output directory to force them to be regenerated. +# Minimum value: 8, maximum value: 50, default value: 10. +# This tag requires that the tag GENERATE_HTML is set to YES. + +FORMULA_FONTSIZE = 10 + +# Use the FORMULA_TRANPARENT tag to determine whether or not the images +# generated for formulas are transparent PNGs. Transparent PNGs are not +# supported properly for IE 6.0, but are supported on all modern browsers. +# +# Note that when changing this option you need to delete any form_*.png files in +# the HTML output directory before the changes have effect. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +FORMULA_TRANSPARENT = YES + +# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see +# http://www.mathjax.org) which uses client side Javascript for the rendering +# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX +# installed or if you want to formulas look prettier in the HTML output. When +# enabled you may also need to install MathJax separately and configure the path +# to it using the MATHJAX_RELPATH option. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +USE_MATHJAX = NO + +# When MathJax is enabled you can set the default output format to be used for +# the MathJax output. See the MathJax site (see: +# http://docs.mathjax.org/en/latest/output.html) for more details. +# Possible values are: HTML-CSS (which is slower, but has the best +# compatibility), NativeMML (i.e. MathML) and SVG. +# The default value is: HTML-CSS. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_FORMAT = HTML-CSS + +# When MathJax is enabled you need to specify the location relative to the HTML +# output directory using the MATHJAX_RELPATH option. The destination directory +# should contain the MathJax.js script. For instance, if the mathjax directory +# is located at the same level as the HTML output directory, then +# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax +# Content Delivery Network so you can quickly see the result without installing +# MathJax. However, it is strongly recommended to install a local copy of +# MathJax from http://www.mathjax.org before deployment. +# The default value is: http://cdn.mathjax.org/mathjax/latest. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest + +# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax +# extension names that should be enabled during MathJax rendering. For example +# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_EXTENSIONS = + +# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces +# of code that will be used on startup of the MathJax code. See the MathJax site +# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an +# example see the documentation. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_CODEFILE = + +# When the SEARCHENGINE tag is enabled doxygen will generate a search box for +# the HTML output. The underlying search engine uses javascript and DHTML and +# should work on any modern browser. Note that when using HTML help +# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) +# there is already a search function so this one should typically be disabled. +# For large projects the javascript based search engine can be slow, then +# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to +# search using the keyboard; to jump to the search box use <access key> + S +# (what the <access key> is depends on the OS and browser, but it is typically +# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down +# key> to jump into the search results window, the results can be navigated +# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel +# the search. The filter options can be selected when the cursor is inside the +# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys> +# to select a filter and <Enter> or <escape> to activate or cancel the filter +# option. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +SEARCHENGINE = YES + +# When the SERVER_BASED_SEARCH tag is enabled the search engine will be +# implemented using a web server instead of a web client using Javascript. There +# are two flavors of web server based searching depending on the EXTERNAL_SEARCH +# setting. When disabled, doxygen will generate a PHP script for searching and +# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing +# and searching needs to be provided by external tools. See the section +# "External Indexing and Searching" for details. +# The default value is: NO. +# This tag requires that the tag SEARCHENGINE is set to YES. + +SERVER_BASED_SEARCH = $(DOX_SERVER_BASED_SEARCH) + +# For publishing on a web-server consider enabling server-side search functionality +# TODO: make this configurable with cmake somehow +# SERVER_BASED_SEARCH = YES + +# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP +# script for searching. Instead the search results are written to an XML file +# which needs to be processed by an external indexer. Doxygen will invoke an +# external search engine pointed to by the SEARCHENGINE_URL option to obtain the +# search results. +# +# Doxygen ships with an example indexer (doxyindexer) and search engine +# (doxysearch.cgi) which are based on the open source search engine library +# Xapian (see: http://xapian.org/). +# +# See the section "External Indexing and Searching" for details. +# The default value is: NO. +# This tag requires that the tag SEARCHENGINE is set to YES. + +EXTERNAL_SEARCH = NO + +# The SEARCHENGINE_URL should point to a search engine hosted by a web server +# which will return the search results when EXTERNAL_SEARCH is enabled. +# +# Doxygen ships with an example indexer (doxyindexer) and search engine +# (doxysearch.cgi) which are based on the open source search engine library +# Xapian (see: http://xapian.org/). See the section "External Indexing and +# Searching" for details. +# This tag requires that the tag SEARCHENGINE is set to YES. + +SEARCHENGINE_URL = + +# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed +# search data is written to a file for indexing by an external tool. With the +# SEARCHDATA_FILE tag the name of this file can be specified. +# The default file is: searchdata.xml. +# This tag requires that the tag SEARCHENGINE is set to YES. + +SEARCHDATA_FILE = searchdata.xml + +# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the +# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is +# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple +# projects and redirect the results back to the right project. +# This tag requires that the tag SEARCHENGINE is set to YES. + +EXTERNAL_SEARCH_ID = + +# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen +# projects other than the one defined by this configuration file, but that are +# all added to the same external search index. Each project needs to have a +# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of +# to a relative location where the documentation can be found. The format is: +# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... +# This tag requires that the tag SEARCHENGINE is set to YES. + +EXTRA_SEARCH_MAPPINGS = + +#--------------------------------------------------------------------------- +# Configuration options related to the LaTeX output +#--------------------------------------------------------------------------- + +# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. +# The default value is: YES. + +GENERATE_LATEX = NO + +# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a +# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of +# it. +# The default directory is: latex. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_OUTPUT = latex + +# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be +# invoked. +# +# Note that when enabling USE_PDFLATEX this option is only used for generating +# bitmaps for formulas in the HTML output, but not in the Makefile that is +# written to the output directory. +# The default file is: latex. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_CMD_NAME = latex + +# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate +# index for LaTeX. +# The default file is: makeindex. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +MAKEINDEX_CMD_NAME = makeindex + +# If the COMPACT_LATEX tag is set to YES, doxygen generates more compact LaTeX +# documents. This may be useful for small projects and may help to save some +# trees in general. +# The default value is: NO. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +COMPACT_LATEX = NO + +# The PAPER_TYPE tag can be used to set the paper type that is used by the +# printer. +# Possible values are: a4 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x +# 14 inches) and executive (7.25 x 10.5 inches). +# The default value is: a4. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +PAPER_TYPE = a4 + +# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names +# that should be included in the LaTeX output. The package can be specified just +# by its name or with the correct syntax as to be used with the LaTeX +# \usepackage command. To get the times font for instance you can specify : +# EXTRA_PACKAGES=times or EXTRA_PACKAGES={times} +# To use the option intlimits with the amsmath package you can specify: +# EXTRA_PACKAGES=[intlimits]{amsmath} +# If left blank no extra packages will be included. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +EXTRA_PACKAGES = + +# The LATEX_HEADER tag can be used to specify a personal LaTeX header for the +# generated LaTeX document. The header should contain everything until the first +# chapter. If it is left blank doxygen will generate a standard header. See +# section "Doxygen usage" for information on how to let doxygen write the +# default header to a separate file. +# +# Note: Only use a user-defined header if you know what you are doing! The +# following commands have a special meaning inside the header: $title, +# $datetime, $date, $doxygenversion, $projectname, $projectnumber, +# $projectbrief, $projectlogo. Doxygen will replace $title with the empty +# string, for the replacement values of the other commands the user is referred +# to HTML_HEADER. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_HEADER = + +# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the +# generated LaTeX document. The footer should contain everything after the last +# chapter. If it is left blank doxygen will generate a standard footer. See +# LATEX_HEADER for more information on how to generate a default footer and what +# special commands can be used inside the footer. +# +# Note: Only use a user-defined footer if you know what you are doing! +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_FOOTER = + +# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined +# LaTeX style sheets that are included after the standard style sheets created +# by doxygen. Using this option one can overrule certain style aspects. Doxygen +# will copy the style sheet files to the output directory. +# Note: The order of the extra style sheet files is of importance (e.g. the last +# style sheet in the list overrules the setting of the previous ones in the +# list). +# This tag requires that the tag GENERATE_LATEX is set to YES. + +# LATEX_EXTRA_STYLESHEET = + +# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or +# other source files which should be copied to the LATEX_OUTPUT output +# directory. Note that the files will be copied as-is; there are no commands or +# markers available. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_EXTRA_FILES = + +# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is +# prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will +# contain links (just like the HTML output) instead of page references. This +# makes the output suitable for online browsing using a PDF viewer. +# The default value is: YES. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +PDF_HYPERLINKS = YES + +# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate +# the PDF file directly from the LaTeX files. Set this option to YES, to get a +# higher quality PDF documentation. +# The default value is: YES. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +USE_PDFLATEX = YES + +# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode +# command to the generated LaTeX files. This will instruct LaTeX to keep running +# if errors occur, instead of asking the user for help. This option is also used +# when generating formulas in HTML. +# The default value is: NO. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_BATCHMODE = NO + +# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the +# index chapters (such as File Index, Compound Index, etc.) in the output. +# The default value is: NO. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_HIDE_INDICES = NO + +# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source +# code with syntax highlighting in the LaTeX output. +# +# Note that which sources are shown also depends on other settings such as +# SOURCE_BROWSER. +# The default value is: NO. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_SOURCE_CODE = NO + +# The LATEX_BIB_STYLE tag can be used to specify the style to use for the +# bibliography, e.g. plainnat, or ieeetr. See +# http://en.wikipedia.org/wiki/BibTeX and \cite for more info. +# The default value is: plain. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_BIB_STYLE = plain + +# If the LATEX_TIMESTAMP tag is set to YES then the footer of each generated +# page will contain the date and time when the page was generated. Setting this +# to NO can help when comparing the output of multiple runs. +# The default value is: NO. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +# LATEX_TIMESTAMP = NO + +#--------------------------------------------------------------------------- +# Configuration options related to the RTF output +#--------------------------------------------------------------------------- + +# If the GENERATE_RTF tag is set to YES, doxygen will generate RTF output. The +# RTF output is optimized for Word 97 and may not look too pretty with other RTF +# readers/editors. +# The default value is: NO. + +GENERATE_RTF = NO + +# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. If a +# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of +# it. +# The default directory is: rtf. +# This tag requires that the tag GENERATE_RTF is set to YES. + +RTF_OUTPUT = rtf + +# If the COMPACT_RTF tag is set to YES, doxygen generates more compact RTF +# documents. This may be useful for small projects and may help to save some +# trees in general. +# The default value is: NO. +# This tag requires that the tag GENERATE_RTF is set to YES. + +COMPACT_RTF = NO + +# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated will +# contain hyperlink fields. The RTF file will contain links (just like the HTML +# output) instead of page references. This makes the output suitable for online +# browsing using Word or some other Word compatible readers that support those +# fields. +# +# Note: WordPad (write) and others do not support links. +# The default value is: NO. +# This tag requires that the tag GENERATE_RTF is set to YES. + +RTF_HYPERLINKS = NO + +# Load stylesheet definitions from file. Syntax is similar to doxygen's config +# file, i.e. a series of assignments. You only have to provide replacements, +# missing definitions are set to their default value. +# +# See also section "Doxygen usage" for information on how to generate the +# default style sheet that doxygen normally uses. +# This tag requires that the tag GENERATE_RTF is set to YES. + +RTF_STYLESHEET_FILE = + +# Set optional variables used in the generation of an RTF document. Syntax is +# similar to doxygen's config file. A template extensions file can be generated +# using doxygen -e rtf extensionFile. +# This tag requires that the tag GENERATE_RTF is set to YES. + +RTF_EXTENSIONS_FILE = + +# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code +# with syntax highlighting in the RTF output. +# +# Note that which sources are shown also depends on other settings such as +# SOURCE_BROWSER. +# The default value is: NO. +# This tag requires that the tag GENERATE_RTF is set to YES. + +# RTF_SOURCE_CODE = NO + +#--------------------------------------------------------------------------- +# Configuration options related to the man page output +#--------------------------------------------------------------------------- + +# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for +# classes and files. +# The default value is: NO. + +GENERATE_MAN = NO + +# The MAN_OUTPUT tag is used to specify where the man pages will be put. If a +# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of +# it. A directory man3 will be created inside the directory specified by +# MAN_OUTPUT. +# The default directory is: man. +# This tag requires that the tag GENERATE_MAN is set to YES. + +MAN_OUTPUT = man + +# The MAN_EXTENSION tag determines the extension that is added to the generated +# man pages. In case the manual section does not start with a number, the number +# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is +# optional. +# The default value is: .3. +# This tag requires that the tag GENERATE_MAN is set to YES. + +MAN_EXTENSION = .3 + +# The MAN_SUBDIR tag determines the name of the directory created within +# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by +# MAN_EXTENSION with the initial . removed. +# This tag requires that the tag GENERATE_MAN is set to YES. + +# MAN_SUBDIR = + +# If the MAN_LINKS tag is set to YES and doxygen generates man output, then it +# will generate one additional man file for each entity documented in the real +# man page(s). These additional files only source the real man page, but without +# them the man command would be unable to find the correct page. +# The default value is: NO. +# This tag requires that the tag GENERATE_MAN is set to YES. + +MAN_LINKS = NO + +#--------------------------------------------------------------------------- +# Configuration options related to the XML output +#--------------------------------------------------------------------------- + +# If the GENERATE_XML tag is set to YES, doxygen will generate an XML file that +# captures the structure of the code including all documentation. +# The default value is: NO. + +GENERATE_XML = NO + +# The XML_OUTPUT tag is used to specify where the XML pages will be put. If a +# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of +# it. +# The default directory is: xml. +# This tag requires that the tag GENERATE_XML is set to YES. + +XML_OUTPUT = xml + +# If the XML_PROGRAMLISTING tag is set to YES, doxygen will dump the program +# listings (including syntax highlighting and cross-referencing information) to +# the XML output. Note that enabling this will significantly increase the size +# of the XML output. +# The default value is: YES. +# This tag requires that the tag GENERATE_XML is set to YES. + +XML_PROGRAMLISTING = YES + +#--------------------------------------------------------------------------- +# Configuration options related to the DOCBOOK output +#--------------------------------------------------------------------------- + +# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files +# that can be used to generate PDF. +# The default value is: NO. + +GENERATE_DOCBOOK = NO + +# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in +# front of it. +# The default directory is: docbook. +# This tag requires that the tag GENERATE_DOCBOOK is set to YES. + +DOCBOOK_OUTPUT = docbook + +# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the +# program listings (including syntax highlighting and cross-referencing +# information) to the DOCBOOK output. Note that enabling this will significantly +# increase the size of the DOCBOOK output. +# The default value is: NO. +# This tag requires that the tag GENERATE_DOCBOOK is set to YES. + +# DOCBOOK_PROGRAMLISTING = NO + +#--------------------------------------------------------------------------- +# Configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- + +# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an +# AutoGen Definitions (see http://autogen.sf.net) file that captures the +# structure of the code including all documentation. Note that this feature is +# still experimental and incomplete at the moment. +# The default value is: NO. + +GENERATE_AUTOGEN_DEF = NO + +#--------------------------------------------------------------------------- +# Configuration options related to the Perl module output +#--------------------------------------------------------------------------- + +# If the GENERATE_PERLMOD tag is set to YES, doxygen will generate a Perl module +# file that captures the structure of the code including all documentation. +# +# Note that this feature is still experimental and incomplete at the moment. +# The default value is: NO. + +GENERATE_PERLMOD = NO + +# If the PERLMOD_LATEX tag is set to YES, doxygen will generate the necessary +# Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI +# output from the Perl module output. +# The default value is: NO. +# This tag requires that the tag GENERATE_PERLMOD is set to YES. + +PERLMOD_LATEX = NO + +# If the PERLMOD_PRETTY tag is set to YES, the Perl module output will be nicely +# formatted so it can be parsed by a human reader. This is useful if you want to +# understand what is going on. On the other hand, if this tag is set to NO, the +# size of the Perl module output will be much smaller and Perl will parse it +# just the same. +# The default value is: YES. +# This tag requires that the tag GENERATE_PERLMOD is set to YES. + +PERLMOD_PRETTY = YES + +# The names of the make variables in the generated doxyrules.make file are +# prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. This is useful +# so different doxyrules.make files included by the same Makefile don't +# overwrite each other's variables. +# This tag requires that the tag GENERATE_PERLMOD is set to YES. + +PERLMOD_MAKEVAR_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- + +# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all +# C-preprocessor directives found in the sources and include files. +# The default value is: YES. + +ENABLE_PREPROCESSING = YES + +# If the MACRO_EXPANSION tag is set to YES, doxygen will expand all macro names +# in the source code. If set to NO, only conditional compilation will be +# performed. Macro expansion can be done in a controlled way by setting +# EXPAND_ONLY_PREDEF to YES. +# The default value is: NO. +# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. + +MACRO_EXPANSION = YES + +# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then +# the macro expansion is limited to the macros specified with the PREDEFINED and +# EXPAND_AS_DEFINED tags. +# The default value is: NO. +# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. + +EXPAND_ONLY_PREDEF = YES + +# If the SEARCH_INCLUDES tag is set to YES, the include files in the +# INCLUDE_PATH will be searched if a #include is found. +# The default value is: YES. +# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. + +SEARCH_INCLUDES = YES + +# The INCLUDE_PATH tag can be used to specify one or more directories that +# contain include files that are not input files but should be processed by the +# preprocessor. +# This tag requires that the tag SEARCH_INCLUDES is set to YES. + +INCLUDE_PATH = + +# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard +# patterns (like *.h and *.hpp) to filter out the header-files in the +# directories. If left blank, the patterns specified with FILE_PATTERNS will be +# used. +# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. + +INCLUDE_FILE_PATTERNS = + +# The PREDEFINED tag can be used to specify one or more macro names that are +# defined before the preprocessor is started (similar to the -D option of e.g. +# gcc). The argument of the tag is a list of macros of the form: name or +# name=definition (no spaces). If the definition and the "=" are omitted, "=1" +# is assumed. To prevent a macro definition from being undefined via #undef or +# recursively expanded use the := operator instead of the = operator. +# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. + +PREDEFINED = DOXYGEN_SHOULD_SKIP_THIS \ + BOOST_PP_IS_ITERATING \ + restrict= \ + __attribute__(x)= \ + @DOXYGEN_PREDEFINED@ + +# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this +# tag can be used to specify a list of macro names that should be expanded. The +# macro definition that is found in the sources will be used. Use the PREDEFINED +# tag if you want to use a different macro definition that overrules the +# definition found in the source code. +# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. + +EXPAND_AS_DEFINED = + +# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will +# remove all references to function-like macros that are alone on a line, have +# an all uppercase name, and do not end with a semicolon. Such function macros +# are typically used for boiler-plate code, and will confuse the parser if not +# removed. +# The default value is: YES. +# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. + +SKIP_FUNCTION_MACROS = YES + +#--------------------------------------------------------------------------- +# Configuration options related to external references +#--------------------------------------------------------------------------- + +# The TAGFILES tag can be used to specify one or more tag files. For each tag +# file the location of the external documentation should be added. The format of +# a tag file without this location is as follows: +# TAGFILES = file1 file2 ... +# Adding location for the tag files is done as follows: +# TAGFILES = file1=loc1 "file2 = loc2" ... +# where loc1 and loc2 can be relative or absolute paths or URLs. See the +# section "Linking to external documentation" for more information about the use +# of tag files. +# Note: Each tag file must have a unique name (where the name does NOT include +# the path). If a tag file is not located in the directory in which doxygen is +# run, you must also specify the path to the tagfile here. + +TAGFILES = + +# When a file name is specified after GENERATE_TAGFILE, doxygen will create a +# tag file that is based on the input files it reads. See section "Linking to +# external documentation" for more information about the usage of tag files. + +GENERATE_TAGFILE = @CMAKE_PROJECT_NAME@.tag + +# If the ALLEXTERNALS tag is set to YES, all external class will be listed in +# the class index. If set to NO, only the inherited external classes will be +# listed. +# The default value is: NO. + +ALLEXTERNALS = YES + +# If the EXTERNAL_GROUPS tag is set to YES, all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will be +# listed. +# The default value is: YES. + +EXTERNAL_GROUPS = YES + +# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in +# the related pages index. If set to NO, only the current project's pages will +# be listed. +# The default value is: YES. + +EXTERNAL_PAGES = YES + +# The PERL_PATH should be the absolute path and name of the perl script +# interpreter (i.e. the result of 'which perl'). +# The default file (with absolute path) is: /usr/bin/perl. + +PERL_PATH = /usr/bin/perl + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- + +# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram +# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to +# NO turns the diagrams off. Note that this option also works with HAVE_DOT +# disabled, but it is recommended to install and use dot, since it yields more +# powerful graphs. +# The default value is: YES. + +CLASS_DIAGRAMS = YES + +# You can define message sequence charts within doxygen comments using the \msc +# command. Doxygen will then run the mscgen tool (see: +# http://www.mcternan.me.uk/mscgen/)) to produce the chart and insert it in the +# documentation. The MSCGEN_PATH tag allows you to specify the directory where +# the mscgen tool resides. If left empty the tool is assumed to be found in the +# default search path. + +MSCGEN_PATH = + +# You can include diagrams made with dia in doxygen documentation. Doxygen will +# then run dia to produce the diagram and insert it in the documentation. The +# DIA_PATH tag allows you to specify the directory where the dia binary resides. +# If left empty dia is assumed to be found in the default search path. + +# DIA_PATH = + +# If set to YES the inheritance and collaboration graphs will hide inheritance +# and usage relations if the target is undocumented or is not a class. +# The default value is: YES. + +HIDE_UNDOC_RELATIONS = YES + +# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is +# available from the path. This tool is part of Graphviz (see: +# http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent +# Bell Labs. The other options in this section have no effect if this option is +# set to NO +# The default value is: YES. + +HAVE_DOT = @DOXYGEN_DOT_FOUND@ + +# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed +# to run in parallel. When set to 0 doxygen will base this on the number of +# processors available in the system. You can set it explicitly to a value +# larger than 0 to get control over the balance between CPU load and processing +# speed. +# Minimum value: 0, maximum value: 32, default value: 0. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_NUM_THREADS = 4 + +# When you want a differently looking font in the dot files that doxygen +# generates you can specify the font name using DOT_FONTNAME. You need to make +# sure dot is able to find the font, which can be done by putting it in a +# standard location or by setting the DOTFONTPATH environment variable or by +# setting DOT_FONTPATH to the directory containing the font. +# The default value is: Helvetica. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_FONTNAME = Helvetica + +# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of +# dot graphs. +# Minimum value: 4, maximum value: 24, default value: 10. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_FONTSIZE = 10 + +# By default doxygen will tell dot to use the default font as specified with +# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set +# the path where dot can find it using this tag. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_FONTPATH = + +# If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for +# each documented class showing the direct and indirect inheritance relations. +# Setting this tag to YES will force the CLASS_DIAGRAMS tag to NO. +# The default value is: YES. +# This tag requires that the tag HAVE_DOT is set to YES. + +CLASS_GRAPH = YES + +# If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a +# graph for each documented class showing the direct and indirect implementation +# dependencies (inheritance, containment, and class references variables) of the +# class with other documented classes. +# The default value is: YES. +# This tag requires that the tag HAVE_DOT is set to YES. + +COLLABORATION_GRAPH = YES + +# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for +# groups, showing the direct groups dependencies. +# The default value is: YES. +# This tag requires that the tag HAVE_DOT is set to YES. + +GROUP_GRAPHS = YES + +# If the UML_LOOK tag is set to YES, doxygen will generate inheritance and +# collaboration diagrams in a style similar to the OMG's Unified Modeling +# Language. +# The default value is: NO. +# This tag requires that the tag HAVE_DOT is set to YES. + +UML_LOOK = YES + +# If the UML_LOOK tag is enabled, the fields and methods are shown inside the +# class node. If there are many fields or methods and many nodes the graph may +# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the +# number of items for each type to make the size more manageable. Set this to 0 +# for no limit. Note that the threshold may be exceeded by 50% before the limit +# is enforced. So when you set the threshold to 10, up to 15 fields may appear, +# but if the number exceeds 15, the total amount of fields shown is limited to +# 10. +# Minimum value: 0, maximum value: 100, default value: 10. +# This tag requires that the tag HAVE_DOT is set to YES. + +UML_LIMIT_NUM_FIELDS = 10 + +# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and +# collaboration graphs will show the relations between templates and their +# instances. +# The default value is: NO. +# This tag requires that the tag HAVE_DOT is set to YES. + +TEMPLATE_RELATIONS = NO + +# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to +# YES then doxygen will generate a graph for each documented file showing the +# direct and indirect include dependencies of the file with other documented +# files. +# The default value is: YES. +# This tag requires that the tag HAVE_DOT is set to YES. + +INCLUDE_GRAPH = YES + +# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are +# set to YES then doxygen will generate a graph for each documented file showing +# the direct and indirect include dependencies of the file with other documented +# files. +# The default value is: YES. +# This tag requires that the tag HAVE_DOT is set to YES. + +INCLUDED_BY_GRAPH = YES + +# If the CALL_GRAPH tag is set to YES then doxygen will generate a call +# dependency graph for every global function or class method. +# +# Note that enabling this option will significantly increase the time of a run. +# So in most cases it will be better to enable call graphs for selected +# functions only using the \callgraph command. Disabling a call graph can be +# accomplished by means of the command \hidecallgraph. +# The default value is: NO. +# This tag requires that the tag HAVE_DOT is set to YES. + +CALL_GRAPH = YES + +# If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller +# dependency graph for every global function or class method. +# +# Note that enabling this option will significantly increase the time of a run. +# So in most cases it will be better to enable caller graphs for selected +# functions only using the \callergraph command. Disabling a caller graph can be +# accomplished by means of the command \hidecallergraph. +# The default value is: NO. +# This tag requires that the tag HAVE_DOT is set to YES. + +CALLER_GRAPH = YES + +# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical +# hierarchy of all classes instead of a textual one. +# The default value is: YES. +# This tag requires that the tag HAVE_DOT is set to YES. + +GRAPHICAL_HIERARCHY = YES + +# If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the +# dependencies a directory has on other directories in a graphical way. The +# dependency relations are determined by the #include relations between the +# files in the directories. +# The default value is: YES. +# This tag requires that the tag HAVE_DOT is set to YES. + +DIRECTORY_GRAPH = YES + +# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images +# generated by dot. For an explanation of the image formats see the section +# output formats in the documentation of the dot tool (Graphviz (see: +# http://www.graphviz.org/)). +# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order +# to make the SVG files visible in IE 9+ (other browsers do not have this +# requirement). +# Possible values are: png, png:cairo, png:cairo:cairo, png:cairo:gd, png:gd, +# png:gd:gd, jpg, jpg:cairo, jpg:cairo:gd, jpg:gd, jpg:gd:gd, gif, gif:cairo, +# gif:cairo:gd, gif:gd, gif:gd:gd, svg, png:gd, png:gd:gd, png:cairo, +# png:cairo:gd, png:cairo:cairo, png:cairo:gdiplus, png:gdiplus and +# png:gdiplus:gdiplus. +# The default value is: png. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_IMAGE_FORMAT = svg + +# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to +# enable generation of interactive SVG images that allow zooming and panning. +# +# Note that this requires a modern browser other than Internet Explorer. Tested +# and working are Firefox, Chrome, Safari, and Opera. +# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make +# the SVG files visible. Older versions of IE do not have SVG support. +# The default value is: NO. +# This tag requires that the tag HAVE_DOT is set to YES. + +INTERACTIVE_SVG = YES + +# The DOT_PATH tag can be used to specify the path where the dot tool can be +# found. If left blank, it is assumed the dot tool can be found in the path. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_PATH = @DOXYGEN_DOT_PATH@ + +# The DOTFILE_DIRS tag can be used to specify one or more directories that +# contain dot files that are included in the documentation (see the \dotfile +# command). +# This tag requires that the tag HAVE_DOT is set to YES. + +DOTFILE_DIRS = + +# The MSCFILE_DIRS tag can be used to specify one or more directories that +# contain msc files that are included in the documentation (see the \mscfile +# command). + +MSCFILE_DIRS = + +# The DIAFILE_DIRS tag can be used to specify one or more directories that +# contain dia files that are included in the documentation (see the \diafile +# command). + +# DIAFILE_DIRS = + +# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the +# path where java can find the plantuml.jar file. If left blank, it is assumed +# PlantUML is not used or called during a preprocessing step. Doxygen will +# generate a warning when it encounters a \startuml command in this case and +# will not generate output for the diagram. + +PLANTUML_JAR_PATH = /opt/plantuml + +# When using plantuml, the specified paths are searched for files specified by +# the !include statement in a plantuml block. + +# PLANTUML_INCLUDE_PATH = + +# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes +# that will be shown in the graph. If the number of nodes in a graph becomes +# larger than this value, doxygen will truncate the graph, which is visualized +# by representing a node as a red box. Note that doxygen if the number of direct +# children of the root node in a graph is already larger than +# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that +# the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. +# Minimum value: 0, maximum value: 10000, default value: 50. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_GRAPH_MAX_NODES = 500 + +# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the graphs +# generated by dot. A depth value of 3 means that only nodes reachable from the +# root by following a path via at most 3 edges will be shown. Nodes that lay +# further from the root node will be omitted. Note that setting this option to 1 +# or 2 may greatly reduce the computation time needed for large code bases. Also +# note that the size of a graph can be further restricted by +# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. +# Minimum value: 0, maximum value: 1000, default value: 0. +# This tag requires that the tag HAVE_DOT is set to YES. + +MAX_DOT_GRAPH_DEPTH = 0 + +# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent +# background. This is disabled by default, because dot on Windows does not seem +# to support this out of the box. +# +# Warning: Depending on the platform used, enabling this option may lead to +# badly anti-aliased labels on the edges of a graph (i.e. they become hard to +# read). +# The default value is: NO. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_TRANSPARENT = NO + +# Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output +# files in one run (i.e. multiple -o and -T options on the command line). This +# makes dot run faster, but since only newer versions of dot (>1.8.10) support +# this, this feature is disabled by default. +# The default value is: NO. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_MULTI_TARGETS = YES + +# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page +# explaining the meaning of the various boxes and arrows in the dot generated +# graphs. +# The default value is: YES. +# This tag requires that the tag HAVE_DOT is set to YES. + +GENERATE_LEGEND = YES + +# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot +# files that are used to generate the various graphs. +# The default value is: YES. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_CLEANUP = YES diff --git a/CMake/docscripts/py_filter.sh b/CMake/docscripts/py_filter.sh new file mode 100755 index 00000000000..c6fd1f78498 --- /dev/null +++ b/CMake/docscripts/py_filter.sh @@ -0,0 +1,2 @@ +#!/bin/bash +doxypypy -a -c $1 diff --git a/CMake/variants/variants.lofar-documentation b/CMake/variants/variants.lofar-documentation new file mode 100644 index 00000000000..3af5476efa7 --- /dev/null +++ b/CMake/variants/variants.lofar-documentation @@ -0,0 +1,17 @@ +option(USE_CUDA "Use CUDA" ON) +option(USE_MPI "Use MPI" ON) +option(USE_OPENMP "Use OPENMP" ON) +option(USE_OPENCL "Don't use OPENCL" OFF) + + +set(WINCC_ROOT_DIR /opt/WinCC_OA/3.14) +set(CASACORE_ROOT_DIR /opt/casacore) +set(CASAREST_ROOT_DIR /opt/casarest) +set(CASA_ROOT_DIR /opt/casarest/casarest-1.4.2) +set(AOFLAGGER_LIBRARY /opt/aoflagger-2.9.0/build/lib/libaoflagger.so) +set(AOFLAGGER_INCLUDE_DIR /opt/aoflagger-2.9.0/build/include) +set(DAL_LIBRARY /opt/dal/DAL-master/build/lib/liblofardal.so) +set(DAL_INCLUDE_DIR /opt/dal/DAL-master/build/include) +set(CUDA_SDK_ROOT_DIR /usr/local/cuda-8.0) +set(CUDA_TOOLKIT_ROOT_DIR /usr/local/cuda) +set(MPI_ROOT_DIR /usr/lib64/openmpi) diff --git a/Docker/docker.md b/Docker/docker.md new file mode 100644 index 00000000000..8ef9f38edb3 --- /dev/null +++ b/Docker/docker.md @@ -0,0 +1,3 @@ +# Docker Containers {#docker} + +- [LOFAR Documentation Docker](@ref docker_lofar_documentation) diff --git a/Docker/lofar-documentation/Dockerfile b/Docker/lofar-documentation/Dockerfile new file mode 100644 index 00000000000..04f65959877 --- /dev/null +++ b/Docker/lofar-documentation/Dockerfile @@ -0,0 +1,265 @@ +FROM centos:7 +MAINTAINER "Ruud Beukema" <beukema@astron.nl> + +# ------------------------------------------------------------------------------------- +# Install set of core repositories and tools +# maybe add: rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL xxxxx? + +RUN yum -y update && \ + yum -y install \ + epel-release \ + wget && \ + yum clean all + +# ------------------------------------------------------------------------------------- +# Download source code of 3rd party software projects to /opt/downloads first, so that +# that doesn't need to be repeated when we're iteratively improving the docker + +RUN mkdir -p /opt/downloads && \ + cd /opt/downloads && \ + \ + wget -O unittest-cpp-1.6.1.tar.gz https://github.com/unittest-cpp/unittest-cpp/archive/v1.6.1.tar.gz && \ + wget -O blitz-0.10.tar.gz http://downloads.sourceforge.net/project/blitz/blitz/Blitz%2B%2B%200.10/blitz-0.10.tar.gz && \ + wget -O casacore-2.1.0.tar.gz https://github.com/casacore/casacore/archive/v2.1.0.tar.gz && \ + wget -O casarest-1.4.2.tar.gz https://github.com/casacore/casarest/archive/v1.4.2.tar.gz && \ + wget -O aoflagger-2.9.0.tar.bz2 https://sourceforge.net/projects/aoflagger/files/aoflagger-2.9.0/aoflagger-2.9.0.tar.bz2/download && \ + wget -O PyBDSF-1.8.9.tar.gz https://github.com/lofar-astron/PyBDSF/archive/v1.8.9.tar.gz && \ + wget -O DAL-master.tar.gz https://github.com/nextgen-astrodata/DAL/archive/master.tar.gz && \ + wget -O WSRT_Measures.ztar --ftp-user=anonymous ftp://ftp.astron.nl/outgoing/Measures/WSRT_Measures.ztar && \ + wget -O cuda.rpm https://developer.nvidia.com/compute/cuda/8.0/Prod2/local_installers/cuda-repo-rhel7-8-0-local-ga2-8.0.61-1.x86_64-rpm && \ + wget -O plantuml.jar https://sourceforge.net/projects/plantuml/files/plantuml.jar/download && \ + wget -O doxygen-1.8.11.tar.gz https://sourceforge.net/projects/doxygen/files/rel-1.8.11/doxygen-1.8.11.src.tar.gz/download + +# ------------------------------------------------------------------------------------- +# Copy in the WinCC_OA packages +COPY WinCC_OA/* /opt/downloads/ + +# ------------------------------------------------------------------------------------- +# Install yum packages + +RUN rpm --import https://dev.monetdb.org/downloads/MonetDB-GPG-KEY && \ + yum install -y https://dev.monetdb.org/downloads/epel/MonetDB-release-epel.noarch.rpm && \ + \ + yum install -y --nogpgcheck /opt/downloads/WinCC_OA_3.14-base-rhel-0-4.x86_64.rpm && \ + yum install -y --nogpgcheck /opt/downloads/WinCC_OA_3.14-applications-rhel-0-4.x86_64.rpm && \ + yum install -y --nogpgcheck /opt/downloads/WinCC_OA_3.14-help-en-rhel-0-4.x86_64.rpm && \ + yum install -y --nogpgcheck /opt/downloads/WinCC_OA_3.14-specialfunctions-rhel-0-4.x86_64.rpm && \ + \ + yum install -y \ + atop \ + autoconf \ + autogen \ + armadillo-devel \ + bison \ + bison \ + blas \ + blas-devel \ + boost \ + boost-devel \ + boost-python \ + bzip2 \ + cfitsio \ + cfitsio-devel \ + cmake \ + cmake-gui \ + dkms \ + docker \ + dvips \ + fabric \ + fftw \ + fftw-devel \ + flex \ + gcc-c++ \ + gcc-gfortran \ + gettext \ + ghostscript \ + git \ + graphviz \ + grub2 \ + gs \ + gsl-devel \ + gtkmm24-devel \ + gtkmm30-devel \ + hdf5 \ + hdf5-devel \ + hdparm \ + java-1.8.0-openjdk-devel \ + kernel-devel \ + kernel-headers \ + lapack \ + lapack-devel \ + libpng-devel \ + libpqxx-devel \ + libvdpau-devel \ + libxml++-devel \ + log4cplus-devel \ + make \ + mariadb \ + mariadb-server \ + mpich \ + mpich-3.0-devel \ + mysql-connector-python \ + nano \ + ncurses \ + ncurses-devel \ + ntp \ + numpy \ + numpy-f2py \ + numactl-devel \ + openblas-devel \ + opencl-headers \ + openmpi \ + openmpi-devel \ + postfix \ + pyfits \ + python2-mock \ + python-devel \ + python-ldap \ + python-lxml \ + python-matplotlib \ + python-pip \ + python-psycopg2 \ + python-qpid \ + python-sphinx \ + python-testing.postgresql \ + qpid-cpp-server \ + qpid-cpp-server-linearstore \ + qpid-cpp-client \ + qpid-tools \ + qpid-cpp-client-devel \ + qt-devel \ + readline \ + readline-devel \ + scipy \ + swig \ + texlive-collection-latexrecommended \ + valgrind-devel \ + wcslib \ + wcslib-devel \ + xterm \ + ypbind \ + yp-tools \ + zabbix22-agent && \ + \ + yum clean all + +# ------------------------------------------------------------------------------------- +# Install Python packages through (the latest) pip + +RUN pip install --upgrade pip && \ + pip --no-cache-dir install \ + django \ + djangorestframework \ + djangorestframework-xml \ + doxypypy \ + pymonetdb \ + python-monetdb \ + testing.mysqld \ + xmljson \ + xmlrunner + +# ------------------------------------------------------------------------------------- +# Download, Extract, build and install the downloaded 3rd party dependencies + +RUN tar -xzvf /opt/downloads/unittest-cpp-1.6.1.tar.gz -C /opt && \ + cd /opt/unittest-cpp-1.6.1 && \ + cmake . && \ + make -j4 && \ + make install && \ + \ + tar xzvf /opt/downloads/blitz-0.10.tar.gz -C /opt && \ + cd /opt/blitz-0.10 && \ + ./configure && \ + make lib install && \ + \ + mkdir -p /usr/share/casacore/data && \ + tar -xzf /opt/downloads/WSRT_Measures.ztar -C /usr/share/casacore/data && \ + \ + mkdir -p /opt/casacore-2.1.0/build && \ + tar -xzf /opt/downloads/casacore-2.1.0.tar.gz -C /opt/casacore-2.1.0 && \ + cd /opt/casacore-2.1.0/build && \ + cmake \ + -DDATA_DIR=/usr/share/casacore/data \ + -DUSE_FFTW3=ON \ + -DBUILD_PYTHON=ON \ + -DUSE_THREADS=ON \ + -DCXX11=ON \ + -DUSE_OPENMP=ON \ + -DCMAKE_INSTALL_PREFIX=/opt/casacore-2.1.0 \ + -DUSE_HDF5=ON \ + ../casacore-2.1.0 && \ + make -j4 && \ + make install && \ + ln -s /opt/casacore-2.1.0 /opt/casacore && \ + \ + mkdir -p /opt/casarest-1.4.2/build && \ + tar -xzf /opt/downloads/casarest-1.4.2.tar.gz -C /opt/casarest-1.4.2 && \ + cd /opt/casarest-1.4.2/build && \ + cmake \ + -DDATA_DIR=/usr/share/casacore/data \ + -DUSE_FFTW3=ON \ + -DBUILD_PYTHON=ON \ + -DUSE_THREADS=ON \ + -DCXX11=ON \ + -DCMAKE_INSTALL_PREFIX=/opt/casarest-1.4.2 \ + -DCASACORE_ROOT_DIR=/opt/casacore \ + -DCFITSIO_INCLUDE_DIR=/usr/include/cfitsio \ + ../casarest-1.4.2 && \ + make -j4 && \ + make install && \ + ln -s /opt/casarest-1.4.2 /opt/casarest && \ + \ + mkdir -p /opt/aoflagger-2.9.0/build && \ + tar -xjf /opt/downloads/aoflagger-2.9.0.tar.bz2 -C /opt/aoflagger-2.9.0 && \ + cd /opt/aoflagger-2.9.0/build && \ + cmake \ + -DCASACORE_ROOT_DIR=/opt/casacore \ + -DCMAKE_PREFIX_PATH=/opt/casacore/builds/casacore-2.3.0/build/gnucxx11_opt \ + -DCMAKE_INSTALL_PREFIX=./ \ + ../aoflagger-2.9.0 && \ + make -j4 && \ + make install && \ + \ + mkdir -p /opt/pybdsf-1.8.9/PyBDSF-1.8.9/lib64/python2.7/site-packages && \ + tar -xzf /opt/downloads/PyBDSF-1.8.9.tar.gz -C /opt/pybdsf-1.8.9 && \ + export PYTHONPATH=/opt/pybdsf-1.8.9/PyBDSF-1.8.9/lib64/python2.7/site-packages:$PYTHONPATH && \ + cd /opt/pybdsf-1.8.9/PyBDSF-1.8.9 && \ + python setup.py install --prefix=/opt/pybdsf-1.8.9/PyBDSF-1.8.9 && \ + \ + mkdir -p /opt/dal/DAL-master/build && \ + tar -xzf /opt/downloads/DAL-master.tar.gz -C /opt/dal && \ + cd /opt/dal/DAL-master/build && \ + cmake ../ -DCMAKE_INSTALL_PREFIX=`pwd` && \ + make -j4 && \ + make install && \ + \ + rpm -i /opt/downloads/cuda.rpm && \ + yum install -y cuda && \ + \ + mkdir /opt/plantuml && \ + mv /opt/downloads/plantuml.jar /opt/plantuml && \ + \ + tar -xzf /opt/downloads/doxygen-1.8.11.tar.gz -C /opt/downloads && \ + mkdir -p /opt/downloads/doxygen-1.8.11/build && \ + cd /opt/downloads/doxygen-1.8.11/build && \ + cmake -G "Unix Makefiles" .. && \ + make -j4 && \ + make install && \ + \ + rm -rf /opt/downloads + +# Paths that need to be permanently added to some environment variable should be set using the +# Docker ENV command +ENV PYTHONPATH /opt/pybdsf-1.8.9/PyBDSF-1.8.9/lib64/python2.7/site-packages:$PYTHONPATH +ENV PATH /usr/local/cuda-8.0/bin:$PATH +ENV DOX_SERVER_BASED_SEARCH NO +ENV DOX_REVISION_SLUG "Unknown revision" + +# ------------------------------------------------------------------------------------- +# Make the documentation build script accessible within Docker +COPY build_documentation.sh /usr/bin + +# ------------------------------------------------------------------------------------- +# Generate documentation +ENTRYPOINT ["build_documentation.sh"] +#CMD ["/bin/bash"] diff --git a/Docker/lofar-documentation/build_documentation.sh b/Docker/lofar-documentation/build_documentation.sh new file mode 100755 index 00000000000..236351983f8 --- /dev/null +++ b/Docker/lofar-documentation/build_documentation.sh @@ -0,0 +1,51 @@ +#!/bin/bash +# +# Automates steps to configure and build the LOFAR documentation from within the Docker container +# + +LOFAR_BRANCH_MOUNT_DIR=/opt/LOFAR + +# We need to have some LOFAR branch mounted, otherwise quit +if [ ! -d "$LOFAR_BRANCH_MOUNT_DIR" ]; then + echo "No LOFAR branch/tag/trunk mounted at: $LOFAR_BRANCH_MOUNT_DIR" + echo "" + echo "Please run the docker container with argument:" + echo "-v [PATH_TO_LOFAR_BRANCH_ON_HOST]:/opt/LOFAR/" + echo "" + echo "Exiting now" + exit 1 +fi + +# Suggest user to make use of the predefined CMake settings based on the hostname passed to the container +HOSTNAME=`hostname` +if [ "lofardocker" != "$HOSTNAME" ]; then + echo "In order to use the CMake presets from the variants file 'variants.lofardocker'" + echo "run the docker container with the hostname argument:" + echo "-h lofardocker" + echo "" +fi + +echo "Cleaning up files and folders from any previous built" +rm -rf "$LOFAR_BRANCH_MOUNT_DIR/build/gnucxx11_opt" + +echo "Creating the build directory" +mkdir -p "$LOFAR_BRANCH_MOUNT_DIR/build/gnucxx11_opt" + +echo "Advancing to the build directory" +cd "$LOFAR_BRANCH_MOUNT_DIR/build/gnucxx11_opt" + +echo "Instructing CMake to prepare for building documentation using:" +echo "DOX_SERVER_BASED_SEARCH=$DOX_SERVER_BASED_SEARCH" +echo "DOX_REVISION_SLUG=$DOX_REVISION_SLUG" +cmake -DBUILD_DOCUMENTATION=ON ../.. +# Do this twice to get rid of CMakeCache error generated only the first run +cmake -DBUILD_DOCUMENTATION=ON ../.. + +echo "Instructing CMake to build the documentation" +make doc + +# Since we're running as root in the Docker container all created stuff ends up belonging to root. Allow others to do +# whatever they want with it as well. +echo "Setting permission on the generated content" +chown -R 777 "$LOFAR_BRANCH_MOUNT_DIR/build" + diff --git a/Docker/lofar-documentation/lofar_documentation.md b/Docker/lofar-documentation/lofar_documentation.md new file mode 100644 index 00000000000..5272825febe --- /dev/null +++ b/Docker/lofar-documentation/lofar_documentation.md @@ -0,0 +1,118 @@ +# LOFAR Documentation Docker Image {#docker_lofar_documentation} + +## General + +### Description + +This docker container provides the setup and dependencies necessary to automate the generation of documentation from +source code using Doxygen. It is intended to be used to automate the generation of LOFAR documentation - e.g. as part +of a Jenkins job. + + +### Author/Owner + +The initial Dockerfile was created by Ruud Beukema <mailto:beukema@astron.nl>. + + +### Overview + +This docker container is not part of the production system, hence it isn't part of the LOFAR architecture. So, no +diagrams here. + +- - - + +## Development + + +### Analyses + +This LOFAR Documentation Docker Image is the result of a series of meetings and dicussions about how to make it easier +to create and keep up-to-date LOFAR documentation, such that it is actually done. Doxygen is used to generate the +documentation in an automated way from both code and static documentation files (with Markdown syntax). + + +### Design + +The Dockerfile is setup such that it downloads all external dependencies that are not available in the package +repositories first, followed by packages from the package repository. This is to avoid having to perform these download +steps for every change in the Dockerfile that is related to e.g. the building process. + + +### Source Code + +The Docker file and its dependencies (if their license allows it) can be found in SVN folder: + + Docker/lofar-documentation + + +### Known issues + +#### Bootstrap Theme + +As of Doxygen version 1.8.12 Doxygen uses smartmenu's which breaks our Bootstrap Theme (see [this issue]). Therefore +use Doxygen version 1.8.11 for generating the HTML output (or make the theme work with the newer Doxygen +version). + +[this issue]: https://github.com/Velron/doxygen-bootstrapped/issues/23 "Bootstrap Theme issue" + + +#### To Do's + +@todo Move *package.dox* files to their respective */doc* directory throughout the LOFAR source tree. +@todo Complete/Correct the LOFAR Software Decomposition (the <a href="modules.html">Modules</a> section) by adding *package.dox* files in the appropriate locations +@todo Complete/Add documentation to the LOFAR source tree, copying as much existing documentation from the wiki as possible. + + +### Testing + + +### Build & Deploy + +For building a docker image from the directory where Dockerfile resides (together with the WinCC_OA folder, read below) +execute: + + + docker build -t lofardocker . + + +## Usage + +This docker container contains no LOFAR source code trunk/branch by itself. One should either check it out from within +the container or inject (mount) a host folder in the image e.g: + + + -v [LOFAR branch on host]:/opt/LOFAR/. + + +The Dockerfile expects that the WinCC_OA packages reside in a WinCC_OA/ folder relative to the Dockerfile (so, in its +build context). + +A hostname should be used by the container which CMake can use to lookup the corresponding variants file (named +"Cmake/variants/variants.lofar-documentation"). This is done by running the container with the argument: + + + -h lofar-documentation + + +The environment variables listed below (with their default) value can be used to manipulate Doxygen's documentation +generation. + + + DOX_REVISION_SLUG="Unknown Revision" + DOX_SERVER_BASED_SEARCH=NO + + +They can be changed by running the container with arguments: + + + -e DOX_REVISION_SLUG="Release 2.21 -e DOX_SERVER_BASED_SEARCH=YES" + + +Complete usage example: + + docker run \ + -h lofar-documentation \ + -e DOX_REVISION_SLUG="Release 2.21 \ + -e DOX_SERVER_BASED_SEARCH=YES" \ + -v ~/svn/LOFAR/trunk:/opt/LOFAR/ \ + -lofardocker:latest diff --git a/LCS/ACC/ALC/package.dox b/LCS/ACC/ALC/package.dox deleted file mode 100644 index da3215e7303..00000000000 --- a/LCS/ACC/ALC/package.dox +++ /dev/null @@ -1,9 +0,0 @@ -// -// -// \ingroup ACC -// \defgroup ALC Application Lifecycle Control (ALC) -// -// Library that contains the protocol for controlling an ACC application. -// -// - diff --git a/LCS/ACC/PLC/package.dox b/LCS/ACC/PLC/package.dox deleted file mode 100644 index 2953b124c8a..00000000000 --- a/LCS/ACC/PLC/package.dox +++ /dev/null @@ -1,7 +0,0 @@ -// -// \ingroup ACC -// \defgroup PLC Proces Lifecycle Control (PLC) -// -// Library that supports the use of the Process Control protocol. -// - diff --git a/LCS/ACC/package.dox b/LCS/ACC/doc/package.dox similarity index 100% rename from LCS/ACC/package.dox rename to LCS/ACC/doc/package.dox diff --git a/LCS/AMC/package.dox b/LCS/AMC/package.dox deleted file mode 100644 index e6bc5310073..00000000000 --- a/LCS/AMC/package.dox +++ /dev/null @@ -1,34 +0,0 @@ -// \ingroup LCS -// \defgroup AMC Astronomical Measures Conversions (AMC) -// -// The purpose of this package is to provide a means of converting -// astronomical measures. For example, to convert a sky coordinate from J2000 -// to azimuth/elevation. -// -// The package is split into two sub-packages: AMCBase and AMCImpl. -// -// \image html amc_package.png "Package view of the AMC sub-packages" -// -// The relation between the most important classes of these sub-packages is -// shown in the class diagram below. -// -// \image html amc_main_classes.png "Class diagram showing the most important classes of the AMC sub-packages" - -// @{ - -// \defgroup AMCBase AMCBase -// -// AMCBase contains the interface definition of the conversion methods and -// some basic classes that define sky coordinates, earth coordinates -// (position on earth) and time. Furthermore, it contains the implementation -// of the client side of the AMC client/server, plus a number of classes -// needed for data transfer between client and server. - -// \defgroup AMCImpl AMCImpl -// -// AMCImpl contains the implementation of the conversion methods. -// Furthermore it contains the implementation of the server side of the AMC -// client/server. - -// @} - diff --git a/LCS/ApplCommon/package.dox b/LCS/ApplCommon/package.dox deleted file mode 100644 index f800b014aae..00000000000 --- a/LCS/ApplCommon/package.dox +++ /dev/null @@ -1,11 +0,0 @@ -// \ingroup LCS -// \defgroup ApplCommon ApplCommon -// -// The ApplCommon package contains pieces of software that are used -// by the different LOFAR applications. - -/// @{ - -/// \defgroup DataConvert Data conversion functions - -/// @} diff --git a/LCS/Blob/package.dox b/LCS/Blob/package.dox deleted file mode 100644 index 8143469366c..00000000000 --- a/LCS/Blob/package.dox +++ /dev/null @@ -1,23 +0,0 @@ -// \ingroup LCS -// \defgroup Blob Binary Large Objects (Blob) -// -// Classes for serializing one or more objects into a blob and -// de-serializing the blob to objects. -// It also has classes to hold a map of heterogeneous values. This -// includes a parser to convert text to such a map. - - -// @{ - -// \defgroup KeyValue Handling and parsing key-value pairs -// Class to hold a map of heterogeneous key-value pairs. -// The value can have any basic data type (including complex and -// string) and vectors of them. -// Furthermore the value can be a map itself. -// -// A parser exists to convert a text file to such a map object. - - -// \defgroup BlobArray Global BlobArray functions - -// @} diff --git a/LCS/Common/package.dox b/LCS/Common/package.dox deleted file mode 100644 index ee4626b453b..00000000000 --- a/LCS/Common/package.dox +++ /dev/null @@ -1,19 +0,0 @@ -// \ingroup LCS -// \defgroup Common Common -// -// The Common package contains pieces of software that are very -// reusable. Hence the name "common" - -// @{ - -// \defgroup DataConvert Data conversion functions - -// \defgroup LofarLogger Logging facility - -// \defgroup Socket Sockets - -// \defgroup shmem Shared Memory - -// \defgroup TypeNames Typename functions - -// @} diff --git a/LCS/LACE/package.dox b/LCS/LACE/package.dox deleted file mode 100644 index c48f1dc1842..00000000000 --- a/LCS/LACE/package.dox +++ /dev/null @@ -1,4 +0,0 @@ -// \ingroup LCS -// \defgroup LACE LACE -// -// ... description ... diff --git a/LCS/Messaging/package.dox b/LCS/Messaging/package.dox deleted file mode 100644 index e9765773487..00000000000 --- a/LCS/Messaging/package.dox +++ /dev/null @@ -1,9 +0,0 @@ -/** - -@ingroup LOFAR -@defgroup Messaging Messaging - -The Messaging package contains software that provides a messaging middle-ware -layer based in Apache Qpid. - -*/ diff --git a/LCS/Stream/package.dox b/LCS/Stream/doc/package.dox similarity index 100% rename from LCS/Stream/package.dox rename to LCS/Stream/doc/package.dox diff --git a/LCS/Tools/package.dox b/LCS/Tools/package.dox deleted file mode 100644 index 61dedcd5b9d..00000000000 --- a/LCS/Tools/package.dox +++ /dev/null @@ -1,7 +0,0 @@ -// \ingroup LCS -// \defgroup Tools Tools -// -// This package provides basic tools needed for building %LOFAR software and/or -// documentation. An exmamples of such a tool is pkgdep, which determines the -// dependencies between %LOFAR software packages. - diff --git a/LCS/Tools/src/makePackage.py b/LCS/Tools/src/makePackage.py index ca4ae402e2f..b89b26966e6 100755 --- a/LCS/Tools/src/makePackage.py +++ b/LCS/Tools/src/makePackage.py @@ -66,7 +66,8 @@ def createPackageDoc(packageName,dirLevel): if os.path.isfile(packageName): return else: - writeFile=openFile(packageName+"/package.dox","w") + createDir("doc") + writeFile=openFile(packageName+"/doc/package.dox","w") if dirLevel>0: baseGroup=os.path.basename(os.environ["PWD"]) writeFile.write("// \ingroup "+baseGroup+"\n") diff --git a/LCS/Transport/package.dox b/LCS/Transport/package.dox deleted file mode 100644 index ffa8cc08914..00000000000 --- a/LCS/Transport/package.dox +++ /dev/null @@ -1,5 +0,0 @@ -// \ingroup LCS -// \defgroup Transport Transport -// -// The Transport package implements basic data transport functionality, mostly -// oriented towards point-to-point connections. diff --git a/LCS/package.dox b/LCS/doc/package.dox similarity index 92% rename from LCS/package.dox rename to LCS/doc/package.dox index 58371ace9af..c6526c1f7e2 100644 --- a/LCS/package.dox +++ b/LCS/doc/package.dox @@ -1,6 +1,6 @@ /** -\ingroup LOFAR +\ingroup Packages \defgroup LCS LOFAR Common Software (LCS) %LOFAR Common Software (LCS) contains the software packages that form the core diff --git a/LCS/pyparameterset/package.dox b/LCS/pyparameterset/package.dox deleted file mode 100644 index 87634273331..00000000000 --- a/LCS/pyparameterset/package.dox +++ /dev/null @@ -1,3 +0,0 @@ -// \ingroup LCS -// \defgroup pyparameterset pyparameterset -// Python binding to ParameterSet class. diff --git a/LCS/pytools/package.dox b/LCS/pytools/package.dox deleted file mode 100644 index 52df9730682..00000000000 --- a/LCS/pytools/package.dox +++ /dev/null @@ -1,3 +0,0 @@ -// \ingroup LCS -// \defgroup pytools pytools -// Standard files needed for Python code and bindings to C++ classes. diff --git a/LTA/LTAIngest/doc/README.txt b/LTA/LTAIngest/doc/README.txt deleted file mode 100644 index 2cb94f95400..00000000000 --- a/LTA/LTAIngest/doc/README.txt +++ /dev/null @@ -1 +0,0 @@ -Ingest documentation is on the wiki at: http://www.lofar.org/wiki/doku.php?id=lta:ingest_services diff --git a/LTA/LTAIngest/doc/ingest_sequence_diagram.png b/LTA/LTAIngest/doc/ingest_sequence_diagram.png deleted file mode 100644 index c1a6b24d5dec6c9b14c7c3fea1ba66ae009e3238..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 108665 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%0DZ7!_-m2>IzvNEgaoxyGF6)^S`q8JrCj4ZK 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 K&t;ucLK6VSVFd;N diff --git a/LTA/LTAIngest/doc/ingest_sequence_diagram.puml b/LTA/LTAIngest/doc/ingest_sequence_diagram.puml deleted file mode 100644 index cf68c4e2ad2..00000000000 --- a/LTA/LTAIngest/doc/ingest_sequence_diagram.puml +++ /dev/null @@ -1,108 +0,0 @@ -@startuml - -title Ingest job sequence diagram - -boundary MoM -control IngestMomAdapter as ima -participant lofar.lta.ingest.jobs as jq -control IngestJobManagementServer as ijms -participant lofar.lta.ingest.jobs_for_transfer as jqft -participant lofar.lta.ingest.notification.jobmanager as ntfy_ijms -participant lofar.lta.ingest.notification.momingestadapter as ntfy_ima -participant lofar.lta.ingest.notification as ntfy -control IngestTransferServer as its - -note over jq -qpid queue -end note - -note over jqft -qpid queue -end note - -note over ntfy_ijms -qpid queue bound to lofar.lta.ingest.notification -end note - -note over ntfy_ima -qpid queue bound to lofar.lta.ingest.notification -end note - -note over ntfy -qpid exchange -end note - -MoM -> ima : new_job -note left : via SOAP interface on http://lexar003.control.lofar:2010 -activate ima -ima -> ima : validate job -ima -> jq : submit valid job -deactivate ima - -loop - ijms -> jq : fetch job - activate jq - jq --> ijms - deactivate jq - - alt fetched job - ijms -> ijms : store new job in to_do list - end - - ijms -> jqft : peek queue empty? - activate jqft - jqft --> ijms - deactivate jqft - - alt queue empty - ijms -> ijms : determine next job\n(based on priority, age, retry_count, etc) - - alt next job available - ijms -> jqft : produce next job - end - end - - ijms -> ntfy_ijms : fetch job status notification - activate ntfy_ijms - ntfy_ijms --> ijms - deactivate ntfy_ijms - - alt fetched job status notification - ijms -> ijms : update job status\n(persist also to disk) - alt all jobs in job_group done? - ijms -> ijms : send email - end - end -end - -loop - its -> jqft : fetch job - activate jqft - jqft --> its - deactivate jqft - - alt fetched job - its -> its : run ingestpipeline\nper job in thread - activate its - - its -> ntfy : send job status notification - note left : status messages:\nJobStarted/JobProgress/JobFinished/JobTransferFailed - ntfy -> ntfy_ijms : job status notification - ntfy -> ntfy_ima : job status notification - - deactivate its - end -end - -loop - ima -> ntfy_ima : fetch job status notification - activate ntfy_ima - ntfy_ima --> ima - deactivate ntfy_ima - - alt fetched job status notification - ima -> MoM : update status - note left : via https://lcs029.control.lofar:8443/ - end -end -@enduml diff --git a/LTA/LTAIngest/doc/lta_ingest.md b/LTA/LTAIngest/doc/lta_ingest.md new file mode 100644 index 00000000000..6059595049b --- /dev/null +++ b/LTA/LTAIngest/doc/lta_ingest.md @@ -0,0 +1,266 @@ +# LTA INGEST {#lta_ingest} + +## General + +### Description + +The LTA ingest services provide the functionality for transferring the ready measurement outputs (data products) to one +of the available Long Term Archives. + +### Authors/Owners + +- Jorrit Schaap <mailto:schaap@astron.nl> + +### Overview + +There are 4 ingest services which run individually, but work together via qpid queues and exchanges to transfer the +export jobs. +- ingestmomadapter: + - this service listens on a SOAP interface for new export jobs coming from MoM, and puts the jobs on the ingest job + queue where they are picked up by the ingestjobmanagementserver. + - it updates MoM dataproduct export statuses for each received started/failed/finished notification from the + ingesttransferserver. +- ingestjobmanagementserver: + - handles the job queue (based on priority, retry_count, age, source host load etc) + - dispatches new jobs to the ingesttransferserver. + - handles started/failed/finished notification from the ingesttransferserver (by updating the job state and adjusting + the job queue) + - sends email once a export job is done +- ingesttransferserver: runs an ingestpipeline in a seperate thread per job. Sends notifications on job + start/progress/failed/finished. +- ingestwebserver: hosts the [ingest queue website](http://10.178.1.3:9632/index.html). Gets it's info from the + ingestjobmanagementserver. + + +@startuml + +title Ingest job sequence diagram + +boundary MoM +control IngestMomAdapter as ima +participant lofar.lta.ingest.jobs as jq +control IngestJobManagementServer as ijms +participant lofar.lta.ingest.jobs_for_transfer as jqft +participant lofar.lta.ingest.notification.jobmanager as ntfy_ijms +participant lofar.lta.ingest.notification.momingestadapter as ntfy_ima +participant lofar.lta.ingest.notification as ntfy +control IngestTransferServer as its + +note over jq +qpid queue +end note + +note over jqft +qpid queue +end note + +note over ntfy_ijms +qpid queue bound to lofar.lta.ingest.notification +end note + +note over ntfy_ima +qpid queue bound to lofar.lta.ingest.notification +end note + +note over ntfy +qpid exchange +end note + +MoM -> ima : new_job +note left : via SOAP interface on http://lexar003.control.lofar:2010 +activate ima +ima -> ima : validate job +ima -> jq : submit valid job +deactivate ima + +loop + ijms -> jq : fetch job + activate jq + jq --> ijms + deactivate jq + + alt fetched job + ijms -> ijms : store new job in to_do list + end + + ijms -> jqft : peek queue empty? + activate jqft + jqft --> ijms + deactivate jqft + + alt queue empty + ijms -> ijms : determine next job\n(based on priority, age, retry_count, etc) + + alt next job available + ijms -> jqft : produce next job + end + end + + ijms -> ntfy_ijms : fetch job status notification + activate ntfy_ijms + ntfy_ijms --> ijms + deactivate ntfy_ijms + + alt fetched job status notification + ijms -> ijms : update job status\n(persist also to disk) + alt all jobs in job_group done? + ijms -> ijms : send email + end + end +end + +loop + its -> jqft : fetch job + activate jqft + jqft --> its + deactivate jqft + + alt fetched job + its -> its : run ingestpipeline\nper job in thread + activate its + + its -> ntfy : send job status notification + note left : status messages:\nJobStarted/JobProgress/JobFinished/JobTransferFailed + ntfy -> ntfy_ijms : job status notification + ntfy -> ntfy_ima : job status notification + + deactivate its + end +end + +loop + ima -> ntfy_ima : fetch job status notification + activate ntfy_ima + ntfy_ima --> ima + deactivate ntfy_ima + + alt fetched job status notification + ima -> MoM : update status + note left : via https://lcs029.control.lofar:8443/ + end +end +@enduml + +- - - + +## DEVELOPMENT + +### Analyses +*Add non-technical information and functional considerations here, like user requirements and links to minutes of +meetings with stakeholders.* + +### Design +*Add technical considerations and design choices here* + +### Source Code +- [LTA Ingest in SVN](https://svn.astron.nl/LOFAR/trunk/LTA/LTAIngest/) +- [LTA Ingest Source Code Documentation](@ref LTA) + +### Testing + +#### Unit Testing + +Unit tests for *ingestjobmanagementserver* are available in: + /LTA/LTAIngest/LTAIngestServer/LTAIngestAdminServer + +Unit tests for *ingesttransferserver* are available in: + /LTA/LTAIngest/LTAIngestServer/LTAIngestTransferServer + +These unit tests can be run indivually with: + ctest -R LTAIngestServer + +Note that one has to (all steps except the *make install* step) the package *LTAIngest* prior to running the unit +tests (see below). + +#### Integration Testing + +- *How do you run unit tests?* +- *How do you run integration tests?* +- *Add a link to Jenkins jobs (if available)* + +#### Build & Deploy + +##### Build locally + + svn co https://svn.astron.nl/LOFAR/<some_branch_or_trunk> <my_source_dir> + cd <my_source_dir> + mkdir -p build/gnu_debug + cd build/gnu_debug + cmake -DBUILD_PACKAGES=LTAIngest -DCMAKE_INSTALL_PREFIX=/opt/lofar/ ../.. + cd ../.. + make + make install + +##### Build using Jenkins + +1 Open [the generic CentOS7 LOFAR SubSystems Jenkins project](https://support.astron.nl/jenkins/view/LOFAR%20Subsystems/view/Subsystems%20builds/job/Subsystems_CentOS7/build?delay=0sec) +2 Select buildhost (defaults to correct buildhostcentos7) +3 Select the branch you want to build: + - For a release/rollout: Select a the latest tag + - For a (test) build of a branch: select any branch you like (for example the one you are working on) +4 Set the MINOR_RELEASE_NR (should be equal to tag minor version number for release/rollout build) +5 Select SubSystem: LTAIngest +6 Click "Build" button, wait, build should finish successfully. + +##### Deploy + +Please also read the Ingest part of the common [LOFAR Release Procedure](https://www.astron.nl/lofarwiki/doku.php?id=engineering:software:releaseprocedure#update_ingest) + +The procedure described below can be used for both the production environment (lexar003) and +test environment (lexar004): + + ssh lofarsys@lexar003 + supervisorctl -p 123 stop all + MAC_install -b LOFAR-Release-<version_number> + supervisorctl -p 123 start all + +- - - + +## OPERATIONS + +### Configuration +- *Where is the configuration file?* +- *What are the configuration options?* + +### Log Files +- *Where are the log files?* + +### Runtime +- *Where does it run? (which user@machine)* +- *How do I run it? (user documentation? examples? commandline parameters?)* +- *Other considerations? (what happens elsewhere when I start or stop it?)* + +### Interfaces (API) +- *Describe interfaces to other applications (REST API? http requests? Messagebus?)* +- *Other communication (user? import/export?)* + +### Files/Databases +- *Which databases are used?* +- *Which files are used?* + +### Dependencies +- *To/from other applications?* +- *Files?* +- *Network locations?* +- *Other?* + +### Security +- *Special privileges needed?* +- *User login?* +- *Certificates needed?* +- *Other considerations?* + +- - - + +## ADDITIONAL INFORMATION + +### User Documentation + +*e.g. Please refer to URL X for the User Documentation* + +### Operations Documentation + +*e.g. Please refer to URL X for Operations Documentation* + + + diff --git a/LTA/doc/package.dox b/LTA/doc/package.dox new file mode 100644 index 00000000000..226544f3021 --- /dev/null +++ b/LTA/doc/package.dox @@ -0,0 +1,11 @@ +/** + +\ingroup Packages +\defgroup LTA LTA + +The LTA package contains the LOFAR Long Term Archive software. It is subdivided in the following components: +- \ref lta_ingest "LTA Ingest Service" +- \ref lta_storage_overview "LTA Storage Overview" + +*/ + diff --git a/LTA/ltastorageoverview/doc/lta_storage_overview.md b/LTA/ltastorageoverview/doc/lta_storage_overview.md new file mode 100644 index 00000000000..260d6f5f6ea --- /dev/null +++ b/LTA/ltastorageoverview/doc/lta_storage_overview.md @@ -0,0 +1,3 @@ +# LTA Storage Overview {#lta_storage_overview} + +... diff --git a/MAC/APL/APLCommon/package.dox b/MAC/APL/APLCommon/doc/package.dox similarity index 100% rename from MAC/APL/APLCommon/package.dox rename to MAC/APL/APLCommon/doc/package.dox diff --git a/MAC/APL/APLCommon/src/swlevel b/MAC/APL/APLCommon/src/swlevel index 10d5baca665..3906adf6881 100755 --- a/MAC/APL/APLCommon/src/swlevel +++ b/MAC/APL/APLCommon/src/swlevel @@ -376,10 +376,10 @@ stop_prog() for pid in `$PIDOF -x ${prog}` do - if [ "$user" == "user0" -o "$user" == "lofarsys" ]; then - sudo kill $pid 1>/dev/null 2>&1 - sleep 0.25 - fi + if [ "$user" == "user0" -o "$user" == "lofarsys" ]; then + sudo kill $pid 1>/dev/null 2>&1 + sleep 0.25 + fi done # if user0 or lofarsys, try hard kill as root @@ -388,7 +388,7 @@ stop_prog() if [ "$user" == "user0" -o "$user" == "lofarsys" ]; then sudo kill -9 $pid 1>/dev/null 2>&1 sleep 0.25 - fi + fi done # if still alive, write a message diff --git a/MAC/APL/CEPCU/package.dox b/MAC/APL/CEPCU/doc/package.dox similarity index 100% rename from MAC/APL/CEPCU/package.dox rename to MAC/APL/CEPCU/doc/package.dox diff --git a/MAC/APL/CUDaemons/package.dox b/MAC/APL/CUDaemons/doc/package.dox similarity index 100% rename from MAC/APL/CUDaemons/package.dox rename to MAC/APL/CUDaemons/doc/package.dox diff --git a/MAC/APL/CURTDBDaemons/package.dox b/MAC/APL/CURTDBDaemons/doc/package.dox similarity index 100% rename from MAC/APL/CURTDBDaemons/package.dox rename to MAC/APL/CURTDBDaemons/doc/package.dox diff --git a/MAC/APL/MainCU/package.dox b/MAC/APL/MainCU/doc/package.dox similarity index 100% rename from MAC/APL/MainCU/package.dox rename to MAC/APL/MainCU/doc/package.dox diff --git a/MAC/APL/PAC/CAL_Protocol/package.dox b/MAC/APL/PAC/CAL_Protocol/doc/package.dox similarity index 100% rename from MAC/APL/PAC/CAL_Protocol/package.dox rename to MAC/APL/PAC/CAL_Protocol/doc/package.dox diff --git a/MAC/APL/PAC/IBS_Protocol/package.dox b/MAC/APL/PAC/IBS_Protocol/doc/package.dox similarity index 100% rename from MAC/APL/PAC/IBS_Protocol/package.dox rename to MAC/APL/PAC/IBS_Protocol/doc/package.dox diff --git a/MAC/APL/PAC/LBA_Calibration/package.dox b/MAC/APL/PAC/LBA_Calibration/doc/package.dox similarity index 100% rename from MAC/APL/PAC/LBA_Calibration/package.dox rename to MAC/APL/PAC/LBA_Calibration/doc/package.dox diff --git a/MAC/APL/PAC/package.dox b/MAC/APL/PAC/doc/package.dox similarity index 100% rename from MAC/APL/PAC/package.dox rename to MAC/APL/PAC/doc/package.dox diff --git a/MAC/APL/PIC/RSP_Protocol/package.dox b/MAC/APL/PIC/RSP_Protocol/doc/package.dox similarity index 100% rename from MAC/APL/PIC/RSP_Protocol/package.dox rename to MAC/APL/PIC/RSP_Protocol/doc/package.dox diff --git a/MAC/APL/PIC/package.dox b/MAC/APL/PIC/doc/package.dox similarity index 100% rename from MAC/APL/PIC/package.dox rename to MAC/APL/PIC/doc/package.dox diff --git a/MAC/APL/RTCCommon/package.dox b/MAC/APL/RTCCommon/doc/package.dox similarity index 100% rename from MAC/APL/RTCCommon/package.dox rename to MAC/APL/RTCCommon/doc/package.dox diff --git a/MAC/APL/RTDBCommon/package.dox b/MAC/APL/RTDBCommon/doc/package.dox similarity index 100% rename from MAC/APL/RTDBCommon/package.dox rename to MAC/APL/RTDBCommon/doc/package.dox diff --git a/MAC/APL/StationCU/package.dox b/MAC/APL/StationCU/doc/package.dox similarity index 100% rename from MAC/APL/StationCU/package.dox rename to MAC/APL/StationCU/doc/package.dox diff --git a/MAC/APL/TestCtlr/package.dox b/MAC/APL/TestCtlr/doc/package.dox similarity index 100% rename from MAC/APL/TestCtlr/package.dox rename to MAC/APL/TestCtlr/doc/package.dox diff --git a/MAC/APL/VHECR/package.dox b/MAC/APL/VHECR/doc/package.dox similarity index 100% rename from MAC/APL/VHECR/package.dox rename to MAC/APL/VHECR/doc/package.dox diff --git a/MAC/APL/package.dox b/MAC/APL/doc/package.dox similarity index 100% rename from MAC/APL/package.dox rename to MAC/APL/doc/package.dox diff --git a/MAC/Deployment/data/Coordinates/make_conf_files.py b/MAC/Deployment/data/Coordinates/make_conf_files.py index e542a8aa14e..cf62d8e6c9e 100755 --- a/MAC/Deployment/data/Coordinates/make_conf_files.py +++ b/MAC/Deployment/data/Coordinates/make_conf_files.py @@ -62,7 +62,7 @@ def writeAntennaFieldHeader(station,frame): fileName = '../StaticMetaData/AntennaFields/'+ station + '-AntennaField.conf' file = open(fileName, 'w') - dataStr += '#\n' + dataStr += '#\n' dataStr += '# AntennaPositions for %s\n' %(station) dataStr += '# %s target_date = %s\n' %(str(frame), sys.argv[2]) dataStr += '# Created: %s\n' %(datetime.now().strftime("%Y-%m-%d %H:%M:%S")) diff --git a/MAC/Deployment/data/package.dox b/MAC/Deployment/data/doc/package.dox similarity index 100% rename from MAC/Deployment/data/package.dox rename to MAC/Deployment/data/doc/package.dox diff --git a/MAC/Deployment/package.dox b/MAC/Deployment/doc/package.dox similarity index 100% rename from MAC/Deployment/package.dox rename to MAC/Deployment/doc/package.dox diff --git a/MAC/GCF/PVSS/package.dox b/MAC/GCF/PVSS/doc/package.dox similarity index 100% rename from MAC/GCF/PVSS/package.dox rename to MAC/GCF/PVSS/doc/package.dox diff --git a/MAC/GCF/RTDB/package.dox b/MAC/GCF/RTDB/doc/package.dox similarity index 100% rename from MAC/GCF/RTDB/package.dox rename to MAC/GCF/RTDB/doc/package.dox diff --git a/MAC/GCF/TM/package.dox b/MAC/GCF/TM/doc/package.dox similarity index 100% rename from MAC/GCF/TM/package.dox rename to MAC/GCF/TM/doc/package.dox diff --git a/MAC/GCF/TM/include/GCF/TM/GCF_Fsm.h b/MAC/GCF/TM/include/GCF/TM/GCF_Fsm.h index 8da21157eb6..a48b4e877ac 100644 --- a/MAC/GCF/TM/include/GCF/TM/GCF_Fsm.h +++ b/MAC/GCF/TM/include/GCF/TM/GCF_Fsm.h @@ -53,9 +53,7 @@ class GCFScheduler; * arguments: a reference to the event (GCFEvent) that was received, and a * reference to the port on which it was received (GCFPortInterface). * @code - - int my_state(GCFEvent& e, GCFPortInterface& p); - + * int my_state(GCFEvent& e, GCFPortInterface& p); * @encode * A task is therefore an event driven application. In fact the programmer using * the sub-framework does not control the main loop of the application. This @@ -106,12 +104,12 @@ protected: // constructors && destructors /// send F_QUIt signal void quitFsm(); - // state transition; will be used by the MACRO TRAN see above - // sends a F_EXIT signal to the current state followed by the state transition - // and finaly sends a F_ENTRY signal to the new current state - // @param target new state - // @param from text of the current state - // @param to text of the new state + /// state transition; will be used by the MACRO TRAN see above + /// sends a F_EXIT signal to the current state followed by the state transition + /// and finaly sends a F_ENTRY signal to the new current state + /// @param target new state + /// @param from text of the current state + /// @param to text of the new state void tran (State target, const char* from, const char* to); diff --git a/MAC/GCF/package.dox b/MAC/GCF/doc/package.dox similarity index 100% rename from MAC/GCF/package.dox rename to MAC/GCF/doc/package.dox diff --git a/MAC/MACIO/package.dox b/MAC/MACIO/doc/package.dox similarity index 100% rename from MAC/MACIO/package.dox rename to MAC/MACIO/doc/package.dox diff --git a/MAC/Navigator2/panels/navigator.pnl b/MAC/Navigator2/panels/navigator.pnl index 73dea10b86f..7d01b49dfe1 100644 --- a/MAC/Navigator2/panels/navigator.pnl +++ b/MAC/Navigator2/panels/navigator.pnl @@ -244,6 +244,39 @@ LANG:1 12 PUSH_BUTTON1 "main() { navFunct_handleUndockClick(); +}" 0 + E E E +13 93 +"b_iltSwitch" +"" +1 1010.405 11 E E E 1 E 1 E N "_ButtonText" E N "_Button" E E + E E +32 0 0 0 0 0 +E E E +0 +1 +LANG:1 0 + +0 +1 +LANG:1 35 MS Shell Dlg 2,-1,11,5,75,0,0,0,0,0 +0 991 3 1062 27 + +T +1 +LANG:1 9 iltSwitch +"main() +{ + bool localmode; + g_involved_stations = makeDynString(\"\"); + + dpGet(\"MCU001:LOFAR_PIC_Europe_DE601.localMode.stationSwitch\",localmode); + localmode = !localmode; + dpSet(\"MCU001:LOFAR_PIC_Europe_DE601.localMode.stationSwitch\",localmode); + + dynAppend(g_involved_stations,\"DE601:\"); + navCtrl_handleNavigatorEvent(\"\",\"ILTSwitched\",\"GCFCWD.ctl\"); + }" 0 E E E 1 173 21 "0.0" 18 diff --git a/MAC/doc/package.dox b/MAC/doc/package.dox new file mode 100644 index 00000000000..2985b469d64 --- /dev/null +++ b/MAC/doc/package.dox @@ -0,0 +1,9 @@ +/** + +\ingroup Packages +\defgroup MAC MAC + +MAC package description + +*/ + diff --git a/RTCP/Cobalt/CoInterface/package.dox b/RTCP/Cobalt/CoInterface/doc/package.dox similarity index 100% rename from RTCP/Cobalt/CoInterface/package.dox rename to RTCP/Cobalt/CoInterface/doc/package.dox diff --git a/RTCP/Cobalt/GPUProc/package.dox b/RTCP/Cobalt/GPUProc/doc/package.dox similarity index 100% rename from RTCP/Cobalt/GPUProc/package.dox rename to RTCP/Cobalt/GPUProc/doc/package.dox diff --git a/RTCP/Cobalt/InputProc/package.dox b/RTCP/Cobalt/InputProc/doc/package.dox similarity index 100% rename from RTCP/Cobalt/InputProc/package.dox rename to RTCP/Cobalt/InputProc/doc/package.dox diff --git a/RTCP/Cobalt/OpenCL_FFT/package.dox b/RTCP/Cobalt/OpenCL_FFT/doc/package.dox similarity index 100% rename from RTCP/Cobalt/OpenCL_FFT/package.dox rename to RTCP/Cobalt/OpenCL_FFT/doc/package.dox diff --git a/RTCP/Cobalt/OutputProc/package.dox b/RTCP/Cobalt/OutputProc/doc/package.dox similarity index 100% rename from RTCP/Cobalt/OutputProc/package.dox rename to RTCP/Cobalt/OutputProc/doc/package.dox diff --git a/RTCP/Cobalt/package.dox b/RTCP/Cobalt/doc/package.dox similarity index 100% rename from RTCP/Cobalt/package.dox rename to RTCP/Cobalt/doc/package.dox diff --git a/RTCP/package.dox b/RTCP/doc/package.dox similarity index 95% rename from RTCP/package.dox rename to RTCP/doc/package.dox index deda474cb62..cbdcba0fb07 100644 --- a/RTCP/package.dox +++ b/RTCP/doc/package.dox @@ -1,6 +1,6 @@ /** -\ingroup LOFAR +\ingroup Packages \defgroup RTCP Real-Time Central Processing Real-Time Central Processing (RTCP) contains the software packages that are diff --git a/SAS/Feedback_Service/package.dox b/SAS/Feedback_Service/doc/package.dox similarity index 100% rename from SAS/Feedback_Service/package.dox rename to SAS/Feedback_Service/doc/package.dox diff --git a/SAS/OTDB/package.dox b/SAS/OTDB/doc/package.dox similarity index 100% rename from SAS/OTDB/package.dox rename to SAS/OTDB/doc/package.dox diff --git a/SAS/ResourceAssignment/ResourceAssigner/doc/package.dox b/SAS/ResourceAssignment/ResourceAssigner/doc/package.dox new file mode 100644 index 00000000000..cceda4eca6f --- /dev/null +++ b/SAS/ResourceAssignment/ResourceAssigner/doc/package.dox @@ -0,0 +1,6 @@ +// \ingroup ResourceAssigner +// +// \defgroup ResourceAssigner ResourceAssigner +// +// This package contains classes and programs that handle the assignment requests +// of new tasks blaat diff --git a/SAS/ResourceAssignment/doc/package.dox b/SAS/ResourceAssignment/doc/package.dox new file mode 100644 index 00000000000..1ecbdcef996 --- /dev/null +++ b/SAS/ResourceAssignment/doc/package.dox @@ -0,0 +1,10 @@ +/** + +\ingroup SAS +\defgroup ResourceAssignment ResourceAssignment + +ResourceAssignment contains packages for the estimation and assignment of LOFAR resources, +for the scheduling of (observation and pipeline) tasks, and for the interaction with this +data by the user. + +*/ diff --git a/SAS/doc/package.dox b/SAS/doc/package.dox new file mode 100644 index 00000000000..ead990e20e3 --- /dev/null +++ b/SAS/doc/package.dox @@ -0,0 +1,9 @@ +/** + +\ingroup Packages +\defgroup SAS SAS + +The SAS package contains the LOFAR Specification Administration, and Scheduling software. + +*/ + diff --git a/SubSystems/CCU_MAC/doc/package.dox b/SubSystems/CCU_MAC/doc/package.dox new file mode 100644 index 00000000000..076a9121098 --- /dev/null +++ b/SubSystems/CCU_MAC/doc/package.dox @@ -0,0 +1,9 @@ +/** + +\ingroup SubSystems +\defgroup CCU_MAC CCU_MAC + +SubSystem description + +*/ + diff --git a/SubSystems/CN_MAC/doc/package.dox b/SubSystems/CN_MAC/doc/package.dox new file mode 100644 index 00000000000..591c0fc69f7 --- /dev/null +++ b/SubSystems/CN_MAC/doc/package.dox @@ -0,0 +1,9 @@ +/** + +\ingroup SubSystems +\defgroup CN_MAC CN_MAC + +SubSystem description + +*/ + diff --git a/SubSystems/DataManagement/doc/package.dox b/SubSystems/DataManagement/doc/package.dox new file mode 100644 index 00000000000..f8a9c0d69e5 --- /dev/null +++ b/SubSystems/DataManagement/doc/package.dox @@ -0,0 +1,9 @@ +/** + +\ingroup SubSystems +\defgroup DataManagement DataManagement + +SubSystem description + +*/ + diff --git a/SubSystems/Dragnet/doc/package.dox b/SubSystems/Dragnet/doc/package.dox new file mode 100644 index 00000000000..306d4f225bd --- /dev/null +++ b/SubSystems/Dragnet/doc/package.dox @@ -0,0 +1,9 @@ +/** + +\ingroup SubSystems +\defgroup Dragnet Dragnet + +SubSystem description + +*/ + diff --git a/SubSystems/LCU_MAC/doc/package.dox b/SubSystems/LCU_MAC/doc/package.dox new file mode 100644 index 00000000000..07af346a2ff --- /dev/null +++ b/SubSystems/LCU_MAC/doc/package.dox @@ -0,0 +1,9 @@ +/** + +\ingroup SubSystems +\defgroup LCU_MAC LCU_MAC + +SubSystem description + +*/ + diff --git a/SubSystems/LTAIngest/doc/package.dox b/SubSystems/LTAIngest/doc/package.dox new file mode 100644 index 00000000000..fd564f1d94e --- /dev/null +++ b/SubSystems/LTAIngest/doc/package.dox @@ -0,0 +1,9 @@ +/** + +\ingroup SubSystems +\defgroup LTAIngest LTAIngest + +SubSystem description + +*/ + diff --git a/SubSystems/MCU_MAC/doc/package.dox b/SubSystems/MCU_MAC/doc/package.dox new file mode 100644 index 00000000000..b2f8ebda712 --- /dev/null +++ b/SubSystems/MCU_MAC/doc/package.dox @@ -0,0 +1,9 @@ +/** + +\ingroup SubSystems +\defgroup MCU_MAC MCU_MAC + +SubSystem description + +*/ + diff --git a/SubSystems/Offline/doc/package.dox b/SubSystems/Offline/doc/package.dox new file mode 100644 index 00000000000..066fc591f8b --- /dev/null +++ b/SubSystems/Offline/doc/package.dox @@ -0,0 +1,9 @@ +/** + +\ingroup SubSystems +\defgroup Offline Offline + +SubSystem description + +*/ + diff --git a/SubSystems/Online_Cobalt/doc/package.dox b/SubSystems/Online_Cobalt/doc/package.dox new file mode 100644 index 00000000000..4a49cf228ad --- /dev/null +++ b/SubSystems/Online_Cobalt/doc/package.dox @@ -0,0 +1,9 @@ +/** + +\ingroup SubSystems +\defgroup OnlineCobalt OnlineCobalt + +SubSystem description + +*/ + diff --git a/SubSystems/Online_OutputProc/doc/package.dox b/SubSystems/Online_OutputProc/doc/package.dox new file mode 100644 index 00000000000..f71bd753959 --- /dev/null +++ b/SubSystems/Online_OutputProc/doc/package.dox @@ -0,0 +1,9 @@ +/** + +\ingroup SubSystems +\defgroup Online_OutputProc Online_OutputProc + +SubSystem description + +*/ + diff --git a/SubSystems/RAServices/doc/package.dox b/SubSystems/RAServices/doc/package.dox new file mode 100644 index 00000000000..cc48821955b --- /dev/null +++ b/SubSystems/RAServices/doc/package.dox @@ -0,0 +1,9 @@ +/** + +\ingroup SubSystems +\defgroup RAServices RAServices + +SubSystem description + +*/ + diff --git a/SubSystems/SAS_OTDB/doc/package.dox b/SubSystems/SAS_OTDB/doc/package.dox new file mode 100644 index 00000000000..025c2400c50 --- /dev/null +++ b/SubSystems/SAS_OTDB/doc/package.dox @@ -0,0 +1,9 @@ +/** + +\ingroup SubSystems +\defgroup SAS_OTDB SAS_OTDB + +SubSystem description + +*/ + diff --git a/SubSystems/SAS_Tools/doc/package.dox b/SubSystems/SAS_Tools/doc/package.dox new file mode 100644 index 00000000000..19e0ad1b4e0 --- /dev/null +++ b/SubSystems/SAS_Tools/doc/package.dox @@ -0,0 +1,9 @@ +/** + +\ingroup SubSystems +\defgroup SAS_Tools SAS_Tools + +SubSystem description + +*/ + diff --git a/SubSystems/ST_MAC/doc/package.dox b/SubSystems/ST_MAC/doc/package.dox new file mode 100644 index 00000000000..9752474bde6 --- /dev/null +++ b/SubSystems/ST_MAC/doc/package.dox @@ -0,0 +1,9 @@ +/** + +\ingroup SubSystems +\defgroup ST_MAC ST_MAC + +SubSystem description + +*/ + diff --git a/SubSystems/WinCC_DB/doc/package.dox b/SubSystems/WinCC_DB/doc/package.dox new file mode 100644 index 00000000000..09e66179edb --- /dev/null +++ b/SubSystems/WinCC_DB/doc/package.dox @@ -0,0 +1,9 @@ +/** + +\ingroup SubSystems +\defgroup WinCC_DB WinCC_DB + +SubSystem description + +*/ + diff --git a/SubSystems/doc/package.dox b/SubSystems/doc/package.dox new file mode 100644 index 00000000000..3ce1d1a07f0 --- /dev/null +++ b/SubSystems/doc/package.dox @@ -0,0 +1,7 @@ +/** + +\defgroup SubSystems Sub-Systems + +Placeholder for LOFAR sub-system documentation. + +*/ diff --git a/doc/doxygen/CMakeLists.txt b/doc/doxygen/CMakeLists.txt index 6862f9fe145..2d796dc834e 100644 --- a/doc/doxygen/CMakeLists.txt +++ b/doc/doxygen/CMakeLists.txt @@ -21,4 +21,4 @@ add_custom_target(doxygen_quick_guide WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" COMMENT "Generating Doxygen Quick Guide ... \n (see doxygen_quick_guide.log for details)") -add_subdirectory(examples) +add_subdirectory(styling) diff --git a/doc/doxygen/quick-guide.dox b/doc/doxygen/quick-guide.dox index 47c827be73b..553faade70e 100644 --- a/doc/doxygen/quick-guide.dox +++ b/doc/doxygen/quick-guide.dox @@ -49,6 +49,44 @@ please refer to the Doxygen User Manual. C++ Coding Standard</a>. +\subsection dqg_markdown Markdown Language + + Doxygen supports <a + href="http://www.stack.nl/~dimitri/doxygen/manual/markdown.html">Markdown + syntax</a> for creating documentation as well. + + It can either be used from within the code comments or on individual pages in which case they should have the + extension *.md* in order to be picked up by the Markdown text processor. It is common for each markdown file to start + with a header that is appended with the page tag. For example: + + \verbatim + # My page header {#my_page} + \endverbatim + + A page can be referenced to from another (Markdown) page by using the page tag in the link, e.g: + + \verbatim + Please visit [this page](@ref my_page) first. + \endverbatim + + Referencing a Markdown page from a Doxygen page (or Docstrings in code for that matter) can be done using: + + \verbatim + Please visit \ref my_page "this page" first. + \endverbatim + + Please note that Markdown pages will automatically get listed on the <a href="pages.html">Related Pages</a> page. + + \b Known \b Issues: <br> + According to <a href="https://stackoverflow.com/questions/19704822/how-to-use-markdown-pages-and-doxygen-groups">this</a> + Stackoverflow Q&A there's currently no way to use Doxygen commands on your + Markdown pages or in pieces of inline Markdown text. This means that the + decomposition of LOFAR into logical sub-systems (See the Modules tab) is + defined by Doxygen commands that reside in *.dox* files, while the content + of any fixed pages (that turn up in the Related Pages tab) reside in \e .md + files. + + \subsection dqg_docserver Refering to Documents on the LOFAR Document Server There will be times when you want to point a reader to one or more documents diff --git a/doc/doxygen/styling/CMakeLists.txt b/doc/doxygen/styling/CMakeLists.txt new file mode 100644 index 00000000000..e0b2fded175 --- /dev/null +++ b/doc/doxygen/styling/CMakeLists.txt @@ -0,0 +1,39 @@ +# Copy the styling files to the build folder + +configure_file( + "${CMAKE_CURRENT_SOURCE_DIR}/customdoxygen.css.in" + "${CMAKE_BINARY_DIR}/customdoxygen.css" @ONLY) + +configure_file( + "${CMAKE_CURRENT_SOURCE_DIR}/doxy-boot.js.in" + "${CMAKE_BINARY_DIR}/doxy-boot.js" @ONLY) + +configure_file( + "${CMAKE_CURRENT_SOURCE_DIR}/footer.html.in" + "${CMAKE_BINARY_DIR}/footer.html" @ONLY) + +configure_file( + "${CMAKE_CURRENT_SOURCE_DIR}/header.html.in" + "${CMAKE_BINARY_DIR}/header.html" @ONLY) + +configure_file( + "${CMAKE_CURRENT_SOURCE_DIR}/bootstrap.min.js.in" + "${CMAKE_BINARY_DIR}/bootstrap.min.js" @ONLY) + +configure_file( + "${CMAKE_CURRENT_SOURCE_DIR}/bootstrap.min.css.in" + "${CMAKE_BINARY_DIR}/bootstrap.min.css" @ONLY) + +configure_file( + "${CMAKE_CURRENT_SOURCE_DIR}/jquery-2.1.1.min.js.in" + "${CMAKE_BINARY_DIR}/jquery-2.1.1.min.js" @ONLY) + +configure_file( + "${CMAKE_CURRENT_SOURCE_DIR}/jquery.powertip.min.js.in" + "${CMAKE_BINARY_DIR}/jquery.powertip.min.js" @ONLY) + +file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/LOFAR_logo.png" DESTINATION "${CMAKE_BINARY_DIR}") +file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/glyphicons-halflings-regular.ttf" DESTINATION "${CMAKE_BINARY_DIR}") +file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/glyphicons-halflings-regular.woff" DESTINATION "${CMAKE_BINARY_DIR}") +file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/glyphicons-halflings-regular.eot" DESTINATION "${CMAKE_BINARY_DIR}") +file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/glyphicons-halflings-regular.svg" DESTINATION "${CMAKE_BINARY_DIR}") diff --git a/doc/doxygen/styling/LOFAR_logo.png b/doc/doxygen/styling/LOFAR_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..c68afc32befa6f2a3669e49ac9d51299a5e5b997 GIT binary patch literal 10617 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 KT-G@yGywp9yE-2L literal 0 HcmV?d00001 diff --git a/doc/doxygen/styling/bootstrap.min.css.in b/doc/doxygen/styling/bootstrap.min.css.in new file mode 100644 index 00000000000..2b5b908a6ed --- /dev/null +++ b/doc/doxygen/styling/bootstrap.min.css.in @@ -0,0 +1,5 @@ +/*! + * Bootstrap v3.3.1 (http://getbootstrap.com) + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + *//*! normalize.css v3.0.2 | MIT License | git.io/normalize */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:before,:after{color:#000!important;text-shadow:none!important;background:transparent!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="#"]:after,a[href^="javascript:"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}select{background:#fff!important}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered th,.table-bordered td{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(glyphicons-halflings-regular.eot);src:url(glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(glyphicons-halflings-regular.woff) format('woff'),url(glyphicons-halflings-regular.ttf) format('truetype'),url(glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-euro:before,.glyphicon-eur:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:before,:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:hover,a:focus{color:#23527c;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive,.thumbnail>img,.thumbnail a>img,.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 .small,h2 .small,h3 .small,h4 .small,h5 .small,h6 .small,.h1 .small,.h2 .small,.h3 .small,.h4 .small,.h5 .small,.h6 .small{font-weight:400;line-height:1;color:#777}h1,.h1,h2,.h2,h3,.h3{margin-top:20px;margin-bottom:10px}h1 small,.h1 small,h2 small,.h2 small,h3 small,.h3 small,h1 .small,.h1 .small,h2 .small,.h2 .small,h3 .small,.h3 .small{font-size:65%}h4,.h4,h5,.h5,h6,.h6{margin-top:10px;margin-bottom:10px}h4 small,.h4 small,h5 small,.h5 small,h6 small,.h6 small,h4 .small,.h4 .small,h5 .small,.h5 .small,h6 .small,.h6 .small{font-size:75%}h1,.h1{font-size:36px}h2,.h2{font-size:30px}h3,.h3{font-size:24px}h4,.h4{font-size:18px}h5,.h5{font-size:14px}h6,.h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}small,.small{font-size:85%}mark,.mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ul,ol{margin-top:0;margin-bottom:10px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dt,dd{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse footer:before,blockquote.pull-right footer:before,.blockquote-reverse small:before,blockquote.pull-right small:before,.blockquote-reverse .small:before,blockquote.pull-right .small:before{content:''}.blockquote-reverse footer:after,blockquote.pull-right footer:after,.blockquote-reverse small:after,blockquote.pull-right small:after,.blockquote-reverse .small:after,blockquote.pull-right .small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-xs-1,.col-sm-1,.col-md-1,.col-lg-1,.col-xs-2,.col-sm-2,.col-md-2,.col-lg-2,.col-xs-3,.col-sm-3,.col-md-3,.col-lg-3,.col-xs-4,.col-sm-4,.col-md-4,.col-lg-4,.col-xs-5,.col-sm-5,.col-md-5,.col-lg-5,.col-xs-6,.col-sm-6,.col-md-6,.col-lg-6,.col-xs-7,.col-sm-7,.col-md-7,.col-lg-7,.col-xs-8,.col-sm-8,.col-md-8,.col-lg-8,.col-xs-9,.col-sm-9,.col-md-9,.col-lg-9,.col-xs-10,.col-sm-10,.col-md-10,.col-lg-10,.col-xs-11,.col-sm-11,.col-md-11,.col-lg-11,.col-xs-12,.col-sm-12,.col-md-12,.col-lg-12{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>thead>tr>th,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-child(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr.active:hover>th{background-color:#e8e8e8}.table>thead>tr>td.success,.table>tbody>tr>td.success,.table>tfoot>tr>td.success,.table>thead>tr>th.success,.table>tbody>tr>th.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>tbody>tr.success>td,.table>tfoot>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr.success>th,.table>tfoot>tr.success>th{background-color:#dff0d8}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr.success:hover>th{background-color:#d0e9c6}.table>thead>tr>td.info,.table>tbody>tr>td.info,.table>tfoot>tr>td.info,.table>thead>tr>th.info,.table>tbody>tr>th.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>tbody>tr.info>td,.table>tfoot>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr.info>th,.table>tfoot>tr.info>th{background-color:#d9edf7}.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover,.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr.info:hover>th{background-color:#c4e3f3}.table>thead>tr>td.warning,.table>tbody>tr>td.warning,.table>tfoot>tr>td.warning,.table>thead>tr>th.warning,.table>tbody>tr>th.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>tbody>tr.warning>td,.table>tfoot>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr.warning>th,.table>tfoot>tr.warning>th{background-color:#fcf8e3}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr.warning:hover>th{background-color:#faf2cc}.table>thead>tr>td.danger,.table>tbody>tr>td.danger,.table>tfoot>tr>td.danger,.table>thead>tr>th.danger,.table>tbody>tr>th.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>tbody>tr.danger>td,.table>tfoot>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr.danger>th,.table>tfoot>tr.danger>th{background-color:#f2dede}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr.danger:hover>th{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=radio],input[type=checkbox]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=radio]:focus,input[type=checkbox]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eee;opacity:1}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date],input[type=time],input[type=datetime-local],input[type=month]{line-height:34px}input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.radio,.checkbox{position:relative;display:block;margin-top:10px;margin-bottom:10px}.radio label,.checkbox label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.radio input[type=radio],.radio-inline input[type=radio],.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox]{position:absolute;margin-top:4px \9;margin-left:-20px}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type=radio][disabled],input[type=checkbox][disabled],input[type=radio].disabled,input[type=checkbox].disabled,fieldset[disabled] input[type=radio],fieldset[disabled] input[type=checkbox]{cursor:not-allowed}.radio-inline.disabled,.checkbox-inline.disabled,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.radio.disabled label,.checkbox.disabled label,fieldset[disabled] .radio label,fieldset[disabled] .checkbox label{cursor:not-allowed}.form-control-static{padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm,.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm,select.form-group-sm .form-control{height:30px;line-height:30px}textarea.input-sm,textarea.form-group-sm .form-control,select[multiple].input-sm,select[multiple].form-group-sm .form-control{height:auto}.input-lg,.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-lg,select.form-group-lg .form-control{height:46px;line-height:46px}textarea.input-lg,textarea.form-group-lg .form-control,select[multiple].input-lg,select[multiple].form-group-lg .form-control{height:auto}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline,.has-success.radio label,.has-success.checkbox label,.has-success.radio-inline label,.has-success.checkbox-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline,.has-warning.radio label,.has-warning.checkbox label,.has-warning.radio-inline label,.has-warning.checkbox-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline,.has-error.radio label,.has-error.checkbox label,.has-error.radio-inline label,.has-error.checkbox-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn,.form-inline .input-group .form-control{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .radio label,.form-inline .checkbox label{padding-left:0}.form-inline .radio input[type=radio],.form-inline .checkbox input[type=checkbox]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .radio,.form-horizontal .checkbox{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:14.3px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn:focus,.btn:active:focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn.active.focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus,.btn.focus{color:#333;text-decoration:none}.btn:active,.btn.active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{pointer-events:none;cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:hover,.btn-default:focus,.btn-default.focus,.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled.focus,.btn-default[disabled].focus,fieldset[disabled] .btn-default.focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary:hover,.btn-primary:focus,.btn-primary.focus,.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled.focus,.btn-primary[disabled].focus,fieldset[disabled] .btn-primary.focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:hover,.btn-success:focus,.btn-success.focus,.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled.focus,.btn-success[disabled].focus,fieldset[disabled] .btn-success.focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info:hover,.btn-info:focus,.btn-info.focus,.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled.focus,.btn-info[disabled].focus,fieldset[disabled] .btn-info.focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning:hover,.btn-warning:focus,.btn-warning.focus,.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled.focus,.btn-warning[disabled].focus,fieldset[disabled] .btn-warning.focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger:hover,.btn-danger:focus,.btn-danger.focus,.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled.focus,.btn-danger[disabled].focus,fieldset[disabled] .btn-danger.focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link:active,.btn-link.active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#777;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.btn-sm,.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs,.btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=submit].btn-block,input[type=reset].btn-block,input[type=button].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none;visibility:hidden}.collapse.in{display:block;visibility:visible}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#777}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px solid}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child>.btn:last-child,.btn-group>.btn-group:first-child>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=radio],[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn,select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn,select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=radio],.input-group-addon input[type=checkbox]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:hover,.input-group-btn>.btn:focus,.input-group-btn>.btn:active{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none;visibility:hidden}.tab-content>.active{display:block;visibility:visible}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:150px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important;visibility:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:200px}}.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn,.navbar-form .input-group .form-control{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .radio label,.navbar-form .checkbox label{padding-left:0}.navbar-form .radio input[type=radio],.navbar-form .checkbox input[type=checkbox]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color: white;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:hover,.navbar-default .btn-link:focus{color:#333}.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:hover,.navbar-default .btn-link[disabled]:focus,fieldset[disabled] .navbar-default .btn-link:focus{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:hover,.navbar-inverse .btn-link:focus{color:#fff}.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:hover,.navbar-inverse .btn-link[disabled]:focus,fieldset[disabled] .navbar-inverse .btn-link:focus{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{z-index:2;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:hover,a.label:focus{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:hover,.label-default[href]:focus{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:hover,.label-success[href]:focus{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge{top:0;padding:1px 5px}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding:30px 15px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron h1,.jumbotron .h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding:48px 0}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron h1,.jumbotron .h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail>img,.thumbnail a>img{margin-right:auto;margin-left:auto}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-striped .progress-bar,.progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress.active .progress-bar,.progress-bar.active{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-left,.media-right,.media-body{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,a.list-group-item:focus{color:#555;text-decoration:none;background-color:#f5f5f5}.list-group-item.disabled,.list-group-item.disabled:hover,.list-group-item.disabled:focus{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>.small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,a.list-group-item-success:focus{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:hover,a.list-group-item-success.active:focus{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,a.list-group-item-info:focus{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:hover,a.list-group-item-info.active:focus{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,a.list-group-item-warning:focus{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,a.list-group-item-danger:focus{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.table,.panel>.table-responsive>.table,.panel>.panel-collapse>.table{margin-bottom:0}.panel>.table caption,.panel>.table-responsive>.table caption,.panel>.panel-collapse>.table caption{padding-right:15px;padding-left:15px}.panel>.table:first-child,.panel>.table-responsive:first-child>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table:last-child,.panel>.table-responsive:last-child>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child th,.panel>.table>tbody:first-child>tr:first-child td{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.panel-body,.panel-group .panel-heading+.panel-collapse>.list-group{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:absolute;top:0;right:0;left:0;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{min-height:16.43px;padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;font-weight:400;line-height:1.4;visibility:visible;filter:alpha(opacity=0);opacity:0}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;font-weight:400;line-height:1.42857143;text-align:left;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000;perspective:1000}.carousel-inner>.item.next,.carousel-inner>.item.active.right{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.prev,.carousel-inner>.item.active.left{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right,.carousel-inner>.item.active{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;z-index:5;display:inline-block}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left:50%;margin-left:-10px}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right:50%;margin-right:-10px}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;margin-top:-10px;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-15px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-15px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix:after,.dl-horizontal dd:before,.dl-horizontal dd:after,.container:before,.container:after,.container-fluid:before,.container-fluid:after,.row:before,.row:after,.form-horizontal .form-group:before,.form-horizontal .form-group:after,.btn-toolbar:before,.btn-toolbar:after,.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after,.nav:before,.nav:after,.navbar:before,.navbar:after,.navbar-header:before,.navbar-header:after,.navbar-collapse:before,.navbar-collapse:after,.pager:before,.pager:after,.panel-body:before,.panel-body:after,.modal-footer:before,.modal-footer:after{display:table;content:" "}.clearfix:after,.dl-horizontal dd:after,.container:after,.container-fluid:after,.row:after,.form-horizontal .form-group:after,.btn-toolbar:after,.btn-group-vertical>.btn-group:after,.nav:after,.navbar:after,.navbar-header:after,.navbar-collapse:after,.pager:after,.panel-body:after,.modal-footer:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important;visibility:hidden!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-xs,.visible-sm,.visible-md,.visible-lg{display:none!important}.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table}tr.visible-xs{display:table-row!important}th.visible-xs,td.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table}tr.visible-sm{display:table-row!important}th.visible-sm,td.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table}tr.visible-md{display:table-row!important}th.visible-md,td.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table}tr.visible-lg{display:table-row!important}th.visible-lg,td.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table}tr.visible-print{display:table-row!important}th.visible-print,td.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}} diff --git a/doc/doxygen/styling/bootstrap.min.js.in b/doc/doxygen/styling/bootstrap.min.js.in new file mode 100644 index 00000000000..d839865900c --- /dev/null +++ b/doc/doxygen/styling/bootstrap.min.js.in @@ -0,0 +1,7 @@ +/*! + * Bootstrap v3.3.1 (http://getbootstrap.com) + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ +if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){return a(b.target).is(this)?b.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.1",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a(f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.1",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")&&(c.prop("checked")&&this.$element.hasClass("active")?a=!1:b.find(".active").removeClass("active")),a&&c.prop("checked",!this.$element.hasClass("active")).trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active"));a&&this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target);d.hasClass("btn")||(d=d.closest(".btn")),b.call(d,"toggle"),c.preventDefault()}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=this.sliding=this.interval=this.$active=this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.1",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c="prev"==a?-1:1,d=this.getItemIndex(b),e=(d+c)%this.$items.length;return this.$items.eq(e)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));return a>this.$items.length-1||0>a?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){return this.sliding?void 0:this.slide("next")},c.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},c.prototype.slide=function(b,d){var e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next"==b?"left":"right",i="next"==b?"first":"last",j=this;if(!f.length){if(!this.options.wrap)return;f=this.$element.find(".item")[i]()}if(f.hasClass("active"))return this.sliding=!1;var k=f[0],l=a.Event("slide.bs.carousel",{relatedTarget:k,direction:h});if(this.$element.trigger(l),!l.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var m=a(this.$indicators.children()[this.getItemIndex(f)]);m&&m.addClass("active")}var n=a.Event("slid.bs.carousel",{relatedTarget:k,direction:h});return a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join(" ")).addClass("active"),e.removeClass(["active",h].join(" ")),j.sliding=!1,setTimeout(function(){j.$element.trigger(n)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(n)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}};a(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){var c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data("bs.collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b);!e&&f.toggle&&"show"==b&&(f.toggle=!1),e||c.data("bs.collapse",e=new d(this,f)),"string"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a(this.options.trigger).filter('[href="#'+b.id+'"], [data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.1",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0,trigger:'[data-toggle="collapse"]'},d.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b,e=this.$parent&&this.$parent.find("> .panel").children(".in, .collapsing");if(!(e&&e.length&&(b=e.data("bs.collapse"),b&&b.transitioning))){var f=a.Event("show.bs.collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.collapse",null));var g=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var h=function(){this.$element.removeClass("collapsing").addClass("collapse in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return h.call(this);var i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass("in");a.attr("aria-expanded",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(d){var e=a(this);e.attr("data-target")||d.preventDefault();var f=b(e),g=f.data("bs.collapse"),h=g?"toggle":a.extend({},e.data(),{trigger:this});c.call(f,h)})}(jQuery),+function(a){"use strict";function b(b){b&&3===b.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=c(d),f={relatedTarget:this};e.hasClass("open")&&(e.trigger(b=a.Event("hide.bs.dropdown",f)),b.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger("hidden.bs.dropdown",f)))}))}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.1",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a('<div class="dropdown-backdrop"/>').insertAfter(a(this)).on("click",b);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus").attr("aria-expanded","true"),f.toggleClass("open").trigger("shown.bs.dropdown",h)}return!1}},g.prototype.keydown=function(b){if(/(38|40|27|32)/.test(b.which)&&!/input|textarea/i.test(b.target.tagName)){var d=a(this);if(b.preventDefault(),b.stopPropagation(),!d.is(".disabled, :disabled")){var e=c(d),g=e.hasClass("open");if(!g&&27!=b.which||g&&27==b.which)return 27==b.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.divider):visible a",i=e.find('[role="menu"]'+h+', [role="listbox"]'+h);if(i.length){var j=i.index(b.target);38==b.which&&j>0&&j--,40==b.which&&j<i.length-1&&j++,~j||(j=0),i.eq(j).trigger("focus")}}}};var h=a.fn.dropdown;a.fn.dropdown=d,a.fn.dropdown.Constructor=g,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=h,this},a(document).on("click.bs.dropdown.data-api",b).on("click.bs.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",f,g.prototype.toggle).on("keydown.bs.dropdown.data-api",f,g.prototype.keydown).on("keydown.bs.dropdown.data-api",'[role="menu"]',g.prototype.keydown).on("keydown.bs.dropdown.data-api",'[role="listbox"]',g.prototype.keydown)}(jQuery),+function(a){"use strict";function b(b,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},c.DEFAULTS,e.data(),"object"==typeof b&&b);f||e.data("bs.modal",f=new c(this,g)),"string"==typeof b?f[b](d):g.show&&f.show(d)})}var c=function(b,c){this.options=c,this.$body=a(document.body),this.$element=a(b),this.$backdrop=this.isShown=null,this.scrollbarWidth=0,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};c.VERSION="3.3.1",c.TRANSITION_DURATION=300,c.BACKDROP_TRANSITION_DURATION=150,c.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},c.prototype.toggle=function(a){return this.isShown?this.hide():this.show(a)},c.prototype.show=function(b){var d=this,e=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(e),this.isShown||e.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.setScrollbar(),this.$body.addClass("modal-open"),this.escape(),this.resize(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.backdrop(function(){var e=a.support.transition&&d.$element.hasClass("fade");d.$element.parent().length||d.$element.appendTo(d.$body),d.$element.show().scrollTop(0),d.options.backdrop&&d.adjustBackdrop(),d.adjustDialog(),e&&d.$element[0].offsetWidth,d.$element.addClass("in").attr("aria-hidden",!1),d.enforceFocus();var f=a.Event("shown.bs.modal",{relatedTarget:b});e?d.$element.find(".modal-dialog").one("bsTransitionEnd",function(){d.$element.trigger("focus").trigger(f)}).emulateTransitionEnd(c.TRANSITION_DURATION):d.$element.trigger("focus").trigger(f)}))},c.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.escape(),this.resize(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").attr("aria-hidden",!0).off("click.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",a.proxy(this.hideModal,this)).emulateTransitionEnd(c.TRANSITION_DURATION):this.hideModal())},c.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.trigger("focus")},this))},c.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keydown.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keydown.dismiss.bs.modal")},c.prototype.resize=function(){this.isShown?a(window).on("resize.bs.modal",a.proxy(this.handleUpdate,this)):a(window).off("resize.bs.modal")},c.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.$body.removeClass("modal-open"),a.resetAdjustments(),a.resetScrollbar(),a.$element.trigger("hidden.bs.modal")})},c.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},c.prototype.backdrop=function(b){var d=this,e=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var f=a.support.transition&&e;if(this.$backdrop=a('<div class="modal-backdrop '+e+'" />').prependTo(this.$element).on("click.dismiss.bs.modal",a.proxy(function(a){a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus.call(this.$element[0]):this.hide.call(this))},this)),f&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;f?this.$backdrop.one("bsTransitionEnd",b).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):b()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var g=function(){d.removeBackdrop(),b&&b()};a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",g).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):g()}else b&&b()},c.prototype.handleUpdate=function(){this.options.backdrop&&this.adjustBackdrop(),this.adjustDialog()},c.prototype.adjustBackdrop=function(){this.$backdrop.css("height",0).css("height",this.$element[0].scrollHeight)},c.prototype.adjustDialog=function(){var a=this.$element[0].scrollHeight>document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&a?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!a?this.scrollbarWidth:""})},c.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},c.prototype.checkScrollbar=function(){this.bodyIsOverflowing=document.body.scrollHeight>document.documentElement.clientHeight,this.scrollbarWidth=this.measureScrollbar()},c.prototype.setScrollbar=function(){var a=parseInt(this.$body.css("padding-right")||0,10);this.bodyIsOverflowing&&this.$body.css("padding-right",a+this.scrollbarWidth)},c.prototype.resetScrollbar=function(){this.$body.css("padding-right","")},c.prototype.measureScrollbar=function(){var a=document.createElement("div");a.className="modal-scrollbar-measure",this.$body.append(a);var b=a.offsetWidth-a.clientWidth;return this.$body[0].removeChild(a),b};var d=a.fn.modal;a.fn.modal=b,a.fn.modal.Constructor=c,a.fn.modal.noConflict=function(){return a.fn.modal=d,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(c){var d=a(this),e=d.attr("href"),f=a(d.attr("data-target")||e&&e.replace(/.*(?=#[^\s]+$)/,"")),g=f.data("bs.modal")?"toggle":a.extend({remote:!/#/.test(e)&&e},f.data(),d.data());d.is("a")&&c.preventDefault(),f.one("show.bs.modal",function(a){a.isDefaultPrevented()||f.one("hidden.bs.modal",function(){d.is(":visible")&&d.trigger("focus")})}),b.call(f,g,this)})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof b&&b,g=f&&f.selector;(e||"destroy"!=b)&&(g?(e||d.data("bs.tooltip",e={}),e[g]||(e[g]=new c(this,f))):e||d.data("bs.tooltip",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.type=this.options=this.enabled=this.timeout=this.hoverState=this.$element=null,this.init("tooltip",a,b)};c.VERSION="3.3.1",c.TRANSITION_DURATION=150,c.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(this.options.viewport.selector||this.options.viewport);for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c&&c.$tip&&c.$tip.is(":visible")?void(c.hoverState="in"):(c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var h="function"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.options.container?a(this.options.container):this.$element.parent(),p=this.getPosition(o);h="bottom"==h&&k.bottom+m>p.bottom?"top":"top"==h&&k.top-m<p.top?"bottom":"right"==h&&k.right+l>p.width?"left":"left"==h&&k.left-l<p.left?"right":h,f.removeClass(n).addClass(h)}var q=this.getCalculatedOffset(h,k,l,m);this.applyPlacement(q,h);var r=function(){var a=e.hoverState;e.$element.trigger("shown.bs."+e.type),e.hoverState=null,"out"==a&&e.leave(e)};a.support.transition&&this.$tip.hasClass("fade")?f.one("bsTransitionEnd",r).emulateTransitionEnd(c.TRANSITION_DURATION):r()}},c.prototype.applyPlacement=function(b,c){var d=this.tip(),e=d[0].offsetWidth,f=d[0].offsetHeight,g=parseInt(d.css("margin-top"),10),h=parseInt(d.css("margin-left"),10);isNaN(g)&&(g=0),isNaN(h)&&(h=0),b.top=b.top+g,b.left=b.left+h,a.offset.setOffset(d[0],a.extend({using:function(a){d.css({top:Math.round(a.top),left:Math.round(a.left)})}},b),0),d.addClass("in");var i=d[0].offsetWidth,j=d[0].offsetHeight;"top"==c&&j!=f&&(b.top=b.top+f-j);var k=this.getViewportAdjustedDelta(c,b,i,j);k.left?b.left+=k.left:b.top+=k.top;var l=/top|bottom/.test(c),m=l?2*k.left-e+i:2*k.top-f+j,n=l?"offsetWidth":"offsetHeight";d.offset(b),this.replaceArrow(m,d[0][n],l)},c.prototype.replaceArrow=function(a,b,c){this.arrow().css(c?"left":"top",50*(1-a/b)+"%").css(c?"top":"left","")},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},c.prototype.hide=function(b){function d(){"in"!=e.hoverState&&f.detach(),e.$element.removeAttr("aria-describedby").trigger("hidden.bs."+e.type),b&&b()}var e=this,f=this.tip(),g=a.Event("hide.bs."+this.type);return this.$element.trigger(g),g.isDefaultPrevented()?void 0:(f.removeClass("in"),a.support.transition&&this.$tip.hasClass("fade")?f.one("bsTransitionEnd",d).emulateTransitionEnd(c.TRANSITION_DURATION):d(),this.hoverState=null,this)},c.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||"string"!=typeof a.attr("data-original-title"))&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},c.prototype.hasContent=function(){return this.getTitle()},c.prototype.getPosition=function(b){b=b||this.$element;var c=b[0],d="BODY"==c.tagName,e=c.getBoundingClientRect();null==e.width&&(e=a.extend({},e,{width:e.right-e.left,height:e.bottom-e.top}));var f=d?{top:0,left:0}:b.offset(),g={scroll:d?document.documentElement.scrollTop||document.body.scrollTop:b.scrollTop()},h=d?{width:a(window).width(),height:a(window).height()}:null;return a.extend({},e,g,h,f)},c.prototype.getCalculatedOffset=function(a,b,c,d){return"bottom"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:"top"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:"left"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},c.prototype.getViewportAdjustedDelta=function(a,b,c,d){var e={top:0,left:0};if(!this.$viewport)return e;var f=this.options.viewport&&this.options.viewport.padding||0,g=this.getPosition(this.$viewport);if(/right|left/.test(a)){var h=b.top-f-g.scroll,i=b.top+f-g.scroll+d;h<g.top?e.top=g.top-h:i>g.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;j<g.left?e.left=g.left-j:k>g.width&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){return this.$tip=this.$tip||a(this.options.template)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off("."+a.type).removeData("bs."+a.type)})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b,g=f&&f.selector;(e||"destroy"!=b)&&(g?(e||d.data("bs.popover",e={}),e[g]||(e[g]=new c(this,f))):e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.3.1",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")},c.prototype.tip=function(){return this.$tip||(this.$tip=a(this.options.template)),this.$tip};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){var e=a.proxy(this.process,this);this.$body=a("body"),this.$scrollElement=a(a(c).is("body")?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",e),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.3.1",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b="offset",c=0;a.isWindow(this.$scrollElement[0])||(b="position",c=this.$scrollElement.scrollTop()),this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight();var d=this;this.$body.find(this.selector).map(function(){var d=a(this),e=d.data("target")||d.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[b]().top+c,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){d.offsets.push(this[0]),d.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b<e[0])return this.activeTarget=null,this.clear();for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(!e[a+1]||b<=e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,this.clear();var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")},b.prototype.clear=function(){a(this.selector).parentsUntil(this.options.target,".active").removeClass("active")};var d=a.fn.scrollspy;a.fn.scrollspy=c,a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=d,this},a(window).on("load.bs.scrollspy.data-api",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);c.call(b,b.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new c(this)),"string"==typeof b&&e[b]()})}var c=function(b){this.element=a(b)};c.VERSION="3.3.1",c.TRANSITION_DURATION=150,c.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a"),f=a.Event("hide.bs.tab",{relatedTarget:b[0]}),g=a.Event("show.bs.tab",{relatedTarget:e[0]});if(e.trigger(f),b.trigger(g),!g.isDefaultPrevented()&&!f.isDefaultPrevented()){var h=a(d);this.activate(b.closest("li"),c),this.activate(h,h.parent(),function(){e.trigger({type:"hidden.bs.tab",relatedTarget:b[0]}),b.trigger({type:"shown.bs.tab",relatedTarget:e[0]}) +})}}},c.prototype.activate=function(b,d,e){function f(){g.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu")&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=this.unpin=this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.1",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return c>e?"top":!1;if("bottom"==this.affixed)return null!=c?e+this.unpin<=f.top?!1:"bottom":a-d>=e+g?!1:"bottom";var h=null==this.affixed,i=h?e:f.top,j=h?g:b;return null!=c&&c>=i?"top":null!=d&&i+j>=a-d?"bottom":!1},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=a("body").height();"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin="bottom"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix","affixed")+".bs.affix")}"bottom"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery); \ No newline at end of file diff --git a/doc/doxygen/styling/customdoxygen.css.in b/doc/doxygen/styling/customdoxygen.css.in new file mode 100644 index 00000000000..3f4d48c3b1b --- /dev/null +++ b/doc/doxygen/styling/customdoxygen.css.in @@ -0,0 +1,458 @@ +/* Take care of numbering of h2, h3, and h4 headings */ + +h1, .h1, .title { + /* Reset paragraph numbering counter for h2 headings */ + counter-reset: h2counter; +} + +h2:before { + content: counter(h2counter) "\0000a0\0000a0"; + counter-increment: h2counter; + counter-reset: h3counter; +} +h2.nocount:before { + content: none; + counter-increment: none; +} + +h3:before { + content: counter(h2counter) "." counter(h3counter) "\0000a0\0000a0"; + counter-increment: h3counter; + counter-reset: h4counter +} +h3.nocount:before { + content: none; + counter-increment: none; +} + +h4:before { + content: counter(h2counter) "." counter(h3counter) "." counter(h4counter) "\0000a0\0000a0"; + counter-increment: h4counter; +} +h4.nocount:before { + content: none; + counter-increment: none; +} + + +/* Apply styles to headings */ + +h1, .h1, h2, .h2, h3, .h3, .title { + margin-top: 30px; + margin-bottom: 10px; + font-weight: bold; + color: #555; +} + +h5, .h5, h6, .h6 { + margin-top: 15px; + margin-bottom: 10px; + font-weight: bold; + font-size: 14px; + text-transform: uppercase; +} + +h5, .h5 { + font-weight: bold; + text-transform: uppercase; +} + +h6, .h6 { + color: #787878; +} + +h1, .h1, .title { + font-size: 32px; +} + +h2, .h2 { + font-size: 22px; +} + +h3, .h3 { + font-size: 16px; +} + +h4, .h4 { + font-size: 14px; +} + +hr { + border-top: 1px solid #CCCCCC; +} + +#navrow1, #navrow2, #navrow3, #navrow4, #navrow5{ + border-bottom: 1px solid #EEEEEE; +} + +.adjust-right { +margin-left: 30px !important; +font-size: 1.15em !important; +} +.navbar{ + border: 0px solid #222 !important; + height: 150px; +} +table{ + white-space:pre-wrap !important; +} +/* + =========================== + */ + + +/* Sticky footer styles +-------------------------------------------------- */ +html, +body { + height: 100%; + /* The html and body elements cannot have any padding or margin. */ + + /* Reset paragraph numbering counter for h2 headings */ + counter-reset: h2counter; +} + +/* Wrapper for page content to push down footer */ +#wrap { + min-height: 100%; + height: auto; + /* Negative indent footer by its height */ + margin: 0 auto -60px; + /* Pad bottom by footer height */ + padding: 0 0 60px; +} + +/* Set the fixed height of the footer here */ +#footer { + font-size: 0.9em; + padding: 8px 0px; + background-color: #f5f5f5; +} + +.footer-row { + line-height: 44px; +} + +#footer > .container { + padding-left: 15px; + padding-right: 15px; +} + +.footer-follow-icon { + margin-left: 3px; + text-decoration: none !important; +} + +.footer-follow-icon img { + width: 20px; +} + +.footer-link { + padding-top: 5px; + display: inline-block; + color: #999999; + text-decoration: none; +} + +.footer-copyright { + text-align: center; +} + +address.footer { + text-align: center; +} + + +@media (min-width: 992px) { + .footer-row { + text-align: left; + } + + .footer-icons { + text-align: right; + } +} +@media (max-width: 991px) { + .footer-row { + text-align: center; + } + + .footer-icons { + text-align: center; + } +} + +/* DOXYGEN Code Styles +----------------------------------- */ + + +a.qindex { + font-weight: bold; +} + +a.qindexHL { + font-weight: bold; + background-color: #9CAFD4; + color: #ffffff; + border: 1px double #869DCA; +} + +.contents a.qindexHL:visited { + color: #ffffff; +} + +a.code, a.code:visited, a.line, a.line:visited { + color: #4665A2; +} + +a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { + color: #4665A2; +} + +/* @end */ + +dl.el { + margin-left: -1cm; +} + +pre.fragment { + padding: 15px; + margin: 25px 8px 25px 2px; + overflow: auto; + word-wrap: break-word; + font-size: 9pt; + line-height: 125%; + font-family: monospace, fixed; + font-size: 105%; + color: 333; + border: 1px solid #ccc; + background-color: #DFDFDF; +} + +div.fragment { + padding: 4px 6px; + margin: 4px 8px 4px 2px; + border: 1px solid #C4CFE5; +} + +div.line { + font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace; + font-size: 12px; + min-height: 13px; + line-height: 1.0; + text-wrap: unrestricted; + white-space: -moz-pre-wrap; /* Moz */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + white-space: pre-wrap; /* CSS3 */ + word-wrap: normal; /* IE 5.5+ */ + text-indent: -53px; + padding-left: 53px; + padding-bottom: 0px; + margin: 0px; + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} +div.line:hover{ + background-color: #FBFF00; +} + +div.line.glow { + background-color: cyan; + box-shadow: 0 0 10px cyan; +} + + +span.lineno { + padding-right: 4px; + text-align: right; + color:rgba(0,0,0,0.3); + border-right: 1px solid #EEE; + border-left: 1px solid #EEE; + background-color: #FFF; + white-space: pre; + font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace ; +} +span.lineno a { + background-color: #FAFAFA; + cursor:pointer; +} + +span.lineno a:hover { + background-color: #EFE200; + color: #1e1e1e; +} + +div.groupHeader { + margin-left: 16px; + margin-top: 12px; + font-weight: bold; +} + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +/* @group Code Colorization */ + +span.keyword { + color: #008000 +} + +span.keywordtype { + color: #604020 +} + +span.keywordflow { + color: #e08000 +} + +span.comment { + color: #800000 +} + +span.preprocessor { + color: #806020 +} + +span.stringliteral { + color: #002080 +} + +span.charliteral { + color: #008080 +} + +span.vhdldigit { + color: #ff00ff +} + +span.vhdlchar { + color: #000000 +} + +span.vhdlkeyword { + color: #700070 +} + +span.vhdllogic { + color: #ff0000 +} + +blockquote { + background-color: #F7F8FB; + border-left: 2px solid #9CAFD4; + margin: 0 24px 0 4px; + padding: 0 12px 0 16px; +} + +/*---------------- Search Box */ + +#search-box { + margin: 10px 0px; +} +#search-box .close { + display: none; + position: absolute; + right: 0px; + padding: 6px 12px; + z-index: 5; +} + +/*---------------- Search results window */ + +#search-results-window { + display: none; +} + +iframe#MSearchResults { + width: 100%; + height: 15em; +} + +.SRChildren { + padding-left: 3ex; padding-bottom: .5em +} +.SRPage .SRChildren { + display: none; +} +a.SRScope { + display: block; +} +a.SRSymbol:focus, a.SRSymbol:active, +a.SRScope:focus, a.SRScope:active { + text-decoration: underline; +} +span.SRScope { + padding-left: 4px; +} +.SRResult { + display: none; +} + +/* class and file list */ +.directory .icona, +.directory .arrow { + height: auto; +} +.directory .icona .icon { + height: 16px; +} +.directory .icondoc { + background-position: 0px 0px; + height: 20px; +} +.directory .iconfopen { + background-position: 0px 0px; +} +.directory td.entry { + padding: 7px 8px 6px 8px; +} + +.table > tbody > tr > td.memSeparator { + line-height: 0; + .table-hover; + +} + +.memItemLeft, .memTemplItemLeft { + white-space: normal; +} + +/* enumerations */ +.panel-body thead > tr { + background-color: #e0e0e0; +} + +/* todo lists */ +.todoname, +.todoname a { + font-weight: bold; +} + +/* Class title */ +.summary { + margin-top: 25px; +} +.page-header { + margin: 20px 0px !important; +} +.page-header .title { + display: inline-block; +} +.page-header .pull-right { + margin-top: 0.3em; + margin-left: 0.5em; +} +.page-header .label { + font-size: 50%; +} diff --git a/doc/doxygen/styling/doxy-boot.js.in b/doc/doxygen/styling/doxy-boot.js.in new file mode 100644 index 00000000000..ac0b41f493e --- /dev/null +++ b/doc/doxygen/styling/doxy-boot.js.in @@ -0,0 +1,271 @@ +$( document ).ready(function() { + + $("div.headertitle").addClass("page-header"); + $("div.title").addClass("h1"); + + $('li > a[href="index.html"] > span').before("<i class='fa fa-cog'></i> "); + $('li > a[href="modules.html"] > span').before("<i class='fa fa-square'></i> "); + $('li > a[href="namespaces.html"] > span').before("<i class='fa fa-bars'></i> "); + $('li > a[href="annotated.html"] > span').before("<i class='fa fa-list-ul'></i> "); + $('li > a[href="classes.html"] > span').before("<i class='fa fa-book'></i> "); + $('li > a[href="inherits.html"] > span').before("<i class='fa fa-sitemap'></i> "); + $('li > a[href="functions.html"] > span').before("<i class='fa fa-list'></i> "); + $('li > a[href="functions_func.html"] > span').before("<i class='fa fa-list'></i> "); + $('li > a[href="functions_vars.html"] > span').before("<i class='fa fa-list'></i> "); + $('li > a[href="functions_enum.html"] > span').before("<i class='fa fa-list'></i> "); + $('li > a[href="functions_eval.html"] > span').before("<i class='fa fa-list'></i> "); + $('img[src="ftv2ns.png"]').replaceWith('<span class="label label-danger">N</span> '); + $('img[src="ftv2cl.png"]').replaceWith('<span class="label label-danger">C</span> '); + + $("ul.tablist").addClass("nav nav-pills nav-justified"); + $("ul.tablist").css("margin-top", "0.5em"); + $("ul.tablist").css("margin-bottom", "0.5em"); + $("li.current").addClass("active"); + $("iframe").attr("scrolling", "yes"); + + $("#nav-path > ul").addClass("breadcrumb"); + + $("table.params").addClass("table"); + $("div.ingroups").wrapInner("<span class='text-nowrap'></span>"); + $("div.levels").css("margin", "0.5em"); + $("div.levels > span").addClass("btn btn-default btn-xs"); + $("div.levels > span").css("margin-right", "0.25em"); + + $("table.directory").addClass("table table-striped"); + $("div.summary > a").addClass("btn btn-default btn-xs"); + $("table.fieldtable").addClass("table"); + $(".fragment").addClass("well"); + $(".memitem").addClass("panel panel-default"); + $(".memproto").addClass("panel-heading"); + $(".memdoc").addClass("panel-body"); + $("span.mlabel").addClass("label label-info"); + + $("table.memberdecls").addClass("table"); + $("[class^=memitem]").addClass("active"); + + $("div.ah").addClass("btn btn-default"); + $("span.mlabels").addClass("pull-right"); + $("table.mlabels").css("width", "100%") + $("td.mlabels-right").addClass("pull-right"); + + $("div.ttc").addClass("panel panel-primary"); + $("div.ttname").addClass("panel-heading"); + $("div.ttname a").css("color", 'white'); + $("div.ttdef,div.ttdoc,div.ttdeci").addClass("panel-body"); + + $('div.fragment.well div.line:first').css('margin-top', '2px'); + $('div.fragment.well div.line:last').css('margin-bottom', '2px'); + + $('table.doxtable').removeClass('doxtable').addClass('table table-striped table-bordered').each(function(){ + $(this).prepend('<thead></thead>'); + $(this).find('tbody > tr:first').prependTo($(this).find('thead')); + + $(this).find('td > span.success').parent().addClass('success'); + $(this).find('td > span.warning').parent().addClass('warning'); + $(this).find('td > span.danger').parent().addClass('danger'); + }); + + + + if($('div.fragment.well div.ttc').length > 0) + { + $('div.fragment.well div.line:first').parent().removeClass('fragment well'); + } + + $('table.memberdecls').find('.memItemRight').each(function(){ + $(this).contents().appendTo($(this).siblings('.memItemLeft')); + $(this).siblings('.memItemLeft').attr('align', 'left'); + }); + + $('table.memberdecls').find('.memTemplItemRight').each(function(){ + $(this).contents().appendTo($(this).siblings('.memTemplItemLeft')); + $(this).siblings('.memTemplItemLeft').attr('align', 'left'); + }); + + function getOriginalWidthOfImg(img_element) { + var t = new Image(); + t.src = (img_element.getAttribute ? img_element.getAttribute("src") : false) || img_element.src; + return t.width; + } + + $('div.dyncontent').find('img').each(function(){ + if(getOriginalWidthOfImg($(this)[0]) > $('#content>div.container').width()) + $(this).css('width', '100%'); + }); + + + /* responsive search box */ + $('#MSearchBox').parent().remove(); + + var nav_container = $('<div class="row"></div>'); + $('#navrow1').parent().prepend(nav_container); + + var left_nav = $('<div class="col-md-9"></div>'); + for (i = 0; i < 6; i++) { + var navrow = $('#navrow' + i + ' > ul.tablist').detach(); + left_nav.append(navrow); + $('#navrow' + i).remove(); + } + var right_nav = $('<div class="col-md-3"></div>').append('\ + <div id="search-box" class="input-group">\ + <div class="input-group-btn">\ + <button aria-expanded="false" type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">\ + <span class="glyphicon glyphicon-search"></span> <span class="caret"></span>\ + </button>\ + <ul class="dropdown-menu">\ + </ul>\ + </div>\ + <button id="search-close" type="button" class="close" aria-label="Close"><span aria-hidden="true">×</span></button>\ + <input id="search-field" class="form-control" accesskey="S" onkeydown="searchBox.OnSearchFieldChange(event);" placeholder="Search ..." type="text">\ + </div>'); + $(nav_container).append(left_nav); + $(nav_container).append(right_nav); + + $('#MSearchSelectWindow .SelectionMark').remove(); + var search_selectors = $('#MSearchSelectWindow .SelectItem'); + for (var i = 0; i < search_selectors.length; i += 1) { + var element_a = $('<a href="#"></a>').text($(search_selectors[i]).text()); + + element_a.click(function(){ + $('#search-box .dropdown-menu li').removeClass('active'); + $(this).parent().addClass('active'); + searchBox.OnSelectItem($('#search-box li a').index(this)); + searchBox.Search(); + return false; + }); + + var element = $('<li></li>').append(element_a); + $('#search-box .dropdown-menu').append(element); + } + $('#MSearchSelectWindow').remove(); + + $('#search-box .close').click(function (){ + searchBox.CloseResultsWindow(); + }); + + $('body').append('<div id="MSearchClose"></div>'); + $('body').append('<div id="MSearchBox"></div>'); + $('body').append('<div id="MSearchSelectWindow"></div>'); + + searchBox.searchLabel = ''; + searchBox.DOMSearchField = function() { + return document.getElementById("search-field"); + } + searchBox.DOMSearchClose = function(){ + return document.getElementById("search-close"); + } + + + /* search results */ + var results_iframe = $('#MSearchResults').detach(); + $('#MSearchResultsWindow') + .attr('id', 'search-results-window') + .addClass('panel panel-default') + .append( + '<div class="panel-heading">\ + <h3 class="panel-title">Search Results</h3>\ + </div>\ + <div class="panel-body"></div>' + ); + $('#search-results-window .panel-body').append(results_iframe); + + searchBox.DOMPopupSearchResultsWindow = function() { + return document.getElementById("search-results-window"); + } + + function update_search_results_window() { + $('#search-results-window').removeClass('panel-default panel-success panel-warning panel-danger') + var status = $('#MSearchResults').contents().find('.SRStatus:visible'); + if (status.length > 0) { + switch(status.attr('id')) { + case 'Loading': + case 'Searching': + $('#search-results-window').addClass('panel-warning'); + break; + case 'NoMatches': + $('#search-results-window').addClass('panel-danger'); + break; + default: + $('#search-results-window').addClass('panel-default'); + } + } else { + $('#search-results-window').addClass('panel-success'); + } + } + $('#MSearchResults').load(function() { + $('#MSearchResults').contents().find('link[href="search.css"]').attr('href','../doxygen.css'); + $('#MSearchResults').contents().find('head').append( + '<link href="../customdoxygen.css" rel="stylesheet" type="text/css">'); + + update_search_results_window(); + + // detect status changes (only for search with external search backend) + var observer = new MutationObserver(function(mutations) { + update_search_results_window(); + }); + var config = { attributes: true}; + + var targets = $('#MSearchResults').contents().find('.SRStatus'); + for (i = 0; i < targets.length; i++) { + observer.observe(targets[i], config); + } + }); + + + /* enumerations */ + $('table.fieldtable').removeClass('fieldtable').addClass('table table-striped table-bordered').each(function(){ + $(this).prepend('<thead></thead>'); + $(this).find('tbody > tr:first').prependTo($(this).find('thead')); + + $(this).find('td > span.success').parent().addClass('success'); + $(this).find('td > span.warning').parent().addClass('warning'); + $(this).find('td > span.danger').parent().addClass('danger'); + }); + + /* todo list */ + var todoelements = $('.contents > .textblock > dl.reflist > dt, .contents > .textblock > dl.reflist > dd'); + for (var i = 0; i < todoelements.length; i += 2) { + $('.contents > .textblock').append( + '<div class="panel panel-default active">' + + "<div class=\"panel-heading todoname\">" + $(todoelements[i]).html() + "</div>" + + "<div class=\"panel-body\">" + $(todoelements[i+1]).html() + "</div>" + + '</div>'); + } + $('.contents > .textblock > dl').remove(); + + + $(".memitem").removeClass('memitem'); + $(".memproto").removeClass('memproto'); + $(".memdoc").removeClass('memdoc'); + $("span.mlabel").removeClass('mlabel'); + $("table.memberdecls").removeClass('memberdecls'); + $("[class^=memitem]").removeClass('memitem'); + $("span.mlabels").removeClass('mlabels'); + $("table.mlabels").removeClass('mlabels'); + $("td.mlabels-right").removeClass('mlabels-right'); + $(".navpath").removeClass('navpath'); + $("li.navelem").removeClass('navelem'); + $("a.el").removeClass('el'); + $("div.ah").removeClass('ah'); + $("div.header").removeClass("header"); + + $('.mdescLeft').each(function(){ + if($(this).html()==" ") { + $(this).siblings('.mdescRight').attr('colspan', 2); + $(this).remove(); + } + }); + $('td.memItemLeft').each(function(){ + if($(this).siblings('.memItemRight').html()=="") { + $(this).attr('colspan', 2); + $(this).siblings('.memItemRight').remove(); + } + }); + $('td.memTemplItemLeft').each(function(){ + if($(this).siblings('.memTemplItemRight').html()=="") { + $(this).attr('colspan', 2); + $(this).siblings('.memTemplItemRight').remove(); + } + }); + searchBox.CloseResultsWindow(); +}); diff --git a/doc/doxygen/styling/footer.html.in b/doc/doxygen/styling/footer.html.in new file mode 100644 index 00000000000..0a842f54f69 --- /dev/null +++ b/doc/doxygen/styling/footer.html.in @@ -0,0 +1,24 @@ +<!-- HTML footer for doxygen 1.8.8--> +<!-- start footer part --> +<!--BEGIN GENERATE_TREEVIEW--> +<div id="nav-path" class="navpath"><!-- id is needed for treeview function! --> + <ul> + $navpath + <li class="footer">$generatedby + <a href="http://www.doxygen.org/index.html"> + <img class="footer" src="$relpath^doxygen.png" alt="doxygen"/></a> $doxygenversion </li> + </ul> +</div> +<!--END GENERATE_TREEVIEW--> +</div> +</div> +</div> +</div> +</div> +<!--BEGIN !GENERATE_TREEVIEW--> +<hr class="footer"/><address class="footer"><small> +$generatedby <a href="http://www.doxygen.org/index.html">Doxygen</a> $doxygenversion | Using theme <a href="https://github.com/Velron/doxygen-bootstrapped">Doxygen Bootstrapped</a> +</small></address> +<!--END !GENERATE_TREEVIEW--> +</body> +</html> diff --git a/doc/doxygen/styling/glyphicons-halflings-regular.eot b/doc/doxygen/styling/glyphicons-halflings-regular.eot new file mode 100644 index 0000000000000000000000000000000000000000..b93a4953fff68df523aa7656497ee339d6026d64 GIT binary patch literal 20127 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 literal 0 HcmV?d00001 diff --git a/doc/doxygen/styling/glyphicons-halflings-regular.svg b/doc/doxygen/styling/glyphicons-halflings-regular.svg new file mode 100644 index 00000000000..94fb5490a2e --- /dev/null +++ b/doc/doxygen/styling/glyphicons-halflings-regular.svg @@ -0,0 +1,288 @@ +<?xml version="1.0" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" > +<svg xmlns="http://www.w3.org/2000/svg"> +<metadata></metadata> +<defs> +<font id="glyphicons_halflingsregular" horiz-adv-x="1200" > +<font-face units-per-em="1200" ascent="960" descent="-240" /> +<missing-glyph horiz-adv-x="500" /> +<glyph horiz-adv-x="0" /> +<glyph horiz-adv-x="400" /> +<glyph unicode=" " /> +<glyph unicode="*" d="M600 1100q15 0 34 -1.5t30 -3.5l11 -1q10 -2 17.5 -10.5t7.5 -18.5v-224l158 158q7 7 18 8t19 -6l106 -106q7 -8 6 -19t-8 -18l-158 -158h224q10 0 18.5 -7.5t10.5 -17.5q6 -41 6 -75q0 -15 -1.5 -34t-3.5 -30l-1 -11q-2 -10 -10.5 -17.5t-18.5 -7.5h-224l158 -158 q7 -7 8 -18t-6 -19l-106 -106q-8 -7 -19 -6t-18 8l-158 158v-224q0 -10 -7.5 -18.5t-17.5 -10.5q-41 -6 -75 -6q-15 0 -34 1.5t-30 3.5l-11 1q-10 2 -17.5 10.5t-7.5 18.5v224l-158 -158q-7 -7 -18 -8t-19 6l-106 106q-7 8 -6 19t8 18l158 158h-224q-10 0 -18.5 7.5 t-10.5 17.5q-6 41 -6 75q0 15 1.5 34t3.5 30l1 11q2 10 10.5 17.5t18.5 7.5h224l-158 158q-7 7 -8 18t6 19l106 106q8 7 19 6t18 -8l158 -158v224q0 10 7.5 18.5t17.5 10.5q41 6 75 6z" /> +<glyph unicode="+" d="M450 1100h200q21 0 35.5 -14.5t14.5 -35.5v-350h350q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-350v-350q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v350h-350q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5 h350v350q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode=" " /> +<glyph unicode="¥" d="M825 1100h250q10 0 12.5 -5t-5.5 -13l-364 -364q-6 -6 -11 -18h268q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-125v-100h275q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-125v-174q0 -11 -7.5 -18.5t-18.5 -7.5h-148q-11 0 -18.5 7.5t-7.5 18.5v174 h-275q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h125v100h-275q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h118q-5 12 -11 18l-364 364q-8 8 -5.5 13t12.5 5h250q25 0 43 -18l164 -164q8 -8 18 -8t18 8l164 164q18 18 43 18z" /> +<glyph unicode=" " horiz-adv-x="650" /> +<glyph unicode=" " horiz-adv-x="1300" /> +<glyph unicode=" " horiz-adv-x="650" /> +<glyph unicode=" " horiz-adv-x="1300" /> +<glyph unicode=" " horiz-adv-x="433" /> +<glyph unicode=" " horiz-adv-x="325" /> +<glyph unicode=" " horiz-adv-x="216" /> +<glyph unicode=" " horiz-adv-x="216" /> +<glyph unicode=" " horiz-adv-x="162" /> +<glyph unicode=" " horiz-adv-x="260" /> +<glyph unicode=" " horiz-adv-x="72" /> +<glyph unicode=" " horiz-adv-x="260" /> +<glyph unicode=" " horiz-adv-x="325" /> +<glyph unicode="€" d="M744 1198q242 0 354 -189q60 -104 66 -209h-181q0 45 -17.5 82.5t-43.5 61.5t-58 40.5t-60.5 24t-51.5 7.5q-19 0 -40.5 -5.5t-49.5 -20.5t-53 -38t-49 -62.5t-39 -89.5h379l-100 -100h-300q-6 -50 -6 -100h406l-100 -100h-300q9 -74 33 -132t52.5 -91t61.5 -54.5t59 -29 t47 -7.5q22 0 50.5 7.5t60.5 24.5t58 41t43.5 61t17.5 80h174q-30 -171 -128 -278q-107 -117 -274 -117q-206 0 -324 158q-36 48 -69 133t-45 204h-217l100 100h112q1 47 6 100h-218l100 100h134q20 87 51 153.5t62 103.5q117 141 297 141z" /> +<glyph unicode="₽" d="M428 1200h350q67 0 120 -13t86 -31t57 -49.5t35 -56.5t17 -64.5t6.5 -60.5t0.5 -57v-16.5v-16.5q0 -36 -0.5 -57t-6.5 -61t-17 -65t-35 -57t-57 -50.5t-86 -31.5t-120 -13h-178l-2 -100h288q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-138v-175q0 -11 -5.5 -18 t-15.5 -7h-149q-10 0 -17.5 7.5t-7.5 17.5v175h-267q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h117v100h-267q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h117v475q0 10 7.5 17.5t17.5 7.5zM600 1000v-300h203q64 0 86.5 33t22.5 119q0 84 -22.5 116t-86.5 32h-203z" /> +<glyph unicode="−" d="M250 700h800q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="⌛" d="M1000 1200v-150q0 -21 -14.5 -35.5t-35.5 -14.5h-50v-100q0 -91 -49.5 -165.5t-130.5 -109.5q81 -35 130.5 -109.5t49.5 -165.5v-150h50q21 0 35.5 -14.5t14.5 -35.5v-150h-800v150q0 21 14.5 35.5t35.5 14.5h50v150q0 91 49.5 165.5t130.5 109.5q-81 35 -130.5 109.5 t-49.5 165.5v100h-50q-21 0 -35.5 14.5t-14.5 35.5v150h800zM400 1000v-100q0 -60 32.5 -109.5t87.5 -73.5q28 -12 44 -37t16 -55t-16 -55t-44 -37q-55 -24 -87.5 -73.5t-32.5 -109.5v-150h400v150q0 60 -32.5 109.5t-87.5 73.5q-28 12 -44 37t-16 55t16 55t44 37 q55 24 87.5 73.5t32.5 109.5v100h-400z" /> +<glyph unicode="◼" horiz-adv-x="500" d="M0 0z" /> +<glyph unicode="☁" d="M503 1089q110 0 200.5 -59.5t134.5 -156.5q44 14 90 14q120 0 205 -86.5t85 -206.5q0 -121 -85 -207.5t-205 -86.5h-750q-79 0 -135.5 57t-56.5 137q0 69 42.5 122.5t108.5 67.5q-2 12 -2 37q0 153 108 260.5t260 107.5z" /> +<glyph unicode="⛺" d="M774 1193.5q16 -9.5 20.5 -27t-5.5 -33.5l-136 -187l467 -746h30q20 0 35 -18.5t15 -39.5v-42h-1200v42q0 21 15 39.5t35 18.5h30l468 746l-135 183q-10 16 -5.5 34t20.5 28t34 5.5t28 -20.5l111 -148l112 150q9 16 27 20.5t34 -5zM600 200h377l-182 112l-195 534v-646z " /> +<glyph unicode="✉" d="M25 1100h1150q10 0 12.5 -5t-5.5 -13l-564 -567q-8 -8 -18 -8t-18 8l-564 567q-8 8 -5.5 13t12.5 5zM18 882l264 -264q8 -8 8 -18t-8 -18l-264 -264q-8 -8 -13 -5.5t-5 12.5v550q0 10 5 12.5t13 -5.5zM918 618l264 264q8 8 13 5.5t5 -12.5v-550q0 -10 -5 -12.5t-13 5.5 l-264 264q-8 8 -8 18t8 18zM818 482l364 -364q8 -8 5.5 -13t-12.5 -5h-1150q-10 0 -12.5 5t5.5 13l364 364q8 8 18 8t18 -8l164 -164q8 -8 18 -8t18 8l164 164q8 8 18 8t18 -8z" /> +<glyph unicode="✏" d="M1011 1210q19 0 33 -13l153 -153q13 -14 13 -33t-13 -33l-99 -92l-214 214l95 96q13 14 32 14zM1013 800l-615 -614l-214 214l614 614zM317 96l-333 -112l110 335z" /> +<glyph unicode="" d="M700 650v-550h250q21 0 35.5 -14.5t14.5 -35.5v-50h-800v50q0 21 14.5 35.5t35.5 14.5h250v550l-500 550h1200z" /> +<glyph unicode="" d="M368 1017l645 163q39 15 63 0t24 -49v-831q0 -55 -41.5 -95.5t-111.5 -63.5q-79 -25 -147 -4.5t-86 75t25.5 111.5t122.5 82q72 24 138 8v521l-600 -155v-606q0 -42 -44 -90t-109 -69q-79 -26 -147 -5.5t-86 75.5t25.5 111.5t122.5 82.5q72 24 138 7v639q0 38 14.5 59 t53.5 34z" /> +<glyph unicode="" d="M500 1191q100 0 191 -39t156.5 -104.5t104.5 -156.5t39 -191l-1 -2l1 -5q0 -141 -78 -262l275 -274q23 -26 22.5 -44.5t-22.5 -42.5l-59 -58q-26 -20 -46.5 -20t-39.5 20l-275 274q-119 -77 -261 -77l-5 1l-2 -1q-100 0 -191 39t-156.5 104.5t-104.5 156.5t-39 191 t39 191t104.5 156.5t156.5 104.5t191 39zM500 1022q-88 0 -162 -43t-117 -117t-43 -162t43 -162t117 -117t162 -43t162 43t117 117t43 162t-43 162t-117 117t-162 43z" /> +<glyph unicode="" d="M649 949q48 68 109.5 104t121.5 38.5t118.5 -20t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-150 152.5t-126.5 127.5t-93.5 124.5t-33.5 117.5q0 64 28 123t73 100.5t104 64t119 20 t120.5 -38.5t104.5 -104z" /> +<glyph unicode="" d="M407 800l131 353q7 19 17.5 19t17.5 -19l129 -353h421q21 0 24 -8.5t-14 -20.5l-342 -249l130 -401q7 -20 -0.5 -25.5t-24.5 6.5l-343 246l-342 -247q-17 -12 -24.5 -6.5t-0.5 25.5l130 400l-347 251q-17 12 -14 20.5t23 8.5h429z" /> +<glyph unicode="" d="M407 800l131 353q7 19 17.5 19t17.5 -19l129 -353h421q21 0 24 -8.5t-14 -20.5l-342 -249l130 -401q7 -20 -0.5 -25.5t-24.5 6.5l-343 246l-342 -247q-17 -12 -24.5 -6.5t-0.5 25.5l130 400l-347 251q-17 12 -14 20.5t23 8.5h429zM477 700h-240l197 -142l-74 -226 l193 139l195 -140l-74 229l192 140h-234l-78 211z" /> +<glyph unicode="" d="M600 1200q124 0 212 -88t88 -212v-250q0 -46 -31 -98t-69 -52v-75q0 -10 6 -21.5t15 -17.5l358 -230q9 -5 15 -16.5t6 -21.5v-93q0 -10 -7.5 -17.5t-17.5 -7.5h-1150q-10 0 -17.5 7.5t-7.5 17.5v93q0 10 6 21.5t15 16.5l358 230q9 6 15 17.5t6 21.5v75q-38 0 -69 52 t-31 98v250q0 124 88 212t212 88z" /> +<glyph unicode="" d="M25 1100h1150q10 0 17.5 -7.5t7.5 -17.5v-1050q0 -10 -7.5 -17.5t-17.5 -7.5h-1150q-10 0 -17.5 7.5t-7.5 17.5v1050q0 10 7.5 17.5t17.5 7.5zM100 1000v-100h100v100h-100zM875 1000h-550q-10 0 -17.5 -7.5t-7.5 -17.5v-350q0 -10 7.5 -17.5t17.5 -7.5h550 q10 0 17.5 7.5t7.5 17.5v350q0 10 -7.5 17.5t-17.5 7.5zM1000 1000v-100h100v100h-100zM100 800v-100h100v100h-100zM1000 800v-100h100v100h-100zM100 600v-100h100v100h-100zM1000 600v-100h100v100h-100zM875 500h-550q-10 0 -17.5 -7.5t-7.5 -17.5v-350q0 -10 7.5 -17.5 t17.5 -7.5h550q10 0 17.5 7.5t7.5 17.5v350q0 10 -7.5 17.5t-17.5 7.5zM100 400v-100h100v100h-100zM1000 400v-100h100v100h-100zM100 200v-100h100v100h-100zM1000 200v-100h100v100h-100z" /> +<glyph unicode="" d="M50 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM650 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400 q0 21 14.5 35.5t35.5 14.5zM50 500h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM650 500h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M50 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200 q0 21 14.5 35.5t35.5 14.5zM850 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200 q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM850 700h200q21 0 35.5 -14.5t14.5 -35.5v-200 q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 300h200 q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM850 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5 t35.5 14.5z" /> +<glyph unicode="" d="M50 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 1100h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v200 q0 21 14.5 35.5t35.5 14.5zM50 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 700h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700 q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 300h700q21 0 35.5 -14.5t14.5 -35.5v-200 q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M465 477l571 571q8 8 18 8t17 -8l177 -177q8 -7 8 -17t-8 -18l-783 -784q-7 -8 -17.5 -8t-17.5 8l-384 384q-8 8 -8 18t8 17l177 177q7 8 17 8t18 -8l171 -171q7 -7 18 -7t18 7z" /> +<glyph unicode="" d="M904 1083l178 -179q8 -8 8 -18.5t-8 -17.5l-267 -268l267 -268q8 -7 8 -17.5t-8 -18.5l-178 -178q-8 -8 -18.5 -8t-17.5 8l-268 267l-268 -267q-7 -8 -17.5 -8t-18.5 8l-178 178q-8 8 -8 18.5t8 17.5l267 268l-267 268q-8 7 -8 17.5t8 18.5l178 178q8 8 18.5 8t17.5 -8 l268 -267l268 268q7 7 17.5 7t18.5 -7z" /> +<glyph unicode="" d="M507 1177q98 0 187.5 -38.5t154.5 -103.5t103.5 -154.5t38.5 -187.5q0 -141 -78 -262l300 -299q8 -8 8 -18.5t-8 -18.5l-109 -108q-7 -8 -17.5 -8t-18.5 8l-300 299q-119 -77 -261 -77q-98 0 -188 38.5t-154.5 103t-103 154.5t-38.5 188t38.5 187.5t103 154.5 t154.5 103.5t188 38.5zM506.5 1023q-89.5 0 -165.5 -44t-120 -120.5t-44 -166t44 -165.5t120 -120t165.5 -44t166 44t120.5 120t44 165.5t-44 166t-120.5 120.5t-166 44zM425 900h150q10 0 17.5 -7.5t7.5 -17.5v-75h75q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5 t-17.5 -7.5h-75v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-75q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h75v75q0 10 7.5 17.5t17.5 7.5z" /> +<glyph unicode="" d="M507 1177q98 0 187.5 -38.5t154.5 -103.5t103.5 -154.5t38.5 -187.5q0 -141 -78 -262l300 -299q8 -8 8 -18.5t-8 -18.5l-109 -108q-7 -8 -17.5 -8t-18.5 8l-300 299q-119 -77 -261 -77q-98 0 -188 38.5t-154.5 103t-103 154.5t-38.5 188t38.5 187.5t103 154.5 t154.5 103.5t188 38.5zM506.5 1023q-89.5 0 -165.5 -44t-120 -120.5t-44 -166t44 -165.5t120 -120t165.5 -44t166 44t120.5 120t44 165.5t-44 166t-120.5 120.5t-166 44zM325 800h350q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-350q-10 0 -17.5 7.5 t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" /> +<glyph unicode="" d="M550 1200h100q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM800 975v166q167 -62 272 -209.5t105 -331.5q0 -117 -45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5 t-184.5 123t-123 184.5t-45.5 224q0 184 105 331.5t272 209.5v-166q-103 -55 -165 -155t-62 -220q0 -116 57 -214.5t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5q0 120 -62 220t-165 155z" /> +<glyph unicode="" d="M1025 1200h150q10 0 17.5 -7.5t7.5 -17.5v-1150q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v1150q0 10 7.5 17.5t17.5 7.5zM725 800h150q10 0 17.5 -7.5t7.5 -17.5v-750q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v750 q0 10 7.5 17.5t17.5 7.5zM425 500h150q10 0 17.5 -7.5t7.5 -17.5v-450q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v450q0 10 7.5 17.5t17.5 7.5zM125 300h150q10 0 17.5 -7.5t7.5 -17.5v-250q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5 v250q0 10 7.5 17.5t17.5 7.5z" /> +<glyph unicode="" d="M600 1174q33 0 74 -5l38 -152l5 -1q49 -14 94 -39l5 -2l134 80q61 -48 104 -105l-80 -134l3 -5q25 -44 39 -93l1 -6l152 -38q5 -43 5 -73q0 -34 -5 -74l-152 -38l-1 -6q-15 -49 -39 -93l-3 -5l80 -134q-48 -61 -104 -105l-134 81l-5 -3q-44 -25 -94 -39l-5 -2l-38 -151 q-43 -5 -74 -5q-33 0 -74 5l-38 151l-5 2q-49 14 -94 39l-5 3l-134 -81q-60 48 -104 105l80 134l-3 5q-25 45 -38 93l-2 6l-151 38q-6 42 -6 74q0 33 6 73l151 38l2 6q13 48 38 93l3 5l-80 134q47 61 105 105l133 -80l5 2q45 25 94 39l5 1l38 152q43 5 74 5zM600 815 q-89 0 -152 -63t-63 -151.5t63 -151.5t152 -63t152 63t63 151.5t-63 151.5t-152 63z" /> +<glyph unicode="" d="M500 1300h300q41 0 70.5 -29.5t29.5 -70.5v-100h275q10 0 17.5 -7.5t7.5 -17.5v-75h-1100v75q0 10 7.5 17.5t17.5 7.5h275v100q0 41 29.5 70.5t70.5 29.5zM500 1200v-100h300v100h-300zM1100 900v-800q0 -41 -29.5 -70.5t-70.5 -29.5h-700q-41 0 -70.5 29.5t-29.5 70.5 v800h900zM300 800v-700h100v700h-100zM500 800v-700h100v700h-100zM700 800v-700h100v700h-100zM900 800v-700h100v700h-100z" /> +<glyph unicode="" d="M18 618l620 608q8 7 18.5 7t17.5 -7l608 -608q8 -8 5.5 -13t-12.5 -5h-175v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v375h-300v-375q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v575h-175q-10 0 -12.5 5t5.5 13z" /> +<glyph unicode="" d="M600 1200v-400q0 -41 29.5 -70.5t70.5 -29.5h300v-650q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v1100q0 21 14.5 35.5t35.5 14.5h450zM1000 800h-250q-21 0 -35.5 14.5t-14.5 35.5v250z" /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM525 900h50q10 0 17.5 -7.5t7.5 -17.5v-275h175q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5z" /> +<glyph unicode="" d="M1300 0h-538l-41 400h-242l-41 -400h-538l431 1200h209l-21 -300h162l-20 300h208zM515 800l-27 -300h224l-27 300h-170z" /> +<glyph unicode="" d="M550 1200h200q21 0 35.5 -14.5t14.5 -35.5v-450h191q20 0 25.5 -11.5t-7.5 -27.5l-327 -400q-13 -16 -32 -16t-32 16l-327 400q-13 16 -7.5 27.5t25.5 11.5h191v450q0 21 14.5 35.5t35.5 14.5zM1125 400h50q10 0 17.5 -7.5t7.5 -17.5v-350q0 -10 -7.5 -17.5t-17.5 -7.5 h-1050q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h50q10 0 17.5 -7.5t7.5 -17.5v-175h900v175q0 10 7.5 17.5t17.5 7.5z" /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM525 900h150q10 0 17.5 -7.5t7.5 -17.5v-275h137q21 0 26 -11.5t-8 -27.5l-223 -275q-13 -16 -32 -16t-32 16l-223 275q-13 16 -8 27.5t26 11.5h137v275q0 10 7.5 17.5t17.5 7.5z " /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM632 914l223 -275q13 -16 8 -27.5t-26 -11.5h-137v-275q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v275h-137q-21 0 -26 11.5t8 27.5l223 275q13 16 32 16 t32 -16z" /> +<glyph unicode="" d="M225 1200h750q10 0 19.5 -7t12.5 -17l186 -652q7 -24 7 -49v-425q0 -12 -4 -27t-9 -17q-12 -6 -37 -6h-1100q-12 0 -27 4t-17 8q-6 13 -6 38l1 425q0 25 7 49l185 652q3 10 12.5 17t19.5 7zM878 1000h-556q-10 0 -19 -7t-11 -18l-87 -450q-2 -11 4 -18t16 -7h150 q10 0 19.5 -7t11.5 -17l38 -152q2 -10 11.5 -17t19.5 -7h250q10 0 19.5 7t11.5 17l38 152q2 10 11.5 17t19.5 7h150q10 0 16 7t4 18l-87 450q-2 11 -11 18t-19 7z" /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM540 820l253 -190q17 -12 17 -30t-17 -30l-253 -190q-16 -12 -28 -6.5t-12 26.5v400q0 21 12 26.5t28 -6.5z" /> +<glyph unicode="" d="M947 1060l135 135q7 7 12.5 5t5.5 -13v-362q0 -10 -7.5 -17.5t-17.5 -7.5h-362q-11 0 -13 5.5t5 12.5l133 133q-109 76 -238 76q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5h150q0 -117 -45.5 -224 t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5q192 0 347 -117z" /> +<glyph unicode="" d="M947 1060l135 135q7 7 12.5 5t5.5 -13v-361q0 -11 -7.5 -18.5t-18.5 -7.5h-361q-11 0 -13 5.5t5 12.5l134 134q-110 75 -239 75q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5h-150q0 117 45.5 224t123 184.5t184.5 123t224 45.5q192 0 347 -117zM1027 600h150 q0 -117 -45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5q-192 0 -348 118l-134 -134q-7 -8 -12.5 -5.5t-5.5 12.5v360q0 11 7.5 18.5t18.5 7.5h360q10 0 12.5 -5.5t-5.5 -12.5l-133 -133q110 -76 240 -76q116 0 214.5 57t155.5 155.5t57 214.5z" /> +<glyph unicode="" d="M125 1200h1050q10 0 17.5 -7.5t7.5 -17.5v-1150q0 -10 -7.5 -17.5t-17.5 -7.5h-1050q-10 0 -17.5 7.5t-7.5 17.5v1150q0 10 7.5 17.5t17.5 7.5zM1075 1000h-850q-10 0 -17.5 -7.5t-7.5 -17.5v-850q0 -10 7.5 -17.5t17.5 -7.5h850q10 0 17.5 7.5t7.5 17.5v850 q0 10 -7.5 17.5t-17.5 7.5zM325 900h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 900h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 700h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 700h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 500h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 500h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 300h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 300h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5z" /> +<glyph unicode="" d="M900 800v200q0 83 -58.5 141.5t-141.5 58.5h-300q-82 0 -141 -59t-59 -141v-200h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-600q0 -41 29.5 -70.5t70.5 -29.5h900q41 0 70.5 29.5t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5h-100zM400 800v150q0 21 15 35.5t35 14.5h200 q20 0 35 -14.5t15 -35.5v-150h-300z" /> +<glyph unicode="" d="M125 1100h50q10 0 17.5 -7.5t7.5 -17.5v-1075h-100v1075q0 10 7.5 17.5t17.5 7.5zM1075 1052q4 0 9 -2q16 -6 16 -23v-421q0 -6 -3 -12q-33 -59 -66.5 -99t-65.5 -58t-56.5 -24.5t-52.5 -6.5q-26 0 -57.5 6.5t-52.5 13.5t-60 21q-41 15 -63 22.5t-57.5 15t-65.5 7.5 q-85 0 -160 -57q-7 -5 -15 -5q-6 0 -11 3q-14 7 -14 22v438q22 55 82 98.5t119 46.5q23 2 43 0.5t43 -7t32.5 -8.5t38 -13t32.5 -11q41 -14 63.5 -21t57 -14t63.5 -7q103 0 183 87q7 8 18 8z" /> +<glyph unicode="" d="M600 1175q116 0 227 -49.5t192.5 -131t131 -192.5t49.5 -227v-300q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v300q0 127 -70.5 231.5t-184.5 161.5t-245 57t-245 -57t-184.5 -161.5t-70.5 -231.5v-300q0 -10 -7.5 -17.5t-17.5 -7.5h-50 q-10 0 -17.5 7.5t-7.5 17.5v300q0 116 49.5 227t131 192.5t192.5 131t227 49.5zM220 500h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14v460q0 8 6 14t14 6zM820 500h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14v460 q0 8 6 14t14 6z" /> +<glyph unicode="" d="M321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM900 668l120 120q7 7 17 7t17 -7l34 -34q7 -7 7 -17t-7 -17l-120 -120l120 -120q7 -7 7 -17 t-7 -17l-34 -34q-7 -7 -17 -7t-17 7l-120 119l-120 -119q-7 -7 -17 -7t-17 7l-34 34q-7 7 -7 17t7 17l119 120l-119 120q-7 7 -7 17t7 17l34 34q7 8 17 8t17 -8z" /> +<glyph unicode="" d="M321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM766 900h4q10 -1 16 -10q96 -129 96 -290q0 -154 -90 -281q-6 -9 -17 -10l-3 -1q-9 0 -16 6 l-29 23q-7 7 -8.5 16.5t4.5 17.5q72 103 72 229q0 132 -78 238q-6 8 -4.5 18t9.5 17l29 22q7 5 15 5z" /> +<glyph unicode="" d="M967 1004h3q11 -1 17 -10q135 -179 135 -396q0 -105 -34 -206.5t-98 -185.5q-7 -9 -17 -10h-3q-9 0 -16 6l-42 34q-8 6 -9 16t5 18q111 150 111 328q0 90 -29.5 176t-84.5 157q-6 9 -5 19t10 16l42 33q7 5 15 5zM321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5 t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM766 900h4q10 -1 16 -10q96 -129 96 -290q0 -154 -90 -281q-6 -9 -17 -10l-3 -1q-9 0 -16 6l-29 23q-7 7 -8.5 16.5t4.5 17.5q72 103 72 229q0 132 -78 238 q-6 8 -4.5 18.5t9.5 16.5l29 22q7 5 15 5z" /> +<glyph unicode="" d="M500 900h100v-100h-100v-100h-400v-100h-100v600h500v-300zM1200 700h-200v-100h200v-200h-300v300h-200v300h-100v200h600v-500zM100 1100v-300h300v300h-300zM800 1100v-300h300v300h-300zM300 900h-100v100h100v-100zM1000 900h-100v100h100v-100zM300 500h200v-500 h-500v500h200v100h100v-100zM800 300h200v-100h-100v-100h-200v100h-100v100h100v200h-200v100h300v-300zM100 400v-300h300v300h-300zM300 200h-100v100h100v-100zM1200 200h-100v100h100v-100zM700 0h-100v100h100v-100zM1200 0h-300v100h300v-100z" /> +<glyph unicode="" d="M100 200h-100v1000h100v-1000zM300 200h-100v1000h100v-1000zM700 200h-200v1000h200v-1000zM900 200h-100v1000h100v-1000zM1200 200h-200v1000h200v-1000zM400 0h-300v100h300v-100zM600 0h-100v91h100v-91zM800 0h-100v91h100v-91zM1100 0h-200v91h200v-91z" /> +<glyph unicode="" d="M500 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-682 682l1 475q0 10 7.5 17.5t17.5 7.5h474zM319.5 1024.5q-29.5 29.5 -71 29.5t-71 -29.5t-29.5 -71.5t29.5 -71.5t71 -29.5t71 29.5t29.5 71.5t-29.5 71.5z" /> +<glyph unicode="" d="M500 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-682 682l1 475q0 10 7.5 17.5t17.5 7.5h474zM800 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-56 56l424 426l-700 700h150zM319.5 1024.5q-29.5 29.5 -71 29.5t-71 -29.5 t-29.5 -71.5t29.5 -71.5t71 -29.5t71 29.5t29.5 71.5t-29.5 71.5z" /> +<glyph unicode="" d="M300 1200h825q75 0 75 -75v-900q0 -25 -18 -43l-64 -64q-8 -8 -13 -5.5t-5 12.5v950q0 10 -7.5 17.5t-17.5 7.5h-700q-25 0 -43 -18l-64 -64q-8 -8 -5.5 -13t12.5 -5h700q10 0 17.5 -7.5t7.5 -17.5v-950q0 -10 -7.5 -17.5t-17.5 -7.5h-850q-10 0 -17.5 7.5t-7.5 17.5v975 q0 25 18 43l139 139q18 18 43 18z" /> +<glyph unicode="" d="M250 1200h800q21 0 35.5 -14.5t14.5 -35.5v-1150l-450 444l-450 -445v1151q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M822 1200h-444q-11 0 -19 -7.5t-9 -17.5l-78 -301q-7 -24 7 -45l57 -108q6 -9 17.5 -15t21.5 -6h450q10 0 21.5 6t17.5 15l62 108q14 21 7 45l-83 301q-1 10 -9 17.5t-19 7.5zM1175 800h-150q-10 0 -21 -6.5t-15 -15.5l-78 -156q-4 -9 -15 -15.5t-21 -6.5h-550 q-10 0 -21 6.5t-15 15.5l-78 156q-4 9 -15 15.5t-21 6.5h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-650q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h750q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5 t7.5 17.5v650q0 10 -7.5 17.5t-17.5 7.5zM850 200h-500q-10 0 -19.5 -7t-11.5 -17l-38 -152q-2 -10 3.5 -17t15.5 -7h600q10 0 15.5 7t3.5 17l-38 152q-2 10 -11.5 17t-19.5 7z" /> +<glyph unicode="" d="M500 1100h200q56 0 102.5 -20.5t72.5 -50t44 -59t25 -50.5l6 -20h150q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v600q0 41 29.5 70.5t70.5 29.5h150q2 8 6.5 21.5t24 48t45 61t72 48t102.5 21.5zM900 800v-100 h100v100h-100zM600 730q-95 0 -162.5 -67.5t-67.5 -162.5t67.5 -162.5t162.5 -67.5t162.5 67.5t67.5 162.5t-67.5 162.5t-162.5 67.5zM600 603q43 0 73 -30t30 -73t-30 -73t-73 -30t-73 30t-30 73t30 73t73 30z" /> +<glyph unicode="" d="M681 1199l385 -998q20 -50 60 -92q18 -19 36.5 -29.5t27.5 -11.5l10 -2v-66h-417v66q53 0 75 43.5t5 88.5l-82 222h-391q-58 -145 -92 -234q-11 -34 -6.5 -57t25.5 -37t46 -20t55 -6v-66h-365v66q56 24 84 52q12 12 25 30.5t20 31.5l7 13l399 1006h93zM416 521h340 l-162 457z" /> +<glyph unicode="" d="M753 641q5 -1 14.5 -4.5t36 -15.5t50.5 -26.5t53.5 -40t50.5 -54.5t35.5 -70t14.5 -87q0 -67 -27.5 -125.5t-71.5 -97.5t-98.5 -66.5t-108.5 -40.5t-102 -13h-500v89q41 7 70.5 32.5t29.5 65.5v827q0 24 -0.5 34t-3.5 24t-8.5 19.5t-17 13.5t-28 12.5t-42.5 11.5v71 l471 -1q57 0 115.5 -20.5t108 -57t80.5 -94t31 -124.5q0 -51 -15.5 -96.5t-38 -74.5t-45 -50.5t-38.5 -30.5zM400 700h139q78 0 130.5 48.5t52.5 122.5q0 41 -8.5 70.5t-29.5 55.5t-62.5 39.5t-103.5 13.5h-118v-350zM400 200h216q80 0 121 50.5t41 130.5q0 90 -62.5 154.5 t-156.5 64.5h-159v-400z" /> +<glyph unicode="" d="M877 1200l2 -57q-83 -19 -116 -45.5t-40 -66.5l-132 -839q-9 -49 13 -69t96 -26v-97h-500v97q186 16 200 98l173 832q3 17 3 30t-1.5 22.5t-9 17.5t-13.5 12.5t-21.5 10t-26 8.5t-33.5 10q-13 3 -19 5v57h425z" /> +<glyph unicode="" d="M1300 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-850q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v850h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM175 1000h-75v-800h75l-125 -167l-125 167h75v800h-75l125 167z" /> +<glyph unicode="" d="M1100 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-650q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v650h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM1167 50l-167 -125v75h-800v-75l-167 125l167 125v-75h800v75z" /> +<glyph unicode="" d="M50 1100h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 500h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M250 1100h700q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM250 500h700q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M500 950v100q0 21 14.5 35.5t35.5 14.5h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5zM100 650v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000 q-21 0 -35.5 14.5t-14.5 35.5zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5zM0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100 q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5z" /> +<glyph unicode="" d="M50 1100h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 500h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 1100h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 800h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 500h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 500h800q21 0 35.5 -14.5t14.5 -35.5v-100 q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 200h800 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M400 0h-100v1100h100v-1100zM550 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM550 800h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM267 550l-167 -125v75h-200v100h200v75zM550 500h300q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM550 200h600 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM900 0h-100v1100h100v-1100zM50 800h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM1100 600h200v-100h-200v-75l-167 125l167 125v-75zM50 500h300q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h600 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M75 1000h750q31 0 53 -22t22 -53v-650q0 -31 -22 -53t-53 -22h-750q-31 0 -53 22t-22 53v650q0 31 22 53t53 22zM1200 300l-300 300l300 300v-600z" /> +<glyph unicode="" d="M44 1100h1112q18 0 31 -13t13 -31v-1012q0 -18 -13 -31t-31 -13h-1112q-18 0 -31 13t-13 31v1012q0 18 13 31t31 13zM100 1000v-737l247 182l298 -131l-74 156l293 318l236 -288v500h-1000zM342 884q56 0 95 -39t39 -94.5t-39 -95t-95 -39.5t-95 39.5t-39 95t39 94.5 t95 39z" /> +<glyph unicode="" d="M648 1169q117 0 216 -60t156.5 -161t57.5 -218q0 -115 -70 -258q-69 -109 -158 -225.5t-143 -179.5l-54 -62q-9 8 -25.5 24.5t-63.5 67.5t-91 103t-98.5 128t-95.5 148q-60 132 -60 249q0 88 34 169.5t91.5 142t137 96.5t166.5 36zM652.5 974q-91.5 0 -156.5 -65 t-65 -157t65 -156.5t156.5 -64.5t156.5 64.5t65 156.5t-65 157t-156.5 65z" /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 173v854q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57z" /> +<glyph unicode="" d="M554 1295q21 -72 57.5 -143.5t76 -130t83 -118t82.5 -117t70 -116t49.5 -126t18.5 -136.5q0 -71 -25.5 -135t-68.5 -111t-99 -82t-118.5 -54t-125.5 -23q-84 5 -161.5 34t-139.5 78.5t-99 125t-37 164.5q0 69 18 136.5t49.5 126.5t69.5 116.5t81.5 117.5t83.5 119 t76.5 131t58.5 143zM344 710q-23 -33 -43.5 -70.5t-40.5 -102.5t-17 -123q1 -37 14.5 -69.5t30 -52t41 -37t38.5 -24.5t33 -15q21 -7 32 -1t13 22l6 34q2 10 -2.5 22t-13.5 19q-5 4 -14 12t-29.5 40.5t-32.5 73.5q-26 89 6 271q2 11 -6 11q-8 1 -15 -10z" /> +<glyph unicode="" d="M1000 1013l108 115q2 1 5 2t13 2t20.5 -1t25 -9.5t28.5 -21.5q22 -22 27 -43t0 -32l-6 -10l-108 -115zM350 1100h400q50 0 105 -13l-187 -187h-368q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v182l200 200v-332 q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5zM1009 803l-362 -362l-161 -50l55 170l355 355z" /> +<glyph unicode="" d="M350 1100h361q-164 -146 -216 -200h-195q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5l200 153v-103q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5z M824 1073l339 -301q8 -7 8 -17.5t-8 -17.5l-340 -306q-7 -6 -12.5 -4t-6.5 11v203q-26 1 -54.5 0t-78.5 -7.5t-92 -17.5t-86 -35t-70 -57q10 59 33 108t51.5 81.5t65 58.5t68.5 40.5t67 24.5t56 13.5t40 4.5v210q1 10 6.5 12.5t13.5 -4.5z" /> +<glyph unicode="" d="M350 1100h350q60 0 127 -23l-178 -177h-349q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v69l200 200v-219q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5z M643 639l395 395q7 7 17.5 7t17.5 -7l101 -101q7 -7 7 -17.5t-7 -17.5l-531 -532q-7 -7 -17.5 -7t-17.5 7l-248 248q-7 7 -7 17.5t7 17.5l101 101q7 7 17.5 7t17.5 -7l111 -111q8 -7 18 -7t18 7z" /> +<glyph unicode="" d="M318 918l264 264q8 8 18 8t18 -8l260 -264q7 -8 4.5 -13t-12.5 -5h-170v-200h200v173q0 10 5 12t13 -5l264 -260q8 -7 8 -17.5t-8 -17.5l-264 -265q-8 -7 -13 -5t-5 12v173h-200v-200h170q10 0 12.5 -5t-4.5 -13l-260 -264q-8 -8 -18 -8t-18 8l-264 264q-8 8 -5.5 13 t12.5 5h175v200h-200v-173q0 -10 -5 -12t-13 5l-264 265q-8 7 -8 17.5t8 17.5l264 260q8 7 13 5t5 -12v-173h200v200h-175q-10 0 -12.5 5t5.5 13z" /> +<glyph unicode="" d="M250 1100h100q21 0 35.5 -14.5t14.5 -35.5v-438l464 453q15 14 25.5 10t10.5 -25v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v1000q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-438l464 453q15 14 25.5 10t10.5 -25v-438l464 453q15 14 25.5 10t10.5 -25v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5 t-14.5 35.5v1000q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M1200 1050v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -10.5 -25t-25.5 10l-492 480q-15 14 -15 35t15 35l492 480q15 14 25.5 10t10.5 -25v-438l464 453q15 14 25.5 10t10.5 -25z" /> +<glyph unicode="" d="M243 1074l814 -498q18 -11 18 -26t-18 -26l-814 -498q-18 -11 -30.5 -4t-12.5 28v1000q0 21 12.5 28t30.5 -4z" /> +<glyph unicode="" d="M250 1000h200q21 0 35.5 -14.5t14.5 -35.5v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5zM650 1000h200q21 0 35.5 -14.5t14.5 -35.5v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v800 q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M1100 950v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5z" /> +<glyph unicode="" d="M500 612v438q0 21 10.5 25t25.5 -10l492 -480q15 -14 15 -35t-15 -35l-492 -480q-15 -14 -25.5 -10t-10.5 25v438l-464 -453q-15 -14 -25.5 -10t-10.5 25v1000q0 21 10.5 25t25.5 -10z" /> +<glyph unicode="" d="M1048 1102l100 1q20 0 35 -14.5t15 -35.5l5 -1000q0 -21 -14.5 -35.5t-35.5 -14.5l-100 -1q-21 0 -35.5 14.5t-14.5 35.5l-2 437l-463 -454q-14 -15 -24.5 -10.5t-10.5 25.5l-2 437l-462 -455q-15 -14 -25.5 -9.5t-10.5 24.5l-5 1000q0 21 10.5 25.5t25.5 -10.5l466 -450 l-2 438q0 20 10.5 24.5t25.5 -9.5l466 -451l-2 438q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M850 1100h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438l-464 -453q-15 -14 -25.5 -10t-10.5 25v1000q0 21 10.5 25t25.5 -10l464 -453v438q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M686 1081l501 -540q15 -15 10.5 -26t-26.5 -11h-1042q-22 0 -26.5 11t10.5 26l501 540q15 15 36 15t36 -15zM150 400h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M885 900l-352 -353l352 -353l-197 -198l-552 552l552 550z" /> +<glyph unicode="" d="M1064 547l-551 -551l-198 198l353 353l-353 353l198 198z" /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM650 900h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-150h-150 q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5t35.5 -14.5h150v-150q0 -21 14.5 -35.5t35.5 -14.5h100q21 0 35.5 14.5t14.5 35.5v150h150q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5h-150v150q0 21 -14.5 35.5t-35.5 14.5z" /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM850 700h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5 t35.5 -14.5h500q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5z" /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM741.5 913q-12.5 0 -21.5 -9l-120 -120l-120 120q-9 9 -21.5 9 t-21.5 -9l-141 -141q-9 -9 -9 -21.5t9 -21.5l120 -120l-120 -120q-9 -9 -9 -21.5t9 -21.5l141 -141q9 -9 21.5 -9t21.5 9l120 120l120 -120q9 -9 21.5 -9t21.5 9l141 141q9 9 9 21.5t-9 21.5l-120 120l120 120q9 9 9 21.5t-9 21.5l-141 141q-9 9 -21.5 9z" /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM546 623l-84 85q-7 7 -17.5 7t-18.5 -7l-139 -139q-7 -8 -7 -18t7 -18 l242 -241q7 -8 17.5 -8t17.5 8l375 375q7 7 7 17.5t-7 18.5l-139 139q-7 7 -17.5 7t-17.5 -7z" /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM588 941q-29 0 -59 -5.5t-63 -20.5t-58 -38.5t-41.5 -63t-16.5 -89.5 q0 -25 20 -25h131q30 -5 35 11q6 20 20.5 28t45.5 8q20 0 31.5 -10.5t11.5 -28.5q0 -23 -7 -34t-26 -18q-1 0 -13.5 -4t-19.5 -7.5t-20 -10.5t-22 -17t-18.5 -24t-15.5 -35t-8 -46q-1 -8 5.5 -16.5t20.5 -8.5h173q7 0 22 8t35 28t37.5 48t29.5 74t12 100q0 47 -17 83 t-42.5 57t-59.5 34.5t-64 18t-59 4.5zM675 400h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5z" /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM675 1000h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5 t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5zM675 700h-250q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h75v-200h-75q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h350q10 0 17.5 7.5t7.5 17.5v50q0 10 -7.5 17.5 t-17.5 7.5h-75v275q0 10 -7.5 17.5t-17.5 7.5z" /> +<glyph unicode="" d="M525 1200h150q10 0 17.5 -7.5t7.5 -17.5v-194q103 -27 178.5 -102.5t102.5 -178.5h194q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-194q-27 -103 -102.5 -178.5t-178.5 -102.5v-194q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v194 q-103 27 -178.5 102.5t-102.5 178.5h-194q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h194q27 103 102.5 178.5t178.5 102.5v194q0 10 7.5 17.5t17.5 7.5zM700 893v-168q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v168q-68 -23 -119 -74 t-74 -119h168q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-168q23 -68 74 -119t119 -74v168q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-168q68 23 119 74t74 119h-168q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h168 q-23 68 -74 119t-119 74z" /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM759 823l64 -64q7 -7 7 -17.5t-7 -17.5l-124 -124l124 -124q7 -7 7 -17.5t-7 -17.5l-64 -64q-7 -7 -17.5 -7t-17.5 7l-124 124l-124 -124q-7 -7 -17.5 -7t-17.5 7l-64 64 q-7 7 -7 17.5t7 17.5l124 124l-124 124q-7 7 -7 17.5t7 17.5l64 64q7 7 17.5 7t17.5 -7l124 -124l124 124q7 7 17.5 7t17.5 -7z" /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM782 788l106 -106q7 -7 7 -17.5t-7 -17.5l-320 -321q-8 -7 -18 -7t-18 7l-202 203q-8 7 -8 17.5t8 17.5l106 106q7 8 17.5 8t17.5 -8l79 -79l197 197q7 7 17.5 7t17.5 -7z" /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5q0 -120 65 -225 l587 587q-105 65 -225 65zM965 819l-584 -584q104 -62 219 -62q116 0 214.5 57t155.5 155.5t57 214.5q0 115 -62 219z" /> +<glyph unicode="" d="M39 582l522 427q16 13 27.5 8t11.5 -26v-291h550q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-550v-291q0 -21 -11.5 -26t-27.5 8l-522 427q-16 13 -16 32t16 32z" /> +<glyph unicode="" d="M639 1009l522 -427q16 -13 16 -32t-16 -32l-522 -427q-16 -13 -27.5 -8t-11.5 26v291h-550q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h550v291q0 21 11.5 26t27.5 -8z" /> +<glyph unicode="" d="M682 1161l427 -522q13 -16 8 -27.5t-26 -11.5h-291v-550q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v550h-291q-21 0 -26 11.5t8 27.5l427 522q13 16 32 16t32 -16z" /> +<glyph unicode="" d="M550 1200h200q21 0 35.5 -14.5t14.5 -35.5v-550h291q21 0 26 -11.5t-8 -27.5l-427 -522q-13 -16 -32 -16t-32 16l-427 522q-13 16 -8 27.5t26 11.5h291v550q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M639 1109l522 -427q16 -13 16 -32t-16 -32l-522 -427q-16 -13 -27.5 -8t-11.5 26v291q-94 -2 -182 -20t-170.5 -52t-147 -92.5t-100.5 -135.5q5 105 27 193.5t67.5 167t113 135t167 91.5t225.5 42v262q0 21 11.5 26t27.5 -8z" /> +<glyph unicode="" d="M850 1200h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94l-249 -249q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l249 249l-94 94q-14 14 -10 24.5t25 10.5zM350 0h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l249 249 q8 7 18 7t18 -7l106 -106q7 -8 7 -18t-7 -18l-249 -249l94 -94q14 -14 10 -24.5t-25 -10.5z" /> +<glyph unicode="" d="M1014 1120l106 -106q7 -8 7 -18t-7 -18l-249 -249l94 -94q14 -14 10 -24.5t-25 -10.5h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l249 249q8 7 18 7t18 -7zM250 600h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94 l-249 -249q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l249 249l-94 94q-14 14 -10 24.5t25 10.5z" /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM704 900h-208q-20 0 -32 -14.5t-8 -34.5l58 -302q4 -20 21.5 -34.5 t37.5 -14.5h54q20 0 37.5 14.5t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5zM675 400h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5z" /> +<glyph unicode="" d="M260 1200q9 0 19 -2t15 -4l5 -2q22 -10 44 -23l196 -118q21 -13 36 -24q29 -21 37 -12q11 13 49 35l196 118q22 13 45 23q17 7 38 7q23 0 47 -16.5t37 -33.5l13 -16q14 -21 18 -45l25 -123l8 -44q1 -9 8.5 -14.5t17.5 -5.5h61q10 0 17.5 -7.5t7.5 -17.5v-50 q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 -7.5t-7.5 -17.5v-175h-400v300h-200v-300h-400v175q0 10 -7.5 17.5t-17.5 7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5h61q11 0 18 3t7 8q0 4 9 52l25 128q5 25 19 45q2 3 5 7t13.5 15t21.5 19.5t26.5 15.5 t29.5 7zM915 1079l-166 -162q-7 -7 -5 -12t12 -5h219q10 0 15 7t2 17l-51 149q-3 10 -11 12t-15 -6zM463 917l-177 157q-8 7 -16 5t-11 -12l-51 -143q-3 -10 2 -17t15 -7h231q11 0 12.5 5t-5.5 12zM500 0h-375q-10 0 -17.5 7.5t-7.5 17.5v375h400v-400zM1100 400v-375 q0 -10 -7.5 -17.5t-17.5 -7.5h-375v400h400z" /> +<glyph unicode="" d="M1165 1190q8 3 21 -6.5t13 -17.5q-2 -178 -24.5 -323.5t-55.5 -245.5t-87 -174.5t-102.5 -118.5t-118 -68.5t-118.5 -33t-120 -4.5t-105 9.5t-90 16.5q-61 12 -78 11q-4 1 -12.5 0t-34 -14.5t-52.5 -40.5l-153 -153q-26 -24 -37 -14.5t-11 43.5q0 64 42 102q8 8 50.5 45 t66.5 58q19 17 35 47t13 61q-9 55 -10 102.5t7 111t37 130t78 129.5q39 51 80 88t89.5 63.5t94.5 45t113.5 36t129 31t157.5 37t182 47.5zM1116 1098q-8 9 -22.5 -3t-45.5 -50q-38 -47 -119 -103.5t-142 -89.5l-62 -33q-56 -30 -102 -57t-104 -68t-102.5 -80.5t-85.5 -91 t-64 -104.5q-24 -56 -31 -86t2 -32t31.5 17.5t55.5 59.5q25 30 94 75.5t125.5 77.5t147.5 81q70 37 118.5 69t102 79.5t99 111t86.5 148.5q22 50 24 60t-6 19z" /> +<glyph unicode="" d="M653 1231q-39 -67 -54.5 -131t-10.5 -114.5t24.5 -96.5t47.5 -80t63.5 -62.5t68.5 -46.5t65 -30q-4 7 -17.5 35t-18.5 39.5t-17 39.5t-17 43t-13 42t-9.5 44.5t-2 42t4 43t13.5 39t23 38.5q96 -42 165 -107.5t105 -138t52 -156t13 -159t-19 -149.5q-13 -55 -44 -106.5 t-68 -87t-78.5 -64.5t-72.5 -45t-53 -22q-72 -22 -127 -11q-31 6 -13 19q6 3 17 7q13 5 32.5 21t41 44t38.5 63.5t21.5 81.5t-6.5 94.5t-50 107t-104 115.5q10 -104 -0.5 -189t-37 -140.5t-65 -93t-84 -52t-93.5 -11t-95 24.5q-80 36 -131.5 114t-53.5 171q-2 23 0 49.5 t4.5 52.5t13.5 56t27.5 60t46 64.5t69.5 68.5q-8 -53 -5 -102.5t17.5 -90t34 -68.5t44.5 -39t49 -2q31 13 38.5 36t-4.5 55t-29 64.5t-36 75t-26 75.5q-15 85 2 161.5t53.5 128.5t85.5 92.5t93.5 61t81.5 25.5z" /> +<glyph unicode="" d="M600 1094q82 0 160.5 -22.5t140 -59t116.5 -82.5t94.5 -95t68 -95t42.5 -82.5t14 -57.5t-14 -57.5t-43 -82.5t-68.5 -95t-94.5 -95t-116.5 -82.5t-140 -59t-159.5 -22.5t-159.5 22.5t-140 59t-116.5 82.5t-94.5 95t-68.5 95t-43 82.5t-14 57.5t14 57.5t42.5 82.5t68 95 t94.5 95t116.5 82.5t140 59t160.5 22.5zM888 829q-15 15 -18 12t5 -22q25 -57 25 -119q0 -124 -88 -212t-212 -88t-212 88t-88 212q0 59 23 114q8 19 4.5 22t-17.5 -12q-70 -69 -160 -184q-13 -16 -15 -40.5t9 -42.5q22 -36 47 -71t70 -82t92.5 -81t113 -58.5t133.5 -24.5 t133.5 24t113 58.5t92.5 81.5t70 81.5t47 70.5q11 18 9 42.5t-14 41.5q-90 117 -163 189zM448 727l-35 -36q-15 -15 -19.5 -38.5t4.5 -41.5q37 -68 93 -116q16 -13 38.5 -11t36.5 17l35 34q14 15 12.5 33.5t-16.5 33.5q-44 44 -89 117q-11 18 -28 20t-32 -12z" /> +<glyph unicode="" d="M592 0h-148l31 120q-91 20 -175.5 68.5t-143.5 106.5t-103.5 119t-66.5 110t-22 76q0 21 14 57.5t42.5 82.5t68 95t94.5 95t116.5 82.5t140 59t160.5 22.5q61 0 126 -15l32 121h148zM944 770l47 181q108 -85 176.5 -192t68.5 -159q0 -26 -19.5 -71t-59.5 -102t-93 -112 t-129 -104.5t-158 -75.5l46 173q77 49 136 117t97 131q11 18 9 42.5t-14 41.5q-54 70 -107 130zM310 824q-70 -69 -160 -184q-13 -16 -15 -40.5t9 -42.5q18 -30 39 -60t57 -70.5t74 -73t90 -61t105 -41.5l41 154q-107 18 -178.5 101.5t-71.5 193.5q0 59 23 114q8 19 4.5 22 t-17.5 -12zM448 727l-35 -36q-15 -15 -19.5 -38.5t4.5 -41.5q37 -68 93 -116q16 -13 38.5 -11t36.5 17l12 11l22 86l-3 4q-44 44 -89 117q-11 18 -28 20t-32 -12z" /> +<glyph unicode="" d="M-90 100l642 1066q20 31 48 28.5t48 -35.5l642 -1056q21 -32 7.5 -67.5t-50.5 -35.5h-1294q-37 0 -50.5 34t7.5 66zM155 200h345v75q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-75h345l-445 723zM496 700h208q20 0 32 -14.5t8 -34.5l-58 -252 q-4 -20 -21.5 -34.5t-37.5 -14.5h-54q-20 0 -37.5 14.5t-21.5 34.5l-58 252q-4 20 8 34.5t32 14.5z" /> +<glyph unicode="" d="M650 1200q62 0 106 -44t44 -106v-339l363 -325q15 -14 26 -38.5t11 -44.5v-41q0 -20 -12 -26.5t-29 5.5l-359 249v-263q100 -93 100 -113v-64q0 -21 -13 -29t-32 1l-205 128l-205 -128q-19 -9 -32 -1t-13 29v64q0 20 100 113v263l-359 -249q-17 -12 -29 -5.5t-12 26.5v41 q0 20 11 44.5t26 38.5l363 325v339q0 62 44 106t106 44z" /> +<glyph unicode="" d="M850 1200h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-150h-1100v150q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-50h500v50q0 21 14.5 35.5t35.5 14.5zM1100 800v-750q0 -21 -14.5 -35.5 t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v750h1100zM100 600v-100h100v100h-100zM300 600v-100h100v100h-100zM500 600v-100h100v100h-100zM700 600v-100h100v100h-100zM900 600v-100h100v100h-100zM100 400v-100h100v100h-100zM300 400v-100h100v100h-100zM500 400 v-100h100v100h-100zM700 400v-100h100v100h-100zM900 400v-100h100v100h-100zM100 200v-100h100v100h-100zM300 200v-100h100v100h-100zM500 200v-100h100v100h-100zM700 200v-100h100v100h-100zM900 200v-100h100v100h-100z" /> +<glyph unicode="" d="M1135 1165l249 -230q15 -14 15 -35t-15 -35l-249 -230q-14 -14 -24.5 -10t-10.5 25v150h-159l-600 -600h-291q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h209l600 600h241v150q0 21 10.5 25t24.5 -10zM522 819l-141 -141l-122 122h-209q-21 0 -35.5 14.5 t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h291zM1135 565l249 -230q15 -14 15 -35t-15 -35l-249 -230q-14 -14 -24.5 -10t-10.5 25v150h-241l-181 181l141 141l122 -122h159v150q0 21 10.5 25t24.5 -10z" /> +<glyph unicode="" d="M100 1100h1000q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-596l-304 -300v300h-100q-41 0 -70.5 29.5t-29.5 70.5v600q0 41 29.5 70.5t70.5 29.5z" /> +<glyph unicode="" d="M150 1200h200q21 0 35.5 -14.5t14.5 -35.5v-250h-300v250q0 21 14.5 35.5t35.5 14.5zM850 1200h200q21 0 35.5 -14.5t14.5 -35.5v-250h-300v250q0 21 14.5 35.5t35.5 14.5zM1100 800v-300q0 -41 -3 -77.5t-15 -89.5t-32 -96t-58 -89t-89 -77t-129 -51t-174 -20t-174 20 t-129 51t-89 77t-58 89t-32 96t-15 89.5t-3 77.5v300h300v-250v-27v-42.5t1.5 -41t5 -38t10 -35t16.5 -30t25.5 -24.5t35 -19t46.5 -12t60 -4t60 4.5t46.5 12.5t35 19.5t25 25.5t17 30.5t10 35t5 38t2 40.5t-0.5 42v25v250h300z" /> +<glyph unicode="" d="M1100 411l-198 -199l-353 353l-353 -353l-197 199l551 551z" /> +<glyph unicode="" d="M1101 789l-550 -551l-551 551l198 199l353 -353l353 353z" /> +<glyph unicode="" d="M404 1000h746q21 0 35.5 -14.5t14.5 -35.5v-551h150q21 0 25 -10.5t-10 -24.5l-230 -249q-14 -15 -35 -15t-35 15l-230 249q-14 14 -10 24.5t25 10.5h150v401h-381zM135 984l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-400h385l215 -200h-750q-21 0 -35.5 14.5 t-14.5 35.5v550h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" /> +<glyph unicode="" d="M56 1200h94q17 0 31 -11t18 -27l38 -162h896q24 0 39 -18.5t10 -42.5l-100 -475q-5 -21 -27 -42.5t-55 -21.5h-633l48 -200h535q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-50q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v50h-300v-50 q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v50h-31q-18 0 -32.5 10t-20.5 19l-5 10l-201 961h-54q-20 0 -35 14.5t-15 35.5t15 35.5t35 14.5z" /> +<glyph unicode="" d="M1200 1000v-100h-1200v100h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500zM0 800h1200v-800h-1200v800z" /> +<glyph unicode="" d="M200 800l-200 -400v600h200q0 41 29.5 70.5t70.5 29.5h300q42 0 71 -29.5t29 -70.5h500v-200h-1000zM1500 700l-300 -700h-1200l300 700h1200z" /> +<glyph unicode="" d="M635 1184l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-601h150q21 0 25 -10.5t-10 -24.5l-230 -249q-14 -15 -35 -15t-35 15l-230 249q-14 14 -10 24.5t25 10.5h150v601h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" /> +<glyph unicode="" d="M936 864l249 -229q14 -15 14 -35.5t-14 -35.5l-249 -229q-15 -15 -25.5 -10.5t-10.5 24.5v151h-600v-151q0 -20 -10.5 -24.5t-25.5 10.5l-249 229q-14 15 -14 35.5t14 35.5l249 229q15 15 25.5 10.5t10.5 -25.5v-149h600v149q0 21 10.5 25.5t25.5 -10.5z" /> +<glyph unicode="" d="M1169 400l-172 732q-5 23 -23 45.5t-38 22.5h-672q-20 0 -38 -20t-23 -41l-172 -739h1138zM1100 300h-1000q-41 0 -70.5 -29.5t-29.5 -70.5v-100q0 -41 29.5 -70.5t70.5 -29.5h1000q41 0 70.5 29.5t29.5 70.5v100q0 41 -29.5 70.5t-70.5 29.5zM800 100v100h100v-100h-100 zM1000 100v100h100v-100h-100z" /> +<glyph unicode="" d="M1150 1100q21 0 35.5 -14.5t14.5 -35.5v-850q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v850q0 21 14.5 35.5t35.5 14.5zM1000 200l-675 200h-38l47 -276q3 -16 -5.5 -20t-29.5 -4h-7h-84q-20 0 -34.5 14t-18.5 35q-55 337 -55 351v250v6q0 16 1 23.5t6.5 14 t17.5 6.5h200l675 250v-850zM0 750v-250q-4 0 -11 0.5t-24 6t-30 15t-24 30t-11 48.5v50q0 26 10.5 46t25 30t29 16t25.5 7z" /> +<glyph unicode="" d="M553 1200h94q20 0 29 -10.5t3 -29.5l-18 -37q83 -19 144 -82.5t76 -140.5l63 -327l118 -173h17q19 0 33 -14.5t14 -35t-13 -40.5t-31 -27q-8 -4 -23 -9.5t-65 -19.5t-103 -25t-132.5 -20t-158.5 -9q-57 0 -115 5t-104 12t-88.5 15.5t-73.5 17.5t-54.5 16t-35.5 12l-11 4 q-18 8 -31 28t-13 40.5t14 35t33 14.5h17l118 173l63 327q15 77 76 140t144 83l-18 32q-6 19 3.5 32t28.5 13zM498 110q50 -6 102 -6q53 0 102 6q-12 -49 -39.5 -79.5t-62.5 -30.5t-63 30.5t-39 79.5z" /> +<glyph unicode="" d="M800 946l224 78l-78 -224l234 -45l-180 -155l180 -155l-234 -45l78 -224l-224 78l-45 -234l-155 180l-155 -180l-45 234l-224 -78l78 224l-234 45l180 155l-180 155l234 45l-78 224l224 -78l45 234l155 -180l155 180z" /> +<glyph unicode="" d="M650 1200h50q40 0 70 -40.5t30 -84.5v-150l-28 -125h328q40 0 70 -40.5t30 -84.5v-100q0 -45 -29 -74l-238 -344q-16 -24 -38 -40.5t-45 -16.5h-250q-7 0 -42 25t-66 50l-31 25h-61q-45 0 -72.5 18t-27.5 57v400q0 36 20 63l145 196l96 198q13 28 37.5 48t51.5 20z M650 1100l-100 -212l-150 -213v-375h100l136 -100h214l250 375v125h-450l50 225v175h-50zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M600 1100h250q23 0 45 -16.5t38 -40.5l238 -344q29 -29 29 -74v-100q0 -44 -30 -84.5t-70 -40.5h-328q28 -118 28 -125v-150q0 -44 -30 -84.5t-70 -40.5h-50q-27 0 -51.5 20t-37.5 48l-96 198l-145 196q-20 27 -20 63v400q0 39 27.5 57t72.5 18h61q124 100 139 100z M50 1000h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5zM636 1000l-136 -100h-100v-375l150 -213l100 -212h50v175l-50 225h450v125l-250 375h-214z" /> +<glyph unicode="" d="M356 873l363 230q31 16 53 -6l110 -112q13 -13 13.5 -32t-11.5 -34l-84 -121h302q84 0 138 -38t54 -110t-55 -111t-139 -39h-106l-131 -339q-6 -21 -19.5 -41t-28.5 -20h-342q-7 0 -90 81t-83 94v525q0 17 14 35.5t28 28.5zM400 792v-503l100 -89h293l131 339 q6 21 19.5 41t28.5 20h203q21 0 30.5 25t0.5 50t-31 25h-456h-7h-6h-5.5t-6 0.5t-5 1.5t-5 2t-4 2.5t-4 4t-2.5 4.5q-12 25 5 47l146 183l-86 83zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500 q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M475 1103l366 -230q2 -1 6 -3.5t14 -10.5t18 -16.5t14.5 -20t6.5 -22.5v-525q0 -13 -86 -94t-93 -81h-342q-15 0 -28.5 20t-19.5 41l-131 339h-106q-85 0 -139.5 39t-54.5 111t54 110t138 38h302l-85 121q-11 15 -10.5 34t13.5 32l110 112q22 22 53 6zM370 945l146 -183 q17 -22 5 -47q-2 -2 -3.5 -4.5t-4 -4t-4 -2.5t-5 -2t-5 -1.5t-6 -0.5h-6h-6.5h-6h-475v-100h221q15 0 29 -20t20 -41l130 -339h294l106 89v503l-342 236zM1050 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5 v500q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M550 1294q72 0 111 -55t39 -139v-106l339 -131q21 -6 41 -19.5t20 -28.5v-342q0 -7 -81 -90t-94 -83h-525q-17 0 -35.5 14t-28.5 28l-9 14l-230 363q-16 31 6 53l112 110q13 13 32 13.5t34 -11.5l121 -84v302q0 84 38 138t110 54zM600 972v203q0 21 -25 30.5t-50 0.5 t-25 -31v-456v-7v-6v-5.5t-0.5 -6t-1.5 -5t-2 -5t-2.5 -4t-4 -4t-4.5 -2.5q-25 -12 -47 5l-183 146l-83 -86l236 -339h503l89 100v293l-339 131q-21 6 -41 19.5t-20 28.5zM450 200h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M350 1100h500q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5t35.5 -14.5zM600 306v-106q0 -84 -39 -139t-111 -55t-110 54t-38 138v302l-121 -84q-15 -12 -34 -11.5t-32 13.5l-112 110 q-22 22 -6 53l230 363q1 2 3.5 6t10.5 13.5t16.5 17t20 13.5t22.5 6h525q13 0 94 -83t81 -90v-342q0 -15 -20 -28.5t-41 -19.5zM308 900l-236 -339l83 -86l183 146q22 17 47 5q2 -1 4.5 -2.5t4 -4t2.5 -4t2 -5t1.5 -5t0.5 -6v-5.5v-6v-7v-456q0 -22 25 -31t50 0.5t25 30.5 v203q0 15 20 28.5t41 19.5l339 131v293l-89 100h-503z" /> +<glyph unicode="" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM914 632l-275 223q-16 13 -27.5 8t-11.5 -26v-137h-275 q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h275v-137q0 -21 11.5 -26t27.5 8l275 223q16 13 16 32t-16 32z" /> +<glyph unicode="" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM561 855l-275 -223q-16 -13 -16 -32t16 -32l275 -223q16 -13 27.5 -8 t11.5 26v137h275q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5h-275v137q0 21 -11.5 26t-27.5 -8z" /> +<glyph unicode="" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM855 639l-223 275q-13 16 -32 16t-32 -16l-223 -275q-13 -16 -8 -27.5 t26 -11.5h137v-275q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v275h137q21 0 26 11.5t-8 27.5z" /> +<glyph unicode="" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM675 900h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-275h-137q-21 0 -26 -11.5 t8 -27.5l223 -275q13 -16 32 -16t32 16l223 275q13 16 8 27.5t-26 11.5h-137v275q0 10 -7.5 17.5t-17.5 7.5z" /> +<glyph unicode="" d="M600 1176q116 0 222.5 -46t184 -123.5t123.5 -184t46 -222.5t-46 -222.5t-123.5 -184t-184 -123.5t-222.5 -46t-222.5 46t-184 123.5t-123.5 184t-46 222.5t46 222.5t123.5 184t184 123.5t222.5 46zM627 1101q-15 -12 -36.5 -20.5t-35.5 -12t-43 -8t-39 -6.5 q-15 -3 -45.5 0t-45.5 -2q-20 -7 -51.5 -26.5t-34.5 -34.5q-3 -11 6.5 -22.5t8.5 -18.5q-3 -34 -27.5 -91t-29.5 -79q-9 -34 5 -93t8 -87q0 -9 17 -44.5t16 -59.5q12 0 23 -5t23.5 -15t19.5 -14q16 -8 33 -15t40.5 -15t34.5 -12q21 -9 52.5 -32t60 -38t57.5 -11 q7 -15 -3 -34t-22.5 -40t-9.5 -38q13 -21 23 -34.5t27.5 -27.5t36.5 -18q0 -7 -3.5 -16t-3.5 -14t5 -17q104 -2 221 112q30 29 46.5 47t34.5 49t21 63q-13 8 -37 8.5t-36 7.5q-15 7 -49.5 15t-51.5 19q-18 0 -41 -0.5t-43 -1.5t-42 -6.5t-38 -16.5q-51 -35 -66 -12 q-4 1 -3.5 25.5t0.5 25.5q-6 13 -26.5 17.5t-24.5 6.5q1 15 -0.5 30.5t-7 28t-18.5 11.5t-31 -21q-23 -25 -42 4q-19 28 -8 58q6 16 22 22q6 -1 26 -1.5t33.5 -4t19.5 -13.5q7 -12 18 -24t21.5 -20.5t20 -15t15.5 -10.5l5 -3q2 12 7.5 30.5t8 34.5t-0.5 32q-3 18 3.5 29 t18 22.5t15.5 24.5q6 14 10.5 35t8 31t15.5 22.5t34 22.5q-6 18 10 36q8 0 24 -1.5t24.5 -1.5t20 4.5t20.5 15.5q-10 23 -31 42.5t-37.5 29.5t-49 27t-43.5 23q0 1 2 8t3 11.5t1.5 10.5t-1 9.5t-4.5 4.5q31 -13 58.5 -14.5t38.5 2.5l12 5q5 28 -9.5 46t-36.5 24t-50 15 t-41 20q-18 -4 -37 0zM613 994q0 -17 8 -42t17 -45t9 -23q-8 1 -39.5 5.5t-52.5 10t-37 16.5q3 11 16 29.5t16 25.5q10 -10 19 -10t14 6t13.5 14.5t16.5 12.5z" /> +<glyph unicode="" d="M756 1157q164 92 306 -9l-259 -138l145 -232l251 126q6 -89 -34 -156.5t-117 -110.5q-60 -34 -127 -39.5t-126 16.5l-596 -596q-15 -16 -36.5 -16t-36.5 16l-111 110q-15 15 -15 36.5t15 37.5l600 599q-34 101 5.5 201.5t135.5 154.5z" /> +<glyph unicode="" horiz-adv-x="1220" d="M100 1196h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 1096h-200v-100h200v100zM100 796h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 696h-500v-100h500v100zM100 396h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 296h-300v-100h300v100z " /> +<glyph unicode="" d="M150 1200h900q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM700 500v-300l-200 -200v500l-350 500h900z" /> +<glyph unicode="" d="M500 1200h200q41 0 70.5 -29.5t29.5 -70.5v-100h300q41 0 70.5 -29.5t29.5 -70.5v-400h-500v100h-200v-100h-500v400q0 41 29.5 70.5t70.5 29.5h300v100q0 41 29.5 70.5t70.5 29.5zM500 1100v-100h200v100h-200zM1200 400v-200q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5v200h1200z" /> +<glyph unicode="" d="M50 1200h300q21 0 25 -10.5t-10 -24.5l-94 -94l199 -199q7 -8 7 -18t-7 -18l-106 -106q-8 -7 -18 -7t-18 7l-199 199l-94 -94q-14 -14 -24.5 -10t-10.5 25v300q0 21 14.5 35.5t35.5 14.5zM850 1200h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94 l-199 -199q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l199 199l-94 94q-14 14 -10 24.5t25 10.5zM364 470l106 -106q7 -8 7 -18t-7 -18l-199 -199l94 -94q14 -14 10 -24.5t-25 -10.5h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l199 199 q8 7 18 7t18 -7zM1071 271l94 94q14 14 24.5 10t10.5 -25v-300q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -25 10.5t10 24.5l94 94l-199 199q-7 8 -7 18t7 18l106 106q8 7 18 7t18 -7z" /> +<glyph unicode="" d="M596 1192q121 0 231.5 -47.5t190 -127t127 -190t47.5 -231.5t-47.5 -231.5t-127 -190.5t-190 -127t-231.5 -47t-231.5 47t-190.5 127t-127 190.5t-47 231.5t47 231.5t127 190t190.5 127t231.5 47.5zM596 1010q-112 0 -207.5 -55.5t-151 -151t-55.5 -207.5t55.5 -207.5 t151 -151t207.5 -55.5t207.5 55.5t151 151t55.5 207.5t-55.5 207.5t-151 151t-207.5 55.5zM454.5 905q22.5 0 38.5 -16t16 -38.5t-16 -39t-38.5 -16.5t-38.5 16.5t-16 39t16 38.5t38.5 16zM754.5 905q22.5 0 38.5 -16t16 -38.5t-16 -39t-38 -16.5q-14 0 -29 10l-55 -145 q17 -23 17 -51q0 -36 -25.5 -61.5t-61.5 -25.5t-61.5 25.5t-25.5 61.5q0 32 20.5 56.5t51.5 29.5l122 126l1 1q-9 14 -9 28q0 23 16 39t38.5 16zM345.5 709q22.5 0 38.5 -16t16 -38.5t-16 -38.5t-38.5 -16t-38.5 16t-16 38.5t16 38.5t38.5 16zM854.5 709q22.5 0 38.5 -16 t16 -38.5t-16 -38.5t-38.5 -16t-38.5 16t-16 38.5t16 38.5t38.5 16z" /> +<glyph unicode="" d="M546 173l469 470q91 91 99 192q7 98 -52 175.5t-154 94.5q-22 4 -47 4q-34 0 -66.5 -10t-56.5 -23t-55.5 -38t-48 -41.5t-48.5 -47.5q-376 -375 -391 -390q-30 -27 -45 -41.5t-37.5 -41t-32 -46.5t-16 -47.5t-1.5 -56.5q9 -62 53.5 -95t99.5 -33q74 0 125 51l548 548 q36 36 20 75q-7 16 -21.5 26t-32.5 10q-26 0 -50 -23q-13 -12 -39 -38l-341 -338q-15 -15 -35.5 -15.5t-34.5 13.5t-14 34.5t14 34.5q327 333 361 367q35 35 67.5 51.5t78.5 16.5q14 0 29 -1q44 -8 74.5 -35.5t43.5 -68.5q14 -47 2 -96.5t-47 -84.5q-12 -11 -32 -32 t-79.5 -81t-114.5 -115t-124.5 -123.5t-123 -119.5t-96.5 -89t-57 -45q-56 -27 -120 -27q-70 0 -129 32t-93 89q-48 78 -35 173t81 163l511 511q71 72 111 96q91 55 198 55q80 0 152 -33q78 -36 129.5 -103t66.5 -154q17 -93 -11 -183.5t-94 -156.5l-482 -476 q-15 -15 -36 -16t-37 14t-17.5 34t14.5 35z" /> +<glyph unicode="" d="M649 949q48 68 109.5 104t121.5 38.5t118.5 -20t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-150 152.5t-126.5 127.5t-93.5 124.5t-33.5 117.5q0 64 28 123t73 100.5t104 64t119 20 t120.5 -38.5t104.5 -104zM896 972q-33 0 -64.5 -19t-56.5 -46t-47.5 -53.5t-43.5 -45.5t-37.5 -19t-36 19t-40 45.5t-43 53.5t-54 46t-65.5 19q-67 0 -122.5 -55.5t-55.5 -132.5q0 -23 13.5 -51t46 -65t57.5 -63t76 -75l22 -22q15 -14 44 -44t50.5 -51t46 -44t41 -35t23 -12 t23.5 12t42.5 36t46 44t52.5 52t44 43q4 4 12 13q43 41 63.5 62t52 55t46 55t26 46t11.5 44q0 79 -53 133.5t-120 54.5z" /> +<glyph unicode="" d="M776.5 1214q93.5 0 159.5 -66l141 -141q66 -66 66 -160q0 -42 -28 -95.5t-62 -87.5l-29 -29q-31 53 -77 99l-18 18l95 95l-247 248l-389 -389l212 -212l-105 -106l-19 18l-141 141q-66 66 -66 159t66 159l283 283q65 66 158.5 66zM600 706l105 105q10 -8 19 -17l141 -141 q66 -66 66 -159t-66 -159l-283 -283q-66 -66 -159 -66t-159 66l-141 141q-66 66 -66 159.5t66 159.5l55 55q29 -55 75 -102l18 -17l-95 -95l247 -248l389 389z" /> +<glyph unicode="" d="M603 1200q85 0 162 -15t127 -38t79 -48t29 -46v-953q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-41 0 -70.5 29.5t-29.5 70.5v953q0 21 30 46.5t81 48t129 37.5t163 15zM300 1000v-700h600v700h-600zM600 254q-43 0 -73.5 -30.5t-30.5 -73.5t30.5 -73.5t73.5 -30.5t73.5 30.5 t30.5 73.5t-30.5 73.5t-73.5 30.5z" /> +<glyph unicode="" d="M902 1185l283 -282q15 -15 15 -36t-14.5 -35.5t-35.5 -14.5t-35 15l-36 35l-279 -267v-300l-212 210l-308 -307l-280 -203l203 280l307 308l-210 212h300l267 279l-35 36q-15 14 -15 35t14.5 35.5t35.5 14.5t35 -15z" /> +<glyph unicode="" d="M700 1248v-78q38 -5 72.5 -14.5t75.5 -31.5t71 -53.5t52 -84t24 -118.5h-159q-4 36 -10.5 59t-21 45t-40 35.5t-64.5 20.5v-307l64 -13q34 -7 64 -16.5t70 -32t67.5 -52.5t47.5 -80t20 -112q0 -139 -89 -224t-244 -97v-77h-100v79q-150 16 -237 103q-40 40 -52.5 93.5 t-15.5 139.5h139q5 -77 48.5 -126t117.5 -65v335l-27 8q-46 14 -79 26.5t-72 36t-63 52t-40 72.5t-16 98q0 70 25 126t67.5 92t94.5 57t110 27v77h100zM600 754v274q-29 -4 -50 -11t-42 -21.5t-31.5 -41.5t-10.5 -65q0 -29 7 -50.5t16.5 -34t28.5 -22.5t31.5 -14t37.5 -10 q9 -3 13 -4zM700 547v-310q22 2 42.5 6.5t45 15.5t41.5 27t29 42t12 59.5t-12.5 59.5t-38 44.5t-53 31t-66.5 24.5z" /> +<glyph unicode="" d="M561 1197q84 0 160.5 -40t123.5 -109.5t47 -147.5h-153q0 40 -19.5 71.5t-49.5 48.5t-59.5 26t-55.5 9q-37 0 -79 -14.5t-62 -35.5q-41 -44 -41 -101q0 -26 13.5 -63t26.5 -61t37 -66q6 -9 9 -14h241v-100h-197q8 -50 -2.5 -115t-31.5 -95q-45 -62 -99 -112 q34 10 83 17.5t71 7.5q32 1 102 -16t104 -17q83 0 136 30l50 -147q-31 -19 -58 -30.5t-55 -15.5t-42 -4.5t-46 -0.5q-23 0 -76 17t-111 32.5t-96 11.5q-39 -3 -82 -16t-67 -25l-23 -11l-55 145q4 3 16 11t15.5 10.5t13 9t15.5 12t14.5 14t17.5 18.5q48 55 54 126.5 t-30 142.5h-221v100h166q-23 47 -44 104q-7 20 -12 41.5t-6 55.5t6 66.5t29.5 70.5t58.5 71q97 88 263 88z" /> +<glyph unicode="" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM935 1184l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-900h-200v900h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" /> +<glyph unicode="" d="M1000 700h-100v100h-100v-100h-100v500h300v-500zM400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM801 1100v-200h100v200h-100zM1000 350l-200 -250h200v-100h-300v150l200 250h-200v100h300v-150z " /> +<glyph unicode="" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1000 1050l-200 -250h200v-100h-300v150l200 250h-200v100h300v-150zM1000 0h-100v100h-100v-100h-100v500h300v-500zM801 400v-200h100v200h-100z " /> +<glyph unicode="" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1000 700h-100v400h-100v100h200v-500zM1100 0h-100v100h-200v400h300v-500zM901 400v-200h100v200h-100z" /> +<glyph unicode="" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1100 700h-100v100h-200v400h300v-500zM901 1100v-200h100v200h-100zM1000 0h-100v400h-100v100h200v-500z" /> +<glyph unicode="" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM900 1000h-200v200h200v-200zM1000 700h-300v200h300v-200zM1100 400h-400v200h400v-200zM1200 100h-500v200h500v-200z" /> +<glyph unicode="" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1200 1000h-500v200h500v-200zM1100 700h-400v200h400v-200zM1000 400h-300v200h300v-200zM900 100h-200v200h200v-200z" /> +<glyph unicode="" d="M350 1100h400q162 0 256 -93.5t94 -256.5v-400q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5z" /> +<glyph unicode="" d="M350 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-163 0 -256.5 92.5t-93.5 257.5v400q0 163 94 256.5t256 93.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM440 770l253 -190q17 -12 17 -30t-17 -30l-253 -190q-16 -12 -28 -6.5t-12 26.5v400q0 21 12 26.5t28 -6.5z" /> +<glyph unicode="" d="M350 1100h400q163 0 256.5 -94t93.5 -256v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 163 92.5 256.5t257.5 93.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM350 700h400q21 0 26.5 -12t-6.5 -28l-190 -253q-12 -17 -30 -17t-30 17l-190 253q-12 16 -6.5 28t26.5 12z" /> +<glyph unicode="" d="M350 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -163 -92.5 -256.5t-257.5 -93.5h-400q-163 0 -256.5 94t-93.5 256v400q0 165 92.5 257.5t257.5 92.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM580 693l190 -253q12 -16 6.5 -28t-26.5 -12h-400q-21 0 -26.5 12t6.5 28l190 253q12 17 30 17t30 -17z" /> +<glyph unicode="" d="M550 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h450q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-450q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM338 867l324 -284q16 -14 16 -33t-16 -33l-324 -284q-16 -14 -27 -9t-11 26v150h-250q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h250v150q0 21 11 26t27 -9z" /> +<glyph unicode="" d="M793 1182l9 -9q8 -10 5 -27q-3 -11 -79 -225.5t-78 -221.5l300 1q24 0 32.5 -17.5t-5.5 -35.5q-1 0 -133.5 -155t-267 -312.5t-138.5 -162.5q-12 -15 -26 -15h-9l-9 8q-9 11 -4 32q2 9 42 123.5t79 224.5l39 110h-302q-23 0 -31 19q-10 21 6 41q75 86 209.5 237.5 t228 257t98.5 111.5q9 16 25 16h9z" /> +<glyph unicode="" d="M350 1100h400q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-450q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h450q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400 q0 165 92.5 257.5t257.5 92.5zM938 867l324 -284q16 -14 16 -33t-16 -33l-324 -284q-16 -14 -27 -9t-11 26v150h-250q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h250v150q0 21 11 26t27 -9z" /> +<glyph unicode="" d="M750 1200h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -10.5 -25t-24.5 10l-109 109l-312 -312q-15 -15 -35.5 -15t-35.5 15l-141 141q-15 15 -15 35.5t15 35.5l312 312l-109 109q-14 14 -10 24.5t25 10.5zM456 900h-156q-41 0 -70.5 -29.5t-29.5 -70.5v-500 q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v148l200 200v-298q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5h300z" /> +<glyph unicode="" d="M600 1186q119 0 227.5 -46.5t187 -125t125 -187t46.5 -227.5t-46.5 -227.5t-125 -187t-187 -125t-227.5 -46.5t-227.5 46.5t-187 125t-125 187t-46.5 227.5t46.5 227.5t125 187t187 125t227.5 46.5zM600 1022q-115 0 -212 -56.5t-153.5 -153.5t-56.5 -212t56.5 -212 t153.5 -153.5t212 -56.5t212 56.5t153.5 153.5t56.5 212t-56.5 212t-153.5 153.5t-212 56.5zM600 794q80 0 137 -57t57 -137t-57 -137t-137 -57t-137 57t-57 137t57 137t137 57z" /> +<glyph unicode="" d="M450 1200h200q21 0 35.5 -14.5t14.5 -35.5v-350h245q20 0 25 -11t-9 -26l-383 -426q-14 -15 -33.5 -15t-32.5 15l-379 426q-13 15 -8.5 26t25.5 11h250v350q0 21 14.5 35.5t35.5 14.5zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5z M900 200v-50h100v50h-100z" /> +<glyph unicode="" d="M583 1182l378 -435q14 -15 9 -31t-26 -16h-244v-250q0 -20 -17 -35t-39 -15h-200q-20 0 -32 14.5t-12 35.5v250h-250q-20 0 -25.5 16.5t8.5 31.5l383 431q14 16 33.5 17t33.5 -14zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5z M900 200v-50h100v50h-100z" /> +<glyph unicode="" d="M396 723l369 369q7 7 17.5 7t17.5 -7l139 -139q7 -8 7 -18.5t-7 -17.5l-525 -525q-7 -8 -17.5 -8t-17.5 8l-292 291q-7 8 -7 18t7 18l139 139q8 7 18.5 7t17.5 -7zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50 h-100z" /> +<glyph unicode="" d="M135 1023l142 142q14 14 35 14t35 -14l77 -77l-212 -212l-77 76q-14 15 -14 36t14 35zM655 855l210 210q14 14 24.5 10t10.5 -25l-2 -599q-1 -20 -15.5 -35t-35.5 -15l-597 -1q-21 0 -25 10.5t10 24.5l208 208l-154 155l212 212zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5 v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50h-100z" /> +<glyph unicode="" d="M350 1200l599 -2q20 -1 35 -15.5t15 -35.5l1 -597q0 -21 -10.5 -25t-24.5 10l-208 208l-155 -154l-212 212l155 154l-210 210q-14 14 -10 24.5t25 10.5zM524 512l-76 -77q-15 -14 -36 -14t-35 14l-142 142q-14 14 -14 35t14 35l77 77zM50 300h1000q21 0 35.5 -14.5 t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50h-100z" /> +<glyph unicode="" d="M1200 103l-483 276l-314 -399v423h-399l1196 796v-1096zM483 424v-230l683 953z" /> +<glyph unicode="" d="M1100 1000v-850q0 -21 -14.5 -35.5t-35.5 -14.5h-150v400h-700v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200z" /> +<glyph unicode="" d="M1100 1000l-2 -149l-299 -299l-95 95q-9 9 -21.5 9t-21.5 -9l-149 -147h-312v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM1132 638l106 -106q7 -7 7 -17.5t-7 -17.5l-420 -421q-8 -7 -18 -7 t-18 7l-202 203q-8 7 -8 17.5t8 17.5l106 106q7 8 17.5 8t17.5 -8l79 -79l297 297q7 7 17.5 7t17.5 -7z" /> +<glyph unicode="" d="M1100 1000v-269l-103 -103l-134 134q-15 15 -33.5 16.5t-34.5 -12.5l-266 -266h-329v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM1202 572l70 -70q15 -15 15 -35.5t-15 -35.5l-131 -131 l131 -131q15 -15 15 -35.5t-15 -35.5l-70 -70q-15 -15 -35.5 -15t-35.5 15l-131 131l-131 -131q-15 -15 -35.5 -15t-35.5 15l-70 70q-15 15 -15 35.5t15 35.5l131 131l-131 131q-15 15 -15 35.5t15 35.5l70 70q15 15 35.5 15t35.5 -15l131 -131l131 131q15 15 35.5 15 t35.5 -15z" /> +<glyph unicode="" d="M1100 1000v-300h-350q-21 0 -35.5 -14.5t-14.5 -35.5v-150h-500v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM850 600h100q21 0 35.5 -14.5t14.5 -35.5v-250h150q21 0 25 -10.5t-10 -24.5 l-230 -230q-14 -14 -35 -14t-35 14l-230 230q-14 14 -10 24.5t25 10.5h150v250q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M1100 1000v-400l-165 165q-14 15 -35 15t-35 -15l-263 -265h-402v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM935 565l230 -229q14 -15 10 -25.5t-25 -10.5h-150v-250q0 -20 -14.5 -35 t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35v250h-150q-21 0 -25 10.5t10 25.5l230 229q14 15 35 15t35 -15z" /> +<glyph unicode="" d="M50 1100h1100q21 0 35.5 -14.5t14.5 -35.5v-150h-1200v150q0 21 14.5 35.5t35.5 14.5zM1200 800v-550q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v550h1200zM100 500v-200h400v200h-400z" /> +<glyph unicode="" d="M935 1165l248 -230q14 -14 14 -35t-14 -35l-248 -230q-14 -14 -24.5 -10t-10.5 25v150h-400v200h400v150q0 21 10.5 25t24.5 -10zM200 800h-50q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v-200zM400 800h-100v200h100v-200zM18 435l247 230 q14 14 24.5 10t10.5 -25v-150h400v-200h-400v-150q0 -21 -10.5 -25t-24.5 10l-247 230q-15 14 -15 35t15 35zM900 300h-100v200h100v-200zM1000 500h51q20 0 34.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-34.5 -14.5h-51v200z" /> +<glyph unicode="" d="M862 1073l276 116q25 18 43.5 8t18.5 -41v-1106q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v397q-4 1 -11 5t-24 17.5t-30 29t-24 42t-11 56.5v359q0 31 18.5 65t43.5 52zM550 1200q22 0 34.5 -12.5t14.5 -24.5l1 -13v-450q0 -28 -10.5 -59.5 t-25 -56t-29 -45t-25.5 -31.5l-10 -11v-447q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v447q-4 4 -11 11.5t-24 30.5t-30 46t-24 55t-11 60v450q0 2 0.5 5.5t4 12t8.5 15t14.5 12t22.5 5.5q20 0 32.5 -12.5t14.5 -24.5l3 -13v-350h100v350v5.5t2.5 12 t7 15t15 12t25.5 5.5q23 0 35.5 -12.5t13.5 -24.5l1 -13v-350h100v350q0 2 0.5 5.5t3 12t7 15t15 12t24.5 5.5z" /> +<glyph unicode="" d="M1200 1100v-56q-4 0 -11 -0.5t-24 -3t-30 -7.5t-24 -15t-11 -24v-888q0 -22 25 -34.5t50 -13.5l25 -2v-56h-400v56q75 0 87.5 6.5t12.5 43.5v394h-500v-394q0 -37 12.5 -43.5t87.5 -6.5v-56h-400v56q4 0 11 0.5t24 3t30 7.5t24 15t11 24v888q0 22 -25 34.5t-50 13.5 l-25 2v56h400v-56q-75 0 -87.5 -6.5t-12.5 -43.5v-394h500v394q0 37 -12.5 43.5t-87.5 6.5v56h400z" /> +<glyph unicode="" d="M675 1000h375q21 0 35.5 -14.5t14.5 -35.5v-150h-105l-295 -98v98l-200 200h-400l100 100h375zM100 900h300q41 0 70.5 -29.5t29.5 -70.5v-500q0 -41 -29.5 -70.5t-70.5 -29.5h-300q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5zM100 800v-200h300v200 h-300zM1100 535l-400 -133v163l400 133v-163zM100 500v-200h300v200h-300zM1100 398v-248q0 -21 -14.5 -35.5t-35.5 -14.5h-375l-100 -100h-375l-100 100h400l200 200h105z" /> +<glyph unicode="" d="M17 1007l162 162q17 17 40 14t37 -22l139 -194q14 -20 11 -44.5t-20 -41.5l-119 -118q102 -142 228 -268t267 -227l119 118q17 17 42.5 19t44.5 -12l192 -136q19 -14 22.5 -37.5t-13.5 -40.5l-163 -162q-3 -1 -9.5 -1t-29.5 2t-47.5 6t-62.5 14.5t-77.5 26.5t-90 42.5 t-101.5 60t-111 83t-119 108.5q-74 74 -133.5 150.5t-94.5 138.5t-60 119.5t-34.5 100t-15 74.5t-4.5 48z" /> +<glyph unicode="" d="M600 1100q92 0 175 -10.5t141.5 -27t108.5 -36.5t81.5 -40t53.5 -37t31 -27l9 -10v-200q0 -21 -14.5 -33t-34.5 -9l-202 34q-20 3 -34.5 20t-14.5 38v146q-141 24 -300 24t-300 -24v-146q0 -21 -14.5 -38t-34.5 -20l-202 -34q-20 -3 -34.5 9t-14.5 33v200q3 4 9.5 10.5 t31 26t54 37.5t80.5 39.5t109 37.5t141 26.5t175 10.5zM600 795q56 0 97 -9.5t60 -23.5t30 -28t12 -24l1 -10v-50l365 -303q14 -15 24.5 -40t10.5 -45v-212q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v212q0 20 10.5 45t24.5 40l365 303v50 q0 4 1 10.5t12 23t30 29t60 22.5t97 10z" /> +<glyph unicode="" d="M1100 700l-200 -200h-600l-200 200v500h200v-200h200v200h200v-200h200v200h200v-500zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-12l137 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5 t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M700 1100h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-1000h300v1000q0 41 -29.5 70.5t-70.5 29.5zM1100 800h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-700h300v700q0 41 -29.5 70.5t-70.5 29.5zM400 0h-300v400q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-400z " /> +<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-100h200v-300h-300v100h200v100h-200v300h300v-100zM900 700v-300l-100 -100h-200v500h200z M700 700v-300h100v300h-100z" /> +<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 300h-100v200h-100v-200h-100v500h100v-200h100v200h100v-500zM900 700v-300l-100 -100h-200v500h200z M700 700v-300h100v300h-100z" /> +<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-300h200v-100h-300v500h300v-100zM900 700h-200v-300h200v-100h-300v500h300v-100z" /> +<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 400l-300 150l300 150v-300zM900 550l-300 -150v300z" /> +<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM900 300h-700v500h700v-500zM800 700h-130q-38 0 -66.5 -43t-28.5 -108t27 -107t68 -42h130v300zM300 700v-300 h130q41 0 68 42t27 107t-28.5 108t-66.5 43h-130z" /> +<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-100h200v-300h-300v100h200v100h-200v300h300v-100zM900 300h-100v400h-100v100h200v-500z M700 300h-100v100h100v-100z" /> +<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM300 700h200v-400h-300v500h100v-100zM900 300h-100v400h-100v100h200v-500zM300 600v-200h100v200h-100z M700 300h-100v100h100v-100z" /> +<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 500l-199 -200h-100v50l199 200v150h-200v100h300v-300zM900 300h-100v400h-100v100h200v-500zM701 300h-100 v100h100v-100z" /> +<glyph unicode="" d="M600 1191q120 0 229.5 -47t188.5 -126t126 -188.5t47 -229.5t-47 -229.5t-126 -188.5t-188.5 -126t-229.5 -47t-229.5 47t-188.5 126t-126 188.5t-47 229.5t47 229.5t126 188.5t188.5 126t229.5 47zM600 1021q-114 0 -211 -56.5t-153.5 -153.5t-56.5 -211t56.5 -211 t153.5 -153.5t211 -56.5t211 56.5t153.5 153.5t56.5 211t-56.5 211t-153.5 153.5t-211 56.5zM800 700h-300v-200h300v-100h-300l-100 100v200l100 100h300v-100z" /> +<glyph unicode="" d="M600 1191q120 0 229.5 -47t188.5 -126t126 -188.5t47 -229.5t-47 -229.5t-126 -188.5t-188.5 -126t-229.5 -47t-229.5 47t-188.5 126t-126 188.5t-47 229.5t47 229.5t126 188.5t188.5 126t229.5 47zM600 1021q-114 0 -211 -56.5t-153.5 -153.5t-56.5 -211t56.5 -211 t153.5 -153.5t211 -56.5t211 56.5t153.5 153.5t56.5 211t-56.5 211t-153.5 153.5t-211 56.5zM800 700v-100l-50 -50l100 -100v-50h-100l-100 100h-150v-100h-100v400h300zM500 700v-100h200v100h-200z" /> +<glyph unicode="" d="M503 1089q110 0 200.5 -59.5t134.5 -156.5q44 14 90 14q120 0 205 -86.5t85 -207t-85 -207t-205 -86.5h-128v250q0 21 -14.5 35.5t-35.5 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-250h-222q-80 0 -136 57.5t-56 136.5q0 69 43 122.5t108 67.5q-2 19 -2 37q0 100 49 185 t134 134t185 49zM525 500h150q10 0 17.5 -7.5t7.5 -17.5v-275h137q21 0 26 -11.5t-8 -27.5l-223 -244q-13 -16 -32 -16t-32 16l-223 244q-13 16 -8 27.5t26 11.5h137v275q0 10 7.5 17.5t17.5 7.5z" /> +<glyph unicode="" d="M502 1089q110 0 201 -59.5t135 -156.5q43 15 89 15q121 0 206 -86.5t86 -206.5q0 -99 -60 -181t-150 -110l-378 360q-13 16 -31.5 16t-31.5 -16l-381 -365h-9q-79 0 -135.5 57.5t-56.5 136.5q0 69 43 122.5t108 67.5q-2 19 -2 38q0 100 49 184.5t133.5 134t184.5 49.5z M632 467l223 -228q13 -16 8 -27.5t-26 -11.5h-137v-275q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v275h-137q-21 0 -26 11.5t8 27.5q199 204 223 228q19 19 31.5 19t32.5 -19z" /> +<glyph unicode="" d="M700 100v100h400l-270 300h170l-270 300h170l-300 333l-300 -333h170l-270 -300h170l-270 -300h400v-100h-50q-21 0 -35.5 -14.5t-14.5 -35.5v-50h400v50q0 21 -14.5 35.5t-35.5 14.5h-50z" /> +<glyph unicode="" d="M600 1179q94 0 167.5 -56.5t99.5 -145.5q89 -6 150.5 -71.5t61.5 -155.5q0 -61 -29.5 -112.5t-79.5 -82.5q9 -29 9 -55q0 -74 -52.5 -126.5t-126.5 -52.5q-55 0 -100 30v-251q21 0 35.5 -14.5t14.5 -35.5v-50h-300v50q0 21 14.5 35.5t35.5 14.5v251q-45 -30 -100 -30 q-74 0 -126.5 52.5t-52.5 126.5q0 18 4 38q-47 21 -75.5 65t-28.5 97q0 74 52.5 126.5t126.5 52.5q5 0 23 -2q0 2 -1 10t-1 13q0 116 81.5 197.5t197.5 81.5z" /> +<glyph unicode="" d="M1010 1010q111 -111 150.5 -260.5t0 -299t-150.5 -260.5q-83 -83 -191.5 -126.5t-218.5 -43.5t-218.5 43.5t-191.5 126.5q-111 111 -150.5 260.5t0 299t150.5 260.5q83 83 191.5 126.5t218.5 43.5t218.5 -43.5t191.5 -126.5zM476 1065q-4 0 -8 -1q-121 -34 -209.5 -122.5 t-122.5 -209.5q-4 -12 2.5 -23t18.5 -14l36 -9q3 -1 7 -1q23 0 29 22q27 96 98 166q70 71 166 98q11 3 17.5 13.5t3.5 22.5l-9 35q-3 13 -14 19q-7 4 -15 4zM512 920q-4 0 -9 -2q-80 -24 -138.5 -82.5t-82.5 -138.5q-4 -13 2 -24t19 -14l34 -9q4 -1 8 -1q22 0 28 21 q18 58 58.5 98.5t97.5 58.5q12 3 18 13.5t3 21.5l-9 35q-3 12 -14 19q-7 4 -15 4zM719.5 719.5q-49.5 49.5 -119.5 49.5t-119.5 -49.5t-49.5 -119.5t49.5 -119.5t119.5 -49.5t119.5 49.5t49.5 119.5t-49.5 119.5zM855 551q-22 0 -28 -21q-18 -58 -58.5 -98.5t-98.5 -57.5 q-11 -4 -17 -14.5t-3 -21.5l9 -35q3 -12 14 -19q7 -4 15 -4q4 0 9 2q80 24 138.5 82.5t82.5 138.5q4 13 -2.5 24t-18.5 14l-34 9q-4 1 -8 1zM1000 515q-23 0 -29 -22q-27 -96 -98 -166q-70 -71 -166 -98q-11 -3 -17.5 -13.5t-3.5 -22.5l9 -35q3 -13 14 -19q7 -4 15 -4 q4 0 8 1q121 34 209.5 122.5t122.5 209.5q4 12 -2.5 23t-18.5 14l-36 9q-3 1 -7 1z" /> +<glyph unicode="" d="M700 800h300v-380h-180v200h-340v-200h-380v755q0 10 7.5 17.5t17.5 7.5h575v-400zM1000 900h-200v200zM700 300h162l-212 -212l-212 212h162v200h100v-200zM520 0h-395q-10 0 -17.5 7.5t-7.5 17.5v395zM1000 220v-195q0 -10 -7.5 -17.5t-17.5 -7.5h-195z" /> +<glyph unicode="" d="M700 800h300v-520l-350 350l-550 -550v1095q0 10 7.5 17.5t17.5 7.5h575v-400zM1000 900h-200v200zM862 200h-162v-200h-100v200h-162l212 212zM480 0h-355q-10 0 -17.5 7.5t-7.5 17.5v55h380v-80zM1000 80v-55q0 -10 -7.5 -17.5t-17.5 -7.5h-155v80h180z" /> +<glyph unicode="" d="M1162 800h-162v-200h100l100 -100h-300v300h-162l212 212zM200 800h200q27 0 40 -2t29.5 -10.5t23.5 -30t7 -57.5h300v-100h-600l-200 -350v450h100q0 36 7 57.5t23.5 30t29.5 10.5t40 2zM800 400h240l-240 -400h-800l300 500h500v-100z" /> +<glyph unicode="" d="M650 1100h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5zM1000 850v150q41 0 70.5 -29.5t29.5 -70.5v-800 q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-1 0 -20 4l246 246l-326 326v324q0 41 29.5 70.5t70.5 29.5v-150q0 -62 44 -106t106 -44h300q62 0 106 44t44 106zM412 250l-212 -212v162h-200v100h200v162z" /> +<glyph unicode="" d="M450 1100h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5zM800 850v150q41 0 70.5 -29.5t29.5 -70.5v-500 h-200v-300h200q0 -36 -7 -57.5t-23.5 -30t-29.5 -10.5t-40 -2h-600q-41 0 -70.5 29.5t-29.5 70.5v800q0 41 29.5 70.5t70.5 29.5v-150q0 -62 44 -106t106 -44h300q62 0 106 44t44 106zM1212 250l-212 -212v162h-200v100h200v162z" /> +<glyph unicode="" d="M658 1197l637 -1104q23 -38 7 -65.5t-60 -27.5h-1276q-44 0 -60 27.5t7 65.5l637 1104q22 39 54 39t54 -39zM704 800h-208q-20 0 -32 -14.5t-8 -34.5l58 -302q4 -20 21.5 -34.5t37.5 -14.5h54q20 0 37.5 14.5t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5zM500 300v-100h200 v100h-200z" /> +<glyph unicode="" d="M425 1100h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM425 800h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5 t17.5 7.5zM825 800h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM25 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150 q0 10 7.5 17.5t17.5 7.5zM425 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM825 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5 v150q0 10 7.5 17.5t17.5 7.5zM25 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM425 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5 t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM825 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" /> +<glyph unicode="" d="M700 1200h100v-200h-100v-100h350q62 0 86.5 -39.5t-3.5 -94.5l-66 -132q-41 -83 -81 -134h-772q-40 51 -81 134l-66 132q-28 55 -3.5 94.5t86.5 39.5h350v100h-100v200h100v100h200v-100zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-12l137 -100 h-950l138 100h-13q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M600 1300q40 0 68.5 -29.5t28.5 -70.5h-194q0 41 28.5 70.5t68.5 29.5zM443 1100h314q18 -37 18 -75q0 -8 -3 -25h328q41 0 44.5 -16.5t-30.5 -38.5l-175 -145h-678l-178 145q-34 22 -29 38.5t46 16.5h328q-3 17 -3 25q0 38 18 75zM250 700h700q21 0 35.5 -14.5 t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-150v-200l275 -200h-950l275 200v200h-150q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M600 1181q75 0 128 -53t53 -128t-53 -128t-128 -53t-128 53t-53 128t53 128t128 53zM602 798h46q34 0 55.5 -28.5t21.5 -86.5q0 -76 39 -183h-324q39 107 39 183q0 58 21.5 86.5t56.5 28.5h45zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13 l138 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M600 1300q47 0 92.5 -53.5t71 -123t25.5 -123.5q0 -78 -55.5 -133.5t-133.5 -55.5t-133.5 55.5t-55.5 133.5q0 62 34 143l144 -143l111 111l-163 163q34 26 63 26zM602 798h46q34 0 55.5 -28.5t21.5 -86.5q0 -76 39 -183h-324q39 107 39 183q0 58 21.5 86.5t56.5 28.5h45 zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13l138 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M600 1200l300 -161v-139h-300q0 -57 18.5 -108t50 -91.5t63 -72t70 -67.5t57.5 -61h-530q-60 83 -90.5 177.5t-30.5 178.5t33 164.5t87.5 139.5t126 96.5t145.5 41.5v-98zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13l138 -100h-950l137 100 h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M600 1300q41 0 70.5 -29.5t29.5 -70.5v-78q46 -26 73 -72t27 -100v-50h-400v50q0 54 27 100t73 72v78q0 41 29.5 70.5t70.5 29.5zM400 800h400q54 0 100 -27t72 -73h-172v-100h200v-100h-200v-100h200v-100h-200v-100h200q0 -83 -58.5 -141.5t-141.5 -58.5h-400 q-83 0 -141.5 58.5t-58.5 141.5v400q0 83 58.5 141.5t141.5 58.5z" /> +<glyph unicode="" d="M150 1100h900q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5zM125 400h950q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-283l224 -224q13 -13 13 -31.5t-13 -32 t-31.5 -13.5t-31.5 13l-88 88h-524l-87 -88q-13 -13 -32 -13t-32 13.5t-13 32t13 31.5l224 224h-289q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM541 300l-100 -100h324l-100 100h-124z" /> +<glyph unicode="" d="M200 1100h800q83 0 141.5 -58.5t58.5 -141.5v-200h-100q0 41 -29.5 70.5t-70.5 29.5h-250q-41 0 -70.5 -29.5t-29.5 -70.5h-100q0 41 -29.5 70.5t-70.5 29.5h-250q-41 0 -70.5 -29.5t-29.5 -70.5h-100v200q0 83 58.5 141.5t141.5 58.5zM100 600h1000q41 0 70.5 -29.5 t29.5 -70.5v-300h-1200v300q0 41 29.5 70.5t70.5 29.5zM300 100v-50q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v50h200zM1100 100v-50q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v50h200z" /> +<glyph unicode="" d="M480 1165l682 -683q31 -31 31 -75.5t-31 -75.5l-131 -131h-481l-517 518q-32 31 -32 75.5t32 75.5l295 296q31 31 75.5 31t76.5 -31zM108 794l342 -342l303 304l-341 341zM250 100h800q21 0 35.5 -14.5t14.5 -35.5v-50h-900v50q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M1057 647l-189 506q-8 19 -27.5 33t-40.5 14h-400q-21 0 -40.5 -14t-27.5 -33l-189 -506q-8 -19 1.5 -33t30.5 -14h625v-150q0 -21 14.5 -35.5t35.5 -14.5t35.5 14.5t14.5 35.5v150h125q21 0 30.5 14t1.5 33zM897 0h-595v50q0 21 14.5 35.5t35.5 14.5h50v50 q0 21 14.5 35.5t35.5 14.5h48v300h200v-300h47q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-50z" /> +<glyph unicode="" d="M900 800h300v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-375v591l-300 300v84q0 10 7.5 17.5t17.5 7.5h375v-400zM1200 900h-200v200zM400 600h300v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-650q-10 0 -17.5 7.5t-7.5 17.5v950q0 10 7.5 17.5t17.5 7.5h375v-400zM700 700h-200v200z " /> +<glyph unicode="" d="M484 1095h195q75 0 146 -32.5t124 -86t89.5 -122.5t48.5 -142q18 -14 35 -20q31 -10 64.5 6.5t43.5 48.5q10 34 -15 71q-19 27 -9 43q5 8 12.5 11t19 -1t23.5 -16q41 -44 39 -105q-3 -63 -46 -106.5t-104 -43.5h-62q-7 -55 -35 -117t-56 -100l-39 -234q-3 -20 -20 -34.5 t-38 -14.5h-100q-21 0 -33 14.5t-9 34.5l12 70q-49 -14 -91 -14h-195q-24 0 -65 8l-11 -64q-3 -20 -20 -34.5t-38 -14.5h-100q-21 0 -33 14.5t-9 34.5l26 157q-84 74 -128 175l-159 53q-19 7 -33 26t-14 40v50q0 21 14.5 35.5t35.5 14.5h124q11 87 56 166l-111 95 q-16 14 -12.5 23.5t24.5 9.5h203q116 101 250 101zM675 1000h-250q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h250q10 0 17.5 7.5t7.5 17.5v50q0 10 -7.5 17.5t-17.5 7.5z" /> +<glyph unicode="" d="M641 900l423 247q19 8 42 2.5t37 -21.5l32 -38q14 -15 12.5 -36t-17.5 -34l-139 -120h-390zM50 1100h106q67 0 103 -17t66 -71l102 -212h823q21 0 35.5 -14.5t14.5 -35.5v-50q0 -21 -14 -40t-33 -26l-737 -132q-23 -4 -40 6t-26 25q-42 67 -100 67h-300q-62 0 -106 44 t-44 106v200q0 62 44 106t106 44zM173 928h-80q-19 0 -28 -14t-9 -35v-56q0 -51 42 -51h134q16 0 21.5 8t5.5 24q0 11 -16 45t-27 51q-18 28 -43 28zM550 727q-32 0 -54.5 -22.5t-22.5 -54.5t22.5 -54.5t54.5 -22.5t54.5 22.5t22.5 54.5t-22.5 54.5t-54.5 22.5zM130 389 l152 130q18 19 34 24t31 -3.5t24.5 -17.5t25.5 -28q28 -35 50.5 -51t48.5 -13l63 5l48 -179q13 -61 -3.5 -97.5t-67.5 -79.5l-80 -69q-47 -40 -109 -35.5t-103 51.5l-130 151q-40 47 -35.5 109.5t51.5 102.5zM380 377l-102 -88q-31 -27 2 -65l37 -43q13 -15 27.5 -19.5 t31.5 6.5l61 53q19 16 14 49q-2 20 -12 56t-17 45q-11 12 -19 14t-23 -8z" /> +<glyph unicode="" d="M625 1200h150q10 0 17.5 -7.5t7.5 -17.5v-109q79 -33 131 -87.5t53 -128.5q1 -46 -15 -84.5t-39 -61t-46 -38t-39 -21.5l-17 -6q6 0 15 -1.5t35 -9t50 -17.5t53 -30t50 -45t35.5 -64t14.5 -84q0 -59 -11.5 -105.5t-28.5 -76.5t-44 -51t-49.5 -31.5t-54.5 -16t-49.5 -6.5 t-43.5 -1v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-100v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-175q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h75v600h-75q-10 0 -17.5 7.5t-7.5 17.5v150 q0 10 7.5 17.5t17.5 7.5h175v75q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-75h100v75q0 10 7.5 17.5t17.5 7.5zM400 900v-200h263q28 0 48.5 10.5t30 25t15 29t5.5 25.5l1 10q0 4 -0.5 11t-6 24t-15 30t-30 24t-48.5 11h-263zM400 500v-200h363q28 0 48.5 10.5 t30 25t15 29t5.5 25.5l1 10q0 4 -0.5 11t-6 24t-15 30t-30 24t-48.5 11h-363z" /> +<glyph unicode="" d="M212 1198h780q86 0 147 -61t61 -147v-416q0 -51 -18 -142.5t-36 -157.5l-18 -66q-29 -87 -93.5 -146.5t-146.5 -59.5h-572q-82 0 -147 59t-93 147q-8 28 -20 73t-32 143.5t-20 149.5v416q0 86 61 147t147 61zM600 1045q-70 0 -132.5 -11.5t-105.5 -30.5t-78.5 -41.5 t-57 -45t-36 -41t-20.5 -30.5l-6 -12l156 -243h560l156 243q-2 5 -6 12.5t-20 29.5t-36.5 42t-57 44.5t-79 42t-105 29.5t-132.5 12zM762 703h-157l195 261z" /> +<glyph unicode="" d="M475 1300h150q103 0 189 -86t86 -189v-500q0 -41 -42 -83t-83 -42h-450q-41 0 -83 42t-42 83v500q0 103 86 189t189 86zM700 300v-225q0 -21 -27 -48t-48 -27h-150q-21 0 -48 27t-27 48v225h300z" /> +<glyph unicode="" d="M475 1300h96q0 -150 89.5 -239.5t239.5 -89.5v-446q0 -41 -42 -83t-83 -42h-450q-41 0 -83 42t-42 83v500q0 103 86 189t189 86zM700 300v-225q0 -21 -27 -48t-48 -27h-150q-21 0 -48 27t-27 48v225h300z" /> +<glyph unicode="" d="M1294 767l-638 -283l-378 170l-78 -60v-224l100 -150v-199l-150 148l-150 -149v200l100 150v250q0 4 -0.5 10.5t0 9.5t1 8t3 8t6.5 6l47 40l-147 65l642 283zM1000 380l-350 -166l-350 166v147l350 -165l350 165v-147z" /> +<glyph unicode="" d="M250 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM650 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM1050 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44z" /> +<glyph unicode="" d="M550 1100q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM550 700q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM550 300q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44z" /> +<glyph unicode="" d="M125 1100h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM125 700h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5 t17.5 7.5zM125 300h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" /> +<glyph unicode="" d="M350 1200h500q162 0 256 -93.5t94 -256.5v-500q0 -165 -93.5 -257.5t-256.5 -92.5h-500q-165 0 -257.5 92.5t-92.5 257.5v500q0 165 92.5 257.5t257.5 92.5zM900 1000h-600q-41 0 -70.5 -29.5t-29.5 -70.5v-600q0 -41 29.5 -70.5t70.5 -29.5h600q41 0 70.5 29.5 t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5zM350 900h500q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -14.5 -35.5t-35.5 -14.5h-500q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 14.5 35.5t35.5 14.5zM400 800v-200h400v200h-400z" /> +<glyph unicode="" d="M150 1100h1000q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5 t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M650 1187q87 -67 118.5 -156t0 -178t-118.5 -155q-87 66 -118.5 155t0 178t118.5 156zM300 800q124 0 212 -88t88 -212q-124 0 -212 88t-88 212zM1000 800q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM300 500q124 0 212 -88t88 -212q-124 0 -212 88t-88 212z M1000 500q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM700 199v-144q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v142q40 -4 43 -4q17 0 57 6z" /> +<glyph unicode="" d="M745 878l69 19q25 6 45 -12l298 -295q11 -11 15 -26.5t-2 -30.5q-5 -14 -18 -23.5t-28 -9.5h-8q1 0 1 -13q0 -29 -2 -56t-8.5 -62t-20 -63t-33 -53t-51 -39t-72.5 -14h-146q-184 0 -184 288q0 24 10 47q-20 4 -62 4t-63 -4q11 -24 11 -47q0 -288 -184 -288h-142 q-48 0 -84.5 21t-56 51t-32 71.5t-16 75t-3.5 68.5q0 13 2 13h-7q-15 0 -27.5 9.5t-18.5 23.5q-6 15 -2 30.5t15 25.5l298 296q20 18 46 11l76 -19q20 -5 30.5 -22.5t5.5 -37.5t-22.5 -31t-37.5 -5l-51 12l-182 -193h891l-182 193l-44 -12q-20 -5 -37.5 6t-22.5 31t6 37.5 t31 22.5z" /> +<glyph unicode="" d="M1200 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-850q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v850h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM500 450h-25q0 15 -4 24.5t-9 14.5t-17 7.5t-20 3t-25 0.5h-100v-425q0 -11 12.5 -17.5t25.5 -7.5h12v-50h-200v50q50 0 50 25v425h-100q-17 0 -25 -0.5t-20 -3t-17 -7.5t-9 -14.5t-4 -24.5h-25v150h500v-150z" /> +<glyph unicode="" d="M1000 300v50q-25 0 -55 32q-14 14 -25 31t-16 27l-4 11l-289 747h-69l-300 -754q-18 -35 -39 -56q-9 -9 -24.5 -18.5t-26.5 -14.5l-11 -5v-50h273v50q-49 0 -78.5 21.5t-11.5 67.5l69 176h293l61 -166q13 -34 -3.5 -66.5t-55.5 -32.5v-50h312zM412 691l134 342l121 -342 h-255zM1100 150v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5z" /> +<glyph unicode="" d="M50 1200h1100q21 0 35.5 -14.5t14.5 -35.5v-1100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v1100q0 21 14.5 35.5t35.5 14.5zM611 1118h-70q-13 0 -18 -12l-299 -753q-17 -32 -35 -51q-18 -18 -56 -34q-12 -5 -12 -18v-50q0 -8 5.5 -14t14.5 -6 h273q8 0 14 6t6 14v50q0 8 -6 14t-14 6q-55 0 -71 23q-10 14 0 39l63 163h266l57 -153q11 -31 -6 -55q-12 -17 -36 -17q-8 0 -14 -6t-6 -14v-50q0 -8 6 -14t14 -6h313q8 0 14 6t6 14v50q0 7 -5.5 13t-13.5 7q-17 0 -42 25q-25 27 -40 63h-1l-288 748q-5 12 -19 12zM639 611 h-197l103 264z" /> +<glyph unicode="" d="M1200 1100h-1200v100h1200v-100zM50 1000h400q21 0 35.5 -14.5t14.5 -35.5v-900q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v900q0 21 14.5 35.5t35.5 14.5zM650 1000h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM700 900v-300h300v300h-300z" /> +<glyph unicode="" d="M50 1200h400q21 0 35.5 -14.5t14.5 -35.5v-900q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v900q0 21 14.5 35.5t35.5 14.5zM650 700h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400 q0 21 14.5 35.5t35.5 14.5zM700 600v-300h300v300h-300zM1200 0h-1200v100h1200v-100z" /> +<glyph unicode="" d="M50 1000h400q21 0 35.5 -14.5t14.5 -35.5v-350h100v150q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-150h100v-100h-100v-150q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v150h-100v-350q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5zM700 700v-300h300v300h-300z" /> +<glyph unicode="" d="M100 0h-100v1200h100v-1200zM250 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM300 1000v-300h300v300h-300zM250 500h900q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M600 1100h150q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-150v-100h450q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5h350v100h-150q-21 0 -35.5 14.5 t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5h150v100h100v-100zM400 1000v-300h300v300h-300z" /> +<glyph unicode="" d="M1200 0h-100v1200h100v-1200zM550 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM600 1000v-300h300v300h-300zM50 500h900q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M865 565l-494 -494q-23 -23 -41 -23q-14 0 -22 13.5t-8 38.5v1000q0 25 8 38.5t22 13.5q18 0 41 -23l494 -494q14 -14 14 -35t-14 -35z" /> +<glyph unicode="" d="M335 635l494 494q29 29 50 20.5t21 -49.5v-1000q0 -41 -21 -49.5t-50 20.5l-494 494q-14 14 -14 35t14 35z" /> +<glyph unicode="" d="M100 900h1000q41 0 49.5 -21t-20.5 -50l-494 -494q-14 -14 -35 -14t-35 14l-494 494q-29 29 -20.5 50t49.5 21z" /> +<glyph unicode="" d="M635 865l494 -494q29 -29 20.5 -50t-49.5 -21h-1000q-41 0 -49.5 21t20.5 50l494 494q14 14 35 14t35 -14z" /> +<glyph unicode="" d="M700 741v-182l-692 -323v221l413 193l-413 193v221zM1200 0h-800v200h800v-200z" /> +<glyph unicode="" d="M1200 900h-200v-100h200v-100h-300v300h200v100h-200v100h300v-300zM0 700h50q0 21 4 37t9.5 26.5t18 17.5t22 11t28.5 5.5t31 2t37 0.5h100v-550q0 -22 -25 -34.5t-50 -13.5l-25 -2v-100h400v100q-4 0 -11 0.5t-24 3t-30 7t-24 15t-11 24.5v550h100q25 0 37 -0.5t31 -2 t28.5 -5.5t22 -11t18 -17.5t9.5 -26.5t4 -37h50v300h-800v-300z" /> +<glyph unicode="" d="M800 700h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-100v-550q0 -22 25 -34.5t50 -14.5l25 -1v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v550h-100q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h800v-300zM1100 200h-200v-100h200v-100h-300v300h200v100h-200v100h300v-300z" /> +<glyph unicode="" d="M701 1098h160q16 0 21 -11t-7 -23l-464 -464l464 -464q12 -12 7 -23t-21 -11h-160q-13 0 -23 9l-471 471q-7 8 -7 18t7 18l471 471q10 9 23 9z" /> +<glyph unicode="" d="M339 1098h160q13 0 23 -9l471 -471q7 -8 7 -18t-7 -18l-471 -471q-10 -9 -23 -9h-160q-16 0 -21 11t7 23l464 464l-464 464q-12 12 -7 23t21 11z" /> +<glyph unicode="" d="M1087 882q11 -5 11 -21v-160q0 -13 -9 -23l-471 -471q-8 -7 -18 -7t-18 7l-471 471q-9 10 -9 23v160q0 16 11 21t23 -7l464 -464l464 464q12 12 23 7z" /> +<glyph unicode="" d="M618 993l471 -471q9 -10 9 -23v-160q0 -16 -11 -21t-23 7l-464 464l-464 -464q-12 -12 -23 -7t-11 21v160q0 13 9 23l471 471q8 7 18 7t18 -7z" /> +<glyph unicode="" d="M1000 1200q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM450 1000h100q21 0 40 -14t26 -33l79 -194q5 1 16 3q34 6 54 9.5t60 7t65.5 1t61 -10t56.5 -23t42.5 -42t29 -64t5 -92t-19.5 -121.5q-1 -7 -3 -19.5t-11 -50t-20.5 -73t-32.5 -81.5t-46.5 -83t-64 -70 t-82.5 -50q-13 -5 -42 -5t-65.5 2.5t-47.5 2.5q-14 0 -49.5 -3.5t-63 -3.5t-43.5 7q-57 25 -104.5 78.5t-75 111.5t-46.5 112t-26 90l-7 35q-15 63 -18 115t4.5 88.5t26 64t39.5 43.5t52 25.5t58.5 13t62.5 2t59.5 -4.5t55.5 -8l-147 192q-12 18 -5.5 30t27.5 12z" /> +<glyph unicode="🔑" d="M250 1200h600q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-150v-500l-255 -178q-19 -9 -32 -1t-13 29v650h-150q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM400 1100v-100h300v100h-300z" /> +<glyph unicode="🚪" d="M250 1200h750q39 0 69.5 -40.5t30.5 -84.5v-933l-700 -117v950l600 125h-700v-1000h-100v1025q0 23 15.5 49t34.5 26zM500 525v-100l100 20v100z" /> +</font> +</defs></svg> \ No newline at end of file diff --git a/doc/doxygen/styling/glyphicons-halflings-regular.ttf b/doc/doxygen/styling/glyphicons-halflings-regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..1413fc609ab6f21774de0cb7e01360095584f65b GIT binary patch literal 45404 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 literal 0 HcmV?d00001 diff --git a/doc/doxygen/styling/glyphicons-halflings-regular.woff b/doc/doxygen/styling/glyphicons-halflings-regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..9e612858f802245ddcbf59788a0db942224bab35 GIT binary patch literal 23424 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 literal 0 HcmV?d00001 diff --git a/doc/doxygen/styling/header.html.in b/doc/doxygen/styling/header.html.in new file mode 100644 index 00000000000..b2a327eb2de --- /dev/null +++ b/doc/doxygen/styling/header.html.in @@ -0,0 +1,47 @@ +<!-- HTML header for doxygen 1.8.13--> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <!-- For Mobile Devices --> + <meta name="viewport" content="width=device-width, initial-scale=1"> + + <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> + <meta name="generator" content="Doxygen $doxygenversion"/> + + <!-- Stylesheets --> + <link rel="stylesheet" href="$relpath^bootstrap.min.css"> + <!--<link href="$relpath^tabs.css" rel="stylesheet" type="text/css"/>--> + <link href="$relpath^$stylesheet" rel="stylesheet" type="text/css" /> + + <!-- JavaScript --> + <script type="text/javascript" src="$relpath^jquery-2.1.1.min.js"></script> + <script type="text/javascript" src="$relpath^jquery.powertip.min.js"></script> + <script type="text/javascript" src="$relpath^bootstrap.min.js"></script> + <script type="text/javascript" src="$relpath^dynsections.js"></script> + <script type="text/javascript" src="$relpath^doxy-boot.js"></script> + + <!--BEGIN PROJECT_NAME--><title>$projectname: $title</title><!--END PROJECT_NAME--> + <!--BEGIN !PROJECT_NAME--><title>$title</title><!--END !PROJECT_NAME--> + + $treeview + $search + $mathjax + $extrastylesheet + </head> + <body> + <nav class="navbar navbar-default" role="navigation"> + <div class="container"> + <div class="navbar-header"> + <a class="navbar-brand" href="$relpath^"><img src="$relpath^$projectlogo"><br> + Software Documentation for "$projectnumber"</a> + </div> + </div> + </nav> + <div id="top"><!-- do not remove this div, it is closed by doxygen! --> + <div class="content" id="content"> + <div class="container"> + <div class="row"> + <div class="col-sm-12 panel " style="padding-bottom: 15px;"> + <div style="margin-bottom: 15px;"> +<!-- end header part --> diff --git a/doc/doxygen/styling/jquery-2.1.1.js.in b/doc/doxygen/styling/jquery-2.1.1.js.in new file mode 100644 index 00000000000..9f7b3d38958 --- /dev/null +++ b/doc/doxygen/styling/jquery-2.1.1.js.in @@ -0,0 +1,9190 @@ +/*! + * jQuery JavaScript Library v2.1.1 + * http://jquery.com/ + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * + * Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2014-05-01T17:11Z + */ + +(function( global, factory ) { + + 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 inherently posses a window with a document + // (such as Node.js), expose a jQuery-making 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 ) { + +// Can't do this because several apps including ASP.NET trace +// the stack via arguments.caller.callee and Firefox dies if +// you try to trace through "use strict" call chains. (#13335) +// Support: Firefox 18+ +// + +var arr = []; + +var slice = arr.slice; + +var concat = arr.concat; + +var push = arr.push; + +var indexOf = arr.indexOf; + +var class2type = {}; + +var toString = class2type.toString; + +var hasOwn = class2type.hasOwnProperty; + +var support = {}; + + + +var + // Use the correct document accordingly with window argument (sandbox) + document = window.document, + + version = "2.1.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 ); + }, + + // Support: Android<4.1 + // Make sure we trim BOM and NBSP + rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, + + // Matches dashed string for camelizing + rmsPrefix = /^-ms-/, + rdashAlpha = /-([\da-z])/gi, + + // Used by jQuery.camelCase as callback to replace() + fcamelCase = function( all, letter ) { + return letter.toUpperCase(); + }; + +jQuery.fn = jQuery.prototype = { + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // Start with an empty selector + selector: "", + + // 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 num != null ? + + // Return just the one element from the set + ( num < 0 ? this[ num + this.length ] : this[ num ] ) : + + // Return all the elements in a clean array + slice.call( this ); + }, + + // 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; + ret.context = this.context; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + // (You can seed the arguments with an array of args, but this is + // only used internally.) + each: function( callback, args ) { + return jQuery.each( this, callback, args ); + }, + + 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 ); + }, + + 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(null); + }, + + // 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" && !jQuery.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 ) { + src = target[ name ]; + copy = options[ name ]; + + // Prevent never-ending loop + if ( target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) { + if ( copyIsArray ) { + copyIsArray = false; + clone = src && jQuery.isArray(src) ? src : []; + + } else { + clone = src && jQuery.isPlainObject(src) ? src : {}; + } + + // 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() {}, + + // See test/unit/core.js for details concerning isFunction. + // Since version 1.3, DOM methods and functions like alert + // aren't supported. They return false on IE (#2968). + isFunction: function( obj ) { + return jQuery.type(obj) === "function"; + }, + + isArray: Array.isArray, + + isWindow: function( obj ) { + return obj != null && obj === obj.window; + }, + + isNumeric: function( obj ) { + // parseFloat NaNs numeric-cast false positives (null|true|false|"") + // ...but misinterprets leading-number strings, particularly hex literals ("0x...") + // subtraction forces infinities to NaN + return !jQuery.isArray( obj ) && obj - parseFloat( obj ) >= 0; + }, + + isPlainObject: function( obj ) { + // Not plain objects: + // - Any object or value whose internal [[Class]] property is not "[object Object]" + // - DOM nodes + // - window + if ( jQuery.type( obj ) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { + return false; + } + + if ( obj.constructor && + !hasOwn.call( obj.constructor.prototype, "isPrototypeOf" ) ) { + return false; + } + + // If the function hasn't returned already, we're confident that + // |obj| is a plain object, created by {} or constructed with new Object + return true; + }, + + isEmptyObject: function( obj ) { + var name; + for ( name in obj ) { + return false; + } + return true; + }, + + type: function( obj ) { + if ( obj == null ) { + return obj + ""; + } + // Support: Android < 4.0, iOS < 6 (functionish RegExp) + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call(obj) ] || "object" : + typeof obj; + }, + + // Evaluates a script in a global context + globalEval: function( code ) { + var script, + indirect = eval; + + code = jQuery.trim( code ); + + if ( code ) { + // If the code includes a valid, prologue position + // strict mode pragma, execute code by injecting a + // script tag into the document. + if ( code.indexOf("use strict") === 1 ) { + script = document.createElement("script"); + script.text = code; + document.head.appendChild( script ).parentNode.removeChild( script ); + } else { + // Otherwise, avoid the DOM node creation, insertion + // and removal by using an indirect global eval + indirect( code ); + } + } + }, + + // Convert dashed to camelCase; used by the css and data modules + // Microsoft forgot to hump their vendor prefix (#9572) + camelCase: function( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); + }, + + nodeName: function( elem, name ) { + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + }, + + // args is for internal usage only + each: function( obj, callback, args ) { + var value, + i = 0, + length = obj.length, + isArray = isArraylike( obj ); + + if ( args ) { + if ( isArray ) { + for ( ; i < length; i++ ) { + value = callback.apply( obj[ i ], args ); + + if ( value === false ) { + break; + } + } + } else { + for ( i in obj ) { + value = callback.apply( obj[ i ], args ); + + if ( value === false ) { + break; + } + } + } + + // A special, fast, case for the most common use of each + } else { + if ( isArray ) { + for ( ; i < length; i++ ) { + value = callback.call( obj[ i ], i, obj[ i ] ); + + if ( value === false ) { + break; + } + } + } else { + for ( i in obj ) { + value = callback.call( obj[ i ], i, obj[ i ] ); + + if ( value === false ) { + break; + } + } + } + } + + return obj; + }, + + // Support: Android<4.1 + trim: function( text ) { + return text == null ? + "" : + ( text + "" ).replace( rtrim, "" ); + }, + + // 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 ); + }, + + 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 value, + i = 0, + length = elems.length, + isArray = isArraylike( elems ), + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArray ) { + 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 concat.apply( [], ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // Bind a function to a context, optionally partially applying any + // arguments. + proxy: function( fn, context ) { + var tmp, args, proxy; + + if ( typeof context === "string" ) { + tmp = fn[ context ]; + context = fn; + fn = tmp; + } + + // Quick check to determine if target is callable, in the spec + // this throws a TypeError, but we will just return undefined. + if ( !jQuery.isFunction( fn ) ) { + return undefined; + } + + // Simulated bind + args = slice.call( arguments, 2 ); + proxy = function() { + return fn.apply( context || this, args.concat( slice.call( arguments ) ) ); + }; + + // Set the guid of unique handler to the same of original handler, so it can be removed + proxy.guid = fn.guid = fn.guid || jQuery.guid++; + + return proxy; + }, + + now: Date.now, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +}); + +// Populate the class2type map +jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +}); + +function isArraylike( obj ) { + var length = obj.length, + type = jQuery.type( obj ); + + if ( type === "function" || jQuery.isWindow( obj ) ) { + return false; + } + + if ( obj.nodeType === 1 && length ) { + return true; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; +} +var Sizzle = +/*! + * Sizzle CSS Selector Engine v1.10.19 + * http://sizzlejs.com/ + * + * Copyright 2013 jQuery Foundation, Inc. and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2014-04-18 + */ +(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" + -(new Date()), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + // General-purpose constants + strundefined = typeof undefined, + MAX_NEGATIVE = 1 << 31, + + // Instance methods + hasOwn = ({}).hasOwnProperty, + arr = [], + pop = arr.pop, + push_native = arr.push, + push = arr.push, + slice = arr.slice, + // Use a stripped-down indexOf if we can't use a native one + indexOf = arr.indexOf || function( elem ) { + var i = 0, + len = this.length; + for ( ; i < len; i++ ) { + if ( this[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 + + // Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + // http://www.w3.org/TR/css3-syntax/#characters + characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+", + + // Loosely modeled on CSS identifier characters + // An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors + // Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier + identifier = characterEncoding.replace( "w", "w#" ), + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + characterEncoding + ")(?:" + whitespace + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + + "*\\]", + + pseudos = ":(" + characterEncoding + ")(?:\\((" + + // 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 + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), + + rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + characterEncoding + ")" ), + "CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ), + "TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ), + "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" ) + }, + + 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 = /[+~]/, + rescape = /'|\\/g, + + // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), + funescape = function( _, escaped, escapedWhitespace ) { + var high = "0x" + escaped - 0x10000; + // NaN means non-codepoint + // Support: Firefox<24 + // Workaround erroneous numeric interpretation of +"0x" + return high !== high || escapedWhitespace ? + escaped : + high < 0 ? + // BMP codepoint + String.fromCharCode( high + 0x10000 ) : + // Supplemental Plane codepoint (surrogate pair) + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }; + +// Optimize for push.apply( _, NodeList ) +try { + push.apply( + (arr = slice.call( preferredDoc.childNodes )), + preferredDoc.childNodes + ); + // Support: Android<4.0 + // Detect silently failing push.apply + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + push_native.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 match, elem, m, nodeType, + // QSA vars + i, groups, old, nid, newContext, newSelector; + + if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { + setDocument( context ); + } + + context = context || document; + results = results || []; + + if ( !selector || typeof selector !== "string" ) { + return results; + } + + if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) { + return []; + } + + if ( documentIsHTML && !seed ) { + + // Shortcuts + if ( (match = rquickExpr.exec( selector )) ) { + // Speed-up: Sizzle("#ID") + if ( (m = match[1]) ) { + if ( nodeType === 9 ) { + elem = context.getElementById( m ); + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document (jQuery #6963) + if ( elem && elem.parentNode ) { + // Handle the case where IE, Opera, and Webkit return items + // by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + } else { + // Context is not a document + if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) && + contains( context, elem ) && elem.id === m ) { + results.push( elem ); + return results; + } + } + + // Speed-up: Sizzle("TAG") + } else if ( match[2] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Speed-up: Sizzle(".CLASS") + } else if ( (m = match[3]) && support.getElementsByClassName && context.getElementsByClassName ) { + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // QSA path + if ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { + nid = old = expando; + newContext = context; + newSelector = nodeType === 9 && selector; + + // qSA works strangely on Element-rooted queries + // We can work around this by specifying an extra ID on the root + // and working up from there (Thanks to Andrew Dupont for the technique) + // IE 8 doesn't work on object elements + if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) { + groups = tokenize( selector ); + + if ( (old = context.getAttribute("id")) ) { + nid = old.replace( rescape, "\\$&" ); + } else { + context.setAttribute( "id", nid ); + } + nid = "[id='" + nid + "'] "; + + i = groups.length; + while ( i-- ) { + groups[i] = nid + toSelector( groups[i] ); + } + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || context; + newSelector = groups.join(","); + } + + if ( newSelector ) { + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch(qsaError) { + } finally { + if ( !old ) { + 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 div and expects a boolean result + */ +function assert( fn ) { + var div = document.createElement("div"); + + try { + return !!fn( div ); + } catch (e) { + return false; + } finally { + // Remove from its parent by default + if ( div.parentNode ) { + div.parentNode.removeChild( div ); + } + // release memory in IE + div = 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 = attrs.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 && + ( ~b.sourceIndex || MAX_NEGATIVE ) - + ( ~a.sourceIndex || MAX_NEGATIVE ); + + // 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 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 !== strundefined && 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 ) { + // documentElement is verified for cases where it doesn't yet exist + // (such as loading iframes in IE - #4833) + var documentElement = elem && (elem.ownerDocument || elem).documentElement; + return documentElement ? documentElement.nodeName !== "HTML" : false; +}; + +/** + * 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, + doc = node ? node.ownerDocument || node : preferredDoc, + parent = doc.defaultView; + + // If no document and documentElement is available, return + if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Set our document + document = doc; + docElem = doc.documentElement; + + // Support tests + documentIsHTML = !isXML( doc ); + + // Support: IE>8 + // If iframe document is assigned to "document" variable and if iframe has been reloaded, + // IE will throw "permission denied" error when accessing "document" variable, see jQuery #13936 + // IE6-8 do not support the defaultView property so parent will be undefined + if ( parent && parent !== parent.top ) { + // IE11 does not have attachEvent, so all must suffer + if ( parent.addEventListener ) { + parent.addEventListener( "unload", function() { + setDocument(); + }, false ); + } else if ( parent.attachEvent ) { + parent.attachEvent( "onunload", function() { + setDocument(); + }); + } + } + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties (excepting IE8 booleans) + support.attributes = assert(function( div ) { + div.className = "i"; + return !div.getAttribute("className"); + }); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert(function( div ) { + div.appendChild( doc.createComment("") ); + return !div.getElementsByTagName("*").length; + }); + + // Check if getElementsByClassName can be trusted + support.getElementsByClassName = rnative.test( doc.getElementsByClassName ) && assert(function( div ) { + div.innerHTML = "<div class='a'></div><div class='a i'></div>"; + + // Support: Safari<4 + // Catch class over-caching + div.firstChild.className = "i"; + // Support: Opera<10 + // Catch gEBCN failure to find non-leading classes + return div.getElementsByClassName("i").length === 2; + }); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert(function( div ) { + docElem.appendChild( div ).id = expando; + return !doc.getElementsByName || !doc.getElementsByName( expando ).length; + }); + + // ID find and filter + if ( support.getById ) { + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== strundefined && documentIsHTML ) { + var m = context.getElementById( id ); + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + return m && m.parentNode ? [ m ] : []; + } + }; + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute("id") === attrId; + }; + }; + } else { + // Support: IE6/7 + // getElementById is not reliable as a find shortcut + delete Expr.find["ID"]; + + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id"); + return node && node.value === attrId; + }; + }; + } + + // Tag + Expr.find["TAG"] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== strundefined ) { + return context.getElementsByTagName( tag ); + } + } : + function( tag, context ) { + var elem, + tmp = [], + i = 0, + 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 !== strundefined && 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 http://bugs.jquery.com/ticket/13378 + rbuggyQSA = []; + + if ( (support.qsa = rnative.test( doc.querySelectorAll )) ) { + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert(function( div ) { + // 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 + // http://bugs.jquery.com/ticket/12359 + div.innerHTML = "<select msallowclip=''><option selected=''></option></select>"; + + // 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 + // http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section + if ( div.querySelectorAll("[msallowclip^='']").length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !div.querySelectorAll("[selected]").length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // 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 ( !div.querySelectorAll(":checked").length ) { + rbuggyQSA.push(":checked"); + } + }); + + assert(function( div ) { + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + var input = doc.createElement("input"); + input.setAttribute( "type", "hidden" ); + div.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE8 + // Enforce case-sensitivity of name attribute + if ( div.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 ( !div.querySelectorAll(":enabled").length ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Opera 10-11 does not throw on post-comma invalid pseudos + div.querySelectorAll("*,:x"); + rbuggyQSA.push(",.*:"); + }); + } + + if ( (support.matchesSelector = rnative.test( (matches = docElem.matches || + docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector) )) ) { + + assert(function( div ) { + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( div, "div" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( div, "[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 does not implement inclusive descendent + // 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 + 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 + if ( a === doc || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { + return -1; + } + if ( b === doc || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf.call( sortInput, a ) - indexOf.call( 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 ) { + return a === doc ? -1 : + b === doc ? 1 : + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf.call( sortInput, a ) - indexOf.call( 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 + ap[i] === preferredDoc ? -1 : + bp[i] === preferredDoc ? 1 : + 0; + }; + + return doc; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + // Make sure that attribute selectors are quoted + expr = expr.replace( rattributeQuotes, "='$1']" ); + + if ( support.matchesSelector && documentIsHTML && + ( !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) {} + } + + return Sizzle( expr, document, null, [ elem ] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + // Set document vars if needed + if ( ( context.ownerDocument || context ) !== document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + // Set document vars if needed + 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.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 !== strundefined && 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 += ""; + + 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 + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + }; + }, + + "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, outerCache, node, diff, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType; + + 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 + outerCache = parent[ expando ] || (parent[ expando ] = {}); + cache = outerCache[ type ] || []; + nodeIndex = cache[0] === dirruns && cache[1]; + diff = cache[0] === dirruns && 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 ) { + outerCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + // Use previously-cached element index if available + } else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) { + diff = cache[1]; + + // xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...) + } else { + // 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 ) { + (node[ expando ] || (node[ expando ] = {}))[ 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.call( 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 ); + return !results.pop(); + }; + }), + + "has": markFunction(function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + }), + + "contains": markFunction(function( text ) { + return function( elem ) { + return ( elem.textContent || elem.innerText || 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": function( elem ) { + return elem.disabled === false; + }, + + "disabled": function( elem ) { + return elem.disabled === 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 ) { + 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; + 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, + checkNonElements = base && dir === "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 ); + } + } + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var oldCache, outerCache, + newCache = [ dirruns, doneName ]; + + // We can't set arbitrary data on XML nodes, so they don't benefit from dir 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 ] = {}); + if ( (oldCache = outerCache[ dir ]) && + 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 + outerCache[ dir ] = newCache; + + // A match means we're done; a fail means we have to keep checking + if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { + return true; + } + } + } + } + } + }; +} + +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.call( 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.call( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + return ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + (checkContext = context).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + } ]; + + 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 ) { + outermostContext = context !== document && context; + } + + // Add elements passing elementMatchers directly to results + // Keep `i` a string if there are no elements so `matchedCount` will be "00" below + // Support: IE<9, Safari + // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id + for ( ; i !== len && (elem = elems[i]) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + while ( (matcher = elementMatchers[j++]) ) { + if ( matcher( elem, context, 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 ); + } + } + } + + // Apply set filters to unmatched elements + matchedCount += i; + 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 no seed and only one group + if ( match.length === 1 ) { + + // Take a shortcut and set the context if the root selector is an ID + tokens = match[0] = match[0].slice( 0 ); + if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && + support.getById && 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, + 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 +// 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( div1 ) { + // Should return 1, but returns 4 (following) + return div1.compareDocumentPosition( document.createElement("div") ) & 1; +}); + +// Support: IE<8 +// Prevent attribute/property "interpolation" +// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx +if ( !assert(function( div ) { + div.innerHTML = "<a href='#'></a>"; + return div.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( div ) { + div.innerHTML = "<input/>"; + div.firstChild.setAttribute( "value", "" ); + return div.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( div ) { + return div.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; +jQuery.expr[":"] = jQuery.expr.pseudos; +jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; + + + +var rneedsContext = jQuery.expr.match.needsContext; + +var rsingleTag = (/^<(\w+)\s*\/?>(?:<\/\1>|)$/); + + + +var risSimple = /^.[^:#\[\.,]*$/; + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, not ) { + if ( jQuery.isFunction( qualifier ) ) { + return jQuery.grep( elements, function( elem, i ) { + /* jshint -W018 */ + return !!qualifier.call( elem, i, elem ) !== not; + }); + + } + + if ( qualifier.nodeType ) { + return jQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + }); + + } + + if ( typeof qualifier === "string" ) { + if ( risSimple.test( qualifier ) ) { + return jQuery.filter( qualifier, elements, not ); + } + + qualifier = jQuery.filter( qualifier, elements ); + } + + return jQuery.grep( elements, function( elem ) { + return ( indexOf.call( qualifier, elem ) >= 0 ) !== not; + }); +} + +jQuery.filter = function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + return elems.length === 1 && elem.nodeType === 1 ? + jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] : + jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + })); +}; + +jQuery.fn.extend({ + find: function( selector ) { + var i, + len = this.length, + ret = [], + 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; + } + } + }) ); + } + + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, self[ i ], ret ); + } + + // Needed because $( selector, context ) becomes $( context ).find( selector ) + ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret ); + ret.selector = this.selector ? this.selector + " " + selector : selector; + return 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 <tag> to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/, + + init = jQuery.fn.init = function( selector, context ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // 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; + + // 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 ( jQuery.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] ); + + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if ( elem && elem.parentNode ) { + // Inject the element directly into the jQuery object + this.length = 1; + this[0] = elem; + } + + this.context = document; + this.selector = selector; + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || rootjQuery ).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.context = this[0] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( jQuery.isFunction( selector ) ) { + return typeof rootjQuery.ready !== "undefined" ? + rootjQuery.ready( selector ) : + // Execute immediately if ready is not present + selector( jQuery ); + } + + if ( selector.selector !== undefined ) { + this.selector = selector.selector; + this.context = selector.context; + } + + 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.extend({ + 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; + }, + + sibling: function( n, elem ) { + var matched = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + matched.push( n ); + } + } + + return matched; + } +}); + +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 = [], + pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ? + jQuery( selectors, context || this.context ) : + 0; + + for ( ; i < l; i++ ) { + for ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) { + // Always skip document fragments + if ( cur.nodeType < 11 && (pos ? + pos.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.unique( matched ) : matched ); + }, + + // Determine the position of an element within + // the matched set of elements + 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.unique( + 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 jQuery.dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, i, until ) { + return jQuery.dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return jQuery.dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return jQuery.dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, i, until ) { + return jQuery.dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, i, until ) { + return jQuery.dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return jQuery.sibling( elem.firstChild ); + }, + contents: function( elem ) { + return elem.contentDocument || 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.unique( matched ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + matched.reverse(); + } + } + + return this.pushStack( matched ); + }; +}); +var rnotwhite = (/\S+/g); + + + +// String to Object options format cache +var optionsCache = {}; + +// Convert String-formatted options into Object-formatted ones and store in cache +function createOptions( options ) { + var object = optionsCache[ options ] = {}; + jQuery.each( options.match( rnotwhite ) || [], 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" ? + ( optionsCache[ options ] || createOptions( options ) ) : + jQuery.extend( {}, options ); + + var // Last fire value (for non-forgettable lists) + memory, + // Flag to know if list was already fired + fired, + // Flag to know if list is currently firing + firing, + // First callback to fire (used internally by add and fireWith) + firingStart, + // End of the loop when firing + firingLength, + // Index of currently firing callback (modified by remove if needed) + firingIndex, + // Actual callback list + list = [], + // Stack of fire calls for repeatable lists + stack = !options.once && [], + // Fire callbacks + fire = function( data ) { + memory = options.memory && data; + fired = true; + firingIndex = firingStart || 0; + firingStart = 0; + firingLength = list.length; + firing = true; + for ( ; list && firingIndex < firingLength; firingIndex++ ) { + if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) { + memory = false; // To prevent further calls using add + break; + } + } + firing = false; + if ( list ) { + if ( stack ) { + if ( stack.length ) { + fire( stack.shift() ); + } + } else if ( memory ) { + list = []; + } else { + self.disable(); + } + } + }, + // Actual Callbacks object + self = { + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + // First, we save the current length + var start = list.length; + (function add( args ) { + jQuery.each( args, function( _, arg ) { + var type = jQuery.type( arg ); + if ( type === "function" ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && type !== "string" ) { + // Inspect recursively + add( arg ); + } + }); + })( arguments ); + // Do we need to add the callbacks to the + // current firing batch? + if ( firing ) { + firingLength = list.length; + // With memory, if we're not firing then + // we should call right away + } else if ( memory ) { + firingStart = start; + fire( memory ); + } + } + return this; + }, + // Remove a callback from the list + remove: function() { + if ( list ) { + jQuery.each( arguments, function( _, arg ) { + var index; + while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + // Handle firing indexes + if ( firing ) { + if ( index <= firingLength ) { + firingLength--; + } + 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 && list.length ); + }, + // Remove all callbacks from the list + empty: function() { + list = []; + firingLength = 0; + return this; + }, + // Have the list do nothing anymore + disable: function() { + list = stack = memory = undefined; + return this; + }, + // Is it disabled? + disabled: function() { + return !list; + }, + // Lock the list in its current state + lock: function() { + stack = undefined; + if ( !memory ) { + self.disable(); + } + return this; + }, + // Is it locked? + locked: function() { + return !stack; + }, + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( list && ( !fired || stack ) ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + if ( firing ) { + stack.push( args ); + } else { + fire( args ); + } + } + 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; +}; + + +jQuery.extend({ + + Deferred: function( func ) { + var tuples = [ + // action, add listener, listener list, final state + [ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ], + [ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ], + [ "notify", "progress", jQuery.Callbacks("memory") ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + then: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + return jQuery.Deferred(function( newDefer ) { + jQuery.each( tuples, function( i, tuple ) { + var fn = jQuery.isFunction( fns[ i ] ) && fns[ i ]; + // deferred[ done | fail | progress ] for forwarding actions to newDefer + deferred[ tuple[1] ](function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && jQuery.isFunction( returned.promise ) ) { + returned.promise() + .done( newDefer.resolve ) + .fail( newDefer.reject ) + .progress( newDefer.notify ); + } else { + newDefer[ tuple[ 0 ] + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments ); + } + }); + }); + fns = null; + }).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 = {}; + + // Keep pipe for back-compat + promise.pipe = promise.then; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 3 ]; + + // promise[ done | fail | progress ] = list.add + promise[ tuple[1] ] = list.add; + + // Handle state + if ( stateString ) { + list.add(function() { + // state = [ resolved | rejected ] + state = stateString; + + // [ reject_list | resolve_list ].disable; progress_list.lock + }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock ); + } + + // deferred[ resolve | reject | notify ] + deferred[ tuple[0] ] = function() { + deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments ); + return this; + }; + 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( subordinate /* , ..., subordinateN */ ) { + var i = 0, + resolveValues = slice.call( arguments ), + length = resolveValues.length, + + // the count of uncompleted subordinates + remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0, + + // the master Deferred. If resolveValues consist of only a single Deferred, just use that. + deferred = remaining === 1 ? subordinate : jQuery.Deferred(), + + // Update function for both resolve and progress values + updateFunc = function( i, contexts, values ) { + return function( value ) { + contexts[ i ] = this; + values[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; + if ( values === progressValues ) { + deferred.notifyWith( contexts, values ); + } else if ( !( --remaining ) ) { + deferred.resolveWith( contexts, values ); + } + }; + }, + + progressValues, progressContexts, resolveContexts; + + // add listeners to Deferred subordinates; treat others as resolved + if ( length > 1 ) { + progressValues = new Array( length ); + progressContexts = new Array( length ); + resolveContexts = new Array( length ); + for ( ; i < length; i++ ) { + if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) { + resolveValues[ i ].promise() + .done( updateFunc( i, resolveContexts, resolveValues ) ) + .fail( deferred.reject ) + .progress( updateFunc( i, progressContexts, progressValues ) ); + } else { + --remaining; + } + } + } + + // if we're not waiting on anything, resolve the master + if ( !remaining ) { + deferred.resolveWith( resolveContexts, resolveValues ); + } + + return deferred.promise(); + } +}); + + +// The deferred used on DOM ready +var readyList; + +jQuery.fn.ready = function( fn ) { + // Add the callback + jQuery.ready.promise().done( fn ); + + 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, + + // Hold (or release) the ready event + holdReady: function( hold ) { + if ( hold ) { + jQuery.readyWait++; + } else { + jQuery.ready( true ); + } + }, + + // 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 ] ); + + // Trigger any bound ready events + if ( jQuery.fn.triggerHandler ) { + jQuery( document ).triggerHandler( "ready" ); + jQuery( document ).off( "ready" ); + } + } +}); + +/** + * The ready event handler and self cleanup method + */ +function completed() { + document.removeEventListener( "DOMContentLoaded", completed, false ); + window.removeEventListener( "load", completed, false ); + jQuery.ready(); +} + +jQuery.ready.promise = function( obj ) { + if ( !readyList ) { + + readyList = jQuery.Deferred(); + + // Catch cases where $(document).ready() is called after the browser event has already occurred. + // we once tried to use readyState "interactive" here, but it caused issues like the one + // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15 + if ( document.readyState === "complete" ) { + // Handle it asynchronously to allow scripts the opportunity to delay ready + setTimeout( jQuery.ready ); + + } else { + + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed, false ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed, false ); + } + } + return readyList.promise( obj ); +}; + +// Kick off the DOM ready check even if the user does not +jQuery.ready.promise(); + + + + +// Multifunctional method to get and set values of a collection +// The value/s can optionally be executed if it's a function +var access = jQuery.access = function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + len = elems.length, + bulk = key == null; + + // Sets many values + if ( jQuery.type( key ) === "object" ) { + chainable = true; + for ( i in key ) { + jQuery.access( elems, fn, i, key[i], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !jQuery.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 ) ) ); + } + } + } + + return chainable ? + elems : + + // Gets + bulk ? + fn.call( elems ) : + len ? fn( elems[0], key ) : emptyGet; +}; + + +/** + * Determines whether an object can have data + */ +jQuery.acceptData = function( owner ) { + // Accepts only: + // - Node + // - Node.ELEMENT_NODE + // - Node.DOCUMENT_NODE + // - Object + // - Any + /* jshint -W018 */ + return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); +}; + + +function Data() { + // Support: Android < 4, + // Old WebKit does not have Object.preventExtensions/freeze method, + // return new empty object instead with no [[set]] accessor + Object.defineProperty( this.cache = {}, 0, { + get: function() { + return {}; + } + }); + + this.expando = jQuery.expando + Math.random(); +} + +Data.uid = 1; +Data.accepts = jQuery.acceptData; + +Data.prototype = { + key: function( owner ) { + // We can accept data for non-element nodes in modern browsers, + // but we should not, see #8335. + // Always return the key for a frozen object. + if ( !Data.accepts( owner ) ) { + return 0; + } + + var descriptor = {}, + // Check if the owner object already has a cache key + unlock = owner[ this.expando ]; + + // If not, create one + if ( !unlock ) { + unlock = Data.uid++; + + // Secure it in a non-enumerable, non-writable property + try { + descriptor[ this.expando ] = { value: unlock }; + Object.defineProperties( owner, descriptor ); + + // Support: Android < 4 + // Fallback to a less secure definition + } catch ( e ) { + descriptor[ this.expando ] = unlock; + jQuery.extend( owner, descriptor ); + } + } + + // Ensure the cache object + if ( !this.cache[ unlock ] ) { + this.cache[ unlock ] = {}; + } + + return unlock; + }, + set: function( owner, data, value ) { + var prop, + // There may be an unlock assigned to this node, + // if there is no entry for this "owner", create one inline + // and set the unlock as though an owner entry had always existed + unlock = this.key( owner ), + cache = this.cache[ unlock ]; + + // Handle: [ owner, key, value ] args + if ( typeof data === "string" ) { + cache[ data ] = value; + + // Handle: [ owner, { properties } ] args + } else { + // Fresh assignments by object are shallow copied + if ( jQuery.isEmptyObject( cache ) ) { + jQuery.extend( this.cache[ unlock ], data ); + // Otherwise, copy the properties one-by-one to the cache object + } else { + for ( prop in data ) { + cache[ prop ] = data[ prop ]; + } + } + } + return cache; + }, + get: function( owner, key ) { + // Either a valid cache is found, or will be created. + // New caches will be created and the unlock returned, + // allowing direct access to the newly created + // empty data object. A valid owner object must be provided. + var cache = this.cache[ this.key( owner ) ]; + + return key === undefined ? + cache : cache[ key ]; + }, + access: function( owner, key, value ) { + var stored; + // 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) ) { + + stored = this.get( owner, key ); + + return stored !== undefined ? + stored : this.get( owner, jQuery.camelCase(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, name, camel, + unlock = this.key( owner ), + cache = this.cache[ unlock ]; + + if ( key === undefined ) { + this.cache[ unlock ] = {}; + + } else { + // Support array or space separated string of keys + if ( jQuery.isArray( key ) ) { + // If "name" is an array of keys... + // When data is initially created, via ("key", "val") signature, + // keys will be converted to camelCase. + // Since there is no way to tell _how_ a key was added, remove + // both plain key and camelCase key. #12786 + // This will only penalize the array argument path. + name = key.concat( key.map( jQuery.camelCase ) ); + } else { + camel = jQuery.camelCase( key ); + // Try the string as a key before any manipulation + if ( key in cache ) { + name = [ key, camel ]; + } else { + // If a key with the spaces exists, use it. + // Otherwise, create an array by matching non-whitespace + name = camel; + name = name in cache ? + [ name ] : ( name.match( rnotwhite ) || [] ); + } + } + + i = name.length; + while ( i-- ) { + delete cache[ name[ i ] ]; + } + } + }, + hasData: function( owner ) { + return !jQuery.isEmptyObject( + this.cache[ owner[ this.expando ] ] || {} + ); + }, + discard: function( owner ) { + if ( owner[ this.expando ] ) { + delete this.cache[ owner[ this.expando ] ]; + } + } +}; +var data_priv = new Data(); + +var data_user = 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 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, "-$1" ).toLowerCase(); + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = data === "true" ? true : + data === "false" ? false : + data === "null" ? null : + // Only convert to a number if it doesn't change the string + +data + "" === data ? +data : + rbrace.test( data ) ? jQuery.parseJSON( data ) : + data; + } catch( e ) {} + + // Make sure we set the data so it isn't changed later + data_user.set( elem, key, data ); + } else { + data = undefined; + } + } + return data; +} + +jQuery.extend({ + hasData: function( elem ) { + return data_user.hasData( elem ) || data_priv.hasData( elem ); + }, + + data: function( elem, name, data ) { + return data_user.access( elem, name, data ); + }, + + removeData: function( elem, name ) { + data_user.remove( elem, name ); + }, + + // TODO: Now that all calls to _data and _removeData have been replaced + // with direct calls to data_priv methods, these can be deprecated. + _data: function( elem, name, data ) { + return data_priv.access( elem, name, data ); + }, + + _removeData: function( elem, name ) { + data_priv.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 = data_user.get( elem ); + + if ( elem.nodeType === 1 && !data_priv.get( elem, "hasDataAttrs" ) ) { + i = attrs.length; + while ( i-- ) { + + // Support: IE11+ + // The attrs elements can be null (#14894) + if ( attrs[ i ] ) { + name = attrs[ i ].name; + if ( name.indexOf( "data-" ) === 0 ) { + name = jQuery.camelCase( name.slice(5) ); + dataAttr( elem, name, data[ name ] ); + } + } + } + data_priv.set( elem, "hasDataAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each(function() { + data_user.set( this, key ); + }); + } + + return access( this, function( value ) { + var data, + camelKey = jQuery.camelCase( key ); + + // 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 + // with the key as-is + data = data_user.get( elem, key ); + if ( data !== undefined ) { + return data; + } + + // Attempt to get data from the cache + // with the key camelized + data = data_user.get( elem, camelKey ); + if ( data !== undefined ) { + return data; + } + + // Attempt to "discover" the data in + // HTML5 custom data-* attrs + data = dataAttr( elem, camelKey, undefined ); + if ( data !== undefined ) { + return data; + } + + // We tried really hard, but the data doesn't exist. + return; + } + + // Set the data... + this.each(function() { + // First, attempt to store a copy or reference of any + // data that might've been store with a camelCased key. + var data = data_user.get( this, camelKey ); + + // For HTML5 data-* attribute interop, we have to + // store property names with dashes in a camelCase form. + // This might not apply to all properties...* + data_user.set( this, camelKey, value ); + + // *... In the case of properties that might _actually_ + // have dashes, we need to also store a copy of that + // unchanged property. + if ( key.indexOf("-") !== -1 && data !== undefined ) { + data_user.set( this, key, value ); + } + }); + }, null, value, arguments.length > 1, null, true ); + }, + + removeData: function( key ) { + return this.each(function() { + data_user.remove( this, key ); + }); + } +}); + + +jQuery.extend({ + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = data_priv.get( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || jQuery.isArray( data ) ) { + queue = data_priv.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 intended for public consumption - generates a queueHooks object, or returns the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return data_priv.get( elem, key ) || data_priv.access( elem, key, { + empty: jQuery.Callbacks("once memory").add(function() { + data_priv.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 = data_priv.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 cssExpand = [ "Top", "Right", "Bottom", "Left" ]; + +var isHidden = function( elem, el ) { + // isHidden might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem ); + }; + +var rcheckableType = (/^(?:checkbox|radio)$/i); + + + +(function() { + var fragment = document.createDocumentFragment(), + div = fragment.appendChild( document.createElement( "div" ) ), + input = document.createElement( "input" ); + + // #11217 - WebKit loses check when the name is after the checked attribute + // Support: Windows Web Apps (WWA) + // `name` and `type` need .setAttribute for WWA + input.setAttribute( "type", "radio" ); + input.setAttribute( "checked", "checked" ); + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + + // Support: Safari 5.1, iOS 5.1, Android 4.x, Android 2.3 + // old WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Make sure textarea (and checkbox) defaultValue is properly cloned + // Support: IE9-IE11+ + div.innerHTML = "<textarea>x</textarea>"; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; +})(); +var strundefined = typeof undefined; + + + +support.focusinBubbles = "onfocusin" in window; + + +var + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|pointer|contextmenu)|click/, + rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + rtypenamespace = /^([^.]*)(?:\.(.+)|)$/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } +} + +/* + * 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 = data_priv.get( elem ); + + // Don't attach events to noData or text/comment nodes (but allow plain objects) + if ( !elemData ) { + 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; + } + + // 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 = {}; + } + 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 !== strundefined && jQuery.event.triggered !== e.type ? + jQuery.event.dispatch.apply( elem, arguments ) : undefined; + }; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( rnotwhite ) || [ "" ]; + 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, false ); + } + } + } + + 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 = data_priv.hasData( elem ) && data_priv.get( elem ); + + if ( !elemData || !(events = elemData.events) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( rnotwhite ) || [ "" ]; + 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 the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + delete elemData.handle; + data_priv.remove( elem, "events" ); + } + }, + + trigger: function( event, data, elem, onlyHandlers ) { + + var i, cur, tmp, bubbleType, ontype, handle, special, + eventPath = [ elem || document ], + type = hasOwn.call( event, "type" ) ? event.type : event, + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : []; + + cur = 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(".") >= 0 ) { + // 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.namespace_re = 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 && !jQuery.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() ) { + + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( data_priv.get( cur, "events" ) || {} )[ event.type ] && data_priv.get( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && handle.apply && jQuery.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) && + jQuery.acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name name as the event. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.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; + elem[ type ](); + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + dispatch: function( event ) { + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( event ); + + var i, j, ret, matched, handleObj, + handlerQueue = [], + args = slice.call( arguments ), + handlers = ( data_priv.get( this, "events" ) || {} )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[0] = event; + 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() ) { + + // Triggered event must either 1) have no namespace, or + // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace). + if ( !event.namespace_re || event.namespace_re.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, matches, sel, handleObj, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Find delegate handlers + // Black-hole SVG <use> instance trees (#13180) + // Avoid non-left-click bubbling in Firefox (#3861) + if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) { + + for ( ; cur !== this; cur = cur.parentNode || this ) { + + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.disabled !== true || event.type !== "click" ) { + matches = []; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matches[ sel ] === undefined ) { + matches[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) >= 0 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matches[ sel ] ) { + matches.push( handleObj ); + } + } + if ( matches.length ) { + handlerQueue.push({ elem: cur, handlers: matches }); + } + } + } + } + + // Add the remaining (directly-bound) handlers + if ( delegateCount < handlers.length ) { + handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) }); + } + + return handlerQueue; + }, + + // Includes some event props shared by KeyEvent and MouseEvent + props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "), + + fixHooks: {}, + + keyHooks: { + props: "char charCode key keyCode".split(" "), + filter: function( event, original ) { + + // Add which for key events + if ( event.which == null ) { + event.which = original.charCode != null ? original.charCode : original.keyCode; + } + + return event; + } + }, + + mouseHooks: { + props: "button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "), + filter: function( event, original ) { + var eventDoc, doc, body, + button = original.button; + + // Calculate pageX/Y if missing and clientX/Y available + if ( event.pageX == null && original.clientX != null ) { + eventDoc = event.target.ownerDocument || document; + doc = eventDoc.documentElement; + body = eventDoc.body; + + event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 ); + event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 ); + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + // Note: button is not normalized, so don't use it + if ( !event.which && button !== undefined ) { + event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); + } + + return event; + } + }, + + fix: function( event ) { + if ( event[ jQuery.expando ] ) { + return event; + } + + // Create a writable copy of the event object and normalize some properties + var i, prop, copy, + type = event.type, + originalEvent = event, + fixHook = this.fixHooks[ type ]; + + if ( !fixHook ) { + this.fixHooks[ type ] = fixHook = + rmouseEvent.test( type ) ? this.mouseHooks : + rkeyEvent.test( type ) ? this.keyHooks : + {}; + } + copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props; + + event = new jQuery.Event( originalEvent ); + + i = copy.length; + while ( i-- ) { + prop = copy[ i ]; + event[ prop ] = originalEvent[ prop ]; + } + + // Support: Cordova 2.5 (WebKit) (#13255) + // All events should have a target; Cordova deviceready doesn't + if ( !event.target ) { + event.target = document; + } + + // Support: Safari 6.0+, Chrome < 28 + // Target should not be a text node (#504, #13143) + if ( event.target.nodeType === 3 ) { + event.target = event.target.parentNode; + } + + return fixHook.filter ? fixHook.filter( event, originalEvent ) : event; + }, + + special: { + load: { + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + focus: { + // Fire native event if possible so blur/focus sequence is correct + trigger: function() { + if ( this !== safeActiveElement() && this.focus ) { + this.focus(); + return false; + } + }, + delegateType: "focusin" + }, + blur: { + trigger: function() { + if ( this === safeActiveElement() && this.blur ) { + this.blur(); + return false; + } + }, + delegateType: "focusout" + }, + click: { + // For checkbox, fire native event so checked state will be right + trigger: function() { + if ( this.type === "checkbox" && this.click && jQuery.nodeName( this, "input" ) ) { + this.click(); + return false; + } + }, + + // For cross-browser consistency, don't fire native .click() on links + _default: function( event ) { + return jQuery.nodeName( event.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; + } + } + } + }, + + simulate: function( type, elem, event, bubble ) { + // Piggyback on a donor event to simulate a different one. + // Fake originalEvent to avoid donor's stopPropagation, but if the + // simulated event prevents default then we do the same on the donor. + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true, + originalEvent: {} + } + ); + if ( bubble ) { + jQuery.event.trigger( e, null, elem ); + } else { + jQuery.event.dispatch.call( elem, e ); + } + if ( e.isDefaultPrevented() ) { + event.preventDefault(); + } + } +}; + +jQuery.removeEvent = function( elem, type, handle ) { + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle, false ); + } +}; + +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 < 4.0 + src.returnValue === false ? + returnTrue : + returnFalse; + + // 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 || jQuery.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + + if ( e && e.preventDefault ) { + e.preventDefault(); + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + + if ( e && e.stopPropagation ) { + e.stopPropagation(); + } + }, + stopImmediatePropagation: function() { + var e = this.originalEvent; + + this.isImmediatePropagationStopped = returnTrue; + + if ( e && e.stopImmediatePropagation ) { + e.stopImmediatePropagation(); + } + + this.stopPropagation(); + } +}; + +// Create mouseenter/leave events using mouseover/out and event-time checks +// Support: Chrome 15+ +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 mousenter/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; + } + }; +}); + +// Create "bubbling" focus and blur events +// Support: Firefox, Chrome, Safari +if ( !support.focusinBubbles ) { + 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 ), true ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + var doc = this.ownerDocument || this, + attaches = data_priv.access( doc, fix ); + + if ( !attaches ) { + doc.addEventListener( orig, handler, true ); + } + data_priv.access( doc, fix, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this, + attaches = data_priv.access( doc, fix ) - 1; + + if ( !attaches ) { + doc.removeEventListener( orig, handler, true ); + data_priv.remove( doc, fix ); + + } else { + data_priv.access( doc, fix, attaches ); + } + } + }; + }); +} + +jQuery.fn.extend({ + + on: function( types, selector, data, fn, /*INTERNAL*/ 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 ) { + this.on( type, selector, data, types[ type ], one ); + } + return this; + } + + 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 this; + } + + 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 this.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + }); + }, + one: function( types, selector, data, fn ) { + return this.on( 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 ); + }); + }, + + 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 ); + } + } +}); + + +var + rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi, + rtagName = /<([\w:]+)/, + rhtml = /<|&#?\w+;/, + rnoInnerhtml = /<(?:script|style|link)/i, + // checked="checked" or checked + rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, + rscriptType = /^$|\/(?:java|ecma)script/i, + rscriptTypeMasked = /^true\/(.*)/, + rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g, + + // We have to close these tags to support XHTML (#13200) + wrapMap = { + + // Support: IE 9 + option: [ 1, "<select multiple='multiple'>", "</select>" ], + + thead: [ 1, "<table>", "</table>" ], + col: [ 2, "<table><colgroup>", "</colgroup></table>" ], + tr: [ 2, "<table><tbody>", "</tbody></table>" ], + td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ], + + _default: [ 0, "", "" ] + }; + +// Support: IE 9 +wrapMap.optgroup = wrapMap.option; + +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +// Support: 1.x compatibility +// Manipulating tables requires a tbody +function manipulationTarget( elem, content ) { + return jQuery.nodeName( elem, "table" ) && + jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ? + + elem.getElementsByTagName("tbody")[0] || + elem.appendChild( elem.ownerDocument.createElement("tbody") ) : + 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 ) { + var match = rscriptTypeMasked.exec( elem.type ); + + if ( match ) { + elem.type = match[ 1 ]; + } else { + elem.removeAttribute("type"); + } + + return elem; +} + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + data_priv.set( + elems[ i ], "globalEval", !refElements || data_priv.get( refElements[ i ], "globalEval" ) + ); + } +} + +function cloneCopyEvent( src, dest ) { + var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events; + + if ( dest.nodeType !== 1 ) { + return; + } + + // 1. Copy private data: events, handlers, etc. + if ( data_priv.hasData( src ) ) { + pdataOld = data_priv.access( src ); + pdataCur = data_priv.set( dest, pdataOld ); + events = pdataOld.events; + + if ( events ) { + delete pdataCur.handle; + pdataCur.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 ( data_user.hasData( src ) ) { + udataOld = data_user.access( src ); + udataCur = jQuery.extend( {}, udataOld ); + + data_user.set( dest, udataCur ); + } +} + +function getAll( context, tag ) { + var ret = context.getElementsByTagName ? context.getElementsByTagName( tag || "*" ) : + context.querySelectorAll ? context.querySelectorAll( tag || "*" ) : + []; + + return tag === undefined || tag && jQuery.nodeName( context, tag ) ? + jQuery.merge( [ context ], ret ) : + ret; +} + +// Support: IE >= 9 +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; + } +} + +jQuery.extend({ + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var i, l, srcElements, destElements, + clone = elem.cloneNode( true ), + inPage = jQuery.contains( elem.ownerDocument, elem ); + + // Support: IE >= 9 + // Fix Cloning issues + if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && + !jQuery.isXMLDoc( elem ) ) { + + // We eschew Sizzle here for performance reasons: http://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; + }, + + buildFragment: function( elems, context, scripts, selection ) { + var elem, tmp, tag, wrap, contains, 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 ( jQuery.type( elem ) === "object" ) { + // Support: QtWebKit + // jQuery.merge because push.apply(_, arraylike) throws + 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 ] + elem.replace( rxhtmlTag, "<$1></$2>" ) + wrap[ 2 ]; + + // Descend through wrappers to the right content + j = wrap[ 0 ]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Support: QtWebKit + // jQuery.merge because push.apply(_, arraylike) throws + jQuery.merge( nodes, tmp.childNodes ); + + // Remember the top-level container + tmp = fragment.firstChild; + + // Fixes #12346 + // Support: Webkit, IE + tmp.textContent = ""; + } + } + } + + // Remove wrapper from fragment + fragment.textContent = ""; + + i = 0; + while ( (elem = nodes[ i++ ]) ) { + + // #4087 - If origin and destination elements are the same, and this is + // that element, do not do anything + if ( selection && jQuery.inArray( elem, selection ) !== -1 ) { + continue; + } + + contains = jQuery.contains( elem.ownerDocument, elem ); + + // Append to fragment + tmp = getAll( fragment.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( contains ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( (elem = tmp[ j++ ]) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + return fragment; + }, + + cleanData: function( elems ) { + var data, elem, type, key, + special = jQuery.event.special, + i = 0; + + for ( ; (elem = elems[ i ]) !== undefined; i++ ) { + if ( jQuery.acceptData( elem ) ) { + key = elem[ data_priv.expando ]; + + if ( key && (data = data_priv.cache[ key ]) ) { + 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 ); + } + } + } + if ( data_priv.cache[ key ] ) { + // Discard any remaining `private` data + delete data_priv.cache[ key ]; + } + } + } + // Discard any remaining `user` data + delete data_user.cache[ elem[ data_user.expando ] ]; + } + } +}); + +jQuery.fn.extend({ + 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 this.domManip( arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + }); + }, + + prepend: function() { + return this.domManip( 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 this.domManip( arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + }); + }, + + after: function() { + return this.domManip( arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + }); + }, + + remove: function( selector, keepData /* Internal Use Only */ ) { + var elem, + elems = selector ? jQuery.filter( selector, this ) : this, + i = 0; + + for ( ; (elem = elems[i]) != null; i++ ) { + if ( !keepData && elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem ) ); + } + + if ( elem.parentNode ) { + if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) { + setGlobalEval( getAll( elem, "script" ) ); + } + elem.parentNode.removeChild( elem ); + } + } + + return this; + }, + + 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 = value.replace( rxhtmlTag, "<$1></$2>" ); + + 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 arg = arguments[ 0 ]; + + // Make the changes, replacing each context element with the new content + this.domManip( arguments, function( elem ) { + arg = this.parentNode; + + jQuery.cleanData( getAll( this ) ); + + if ( arg ) { + arg.replaceChild( elem, this ); + } + }); + + // Force removal if there was no new content (e.g., from empty arguments) + return arg && (arg.length || arg.nodeType) ? this : this.remove(); + }, + + detach: function( selector ) { + return this.remove( selector, true ); + }, + + domManip: function( args, callback ) { + + // Flatten any nested arrays + args = concat.apply( [], args ); + + var fragment, first, scripts, hasScripts, node, doc, + i = 0, + l = this.length, + set = this, + iNoClone = l - 1, + value = args[ 0 ], + isFunction = jQuery.isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( isFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return this.each(function( index ) { + var self = set.eq( index ); + if ( isFunction ) { + args[ 0 ] = value.call( this, index, self.html() ); + } + self.domManip( args, callback ); + }); + } + + if ( l ) { + fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, this ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + if ( first ) { + 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: QtWebKit + // jQuery.merge because push.apply(_, arraylike) throws + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( this[ 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 || "" ) && + !data_priv.access( node, "globalEval" ) && jQuery.contains( doc, node ) ) { + + if ( node.src ) { + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl ) { + jQuery._evalUrl( node.src ); + } + } else { + jQuery.globalEval( node.textContent.replace( rcleanScript, "" ) ); + } + } + } + } + } + } + + return this; + } +}); + +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: QtWebKit + // .get() because push.apply(_, arraylike) throws + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +}); + + +var iframe, + elemdisplay = {}; + +/** + * Retrieve the actual display of a element + * @param {String} name nodeName of the element + * @param {Object} doc Document object + */ +// Called only from within defaultDisplay +function actualDisplay( name, doc ) { + var style, + elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ), + + // getDefaultComputedStyle might be reliably used only on attached element + display = window.getDefaultComputedStyle && ( style = window.getDefaultComputedStyle( elem[ 0 ] ) ) ? + + // Use of this method is a temporary fix (more like optmization) until something better comes along, + // since it was removed from specification and supported only in FF + style.display : jQuery.css( elem[ 0 ], "display" ); + + // We don't have any data stored on the element, + // so use "detach" method as fast way to get rid of the element + elem.detach(); + + return display; +} + +/** + * Try to determine the default display value of an element + * @param {String} nodeName + */ +function defaultDisplay( nodeName ) { + var doc = document, + display = elemdisplay[ nodeName ]; + + if ( !display ) { + display = actualDisplay( nodeName, doc ); + + // If the simple way fails, read from inside an iframe + if ( display === "none" || !display ) { + + // Use the already-created iframe if possible + iframe = (iframe || jQuery( "<iframe frameborder='0' width='0' height='0'/>" )).appendTo( doc.documentElement ); + + // Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse + doc = iframe[ 0 ].contentDocument; + + // Support: IE + doc.write(); + doc.close(); + + display = actualDisplay( nodeName, doc ); + iframe.detach(); + } + + // Store the correct default display + elemdisplay[ nodeName ] = display; + } + + return display; +} +var rmargin = (/^margin/); + +var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); + +var getStyles = function( elem ) { + return elem.ownerDocument.defaultView.getComputedStyle( elem, null ); + }; + + + +function curCSS( elem, name, computed ) { + var width, minWidth, maxWidth, ret, + style = elem.style; + + computed = computed || getStyles( elem ); + + // Support: IE9 + // getPropertyValue is only needed for .css('filter') in IE9, see #12537 + if ( computed ) { + ret = computed.getPropertyValue( name ) || computed[ name ]; + } + + if ( computed ) { + + if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) { + ret = jQuery.style( elem, name ); + } + + // Support: iOS < 6 + // A tribute to the "awesome hack by Dean Edwards" + // iOS < 6 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels + // this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values + if ( rnumnonpx.test( ret ) && rmargin.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 + // 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. + // Since there are no other hooks for marginRight, remove the whole object. + delete this.get; + return; + } + + // Hook needed; redefine it so that the support test is not executed again. + + return (this.get = hookFn).apply( this, arguments ); + } + }; +} + + +(function() { + var pixelPositionVal, boxSizingReliableVal, + docElem = document.documentElement, + container = document.createElement( "div" ), + div = document.createElement( "div" ); + + if ( !div.style ) { + return; + } + + div.style.backgroundClip = "content-box"; + div.cloneNode( true ).style.backgroundClip = ""; + support.clearCloneStyle = div.style.backgroundClip === "content-box"; + + container.style.cssText = "border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;" + + "position:absolute"; + container.appendChild( div ); + + // Executing both pixelPosition & boxSizingReliable tests require only one layout + // so they're executed at the same time to save the second computation. + function computePixelPositionAndBoxSizingReliable() { + div.style.cssText = + // Support: Firefox<29, Android 2.3 + // Vendor-prefix box-sizing + "-webkit-box-sizing:border-box;-moz-box-sizing:border-box;" + + "box-sizing:border-box;display:block;margin-top:1%;top:1%;" + + "border:1px;padding:1px;width:4px;position:absolute"; + div.innerHTML = ""; + docElem.appendChild( container ); + + var divStyle = window.getComputedStyle( div, null ); + pixelPositionVal = divStyle.top !== "1%"; + boxSizingReliableVal = divStyle.width === "4px"; + + docElem.removeChild( container ); + } + + // Support: node.js jsdom + // Don't assume that getComputedStyle is a property of the global object + if ( window.getComputedStyle ) { + jQuery.extend( support, { + pixelPosition: function() { + // This test is executed only once but we still do memoizing + // since we can use the boxSizingReliable pre-computing. + // No need to check if the test was already performed, though. + computePixelPositionAndBoxSizingReliable(); + return pixelPositionVal; + }, + boxSizingReliable: function() { + if ( boxSizingReliableVal == null ) { + computePixelPositionAndBoxSizingReliable(); + } + return boxSizingReliableVal; + }, + reliableMarginRight: function() { + // Support: Android 2.3 + // Check if div with explicit width and no margin-right incorrectly + // gets computed margin-right based on width of container. (#3333) + // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right + // This support function is only executed once so no memoizing is needed. + var ret, + marginDiv = div.appendChild( document.createElement( "div" ) ); + + // Reset CSS: box-sizing; display; margin; border; padding + marginDiv.style.cssText = div.style.cssText = + // Support: Firefox<29, Android 2.3 + // Vendor-prefix box-sizing + "-webkit-box-sizing:content-box;-moz-box-sizing:content-box;" + + "box-sizing:content-box;display:block;margin:0;border:0;padding:0"; + marginDiv.style.marginRight = marginDiv.style.width = "0"; + div.style.width = "1px"; + docElem.appendChild( container ); + + ret = !parseFloat( window.getComputedStyle( marginDiv, null ).marginRight ); + + docElem.removeChild( container ); + + return ret; + } + }); + } +})(); + + +// A method for quickly swapping in/out CSS properties to get correct calculations. +jQuery.swap = function( elem, options, callback, args ) { + 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.apply( elem, args || [] ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; +}; + + +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]).+)/, + rnumsplit = new RegExp( "^(" + pnum + ")(.*)$", "i" ), + rrelNum = new RegExp( "^([+-])=(" + pnum + ")", "i" ), + + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: "0", + fontWeight: "400" + }, + + cssPrefixes = [ "Webkit", "O", "Moz", "ms" ]; + +// return a css property mapped to a potentially vendor prefixed property +function vendorPropName( style, name ) { + + // shortcut for names that are not vendor prefixed + if ( name in style ) { + return name; + } + + // check for vendor prefixed names + var capName = name[0].toUpperCase() + name.slice(1), + origName = name, + i = cssPrefixes.length; + + while ( i-- ) { + name = cssPrefixes[ i ] + capName; + if ( name in style ) { + return name; + } + } + + return origName; +} + +function setPositiveNumber( elem, value, subtract ) { + var matches = rnumsplit.exec( value ); + return matches ? + // Guard against undefined "subtract", e.g., when used as in cssHooks + Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) : + value; +} + +function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) { + var i = extra === ( isBorderBox ? "border" : "content" ) ? + // If we already have the right measurement, avoid augmentation + 4 : + // Otherwise initialize for horizontal or vertical properties + name === "width" ? 1 : 0, + + val = 0; + + for ( ; i < 4; i += 2 ) { + // both box models exclude margin, so add it if we want it + if ( extra === "margin" ) { + val += jQuery.css( elem, extra + cssExpand[ i ], true, styles ); + } + + if ( isBorderBox ) { + // border-box includes padding, so remove it if we want content + if ( extra === "content" ) { + val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + } + + // at this point, extra isn't border nor margin, so remove border + if ( extra !== "margin" ) { + val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } else { + // at this point, extra isn't content, so add padding + val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + + // at this point, extra isn't content nor padding, so add border + if ( extra !== "padding" ) { + val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } + } + + return val; +} + +function getWidthOrHeight( elem, name, extra ) { + + // Start with offset property, which is equivalent to the border-box value + var valueIsBorderBox = true, + val = name === "width" ? elem.offsetWidth : elem.offsetHeight, + styles = getStyles( elem ), + isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; + + // some non-html elements return undefined for offsetWidth, so check for null/undefined + // svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285 + // MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668 + if ( val <= 0 || val == null ) { + // Fall back to computed then uncomputed css if necessary + val = curCSS( elem, name, styles ); + if ( val < 0 || val == null ) { + val = elem.style[ name ]; + } + + // Computed unit is not pixels. Stop here and return. + if ( rnumnonpx.test(val) ) { + return val; + } + + // we need the check for style in case a browser which returns unreliable values + // for getComputedStyle silently falls back to the reliable elem.style + valueIsBorderBox = isBorderBox && + ( support.boxSizingReliable() || val === elem.style[ name ] ); + + // Normalize "", auto, and prepare for extra + val = parseFloat( val ) || 0; + } + + // use the active box-sizing model to add/subtract irrelevant styles + return ( val + + augmentWidthOrHeight( + elem, + name, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox, + styles + ) + ) + "px"; +} + +function showHide( elements, show ) { + var display, elem, hidden, + values = [], + index = 0, + length = elements.length; + + for ( ; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + + values[ index ] = data_priv.get( elem, "olddisplay" ); + display = elem.style.display; + if ( show ) { + // Reset the inline display of this element to learn if it is + // being hidden by cascaded rules or not + if ( !values[ index ] && display === "none" ) { + elem.style.display = ""; + } + + // Set elements which have been overridden with display: none + // in a stylesheet to whatever the default browser style is + // for such an element + if ( elem.style.display === "" && isHidden( elem ) ) { + values[ index ] = data_priv.access( elem, "olddisplay", defaultDisplay(elem.nodeName) ); + } + } else { + hidden = isHidden( elem ); + + if ( display !== "none" || !hidden ) { + data_priv.set( elem, "olddisplay", hidden ? display : jQuery.css( elem, "display" ) ); + } + } + } + + // Set the display of most of the elements in a second loop + // to avoid the constant reflow + for ( index = 0; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + if ( !show || elem.style.display === "none" || elem.style.display === "" ) { + elem.style.display = show ? values[ index ] || "" : "none"; + } + } + + return elements; +} + +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: { + "columnCount": true, + "fillOpacity": true, + "flexGrow": true, + "flexShrink": true, + "fontWeight": 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: { + // normalize float css property + "float": "cssFloat" + }, + + // 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 = jQuery.camelCase( name ), + style = elem.style; + + name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) ); + + // gets hook for the prefixed version + // followed by the unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // Check if we're setting a value + if ( value !== undefined ) { + type = typeof value; + + // convert relative number strings (+= or -=) to relative numbers. #7345 + if ( type === "string" && (ret = rrelNum.exec( value )) ) { + value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) ); + // Fixes bug #9237 + type = "number"; + } + + // Make sure that null and NaN values aren't set. See: #7116 + if ( value == null || value !== value ) { + return; + } + + // If a number was passed in, add 'px' to the (except for certain CSS properties) + if ( type === "number" && !jQuery.cssNumber[ origName ] ) { + value += "px"; + } + + // Fixes #8908, it can be done more correctly by specifying setters in cssHooks, + // but it would mean to define eight (for every problematic property) identical functions + 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 ) { + 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 = jQuery.camelCase( name ); + + // Make sure that we're working with the right name + name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) ); + + // gets hook for the prefixed version + // followed by the unprefixed version + 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 ]; + } + + // Return, converting to number if forced or a qualifier was provided and val looks numeric + if ( extra === "" || extra ) { + num = parseFloat( val ); + return extra === true || jQuery.isNumeric( num ) ? num || 0 : val; + } + return val; + } +}); + +jQuery.each([ "height", "width" ], function( i, name ) { + jQuery.cssHooks[ name ] = { + get: function( elem, computed, extra ) { + if ( computed ) { + // certain elements can have dimension info if we invisibly show them + // however, it must have a current display style that would benefit from this + return rdisplayswap.test( jQuery.css( elem, "display" ) ) && elem.offsetWidth === 0 ? + jQuery.swap( elem, cssShow, function() { + return getWidthOrHeight( elem, name, extra ); + }) : + getWidthOrHeight( elem, name, extra ); + } + }, + + set: function( elem, value, extra ) { + var styles = extra && getStyles( elem ); + return setPositiveNumber( elem, value, extra ? + augmentWidthOrHeight( + elem, + name, + extra, + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + styles + ) : 0 + ); + } + }; +}); + +// Support: Android 2.3 +jQuery.cssHooks.marginRight = addGetHookIf( support.reliableMarginRight, + function( elem, computed ) { + if ( computed ) { + // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right + // Work around by temporarily setting element display to inline-block + return jQuery.swap( elem, { "display": "inline-block" }, + curCSS, [ elem, "marginRight" ] ); + } + } +); + +// 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 ( !rmargin.test( prefix ) ) { + 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 ( jQuery.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 ); + }, + 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 ( isHidden( this ) ) { + jQuery( this ).show(); + } else { + jQuery( this ).hide(); + } + }); + } +}); + + +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 || "swing"; + 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; + + if ( tween.elem[ tween.prop ] != null && + (!tween.elem.style || 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 + // so, 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 its + // available and use plain properties where available + if ( jQuery.fx.step[ tween.prop ] ) { + jQuery.fx.step[ tween.prop ]( tween ); + } else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) { + jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); + } else { + tween.elem[ tween.prop ] = tween.now; + } + } + } +}; + +// Support: IE9 +// 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; + } +}; + +jQuery.fx = Tween.prototype.init; + +// Back Compat <1.8 extension point +jQuery.fx.step = {}; + + + + +var + fxNow, timerId, + rfxtypes = /^(?:toggle|show|hide)$/, + rfxnum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ), + rrun = /queueHooks$/, + animationPrefilters = [ defaultPrefilter ], + tweeners = { + "*": [ function( prop, value ) { + var tween = this.createTween( prop, value ), + target = tween.cur(), + parts = rfxnum.exec( value ), + unit = parts && parts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), + + // Starting value computation is required for potential unit mismatches + start = ( jQuery.cssNumber[ prop ] || unit !== "px" && +target ) && + rfxnum.exec( jQuery.css( tween.elem, prop ) ), + scale = 1, + maxIterations = 20; + + if ( start && start[ 3 ] !== unit ) { + // Trust units reported by jQuery.css + unit = unit || start[ 3 ]; + + // Make sure we update the tween properties later on + parts = parts || []; + + // Iteratively approximate from a nonzero starting point + start = +target || 1; + + do { + // If previous iteration zeroed out, double until we get *something* + // Use a string for doubling factor so we don't accidentally see scale as unchanged below + scale = scale || ".5"; + + // Adjust and apply + start = start / scale; + jQuery.style( tween.elem, prop, start + unit ); + + // Update scale, tolerating zero or NaN from tween.cur() + // And breaking the loop if scale is unchanged or perfect, or if we've just had enough + } while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations ); + } + + // Update tween properties + if ( parts ) { + start = tween.start = +start || +target || 0; + tween.unit = unit; + // If a +=/-= token was provided, we're doing a relative animation + tween.end = parts[ 1 ] ? + start + ( parts[ 1 ] + 1 ) * parts[ 2 ] : + +parts[ 2 ]; + } + + return tween; + } ] + }; + +// Animations created synchronously will run synchronously +function createFxNow() { + setTimeout(function() { + fxNow = undefined; + }); + return ( fxNow = jQuery.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, + // if we don't include width, 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 = ( tweeners[ prop ] || [] ).concat( 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 ) { + /* jshint validthis: true */ + var prop, value, toggle, tween, hooks, oldfire, display, checkDisplay, + anim = this, + orig = {}, + style = elem.style, + hidden = elem.nodeType && isHidden( elem ), + dataShow = data_priv.get( elem, "fxshow" ); + + // handle queue: false promises + 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() { + // doing this makes sure that the complete handler will be called + // before this completes + anim.always(function() { + hooks.unqueued--; + if ( !jQuery.queue( elem, "fx" ).length ) { + hooks.empty.fire(); + } + }); + }); + } + + // height/width overflow pass + if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) { + // Make sure that nothing sneaks out + // Record all 3 overflow attributes because IE9-10 do not + // change the overflow attribute when overflowX and + // overflowY are set to the same value + opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; + + // Set display property to inline-block for height/width + // animations on inline elements that are having width/height animated + display = jQuery.css( elem, "display" ); + + // Test default display if display is currently "none" + checkDisplay = display === "none" ? + data_priv.get( elem, "olddisplay" ) || defaultDisplay( elem.nodeName ) : display; + + if ( checkDisplay === "inline" && jQuery.css( elem, "float" ) === "none" ) { + 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 ]; + }); + } + + // show/hide pass + for ( prop in props ) { + value = props[ prop ]; + if ( rfxtypes.exec( value ) ) { + delete props[ prop ]; + toggle = toggle || value === "toggle"; + if ( value === ( hidden ? "hide" : "show" ) ) { + + // If there is dataShow left over from a stopped hide or show and we are going to proceed with show, we should pretend to be hidden + if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { + hidden = true; + } else { + continue; + } + } + orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); + + // Any non-fx value stops us from restoring the original display value + } else { + display = undefined; + } + } + + if ( !jQuery.isEmptyObject( orig ) ) { + if ( dataShow ) { + if ( "hidden" in dataShow ) { + hidden = dataShow.hidden; + } + } else { + dataShow = data_priv.access( elem, "fxshow", {} ); + } + + // store state if its toggle - enables .stop().toggle() to "reverse" + if ( toggle ) { + dataShow.hidden = !hidden; + } + if ( hidden ) { + jQuery( elem ).show(); + } else { + anim.done(function() { + jQuery( elem ).hide(); + }); + } + anim.done(function() { + var prop; + + data_priv.remove( elem, "fxshow" ); + for ( prop in orig ) { + jQuery.style( elem, prop, orig[ prop ] ); + } + }); + for ( prop in orig ) { + tween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); + + if ( !( prop in dataShow ) ) { + dataShow[ prop ] = tween.start; + if ( hidden ) { + tween.end = tween.start; + tween.start = prop === "width" || prop === "height" ? 1 : 0; + } + } + } + + // If this is a noop like .hide().hide(), restore an overwritten display value + } else if ( (display === "none" ? defaultDisplay( elem.nodeName ) : display) === "inline" ) { + style.display = display; + } +} + +function propFilter( props, specialEasing ) { + var index, name, easing, value, hooks; + + // camelCase, specialEasing and expand cssHook pass + for ( index in props ) { + name = jQuery.camelCase( index ); + easing = specialEasing[ name ]; + value = props[ index ]; + if ( jQuery.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 wont overwrite keys already present. + // also - reusing 'index' from above 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 = animationPrefilters.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 ), + // 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 ( percent < 1 && length ) { + return remaining; + } else { + deferred.resolveWith( elem, [ animation ] ); + return false; + } + }, + animation = deferred.promise({ + elem: elem, + props: jQuery.extend( {}, properties ), + opts: jQuery.extend( true, { specialEasing: {} }, 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.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 = animationPrefilters[ index ].call( animation, elem, props, animation.opts ); + if ( result ) { + return result; + } + } + + jQuery.map( props, createTween, animation ); + + if ( jQuery.isFunction( animation.opts.start ) ) { + animation.opts.start.call( elem, animation ); + } + + jQuery.fx.timer( + jQuery.extend( tick, { + elem: elem, + anim: animation, + queue: animation.opts.queue + }) + ); + + // attach callbacks from options + return animation.progress( animation.opts.progress ) + .done( animation.opts.done, animation.opts.complete ) + .fail( animation.opts.fail ) + .always( animation.opts.always ); +} + +jQuery.Animation = jQuery.extend( Animation, { + + tweener: function( props, callback ) { + if ( jQuery.isFunction( props ) ) { + callback = props; + props = [ "*" ]; + } else { + props = props.split(" "); + } + + var prop, + index = 0, + length = props.length; + + for ( ; index < length ; index++ ) { + prop = props[ index ]; + tweeners[ prop ] = tweeners[ prop ] || []; + tweeners[ prop ].unshift( callback ); + } + }, + + prefilter: function( callback, prepend ) { + if ( prepend ) { + animationPrefilters.unshift( callback ); + } else { + animationPrefilters.push( callback ); + } + } +}); + +jQuery.speed = function( speed, easing, fn ) { + var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { + complete: fn || !fn && easing || + jQuery.isFunction( speed ) && speed, + duration: speed, + easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing + }; + + opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration : + opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ 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 ( jQuery.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( isHidden ).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 || data_priv.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 && type !== false ) { + this.queue( type || "fx", [] ); + } + + return this.each(function() { + var dequeue = true, + index = type != null && type + "queueHooks", + timers = jQuery.timers, + data = data_priv.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 = data_priv.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 = jQuery.now(); + + for ( ; i < timers.length; i++ ) { + timer = timers[ i ]; + // Checks the timer has not already been removed + 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 ); + if ( timer() ) { + jQuery.fx.start(); + } else { + jQuery.timers.pop(); + } +}; + +jQuery.fx.interval = 13; + +jQuery.fx.start = function() { + if ( !timerId ) { + timerId = setInterval( jQuery.fx.tick, jQuery.fx.interval ); + } +}; + +jQuery.fx.stop = function() { + clearInterval( timerId ); + timerId = null; +}; + +jQuery.fx.speeds = { + slow: 600, + fast: 200, + // Default speed + _default: 400 +}; + + +// Based off of the plugin by Clint Helfers, with permission. +// 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 = setTimeout( next, time ); + hooks.stop = function() { + clearTimeout( timeout ); + }; + }); +}; + + +(function() { + var input = document.createElement( "input" ), + select = document.createElement( "select" ), + opt = select.appendChild( document.createElement( "option" ) ); + + input.type = "checkbox"; + + // Support: iOS 5.1, Android 4.x, Android 2.3 + // Check the default checkbox/radio value ("" on old WebKit; "on" elsewhere) + support.checkOn = input.value !== ""; + + // Must access the parent to make an option select properly + // Support: IE9, IE10 + support.optSelected = opt.selected; + + // Make sure that the options inside disabled selects aren't marked as disabled + // (WebKit marks them as disabled) + select.disabled = true; + support.optDisabled = !opt.disabled; + + // Check if an input maintains its value after becoming a radio + // Support: IE9, IE10 + input = document.createElement( "input" ); + input.value = "t"; + input.type = "radio"; + support.radioValue = input.value === "t"; +})(); + + +var nodeHook, 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 hooks, ret, + nType = elem.nodeType; + + // don't get/set attributes on text, comment and attribute nodes + if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === strundefined ) { + return jQuery.prop( elem, name, value ); + } + + // All attributes are lowercase + // Grab necessary hook if one is defined + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + name = name.toLowerCase(); + hooks = jQuery.attrHooks[ name ] || + ( jQuery.expr.match.bool.test( name ) ? boolHook : nodeHook ); + } + + if ( value !== undefined ) { + + if ( value === null ) { + jQuery.removeAttr( elem, name ); + + } else if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) { + return ret; + + } else { + elem.setAttribute( name, value + "" ); + return value; + } + + } else if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) { + return ret; + + } else { + ret = jQuery.find.attr( elem, name ); + + // Non-existent attributes return null, we normalize to undefined + return ret == null ? + undefined : + ret; + } + }, + + removeAttr: function( elem, value ) { + var name, propName, + i = 0, + attrNames = value && value.match( rnotwhite ); + + if ( attrNames && elem.nodeType === 1 ) { + while ( (name = attrNames[i++]) ) { + propName = jQuery.propFix[ name ] || name; + + // Boolean attributes get special treatment (#10870) + if ( jQuery.expr.match.bool.test( name ) ) { + // Set corresponding property to false + elem[ propName ] = false; + } + + elem.removeAttribute( name ); + } + } + }, + + attrHooks: { + type: { + set: function( elem, value ) { + if ( !support.radioValue && value === "radio" && + jQuery.nodeName( elem, "input" ) ) { + // Setting the type on a radio button after the value resets the value in IE6-9 + // Reset value to default in case type is set after value during creation + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + } + } +}); + +// 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; + if ( !isXML ) { + // Avoid an infinite loop by temporarily removing this function from the getter + handle = attrHandle[ name ]; + attrHandle[ name ] = ret; + ret = getter( elem, name, isXML ) != null ? + name.toLowerCase() : + null; + attrHandle[ name ] = handle; + } + return ret; + }; +}); + + + + +var rfocusable = /^(?:input|select|textarea|button)$/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({ + propFix: { + "for": "htmlFor", + "class": "className" + }, + + prop: function( elem, name, value ) { + var ret, hooks, notxml, + nType = elem.nodeType; + + // don't get/set properties on text, comment and attribute nodes + if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); + + if ( notxml ) { + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + return hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ? + ret : + ( elem[ name ] = value ); + + } else { + return hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ? + ret : + elem[ name ]; + } + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + return elem.hasAttribute( "tabindex" ) || rfocusable.test( elem.nodeName ) || elem.href ? + elem.tabIndex : + -1; + } + } + } +}); + +// Support: IE9+ +// Selectedness for an option in an optgroup can be inaccurate +if ( !support.optSelected ) { + jQuery.propHooks.selected = { + get: function( elem ) { + var parent = elem.parentNode; + if ( parent && parent.parentNode ) { + parent.parentNode.selectedIndex; + } + return null; + } + }; +} + +jQuery.each([ + "tabIndex", + "readOnly", + "maxLength", + "cellSpacing", + "cellPadding", + "rowSpan", + "colSpan", + "useMap", + "frameBorder", + "contentEditable" +], function() { + jQuery.propFix[ this.toLowerCase() ] = this; +}); + + + + +var rclass = /[\t\r\n\f]/g; + +jQuery.fn.extend({ + addClass: function( value ) { + var classes, elem, cur, clazz, j, finalValue, + proceed = typeof value === "string" && value, + i = 0, + len = this.length; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( j ) { + jQuery( this ).addClass( value.call( this, j, this.className ) ); + }); + } + + if ( proceed ) { + // The disjunction here is for better compressibility (see removeClass) + classes = ( value || "" ).match( rnotwhite ) || []; + + for ( ; i < len; i++ ) { + elem = this[ i ]; + cur = elem.nodeType === 1 && ( elem.className ? + ( " " + elem.className + " " ).replace( rclass, " " ) : + " " + ); + + if ( cur ) { + j = 0; + while ( (clazz = classes[j++]) ) { + if ( cur.indexOf( " " + clazz + " " ) < 0 ) { + cur += clazz + " "; + } + } + + // only assign if different to avoid unneeded rendering. + finalValue = jQuery.trim( cur ); + if ( elem.className !== finalValue ) { + elem.className = finalValue; + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classes, elem, cur, clazz, j, finalValue, + proceed = arguments.length === 0 || typeof value === "string" && value, + i = 0, + len = this.length; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( j ) { + jQuery( this ).removeClass( value.call( this, j, this.className ) ); + }); + } + if ( proceed ) { + classes = ( value || "" ).match( rnotwhite ) || []; + + for ( ; i < len; i++ ) { + elem = this[ i ]; + // This expression is here for better compressibility (see addClass) + cur = elem.nodeType === 1 && ( elem.className ? + ( " " + elem.className + " " ).replace( rclass, " " ) : + "" + ); + + if ( cur ) { + j = 0; + while ( (clazz = classes[j++]) ) { + // Remove *all* instances + while ( cur.indexOf( " " + clazz + " " ) >= 0 ) { + cur = cur.replace( " " + clazz + " ", " " ); + } + } + + // only assign if different to avoid unneeded rendering. + finalValue = value ? jQuery.trim( cur ) : ""; + if ( elem.className !== finalValue ) { + elem.className = finalValue; + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value; + + if ( typeof stateVal === "boolean" && type === "string" ) { + return stateVal ? this.addClass( value ) : this.removeClass( value ); + } + + if ( jQuery.isFunction( value ) ) { + return this.each(function( i ) { + jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal ); + }); + } + + return this.each(function() { + if ( type === "string" ) { + // toggle individual class names + var className, + i = 0, + self = jQuery( this ), + classNames = value.match( rnotwhite ) || []; + + 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 ( type === strundefined || type === "boolean" ) { + if ( this.className ) { + // store className if set + data_priv.set( this, "__className__", this.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. + this.className = this.className || value === false ? "" : data_priv.get( this, "__className__" ) || ""; + } + }); + }, + + hasClass: function( selector ) { + var className = " " + selector + " ", + i = 0, + l = this.length; + for ( ; i < l; i++ ) { + if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) >= 0 ) { + return true; + } + } + + return false; + } +}); + + + + +var rreturn = /\r/g; + +jQuery.fn.extend({ + val: function( value ) { + var hooks, ret, isFunction, + 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; + + return typeof ret === "string" ? + // handle most common string cases + ret.replace(rreturn, "") : + // handle cases where value is null/undef or number + ret == null ? "" : ret; + } + + return; + } + + isFunction = jQuery.isFunction( value ); + + return this.each(function( i ) { + var val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( isFunction ) { + 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 ( jQuery.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: IE10-11+ + // option.text throws exceptions (#14686, #14858) + jQuery.trim( jQuery.text( elem ) ); + } + }, + select: { + get: function( elem ) { + var value, option, + options = elem.options, + index = elem.selectedIndex, + one = elem.type === "select-one" || index < 0, + values = one ? null : [], + max = one ? index + 1 : options.length, + i = index < 0 ? + max : + one ? index : 0; + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // IE6-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 + ( support.optDisabled ? !option.disabled : option.getAttribute( "disabled" ) === null ) && + ( !option.parentNode.disabled || !jQuery.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 ]; + if ( (option.selected = jQuery.inArray( option.value, values ) >= 0) ) { + optionSet = true; + } + } + + // 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 ( jQuery.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 ); + } + } + }; + if ( !support.checkOn ) { + jQuery.valHooks[ this ].get = function( elem ) { + // Support: Webkit + // "" is returned instead of "on" if a value isn't specified + return elem.getAttribute("value") === null ? "on" : elem.value; + }; + } +}); + + + + +// Return jQuery for attributes-only inclusion + + +jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " + + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + + "change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) { + + // Handle event binding + jQuery.fn[ name ] = function( data, fn ) { + return arguments.length > 0 ? + this.on( name, null, data, fn ) : + this.trigger( name ); + }; +}); + +jQuery.fn.extend({ + hover: function( fnOver, fnOut ) { + return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); + }, + + bind: function( types, data, fn ) { + return this.on( types, null, data, fn ); + }, + unbind: function( types, fn ) { + return this.off( types, null, fn ); + }, + + delegate: function( selector, types, data, fn ) { + return this.on( types, selector, data, fn ); + }, + undelegate: function( selector, types, fn ) { + // ( namespace ) or ( selector, types [, fn] ) + return arguments.length === 1 ? this.off( selector, "**" ) : this.off( types, selector || "**", fn ); + } +}); + + +var nonce = jQuery.now(); + +var rquery = (/\?/); + + + +// Support: Android 2.3 +// Workaround failure to string-cast null input +jQuery.parseJSON = function( data ) { + return JSON.parse( data + "" ); +}; + + +// Cross-browser xml parsing +jQuery.parseXML = function( data ) { + var xml, tmp; + if ( !data || typeof data !== "string" ) { + return null; + } + + // Support: IE9 + try { + tmp = new DOMParser(); + xml = tmp.parseFromString( data, "text/xml" ); + } catch ( e ) { + xml = undefined; + } + + if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { + jQuery.error( "Invalid XML: " + data ); + } + return xml; +}; + + +var + // Document location + ajaxLocParts, + ajaxLocation, + + rhash = /#.*$/, + rts = /([?&])_=[^&]*/, + rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, + // #7653, #8125, #8152: local protocol detection + rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, + rnoContent = /^(?:GET|HEAD)$/, + rprotocol = /^\/\//, + rurl = /^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/, + + /* 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("*"); + +// #8138, IE may throw an exception when accessing +// a field from window.location if document.domain has been set +try { + ajaxLocation = location.href; +} catch( e ) { + // Use the href attribute of an A element + // since IE will modify it given document.location + ajaxLocation = document.createElement( "a" ); + ajaxLocation.href = ""; + ajaxLocation = ajaxLocation.href; +} + +// Segment location into parts +ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || []; + +// 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( rnotwhite ) || []; + + if ( jQuery.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: ajaxLocation, + type: "GET", + isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ), + 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: /xml/, + html: /html/, + json: /json/ + }, + + 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": jQuery.parseJSON, + + // 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, + // Cross-domain detection vars + parts, + // To know if global events are to be dispatched + fireGlobals, + // Loop variable + i, + // 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 = {}, + // The jqXHR state + state = 0, + // Default abort message + strAbort = "canceled", + // Fake xhr + jqXHR = { + readyState: 0, + + // Builds headers hashtable if needed + getResponseHeader: function( key ) { + var match; + if ( state === 2 ) { + if ( !responseHeaders ) { + responseHeaders = {}; + while ( (match = rheaders.exec( responseHeadersString )) ) { + responseHeaders[ match[1].toLowerCase() ] = match[ 2 ]; + } + } + match = responseHeaders[ key.toLowerCase() ]; + } + return match == null ? null : match; + }, + + // Raw string + getAllResponseHeaders: function() { + return state === 2 ? responseHeadersString : null; + }, + + // Caches the header + setRequestHeader: function( name, value ) { + var lname = name.toLowerCase(); + if ( !state ) { + name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name; + requestHeaders[ name ] = value; + } + return this; + }, + + // Overrides response content-type header + overrideMimeType: function( type ) { + if ( !state ) { + s.mimeType = type; + } + return this; + }, + + // Status-dependent callbacks + statusCode: function( map ) { + var code; + if ( map ) { + if ( state < 2 ) { + for ( code in map ) { + // Lazy-add the new callback in a way that preserves old ones + statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; + } + } else { + // Execute the appropriate callbacks + jqXHR.always( map[ jqXHR.status ] ); + } + } + 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 ).complete = completeDeferred.add; + jqXHR.success = jqXHR.done; + jqXHR.error = jqXHR.fail; + + // Remove hash character (#7531: and string promotion) + // 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 || ajaxLocation ) + "" ).replace( rhash, "" ) + .replace( rprotocol, ajaxLocParts[ 1 ] + "//" ); + + // Alias method option to type as per ticket #12004 + s.type = options.method || options.type || s.method || s.type; + + // Extract dataTypes list + s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().match( rnotwhite ) || [ "" ]; + + // A cross-domain request is in order when we have a protocol:host:port mismatch + if ( s.crossDomain == null ) { + parts = rurl.exec( s.url.toLowerCase() ); + s.crossDomain = !!( parts && + ( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] || + ( parts[ 3 ] || ( parts[ 1 ] === "http:" ? "80" : "443" ) ) !== + ( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? "80" : "443" ) ) ) + ); + } + + // 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 ( state === 2 ) { + return jqXHR; + } + + // We can fire global events as of now if asked to + fireGlobals = 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 + cacheURL = s.url; + + // More options handling for requests with no content + if ( !s.hasContent ) { + + // If data is available, append data to url + if ( s.data ) { + cacheURL = ( s.url += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data ); + // #9682: remove data so that it's not used in an eventual retry + delete s.data; + } + + // Add anti-cache in url if needed + if ( s.cache === false ) { + s.url = rts.test( cacheURL ) ? + + // If there is already a '_' parameter, set its value + cacheURL.replace( rts, "$1_=" + nonce++ ) : + + // Otherwise add one to the end + cacheURL + ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + nonce++; + } + } + + // 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 || state === 2 ) ) { + // Abort if not done already and return + return jqXHR.abort(); + } + + // aborting is no longer a cancellation + strAbort = "abort"; + + // Install callbacks on deferreds + for ( i in { success: 1, error: 1, complete: 1 } ) { + jqXHR[ i ]( s[ i ] ); + } + + // 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 ] ); + } + // Timeout + if ( s.async && s.timeout > 0 ) { + timeoutTimer = setTimeout(function() { + jqXHR.abort("timeout"); + }, s.timeout ); + } + + try { + state = 1; + transport.send( requestHeaders, done ); + } catch ( e ) { + // Propagate exception as error if not done + if ( state < 2 ) { + done( -1, e ); + // Simply rethrow otherwise + } else { + throw e; + } + } + } + + // Callback for when everything is done + function done( status, nativeStatusText, responses, headers ) { + var isSuccess, success, error, response, modified, + statusText = nativeStatusText; + + // Called once + if ( state === 2 ) { + return; + } + + // State is "done" now + state = 2; + + // Clear timeout if it exists + if ( timeoutTimer ) { + 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 ); + } + + // 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 { + // We extract error from statusText + // then normalize statusText and status 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 ( jQuery.isFunction( data ) ) { + type = type || callback; + callback = data; + data = undefined; + } + + return jQuery.ajax({ + url: url, + type: method, + dataType: type, + data: data, + success: callback + }); + }; +}); + +// Attach a bunch of functions for handling common AJAX events +jQuery.each( [ "ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend" ], function( i, type ) { + jQuery.fn[ type ] = function( fn ) { + return this.on( type, fn ); + }; +}); + + +jQuery._evalUrl = function( url ) { + return jQuery.ajax({ + url: url, + type: "GET", + dataType: "script", + async: false, + global: false, + "throws": true + }); +}; + + +jQuery.fn.extend({ + wrapAll: function( html ) { + var wrap; + + if ( jQuery.isFunction( html ) ) { + return this.each(function( i ) { + jQuery( this ).wrapAll( html.call(this, i) ); + }); + } + + if ( 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 ( jQuery.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 isFunction = jQuery.isFunction( html ); + + return this.each(function( i ) { + jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html ); + }); + }, + + unwrap: function() { + return this.parent().each(function() { + if ( !jQuery.nodeName( this, "body" ) ) { + jQuery( this ).replaceWith( this.childNodes ); + } + }).end(); + } +}); + + +jQuery.expr.filters.hidden = function( elem ) { + // Support: Opera <= 12.12 + // Opera reports offsetWidths and offsetHeights less than zero on some elements + return elem.offsetWidth <= 0 && elem.offsetHeight <= 0; +}; +jQuery.expr.filters.visible = function( elem ) { + return !jQuery.expr.filters.hidden( elem ); +}; + + + + +var r20 = /%20/g, + 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 ( jQuery.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" ? i : "" ) + "]", v, traditional, add ); + } + }); + + } else if ( !traditional && jQuery.type( 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, value ) { + // If value is a function, invoke it and return its value + value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value ); + s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value ); + }; + + // Set traditional to true for jQuery <= 1.3.2 behavior. + if ( traditional === undefined ) { + traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional; + } + + // If an array was passed in, assume that it is an array of form elements. + if ( jQuery.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( "&" ).replace( r20, "+" ); +}; + +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(); + + return val == null ? + null : + jQuery.isArray( val ) ? + jQuery.map( val, function( val ) { + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + }) : + { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + }).get(); + } +}); + + +jQuery.ajaxSettings.xhr = function() { + try { + return new XMLHttpRequest(); + } catch( e ) {} +}; + +var xhrId = 0, + xhrCallbacks = {}, + xhrSuccessStatus = { + // file protocol always yields status code 0, assume 200 + 0: 200, + // Support: IE9 + // #1450: sometimes IE returns 1223 when it should be 204 + 1223: 204 + }, + xhrSupported = jQuery.ajaxSettings.xhr(); + +// Support: IE9 +// Open requests must be manually aborted on unload (#5280) +if ( window.ActiveXObject ) { + jQuery( window ).on( "unload", function() { + for ( var key in xhrCallbacks ) { + xhrCallbacks[ key ](); + } + }); +} + +support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); +support.ajax = xhrSupported = !!xhrSupported; + +jQuery.ajaxTransport(function( options ) { + var callback; + + // Cross domain only allowed if supported through XMLHttpRequest + if ( support.cors || xhrSupported && !options.crossDomain ) { + return { + send: function( headers, complete ) { + var i, + xhr = options.xhr(), + id = ++xhrId; + + 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 ) { + delete xhrCallbacks[ id ]; + callback = xhr.onload = xhr.onerror = null; + + if ( type === "abort" ) { + xhr.abort(); + } else if ( type === "error" ) { + complete( + // file: protocol always yields status 0; see #8605, #14207 + xhr.status, + xhr.statusText + ); + } else { + complete( + xhrSuccessStatus[ xhr.status ] || xhr.status, + xhr.statusText, + // Support: IE9 + // Accessing binary-data responseText throws an exception + // (#11426) + typeof xhr.responseText === "string" ? { + text: xhr.responseText + } : undefined, + xhr.getAllResponseHeaders() + ); + } + } + }; + }; + + // Listen to events + xhr.onload = callback(); + xhr.onerror = callback("error"); + + // Create the abort callback + callback = xhrCallbacks[ id ] = 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(); + } + } + }; + } +}); + + + + +// Install script dataType +jQuery.ajaxSetup({ + accepts: { + script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript" + }, + contents: { + script: /(?:java|ecma)script/ + }, + 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 requests + if ( s.crossDomain ) { + var script, callback; + return { + send: function( _, complete ) { + script = jQuery("<script>").prop({ + async: true, + charset: s.scriptCharset, + src: s.url + }).on( + "load error", + callback = function( evt ) { + script.remove(); + callback = null; + if ( evt ) { + complete( evt.type === "error" ? 404 : 200, evt.type ); + } + } + ); + document.head.appendChild( script[ 0 ] ); + }, + abort: function() { + if ( callback ) { + callback(); + } + } + }; + } +}); + + + + +var oldCallbacks = [], + rjsonp = /(=)\?(?=&|$)|\?\?/; + +// Default jsonp settings +jQuery.ajaxSetup({ + jsonp: "callback", + jsonpCallback: function() { + var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) ); + this[ callback ] = true; + return callback; + } +}); + +// Detect, normalize options and install callbacks for jsonp requests +jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) { + + var callbackName, overwritten, responseContainer, + jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ? + "url" : + typeof s.data === "string" && !( s.contentType || "" ).indexOf("application/x-www-form-urlencoded") && rjsonp.test( s.data ) && "data" + ); + + // Handle iff the expected data type is "jsonp" or we have a parameter to set + if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) { + + // Get callback name, remembering preexisting value associated with it + callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ? + s.jsonpCallback() : + s.jsonpCallback; + + // Insert callback into url or form data + if ( jsonProp ) { + s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName ); + } else if ( s.jsonp !== false ) { + s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName; + } + + // Use data converter to retrieve json after script execution + s.converters["script json"] = function() { + if ( !responseContainer ) { + jQuery.error( callbackName + " was not called" ); + } + return responseContainer[ 0 ]; + }; + + // force json dataType + s.dataTypes[ 0 ] = "json"; + + // Install callback + overwritten = window[ callbackName ]; + window[ callbackName ] = function() { + responseContainer = arguments; + }; + + // Clean-up function (fires after converters) + jqXHR.always(function() { + // Restore preexisting value + window[ callbackName ] = overwritten; + + // Save back as free + if ( s[ callbackName ] ) { + // make sure that re-using the options doesn't screw things around + s.jsonpCallback = originalSettings.jsonpCallback; + + // save the callback name for future use + oldCallbacks.push( callbackName ); + } + + // Call if it was a function and we have a response + if ( responseContainer && jQuery.isFunction( overwritten ) ) { + overwritten( responseContainer[ 0 ] ); + } + + responseContainer = overwritten = undefined; + }); + + // Delegate to script + return "script"; + } +}); + + + + +// data: string of html +// context (optional): If specified, the fragment will be created in this context, defaults to document +// keepScripts (optional): If true, will include scripts passed in the html string +jQuery.parseHTML = function( data, context, keepScripts ) { + if ( !data || typeof data !== "string" ) { + return null; + } + if ( typeof context === "boolean" ) { + keepScripts = context; + context = false; + } + context = context || document; + + var parsed = rsingleTag.exec( data ), + scripts = !keepScripts && []; + + // Single tag + if ( parsed ) { + return [ context.createElement( parsed[1] ) ]; + } + + parsed = jQuery.buildFragment( [ data ], context, scripts ); + + if ( scripts && scripts.length ) { + jQuery( scripts ).remove(); + } + + return jQuery.merge( [], parsed.childNodes ); +}; + + +// Keep a copy of the old load method +var _load = jQuery.fn.load; + +/** + * Load a url into a page + */ +jQuery.fn.load = function( url, params, callback ) { + if ( typeof url !== "string" && _load ) { + return _load.apply( this, arguments ); + } + + var selector, type, response, + self = this, + off = url.indexOf(" "); + + if ( off >= 0 ) { + selector = jQuery.trim( url.slice( off ) ); + url = url.slice( 0, off ); + } + + // If it's a function + if ( jQuery.isFunction( params ) ) { + + // We assume that it's the callback + callback = params; + params = undefined; + + // Otherwise, build a param string + } else if ( params && typeof params === "object" ) { + type = "POST"; + } + + // If we have elements to modify, make the request + if ( self.length > 0 ) { + jQuery.ajax({ + url: url, + + // if "type" variable is undefined, then "GET" method will be used + type: type, + dataType: "html", + data: params + }).done(function( responseText ) { + + // Save response for use in complete callback + response = arguments; + + self.html( selector ? + + // If a selector was specified, locate the right elements in a dummy div + // Exclude scripts to avoid IE 'Permission Denied' errors + jQuery("<div>").append( jQuery.parseHTML( responseText ) ).find( selector ) : + + // Otherwise use the full result + responseText ); + + }).complete( callback && function( jqXHR, status ) { + self.each( callback, response || [ jqXHR.responseText, status, jqXHR ] ); + }); + } + + return this; +}; + + + + +jQuery.expr.filters.animated = function( elem ) { + return jQuery.grep(jQuery.timers, function( fn ) { + return elem === fn.elem; + }).length; +}; + + + + +var docElem = window.document.documentElement; + +/** + * Gets a window from an element + */ +function getWindow( elem ) { + return jQuery.isWindow( elem ) ? elem : elem.nodeType === 9 && elem.defaultView; +} + +jQuery.offset = { + setOffset: function( elem, options, i ) { + var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition, + position = jQuery.css( elem, "position" ), + curElem = jQuery( elem ), + props = {}; + + // Set position first, in-case top/left are set even on static elem + if ( position === "static" ) { + elem.style.position = "relative"; + } + + curOffset = curElem.offset(); + curCSSTop = jQuery.css( elem, "top" ); + curCSSLeft = jQuery.css( elem, "left" ); + calculatePosition = ( position === "absolute" || position === "fixed" ) && + ( curCSSTop + curCSSLeft ).indexOf("auto") > -1; + + // Need to be able to calculate position if either top or left is auto and position is either absolute or fixed + if ( calculatePosition ) { + curPosition = curElem.position(); + curTop = curPosition.top; + curLeft = curPosition.left; + + } else { + curTop = parseFloat( curCSSTop ) || 0; + curLeft = parseFloat( curCSSLeft ) || 0; + } + + if ( jQuery.isFunction( options ) ) { + options = options.call( elem, i, curOffset ); + } + + if ( options.top != null ) { + props.top = ( options.top - curOffset.top ) + curTop; + } + if ( options.left != null ) { + props.left = ( options.left - curOffset.left ) + curLeft; + } + + if ( "using" in options ) { + options.using.call( elem, props ); + + } else { + curElem.css( props ); + } + } +}; + +jQuery.fn.extend({ + offset: function( options ) { + if ( arguments.length ) { + return options === undefined ? + this : + this.each(function( i ) { + jQuery.offset.setOffset( this, options, i ); + }); + } + + var docElem, win, + elem = this[ 0 ], + box = { top: 0, left: 0 }, + doc = elem && elem.ownerDocument; + + if ( !doc ) { + return; + } + + docElem = doc.documentElement; + + // Make sure it's not a disconnected DOM node + if ( !jQuery.contains( docElem, elem ) ) { + return box; + } + + // If we don't have gBCR, just use 0,0 rather than error + // BlackBerry 5, iOS 3 (original iPhone) + if ( typeof elem.getBoundingClientRect !== strundefined ) { + box = elem.getBoundingClientRect(); + } + win = getWindow( doc ); + return { + top: box.top + win.pageYOffset - docElem.clientTop, + left: box.left + win.pageXOffset - docElem.clientLeft + }; + }, + + position: function() { + if ( !this[ 0 ] ) { + return; + } + + var offsetParent, offset, + elem = this[ 0 ], + parentOffset = { top: 0, left: 0 }; + + // Fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is its only offset parent + if ( jQuery.css( elem, "position" ) === "fixed" ) { + // We assume that getBoundingClientRect is available when computed position is fixed + offset = elem.getBoundingClientRect(); + + } else { + // Get *real* offsetParent + offsetParent = this.offsetParent(); + + // Get correct offsets + offset = this.offset(); + if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) { + parentOffset = offsetParent.offset(); + } + + // Add offsetParent borders + parentOffset.top += jQuery.css( offsetParent[ 0 ], "borderTopWidth", true ); + parentOffset.left += jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true ); + } + + // Subtract parent offsets and element margins + return { + top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ), + left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true ) + }; + }, + + offsetParent: function() { + return this.map(function() { + var offsetParent = this.offsetParent || docElem; + + while ( offsetParent && ( !jQuery.nodeName( offsetParent, "html" ) && jQuery.css( offsetParent, "position" ) === "static" ) ) { + offsetParent = offsetParent.offsetParent; + } + + return offsetParent || docElem; + }); + } +}); + +// Create scrollLeft and scrollTop methods +jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) { + var top = "pageYOffset" === prop; + + jQuery.fn[ method ] = function( val ) { + return access( this, function( elem, method, val ) { + var win = getWindow( elem ); + + if ( val === undefined ) { + return win ? win[ prop ] : elem[ method ]; + } + + if ( win ) { + win.scrollTo( + !top ? val : window.pageXOffset, + top ? val : window.pageYOffset + ); + + } else { + elem[ method ] = val; + } + }, method, val, arguments.length, null ); + }; +}); + +// Add the top/left cssHooks using jQuery.fn.position +// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084 +// getComputedStyle returns percent when specified for top/left/bottom/right +// rather than make the css module depend on the offset module, we just check for it here +jQuery.each( [ "top", "left" ], function( i, prop ) { + jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition, + function( elem, computed ) { + if ( computed ) { + computed = curCSS( elem, prop ); + // if curCSS returns percentage, fallback to offset + return rnumnonpx.test( computed ) ? + jQuery( elem ).position()[ prop ] + "px" : + computed; + } + } + ); +}); + + +// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods +jQuery.each( { Height: "height", Width: "width" }, function( name, type ) { + jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, function( defaultExtra, funcName ) { + // margin is only for outerHeight, outerWidth + jQuery.fn[ funcName ] = function( margin, value ) { + var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ), + extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" ); + + return access( this, function( elem, type, value ) { + var doc; + + if ( jQuery.isWindow( elem ) ) { + // As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there + // isn't a whole lot we can do. See pull request at this URL for discussion: + // https://github.com/jquery/jquery/pull/764 + return elem.document.documentElement[ "client" + name ]; + } + + // Get document width or height + if ( elem.nodeType === 9 ) { + doc = elem.documentElement; + + // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], + // whichever is greatest + return Math.max( + elem.body[ "scroll" + name ], doc[ "scroll" + name ], + elem.body[ "offset" + name ], doc[ "offset" + name ], + doc[ "client" + name ] + ); + } + + return value === undefined ? + // Get width or height on the element, requesting but not forcing parseFloat + jQuery.css( elem, type, extra ) : + + // Set width or height on the element + jQuery.style( elem, type, value, extra ); + }, type, chainable ? margin : undefined, chainable, null ); + }; + }); +}); + + +// The number of elements contained in the matched element set +jQuery.fn.size = function() { + return this.length; +}; + +jQuery.fn.andSelf = jQuery.fn.addBack; + + + + +// Register as a named AMD module, since jQuery can be concatenated with other +// files that may use define, but not via a proper concatenation script that +// understands anonymous AMD modules. A named AMD is safest and most robust +// way to register. Lowercase jquery is used because AMD module names are +// derived from file names, and jQuery is normally delivered in a lowercase +// file name. Do this after creating the global so that if an AMD module wants +// to call noConflict to hide this version of jQuery, it will work. + +// Note that for maximum portability, libraries that are not jQuery should +// declare themselves as anonymous modules, and avoid setting a global if an +// AMD loader is present. jQuery is a special case. For more information, see +// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon + +if ( typeof define === "function" && define.amd ) { + define( "jquery", [], function() { + return jQuery; + }); +} + + + + +var + // Map over jQuery in case of overwrite + _jQuery = window.jQuery, + + // Map over the $ in case of overwrite + _$ = window.$; + +jQuery.noConflict = function( deep ) { + if ( window.$ === jQuery ) { + window.$ = _$; + } + + if ( deep && window.jQuery === jQuery ) { + window.jQuery = _jQuery; + } + + return jQuery; +}; + +// Expose jQuery and $ identifiers, even in +// AMD (#7102#comment:10, https://github.com/jquery/jquery/pull/557) +// and CommonJS for browser emulators (#13566) +if ( typeof noGlobal === strundefined ) { + window.jQuery = window.$ = jQuery; +} + + + + +return jQuery; + +})); diff --git a/doc/doxygen/styling/jquery-2.1.1.min.js.in b/doc/doxygen/styling/jquery-2.1.1.min.js.in new file mode 100644 index 00000000000..e5ace116b6f --- /dev/null +++ b/doc/doxygen/styling/jquery-2.1.1.min.js.in @@ -0,0 +1,4 @@ +/*! jQuery v2.1.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */ +!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l=a.document,m="2.1.1",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return n.each(this,a,b)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(n.isPlainObject(d)||(e=n.isArray(d)))?(e?(e=!1,f=c&&n.isArray(c)?c:[]):f=c&&n.isPlainObject(c)?c:{},g[b]=n.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){return!n.isArray(a)&&a-parseFloat(a)>=0},isPlainObject:function(a){return"object"!==n.type(a)||a.nodeType||n.isWindow(a)?!1:a.constructor&&!j.call(a.constructor.prototype,"isPrototypeOf")?!1:!0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=n.trim(a),a&&(1===a.indexOf("use strict")?(b=l.createElement("script"),b.text=a,l.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=s(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:g.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=s(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(c=a[b],b=a,a=c),n.isFunction(a)?(e=d.call(arguments,2),f=function(){return a.apply(b||this,e.concat(d.call(arguments)))},f.guid=a.guid=a.guid||n.guid++,f):void 0},now:Date.now,support:k}),n.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+-new Date,v=a.document,w=0,x=0,y=gb(),z=gb(),A=gb(),B=function(a,b){return a===b&&(l=!0),0},C="undefined",D=1<<31,E={}.hasOwnProperty,F=[],G=F.pop,H=F.push,I=F.push,J=F.slice,K=F.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},L="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",N="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",O=N.replace("w","w#"),P="\\["+M+"*("+N+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+O+"))|)"+M+"*\\]",Q=":("+N+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+P+")*)|.*)\\)|)",R=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),S=new RegExp("^"+M+"*,"+M+"*"),T=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),V=new RegExp(Q),W=new RegExp("^"+O+"$"),X={ID:new RegExp("^#("+N+")"),CLASS:new RegExp("^\\.("+N+")"),TAG:new RegExp("^("+N.replace("w","w*")+")"),ATTR:new RegExp("^"+P),PSEUDO:new RegExp("^"+Q),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+L+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{I.apply(F=J.call(v.childNodes),v.childNodes),F[v.childNodes.length].nodeType}catch(eb){I={apply:F.length?function(a,b){H.apply(a,J.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],!a||"string"!=typeof a)return d;if(1!==(k=b.nodeType)&&9!==k)return[];if(p&&!e){if(f=_.exec(a))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return I.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return I.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=9===k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+qb(o[l]);w=ab.test(a)&&ob(b.parentNode)||b,x=o.join(",")}if(x)try{return I.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function gb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function hb(a){return a[u]=!0,a}function ib(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function jb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function kb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||D)-(~a.sourceIndex||D);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function lb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function nb(a){return hb(function(b){return b=+b,hb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function ob(a){return a&&typeof a.getElementsByTagName!==C&&a}c=fb.support={},f=fb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fb.setDocument=function(a){var b,e=a?a.ownerDocument||a:v,g=e.defaultView;return e!==n&&9===e.nodeType&&e.documentElement?(n=e,o=e.documentElement,p=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){m()},!1):g.attachEvent&&g.attachEvent("onunload",function(){m()})),c.attributes=ib(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ib(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(e.getElementsByClassName)&&ib(function(a){return a.innerHTML="<div class='a'></div><div class='a i'></div>",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=ib(function(a){return o.appendChild(a).id=u,!e.getElementsByName||!e.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==C&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c=typeof a.getAttributeNode!==C&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==C?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==C&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(e.querySelectorAll))&&(ib(function(a){a.innerHTML="<select msallowclip=''><option selected=''></option></select>",a.querySelectorAll("[msallowclip^='']").length&&q.push("[*^$]="+M+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+M+"*(?:value|"+L+")"),a.querySelectorAll(":checked").length||q.push(":checked")}),ib(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+M+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ib(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",Q)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===v&&t(v,a)?-1:b===e||b.ownerDocument===v&&t(v,b)?1:k?K.call(k,a)-K.call(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],i=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:k?K.call(k,a)-K.call(k,b):0;if(f===g)return kb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?kb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},e):n},fb.matches=function(a,b){return fb(a,null,null,b)},fb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fb(b,n,null,[a]).length>0},fb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&E.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fb.selectors={cacheLength:50,createPseudo:hb,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+M+")"+a+"("+M+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==C&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?hb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=K.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:hb(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?hb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:hb(function(a){return function(b){return fb(a,b).length>0}}),contains:hb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:hb(function(a){return W.test(a||"")||fb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:nb(function(){return[0]}),last:nb(function(a,b){return[b-1]}),eq:nb(function(a,b,c){return[0>c?c+b:c]}),even:nb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:nb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:nb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:nb(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=lb(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=mb(b);function pb(){}pb.prototype=d.filters=d.pseudos,d.setFilters=new pb,g=fb.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=S.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=T.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(R," ")}),h=h.slice(c.length));for(g in d.filter)!(e=X[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?fb.error(a):z(a,i).slice(0)};function qb(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function rb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function sb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function tb(a,b,c){for(var d=0,e=b.length;e>d;d++)fb(a,b[d],c);return c}function ub(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function vb(a,b,c,d,e,f){return d&&!d[u]&&(d=vb(d)),e&&!e[u]&&(e=vb(e,f)),hb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||tb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ub(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ub(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?K.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ub(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):I.apply(g,r)})}function wb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=rb(function(a){return a===b},h,!0),l=rb(function(a){return K.call(b,a)>-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>i;i++)if(c=d.relative[a[i].type])m=[rb(sb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return vb(i>1&&sb(m),i>1&&qb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&wb(a.slice(i,e)),f>e&&wb(a=a.slice(e)),f>e&&qb(a))}m.push(c)}return sb(m)}function xb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=G.call(i));s=ub(s)}I.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&fb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?hb(f):f}return h=fb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xb(e,d)),f.selector=a}return f},i=fb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&ob(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qb(j),!a)return I.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&ob(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ib(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ib(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||jb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ib(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||jb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ib(function(a){return null==a.getAttribute("disabled")})||jb(L,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fb}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=n.expr.match.needsContext,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^.[^:#\[\.,]*$/;function x(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return g.call(b,a)>=0!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;c>b;b++)if(n.contains(e[b],this))return!0}));for(b=0;c>b;b++)n.find(a,e[b],d);return d=this.pushStack(c>1?n.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(x(this,a||[],!1))},not:function(a){return this.pushStack(x(this,a||[],!0))},is:function(a){return!!x(this,"string"==typeof a&&u.test(a)?n(a):a||[],!1).length}});var y,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=n.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||y).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:l,!0)),v.test(c[1])&&n.isPlainObject(b))for(c in b)n.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}return d=l.getElementById(c[2]),d&&d.parentNode&&(this.length=1,this[0]=d),this.context=l,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof y.ready?y.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};A.prototype=n.fn,y=n(l);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};n.extend({dir:function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),n.fn.extend({has:function(a){var b=n(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(n.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=u.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.unique(f):f)},index:function(a){return a?"string"==typeof a?g.call(n(a),this[0]):g.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.unique(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){while((a=a[b])&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return n.dir(a,"parentNode")},parentsUntil:function(a,b,c){return n.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return n.dir(a,"nextSibling")},prevAll:function(a){return n.dir(a,"previousSibling")},nextUntil:function(a,b,c){return n.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return n.dir(a,"previousSibling",c)},siblings:function(a){return n.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return n.sibling(a.firstChild)},contents:function(a){return a.contentDocument||n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(C[a]||n.unique(e),B.test(a)&&e.reverse()),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return n.each(a.match(E)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):n.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(b=a.memory&&l,c=!0,g=e||0,e=0,f=h.length,d=!0;h&&f>g;g++)if(h[g].apply(l[0],l[1])===!1&&a.stopOnFalse){b=!1;break}d=!1,h&&(i?i.length&&j(i.shift()):b?h=[]:k.disable())},k={add:function(){if(h){var c=h.length;!function g(b){n.each(b,function(b,c){var d=n.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&g(c)})}(arguments),d?f=h.length:b&&(e=c,j(b))}return this},remove:function(){return h&&n.each(arguments,function(a,b){var c;while((c=n.inArray(b,h,c))>-1)h.splice(c,1),d&&(f>=c&&f--,g>=c&&g--)}),this},has:function(a){return a?n.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],f=0,this},disable:function(){return h=i=b=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,b||k.disable(),this},locked:function(){return!i},fireWith:function(a,b){return!h||c&&!i||(b=b||[],b=[a,b.slice?b.slice():b],d?i.push(b):j(b)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!c}};return k},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&n.isFunction(a.promise)?e:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(H.resolveWith(l,[n]),n.fn.triggerHandler&&(n(l).triggerHandler("ready"),n(l).off("ready"))))}});function I(){l.removeEventListener("DOMContentLoaded",I,!1),a.removeEventListener("load",I,!1),n.ready()}n.ready.promise=function(b){return H||(H=n.Deferred(),"complete"===l.readyState?setTimeout(n.ready):(l.addEventListener("DOMContentLoaded",I,!1),a.addEventListener("load",I,!1))),H.promise(b)},n.ready.promise();var J=n.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)n.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f};n.acceptData=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function K(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=n.expando+Math.random()}K.uid=1,K.accepts=n.acceptData,K.prototype={key:function(a){if(!K.accepts(a))return 0;var b={},c=a[this.expando];if(!c){c=K.uid++;try{b[this.expando]={value:c},Object.defineProperties(a,b)}catch(d){b[this.expando]=c,n.extend(a,b)}}return this.cache[c]||(this.cache[c]={}),c},set:function(a,b,c){var d,e=this.key(a),f=this.cache[e];if("string"==typeof b)f[b]=c;else if(n.isEmptyObject(f))n.extend(this.cache[e],b);else for(d in b)f[d]=b[d];return f},get:function(a,b){var c=this.cache[this.key(a)];return void 0===b?c:c[b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,n.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=this.key(a),g=this.cache[f];if(void 0===b)this.cache[f]={};else{n.isArray(b)?d=b.concat(b.map(n.camelCase)):(e=n.camelCase(b),b in g?d=[b,e]:(d=e,d=d in g?[d]:d.match(E)||[])),c=d.length;while(c--)delete g[d[c]]}},hasData:function(a){return!n.isEmptyObject(this.cache[a[this.expando]]||{})},discard:function(a){a[this.expando]&&delete this.cache[a[this.expando]]}};var L=new K,M=new K,N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(O,"-$1").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}M.set(a,b,c)}else c=void 0;return c}n.extend({hasData:function(a){return M.hasData(a)||L.hasData(a)},data:function(a,b,c){return M.access(a,b,c)},removeData:function(a,b){M.remove(a,b) +},_data:function(a,b,c){return L.access(a,b,c)},_removeData:function(a,b){L.remove(a,b)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=M.get(f),1===f.nodeType&&!L.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));L.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){M.set(this,a)}):J(this,function(b){var c,d=n.camelCase(a);if(f&&void 0===b){if(c=M.get(f,a),void 0!==c)return c;if(c=M.get(f,d),void 0!==c)return c;if(c=P(f,d,void 0),void 0!==c)return c}else this.each(function(){var c=M.get(this,d);M.set(this,d,b),-1!==a.indexOf("-")&&void 0!==c&&M.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){M.remove(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=L.get(a,b),c&&(!d||n.isArray(c)?d=L.access(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return L.get(a,c)||L.access(a,c,{empty:n.Callbacks("once memory").add(function(){L.remove(a,[b+"queue",c])})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?n.queue(this[0],a):void 0===b?this:this.each(function(){var c=n.queue(this,a,b);n._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&n.dequeue(this,a)})},dequeue:function(a){return this.each(function(){n.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=n.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=L.get(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var Q=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,R=["Top","Right","Bottom","Left"],S=function(a,b){return a=b||a,"none"===n.css(a,"display")||!n.contains(a.ownerDocument,a)},T=/^(?:checkbox|radio)$/i;!function(){var a=l.createDocumentFragment(),b=a.appendChild(l.createElement("div")),c=l.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="<textarea>x</textarea>",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var U="undefined";k.focusinBubbles="onfocusin"in a;var V=/^key/,W=/^(?:mouse|pointer|contextmenu)|click/,X=/^(?:focusinfocus|focusoutblur)$/,Y=/^([^.]*)(?:\.(.+)|)$/;function Z(){return!0}function $(){return!1}function _(){try{return l.activeElement}catch(a){}}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=n.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return typeof n!==U&&n.event.triggered!==b.type?n.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(E)||[""],j=b.length;while(j--)h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o&&(l=n.event.special[o]||{},o=(e?l.delegateType:l.bindType)||o,l=n.event.special[o]||{},k=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[o])||(m=i[o]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(o,g,!1)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),n.event.global[o]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.hasData(a)&&L.get(a);if(r&&(i=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=i[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&q!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete i[o])}else for(o in i)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(i)&&(delete r.handle,L.remove(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,m,o,p=[d||l],q=j.call(b,"type")?b.type:b,r=j.call(b,"namespace")?b.namespace.split("."):[];if(g=h=d=d||l,3!==d.nodeType&&8!==d.nodeType&&!X.test(q+n.event.triggered)&&(q.indexOf(".")>=0&&(r=q.split("."),q=r.shift(),r.sort()),k=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=r.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:n.makeArray(c,[b]),o=n.event.special[q]||{},e||!o.trigger||o.trigger.apply(d,c)!==!1)){if(!e&&!o.noBubble&&!n.isWindow(d)){for(i=o.delegateType||q,X.test(i+q)||(g=g.parentNode);g;g=g.parentNode)p.push(g),h=g;h===(d.ownerDocument||l)&&p.push(h.defaultView||h.parentWindow||a)}f=0;while((g=p[f++])&&!b.isPropagationStopped())b.type=f>1?i:o.bindType||q,m=(L.get(g,"events")||{})[b.type]&&L.get(g,"handle"),m&&m.apply(g,c),m=k&&g[k],m&&m.apply&&n.acceptData(g)&&(b.result=m.apply(g,c),b.result===!1&&b.preventDefault());return b.type=q,e||b.isDefaultPrevented()||o._default&&o._default.apply(p.pop(),c)!==!1||!n.acceptData(d)||k&&n.isFunction(d[q])&&!n.isWindow(d)&&(h=d[k],h&&(d[k]=null),n.event.triggered=q,d[q](),n.event.triggered=void 0,h&&(d[k]=h)),b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(L.get(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(g.namespace))&&(a.handleObj=g,a.data=g.data,e=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(a.result=e)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!==this;i=i.parentNode||this)if(i.disabled!==!0||"click"!==a.type){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>=0:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,d,e,f=b.button;return null==a.pageX&&null!=b.clientX&&(c=a.target.ownerDocument||l,d=c.documentElement,e=c.body,a.pageX=b.clientX+(d&&d.scrollLeft||e&&e.scrollLeft||0)-(d&&d.clientLeft||e&&e.clientLeft||0),a.pageY=b.clientY+(d&&d.scrollTop||e&&e.scrollTop||0)-(d&&d.clientTop||e&&e.clientTop||0)),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},fix:function(a){if(a[n.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=W.test(e)?this.mouseHooks:V.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new n.Event(f),b=d.length;while(b--)c=d[b],a[c]=f[c];return a.target||(a.target=l),3===a.target.nodeType&&(a.target=a.target.parentNode),g.filter?g.filter(a,f):a},special:{load:{noBubble:!0},focus:{trigger:function(){return this!==_()&&this.focus?(this.focus(),!1):void 0},delegateType:"focusin"},blur:{trigger:function(){return this===_()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return"checkbox"===this.type&&this.click&&n.nodeName(this,"input")?(this.click(),!1):void 0},_default:function(a){return n.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=n.extend(new n.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?n.event.trigger(e,null,b):n.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},n.removeEvent=function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)},n.Event=function(a,b){return this instanceof n.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?Z:$):this.type=a,b&&n.extend(this,b),this.timeStamp=a&&a.timeStamp||n.now(),void(this[n.expando]=!0)):new n.Event(a,b)},n.Event.prototype={isDefaultPrevented:$,isPropagationStopped:$,isImmediatePropagationStopped:$,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=Z,a&&a.preventDefault&&a.preventDefault()},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=Z,a&&a.stopPropagation&&a.stopPropagation()},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=Z,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},n.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){n.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!n.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),k.focusinBubbles||n.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){n.event.simulate(b,a.target,n.event.fix(a),!0)};n.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=L.access(d,b);e||d.addEventListener(a,c,!0),L.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=L.access(d,b)-1;e?L.access(d,b,e):(d.removeEventListener(a,c,!0),L.remove(d,b))}}}),n.fn.extend({on:function(a,b,c,d,e){var f,g;if("object"==typeof a){"string"!=typeof b&&(c=c||b,b=void 0);for(g in a)this.on(g,b,c,a[g],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&("string"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=$;else if(!d)return this;return 1===e&&(f=d,d=function(a){return n().off(a),f.apply(this,arguments)},d.guid=f.guid||(f.guid=n.guid++)),this.each(function(){n.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,n(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return(b===!1||"function"==typeof b)&&(c=b,b=void 0),c===!1&&(c=$),this.each(function(){n.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){n.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?n.event.trigger(a,b,c,!0):void 0}});var ab=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bb=/<([\w:]+)/,cb=/<|&#?\w+;/,db=/<(?:script|style|link)/i,eb=/checked\s*(?:[^=]|=\s*.checked.)/i,fb=/^$|\/(?:java|ecma)script/i,gb=/^true\/(.*)/,hb=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,ib={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ib.optgroup=ib.option,ib.tbody=ib.tfoot=ib.colgroup=ib.caption=ib.thead,ib.th=ib.td;function jb(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function kb(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function lb(a){var b=gb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function mb(a,b){for(var c=0,d=a.length;d>c;c++)L.set(a[c],"globalEval",!b||L.get(b[c],"globalEval"))}function nb(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(L.hasData(a)&&(f=L.access(a),g=L.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)n.event.add(b,e,j[e][c])}M.hasData(a)&&(h=M.access(a),i=n.extend({},h),M.set(b,i))}}function ob(a,b){var c=a.getElementsByTagName?a.getElementsByTagName(b||"*"):a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&n.nodeName(a,b)?n.merge([a],c):c}function pb(a,b){var c=b.nodeName.toLowerCase();"input"===c&&T.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}n.extend({clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=n.contains(a.ownerDocument,a);if(!(k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(g=ob(h),f=ob(a),d=0,e=f.length;e>d;d++)pb(f[d],g[d]);if(b)if(c)for(f=f||ob(a),g=g||ob(h),d=0,e=f.length;e>d;d++)nb(f[d],g[d]);else nb(a,h);return g=ob(h,"script"),g.length>0&&mb(g,!i&&ob(a,"script")),h},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k=b.createDocumentFragment(),l=[],m=0,o=a.length;o>m;m++)if(e=a[m],e||0===e)if("object"===n.type(e))n.merge(l,e.nodeType?[e]:e);else if(cb.test(e)){f=f||k.appendChild(b.createElement("div")),g=(bb.exec(e)||["",""])[1].toLowerCase(),h=ib[g]||ib._default,f.innerHTML=h[1]+e.replace(ab,"<$1></$2>")+h[2],j=h[0];while(j--)f=f.lastChild;n.merge(l,f.childNodes),f=k.firstChild,f.textContent=""}else l.push(b.createTextNode(e));k.textContent="",m=0;while(e=l[m++])if((!d||-1===n.inArray(e,d))&&(i=n.contains(e.ownerDocument,e),f=ob(k.appendChild(e),"script"),i&&mb(f),c)){j=0;while(e=f[j++])fb.test(e.type||"")&&c.push(e)}return k},cleanData:function(a){for(var b,c,d,e,f=n.event.special,g=0;void 0!==(c=a[g]);g++){if(n.acceptData(c)&&(e=c[L.expando],e&&(b=L.cache[e]))){if(b.events)for(d in b.events)f[d]?n.event.remove(c,d):n.removeEvent(c,d,b.handle);L.cache[e]&&delete L.cache[e]}delete M.cache[c[M.expando]]}}}),n.fn.extend({text:function(a){return J(this,function(a){return void 0===a?n.text(this):this.empty().each(function(){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&(this.textContent=a)})},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?n.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||n.cleanData(ob(c)),c.parentNode&&(b&&n.contains(c.ownerDocument,c)&&mb(ob(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(n.cleanData(ob(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return J(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!db.test(a)&&!ib[(bb.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(ab,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(ob(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,n.cleanData(ob(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,m=this,o=l-1,p=a[0],q=n.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&eb.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(c=n.buildFragment(a,this[0].ownerDocument,!1,this),d=c.firstChild,1===c.childNodes.length&&(c=d),d)){for(f=n.map(ob(c,"script"),kb),g=f.length;l>j;j++)h=c,j!==o&&(h=n.clone(h,!0,!0),g&&n.merge(f,ob(h,"script"))),b.call(this[j],h,j);if(g)for(i=f[f.length-1].ownerDocument,n.map(f,lb),j=0;g>j;j++)h=f[j],fb.test(h.type||"")&&!L.access(h,"globalEval")&&n.contains(i,h)&&(h.src?n._evalUrl&&n._evalUrl(h.src):n.globalEval(h.textContent.replace(hb,"")))}return this}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=[],e=n(a),g=e.length-1,h=0;g>=h;h++)c=h===g?this:this.clone(!0),n(e[h])[b](c),f.apply(d,c.get());return this.pushStack(d)}});var qb,rb={};function sb(b,c){var d,e=n(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:n.css(e[0],"display");return e.detach(),f}function tb(a){var b=l,c=rb[a];return c||(c=sb(a,b),"none"!==c&&c||(qb=(qb||n("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=qb[0].contentDocument,b.write(),b.close(),c=sb(a,b),qb.detach()),rb[a]=c),c}var ub=/^margin/,vb=new RegExp("^("+Q+")(?!px)[a-z%]+$","i"),wb=function(a){return a.ownerDocument.defaultView.getComputedStyle(a,null)};function xb(a,b,c){var d,e,f,g,h=a.style;return c=c||wb(a),c&&(g=c.getPropertyValue(b)||c[b]),c&&(""!==g||n.contains(a.ownerDocument,a)||(g=n.style(a,b)),vb.test(g)&&ub.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0!==g?g+"":g}function yb(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d=l.documentElement,e=l.createElement("div"),f=l.createElement("div");if(f.style){f.style.backgroundClip="content-box",f.cloneNode(!0).style.backgroundClip="",k.clearCloneStyle="content-box"===f.style.backgroundClip,e.style.cssText="border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;position:absolute",e.appendChild(f);function g(){f.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",f.innerHTML="",d.appendChild(e);var g=a.getComputedStyle(f,null);b="1%"!==g.top,c="4px"===g.width,d.removeChild(e)}a.getComputedStyle&&n.extend(k,{pixelPosition:function(){return g(),b},boxSizingReliable:function(){return null==c&&g(),c},reliableMarginRight:function(){var b,c=f.appendChild(l.createElement("div"));return c.style.cssText=f.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",c.style.marginRight=c.style.width="0",f.style.width="1px",d.appendChild(e),b=!parseFloat(a.getComputedStyle(c,null).marginRight),d.removeChild(e),b}})}}(),n.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var zb=/^(none|table(?!-c[ea]).+)/,Ab=new RegExp("^("+Q+")(.*)$","i"),Bb=new RegExp("^([+-])=("+Q+")","i"),Cb={position:"absolute",visibility:"hidden",display:"block"},Db={letterSpacing:"0",fontWeight:"400"},Eb=["Webkit","O","Moz","ms"];function Fb(a,b){if(b in a)return b;var c=b[0].toUpperCase()+b.slice(1),d=b,e=Eb.length;while(e--)if(b=Eb[e]+c,b in a)return b;return d}function Gb(a,b,c){var d=Ab.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Hb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=n.css(a,c+R[f],!0,e)),d?("content"===c&&(g-=n.css(a,"padding"+R[f],!0,e)),"margin"!==c&&(g-=n.css(a,"border"+R[f]+"Width",!0,e))):(g+=n.css(a,"padding"+R[f],!0,e),"padding"!==c&&(g+=n.css(a,"border"+R[f]+"Width",!0,e)));return g}function Ib(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=wb(a),g="border-box"===n.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=xb(a,b,f),(0>e||null==e)&&(e=a.style[b]),vb.test(e))return e;d=g&&(k.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Hb(a,b,c||(g?"border":"content"),d,f)+"px"}function Jb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=L.get(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&S(d)&&(f[g]=L.access(d,"olddisplay",tb(d.nodeName)))):(e=S(d),"none"===c&&e||L.set(d,"olddisplay",e?c:n.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}n.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=xb(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=n.camelCase(b),i=a.style;return b=n.cssProps[h]||(n.cssProps[h]=Fb(i,h)),g=n.cssHooks[b]||n.cssHooks[h],void 0===c?g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b]:(f=typeof c,"string"===f&&(e=Bb.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(n.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||n.cssNumber[h]||(c+="px"),k.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),g&&"set"in g&&void 0===(c=g.set(a,c,d))||(i[b]=c)),void 0)}},css:function(a,b,c,d){var e,f,g,h=n.camelCase(b);return b=n.cssProps[h]||(n.cssProps[h]=Fb(a.style,h)),g=n.cssHooks[b]||n.cssHooks[h],g&&"get"in g&&(e=g.get(a,!0,c)),void 0===e&&(e=xb(a,b,d)),"normal"===e&&b in Db&&(e=Db[b]),""===c||c?(f=parseFloat(e),c===!0||n.isNumeric(f)?f||0:e):e}}),n.each(["height","width"],function(a,b){n.cssHooks[b]={get:function(a,c,d){return c?zb.test(n.css(a,"display"))&&0===a.offsetWidth?n.swap(a,Cb,function(){return Ib(a,b,d)}):Ib(a,b,d):void 0},set:function(a,c,d){var e=d&&wb(a);return Gb(a,c,d?Hb(a,b,d,"border-box"===n.css(a,"boxSizing",!1,e),e):0)}}}),n.cssHooks.marginRight=yb(k.reliableMarginRight,function(a,b){return b?n.swap(a,{display:"inline-block"},xb,[a,"marginRight"]):void 0}),n.each({margin:"",padding:"",border:"Width"},function(a,b){n.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+R[d]+b]=f[d]||f[d-2]||f[0];return e}},ub.test(a)||(n.cssHooks[a+b].set=Gb)}),n.fn.extend({css:function(a,b){return J(this,function(a,b,c){var d,e,f={},g=0;if(n.isArray(b)){for(d=wb(a),e=b.length;e>g;g++)f[b[g]]=n.css(a,b[g],!1,d);return f}return void 0!==c?n.style(a,b,c):n.css(a,b)},a,b,arguments.length>1)},show:function(){return Jb(this,!0)},hide:function(){return Jb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){S(this)?n(this).show():n(this).hide()})}});function Kb(a,b,c,d,e){return new Kb.prototype.init(a,b,c,d,e)}n.Tween=Kb,Kb.prototype={constructor:Kb,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(n.cssNumber[c]?"":"px")},cur:function(){var a=Kb.propHooks[this.prop];return a&&a.get?a.get(this):Kb.propHooks._default.get(this)},run:function(a){var b,c=Kb.propHooks[this.prop];return this.pos=b=this.options.duration?n.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Kb.propHooks._default.set(this),this}},Kb.prototype.init.prototype=Kb.prototype,Kb.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=n.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){n.fx.step[a.prop]?n.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[n.cssProps[a.prop]]||n.cssHooks[a.prop])?n.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},Kb.propHooks.scrollTop=Kb.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},n.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},n.fx=Kb.prototype.init,n.fx.step={};var Lb,Mb,Nb=/^(?:toggle|show|hide)$/,Ob=new RegExp("^(?:([+-])=|)("+Q+")([a-z%]*)$","i"),Pb=/queueHooks$/,Qb=[Vb],Rb={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=Ob.exec(b),f=e&&e[3]||(n.cssNumber[a]?"":"px"),g=(n.cssNumber[a]||"px"!==f&&+d)&&Ob.exec(n.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,n.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function Sb(){return setTimeout(function(){Lb=void 0}),Lb=n.now()}function Tb(a,b){var c,d=0,e={height:a};for(b=b?1:0;4>d;d+=2-b)c=R[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function Ub(a,b,c){for(var d,e=(Rb[b]||[]).concat(Rb["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function Vb(a,b,c){var d,e,f,g,h,i,j,k,l=this,m={},o=a.style,p=a.nodeType&&S(a),q=L.get(a,"fxshow");c.queue||(h=n._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,l.always(function(){l.always(function(){h.unqueued--,n.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[o.overflow,o.overflowX,o.overflowY],j=n.css(a,"display"),k="none"===j?L.get(a,"olddisplay")||tb(a.nodeName):j,"inline"===k&&"none"===n.css(a,"float")&&(o.display="inline-block")),c.overflow&&(o.overflow="hidden",l.always(function(){o.overflow=c.overflow[0],o.overflowX=c.overflow[1],o.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],Nb.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(p?"hide":"show")){if("show"!==e||!q||void 0===q[d])continue;p=!0}m[d]=q&&q[d]||n.style(a,d)}else j=void 0;if(n.isEmptyObject(m))"inline"===("none"===j?tb(a.nodeName):j)&&(o.display=j);else{q?"hidden"in q&&(p=q.hidden):q=L.access(a,"fxshow",{}),f&&(q.hidden=!p),p?n(a).show():l.done(function(){n(a).hide()}),l.done(function(){var b;L.remove(a,"fxshow");for(b in m)n.style(a,b,m[b])});for(d in m)g=Ub(p?q[d]:0,d,l),d in q||(q[d]=g.start,p&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function Wb(a,b){var c,d,e,f,g;for(c in a)if(d=n.camelCase(c),e=b[d],f=a[c],n.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=n.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function Xb(a,b,c){var d,e,f=0,g=Qb.length,h=n.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=Lb||Sb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:n.extend({},b),opts:n.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:Lb||Sb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=n.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(Wb(k,j.opts.specialEasing);g>f;f++)if(d=Qb[f].call(j,a,k,j.opts))return d;return n.map(k,Ub,j),n.isFunction(j.opts.start)&&j.opts.start.call(a,j),n.fx.timer(n.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}n.Animation=n.extend(Xb,{tweener:function(a,b){n.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],Rb[c]=Rb[c]||[],Rb[c].unshift(b)},prefilter:function(a,b){b?Qb.unshift(a):Qb.push(a)}}),n.speed=function(a,b,c){var d=a&&"object"==typeof a?n.extend({},a):{complete:c||!c&&b||n.isFunction(a)&&a,duration:a,easing:c&&b||b&&!n.isFunction(b)&&b};return d.duration=n.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in n.fx.speeds?n.fx.speeds[d.duration]:n.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){n.isFunction(d.old)&&d.old.call(this),d.queue&&n.dequeue(this,d.queue)},d},n.fn.extend({fadeTo:function(a,b,c,d){return this.filter(S).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=n.isEmptyObject(a),f=n.speed(b,c,d),g=function(){var b=Xb(this,n.extend({},a),f);(e||L.get(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=n.timers,g=L.get(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&Pb.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&n.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=L.get(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=n.timers,g=d?d.length:0;for(c.finish=!0,n.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),n.each(["toggle","show","hide"],function(a,b){var c=n.fn[b];n.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(Tb(b,!0),a,d,e)}}),n.each({slideDown:Tb("show"),slideUp:Tb("hide"),slideToggle:Tb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){n.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),n.timers=[],n.fx.tick=function(){var a,b=0,c=n.timers;for(Lb=n.now();b<c.length;b++)a=c[b],a()||c[b]!==a||c.splice(b--,1);c.length||n.fx.stop(),Lb=void 0},n.fx.timer=function(a){n.timers.push(a),a()?n.fx.start():n.timers.pop()},n.fx.interval=13,n.fx.start=function(){Mb||(Mb=setInterval(n.fx.tick,n.fx.interval))},n.fx.stop=function(){clearInterval(Mb),Mb=null},n.fx.speeds={slow:600,fast:200,_default:400},n.fn.delay=function(a,b){return a=n.fx?n.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a=l.createElement("input"),b=l.createElement("select"),c=b.appendChild(l.createElement("option"));a.type="checkbox",k.checkOn=""!==a.value,k.optSelected=c.selected,b.disabled=!0,k.optDisabled=!c.disabled,a=l.createElement("input"),a.value="t",a.type="radio",k.radioValue="t"===a.value}();var Yb,Zb,$b=n.expr.attrHandle;n.fn.extend({attr:function(a,b){return J(this,n.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){n.removeAttr(this,a)})}}),n.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===U?n.prop(a,b,c):(1===f&&n.isXMLDoc(a)||(b=b.toLowerCase(),d=n.attrHooks[b]||(n.expr.match.bool.test(b)?Zb:Yb)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=n.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void n.removeAttr(a,b)) +},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(E);if(f&&1===a.nodeType)while(c=f[e++])d=n.propFix[c]||c,n.expr.match.bool.test(c)&&(a[d]=!1),a.removeAttribute(c)},attrHooks:{type:{set:function(a,b){if(!k.radioValue&&"radio"===b&&n.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),Zb={set:function(a,b,c){return b===!1?n.removeAttr(a,c):a.setAttribute(c,c),c}},n.each(n.expr.match.bool.source.match(/\w+/g),function(a,b){var c=$b[b]||n.find.attr;$b[b]=function(a,b,d){var e,f;return d||(f=$b[b],$b[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,$b[b]=f),e}});var _b=/^(?:input|select|textarea|button)$/i;n.fn.extend({prop:function(a,b){return J(this,n.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[n.propFix[a]||a]})}}),n.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!n.isXMLDoc(a),f&&(b=n.propFix[b]||b,e=n.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){return a.hasAttribute("tabindex")||_b.test(a.nodeName)||a.href?a.tabIndex:-1}}}}),k.optSelected||(n.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null}}),n.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){n.propFix[this.toLowerCase()]=this});var ac=/[\t\r\n\f]/g;n.fn.extend({addClass:function(a){var b,c,d,e,f,g,h="string"==typeof a&&a,i=0,j=this.length;if(n.isFunction(a))return this.each(function(b){n(this).addClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(E)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ac," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=n.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0===arguments.length||"string"==typeof a&&a,i=0,j=this.length;if(n.isFunction(a))return this.each(function(b){n(this).removeClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(E)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ac," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?n.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(n.isFunction(a)?function(c){n(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=n(this),f=a.match(E)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===U||"boolean"===c)&&(this.className&&L.set(this,"__className__",this.className),this.className=this.className||a===!1?"":L.get(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(ac," ").indexOf(b)>=0)return!0;return!1}});var bc=/\r/g;n.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=n.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,n(this).val()):a,null==e?e="":"number"==typeof e?e+="":n.isArray(e)&&(e=n.map(e,function(a){return null==a?"":a+""})),b=n.valHooks[this.type]||n.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=n.valHooks[e.type]||n.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(bc,""):null==c?"":c)}}}),n.extend({valHooks:{option:{get:function(a){var b=n.find.attr(a,"value");return null!=b?b:n.trim(n.text(a))}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(k.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&n.nodeName(c.parentNode,"optgroup"))){if(b=n(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=n.makeArray(b),g=e.length;while(g--)d=e[g],(d.selected=n.inArray(d.value,f)>=0)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),n.each(["radio","checkbox"],function(){n.valHooks[this]={set:function(a,b){return n.isArray(b)?a.checked=n.inArray(n(a).val(),b)>=0:void 0}},k.checkOn||(n.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})}),n.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){n.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),n.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var cc=n.now(),dc=/\?/;n.parseJSON=function(a){return JSON.parse(a+"")},n.parseXML=function(a){var b,c;if(!a||"string"!=typeof a)return null;try{c=new DOMParser,b=c.parseFromString(a,"text/xml")}catch(d){b=void 0}return(!b||b.getElementsByTagName("parsererror").length)&&n.error("Invalid XML: "+a),b};var ec,fc,gc=/#.*$/,hc=/([?&])_=[^&]*/,ic=/^(.*?):[ \t]*([^\r\n]*)$/gm,jc=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,kc=/^(?:GET|HEAD)$/,lc=/^\/\//,mc=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,nc={},oc={},pc="*/".concat("*");try{fc=location.href}catch(qc){fc=l.createElement("a"),fc.href="",fc=fc.href}ec=mc.exec(fc.toLowerCase())||[];function rc(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(E)||[];if(n.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function sc(a,b,c,d){var e={},f=a===oc;function g(h){var i;return e[h]=!0,n.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function tc(a,b){var c,d,e=n.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&n.extend(!0,a,d),a}function uc(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function vc(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}n.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:fc,type:"GET",isLocal:jc.test(ec[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":pc,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":n.parseJSON,"text xml":n.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?tc(tc(a,n.ajaxSettings),b):tc(n.ajaxSettings,a)},ajaxPrefilter:rc(nc),ajaxTransport:rc(oc),ajax:function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=n.ajaxSetup({},b),l=k.context||k,m=k.context&&(l.nodeType||l.jquery)?n(l):n.event,o=n.Deferred(),p=n.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!f){f={};while(b=ic.exec(e))f[b[1].toLowerCase()]=b[2]}b=f[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?e:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return c&&c.abort(b),x(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||fc)+"").replace(gc,"").replace(lc,ec[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=n.trim(k.dataType||"*").toLowerCase().match(E)||[""],null==k.crossDomain&&(h=mc.exec(k.url.toLowerCase()),k.crossDomain=!(!h||h[1]===ec[1]&&h[2]===ec[2]&&(h[3]||("http:"===h[1]?"80":"443"))===(ec[3]||("http:"===ec[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=n.param(k.data,k.traditional)),sc(nc,k,b,v),2===t)return v;i=k.global,i&&0===n.active++&&n.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!kc.test(k.type),d=k.url,k.hasContent||(k.data&&(d=k.url+=(dc.test(d)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=hc.test(d)?d.replace(hc,"$1_="+cc++):d+(dc.test(d)?"&":"?")+"_="+cc++)),k.ifModified&&(n.lastModified[d]&&v.setRequestHeader("If-Modified-Since",n.lastModified[d]),n.etag[d]&&v.setRequestHeader("If-None-Match",n.etag[d])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+pc+"; q=0.01":""):k.accepts["*"]);for(j in k.headers)v.setRequestHeader(j,k.headers[j]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u="abort";for(j in{success:1,error:1,complete:1})v[j](k[j]);if(c=sc(oc,k,b,v)){v.readyState=1,i&&m.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout")},k.timeout));try{t=1,c.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,"No Transport");function x(a,b,f,h){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),c=void 0,e=h||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,f&&(u=uc(k,v,f)),u=vc(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(n.lastModified[d]=w),w=v.getResponseHeader("etag"),w&&(n.etag[d]=w)),204===a||"HEAD"===k.type?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,i&&m.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),i&&(m.trigger("ajaxComplete",[v,k]),--n.active||n.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return n.get(a,b,c,"json")},getScript:function(a,b){return n.get(a,void 0,b,"script")}}),n.each(["get","post"],function(a,b){n[b]=function(a,c,d,e){return n.isFunction(c)&&(e=e||d,d=c,c=void 0),n.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),n.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){n.fn[b]=function(a){return this.on(b,a)}}),n._evalUrl=function(a){return n.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},n.fn.extend({wrapAll:function(a){var b;return n.isFunction(a)?this.each(function(b){n(this).wrapAll(a.call(this,b))}):(this[0]&&(b=n(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this)},wrapInner:function(a){return this.each(n.isFunction(a)?function(b){n(this).wrapInner(a.call(this,b))}:function(){var b=n(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=n.isFunction(a);return this.each(function(c){n(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){n.nodeName(this,"body")||n(this).replaceWith(this.childNodes)}).end()}}),n.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0},n.expr.filters.visible=function(a){return!n.expr.filters.hidden(a)};var wc=/%20/g,xc=/\[\]$/,yc=/\r?\n/g,zc=/^(?:submit|button|image|reset|file)$/i,Ac=/^(?:input|select|textarea|keygen)/i;function Bc(a,b,c,d){var e;if(n.isArray(b))n.each(b,function(b,e){c||xc.test(a)?d(a,e):Bc(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==n.type(b))d(a,b);else for(e in b)Bc(a+"["+e+"]",b[e],c,d)}n.param=function(a,b){var c,d=[],e=function(a,b){b=n.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=n.ajaxSettings&&n.ajaxSettings.traditional),n.isArray(a)||a.jquery&&!n.isPlainObject(a))n.each(a,function(){e(this.name,this.value)});else for(c in a)Bc(c,a[c],b,e);return d.join("&").replace(wc,"+")},n.fn.extend({serialize:function(){return n.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=n.prop(this,"elements");return a?n.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!n(this).is(":disabled")&&Ac.test(this.nodeName)&&!zc.test(a)&&(this.checked||!T.test(a))}).map(function(a,b){var c=n(this).val();return null==c?null:n.isArray(c)?n.map(c,function(a){return{name:b.name,value:a.replace(yc,"\r\n")}}):{name:b.name,value:c.replace(yc,"\r\n")}}).get()}}),n.ajaxSettings.xhr=function(){try{return new XMLHttpRequest}catch(a){}};var Cc=0,Dc={},Ec={0:200,1223:204},Fc=n.ajaxSettings.xhr();a.ActiveXObject&&n(a).on("unload",function(){for(var a in Dc)Dc[a]()}),k.cors=!!Fc&&"withCredentials"in Fc,k.ajax=Fc=!!Fc,n.ajaxTransport(function(a){var b;return k.cors||Fc&&!a.crossDomain?{send:function(c,d){var e,f=a.xhr(),g=++Cc;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)f.setRequestHeader(e,c[e]);b=function(a){return function(){b&&(delete Dc[g],b=f.onload=f.onerror=null,"abort"===a?f.abort():"error"===a?d(f.status,f.statusText):d(Ec[f.status]||f.status,f.statusText,"string"==typeof f.responseText?{text:f.responseText}:void 0,f.getAllResponseHeaders()))}},f.onload=b(),f.onerror=b("error"),b=Dc[g]=b("abort");try{f.send(a.hasContent&&a.data||null)}catch(h){if(b)throw h}},abort:function(){b&&b()}}:void 0}),n.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return n.globalEval(a),a}}}),n.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),n.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(d,e){b=n("<script>").prop({async:!0,charset:a.scriptCharset,src:a.url}).on("load error",c=function(a){b.remove(),c=null,a&&e("error"===a.type?404:200,a.type)}),l.head.appendChild(b[0])},abort:function(){c&&c()}}}});var Gc=[],Hc=/(=)\?(?=&|$)|\?\?/;n.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=Gc.pop()||n.expando+"_"+cc++;return this[a]=!0,a}}),n.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(Hc.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&Hc.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=n.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(Hc,"$1"+e):b.jsonp!==!1&&(b.url+=(dc.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||n.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,Gc.push(e)),g&&n.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),n.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||l;var d=v.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=n.buildFragment([a],b,e),e&&e.length&&n(e).remove(),n.merge([],d.childNodes))};var Ic=n.fn.load;n.fn.load=function(a,b,c){if("string"!=typeof a&&Ic)return Ic.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=n.trim(a.slice(h)),a=a.slice(0,h)),n.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&n.ajax({url:a,type:e,dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?n("<div>").append(n.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,f||[a.responseText,b,a])}),this},n.expr.filters.animated=function(a){return n.grep(n.timers,function(b){return a===b.elem}).length};var Jc=a.document.documentElement;function Kc(a){return n.isWindow(a)?a:9===a.nodeType&&a.defaultView}n.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=n.css(a,"position"),l=n(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=n.css(a,"top"),i=n.css(a,"left"),j=("absolute"===k||"fixed"===k)&&(f+i).indexOf("auto")>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),n.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},n.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){n.offset.setOffset(this,a,b)});var b,c,d=this[0],e={top:0,left:0},f=d&&d.ownerDocument;if(f)return b=f.documentElement,n.contains(b,d)?(typeof d.getBoundingClientRect!==U&&(e=d.getBoundingClientRect()),c=Kc(f),{top:e.top+c.pageYOffset-b.clientTop,left:e.left+c.pageXOffset-b.clientLeft}):e},position:function(){if(this[0]){var a,b,c=this[0],d={top:0,left:0};return"fixed"===n.css(c,"position")?b=c.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),n.nodeName(a[0],"html")||(d=a.offset()),d.top+=n.css(a[0],"borderTopWidth",!0),d.left+=n.css(a[0],"borderLeftWidth",!0)),{top:b.top-d.top-n.css(c,"marginTop",!0),left:b.left-d.left-n.css(c,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||Jc;while(a&&!n.nodeName(a,"html")&&"static"===n.css(a,"position"))a=a.offsetParent;return a||Jc})}}),n.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(b,c){var d="pageYOffset"===c;n.fn[b]=function(e){return J(this,function(b,e,f){var g=Kc(b);return void 0===f?g?g[c]:b[e]:void(g?g.scrollTo(d?a.pageXOffset:f,d?f:a.pageYOffset):b[e]=f)},b,e,arguments.length,null)}}),n.each(["top","left"],function(a,b){n.cssHooks[b]=yb(k.pixelPosition,function(a,c){return c?(c=xb(a,b),vb.test(c)?n(a).position()[b]+"px":c):void 0})}),n.each({Height:"height",Width:"width"},function(a,b){n.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){n.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return J(this,function(b,c,d){var e;return n.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?n.css(b,c,g):n.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),n.fn.size=function(){return this.length},n.fn.andSelf=n.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return n});var Lc=a.jQuery,Mc=a.$;return n.noConflict=function(b){return a.$===n&&(a.$=Mc),b&&a.jQuery===n&&(a.jQuery=Lc),n},typeof b===U&&(a.jQuery=a.$=n),n}); diff --git a/doc/doxygen/styling/jquery.powertip.min.js.in b/doc/doxygen/styling/jquery.powertip.min.js.in new file mode 100644 index 00000000000..9f20856982a --- /dev/null +++ b/doc/doxygen/styling/jquery.powertip.min.js.in @@ -0,0 +1,8 @@ +/*! + PowerTip v1.3.0 (2017-01-15) + https://stevenbenner.github.io/jquery-powertip/ + Copyright (c) 2017 Steven Benner (http://stevenbenner.com/). + Released under MIT license. + https://raw.github.com/stevenbenner/jquery-powertip/master/LICENSE.txt +*/ +!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],b):"object"==typeof module&&module.exports?module.exports=b(require("jquery")):b(a.jQuery)}(this,function(a){function b(){var b=this;b.top="auto",b.left="auto",b.right="auto",b.bottom="auto",b.set=function(c,d){a.isNumeric(d)&&(b[c]=Math.round(d))}}function c(a,b,c){function d(d,e){g(),a.data(u)?h():d?(e&&a.data(v,!0),i(),c.showTip(a)):(E.tipOpenImminent=!0,k=setTimeout(function(){k=null,f()},b.intentPollInterval))}function e(d){l&&(l=E.closeDelayTimeout=clearTimeout(l),E.delayInProgress=!1),g(),E.tipOpenImminent=!1,a.data(u)&&(a.data(v,!1),d?c.hideTip(a):(E.delayInProgress=!0,E.closeDelayTimeout=setTimeout(function(){E.closeDelayTimeout=null,c.hideTip(a),E.delayInProgress=!1,l=null},b.closeDelay),l=E.closeDelayTimeout))}function f(){var e=Math.abs(E.previousX-E.currentX),f=Math.abs(E.previousY-E.currentY),g=e+f;g<b.intentSensitivity?(h(),i(),c.showTip(a)):(E.previousX=E.currentX,E.previousY=E.currentY,d())}function g(a){k=clearTimeout(k),(E.closeDelayTimeout&&l===E.closeDelayTimeout||a)&&h()}function h(){E.closeDelayTimeout=clearTimeout(E.closeDelayTimeout),E.delayInProgress=!1}function i(){E.delayInProgress&&E.activeHover&&!E.activeHover.is(a)&&E.activeHover.data(t).hide(!0)}function j(){c.resetPosition(a)}var k=null,l=null;this.show=d,this.hide=e,this.cancel=g,this.resetPosition=j}function d(){function a(a,e,g,h,i){var j,k=e.split("-")[0],l=new b;switch(j=f(a)?d(a,k):c(a,k),e){case"n":l.set("left",j.left-g/2),l.set("bottom",E.windowHeight-j.top+i);break;case"e":l.set("left",j.left+i),l.set("top",j.top-h/2);break;case"s":l.set("left",j.left-g/2),l.set("top",j.top+i);break;case"w":l.set("top",j.top-h/2),l.set("right",E.windowWidth-j.left+i);break;case"nw":l.set("bottom",E.windowHeight-j.top+i),l.set("right",E.windowWidth-j.left-20);break;case"nw-alt":l.set("left",j.left),l.set("bottom",E.windowHeight-j.top+i);break;case"ne":l.set("left",j.left-20),l.set("bottom",E.windowHeight-j.top+i);break;case"ne-alt":l.set("bottom",E.windowHeight-j.top+i),l.set("right",E.windowWidth-j.left);break;case"sw":l.set("top",j.top+i),l.set("right",E.windowWidth-j.left-20);break;case"sw-alt":l.set("left",j.left),l.set("top",j.top+i);break;case"se":l.set("left",j.left-20),l.set("top",j.top+i);break;case"se-alt":l.set("top",j.top+i),l.set("right",E.windowWidth-j.left)}return l}function c(a,b){var c,d,e=a.offset(),f=a.outerWidth(),g=a.outerHeight();switch(b){case"n":c=e.left+f/2,d=e.top;break;case"e":c=e.left+f,d=e.top+g/2;break;case"s":c=e.left+f/2,d=e.top+g;break;case"w":c=e.left,d=e.top+g/2;break;case"nw":c=e.left,d=e.top;break;case"ne":c=e.left+f,d=e.top;break;case"sw":c=e.left,d=e.top+g;break;case"se":c=e.left+f,d=e.top+g}return{top:d,left:c}}function d(a,b){function c(){o.push(j.matrixTransform(l))}var d,e,f,g,h=a.closest("svg")[0],i=a[0],j=h.createSVGPoint(),k=i.getBBox(),l=i.getScreenCTM(),m=k.width/2,n=k.height/2,o=[],p=["nw","n","ne","e","se","s","sw","w"];if(j.x=k.x,j.y=k.y,c(),j.x+=m,c(),j.x+=m,c(),j.y+=n,c(),j.y+=n,c(),j.x-=m,c(),j.x-=m,c(),j.y-=n,c(),o[0].y!==o[1].y||o[0].x!==o[7].x)for(e=Math.atan2(l.b,l.a)*D,f=Math.ceil((e%360-22.5)/45),f<1&&(f+=8);f--;)p.push(p.shift());for(g=0;g<o.length;g++)if(p[g]===b){d=o[g];break}return{top:d.y+E.scrollTop,left:d.x+E.scrollLeft}}this.compute=a}function e(c){function e(a){a.data(u,!0),y.queue(function(b){f(a),b()})}function f(b){var d;if(b.data(u)){if(E.isTipOpen)return E.isClosing||g(E.activeHover),void y.delay(100).queue(function(a){f(b),a()});b.trigger("powerTipPreRender"),d=n(b),d&&(y.empty().append(d),b.trigger("powerTipRender"),E.activeHover=b,E.isTipOpen=!0,y.data(x,c.mouseOnToPopup),c.followMouse?h():(i(b),E.isFixedTipOpen=!0),y.addClass(c.popupClass),b.data(v)||q.on("click"+C,function(d){var e=d.target;e!==b[0]&&(c.mouseOnToPopup?e===y[0]||a.contains(y[0],e)||a.powerTip.hide():a.powerTip.hide())}),c.mouseOnToPopup&&!c.manual&&(y.on("mouseenter"+C,function(){E.activeHover&&E.activeHover.data(t).cancel()}),y.on("mouseleave"+C,function(){E.activeHover&&E.activeHover.data(t).hide()})),y.fadeIn(c.fadeInTime,function(){E.desyncTimeout||(E.desyncTimeout=setInterval(k,500)),b.trigger("powerTipOpen")}))}}function g(a){E.isClosing=!0,E.isTipOpen=!1,E.desyncTimeout=clearInterval(E.desyncTimeout),a.data(u,!1),a.data(v,!1),q.off("click"+C),y.off(C),y.fadeOut(c.fadeOutTime,function(){var d=new b;E.activeHover=null,E.isClosing=!1,E.isFixedTipOpen=!1,y.removeClass(),d.set("top",E.currentY+c.offset),d.set("left",E.currentX+c.offset),y.css(d),a.trigger("powerTipClose")})}function h(){if(!E.isFixedTipOpen&&(E.isTipOpen||E.tipOpenImminent&&y.data(w))){var a,d,e=y.outerWidth(),f=y.outerHeight(),g=new b;g.set("top",E.currentY+c.offset),g.set("left",E.currentX+c.offset),a=o(g,e,f),a!==F.none&&(d=p(a),1===d?a===F.right?g.set("left",E.windowWidth-e):a===F.bottom&&g.set("top",E.scrollTop+E.windowHeight-f):(g.set("left",E.currentX-e-c.offset),g.set("top",E.currentY-f-c.offset))),y.css(g)}}function i(b){var d,e;c.smartPlacement?(d=a.fn.powerTip.smartPlacementLists[c.placement],a.each(d,function(a,c){var d=o(j(b,c),y.outerWidth(),y.outerHeight());if(e=c,d===F.none)return!1})):(j(b,c.placement),e=c.placement),y.removeClass("w nw sw e ne se n s w se-alt sw-alt ne-alt nw-alt"),y.addClass(e)}function j(a,d){var e,f,g=0,h=new b;h.set("top",0),h.set("left",0),y.css(h);do e=y.outerWidth(),f=y.outerHeight(),h=l.compute(a,d,e,f,c.offset),y.css(h);while(++g<=5&&(e!==y.outerWidth()||f!==y.outerHeight()));return h}function k(){var b=!1;E.isTipOpen&&!E.isClosing&&!E.delayInProgress&&(a.inArray("mouseleave",c.closeEvents)>-1||a.inArray("mouseout",c.closeEvents)>-1||a.inArray("blur",c.closeEvents)>-1||a.inArray("focusout",c.closeEvents)>-1)&&(E.activeHover.data(u)===!1||E.activeHover.is(":disabled")?b=!0:m(E.activeHover)||E.activeHover.is(":focus")||E.activeHover.data(v)||(y.data(x)?m(y)||(b=!0):b=!0),b&&g(E.activeHover))}var l=new d,y=a("#"+c.popupId);0===y.length&&(y=a("<div/>",{id:c.popupId}),0===s.length&&(s=a("body")),s.append(y),E.tooltips=E.tooltips?E.tooltips.add(y):y),c.followMouse&&(y.data(w)||(q.on("mousemove"+C,h),r.on("scroll"+C,h),y.data(w,!0))),this.showTip=e,this.hideTip=g,this.resetPosition=i}function f(a){return Boolean(window.SVGElement&&a[0]instanceof SVGElement)}function g(a){return Boolean(a&&"number"==typeof a.pageX)}function h(){E.mouseTrackingActive||(E.mouseTrackingActive=!0,i(),a(i),q.on("mousemove"+C,l),r.on("resize"+C,j),r.on("scroll"+C,k))}function i(){E.scrollLeft=r.scrollLeft(),E.scrollTop=r.scrollTop(),E.windowWidth=r.width(),E.windowHeight=r.height()}function j(){E.windowWidth=r.width(),E.windowHeight=r.height()}function k(){var a=r.scrollLeft(),b=r.scrollTop();a!==E.scrollLeft&&(E.currentX+=a-E.scrollLeft,E.scrollLeft=a),b!==E.scrollTop&&(E.currentY+=b-E.scrollTop,E.scrollTop=b)}function l(a){E.currentX=a.pageX,E.currentY=a.pageY}function m(a){var b=a.offset(),c=a[0].getBoundingClientRect(),d=c.right-c.left,e=c.bottom-c.top;return E.currentX>=b.left&&E.currentX<=b.left+d&&E.currentY>=b.top&&E.currentY<=b.top+e}function n(b){var c,d,e=b.data(z),f=b.data(A),g=b.data(B);return e?(a.isFunction(e)&&(e=e.call(b[0])),d=e):f?(a.isFunction(f)&&(f=f.call(b[0])),f.length>0&&(d=f.clone(!0,!0))):g&&(c=a("#"+g),c.length>0&&(d=c.html())),d}function o(a,b,c){var d=E.scrollTop,e=E.scrollLeft,f=d+E.windowHeight,g=e+E.windowWidth,h=F.none;return(a.top<d||Math.abs(a.bottom-E.windowHeight)-c<d)&&(h|=F.top),(a.top+c>f||Math.abs(a.bottom-E.windowHeight)>f)&&(h|=F.bottom),(a.left<e||a.right+b>g)&&(h|=F.left),(a.left+b>g||a.right<e)&&(h|=F.right),h}function p(a){for(var b=0;a;)a&=a-1,b++;return b}var q=a(document),r=a(window),s=a("body"),t="displayController",u="hasActiveHover",v="forcedOpen",w="hasMouseMove",x="mouseOnToPopup",y="originalTitle",z="powertip",A="powertipjq",B="powertiptarget",C=".powertip",D=180/Math.PI,E={elements:null,tooltips:null,isTipOpen:!1,isFixedTipOpen:!1,isClosing:!1,tipOpenImminent:!1,activeHover:null,currentX:0,currentY:0,previousX:0,previousY:0,desyncTimeout:null,closeDelayTimeout:null,mouseTrackingActive:!1,delayInProgress:!1,windowWidth:0,windowHeight:0,scrollTop:0,scrollLeft:0},F={none:0,top:1,bottom:2,left:4,right:8};return a.fn.powerTip=function(b,d){var f,i,j=this;return j.length?"string"===a.type(b)&&a.powerTip[b]?a.powerTip[b].call(j,j,d):(f=a.extend({},a.fn.powerTip.defaults,b),i=new e(f),h(),j.each(function(){var b,d=a(this),e=d.data(z),g=d.data(A),h=d.data(B);d.data(t)&&a.powerTip.destroy(d),b=d.attr("title"),e||h||g||!b||(d.data(z,b),d.data(y,b),d.removeAttr("title")),d.data(t,new c(d,f,i))}),f.manual||(a.each(f.openEvents,function(b,c){a.inArray(c,f.closeEvents)>-1?j.on(c+C,function(b){a.powerTip.toggle(this,b)}):j.on(c+C,function(b){a.powerTip.show(this,b)})}),a.each(f.closeEvents,function(b,c){a.inArray(c,f.openEvents)<0&&j.on(c+C,function(b){a.powerTip.hide(this,!g(b))})}),j.on("keydown"+C,function(b){27===b.keyCode&&a.powerTip.hide(this,!0)})),E.elements=E.elements?E.elements.add(j):j,j):j},a.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:!1,popupId:"powerTip",popupClass:null,intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:!1,offset:10,mouseOnToPopup:!1,manual:!1,openEvents:["mouseenter","focus"],closeEvents:["mouseleave","blur"]},a.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se","n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]},a.powerTip={show:function(b,c){return g(c)?(l(c),E.previousX=c.pageX,E.previousY=c.pageY,a(b).data(t).show()):a(b).first().data(t).show(!0,!0),b},reposition:function(b){return a(b).first().data(t).resetPosition(),b},hide:function(b,c){var d;return c=!b||c,b?d=a(b).first().data(t):E.activeHover&&(d=E.activeHover.data(t)),d&&d.hide(c),b},toggle:function(b,c){return E.activeHover&&E.activeHover.is(b)?a.powerTip.hide(b,!g(c)):a.powerTip.show(b,c),b},destroy:function(b){var c=b?a(b):E.elements;return E.elements&&0!==E.elements.length?(c.off(C).each(function(){var b=a(this),c=[y,t,u,v];b.data(y)&&(b.attr("title",b.data(y)),c.push(z)),b.removeData(c)}),E.elements=E.elements.not(c),0===E.elements.length&&(r.off(C),q.off(C),E.mouseTrackingActive=!1,E.tooltips.remove(),E.tooltips=null),b):b}},a.powerTip.showTip=a.powerTip.show,a.powerTip.closeTip=a.powerTip.hide,a.powerTip}); \ No newline at end of file diff --git a/doc/mainpage.md b/doc/mainpage.md new file mode 100644 index 00000000000..7a7933afc32 --- /dev/null +++ b/doc/mainpage.md @@ -0,0 +1,75 @@ +# Software Documentation + +## General + +### Introduction + +Welcome to the LOFAR Software Documentation, the documentation generated from the +[LOFAR SVN tree](https://svn.astron.nl/LOFAR/) ([Browser View](https://svn.astron.nl/viewvc/LOFAR/))) using +[Doxygen](http://www.stack.nl/~dimitri/doxygen/). Its target audience are *Developers*, *Software Support Personnel* +and *System Administrators*. For *End-User* Documentation and information for *Operators* please refer to the +[LOFAR-wiki](https://www.astron.nl/lofarwiki). + +### Quick Links + +- [LOFAR Release Notes](@ref release_notes) + + +### Doxygen + +Refer to the [Doxygen Quick Guide](@ref doxygen_quick_guide) for information on how to write documentation for Doxygen. +When documenting software components please use and adhere to this +[Software Documentation Template](@ref sw_documentation_template). + + +## Architecture + +### Top-level + +Link to some online top-level diagram of LOFAR generated by the drawing tool chosen from the +[Drawing Tool Comparison](https://docs.google.com/spreadsheets/d/1JC8zHE7Vx3RyuQWJFAhUd_hUtxQjatORp8V8bYZ3soA/edit?ts=599bc23c#gid=326610509) +for example [this DrawIO drawing](https://www.draw.io/?state={%22ids%22:[%220B5fohp6auM-uWlVYajlZcTc2SDg%22],%22action%22:%22open%22,%22userId%22:%22102373349346206970364%22}#G0B5fohp6auM-uWlVYajlZcTc2SDg). + + +### Sub-systems + +The LOFAR Software System can be decomposed into several sub-systems which, in turn can be decomposed even further into +smaller logical units, etcetera. Refer to the <a href="modules.html">Modules</a> page for the decomposition of these +software components. + + +## Support & Maintenance + +Please refer to the +[Software Support Start Page](https://www.astron.nl/lofarwiki/doku.php?id=engineering:software_support_start) for the +Support schedule, a F.A.Q. and further information on support and maintenance. + +### Reporting bugs + +LOFAR developers can file their bug reports in the [LOFAR Issue Tracker](https://support.astron.nl/lofar_issuetracker). +Alternatively one can submit a bug report by sending and email to <mailto:softwaresupport@astron.nl>. + +Todo's and bugs identified in the source code are listed on their individual pages which are available on the +<a href="pages.html">Related Pages</a> page. + + +## Development + +### Standards & Procedures + +- [Software Documentation Template](@ref sw_documentation_template) (*proposal*) +- [Definition of Done](https://www.astron.nl/lofarwiki/doku.php?id=engineering:software:scrum&s[]=dod) +- Review Checklist +- [Coding Conventions](https://www.astron.nl/lofarwiki/doku.php?id=engineering:software:codingconventions) +- Testing Conventions +- [Software Development Policy](https://www.astron.nl/lofarwiki/doku.php?id=engineering:software:developmentmanagementpolicy) +- [LOFAR Release Procedure](https://www.astron.nl/lofarwiki/doku.php?id=engineering:software:releaseprocedure) + + +## Usage + +### Copyright & Licenses + +The copyright of this documentation and all LOFAR source code is owned by [ASTRON](http://www.astron.nl/) unless granted +otherwise by the applicable license(s) - refer to the [COPYING](https://svn.astron.nl/LOFAR/trunk/COPYING) file for more +information. diff --git a/doc/package.dox b/doc/package.dox new file mode 100644 index 00000000000..907e5476b04 --- /dev/null +++ b/doc/package.dox @@ -0,0 +1,7 @@ +/** + +\defgroup Packages Packages + +Placeholder for documentation about the CMake packages present in LOFAR + +*/ diff --git a/doc/release_notes.md b/doc/release_notes.md new file mode 100644 index 00000000000..1bc970bf3c7 --- /dev/null +++ b/doc/release_notes.md @@ -0,0 +1,90 @@ +# Release Notes {#release_notes} + +## LOFAR 2.22.6 (Sep 21th, 2017) + +### Ingest + +- Fixed a bug in the ingest not sending mails + +## LOFAR 2.22.5 (Sep 20th, 2017) + +### Imaging pipeline + +- Fixed a bug in the imaging pipeline not recognizing SPARSE + +## LOFAR 2.22.4 (Sep 19th, 2017) + +### XML Generator + +- Fixed a bug in the xmlgenerator when trying to upload on approved with -a. + +## LOFAR 2.22.3 (Sep 18th, 2017) + +### Resource Assigner + +- Resource Assigner was not handling MSSS Imaging Pipeline correctly due to a typo, causing it to get stuck on PRESCHEDULED. + +## LOFAR 2.22.2 (Sep 18th, 2017) + +### Ingest + +- Fixed bug in getting the PI e-mail. + +## LOFAR 2.22.1 (Sep 15th, 2017) + +### Ingest + +- Ingest sends email to both PI and contact author upon completion +- Files which are not on disk (anymore) are marked as failed in MoM +- Ingest checks whether the disk is mounted when it cannot find a file. + + +## LOFAR 2.22 (Sep 11th, 2017) + +### Instructions + +- An attempt has been made to make swlevel more robust against failing RSP boards. If a RSP-image cannot be loaded onto +an RSP board, swlevel will execute a 48V reset and retry the load. It will do so twice. This may lead to longer startup +times for the MAC software on a station, but at least gives more guarantees to end up with a properly functioning +station. + +### General + +- The Irish station IE613 has been added as a LOFAR station to the software. + +### MoM (deployed 10 Aug 2017) + +- [#11028](https://support.astron.nl/lofar_issuetracker/issues/11028): Implement new resource Type Triggers in MoM +- [#11130](https://support.astron.nl/lofar_issuetracker/issues/11130): Make priority and allowtriggers visible in MoM GUI + +### SAS + +- [#11197](https://support.astron.nl/lofar_issuetracker/issues/11197): Changes to XML Generator and pipelineControl to streamline SLURM parameter propagation. +- Several bugfixes to Resource Assigner and Webscheduler. + +### MAC + +- [#11022](https://support.astron.nl/lofar_issuetracker/issues/11022): Remove usleep and /sbin/pidof from swlevel +- [#11053](https://support.astron.nl/lofar_issuetracker/issues/11053): Fix memory leak in MAC GCF framework +- [#11074](https://support.astron.nl/lofar_issuetracker/issues/11074): Improve robustness of swlevel to hanging RSP boards part 2 +- [#11110](https://support.astron.nl/lofar_issuetracker/issues/11110): Fixed a few Coordinates in StationInfo.dat and remove non-existing stations from the list +- [#11112](https://support.astron.nl/lofar_issuetracker/issues/11112): SoftwareMonitor: Give more starttime to TBB and RSP Driver before changing status + +### Cobalt + +- [#5441](https://support.astron.nl/lofar_issuetracker/issues/5441): Cobalt can dump raw RSP data to disk (using parset override). +- [#11017](https://support.astron.nl/lofar_issuetracker/issues/11017): swlevel should not show old observations: lingering pid files are now ignored. +- [#11059](https://support.astron.nl/lofar_issuetracker/issues/11059): Improve COBALT loss logging +- [#11115](https://support.astron.nl/lofar_issuetracker/issues/11115): Add LBA_SPARSE_EVEN/ODD to COBALT delay calibration table. + +### Pipelines + +- [#10805](https://support.astron.nl/lofar_issuetracker/issues/10805): Apply H5Parm files in ApplyCal +- [#10974](https://support.astron.nl/lofar_issuetracker/issues/10974): Let DPPP recognize the type of numbered steps +- [#11114](https://support.astron.nl/lofar_issuetracker/issues/11114): Gaincal discard stations in the calibration when DATA is not flagged but exactly 0. +- [#10741](https://support.astron.nl/lofar_issuetracker/issues/10741): DPPPE: Read in polynomial spectral shape models and use them for prediction in NDPPP. + +### Other + +- [#11107](https://support.astron.nl/lofar_issuetracker/issues/11107): Adapt Clean_disk to gzips logfiles and keep them on the systems for 180 days +- [#10977](https://support.astron.nl/lofar_issuetracker/issues/10977): Create timeouts around shell calls of rubidium logger diff --git a/doc/sw_documentation_template.md b/doc/sw_documentation_template.md new file mode 100644 index 00000000000..945ca7f6fe9 --- /dev/null +++ b/doc/sw_documentation_template.md @@ -0,0 +1,96 @@ +# Software Documentation Template {#sw_documentation_template} + +*This page provides the template for documenting software modules, where modules can be for example a library, service, +or an application.* + +*In order to use this template, copy its source (it is written in Markdown language) and edit it accordingy. Feel free to +remove any explanatory text written in Italic like this text, but in case some subject is not applicable to your module: +consider not removing its header, but add a rationale about why it is not applicable instead.* + +# Software Module X + +## GENERAL + +### Description +- *What does it do?* +- *Why is it needed?* + +### Author/Owner + +### Overview +- *Add a diagram* +- *Add a link to the overview diagram* +- *Add a link in the overview diagram to link back to this documentation*. + +- - - + +## DEVELOPMENT + +### Analyses +*Add non-technical information and functional considerations here, like user requirements and links to minutes of +meetings with stakeholders.* + +### Design +*Add technical considerations and design choices here* + +### Source Code +- *Add a link to svn (trunk).* +- *Add a link to (generated?) source code documentation.* + +### Testing +- *How do you run unit tests?* +- *How do you run integration tests?* +- *Add a link to Jenkins jobs (if available)* + +### Build & Deploy +- *Add a link to general instructions or describe specifics here.* +- *Add a link to Jenkins jobs (if available)* + +- - - + +## OPERATIONS + +### Configuration +- *Where is the configuration file?* +- *What are the configuration options?* + +### Log Files +- *Where are the log files?* + +### Runtime +- *Where does it run? (which user@machine)* +- *How do I run it? (user documentation? examples? commandline parameters?)* +- *Other considerations? (what happens elsewhere when I start or stop it?)* + +### Interfaces (API) +- *Describe interfaces to other applications (REST API? http requests? Messagebus?)* +- *Other communication (user? import/export?)* + +### Files/Databases +- *Which databases are used?* +- *Which files are used?* + +### Dependencies +- *To/from other applications?* +- *Files?* +- *Network locations?* +- *Other?* + +### Security +- *Special privileges needed?* +- *User login?* +- *Certificates needed?* +- *Other considerations?* + +- - - + +## ADDITIONAL INFORMATION + +### User Documentation + +*e.g. Please refer to URL X for the User Documentation* + +### Operations Documentation + +*e.g. Please refer to URL X for Operations Documentation* + diff --git a/package.dox b/package.dox deleted file mode 100644 index 7587123e3b7..00000000000 --- a/package.dox +++ /dev/null @@ -1,2 +0,0 @@ -// \defgroup LOFAR LOFAR -// The root of all LOFAR software. -- GitLab