From 52702a32e900143571d4acdcebf5196bcd585e80 Mon Sep 17 00:00:00 2001 From: Le Tan Date: Sat, 28 Nov 2020 22:42:24 +0800 Subject: [PATCH] hard days for VNoteX project Never say "refactor" again!!! --- .gitignore | 6 + .gitmodules | 3 + coc_update.cmd | 33 + libs/libs.pro | 5 + libs/vtextedit | 1 + libs/vtitlebar/src/vtitlebar.cpp | 22 + libs/vtitlebar/src/vtitlebar.h | 19 + libs/vtitlebar/src/vtoolbar.cpp | 118 + libs/vtitlebar/src/vtoolbar.h | 54 + libs/vtitlebar/vtitlebar.pro | 16 + libs/vtitlebar/vtitlebar_export.pri | 17 + src/core/buffer/buffer.cpp | 552 + src/core/buffer/buffer.h | 241 + src/core/buffer/buffer.pri | 22 + src/core/buffer/bufferprovider.cpp | 24 + src/core/buffer/bufferprovider.h | 82 + src/core/buffer/filebufferprovider.cpp | 165 + src/core/buffer/filebufferprovider.h | 73 + src/core/buffer/filetypehelper.cpp | 54 + src/core/buffer/filetypehelper.h | 33 + src/core/buffer/ibufferfactory.h | 24 + src/core/buffer/markdownbuffer.cpp | 94 + src/core/buffer/markdownbuffer.h | 47 + src/core/buffer/markdownbufferfactory.cpp | 11 + src/core/buffer/markdownbufferfactory.h | 17 + src/core/buffer/nodebufferprovider.cpp | 133 + src/core/buffer/nodebufferprovider.h | 72 + src/core/buffer/textbuffer.cpp | 17 + src/core/buffer/textbuffer.h | 20 + src/core/buffer/textbufferfactory.cpp | 11 + src/core/buffer/textbufferfactory.h | 17 + src/core/buffermgr.cpp | 178 + src/core/buffermgr.h | 55 + src/core/clipboarddata.cpp | 187 + src/core/clipboarddata.h | 85 + src/core/configmgr.cpp | 376 + src/core/configmgr.h | 141 + src/core/core.pri | 57 + src/core/coreconfig.cpp | 124 + src/core/coreconfig.h | 73 + src/core/editorconfig.cpp | 184 + src/core/editorconfig.h | 118 + src/core/events.h | 26 + src/core/exception.h | 89 + src/core/filelocator.h | 48 + src/core/fileopenparameters.h | 35 + src/core/global.h | 78 + src/core/htmltemplatehelper.cpp | 161 + src/core/htmltemplatehelper.h | 52 + src/core/iconfig.h | 155 + src/core/logger.cpp | 116 + src/core/logger.h | 27 + src/core/mainconfig.cpp | 113 + src/core/mainconfig.h | 63 + src/core/markdowneditorconfig.cpp | 197 + src/core/markdowneditorconfig.h | 103 + src/core/namebasedserver.h | 50 + src/core/notebook/bundlenotebook.cpp | 60 + src/core/notebook/bundlenotebook.h | 35 + src/core/notebook/bundlenotebookfactory.cpp | 104 + src/core/notebook/bundlenotebookfactory.h | 38 + src/core/notebook/filenode.cpp | 130 + src/core/notebook/filenode.h | 60 + src/core/notebook/foldernode.cpp | 65 + src/core/notebook/foldernode.h | 40 + src/core/notebook/inotebookfactory.h | 46 + src/core/notebook/node.cpp | 335 + src/core/notebook/node.h | 196 + src/core/notebook/notebook.cpp | 380 + src/core/notebook/notebook.h | 184 + src/core/notebook/notebook.pri | 18 + src/core/notebook/notebookparameters.cpp | 64 + src/core/notebook/notebookparameters.h | 70 + src/core/notebookbackend/inotebookbackend.cpp | 23 + src/core/notebookbackend/inotebookbackend.h | 111 + .../notebookbackend/inotebookbackendfactory.h | 31 + .../notebookbackend/localnotebookbackend.cpp | 170 + .../notebookbackend/localnotebookbackend.h | 84 + .../localnotebookbackendfactory.cpp | 34 + .../localnotebookbackendfactory.h | 24 + src/core/notebookbackend/notebookbackend.pri | 10 + .../bundlenotebookconfigmgr.cpp | 96 + .../bundlenotebookconfigmgr.h | 54 + .../notebookconfigmgr/inotebookconfigmgr.cpp | 37 + .../notebookconfigmgr/inotebookconfigmgr.h | 96 + .../inotebookconfigmgrfactory.h | 33 + .../nodecontentmediautils.cpp | 177 + .../notebookconfigmgr/nodecontentmediautils.h | 52 + src/core/notebookconfigmgr/notebookconfig.cpp | 111 + src/core/notebookconfigmgr/notebookconfig.h | 68 + .../notebookconfigmgr/notebookconfigmgr.pri | 16 + .../notebookconfigmgr/vxnotebookconfigmgr.cpp | 886 ++ .../notebookconfigmgr/vxnotebookconfigmgr.h | 205 + .../vxnotebookconfigmgrfactory.cpp | 35 + .../vxnotebookconfigmgrfactory.h | 25 + src/core/notebookmgr.cpp | 376 + src/core/notebookmgr.h | 118 + src/core/sessionconfig.cpp | 253 + src/core/sessionconfig.h | 111 + src/core/singleinstanceguard.cpp | 184 + src/core/singleinstanceguard.h | 69 + src/core/texteditorconfig.cpp | 246 + src/core/texteditorconfig.h | 100 + src/core/theme.cpp | 397 + src/core/theme.h | 112 + src/core/thememgr.cpp | 167 + src/core/thememgr.h | 76 + .../dummyversioncontroller.cpp | 28 + .../dummyversioncontroller.h | 30 + .../dummyversioncontrollerfactory.cpp | 33 + .../dummyversioncontrollerfactory.h | 24 + .../versioncontroller/iversioncontroller.h | 30 + .../iversioncontrollerfactory.h | 31 + .../versioncontroller/versioncontroller.pri | 11 + .../versioncontrollerserver.cpp | 38 + .../versioncontrollerserver.h | 29 + src/core/viewerresource.h | 99 + src/core/vnotex.cpp | 122 + src/core/vnotex.h | 127 + src/core/widgetconfig.cpp | 52 + src/core/widgetconfig.h | 34 + src/data/core/core.qrc | 74 + src/data/core/icons/add.svg | 1 + src/data/core/icons/attachment_editor.svg | 1 + .../core/icons/attachment_full_editor.svg | 6 + src/data/core/icons/clear.svg | 1 + src/data/core/icons/close.svg | 1 + src/data/core/icons/close_notebook.svg | 34 + .../core/icons/decrease_outline_level.svg | 9 + src/data/core/icons/discard_editor.svg | 1 + src/data/core/icons/edit_editor.svg | 1 + src/data/core/icons/expand.svg | 7 + src/data/core/icons/file_node.svg | 10 + src/data/core/icons/find_replace_editor.svg | 10 + src/data/core/icons/folder_node.svg | 10 + src/data/core/icons/fullscreen.svg | 12 + src/data/core/icons/help.svg | 14 + src/data/core/icons/history_explorer.svg | 9 + src/data/core/icons/horizontal_split.svg | 15 + src/data/core/icons/import_notebook.svg | 1 + .../core/icons/import_notebook_of_vnote2.svg | 44 + .../core/icons/increase_outline_level.svg | 9 + src/data/core/icons/manage_notebooks.svg | 1 + src/data/core/icons/maximize.svg | 1 + src/data/core/icons/maximize_restore.svg | 1 + src/data/core/icons/menu.svg | 9 + src/data/core/icons/minimize.svg | 1 + .../core/icons/native_notebook_default.svg | 14 + src/data/core/icons/new_file.svg | 1 + src/data/core/icons/new_folder.svg | 1 + src/data/core/icons/new_note.svg | 1 + src/data/core/icons/new_notebook.svg | 1 + .../core/icons/new_notebook_from_folder.svg | 1 + src/data/core/icons/notebook_default.svg | 1 + src/data/core/icons/notebook_explorer.svg | 8 + src/data/core/icons/open_folder.svg | 10 + src/data/core/icons/outline_editor.svg | 1 + src/data/core/icons/properties.svg | 10 + src/data/core/icons/read_editor.svg | 1 + src/data/core/icons/recycle_bin.svg | 10 + src/data/core/icons/remove_notebook.svg | 10 + src/data/core/icons/save_editor.svg | 1 + src/data/core/icons/saved.svg | 1 + src/data/core/icons/settings.svg | 18 + src/data/core/icons/split_menu.svg | 9 + src/data/core/icons/split_window_list.svg | 4 + src/data/core/icons/stay_on_top.svg | 11 + src/data/core/icons/tag_explorer.svg | 12 + src/data/core/icons/type_bold_editor.svg | 1 + .../icons/type_checked_todo_list_editor.svg | 1 + .../core/icons/type_code_block_editor.svg | 1 + src/data/core/icons/type_code_editor.svg | 1 + src/data/core/icons/type_heading_editor.svg | 1 + src/data/core/icons/type_image_editor.svg | 1 + src/data/core/icons/type_italic_editor.svg | 1 + src/data/core/icons/type_link_editor.svg | 1 + .../core/icons/type_math_block_editor.svg | 1 + src/data/core/icons/type_math_editor.svg | 1 + .../core/icons/type_ordered_list_editor.svg | 1 + src/data/core/icons/type_quote_editor.svg | 1 + .../core/icons/type_strikethrough_editor.svg | 1 + src/data/core/icons/type_table_editor.svg | 1 + src/data/core/icons/type_todo_list_editor.svg | 1 + .../core/icons/type_unordered_list_editor.svg | 1 + src/data/core/icons/up_parent_node.svg | 11 + src/data/core/icons/vertical_split.svg | 15 + src/data/core/icons/vnote.icns | Bin 0 -> 33168 bytes src/data/core/icons/vnote.ico | Bin 0 -> 106304 bytes src/data/core/icons/whatsthis.svg | 14 + src/data/core/logo/vnote.png | Bin 0 -> 9865 bytes src/data/core/logo/vnote.svg | 56 + src/data/core/vnotex.json | 231 + src/data/extra/docs/en/about_vnotex.txt | 7 + src/data/extra/docs/en/get_started.txt | 7 + src/data/extra/docs/en/shortcuts.md | 122 + src/data/extra/extra.qrc | 384 + .../extra/syntax-highlighting/syntax/4dos.xml | 924 ++ .../extra/syntax-highlighting/syntax/abap.xml | 285 + .../extra/syntax-highlighting/syntax/abc.xml | 86 + .../syntax/actionscript.xml | 336 + .../extra/syntax-highlighting/syntax/ada.xml | 201 + .../syntax-highlighting/syntax/adblock.xml | 87 + .../extra/syntax-highlighting/syntax/agda.xml | 107 + .../extra/syntax-highlighting/syntax/ahdl.xml | 145 + .../extra/syntax-highlighting/syntax/ahk.xml | 1143 ++ .../syntax-highlighting/syntax/alert.xml | 53 + .../syntax-highlighting/syntax/ample.xml | 3234 +++++ .../syntax-highlighting/syntax/ansforth94.xml | 595 + .../syntax-highlighting/syntax/ansic89.xml | 134 + .../syntax-highlighting/syntax/ansys.xml | 2056 +++ .../syntax-highlighting/syntax/apache.xml | 633 + .../syntax-highlighting/syntax/apparmor.xml | 1602 +++ .../syntax-highlighting/syntax/asciidoc.xml | 564 + .../syntax-highlighting/syntax/asm-avr.xml | 212 + .../syntax-highlighting/syntax/asm-dsp56k.xml | 329 + .../syntax-highlighting/syntax/asm-m68k.xml | 651 + .../syntax-highlighting/syntax/asm6502.xml | 117 + .../extra/syntax-highlighting/syntax/asn1.xml | 70 + .../extra/syntax-highlighting/syntax/asp.xml | 389 + .../extra/syntax-highlighting/syntax/awk.xml | 288 + .../extra/syntax-highlighting/syntax/bash.xml | 980 ++ .../syntax-highlighting/syntax/bibtex.xml | 108 + .../syntax-highlighting/syntax/bitbake.xml | 183 + .../syntax-highlighting/syntax/bmethod.xml | 96 + .../extra/syntax-highlighting/syntax/boo.xml | 304 + .../syntax/brightscript.xml | 801 ++ .../extra/syntax-highlighting/syntax/c.xml | 287 + .../syntax-highlighting/syntax/carto-css.xml | 405 + .../extra/syntax-highlighting/syntax/ccss.xml | 655 + .../extra/syntax-highlighting/syntax/cg.xml | 273 + .../extra/syntax-highlighting/syntax/cgis.xml | 134 + .../syntax-highlighting/syntax/changelog.xml | 29 + .../syntax-highlighting/syntax/chicken.xml | 435 + .../extra/syntax-highlighting/syntax/cil.xml | 192 + .../syntax-highlighting/syntax/cisco.xml | 302 + .../syntax-highlighting/syntax/clipper.xml | 498 + .../syntax-highlighting/syntax/clist.xml | 87 + .../syntax-highlighting/syntax/clojure.xml | 883 ++ .../syntax-highlighting/syntax/cmake.xml | 3994 ++++++ .../syntax-highlighting/syntax/coffee.xml | 340 + .../syntax-highlighting/syntax/coldfusion.xml | 731 + .../syntax-highlighting/syntax/commonlisp.xml | 1177 ++ .../syntax/component-pascal.xml | 172 + .../syntax-highlighting/syntax/context.xml | 130 + .../extra/syntax-highlighting/syntax/cpp.xml | 2030 +++ .../extra/syntax-highlighting/syntax/crk.xml | 163 + .../extra/syntax-highlighting/syntax/cs.xml | 168 + .../extra/syntax-highlighting/syntax/css.xml | 1738 +++ .../syntax-highlighting/syntax/cubescript.xml | 452 + .../extra/syntax-highlighting/syntax/cue.xml | 74 + .../syntax-highlighting/syntax/curry.xml | 364 + .../extra/syntax-highlighting/syntax/d.xml | 934 ++ .../syntax/debianchangelog.xml | 251 + .../syntax/debiancontrol.xml | 65 + .../syntax-highlighting/syntax/desktop.xml | 30 + .../extra/syntax-highlighting/syntax/diff.xml | 118 + .../syntax/djangotemplate.xml | 330 + .../syntax-highlighting/syntax/dockerfile.xml | 67 + .../syntax-highlighting/syntax/dosbat.xml | 309 + .../extra/syntax-highlighting/syntax/dot.xml | 172 + .../syntax-highlighting/syntax/doxyfile.xml | 350 + .../syntax-highlighting/syntax/doxygen.xml | 489 + .../syntax-highlighting/syntax/doxygenlua.xml | 497 + .../extra/syntax-highlighting/syntax/dtd.xml | 110 + .../extra/syntax-highlighting/syntax/e.xml | 260 + .../syntax-highlighting/syntax/eiffel.xml | 125 + .../syntax-highlighting/syntax/elixir.xml | 225 + .../extra/syntax-highlighting/syntax/elm.xml | 143 + .../syntax-highlighting/syntax/email.xml | 101 + .../syntax-highlighting/syntax/erlang.xml | 250 + .../syntax-highlighting/syntax/euphoria.xml | 378 + .../extra/syntax-highlighting/syntax/fasm.xml | 898 ++ .../syntax-highlighting/syntax/fastq.xml | 35 + .../syntax-highlighting/syntax/ferite.xml | 117 + .../syntax-highlighting/syntax/fgl-4gl.xml | 363 + .../syntax-highlighting/syntax/fgl-per.xml | 172 + .../extra/syntax-highlighting/syntax/fish.xml | 1001 ++ .../syntax/flatbuffers.xml | 114 + .../syntax/fortran-fixed.xml | 592 + .../syntax/fortran-free.xml | 311 + .../syntax-highlighting/syntax/freebasic.xml | 573 + .../syntax-highlighting/syntax/fsharp.xml | 283 + .../syntax-highlighting/syntax/fstab.xml | 96 + .../extra/syntax-highlighting/syntax/ftl.xml | 84 + .../extra/syntax-highlighting/syntax/gap.xml | 7835 +++++++++++ .../extra/syntax-highlighting/syntax/gcc.xml | 610 + .../syntax-highlighting/syntax/gcode.xml | 202 + .../syntax-highlighting/syntax/gdb-bt.xml | 53 + .../extra/syntax-highlighting/syntax/gdb.xml | 88 + .../syntax-highlighting/syntax/gdbinit.xml | 24 + .../extra/syntax-highlighting/syntax/gdl.xml | 313 + .../syntax-highlighting/syntax/gettext.xml | 222 + .../syntax-highlighting/syntax/git-ignore.xml | 41 + .../syntax-highlighting/syntax/git-rebase.xml | 65 + .../syntax-highlighting/syntax/gitolite.xml | 44 + .../syntax-highlighting/syntax/glosstex.xml | 45 + .../extra/syntax-highlighting/syntax/glsl.xml | 1217 ++ .../syntax/gnuassembler.xml | 303 + .../syntax-highlighting/syntax/gnuplot.xml | 890 ++ .../extra/syntax-highlighting/syntax/go.xml | 175 + .../syntax-highlighting/syntax/grammar.xml | 145 + .../syntax-highlighting/syntax/groovy.xml | 3889 ++++++ .../extra/syntax-highlighting/syntax/haml.xml | 500 + .../syntax-highlighting/syntax/hamlet.xml | 104 + .../syntax-highlighting/syntax/haskell.xml | 649 + .../extra/syntax-highlighting/syntax/haxe.xml | 181 + .../extra/syntax-highlighting/syntax/html.xml | 307 + .../syntax/hunspell-aff.xml | 239 + .../syntax/hunspell-dat.xml | 48 + .../syntax/hunspell-dic.xml | 85 + .../syntax/hunspell-idx.xml | 40 + .../syntax-highlighting/syntax/idconsole.xml | 2145 +++ .../extra/syntax-highlighting/syntax/idl.xml | 114 + .../syntax-highlighting/syntax/ilerpg.xml | 701 + .../syntax-highlighting/syntax/inform.xml | 405 + .../extra/syntax-highlighting/syntax/ini.xml | 78 + .../syntax-highlighting/syntax/intelhex.xml | 41 + .../syntax-highlighting/syntax/isocpp.xml | 842 ++ .../extra/syntax-highlighting/syntax/j.xml | 119 + .../extra/syntax-highlighting/syntax/jam.xml | 589 + .../extra/syntax-highlighting/syntax/java.xml | 3865 ++++++ .../syntax-highlighting/syntax/javadoc.xml | 111 + .../syntax/javascript-react.xml | 382 + .../syntax-highlighting/syntax/javascript.xml | 289 + .../extra/syntax-highlighting/syntax/jcl.xml | 170 + .../extra/syntax-highlighting/syntax/jira.xml | 718 + .../extra/syntax-highlighting/syntax/json.xml | 104 + .../extra/syntax-highlighting/syntax/jsp.xml | 245 + .../syntax-highlighting/syntax/julia.xml | 708 + .../extra/syntax-highlighting/syntax/k.xml | 430 + .../syntax-highlighting/syntax/kbasic.xml | 97 + .../syntax-highlighting/syntax/kconfig.xml | 1144 ++ .../syntax/kdesrc-buildrc.xml | 247 + .../syntax-highlighting/syntax/kotlin.xml | 298 + .../syntax-highlighting/syntax/latex.xml | 1107 ++ .../extra/syntax-highlighting/syntax/ld.xml | 84 + .../extra/syntax-highlighting/syntax/ldif.xml | 304 + .../extra/syntax-highlighting/syntax/less.xml | 459 + .../extra/syntax-highlighting/syntax/lex.xml | 144 + .../syntax-highlighting/syntax/lilypond.xml | 1199 ++ .../syntax/literate-curry.xml | 50 + .../syntax/literate-haskell.xml | 38 + .../syntax-highlighting/syntax/logcat.xml | 204 + .../syntax-highlighting/syntax/logtalk.xml | 248 + .../extra/syntax-highlighting/syntax/lpc.xml | 167 + .../extra/syntax-highlighting/syntax/lsl.xml | 1050 ++ .../extra/syntax-highlighting/syntax/lua.xml | 569 + .../extra/syntax-highlighting/syntax/m3u.xml | 51 + .../extra/syntax-highlighting/syntax/m4.xml | 193 + .../extra/syntax-highlighting/syntax/mab.xml | 30 + .../syntax-highlighting/syntax/magma.xml | 154 + .../syntax-highlighting/syntax/makefile.xml | 498 + .../extra/syntax-highlighting/syntax/mako.xml | 253 + .../syntax-highlighting/syntax/mandoc.xml | 88 + .../syntax-highlighting/syntax/markdown.xml | 642 + .../syntax-highlighting/syntax/mason.xml | 233 + .../syntax/mathematica.xml | 3229 +++++ .../syntax-highlighting/syntax/matlab.xml | 163 + .../syntax-highlighting/syntax/maxima.xml | 1903 +++ .../syntax-highlighting/syntax/mediawiki.xml | 622 + .../extra/syntax-highlighting/syntax/mel.xml | 1380 ++ .../syntax/mergetagtext.xml | 145 + .../syntax-highlighting/syntax/meson.xml | 117 + .../syntax-highlighting/syntax/metafont.xml | 986 ++ .../syntax-highlighting/syntax/metamath.xml | 122 + .../extra/syntax-highlighting/syntax/mib.xml | 182 + .../extra/syntax-highlighting/syntax/mips.xml | 359 + .../syntax-highlighting/syntax/modelica.xml | 260 + .../syntax-highlighting/syntax/modelines.xml | 197 + .../syntax/modula-2-iso-only.xml | 342 + .../syntax/modula-2-pim-only.xml | 308 + .../syntax/modula-2-r10-only.xml | 347 + .../syntax-highlighting/syntax/modula-2.xml | 1191 ++ .../syntax-highlighting/syntax/monobasic.xml | 216 + .../extra/syntax-highlighting/syntax/mup.xml | 865 ++ .../syntax-highlighting/syntax/mustache.xml | 470 + .../syntax-highlighting/syntax/nagios.xml | 83 + .../extra/syntax-highlighting/syntax/nasm.xml | 893 ++ .../syntax-highlighting/syntax/nemerle.xml | 208 + .../extra/syntax-highlighting/syntax/nesc.xml | 185 + .../syntax-highlighting/syntax/ninja.xml | 288 + .../syntax-highlighting/syntax/noweb.xml | 52 + .../extra/syntax-highlighting/syntax/nsis.xml | 494 + .../syntax-highlighting/syntax/objectivec.xml | 130 + .../syntax/objectivecpp.xml | 300 + .../syntax-highlighting/syntax/ocaml.xml | 624 + .../syntax-highlighting/syntax/ocamllex.xml | 81 + .../syntax-highlighting/syntax/ocamlyacc.xml | 160 + .../syntax-highlighting/syntax/octave.xml | 2833 ++++ .../extra/syntax-highlighting/syntax/oors.xml | 87 + .../extra/syntax-highlighting/syntax/opal.xml | 331 + .../syntax-highlighting/syntax/opencl.xml | 260 + .../syntax-highlighting/syntax/openscad.xml | 173 + .../syntax-highlighting/syntax/pango.xml | 160 + .../syntax-highlighting/syntax/pascal.xml | 219 + .../extra/syntax-highlighting/syntax/perl.xml | 881 ++ .../extra/syntax-highlighting/syntax/pgn.xml | 108 + .../extra/syntax-highlighting/syntax/php.xml | 11052 ++++++++++++++++ .../syntax-highlighting/syntax/picsrc.xml | 401 + .../extra/syntax-highlighting/syntax/pig.xml | 205 + .../extra/syntax-highlighting/syntax/pike.xml | 121 + .../extra/syntax-highlighting/syntax/pli.xml | 454 + .../extra/syntax-highlighting/syntax/ply.xml | 54 + .../extra/syntax-highlighting/syntax/pony.xml | 314 + .../syntax-highlighting/syntax/postscript.xml | 434 + .../syntax-highlighting/syntax/povray.xml | 967 ++ .../syntax-highlighting/syntax/powershell.xml | 934 ++ .../extra/syntax-highlighting/syntax/ppd.xml | 58 + .../syntax-highlighting/syntax/praat.xml | 510 + .../syntax-highlighting/syntax/progress.xml | 1707 +++ .../syntax-highlighting/syntax/prolog.xml | 1031 ++ .../syntax-highlighting/syntax/protobuf.xml | 120 + .../extra/syntax-highlighting/syntax/pug.xml | 118 + .../syntax-highlighting/syntax/puppet.xml | 711 + .../syntax-highlighting/syntax/purebasic.xml | 1767 +++ .../syntax-highlighting/syntax/python.xml | 688 + .../extra/syntax-highlighting/syntax/q.xml | 210 + .../syntax-highlighting/syntax/qdocconf.xml | 136 + .../syntax-highlighting/syntax/qmake.xml | 659 + .../extra/syntax-highlighting/syntax/qml.xml | 173 + .../extra/syntax-highlighting/syntax/r.xml | 152 + .../syntax-highlighting/syntax/rapidq.xml | 432 + .../extra/syntax-highlighting/syntax/rdoc.xml | 388 + .../syntax-highlighting/syntax/relaxng.xml | 119 + .../syntax/relaxngcompact.xml | 108 + .../syntax-highlighting/syntax/replicode.xml | 196 + .../extra/syntax-highlighting/syntax/rest.xml | 111 + .../extra/syntax-highlighting/syntax/rexx.xml | 199 + .../syntax-highlighting/syntax/rhtml.xml | 1237 ++ .../extra/syntax-highlighting/syntax/rib.xml | 143 + .../syntax-highlighting/syntax/rmarkdown.xml | 175 + .../extra/syntax-highlighting/syntax/roff.xml | 197 + .../syntax-highlighting/syntax/rpmspec.xml | 505 + .../syntax-highlighting/syntax/rsiidl.xml | 440 + .../extra/syntax-highlighting/syntax/rtf.xml | 49 + .../extra/syntax-highlighting/syntax/ruby.xml | 933 ++ .../extra/syntax-highlighting/syntax/rust.xml | 497 + .../extra/syntax-highlighting/syntax/sass.xml | 467 + .../syntax-highlighting/syntax/sather.xml | 141 + .../syntax-highlighting/syntax/scala.xml | 3505 +++++ .../syntax-highlighting/syntax/scheme.xml | 394 + .../extra/syntax-highlighting/syntax/sci.xml | 1191 ++ .../extra/syntax-highlighting/syntax/scss.xml | 1038 ++ .../extra/syntax-highlighting/syntax/sed.xml | 267 + .../syntax/selinux-cil.xml | 685 + .../syntax-highlighting/syntax/selinux-fc.xml | 300 + .../syntax-highlighting/syntax/selinux.xml | 1627 +++ .../extra/syntax-highlighting/syntax/sgml.xml | 46 + .../syntax-highlighting/syntax/sieve.xml | 152 + .../extra/syntax-highlighting/syntax/sisu.xml | 154 + .../syntax-highlighting/syntax/smali.xml | 456 + .../extra/syntax-highlighting/syntax/sml.xml | 104 + .../syntax-highlighting/syntax/spice.xml | 51 + .../syntax-highlighting/syntax/sql-mysql.xml | 481 + .../syntax-highlighting/syntax/sql-oracle.xml | 1954 +++ .../syntax/sql-postgresql.xml | 1074 ++ .../extra/syntax-highlighting/syntax/sql.xml | 955 ++ .../extra/syntax-highlighting/syntax/stan.xml | 129 + .../syntax-highlighting/syntax/stata.xml | 3223 +++++ .../extra/syntax-highlighting/syntax/stl.xml | 31 + .../syntax-highlighting/syntax/systemc.xml | 133 + .../syntax/systemverilog.xml | 1005 ++ .../syntax-highlighting/syntax/tads3.xml | 176 + .../syntax/taskjuggler.xml | 390 + .../extra/syntax-highlighting/syntax/tcl.xml | 565 + .../extra/syntax-highlighting/syntax/tcsh.xml | 817 ++ .../syntax/template-toolkit.xml | 321 + .../syntax-highlighting/syntax/texinfo.xml | 63 + .../syntax-highlighting/syntax/textile.xml | 100 + .../syntax-highlighting/syntax/tibasic.xml | 71 + .../syntax-highlighting/syntax/tiger.xml | 96 + .../extra/syntax-highlighting/syntax/toml.xml | 135 + .../syntax-highlighting/syntax/txt2tags.xml | 67 + .../syntax/typescript-react.xml | 489 + .../syntax-highlighting/syntax/typescript.xml | 2092 +++ .../syntax-highlighting/syntax/uscript.xml | 188 + .../extra/syntax-highlighting/syntax/vala.xml | 288 + .../syntax/valgrind-suppression.xml | 51 + .../syntax-highlighting/syntax/varnish.xml | 349 + .../syntax-highlighting/syntax/varnish4.xml | 372 + .../syntax-highlighting/syntax/varnishcc.xml | 101 + .../syntax-highlighting/syntax/varnishcc4.xml | 128 + .../syntax/varnishtest.xml | 547 + .../syntax/varnishtest4.xml | 706 + .../syntax-highlighting/syntax/vcard.xml | 45 + .../syntax-highlighting/syntax/velocity.xml | 51 + .../extra/syntax-highlighting/syntax/vera.xml | 648 + .../syntax-highlighting/syntax/verilog.xml | 252 + .../extra/syntax-highlighting/syntax/vhdl.xml | 654 + .../extra/syntax-highlighting/syntax/vrml.xml | 139 + .../syntax/wavefront-obj.xml | 69 + .../syntax/wayland-trace.xml | 61 + .../syntax-highlighting/syntax/winehq.xml | 34 + .../extra/syntax-highlighting/syntax/wml.xml | 214 + .../syntax-highlighting/syntax/xharbour.xml | 539 + .../extra/syntax-highlighting/syntax/xml.xml | 149 + .../syntax-highlighting/syntax/xmldebug.xml | 592 + .../syntax/xonotic-console.xml | 5660 ++++++++ .../extra/syntax-highlighting/syntax/xorg.xml | 65 + .../extra/syntax-highlighting/syntax/xslt.xml | 440 + .../extra/syntax-highlighting/syntax/xul.xml | 624 + .../syntax-highlighting/syntax/yacas.xml | 236 + .../extra/syntax-highlighting/syntax/yacc.xml | 267 + .../extra/syntax-highlighting/syntax/yaml.xml | 635 + .../extra/syntax-highlighting/syntax/yang.xml | 155 + .../syntax-highlighting/syntax/zonnon.xml | 144 + .../extra/syntax-highlighting/syntax/zsh.xml | 959 ++ .../themes/breeze-dark.theme | 174 + .../syntax-highlighting/themes/default.theme | 174 + .../themes/markdown-default.theme | 174 + .../syntax-highlighting/themes/printing.theme | 173 + .../themes/solarized-dark.theme | 175 + .../themes/solarized-light.theme | 175 + .../themes/native/editor-highlight.theme | 174 + src/data/extra/themes/native/highlight.css | 249 + src/data/extra/themes/native/interface.qss | 118 + src/data/extra/themes/native/palette.json | 80 + .../extra/themes/native/text-editor.theme | 173 + src/data/extra/themes/native/web.css | 292 + src/data/extra/web/css/globalstyles.css | 51 + src/data/extra/web/css/imageviewer.css | 62 + src/data/extra/web/css/markdownit.css | 61 + .../web/js/computed-style-to-inline-style.js | 43 + src/data/extra/web/js/crosscopy.js | 321 + src/data/extra/web/js/easyaccess.js | 435 + src/data/extra/web/js/eventemitter.js | 37 + src/data/extra/web/js/flowchart.js/README.md | 5 + .../web/js/flowchart.js/flowchart.min.js | 8 + .../extra/web/js/flowchart.js/raphael.min.js | 1 + src/data/extra/web/js/flowchartjs.js | 113 + src/data/extra/web/js/graphcache.js | 19 + src/data/extra/web/js/graphpreviewer.js | 207 + src/data/extra/web/js/graphrenderer.js | 119 + src/data/extra/web/js/graphviz.js | 110 + src/data/extra/web/js/imageviewer.js | 229 + src/data/extra/web/js/lrucache.js | 29 + src/data/extra/web/js/markdown-it/README.md | 54 + .../markdown-it/markdown-it-container.min.js | 1 + .../js/markdown-it/markdown-it-emoji.min.js | 3 + .../markdown-it/markdown-it-footnote.min.js | 1 + .../markdown-it/markdown-it-front-matter.js | 148 + .../markdown-it/markdown-it-headinganchor.js | 80 + .../js/markdown-it/markdown-it-imsize.min.js | 2 + .../markdown-it-inject-linenumbers.js | 55 + .../web/js/markdown-it/markdown-it-sub.min.js | 2 + .../web/js/markdown-it/markdown-it-sup.min.js | 2 + .../js/markdown-it/markdown-it-task-lists.js | 121 + .../web/js/markdown-it/markdown-it-texmath.js | 322 + .../web/js/markdown-it/markdown-it-xss.min.js | 1 + .../web/js/markdown-it/markdown-it.min.js | 1 + src/data/extra/web/js/markdownit.js | 316 + src/data/extra/web/js/markdownviewer.js | 52 + src/data/extra/web/js/mathjax.js | 188 + src/data/extra/web/js/mermaid.js | 125 + src/data/extra/web/js/mermaid/README.md | 2 + src/data/extra/web/js/mermaid/mermaid.min.js | 32 + src/data/extra/web/js/nodelinemapper.js | 206 + src/data/extra/web/js/plantuml.js | 135 + src/data/extra/web/js/plantuml/README.md | 3 + src/data/extra/web/js/plantuml/synchro2.js | 50 + .../extra/web/js/plantuml/zopfli.raw.min.js | 238 + src/data/extra/web/js/prism.js | 95 + src/data/extra/web/js/prism/README.md | 5 + src/data/extra/web/js/prism/clipboard.min.js | 7 + src/data/extra/web/js/prism/prism.min.js | 238 + src/data/extra/web/js/qwebchannel.js | 427 + src/data/extra/web/js/svg-to-image.js | 77 + src/data/extra/web/js/turndown.js | 93 + src/data/extra/web/js/turndown/README.md | 7 + .../web/js/turndown/turndown-plugin-gfm.js | 199 + src/data/extra/web/js/turndown/turndown.js | 956 ++ src/data/extra/web/js/utils.js | 102 + src/data/extra/web/js/viz.js/README.md | 2 + src/data/extra/web/js/viz.js/lite.render.js | 90 + src/data/extra/web/js/viz.js/viz.js | 333 + src/data/extra/web/js/vnotex.js | 268 + src/data/extra/web/js/vxworker.js | 23 + src/data/extra/web/js/wavedrom.js | 80 + src/data/extra/web/js/wavedrom/README.md | 2 + .../extra/web/js/wavedrom/theme-default.js | 3 + .../extra/web/js/wavedrom/wavedrom.min.js | 3 + .../extra/web/markdownviewertemplate.html | 34 + src/main.cpp | 179 + src/src.pro | 55 + src/utils/clipboardutils.cpp | 196 + src/utils/clipboardutils.h | 45 + src/utils/docsutils.cpp | 57 + src/utils/docsutils.h | 28 + src/utils/fileutils.cpp | 334 + src/utils/fileutils.h | 76 + src/utils/htmlutils.cpp | 12 + src/utils/htmlutils.h | 17 + src/utils/iconutils.cpp | 83 + src/utils/iconutils.h | 58 + src/utils/pathutils.cpp | 227 + src/utils/pathutils.h | 80 + src/utils/textutils.cpp | 87 + src/utils/textutils.h | 29 + src/utils/urldragdroputils.cpp | 44 + src/utils/urldragdroputils.h | 25 + src/utils/utils.cpp | 114 + src/utils/utils.h | 58 + src/utils/utils.pri | 25 + src/utils/widgetutils.cpp | 316 + src/utils/widgetutils.h | 83 + .../attachmentdragdropareaindicator.cpp | 46 + src/widgets/attachmentdragdropareaindicator.h | 26 + src/widgets/attachmentpopup.cpp | 276 + src/widgets/attachmentpopup.h | 52 + src/widgets/biaction.cpp | 99 + src/widgets/biaction.h | 60 + src/widgets/dialogs/deleteconfirmdialog.cpp | 211 + src/widgets/dialogs/deleteconfirmdialog.h | 111 + src/widgets/dialogs/dialog.cpp | 138 + src/widgets/dialogs/dialog.h | 61 + src/widgets/dialogs/filepropertiesdialog.cpp | 61 + src/widgets/dialogs/filepropertiesdialog.h | 29 + .../dialogs/folderfilesfilterwidget.cpp | 204 + src/widgets/dialogs/folderfilesfilterwidget.h | 55 + .../dialogs/folderpropertiesdialog.cpp | 105 + src/widgets/dialogs/folderpropertiesdialog.h | 38 + src/widgets/dialogs/imageinsertdialog.cpp | 333 + src/widgets/dialogs/imageinsertdialog.h | 117 + src/widgets/dialogs/importfolderdialog.cpp | 113 + src/widgets/dialogs/importfolderdialog.h | 41 + src/widgets/dialogs/importfolderutils.cpp | 108 + src/widgets/dialogs/importfolderutils.h | 31 + .../dialogs/importlegacynotebookdialog.cpp | 138 + .../dialogs/importlegacynotebookdialog.h | 24 + src/widgets/dialogs/importnotebookdialog.cpp | 155 + src/widgets/dialogs/importnotebookdialog.h | 43 + src/widgets/dialogs/legacynotebookutils.cpp | 98 + src/widgets/dialogs/legacynotebookutils.h | 55 + src/widgets/dialogs/linkinsertdialog.cpp | 111 + src/widgets/dialogs/linkinsertdialog.h | 43 + src/widgets/dialogs/managenotebooksdialog.cpp | 280 + src/widgets/dialogs/managenotebooksdialog.h | 70 + src/widgets/dialogs/newfolderdialog.cpp | 101 + src/widgets/dialogs/newfolderdialog.h | 41 + src/widgets/dialogs/newnotebookdialog.cpp | 155 + src/widgets/dialogs/newnotebookdialog.h | 41 + .../dialogs/newnotebookfromfolderdialog.cpp | 166 + .../dialogs/newnotebookfromfolderdialog.h | 46 + src/widgets/dialogs/newnotedialog.cpp | 118 + src/widgets/dialogs/newnotedialog.h | 46 + src/widgets/dialogs/nodeinfowidget.cpp | 121 + src/widgets/dialogs/nodeinfowidget.h | 65 + src/widgets/dialogs/nodelabelwithupbutton.cpp | 76 + src/widgets/dialogs/nodelabelwithupbutton.h | 43 + src/widgets/dialogs/notebookinfowidget.cpp | 377 + src/widgets/dialogs/notebookinfowidget.h | 112 + src/widgets/dialogs/notepropertiesdialog.cpp | 107 + src/widgets/dialogs/notepropertiesdialog.h | 38 + src/widgets/dialogs/scrolldialog.cpp | 43 + src/widgets/dialogs/scrolldialog.h | 28 + src/widgets/dialogs/selectdialog.cpp | 107 + src/widgets/dialogs/selectdialog.h | 48 + src/widgets/dialogs/selectionitemwidget.cpp | 89 + src/widgets/dialogs/selectionitemwidget.h | 54 + .../dialogs/settings/appearancepage.cpp | 76 + src/widgets/dialogs/settings/appearancepage.h | 33 + src/widgets/dialogs/settings/editorpage.cpp | 80 + src/widgets/dialogs/settings/editorpage.h | 33 + src/widgets/dialogs/settings/generalpage.cpp | 97 + src/widgets/dialogs/settings/generalpage.h | 32 + .../dialogs/settings/markdowneditorpage.cpp | 111 + .../dialogs/settings/markdowneditorpage.h | 38 + .../dialogs/settings/settingsdialog.cpp | 193 + src/widgets/dialogs/settings/settingsdialog.h | 59 + src/widgets/dialogs/settings/settingspage.cpp | 73 + src/widgets/dialogs/settings/settingspage.h | 65 + .../dialogs/settings/texteditorpage.cpp | 193 + src/widgets/dialogs/settings/texteditorpage.h | 44 + src/widgets/dragdropareaindicator.cpp | 51 + src/widgets/dragdropareaindicator.h | 42 + .../editors/editormarkdownvieweradapter.cpp | 17 + .../editors/editormarkdownvieweradapter.h | 25 + src/widgets/editors/markdowneditor.cpp | 1023 ++ src/widgets/editors/markdowneditor.h | 169 + src/widgets/editors/markdownviewer.cpp | 419 + src/widgets/editors/markdownviewer.h | 74 + src/widgets/editors/markdownvieweradapter.cpp | 270 + src/widgets/editors/markdownvieweradapter.h | 222 + src/widgets/editors/previewhelper.cpp | 416 + src/widgets/editors/previewhelper.h | 221 + src/widgets/editors/texteditor.cpp | 11 + src/widgets/editors/texteditor.h | 17 + src/widgets/editreaddiscardaction.cpp | 58 + src/widgets/editreaddiscardaction.h | 43 + src/widgets/filesystemviewer.cpp | 230 + src/widgets/filesystemviewer.h | 67 + src/widgets/findandreplacewidget.cpp | 267 + src/widgets/findandreplacewidget.h | 72 + src/widgets/fullscreentoggleaction.cpp | 53 + src/widgets/fullscreentoggleaction.h | 26 + src/widgets/lineedit.cpp | 82 + src/widgets/lineedit.h | 24 + src/widgets/lineeditdelegate.cpp | 42 + src/widgets/lineeditdelegate.h | 30 + src/widgets/listwidget.cpp | 43 + src/widgets/listwidget.h | 22 + src/widgets/mainwindow.cpp | 482 + src/widgets/mainwindow.h | 123 + src/widgets/markdownviewwindow.cpp | 794 ++ src/widgets/markdownviewwindow.h | 156 + src/widgets/messageboxhelper.cpp | 181 + src/widgets/messageboxhelper.h | 86 + src/widgets/navigationmode.cpp | 217 + src/widgets/navigationmode.h | 88 + src/widgets/navigationmodemgr.cpp | 161 + src/widgets/navigationmodemgr.h | 68 + src/widgets/navigationmodewrapper.h | 100 + src/widgets/notebookexplorer.cpp | 357 + src/widgets/notebookexplorer.h | 71 + src/widgets/notebooknodeexplorer.cpp | 1328 ++ src/widgets/notebooknodeexplorer.h | 219 + src/widgets/notebookselector.cpp | 178 + src/widgets/notebookselector.h | 55 + src/widgets/outlinepopup.cpp | 45 + src/widgets/outlinepopup.h | 36 + src/widgets/outlineprovider.cpp | 65 + src/widgets/outlineprovider.h | 100 + src/widgets/outlineviewer.cpp | 299 + src/widgets/outlineviewer.h | 84 + src/widgets/propertydefs.cpp | 11 + src/widgets/propertydefs.h | 23 + src/widgets/qtreewidgetstatecache.h | 92 + src/widgets/statusbarhelper.cpp | 14 + src/widgets/statusbarhelper.h | 25 + src/widgets/textviewwindow.cpp | 183 + src/widgets/textviewwindow.h | 69 + src/widgets/textviewwindowhelper.h | 133 + src/widgets/titlebar.cpp | 172 + src/widgets/titlebar.h | 94 + src/widgets/toolbarhelper.cpp | 413 + src/widgets/toolbarhelper.h | 40 + src/widgets/toolbox.cpp | 190 + src/widgets/toolbox.h | 90 + src/widgets/treeview.cpp | 21 + src/widgets/treeview.h | 20 + src/widgets/treewidget.cpp | 214 + src/widgets/treewidget.h | 57 + src/widgets/viewarea.cpp | 976 ++ src/widgets/viewarea.h | 221 + src/widgets/viewsplit.cpp | 642 + src/widgets/viewsplit.h | 145 + src/widgets/viewwindow.cpp | 883 ++ src/widgets/viewwindow.h | 280 + src/widgets/viewwindowtoolbarhelper.cpp | 318 + src/widgets/viewwindowtoolbarhelper.h | 60 + src/widgets/webpage.cpp | 24 + src/widgets/webpage.h | 21 + src/widgets/webviewer.cpp | 14 + src/widgets/webviewer.h | 18 + src/widgets/widgets.pri | 154 + src/widgets/widgetsfactory.cpp | 67 + src/widgets/widgetsfactory.h | 41 + tests/common.pri | 8 + tests/test_core/test_core.pro | 5 + .../test_core/test_notebook/test_notebook.cpp | 119 + tests/test_core/test_notebook/test_notebook.h | 51 + .../test_core/test_notebook/test_notebook.pro | 23 + tests/test_core/test_theme/test_theme.cpp | 159 + tests/test_core/test_theme/test_theme.h | 39 + tests/test_core/test_theme/test_theme.pro | 22 + tests/test_utils/test_utils.cpp | 230 + tests/test_utils/test_utils.h | 38 + tests/test_utils/test_utils.pro | 19 + tests/tests.pro | 5 + vnotex.pro | 11 + 770 files changed, 220079 insertions(+) create mode 100644 .gitignore create mode 100644 .gitmodules create mode 100644 coc_update.cmd create mode 100644 libs/libs.pro create mode 160000 libs/vtextedit create mode 100644 libs/vtitlebar/src/vtitlebar.cpp create mode 100644 libs/vtitlebar/src/vtitlebar.h create mode 100644 libs/vtitlebar/src/vtoolbar.cpp create mode 100644 libs/vtitlebar/src/vtoolbar.h create mode 100644 libs/vtitlebar/vtitlebar.pro create mode 100644 libs/vtitlebar/vtitlebar_export.pri create mode 100644 src/core/buffer/buffer.cpp create mode 100644 src/core/buffer/buffer.h create mode 100644 src/core/buffer/buffer.pri create mode 100644 src/core/buffer/bufferprovider.cpp create mode 100644 src/core/buffer/bufferprovider.h create mode 100644 src/core/buffer/filebufferprovider.cpp create mode 100644 src/core/buffer/filebufferprovider.h create mode 100644 src/core/buffer/filetypehelper.cpp create mode 100644 src/core/buffer/filetypehelper.h create mode 100644 src/core/buffer/ibufferfactory.h create mode 100644 src/core/buffer/markdownbuffer.cpp create mode 100644 src/core/buffer/markdownbuffer.h create mode 100644 src/core/buffer/markdownbufferfactory.cpp create mode 100644 src/core/buffer/markdownbufferfactory.h create mode 100644 src/core/buffer/nodebufferprovider.cpp create mode 100644 src/core/buffer/nodebufferprovider.h create mode 100644 src/core/buffer/textbuffer.cpp create mode 100644 src/core/buffer/textbuffer.h create mode 100644 src/core/buffer/textbufferfactory.cpp create mode 100644 src/core/buffer/textbufferfactory.h create mode 100644 src/core/buffermgr.cpp create mode 100644 src/core/buffermgr.h create mode 100644 src/core/clipboarddata.cpp create mode 100644 src/core/clipboarddata.h create mode 100644 src/core/configmgr.cpp create mode 100644 src/core/configmgr.h create mode 100644 src/core/core.pri create mode 100644 src/core/coreconfig.cpp create mode 100644 src/core/coreconfig.h create mode 100644 src/core/editorconfig.cpp create mode 100644 src/core/editorconfig.h create mode 100644 src/core/events.h create mode 100644 src/core/exception.h create mode 100644 src/core/filelocator.h create mode 100644 src/core/fileopenparameters.h create mode 100644 src/core/global.h create mode 100644 src/core/htmltemplatehelper.cpp create mode 100644 src/core/htmltemplatehelper.h create mode 100644 src/core/iconfig.h create mode 100644 src/core/logger.cpp create mode 100644 src/core/logger.h create mode 100644 src/core/mainconfig.cpp create mode 100644 src/core/mainconfig.h create mode 100644 src/core/markdowneditorconfig.cpp create mode 100644 src/core/markdowneditorconfig.h create mode 100644 src/core/namebasedserver.h create mode 100644 src/core/notebook/bundlenotebook.cpp create mode 100644 src/core/notebook/bundlenotebook.h create mode 100644 src/core/notebook/bundlenotebookfactory.cpp create mode 100644 src/core/notebook/bundlenotebookfactory.h create mode 100644 src/core/notebook/filenode.cpp create mode 100644 src/core/notebook/filenode.h create mode 100644 src/core/notebook/foldernode.cpp create mode 100644 src/core/notebook/foldernode.h create mode 100644 src/core/notebook/inotebookfactory.h create mode 100644 src/core/notebook/node.cpp create mode 100644 src/core/notebook/node.h create mode 100644 src/core/notebook/notebook.cpp create mode 100644 src/core/notebook/notebook.h create mode 100644 src/core/notebook/notebook.pri create mode 100644 src/core/notebook/notebookparameters.cpp create mode 100644 src/core/notebook/notebookparameters.h create mode 100644 src/core/notebookbackend/inotebookbackend.cpp create mode 100644 src/core/notebookbackend/inotebookbackend.h create mode 100644 src/core/notebookbackend/inotebookbackendfactory.h create mode 100644 src/core/notebookbackend/localnotebookbackend.cpp create mode 100644 src/core/notebookbackend/localnotebookbackend.h create mode 100644 src/core/notebookbackend/localnotebookbackendfactory.cpp create mode 100644 src/core/notebookbackend/localnotebookbackendfactory.h create mode 100644 src/core/notebookbackend/notebookbackend.pri create mode 100644 src/core/notebookconfigmgr/bundlenotebookconfigmgr.cpp create mode 100644 src/core/notebookconfigmgr/bundlenotebookconfigmgr.h create mode 100644 src/core/notebookconfigmgr/inotebookconfigmgr.cpp create mode 100644 src/core/notebookconfigmgr/inotebookconfigmgr.h create mode 100644 src/core/notebookconfigmgr/inotebookconfigmgrfactory.h create mode 100644 src/core/notebookconfigmgr/nodecontentmediautils.cpp create mode 100644 src/core/notebookconfigmgr/nodecontentmediautils.h create mode 100644 src/core/notebookconfigmgr/notebookconfig.cpp create mode 100644 src/core/notebookconfigmgr/notebookconfig.h create mode 100644 src/core/notebookconfigmgr/notebookconfigmgr.pri create mode 100644 src/core/notebookconfigmgr/vxnotebookconfigmgr.cpp create mode 100644 src/core/notebookconfigmgr/vxnotebookconfigmgr.h create mode 100644 src/core/notebookconfigmgr/vxnotebookconfigmgrfactory.cpp create mode 100644 src/core/notebookconfigmgr/vxnotebookconfigmgrfactory.h create mode 100644 src/core/notebookmgr.cpp create mode 100644 src/core/notebookmgr.h create mode 100644 src/core/sessionconfig.cpp create mode 100644 src/core/sessionconfig.h create mode 100644 src/core/singleinstanceguard.cpp create mode 100644 src/core/singleinstanceguard.h create mode 100644 src/core/texteditorconfig.cpp create mode 100644 src/core/texteditorconfig.h create mode 100644 src/core/theme.cpp create mode 100644 src/core/theme.h create mode 100644 src/core/thememgr.cpp create mode 100644 src/core/thememgr.h create mode 100644 src/core/versioncontroller/dummyversioncontroller.cpp create mode 100644 src/core/versioncontroller/dummyversioncontroller.h create mode 100644 src/core/versioncontroller/dummyversioncontrollerfactory.cpp create mode 100644 src/core/versioncontroller/dummyversioncontrollerfactory.h create mode 100644 src/core/versioncontroller/iversioncontroller.h create mode 100644 src/core/versioncontroller/iversioncontrollerfactory.h create mode 100644 src/core/versioncontroller/versioncontroller.pri create mode 100644 src/core/versioncontroller/versioncontrollerserver.cpp create mode 100644 src/core/versioncontroller/versioncontrollerserver.h create mode 100644 src/core/viewerresource.h create mode 100644 src/core/vnotex.cpp create mode 100644 src/core/vnotex.h create mode 100644 src/core/widgetconfig.cpp create mode 100644 src/core/widgetconfig.h create mode 100644 src/data/core/core.qrc create mode 100644 src/data/core/icons/add.svg create mode 100644 src/data/core/icons/attachment_editor.svg create mode 100644 src/data/core/icons/attachment_full_editor.svg create mode 100644 src/data/core/icons/clear.svg create mode 100644 src/data/core/icons/close.svg create mode 100644 src/data/core/icons/close_notebook.svg create mode 100644 src/data/core/icons/decrease_outline_level.svg create mode 100644 src/data/core/icons/discard_editor.svg create mode 100644 src/data/core/icons/edit_editor.svg create mode 100644 src/data/core/icons/expand.svg create mode 100644 src/data/core/icons/file_node.svg create mode 100644 src/data/core/icons/find_replace_editor.svg create mode 100644 src/data/core/icons/folder_node.svg create mode 100644 src/data/core/icons/fullscreen.svg create mode 100644 src/data/core/icons/help.svg create mode 100644 src/data/core/icons/history_explorer.svg create mode 100644 src/data/core/icons/horizontal_split.svg create mode 100644 src/data/core/icons/import_notebook.svg create mode 100644 src/data/core/icons/import_notebook_of_vnote2.svg create mode 100644 src/data/core/icons/increase_outline_level.svg create mode 100644 src/data/core/icons/manage_notebooks.svg create mode 100644 src/data/core/icons/maximize.svg create mode 100644 src/data/core/icons/maximize_restore.svg create mode 100644 src/data/core/icons/menu.svg create mode 100644 src/data/core/icons/minimize.svg create mode 100644 src/data/core/icons/native_notebook_default.svg create mode 100644 src/data/core/icons/new_file.svg create mode 100644 src/data/core/icons/new_folder.svg create mode 100644 src/data/core/icons/new_note.svg create mode 100644 src/data/core/icons/new_notebook.svg create mode 100644 src/data/core/icons/new_notebook_from_folder.svg create mode 100644 src/data/core/icons/notebook_default.svg create mode 100644 src/data/core/icons/notebook_explorer.svg create mode 100644 src/data/core/icons/open_folder.svg create mode 100644 src/data/core/icons/outline_editor.svg create mode 100644 src/data/core/icons/properties.svg create mode 100644 src/data/core/icons/read_editor.svg create mode 100644 src/data/core/icons/recycle_bin.svg create mode 100644 src/data/core/icons/remove_notebook.svg create mode 100644 src/data/core/icons/save_editor.svg create mode 100644 src/data/core/icons/saved.svg create mode 100644 src/data/core/icons/settings.svg create mode 100644 src/data/core/icons/split_menu.svg create mode 100644 src/data/core/icons/split_window_list.svg create mode 100644 src/data/core/icons/stay_on_top.svg create mode 100644 src/data/core/icons/tag_explorer.svg create mode 100644 src/data/core/icons/type_bold_editor.svg create mode 100644 src/data/core/icons/type_checked_todo_list_editor.svg create mode 100644 src/data/core/icons/type_code_block_editor.svg create mode 100644 src/data/core/icons/type_code_editor.svg create mode 100644 src/data/core/icons/type_heading_editor.svg create mode 100644 src/data/core/icons/type_image_editor.svg create mode 100644 src/data/core/icons/type_italic_editor.svg create mode 100644 src/data/core/icons/type_link_editor.svg create mode 100644 src/data/core/icons/type_math_block_editor.svg create mode 100644 src/data/core/icons/type_math_editor.svg create mode 100644 src/data/core/icons/type_ordered_list_editor.svg create mode 100644 src/data/core/icons/type_quote_editor.svg create mode 100644 src/data/core/icons/type_strikethrough_editor.svg create mode 100644 src/data/core/icons/type_table_editor.svg create mode 100644 src/data/core/icons/type_todo_list_editor.svg create mode 100644 src/data/core/icons/type_unordered_list_editor.svg create mode 100644 src/data/core/icons/up_parent_node.svg create mode 100644 src/data/core/icons/vertical_split.svg create mode 100644 src/data/core/icons/vnote.icns create mode 100644 src/data/core/icons/vnote.ico create mode 100644 src/data/core/icons/whatsthis.svg create mode 100644 src/data/core/logo/vnote.png create mode 100644 src/data/core/logo/vnote.svg create mode 100644 src/data/core/vnotex.json create mode 100644 src/data/extra/docs/en/about_vnotex.txt create mode 100644 src/data/extra/docs/en/get_started.txt create mode 100644 src/data/extra/docs/en/shortcuts.md create mode 100644 src/data/extra/extra.qrc create mode 100644 src/data/extra/syntax-highlighting/syntax/4dos.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/abap.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/abc.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/actionscript.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/ada.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/adblock.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/agda.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/ahdl.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/ahk.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/alert.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/ample.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/ansforth94.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/ansic89.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/ansys.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/apache.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/apparmor.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/asciidoc.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/asm-avr.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/asm-dsp56k.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/asm-m68k.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/asm6502.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/asn1.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/asp.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/awk.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/bash.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/bibtex.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/bitbake.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/bmethod.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/boo.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/brightscript.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/c.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/carto-css.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/ccss.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/cg.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/cgis.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/changelog.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/chicken.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/cil.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/cisco.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/clipper.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/clist.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/clojure.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/cmake.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/coffee.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/coldfusion.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/commonlisp.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/component-pascal.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/context.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/cpp.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/crk.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/cs.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/css.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/cubescript.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/cue.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/curry.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/d.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/debianchangelog.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/debiancontrol.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/desktop.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/diff.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/djangotemplate.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/dockerfile.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/dosbat.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/dot.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/doxyfile.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/doxygen.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/doxygenlua.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/dtd.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/e.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/eiffel.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/elixir.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/elm.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/email.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/erlang.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/euphoria.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/fasm.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/fastq.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/ferite.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/fgl-4gl.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/fgl-per.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/fish.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/flatbuffers.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/fortran-fixed.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/fortran-free.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/freebasic.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/fsharp.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/fstab.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/ftl.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/gap.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/gcc.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/gcode.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/gdb-bt.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/gdb.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/gdbinit.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/gdl.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/gettext.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/git-ignore.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/git-rebase.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/gitolite.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/glosstex.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/glsl.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/gnuassembler.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/gnuplot.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/go.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/grammar.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/groovy.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/haml.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/hamlet.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/haskell.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/haxe.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/html.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/hunspell-aff.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/hunspell-dat.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/hunspell-dic.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/hunspell-idx.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/idconsole.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/idl.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/ilerpg.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/inform.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/ini.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/intelhex.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/isocpp.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/j.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/jam.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/java.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/javadoc.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/javascript-react.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/javascript.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/jcl.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/jira.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/json.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/jsp.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/julia.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/k.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/kbasic.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/kconfig.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/kdesrc-buildrc.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/kotlin.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/latex.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/ld.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/ldif.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/less.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/lex.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/lilypond.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/literate-curry.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/literate-haskell.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/logcat.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/logtalk.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/lpc.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/lsl.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/lua.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/m3u.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/m4.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/mab.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/magma.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/makefile.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/mako.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/mandoc.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/markdown.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/mason.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/mathematica.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/matlab.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/maxima.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/mediawiki.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/mel.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/mergetagtext.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/meson.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/metafont.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/metamath.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/mib.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/mips.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/modelica.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/modelines.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/modula-2-iso-only.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/modula-2-pim-only.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/modula-2-r10-only.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/modula-2.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/monobasic.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/mup.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/mustache.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/nagios.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/nasm.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/nemerle.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/nesc.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/ninja.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/noweb.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/nsis.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/objectivec.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/objectivecpp.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/ocaml.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/ocamllex.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/ocamlyacc.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/octave.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/oors.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/opal.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/opencl.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/openscad.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/pango.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/pascal.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/perl.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/pgn.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/php.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/picsrc.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/pig.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/pike.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/pli.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/ply.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/pony.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/postscript.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/povray.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/powershell.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/ppd.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/praat.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/progress.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/prolog.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/protobuf.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/pug.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/puppet.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/purebasic.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/python.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/q.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/qdocconf.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/qmake.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/qml.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/r.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/rapidq.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/rdoc.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/relaxng.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/relaxngcompact.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/replicode.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/rest.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/rexx.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/rhtml.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/rib.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/rmarkdown.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/roff.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/rpmspec.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/rsiidl.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/rtf.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/ruby.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/rust.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/sass.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/sather.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/scala.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/scheme.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/sci.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/scss.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/sed.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/selinux-cil.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/selinux-fc.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/selinux.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/sgml.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/sieve.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/sisu.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/smali.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/sml.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/spice.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/sql-mysql.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/sql-oracle.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/sql-postgresql.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/sql.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/stan.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/stata.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/stl.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/systemc.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/systemverilog.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/tads3.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/taskjuggler.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/tcl.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/tcsh.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/template-toolkit.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/texinfo.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/textile.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/tibasic.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/tiger.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/toml.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/txt2tags.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/typescript-react.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/typescript.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/uscript.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/vala.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/valgrind-suppression.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/varnish.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/varnish4.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/varnishcc.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/varnishcc4.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/varnishtest.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/varnishtest4.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/vcard.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/velocity.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/vera.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/verilog.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/vhdl.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/vrml.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/wavefront-obj.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/wayland-trace.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/winehq.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/wml.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/xharbour.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/xml.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/xmldebug.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/xonotic-console.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/xorg.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/xslt.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/xul.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/yacas.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/yacc.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/yaml.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/yang.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/zonnon.xml create mode 100644 src/data/extra/syntax-highlighting/syntax/zsh.xml create mode 100644 src/data/extra/syntax-highlighting/themes/breeze-dark.theme create mode 100644 src/data/extra/syntax-highlighting/themes/default.theme create mode 100644 src/data/extra/syntax-highlighting/themes/markdown-default.theme create mode 100644 src/data/extra/syntax-highlighting/themes/printing.theme create mode 100644 src/data/extra/syntax-highlighting/themes/solarized-dark.theme create mode 100644 src/data/extra/syntax-highlighting/themes/solarized-light.theme create mode 100644 src/data/extra/themes/native/editor-highlight.theme create mode 100644 src/data/extra/themes/native/highlight.css create mode 100644 src/data/extra/themes/native/interface.qss create mode 100644 src/data/extra/themes/native/palette.json create mode 100644 src/data/extra/themes/native/text-editor.theme create mode 100644 src/data/extra/themes/native/web.css create mode 100644 src/data/extra/web/css/globalstyles.css create mode 100644 src/data/extra/web/css/imageviewer.css create mode 100644 src/data/extra/web/css/markdownit.css create mode 100644 src/data/extra/web/js/computed-style-to-inline-style.js create mode 100644 src/data/extra/web/js/crosscopy.js create mode 100644 src/data/extra/web/js/easyaccess.js create mode 100644 src/data/extra/web/js/eventemitter.js create mode 100644 src/data/extra/web/js/flowchart.js/README.md create mode 100644 src/data/extra/web/js/flowchart.js/flowchart.min.js create mode 100644 src/data/extra/web/js/flowchart.js/raphael.min.js create mode 100644 src/data/extra/web/js/flowchartjs.js create mode 100644 src/data/extra/web/js/graphcache.js create mode 100644 src/data/extra/web/js/graphpreviewer.js create mode 100644 src/data/extra/web/js/graphrenderer.js create mode 100644 src/data/extra/web/js/graphviz.js create mode 100644 src/data/extra/web/js/imageviewer.js create mode 100644 src/data/extra/web/js/lrucache.js create mode 100644 src/data/extra/web/js/markdown-it/README.md create mode 100644 src/data/extra/web/js/markdown-it/markdown-it-container.min.js create mode 100644 src/data/extra/web/js/markdown-it/markdown-it-emoji.min.js create mode 100644 src/data/extra/web/js/markdown-it/markdown-it-footnote.min.js create mode 100644 src/data/extra/web/js/markdown-it/markdown-it-front-matter.js create mode 100644 src/data/extra/web/js/markdown-it/markdown-it-headinganchor.js create mode 100644 src/data/extra/web/js/markdown-it/markdown-it-imsize.min.js create mode 100644 src/data/extra/web/js/markdown-it/markdown-it-inject-linenumbers.js create mode 100644 src/data/extra/web/js/markdown-it/markdown-it-sub.min.js create mode 100644 src/data/extra/web/js/markdown-it/markdown-it-sup.min.js create mode 100644 src/data/extra/web/js/markdown-it/markdown-it-task-lists.js create mode 100644 src/data/extra/web/js/markdown-it/markdown-it-texmath.js create mode 100644 src/data/extra/web/js/markdown-it/markdown-it-xss.min.js create mode 100644 src/data/extra/web/js/markdown-it/markdown-it.min.js create mode 100644 src/data/extra/web/js/markdownit.js create mode 100644 src/data/extra/web/js/markdownviewer.js create mode 100644 src/data/extra/web/js/mathjax.js create mode 100644 src/data/extra/web/js/mermaid.js create mode 100644 src/data/extra/web/js/mermaid/README.md create mode 100644 src/data/extra/web/js/mermaid/mermaid.min.js create mode 100644 src/data/extra/web/js/nodelinemapper.js create mode 100644 src/data/extra/web/js/plantuml.js create mode 100644 src/data/extra/web/js/plantuml/README.md create mode 100644 src/data/extra/web/js/plantuml/synchro2.js create mode 100644 src/data/extra/web/js/plantuml/zopfli.raw.min.js create mode 100644 src/data/extra/web/js/prism.js create mode 100644 src/data/extra/web/js/prism/README.md create mode 100644 src/data/extra/web/js/prism/clipboard.min.js create mode 100644 src/data/extra/web/js/prism/prism.min.js create mode 100644 src/data/extra/web/js/qwebchannel.js create mode 100644 src/data/extra/web/js/svg-to-image.js create mode 100644 src/data/extra/web/js/turndown.js create mode 100644 src/data/extra/web/js/turndown/README.md create mode 100644 src/data/extra/web/js/turndown/turndown-plugin-gfm.js create mode 100644 src/data/extra/web/js/turndown/turndown.js create mode 100644 src/data/extra/web/js/utils.js create mode 100644 src/data/extra/web/js/viz.js/README.md create mode 100644 src/data/extra/web/js/viz.js/lite.render.js create mode 100644 src/data/extra/web/js/viz.js/viz.js create mode 100644 src/data/extra/web/js/vnotex.js create mode 100644 src/data/extra/web/js/vxworker.js create mode 100644 src/data/extra/web/js/wavedrom.js create mode 100644 src/data/extra/web/js/wavedrom/README.md create mode 100644 src/data/extra/web/js/wavedrom/theme-default.js create mode 100644 src/data/extra/web/js/wavedrom/wavedrom.min.js create mode 100644 src/data/extra/web/markdownviewertemplate.html create mode 100644 src/main.cpp create mode 100644 src/src.pro create mode 100644 src/utils/clipboardutils.cpp create mode 100644 src/utils/clipboardutils.h create mode 100644 src/utils/docsutils.cpp create mode 100644 src/utils/docsutils.h create mode 100644 src/utils/fileutils.cpp create mode 100644 src/utils/fileutils.h create mode 100644 src/utils/htmlutils.cpp create mode 100644 src/utils/htmlutils.h create mode 100644 src/utils/iconutils.cpp create mode 100644 src/utils/iconutils.h create mode 100644 src/utils/pathutils.cpp create mode 100644 src/utils/pathutils.h create mode 100644 src/utils/textutils.cpp create mode 100644 src/utils/textutils.h create mode 100644 src/utils/urldragdroputils.cpp create mode 100644 src/utils/urldragdroputils.h create mode 100644 src/utils/utils.cpp create mode 100644 src/utils/utils.h create mode 100644 src/utils/utils.pri create mode 100644 src/utils/widgetutils.cpp create mode 100644 src/utils/widgetutils.h create mode 100644 src/widgets/attachmentdragdropareaindicator.cpp create mode 100644 src/widgets/attachmentdragdropareaindicator.h create mode 100644 src/widgets/attachmentpopup.cpp create mode 100644 src/widgets/attachmentpopup.h create mode 100644 src/widgets/biaction.cpp create mode 100644 src/widgets/biaction.h create mode 100644 src/widgets/dialogs/deleteconfirmdialog.cpp create mode 100644 src/widgets/dialogs/deleteconfirmdialog.h create mode 100644 src/widgets/dialogs/dialog.cpp create mode 100644 src/widgets/dialogs/dialog.h create mode 100644 src/widgets/dialogs/filepropertiesdialog.cpp create mode 100644 src/widgets/dialogs/filepropertiesdialog.h create mode 100644 src/widgets/dialogs/folderfilesfilterwidget.cpp create mode 100644 src/widgets/dialogs/folderfilesfilterwidget.h create mode 100644 src/widgets/dialogs/folderpropertiesdialog.cpp create mode 100644 src/widgets/dialogs/folderpropertiesdialog.h create mode 100644 src/widgets/dialogs/imageinsertdialog.cpp create mode 100644 src/widgets/dialogs/imageinsertdialog.h create mode 100644 src/widgets/dialogs/importfolderdialog.cpp create mode 100644 src/widgets/dialogs/importfolderdialog.h create mode 100644 src/widgets/dialogs/importfolderutils.cpp create mode 100644 src/widgets/dialogs/importfolderutils.h create mode 100644 src/widgets/dialogs/importlegacynotebookdialog.cpp create mode 100644 src/widgets/dialogs/importlegacynotebookdialog.h create mode 100644 src/widgets/dialogs/importnotebookdialog.cpp create mode 100644 src/widgets/dialogs/importnotebookdialog.h create mode 100644 src/widgets/dialogs/legacynotebookutils.cpp create mode 100644 src/widgets/dialogs/legacynotebookutils.h create mode 100644 src/widgets/dialogs/linkinsertdialog.cpp create mode 100644 src/widgets/dialogs/linkinsertdialog.h create mode 100644 src/widgets/dialogs/managenotebooksdialog.cpp create mode 100644 src/widgets/dialogs/managenotebooksdialog.h create mode 100644 src/widgets/dialogs/newfolderdialog.cpp create mode 100644 src/widgets/dialogs/newfolderdialog.h create mode 100644 src/widgets/dialogs/newnotebookdialog.cpp create mode 100644 src/widgets/dialogs/newnotebookdialog.h create mode 100644 src/widgets/dialogs/newnotebookfromfolderdialog.cpp create mode 100644 src/widgets/dialogs/newnotebookfromfolderdialog.h create mode 100644 src/widgets/dialogs/newnotedialog.cpp create mode 100644 src/widgets/dialogs/newnotedialog.h create mode 100644 src/widgets/dialogs/nodeinfowidget.cpp create mode 100644 src/widgets/dialogs/nodeinfowidget.h create mode 100644 src/widgets/dialogs/nodelabelwithupbutton.cpp create mode 100644 src/widgets/dialogs/nodelabelwithupbutton.h create mode 100644 src/widgets/dialogs/notebookinfowidget.cpp create mode 100644 src/widgets/dialogs/notebookinfowidget.h create mode 100644 src/widgets/dialogs/notepropertiesdialog.cpp create mode 100644 src/widgets/dialogs/notepropertiesdialog.h create mode 100644 src/widgets/dialogs/scrolldialog.cpp create mode 100644 src/widgets/dialogs/scrolldialog.h create mode 100644 src/widgets/dialogs/selectdialog.cpp create mode 100644 src/widgets/dialogs/selectdialog.h create mode 100644 src/widgets/dialogs/selectionitemwidget.cpp create mode 100644 src/widgets/dialogs/selectionitemwidget.h create mode 100644 src/widgets/dialogs/settings/appearancepage.cpp create mode 100644 src/widgets/dialogs/settings/appearancepage.h create mode 100644 src/widgets/dialogs/settings/editorpage.cpp create mode 100644 src/widgets/dialogs/settings/editorpage.h create mode 100644 src/widgets/dialogs/settings/generalpage.cpp create mode 100644 src/widgets/dialogs/settings/generalpage.h create mode 100644 src/widgets/dialogs/settings/markdowneditorpage.cpp create mode 100644 src/widgets/dialogs/settings/markdowneditorpage.h create mode 100644 src/widgets/dialogs/settings/settingsdialog.cpp create mode 100644 src/widgets/dialogs/settings/settingsdialog.h create mode 100644 src/widgets/dialogs/settings/settingspage.cpp create mode 100644 src/widgets/dialogs/settings/settingspage.h create mode 100644 src/widgets/dialogs/settings/texteditorpage.cpp create mode 100644 src/widgets/dialogs/settings/texteditorpage.h create mode 100644 src/widgets/dragdropareaindicator.cpp create mode 100644 src/widgets/dragdropareaindicator.h create mode 100644 src/widgets/editors/editormarkdownvieweradapter.cpp create mode 100644 src/widgets/editors/editormarkdownvieweradapter.h create mode 100644 src/widgets/editors/markdowneditor.cpp create mode 100644 src/widgets/editors/markdowneditor.h create mode 100644 src/widgets/editors/markdownviewer.cpp create mode 100644 src/widgets/editors/markdownviewer.h create mode 100644 src/widgets/editors/markdownvieweradapter.cpp create mode 100644 src/widgets/editors/markdownvieweradapter.h create mode 100644 src/widgets/editors/previewhelper.cpp create mode 100644 src/widgets/editors/previewhelper.h create mode 100644 src/widgets/editors/texteditor.cpp create mode 100644 src/widgets/editors/texteditor.h create mode 100644 src/widgets/editreaddiscardaction.cpp create mode 100644 src/widgets/editreaddiscardaction.h create mode 100644 src/widgets/filesystemviewer.cpp create mode 100644 src/widgets/filesystemviewer.h create mode 100644 src/widgets/findandreplacewidget.cpp create mode 100644 src/widgets/findandreplacewidget.h create mode 100644 src/widgets/fullscreentoggleaction.cpp create mode 100644 src/widgets/fullscreentoggleaction.h create mode 100644 src/widgets/lineedit.cpp create mode 100644 src/widgets/lineedit.h create mode 100644 src/widgets/lineeditdelegate.cpp create mode 100644 src/widgets/lineeditdelegate.h create mode 100644 src/widgets/listwidget.cpp create mode 100644 src/widgets/listwidget.h create mode 100644 src/widgets/mainwindow.cpp create mode 100644 src/widgets/mainwindow.h create mode 100644 src/widgets/markdownviewwindow.cpp create mode 100644 src/widgets/markdownviewwindow.h create mode 100644 src/widgets/messageboxhelper.cpp create mode 100644 src/widgets/messageboxhelper.h create mode 100644 src/widgets/navigationmode.cpp create mode 100644 src/widgets/navigationmode.h create mode 100644 src/widgets/navigationmodemgr.cpp create mode 100644 src/widgets/navigationmodemgr.h create mode 100644 src/widgets/navigationmodewrapper.h create mode 100644 src/widgets/notebookexplorer.cpp create mode 100644 src/widgets/notebookexplorer.h create mode 100644 src/widgets/notebooknodeexplorer.cpp create mode 100644 src/widgets/notebooknodeexplorer.h create mode 100644 src/widgets/notebookselector.cpp create mode 100644 src/widgets/notebookselector.h create mode 100644 src/widgets/outlinepopup.cpp create mode 100644 src/widgets/outlinepopup.h create mode 100644 src/widgets/outlineprovider.cpp create mode 100644 src/widgets/outlineprovider.h create mode 100644 src/widgets/outlineviewer.cpp create mode 100644 src/widgets/outlineviewer.h create mode 100644 src/widgets/propertydefs.cpp create mode 100644 src/widgets/propertydefs.h create mode 100644 src/widgets/qtreewidgetstatecache.h create mode 100644 src/widgets/statusbarhelper.cpp create mode 100644 src/widgets/statusbarhelper.h create mode 100644 src/widgets/textviewwindow.cpp create mode 100644 src/widgets/textviewwindow.h create mode 100644 src/widgets/textviewwindowhelper.h create mode 100644 src/widgets/titlebar.cpp create mode 100644 src/widgets/titlebar.h create mode 100644 src/widgets/toolbarhelper.cpp create mode 100644 src/widgets/toolbarhelper.h create mode 100644 src/widgets/toolbox.cpp create mode 100644 src/widgets/toolbox.h create mode 100644 src/widgets/treeview.cpp create mode 100644 src/widgets/treeview.h create mode 100644 src/widgets/treewidget.cpp create mode 100644 src/widgets/treewidget.h create mode 100644 src/widgets/viewarea.cpp create mode 100644 src/widgets/viewarea.h create mode 100644 src/widgets/viewsplit.cpp create mode 100644 src/widgets/viewsplit.h create mode 100644 src/widgets/viewwindow.cpp create mode 100644 src/widgets/viewwindow.h create mode 100644 src/widgets/viewwindowtoolbarhelper.cpp create mode 100644 src/widgets/viewwindowtoolbarhelper.h create mode 100644 src/widgets/webpage.cpp create mode 100644 src/widgets/webpage.h create mode 100644 src/widgets/webviewer.cpp create mode 100644 src/widgets/webviewer.h create mode 100644 src/widgets/widgets.pri create mode 100644 src/widgets/widgetsfactory.cpp create mode 100644 src/widgets/widgetsfactory.h create mode 100644 tests/common.pri create mode 100644 tests/test_core/test_core.pro create mode 100644 tests/test_core/test_notebook/test_notebook.cpp create mode 100644 tests/test_core/test_notebook/test_notebook.h create mode 100644 tests/test_core/test_notebook/test_notebook.pro create mode 100644 tests/test_core/test_theme/test_theme.cpp create mode 100644 tests/test_core/test_theme/test_theme.h create mode 100644 tests/test_core/test_theme/test_theme.pro create mode 100644 tests/test_utils/test_utils.cpp create mode 100644 tests/test_utils/test_utils.h create mode 100644 tests/test_utils/test_utils.pro create mode 100644 tests/tests.pro create mode 100644 vnotex.pro diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..4ec47412 --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +vnotex.pro.user +vnotex.pro.user.* +.ccls +compile_commands.json +compile_flags.txt +*.plist diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 00000000..8eda0188 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "libs/vtextedit"] + path = libs/vtextedit + url = https://github.com/vnotex/vtextedit.git diff --git a/coc_update.cmd b/coc_update.cmd new file mode 100644 index 00000000..7fac21e8 --- /dev/null +++ b/coc_update.cmd @@ -0,0 +1,33 @@ +@echo off +rem Update .ccls project file for ccls LPS and compile_flags.txt for clangd + +if "%~1"=="" ( + echo missing argument: the location of Qt's include directory + EXIT /B 0 +) + +set qt_inc=%~1 +set qt_inc=%qt_inc:\=\\% + +( + echo clang + echo -fcxx-exceptions + echo -std=c++14 + echo -Isrc\\core + echo -Isrc + echo -Ilibs\\vtextedit\\src\\editor\\include + echo -Ilibs\\vtitlebar\\src + echo -I%qt_inc% + echo -I%qt_inc%\\QtCore + echo -I%qt_inc%\\QtWebEngineWidgets + echo -I%qt_inc%\\QtSvg + echo -I%qt_inc%\\QtPrintSupport + echo -I%qt_inc%\\QtWidgets + echo -I%qt_inc%\\QtWebEngineCore + echo -I%qt_inc%\\QtGui + echo -I%qt_inc%\\QtWebChannel + echo -I%qt_inc%\\QtNetwork + echo -I%qt_inc%\\QtTest +) > ".ccls" + +copy /Y .ccls compile_flags.txt diff --git a/libs/libs.pro b/libs/libs.pro new file mode 100644 index 00000000..1a181bad --- /dev/null +++ b/libs/libs.pro @@ -0,0 +1,5 @@ +TEMPLATE = subdirs + +SUBDIRS += \ + vtextedit \ + vtitlebar diff --git a/libs/vtextedit b/libs/vtextedit new file mode 160000 index 00000000..a75c9b8d --- /dev/null +++ b/libs/vtextedit @@ -0,0 +1 @@ +Subproject commit a75c9b8dd374dd4fed1cfd66b79408ecfea990c9 diff --git a/libs/vtitlebar/src/vtitlebar.cpp b/libs/vtitlebar/src/vtitlebar.cpp new file mode 100644 index 00000000..2b01a98f --- /dev/null +++ b/libs/vtitlebar/src/vtitlebar.cpp @@ -0,0 +1,22 @@ +#include "vtitlebar.h" + +#include +#include + +using namespace vnotex; + +VTitleBar::VTitleBar(QWidget *p_parent) + : QWidget(p_parent) +{ + +} + +void VTitleBar::paintEvent(QPaintEvent *p_event) +{ + QStyleOption opt; + opt.init(this); + QPainter p(this); + style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this); + + QWidget::paintEvent(p_event); +} diff --git a/libs/vtitlebar/src/vtitlebar.h b/libs/vtitlebar/src/vtitlebar.h new file mode 100644 index 00000000..033c4cd9 --- /dev/null +++ b/libs/vtitlebar/src/vtitlebar.h @@ -0,0 +1,19 @@ +#ifndef VTITLEBAR_H +#define VTITLEBAR_H + +#include + +namespace vnotex +{ + class VTitleBar : public QWidget + { + Q_OBJECT + public: + explicit VTitleBar(QWidget *p_parent = nullptr); + + protected: + void paintEvent(QPaintEvent *p_event) Q_DECL_OVERRIDE; + }; +} + +#endif // VTITLEBAR_H diff --git a/libs/vtitlebar/src/vtoolbar.cpp b/libs/vtitlebar/src/vtoolbar.cpp new file mode 100644 index 00000000..ece2d885 --- /dev/null +++ b/libs/vtitlebar/src/vtoolbar.cpp @@ -0,0 +1,118 @@ +#include "vtoolbar.h" + +#include +#include +#include +#include + +using namespace vnotex; + +VToolBar::VToolBar(QWidget *p_parent) + : QToolBar(p_parent), + m_window(p_parent) +{ + setupUI(); + m_window->installEventFilter(this); +} + +VToolBar::VToolBar(const QString &p_title, QWidget *p_parent) + : QToolBar(p_title, p_parent), + m_window(p_parent) +{ + setupUI(); + m_window->installEventFilter(this); +} + +void VToolBar::setupUI() +{ +} + +void VToolBar::mousePressEvent(QMouseEvent *p_event) +{ + QToolBar::mousePressEvent(p_event); + m_lastPos = p_event->pos(); +} + +void VToolBar::mouseDoubleClickEvent(QMouseEvent *p_event) +{ + QToolBar::mouseDoubleClickEvent(p_event); + m_ignoreNextMove = true; + maximizeRestoreWindow(); +} + +void VToolBar::maximizeRestoreWindow() +{ + m_window->isMaximized() ? m_window->showNormal() : m_window->showMaximized(); +} + +void VToolBar::mouseMoveEvent(QMouseEvent *p_event) +{ + auto delta = p_event->pos() - m_lastPos; + if (!m_ignoreNextMove && !m_lastPos.isNull() && (qAbs(delta.x()) > 10 || qAbs(delta.y()) > 10)) { + if (m_window->isMaximized()) { + m_window->showNormal(); + } else { + m_window->move(p_event->globalPos() - m_lastPos); + } + } + QToolBar::mouseMoveEvent(p_event); +} + +void VToolBar::mouseReleaseEvent(QMouseEvent *p_event) +{ + QToolBar::mouseReleaseEvent(p_event); + m_ignoreNextMove = false; + m_lastPos = QPoint(); +} + +void VToolBar::addTitleBarIcons(const QIcon &p_minimizeIcon, + const QIcon &p_maximizeIcon, + const QIcon &p_restoreIcon, + const QIcon &p_closeIcon) +{ + addSeparator(); + + addAction(p_minimizeIcon, tr("Minimize"), + this, [this]() { + m_window->showMinimized(); + }); + + m_maximizeIcon = p_maximizeIcon; + m_restoreIcon = p_restoreIcon; + m_maximizeAct = addAction(p_maximizeIcon, tr("Maximize"), + this, [this]() { + maximizeRestoreWindow(); + }); + + { + auto closeAct = addAction(p_closeIcon, tr("Close"), + this, [this]() { + m_window->close(); + }); + auto btn = static_cast(widgetForAction(closeAct)); + btn->setProperty("DangerousButton", true); + } + + updateMaximizeAct(); +} + +bool VToolBar::eventFilter(QObject *p_obj, QEvent *p_event) +{ + if (p_obj == m_window) { + if (p_event->type() == QEvent::WindowStateChange) { + updateMaximizeAct(); + } + } + return QToolBar::eventFilter(p_obj, p_event); +} + +void VToolBar::updateMaximizeAct() +{ + if (m_window->isMaximized()) { + m_maximizeAct->setIcon(m_restoreIcon); + m_maximizeAct->setText(tr("Restore Down")); + } else { + m_maximizeAct->setIcon(m_maximizeIcon); + m_maximizeAct->setText(tr("Maximize")); + } +} diff --git a/libs/vtitlebar/src/vtoolbar.h b/libs/vtitlebar/src/vtoolbar.h new file mode 100644 index 00000000..190c8743 --- /dev/null +++ b/libs/vtitlebar/src/vtoolbar.h @@ -0,0 +1,54 @@ +#ifndef VTOOLBAR_H +#define VTOOLBAR_H + +#include +#include + +namespace vnotex +{ + class VToolBar : public QToolBar + { + Q_OBJECT + public: + explicit VToolBar(QWidget *p_parent = nullptr); + + VToolBar(const QString &p_title, QWidget *p_parent = nullptr); + + void addTitleBarIcons(const QIcon &p_minimizeIcon, + const QIcon &p_maximizeIcon, + const QIcon &p_restoreIcon, + const QIcon &p_closeIcon); + + protected: + void mousePressEvent(QMouseEvent *p_event) Q_DECL_OVERRIDE; + + void mouseReleaseEvent(QMouseEvent *p_event) Q_DECL_OVERRIDE; + + void mouseMoveEvent(QMouseEvent *p_event) Q_DECL_OVERRIDE; + + void mouseDoubleClickEvent(QMouseEvent *p_event) Q_DECL_OVERRIDE; + + bool eventFilter(QObject *p_obj, QEvent *p_event) Q_DECL_OVERRIDE; + + private: + void setupUI(); + + void maximizeRestoreWindow(); + + void updateMaximizeAct(); + + QPoint m_lastPos; + + bool m_ignoreNextMove = false; + + QWidget *m_window = nullptr; + + QAction *m_maximizeAct = nullptr; + + QIcon m_maximizeIcon; + + QIcon m_restoreIcon; + }; +} + +#endif // VTOOLBAR_H diff --git a/libs/vtitlebar/vtitlebar.pro b/libs/vtitlebar/vtitlebar.pro new file mode 100644 index 00000000..7ff6284e --- /dev/null +++ b/libs/vtitlebar/vtitlebar.pro @@ -0,0 +1,16 @@ +QT += core gui widgets + +TARGET = vtitlebar + +TEMPLATE = lib + +# CONFIG += warn_off +CONFIG += staticlib + +SOURCES += \ + src/vtitlebar.cpp \ + src/vtoolbar.cpp + +HEADERS += \ + src/vtitlebar.h \ + src/vtoolbar.h diff --git a/libs/vtitlebar/vtitlebar_export.pri b/libs/vtitlebar/vtitlebar_export.pri new file mode 100644 index 00000000..a6838de7 --- /dev/null +++ b/libs/vtitlebar/vtitlebar_export.pri @@ -0,0 +1,17 @@ +INCLUDEPATH *= $$PWD/src + +DEPENDPATH *= $$PWD/src + +OUT_FOLDER = $$absolute_path($$relative_path($$PWD, $$_PRO_FILE_PWD_), $$OUT_PWD) +win32:CONFIG(release, debug|release) { + LIBS += $$OUT_FOLDER/release/vtitlebar.lib + # For static library, we need to add this depends to let Qt re-build the target + # when there is a change in the library. + PRE_TARGETDEPS += $$OUT_FOLDER/release/vtitlebar.lib +} else:win32:CONFIG(debug, debug|release) { + LIBS += $$OUT_FOLDER/debug/vtitlebar.lib + PRE_TARGETDEPS += $$OUT_FOLDER/debug/vtitlebar.lib +} else:unix { + LIBS += $$OUT_FOLDER/libvtitlebar.a + PRE_TARGETDEPS += $$OUT_FOLDER/libvtitlebar.a +} diff --git a/src/core/buffer/buffer.cpp b/src/core/buffer/buffer.cpp new file mode 100644 index 00000000..624e884b --- /dev/null +++ b/src/core/buffer/buffer.cpp @@ -0,0 +1,552 @@ +#include "buffer.h" + +#include + +#include +#include +#include +#include + +#include +#include + +#include "bufferprovider.h" +#include "exception.h" + +using namespace vnotex; + +static vnotex::ID generateBufferID() +{ + static vnotex::ID id = 0; + return ++id; +} + +Buffer::Buffer(const BufferParameters &p_parameters, + QObject *p_parent) + : QObject(p_parent), + m_provider(p_parameters.m_provider), + c_id(generateBufferID()), + m_readOnly(m_provider->isReadOnly()) +{ + m_autoSaveTimer = new QTimer(this); + m_autoSaveTimer->setSingleShot(true); + m_autoSaveTimer->setInterval(1000); + connect(m_autoSaveTimer, &QTimer::timeout, + this, &Buffer::autoSave); + + readContent(); + + checkBackupFileOfPreviousSession(); +} + +Buffer::~Buffer() +{ + Q_ASSERT(m_attachedViewWindowCount == 0); + Q_ASSERT(!m_viewWindowToSync); + Q_ASSERT(!isModified()); + Q_ASSERT(m_backupFilePath.isEmpty()); +} + +int Buffer::getAttachViewWindowCount() const +{ + return m_attachedViewWindowCount; +} + +void Buffer::attachViewWindow(ViewWindow *p_win) +{ + Q_UNUSED(p_win); + Q_ASSERT(!(m_state & StateFlag::Discarded)); + ++m_attachedViewWindowCount; +} + +void Buffer::detachViewWindow(ViewWindow *p_win) +{ + Q_ASSERT(p_win != m_viewWindowToSync); + + --m_attachedViewWindowCount; + Q_ASSERT(m_attachedViewWindowCount >= 0); + + if (m_attachedViewWindowCount == 0) { + emit attachedViewWindowEmpty(); + } +} + +ViewWindow *Buffer::createViewWindow(const QSharedPointer &p_paras, QWidget *p_parent) +{ + auto window = createViewWindowInternal(p_paras, p_parent); + Q_ASSERT(window); + window->attachToBuffer(this); + return window; +} + +bool Buffer::match(const Node *p_node) const +{ + Q_ASSERT(p_node); + return m_provider->match(p_node); +} + +bool Buffer::match(const QString &p_filePath) const +{ + return m_provider->match(p_filePath); +} + +QString Buffer::getName() const +{ + return m_provider->getName(); +} + +QString Buffer::getPath() const +{ + return m_provider->getPath(); +} + +QString Buffer::getContentPath() const +{ + return m_provider->getContentPath(); +} + +QString Buffer::getContentBasePath() const +{ + return PathUtils::parentDirPath(getContentPath()); +} + +ID Buffer::getID() const +{ + return c_id; +} + +const QString &Buffer::getContent() const +{ + const_cast(this)->syncContent(); + return m_content; +} + +void Buffer::setContent(const QString &p_content, int &p_revision) +{ + m_viewWindowToSync = nullptr; + m_content = p_content; + p_revision = ++m_revision; + setModified(true); + m_autoSaveTimer->start(); + emit contentsChanged(); +} + +void Buffer::invalidateContent(const ViewWindow *p_win, + const std::function &p_setRevision) +{ + Q_ASSERT(!m_viewWindowToSync || m_viewWindowToSync == p_win); + ++m_revision; + p_setRevision(m_revision); + m_viewWindowToSync = p_win; + m_autoSaveTimer->start(); + emit contentsChanged(); +} + +int Buffer::getRevision() const +{ + return m_revision; +} + +void Buffer::syncContent(const ViewWindow *p_win) +{ + if (m_viewWindowToSync == p_win) { + syncContent(); + } +} + +void Buffer::syncContent() +{ + if (m_viewWindowToSync) { + // Need to sync content. + m_content = m_viewWindowToSync->getLatestContent(); + m_viewWindowToSync = nullptr; + } +} + +bool Buffer::isModified() const +{ + return m_modified; +} + +void Buffer::setModified(bool p_modified) +{ + if (m_modified == p_modified) { + return; + } + + m_modified = p_modified; + emit modified(m_modified); +} + +bool Buffer::isReadOnly() const +{ + return m_readOnly; +} + +Buffer::OperationCode Buffer::save(bool p_force) +{ + Q_ASSERT(!m_readOnly); + if (m_readOnly) { + return OperationCode::Failed; + } + + if (m_modified + || p_force + || m_state & (StateFlag::FileMissingOnDisk | StateFlag::FileChangedOutside)) { + syncContent(); + + // We do not involve user here to handle file missing and changed outside cases. + // The active ViewWindow will check this periodically. + // Check if file still exists. + if (!p_force && !checkFileExistsOnDisk()) { + qWarning() << "failed to save buffer due to file missing on disk" << getPath(); + return OperationCode::FileMissingOnDisk; + } + + // Check if file is modified outside. + if (!p_force && checkFileChangedOutside()) { + qWarning() << "failed to save buffer due to file changed from outside" << getPath(); + return OperationCode::FileChangedOutside; + } + + m_provider->write(m_content); + setModified(false); + m_state &= ~(StateFlag::FileMissingOnDisk | StateFlag::FileChangedOutside); + } + return OperationCode::Success; +} + +Buffer::OperationCode Buffer::reload() +{ + // Check if file is missing. + if (!checkFileExistsOnDisk()) { + qWarning() << "failed to save buffer due to file missing on disk" << getPath(); + return OperationCode::FileMissingOnDisk; + } + + if (m_modified + || m_state & (StateFlag::FileMissingOnDisk | StateFlag::FileChangedOutside)) { + readContent(); + + emit modified(m_modified); + emit contentsChanged(); + } + return OperationCode::Success; +} + +void Buffer::readContent() +{ + m_content = m_provider->read(); + ++m_revision; + + // Reset state. + m_viewWindowToSync = nullptr; + m_modified = false; +} + +void Buffer::discard() +{ + Q_ASSERT(!(m_state & StateFlag::Discarded)); + Q_ASSERT(m_attachedViewWindowCount == 1); + m_autoSaveTimer->stop(); + m_content.clear(); + m_state |= StateFlag::Discarded; + ++m_revision; + + m_viewWindowToSync = nullptr; + m_modified = false; +} + +void Buffer::close() +{ + // Delete the backup file if exists. + m_autoSaveTimer->stop(); + if (!m_backupFilePath.isEmpty()) { + FileUtils::removeFile(m_backupFilePath); + m_backupFilePath.clear(); + } +} + +QString Buffer::getImageFolderPath() const +{ + return const_cast(this)->m_provider->fetchImageFolderPath(); +} + +QString Buffer::insertImage(const QString &p_srcImagePath, const QString &p_imageFileName) +{ + Q_UNUSED(p_srcImagePath); + Q_UNUSED(p_imageFileName); + Q_ASSERT_X(false, "insertImage", "image insert is not supported"); + return QString(); +} + +QString Buffer::insertImage(const QImage &p_image, const QString &p_imageFileName) +{ + Q_UNUSED(p_image); + Q_UNUSED(p_imageFileName); + Q_ASSERT_X(false, "insertImage", "image insert is not supported"); + return QString(); +} + +void Buffer::removeImage(const QString &p_imagePath) +{ + Q_UNUSED(p_imagePath); + Q_ASSERT_X(false, "removeImage", "image remove is not supported"); +} + +void Buffer::autoSave() +{ + if (m_readOnly) { + m_autoSaveTimer->stop(); + return; + } + + if (m_state & (StateFlag::FileMissingOnDisk | StateFlag::FileChangedOutside)) { + qDebug() << "disable AutoSave due to file missing on disk or changed outside"; + return; + } + Q_ASSERT(!(m_state & StateFlag::Discarded)); + auto policy = ConfigMgr::getInst().getEditorConfig().getAutoSavePolicy(); + switch (policy) { + case EditorConfig::AutoSavePolicy::None: + return; + + case EditorConfig::AutoSavePolicy::AutoSave: + save(false); + break; + + case EditorConfig::AutoSavePolicy::BackupFile: + writeBackupFile(); + break; + } +} + +void Buffer::writeBackupFile() +{ + if (m_backupFilePath.isEmpty()) { + const auto &config = ConfigMgr::getInst().getEditorConfig(); + QString backupDirPath(QDir(getContentBasePath()).filePath(config.getBackupFileDirectory())); + backupDirPath = QDir::cleanPath(backupDirPath); + auto backupFileName = FileUtils::generateFileNameWithSequence(backupDirPath, + getName(), + config.getBackupFileExtension()); + QDir backupDir(backupDirPath); + backupDir.mkpath(backupDirPath); + m_backupFilePath = backupDir.filePath(backupFileName); + } + + Q_ASSERT(m_backupFilePathOfPreviousSession.isEmpty()); + + // Just use FileUtils instead of notebook backend. + FileUtils::writeFile(m_backupFilePath, generateBackupFileHead() + getContent()); +} + +QString Buffer::generateBackupFileHead() const +{ + return QString("vnotex_backup_file %1|").arg(getContentPath()); +} + +void Buffer::checkBackupFileOfPreviousSession() +{ + const auto &config = ConfigMgr::getInst().getEditorConfig(); + if (config.getAutoSavePolicy() != EditorConfig::AutoSavePolicy::BackupFile) { + return; + } + + QString backupDirPath(QDir(getContentBasePath()).filePath(config.getBackupFileDirectory())); + backupDirPath = QDir::cleanPath(backupDirPath); + QDir backupDir(backupDirPath); + QStringList backupFiles; + { + const QString nameFilter = QString("%1*%2").arg(getName(), config.getBackupFileExtension()); + backupFiles = backupDir.entryList(QStringList(nameFilter), + QDir::Files | QDir::Hidden | QDir::NoSymLinks | QDir::NoDotAndDotDot); + } + + if (backupFiles.isEmpty()) { + return; + } + + for (const auto &file : backupFiles) { + const auto filePath = backupDir.filePath(file); + if (isBackupFileOfBuffer(filePath)) { + const auto backupContent = readBackupFile(filePath); + if (backupContent == getContent()) { + // Found backup file with identical content. + // Just discard the backup file. + FileUtils::removeFile(filePath); + qInfo() << "delete identical backup file of previous session" << filePath; + } else { + m_backupFilePathOfPreviousSession = filePath; + qInfo() << "found backup file of previous session" << filePath; + } + break; + } + } +} + +bool Buffer::isBackupFileOfBuffer(const QString &p_file) const +{ + QFile file(p_file); + if (!file.open(QFile::ReadOnly | QIODevice::Text)) { + return false; + } + + QTextStream st(&file); + const auto head = st.readLine(); + return head.startsWith(generateBackupFileHead()); +} + +const QString &Buffer::getBackupFileOfPreviousSession() const +{ + return m_backupFilePathOfPreviousSession; +} + +QString Buffer::readBackupFile(const QString &p_filePath) +{ + auto content = FileUtils::readTextFile(p_filePath); + return content.mid(content.indexOf(QLatin1Char('|')) + 1); +} + +void Buffer::discardBackupFileOfPreviousSession() +{ + Q_ASSERT(!m_backupFilePathOfPreviousSession.isEmpty()); + + FileUtils::removeFile(m_backupFilePathOfPreviousSession); + qInfo() << "discard backup file of previous session" << m_backupFilePathOfPreviousSession; + m_backupFilePathOfPreviousSession.clear(); +} + +void Buffer::recoverFromBackupFileOfPreviousSession() +{ + Q_ASSERT(!m_backupFilePathOfPreviousSession.isEmpty()); + + m_content = readBackupFile(m_backupFilePathOfPreviousSession); + m_provider->write(m_content); + ++m_revision; + + FileUtils::removeFile(m_backupFilePathOfPreviousSession); + qInfo() << "recover from backup file of previous session" << m_backupFilePathOfPreviousSession; + m_backupFilePathOfPreviousSession.clear(); + + // Reset state. + m_viewWindowToSync = nullptr; + m_modified = false; + + emit modified(m_modified); + emit contentsChanged(); +} + +bool Buffer::isChildOf(const Node *p_node) const +{ + return m_provider->isChildOf(p_node); +} + +bool Buffer::isAttachmentSupported() const +{ + return !m_readOnly && m_provider->isAttachmentSupported(); +} + +bool Buffer::hasAttachment() const +{ + if (!isAttachmentSupported()) { + return false; + } + + if (m_provider->getAttachmentFolder().isEmpty()) { + return false; + } + + QDir dir(getAttachmentFolderPath()); + return !dir.isEmpty(); +} + +QString Buffer::getAttachmentFolderPath() const +{ + Q_ASSERT(isAttachmentSupported()); + return const_cast(this)->m_provider->fetchAttachmentFolderPath(); +} + +QStringList Buffer::addAttachment(const QString &p_destFolderPath, const QStringList &p_files) +{ + if (p_files.isEmpty()) { + return QStringList(); + } + auto destFolderPath = p_destFolderPath.isEmpty() ? getAttachmentFolderPath() : p_destFolderPath; + Q_ASSERT(PathUtils::pathContains(getAttachmentFolderPath(), destFolderPath)); + auto files = m_provider->addAttachment(destFolderPath, p_files); + if (!files.isEmpty()) { + emit attachmentChanged(); + } + return files; +} + +QString Buffer::newAttachmentFile(const QString &p_destFolderPath, const QString &p_name) +{ + Q_ASSERT(PathUtils::pathContains(getAttachmentFolderPath(), p_destFolderPath)); + auto filePath = m_provider->newAttachmentFile(p_destFolderPath, p_name); + emit attachmentChanged(); + return filePath; +} + +QString Buffer::newAttachmentFolder(const QString &p_destFolderPath, const QString &p_name) +{ + Q_ASSERT(PathUtils::pathContains(getAttachmentFolderPath(), p_destFolderPath)); + auto folderPath = m_provider->newAttachmentFolder(p_destFolderPath, p_name); + emit attachmentChanged(); + return folderPath; +} + +QString Buffer::renameAttachment(const QString &p_path, const QString &p_name) +{ + Q_ASSERT(PathUtils::pathContains(getAttachmentFolderPath(), p_path)); + return m_provider->renameAttachment(p_path, p_name); +} + +void Buffer::removeAttachment(const QStringList &p_paths) +{ + m_provider->removeAttachment(p_paths); + emit attachmentChanged(); +} + +bool Buffer::isAttachment(const QString &p_path) const +{ + return PathUtils::pathContains(getAttachmentFolderPath(), p_path); +} + +Buffer::ProviderType Buffer::getProviderType() const +{ + return m_provider->getType(); +} + +Node *Buffer::getNode() const +{ + return m_provider->getNode(); +} + +bool Buffer::checkFileExistsOnDisk() +{ + if (m_provider->checkFileExistsOnDisk()) { + m_state &= ~StateFlag::FileMissingOnDisk; + return true; + } else { + m_state |= StateFlag::FileMissingOnDisk; + return false; + } +} + +bool Buffer::checkFileChangedOutside() +{ + if (m_provider->checkFileChangedOutside()) { + m_state |= StateFlag::FileChangedOutside; + return true; + } else { + m_state &= ~StateFlag::FileChangedOutside; + return false; + } +} + +Buffer::StateFlags Buffer::state() const +{ + return m_state; +} diff --git a/src/core/buffer/buffer.h b/src/core/buffer/buffer.h new file mode 100644 index 00000000..3ef1a81a --- /dev/null +++ b/src/core/buffer/buffer.h @@ -0,0 +1,241 @@ +#ifndef BUFFER_H +#define BUFFER_H + +#include +#include + +#include + +#include + +class QWidget; +class QTimer; + +namespace vnotex +{ + class Node; + class Buffer; + class ViewWindow; + struct FileOpenParameters; + class BufferProvider; + + struct BufferParameters + { + QSharedPointer m_provider; + }; + + class Buffer : public QObject + { + Q_OBJECT + public: + enum class ProviderType + { + Internal, + External + }; + + enum class OperationCode + { + Success, + FileMissingOnDisk, + FileChangedOutside, + Failed + }; + + enum StateFlag + { + Normal = 0, + FileMissingOnDisk = 0x1, + FileChangedOutside = 0x2, + Discarded = 0x4 + }; + Q_DECLARE_FLAGS(StateFlags, StateFlag); + + Buffer(const BufferParameters &p_parameters, + QObject *p_parent = nullptr); + + virtual ~Buffer(); + + int getAttachViewWindowCount() const; + + void attachViewWindow(ViewWindow *p_win); + void detachViewWindow(ViewWindow *p_win); + + // Create a view window to show the content of this buffer. + // Attach the created view window to this buffer. + ViewWindow *createViewWindow(const QSharedPointer &p_paras, QWidget *p_parent); + + // Whether this buffer matches @p_node. + bool match(const Node *p_node) const; + + // Whether this buffer matches @p_filePath. + bool match(const QString &p_filePath) const; + + // Buffer name. + QString getName() const; + + QString getPath() const; + + // In some cases, getPath() may point to a ocntainer containting all the stuffs. + // getContentPath() will return the real path to the file providing the content. + QString getContentPath() const; + + // Get the base path to resolve resources. + QString getContentBasePath() const; + + ID getID() const; + + // Get buffer content. + // It may differ from the content on disk. + // For performance, we need to sync the content with ViewWindow before returning + // the latest content. + const QString &getContent() const; + + // @p_revision will be set before contentsChanged is emitted. + void setContent(const QString &p_content, int &p_revision); + + // Invalidate the content of buffer. + // Need to sync with @p_win to get the latest content. + // @p_setRevision will be called to set revision before contentsChanged is emitted. + void invalidateContent(const ViewWindow *p_win, + const std::function &p_setRevision); + + // Sync content with @p_win if @p_win is the window needed to sync. + void syncContent(const ViewWindow *p_win); + + int getRevision() const; + + bool isModified() const; + void setModified(bool p_modified); + + bool isReadOnly() const; + + // Save buffer content to file. + OperationCode save(bool p_force); + + // Discard changes and reload file. + OperationCode reload(); + + // Discard the buffer which will invalidate the buffer. + void discard(); + + // Buffer is about to be deleted. + void close(); + + // Insert image from @p_srcImagePath. + // Return inserted image file path. + virtual QString insertImage(const QString &p_srcImagePath, const QString &p_imageFileName); + + virtual QString insertImage(const QImage &p_image, const QString &p_imageFileName); + + virtual void removeImage(const QString &p_imagePath); + + const QString &getBackupFileOfPreviousSession() const; + + void discardBackupFileOfPreviousSession(); + + void recoverFromBackupFileOfPreviousSession(); + + // Whether this buffer's provider is a child of @p_node or an attachment of @p_node. + bool isChildOf(const Node *p_node) const; + + Node *getNode() const; + + bool isAttachmentSupported() const; + + bool hasAttachment() const; + + QString getAttachmentFolderPath() const; + + // @p_destFolderPath: folder path locating in attachment folder. Use the root folder if empty. + QStringList addAttachment(const QString &p_destFolderPath, const QStringList &p_files); + + QString newAttachmentFile(const QString &p_destFolderPath, const QString &p_name); + + QString newAttachmentFolder(const QString &p_destFolderPath, const QString &p_name); + + QString renameAttachment(const QString &p_path, const QString &p_name); + + void removeAttachment(const QStringList &p_paths); + + // Judge whether file @p_path is attachment. + bool isAttachment(const QString &p_path) const; + + ProviderType getProviderType() const; + + bool checkFileExistsOnDisk(); + + bool checkFileChangedOutside(); + + StateFlags state() const; + + static QString readBackupFile(const QString &p_filePath); + + signals: + void attachedViewWindowEmpty(); + + void modified(bool p_modified); + + void contentsChanged(); + + void nameChanged(); + + void attachmentChanged(); + + protected: + virtual ViewWindow *createViewWindowInternal(const QSharedPointer &p_paras, QWidget *p_parent) = 0; + + QSharedPointer m_provider; + + private slots: + void autoSave(); + + private: + void syncContent(); + + void readContent(); + + // Get the path of the image folder. + QString getImageFolderPath() const; + + void writeBackupFile(); + + // Generate backup file head. + QString generateBackupFileHead() const; + + void checkBackupFileOfPreviousSession(); + + bool isBackupFileOfBuffer(const QString &p_file) const; + + // Will be assigned uniquely once created. + const ID c_id = 0; + + // Revision of contents. + int m_revision = 0; + + // If the buffer is modified, m_content reflect the latest changes instead + // of the file content. + QString m_content; + + bool m_readOnly = false; + + bool m_modified = false; + + int m_attachedViewWindowCount = 0; + + const ViewWindow *m_viewWindowToSync = nullptr; + + // Managed by QObject. + QTimer *m_autoSaveTimer = nullptr; + + QString m_backupFilePath; + + QString m_backupFilePathOfPreviousSession; + + StateFlags m_state = StateFlag::Normal; + }; +} // ns vnotex + +Q_DECLARE_OPERATORS_FOR_FLAGS(vnotex::Buffer::StateFlags) + +#endif // BUFFER_H diff --git a/src/core/buffer/buffer.pri b/src/core/buffer/buffer.pri new file mode 100644 index 00000000..c5c5ffec --- /dev/null +++ b/src/core/buffer/buffer.pri @@ -0,0 +1,22 @@ +SOURCES += \ + $$PWD/buffer.cpp \ + $$PWD/bufferprovider.cpp \ + $$PWD/filebufferprovider.cpp \ + $$PWD/markdownbuffer.cpp \ + $$PWD/markdownbufferfactory.cpp \ + $$PWD/filetypehelper.cpp \ + $$PWD/nodebufferprovider.cpp \ + $$PWD/textbuffer.cpp \ + $$PWD/textbufferfactory.cpp + +HEADERS += \ + $$PWD/bufferprovider.h \ + $$PWD/buffer.h \ + $$PWD/filebufferprovider.h \ + $$PWD/ibufferfactory.h \ + $$PWD/markdownbuffer.h \ + $$PWD/markdownbufferfactory.h \ + $$PWD/filetypehelper.h \ + $$PWD/nodebufferprovider.h \ + $$PWD/textbuffer.h \ + $$PWD/textbufferfactory.h diff --git a/src/core/buffer/bufferprovider.cpp b/src/core/buffer/bufferprovider.cpp new file mode 100644 index 00000000..86216668 --- /dev/null +++ b/src/core/buffer/bufferprovider.cpp @@ -0,0 +1,24 @@ +#include "bufferprovider.h" + +#include + +using namespace vnotex; + +bool BufferProvider::checkFileExistsOnDisk() const +{ + return QFileInfo::exists(getContentPath()); +} + +QDateTime BufferProvider::getLastModifiedFromFile() const +{ + return QFileInfo(getContentPath()).lastModified(); +} + +bool BufferProvider::checkFileChangedOutside() const +{ + QFileInfo info(getContentPath()); + if (!info.exists() || m_lastModified != info.lastModified()) { + return true; + } + return false; +} diff --git a/src/core/buffer/bufferprovider.h b/src/core/buffer/bufferprovider.h new file mode 100644 index 00000000..b698b5a2 --- /dev/null +++ b/src/core/buffer/bufferprovider.h @@ -0,0 +1,82 @@ +#ifndef BUFFERPROVIDER_H +#define BUFFERPROVIDER_H + +#include +#include + +#include "buffer.h" + +namespace vnotex +{ + class Node; + + // Content provider for Buffer. + class BufferProvider : public QObject + { + Q_OBJECT + public: + BufferProvider(QObject *p_parent = nullptr) + : QObject(p_parent) + { + } + + virtual ~BufferProvider() {} + + virtual Buffer::ProviderType getType() const = 0; + + virtual bool match(const Node *p_node) const = 0; + + virtual bool match(const QString &p_filePath) const = 0; + + virtual QString getName() const = 0; + + virtual QString getPath() const = 0; + + virtual QString getContentPath() const = 0; + + virtual void write(const QString &p_content) = 0; + + virtual QString read() const = 0; + + virtual QString fetchImageFolderPath() = 0; + + virtual bool isChildOf(const Node *p_node) const = 0; + + virtual Node *getNode() const = 0; + + virtual QString getAttachmentFolder() const = 0; + + virtual QString fetchAttachmentFolderPath() = 0; + + virtual QStringList addAttachment(const QString &p_destFolderPath, const QStringList &p_files) = 0; + + virtual QString newAttachmentFile(const QString &p_destFolderPath, const QString &p_name) = 0; + + virtual QString newAttachmentFolder(const QString &p_destFolderPath, const QString &p_name) = 0; + + virtual QString renameAttachment(const QString &p_path, const QString &p_name) = 0; + + virtual void removeAttachment(const QStringList &p_paths) = 0; + + virtual QString insertImage(const QString &p_srcImagePath, const QString &p_imageFileName) = 0; + + virtual QString insertImage(const QImage &p_image, const QString &p_imageFileName) = 0; + + virtual void removeImage(const QString &p_imagePath) = 0; + + virtual bool isAttachmentSupported() const = 0; + + virtual bool checkFileExistsOnDisk() const; + + virtual bool checkFileChangedOutside() const; + + virtual bool isReadOnly() const = 0; + + protected: + virtual QDateTime getLastModifiedFromFile() const; + + QDateTime m_lastModified; + }; +} + +#endif // BUFFERPROVIDER_H diff --git a/src/core/buffer/filebufferprovider.cpp b/src/core/buffer/filebufferprovider.cpp new file mode 100644 index 00000000..fda059a9 --- /dev/null +++ b/src/core/buffer/filebufferprovider.cpp @@ -0,0 +1,165 @@ +#include "filebufferprovider.h" + +#include + +#include +#include +#include + +using namespace vnotex; + +FileBufferProvider::FileBufferProvider(const QString &p_filePath, + Node *p_nodeAttachedTo, + bool p_readOnly, + QObject *p_parent) + : BufferProvider(p_parent), + c_filePath(p_filePath), + c_nodeAttachedTo(p_nodeAttachedTo), + m_readOnly(p_readOnly) +{ +} + +Buffer::ProviderType FileBufferProvider::getType() const +{ + return Buffer::ProviderType::External; +} + +bool FileBufferProvider::match(const Node *p_node) const +{ + Q_UNUSED(p_node); + return false; +} + +bool FileBufferProvider::match(const QString &p_filePath) const +{ + return PathUtils::areSamePaths(c_filePath, p_filePath); +} + +QString FileBufferProvider::getName() const +{ + return PathUtils::fileName(c_filePath); +} + +QString FileBufferProvider::getPath() const +{ + return c_filePath; +} + +QString FileBufferProvider::getContentPath() const +{ + // TODO. + return getPath(); +} + +void FileBufferProvider::write(const QString &p_content) +{ + FileUtils::writeFile(getContentPath(), p_content); + m_lastModified = getLastModifiedFromFile(); +} + +QString FileBufferProvider::read() const +{ + const_cast(this)->m_lastModified = getLastModifiedFromFile(); + return FileUtils::readTextFile(getContentPath()); +} + +QString FileBufferProvider::fetchImageFolderPath() +{ + auto pa = PathUtils::concatenateFilePath(PathUtils::parentDirPath(getContentPath()), QStringLiteral("vx_images")); + QDir().mkpath(pa); + return pa; +} + +bool FileBufferProvider::isChildOf(const Node *p_node) const +{ + if (c_nodeAttachedTo) { + return c_nodeAttachedTo == p_node || Node::isAncestor(p_node, c_nodeAttachedTo); + } + return false; +} + +QString FileBufferProvider::getAttachmentFolder() const +{ + Q_ASSERT(false); + return QString(); +} + +QString FileBufferProvider::fetchAttachmentFolderPath() +{ + Q_ASSERT(false); + return QString(); +} + +QStringList FileBufferProvider::addAttachment(const QString &p_destFolderPath, const QStringList &p_files) +{ + Q_UNUSED(p_destFolderPath); + Q_UNUSED(p_files); + Q_ASSERT(false); + return QStringList(); +} + +QString FileBufferProvider::newAttachmentFile(const QString &p_destFolderPath, const QString &p_name) +{ + Q_UNUSED(p_destFolderPath); + Q_UNUSED(p_name); + Q_ASSERT(false); + return QString(); +} + +QString FileBufferProvider::newAttachmentFolder(const QString &p_destFolderPath, const QString &p_name) +{ + Q_UNUSED(p_destFolderPath); + Q_UNUSED(p_name); + Q_ASSERT(false); + return QString(); +} + +QString FileBufferProvider::renameAttachment(const QString &p_path, const QString &p_name) +{ + Q_UNUSED(p_path); + Q_UNUSED(p_name); + Q_ASSERT(false); + return QString(); +} + +void FileBufferProvider::removeAttachment(const QStringList &p_paths) +{ + Q_UNUSED(p_paths); + Q_ASSERT(false); +} + +QString FileBufferProvider::insertImage(const QString &p_srcImagePath, const QString &p_imageFileName) +{ + const auto imageFolderPath = fetchImageFolderPath(); + auto destFilePath = FileUtils::renameIfExistsCaseInsensitive(PathUtils::concatenateFilePath(imageFolderPath, p_imageFileName)); + FileUtils::copyFile(p_srcImagePath, destFilePath); + return destFilePath; +} + +QString FileBufferProvider::insertImage(const QImage &p_image, const QString &p_imageFileName) +{ + const auto imageFolderPath = fetchImageFolderPath(); + auto destFilePath = FileUtils::renameIfExistsCaseInsensitive(PathUtils::concatenateFilePath(imageFolderPath, p_imageFileName)); + p_image.save(destFilePath); + return destFilePath; +} + +void FileBufferProvider::removeImage(const QString &p_imagePath) +{ + FileUtils::removeFile(p_imagePath); +} + +bool FileBufferProvider::isAttachmentSupported() const +{ + return false; +} + +Node *FileBufferProvider::getNode() const +{ + return c_nodeAttachedTo; +} + +bool FileBufferProvider::isReadOnly() const +{ + return m_readOnly; +} diff --git a/src/core/buffer/filebufferprovider.h b/src/core/buffer/filebufferprovider.h new file mode 100644 index 00000000..57a849cd --- /dev/null +++ b/src/core/buffer/filebufferprovider.h @@ -0,0 +1,73 @@ +#ifndef FILEBUFFERPROVIDER_H +#define FILEBUFFERPROVIDER_H + +#include "bufferprovider.h" + +namespace vnotex +{ + // Buffer provider based on external file. + class FileBufferProvider : public BufferProvider + { + Q_OBJECT + public: + FileBufferProvider(const QString &p_filePath, + Node *p_nodeAttachedTo, + bool p_readOnly, + QObject *p_parent = nullptr); + + Buffer::ProviderType getType() const Q_DECL_OVERRIDE; + + bool match(const Node *p_node) const Q_DECL_OVERRIDE; + + bool match(const QString &p_filePath) const Q_DECL_OVERRIDE; + + QString getName() const Q_DECL_OVERRIDE; + + QString getPath() const Q_DECL_OVERRIDE; + + QString getContentPath() const Q_DECL_OVERRIDE; + + void write(const QString &p_content) Q_DECL_OVERRIDE; + + QString read() const Q_DECL_OVERRIDE; + + QString fetchImageFolderPath() Q_DECL_OVERRIDE; + + bool isChildOf(const Node *p_node) const Q_DECL_OVERRIDE; + + Node *getNode() const Q_DECL_OVERRIDE; + + QString getAttachmentFolder() const Q_DECL_OVERRIDE; + + QString fetchAttachmentFolderPath() Q_DECL_OVERRIDE; + + QStringList addAttachment(const QString &p_destFolderPath, const QStringList &p_files) Q_DECL_OVERRIDE; + + QString newAttachmentFile(const QString &p_destFolderPath, const QString &p_name) Q_DECL_OVERRIDE; + + QString newAttachmentFolder(const QString &p_destFolderPath, const QString &p_name) Q_DECL_OVERRIDE; + + QString renameAttachment(const QString &p_path, const QString &p_name) Q_DECL_OVERRIDE; + + void removeAttachment(const QStringList &p_paths) Q_DECL_OVERRIDE; + + QString insertImage(const QString &p_srcImagePath, const QString &p_imageFileName) Q_DECL_OVERRIDE; + + QString insertImage(const QImage &p_image, const QString &p_imageFileName) Q_DECL_OVERRIDE; + + void removeImage(const QString &p_imagePath) Q_DECL_OVERRIDE; + + bool isAttachmentSupported() const Q_DECL_OVERRIDE; + + bool isReadOnly() const Q_DECL_OVERRIDE; + + private: + const QString c_filePath; + + Node *c_nodeAttachedTo = nullptr; + + bool m_readOnly = false; + }; +} + +#endif // FILEBUFFERPROVIDER_H diff --git a/src/core/buffer/filetypehelper.cpp b/src/core/buffer/filetypehelper.cpp new file mode 100644 index 00000000..0a8cdab0 --- /dev/null +++ b/src/core/buffer/filetypehelper.cpp @@ -0,0 +1,54 @@ +#include "filetypehelper.h" + +#include + +#include + +using namespace vnotex; + +const FileType FileTypeHelper::s_markdownFileType = "markdown"; + +const FileType FileTypeHelper::s_textFileType = "text"; + +const FileType FileTypeHelper::s_unknownFileType = "unknown"; + +QSharedPointer> FileTypeHelper::s_fileTypeMap; + +FileType FileTypeHelper::fileType(const QString &p_filePath) +{ + Q_ASSERT(!p_filePath.isEmpty()); + + if (!s_fileTypeMap) { + init(); + } + + QFileInfo fi(p_filePath); + auto suffix = fi.suffix().toLower(); + auto it = s_fileTypeMap->find(suffix); + if (it != s_fileTypeMap->end()) { + return it.value(); + } + + // Treat all unknown text files as plain text files. + if (FileUtils::isText(p_filePath)) { + return s_fileTypeMap->value(QStringLiteral("txt")); + } + + return s_unknownFileType; +} + +#define ADD(x, y) s_fileTypeMap->insert((x), (y)) + +void FileTypeHelper::init() +{ + // TODO: load mapping from configuration file. + s_fileTypeMap.reset(new QMap()); + + ADD(QStringLiteral("md"), s_markdownFileType); + ADD(QStringLiteral("markdown"), s_markdownFileType); + ADD(QStringLiteral("mkd"), s_markdownFileType); + + ADD(QStringLiteral("txt"), s_textFileType); + ADD(QStringLiteral("text"), s_textFileType); + ADD(QStringLiteral("log"), s_textFileType); +} diff --git a/src/core/buffer/filetypehelper.h b/src/core/buffer/filetypehelper.h new file mode 100644 index 00000000..25c621a2 --- /dev/null +++ b/src/core/buffer/filetypehelper.h @@ -0,0 +1,33 @@ +#ifndef FILETYPEHELPER_H +#define FILETYPEHELPER_H + +#include +#include +#include + +namespace vnotex +{ + typedef QString FileType; + + // Map file suffix to file type. + class FileTypeHelper + { + public: + FileTypeHelper() = delete; + + static FileType fileType(const QString &p_filePath); + + static const FileType s_markdownFileType; + + static const FileType s_textFileType; + + static const FileType s_unknownFileType; + + private: + static void init(); + + static QSharedPointer> s_fileTypeMap; + }; +} // ns vnotex + +#endif // FILETYPEHELPER_H diff --git a/src/core/buffer/ibufferfactory.h b/src/core/buffer/ibufferfactory.h new file mode 100644 index 00000000..0b250ff9 --- /dev/null +++ b/src/core/buffer/ibufferfactory.h @@ -0,0 +1,24 @@ +#ifndef IBUFFERFACTORY_H +#define IBUFFERFACTORY_H + +#include + +namespace vnotex +{ + class Buffer; + struct BufferParameters; + + // Abstract factory to create buffer. + class IBufferFactory + { + public: + virtual ~IBufferFactory() + { + } + + virtual Buffer *createBuffer(const BufferParameters &p_parameters, + QObject *p_parent) = 0; + }; +} // ns vnotex + +#endif // IBUFFERFACTORY_H diff --git a/src/core/buffer/markdownbuffer.cpp b/src/core/buffer/markdownbuffer.cpp new file mode 100644 index 00000000..d029633e --- /dev/null +++ b/src/core/buffer/markdownbuffer.cpp @@ -0,0 +1,94 @@ +#include "markdownbuffer.h" + +#include + +#include +#include +#include +#include + +using namespace vnotex; + +MarkdownBuffer::MarkdownBuffer(const BufferParameters &p_parameters, + QObject *p_parent) + : Buffer(p_parameters, p_parent) +{ + fetchInitialImages(); +} + +ViewWindow *MarkdownBuffer::createViewWindowInternal(const QSharedPointer &p_paras, QWidget *p_parent) +{ + return new MarkdownViewWindow(p_paras, p_parent); +} + +QString MarkdownBuffer::insertImage(const QString &p_srcImagePath, const QString &p_imageFileName) +{ + return m_provider->insertImage(p_srcImagePath, p_imageFileName); +} + +QString MarkdownBuffer::insertImage(const QImage &p_image, const QString &p_imageFileName) +{ + return m_provider->insertImage(p_image, p_imageFileName); +} + +void MarkdownBuffer::fetchInitialImages() +{ + Q_ASSERT(m_initialImages.isEmpty()); + m_initialImages = vte::MarkdownUtils::fetchImagesFromMarkdownText(getContent(), + getContentBasePath(), + vte::MarkdownLink::TypeFlag::LocalRelativeInternal); +} + +void MarkdownBuffer::addInsertedImage(const QString &p_imagePath, const QString &p_urlInLink) +{ + vte::MarkdownLink link; + link.m_path = p_imagePath; + link.m_urlInLink = p_urlInLink; + link.m_type = vte::MarkdownLink::TypeFlag::LocalRelativeInternal; + m_insertedImages.append(link); +} + +QSet MarkdownBuffer::clearObsoleteImages() +{ + QSet obsoleteImages; + + Q_ASSERT(!isModified()); + const bool discarded = state() & StateFlag::Discarded; + const auto latestImages = + vte::MarkdownUtils::fetchImagesFromMarkdownText(!discarded ? getContent() : m_provider->read(), + getContentBasePath(), + vte::MarkdownLink::TypeFlag::LocalRelativeInternal); + QSet latestImagesPath; + for (const auto &link : latestImages) { + latestImagesPath.insert(PathUtils::normalizePath(link.m_path)); + } + + for (const auto &link : m_insertedImages) { + if (!(link.m_type & vte::MarkdownLink::TypeFlag::LocalRelativeInternal)) { + continue; + } + + if (!latestImagesPath.contains(PathUtils::normalizePath(link.m_path))) { + obsoleteImages.insert(link.m_path); + } + } + + m_insertedImages.clear(); + + for (const auto &link : m_initialImages) { + Q_ASSERT(link.m_type & vte::MarkdownLink::TypeFlag::LocalRelativeInternal); + if (!latestImagesPath.contains(PathUtils::normalizePath(link.m_path))) { + obsoleteImages.insert(link.m_path); + } + } + + m_initialImages = latestImages; + + return obsoleteImages; +} + +void MarkdownBuffer::removeImage(const QString &p_imagePath) +{ + qDebug() << "remove obsolete image" << p_imagePath; + m_provider->removeImage(p_imagePath); +} diff --git a/src/core/buffer/markdownbuffer.h b/src/core/buffer/markdownbuffer.h new file mode 100644 index 00000000..51028bc0 --- /dev/null +++ b/src/core/buffer/markdownbuffer.h @@ -0,0 +1,47 @@ +#ifndef MARKDOWNBUFFER_H +#define MARKDOWNBUFFER_H + +#include "buffer.h" + +#include +#include + +#include + +namespace vnotex +{ + class MarkdownBuffer : public Buffer + { + Q_OBJECT + public: + MarkdownBuffer(const BufferParameters &p_parameters, + QObject *p_parent = nullptr); + + QString insertImage(const QString &p_srcImagePath, const QString &p_imageFileName) Q_DECL_OVERRIDE; + + QString insertImage(const QImage &p_image, const QString &p_imageFileName) Q_DECL_OVERRIDE; + + void removeImage(const QString &p_imagePath) Q_DECL_OVERRIDE; + + void addInsertedImage(const QString &p_imagePath, const QString &p_urlInLink); + + // Clear obsolete images. + // Won't delete images, just return a list of obsolete images path. + // Will re-init m_initialImages and clear m_insertedImages. + QSet clearObsoleteImages(); + + protected: + ViewWindow *createViewWindowInternal(const QSharedPointer &p_paras, QWidget *p_parent) Q_DECL_OVERRIDE; + + private: + void fetchInitialImages(); + + // Images referenced in the file before opening this buffer. + QVector m_initialImages; + + // Images newly inserted during this buffer's lifetime. + QVector m_insertedImages; + }; +} // ns vnotex + +#endif // MARKDOWNBUFFER_H diff --git a/src/core/buffer/markdownbufferfactory.cpp b/src/core/buffer/markdownbufferfactory.cpp new file mode 100644 index 00000000..915f3cf8 --- /dev/null +++ b/src/core/buffer/markdownbufferfactory.cpp @@ -0,0 +1,11 @@ +#include "markdownbufferfactory.h" + +#include "markdownbuffer.h" + +using namespace vnotex; + +Buffer *MarkdownBufferFactory::createBuffer(const BufferParameters &p_parameters, + QObject *p_parent) +{ + return new MarkdownBuffer(p_parameters, p_parent); +} diff --git a/src/core/buffer/markdownbufferfactory.h b/src/core/buffer/markdownbufferfactory.h new file mode 100644 index 00000000..5fbff6c3 --- /dev/null +++ b/src/core/buffer/markdownbufferfactory.h @@ -0,0 +1,17 @@ +#ifndef MARKDOWNBUFFERFACTORY_H +#define MARKDOWNBUFFERFACTORY_H + +#include "ibufferfactory.h" + +namespace vnotex +{ + // Buffer factory for Markdown file. + class MarkdownBufferFactory : public IBufferFactory + { + public: + Buffer *createBuffer(const BufferParameters &p_parameters, + QObject *p_parent) Q_DECL_OVERRIDE; + }; +} // vnotex + +#endif // MARKDOWNBUFFERFACTORY_H diff --git a/src/core/buffer/nodebufferprovider.cpp b/src/core/buffer/nodebufferprovider.cpp new file mode 100644 index 00000000..e83905df --- /dev/null +++ b/src/core/buffer/nodebufferprovider.cpp @@ -0,0 +1,133 @@ +#include "nodebufferprovider.h" + +#include + +#include +#include + +using namespace vnotex; + +NodeBufferProvider::NodeBufferProvider(Node *p_node, QObject *p_parent) + : BufferProvider(p_parent), + m_node(p_node), + m_path(m_node->fetchAbsolutePath()), + m_contentPath(m_node->fetchContentPath()) +{ +} + +Buffer::ProviderType NodeBufferProvider::getType() const +{ + return Buffer::ProviderType::Internal; +} + +bool NodeBufferProvider::match(const Node *p_node) const +{ + return m_node == p_node; +} + +bool NodeBufferProvider::match(const QString &p_filePath) const +{ + return PathUtils::areSamePaths(getPath(), p_filePath); +} + +QString NodeBufferProvider::getName() const +{ + return m_node->getName(); +} + +QString NodeBufferProvider::getPath() const +{ + return m_path; +} + +QString NodeBufferProvider::getContentPath() const +{ + return m_contentPath; +} + +void NodeBufferProvider::write(const QString &p_content) +{ + m_node->write(p_content); + m_lastModified = getLastModifiedFromFile(); +} + +QString NodeBufferProvider::read() const +{ + const_cast(this)->m_lastModified = getLastModifiedFromFile(); + return m_node->read(); +} + +QString NodeBufferProvider::fetchImageFolderPath() +{ + return m_node->fetchImageFolderPath(); +} + +bool NodeBufferProvider::isChildOf(const Node *p_node) const +{ + return Node::isAncestor(p_node, m_node); +} + +QString NodeBufferProvider::getAttachmentFolder() const +{ + return m_node->getAttachmentFolder(); +} + +QString NodeBufferProvider::fetchAttachmentFolderPath() +{ + return m_node->fetchAttachmentFolderPath(); +} + +QStringList NodeBufferProvider::addAttachment(const QString &p_destFolderPath, const QStringList &p_files) +{ + return m_node->addAttachment(p_destFolderPath, p_files); +} + +QString NodeBufferProvider::newAttachmentFile(const QString &p_destFolderPath, const QString &p_name) +{ + return m_node->newAttachmentFile(p_destFolderPath, p_name); +} + +QString NodeBufferProvider::newAttachmentFolder(const QString &p_destFolderPath, const QString &p_name) +{ + return m_node->newAttachmentFolder(p_destFolderPath, p_name); +} + +QString NodeBufferProvider::renameAttachment(const QString &p_path, const QString &p_name) +{ + return m_node->renameAttachment(p_path, p_name); +} + +void NodeBufferProvider::removeAttachment(const QStringList &p_paths) +{ + return m_node->removeAttachment(p_paths); +} + +QString NodeBufferProvider::insertImage(const QString &p_srcImagePath, const QString &p_imageFileName) +{ + return m_node->insertImage(p_srcImagePath, p_imageFileName); +} + +QString NodeBufferProvider::insertImage(const QImage &p_image, const QString &p_imageFileName) +{ + return m_node->insertImage(p_image, p_imageFileName); +} + +void NodeBufferProvider::removeImage(const QString &p_imagePath) +{ + m_node->removeImage(p_imagePath); +} + +bool NodeBufferProvider::isAttachmentSupported() const +{ + return true; +} + +Node *NodeBufferProvider::getNode() const +{ + return m_node; +} + +bool NodeBufferProvider::isReadOnly() const +{ + return m_node->isReadOnly(); +} diff --git a/src/core/buffer/nodebufferprovider.h b/src/core/buffer/nodebufferprovider.h new file mode 100644 index 00000000..ba420661 --- /dev/null +++ b/src/core/buffer/nodebufferprovider.h @@ -0,0 +1,72 @@ +#ifndef NODEBUFFERPROVIDER_H +#define NODEBUFFERPROVIDER_H + +#include "bufferprovider.h" + +namespace vnotex +{ + // Buffer provider based on an internal node. + class NodeBufferProvider : public BufferProvider + { + Q_OBJECT + public: + NodeBufferProvider(Node *p_node, QObject *p_parent = nullptr); + + Buffer::ProviderType getType() const Q_DECL_OVERRIDE; + + bool match(const Node *p_node) const Q_DECL_OVERRIDE; + + bool match(const QString &p_filePath) const Q_DECL_OVERRIDE; + + QString getName() const Q_DECL_OVERRIDE; + + QString getPath() const Q_DECL_OVERRIDE; + + QString getContentPath() const Q_DECL_OVERRIDE; + + void write(const QString &p_content) Q_DECL_OVERRIDE; + + QString read() const Q_DECL_OVERRIDE; + + QString fetchImageFolderPath() Q_DECL_OVERRIDE; + + bool isChildOf(const Node *p_node) const Q_DECL_OVERRIDE; + + Node *getNode() const Q_DECL_OVERRIDE; + + QString getAttachmentFolder() const Q_DECL_OVERRIDE; + + QString fetchAttachmentFolderPath() Q_DECL_OVERRIDE; + + QStringList addAttachment(const QString &p_destFolderPath, const QStringList &p_files) Q_DECL_OVERRIDE; + + QString newAttachmentFile(const QString &p_destFolderPath, const QString &p_name) Q_DECL_OVERRIDE; + + QString newAttachmentFolder(const QString &p_destFolderPath, const QString &p_name) Q_DECL_OVERRIDE; + + QString renameAttachment(const QString &p_path, const QString &p_name) Q_DECL_OVERRIDE; + + void removeAttachment(const QStringList &p_paths) Q_DECL_OVERRIDE; + + QString insertImage(const QString &p_srcImagePath, const QString &p_imageFileName) Q_DECL_OVERRIDE; + + QString insertImage(const QImage &p_image, const QString &p_imageFileName) Q_DECL_OVERRIDE; + + void removeImage(const QString &p_imagePath) Q_DECL_OVERRIDE; + + bool isAttachmentSupported() const Q_DECL_OVERRIDE; + + bool isReadOnly() const Q_DECL_OVERRIDE; + + private: + Node *m_node = nullptr; + + // Used as cache. + QString m_path; + + // Used as cache. + QString m_contentPath; + }; +} + +#endif // NODEBUFFERPROVIDER_H diff --git a/src/core/buffer/textbuffer.cpp b/src/core/buffer/textbuffer.cpp new file mode 100644 index 00000000..8dce4b83 --- /dev/null +++ b/src/core/buffer/textbuffer.cpp @@ -0,0 +1,17 @@ +#include "textbuffer.h" + +#include + +using namespace vnotex; + +TextBuffer::TextBuffer(const BufferParameters &p_parameters, + QObject *p_parent) + : Buffer(p_parameters, p_parent) +{ +} + +ViewWindow *TextBuffer::createViewWindowInternal(const QSharedPointer &p_paras, QWidget *p_parent) +{ + Q_UNUSED(p_paras); + return new TextViewWindow(p_parent); +} diff --git a/src/core/buffer/textbuffer.h b/src/core/buffer/textbuffer.h new file mode 100644 index 00000000..2ea4911e --- /dev/null +++ b/src/core/buffer/textbuffer.h @@ -0,0 +1,20 @@ +#ifndef TEXTBUFFER_H +#define TEXTBUFFER_H + +#include "buffer.h" + +namespace vnotex +{ + class TextBuffer : public Buffer + { + Q_OBJECT + public: + TextBuffer(const BufferParameters &p_parameters, + QObject *p_parent = nullptr); + + protected: + ViewWindow *createViewWindowInternal(const QSharedPointer &p_paras, QWidget *p_parent) Q_DECL_OVERRIDE; + }; +} + +#endif // TEXTBUFFER_H diff --git a/src/core/buffer/textbufferfactory.cpp b/src/core/buffer/textbufferfactory.cpp new file mode 100644 index 00000000..b288a139 --- /dev/null +++ b/src/core/buffer/textbufferfactory.cpp @@ -0,0 +1,11 @@ +#include "textbufferfactory.h" + +#include "textbuffer.h" + +using namespace vnotex; + +Buffer *TextBufferFactory::createBuffer(const BufferParameters &p_parameters, + QObject *p_parent) +{ + return new TextBuffer(p_parameters, p_parent); +} diff --git a/src/core/buffer/textbufferfactory.h b/src/core/buffer/textbufferfactory.h new file mode 100644 index 00000000..7f03447d --- /dev/null +++ b/src/core/buffer/textbufferfactory.h @@ -0,0 +1,17 @@ +#ifndef TEXTBUFFERFACTORY_H +#define TEXTBUFFERFACTORY_H + +#include "ibufferfactory.h" + +namespace vnotex +{ + // Buffer factory for text file. + class TextBufferFactory : public IBufferFactory + { + public: + Buffer *createBuffer(const BufferParameters &p_parameters, + QObject *p_parent) Q_DECL_OVERRIDE; + }; +} + +#endif // TEXTBUFFERFACTORY_H diff --git a/src/core/buffermgr.cpp b/src/core/buffermgr.cpp new file mode 100644 index 00000000..f549f4f3 --- /dev/null +++ b/src/core/buffermgr.cpp @@ -0,0 +1,178 @@ +#include "buffermgr.h" + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include "notebookmgr.h" +#include "vnotex.h" + +#include "fileopenparameters.h" + +using namespace vnotex; + +BufferMgr::BufferMgr(QObject *p_parent) + : QObject(p_parent) +{ +} + +BufferMgr::~BufferMgr() +{ + Q_ASSERT(m_buffers.isEmpty()); +} + +void BufferMgr::init() +{ + initBufferServer(); +} + +void BufferMgr::initBufferServer() +{ + m_bufferServer.reset(new NameBasedServer); + + // Markdown. + auto markdownFactory = QSharedPointer::create(); + m_bufferServer->registerItem(FileTypeHelper::s_markdownFileType, markdownFactory); + + // Text. + auto textFactory = QSharedPointer::create(); + m_bufferServer->registerItem(FileTypeHelper::s_textFileType, textFactory); +} + +void BufferMgr::open(Node *p_node, const QSharedPointer &p_paras) +{ + if (!p_node) { + return; + } + + if (p_node->getType() == Node::Type::Folder) { + return; + } + + auto buffer = findBuffer(p_node); + if (!buffer) { + auto nodePath = p_node->fetchAbsolutePath(); + auto fileType = FileTypeHelper::fileType(nodePath); + auto factory = m_bufferServer->getItem(fileType); + if (!factory) { + // No factory to open this file type. + qInfo() << "File will be opened by system:" << nodePath; + WidgetUtils::openUrlByDesktop(QUrl::fromLocalFile(nodePath)); + return; + } + + BufferParameters paras; + paras.m_provider.reset(new NodeBufferProvider(p_node)); + buffer = factory->createBuffer(paras, this); + addBuffer(buffer); + } + + Q_ASSERT(buffer); + emit bufferRequested(buffer, p_paras); +} + +void BufferMgr::open(const QString &p_filePath, const QSharedPointer &p_paras) +{ + if (p_filePath.isEmpty()) { + return; + } + + { + QFileInfo info(p_filePath); + if (!info.exists() || info.isDir()) { + qWarning() << QString("failed to open file %1 exists:%2 isDir:%3").arg(p_filePath).arg(info.exists()).arg(info.isDir()); + return; + } + } + + // Check if it is an internal node or not. + auto node = loadNodeByPath(p_filePath); + if (node) { + open(node.data(), p_paras); + return; + } + + auto buffer = findBuffer(p_filePath); + if (!buffer) { + // Open it as external file. + auto fileType = FileTypeHelper::fileType(p_filePath); + auto factory = m_bufferServer->getItem(fileType); + if (!factory) { + // No factory to open this file type. + qInfo() << "File will be opened by system:" << p_filePath; + WidgetUtils::openUrlByDesktop(QUrl::fromLocalFile(p_filePath)); + return; + } + + BufferParameters paras; + paras.m_provider.reset(new FileBufferProvider(p_filePath, + p_paras->m_nodeAttachedTo, + p_paras->m_readOnly)); + buffer = factory->createBuffer(paras, this); + addBuffer(buffer); + } + + Q_ASSERT(buffer); + emit bufferRequested(buffer, p_paras); +} + +Buffer *BufferMgr::findBuffer(const Node *p_node) const +{ + auto it = std::find_if(m_buffers.constBegin(), + m_buffers.constEnd(), + [p_node](const Buffer *p_buffer) { + return p_buffer->match(p_node); + }); + if (it != m_buffers.constEnd()) { + return *it; + } + + return nullptr; +} + +Buffer *BufferMgr::findBuffer(const QString &p_filePath) const +{ + auto it = std::find_if(m_buffers.constBegin(), + m_buffers.constEnd(), + [p_filePath](const Buffer *p_buffer) { + return p_buffer->match(p_filePath); + }); + if (it != m_buffers.constEnd()) { + return *it; + } + + return nullptr; +} + +void BufferMgr::addBuffer(Buffer *p_buffer) +{ + m_buffers.push_back(p_buffer); + connect(p_buffer, &Buffer::attachedViewWindowEmpty, + this, [this, p_buffer]() { + qDebug() << "delete buffer without attached view window" + << p_buffer->getName(); + m_buffers.removeAll(p_buffer); + p_buffer->close(); + p_buffer->deleteLater(); + }); +} + +QSharedPointer BufferMgr::loadNodeByPath(const QString &p_path) +{ + const auto ¬ebooks = VNoteX::getInst().getNotebookMgr().getNotebooks(); + for (const auto &nb : notebooks) { + auto node = nb->loadNodeByPath(p_path); + if (node) { + return node; + } + } + + return nullptr; +} diff --git a/src/core/buffermgr.h b/src/core/buffermgr.h new file mode 100644 index 00000000..0b1ac873 --- /dev/null +++ b/src/core/buffermgr.h @@ -0,0 +1,55 @@ +#ifndef BUFFERMGR_H +#define BUFFERMGR_H + +#include +#include +#include +#include + +#include "namebasedserver.h" + +namespace vnotex +{ + class IBufferFactory; + class Node; + class Buffer; + struct FileOpenParameters; + + class BufferMgr : public QObject + { + Q_OBJECT + public: + explicit BufferMgr(QObject *p_parent = nullptr); + + ~BufferMgr(); + + void init(); + + public slots: + void open(Node *p_node, const QSharedPointer &p_paras); + + void open(const QString &p_filePath, const QSharedPointer &p_paras); + + signals: + void bufferRequested(Buffer *p_buffer, const QSharedPointer &p_paras); + + private: + void initBufferServer(); + + Buffer *findBuffer(const Node *p_node) const; + + Buffer *findBuffer(const QString &p_filePath) const; + + void addBuffer(Buffer *p_buffer); + + // Try to load @p_path as a node if it is within one notebook. + QSharedPointer loadNodeByPath(const QString &p_path); + + QSharedPointer> m_bufferServer; + + // Managed by QObject. + QVector m_buffers; + }; +} // ns vnotex + +#endif // BUFFERMGR_H diff --git a/src/core/clipboarddata.cpp b/src/core/clipboarddata.cpp new file mode 100644 index 00000000..93af6a4b --- /dev/null +++ b/src/core/clipboarddata.cpp @@ -0,0 +1,187 @@ +#include "clipboarddata.h" + +#include +#include + +#include "exception.h" + +using namespace vnotex; + +const QString NodeClipboardDataItem::c_notebookId = "notebook_id"; + +const QString NodeClipboardDataItem::c_nodePath = "node_path"; + +NodeClipboardDataItem::NodeClipboardDataItem() +{ +} + +NodeClipboardDataItem::NodeClipboardDataItem(ID p_notebookId, const QString &p_nodePath) + : m_notebookId(p_notebookId), + m_nodeRelativePath(p_nodePath) +{ +} + +QJsonObject NodeClipboardDataItem::toJson() const +{ + QJsonObject jobj; + jobj[c_notebookId] = QString::number(m_notebookId); + jobj[c_nodePath] = m_nodeRelativePath; + return jobj; +} + +void NodeClipboardDataItem::fromJson(const QJsonObject &p_jobj) +{ + Q_ASSERT(p_jobj.contains(c_notebookId) && p_jobj.contains(c_nodePath)); + auto idRet = stringToID(p_jobj[c_notebookId].toString()); + Q_ASSERT(idRet.first); + m_notebookId = idRet.second; + m_nodeRelativePath = p_jobj[c_nodePath].toString(); +} + + +const QString ClipboardData::c_instanceId = "instance_id"; + +const QString ClipboardData::c_action = "action"; + +const QString ClipboardData::c_data = "data"; + +ClipboardData::ClipboardData() +{ +} + +ClipboardData::ClipboardData(ID p_instanceId, Action p_action) + : m_instanceId(p_instanceId), + m_action(p_action) +{ +} + +void ClipboardData::fromJson(const QJsonObject &p_jobj) +{ + clear(); + + if (!p_jobj.contains(c_instanceId) + || !p_jobj.contains(c_action) + || !p_jobj.contains(c_data)) { + Exception::throwOne(Exception::Type::InvalidArgument, + QString("fail to parse ClipboardData from json (%1)").arg(p_jobj.keys().join(','))); + return; + } + + auto idRet = stringToID(p_jobj[c_instanceId].toString()); + if (!idRet.first) { + Exception::throwOne(Exception::Type::InvalidArgument, + QString("fail to parse ClipboardData from json (%1)").arg(p_jobj.keys().join(','))); + return; + } + m_instanceId = idRet.second; + + int act = p_jobj[c_action].toInt(Action::Invalid); + m_action = intToAction(act); + if (m_action == Action::Invalid) { + Exception::throwOne(Exception::Type::InvalidArgument, + QString("fail to parse ClipboardData from json (%1)").arg(p_jobj.keys().join(','))); + return; + } + + for (const auto &item : p_jobj[c_data].toArray()) { + auto dataItem = createClipboardDataItem(m_action); + dataItem->fromJson(item.toObject()); + m_data.push_back(dataItem); + } +} + +QJsonObject ClipboardData::toJson() const +{ + QJsonObject jobj; + jobj[c_instanceId] = QString::number(m_instanceId); + jobj[c_action] = static_cast(m_action); + + QJsonArray data; + for (const auto& item : m_data) { + data.append(item->toJson()); + } + jobj[c_data] = data; + + return jobj; +} + +ClipboardData::Action ClipboardData::intToAction(int p_act) const +{ + Action act = Action::Invalid; + if (p_act >= Action::CopyNode && p_act < Action::Invalid) { + act = static_cast(p_act); + } + + return act; +} + +void ClipboardData::clear() +{ + m_instanceId = 0; + m_action = Action::Invalid; + m_data.clear(); +} + +QSharedPointer ClipboardData::createClipboardDataItem(Action p_act) +{ + switch (p_act) { + case Action::CopyNode: + case Action::MoveNode: + return QSharedPointer::create(); + + case Action::Invalid: + Q_ASSERT(false); + return nullptr; + } + + return nullptr; +} + +void ClipboardData::addItem(const QSharedPointer &p_item) +{ + Q_ASSERT(p_item); + m_data.push_back(p_item); +} + +QString ClipboardData::toJsonText() const +{ + auto data = QJsonDocument(toJson()).toJson(); + return QString::fromUtf8(data); +} + +QSharedPointer ClipboardData::fromJsonText(const QString &p_json) +{ + if (p_json.isEmpty()) { + return nullptr; + } + + auto data = QSharedPointer::create(); + auto jobj = QJsonDocument::fromJson(p_json.toUtf8()).object(); + if (jobj.isEmpty()) { + return nullptr; + } + + try { + data->fromJson(jobj); + } catch (Exception &p_e) { + Q_UNUSED(p_e); + return nullptr; + } + + return data; +} + +const QVector> &ClipboardData::getData() const +{ + return m_data; +} + +ID ClipboardData::getInstanceId() const +{ + return m_instanceId; +} + +ClipboardData::Action ClipboardData::getAction() const +{ + return m_action; +} diff --git a/src/core/clipboarddata.h b/src/core/clipboarddata.h new file mode 100644 index 00000000..99641973 --- /dev/null +++ b/src/core/clipboarddata.h @@ -0,0 +1,85 @@ +#ifndef CLIPBOARDDATA_H +#define CLIPBOARDDATA_H + +#include +#include +#include + +#include "global.h" + +namespace vnotex +{ + class ClipboardDataItem + { + public: + virtual ~ClipboardDataItem() + { + } + + virtual QJsonObject toJson() const = 0; + + virtual void fromJson(const QJsonObject &p_jobj) = 0; + }; + + class NodeClipboardDataItem : public ClipboardDataItem + { + public: + NodeClipboardDataItem(); + + NodeClipboardDataItem(ID p_notebookId, const QString &p_nodePath); + + QJsonObject toJson() const Q_DECL_OVERRIDE; + + void fromJson(const QJsonObject &p_jobj) Q_DECL_OVERRIDE; + + ID m_notebookId; + QString m_nodeRelativePath; + + private: + static const QString c_notebookId; + static const QString c_nodePath; + }; + + class ClipboardData + { + public: + enum Action { CopyNode, MoveNode, Invalid }; + + ClipboardData(); + + ClipboardData(ID p_instanceId, Action p_action); + + ID getInstanceId() const; + + ClipboardData::Action getAction() const; + + const QVector> &getData() const; + + void addItem(const QSharedPointer &p_item); + + QString toJsonText() const; + + static QSharedPointer fromJsonText(const QString &p_json); + + private: + void fromJson(const QJsonObject &p_jobj); + + QJsonObject toJson() const; + + ClipboardData::Action intToAction(int p_act) const; + + void clear(); + + static QSharedPointer createClipboardDataItem(Action p_act); + + ID m_instanceId = 0; + Action m_action = Action::Invalid; + QVector> m_data; + + static const QString c_instanceId; + static const QString c_action; + static const QString c_data; + }; +} // ns vnotex + +#endif // CLIPBOARDDATA_H diff --git a/src/core/configmgr.cpp b/src/core/configmgr.cpp new file mode 100644 index 00000000..7af24b3b --- /dev/null +++ b/src/core/configmgr.cpp @@ -0,0 +1,376 @@ +#include "configmgr.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include "exception.h" +#include + +#include "mainconfig.h" +#include "coreconfig.h" +#include "sessionconfig.h" + +using namespace vnotex; + +#ifndef QT_NO_DEBUG +#define VX_DEBUG_WEB +#endif + +const QString ConfigMgr::c_orgName = "VNote"; + +const QString ConfigMgr::c_appName = "VNoteX"; + +const QString ConfigMgr::c_configFileName = "vnotex.json"; + +const QString ConfigMgr::c_sessionFileName = "session.json"; + +const QJsonObject &ConfigMgr::Settings::getJson() const +{ + return m_jobj; +} + +QSharedPointer ConfigMgr::Settings::fromFile(const QString &p_jsonFilePath) +{ + if (!QFileInfo::exists(p_jsonFilePath)) { + qWarning() << "return empty Settings from non-exist config file" << p_jsonFilePath; + return QSharedPointer::create(); + } + + auto bytes = FileUtils::readFile(p_jsonFilePath); + return QSharedPointer::create(QJsonDocument::fromJson(bytes).object()); +} + +void ConfigMgr::Settings::writeToFile(const QString &p_jsonFilePath) const +{ + FileUtils::writeFile(p_jsonFilePath, QJsonDocument(this->m_jobj).toJson()); +} + +ConfigMgr::ConfigMgr(QObject *p_parent) + : QObject(p_parent), + m_config(new MainConfig(this)), + m_sessionConfig(new SessionConfig(this)) +{ + locateConfigFolder(); + + checkAppConfig(); + + m_config->init(); + m_sessionConfig->init(); +} + +ConfigMgr::~ConfigMgr() +{ + +} + +void ConfigMgr::locateConfigFolder() +{ + // Check app config. + { + const QString configFolderName("vnotex_files"); + QString folderPath(QCoreApplication::applicationDirPath() + + '/' + configFolderName); + if (QDir(folderPath).exists()) { + // Config folder in app/. + m_appConfigFolderPath = PathUtils::cleanPath(folderPath); + } else { + m_appConfigFolderPath = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation); + } + } + + // Check user config. + { + const QString configFolderName("user_files"); + QString folderPath(QCoreApplication::applicationDirPath() + + '/' + configFolderName); + if (QDir(folderPath).exists()) { + // Config folder in app/. + m_userConfigFolderPath = PathUtils::cleanPath(folderPath); + } else { + m_userConfigFolderPath = QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation); + + // Make sure it exists. + QDir dir(m_userConfigFolderPath); + dir.mkpath(m_userConfigFolderPath); + } + } + + Q_ASSERT(m_appConfigFolderPath != m_userConfigFolderPath); + qInfo() << "app config folder" << m_appConfigFolderPath; + qInfo() << "user config folder" << m_userConfigFolderPath; +} + +void ConfigMgr::checkAppConfig() +{ + bool needUpdate = false; + QDir appConfigDir(m_appConfigFolderPath); + if (!appConfigDir.exists()) { + needUpdate = true; + appConfigDir.mkpath(m_appConfigFolderPath); + } else { + if (!appConfigDir.exists(c_configFileName)) { + needUpdate = true; + } else { + // Check version of config file. + auto defaultSettings = getSettings(Source::Default); + auto appSettings = getSettings(Source::App); + auto defaultVersion = MainConfig::getVersion(defaultSettings->getJson()); + auto appVersion = MainConfig::getVersion(appSettings->getJson()); + if (defaultVersion != appVersion) { + needUpdate = true; + } + } + + if (needUpdate) { + FileUtils::removeDir(m_appConfigFolderPath); + // Wait for the OS delete the folder. + Utils::sleepWait(1000); + appConfigDir.mkpath(m_appConfigFolderPath); + } + } + + const auto mainConfigFilePath = appConfigDir.filePath(c_configFileName); + +#ifndef VX_DEBUG_WEB + if (!needUpdate) { + return; + } +#endif + + qInfo() << "update app config files in" << m_appConfigFolderPath; + + Q_ASSERT(appConfigDir.exists()); + + QPixmap pixmap(":/vnotex/data/core/logo/vnote.png"); + QScopedPointer splash(new QSplashScreen(pixmap)); + splash->show(); + + // Load extra data. + splash->showMessage("Loading extra resource data"); + const QString extraRcc(QStringLiteral("extra.rcc")); + bool ret = QResource::registerResource(extraRcc); + if (!ret) { + Exception::throwOne(Exception::Type::FailToReadFile, + QString("failed to register resource file %1").arg(extraRcc)); + } + auto cleanup = qScopeGuard([extraRcc]() { + QResource::unregisterResource(extraRcc); + }); + + const QString extraDataRoot(QStringLiteral(":/vnotex/data/extra")); + +#ifdef VX_DEBUG_WEB + if (!needUpdate) { + // Always update main config file and web folder. + qDebug() << "forced to update main config file and web folder for debugging"; + splash->showMessage("update main config file and web folder for debugging"); + + // Cancel the read-only permission of the main config file. + QFile::setPermissions(mainConfigFilePath, QFile::WriteUser); + FileUtils::removeFile(mainConfigFilePath); + FileUtils::removeDir(appConfigDir.filePath(QStringLiteral("web"))); + + // Wait for the OS delete the folder. + Utils::sleepWait(1000); + + FileUtils::copyFile(getConfigFilePath(Source::Default), mainConfigFilePath); + FileUtils::copyDir(extraDataRoot + QStringLiteral("/web"), + appConfigDir.filePath(QStringLiteral("web"))); + return; + } +#else + Q_ASSERT(needUpdate); +#endif + + // Copy themes. + qApp->processEvents(); + splash->showMessage("Copying themes"); + FileUtils::copyDir(extraDataRoot + QStringLiteral("/themes"), + appConfigDir.filePath(QStringLiteral("themes"))); + + // Copy docs. + qApp->processEvents(); + splash->showMessage("Copying docs"); + FileUtils::copyDir(extraDataRoot + QStringLiteral("/docs"), + appConfigDir.filePath(QStringLiteral("docs"))); + + // Copy syntax-highlighting. + qApp->processEvents(); + splash->showMessage("Copying syntax-highlighting"); + FileUtils::copyDir(extraDataRoot + QStringLiteral("/syntax-highlighting"), + appConfigDir.filePath(QStringLiteral("syntax-highlighting"))); + + // Copy web. + qApp->processEvents(); + splash->showMessage("Copying web"); + FileUtils::copyDir(extraDataRoot + QStringLiteral("/web"), + appConfigDir.filePath(QStringLiteral("web"))); + + // Main config file. + FileUtils::copyFile(getConfigFilePath(Source::Default), appConfigDir.filePath(c_configFileName)); + +} + +QString ConfigMgr::getConfigFilePath(Source p_src) const +{ + QString configPath; + switch (p_src) { + case Source::Default: + configPath = QStringLiteral(":/vnotex/data/core/") + c_configFileName; + break; + + case Source::App: + configPath = m_appConfigFolderPath + QLatin1Char('/') + c_configFileName; + break; + + case Source::User: + { + configPath = m_userConfigFolderPath + QLatin1Char('/') + c_configFileName; + break; + } + + case Source::Session: + { + configPath = m_userConfigFolderPath + QLatin1Char('/') + c_sessionFileName; + break; + } + + default: + Q_ASSERT(false); + } + + return configPath; +} + +QSharedPointer ConfigMgr::getSettings(Source p_src) const +{ + + return ConfigMgr::Settings::fromFile(getConfigFilePath(p_src)); +} + +void ConfigMgr::writeUserSettings(const QJsonObject &p_jobj) +{ + Settings settings(p_jobj); + settings.writeToFile(getConfigFilePath(Source::User)); +} + +void ConfigMgr::writeSessionSettings(const QJsonObject &p_jobj) +{ + Settings settings(p_jobj); + settings.writeToFile(getConfigFilePath(Source::Session)); +} + +MainConfig &ConfigMgr::getConfig() +{ + return *m_config; +} + +SessionConfig &ConfigMgr::getSessionConfig() +{ + return *m_sessionConfig; +} + +CoreConfig &ConfigMgr::getCoreConfig() +{ + return m_config->getCoreConfig(); +} + +EditorConfig &ConfigMgr::getEditorConfig() +{ + return m_config->getEditorConfig(); +} + +WidgetConfig &ConfigMgr::getWidgetConfig() +{ + return m_config->getWidgetConfig(); +} + +QString ConfigMgr::getAppFolder() const +{ + return m_appConfigFolderPath; +} + +QString ConfigMgr::getUserFolder() const +{ + return m_userConfigFolderPath; +} + +QString ConfigMgr::getAppThemeFolder() const +{ + return PathUtils::concatenateFilePath(m_appConfigFolderPath, QStringLiteral("themes")); +} + +QString ConfigMgr::getUserThemeFolder() const +{ + return PathUtils::concatenateFilePath(m_userConfigFolderPath, QStringLiteral("themes")); +} + +QString ConfigMgr::getAppDocsFolder() const +{ + return PathUtils::concatenateFilePath(m_appConfigFolderPath, QStringLiteral("docs")); +} + +QString ConfigMgr::getUserDocsFolder() const +{ + return PathUtils::concatenateFilePath(m_userConfigFolderPath, QStringLiteral("docs")); +} + +QString ConfigMgr::getAppSyntaxHighlightingFolder() const +{ + return PathUtils::concatenateFilePath(m_appConfigFolderPath, + QStringLiteral("syntax-highlighting")); +} + +QString ConfigMgr::getUserSyntaxHighlightingFolder() const +{ + return PathUtils::concatenateFilePath(m_userConfigFolderPath, + QStringLiteral("syntax-highlighting")); +} + +QString ConfigMgr::getUserOrAppFile(const QString &p_filePath) const +{ + QFileInfo fi(p_filePath); + if (fi.isAbsolute()) { + return p_filePath; + } + + // Check user folder first. + QDir userConfigDir(m_userConfigFolderPath); + if (userConfigDir.exists(p_filePath)) { + return userConfigDir.absoluteFilePath(p_filePath); + } + + // App folder. + QDir appConfigDir(m_appConfigFolderPath); + return appConfigDir.absoluteFilePath(p_filePath); +} + +QString ConfigMgr::locateSessionConfigFilePathAtBootstrap() +{ + // QApplication is not init yet, so org and app name are empty here. + auto folderPath = QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation); + folderPath = PathUtils::concatenateFilePath(folderPath, c_orgName + "/" + c_appName); + QDir dir(folderPath); + if (dir.exists(c_sessionFileName)) { + qInfo() << "locateSessionConfigFilePathAtBootstrap" << folderPath; + return dir.filePath(c_sessionFileName); + } + + return QString(); +} + +QString ConfigMgr::getLogFile() const +{ + return PathUtils::concatenateFilePath(ConfigMgr::getInst().getUserFolder(), "vnotex.log"); +} diff --git a/src/core/configmgr.h b/src/core/configmgr.h new file mode 100644 index 00000000..dbbd450e --- /dev/null +++ b/src/core/configmgr.h @@ -0,0 +1,141 @@ +#ifndef CONFIGMGR_H +#define CONFIGMGR_H + +#include +#include +#include +#include + +namespace vnotex +{ + class MainConfig; + class SessionConfig; + class CoreConfig; + class EditorConfig; + class WidgetConfig; + + class ConfigMgr : public QObject + { + Q_OBJECT + public: + enum class Source + { + Default, + App, + User, + Session + }; + + class Settings + { + public: + Settings() = default; + + Settings(const QJsonObject &p_jobj) + : m_jobj(p_jobj) + { + } + + const QJsonObject &getJson() const; + + void writeToFile(const QString &p_jsonFilePath) const; + + static QSharedPointer fromFile(const QString &p_jsonFilePath); + + private: + QJsonObject m_jobj; + }; + + static ConfigMgr &getInst() + { + static ConfigMgr inst; + return inst; + } + + ~ConfigMgr(); + + ConfigMgr(const ConfigMgr &) = delete; + void operator=(const ConfigMgr &) = delete; + + MainConfig &getConfig(); + + SessionConfig &getSessionConfig(); + + CoreConfig &getCoreConfig(); + + EditorConfig &getEditorConfig(); + + WidgetConfig &getWidgetConfig(); + + QString getAppFolder() const; + + QString getUserFolder() const; + + QString getLogFile() const; + + QString getAppThemeFolder() const; + + QString getUserThemeFolder() const; + + QString getAppDocsFolder() const; + + QString getUserDocsFolder() const; + + QString getAppSyntaxHighlightingFolder() const; + + QString getUserSyntaxHighlightingFolder() const; + + // If @p_filePath is absolute, just return it. + // Otherwise, first try to find it in user folder, then in app folder. + QString getUserOrAppFile(const QString &p_filePath) const; + + QString getConfigFilePath(Source p_src) const; + + // Called at boostrap without QApplication instance. + static QString locateSessionConfigFilePathAtBootstrap(); + + static const QString c_orgName; + + static const QString c_appName; + + public: + // Used by IConfig. + QSharedPointer getSettings(Source p_src) const; + + void writeUserSettings(const QJsonObject &p_jobj); + + void writeSessionSettings(const QJsonObject &p_jobj); + + signals: + void editorConfigChanged(); + + private: + explicit ConfigMgr(QObject *p_parent = nullptr); + + // Locate the folder path where the config file exists. + void locateConfigFolder(); + + // Check if app config exists and is updated. + // Update it if in need. + void checkAppConfig(); + + QScopedPointer m_config;; + + // Session config. + QScopedPointer m_sessionConfig; + + // Absolute path of the app config folder. + QString m_appConfigFolderPath; + + // Absolute path of the user config folder. + QString m_userConfigFolderPath; + + // Name of the core config file. + static const QString c_configFileName; + + // Name of the session config file. + static const QString c_sessionFileName; + }; +} // ns vnotex + +#endif // CONFIGMGR_H diff --git a/src/core/core.pri b/src/core/core.pri new file mode 100644 index 00000000..eeb2256d --- /dev/null +++ b/src/core/core.pri @@ -0,0 +1,57 @@ +INCLUDEPATH *= $$PWD + +include($$PWD/notebookbackend/notebookbackend.pri) + +include($$PWD/versioncontroller/versioncontroller.pri) + +include($$PWD/notebookconfigmgr/notebookconfigmgr.pri) + +include($$PWD/notebook/notebook.pri) + +include($$PWD/buffer/buffer.pri) + +SOURCES += \ + $$PWD/buffermgr.cpp \ + $$PWD/configmgr.cpp \ + $$PWD/coreconfig.cpp \ + $$PWD/editorconfig.cpp \ + $$PWD/htmltemplatehelper.cpp \ + $$PWD/logger.cpp \ + $$PWD/mainconfig.cpp \ + $$PWD/markdowneditorconfig.cpp \ + $$PWD/singleinstanceguard.cpp \ + $$PWD/texteditorconfig.cpp \ + $$PWD/vnotex.cpp \ + $$PWD/thememgr.cpp \ + $$PWD/notebookmgr.cpp \ + $$PWD/theme.cpp \ + $$PWD/sessionconfig.cpp \ + $$PWD/clipboarddata.cpp \ + $$PWD/widgetconfig.cpp + +HEADERS += \ + $$PWD/ViewerResource.h \ + $$PWD/buffermgr.h \ + $$PWD/configmgr.h \ + $$PWD/coreconfig.h \ + $$PWD/editorconfig.h \ + $$PWD/events.h \ + $$PWD/filelocator.h \ + $$PWD/fileopenparameters.h \ + $$PWD/htmltemplatehelper.h \ + $$PWD/logger.h \ + $$PWD/mainconfig.h \ + $$PWD/markdowneditorconfig.h \ + $$PWD/singleinstanceguard.h \ + $$PWD/iconfig.h \ + $$PWD/texteditorconfig.h \ + $$PWD/vnotex.h \ + $$PWD/thememgr.h \ + $$PWD/global.h \ + $$PWD/namebasedserver.h \ + $$PWD/exception.h \ + $$PWD/notebookmgr.h \ + $$PWD/theme.h \ + $$PWD/sessionconfig.h \ + $$PWD/clipboarddata.h \ + $$PWD/widgetconfig.h diff --git a/src/core/coreconfig.cpp b/src/core/coreconfig.cpp new file mode 100644 index 00000000..5160ce19 --- /dev/null +++ b/src/core/coreconfig.cpp @@ -0,0 +1,124 @@ +#include "coreconfig.h" + +#include +#include + +using namespace vnotex; + +#define READSTR(key) readString(appObj, userObj, (key)) +#define READINT(key) readInt(appObj, userObj, (key)) + +QStringList CoreConfig::s_availableLocales; + +CoreConfig::CoreConfig(ConfigMgr *p_mgr, IConfig *p_topConfig) + : IConfig(p_mgr, p_topConfig) +{ + m_sessionName = QStringLiteral("core"); +} + +const QString &CoreConfig::getTheme() const +{ + return m_theme; +} + +void CoreConfig::init(const QJsonObject &p_app, + const QJsonObject &p_user) +{ + const auto appObj = p_app.value(m_sessionName).toObject(); + const auto userObj = p_user.value(m_sessionName).toObject(); + + m_theme = READSTR(QStringLiteral("theme")); + + m_locale = READSTR(QStringLiteral("locale")); + if (!m_locale.isEmpty() && !getAvailableLocales().contains(m_locale)) { + m_locale = QStringLiteral("en_US"); + } + + loadShortcuts(appObj, userObj); + + m_toolBarIconSize = READINT(QStringLiteral("toolbar_icon_size")); + if (m_toolBarIconSize <= 0) { + m_toolBarIconSize = 16; + } +} + +QJsonObject CoreConfig::toJson() const +{ + QJsonObject obj; + obj[QStringLiteral("theme")] = m_theme; + obj[QStringLiteral("locale")] = m_locale; + obj[QStringLiteral("shortcuts")] = saveShortcuts(); + obj[QStringLiteral("toolbar_icon_size")] = m_toolBarIconSize; + return obj; +} + +const QString &CoreConfig::getLocale() const +{ + return m_locale; +} + +void CoreConfig::setLocale(const QString &p_locale) +{ + updateConfig(m_locale, + p_locale, + this); +} + +QString CoreConfig::getLocaleToUse() const +{ + return QLocale().name(); +} + +const QStringList &CoreConfig::getAvailableLocales() +{ + if (s_availableLocales.isEmpty()) { + s_availableLocales << QStringLiteral("en_US"); + s_availableLocales << QStringLiteral("zh_CN"); + } + + return s_availableLocales; +} + +void CoreConfig::loadShortcuts(const QJsonObject &p_app, const QJsonObject &p_user) +{ + const auto appObj = p_app.value(QStringLiteral("shortcuts")).toObject(); + const auto userObj = p_user.value(QStringLiteral("shortcuts")).toObject(); + + static const auto indexOfShortcutEnum = CoreConfig::staticMetaObject.indexOfEnumerator("Shortcut"); + Q_ASSERT(indexOfShortcutEnum >= 0); + const auto metaEnum = CoreConfig::staticMetaObject.enumerator(indexOfShortcutEnum); + // Skip the Max flag. + for (int i = 0; i < metaEnum.keyCount() - 1; ++i) { + m_shortcuts[i] = READSTR(metaEnum.key(i)); + } +} + +QJsonObject CoreConfig::saveShortcuts() const +{ + QJsonObject obj; + static const auto indexOfShortcutEnum = CoreConfig::staticMetaObject.indexOfEnumerator("Shortcut"); + Q_ASSERT(indexOfShortcutEnum >= 0); + const auto metaEnum = CoreConfig::staticMetaObject.enumerator(indexOfShortcutEnum); + // Skip the Max flag. + for (int i = 0; i < metaEnum.keyCount() - 1; ++i) { + obj[metaEnum.key(i)] = m_shortcuts[i]; + } + return obj; +} + +const QString &CoreConfig::getShortcut(Shortcut p_shortcut) const +{ + Q_ASSERT(p_shortcut < Shortcut::MaxShortcut); + return m_shortcuts[p_shortcut]; +} + +int CoreConfig::getToolBarIconSize() const +{ + return m_toolBarIconSize; +} + +void CoreConfig::setToolBarIconSize(int p_size) +{ + Q_ASSERT(p_size > 0); + updateConfig(m_toolBarIconSize, p_size, this); +} diff --git a/src/core/coreconfig.h b/src/core/coreconfig.h new file mode 100644 index 00000000..b3a0d804 --- /dev/null +++ b/src/core/coreconfig.h @@ -0,0 +1,73 @@ +#ifndef CORECONFIG_H +#define CORECONFIG_H + +#include "iconfig.h" + +#include +#include +#include + +namespace vnotex +{ + class CoreConfig : public IConfig + { + Q_GADGET + public: + enum Shortcut + { + FullScreen, + ExpandContentArea, + Settings, + NewNote, + CloseTab, + NavigationDock, + OutlineDock, + NavigationMode, + LocateNode, + MaxShortcut + }; + Q_ENUM(Shortcut) + + CoreConfig(ConfigMgr *p_mgr, IConfig *p_topConfig); + + void init(const QJsonObject &p_app, const QJsonObject &p_user) Q_DECL_OVERRIDE; + + QJsonObject toJson() const Q_DECL_OVERRIDE; + + const QString &getTheme() const; + + const QString &getLocale() const; + void setLocale(const QString &p_locale); + + // Should be called after locale is properly set. + QString getLocaleToUse() const; + + const QString &getShortcut(Shortcut p_shortcut) const; + + int getToolBarIconSize() const; + void setToolBarIconSize(int p_size); + + static const QStringList &getAvailableLocales(); + + private: + void loadShortcuts(const QJsonObject &p_app, const QJsonObject &p_user); + + QJsonObject saveShortcuts() const; + + // Theme name. + QString m_theme; + + // User-specified locale, such as zh_CN, en_US. + // Empty if not specified. + QString m_locale; + + QString m_shortcuts[Shortcut::MaxShortcut]; + + // Icon size of MainWindow tool bar. + int m_toolBarIconSize = 16; + + static QStringList s_availableLocales; + }; +} // ns vnotex + +#endif // CORECONFIG_H diff --git a/src/core/editorconfig.cpp b/src/core/editorconfig.cpp new file mode 100644 index 00000000..7bb89158 --- /dev/null +++ b/src/core/editorconfig.cpp @@ -0,0 +1,184 @@ +#include "editorconfig.h" + +#include +#include + +#include "texteditorconfig.h" +#include "markdowneditorconfig.h" + +using namespace vnotex; + +#define READINT(key) readInt(appObj, userObj, (key)) +#define READSTR(key) readString(appObj, userObj, (key)) + +EditorConfig::EditorConfig(ConfigMgr *p_mgr, IConfig *p_topConfig) + : IConfig(p_mgr, p_topConfig), + m_textEditorConfig(new TextEditorConfig(p_mgr, p_topConfig)), + m_markdownEditorConfig(new MarkdownEditorConfig(p_mgr, p_topConfig, m_textEditorConfig)) +{ + m_sessionName = QStringLiteral("editor"); +} + +EditorConfig::~EditorConfig() +{ +} + +void EditorConfig::init(const QJsonObject &p_app, + const QJsonObject &p_user) +{ + const auto appObj = p_app.value(m_sessionName).toObject(); + const auto userObj = p_user.value(m_sessionName).toObject(); + + loadCore(appObj, userObj); + + m_textEditorConfig->init(appObj, userObj); + m_markdownEditorConfig->init(appObj, userObj); +} + +void EditorConfig::loadCore(const QJsonObject &p_app, const QJsonObject &p_user) +{ + const auto appObj = p_app.value(QStringLiteral("core")).toObject(); + const auto userObj = p_user.value(QStringLiteral("core")).toObject(); + + { + m_toolBarIconSize = READINT(QStringLiteral("toolbar_icon_size")); + if (m_toolBarIconSize <= 0) { + m_toolBarIconSize = 14; + } + } + + { + auto autoSavePolicy = READSTR(QStringLiteral("auto_save_policy")); + m_autoSavePolicy = stringToAutoSavePolicy(autoSavePolicy); + } + + m_backupFileDirectory = READSTR(QStringLiteral("backup_file_directory")); + + m_backupFileExtension = READSTR(QStringLiteral("backup_file_extension")); + + loadShortcuts(appObj, userObj); +} + +QJsonObject EditorConfig::saveCore() const +{ + QJsonObject obj; + obj[QStringLiteral("toolbar_icon_size")] = m_toolBarIconSize; + obj[QStringLiteral("auto_save_policy")] = autoSavePolicyToString(m_autoSavePolicy); + obj[QStringLiteral("backup_file_directory")] = m_backupFileDirectory; + obj[QStringLiteral("backup_file_extension")] = m_backupFileExtension; + obj[QStringLiteral("shortcuts")] = saveShortcuts(); + return obj; +} + +void EditorConfig::loadShortcuts(const QJsonObject &p_app, const QJsonObject &p_user) +{ + const auto appObj = p_app.value(QStringLiteral("shortcuts")).toObject(); + const auto userObj = p_user.value(QStringLiteral("shortcuts")).toObject(); + + static const auto indexOfShortcutEnum = EditorConfig::staticMetaObject.indexOfEnumerator("Shortcut"); + Q_ASSERT(indexOfShortcutEnum >= 0); + const auto metaEnum = EditorConfig::staticMetaObject.enumerator(indexOfShortcutEnum); + // Skip the Max flag. + for (int i = 0; i < metaEnum.keyCount() - 1; ++i) { + m_shortcuts[i] = READSTR(metaEnum.key(i)); + } +} + +QJsonObject EditorConfig::saveShortcuts() const +{ + QJsonObject obj; + static const auto indexOfShortcutEnum = EditorConfig::staticMetaObject.indexOfEnumerator("Shortcut"); + Q_ASSERT(indexOfShortcutEnum >= 0); + const auto metaEnum = EditorConfig::staticMetaObject.enumerator(indexOfShortcutEnum); + // Skip the Max flag. + for (int i = 0; i < metaEnum.keyCount() - 1; ++i) { + obj[metaEnum.key(i)] = m_shortcuts[i]; + } + return obj; +} + +QJsonObject EditorConfig::toJson() const +{ + QJsonObject obj; + obj[m_textEditorConfig->getSessionName()] = m_textEditorConfig->toJson(); + obj[m_markdownEditorConfig->getSessionName()] = m_markdownEditorConfig->toJson(); + obj[QStringLiteral("core")] = saveCore(); + return obj; +} + +TextEditorConfig &EditorConfig::getTextEditorConfig() +{ + return *m_textEditorConfig; +} + +const TextEditorConfig &EditorConfig::getTextEditorConfig() const +{ + return *m_textEditorConfig; +} + +MarkdownEditorConfig &EditorConfig::getMarkdownEditorConfig() +{ + return *m_markdownEditorConfig; +} + +const MarkdownEditorConfig &EditorConfig::getMarkdownEditorConfig() const +{ + return *m_markdownEditorConfig; +} + +int EditorConfig::getToolBarIconSize() const +{ + return m_toolBarIconSize; +} + +const QString &EditorConfig::getShortcut(Shortcut p_shortcut) const +{ + Q_ASSERT(p_shortcut < Shortcut::MaxShortcut); + return m_shortcuts[p_shortcut]; +} + +QString EditorConfig::autoSavePolicyToString(AutoSavePolicy p_policy) const +{ + switch (p_policy) { + case AutoSavePolicy::None: + return QStringLiteral("none"); + + case AutoSavePolicy::AutoSave: + return QStringLiteral("autosave"); + + default: + return QStringLiteral("backupfile"); + } +} + +EditorConfig::AutoSavePolicy EditorConfig::stringToAutoSavePolicy(const QString &p_str) const +{ + auto policy = p_str.toLower(); + if (policy == QStringLiteral("none")) { + return AutoSavePolicy::None; + } else if (policy == QStringLiteral("autosave")) { + return AutoSavePolicy::AutoSave; + } else { + return AutoSavePolicy::BackupFile; + } +} + +EditorConfig::AutoSavePolicy EditorConfig::getAutoSavePolicy() const +{ + return m_autoSavePolicy; +} + +void EditorConfig::setAutoSavePolicy(EditorConfig::AutoSavePolicy p_policy) +{ + updateConfig(m_autoSavePolicy, p_policy, this); +} + +const QString &EditorConfig::getBackupFileDirectory() const +{ + return m_backupFileDirectory; +} + +const QString &EditorConfig::getBackupFileExtension() const +{ + return m_backupFileExtension; +} diff --git a/src/core/editorconfig.h b/src/core/editorconfig.h new file mode 100644 index 00000000..0ef248e3 --- /dev/null +++ b/src/core/editorconfig.h @@ -0,0 +1,118 @@ +#ifndef VNOTEX_EDITORCONFIG_H +#define VNOTEX_EDITORCONFIG_H + +#include "iconfig.h" + +#include +#include +#include + +namespace vnotex +{ + class TextEditorConfig; + class MarkdownEditorConfig; + + class EditorConfig : public IConfig + { + Q_GADGET + public: + enum Shortcut + { + Save, + EditRead, + Discard, + TypeHeading1, + TypeHeading2, + TypeHeading3, + TypeHeading4, + TypeHeading5, + TypeHeading6, + TypeHeadingNone, + TypeBold, + TypeItalic, + TypeStrikethrough, + TypeUnorderedList, + TypeOrderedList, + TypeTodoList, + TypeCheckedTodoList, + TypeCode, + TypeCodeBlock, + TypeMath, + TypeMathBlock, + TypeQuote, + TypeLink, + TypeImage, + TypeTable, + Outline, + RichPaste, + FindAndReplace, + MaxShortcut + }; + Q_ENUM(Shortcut) + + enum AutoSavePolicy + { + None, + AutoSave, + BackupFile + }; + Q_ENUM(AutoSavePolicy) + + EditorConfig(ConfigMgr *p_mgr, IConfig *p_topConfig); + + ~EditorConfig(); + + TextEditorConfig &getTextEditorConfig(); + const TextEditorConfig &getTextEditorConfig() const; + + MarkdownEditorConfig &getMarkdownEditorConfig(); + const MarkdownEditorConfig &getMarkdownEditorConfig() const; + + void init(const QJsonObject &p_app, const QJsonObject &p_user) Q_DECL_OVERRIDE; + + QJsonObject toJson() const Q_DECL_OVERRIDE; + + int getToolBarIconSize() const; + + EditorConfig::AutoSavePolicy getAutoSavePolicy() const; + void setAutoSavePolicy(EditorConfig::AutoSavePolicy p_policy); + + const QString &getBackupFileDirectory() const; + + const QString &getBackupFileExtension() const; + + const QString &getShortcut(Shortcut p_shortcut) const; + + private: + void loadCore(const QJsonObject &p_app, const QJsonObject &p_user); + + QJsonObject saveCore() const; + + void loadShortcuts(const QJsonObject &p_app, const QJsonObject &p_user); + + QJsonObject saveShortcuts() const; + + QString autoSavePolicyToString(AutoSavePolicy p_policy) const; + AutoSavePolicy stringToAutoSavePolicy(const QString &p_str) const; + + // Icon size of editor tool bar. + int m_toolBarIconSize = 14; + + QString m_shortcuts[Shortcut::MaxShortcut]; + + AutoSavePolicy m_autoSavePolicy = AutoSavePolicy::AutoSave; + + // Where to put backup file, relative to the content file itself. + QString m_backupFileDirectory; + + // Backup file extension. + QString m_backupFileExtension; + + // Will be shared with MarkdownEditorConfig. + QSharedPointer m_textEditorConfig; + + QScopedPointer m_markdownEditorConfig; + }; +} + +#endif // EDITORCONFIG_H diff --git a/src/core/events.h b/src/core/events.h new file mode 100644 index 00000000..27fb9aab --- /dev/null +++ b/src/core/events.h @@ -0,0 +1,26 @@ +#ifndef EVENTS_H +#define EVENTS_H + +#include + +namespace vnotex +{ + class Event + { + public: + void reset() + { + m_handled = false; + m_response.clear(); + } + + // Whether this event is handled. + // If it is handled, later handler should just ignore this event. + bool m_handled = false; + + // Handler could use this field to return state to the event sender. + QVariant m_response = true; + }; +} + +#endif // EVENTS_H diff --git a/src/core/exception.h b/src/core/exception.h new file mode 100644 index 00000000..1f86b8d9 --- /dev/null +++ b/src/core/exception.h @@ -0,0 +1,89 @@ +#ifndef EXCEPTION_H +#define EXCEPTION_H + +#include +#include +#include + +namespace vnotex +{ + class Exception : virtual public std::runtime_error + { + public: + enum class Type + { + InvalidPath, + FailToCreateDir, + FailToWriteFile, + FailToReadFile, + FailToRenameFile, + FailToCopyFile, + FailToCopyDir, + FailToRemoveFile, + FailToRemoveDir, + FileMissingOnDisk, + EssentialFileMissing, + InvalidArgument + }; + + Exception(Type p_type, const QString &p_what) + : std::runtime_error(p_what.toStdString()), + m_type(p_type) + { + } + + Type m_type; + + [[noreturn]] static void throwOne(Exception::Type p_type, const QString &p_what) + { + qCritical() << typeToString(p_type) << p_what; + throw Exception(p_type, p_what); + } + + private: + static QString typeToString(Exception::Type p_type) + { + switch (p_type) { + case Type::InvalidPath: + return QString("InvalidPath"); + + case Type::FailToCreateDir: + return QString("FailToCreateDir"); + + case Type::FailToWriteFile: + return QString("FailToWriteFile"); + + case Type::FailToReadFile: + return QString("FailToReadFile"); + + case Type::FailToRenameFile: + return QString("FailToRenameFile"); + + case Type::FailToCopyFile: + return QString("FailToCopyFile"); + + case Type::FailToCopyDir: + return QString("FailToCopyDir"); + + case Type::FailToRemoveFile: + return QString("FailToRemoveFile"); + + case Type::FailToRemoveDir: + return QString("FailToRemoveDir"); + + case Type::FileMissingOnDisk: + return QString("FileMissingOnDisk"); + + case Type::EssentialFileMissing: + return QString("EssentialFileMissing"); + + case Type::InvalidArgument: + return QString("InvalidArgument"); + } + + return QString::number(static_cast(p_type)); + } + }; +} // ns vnotex + +#endif // EXCEPTION_H diff --git a/src/core/filelocator.h b/src/core/filelocator.h new file mode 100644 index 00000000..ca8824ed --- /dev/null +++ b/src/core/filelocator.h @@ -0,0 +1,48 @@ +#ifndef FILELOCATOR_H +#define FILELOCATOR_H + +#include + +namespace vnotex +{ + class Node; + + // A unique locator for both internal Node and external file. + class FileLocator + { + public: + FileLocator(Node *p_node) + : m_node(p_node) + { + } + + FileLocator(const QString &p_filePath) + : m_filePath(p_filePath) + { + } + + bool isNode() const + { + return m_node; + } + + Node *node() const + { + Q_ASSERT(isNode()); + return m_node; + } + + const QString &filePath() const + { + Q_ASSERT(!isNode()); + return m_filePath; + } + + private: + Node *m_node = nullptr; + + QString m_filePath; + }; +} + +#endif // FILELOCATOR_H diff --git a/src/core/fileopenparameters.h b/src/core/fileopenparameters.h new file mode 100644 index 00000000..ae50b03c --- /dev/null +++ b/src/core/fileopenparameters.h @@ -0,0 +1,35 @@ +#ifndef FILEOPENPARAMETERS_H +#define FILEOPENPARAMETERS_H + +namespace vnotex +{ + class Node; + + struct FileOpenParameters + { + // Some modes may be not supported by some editors. + enum Mode + { + Read, + Edit, + FullPreview, + FocusPreview + }; + + Mode m_mode = Mode::Read; + + // Whether focus to the opened window. + bool m_focus = true; + + // Whether it is a new file. + bool m_newFile = false; + + // If this file is an attachment of a node, this field indicates it. + Node *m_nodeAttachedTo = nullptr; + + // Open as read-only. + bool m_readOnly = false; + }; +} + +#endif // FILEOPENPARAMETERS_H diff --git a/src/core/global.h b/src/core/global.h new file mode 100644 index 00000000..aa7aa6a5 --- /dev/null +++ b/src/core/global.h @@ -0,0 +1,78 @@ +#ifndef VNOTEX_GLOBAL_H +#define VNOTEX_GLOBAL_H + +#include +#include +#include +#include + +namespace vnotex +{ + typedef quint64 ID; + + static QPair stringToID(const QString &p_str) + { + bool ok; + ID id = p_str.toULongLong(&ok); + return qMakePair(ok, id); + } + + static QString IDToString(ID p_id) + { + return QString::number(p_id); + } + + typedef quint64 TimeStamp; + + struct Info + { + Info(const QString &p_name, const QString &p_displayName, const QString &p_description) + : m_name(p_name), m_displayName(p_displayName), m_description(p_description) + { + } + + // Name for identification. + QString m_name; + + // User-visible name. + QString m_displayName; + + QString m_description; + }; + + enum { CONTENTS_MARGIN = 2 }; + + static QString QJsonObjectToString(const QJsonObject &p_obj) { + QString str = "{"; + + auto keys = p_obj.keys(); + for (auto &key : keys) { + str += "\"" + key + "\": \"" + p_obj.value(key).toString() + "\";"; + } + + str += "}"; + return str; + } + + static QDebug operator<<(QDebug p_debug, const QJsonObject &p_obj) + { + QDebugStateSaver saver(p_debug); + p_debug << QJsonObjectToString(p_obj); + return p_debug; + } + + enum FindOption + { + None = 0, + CaseSensitive = 0x1U, + WholeWordOnly = 0x2U, + RegularExpression = 0x4U, + IncrementalSearch = 0x8U + }; + Q_DECLARE_FLAGS(FindOptions, FindOption); + +} // ns vnotex + +Q_DECLARE_OPERATORS_FOR_FLAGS(vnotex::FindOptions); + +#endif // GLOBAL_H diff --git a/src/core/htmltemplatehelper.cpp b/src/core/htmltemplatehelper.cpp new file mode 100644 index 00000000..a7d9f6bc --- /dev/null +++ b/src/core/htmltemplatehelper.cpp @@ -0,0 +1,161 @@ +#include "htmltemplatehelper.h" + +#include + +#include +#include +#include +#include +#include +#include + +using namespace vnotex; + +HtmlTemplateHelper::Template HtmlTemplateHelper::s_markdownViewerTemplate; + +QString WebGlobalOptions::toJavascriptObject() const +{ + return QStringLiteral("window.vxOptions = {\n") + + QString("webPlantUml: %1,\n").arg(boolToString(m_webPlantUml)) + + QString("webGraphviz: %1,\n").arg(boolToString(m_webGraphviz)) + + QString("constrainImageWidthEnabled: %1,\n").arg(boolToString(m_constrainImageWidthEnabled)) + + QString("protectFromXss: %1,\n").arg(boolToString(m_protectFromXss)) + + QString("sectionNumberEnabled: %1\n").arg(boolToString(m_sectionNumberEnabled)) + + QStringLiteral("}"); +} + +static bool isGlobalStyles(const ViewerResource::Resource &p_resource) +{ + return p_resource.m_name == QStringLiteral("global_styles"); +} + +// Read "global_styles" from resource and fill the holder with the content. +static void fillGlobalStyles(QString &p_template, const ViewerResource &p_resource) +{ + QString styles; + for (const auto &ele : p_resource.m_resources) { + if (isGlobalStyles(ele)) { + if (ele.m_enabled) { + for (const auto &style : ele.m_styles) { + // Read the style file content. + auto styleFile = ConfigMgr::getInst().getUserOrAppFile(style); + styles += FileUtils::readTextFile(styleFile); + } + } + break; + } + } + + if (!styles.isEmpty()) { + p_template.replace(QStringLiteral("/* VX_GLOBAL_STYLES_PLACEHOLDER */"), + styles); + } +} + +static QString fillStyleTag(const QString &p_styleFile) +{ + if (p_styleFile.isEmpty()) { + return ""; + } + auto url = PathUtils::pathToUrl(p_styleFile); + return QString("\n").arg(url.toString()); +} + +static QString fillScriptTag(const QString &p_scriptFile) +{ + if (p_scriptFile.isEmpty()) { + return ""; + } + auto url = PathUtils::pathToUrl(p_scriptFile); + return QString("\n").arg(url.toString()); +} + +static void fillThemeStyles(QString &p_template) +{ + QString styles; + const auto &themeMgr = VNoteX::getInst().getThemeMgr(); + + styles += fillStyleTag(themeMgr.getFile(Theme::File::WebStyleSheet)); + styles += fillStyleTag(themeMgr.getFile(Theme::File::HighlightStyleSheet)); + + if (!styles.isEmpty()) { + p_template.replace(QStringLiteral(""), + styles); + } +} + +static void fillGlobalOptions(QString &p_template, const WebGlobalOptions &p_opts) +{ + p_template.replace(QStringLiteral("/* VX_GLOBAL_OPTIONS_PLACEHOLDER */"), + p_opts.toJavascriptObject()); +} + +// Read all other resources in @p_resource and fill the holder with proper resource path. +static void fillResources(QString &p_template, const ViewerResource &p_resource) +{ + QString styles; + QString scripts; + + for (const auto &ele : p_resource.m_resources) { + if (ele.m_enabled && !isGlobalStyles(ele)) { + // Styles. + for (const auto &style : ele.m_styles) { + auto styleFile = ConfigMgr::getInst().getUserOrAppFile(style); + styles += fillStyleTag(styleFile); + } + + // Scripts. + for (const auto &script : ele.m_scripts) { + auto scriptFile = ConfigMgr::getInst().getUserOrAppFile(script); + scripts += fillScriptTag(scriptFile); + } + } + } + + if (!styles.isEmpty()) { + p_template.replace(QStringLiteral(""), + styles); + } + + if (!scripts.isEmpty()) { + p_template.replace(QStringLiteral(""), + scripts); + } +} + +const QString &HtmlTemplateHelper::getMarkdownViewerTemplate() +{ + return s_markdownViewerTemplate.m_template; +} + +void HtmlTemplateHelper::updateMarkdownViewerTemplate(const MarkdownEditorConfig &p_config) +{ + if (p_config.revision() == s_markdownViewerTemplate.m_revision) { + return; + } + + s_markdownViewerTemplate.m_revision = p_config.revision(); + + const auto &viewerResource = p_config.getViewerResource(); + + { + auto templateFile = ConfigMgr::getInst().getUserOrAppFile(viewerResource.m_template); + s_markdownViewerTemplate.m_template = FileUtils::readTextFile(templateFile); + } + + fillGlobalStyles(s_markdownViewerTemplate.m_template, viewerResource); + + fillThemeStyles(s_markdownViewerTemplate.m_template); + + { + WebGlobalOptions opts; + opts.m_webPlantUml = p_config.getWebPlantUml(); + opts.m_webGraphviz = p_config.getWebGraphviz(); + opts.m_sectionNumberEnabled = p_config.getSectionNumberEnabled(); + opts.m_constrainImageWidthEnabled = p_config.getConstrainImageWidthEnabled(); + opts.m_protectFromXss = p_config.getProtectFromXss(); + fillGlobalOptions(s_markdownViewerTemplate.m_template, opts); + } + + fillResources(s_markdownViewerTemplate.m_template, viewerResource); +} diff --git a/src/core/htmltemplatehelper.h b/src/core/htmltemplatehelper.h new file mode 100644 index 00000000..a252ee0b --- /dev/null +++ b/src/core/htmltemplatehelper.h @@ -0,0 +1,52 @@ +#ifndef HTMLTEMPLATEHELPER_H +#define HTMLTEMPLATEHELPER_H + +#include + +namespace vnotex +{ + class MarkdownEditorConfig; + + // Global options to be passed to Web side at the very beginning. + struct WebGlobalOptions + { + bool m_webPlantUml = true; + + bool m_webGraphviz = true; + + bool m_sectionNumberEnabled = true; + + bool m_constrainImageWidthEnabled = true; + + bool m_protectFromXss = false; + + QString boolToString(bool p_val) const + { + return p_val ? QStringLiteral("true") : QStringLiteral("false"); + } + + QString toJavascriptObject() const; + }; + + // Help to generate and update HTML templates. + class HtmlTemplateHelper + { + public: + HtmlTemplateHelper() = delete; + + static const QString &getMarkdownViewerTemplate(); + static void updateMarkdownViewerTemplate(const MarkdownEditorConfig &p_config); + + private: + struct Template + { + int m_revision = -1; + QString m_template; + }; + + // Template for MarkdownViewer. + static Template s_markdownViewerTemplate; + }; +} + +#endif // HTMLTEMPLATEHELPER_H diff --git a/src/core/iconfig.h b/src/core/iconfig.h new file mode 100644 index 00000000..d018ee58 --- /dev/null +++ b/src/core/iconfig.h @@ -0,0 +1,155 @@ +#ifndef ICONFIG_H +#define ICONFIG_H + +#include +#include + +namespace vnotex +{ + class ConfigMgr; + + // Interface for Config. + class IConfig + { + public: + IConfig(ConfigMgr *p_mgr, IConfig *p_topConfig = nullptr) + : m_topConfig(p_topConfig), + m_mgr(p_mgr) + { + } + + virtual ~IConfig() + { + } + + // Called to init top level config. + virtual void init() + { + Q_ASSERT(false); + } + + // Init from QJsonObject. + virtual void init(const QJsonObject &p_default, const QJsonObject &p_user) + { + Q_UNUSED(p_default); + Q_UNUSED(p_user); + Q_ASSERT(false); + } + + virtual void writeToSettings() const + { + Q_ASSERT(m_topConfig); + m_topConfig->writeToSettings(); + } + + virtual QJsonObject toJson() const = 0; + + const QString &getSessionName() const + { + return m_sessionName; + } + + virtual int revision() const + { + return m_revision; + } + + protected: + ConfigMgr *getMgr() const + { + return m_mgr; + } + + // First read user config, then the default config. + static QJsonValue read(const QJsonObject &p_default, + const QJsonObject &p_user, + const QString &p_key) + { + auto it = p_user.find(p_key); + if (it != p_user.end()) { + return it.value(); + } else { + return p_default.value(p_key); + } + } + + static QString readString(const QJsonObject &p_default, + const QJsonObject &p_user, + const QString &p_key) + { + return read(p_default, p_user, p_key).toString(); + } + + static QString readString(const QJsonObject &p_obj, + const QString &p_key) + { + return p_obj.value(p_key).toString(); + } + + static QByteArray readByteArray(const QJsonObject &p_obj, + const QString &p_key) + { + return QByteArray::fromBase64(readString(p_obj, p_key).toLatin1()); + } + + static void writeByteArray(QJsonObject &p_obj, + const QString &p_key, + const QByteArray &p_bytes) + { + p_obj.insert(p_key, QLatin1String(p_bytes.toBase64())); + } + + static bool readBool(const QJsonObject &p_default, + const QJsonObject &p_user, + const QString &p_key) + { + return read(p_default, p_user, p_key).toBool(); + } + + static bool readBool(const QJsonObject &p_obj, + const QString &p_key) + { + return p_obj.value(p_key).toBool(); + } + + static int readInt(const QJsonObject &p_default, + const QJsonObject &p_user, + const QString &p_key) + { + return read(p_default, p_user, p_key).toInt(); + } + + static qreal readReal(const QJsonObject &p_default, + const QJsonObject &p_user, + const QString &p_key) + { + return read(p_default, p_user, p_key).toDouble(); + } + + template + static void updateConfig(T &p_cur, + const T &p_new, + IConfig *p_config) + { + if (p_cur == p_new) { + return; + } + + ++p_config->m_revision; + p_cur = p_new; + p_config->writeToSettings(); + } + + IConfig *m_topConfig = nullptr; + + QString m_sessionName; + + // Used to indicate whether there is change after last read. + int m_revision = 0; + + private: + ConfigMgr *m_mgr = nullptr; + }; +} // ns vnotex + +#endif // ICONFIG_H diff --git a/src/core/logger.cpp b/src/core/logger.cpp new file mode 100644 index 00000000..cd90d79b --- /dev/null +++ b/src/core/logger.cpp @@ -0,0 +1,116 @@ +#include "logger.h" + +#include +#include +#include "configmgr.h" + +using namespace vnotex; + +QFile Logger::s_file; + +bool Logger::s_debugLog = false; + +void Logger::init(bool p_debugLog) +{ + s_debugLog = p_debugLog; + +#if defined(QT_NO_DEBUG) + s_file.setFileName(ConfigMgr::getInst().getLogFile()); + if (s_file.size() >= 5 * 1024 * 1024) { + s_file.open(QIODevice::WriteOnly | QIODevice::Text); + } else { + s_file.open(QIODevice::Append | QIODevice::Text); + } +#endif + + qInstallMessageHandler(Logger::log); +} + +static QString getFileName(const char *p_file) +{ + QString file(p_file); + int idx = file.lastIndexOf(QChar('/')); + if (idx == -1) { + idx = file.lastIndexOf(QChar('\\')); + } + + if (idx == -1) { + return file; + } else { + return file.mid(idx + 1); + } +} + +void Logger::log(QtMsgType p_type, const QMessageLogContext &p_context, const QString &p_msg) +{ +#if defined(QT_NO_DEBUG) + if (!s_debugLog && p_type == QtDebugMsg) { + return; + } +#endif + + QByteArray localMsg = p_msg.toUtf8(); + QString header; + + switch (p_type) { + case QtDebugMsg: + header = QStringLiteral("Debug:"); + break; + + case QtInfoMsg: + header = QStringLiteral("Info:"); + break; + + case QtWarningMsg: + header = QStringLiteral("Warning:"); + break; + + case QtCriticalMsg: + header = QStringLiteral("Critical:"); + break; + + case QtFatalMsg: + header = QStringLiteral("Fatal:"); + } + + QString fileName = getFileName(p_context.file); + +#if defined(QT_NO_DEBUG) + QTextStream stream(&s_file); + stream << header << (QString("(%1:%2) ").arg(fileName).arg(p_context.line)) + << localMsg << "\n"; + + if (p_type == QtFatalMsg) { + s_file.close(); + abort(); + } +#else + std::string fileStr = fileName.toStdString(); + const char *file = fileStr.c_str(); + + switch (p_type) { + case QtDebugMsg: + fprintf(stderr, "%s(%s:%u) %s\n", + header.toStdString().c_str(), file, p_context.line, localMsg.constData()); + break; + case QtInfoMsg: + fprintf(stderr, "%s(%s:%u) %s\n", + header.toStdString().c_str(), file, p_context.line, localMsg.constData()); + break; + case QtWarningMsg: + fprintf(stderr, "%s(%s:%u) %s\n", + header.toStdString().c_str(), file, p_context.line, localMsg.constData()); + break; + case QtCriticalMsg: + fprintf(stderr, "%s(%s:%u) %s\n", + header.toStdString().c_str(), file, p_context.line, localMsg.constData()); + break; + case QtFatalMsg: + fprintf(stderr, "%s(%s:%u) %s\n", + header.toStdString().c_str(), file, p_context.line, localMsg.constData()); + abort(); + } + + fflush(stderr); +#endif +} diff --git a/src/core/logger.h b/src/core/logger.h new file mode 100644 index 00000000..3b12d100 --- /dev/null +++ b/src/core/logger.h @@ -0,0 +1,27 @@ +#ifndef LOGGER_H +#define LOGGER_H + +#include +#include + +class QFile; + +namespace vnotex +{ + class Logger + { + public: + Logger() = delete; + + static void init(bool p_debugLog); + + private: + static void log(QtMsgType p_type, const QMessageLogContext &p_context, const QString &p_msg); + + static QFile s_file; + + static bool s_debugLog; + }; +} + +#endif // LOGGER_H diff --git a/src/core/mainconfig.cpp b/src/core/mainconfig.cpp new file mode 100644 index 00000000..40ca2961 --- /dev/null +++ b/src/core/mainconfig.cpp @@ -0,0 +1,113 @@ +#include "mainconfig.h" + +#include +#include + +#include "configmgr.h" +#include "coreconfig.h" +#include "editorconfig.h" +#include "widgetconfig.h" + +using namespace vnotex; + +bool MainConfig::s_versionChanged = false; + +MainConfig::MainConfig(ConfigMgr *p_mgr) + : IConfig(p_mgr, nullptr), + m_coreConfig(new CoreConfig(p_mgr, this)), + m_editorConfig(new EditorConfig(p_mgr, this)), + m_widgetConfig(new WidgetConfig(p_mgr, this)) +{ +} + +MainConfig::~MainConfig() +{ + +} + +void MainConfig::init() +{ + auto mgr = getMgr(); + auto appSettings = mgr->getSettings(ConfigMgr::Source::App); + auto userSettings = mgr->getSettings(ConfigMgr::Source::User); + const auto &appJobj = appSettings->getJson(); + const auto &userJobj = userSettings->getJson(); + + loadMetadata(appJobj, userJobj); + + m_coreConfig->init(appJobj, userJobj); + + m_editorConfig->init(appJobj, userJobj); + + m_widgetConfig->init(appJobj, userJobj); + + if (isVersionChanged()) { + // Update user config. + writeToSettings(); + } +} + +void MainConfig::loadMetadata(const QJsonObject &p_app, const QJsonObject &p_user) +{ + const auto appObj = p_app.value(QStringLiteral("metadata")).toObject(); + const auto userObj = p_user.value(QStringLiteral("metadata")).toObject(); + + m_version = appObj.value(QStringLiteral("version")).toString(); + m_userVersion = userObj.value(QStringLiteral("version")).toString(); + s_versionChanged = m_version != m_userVersion; + qDebug() << "version" << m_version << "user version" << m_userVersion; +} + +QJsonObject MainConfig::saveMetaData() const +{ + QJsonObject metaObj; + metaObj[QStringLiteral("version")] = m_version; + + return metaObj; +} + +bool MainConfig::isVersionChanged() +{ + return s_versionChanged; +} + +CoreConfig &MainConfig::getCoreConfig() +{ + return *m_coreConfig; +} + +EditorConfig &MainConfig::getEditorConfig() +{ + return *m_editorConfig; +} + +WidgetConfig &MainConfig::getWidgetConfig() +{ + return *m_widgetConfig; +} + +void MainConfig::writeToSettings() const +{ + getMgr()->writeUserSettings(toJson()); +} + +QJsonObject MainConfig::toJson() const +{ + QJsonObject obj; + obj[QStringLiteral("metadata")] = saveMetaData(); + obj[m_coreConfig->getSessionName()] = m_coreConfig->toJson(); + obj[m_editorConfig->getSessionName()] = m_editorConfig->toJson(); + obj[m_widgetConfig->getSessionName()] = m_widgetConfig->toJson(); + return obj; +} + +const QString &MainConfig::getVersion() const +{ + return m_version; +} + +QString MainConfig::getVersion(const QJsonObject &p_jobj) +{ + const auto metadataObj = p_jobj.value(QStringLiteral("metadata")).toObject(); + return metadataObj.value(QStringLiteral("version")).toString(); +} diff --git a/src/core/mainconfig.h b/src/core/mainconfig.h new file mode 100644 index 00000000..5a10244f --- /dev/null +++ b/src/core/mainconfig.h @@ -0,0 +1,63 @@ +#ifndef MAINCONFIG_H +#define MAINCONFIG_H + +#include "iconfig.h" + +#include +#include + +class QJsonObject; + +namespace vnotex +{ + class CoreConfig; + class EditorConfig; + class WidgetConfig; + + class MainConfig : public IConfig + { + public: + explicit MainConfig(ConfigMgr *p_mgr); + + ~MainConfig(); + + void init() Q_DECL_OVERRIDE; + + const QString &getVersion() const; + + CoreConfig &getCoreConfig(); + + EditorConfig &getEditorConfig(); + + WidgetConfig &getWidgetConfig(); + + void writeToSettings() const Q_DECL_OVERRIDE; + + QJsonObject toJson() const Q_DECL_OVERRIDE; + + static QString getVersion(const QJsonObject &p_jobj); + + static bool isVersionChanged(); + + private: + void loadMetadata(const QJsonObject &p_app, const QJsonObject &p_user); + + QJsonObject saveMetaData() const; + + // Version of VNoteX. + QString m_version; + + // Version of user's configuration. + QString m_userVersion; + + QScopedPointer m_coreConfig; + + QScopedPointer m_editorConfig; + + QScopedPointer m_widgetConfig; + + static bool s_versionChanged; + }; +} // ns vnotex + +#endif // MAINCONFIG_H diff --git a/src/core/markdowneditorconfig.cpp b/src/core/markdowneditorconfig.cpp new file mode 100644 index 00000000..0081b559 --- /dev/null +++ b/src/core/markdowneditorconfig.cpp @@ -0,0 +1,197 @@ +#include "markdowneditorconfig.h" + +#include + +#include "texteditorconfig.h" +#include "mainconfig.h" + +using namespace vnotex; + +#define READSTR(key) readString(appObj, userObj, (key)) +#define READBOOL(key) readBool(appObj, userObj, (key)) +#define READREAL(key) readReal(appObj, userObj, (key)) + +MarkdownEditorConfig::MarkdownEditorConfig(ConfigMgr *p_mgr, + IConfig *p_topConfig, + const QSharedPointer &p_textEditorConfig) + : IConfig(p_mgr, p_topConfig), + m_textEditorConfig(p_textEditorConfig) +{ + m_sessionName = QStringLiteral("markdown_editor"); +} + +void MarkdownEditorConfig::init(const QJsonObject &p_app, const QJsonObject &p_user) +{ + const auto appObj = p_app.value(m_sessionName).toObject(); + const auto userObj = p_user.value(m_sessionName).toObject(); + + loadViewerResource(appObj, userObj); + + m_webPlantUml = READBOOL(QStringLiteral("web_plantuml")); + m_webGraphviz = READBOOL(QStringLiteral("web_graphviz")); + + m_prependDotInRelativeLink = READBOOL(QStringLiteral("prepend_dot_in_relative_link")); + m_confirmBeforeClearObsoleteImages = READBOOL(QStringLiteral("confirm_before_clear_obsolete_images")); + m_insertFileNameAsTitle = READBOOL(QStringLiteral("insert_file_name_as_title")); + m_sectionNumberEnabled = READBOOL(QStringLiteral("section_number")); + m_constrainImageWidthEnabled = READBOOL(QStringLiteral("constrain_image_width")); + m_constrainInPlacePreviewWidthEnabled = READBOOL(QStringLiteral("constrain_inplace_preview_width")); + m_zoomFactorInReadMode = READREAL(QStringLiteral("zoom_factor_in_read_mode")); + m_fetchImagesInParseAndPaste = READBOOL(QStringLiteral("fetch_images_in_parse_and_paste")); + m_protectFromXss = READBOOL(QStringLiteral("protect_from_xss")); +} + +QJsonObject MarkdownEditorConfig::toJson() const +{ + QJsonObject obj; + obj[QStringLiteral("viewer_resource")] = saveViewerResource(); + obj[QStringLiteral("web_plantuml")] = m_webPlantUml; + obj[QStringLiteral("web_graphviz")] = m_webGraphviz; + obj[QStringLiteral("prepend_dot_in_relative_link")] = m_prependDotInRelativeLink; + obj[QStringLiteral("confirm_before_clear_obsolete_images")] = m_confirmBeforeClearObsoleteImages; + obj[QStringLiteral("insert_file_name_as_title")] = m_insertFileNameAsTitle; + obj[QStringLiteral("section_number")] = m_sectionNumberEnabled; + obj[QStringLiteral("constrain_image_width")] = m_constrainImageWidthEnabled; + obj[QStringLiteral("constrain_inplace_preview_width")] = m_constrainInPlacePreviewWidthEnabled; + obj[QStringLiteral("zoom_factor_in_read_mode")] = m_zoomFactorInReadMode; + obj[QStringLiteral("fetch_images_in_parse_and_paste")] = m_fetchImagesInParseAndPaste; + obj[QStringLiteral("protect_from_xss")] = m_protectFromXss; + return obj; +} + +TextEditorConfig &MarkdownEditorConfig::getTextEditorConfig() +{ + return *m_textEditorConfig; +} + +const TextEditorConfig &MarkdownEditorConfig::getTextEditorConfig() const +{ + return *m_textEditorConfig; +} + +int MarkdownEditorConfig::revision() const +{ + return m_revision + m_textEditorConfig->revision(); +} + +void MarkdownEditorConfig::loadViewerResource(const QJsonObject &p_app, const QJsonObject &p_user) +{ + const QString name(QStringLiteral("viewer_resource")); + + if (MainConfig::isVersionChanged()) { + bool needOverride = p_app[QStringLiteral("override_viewer_resource")].toBool(); + if (needOverride) { + qInfo() << "override \"viewer_resource\" in user configuration due to version change"; + m_viewerResource.init(p_app[name].toObject()); + return; + } + } + + if (p_user.contains(name)) { + m_viewerResource.init(p_user[name].toObject()); + } else { + m_viewerResource.init(p_app[name].toObject()); + } +} + +QJsonObject MarkdownEditorConfig::saveViewerResource() const +{ + return m_viewerResource.toJson(); +} + +const ViewerResource &MarkdownEditorConfig::getViewerResource() const +{ + return m_viewerResource; +} + +bool MarkdownEditorConfig::getWebPlantUml() const +{ + return m_webPlantUml; +} + +bool MarkdownEditorConfig::getWebGraphviz() const +{ + return m_webGraphviz; +} + +bool MarkdownEditorConfig::getPrependDotInRelativeLink() const +{ + return m_prependDotInRelativeLink; +} + +bool MarkdownEditorConfig::getConfirmBeforeClearObsoleteImages() const +{ + return m_confirmBeforeClearObsoleteImages; +} + +void MarkdownEditorConfig::setConfirmBeforeClearObsoleteImages(bool p_confirm) +{ + updateConfig(m_confirmBeforeClearObsoleteImages, + p_confirm, + this); +} + +bool MarkdownEditorConfig::getInsertFileNameAsTitle() const +{ + return m_insertFileNameAsTitle; +} + +void MarkdownEditorConfig::setInsertFileNameAsTitle(bool p_enabled) +{ + updateConfig(m_insertFileNameAsTitle, p_enabled, this); +} + +bool MarkdownEditorConfig::getSectionNumberEnabled() const +{ + return m_sectionNumberEnabled; +} + +void MarkdownEditorConfig::setSectionNumberEnabled(bool p_enabled) +{ + updateConfig(m_sectionNumberEnabled, p_enabled, this); +} + +bool MarkdownEditorConfig::getConstrainImageWidthEnabled() const +{ + return m_constrainImageWidthEnabled; +} + +void MarkdownEditorConfig::setConstrainImageWidthEnabled(bool p_enabled) +{ + updateConfig(m_constrainImageWidthEnabled, p_enabled, this); +} + +bool MarkdownEditorConfig::getConstrainInPlacePreviewWidthEnabled() const +{ + return m_constrainInPlacePreviewWidthEnabled; +} + +void MarkdownEditorConfig::setConstrainInPlacePreviewWidthEnabled(bool p_enabled) +{ + updateConfig(m_constrainInPlacePreviewWidthEnabled, p_enabled, this); +} + +qreal MarkdownEditorConfig::getZoomFactorInReadMode() const +{ + return m_zoomFactorInReadMode; +} + +void MarkdownEditorConfig::setZoomFactorInReadMode(qreal p_factor) +{ + updateConfig(m_zoomFactorInReadMode, p_factor, this); +} + +bool MarkdownEditorConfig::getFetchImagesInParseAndPaste() const +{ + return m_fetchImagesInParseAndPaste; +} + +void MarkdownEditorConfig::setFetchImagesInParseAndPaste(bool p_enabled) +{ + updateConfig(m_fetchImagesInParseAndPaste, p_enabled, this); +} + +bool MarkdownEditorConfig::getProtectFromXss() const +{ + return m_protectFromXss; +} diff --git a/src/core/markdowneditorconfig.h b/src/core/markdowneditorconfig.h new file mode 100644 index 00000000..c2ae0a91 --- /dev/null +++ b/src/core/markdowneditorconfig.h @@ -0,0 +1,103 @@ +#ifndef MARKDOWNEDITORCONFIG_H +#define MARKDOWNEDITORCONFIG_H + +#include "iconfig.h" + +#include "viewerresource.h" + +#include +#include + +namespace vnotex +{ + class TextEditorConfig; + + class MarkdownEditorConfig : public IConfig + { + public: + MarkdownEditorConfig(ConfigMgr *p_mgr, + IConfig *p_topConfig, + const QSharedPointer &p_textEditorConfig); + + void init(const QJsonObject &p_app, const QJsonObject &p_user) Q_DECL_OVERRIDE; + + QJsonObject toJson() const Q_DECL_OVERRIDE; + + void loadViewerResource(const QJsonObject &p_app, const QJsonObject &p_user); + QJsonObject saveViewerResource() const; + + int revision() const Q_DECL_OVERRIDE; + + TextEditorConfig &getTextEditorConfig(); + const TextEditorConfig &getTextEditorConfig() const; + + const ViewerResource &getViewerResource() const; + + bool getWebPlantUml() const; + + bool getWebGraphviz() const; + + bool getPrependDotInRelativeLink() const; + + bool getConfirmBeforeClearObsoleteImages() const; + void setConfirmBeforeClearObsoleteImages(bool p_confirm); + + bool getInsertFileNameAsTitle() const; + void setInsertFileNameAsTitle(bool p_enabled); + + bool getSectionNumberEnabled() const; + void setSectionNumberEnabled(bool p_enabled); + + bool getConstrainImageWidthEnabled() const; + void setConstrainImageWidthEnabled(bool p_enabled); + + bool getConstrainInPlacePreviewWidthEnabled() const; + void setConstrainInPlacePreviewWidthEnabled(bool p_enabled); + + qreal getZoomFactorInReadMode() const; + void setZoomFactorInReadMode(qreal p_factor); + + bool getFetchImagesInParseAndPaste() const; + void setFetchImagesInParseAndPaste(bool p_enabled); + + bool getProtectFromXss() const; + + private: + QSharedPointer m_textEditorConfig; + + ViewerResource m_viewerResource; + + // Whether use javascript or external program to render PlantUML. + bool m_webPlantUml = true; + + bool m_webGraphviz = true; + + // Whether prepend a dot in front of the relative link, like images. + bool m_prependDotInRelativeLink = false; + + // Whether ask for user confirmation before clearing obsolete images. + bool m_confirmBeforeClearObsoleteImages = true; + + // Whether insert the name of the new file as title. + bool m_insertFileNameAsTitle = true; + + // Whether enable section numbering. + bool m_sectionNumberEnabled = true; + + // Whether enable image width constraint. + bool m_constrainImageWidthEnabled = true; + + // Whether enable in-place preview width constraint. + bool m_constrainInPlacePreviewWidthEnabled = false; + + qreal m_zoomFactorInReadMode = 1.0; + + // Whether fetch images to local in Parse To Markdown And Paste. + bool m_fetchImagesInParseAndPaste = true; + + // Whether protect from Cross-Site Scripting. + bool m_protectFromXss = false; + }; +} + +#endif // MARKDOWNEDITORCONFIG_H diff --git a/src/core/namebasedserver.h b/src/core/namebasedserver.h new file mode 100644 index 00000000..9587e897 --- /dev/null +++ b/src/core/namebasedserver.h @@ -0,0 +1,50 @@ +#ifndef NAMEBASEDSERVER_H +#define NAMEBASEDSERVER_H + +#include +#include +#include +#include + +namespace vnotex +{ + template + class NameBasedServer + { + public: + // Register an item. + bool registerItem(const QString &p_name, const QSharedPointer &p_item) + { + if (m_data.contains(p_name)) { + qWarning() << "item to register already exists with name" << p_name; + return false; + } + + m_data.insert(p_name, p_item); + return true; + } + + // Get an item. + QSharedPointer getItem(const QString &p_name) + { + auto it = m_data.find(p_name); + if (it != m_data.end()) { + return it.value(); + } + + return nullptr; + } + + QList> getAllItems() const + { + return m_data.values(); + } + + private: + // Name to item mapping. + QHash> m_data; + }; +} // ns vnotex + + +#endif // NAMEBASEDSERVER_H diff --git a/src/core/notebook/bundlenotebook.cpp b/src/core/notebook/bundlenotebook.cpp new file mode 100644 index 00000000..c4929eab --- /dev/null +++ b/src/core/notebook/bundlenotebook.cpp @@ -0,0 +1,60 @@ +#include "bundlenotebook.h" + +#include + +#include +#include +#include + +using namespace vnotex; + +BundleNotebook::BundleNotebook(const NotebookParameters &p_paras, + QObject *p_parent) + : Notebook(p_paras, p_parent) +{ + auto configMgr = getBundleNotebookConfigMgr(); + auto config = configMgr->readNotebookConfig(); + m_nextNodeId = config->m_nextNodeId; +} + +BundleNotebookConfigMgr *BundleNotebook::getBundleNotebookConfigMgr() const +{ + return dynamic_cast(getConfigMgr().data()); +} + +ID BundleNotebook::getNextNodeId() const +{ + return m_nextNodeId; +} + +ID BundleNotebook::getAndUpdateNextNodeId() +{ + auto id = m_nextNodeId++; + getBundleNotebookConfigMgr()->writeNotebookConfig(); + return id; +} + +void BundleNotebook::updateNotebookConfig() +{ + getBundleNotebookConfigMgr()->writeNotebookConfig(); +} + +void BundleNotebook::removeNotebookConfig() +{ + getBundleNotebookConfigMgr()->removeNotebookConfig(); +} + +void BundleNotebook::remove() +{ + // Remove all nodes. + removeNode(getRootNode()); + + // Remove notebook config. + removeNotebookConfig(); + + // Remove notebook root folder if it is empty. + if (!FileUtils::removeDirIfEmpty(getRootFolderAbsolutePath())) { + qInfo() << QString("root folder of notebook (%1) is not empty and needs manual clean up") + .arg(getRootFolderAbsolutePath()); + } +} diff --git a/src/core/notebook/bundlenotebook.h b/src/core/notebook/bundlenotebook.h new file mode 100644 index 00000000..7ec9aa01 --- /dev/null +++ b/src/core/notebook/bundlenotebook.h @@ -0,0 +1,35 @@ +#ifndef BUNDLENOTEBOOK_H +#define BUNDLENOTEBOOK_H + +#include "notebook.h" +#include "global.h" + +namespace vnotex +{ + class BundleNotebookConfigMgr; + + class BundleNotebook : public Notebook + { + Q_OBJECT + public: + BundleNotebook(const NotebookParameters &p_paras, + QObject *p_parent = nullptr); + + ID getNextNodeId() const Q_DECL_OVERRIDE; + + ID getAndUpdateNextNodeId() Q_DECL_OVERRIDE; + + void updateNotebookConfig() Q_DECL_OVERRIDE; + + void removeNotebookConfig() Q_DECL_OVERRIDE; + + void remove() Q_DECL_OVERRIDE; + + private: + BundleNotebookConfigMgr *getBundleNotebookConfigMgr() const; + + ID m_nextNodeId = 1; + }; +} // ns vnotex + +#endif // BUNDLENOTEBOOK_H diff --git a/src/core/notebook/bundlenotebookfactory.cpp b/src/core/notebook/bundlenotebookfactory.cpp new file mode 100644 index 00000000..e29393b4 --- /dev/null +++ b/src/core/notebook/bundlenotebookfactory.cpp @@ -0,0 +1,104 @@ +#include "bundlenotebookfactory.h" + +#include +#include + +#include +#include "../exception.h" +#include "notebookconfigmgr/bundlenotebookconfigmgr.h" +#include "notebookparameters.h" +#include "bundlenotebook.h" +#include "notebookmgr.h" +#include "notebookconfigmgr/notebookconfig.h" + +using namespace vnotex; + +BundleNotebookFactory::BundleNotebookFactory() +{ +} + +QString BundleNotebookFactory::getName() const +{ + return QStringLiteral("bundle.vnotex"); +} + +QString BundleNotebookFactory::getDisplayName() const +{ + return QObject::tr("Bundled Notebook"); +} + +QString BundleNotebookFactory::getDescription() const +{ + return QObject::tr("A notebook with configuration files to track its content"); +} + +// Check if root folder is valid for a new notebook. +static void checkRootFolderForNewNotebook(const NotebookParameters &p_paras) +{ + if (p_paras.m_rootFolderPath.isEmpty()) { + QString msg("no local root folder is specified"); + qCritical() << msg; + throw Exception(Exception::Type::InvalidPath, msg); + } else if (p_paras.m_ensureEmptyRootFolder && !PathUtils::isEmptyDir(p_paras.m_rootFolderPath)) { + QString msg = QString("local root folder must be empty: %1 (%2)") + .arg(p_paras.m_rootFolderPath, PathUtils::absolutePath(p_paras.m_rootFolderPath)); + qCritical() << msg; + throw Exception(Exception::Type::InvalidPath, msg); + } +} + +QSharedPointer BundleNotebookFactory::newNotebook(const NotebookParameters &p_paras) +{ + checkParameters(p_paras); + + checkRootFolderForNewNotebook(p_paras); + + p_paras.m_notebookConfigMgr->createEmptySkeleton(p_paras); + + auto notebook = QSharedPointer::create(p_paras); + return notebook; +} + +QSharedPointer BundleNotebookFactory::createNotebook(const NotebookMgr &p_mgr, + const QString &p_rootFolderPath, + const QSharedPointer &p_backend) +{ + // Read basic info about this notebook. + auto nbConfig = BundleNotebookConfigMgr::readNotebookConfig(p_backend); + auto paras = NotebookParameters::createNotebookParameters(p_mgr, + p_backend, + getName(), + nbConfig->m_name, + nbConfig->m_description, + p_rootFolderPath, + QIcon(), + nbConfig->m_imageFolder, + nbConfig->m_attachmentFolder, + nbConfig->m_createdTimeUtc, + nbConfig->m_versionController, + nbConfig->m_notebookConfigMgr); + checkParameters(*paras); + auto notebook = QSharedPointer::create(*paras); + return notebook; +} + +void BundleNotebookFactory::checkParameters(const NotebookParameters &p_paras) const +{ + auto configMgr = dynamic_cast(p_paras.m_notebookConfigMgr.data()); + if (!configMgr) { + Exception::throwOne(Exception::Type::InvalidArgument, + QString("Invalid notebook configuration manager")); + } +} + +bool BundleNotebookFactory::checkRootFolder(const QSharedPointer &p_backend) +{ + try { + BundleNotebookConfigMgr::readNotebookConfig(p_backend); + } catch (Exception &p_e) { + Q_UNUSED(p_e); + return false; + } + + return true; +} diff --git a/src/core/notebook/bundlenotebookfactory.h b/src/core/notebook/bundlenotebookfactory.h new file mode 100644 index 00000000..455c6031 --- /dev/null +++ b/src/core/notebook/bundlenotebookfactory.h @@ -0,0 +1,38 @@ +#ifndef BUNDLENOTEBOOKFACTORY_H +#define BUNDLENOTEBOOKFACTORY_H + +#include "inotebookfactory.h" + + +namespace vnotex +{ + class BundleNotebookFactory : public INotebookFactory + { + public: + BundleNotebookFactory(); + + // Get the name of this factory. + QString getName() const Q_DECL_OVERRIDE; + + // Get the display name of this factory. + QString getDisplayName() const Q_DECL_OVERRIDE; + + // Get the description of this factory. + QString getDescription() const Q_DECL_OVERRIDE; + + // New a notebook with given information and return an instance of that notebook. + QSharedPointer newNotebook(const NotebookParameters &p_paras) Q_DECL_OVERRIDE; + + // Create a Notebook instance from existing root folder. + QSharedPointer createNotebook(const NotebookMgr &p_mgr, + const QString &p_rootFolderPath, + const QSharedPointer &p_backend) Q_DECL_OVERRIDE; + + bool checkRootFolder(const QSharedPointer &p_backend) Q_DECL_OVERRIDE; + + private: + void checkParameters(const NotebookParameters &p_paras) const; + }; +} // ns vnotex + +#endif // BUNDLENOTEBOOKFACTORY_H diff --git a/src/core/notebook/filenode.cpp b/src/core/notebook/filenode.cpp new file mode 100644 index 00000000..c2f4a620 --- /dev/null +++ b/src/core/notebook/filenode.cpp @@ -0,0 +1,130 @@ +#include "filenode.h" + +#include +#include +#include +#include +#include "notebook.h" + +using namespace vnotex; + +FileNode::FileNode(ID p_id, + const QString &p_name, + const QDateTime &p_createdTimeUtc, + const QDateTime &p_modifiedTimeUtc, + const QString &p_attachmentFolder, + const QStringList &p_tags, + Notebook *p_notebook, + Node *p_parent) + : Node(Node::Type::File, + p_id, + p_name, + p_createdTimeUtc, + p_notebook, + p_parent), + m_modifiedTimeUtc(p_modifiedTimeUtc), + m_attachmentFolder(p_attachmentFolder), + m_tags(p_tags) +{ +} + +QVector> FileNode::getChildren() const +{ + return QVector>(); +} + +int FileNode::getChildrenCount() const +{ + return 0; +} + +void FileNode::addChild(const QSharedPointer &p_node) +{ + Q_ASSERT(false); + Q_UNUSED(p_node); +} + +void FileNode::insertChild(int p_idx, const QSharedPointer &p_node) +{ + Q_ASSERT(false); + Q_UNUSED(p_idx); + Q_UNUSED(p_node); +} + +void FileNode::removeChild(const QSharedPointer &p_child) +{ + Q_ASSERT(false); + Q_UNUSED(p_child); +} + +QDateTime FileNode::getModifiedTimeUtc() const +{ + return m_modifiedTimeUtc; +} + +void FileNode::setModifiedTimeUtc() +{ + m_modifiedTimeUtc = QDateTime::currentDateTimeUtc(); +} + +QString FileNode::getAttachmentFolder() const +{ + return m_attachmentFolder; +} + +void FileNode::setAttachmentFolder(const QString &p_folder) +{ + m_attachmentFolder = p_folder; +} + +QStringList FileNode::addAttachment(const QString &p_destFolderPath, const QStringList &p_files) +{ + QStringList addedFiles; + for (const auto &file : p_files) { + auto destFilePath = m_backend->renameIfExistsCaseInsensitive( + PathUtils::concatenateFilePath(p_destFolderPath, PathUtils::fileName(file))); + m_backend->copyFile(file, destFilePath); + addedFiles << destFilePath; + } + + return addedFiles; +} + +QString FileNode::newAttachmentFile(const QString &p_destFolderPath, const QString &p_name) +{ + auto destFilePath = m_backend->renameIfExistsCaseInsensitive( + PathUtils::concatenateFilePath(p_destFolderPath, p_name)); + m_backend->writeFile(destFilePath, QByteArray()); + return destFilePath; +} + +QString FileNode::newAttachmentFolder(const QString &p_destFolderPath, const QString &p_name) +{ + auto destFilePath = m_backend->renameIfExistsCaseInsensitive( + PathUtils::concatenateFilePath(p_destFolderPath, p_name)); + m_backend->makePath(destFilePath); + return destFilePath; +} + +QString FileNode::renameAttachment(const QString &p_path, const QString &p_name) +{ + m_backend->renameFile(p_path, p_name); + return p_name; +} + +void FileNode::removeAttachment(const QStringList &p_paths) +{ + // Just move it to recycle bin but not added as a child node of recycle bin. + for (const auto &pa : p_paths) { + if (QFileInfo(pa).isDir()) { + m_notebook->moveDirToRecycleBin(pa); + } else { + m_notebook->moveFileToRecycleBin(pa); + } + } +} + +QStringList FileNode::getTags() const +{ + return m_tags; +} diff --git a/src/core/notebook/filenode.h b/src/core/notebook/filenode.h new file mode 100644 index 00000000..2bce7bc2 --- /dev/null +++ b/src/core/notebook/filenode.h @@ -0,0 +1,60 @@ +#ifndef FILENODE_H +#define FILENODE_H + +#include "node.h" + +namespace vnotex +{ + // File node of notebook. + class FileNode : public Node + { + public: + FileNode(ID p_id, + const QString &p_name, + const QDateTime &p_createdTimeUtc, + const QDateTime &p_modifiedTimeUtc, + const QString &p_attachmentFolder, + const QStringList &p_tags, + Notebook *p_notebook, + Node *p_parent = nullptr); + + QVector> getChildren() const Q_DECL_OVERRIDE; + + int getChildrenCount() const Q_DECL_OVERRIDE; + + void addChild(const QSharedPointer &p_node) Q_DECL_OVERRIDE; + + void insertChild(int p_idx, const QSharedPointer &p_node) Q_DECL_OVERRIDE; + + void removeChild(const QSharedPointer &p_child) Q_DECL_OVERRIDE; + + QDateTime getModifiedTimeUtc() const Q_DECL_OVERRIDE; + + void setModifiedTimeUtc() Q_DECL_OVERRIDE; + + QString getAttachmentFolder() const Q_DECL_OVERRIDE; + + void setAttachmentFolder(const QString &p_folder) Q_DECL_OVERRIDE; + + QStringList addAttachment(const QString &p_destFolderPath, const QStringList &p_files) Q_DECL_OVERRIDE; + + QString newAttachmentFile(const QString &p_destFolderPath, const QString &p_name) Q_DECL_OVERRIDE; + + QString newAttachmentFolder(const QString &p_destFolderPath, const QString &p_name) Q_DECL_OVERRIDE; + + QString renameAttachment(const QString &p_path, const QString &p_name) Q_DECL_OVERRIDE; + + void removeAttachment(const QStringList &p_paths) Q_DECL_OVERRIDE; + + QStringList getTags() const Q_DECL_OVERRIDE; + + private: + QDateTime m_modifiedTimeUtc; + + QString m_attachmentFolder; + + QStringList m_tags; + }; +} + +#endif // FILENODE_H diff --git a/src/core/notebook/foldernode.cpp b/src/core/notebook/foldernode.cpp new file mode 100644 index 00000000..f20f5c2c --- /dev/null +++ b/src/core/notebook/foldernode.cpp @@ -0,0 +1,65 @@ +#include "foldernode.h" + +using namespace vnotex; + +FolderNode::FolderNode(const QString &p_name, + Notebook *p_notebook, + Node *p_parent) + : Node(Node::Type::Folder, + p_name, + p_notebook, + p_parent) +{ +} + +void FolderNode::loadFolder(ID p_id, + const QDateTime &p_createdTimeUtc, + const QVector> &p_children) +{ + Node::loadInfo(p_id, p_createdTimeUtc); + m_children = p_children; +} + +QVector> FolderNode::getChildren() const +{ + return m_children; +} + +int FolderNode::getChildrenCount() const +{ + return m_children.size(); +} + +void FolderNode::addChild(const QSharedPointer &p_node) +{ + insertChild(m_children.size(), p_node); +} + +void FolderNode::insertChild(int p_idx, const QSharedPointer &p_node) +{ + p_node->setParent(this); + + m_children.insert(p_idx, p_node); +} + +void FolderNode::removeChild(const QSharedPointer &p_child) +{ + if (m_children.removeOne(p_child)) { + p_child->setParent(nullptr); + } +} + +QDateTime FolderNode::getModifiedTimeUtc() const +{ + return getCreatedTimeUtc(); +} + +void FolderNode::setModifiedTimeUtc() +{ + Q_ASSERT(false); +} + +QDir FolderNode::toDir() const +{ + return QDir(fetchAbsolutePath()); +} diff --git a/src/core/notebook/foldernode.h b/src/core/notebook/foldernode.h new file mode 100644 index 00000000..5a0c5e7e --- /dev/null +++ b/src/core/notebook/foldernode.h @@ -0,0 +1,40 @@ +#ifndef FOLDERNODE_H +#define FOLDERNODE_H + +#include "node.h" + +namespace vnotex +{ + class FolderNode : public Node + { + public: + FolderNode(const QString &p_name, + Notebook *p_notebook, + Node *p_parent = nullptr); + + void loadFolder(ID p_id, + const QDateTime &p_createdTimeUtc, + const QVector> &p_children); + + QVector> getChildren() const Q_DECL_OVERRIDE; + + int getChildrenCount() const Q_DECL_OVERRIDE; + + void addChild(const QSharedPointer &p_node) Q_DECL_OVERRIDE; + + void insertChild(int p_idx, const QSharedPointer &p_node) Q_DECL_OVERRIDE; + + void removeChild(const QSharedPointer &p_child) Q_DECL_OVERRIDE; + + QDateTime getModifiedTimeUtc() const Q_DECL_OVERRIDE; + + void setModifiedTimeUtc() Q_DECL_OVERRIDE; + + QDir toDir() const Q_DECL_OVERRIDE; + + private: + QVector> m_children; + }; +} // ns vnotex + +#endif // FOLDERNODE_H diff --git a/src/core/notebook/inotebookfactory.h b/src/core/notebook/inotebookfactory.h new file mode 100644 index 00000000..9247ff44 --- /dev/null +++ b/src/core/notebook/inotebookfactory.h @@ -0,0 +1,46 @@ +#ifndef INOTEBOOKFACTORY_H +#define INOTEBOOKFACTORY_H + +#include +#include + +namespace vnotex +{ + class Notebook; + class NotebookParameters; + class INotebookBackend; + class NotebookMgr; + + // Abstract factory to create notebook. + class INotebookFactory + { + public: + virtual ~INotebookFactory() + { + } + + // Get the name of this factory. + virtual QString getName() const = 0; + + // Get the display name of this factory. + virtual QString getDisplayName() const = 0; + + // Get the description of this factory. + virtual QString getDescription() const = 0; + + // New a notebook with given information and return an instance of that notebook. + // The root folder should be empty. + virtual QSharedPointer newNotebook(const NotebookParameters &p_paras) = 0; + + // Create a Notebook instance from existing root folder. + virtual QSharedPointer createNotebook(const NotebookMgr &p_mgr, + const QString &p_rootFolderPath, + const QSharedPointer &p_backend) = 0; + + // Check if @p_rootFolderPath is a valid root folder to use by this factory + // to create a notebook. + virtual bool checkRootFolder(const QSharedPointer &p_backend) = 0; + }; +} // ns vnotex + +#endif // INOTEBOOKFACTORY_H diff --git a/src/core/notebook/node.cpp b/src/core/notebook/node.cpp new file mode 100644 index 00000000..d48693c3 --- /dev/null +++ b/src/core/notebook/node.cpp @@ -0,0 +1,335 @@ +#include "node.h" + +#include + +#include +#include +#include +#include +#include "notebook.h" + +using namespace vnotex; + +Node::Node(Type p_type, + ID p_id, + const QString &p_name, + const QDateTime &p_createdTimeUtc, + Notebook *p_notebook, + Node *p_parent) + : m_type(p_type), + m_id(p_id), + m_name(p_name), + m_createdTimeUtc(p_createdTimeUtc), + m_loaded(true), + m_notebook(p_notebook), + m_parent(p_parent) +{ + if (m_notebook) { + m_configMgr = m_notebook->getConfigMgr(); + m_backend = m_notebook->getBackend(); + } +} + +Node::Node(Type p_type, + const QString &p_name, + Notebook *p_notebook, + Node *p_parent) + : m_type(p_type), + m_name(p_name), + m_notebook(p_notebook), + m_parent(p_parent) +{ + if (m_notebook) { + m_configMgr = m_notebook->getConfigMgr(); + m_backend = m_notebook->getBackend(); + } +} + +Node::~Node() +{ +} + +bool Node::isLoaded() const +{ + return m_loaded; +} + +void Node::setLoaded(bool p_loaded) +{ + m_loaded = p_loaded; +} + +void Node::loadInfo(ID p_id, const QDateTime &p_createdTimeUtc) +{ + Q_ASSERT(!m_loaded); + + m_id = p_id; + m_createdTimeUtc = p_createdTimeUtc; + m_loaded = true; +} + +bool Node::isRoot() const +{ + return !m_parent; +} + +const QString &Node::getName() const +{ + return m_name; +} + +bool Node::hasChild(const QString &p_name, bool p_caseSensitive) const +{ + return findChild(p_name, p_caseSensitive) != nullptr; +} + +bool Node::hasChild(const QSharedPointer &p_node) const +{ + return getChildren().indexOf(p_node) != -1; +} + +QSharedPointer Node::findChild(const QString &p_name, bool p_caseSensitive) const +{ + auto targetName = p_caseSensitive ? p_name : p_name.toLower(); + for (auto &child : getChildren()) { + if (p_caseSensitive ? child->getName() == targetName + : child->getName().toLower() == targetName) { + return child; + } + } + + return nullptr; +} + +void Node::setParent(Node *p_parent) +{ + m_parent = p_parent; +} + +Node *Node::getParent() const +{ + return m_parent; +} + +Node::Type Node::getType() const +{ + return m_type; +} + +Node::Flags Node::getFlags() const +{ + return m_flags; +} + +void Node::setFlags(Node::Flags p_flags) +{ + m_flags = p_flags; +} + +Node::Use Node::getUse() const +{ + return m_use; +} + +void Node::setUse(Node::Use p_use) +{ + m_use = p_use; +} + +ID Node::getId() const +{ + return m_id; +} + +const QDateTime &Node::getCreatedTimeUtc() const +{ + return m_createdTimeUtc; +} + +Notebook *Node::getNotebook() const +{ + return m_notebook; +} + +QString Node::fetchRelativePath() const +{ + if (!m_parent) { + return QString(); + } else { + return PathUtils::concatenateFilePath(m_parent->fetchRelativePath(), m_name); + } +} + +QString Node::fetchAbsolutePath() const +{ + return PathUtils::concatenateFilePath(m_notebook->getRootFolderAbsolutePath(), + fetchRelativePath()); +} + +QString Node::fetchContentPath() const +{ + return fetchAbsolutePath(); +} + +void Node::load() +{ + Q_ASSERT(m_notebook); + m_notebook->load(this); +} + +void Node::save() +{ + Q_ASSERT(m_notebook); + m_notebook->save(this); +} + +void Node::setName(const QString &p_name) +{ + m_name = p_name; +} + +void Node::updateName(const QString &p_name) +{ + if (m_name == p_name) { + return; + } + + m_notebook->rename(this, p_name); + Q_ASSERT(m_name == p_name); +} + +bool Node::isAncestor(const Node *p_ancestor, const Node *p_child) +{ + if (!p_ancestor || !p_child) { + return false; + } + + while (p_child) { + p_child = p_child->getParent(); + if (p_child == p_ancestor) { + return true; + } + } + + return false; +} + +bool Node::existsOnDisk() const +{ + return m_configMgr->nodeExistsOnDisk(this); +} + +QString Node::read() const +{ + return m_configMgr->readNode(this); +} + +void Node::write(const QString &p_content) +{ + m_configMgr->writeNode(this, p_content); +} + +QString Node::fetchImageFolderPath() +{ + return m_configMgr->fetchNodeImageFolderPath(this); +} + +QString Node::insertImage(const QString &p_srcImagePath, const QString &p_imageFileName) +{ + const auto imageFolderPath = fetchImageFolderPath(); + auto destFilePath = m_backend->renameIfExistsCaseInsensitive(PathUtils::concatenateFilePath(imageFolderPath, p_imageFileName)); + m_backend->copyFile(p_srcImagePath, destFilePath); + return destFilePath; +} + +QString Node::insertImage(const QImage &p_image, const QString &p_imageFileName) +{ + const auto imageFolderPath = fetchImageFolderPath(); + auto destFilePath = m_backend->renameIfExistsCaseInsensitive(PathUtils::concatenateFilePath(imageFolderPath, p_imageFileName)); + p_image.save(destFilePath); + m_backend->addFile(destFilePath); + return destFilePath; +} + +void Node::removeImage(const QString &p_imagePath) +{ + // Just move it to recycle bin but not added as a child node of recycle bin. + m_notebook->moveFileToRecycleBin(p_imagePath); +} + +QString Node::getAttachmentFolder() const +{ + Q_ASSERT(false); + return QString(); +} + +void Node::setAttachmentFolder(const QString &p_folder) +{ + Q_UNUSED(p_folder); + Q_ASSERT(false); +} + +QString Node::fetchAttachmentFolderPath() +{ + return m_configMgr->fetchNodeAttachmentFolderPath(this); +} + +QStringList Node::addAttachment(const QString &p_destFolderPath, const QStringList &p_files) +{ + Q_UNUSED(p_destFolderPath); + Q_UNUSED(p_files); + Q_ASSERT(false); + return QStringList(); +} + +QString Node::newAttachmentFile(const QString &p_destFolderPath, const QString &p_name) +{ + Q_UNUSED(p_destFolderPath); + Q_UNUSED(p_name); + Q_ASSERT(false); + return QString(); +} + +QString Node::newAttachmentFolder(const QString &p_destFolderPath, const QString &p_name) +{ + Q_UNUSED(p_destFolderPath); + Q_UNUSED(p_name); + Q_ASSERT(false); + return QString(); +} + +QString Node::renameAttachment(const QString &p_path, const QString &p_name) +{ + Q_UNUSED(p_path); + Q_UNUSED(p_name); + Q_ASSERT(false); + return QString(); +} + +void Node::removeAttachment(const QStringList &p_paths) +{ + Q_UNUSED(p_paths); + Q_ASSERT(false); +} + +QStringList Node::getTags() const +{ + Q_ASSERT(false); + return QStringList(); +} + +QDir Node::toDir() const +{ + Q_ASSERT(false); + return QDir(); +} + +INotebookBackend *Node::getBackend() const +{ + return m_backend.data(); +} + +bool Node::isReadOnly() const +{ + return m_flags & Flag::ReadOnly; +} diff --git a/src/core/notebook/node.h b/src/core/notebook/node.h new file mode 100644 index 00000000..f6cf2395 --- /dev/null +++ b/src/core/notebook/node.h @@ -0,0 +1,196 @@ +#ifndef NODE_H +#define NODE_H + +#include +#include +#include +#include + +#include + +namespace vnotex +{ + class Notebook; + class INotebookConfigMgr; + class INotebookBackend; + + // Used when add/new a node. + struct NodeParameters + { + QDateTime m_createdTimeUtc = QDateTime::currentDateTimeUtc(); + QDateTime m_modifiedTimeUtc = QDateTime::currentDateTimeUtc(); + QString m_attachmentFolder; + QStringList m_tags; + }; + + // Node of notebook. + class Node + { + public: + enum Type { + Folder, + File + }; + + enum Flag { + None = 0, + ReadOnly = 0x1 + }; + Q_DECLARE_FLAGS(Flags, Flag) + + enum Use { + Normal, + RecycleBin + }; + + // Constructor with all information loaded. + Node(Type p_type, + ID p_id, + const QString &p_name, + const QDateTime &p_createdTimeUtc, + Notebook *p_notebook, + Node *p_parent = nullptr); + + // Constructor not loaded. + Node(Type p_type, + const QString &p_name, + Notebook *p_notebook, + Node *p_parent = nullptr); + + virtual ~Node(); + + enum { InvalidId = 0 }; + + bool isLoaded() const; + + bool isRoot() const; + + const QString &getName() const; + void setName(const QString &p_name); + + // Change the config and backend file as well. + void updateName(const QString &p_name); + + Node::Type getType() const; + + Node::Flags getFlags() const; + void setFlags(Node::Flags p_flags); + + Node::Use getUse() const; + void setUse(Node::Use p_use); + + ID getId() const; + + const QDateTime &getCreatedTimeUtc() const; + + virtual QDateTime getModifiedTimeUtc() const = 0; + virtual void setModifiedTimeUtc() = 0; + + virtual QString getAttachmentFolder() const; + virtual void setAttachmentFolder(const QString &p_folder); + + virtual QVector> getChildren() const = 0; + + virtual int getChildrenCount() const = 0; + + QSharedPointer findChild(const QString &p_name, bool p_caseSensitive = true) const; + + bool hasChild(const QString &p_name, bool p_caseSensitive = true) const; + + bool hasChild(const QSharedPointer &p_node) const; + + virtual void addChild(const QSharedPointer &p_node) = 0; + + virtual void insertChild(int p_idx, const QSharedPointer &p_node) = 0; + + virtual void removeChild(const QSharedPointer &p_node) = 0; + + void setParent(Node *p_parent); + Node *getParent() const; + + Notebook *getNotebook() const; + + // Path to the node. + QString fetchRelativePath() const; + + QString fetchAbsolutePath() const; + + // A node may be a container of all the stuffs, so the node's path may not be identical with + // the content file path, like TextBundle. + virtual QString fetchContentPath() const; + + // Get image folder path. + virtual QString fetchImageFolderPath(); + + virtual void load(); + virtual void save(); + + static bool isAncestor(const Node *p_ancestor, const Node *p_child); + + bool existsOnDisk() const; + + QString read() const; + void write(const QString &p_content); + + // Insert image from @p_srcImagePath. + // Return inserted image file path. + virtual QString insertImage(const QString &p_srcImagePath, const QString &p_imageFileName); + + virtual QString insertImage(const QImage &p_image, const QString &p_imageFileName); + + virtual void removeImage(const QString &p_imagePath); + + // Get attachment folder path. + virtual QString fetchAttachmentFolderPath(); + + virtual QStringList addAttachment(const QString &p_destFolderPath, const QStringList &p_files); + + virtual QString newAttachmentFile(const QString &p_destFolderPath, const QString &p_name); + + virtual QString newAttachmentFolder(const QString &p_destFolderPath, const QString &p_name); + + virtual QString renameAttachment(const QString &p_path, const QString &p_name); + + virtual void removeAttachment(const QStringList &p_paths); + + virtual QStringList getTags() const; + + virtual QDir toDir() const; + + INotebookBackend *getBackend() const; + + bool isReadOnly() const; + + protected: + void loadInfo(ID p_id, const QDateTime &p_createdTimeUtc); + + void setLoaded(bool p_loaded); + + Notebook *m_notebook = nullptr; + + QSharedPointer m_configMgr; + + QSharedPointer m_backend; + + private: + Type m_type = Type::Folder; + + Flags m_flags = Flag::None; + + Use m_use = Use::Normal; + + ID m_id = InvalidId; + + QString m_name; + + QDateTime m_createdTimeUtc; + + bool m_loaded = false; + + Node *m_parent = nullptr; + }; + + Q_DECLARE_OPERATORS_FOR_FLAGS(Node::Flags) +} // ns vnotex + +#endif // NODE_H diff --git a/src/core/notebook/notebook.cpp b/src/core/notebook/notebook.cpp new file mode 100644 index 00000000..05011ee6 --- /dev/null +++ b/src/core/notebook/notebook.cpp @@ -0,0 +1,380 @@ +#include "notebook.h" + +#include + +#include +#include +#include +#include +#include +#include "exception.h" + +using namespace vnotex; + +const QString Notebook::c_defaultAttachmentFolder = QStringLiteral("vx_attachments"); + +const QString Notebook::c_defaultImageFolder = QStringLiteral("vx_images"); + +static vnotex::ID generateNotebookID() +{ + static vnotex::ID id = Notebook::InvalidId; + return ++id; +} + +Notebook::Notebook(const NotebookParameters &p_paras, + QObject *p_parent) + : QObject(p_parent), + m_id(generateNotebookID()), + m_type(p_paras.m_type), + m_name(p_paras.m_name), + m_description(p_paras.m_description), + m_rootFolderPath(p_paras.m_rootFolderPath), + m_icon(p_paras.m_icon), + m_imageFolder(p_paras.m_imageFolder), + m_attachmentFolder(p_paras.m_attachmentFolder), + m_createdTimeUtc(p_paras.m_createdTimeUtc), + m_backend(p_paras.m_notebookBackend), + m_versionController(p_paras.m_versionController), + m_configMgr(p_paras.m_notebookConfigMgr) +{ + if (m_imageFolder.isEmpty()) { + m_imageFolder = c_defaultImageFolder; + } + if (m_attachmentFolder.isEmpty()) { + m_attachmentFolder = c_defaultAttachmentFolder; + } + m_configMgr->setNotebook(this); +} + +Notebook::~Notebook() +{ +} + +vnotex::ID Notebook::getId() const +{ + return m_id; +} + +const QString &Notebook::getType() const +{ + return m_type; +} + +const QString &Notebook::getName() const +{ + return m_name; +} + +void Notebook::setName(const QString &p_name) +{ + m_name = p_name; +} + +void Notebook::updateName(const QString &p_name) +{ + Q_ASSERT(!p_name.isEmpty()); + if (p_name == m_name) { + return; + } + + m_name = p_name; + updateNotebookConfig(); + emit updated(); +} + +const QString &Notebook::getDescription() const +{ + return m_description; +} + +void Notebook::setDescription(const QString &p_description) +{ + m_description = p_description; +} + +void Notebook::updateDescription(const QString &p_description) +{ + if (p_description == m_description) { + return; + } + + m_description = p_description; + updateNotebookConfig(); + emit updated(); +} + +const QString &Notebook::getRootFolderPath() const +{ + return m_rootFolderPath; +} + +QString Notebook::getRootFolderAbsolutePath() const +{ + return PathUtils::absolutePath(m_rootFolderPath); +} + +const QIcon &Notebook::getIcon() const +{ + return m_icon; +} + +void Notebook::setIcon(const QIcon &p_icon) +{ + m_icon = p_icon; +} + +const QString &Notebook::getImageFolder() const +{ + return m_imageFolder; +} + +const QString &Notebook::getAttachmentFolder() const +{ + return m_attachmentFolder; +} + +const QSharedPointer &Notebook::getBackend() const +{ + return m_backend; +} + +const QSharedPointer &Notebook::getVersionController() const +{ + return m_versionController; +} + +const QSharedPointer &Notebook::getConfigMgr() const +{ + return m_configMgr; +} + +const QSharedPointer &Notebook::getRootNode() const +{ + if (!m_root) { + const_cast(this)->m_root = m_configMgr->loadRootNode(); + } + + return m_root; +} + +QSharedPointer Notebook::getRecycleBinNode() const +{ + auto root = getRootNode(); + auto children = root->getChildren(); + auto it = std::find_if(children.begin(), + children.end(), + [this](const QSharedPointer &p_node) { + return isRecycleBinNode(p_node.data()); + }); + + if (it != children.end()) { + return *it; + } + + return nullptr; +} + +QSharedPointer Notebook::newNode(Node *p_parent, Node::Type p_type, const QString &p_name) +{ + return m_configMgr->newNode(p_parent, p_type, p_name); +} + +const QDateTime &Notebook::getCreatedTimeUtc() const +{ + return m_createdTimeUtc; +} + +void Notebook::load(Node *p_node) +{ + Q_ASSERT(p_node->getNotebook() == this); + if (p_node->isLoaded()) { + return; + } + + m_configMgr->loadNode(p_node); +} + +void Notebook::save(const Node *p_node) +{ + Q_ASSERT(p_node->getNotebook() == this); + m_configMgr->saveNode(p_node); +} + +void Notebook::rename(Node *p_node, const QString &p_name) +{ + Q_ASSERT(p_node->getNotebook() == this); + m_configMgr->renameNode(p_node, p_name); + + emit nodeUpdated(p_node); +} + +QSharedPointer Notebook::loadNodeByPath(const QString &p_path) +{ + if (!PathUtils::pathContains(m_rootFolderPath, p_path)) { + return nullptr; + } + + QString relativePath; + QFileInfo fi(p_path); + if (fi.isAbsolute()) { + if (!fi.exists()) { + return nullptr; + } + + relativePath = PathUtils::relativePath(m_rootFolderPath, p_path); + } else { + relativePath = p_path; + } + + return m_configMgr->loadNodeByPath(m_root, relativePath); +} + +QSharedPointer Notebook::copyNodeAsChildOf(const QSharedPointer &p_src, Node *p_dest, bool p_move) +{ + Q_ASSERT(p_src != p_dest); + Q_ASSERT(p_dest->getNotebook() == this); + + if (Node::isAncestor(p_src.data(), p_dest)) { + Exception::throwOne(Exception::Type::InvalidArgument, + QString("source (%1) is the ancestor of destination (%2)") + .arg(p_src->fetchRelativePath(), p_dest->fetchRelativePath())); + return nullptr; + } + + if (p_src->getParent() == p_dest && p_move) { + return p_src; + } + + return m_configMgr->copyNodeAsChildOf(p_src, p_dest, p_move); +} + +void Notebook::removeNode(const QSharedPointer &p_node, bool p_force, bool p_configOnly) +{ + Q_ASSERT(p_node->getNotebook() == this); + m_configMgr->removeNode(p_node, p_force, p_configOnly); +} + +void Notebook::removeNode(const Node *p_node, bool p_force, bool p_configOnly) +{ + Q_ASSERT(p_node && !p_node->isRoot()); + auto children = p_node->getParent()->getChildren(); + auto it = std::find(children.begin(), children.end(), p_node); + Q_ASSERT(it != children.end()); + removeNode(*it, p_force, p_configOnly); +} + +bool Notebook::isRecycleBinNode(const Node *p_node) const +{ + return p_node && p_node->getUse() == Node::Use::RecycleBin; +} + +bool Notebook::isNodeInRecycleBin(const Node *p_node) const +{ + if (p_node) { + p_node = p_node->getParent(); + while (p_node) { + if (isRecycleBinNode(p_node)) { + return true; + } + + p_node = p_node->getParent(); + } + } + + return false; +} + +void Notebook::moveNodeToRecycleBin(const Node *p_node) +{ + Q_ASSERT(p_node && !p_node->isRoot()); + auto children = p_node->getParent()->getChildren(); + for (auto &child : children) { + if (p_node == child) { + moveNodeToRecycleBin(child); + return; + } + } + + Q_ASSERT(false); +} + +void Notebook::moveNodeToRecycleBin(const QSharedPointer &p_node) +{ + auto destNode = getOrCreateRecycleBinDateNode(); + copyNodeAsChildOf(p_node, destNode.data(), true); +} + +QSharedPointer Notebook::getOrCreateRecycleBinDateNode() +{ + // Name after date. + auto dateNodeName = QDate::currentDate().toString(QStringLiteral("yyyyMMdd")); + + auto recycleBinNode = getRecycleBinNode(); + auto dateNode = recycleBinNode->findChild(dateNodeName, + FileUtils::isPlatformNameCaseSensitive()); + if (!dateNode) { + // Create a date node. + dateNode = newNode(recycleBinNode.data(), Node::Type::Folder, dateNodeName); + } + + return dateNode; +} + +void Notebook::emptyNode(const Node *p_node, bool p_force) +{ + auto children = p_node->getChildren(); + for (auto &child : children) { + removeNode(child, p_force); + } +} + +void Notebook::moveFileToRecycleBin(const QString &p_filePath) +{ + auto node = getOrCreateRecycleBinDateNode(); + auto destFilePath = PathUtils::concatenateFilePath(node->fetchRelativePath(), + PathUtils::fileName(p_filePath)); + destFilePath = getBackend()->renameIfExistsCaseInsensitive(destFilePath); + m_backend->copyFile(p_filePath, destFilePath); + + getBackend()->removeFile(p_filePath); + + emit nodeUpdated(node.data()); +} + +void Notebook::moveDirToRecycleBin(const QString &p_dirPath) +{ + auto node = getOrCreateRecycleBinDateNode(); + auto destDirPath = PathUtils::concatenateFilePath(node->fetchRelativePath(), + PathUtils::fileName(p_dirPath)); + destDirPath = getBackend()->renameIfExistsCaseInsensitive(destDirPath); + m_backend->copyDir(p_dirPath, destDirPath); + + getBackend()->removeDir(p_dirPath); + + emit nodeUpdated(node.data()); +} + +QSharedPointer Notebook::addAsNode(Node *p_parent, + Node::Type p_type, + const QString &p_name, + const NodeParameters &p_paras) +{ + return m_configMgr->addAsNode(p_parent, p_type, p_name, p_paras); +} + +bool Notebook::isBuiltInFile(const Node *p_node, const QString &p_name) const +{ + return m_configMgr->isBuiltInFile(p_node, p_name); +} + +bool Notebook::isBuiltInFolder(const Node *p_node, const QString &p_name) const +{ + return m_configMgr->isBuiltInFolder(p_node, p_name); +} + +QSharedPointer Notebook::copyAsNode(Node *p_parent, + Node::Type p_type, + const QString &p_path) +{ + return m_configMgr->copyAsNode(p_parent, p_type, p_path); +} diff --git a/src/core/notebook/notebook.h b/src/core/notebook/notebook.h new file mode 100644 index 00000000..0f913abb --- /dev/null +++ b/src/core/notebook/notebook.h @@ -0,0 +1,184 @@ +#ifndef NOTEBOOK_H +#define NOTEBOOK_H + +#include +#include +#include + +#include "notebookparameters.h" +#include "../global.h" +#include "node.h" + +namespace vnotex +{ + class INotebookBackend; + class IVersionController; + class INotebookConfigMgr; + struct NodeParameters; + + // Base class of notebook. + class Notebook : public QObject + { + Q_OBJECT + public: + Notebook(const NotebookParameters &p_paras, + QObject *p_parent = nullptr); + + virtual ~Notebook(); + + enum { InvalidId = 0 }; + + ID getId() const; + + const QString &getType() const; + + const QString &getName() const; + void setName(const QString &p_name); + // Change the config and backend file as well. + void updateName(const QString &p_name); + + const QString &getDescription() const; + void setDescription(const QString &p_description); + void updateDescription(const QString &p_description); + + // Use getRootFolderAbsolutePath() instead for access. + const QString &getRootFolderPath() const; + + QString getRootFolderAbsolutePath() const; + + const QIcon &getIcon() const; + void setIcon(const QIcon &p_icon); + + const QString &getImageFolder() const; + + const QString &getAttachmentFolder() const; + + const QDateTime &getCreatedTimeUtc() const; + + const QSharedPointer &getBackend() const; + + const QSharedPointer &getVersionController() const; + + const QSharedPointer &getConfigMgr() const; + + const QSharedPointer &getRootNode() const; + + QSharedPointer getRecycleBinNode() const; + + QSharedPointer newNode(Node *p_parent, Node::Type p_type, const QString &p_name); + + // Add @p_name under @p_parent to add as a new node @p_type. + QSharedPointer addAsNode(Node *p_parent, + Node::Type p_type, + const QString &p_name, + const NodeParameters &p_paras); + + // Copy @p_path to @p_parent and add as a new node @p_type. + QSharedPointer copyAsNode(Node *p_parent, + Node::Type p_type, + const QString &p_path); + + virtual ID getNextNodeId() const = 0; + + virtual ID getAndUpdateNextNodeId() = 0; + + virtual void load(Node *p_node); + virtual void save(const Node *p_node); + + virtual void rename(Node *p_node, const QString &p_name); + + virtual void updateNotebookConfig() = 0; + + virtual void removeNotebookConfig() = 0; + + // @p_path could be absolute or relative. + virtual QSharedPointer loadNodeByPath(const QString &p_path); + + // Copy @p_src as a child of @p_dest. They may belong to different notebooks. + virtual QSharedPointer copyNodeAsChildOf(const QSharedPointer &p_src, Node *p_dest, bool p_move); + + // Remove @p_node and delete all related files from disk. + // @p_force: if true, will delete all files including files not tracked by configmgr. + // @p_configOnly: if true, will just remove node from config. + void removeNode(const QSharedPointer &p_node, bool p_force = false, bool p_configOnly = false); + + void removeNode(const Node *p_node, bool p_force = false, bool p_configOnly = false); + + void moveNodeToRecycleBin(const QSharedPointer &p_node); + + void moveNodeToRecycleBin(const Node *p_node); + + // Move @p_filePath to the recycle bin, without adding it as a child node. + void moveFileToRecycleBin(const QString &p_filePath); + + // Move @p_dirPath to the recycle bin, without adding it as a child node. + void moveDirToRecycleBin(const QString &p_dirPath); + + // Remove all files of this notebook from disk. + virtual void remove() = 0; + + bool isRecycleBinNode(const Node *p_node) const; + + bool isNodeInRecycleBin(const Node *p_node) const; + + // Remove all children node of @p_node. + // @p_force: if true, just delete all folders and files under @p_node. + void emptyNode(const Node *p_node, bool p_force = false); + + // Whether @p_name is a built-in file under @p_node. + bool isBuiltInFile(const Node *p_node, const QString &p_name) const; + + bool isBuiltInFolder(const Node *p_node, const QString &p_name) const; + + static const QString c_defaultAttachmentFolder; + + static const QString c_defaultImageFolder; + + signals: + void updated(); + + void nodeUpdated(const Node *p_node); + + private: + QSharedPointer getOrCreateRecycleBinDateNode(); + + // ID of this notebook. + // Will be assigned uniquely once loaded. + ID m_id; + + // Type of this notebook. + QString m_type; + + // Name of this notebook. + QString m_name; + + // Description of this notebook. + QString m_description; + + // Path of the notebook root folder. + QString m_rootFolderPath; + + QIcon m_icon; + + // Name of the folder to hold images. + QString m_imageFolder; + + // Name of the folder to hold attachments. + QString m_attachmentFolder; + + QDateTime m_createdTimeUtc; + + // Backend for file access and synchronization. + QSharedPointer m_backend; + + // Version controller. + QSharedPointer m_versionController; + + // Config manager to read/wirte config files. + QSharedPointer m_configMgr; + + QSharedPointer m_root; + }; +} // ns vnotex + +#endif // NOTEBOOK_H diff --git a/src/core/notebook/notebook.pri b/src/core/notebook/notebook.pri new file mode 100644 index 00000000..96a8ad80 --- /dev/null +++ b/src/core/notebook/notebook.pri @@ -0,0 +1,18 @@ +SOURCES += \ + $$PWD/notebook.cpp \ + $$PWD/bundlenotebookfactory.cpp \ + $$PWD/notebookparameters.cpp \ + $$PWD/bundlenotebook.cpp \ + $$PWD/node.cpp \ + $$PWD/filenode.cpp \ + $$PWD/foldernode.cpp + +HEADERS += \ + $$PWD/notebook.h \ + $$PWD/inotebookfactory.h \ + $$PWD/bundlenotebookfactory.h \ + $$PWD/notebookparameters.h \ + $$PWD/bundlenotebook.h \ + $$PWD/node.h \ + $$PWD/filenode.h \ + $$PWD/foldernode.h diff --git a/src/core/notebook/notebookparameters.cpp b/src/core/notebook/notebookparameters.cpp new file mode 100644 index 00000000..08f3b0ef --- /dev/null +++ b/src/core/notebook/notebookparameters.cpp @@ -0,0 +1,64 @@ +#include "notebookparameters.h" + +#include "notebookmgr.h" + +using namespace vnotex; + +QSharedPointer NotebookParameters::createNotebookParameters( + const NotebookMgr &p_mgr, + const QString &p_type, + const QString &p_name, + const QString &p_description, + const QString &p_rootFolderPath, + const QIcon &p_icon, + const QString &p_imageFolder, + const QString &p_attachmentFolder, + const QDateTime &p_createdTimeUtc, + const QString &p_backend, + const QString &p_versionController, + const QString &p_configMgr) +{ + auto backend = p_mgr.createNotebookBackend(p_backend, p_rootFolderPath); + return createNotebookParameters(p_mgr, + backend, + p_type, + p_name, + p_description, + p_rootFolderPath, + p_icon, + p_imageFolder, + p_attachmentFolder, + p_createdTimeUtc, + p_versionController, + p_configMgr); +} + +QSharedPointer NotebookParameters::createNotebookParameters( + const NotebookMgr &p_mgr, + const QSharedPointer &p_backend, + const QString &p_type, + const QString &p_name, + const QString &p_description, + const QString &p_rootFolderPath, + const QIcon &p_icon, + const QString &p_imageFolder, + const QString &p_attachmentFolder, + const QDateTime &p_createdTimeUtc, + const QString &p_versionController, + const QString &p_configMgr) +{ + auto paras = QSharedPointer::create(); + paras->m_type = p_type; + paras->m_name = p_name; + paras->m_description = p_description; + paras->m_rootFolderPath = p_rootFolderPath; + paras->m_icon = p_icon; + paras->m_imageFolder = p_imageFolder; + paras->m_attachmentFolder = p_attachmentFolder; + paras->m_createdTimeUtc = p_createdTimeUtc; + paras->m_notebookBackend = p_backend; + paras->m_versionController = p_mgr.createVersionController(p_versionController); + paras->m_notebookConfigMgr = p_mgr.createNotebookConfigMgr(p_configMgr, + paras->m_notebookBackend); + return paras; +} diff --git a/src/core/notebook/notebookparameters.h b/src/core/notebook/notebookparameters.h new file mode 100644 index 00000000..b22a14b7 --- /dev/null +++ b/src/core/notebook/notebookparameters.h @@ -0,0 +1,70 @@ +#ifndef NOTEBOOKPARAMETERS_H +#define NOTEBOOKPARAMETERS_H + +#include +#include +#include + +namespace vnotex +{ + class NotebookMgr; + class INotebookBackend; + class IVersionController; + class INotebookConfigMgr; + + // Used to new a notebook. + class NotebookParameters + { + public: + virtual ~NotebookParameters() {} + + static QSharedPointer createNotebookParameters( + const NotebookMgr &p_mgr, + const QString &p_type, + const QString &p_name, + const QString &p_description, + const QString &p_rootFolderPath, + const QIcon &p_icon, + const QString &p_imageFolder, + const QString &p_attachmentFolder, + const QDateTime &p_createdTimeUtc, + const QString &p_backend, + const QString &p_versionController, + const QString &p_configMgr); + + static QSharedPointer createNotebookParameters( + const NotebookMgr &p_mgr, + const QSharedPointer &p_backend, + const QString &p_type, + const QString &p_name, + const QString &p_description, + const QString &p_rootFolderPath, + const QIcon &p_icon, + const QString &p_imageFolder, + const QString &p_attachmentFolder, + const QDateTime &p_createdTimeUtc, + const QString &p_versionController, + const QString &p_configMgr); + + QString m_type; + QString m_name; + QString m_description; + QString m_rootFolderPath; + QIcon m_icon; + + // Name of image folder. + QString m_imageFolder; + + // Name of attachment folder. + QString m_attachmentFolder; + + QDateTime m_createdTimeUtc; + QSharedPointer m_notebookBackend; + QSharedPointer m_versionController; + QSharedPointer m_notebookConfigMgr; + + bool m_ensureEmptyRootFolder = true; + }; +} // ns vnotex + +#endif // NOTEBOOKPARAMETERS_H diff --git a/src/core/notebookbackend/inotebookbackend.cpp b/src/core/notebookbackend/inotebookbackend.cpp new file mode 100644 index 00000000..80ef1049 --- /dev/null +++ b/src/core/notebookbackend/inotebookbackend.cpp @@ -0,0 +1,23 @@ +#include "inotebookbackend.h" + +#include + +#include +#include + +using namespace vnotex; + +void INotebookBackend::constrainPath(const QString &p_path) const +{ + if (!PathUtils::pathContains(m_rootPath, p_path)) { + Exception::throwOne(Exception::Type::InvalidArgument, + QString("path (%1) does not locate in root folder (%2)") + .arg(p_path, m_rootPath)); + } +} + +QString INotebookBackend::getFullPath(const QString &p_path) const +{ + constrainPath(p_path); + return QDir(m_rootPath).filePath(p_path); +} diff --git a/src/core/notebookbackend/inotebookbackend.h b/src/core/notebookbackend/inotebookbackend.h new file mode 100644 index 00000000..e284cbbe --- /dev/null +++ b/src/core/notebookbackend/inotebookbackend.h @@ -0,0 +1,111 @@ +#ifndef INOTEBOOKBACKEND_H +#define INOTEBOOKBACKEND_H + +#include + +#include + +class QByteArray; +class QJsonObject; + +namespace vnotex +{ + // Abstract class for notebook backend, which is responsible for file access + // and synchronization. + class INotebookBackend : public QObject + { + Q_OBJECT + public: + INotebookBackend(const QString &p_rootPath, QObject *p_parent = nullptr) + : QObject(p_parent), + m_rootPath(PathUtils::absolutePath(p_rootPath)) + { + } + + virtual ~INotebookBackend() + { + } + + virtual QString getName() const = 0; + + virtual QString getDisplayName() const = 0; + + virtual QString getDescription() const = 0; + + const QString &getRootPath() const + { + return m_rootPath; + } + + void setRootPath(const QString &p_rootPath) + { + m_rootPath = p_rootPath; + } + + // Whether @p_dirPath is an empty directory. + virtual bool isEmptyDir(const QString &p_dirPath) const = 0; + + // Create the directory path @p_dirPath. Create all parent directories if necessary. + virtual void makePath(const QString &p_dirPath) = 0; + + // Write @p_data to @p_filePath. + virtual void writeFile(const QString &p_filePath, const QByteArray &p_data) = 0; + + // Write @p_text to @p_filePath. + virtual void writeFile(const QString &p_filePath, const QString &p_text) = 0; + + // Write @p_jobj to @p_filePath. + virtual void writeFile(const QString &p_filePath, const QJsonObject &p_jobj) = 0; + + // Read content from @p_filePath. + virtual QString readTextFile(const QString &p_filePath) = 0; + + // Read file @p_filePath. + virtual QByteArray readFile(const QString &p_filePath) = 0; + + QString getFullPath(const QString &p_path) const; + + virtual bool exists(const QString &p_path) const = 0; + + virtual bool childExistsCaseInsensitive(const QString &p_dirPath, const QString &p_name) const = 0; + + virtual bool isFile(const QString &p_path) const = 0; + + virtual void renameFile(const QString &p_filePath, const QString &p_name) = 0; + + virtual void renameDir(const QString &p_dirPath, const QString &p_name) = 0; + + // Copy @p_filePath to @p_destPath. + // @p_filePath could be outside notebook. + virtual void copyFile(const QString &p_filePath, const QString &p_destPath) = 0; + + // Delete @p_filePath from disk. + virtual void removeFile(const QString &p_filePath) = 0; + + // Copy @p_dirPath to as @p_destPath. + virtual void copyDir(const QString &p_dirPath, const QString &p_destPath) = 0; + + // Delete @p_dirPath from disk if it is empty. + // Return false if it is not deleted due to non-empty. + virtual bool removeDirIfEmpty(const QString &p_dirPath) = 0; + + virtual void removeDir(const QString &p_dirPath) = 0; + + virtual QString renameIfExistsCaseInsensitive(const QString &p_path) const = 0; + + // Add one file to backend. + virtual void addFile(const QString &p_path) = 0; + + virtual void removeEmptyDir(const QString &p_dirPath) = 0; + + protected: + // Constrain @p_path within root path of the notebook. + void constrainPath(const QString &p_path) const; + + private: + // Root path of the notebook. + QString m_rootPath; + }; +} // ns vnotex + +#endif // INOTEBOOKBACKEND_H diff --git a/src/core/notebookbackend/inotebookbackendfactory.h b/src/core/notebookbackend/inotebookbackendfactory.h new file mode 100644 index 00000000..17cad373 --- /dev/null +++ b/src/core/notebookbackend/inotebookbackendfactory.h @@ -0,0 +1,31 @@ +#ifndef INOTEBOOKBACKENDFACTORY_H +#define INOTEBOOKBACKENDFACTORY_H + +#include + +namespace vnotex +{ + class INotebookBackend; + + class INotebookBackendFactory + { + public: + INotebookBackendFactory() + { + } + + virtual ~INotebookBackendFactory() + { + } + + virtual QString getName() const = 0; + + virtual QString getDisplayName() const = 0; + + virtual QString getDescription() const = 0; + + virtual QSharedPointer createNotebookBackend(const QString &p_rootPath) = 0; + }; +} // ns vnotex + +#endif // INOTEBOOKBACKENDFACTORY_H diff --git a/src/core/notebookbackend/localnotebookbackend.cpp b/src/core/notebookbackend/localnotebookbackend.cpp new file mode 100644 index 00000000..79c8c872 --- /dev/null +++ b/src/core/notebookbackend/localnotebookbackend.cpp @@ -0,0 +1,170 @@ +#include "localnotebookbackend.h" + +#include +#include +#include +#include +#include + +#include +#include "exception.h" +#include + +using namespace vnotex; + +LocalNotebookBackend::LocalNotebookBackend(const QString &p_name, + const QString &p_displayName, + const QString &p_description, + const QString &p_rootPath, + QObject *p_parent) + : INotebookBackend(p_rootPath, p_parent), + m_info(p_name, p_displayName, p_description) +{ +} + +QString LocalNotebookBackend::getName() const +{ + return m_info.m_name; +} + +QString LocalNotebookBackend::getDisplayName() const +{ + return m_info.m_displayName; +} + +QString LocalNotebookBackend::getDescription() const +{ + return m_info.m_description; +} + +bool LocalNotebookBackend::isEmptyDir(const QString &p_dirPath) const +{ + return PathUtils::isEmptyDir(getFullPath(p_dirPath)); +} + +void LocalNotebookBackend::makePath(const QString &p_dirPath) +{ + constrainPath(p_dirPath); + QDir dir(getRootPath()); + if (!dir.mkpath(p_dirPath)) { + Exception::throwOne(Exception::Type::FailToCreateDir, + QString("fail to create directory: %1").arg(p_dirPath)); + } +} + +void LocalNotebookBackend::writeFile(const QString &p_filePath, const QByteArray &p_data) +{ + const auto filePath = getFullPath(p_filePath); + FileUtils::writeFile(filePath, p_data); +} + +void LocalNotebookBackend::writeFile(const QString &p_filePath, const QString &p_text) +{ + const auto filePath = getFullPath(p_filePath); + FileUtils::writeFile(filePath, p_text); +} + +void LocalNotebookBackend::writeFile(const QString &p_filePath, const QJsonObject &p_jobj) +{ + writeFile(p_filePath, QJsonDocument(p_jobj).toJson()); +} + +QString LocalNotebookBackend::readTextFile(const QString &p_filePath) +{ + const auto filePath = getFullPath(p_filePath); + return FileUtils::readTextFile(filePath); +} + +QByteArray LocalNotebookBackend::readFile(const QString &p_filePath) +{ + const auto filePath = getFullPath(p_filePath); + return FileUtils::readFile(filePath); +} + +bool LocalNotebookBackend::exists(const QString &p_path) const +{ + return QFileInfo::exists(getFullPath(p_path)); +} + +bool LocalNotebookBackend::childExistsCaseInsensitive(const QString &p_dirPath, const QString &p_name) const +{ + return FileUtils::childExistsCaseInsensitive(getFullPath(p_dirPath), p_name); +} + +bool LocalNotebookBackend::isFile(const QString &p_path) const +{ + QFileInfo fi(getFullPath(p_path)); + return fi.isFile(); +} + +void LocalNotebookBackend::renameFile(const QString &p_filePath, const QString &p_name) +{ + Q_ASSERT(isFile(p_filePath)); + const auto filePath = getFullPath(p_filePath); + FileUtils::renameFile(filePath, p_name); +} + +void LocalNotebookBackend::renameDir(const QString &p_dirPath, const QString &p_name) +{ + Q_ASSERT(!isFile(p_dirPath)); + const auto dirPath = getFullPath(p_dirPath); + FileUtils::renameFile(dirPath, p_name); +} + +void LocalNotebookBackend::copyFile(const QString &p_filePath, const QString &p_destPath) +{ + auto filePath = p_filePath; + if (QFileInfo(filePath).isRelative()) { + filePath = getFullPath(filePath); + } + + Q_ASSERT(QFileInfo(filePath).isFile()); + + FileUtils::copyFile(filePath, getFullPath(p_destPath)); +} + +void LocalNotebookBackend::copyDir(const QString &p_dirPath, const QString &p_destPath) +{ + auto dirPath = p_dirPath; + if (QFileInfo(dirPath).isRelative()) { + dirPath = getFullPath(dirPath); + } + + Q_ASSERT(QFileInfo(dirPath).isDir()); + + FileUtils::copyDir(dirPath, getFullPath(p_destPath)); +} + +void LocalNotebookBackend::removeFile(const QString &p_filePath) +{ + Q_ASSERT(isFile(p_filePath)); + FileUtils::removeFile(getFullPath(p_filePath)); +} + +bool LocalNotebookBackend::removeDirIfEmpty(const QString &p_dirPath) +{ + Q_ASSERT(!isFile(p_dirPath)); + return FileUtils::removeDirIfEmpty(getFullPath(p_dirPath)); +} + +void LocalNotebookBackend::removeDir(const QString &p_dirPath) +{ + Q_ASSERT(!isFile(p_dirPath)); + return FileUtils::removeDir(getFullPath(p_dirPath)); +} + +QString LocalNotebookBackend::renameIfExistsCaseInsensitive(const QString &p_path) const +{ + return FileUtils::renameIfExistsCaseInsensitive(getFullPath(p_path)); +} + +void LocalNotebookBackend::addFile(const QString &p_path) +{ + Q_UNUSED(p_path); + // Do nothing for now. +} + +void LocalNotebookBackend::removeEmptyDir(const QString &p_dirPath) +{ + FileUtils::removeEmptyDir(getFullPath(p_dirPath)); +} diff --git a/src/core/notebookbackend/localnotebookbackend.h b/src/core/notebookbackend/localnotebookbackend.h new file mode 100644 index 00000000..2eaf68c6 --- /dev/null +++ b/src/core/notebookbackend/localnotebookbackend.h @@ -0,0 +1,84 @@ +#ifndef LOCALNOTEBOOKBACKEND_H +#define LOCALNOTEBOOKBACKEND_H + +#include "inotebookbackend.h" + +#include "../global.h" + +namespace vnotex +{ + // Backend to access local file system. + class LocalNotebookBackend : public INotebookBackend + { + Q_OBJECT + public: + explicit LocalNotebookBackend(const QString &p_name, + const QString &p_displayName, + const QString &p_description, + const QString &p_rootPath, + QObject *p_parent = nullptr); + + QString getName() const Q_DECL_OVERRIDE; + + QString getDisplayName() const Q_DECL_OVERRIDE; + + QString getDescription() const Q_DECL_OVERRIDE; + + // Whether @p_dirPath is an empty directory. + bool isEmptyDir(const QString &p_dirPath) const Q_DECL_OVERRIDE; + + // Create the directory path @p_dirPath. Create all parent directories if necessary. + void makePath(const QString &p_dirPath) Q_DECL_OVERRIDE; + + // Write @p_data to @p_filePath. + void writeFile(const QString &p_filePath, const QByteArray &p_data) Q_DECL_OVERRIDE; + + // Write @p_text to @p_filePath. + void writeFile(const QString &p_filePath, const QString &p_text) Q_DECL_OVERRIDE; + + // Write @p_jobj to @p_filePath. + void writeFile(const QString &p_filePath, const QJsonObject &p_jobj) Q_DECL_OVERRIDE; + + // Read content from @p_filePath. + QString readTextFile(const QString &p_filePath) Q_DECL_OVERRIDE; + + // Read file @p_filePath. + QByteArray readFile(const QString &p_filePath) Q_DECL_OVERRIDE; + + bool exists(const QString &p_path) const Q_DECL_OVERRIDE; + + bool childExistsCaseInsensitive(const QString &p_dirPath, const QString &p_name) const Q_DECL_OVERRIDE; + + bool isFile(const QString &p_path) const Q_DECL_OVERRIDE; + + void renameFile(const QString &p_filePath, const QString &p_name) Q_DECL_OVERRIDE; + + void renameDir(const QString &p_dirPath, const QString &p_name) Q_DECL_OVERRIDE; + + // Delete @p_filePath from disk. + void removeFile(const QString &p_filePath) Q_DECL_OVERRIDE; + + // Delete @p_dirPath from disk if it is empty. + bool removeDirIfEmpty(const QString &p_dirPath) Q_DECL_OVERRIDE; + + void removeDir(const QString &p_dirPath) Q_DECL_OVERRIDE; + + // Copy @p_filePath to @p_destPath. + // @p_filePath may beyond this notebook backend. + void copyFile(const QString &p_filePath, const QString &p_destPath) Q_DECL_OVERRIDE; + + // Copy @p_dirPath to as @p_destPath. + void copyDir(const QString &p_dirPath, const QString &p_destPath) Q_DECL_OVERRIDE; + + QString renameIfExistsCaseInsensitive(const QString &p_path) const Q_DECL_OVERRIDE; + + void addFile(const QString &p_path) Q_DECL_OVERRIDE; + + void removeEmptyDir(const QString &p_dirPath) Q_DECL_OVERRIDE; + + private: + Info m_info; + }; +} // ns vnotex + +#endif // LOCALNOTEBOOKBACKEND_H diff --git a/src/core/notebookbackend/localnotebookbackendfactory.cpp b/src/core/notebookbackend/localnotebookbackendfactory.cpp new file mode 100644 index 00000000..ce2b3e74 --- /dev/null +++ b/src/core/notebookbackend/localnotebookbackendfactory.cpp @@ -0,0 +1,34 @@ +#include "localnotebookbackendfactory.h" + +#include + +#include "localnotebookbackend.h" + +using namespace vnotex; + +LocalNotebookBackendFactory::LocalNotebookBackendFactory() +{ +} + +QString LocalNotebookBackendFactory::getName() const +{ + return QStringLiteral("local.vnotex"); +} + +QString LocalNotebookBackendFactory::getDisplayName() const +{ + return QObject::tr("Local Notebook Backend"); +} + +QString LocalNotebookBackendFactory::getDescription() const +{ + return QObject::tr("Local file system"); +} + +QSharedPointer LocalNotebookBackendFactory::createNotebookBackend(const QString &p_rootPath) +{ + return QSharedPointer::create(getName(), + getDisplayName(), + getDescription(), + p_rootPath); +} diff --git a/src/core/notebookbackend/localnotebookbackendfactory.h b/src/core/notebookbackend/localnotebookbackendfactory.h new file mode 100644 index 00000000..0e24e0cc --- /dev/null +++ b/src/core/notebookbackend/localnotebookbackendfactory.h @@ -0,0 +1,24 @@ +#ifndef LOCALNOTEBOOKBACKENDFACTORY_H +#define LOCALNOTEBOOKBACKENDFACTORY_H + +#include "inotebookbackendfactory.h" + + +namespace vnotex +{ + class LocalNotebookBackendFactory : public INotebookBackendFactory + { + public: + LocalNotebookBackendFactory(); + + QString getName() const Q_DECL_OVERRIDE; + + QString getDisplayName() const Q_DECL_OVERRIDE; + + QString getDescription()const Q_DECL_OVERRIDE; + + QSharedPointer createNotebookBackend(const QString &p_rootPath) Q_DECL_OVERRIDE; + }; +} // ns vnotex + +#endif // LOCALNOTEBOOKBACKENDFACTORY_H diff --git a/src/core/notebookbackend/notebookbackend.pri b/src/core/notebookbackend/notebookbackend.pri new file mode 100644 index 00000000..2b740737 --- /dev/null +++ b/src/core/notebookbackend/notebookbackend.pri @@ -0,0 +1,10 @@ +SOURCES += \ + $$PWD/localnotebookbackend.cpp \ + $$PWD/localnotebookbackendfactory.cpp \ + $$PWD/inotebookbackend.cpp + +HEADERS += \ + $$PWD/inotebookbackend.h \ + $$PWD/localnotebookbackend.h \ + $$PWD/inotebookbackendfactory.h \ + $$PWD/localnotebookbackendfactory.h diff --git a/src/core/notebookconfigmgr/bundlenotebookconfigmgr.cpp b/src/core/notebookconfigmgr/bundlenotebookconfigmgr.cpp new file mode 100644 index 00000000..719e55b1 --- /dev/null +++ b/src/core/notebookconfigmgr/bundlenotebookconfigmgr.cpp @@ -0,0 +1,96 @@ +#include "bundlenotebookconfigmgr.h" + +#include + +#include +#include +#include +#include "notebookconfig.h" +#include + +using namespace vnotex; + +const QString BundleNotebookConfigMgr::c_configFolderName = "vx_notebook"; + +const QString BundleNotebookConfigMgr::c_configName = "vx_notebook.json"; + +BundleNotebookConfigMgr::BundleNotebookConfigMgr(const QSharedPointer &p_backend, + QObject *p_parent) + : INotebookConfigMgr(p_backend, p_parent) +{ +} + +void BundleNotebookConfigMgr::createEmptySkeleton(const NotebookParameters &p_paras) +{ + getBackend()->makePath(BundleNotebookConfigMgr::c_configFolderName); + + auto config = NotebookConfig::fromNotebookParameters(getCodeVersion(), p_paras); + writeNotebookConfig(*config); +} + +QSharedPointer BundleNotebookConfigMgr::readNotebookConfig() const +{ + return readNotebookConfig(getBackend()); +} + +void BundleNotebookConfigMgr::writeNotebookConfig() +{ + auto config = NotebookConfig::fromNotebook(getCodeVersion(), getNotebook()); + writeNotebookConfig(*config); +} + +void BundleNotebookConfigMgr::writeNotebookConfig(const NotebookConfig &p_config) +{ + getBackend()->writeFile(getConfigFilePath(), p_config.toJson()); +} + +void BundleNotebookConfigMgr::removeNotebookConfig() +{ + getBackend()->removeDir(getConfigFolderName()); +} + +QSharedPointer BundleNotebookConfigMgr::readNotebookConfig( + const QSharedPointer &p_backend) +{ + auto data = p_backend->readFile(getConfigFilePath()); + + auto config = QSharedPointer::create(); + config->fromJson(QJsonDocument::fromJson(data).object()); + + return config; +} + +const QString &BundleNotebookConfigMgr::getConfigFolderName() +{ + return c_configFolderName; +} + +const QString &BundleNotebookConfigMgr::getConfigName() +{ + return c_configName; +} + +QString BundleNotebookConfigMgr::getConfigFilePath() +{ + return PathUtils::concatenateFilePath(c_configFolderName, c_configName); +} + +BundleNotebook *BundleNotebookConfigMgr::getBundleNotebook() const +{ + return dynamic_cast(getNotebook()); +} + +bool BundleNotebookConfigMgr::isBuiltInFile(const Node *p_node, const QString &p_name) const +{ + Q_UNUSED(p_node); + Q_UNUSED(p_name); + return false; +} + +bool BundleNotebookConfigMgr::isBuiltInFolder(const Node *p_node, const QString &p_name) const +{ + if (p_node->isRoot()) { + return p_name.toLower() == c_configFolderName; + } + return false; +} diff --git a/src/core/notebookconfigmgr/bundlenotebookconfigmgr.h b/src/core/notebookconfigmgr/bundlenotebookconfigmgr.h new file mode 100644 index 00000000..79a387d4 --- /dev/null +++ b/src/core/notebookconfigmgr/bundlenotebookconfigmgr.h @@ -0,0 +1,54 @@ +#ifndef BUNDLENOTEBOOKCONFIGMGR_H +#define BUNDLENOTEBOOKCONFIGMGR_H + +#include "inotebookconfigmgr.h" + +namespace vnotex +{ + class BundleNotebook; + + class BundleNotebookConfigMgr : public INotebookConfigMgr + { + Q_OBJECT + public: + BundleNotebookConfigMgr(const QSharedPointer &p_backend, + QObject *p_parent = nullptr); + + // Create an empty skeleton for an empty notebook. + virtual void createEmptySkeleton(const NotebookParameters &p_paras) Q_DECL_OVERRIDE; + + QSharedPointer readNotebookConfig() const; + void writeNotebookConfig(); + + void removeNotebookConfig(); + + bool isBuiltInFile(const Node *p_node, const QString &p_name) const Q_DECL_OVERRIDE; + + bool isBuiltInFolder(const Node *p_node, const QString &p_name) const Q_DECL_OVERRIDE; + + static const QString &getConfigFolderName(); + + static const QString &getConfigName(); + + static QString getConfigFilePath(); + + static QSharedPointer readNotebookConfig(const QSharedPointer &p_backend); + + enum { RootNodeId = 1 }; + + protected: + BundleNotebook *getBundleNotebook() const; + + private: + void writeNotebookConfig(const NotebookConfig &p_config); + + // Folder name to store the notebook's config. + // This folder locates in the root folder of the notebook. + static const QString c_configFolderName; + + // Name of the notebook's config file. + static const QString c_configName; + }; +} // ns vnotex + +#endif // BUNDLENOTEBOOKCONFIGMGR_H diff --git a/src/core/notebookconfigmgr/inotebookconfigmgr.cpp b/src/core/notebookconfigmgr/inotebookconfigmgr.cpp new file mode 100644 index 00000000..3343ae04 --- /dev/null +++ b/src/core/notebookconfigmgr/inotebookconfigmgr.cpp @@ -0,0 +1,37 @@ +#include "inotebookconfigmgr.h" + +#include + +using namespace vnotex; + +INotebookConfigMgr::INotebookConfigMgr(const QSharedPointer &p_backend, + QObject *p_parent) + : QObject(p_parent), + m_backend(p_backend) +{ +} + +INotebookConfigMgr::~INotebookConfigMgr() +{ +} + +const QSharedPointer &INotebookConfigMgr::getBackend() const +{ + return m_backend; +} + +QString INotebookConfigMgr::getCodeVersion() const +{ + const QString version("1"); + return version; +} + +Notebook *INotebookConfigMgr::getNotebook() const +{ + return m_notebook; +} + +void INotebookConfigMgr::setNotebook(Notebook *p_notebook) +{ + m_notebook = p_notebook; +} diff --git a/src/core/notebookconfigmgr/inotebookconfigmgr.h b/src/core/notebookconfigmgr/inotebookconfigmgr.h new file mode 100644 index 00000000..d9a49ad3 --- /dev/null +++ b/src/core/notebookconfigmgr/inotebookconfigmgr.h @@ -0,0 +1,96 @@ +#ifndef INOTEBOOKCONFIGMGR_H +#define INOTEBOOKCONFIGMGR_H + +#include +#include + +#include "notebook/node.h" + +namespace vnotex +{ + class NotebookConfig; + class INotebookBackend; + class NotebookParameters; + class Notebook; + struct NodeParameters; + + // Abstract class for notebook config manager, which is responsible for config + // files access and note nodes access. + class INotebookConfigMgr : public QObject + { + Q_OBJECT + public: + INotebookConfigMgr(const QSharedPointer &p_backend, + QObject *p_parent = nullptr); + + virtual ~INotebookConfigMgr(); + + virtual QString getName() const = 0; + + virtual QString getDisplayName() const = 0; + + virtual QString getDescription() const = 0; + + // Create an empty skeleton for an empty notebook. + virtual void createEmptySkeleton(const NotebookParameters &p_paras) = 0; + + const QSharedPointer &getBackend() const; + + virtual QSharedPointer loadRootNode() const = 0; + + virtual void loadNode(Node *p_node) const = 0; + virtual void saveNode(const Node *p_node) = 0; + + virtual void renameNode(Node *p_node, const QString &p_name) = 0; + + virtual QSharedPointer newNode(Node *p_parent, + Node::Type p_type, + const QString &p_name) = 0; + + virtual QSharedPointer addAsNode(Node *p_parent, + Node::Type p_type, + const QString &p_name, + const NodeParameters &p_paras) = 0; + + virtual QSharedPointer copyAsNode(Node *p_parent, + Node::Type p_type, + const QString &p_path) = 0; + + Notebook *getNotebook() const; + void setNotebook(Notebook *p_notebook); + + virtual QSharedPointer loadNodeByPath(const QSharedPointer &p_root, + const QString &p_relativePath) = 0; + + virtual QSharedPointer copyNodeAsChildOf(const QSharedPointer &p_src, + Node *p_dest, + bool p_move) = 0; + + virtual void removeNode(const QSharedPointer &p_node, bool p_force, bool p_configOnly) = 0; + + virtual bool nodeExistsOnDisk(const Node *p_node) const = 0; + + virtual QString readNode(const Node *p_node) const = 0; + virtual void writeNode(Node *p_node, const QString &p_content) = 0; + + virtual QString fetchNodeImageFolderPath(Node *p_node) = 0; + + virtual QString fetchNodeAttachmentFolderPath(Node *p_node) = 0; + + // Whether @p_name is a built-in file under @p_node. + virtual bool isBuiltInFile(const Node *p_node, const QString &p_name) const = 0; + + virtual bool isBuiltInFolder(const Node *p_node, const QString &p_name) const = 0; + + protected: + // Version of the config processing code. + virtual QString getCodeVersion() const; + + private: + QSharedPointer m_backend; + + Notebook *m_notebook = nullptr; + }; +} // ns vnotex + +#endif // INOTEBOOKCONFIGMGR_H diff --git a/src/core/notebookconfigmgr/inotebookconfigmgrfactory.h b/src/core/notebookconfigmgr/inotebookconfigmgrfactory.h new file mode 100644 index 00000000..e237c6f8 --- /dev/null +++ b/src/core/notebookconfigmgr/inotebookconfigmgrfactory.h @@ -0,0 +1,33 @@ +#ifndef INOTEBOOKCONFIGMGRFACTORY_H +#define INOTEBOOKCONFIGMGRFACTORY_H + +#include + +namespace vnotex +{ + class INotebookConfigMgr; + class INotebookBackend; + + class INotebookConfigMgrFactory + { + public: + INotebookConfigMgrFactory() + { + } + + virtual ~INotebookConfigMgrFactory() + { + } + + virtual QString getName() const = 0; + + virtual QString getDisplayName() const = 0; + + virtual QString getDescription() const = 0; + + virtual QSharedPointer createNotebookConfigMgr( + const QSharedPointer &p_backend) = 0; + }; +} // ns vnotex + +#endif // INOTEBOOKCONFIGMGRFACTORY_H diff --git a/src/core/notebookconfigmgr/nodecontentmediautils.cpp b/src/core/notebookconfigmgr/nodecontentmediautils.cpp new file mode 100644 index 00000000..3fac4232 --- /dev/null +++ b/src/core/notebookconfigmgr/nodecontentmediautils.cpp @@ -0,0 +1,177 @@ +#include "nodecontentmediautils.h" + +#include +#include +#include +#include +#include + +#include +#include + +#include + +#include + +#include +#include + +using namespace vnotex; + +void NodeContentMediaUtils::copyMediaFiles(const Node *p_node, + INotebookBackend *p_backend, + const QString &p_destFilePath) +{ + Q_ASSERT(p_node->getType() == Node::Type::File); + auto fileType = FileTypeHelper::fileType(p_node->fetchAbsolutePath()); + if (fileType == QStringLiteral("markdown")) { + copyMarkdownMediaFiles(p_node->read(), + PathUtils::parentDirPath(p_node->fetchContentPath()), + p_backend, + p_destFilePath); + } +} + +void NodeContentMediaUtils::copyMediaFiles(const QString &p_filePath, + INotebookBackend *p_backend, + const QString &p_destFilePath) +{ + auto fileType = FileTypeHelper::fileType(p_filePath); + if (fileType == QStringLiteral("markdown")) { + copyMarkdownMediaFiles(FileUtils::readTextFile(p_filePath), + PathUtils::parentDirPath(p_filePath), + p_backend, + p_destFilePath); + } +} + +void NodeContentMediaUtils::copyMarkdownMediaFiles(const QString &p_content, + const QString &p_basePath, + INotebookBackend *p_backend, + const QString &p_destFilePath) +{ + auto content = p_content; + + // Images. + const auto images = + vte::MarkdownUtils::fetchImagesFromMarkdownText(content, + p_basePath, + vte::MarkdownLink::TypeFlag::LocalRelativeInternal); + + QDir destDir(PathUtils::parentDirPath(p_destFilePath)); + QSet handledImages; + QHash renamedImages; + int lastPos = content.size(); + for (const auto &link : images) { + Q_ASSERT(link.m_urlInLinkPos < lastPos); + lastPos = link.m_urlInLinkPos; + + if (handledImages.contains(link.m_path)) { + auto it = renamedImages.find(link.m_path); + if (it != renamedImages.end()) { + content.replace(link.m_urlInLinkPos, link.m_urlInLink.size(), it.value()); + } + continue; + } + + handledImages.insert(link.m_path); + + if (!QFileInfo::exists(link.m_path)) { + qWarning() << "Image of Markdown file does not exist" << link.m_path << link.m_urlInLink; + continue; + } + + // Get the relative path of the image and apply it to the dest file path. + const auto oldDestFilePath = destDir.filePath(link.m_urlInLink); + destDir.mkpath(PathUtils::parentDirPath(oldDestFilePath)); + auto destFilePath = p_backend->renameIfExistsCaseInsensitive(oldDestFilePath); + if (oldDestFilePath != destFilePath) { + // Rename happens. + const auto oldFileName = PathUtils::fileName(oldDestFilePath); + const auto newFileName = PathUtils::fileName(destFilePath); + qWarning() << QString("Image name conflicts when copy. Renamed from (%1) to (%2)").arg(oldFileName, newFileName); + + // Update the text content. + auto newUrlInLink(link.m_urlInLink); + newUrlInLink.replace(newUrlInLink.size() - oldFileName.size(), + oldFileName.size(), + newFileName); + + content.replace(link.m_urlInLinkPos, link.m_urlInLink.size(), newUrlInLink); + renamedImages.insert(link.m_path, newUrlInLink); + } + + p_backend->copyFile(link.m_path, destFilePath); + } + + if (!renamedImages.isEmpty()) { + p_backend->writeFile(p_destFilePath, content); + } +} + +void NodeContentMediaUtils::removeMediaFiles(const Node *p_node) +{ + Q_ASSERT(p_node->getType() == Node::Type::File); + auto fileType = FileTypeHelper::fileType(p_node->fetchAbsolutePath()); + if (fileType == QStringLiteral("markdown")) { + removeMarkdownMediaFiles(p_node); + } +} + +void NodeContentMediaUtils::removeMarkdownMediaFiles(const Node *p_node) +{ + auto content = p_node->read(); + + // Images. + const auto images = + vte::MarkdownUtils::fetchImagesFromMarkdownText(content, + PathUtils::parentDirPath(p_node->fetchContentPath()), + vte::MarkdownLink::TypeFlag::LocalRelativeInternal); + + auto backend = p_node->getBackend(); + QSet handledImages; + for (const auto &link : images) { + if (handledImages.contains(link.m_path)) { + continue; + } + + handledImages.insert(link.m_path); + + if (!QFileInfo::exists(link.m_path)) { + qWarning() << "Image of Markdown file does not exist" << link.m_path << link.m_urlInLink; + continue; + } + backend->removeFile(link.m_path); + } +} + +void NodeContentMediaUtils::copyAttachment(Node *p_node, + INotebookBackend *p_backend, + const QString &p_destFilePath, + const QString &p_destAttachmentFolderPath) +{ + Q_ASSERT(p_node->getType() == Node::Type::File); + Q_ASSERT(!p_node->getAttachmentFolder().isEmpty()); + + // Copy the whole folder. + const auto srcAttachmentFolderPath = p_node->fetchAttachmentFolderPath(); + p_backend->copyDir(srcAttachmentFolderPath, p_destAttachmentFolderPath); + + // Check if we need to modify links in content. + if (p_node->getAttachmentFolder() == PathUtils::dirName(p_destAttachmentFolderPath)) { + return; + } + + auto fileType = FileTypeHelper::fileType(p_node->fetchAbsolutePath()); + if (fileType == QStringLiteral("markdown")) { + fixMarkdownLinks(srcAttachmentFolderPath, p_backend, p_destFilePath, p_destAttachmentFolderPath); + } +} + +void NodeContentMediaUtils::fixMarkdownLinks(const QString &p_srcFolderPath, + INotebookBackend *p_backend, + const QString &p_destFilePath, + const QString &p_destFolderPath) +{ + // TODO. +} diff --git a/src/core/notebookconfigmgr/nodecontentmediautils.h b/src/core/notebookconfigmgr/nodecontentmediautils.h new file mode 100644 index 00000000..ff8ba9c9 --- /dev/null +++ b/src/core/notebookconfigmgr/nodecontentmediautils.h @@ -0,0 +1,52 @@ +#ifndef NODECONTENTMEDIAUTILS_H +#define NODECONTENTMEDIAUTILS_H + +#include + +namespace vnotex +{ + class INotebookBackend; + class Node; + + // Utils to operate on the media files from node's content. + class NodeContentMediaUtils + { + public: + NodeContentMediaUtils() = delete; + + // Fetch media files from @p_node and copy them to dest folder. + // @p_destFilePath: @p_node has been copied to @p_destFilePath. + static void copyMediaFiles(const Node *p_node, + INotebookBackend *p_backend, + const QString &p_destFilePath); + + // @p_filePath: the file path to read the content for parse. + static void copyMediaFiles(const QString &p_filePath, + INotebookBackend *p_backend, + const QString &p_destFilePath); + + static void removeMediaFiles(const Node *p_node); + + // Copy attachment folder. + static void copyAttachment(Node *p_node, + INotebookBackend *p_backend, + const QString &p_destFilePath, + const QString &p_destAttachmentFolderPath); + + private: + static void copyMarkdownMediaFiles(const QString &p_content, + const QString &p_basePath, + INotebookBackend *p_backend, + const QString &p_destFilePath); + + static void removeMarkdownMediaFiles(const Node *p_node); + + // Fix local relative internal links locating in @p_srcFolderPath. + static void fixMarkdownLinks(const QString &p_srcFolderPath, + INotebookBackend *p_backend, + const QString &p_destFilePath, + const QString &p_destFolderPath); + }; +} + +#endif // NODECONTENTMEDIAUTILS_H diff --git a/src/core/notebookconfigmgr/notebookconfig.cpp b/src/core/notebookconfigmgr/notebookconfig.cpp new file mode 100644 index 00000000..44ca9798 --- /dev/null +++ b/src/core/notebookconfigmgr/notebookconfig.cpp @@ -0,0 +1,111 @@ +#include "notebookconfig.h" + +#include +#include +#include +#include +#include "exception.h" +#include "global.h" + +using namespace vnotex; + +const QString NotebookConfig::c_version = "version"; + +const QString NotebookConfig::c_name = "name"; + +const QString NotebookConfig::c_description = "description"; + +const QString NotebookConfig::c_imageFolder = "image_folder"; + +const QString NotebookConfig::c_attachmentFolder = "attachment_folder"; + +const QString NotebookConfig::c_createdTimeUtc = "created_time"; + +const QString NotebookConfig::c_versionController = "version_controller"; + +const QString NotebookConfig::c_configMgr = "config_mgr"; + +const QString NotebookConfig::c_nextNodeId = "next_node_id"; + +QSharedPointer NotebookConfig::fromNotebookParameters(const QString &p_version, + const NotebookParameters &p_paras) +{ + auto config = QSharedPointer::create(); + + config->m_version = p_version; + config->m_name = p_paras.m_name; + config->m_description = p_paras.m_description; + config->m_imageFolder = p_paras.m_imageFolder; + config->m_attachmentFolder = p_paras.m_attachmentFolder; + config->m_createdTimeUtc = p_paras.m_createdTimeUtc; + config->m_versionController = p_paras.m_versionController->getName(); + config->m_notebookConfigMgr = p_paras.m_notebookConfigMgr->getName(); + + return config; +} + +QJsonObject NotebookConfig::toJson() const +{ + QJsonObject jobj; + + jobj[NotebookConfig::c_version] = m_version; + jobj[NotebookConfig::c_name] = m_name; + jobj[NotebookConfig::c_description] = m_description; + jobj[NotebookConfig::c_imageFolder] = m_imageFolder; + jobj[NotebookConfig::c_attachmentFolder] = m_attachmentFolder; + jobj[NotebookConfig::c_createdTimeUtc] = Utils::dateTimeStringUniform(m_createdTimeUtc); + jobj[NotebookConfig::c_versionController] = m_versionController; + jobj[NotebookConfig::c_configMgr] = m_notebookConfigMgr; + jobj[NotebookConfig::c_nextNodeId] = QString::number(m_nextNodeId); + + return jobj; +} + +void NotebookConfig::fromJson(const QJsonObject &p_jobj) +{ + if (!p_jobj.contains(NotebookConfig::c_version) + || !p_jobj.contains(NotebookConfig::c_name) + || !p_jobj.contains(NotebookConfig::c_createdTimeUtc) + || !p_jobj.contains(NotebookConfig::c_versionController) + || !p_jobj.contains(NotebookConfig::c_configMgr)) { + Exception::throwOne(Exception::Type::InvalidArgument, + QString("fail to read notebook configuration from JSON (%1)").arg(QJsonObjectToString(p_jobj))); + return; + } + + m_version = p_jobj[NotebookConfig::c_version].toString(); + m_name = p_jobj[NotebookConfig::c_name].toString(); + m_description = p_jobj[NotebookConfig::c_description].toString(); + m_imageFolder = p_jobj[NotebookConfig::c_imageFolder].toString(); + m_attachmentFolder = p_jobj[NotebookConfig::c_attachmentFolder].toString(); + m_createdTimeUtc = Utils::dateTimeFromStringUniform(p_jobj[NotebookConfig::c_createdTimeUtc].toString()); + m_versionController = p_jobj[NotebookConfig::c_versionController].toString(); + m_notebookConfigMgr = p_jobj[NotebookConfig::c_configMgr].toString(); + + { + auto nextNodeIdStr = p_jobj[NotebookConfig::c_nextNodeId].toString(); + bool ok; + m_nextNodeId = nextNodeIdStr.toULongLong(&ok); + if (!ok) { + m_nextNodeId = BundleNotebookConfigMgr::RootNodeId; + } + } +} + +QSharedPointer NotebookConfig::fromNotebook(const QString &p_version, + const Notebook *p_notebook) +{ + auto config = QSharedPointer::create(); + + config->m_version = p_version; + config->m_name = p_notebook->getName(); + config->m_description = p_notebook->getDescription(); + config->m_imageFolder = p_notebook->getImageFolder(); + config->m_attachmentFolder = p_notebook->getAttachmentFolder(); + config->m_createdTimeUtc = p_notebook->getCreatedTimeUtc(); + config->m_versionController = p_notebook->getVersionController()->getName(); + config->m_notebookConfigMgr = p_notebook->getConfigMgr()->getName(); + config->m_nextNodeId = p_notebook->getNextNodeId(); + + return config; +} diff --git a/src/core/notebookconfigmgr/notebookconfig.h b/src/core/notebookconfigmgr/notebookconfig.h new file mode 100644 index 00000000..f7bdfbfd --- /dev/null +++ b/src/core/notebookconfigmgr/notebookconfig.h @@ -0,0 +1,68 @@ +#ifndef NOTEBOOKCONFIG_H +#define NOTEBOOKCONFIG_H + +#include +#include +#include + +#include "bundlenotebookconfigmgr.h" +#include "global.h" + +namespace vnotex +{ + class NotebookParameters; + + class NotebookConfig + { + public: + virtual ~NotebookConfig() {} + + static QSharedPointer fromNotebookParameters(const QString &p_version, + const NotebookParameters &p_paras); + + static QSharedPointer fromNotebook(const QString &p_version, + const Notebook *p_notebook); + + virtual QJsonObject toJson() const; + + virtual void fromJson(const QJsonObject &p_jobj); + + QString m_version; + + QString m_name; + + QString m_description; + + QString m_imageFolder; + + QString m_attachmentFolder; + + QDateTime m_createdTimeUtc; + + QString m_versionController; + + QString m_notebookConfigMgr; + + ID m_nextNodeId = BundleNotebookConfigMgr::RootNodeId + 1; + + static const QString c_version; + + static const QString c_name; + + static const QString c_description; + + static const QString c_imageFolder; + + static const QString c_attachmentFolder; + + static const QString c_createdTimeUtc; + + static const QString c_versionController; + + static const QString c_configMgr; + + static const QString c_nextNodeId; + }; +} // ns vnotex + +#endif // NOTEBOOKCONFIG_H diff --git a/src/core/notebookconfigmgr/notebookconfigmgr.pri b/src/core/notebookconfigmgr/notebookconfigmgr.pri new file mode 100644 index 00000000..c60a3461 --- /dev/null +++ b/src/core/notebookconfigmgr/notebookconfigmgr.pri @@ -0,0 +1,16 @@ +SOURCES += \ + $$PWD/nodecontentmediautils.cpp \ + $$PWD/vxnotebookconfigmgr.cpp \ + $$PWD/vxnotebookconfigmgrfactory.cpp \ + $$PWD/inotebookconfigmgr.cpp \ + $$PWD/notebookconfig.cpp \ + $$PWD/bundlenotebookconfigmgr.cpp + +HEADERS += \ + $$PWD/inotebookconfigmgr.h \ + $$PWD/nodecontentmediautils.h \ + $$PWD/vxnotebookconfigmgr.h \ + $$PWD/inotebookconfigmgrfactory.h \ + $$PWD/vxnotebookconfigmgrfactory.h \ + $$PWD/notebookconfig.h \ + $$PWD/bundlenotebookconfigmgr.h diff --git a/src/core/notebookconfigmgr/vxnotebookconfigmgr.cpp b/src/core/notebookconfigmgr/vxnotebookconfigmgr.cpp new file mode 100644 index 00000000..e1304602 --- /dev/null +++ b/src/core/notebookconfigmgr/vxnotebookconfigmgr.cpp @@ -0,0 +1,886 @@ +#include "vxnotebookconfigmgr.h" + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "nodecontentmediautils.h" + +using namespace vnotex; + +const QString VXNotebookConfigMgr::NodeConfig::c_version = "version"; + +const QString VXNotebookConfigMgr::NodeConfig::c_id = "id"; + +const QString VXNotebookConfigMgr::NodeConfig::c_createdTimeUtc = "created_time"; + +const QString VXNotebookConfigMgr::NodeConfig::c_files = "files"; + +const QString VXNotebookConfigMgr::NodeConfig::c_folders = "folders"; + +const QString VXNotebookConfigMgr::NodeConfig::c_name = "name"; + +const QString VXNotebookConfigMgr::NodeConfig::c_modifiedTimeUtc = "modified_time"; + +const QString VXNotebookConfigMgr::NodeConfig::c_attachmentFolder = "attachment_folder"; + +const QString VXNotebookConfigMgr::NodeConfig::c_tags = "tags"; + +QJsonObject VXNotebookConfigMgr::NodeFileConfig::toJson() const +{ + QJsonObject jobj; + + jobj[NodeConfig::c_name] = m_name; + jobj[NodeConfig::c_id] = QString::number(m_id); + jobj[NodeConfig::c_createdTimeUtc] = Utils::dateTimeStringUniform(m_createdTimeUtc); + jobj[NodeConfig::c_modifiedTimeUtc] = Utils::dateTimeStringUniform(m_modifiedTimeUtc); + jobj[NodeConfig::c_attachmentFolder] = m_attachmentFolder; + jobj[NodeConfig::c_tags] = QJsonArray::fromStringList(m_tags); + + return jobj; +} + +void VXNotebookConfigMgr::NodeFileConfig::fromJson(const QJsonObject &p_jobj) +{ + m_name = p_jobj[NodeConfig::c_name].toString(); + + { + auto idStr = p_jobj[NodeConfig::c_id].toString(); + bool ok; + m_id = idStr.toULongLong(&ok); + if (!ok) { + m_id = Node::InvalidId; + } + } + + m_createdTimeUtc = Utils::dateTimeFromStringUniform(p_jobj[NodeConfig::c_createdTimeUtc].toString()); + m_modifiedTimeUtc = Utils::dateTimeFromStringUniform(p_jobj[NodeConfig::c_modifiedTimeUtc].toString()); + + m_attachmentFolder = p_jobj[NodeConfig::c_attachmentFolder].toString(); + + { + auto arr = p_jobj[NodeConfig::c_tags].toArray(); + for (const auto &tag : arr) { + m_tags << tag.toString(); + } + } +} + +QJsonObject VXNotebookConfigMgr::NodeFolderConfig::toJson() const +{ + QJsonObject jobj; + + jobj[NodeConfig::c_name] = m_name; + + return jobj; +} + +void VXNotebookConfigMgr::NodeFolderConfig::fromJson(const QJsonObject &p_jobj) +{ + m_name = p_jobj[NodeConfig::c_name].toString(); +} + +VXNotebookConfigMgr::NodeConfig::NodeConfig() +{ +} + +VXNotebookConfigMgr::NodeConfig::NodeConfig(const QString &p_version, + ID p_id, + const QDateTime &p_createdTimeUtc) + : m_version(p_version), + m_id(p_id), + m_createdTimeUtc(p_createdTimeUtc) +{ +} + +QJsonObject VXNotebookConfigMgr::NodeConfig::toJson() const +{ + QJsonObject jobj; + + jobj[NodeConfig::c_version] = m_version; + jobj[NodeConfig::c_id] = QString::number(m_id); + jobj[NodeConfig::c_createdTimeUtc] = Utils::dateTimeStringUniform(m_createdTimeUtc); + + QJsonArray files; + for (const auto &file : m_files) { + files.append(file.toJson()); + } + jobj[NodeConfig::c_files] = files; + + QJsonArray folders; + for (const auto& folder : m_folders) { + folders.append(folder.toJson()); + } + jobj[NodeConfig::c_folders] = folders; + + return jobj; +} + +void VXNotebookConfigMgr::NodeConfig::fromJson(const QJsonObject &p_jobj) +{ + m_version = p_jobj[NodeConfig::c_version].toString(); + + { + auto idStr = p_jobj[NodeConfig::c_id].toString(); + bool ok; + m_id = idStr.toULongLong(&ok); + if (!ok) { + m_id = Node::InvalidId; + } + } + + m_createdTimeUtc = Utils::dateTimeFromStringUniform(p_jobj[NodeConfig::c_createdTimeUtc].toString()); + + auto filesJson = p_jobj[NodeConfig::c_files].toArray(); + m_files.resize(filesJson.size()); + for (int i = 0; i < filesJson.size(); ++i) { + m_files[i].fromJson(filesJson[i].toObject()); + } + + auto foldersJson = p_jobj[NodeConfig::c_folders].toArray(); + m_folders.resize(foldersJson.size()); + for (int i = 0; i < foldersJson.size(); ++i) { + m_folders[i].fromJson(foldersJson[i].toObject()); + } +} + + +const QString VXNotebookConfigMgr::c_nodeConfigName = "vx.json"; + +const QString VXNotebookConfigMgr::c_recycleBinFolderName = "vx_recycle_bin"; + +VXNotebookConfigMgr::VXNotebookConfigMgr(const QString &p_name, + const QString &p_displayName, + const QString &p_description, + const QSharedPointer &p_backend, + QObject *p_parent) + : BundleNotebookConfigMgr(p_backend, p_parent), + m_info(p_name, p_displayName, p_description) +{ +} + +QString VXNotebookConfigMgr::getName() const +{ + return m_info.m_name; +} + +QString VXNotebookConfigMgr::getDisplayName() const +{ + return m_info.m_displayName; +} + +QString VXNotebookConfigMgr::getDescription() const +{ + return m_info.m_description; +} + +void VXNotebookConfigMgr::createEmptySkeleton(const NotebookParameters &p_paras) +{ + BundleNotebookConfigMgr::createEmptySkeleton(p_paras); + + createEmptyRootNode(); +} + +void VXNotebookConfigMgr::createEmptyRootNode() +{ + NodeConfig node(getCodeVersion(), + BundleNotebookConfigMgr::RootNodeId, + QDateTime::currentDateTimeUtc()); + writeNodeConfig(c_nodeConfigName, node); +} + +QSharedPointer VXNotebookConfigMgr::loadRootNode() const +{ + auto nodeConfig = readNodeConfig(""); + QSharedPointer root = nodeConfigToNode(*nodeConfig, "", nullptr); + Q_ASSERT(root->isLoaded()); + + if (!markRecycleBinNode(root)) { + const_cast(this)->createRecycleBinNode(root); + } + + return root; +} + +bool VXNotebookConfigMgr::markRecycleBinNode(const QSharedPointer &p_root) const +{ + auto node = p_root->findChild(c_recycleBinFolderName, + FileUtils::isPlatformNameCaseSensitive()); + if (node) { + node->setUse(Node::Use::RecycleBin); + markNodeReadOnly(node.data()); + return true; + } + + return false; +} + +void VXNotebookConfigMgr::markNodeReadOnly(Node *p_node) const +{ + auto flags = p_node->getFlags(); + if (flags & Node::Flag::ReadOnly) { + return; + } + + p_node->setFlags(flags | Node::Flag::ReadOnly); + for (auto &child : p_node->getChildren()) { + markNodeReadOnly(child.data()); + } +} + +void VXNotebookConfigMgr::createRecycleBinNode(const QSharedPointer &p_root) +{ + Q_ASSERT(p_root->isRoot()); + + auto node = newNode(p_root.data(), Node::Type::Folder, c_recycleBinFolderName); + node->setUse(Node::Use::RecycleBin); + markNodeReadOnly(node.data()); +} + +QSharedPointer VXNotebookConfigMgr::readNodeConfig(const QString &p_path) const +{ + auto backend = getBackend(); + if (!backend->exists(p_path)) { + Exception::throwOne(Exception::Type::InvalidArgument, + QString("node path (%1) does not exist").arg(p_path)); + } + + if (backend->isFile(p_path)) { + Exception::throwOne(Exception::Type::InvalidArgument, + QString("node (%1) is a file node without config").arg(p_path)); + } else { + auto configPath = PathUtils::concatenateFilePath(p_path, c_nodeConfigName); + auto data = backend->readFile(configPath); + auto nodeConfig = QSharedPointer::create(); + nodeConfig->fromJson(QJsonDocument::fromJson(data).object()); + return nodeConfig; + } + + return nullptr; +} + +QString VXNotebookConfigMgr::getNodeConfigFilePath(const Node *p_node) const +{ + Q_ASSERT(p_node->getType() == Node::Type::Folder); + return PathUtils::concatenateFilePath(p_node->fetchRelativePath(), c_nodeConfigName); +} + +void VXNotebookConfigMgr::writeNodeConfig(const QString &p_path, const NodeConfig &p_config) const +{ + getBackend()->writeFile(p_path, p_config.toJson()); +} + +void VXNotebookConfigMgr::writeNodeConfig(const Node *p_node) +{ + auto config = nodeToNodeConfig(p_node); + writeNodeConfig(getNodeConfigFilePath(p_node), *config); +} + +QSharedPointer VXNotebookConfigMgr::nodeConfigToNode(const NodeConfig &p_config, + const QString &p_name, + Node *p_parent) const +{ + auto node = QSharedPointer::create(p_name, getNotebook(), p_parent); + loadFolderNode(node.data(), p_config); + return node; +} + +void VXNotebookConfigMgr::loadFolderNode(FolderNode *p_node, const NodeConfig &p_config) const +{ + QVector> children; + children.reserve(p_config.m_files.size() + p_config.m_folders.size()); + + for (const auto &folder : p_config.m_folders) { + auto folderNode = QSharedPointer::create(folder.m_name, + getNotebook(), + p_node); + inheritNodeFlags(p_node, folderNode.data()); + children.push_back(folderNode); + } + + for (const auto &file : p_config.m_files) { + auto fileNode = QSharedPointer::create(file.m_id, + file.m_name, + file.m_createdTimeUtc, + file.m_modifiedTimeUtc, + file.m_attachmentFolder, + file.m_tags, + getNotebook(), + p_node); + inheritNodeFlags(p_node, fileNode.data()); + children.push_back(fileNode); + } + + p_node->loadFolder(p_config.m_id, p_config.m_createdTimeUtc, children); +} + +QSharedPointer VXNotebookConfigMgr::newNode(Node *p_parent, + Node::Type p_type, + const QString &p_name) +{ + Q_ASSERT(p_parent && p_parent->getType() == Node::Type::Folder); + + QSharedPointer node; + + switch (p_type) { + case Node::Type::File: + node = newFileNode(p_parent, p_name, true, NodeParameters()); + break; + + case Node::Type::Folder: + node = newFolderNode(p_parent, p_name, true, NodeParameters()); + break; + } + + return node; +} + +QSharedPointer VXNotebookConfigMgr::addAsNode(Node *p_parent, + Node::Type p_type, + const QString &p_name, + const NodeParameters &p_paras) +{ + Q_ASSERT(p_parent && p_parent->getType() == Node::Type::Folder); + + QSharedPointer node; + switch (p_type) { + case Node::Type::File: + node = newFileNode(p_parent, p_name, false, p_paras); + break; + + case Node::Type::Folder: + node = newFolderNode(p_parent, p_name, false, p_paras); + break; + } + + return node; +} + +QSharedPointer VXNotebookConfigMgr::copyAsNode(Node *p_parent, + Node::Type p_type, + const QString &p_path) +{ + Q_ASSERT(p_parent && p_parent->getType() == Node::Type::Folder); + + QSharedPointer node; + switch (p_type) { + case Node::Type::File: + node = copyFileAsChildOf(p_path, p_parent); + break; + + case Node::Type::Folder: + node = copyFolderAsChildOf(p_path, p_parent); + break; + } + + return node; +} + +QSharedPointer VXNotebookConfigMgr::newFileNode(Node *p_parent, + const QString &p_name, + bool p_create, + const NodeParameters &p_paras) +{ + auto notebook = getNotebook(); + + // Create file node. + auto node = QSharedPointer::create(Node::InvalidId, + p_name, + p_paras.m_createdTimeUtc, + p_paras.m_modifiedTimeUtc, + p_paras.m_attachmentFolder, + p_paras.m_tags, + notebook, + p_parent); + + // Write empty file. + if (p_create) { + getBackend()->writeFile(node->fetchRelativePath(), QString()); + } + + addChildNode(p_parent, node); + writeNodeConfig(p_parent); + + return node; +} + +QSharedPointer VXNotebookConfigMgr::newFolderNode(Node *p_parent, + const QString &p_name, + bool p_create, + const NodeParameters &p_paras) +{ + auto notebook = getNotebook(); + + // Create folder node. + auto node = QSharedPointer::create(p_name, notebook, p_parent); + node->loadFolder(Node::InvalidId, + p_paras.m_createdTimeUtc, + QVector>()); + + // Make folder. + if (p_create) { + getBackend()->makePath(node->fetchRelativePath()); + } + + writeNodeConfig(node.data()); + + addChildNode(p_parent, node); + writeNodeConfig(p_parent); + + return node; +} + +QSharedPointer VXNotebookConfigMgr::nodeToNodeConfig(const Node *p_node) const +{ + Q_ASSERT(p_node->getType() == Node::Type::Folder); + + auto config = QSharedPointer::create(getCodeVersion(), + p_node->getId(), + p_node->getCreatedTimeUtc()); + + for (const auto &child : p_node->getChildren()) { + switch (child->getType()) { + case Node::Type::File: + { + NodeFileConfig fileConfig; + fileConfig.m_name = child->getName(); + fileConfig.m_id = child->getId(); + fileConfig.m_createdTimeUtc = child->getCreatedTimeUtc(); + fileConfig.m_modifiedTimeUtc = child->getModifiedTimeUtc(); + fileConfig.m_attachmentFolder = child->getAttachmentFolder(); + fileConfig.m_tags = child->getTags(); + + config->m_files.push_back(fileConfig); + break; + } + + case Node::Type::Folder: + { + NodeFolderConfig folderConfig; + folderConfig.m_name = child->getName(); + + config->m_folders.push_back(folderConfig); + break; + } + } + } + + return config; +} + +void VXNotebookConfigMgr::loadNode(Node *p_node) const +{ + if (p_node->isLoaded()) { + return; + } + + auto config = readNodeConfig(p_node->fetchRelativePath()); + auto folderNode = dynamic_cast(p_node); + loadFolderNode(folderNode, *config); +} + +void VXNotebookConfigMgr::saveNode(const Node *p_node) +{ + Q_ASSERT(!p_node->isRoot()); + + if (p_node->getType() == Node::Type::Folder) { + writeNodeConfig(p_node); + } else { + writeNodeConfig(p_node->getParent()); + } +} + +void VXNotebookConfigMgr::renameNode(Node *p_node, const QString &p_name) +{ + Q_ASSERT(!p_node->isRoot()); + switch (p_node->getType()) { + case Node::Type::Folder: + getBackend()->renameDir(p_node->fetchRelativePath(), p_name); + break; + + case Node::Type::File: + getBackend()->renameFile(p_node->fetchRelativePath(), p_name); + break; + } + + p_node->setName(p_name); + writeNodeConfig(p_node->getParent()); +} + +void VXNotebookConfigMgr::addChildNode(Node *p_parent, const QSharedPointer &p_child) const +{ + // Add @p_child after the last node of same type. + const auto type = p_child->getType(); + switch (type) { + case Node::Type::Folder: + { + int idx = 0; + auto children = p_parent->getChildren(); + for (; idx < children.size(); ++idx) { + if (children[idx]->getType() != type) { + break; + } + } + + p_parent->insertChild(idx, p_child); + break; + } + + case Node::Type::File: + p_parent->addChild(p_child); + break; + } + + inheritNodeFlags(p_parent, p_child.data()); +} + +QSharedPointer VXNotebookConfigMgr::loadNodeByPath(const QSharedPointer &p_root, const QString &p_relativePath) +{ + auto p = PathUtils::cleanPath(p_relativePath); + auto paths = p.split('/', QString::SkipEmptyParts); + auto node = p_root; + for (auto &pa : paths) { + // Find child @pa in @node. + if (!node->isLoaded()) { + loadNode(node.data()); + } + + auto child = node->findChild(pa, FileUtils::isPlatformNameCaseSensitive()); + if (!child) { + return nullptr; + } + + node = child; + } + + return node; +} + +// @p_src may belong to different notebook or different kind of configmgr. +// TODO: we could constrain @p_src within the same configrmgr? +QSharedPointer VXNotebookConfigMgr::copyNodeAsChildOf(const QSharedPointer &p_src, + Node *p_dest, + bool p_move) +{ + Q_ASSERT(p_dest->getType() == Node::Type::Folder); + if (!p_src->existsOnDisk()) { + Exception::throwOne(Exception::Type::FileMissingOnDisk, + QString("source node missing on disk (%1)").arg(p_src->fetchAbsolutePath())); + return nullptr; + } + + QSharedPointer node; + switch (p_src->getType()) { + case Node::Type::File: + node = copyFileNodeAsChildOf(p_src, p_dest, p_move); + break; + + case Node::Type::Folder: + node = copyFolderNodeAsChildOf(p_src, p_dest, p_move); + break; + } + + return node; +} + +QSharedPointer VXNotebookConfigMgr::copyFileNodeAsChildOf(const QSharedPointer &p_src, + Node *p_dest, + bool p_move) +{ + // Copy source file itself. + auto srcFilePath = p_src->fetchAbsolutePath(); + auto destFilePath = PathUtils::concatenateFilePath(p_dest->fetchRelativePath(), + PathUtils::fileName(srcFilePath)); + destFilePath = getBackend()->renameIfExistsCaseInsensitive(destFilePath); + getBackend()->copyFile(srcFilePath, destFilePath); + + // Copy media files fetched from content. + NodeContentMediaUtils::copyMediaFiles(p_src.data(), getBackend().data(), destFilePath); + + // Copy attachment folder. Rename attachment folder if conflicts. + QString attachmentFolder = p_src->getAttachmentFolder(); + if (!attachmentFolder.isEmpty()) { + auto destAttachmentFolderPath = fetchNodeAttachmentFolder(destFilePath, attachmentFolder); + NodeContentMediaUtils::copyAttachment(p_src.data(), getBackend().data(), destFilePath, destAttachmentFolderPath); + } + + // Create a file node. + auto notebook = getNotebook(); + auto id = p_src->getId(); + if (!p_move || p_src->getNotebook() != notebook) { + // Use a new id. + id = notebook->getAndUpdateNextNodeId(); + } + + auto destNode = QSharedPointer::create(id, + PathUtils::fileName(destFilePath), + p_src->getCreatedTimeUtc(), + p_src->getModifiedTimeUtc(), + attachmentFolder, + p_src->getTags(), + notebook, + p_dest); + addChildNode(p_dest, destNode); + writeNodeConfig(p_dest); + + if (p_move) { + // Delete src node. + p_src->getNotebook()->removeNode(p_src); + } + + return destNode; +} + +QSharedPointer VXNotebookConfigMgr::copyFolderNodeAsChildOf(const QSharedPointer &p_src, + Node *p_dest, + bool p_move) +{ + auto srcFolderPath = p_src->fetchAbsolutePath(); + auto destFolderPath = PathUtils::concatenateFilePath(p_dest->fetchRelativePath(), + PathUtils::fileName(srcFolderPath)); + destFolderPath = getBackend()->renameIfExistsCaseInsensitive(destFolderPath); + + // Make folder. + getBackend()->makePath(destFolderPath); + + // Create a folder node. + auto notebook = getNotebook(); + auto id = p_src->getId(); + if (!p_move || p_src->getNotebook() != notebook) { + // Use a new id. + id = notebook->getAndUpdateNextNodeId(); + } + auto destNode = QSharedPointer::create(PathUtils::fileName(destFolderPath), + notebook, + p_dest); + destNode->loadFolder(id, p_src->getCreatedTimeUtc(), QVector>()); + + writeNodeConfig(destNode.data()); + + addChildNode(p_dest, destNode); + writeNodeConfig(p_dest); + + // Copy children node. + for (const auto &childNode : p_src->getChildren()) { + copyNodeAsChildOf(childNode, destNode.data(), p_move); + } + + if (p_move) { + p_src->getNotebook()->removeNode(p_src); + } + + return destNode; +} + +void VXNotebookConfigMgr::removeNode(const QSharedPointer &p_node, bool p_force, bool p_configOnly) +{ + auto parentNode = p_node->getParent(); + if (!p_configOnly) { + // Remove all children. + for (auto &childNode : p_node->getChildren()) { + removeNode(childNode, p_force, p_configOnly); + } + + removeFilesOfNode(p_node.data(), p_force); + } + + if (parentNode) { + parentNode->removeChild(p_node); + writeNodeConfig(parentNode); + } +} + +void VXNotebookConfigMgr::removeFilesOfNode(Node *p_node, bool p_force) +{ + Q_ASSERT(p_node->getNotebook() == getNotebook()); + switch (p_node->getType()) { + case Node::Type::File: + { + // Delete attachment. + if (!p_node->getAttachmentFolder().isEmpty()) { + getBackend()->removeDir(p_node->fetchAttachmentFolderPath()); + } + + // Delete media files fetched from content. + NodeContentMediaUtils::removeMediaFiles(p_node); + + // Delete node file itself. + auto filePath = p_node->fetchRelativePath(); + getBackend()->removeFile(filePath); + break; + } + + case Node::Type::Folder: + { + Q_ASSERT(p_node->getChildrenCount() == 0); + // Delete node config file and the dir if it is empty. + auto configFilePath = getNodeConfigFilePath(p_node); + getBackend()->removeFile(configFilePath); + auto folderPath = p_node->fetchRelativePath(); + if (p_force) { + getBackend()->removeDir(folderPath); + } else { + getBackend()->removeEmptyDir(folderPath); + bool deleted = getBackend()->removeDirIfEmpty(folderPath); + if (!deleted) { + qWarning() << "folder is not deleted since it is not empty" << folderPath; + } + } + break; + } + } +} + +bool VXNotebookConfigMgr::nodeExistsOnDisk(const Node *p_node) const +{ + return getBackend()->exists(p_node->fetchRelativePath()); +} + +QString VXNotebookConfigMgr::readNode(const Node *p_node) const +{ + Q_ASSERT(p_node->getType() == Node::Type::File); + return getBackend()->readTextFile(p_node->fetchRelativePath()); +} + +void VXNotebookConfigMgr::writeNode(Node *p_node, const QString &p_content) +{ + Q_ASSERT(p_node->getType() == Node::Type::File); + getBackend()->writeFile(p_node->fetchRelativePath(), p_content); + + p_node->setModifiedTimeUtc(); + writeNodeConfig(p_node->getParent()); +} + +QString VXNotebookConfigMgr::fetchNodeImageFolderPath(Node *p_node) +{ + auto pa = PathUtils::concatenateFilePath(PathUtils::parentDirPath(p_node->fetchAbsolutePath()), + getNotebook()->getImageFolder()); + // Do not make the folder when it is a folder node request. + if (p_node->getType() == Node::Type::File) { + getBackend()->makePath(pa); + } + return pa; +} + +QString VXNotebookConfigMgr::fetchNodeAttachmentFolderPath(Node *p_node) +{ + auto notebookFolder = PathUtils::concatenateFilePath(PathUtils::parentDirPath(p_node->fetchAbsolutePath()), + getNotebook()->getAttachmentFolder()); + if (p_node->getType() == Node::Type::File) { + auto nodeFolder = p_node->getAttachmentFolder(); + if (nodeFolder.isEmpty()) { + auto folderPath = fetchNodeAttachmentFolder(p_node->fetchAbsolutePath(), nodeFolder); + p_node->setAttachmentFolder(nodeFolder); + saveNode(p_node); + + getBackend()->makePath(folderPath); + return folderPath; + } else { + return PathUtils::concatenateFilePath(notebookFolder, nodeFolder); + } + } else { + // Do not make the folder when it is a folder node request. + return notebookFolder; + } +} + +QString VXNotebookConfigMgr::fetchNodeAttachmentFolder(const QString &p_nodePath, QString &p_folderName) +{ + auto notebookFolder = PathUtils::concatenateFilePath(PathUtils::parentDirPath(p_nodePath), + getNotebook()->getAttachmentFolder()); + if (p_folderName.isEmpty()) { + p_folderName = FileUtils::generateUniqueFileName(notebookFolder, QString(), QString()); + } else if (FileUtils::childExistsCaseInsensitive(notebookFolder, p_folderName)) { + p_folderName = FileUtils::generateFileNameWithSequence(notebookFolder, p_folderName, QString()); + } + return PathUtils::concatenateFilePath(notebookFolder, p_folderName); +} + +bool VXNotebookConfigMgr::isBuiltInFile(const Node *p_node, const QString &p_name) const +{ + const auto name = p_name.toLower(); + if (name == c_nodeConfigName) { + return true; + } + return BundleNotebookConfigMgr::isBuiltInFile(p_node, p_name); +} + +bool VXNotebookConfigMgr::isBuiltInFolder(const Node *p_node, const QString &p_name) const +{ + const auto name = p_name.toLower(); + if (name == c_recycleBinFolderName + || name == getNotebook()->getImageFolder().toLower() + || name == getNotebook()->getAttachmentFolder().toLower()) { + return true; + } + return BundleNotebookConfigMgr::isBuiltInFolder(p_node, p_name); +} + +QSharedPointer VXNotebookConfigMgr::copyFileAsChildOf(const QString &p_srcPath, Node *p_dest) +{ + // Copy source file itself. + auto destFilePath = PathUtils::concatenateFilePath(p_dest->fetchRelativePath(), + PathUtils::fileName(p_srcPath)); + destFilePath = getBackend()->renameIfExistsCaseInsensitive(destFilePath); + getBackend()->copyFile(p_srcPath, destFilePath); + + // Copy media files fetched from content. + NodeContentMediaUtils::copyMediaFiles(p_srcPath, getBackend().data(), destFilePath); + + // Create a file node. + auto currentTime = QDateTime::currentDateTimeUtc(); + auto destNode = QSharedPointer::create(getNotebook()->getAndUpdateNextNodeId(), + PathUtils::fileName(destFilePath), + currentTime, + currentTime, + QString(), + QStringList(), + getNotebook(), + p_dest); + addChildNode(p_dest, destNode); + writeNodeConfig(p_dest); + + return destNode; +} + +QSharedPointer VXNotebookConfigMgr::copyFolderAsChildOf(const QString &p_srcPath, Node *p_dest) +{ + auto destFolderPath = PathUtils::concatenateFilePath(p_dest->fetchRelativePath(), + PathUtils::fileName(p_srcPath)); + destFolderPath = getBackend()->renameIfExistsCaseInsensitive(destFolderPath); + + // Copy folder. + getBackend()->copyDir(p_srcPath, destFolderPath); + + // Create a folder node. + auto notebook = getNotebook(); + auto destNode = QSharedPointer::create(PathUtils::fileName(destFolderPath), + notebook, + p_dest); + destNode->loadFolder(notebook->getAndUpdateNextNodeId(), QDateTime::currentDateTimeUtc(), QVector>()); + + writeNodeConfig(destNode.data()); + + addChildNode(p_dest, destNode); + writeNodeConfig(p_dest); + + return destNode; +} + +void VXNotebookConfigMgr::inheritNodeFlags(const Node *p_node, Node *p_child) const +{ + if (p_node->getFlags() & Node::Flag::ReadOnly) { + markNodeReadOnly(p_child); + } +} diff --git a/src/core/notebookconfigmgr/vxnotebookconfigmgr.h b/src/core/notebookconfigmgr/vxnotebookconfigmgr.h new file mode 100644 index 00000000..1885987e --- /dev/null +++ b/src/core/notebookconfigmgr/vxnotebookconfigmgr.h @@ -0,0 +1,205 @@ +#ifndef VXNOTEBOOKCONFIGMGR_H +#define VXNOTEBOOKCONFIGMGR_H + +#include "bundlenotebookconfigmgr.h" + +#include +#include + +#include "../global.h" + +class QJsonObject; + +namespace vnotex +{ + class FolderNode; + + // Config manager for VNoteX's bundle notebook. + class VXNotebookConfigMgr : public BundleNotebookConfigMgr + { + Q_OBJECT + public: + explicit VXNotebookConfigMgr(const QString &p_name, + const QString &p_displayName, + const QString &p_description, + const QSharedPointer &p_backend, + QObject *p_parent = nullptr); + + QString getName() const Q_DECL_OVERRIDE; + + QString getDisplayName() const Q_DECL_OVERRIDE; + + QString getDescription() const Q_DECL_OVERRIDE; + + void createEmptySkeleton(const NotebookParameters &p_paras) Q_DECL_OVERRIDE; + + QSharedPointer loadRootNode() const Q_DECL_OVERRIDE; + + void loadNode(Node *p_node) const Q_DECL_OVERRIDE; + void saveNode(const Node *p_node) Q_DECL_OVERRIDE; + + void renameNode(Node *p_node, const QString &p_name) Q_DECL_OVERRIDE; + + QSharedPointer newNode(Node *p_parent, + Node::Type p_type, + const QString &p_name) Q_DECL_OVERRIDE; + + QSharedPointer addAsNode(Node *p_parent, + Node::Type p_type, + const QString &p_name, + const NodeParameters &p_paras) Q_DECL_OVERRIDE; + + QSharedPointer copyAsNode(Node *p_parent, + Node::Type p_type, + const QString &p_path) Q_DECL_OVERRIDE; + + QSharedPointer loadNodeByPath(const QSharedPointer &p_root, + const QString &p_relativePath) Q_DECL_OVERRIDE; + + QSharedPointer copyNodeAsChildOf(const QSharedPointer &p_src, + Node *p_dest, + bool p_move) Q_DECL_OVERRIDE; + + void removeNode(const QSharedPointer &p_node, bool p_force = false, bool p_configOnly = false) Q_DECL_OVERRIDE; + + bool nodeExistsOnDisk(const Node *p_node) const Q_DECL_OVERRIDE; + + QString readNode(const Node *p_node) const Q_DECL_OVERRIDE; + + void writeNode(Node *p_node, const QString &p_content) Q_DECL_OVERRIDE; + + QString fetchNodeImageFolderPath(Node *p_node) Q_DECL_OVERRIDE; + + QString fetchNodeAttachmentFolderPath(Node *p_node) Q_DECL_OVERRIDE; + + private: + // Config of a file child. + struct NodeFileConfig + { + QJsonObject toJson() const; + + void fromJson(const QJsonObject &p_jobj); + + QString m_name; + ID m_id = Node::InvalidId; + QDateTime m_createdTimeUtc; + QDateTime m_modifiedTimeUtc; + QString m_attachmentFolder; + QStringList m_tags; + }; + + // Config of a folder child. + struct NodeFolderConfig + { + QJsonObject toJson() const; + + void fromJson(const QJsonObject &p_jobj); + + QString m_name; + }; + + // Config of a folder node. + struct NodeConfig + { + NodeConfig(); + + NodeConfig(const QString &p_version, + ID p_id, + const QDateTime &p_createdTimeUtc); + + QJsonObject toJson() const; + + void fromJson(const QJsonObject &p_jobj); + + QString m_version; + ID m_id = Node::InvalidId; + QDateTime m_createdTimeUtc; + QVector m_files; + QVector m_folders; + + static const QString c_version; + + static const QString c_id; + + static const QString c_createdTimeUtc; + + static const QString c_files; + + static const QString c_folders; + + static const QString c_name; + + static const QString c_modifiedTimeUtc; + + static const QString c_attachmentFolder; + + static const QString c_tags; + }; + + void createEmptyRootNode(); + + QSharedPointer readNodeConfig(const QString &p_path) const; + void writeNodeConfig(const QString &p_path, const NodeConfig &p_config) const; + + void writeNodeConfig(const Node *p_node); + + QSharedPointer nodeConfigToNode(const NodeConfig &p_config, + const QString &p_name, + Node *p_parent = nullptr) const; + + void loadFolderNode(FolderNode *p_node, const NodeConfig &p_config) const; + + QSharedPointer nodeToNodeConfig(const Node *p_node) const; + + QSharedPointer newFileNode(Node *p_parent, + const QString &p_name, + bool p_create, + const NodeParameters &p_paras); + + QSharedPointer newFolderNode(Node *p_parent, + const QString &p_name, + bool p_create, + const NodeParameters &p_paras); + + QString getNodeConfigFilePath(const Node *p_node) const; + + void addChildNode(Node *p_parent, const QSharedPointer &p_child) const; + + QSharedPointer copyFileNodeAsChildOf(const QSharedPointer &p_src, Node *p_dest, bool p_move); + + QSharedPointer copyFolderNodeAsChildOf(const QSharedPointer &p_src, Node *p_dest, bool p_move); + + QSharedPointer copyFileAsChildOf(const QString &p_srcPath, Node *p_dest); + + QSharedPointer copyFolderAsChildOf(const QString &p_srcPath, Node *p_dest); + + void removeFilesOfNode(Node *p_node, bool p_force); + + bool markRecycleBinNode(const QSharedPointer &p_root) const; + + void markNodeReadOnly(Node *p_node) const; + + void createRecycleBinNode(const QSharedPointer &p_root); + + // Generate node attachment folder. + // @p_folderName: suggested folder name if not empty, may be renamed due to conflicts. + // Return the attachment folder path. + QString fetchNodeAttachmentFolder(const QString &p_nodePath, QString &p_folderName); + + bool isBuiltInFile(const Node *p_node, const QString &p_name) const Q_DECL_OVERRIDE; + + bool isBuiltInFolder(const Node *p_node, const QString &p_name) const Q_DECL_OVERRIDE; + + void inheritNodeFlags(const Node *p_node, Node *p_child) const; + + Info m_info; + + // Name of the node's config file. + static const QString c_nodeConfigName; + + // Name of the recycle bin folder which should be a child of the root node. + static const QString c_recycleBinFolderName; + }; +} // ns vnotex + +#endif // VXNOTEBOOKCONFIGMGR_H diff --git a/src/core/notebookconfigmgr/vxnotebookconfigmgrfactory.cpp b/src/core/notebookconfigmgr/vxnotebookconfigmgrfactory.cpp new file mode 100644 index 00000000..842ee7a0 --- /dev/null +++ b/src/core/notebookconfigmgr/vxnotebookconfigmgrfactory.cpp @@ -0,0 +1,35 @@ +#include "vxnotebookconfigmgrfactory.h" + +#include + +#include "vxnotebookconfigmgr.h" +#include "../notebookbackend/inotebookbackend.h" + +using namespace vnotex; + +VXNotebookConfigMgrFactory::VXNotebookConfigMgrFactory() +{ +} + +QString VXNotebookConfigMgrFactory::getName() const +{ + return QStringLiteral("vx.vnotex"); +} + +QString VXNotebookConfigMgrFactory::getDisplayName() const +{ + return QObject::tr("VNoteX Notebook Configuration"); +} + +QString VXNotebookConfigMgrFactory::getDescription() const +{ + return QObject::tr("Built-in VNoteX notebook configuration"); +} + +QSharedPointer VXNotebookConfigMgrFactory::createNotebookConfigMgr(const QSharedPointer &p_backend) +{ + return QSharedPointer::create(getName(), + getDisplayName(), + getDescription(), + p_backend); +} diff --git a/src/core/notebookconfigmgr/vxnotebookconfigmgrfactory.h b/src/core/notebookconfigmgr/vxnotebookconfigmgrfactory.h new file mode 100644 index 00000000..3a345444 --- /dev/null +++ b/src/core/notebookconfigmgr/vxnotebookconfigmgrfactory.h @@ -0,0 +1,25 @@ +#ifndef VXNOTEBOOKCONFIGMGRFACTORY_H +#define VXNOTEBOOKCONFIGMGRFACTORY_H + + +#include "inotebookconfigmgrfactory.h" + + +namespace vnotex +{ + class VXNotebookConfigMgrFactory : public INotebookConfigMgrFactory + { + public: + VXNotebookConfigMgrFactory(); + + QString getName() const Q_DECL_OVERRIDE; + + QString getDisplayName() const Q_DECL_OVERRIDE; + + QString getDescription()const Q_DECL_OVERRIDE; + + QSharedPointer createNotebookConfigMgr(const QSharedPointer &p_backend) Q_DECL_OVERRIDE; + }; +} // ns vnotex + +#endif // VXNOTEBOOKCONFIGMGRFACTORY_H diff --git a/src/core/notebookmgr.cpp b/src/core/notebookmgr.cpp new file mode 100644 index 00000000..bc194348 --- /dev/null +++ b/src/core/notebookmgr.cpp @@ -0,0 +1,376 @@ +#include "notebookmgr.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "exception.h" +#include "configmgr.h" +#include + +using namespace vnotex; + +NotebookMgr::NotebookMgr(QObject *p_parent) + : QObject(p_parent), + m_currentNotebookId(Notebook::InvalidId) +{ +} + +void NotebookMgr::init() +{ + initVersionControllerServer(); + + initConfigMgrServer(); + + initBackendServer(); + + initNotebookServer(); +} + +void NotebookMgr::initVersionControllerServer() +{ + m_versionControllerServer.reset(new NameBasedServer); + + // Dummy Version Controller. + auto dummyFactory = QSharedPointer::create(); + m_versionControllerServer->registerItem(dummyFactory->getName(), dummyFactory); +} + +void NotebookMgr::initConfigMgrServer() +{ + m_configMgrServer.reset(new NameBasedServer); + + // VX Notebook Config Manager. + auto vxFactory = QSharedPointer::create(); + m_configMgrServer->registerItem(vxFactory->getName(), vxFactory); + +} + +void NotebookMgr::initBackendServer() +{ + m_backendServer.reset(new NameBasedServer); + + // Local Notebook Backend. + auto localFactory = QSharedPointer::create(); + m_backendServer->registerItem(localFactory->getName(), localFactory); +} + +void NotebookMgr::initNotebookServer() +{ + m_notebookServer.reset(new NameBasedServer); + + // Bundle Notebook. + auto bundleFacotry = QSharedPointer::create(); + m_notebookServer->registerItem(bundleFacotry->getName(), bundleFacotry); +} + +QSharedPointer NotebookMgr::getBundleNotebookFactory() const +{ + return m_notebookServer->getItem(QStringLiteral("bundle.vnotex")); +} + +QList> NotebookMgr::getAllNotebookFactories() const +{ + return m_notebookServer->getAllItems(); +} + +QList> NotebookMgr::getAllVersionControllerFactories() const +{ + return m_versionControllerServer->getAllItems(); +} + +QList> NotebookMgr::getAllNotebookConfigMgrFactories() const +{ + return m_configMgrServer->getAllItems(); +} + +QList> NotebookMgr::getAllNotebookBackendFactories() const +{ + return m_backendServer->getAllItems(); +} + +QSharedPointer NotebookMgr::createNotebookBackend(const QString &p_backendName, + const QString &p_rootFolderPath) const +{ + auto factory = m_backendServer->getItem(p_backendName); + if (factory) { + return factory->createNotebookBackend(p_rootFolderPath); + } else { + Exception::throwOne(Exception::Type::InvalidArgument, + QString("fail to find notebook backend factory %1").arg(p_backendName)); + } + + return nullptr; +} + +QSharedPointer NotebookMgr::createVersionController(const QString &p_controllerName) const +{ + auto factory = m_versionControllerServer->getItem(p_controllerName); + if (factory) { + return factory->createVersionController(); + } else { + Exception::throwOne(Exception::Type::InvalidArgument, + QString("fail to find version controller factory %1").arg(p_controllerName)); + } + + return nullptr; +} + +QSharedPointer NotebookMgr::createNotebookConfigMgr(const QString &p_mgrName, + const QSharedPointer &p_backend) const +{ + auto factory = m_configMgrServer->getItem(p_mgrName); + if (factory) { + return factory->createNotebookConfigMgr(p_backend); + } else { + Exception::throwOne(Exception::Type::InvalidArgument, + QString("fail to find notebook config manager factory %1").arg(p_mgrName)); + } + + return nullptr; +} + +void NotebookMgr::loadNotebooks() +{ + readNotebooksFromConfig(); + + loadCurrentNotebookId(); +} + +static SessionConfig &getSessionConfig() +{ + return ConfigMgr::getInst().getSessionConfig(); +} + +void NotebookMgr::loadCurrentNotebookId() +{ + auto &rootFolderPath = getSessionConfig().getCurrentNotebookRootFolderPath(); + auto notebook = findNotebookByRootFolderPath(rootFolderPath); + if (notebook) { + m_currentNotebookId = notebook->getId(); + } else { + m_currentNotebookId = Notebook::InvalidId; + } + + emit currentNotebookChanged(notebook); +} + +QSharedPointer NotebookMgr::newNotebook(const QSharedPointer &p_parameters) +{ + auto factory = m_notebookServer->getItem(p_parameters->m_type); + if (!factory) { + Exception::throwOne(Exception::Type::InvalidArgument, + QString("fail to find notebook factory %1").arg(p_parameters->m_type)); + } + + auto notebook = factory->newNotebook(*p_parameters); + addNotebook(notebook); + + saveNotebooksToConfig(); + + emit notebooksUpdated(); + + setCurrentNotebook(notebook->getId()); + + return notebook; +} + +void NotebookMgr::importNotebook(const QSharedPointer &p_notebook) +{ + Q_ASSERT(p_notebook); + if (m_notebooks.indexOf(p_notebook) != -1) { + return; + } + + addNotebook(p_notebook); + + saveNotebooksToConfig(); + + emit notebooksUpdated(); + + setCurrentNotebook(p_notebook->getId()); +} + +static SessionConfig::NotebookItem notebookToSessionConfig(const QSharedPointer &p_notebook) +{ + SessionConfig::NotebookItem item; + item.m_type = p_notebook->getType(); + item.m_rootFolderPath = p_notebook->getRootFolderPath(); + item.m_backend = p_notebook->getBackend()->getName(); + return item; +} + +void NotebookMgr::saveNotebooksToConfig() const +{ + QVector items; + items.reserve(m_notebooks.size()); + for (auto &nb : m_notebooks) { + items.push_back(notebookToSessionConfig(nb)); + } + + getSessionConfig().setNotebooks(items); +} + +void NotebookMgr::readNotebooksFromConfig() +{ + Q_ASSERT(m_notebooks.isEmpty()); + auto items = getSessionConfig().getNotebooks(); + for (auto &item : items) { + try { + auto nb = readNotebookFromConfig(item); + addNotebook(nb); + } catch (Exception &p_e) { + qCritical("fail to read notebook (%s) from config (%s)", + item.m_rootFolderPath.toStdString().c_str(), + p_e.what()); + } + } + + emit notebooksUpdated(); +} + +QSharedPointer NotebookMgr::readNotebookFromConfig(const SessionConfig::NotebookItem &p_item) +{ + auto factory = m_notebookServer->getItem(p_item.m_type); + if (!factory) { + Exception::throwOne(Exception::Type::InvalidArgument, + QString("fail to find notebook factory %1").arg(p_item.m_type)); + } + + auto backend = createNotebookBackend(p_item.m_backend, p_item.m_rootFolderPath); + + auto notebook = factory->createNotebook(*this, p_item.m_rootFolderPath, backend); + return notebook; +} + +const QVector> &NotebookMgr::getNotebooks() const +{ + return m_notebooks; +} + +ID NotebookMgr::getCurrentNotebookId() const +{ + return m_currentNotebookId; +} + +void NotebookMgr::setCurrentNotebook(ID p_notebookId) +{ + auto lastId = m_currentNotebookId; + m_currentNotebookId = p_notebookId; + auto nb = findNotebookById(p_notebookId); + if (!nb) { + m_currentNotebookId = Notebook::InvalidId; + } + + if (lastId != m_currentNotebookId) { + emit currentNotebookChanged(nb); + } + + getSessionConfig().setCurrentNotebookRootFolderPath(nb ? nb->getRootFolderPath() : ""); +} + +QSharedPointer NotebookMgr::findNotebookByRootFolderPath(const QString &p_rootFolderPath) const +{ + for (auto &nb : m_notebooks) { + if (PathUtils::areSamePaths(nb->getRootFolderPath(), p_rootFolderPath)) { + return nb; + } + } + + return nullptr; +} + +QSharedPointer NotebookMgr::findNotebookById(ID p_id) const +{ + for (auto &nb : m_notebooks) { + if (nb->getId() == p_id) { + return nb; + } + } + + return nullptr; +} + +void NotebookMgr::closeNotebook(ID p_id) +{ + auto it = std::find_if(m_notebooks.begin(), + m_notebooks.end(), + [p_id](const QSharedPointer &p_nb) { + return p_nb->getId() == p_id; + }); + if (it == m_notebooks.end()) { + qWarning() << "fail to find notebook of given id to close" << p_id; + return; + } + + auto notebookToClose = *it; + emit notebookAboutToClose(notebookToClose.data()); + + m_notebooks.erase(it); + + saveNotebooksToConfig(); + + emit notebooksUpdated(); + setCurrentNotebookAfterUpdate(); + + qInfo() << QString("notebook %1 (%2) is closed").arg(notebookToClose->getName(), + notebookToClose->getRootFolderPath()); +} + +void NotebookMgr::removeNotebook(ID p_id) +{ + auto it = std::find_if(m_notebooks.begin(), + m_notebooks.end(), + [p_id](const QSharedPointer &p_nb) { + return p_nb->getId() == p_id; + }); + if (it == m_notebooks.end()) { + qWarning() << "fail to find notebook of given id to remove" << p_id; + return; + } + + auto nbToRemove = *it; + emit notebookAboutToRemove(nbToRemove.data()); + + m_notebooks.erase(it); + + saveNotebooksToConfig(); + + emit notebooksUpdated(); + setCurrentNotebookAfterUpdate(); + + try { + nbToRemove->remove(); + } catch (Exception &p_e) { + qWarning() << QString("fail to remove notebook %1 (%2) (%3)").arg(nbToRemove->getName(), + nbToRemove->getRootFolderPath(), + p_e.what()); + throw; + } + + qInfo() << QString("notebook %1 (%2) is removed").arg(nbToRemove->getName(), + nbToRemove->getRootFolderPath()); +} + +void NotebookMgr::setCurrentNotebookAfterUpdate() +{ + if (!m_notebooks.isEmpty()) { + setCurrentNotebook(m_notebooks.first()->getId()); + } else { + setCurrentNotebook(Notebook::InvalidId); + } +} + +void NotebookMgr::addNotebook(const QSharedPointer &p_notebook) +{ + m_notebooks.push_back(p_notebook); + connect(p_notebook.data(), &Notebook::updated, + this, [this, notebook = p_notebook.data()]() { + emit notebookUpdated(notebook); + }); +} diff --git a/src/core/notebookmgr.h b/src/core/notebookmgr.h new file mode 100644 index 00000000..e0957033 --- /dev/null +++ b/src/core/notebookmgr.h @@ -0,0 +1,118 @@ +#ifndef NOTEBOOKMGR_H +#define NOTEBOOKMGR_H + +#include +#include +#include +#include + +#include "namebasedserver.h" +#include "sessionconfig.h" +#include "global.h" +#include "notebook/notebook.h" + +namespace vnotex +{ + class IVersionController; + class IVersionControllerFactory; + class INotebookConfigMgr; + class INotebookConfigMgrFactory; + class INotebookBackend; + class INotebookBackendFactory; + class INotebookFactory; + class NotebookParameters; + + class NotebookMgr : public QObject + { + Q_OBJECT + public: + explicit NotebookMgr(QObject *p_parent = nullptr); + + void init(); + + QSharedPointer getBundleNotebookFactory() const; + + QList> getAllNotebookFactories() const; + + QList> getAllVersionControllerFactories() const; + + QList> getAllNotebookConfigMgrFactories() const; + + QList> getAllNotebookBackendFactories() const; + + QSharedPointer createNotebookBackend(const QString &p_backendName, + const QString &p_rootFolderPath) const; + + QSharedPointer createVersionController(const QString &p_controllerName) const; + + QSharedPointer createNotebookConfigMgr(const QString &p_mgrName, + const QSharedPointer &p_backend) const; + + void loadNotebooks(); + + QSharedPointer newNotebook(const QSharedPointer &p_parameters); + + void importNotebook(const QSharedPointer &p_notebook); + + const QVector> &getNotebooks() const; + + ID getCurrentNotebookId() const; + + // Find the notebook with the same directory as root folder. + QSharedPointer findNotebookByRootFolderPath(const QString &p_rootFolderPath) const; + + QSharedPointer findNotebookById(ID p_id) const; + + void closeNotebook(ID p_id); + + void removeNotebook(ID p_id); + + public slots: + void setCurrentNotebook(ID p_notebookId); + + signals: + void notebooksUpdated(); + + void notebookUpdated(const Notebook *p_notebook); + + void notebookAboutToClose(const Notebook *p_notebook); + + void notebookAboutToRemove(const Notebook *p_notebook); + + void currentNotebookChanged(const QSharedPointer &p_notebook); + + private: + void initVersionControllerServer(); + + void initConfigMgrServer(); + + void initBackendServer(); + + void initNotebookServer(); + + void saveNotebooksToConfig() const; + void readNotebooksFromConfig(); + + void loadCurrentNotebookId(); + + QSharedPointer readNotebookFromConfig(const SessionConfig::NotebookItem &p_item); + + void setCurrentNotebookAfterUpdate(); + + void addNotebook(const QSharedPointer &p_notebook); + + QSharedPointer> m_versionControllerServer; + + QSharedPointer> m_configMgrServer; + + QSharedPointer> m_backendServer; + + QSharedPointer> m_notebookServer; + + QVector> m_notebooks; + + ID m_currentNotebookId = 0; + }; +} // ns vnotex + +#endif // NOTEBOOKMGR_H diff --git a/src/core/sessionconfig.cpp b/src/core/sessionconfig.cpp new file mode 100644 index 00000000..b6f678d4 --- /dev/null +++ b/src/core/sessionconfig.cpp @@ -0,0 +1,253 @@ +#include "sessionconfig.h" + +#include +#include +#include +#include + +#include + +#include "configmgr.h" + +using namespace vnotex; + +bool SessionConfig::NotebookItem::operator==(const NotebookItem &p_other) const +{ + return m_type == p_other.m_type + && m_rootFolderPath == p_other.m_rootFolderPath + && m_backend == p_other.m_backend; +} + +void SessionConfig::NotebookItem::fromJson(const QJsonObject &p_jobj) +{ + m_type = p_jobj[QStringLiteral("type")].toString(); + m_rootFolderPath = p_jobj[QStringLiteral("root_folder")].toString(); + m_backend = p_jobj[QStringLiteral("backend")].toString(); +} + +QJsonObject SessionConfig::NotebookItem::toJson() const +{ + QJsonObject jobj; + + jobj[QStringLiteral("type")] = m_type; + jobj[QStringLiteral("root_folder")] = m_rootFolderPath; + jobj[QStringLiteral("backend")] = m_backend; + + return jobj; +} + +SessionConfig::SessionConfig(ConfigMgr *p_mgr) + : IConfig(p_mgr, nullptr) +{ +} + +SessionConfig::~SessionConfig() +{ + +} + +void SessionConfig::init() +{ + auto mgr = getMgr(); + auto sessionSettings = mgr->getSettings(ConfigMgr::Source::Session); + const auto &sessionJobj = sessionSettings->getJson(); + + loadCore(sessionJobj); +} + +void SessionConfig::loadCore(const QJsonObject &p_session) +{ + const auto coreObj = p_session.value(QStringLiteral("core")).toObject(); + m_newNotebookDefaultRootFolderPath = readString(coreObj, + QStringLiteral("new_notebook_default_root_folder_path")); + if (m_newNotebookDefaultRootFolderPath.isEmpty()) { + m_newNotebookDefaultRootFolderPath = QDir::homePath(); + } + + m_currentNotebookRootFolderPath = readString(coreObj, + QStringLiteral("current_notebook_root_folder_path")); + + { + auto option = readString(coreObj, QStringLiteral("opengl")); + m_openGL = stringToOpenGL(option); + } + + m_systemTitleBarEnabled = readBool(coreObj, QStringLiteral("system_title_bar")); +} + +QJsonObject SessionConfig::saveCore() const +{ + QJsonObject coreObj; + coreObj[QStringLiteral("new_notebook_default_root_folder_path")] = m_newNotebookDefaultRootFolderPath; + coreObj[QStringLiteral("current_notebook_root_folder_path")] = m_currentNotebookRootFolderPath; + coreObj[QStringLiteral("opengl")] = openGLToString(m_openGL); + coreObj[QStringLiteral("system_title_bar")] = m_systemTitleBarEnabled; + return coreObj; +} + +const QString &SessionConfig::getNewNotebookDefaultRootFolderPath() const +{ + return m_newNotebookDefaultRootFolderPath; +} + +void SessionConfig::setNewNotebookDefaultRootFolderPath(const QString &p_path) +{ + updateConfig(m_newNotebookDefaultRootFolderPath, + p_path, + this); +} + +const QVector &SessionConfig::getNotebooks() +{ + if (m_notebooks.isEmpty()) { + auto mgr = getMgr(); + auto sessionSettings = mgr->getSettings(ConfigMgr::Source::Session); + const auto &sessionJobj = sessionSettings->getJson(); + loadNotebooks(sessionJobj); + } + return m_notebooks; +} + +void SessionConfig::setNotebooks(const QVector &p_notebooks) +{ + updateConfig(m_notebooks, + p_notebooks, + this); +} + +void SessionConfig::loadNotebooks(const QJsonObject &p_session) +{ + const auto notebooksJson = p_session.value(QStringLiteral("notebooks")).toArray(); + m_notebooks.resize(notebooksJson.size()); + for (int i = 0; i < notebooksJson.size(); ++i) { + m_notebooks[i].fromJson(notebooksJson[i].toObject()); + } +} + +QJsonArray SessionConfig::saveNotebooks() const +{ + QJsonArray nbArray; + for (const auto &nb : m_notebooks) { + nbArray.append(nb.toJson()); + } + return nbArray; +} + +const QString &SessionConfig::getCurrentNotebookRootFolderPath() const +{ + return m_currentNotebookRootFolderPath; +} + +void SessionConfig::setCurrentNotebookRootFolderPath(const QString &p_path) +{ + updateConfig(m_currentNotebookRootFolderPath, + p_path, + this); +} + +void SessionConfig::writeToSettings() const +{ + getMgr()->writeSessionSettings(toJson()); +} + +QJsonObject SessionConfig::toJson() const +{ + QJsonObject obj; + obj[QStringLiteral("core")] = saveCore(); + obj[QStringLiteral("notebooks")] = saveNotebooks(); + obj[QStringLiteral("state_geometry")] = saveStateAndGeometry(); + return obj; +} + +QJsonObject SessionConfig::saveStateAndGeometry() const +{ + QJsonObject obj; + writeByteArray(obj, QStringLiteral("main_window_state"), m_mainWindowStateGeometry.m_mainState); + writeByteArray(obj, QStringLiteral("main_window_geometry"), m_mainWindowStateGeometry.m_mainGeometry); + return obj; +} + +SessionConfig::MainWindowStateGeometry SessionConfig::getMainWindowStateGeometry() const +{ + auto sessionSettings = getMgr()->getSettings(ConfigMgr::Source::Session); + const auto &sessionJobj = sessionSettings->getJson(); + const auto obj = sessionJobj.value(QStringLiteral("state_geometry")).toObject(); + + MainWindowStateGeometry sg; + sg.m_mainState = readByteArray(obj, QStringLiteral("main_window_state")); + sg.m_mainGeometry = readByteArray(obj, QStringLiteral("main_window_geometry")); + + return sg; +} + +void SessionConfig::setMainWindowStateGeometry(const SessionConfig::MainWindowStateGeometry &p_state) +{ + m_mainWindowStateGeometry = p_state; + ++m_revision; + writeToSettings(); +} + +SessionConfig::OpenGL SessionConfig::getOpenGLAtBootstrap() +{ + auto userConfigFile = ConfigMgr::locateSessionConfigFilePathAtBootstrap(); + if (!userConfigFile.isEmpty()) { + auto bytes = FileUtils::readFile(userConfigFile); + auto obj = QJsonDocument::fromJson(bytes).object(); + auto coreObj = obj.value(QStringLiteral("core")).toObject(); + auto str = coreObj.value(QStringLiteral("opengl")).toString(); + return stringToOpenGL(str); + } + + return OpenGL::None; +} + +SessionConfig::OpenGL SessionConfig::getOpenGL() const +{ + return m_openGL; +} + +void SessionConfig::setOpenGL(OpenGL p_option) +{ + updateConfig(m_openGL, p_option, this); +} + +QString SessionConfig::openGLToString(OpenGL p_option) +{ + switch (p_option) { + case OpenGL::Desktop: + return QStringLiteral("desktop"); + + case OpenGL::Angle: + return QStringLiteral("angle"); + + case OpenGL::Software: + return QStringLiteral("software"); + + default: + return QStringLiteral("none"); + } +} + +SessionConfig::OpenGL SessionConfig::stringToOpenGL(const QString &p_str) +{ + auto option = p_str.toLower(); + if (option == QStringLiteral("software")) { + return OpenGL::Software; + } else if (option == QStringLiteral("desktop")) { + return OpenGL::Desktop; + } else if (option == QStringLiteral("angle")) { + return OpenGL::Angle; + } else { + return OpenGL::None; + } +} + +bool SessionConfig::getSystemTitleBarEnabled() const +{ + return m_systemTitleBarEnabled; +} + +void SessionConfig::setSystemTitleBarEnabled(bool p_enabled) +{ + updateConfig(m_systemTitleBarEnabled, p_enabled, this); +} diff --git a/src/core/sessionconfig.h b/src/core/sessionconfig.h new file mode 100644 index 00000000..d91d9a26 --- /dev/null +++ b/src/core/sessionconfig.h @@ -0,0 +1,111 @@ +#ifndef SESSIONCONFIG_H +#define SESSIONCONFIG_H + +#include "iconfig.h" + +#include +#include + +namespace vnotex +{ + class SessionConfig : public IConfig + { + public: + struct NotebookItem + { + NotebookItem() = default; + + bool operator==(const NotebookItem &p_other) const; + + void fromJson(const QJsonObject &p_jobj); + + QJsonObject toJson() const; + + QString m_type; + QString m_rootFolderPath; + QString m_backend; + }; + + struct MainWindowStateGeometry + { + bool operator==(const MainWindowStateGeometry &p_other) const + { + return m_mainState == p_other.m_mainState + && m_mainGeometry == p_other.m_mainGeometry; + } + + QByteArray m_mainState; + QByteArray m_mainGeometry; + }; + + enum OpenGL + { + None, + Desktop, + Angle, + Software + }; + + explicit SessionConfig(ConfigMgr *p_mgr); + + ~SessionConfig(); + + void init() Q_DECL_OVERRIDE; + + const QString &getNewNotebookDefaultRootFolderPath() const; + void setNewNotebookDefaultRootFolderPath(const QString &p_path); + + const QString &getCurrentNotebookRootFolderPath() const; + void setCurrentNotebookRootFolderPath(const QString &p_path); + + const QVector &getNotebooks(); + void setNotebooks(const QVector &p_notebooks); + + void writeToSettings() const Q_DECL_OVERRIDE; + + QJsonObject toJson() const Q_DECL_OVERRIDE; + + SessionConfig::MainWindowStateGeometry getMainWindowStateGeometry() const; + void setMainWindowStateGeometry(const SessionConfig::MainWindowStateGeometry &p_state); + + OpenGL getOpenGL() const; + void setOpenGL(OpenGL p_option); + + bool getSystemTitleBarEnabled() const; + void setSystemTitleBarEnabled(bool p_enabled); + + static OpenGL getOpenGLAtBootstrap(); + + static QString openGLToString(OpenGL p_option); + static OpenGL stringToOpenGL(const QString &p_str); + + private: + void loadCore(const QJsonObject &p_session); + + QJsonObject saveCore() const; + + void loadNotebooks(const QJsonObject &p_session); + + QJsonArray saveNotebooks() const; + + QJsonObject saveStateAndGeometry() const; + + QString m_newNotebookDefaultRootFolderPath; + + // Use root folder to identify a notebook uniquely. + QString m_currentNotebookRootFolderPath; + + QVector m_notebooks; + + // Used to store newly-set state and geometry, since there is no need to store the read-in + // data all the time. + MainWindowStateGeometry m_mainWindowStateGeometry; + + OpenGL m_openGL = OpenGL::None; + + // Whether use system's title bar or not. + bool m_systemTitleBarEnabled = false; + }; +} // ns vnotex + +#endif // SESSIONCONFIG_H diff --git a/src/core/singleinstanceguard.cpp b/src/core/singleinstanceguard.cpp new file mode 100644 index 00000000..daeaeed6 --- /dev/null +++ b/src/core/singleinstanceguard.cpp @@ -0,0 +1,184 @@ +#include "singleinstanceguard.h" +#include + +#include + +using namespace vnotex; + +const QString SingleInstanceGuard::c_memKey = "vnotex_shared_memory"; +const int SingleInstanceGuard::c_magic = 376686683; + +SingleInstanceGuard::SingleInstanceGuard() + : m_online(false), + m_sharedMemory(c_memKey) +{ +} + +bool SingleInstanceGuard::tryRun() +{ + m_online = false; + + // If we can attach to the sharedmemory, there is another instance running. + // In Linux, crashes may cause the shared memory segment remains. In this case, + // this will attach to the old segment, then exit, freeing the old segment. + if (m_sharedMemory.attach()) { + qInfo() << "another instance is running"; + return false; + } + + // Try to create it. + bool ret = m_sharedMemory.create(sizeof(SharedStruct)); + if (ret) { + // We created it. + m_sharedMemory.lock(); + SharedStruct *str = (SharedStruct *)m_sharedMemory.data(); + str->m_magic = c_magic; + str->m_filesBufIdx = 0; + str->m_askedToShow = false; + m_sharedMemory.unlock(); + + m_online = true; + return true; + } else { + qCritical() << "fail to create shared memory segment"; + return false; + } +} + +void SingleInstanceGuard::openExternalFiles(const QStringList &p_files) +{ + if (p_files.isEmpty()) { + return; + } + + if (!m_sharedMemory.isAttached()) { + if (!m_sharedMemory.attach()) { + qCritical() << "fail to attach to the shared memory segment" + << (m_sharedMemory.error() ? m_sharedMemory.errorString() : ""); + return; + } + } + + int idx = 0; + int tryCount = 100; + while (tryCount--) { + m_sharedMemory.lock(); + SharedStruct *str = (SharedStruct *)m_sharedMemory.data(); + V_ASSERT(str->m_magic == c_magic); + for (; idx < p_files.size(); ++idx) { + if (p_files[idx].size() + 1 > FilesBufCount) { + // Skip this long long name file. + continue; + } + + if (!appendFileToBuffer(str, p_files[idx])) { + break; + } + } + + m_sharedMemory.unlock(); + + if (idx < p_files.size()) { + Utils::sleepWait(500); + } else { + break; + } + } +} + +bool SingleInstanceGuard::appendFileToBuffer(SharedStruct *p_str, const QString &p_file) +{ + if (p_file.isEmpty()) { + return true; + } + + int strSize = p_file.size(); + if (strSize + 1 > FilesBufCount - p_str->m_filesBufIdx) { + return false; + } + + // Put the size first. + p_str->m_filesBuf[p_str->m_filesBufIdx++] = (ushort)strSize; + const QChar *data = p_file.constData(); + for (int i = 0; i < strSize; ++i) { + p_str->m_filesBuf[p_str->m_filesBufIdx++] = data[i].unicode(); + } + + return true; +} + +QStringList SingleInstanceGuard::fetchFilesToOpen() +{ + QStringList files; + + if (!m_online) { + return files; + } + + Q_ASSERT(m_sharedMemory.isAttached()); + m_sharedMemory.lock(); + SharedStruct *str = (SharedStruct *)m_sharedMemory.data(); + V_ASSERT(str->m_magic == c_magic); + Q_ASSERT(str->m_filesBufIdx <= FilesBufCount); + int idx = 0; + while (idx < str->m_filesBufIdx) { + int strSize = str->m_filesBuf[idx++]; + Q_ASSERT(strSize <= str->m_filesBufIdx - idx); + QString file; + for (int i = 0; i < strSize; ++i) { + file.append(QChar(str->m_filesBuf[idx++])); + } + + files.append(file); + } + + str->m_filesBufIdx = 0; + m_sharedMemory.unlock(); + + return files; +} + +void SingleInstanceGuard::showInstance() +{ + if (!m_sharedMemory.isAttached()) { + if (!m_sharedMemory.attach()) { + qCritical() << "fail to attach to the shared memory segment" + << (m_sharedMemory.error() ? m_sharedMemory.errorString() : ""); + return; + } + } + + m_sharedMemory.lock(); + SharedStruct *str = (SharedStruct *)m_sharedMemory.data(); + V_ASSERT(str->m_magic == c_magic); + str->m_askedToShow = true; + m_sharedMemory.unlock(); +} + +bool SingleInstanceGuard::fetchAskedToShow() +{ + if (!m_online) { + return false; + } + + Q_ASSERT(m_sharedMemory.isAttached()); + m_sharedMemory.lock(); + SharedStruct *str = (SharedStruct *)m_sharedMemory.data(); + V_ASSERT(str->m_magic == c_magic); + bool ret = str->m_askedToShow; + str->m_askedToShow = false; + m_sharedMemory.unlock(); + + return ret; +} + +void SingleInstanceGuard::exit() +{ + if (!m_online) { + return; + } + + Q_ASSERT(m_sharedMemory.isAttached()); + m_sharedMemory.detach(); + m_online = false; +} diff --git a/src/core/singleinstanceguard.h b/src/core/singleinstanceguard.h new file mode 100644 index 00000000..d5a169a0 --- /dev/null +++ b/src/core/singleinstanceguard.h @@ -0,0 +1,69 @@ +#ifndef SINGLEINSTANCEGUARD_H +#define SINGLEINSTANCEGUARD_H + +#include +#include + +namespace vnotex +{ + class SingleInstanceGuard + { + public: + SingleInstanceGuard(); + + // Return ture if this is the only instance of VNote. + bool tryRun(); + + // There is already another instance running. + // Call this to ask that instance to open external files passed in + // via command line arguments. + void openExternalFiles(const QStringList &p_files); + + // Ask another instance to show itself. + void showInstance(); + + // Fetch files from shared memory to open. + // Will clear the shared memory. + QStringList fetchFilesToOpen(); + + // Whether this instance is asked to show itself. + bool fetchAskedToShow(); + + // A running instance requests to exit. + void exit(); + + private: + // The count of the entries in the buffer to hold the path of the files to open. + enum { FilesBufCount = 1024 }; + + struct SharedStruct { + // A magic number to identify if this struct is initialized + int m_magic; + + // Next empty entry in m_filesBuf. + int m_filesBufIdx; + + // File paths to be opened. + // Encoded in this way with 2 bytes for each size part. + // [size of file1][file1][size of file2][file 2] + // Unicode representation of QString. + ushort m_filesBuf[FilesBufCount]; + + // Whether other instances ask to show the legal instance. + bool m_askedToShow; + }; + + // Append @p_file to the shared struct files buffer. + // Returns true if succeeds or false if there is no enough space. + bool appendFileToBuffer(SharedStruct *p_str, const QString &p_file); + + bool m_online; + + QSharedMemory m_sharedMemory; + + static const QString c_memKey; + static const int c_magic; + }; +} // ns vnotex + +#endif // SINGLEINSTANCEGUARD_H diff --git a/src/core/texteditorconfig.cpp b/src/core/texteditorconfig.cpp new file mode 100644 index 00000000..a73b835f --- /dev/null +++ b/src/core/texteditorconfig.cpp @@ -0,0 +1,246 @@ +#include "texteditorconfig.h" + +using namespace vnotex; + +#define READSTR(key) readString(appObj, userObj, (key)) +#define READBOOL(key) readBool(appObj, userObj, (key)) +#define READINT(key) readInt(appObj, userObj, (key)) + +TextEditorConfig::TextEditorConfig(ConfigMgr *p_mgr, IConfig *p_topConfig) + : IConfig(p_mgr, p_topConfig) +{ + m_sessionName = QStringLiteral("text_editor"); +} + +void TextEditorConfig::init(const QJsonObject &p_app, + const QJsonObject &p_user) +{ + const auto appObj = p_app.value(m_sessionName).toObject(); + const auto userObj = p_user.value(m_sessionName).toObject(); + + { + auto lineNumber = READSTR(QStringLiteral("line_number")); + m_lineNumberType = stringToLineNumberType(lineNumber); + } + + m_textFoldingEnabled = READBOOL(QStringLiteral("text_folding")); + + { + auto inputMode = READSTR(QStringLiteral("input_mode")); + m_inputMode = stringToInputMode(inputMode); + } + + { + auto centerCursor = READSTR(QStringLiteral("center_cursor")); + m_centerCursor = stringToCenterCursor(centerCursor); + } + + { + auto wrapMode = READSTR(QStringLiteral("wrap_mode")); + m_wrapMode = stringToWrapMode(wrapMode); + } + + m_expandTab = READBOOL(QStringLiteral("expand_tab")); + + m_tabStopWidth = READINT(QStringLiteral("tab_stop_width")); + + m_zoomDelta = READINT(QStringLiteral("zoom_delta")); +} + +QJsonObject TextEditorConfig::toJson() const +{ + QJsonObject obj; + obj[QStringLiteral("line_number")] = lineNumberTypeToString(m_lineNumberType); + obj[QStringLiteral("text_folding")] = m_textFoldingEnabled; + obj[QStringLiteral("input_mode")] = inputModeToString(m_inputMode); + obj[QStringLiteral("center_cursor")] = centerCursorToString(m_centerCursor); + obj[QStringLiteral("wrap_mode")] = wrapModeToString(m_wrapMode); + obj[QStringLiteral("expand_tab")] = m_expandTab; + obj[QStringLiteral("tab_stop_width")] = m_tabStopWidth; + obj[QStringLiteral("zoom_delta")] = m_zoomDelta; + return obj; +} + +QString TextEditorConfig::lineNumberTypeToString(LineNumberType p_type) const +{ + switch (p_type) { + case LineNumberType::None: + return QStringLiteral("none"); + + case LineNumberType::Relative: + return QStringLiteral("relative"); + + default: + return QStringLiteral("absolute"); + } +} + +TextEditorConfig::LineNumberType TextEditorConfig::stringToLineNumberType(const QString &p_str) const +{ + auto lineNumber = p_str.toLower(); + if (lineNumber == QStringLiteral("none")) { + return LineNumberType::None; + } else if (lineNumber == QStringLiteral("relative")) { + return LineNumberType::Relative; + } else { + return LineNumberType::Absolute; + } +} + +QString TextEditorConfig::inputModeToString(InputMode p_mode) const +{ + switch (p_mode) { + case InputMode::ViMode: + return QStringLiteral("vi"); + + default: + return QStringLiteral("normal"); + } +} + +TextEditorConfig::InputMode TextEditorConfig::stringToInputMode(const QString &p_str) const +{ + auto inputMode = p_str.toLower(); + if (inputMode == QStringLiteral("vi")) { + return InputMode::ViMode; + } else { + return InputMode::NormalMode; + } +} + +QString TextEditorConfig::centerCursorToString(CenterCursor p_cursor) const +{ + switch (p_cursor) { + case CenterCursor::AlwaysCenter: + return QStringLiteral("always"); + + case CenterCursor::CenterOnBottom: + return QStringLiteral("bottom"); + + default: + return QStringLiteral("never"); + } +} + +TextEditorConfig::CenterCursor TextEditorConfig::stringToCenterCursor(const QString &p_str) const +{ + auto centerCursor = p_str.toLower(); + if (centerCursor == QStringLiteral("always")) { + return CenterCursor::AlwaysCenter; + } else if (centerCursor == QStringLiteral("bottom")) { + return CenterCursor::CenterOnBottom; + } else { + return CenterCursor::NeverCenter; + } +} + +QString TextEditorConfig::wrapModeToString(WrapMode p_mode) const +{ + switch (p_mode) { + case WrapMode::NoWrap: + return QStringLiteral("none"); + + case WrapMode::WrapAnywhere: + return QStringLiteral("anywhere"); + + case WrapMode::WordWrapOrAnywhere: + return QStringLiteral("word_anywhere"); + + default: + return QStringLiteral("word"); + } +} + +TextEditorConfig::WrapMode TextEditorConfig::stringToWrapMode(const QString &p_str) const +{ + auto centerCursor = p_str.toLower(); + if (centerCursor == QStringLiteral("none")) { + return WrapMode::NoWrap; + } else if (centerCursor == QStringLiteral("anywhere")) { + return WrapMode::WrapAnywhere; + } else if (centerCursor == QStringLiteral("word_anywhere")) { + return WrapMode::WordWrapOrAnywhere; + } else { + return WrapMode::WordWrap; + } +} + +TextEditorConfig::LineNumberType TextEditorConfig::getLineNumberType() const +{ + return m_lineNumberType; +} + +void TextEditorConfig::setLineNumberType(TextEditorConfig::LineNumberType p_type) +{ + updateConfig(m_lineNumberType, p_type, this); +} + +bool TextEditorConfig::getTextFoldingEnabled() const +{ + return m_textFoldingEnabled; +} + +void TextEditorConfig::setTextFoldingEnabled(bool p_enable) +{ + updateConfig(m_textFoldingEnabled, p_enable, this); +} + +TextEditorConfig::InputMode TextEditorConfig::getInputMode() const +{ + return m_inputMode; +} + +void TextEditorConfig::setInputMode(TextEditorConfig::InputMode p_mode) +{ + updateConfig(m_inputMode, p_mode, this); +} + +TextEditorConfig::CenterCursor TextEditorConfig::getCenterCursor() const +{ + return m_centerCursor; +} + +void TextEditorConfig::setCenterCursor(TextEditorConfig::CenterCursor p_centerCursor) +{ + updateConfig(m_centerCursor, p_centerCursor, this); +} + +TextEditorConfig::WrapMode TextEditorConfig::getWrapMode() const +{ + return m_wrapMode; +} + +void TextEditorConfig::setWrapMode(TextEditorConfig::WrapMode p_mode) +{ + updateConfig(m_wrapMode, p_mode, this); +} + +bool TextEditorConfig::getExpandTabEnabled() const +{ + return m_expandTab; +} + +void TextEditorConfig::setExpandTabEnabled(bool p_enable) +{ + updateConfig(m_expandTab, p_enable, this); +} + +int TextEditorConfig::getTabStopWidth() const +{ + return m_tabStopWidth; +} + +void TextEditorConfig::setTabStopWidth(int p_width) +{ + updateConfig(m_tabStopWidth, p_width, this); +} + +int TextEditorConfig::getZoomDelta() const +{ + return m_zoomDelta; +} + +void TextEditorConfig::setZoomDelta(int p_delta) +{ + updateConfig(m_zoomDelta, p_delta, this); +} diff --git a/src/core/texteditorconfig.h b/src/core/texteditorconfig.h new file mode 100644 index 00000000..276c581b --- /dev/null +++ b/src/core/texteditorconfig.h @@ -0,0 +1,100 @@ +#ifndef VNOTEX_TEXTEDITORCONFIG_H +#define VNOTEX_TEXTEDITORCONFIG_H + +#include "iconfig.h" + +namespace vnotex +{ + class TextEditorConfig : public IConfig + { + public: + enum class LineNumberType + { + None, + Absolute, + Relative + }; + + enum class InputMode + { + NormalMode, + ViMode + }; + + enum class CenterCursor + { + NeverCenter, + AlwaysCenter, + CenterOnBottom + }; + + enum class WrapMode + { + NoWrap, + WordWrap, + WrapAnywhere, + WordWrapOrAnywhere + }; + + TextEditorConfig(ConfigMgr *p_mgr, IConfig *p_topConfig); + + void init(const QJsonObject &p_app, const QJsonObject &p_user) Q_DECL_OVERRIDE; + + QJsonObject toJson() const Q_DECL_OVERRIDE; + + TextEditorConfig::LineNumberType getLineNumberType() const; + void setLineNumberType(TextEditorConfig::LineNumberType p_type); + + bool getTextFoldingEnabled() const; + void setTextFoldingEnabled(bool p_enable); + + TextEditorConfig::InputMode getInputMode() const; + void setInputMode(TextEditorConfig::InputMode p_mode); + + TextEditorConfig::CenterCursor getCenterCursor() const; + void setCenterCursor(TextEditorConfig::CenterCursor p_centerCursor); + + TextEditorConfig::WrapMode getWrapMode() const; + void setWrapMode(TextEditorConfig::WrapMode p_mode); + + bool getExpandTabEnabled() const; + void setExpandTabEnabled(bool p_enable); + + int getTabStopWidth() const; + void setTabStopWidth(int p_width); + + int getZoomDelta() const; + void setZoomDelta(int p_delta); + + private: + QString lineNumberTypeToString(LineNumberType p_type) const; + LineNumberType stringToLineNumberType(const QString &p_str) const; + + QString inputModeToString(InputMode p_mode) const; + InputMode stringToInputMode(const QString &p_str) const; + + QString centerCursorToString(CenterCursor p_cursor) const; + CenterCursor stringToCenterCursor(const QString &p_str) const; + + QString wrapModeToString(WrapMode p_mode) const; + WrapMode stringToWrapMode(const QString &p_str) const; + + LineNumberType m_lineNumberType = LineNumberType::Absolute; + + bool m_textFoldingEnabled = true; + + InputMode m_inputMode = InputMode::NormalMode; + + CenterCursor m_centerCursor = CenterCursor::NeverCenter; + + WrapMode m_wrapMode = WrapMode::WordWrapOrAnywhere; + + bool m_expandTab = true; + + int m_tabStopWidth = 4; + + int m_zoomDelta = 0; + }; +} + +#endif // TEXTEDITORCONFIG_H diff --git a/src/core/theme.cpp b/src/core/theme.cpp new file mode 100644 index 00000000..e2b34fc4 --- /dev/null +++ b/src/core/theme.cpp @@ -0,0 +1,397 @@ +#include "theme.h" + +#include +#include +#include +#include +#include + +#include "exception.h" +#include +#include +#include +#include + +using namespace vnotex; + +Theme::Theme(const QString &p_themeFolderPath, + const Metadata &p_metadata, + const Palette &p_palette) + : m_themeFolderPath(p_themeFolderPath), + m_metadata(p_metadata), + m_palette(p_palette) +{ +} + +bool Theme::isValidThemeFolder(const QString &p_folder) +{ + QDir dir(p_folder); + if (!dir.exists()) { + qWarning() << "theme folder does not exist" << p_folder; + return false; + } + + // The Palette file must exist. + auto file = getFileName(File::Palette); + if (!dir.exists(file)) { + qWarning() << "Not a valid theme folder" << p_folder; + return false; + } + + return true; +} + +Theme *Theme::fromFolder(const QString &p_folder) +{ + Q_ASSERT(!p_folder.isEmpty()); + QDir dir(p_folder); + + auto obj = readJsonFile(QDir(p_folder).filePath(getFileName(File::Palette))); + auto metadata = readMetadata(obj); + auto paletteObj = translatePalette(obj); + return new Theme(p_folder, + metadata, + paletteObj); +} + +Theme::Metadata Theme::readMetadata(const Palette &p_obj) +{ + Metadata data; + + const auto metaObj = p_obj[QStringLiteral("metadata")].toObject(); + + data.m_revision = metaObj[QStringLiteral("revision")].toInt(); + data.m_editorHighlightTheme = metaObj[QStringLiteral("editor-highlight-theme")].toString(); + data.m_markdownEditorHighlightTheme = metaObj[QStringLiteral("markdown-editor-highlight-theme")].toString(); + + return data; +} + +Theme::Palette Theme::translatePalette(const QJsonObject &p_obj) +{ + const QString baseSection("base"); + const QString widgetsSection("widgets"); + + // @p_palette may contain referenced definitons: derived=@base#sub#sub2. + Palette palette; + + palette[baseSection] = p_obj[baseSection]; + palette[widgetsSection] = p_obj[widgetsSection]; + + translatePaletteObject(palette, palette, baseSection); + + translatePaletteObject(palette, palette, widgetsSection); + + return palette; +} + +void Theme::translatePaletteObject(const Palette &p_palette, + QJsonObject &p_obj, + const QString &p_key) +{ + int lastUnresolvedRefs = 0; + while (true) + { + auto ret = translatePaletteObjectOnce(p_palette, p_obj, p_key); + if (!ret.first) { + break; + } + + if (ret.second > 0 && ret.second == lastUnresolvedRefs) { + qWarning() << "found cyclic references in palette definitions" << p_obj[p_key]; + break; + } + lastUnresolvedRefs = ret.second; + } +} + +QPair Theme::translatePaletteObjectOnce(const Palette &p_palette, + QJsonObject &p_obj, + const QString &p_key) +{ + bool changed = false; + int unresolvedRefs = 0; + + // May contain referenced definitions: derived=@base#sub#sub2. + QRegularExpression refRe("\\A@(\\w+(?:#\\w+)*)\\z"); + const int baseCapturedIdx = 1; + + auto obj = p_obj[p_key].toObject(); + for (auto it = obj.begin(); it != obj.end(); ++it) { + auto val = it.value(); + if (val.isString()) { + // Check if it references to another key. + auto match = refRe.match(val.toString()); + if (match.hasMatch()) { + auto refVal = findValueByKeyPath(p_palette, match.captured(baseCapturedIdx)); + if (refVal.isUndefined()) { + ++unresolvedRefs; + qWarning() << "failed to find palette key" << match.captured(baseCapturedIdx); + break; + } else if (val.toString() == refVal.toString()) { + ++unresolvedRefs; + qWarning() << "found cyclic references in palette definitions" << it.key() << val.toString(); + break; + } + + Q_ASSERT(refVal.isString()); + it.value() = refVal.toString(); + if (isRef(refVal.toString())) { + // It is another ref again. + ++unresolvedRefs; + } + changed = true; + } + } else if (val.isObject()) { + auto ret = translatePaletteObjectOnce(p_palette, obj, it.key()); + changed = changed || ret.first; + unresolvedRefs += ret.second; + } else { + Q_ASSERT(false); + } + } + + if (changed) { + p_obj[p_key] = obj; + } + return qMakePair(changed, unresolvedRefs); +} + +QString Theme::fetchQtStyleSheet() const +{ + const auto qtStyleFile = getFile(File::QtStyleSheet); + if (qtStyleFile.isEmpty()) { + return ""; + } + auto style = FileUtils::readTextFile(qtStyleFile); + translateStyleByPalette(m_palette, style); + translateUrlToAbsolute(m_themeFolderPath, style); + translateFontFamilyList(style); + translateScaledSize(WidgetUtils::calculateScaleFactor(), style); + return style; +} + +void Theme::translateStyleByPalette(const Palette &p_palette, QString &p_style) +{ + QRegularExpression refRe("(\\s|:)@(\\w+(?:#\\w+)*)"); + const int prefixCapturedIdx = 1; + const int refCapturedIdx = 2; + + int pos = 0; + QRegularExpressionMatch match; + while (pos < p_style.size()) { + int idx = p_style.indexOf(refRe, pos, &match); + if (idx == -1) { + break; + } + + auto name = match.captured(refCapturedIdx); + auto val = findValueByKeyPath(p_palette, name).toString(); + if (val.isEmpty() || isRef(val)) { + qWarning() << "failed to translate style" << name << val; + pos = idx + match.capturedLength(); + } else { + pos = idx + match.capturedLength() + val.size() - (name.size() + 1); + p_style.replace(idx + match.captured(prefixCapturedIdx).size(), + name.size() + 1, + val); + } + } +} + +void Theme::translateUrlToAbsolute(const QString &p_basePath, QString &p_style) +{ + QRegularExpression urlRe("(\\s|:)url\\(([^\\(\\)]+)\\)"); + const int prefixCapturedIdx = 1; + const int urlCapturedIdx = 2; + + QDir dir(p_basePath); + const int literalSize = QString("url(").size(); + int pos = 0; + QRegularExpressionMatch match; + while (pos < p_style.size()) { + int idx = p_style.indexOf(urlRe, pos, &match); + if (idx == -1) { + break; + } + + auto url = match.captured(urlCapturedIdx); + if (QFileInfo(url).isRelative()) { + auto absoluteUrl = dir.filePath(url); + pos = idx + match.capturedLength() + absoluteUrl.size() - url.size(); + p_style.replace(idx + match.captured(prefixCapturedIdx).size() + literalSize, + url.size(), + absoluteUrl); + } else { + pos = idx + match.capturedLength(); + } + } +} + +void Theme::translateFontFamilyList(QString &p_style) +{ + QRegularExpression fontRe("(\\s|^)font-family:([^;]+);"); + const int prefixCapturedIdx = 1; + const int fontCapturedIdx = 2; + + int pos = 0; + QRegularExpressionMatch match; + while (pos < p_style.size()) { + int idx = p_style.indexOf(fontRe, pos, &match); + if (idx == -1) { + break; + } + + auto familyList = match.captured(fontCapturedIdx).trimmed(); + familyList.remove('"'); + auto family = Utils::pickAvailableFontFamily(familyList.split(',')); + if (family.isEmpty()) { + // Could not find available font. Remove it. + auto newStr = match.captured(prefixCapturedIdx); + p_style.replace(idx, match.capturedLength(), newStr); + pos = idx + newStr.size(); + } else if (family != familyList) { + if (family.contains(' ')) { + family = "\"" + family + "\""; + } + + auto newStr = QString("%1font-family: %2;").arg(match.captured(prefixCapturedIdx), family); + p_style.replace(idx, match.capturedLength(), newStr); + pos = idx + newStr.size(); + } else { + pos = idx + match.capturedLength(); + } + } +} + +void Theme::translateScaledSize(qreal p_factor, QString &p_style) +{ + QRegularExpression scaleRe("(\\s|:)\\$([+-]?)(\\d+)(?=\\D)"); + const int prefixCapturedIdx = 1; + const int signCapturedIdx = 2; + const int numCapturedIdx = 3; + + int pos = 0; + QRegularExpressionMatch match; + while (pos < p_style.size()) { + int idx = p_style.indexOf(scaleRe, pos, &match); + if (idx == -1) { + break; + } + + auto numStr = match.captured(numCapturedIdx); + bool ok = false; + int val = numStr.toInt(&ok); + if (!ok) { + pos = idx + match.capturedLength(); + continue; + } + + val = val * p_factor + 0.5; + auto newStr = QString("%1%2%3").arg(match.captured(prefixCapturedIdx), + match.captured(signCapturedIdx), + QString::number(val)); + p_style.replace(idx, match.capturedLength(), newStr); + pos = idx + newStr.size(); + } +} + +QString Theme::paletteColor(const QString &p_name) const +{ + auto val = findValueByKeyPath(m_palette, p_name).toString(); + if (!val.isEmpty() && !isRef(val)) { + return val; + } + qWarning() << "undefined or invalid palette color" << p_name; + return QString(); +} + +QJsonObject Theme::readJsonFile(const QString &p_filePath) +{ + auto bytes = FileUtils::readFile(p_filePath); + return QJsonDocument::fromJson(bytes).object(); +} + +QJsonValue Theme::findValueByKeyPath(const Palette &p_palette, const QString &p_keyPath) +{ + auto keys = p_keyPath.split('#'); + Q_ASSERT(!keys.isEmpty()); + if (keys.size() == 1) { + return p_palette[keys.first()]; + } + + auto obj = p_palette; + for (int i = 0; i < keys.size() - 1; ++i) { + obj = obj[keys[i]].toObject(); + } + + return obj[keys.last()]; +} + +bool Theme::isRef(const QString &p_str) +{ + return p_str.startsWith('@'); +} + +QString Theme::getFile(File p_fileType) const +{ + QDir dir(m_themeFolderPath); + if (dir.exists(getFileName(p_fileType))) { + return dir.filePath(getFileName(p_fileType)); + } else if (p_fileType == File::MarkdownEditorStyle) { + // Fallback to text editor style. + if (dir.exists(getFileName(File::TextEditorStyle))) { + return dir.filePath(getFileName(File::TextEditorStyle)); + } + } + return ""; +} + +QString Theme::getFileName(File p_fileType) +{ + switch (p_fileType) { + case File::Palette: + return QStringLiteral("palette.json"); + case File::QtStyleSheet: + return QStringLiteral("interface.qss"); + case File::WebStyleSheet: + return QStringLiteral("web.css"); + case File::HighlightStyleSheet: + return QStringLiteral("highlight.css"); + case File::TextEditorStyle: + return QStringLiteral("text-editor.theme"); + case File::MarkdownEditorStyle: + return QStringLiteral("markdown-text-editor.theme"); + case File::EditorHighlightStyle: + return QStringLiteral("editor-highlight.theme"); + case File::MarkdownEditorHighlightStyle: + return QStringLiteral("markdown-editor-highlight.theme"); + default: + Q_ASSERT(false); + return ""; + } +} + +QString Theme::getEditorHighlightTheme() const +{ + auto file = getFile(File::EditorHighlightStyle); + if (file.isEmpty()) { + return m_metadata.m_editorHighlightTheme; + } else { + return file; + } +} + +QString Theme::getMarkdownEditorHighlightTheme() const +{ + auto file = getFile(File::MarkdownEditorHighlightStyle); + if (!file.isEmpty()) { + return file; + } + + if (!m_metadata.m_markdownEditorHighlightTheme.isEmpty()) { + return m_metadata.m_markdownEditorHighlightTheme; + } + + return getEditorHighlightTheme(); +} diff --git a/src/core/theme.h b/src/core/theme.h new file mode 100644 index 00000000..47d798f8 --- /dev/null +++ b/src/core/theme.h @@ -0,0 +1,112 @@ +#ifndef THEME_H +#define THEME_H + +#include +#include +#include +#include + +namespace tests +{ + class TestTheme; +} + +namespace vnotex +{ + class Theme + { + public: + enum class File + { + Palette = 0, + QtStyleSheet, + WebStyleSheet, + HighlightStyleSheet, + TextEditorStyle, + MarkdownEditorStyle, + EditorHighlightStyle, + MarkdownEditorHighlightStyle, + Max + }; + + QString fetchQtStyleSheet() const; + + QString paletteColor(const QString &p_name) const; + + // Get the file path of @p_fileType if exists. + QString getFile(File p_fileType) const; + + // Return the file path of the theme or just the theme name. + QString getEditorHighlightTheme() const; + + // Return the file path of the theme or just the theme name. + QString getMarkdownEditorHighlightTheme() const; + + static bool isValidThemeFolder(const QString &p_folder); + + static Theme *fromFolder(const QString &p_folder); + + private: + struct Metadata + { + int m_revision = 0; + + // Name of the theme for editor syntax highlight. + // Will be ignored if EditorHighlightStyle file exists within the theme. + QString m_editorHighlightTheme; + + // Use for MarkdownEditor code block highlight. + // If not specified, will use m_editorHighlightTheme. + QString m_markdownEditorHighlightTheme; + }; + + typedef QJsonObject Palette; + + Theme(const QString &p_themeFolderPath, + const Metadata &p_metadata, + const QJsonObject &p_palette); + + QString m_themeFolderPath; + + Theme::Metadata m_metadata; + + Palette m_palette; + + static Metadata readMetadata(const QJsonObject &p_obj); + + static Theme::Palette translatePalette(const QJsonObject &p_obj); + + static void translatePaletteObject(const Palette &p_palette, + QJsonObject &p_obj, + const QString &p_key); + + // Translate p_obj[p_key] by looking up @p_palette. + // Return . + static QPair translatePaletteObjectOnce(const Palette &p_palette, + QJsonObject &p_obj, + const QString &p_key); + + static QJsonValue findValueByKeyPath(const Palette &p_palette, const QString &p_keyPath); + + static void translateStyleByPalette(const Palette &p_palette, QString &p_style); + + static void translateUrlToAbsolute(const QString &p_basePath, QString &p_style); + + // Font-family in QSS only supports specifying one font, not a list. + // Thus we need to choose one available font from the list. + static void translateFontFamilyList(QString &p_style); + + static void translateScaledSize(qreal p_factor, QString &p_style); + + static QJsonObject readJsonFile(const QString &p_filePath); + + // Whether @p_str is a reference definition like "@xxxx". + static bool isRef(const QString &p_str); + + static QString getFileName(File p_fileType); + + friend class tests::TestTheme; + }; +} // ns vnotex + +#endif // THEME_H diff --git a/src/core/thememgr.cpp b/src/core/thememgr.cpp new file mode 100644 index 00000000..5fc8d894 --- /dev/null +++ b/src/core/thememgr.cpp @@ -0,0 +1,167 @@ +#include "thememgr.h" + +#include +#include +#include + +#include +#include "exception.h" +#include +#include + +using namespace vnotex; + +QStringList ThemeMgr::s_searchPaths; + +ThemeMgr::ThemeMgr(const QString &p_currentThemeName, QObject *p_parent) + : QObject(p_parent) +{ + loadAvailableThemes(); + + loadCurrentTheme(p_currentThemeName); + + IconUtils::setDefaultIconForeground(paletteColor("base#icon#fg"), paletteColor("base#icon#disabled_fg")); +} + +QString ThemeMgr::getIconFile(const QString &p_icon) const +{ + Q_ASSERT(!p_icon.isEmpty()); + + QRegularExpression sep("[/\\\\]"); + if (p_icon.indexOf(sep) != -1) { + return p_icon; + } + + return ":/vnotex/data/core/icons/" + p_icon; +} + +void ThemeMgr::loadAvailableThemes() +{ + for (const auto &pa : s_searchPaths) { + loadThemes(pa); + } + + if (m_availableThemes.isEmpty()) { + Exception::throwOne(Exception::Type::EssentialFileMissing, + QString("no available themes found in paths: %1").arg(s_searchPaths.join(QLatin1Char(';')))); + } +} + +void ThemeMgr::loadThemes(const QString &p_path) +{ + qDebug() << "search for themes in" << p_path; + QDir dir(p_path); + dir.setFilter(QDir::Dirs | QDir::NoDotAndDotDot); + auto themeFolders = dir.entryList(); + for (auto &folder : themeFolders) { + checkAndAddThemeFolder(PathUtils::concatenateFilePath(p_path, folder)); + } +} + +void ThemeMgr::checkAndAddThemeFolder(const QString &p_folder) +{ + if (Theme::isValidThemeFolder(p_folder)) { + QString themeName = PathUtils::dirName(p_folder); + m_availableThemes.insert(themeName, p_folder); + qDebug() << "add theme" << themeName << p_folder; + } +} + +const Theme &ThemeMgr::getCurrentTheme() const +{ + return *m_currentTheme; +} + +void ThemeMgr::loadCurrentTheme(const QString &p_themeName) +{ + auto themeFolder = findThemeFolder(p_themeName); + if (themeFolder.isNull()) { + qCritical() << "fail to locate theme" << p_themeName; + } else { + m_currentTheme.reset(loadTheme(themeFolder)); + } + + if (!m_currentTheme) { + const QString defaultTheme("native"); + qInfo() << "fall back to default theme" << defaultTheme; + m_currentTheme.reset(loadTheme(findThemeFolder(defaultTheme))); + } +} + +Theme *ThemeMgr::loadTheme(const QString &p_themeFolder) +{ + if (p_themeFolder.isEmpty()) { + qCritical("fail to load theme from empty folder"); + return nullptr; + } + + try { + return Theme::fromFolder(p_themeFolder); + } catch (Exception &p_e) { + qCritical("fail to load theme from folder %s (%s)", + p_themeFolder.toStdString().c_str(), + p_e.what()); + return nullptr; + } +} + +QString ThemeMgr::findThemeFolder(const QString &p_name) const +{ + auto it = m_availableThemes.find(p_name); + if (it != m_availableThemes.end()) { + return it.value(); + } + + return QString(); +} + +QString ThemeMgr::fetchQtStyleSheet() const +{ + Q_ASSERT(m_currentTheme); + if (!m_currentTheme) { + return QString(); + } + + return m_currentTheme->fetchQtStyleSheet(); +} + +QString ThemeMgr::paletteColor(const QString &p_name) const +{ + Q_ASSERT(m_currentTheme); + return m_currentTheme->paletteColor(p_name); +} + +void ThemeMgr::addSearchPath(const QString &p_path) +{ + s_searchPaths << p_path; +} + +QString ThemeMgr::getFile(Theme::File p_fileType) const +{ + return m_currentTheme->getFile(p_fileType); +} + +QString ThemeMgr::getEditorHighlightTheme() const +{ + return m_currentTheme->getEditorHighlightTheme(); +} + +QString ThemeMgr::getMarkdownEditorHighlightTheme() const +{ + return m_currentTheme->getMarkdownEditorHighlightTheme(); +} + +void ThemeMgr::addSyntaxHighlightingSearchPaths(const QStringList &p_paths) +{ + vte::VTextEditor::addSyntaxCustomSearchPaths(p_paths); +} + +const QColor &ThemeMgr::getBaseBackground() const +{ + return m_baseBackground; +} + +void ThemeMgr::setBaseBackground(const QColor &p_bg) +{ + m_baseBackground = p_bg; +} diff --git a/src/core/thememgr.h b/src/core/thememgr.h new file mode 100644 index 00000000..18c3fe9f --- /dev/null +++ b/src/core/thememgr.h @@ -0,0 +1,76 @@ +#ifndef THEMEMGR_H +#define THEMEMGR_H + +#include + +#include +#include +#include +#include +#include + +#include "theme.h" + +namespace vnotex +{ + class ThemeMgr : public QObject + { + Q_OBJECT + public: + ThemeMgr(const QString &p_currentThemeName, QObject *p_parent = nullptr); + + // @p_icon: file path or file name of the icon. + // If @p_icon is a path, just return it. + // Otherwise, first try to find it in current theme, and if not found, + // find it in resource file. + // Return the path of the icon to use. + QString getIconFile(const QString &p_icon) const; + + QString fetchQtStyleSheet() const; + + QString paletteColor(const QString &p_name) const; + + QString getFile(Theme::File p_fileType) const; + + // Return the file path of the theme or just the theme name. + QString getEditorHighlightTheme() const; + + QString getMarkdownEditorHighlightTheme() const; + + const QColor &getBaseBackground() const; + void setBaseBackground(const QColor &p_bg); + + static void addSearchPath(const QString &p_path); + + static void addSyntaxHighlightingSearchPaths(const QStringList &p_paths); + + private: + void loadAvailableThemes(); + + void loadThemes(const QString &p_path); + + void checkAndAddThemeFolder(const QString &p_folder); + + const Theme &getCurrentTheme() const; + + void loadCurrentTheme(const QString &p_themeName); + + Theme *loadTheme(const QString &p_themeFolder); + + QString findThemeFolder(const QString &p_name) const; + + // Theme name to folder path mapping. + QHash m_availableThemes; + + QScopedPointer m_currentTheme; + + // Background of the main window. + // Set at runtime, not from the theme config. + QColor m_baseBackground; + + // List of path to search for themes. + static QStringList s_searchPaths; + }; +} // ns vnotex + +#endif // THEMEMGR_H diff --git a/src/core/versioncontroller/dummyversioncontroller.cpp b/src/core/versioncontroller/dummyversioncontroller.cpp new file mode 100644 index 00000000..fd4f1412 --- /dev/null +++ b/src/core/versioncontroller/dummyversioncontroller.cpp @@ -0,0 +1,28 @@ +#include "dummyversioncontroller.h" + +using namespace vnotex; + + +DummyVersionController::DummyVersionController(const QString &p_name, + const QString &p_displayName, + const QString &p_description, + QObject *p_parent) + : IVersionController(p_parent), + m_info(p_name, p_displayName, p_description) +{ +} + +QString DummyVersionController::getName() const +{ + return m_info.m_name; +} + +QString DummyVersionController::getDisplayName() const +{ + return m_info.m_displayName; +} + +QString DummyVersionController::getDescription() const +{ + return m_info.m_description; +} diff --git a/src/core/versioncontroller/dummyversioncontroller.h b/src/core/versioncontroller/dummyversioncontroller.h new file mode 100644 index 00000000..c2bcb100 --- /dev/null +++ b/src/core/versioncontroller/dummyversioncontroller.h @@ -0,0 +1,30 @@ +#ifndef DUMMYVERSIONCONTROLLER_H +#define DUMMYVERSIONCONTROLLER_H + +#include "iversioncontroller.h" + +#include + +namespace vnotex +{ + class DummyVersionController : public IVersionController + { + Q_OBJECT + public: + explicit DummyVersionController(const QString &p_name, + const QString &p_displayName, + const QString &p_description, + QObject *p_parent = nullptr); + + QString getName() const Q_DECL_OVERRIDE; + + QString getDisplayName() const Q_DECL_OVERRIDE; + + QString getDescription() const Q_DECL_OVERRIDE; + + private: + Info m_info; + }; +} // ns vnotex + +#endif // DUMMYVERSIONCONTROLLER_H diff --git a/src/core/versioncontroller/dummyversioncontrollerfactory.cpp b/src/core/versioncontroller/dummyversioncontrollerfactory.cpp new file mode 100644 index 00000000..86359ed8 --- /dev/null +++ b/src/core/versioncontroller/dummyversioncontrollerfactory.cpp @@ -0,0 +1,33 @@ +#include "dummyversioncontrollerfactory.h" + +using namespace vnotex; + +#include + +#include "dummyversioncontroller.h" + +DummyVersionControllerFactory::DummyVersionControllerFactory() +{ +} + +QString DummyVersionControllerFactory::getName() const +{ + return QStringLiteral("dummy.vnotex"); +} + +QString DummyVersionControllerFactory::getDisplayName() const +{ + return QObject::tr("Dummy Version Control"); +} + +QString DummyVersionControllerFactory::getDescription() const +{ + return QObject::tr("Disable version control"); +} + +QSharedPointer DummyVersionControllerFactory::createVersionController() +{ + return QSharedPointer::create(getName(), + getDisplayName(), + getDescription()); +} diff --git a/src/core/versioncontroller/dummyversioncontrollerfactory.h b/src/core/versioncontroller/dummyversioncontrollerfactory.h new file mode 100644 index 00000000..481f35bf --- /dev/null +++ b/src/core/versioncontroller/dummyversioncontrollerfactory.h @@ -0,0 +1,24 @@ +#ifndef DUMMYVERSIONCONTROLLERFACTORY_H +#define DUMMYVERSIONCONTROLLERFACTORY_H + +#include "iversioncontrollerfactory.h" + + +namespace vnotex +{ + class DummyVersionControllerFactory : public IVersionControllerFactory + { + public: + DummyVersionControllerFactory(); + + QString getName() const Q_DECL_OVERRIDE; + + QString getDisplayName() const Q_DECL_OVERRIDE; + + QString getDescription()const Q_DECL_OVERRIDE; + + QSharedPointer createVersionController() Q_DECL_OVERRIDE; + }; +} // ns vnotex + +#endif // DUMMYVERSIONCONTROLLERFACTORY_H diff --git a/src/core/versioncontroller/iversioncontroller.h b/src/core/versioncontroller/iversioncontroller.h new file mode 100644 index 00000000..768e4518 --- /dev/null +++ b/src/core/versioncontroller/iversioncontroller.h @@ -0,0 +1,30 @@ +#ifndef IVERSIONCONTROLLER_H +#define IVERSIONCONTROLLER_H + +#include + +namespace vnotex +{ + // Abstract class for version control. + class IVersionController : public QObject + { + Q_OBJECT + public: + explicit IVersionController(QObject *p_parent = nullptr) + : QObject(p_parent) + { + } + + virtual ~IVersionController() + { + } + + virtual QString getName() const = 0; + + virtual QString getDisplayName() const = 0; + + virtual QString getDescription() const = 0; + }; +} // ns vnotex + +#endif // IVERSIONCONTROLLER_H diff --git a/src/core/versioncontroller/iversioncontrollerfactory.h b/src/core/versioncontroller/iversioncontrollerfactory.h new file mode 100644 index 00000000..f2c8f135 --- /dev/null +++ b/src/core/versioncontroller/iversioncontrollerfactory.h @@ -0,0 +1,31 @@ +#ifndef IVERSIONCONTROLLERFACTORY_H +#define IVERSIONCONTROLLERFACTORY_H + +#include + +namespace vnotex +{ + class IVersionController; + + class IVersionControllerFactory + { + public: + IVersionControllerFactory() + { + } + + virtual ~IVersionControllerFactory() + { + } + + virtual QString getName() const = 0; + + virtual QString getDisplayName() const = 0; + + virtual QString getDescription() const = 0; + + virtual QSharedPointer createVersionController() = 0; + }; +} // ns vnotex + +#endif // IVERSIONCONTROLLERFACTORY_H diff --git a/src/core/versioncontroller/versioncontroller.pri b/src/core/versioncontroller/versioncontroller.pri new file mode 100644 index 00000000..7456ee52 --- /dev/null +++ b/src/core/versioncontroller/versioncontroller.pri @@ -0,0 +1,11 @@ +SOURCES += \ + $$PWD/dummyversioncontroller.cpp \ + $$PWD/versioncontrollerserver.cpp \ + $$PWD/dummyversioncontrollerfactory.cpp + +HEADERS += \ + $$PWD/iversioncontroller.h \ + $$PWD/dummyversioncontroller.h \ + $$PWD/versioncontrollerserver.h \ + $$PWD/iversioncontrollerfactory.h \ + $$PWD/dummyversioncontrollerfactory.h diff --git a/src/core/versioncontroller/versioncontrollerserver.cpp b/src/core/versioncontroller/versioncontrollerserver.cpp new file mode 100644 index 00000000..356b1d26 --- /dev/null +++ b/src/core/versioncontroller/versioncontrollerserver.cpp @@ -0,0 +1,38 @@ +#include "versioncontrollerserver.h" + +#include + +#include "iversioncontroller.h" +#include "iversioncontrollerfactory.h" + +using namespace vnotex; + +VersionControllerServer::VersionControllerServer() +{ +} + +bool VersionControllerServer::registerFactory(const QSharedPointer &p_factory) +{ + Q_ASSERT(p_factory); + if (m_factories.contains(p_factory->getName())) { + qWarning() << "VersionControllerFactory to register already exists" + << p_factory->getName() + << p_factory->getDisplayName(); + return false; + } + + qDebug() << "VersionControllerFactory" << p_factory->getName() << "registered"; + m_factories.insert(p_factory->getName(), p_factory); + return true; +} + +QSharedPointer VersionControllerServer::createVersionController(const QString &p_name) +{ + auto it = m_factories.find(p_name); + if (it != m_factories.end()) { + auto &factory = it.value(); + return factory->createVersionController(); + } + + return nullptr; +} diff --git a/src/core/versioncontroller/versioncontrollerserver.h b/src/core/versioncontroller/versioncontrollerserver.h new file mode 100644 index 00000000..d8e27c3b --- /dev/null +++ b/src/core/versioncontroller/versioncontrollerserver.h @@ -0,0 +1,29 @@ +#ifndef VERSIONCONTROLLERSERVER_H +#define VERSIONCONTROLLERSERVER_H + +#include +#include + +namespace vnotex +{ + class IVersionController; + class IVersionControllerFactory; + + class VersionControllerServer + { + public: + VersionControllerServer(); + + // Register a factory. + bool registerFactory(const QSharedPointer &p_factory); + + // @p_name: Name of the version controller to create. + QSharedPointer createVersionController(const QString &p_name); + + private: + // Name to factory mapping. + QHash> m_factories; + }; +} // ns vnotex + +#endif // VERSIONCONTROLLERSERVER_H diff --git a/src/core/viewerresource.h b/src/core/viewerresource.h new file mode 100644 index 00000000..535e199e --- /dev/null +++ b/src/core/viewerresource.h @@ -0,0 +1,99 @@ +#ifndef VIEWERRESOURCE_H +#define VIEWERRESOURCE_H + +#include +#include +#include +#include + +namespace vnotex +{ + // Resource for Web viewer. + struct ViewerResource + { + struct Resource + { + void init(const QJsonObject &p_obj) + { + m_name = p_obj[QStringLiteral("name")].toString(); + m_enabled = p_obj[QStringLiteral("enabled")].toBool(); + + m_styles.clear(); + auto stylesArray = p_obj[QStringLiteral("styles")].toArray(); + for (const auto &ele : stylesArray) { + m_styles << ele.toString(); + } + + m_scripts.clear(); + auto scriptsArray = p_obj[QStringLiteral("scripts")].toArray(); + for (const auto &ele : scriptsArray) { + m_scripts << ele.toString(); + } + } + + QJsonObject toJson() const + { + QJsonObject obj; + obj[QStringLiteral("name")] = m_name; + obj[QStringLiteral("enabled")] = m_enabled; + + QJsonArray stylesArray; + for (const auto &ele : m_styles) { + stylesArray.append(ele); + } + obj[QStringLiteral("styles")] = stylesArray; + + QJsonArray scriptsArray; + for (const auto &ele : m_scripts) { + scriptsArray.append(ele); + } + obj[QStringLiteral("scripts")] = scriptsArray; + return obj; + } + + QString m_name; + + bool m_enabled = true; + + QStringList m_styles; + + QStringList m_scripts; + }; + + void init(const QJsonObject &p_obj) + { + m_template = p_obj[QStringLiteral("template")].toString(); + + auto ary = p_obj[QStringLiteral("resources")].toArray(); + m_resources.resize(ary.size()); + for (int i = 0; i < ary.size(); ++i) { + m_resources[i].init(ary[i].toObject()); + } + } + + QJsonObject toJson() const + { + QJsonObject obj; + obj[QStringLiteral("template")] = m_template; + + { + QJsonArray ary; + for (const auto &ele : m_resources) { + ary.append(ele.toJson()); + } + obj[QStringLiteral("resources")] = ary; + } + + return obj; + } + + // HTML template file. + QString m_template; + + // Resources to fill in the template. + QVector m_resources; + }; + +} + +#endif // VIEWERRESOURCE_H diff --git a/src/core/vnotex.cpp b/src/core/vnotex.cpp new file mode 100644 index 00000000..32281554 --- /dev/null +++ b/src/core/vnotex.cpp @@ -0,0 +1,122 @@ +#include "vnotex.h" + +#include + +#include +#include "notebookmgr.h" +#include "buffermgr.h" +#include "configmgr.h" +#include "coreconfig.h" + +#include "fileopenparameters.h" + +#include + +using namespace vnotex; + +VNoteX::VNoteX(QObject *p_parent) + : QObject(p_parent), + m_mainWindow(nullptr), + m_notebookMgr(nullptr) +{ + qsrand(QDateTime::currentDateTime().toTime_t()); + + m_instanceId = qrand(); + + initThemeMgr(); + + initNotebookMgr(); + + initBufferMgr(); + + initDocsUtils(); +} + +void VNoteX::initLoad() +{ + m_notebookMgr->loadNotebooks(); +} + +void VNoteX::initThemeMgr() +{ + Q_ASSERT(!m_themeMgr); + auto &configMgr = ConfigMgr::getInst(); + ThemeMgr::addSearchPath(configMgr.getAppThemeFolder()); + ThemeMgr::addSearchPath(configMgr.getUserThemeFolder()); + ThemeMgr::addSyntaxHighlightingSearchPaths( + QStringList() << configMgr.getUserSyntaxHighlightingFolder() + << configMgr.getAppSyntaxHighlightingFolder()); + m_themeMgr = new ThemeMgr(configMgr.getCoreConfig().getTheme(), this); +} + +ThemeMgr &VNoteX::getThemeMgr() const +{ + return *m_themeMgr; +} + +void VNoteX::setMainWindow(MainWindow *p_mainWindow) +{ + Q_ASSERT(!m_mainWindow); + m_mainWindow = p_mainWindow; +} + +MainWindow *VNoteX::getMainWindow() const +{ + Q_ASSERT(m_mainWindow); + return m_mainWindow; +} + +void VNoteX::initNotebookMgr() +{ + Q_ASSERT(!m_notebookMgr); + m_notebookMgr = new NotebookMgr(this); + m_notebookMgr->init(); +} + +void VNoteX::initBufferMgr() +{ + Q_ASSERT(!m_bufferMgr); + m_bufferMgr = new BufferMgr(this); + m_bufferMgr->init(); + + connect(this, &VNoteX::openNodeRequested, + m_bufferMgr, QOverload &>::of(&BufferMgr::open)); + + connect(this, &VNoteX::openFileRequested, + m_bufferMgr, QOverload &>::of(&BufferMgr::open)); +} + +NotebookMgr &VNoteX::getNotebookMgr() const +{ + return *m_notebookMgr; +} + +BufferMgr &VNoteX::getBufferMgr() const +{ + return *m_bufferMgr; +} + +void VNoteX::showStatusMessage(const QString &p_message, int timeoutMilliseconds) +{ + emit statusMessageRequested(p_message, timeoutMilliseconds); +} + +void VNoteX::showStatusMessageShort(const QString &p_message) +{ + showStatusMessage(p_message, 3000); +} + +ID VNoteX::getInstanceId() const +{ + return m_instanceId; +} + +void VNoteX::initDocsUtils() +{ + auto &configMgr = ConfigMgr::getInst(); + // If we got a match in user folder, stop the search. + DocsUtils::addSearchPath(configMgr.getUserDocsFolder()); + DocsUtils::addSearchPath(configMgr.getAppDocsFolder()); + + DocsUtils::setLocale(configMgr.getCoreConfig().getLocaleToUse()); +} diff --git a/src/core/vnotex.h b/src/core/vnotex.h new file mode 100644 index 00000000..d8a215ae --- /dev/null +++ b/src/core/vnotex.h @@ -0,0 +1,127 @@ +#ifndef VNOTEX_H +#define VNOTEX_H + +#include +#include + +#include "thememgr.h" +#include "global.h" + +namespace vnotex +{ + class MainWindow; + class NotebookMgr; + class BufferMgr; + class Node; + struct FileOpenParameters; + class Event; + class Notebook; + + class VNoteX : public QObject + { + Q_OBJECT + public: + static VNoteX &getInst() + { + static VNoteX inst; + return inst; + } + + VNoteX(const VNoteX &) = delete; + void operator=(const VNoteX &) = delete; + + // MUST be called to load some heavy data. + // It is good to call it after MainWindow is shown. + void initLoad(); + + ThemeMgr &getThemeMgr() const; + + void setMainWindow(MainWindow *p_mainWindow); + MainWindow *getMainWindow() const; + + NotebookMgr &getNotebookMgr() const; + + BufferMgr &getBufferMgr() const; + + ID getInstanceId() const; + + public slots: + void showStatusMessage(const QString &p_message, int timeoutMilliseconds = 0); + + void showStatusMessageShort(const QString &p_message); + + signals: + // Requested to new a notebook. + void newNotebookRequested(); + + // Requested to new a notebook from existing folder. + void newNotebookFromFolderRequested(); + + // Requested to import a notebook. + void importNotebookRequested(); + + // Requested to import a legacy notebook from VNote 2.0. + void importLegacyNotebookRequested(); + + // Requested to import files. + void importFileRequested(); + + // Requested to import folder. + void importFolderRequested(); + + // Requested to new a note in current notebook. + // The handler should determine in which folder this note belongs to. + void newNoteRequested(); + + // Requested to new a folder in current notebook. + void newFolderRequested(); + + // Requested to show status message. + void statusMessageRequested(const QString &p_message, int timeoutMilliseconds); + + // Requested to open @p_node. + void openNodeRequested(Node *p_node, const QSharedPointer &p_paras); + + // @m_response of @p_event: true to continue the move, false to cancel the move. + void nodeAboutToMove(Node *p_node, const QSharedPointer &p_event); + + // @m_response of @p_event: true to continue the removal, false to cancel the removal. + void nodeAboutToRemove(Node *p_node, const QSharedPointer &p_event); + + // @m_response of @p_event: true to continue the rename, false to cancel the rename. + void nodeAboutToRename(Node *p_node, const QSharedPointer &p_event); + + // Requested to open @p_filePath. + void openFileRequested(const QString &p_filePath, const QSharedPointer &p_paras); + + // Requested to locate node in explorer. + void locateNodeRequested(Node *p_node); + + private: + explicit VNoteX(QObject *p_parent = nullptr); + + void initThemeMgr(); + + void initNotebookMgr(); + + void initBufferMgr(); + + void initDocsUtils(); + + MainWindow *m_mainWindow; + + // QObject managed. + ThemeMgr *m_themeMgr; + + // QObject managed. + NotebookMgr *m_notebookMgr; + + // QObject managed. + BufferMgr *m_bufferMgr; + + // Used to identify app's instance. + ID m_instanceId = 0; + }; +} // ns vnotex + +#endif // VNOTEX_H diff --git a/src/core/widgetconfig.cpp b/src/core/widgetconfig.cpp new file mode 100644 index 00000000..507cc236 --- /dev/null +++ b/src/core/widgetconfig.cpp @@ -0,0 +1,52 @@ +#include "widgetconfig.h" + +using namespace vnotex; + +#define READINT(key) readInt(appObj, userObj, (key)) + +WidgetConfig::WidgetConfig(ConfigMgr *p_mgr, IConfig *p_topConfig) + : IConfig(p_mgr, p_topConfig) +{ + m_sessionName = QStringLiteral("widget"); +} + +void WidgetConfig::init(const QJsonObject &p_app, + const QJsonObject &p_user) +{ + const auto appObj = p_app.value(m_sessionName).toObject(); + const auto userObj = p_user.value(m_sessionName).toObject(); + + m_outlineAutoExpandedLevel = READINT(QStringLiteral("outline_auto_expanded_level")); + if (m_outlineAutoExpandedLevel < 0 || m_outlineAutoExpandedLevel > 6) { + m_outlineAutoExpandedLevel = 6; + } + + m_findAndReplaceOptions = static_cast(READINT(QStringLiteral("find_and_replace_options"))); +} + +QJsonObject WidgetConfig::toJson() const +{ + QJsonObject obj; + obj[QStringLiteral("outline_auto_expanded_level")] = m_outlineAutoExpandedLevel; + return obj; +} + +int WidgetConfig::getOutlineAutoExpandedLevel() const +{ + return m_outlineAutoExpandedLevel; +} + +void WidgetConfig::setOutlineAutoExpandedLevel(int p_level) +{ + updateConfig(m_outlineAutoExpandedLevel, p_level, this); +} + +FindOptions WidgetConfig::getFindAndReplaceOptions() const +{ + return m_findAndReplaceOptions; +} + +void WidgetConfig::setFindAndReplaceOptions(FindOptions p_options) +{ + updateConfig(m_findAndReplaceOptions, p_options, this); +} diff --git a/src/core/widgetconfig.h b/src/core/widgetconfig.h new file mode 100644 index 00000000..f17f5956 --- /dev/null +++ b/src/core/widgetconfig.h @@ -0,0 +1,34 @@ +#ifndef WIDGETCONFIG_H +#define WIDGETCONFIG_H + +#include "iconfig.h" + +#include "global.h" + +#include + +namespace vnotex +{ + class WidgetConfig : public IConfig + { + public: + WidgetConfig(ConfigMgr *p_mgr, IConfig *p_topConfig); + + void init(const QJsonObject &p_app, const QJsonObject &p_user) Q_DECL_OVERRIDE; + + QJsonObject toJson() const Q_DECL_OVERRIDE; + + int getOutlineAutoExpandedLevel() const; + void setOutlineAutoExpandedLevel(int p_level); + + FindOptions getFindAndReplaceOptions() const; + void setFindAndReplaceOptions(FindOptions p_options); + + private: + int m_outlineAutoExpandedLevel = 6; + + FindOptions m_findAndReplaceOptions = FindOption::None; + }; +} + +#endif // WIDGETCONFIG_H diff --git a/src/data/core/core.qrc b/src/data/core/core.qrc new file mode 100644 index 00000000..4287b954 --- /dev/null +++ b/src/data/core/core.qrc @@ -0,0 +1,74 @@ + + + vnotex.json + icons/vnote.icns + icons/vnote.ico + icons/new_note.svg + icons/import_notebook.svg + icons/import_notebook_of_vnote2.svg + icons/new_notebook.svg + icons/new_notebook_from_folder.svg + icons/discard_editor.svg + icons/edit_editor.svg + icons/read_editor.svg + icons/expand.svg + icons/fullscreen.svg + icons/history_explorer.svg + icons/notebook_explorer.svg + icons/tag_explorer.svg + icons/help.svg + icons/menu.svg + icons/settings.svg + icons/whatsthis.svg + icons/native_notebook_default.svg + icons/notebook_default.svg + icons/file_node.svg + icons/folder_node.svg + icons/manage_notebooks.svg + icons/up_parent_node.svg + icons/properties.svg + icons/remove_notebook.svg + icons/close_notebook.svg + icons/recycle_bin.svg + icons/saved.svg + icons/save_editor.svg + icons/attachment_editor.svg + icons/attachment_full_editor.svg + icons/split_menu.svg + icons/split_window_list.svg + icons/horizontal_split.svg + icons/vertical_split.svg + icons/type_heading_editor.svg + icons/type_bold_editor.svg + icons/type_italic_editor.svg + icons/type_strikethrough_editor.svg + icons/type_unordered_list_editor.svg + icons/type_ordered_list_editor.svg + icons/type_todo_list_editor.svg + icons/type_checked_todo_list_editor.svg + icons/type_code_editor.svg + icons/type_code_block_editor.svg + icons/type_math_editor.svg + icons/type_math_block_editor.svg + icons/type_quote_editor.svg + icons/type_link_editor.svg + icons/type_image_editor.svg + icons/type_table_editor.svg + icons/add.svg + icons/clear.svg + icons/open_folder.svg + icons/new_file.svg + icons/new_folder.svg + icons/decrease_outline_level.svg + icons/increase_outline_level.svg + icons/minimize.svg + icons/maximize.svg + icons/maximize_restore.svg + icons/close.svg + icons/stay_on_top.svg + icons/outline_editor.svg + icons/find_replace_editor.svg + logo/vnote.svg + logo/vnote.png + + diff --git a/src/data/core/icons/add.svg b/src/data/core/icons/add.svg new file mode 100644 index 00000000..867c858b --- /dev/null +++ b/src/data/core/icons/add.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/data/core/icons/attachment_editor.svg b/src/data/core/icons/attachment_editor.svg new file mode 100644 index 00000000..b06a95ff --- /dev/null +++ b/src/data/core/icons/attachment_editor.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/data/core/icons/attachment_full_editor.svg b/src/data/core/icons/attachment_full_editor.svg new file mode 100644 index 00000000..06e25276 --- /dev/null +++ b/src/data/core/icons/attachment_full_editor.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/data/core/icons/clear.svg b/src/data/core/icons/clear.svg new file mode 100644 index 00000000..8ef1d82f --- /dev/null +++ b/src/data/core/icons/clear.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/data/core/icons/close.svg b/src/data/core/icons/close.svg new file mode 100644 index 00000000..d4a0aeba --- /dev/null +++ b/src/data/core/icons/close.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/data/core/icons/close_notebook.svg b/src/data/core/icons/close_notebook.svg new file mode 100644 index 00000000..4bfaac89 --- /dev/null +++ b/src/data/core/icons/close_notebook.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + diff --git a/src/data/core/icons/decrease_outline_level.svg b/src/data/core/icons/decrease_outline_level.svg new file mode 100644 index 00000000..01f101f5 --- /dev/null +++ b/src/data/core/icons/decrease_outline_level.svg @@ -0,0 +1,9 @@ + + + + + + diff --git a/src/data/core/icons/discard_editor.svg b/src/data/core/icons/discard_editor.svg new file mode 100644 index 00000000..db3e4ee7 --- /dev/null +++ b/src/data/core/icons/discard_editor.svg @@ -0,0 +1 @@ + diff --git a/src/data/core/icons/edit_editor.svg b/src/data/core/icons/edit_editor.svg new file mode 100644 index 00000000..e6c9ff53 --- /dev/null +++ b/src/data/core/icons/edit_editor.svg @@ -0,0 +1 @@ + diff --git a/src/data/core/icons/expand.svg b/src/data/core/icons/expand.svg new file mode 100644 index 00000000..60a436a7 --- /dev/null +++ b/src/data/core/icons/expand.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/data/core/icons/file_node.svg b/src/data/core/icons/file_node.svg new file mode 100644 index 00000000..6d4b1f95 --- /dev/null +++ b/src/data/core/icons/file_node.svg @@ -0,0 +1,10 @@ + + + + + + diff --git a/src/data/core/icons/find_replace_editor.svg b/src/data/core/icons/find_replace_editor.svg new file mode 100644 index 00000000..0927bfb2 --- /dev/null +++ b/src/data/core/icons/find_replace_editor.svg @@ -0,0 +1,10 @@ + + + + + + diff --git a/src/data/core/icons/folder_node.svg b/src/data/core/icons/folder_node.svg new file mode 100644 index 00000000..ce387636 --- /dev/null +++ b/src/data/core/icons/folder_node.svg @@ -0,0 +1,10 @@ + + + + + + diff --git a/src/data/core/icons/fullscreen.svg b/src/data/core/icons/fullscreen.svg new file mode 100644 index 00000000..a4dd7c71 --- /dev/null +++ b/src/data/core/icons/fullscreen.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/src/data/core/icons/help.svg b/src/data/core/icons/help.svg new file mode 100644 index 00000000..8494d36f --- /dev/null +++ b/src/data/core/icons/help.svg @@ -0,0 +1,14 @@ + + + + + + + + diff --git a/src/data/core/icons/history_explorer.svg b/src/data/core/icons/history_explorer.svg new file mode 100644 index 00000000..3f9d0fe2 --- /dev/null +++ b/src/data/core/icons/history_explorer.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/data/core/icons/horizontal_split.svg b/src/data/core/icons/horizontal_split.svg new file mode 100644 index 00000000..18a163e5 --- /dev/null +++ b/src/data/core/icons/horizontal_split.svg @@ -0,0 +1,15 @@ + + + + + + + + diff --git a/src/data/core/icons/import_notebook.svg b/src/data/core/icons/import_notebook.svg new file mode 100644 index 00000000..e8858b9f --- /dev/null +++ b/src/data/core/icons/import_notebook.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/data/core/icons/import_notebook_of_vnote2.svg b/src/data/core/icons/import_notebook_of_vnote2.svg new file mode 100644 index 00000000..4a5d9efc --- /dev/null +++ b/src/data/core/icons/import_notebook_of_vnote2.svg @@ -0,0 +1,44 @@ + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/src/data/core/icons/increase_outline_level.svg b/src/data/core/icons/increase_outline_level.svg new file mode 100644 index 00000000..7dc602b4 --- /dev/null +++ b/src/data/core/icons/increase_outline_level.svg @@ -0,0 +1,9 @@ + + + + + + diff --git a/src/data/core/icons/manage_notebooks.svg b/src/data/core/icons/manage_notebooks.svg new file mode 100644 index 00000000..6ad4a6e8 --- /dev/null +++ b/src/data/core/icons/manage_notebooks.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/data/core/icons/maximize.svg b/src/data/core/icons/maximize.svg new file mode 100644 index 00000000..8fe12c0f --- /dev/null +++ b/src/data/core/icons/maximize.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/data/core/icons/maximize_restore.svg b/src/data/core/icons/maximize_restore.svg new file mode 100644 index 00000000..4ecfa1ce --- /dev/null +++ b/src/data/core/icons/maximize_restore.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/data/core/icons/menu.svg b/src/data/core/icons/menu.svg new file mode 100644 index 00000000..f064ff37 --- /dev/null +++ b/src/data/core/icons/menu.svg @@ -0,0 +1,9 @@ + + + + + + diff --git a/src/data/core/icons/minimize.svg b/src/data/core/icons/minimize.svg new file mode 100644 index 00000000..c6974643 --- /dev/null +++ b/src/data/core/icons/minimize.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/data/core/icons/native_notebook_default.svg b/src/data/core/icons/native_notebook_default.svg new file mode 100644 index 00000000..6bba66fa --- /dev/null +++ b/src/data/core/icons/native_notebook_default.svg @@ -0,0 +1,14 @@ + + + + + diff --git a/src/data/core/icons/new_file.svg b/src/data/core/icons/new_file.svg new file mode 100644 index 00000000..e753bfb9 --- /dev/null +++ b/src/data/core/icons/new_file.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/data/core/icons/new_folder.svg b/src/data/core/icons/new_folder.svg new file mode 100644 index 00000000..d973475a --- /dev/null +++ b/src/data/core/icons/new_folder.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/data/core/icons/new_note.svg b/src/data/core/icons/new_note.svg new file mode 100644 index 00000000..e753bfb9 --- /dev/null +++ b/src/data/core/icons/new_note.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/data/core/icons/new_notebook.svg b/src/data/core/icons/new_notebook.svg new file mode 100644 index 00000000..441ac32f --- /dev/null +++ b/src/data/core/icons/new_notebook.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/data/core/icons/new_notebook_from_folder.svg b/src/data/core/icons/new_notebook_from_folder.svg new file mode 100644 index 00000000..0ca5740a --- /dev/null +++ b/src/data/core/icons/new_notebook_from_folder.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/data/core/icons/notebook_default.svg b/src/data/core/icons/notebook_default.svg new file mode 100644 index 00000000..c37a762f --- /dev/null +++ b/src/data/core/icons/notebook_default.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/data/core/icons/notebook_explorer.svg b/src/data/core/icons/notebook_explorer.svg new file mode 100644 index 00000000..f7ba80b7 --- /dev/null +++ b/src/data/core/icons/notebook_explorer.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/src/data/core/icons/open_folder.svg b/src/data/core/icons/open_folder.svg new file mode 100644 index 00000000..ce387636 --- /dev/null +++ b/src/data/core/icons/open_folder.svg @@ -0,0 +1,10 @@ + + + + + + diff --git a/src/data/core/icons/outline_editor.svg b/src/data/core/icons/outline_editor.svg new file mode 100644 index 00000000..7bf1d5b2 --- /dev/null +++ b/src/data/core/icons/outline_editor.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/data/core/icons/properties.svg b/src/data/core/icons/properties.svg new file mode 100644 index 00000000..768fefeb --- /dev/null +++ b/src/data/core/icons/properties.svg @@ -0,0 +1,10 @@ + + + + + + + + + diff --git a/src/data/core/icons/read_editor.svg b/src/data/core/icons/read_editor.svg new file mode 100644 index 00000000..2164bd77 --- /dev/null +++ b/src/data/core/icons/read_editor.svg @@ -0,0 +1 @@ + diff --git a/src/data/core/icons/recycle_bin.svg b/src/data/core/icons/recycle_bin.svg new file mode 100644 index 00000000..7e3ceb6a --- /dev/null +++ b/src/data/core/icons/recycle_bin.svg @@ -0,0 +1,10 @@ + + + Layer 1 + + + + Layer 1 copy + + + diff --git a/src/data/core/icons/remove_notebook.svg b/src/data/core/icons/remove_notebook.svg new file mode 100644 index 00000000..382a85ce --- /dev/null +++ b/src/data/core/icons/remove_notebook.svg @@ -0,0 +1,10 @@ + + + + + + diff --git a/src/data/core/icons/save_editor.svg b/src/data/core/icons/save_editor.svg new file mode 100644 index 00000000..0f70fd25 --- /dev/null +++ b/src/data/core/icons/save_editor.svg @@ -0,0 +1 @@ + diff --git a/src/data/core/icons/saved.svg b/src/data/core/icons/saved.svg new file mode 100644 index 00000000..0f70fd25 --- /dev/null +++ b/src/data/core/icons/saved.svg @@ -0,0 +1 @@ + diff --git a/src/data/core/icons/settings.svg b/src/data/core/icons/settings.svg new file mode 100644 index 00000000..734a2747 --- /dev/null +++ b/src/data/core/icons/settings.svg @@ -0,0 +1,18 @@ + + + + + + diff --git a/src/data/core/icons/split_menu.svg b/src/data/core/icons/split_menu.svg new file mode 100644 index 00000000..9866918d --- /dev/null +++ b/src/data/core/icons/split_menu.svg @@ -0,0 +1,9 @@ + + + + + + diff --git a/src/data/core/icons/split_window_list.svg b/src/data/core/icons/split_window_list.svg new file mode 100644 index 00000000..fb334a0b --- /dev/null +++ b/src/data/core/icons/split_window_list.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/data/core/icons/stay_on_top.svg b/src/data/core/icons/stay_on_top.svg new file mode 100644 index 00000000..9036a5de --- /dev/null +++ b/src/data/core/icons/stay_on_top.svg @@ -0,0 +1,11 @@ + + + + + + diff --git a/src/data/core/icons/tag_explorer.svg b/src/data/core/icons/tag_explorer.svg new file mode 100644 index 00000000..05fa0e67 --- /dev/null +++ b/src/data/core/icons/tag_explorer.svg @@ -0,0 +1,12 @@ + + + + + + + + + diff --git a/src/data/core/icons/type_bold_editor.svg b/src/data/core/icons/type_bold_editor.svg new file mode 100644 index 00000000..bdbfe630 --- /dev/null +++ b/src/data/core/icons/type_bold_editor.svg @@ -0,0 +1 @@ + diff --git a/src/data/core/icons/type_checked_todo_list_editor.svg b/src/data/core/icons/type_checked_todo_list_editor.svg new file mode 100644 index 00000000..9cdbe54c --- /dev/null +++ b/src/data/core/icons/type_checked_todo_list_editor.svg @@ -0,0 +1 @@ + diff --git a/src/data/core/icons/type_code_block_editor.svg b/src/data/core/icons/type_code_block_editor.svg new file mode 100644 index 00000000..4a949b10 --- /dev/null +++ b/src/data/core/icons/type_code_block_editor.svg @@ -0,0 +1 @@ + diff --git a/src/data/core/icons/type_code_editor.svg b/src/data/core/icons/type_code_editor.svg new file mode 100644 index 00000000..d36a6a4f --- /dev/null +++ b/src/data/core/icons/type_code_editor.svg @@ -0,0 +1 @@ + diff --git a/src/data/core/icons/type_heading_editor.svg b/src/data/core/icons/type_heading_editor.svg new file mode 100644 index 00000000..9e282f9b --- /dev/null +++ b/src/data/core/icons/type_heading_editor.svg @@ -0,0 +1 @@ + diff --git a/src/data/core/icons/type_image_editor.svg b/src/data/core/icons/type_image_editor.svg new file mode 100644 index 00000000..6f5583d1 --- /dev/null +++ b/src/data/core/icons/type_image_editor.svg @@ -0,0 +1 @@ + diff --git a/src/data/core/icons/type_italic_editor.svg b/src/data/core/icons/type_italic_editor.svg new file mode 100644 index 00000000..ab3e6d06 --- /dev/null +++ b/src/data/core/icons/type_italic_editor.svg @@ -0,0 +1 @@ + diff --git a/src/data/core/icons/type_link_editor.svg b/src/data/core/icons/type_link_editor.svg new file mode 100644 index 00000000..1646fb1b --- /dev/null +++ b/src/data/core/icons/type_link_editor.svg @@ -0,0 +1 @@ + diff --git a/src/data/core/icons/type_math_block_editor.svg b/src/data/core/icons/type_math_block_editor.svg new file mode 100644 index 00000000..636be9c4 --- /dev/null +++ b/src/data/core/icons/type_math_block_editor.svg @@ -0,0 +1 @@ + diff --git a/src/data/core/icons/type_math_editor.svg b/src/data/core/icons/type_math_editor.svg new file mode 100644 index 00000000..0edb4f25 --- /dev/null +++ b/src/data/core/icons/type_math_editor.svg @@ -0,0 +1 @@ + diff --git a/src/data/core/icons/type_ordered_list_editor.svg b/src/data/core/icons/type_ordered_list_editor.svg new file mode 100644 index 00000000..45beed05 --- /dev/null +++ b/src/data/core/icons/type_ordered_list_editor.svg @@ -0,0 +1 @@ + diff --git a/src/data/core/icons/type_quote_editor.svg b/src/data/core/icons/type_quote_editor.svg new file mode 100644 index 00000000..4ecb620e --- /dev/null +++ b/src/data/core/icons/type_quote_editor.svg @@ -0,0 +1 @@ + diff --git a/src/data/core/icons/type_strikethrough_editor.svg b/src/data/core/icons/type_strikethrough_editor.svg new file mode 100644 index 00000000..17c8c006 --- /dev/null +++ b/src/data/core/icons/type_strikethrough_editor.svg @@ -0,0 +1 @@ + diff --git a/src/data/core/icons/type_table_editor.svg b/src/data/core/icons/type_table_editor.svg new file mode 100644 index 00000000..25531d14 --- /dev/null +++ b/src/data/core/icons/type_table_editor.svg @@ -0,0 +1 @@ + diff --git a/src/data/core/icons/type_todo_list_editor.svg b/src/data/core/icons/type_todo_list_editor.svg new file mode 100644 index 00000000..7546e727 --- /dev/null +++ b/src/data/core/icons/type_todo_list_editor.svg @@ -0,0 +1 @@ + diff --git a/src/data/core/icons/type_unordered_list_editor.svg b/src/data/core/icons/type_unordered_list_editor.svg new file mode 100644 index 00000000..44fc994a --- /dev/null +++ b/src/data/core/icons/type_unordered_list_editor.svg @@ -0,0 +1 @@ + diff --git a/src/data/core/icons/up_parent_node.svg b/src/data/core/icons/up_parent_node.svg new file mode 100644 index 00000000..e0b94b4d --- /dev/null +++ b/src/data/core/icons/up_parent_node.svg @@ -0,0 +1,11 @@ + + + + + + + + + + diff --git a/src/data/core/icons/vertical_split.svg b/src/data/core/icons/vertical_split.svg new file mode 100644 index 00000000..c7543b0f --- /dev/null +++ b/src/data/core/icons/vertical_split.svg @@ -0,0 +1,15 @@ + + + + + + + + diff --git a/src/data/core/icons/vnote.icns b/src/data/core/icons/vnote.icns new file mode 100644 index 0000000000000000000000000000000000000000..e8e49a118db83a57c0fb979969caaa6650e1ad69 GIT binary patch literal 33168 zcmaI71C(bywE(ZQHh8)n(hZjV{}^%`V%vZDaa*-aB``HFMW@)=sjMlVq=) zWas>{lb9RYI069vaps2f9Dl{`!Q5M#d%p(0}7V01&`GZ~k$>|CR&! zC;e}AhTn4E3IN7`V*gd$KkUEH{}l)Q0R;5l^lbzn0ssj)80$OPI&k7k>O0CCJK(Dt zJ2;x#+Tb(La?sP$GJGonVE)zw1ONjC1ps|(1CaUo#l_|Szx1sGKmqz6Q-S}-RFMBS zH4gC4=K}bN{S}e89ZZfWuas;uET*yMc23FNsk;$H7**>s3B*1nkv{Xs}erR6+ikhQM4FVy20>b8G$RW z-F%6kf4)-fC@G=J*_ylOY_s!Qa1HsyIZ_Yql~xYfU?SjY<0Mjg);jIz9Awz8ld76j z#_vmX>~VWLxEoP!V~qhyqF6HL>C9aN`xTVO>bZs$R7pv|ZQeNH$}3->JyA^vY>tm$ z=eUiFyoHig`a(?%uU8Icl*{th2*Izl6Up~OQ0k&3oO(PHO1kzCmE%5^j-$|L3odJ5 z7d`ditc^X!UJj#aNH)63y4nPm+$EYIy8Z($w!nw{73NV|DQ8)jx%Y23sUs1S#i>IX{)4$mdvbo2h@l_l2JUrop5T5vEO1a0GIxXoE~J^XB;*5${2J~-^Di}CAvv&tCUIRND&dP)*JbsK1(S+Y z^$S+8_%l;>eoB8je6N*{AP7Ha7Atg-m$MyQ{I`J`lrFuR^*QX+Z(w;ACQa2N-Lp8gdjjz&uwH-a`?6 zjQ2r~IR~o|_Bi*M6bN?s^9c1OCiWB@TbrIWq=*mh{Xwo{`goghz@$bWk~shOchJu=S^Y>_bK{7A>XSw-MQ(MpcH;&wgtJi z0x{Q-b2BlLeg<6ZvrHA-l4Hiz|7?X5v21`aS!~<3+gOn8J z9w6L0#Om-AdCIc=ZBVjusrCI!$cKSD#xW!GN&HfGu}er=`jZF+5uJ`=>7|bSV=bE3 z!qUG=+K+TP1wKl5WOi5-H-4X#k_p6Ua~nB8bIflxq7{y3r zj(dv6z{F2LNv9FgrMZFuC0O^{z*iw;f_D22tD|fMD_ECEnbe%?NmH+yJ{p&p$C!b1 zKRT#D&crWZT}wmLy_y0k|4PAl`Mn4tY;Ot zqT_&o6)`VT?&+M$5HSbM0}BAAjR2xdEg-gbVs7Zg+$%vxSt&c?)NN0fi8K|J!#yHznnSz@ohR`I4Nu}S~%8Z2_e zT@ICP8-q!G^4{Bd8TNkk*q$(mNC#87wmw`gPrz5XS)C5$szS`k?$uDtgv!tJBs{xh zdR`GGy4p{$F(0<2jAg8*Q6!31_Dh*PI-qOPl;O|v=Ff<|hzqcn5PULbgTf~fK-&YH zw+YRC$@&1FcO~P6lCUVjELW|SZqDveSWl4`#zB6=w`fEer3+W^wK+xMCyteU5O8K? z&8MH;bVT9!HyH?g5FPXpmP|h!DM%mmo@ZW4^5u&*Ft~)G-_L<&Jv^~PdVfSi zXWJv*=%!LM=Ae9xLbBwXKIm3r#dreq5Zf42k9!p0d0O;TbE@%v^kpN9dNE!&x;`F0 zyT(g90@FCTzQA!;qZHufP4~zD?Gn5|xBt6K`YL(U@KZM7O>|Hz)01Q?hSZM+p8ce@BW`iO4F*A|53A6>Ka z0H1JBj+rwWQhqFJSq|WIY<%PD=ACWc`penR$x|1TRY3n+8+4;EZ$&%;LBQQqt9`DT zcFMKOJH>y82O`yO_7}0WA{jio0#AU(J}jw^DI;i{Kz9+jpfrD&_2zY(#TrJBP8hLb$h}8HQi_Nv9$Y?0>I^AlLsh- z6UENtg-duit~GYh$wQ7Wh^1qB?TpJ!GL|_rfbmZFPInAGR-1A0>|3eSzyAtP>h&t@ z;BnSiZFZ$&f`q!#KJEBr9buvP$A3F=%aWo}Lu=4CPpA+pEd&I!WjR)FGPn6gZ`R2o z6X5hsqD5k5jn6nIq$>pSLhOq*JfX8O?Bz-z11u+};c02ZbS%(j=C;cEr{g!xQR8?~ z0l%k6+pBtFHNGcy>~w#7POu{%=S&mRfimdmG(_p4PCoYUJ*Aq>l~$P&lR#279E-F7 zWy@cwLV^3C%xK_xwtrq_f#Vy9w}}*C7~gC?zM_1V*&e8^ulS9)NH4B3Z(FQ6VoPMkB6xHgl z+Qc>OQSt14J|vm=m~uXHdca7NLVB0j&?%^PHDCsrvT#O9-PO!zD1O;tFHw5%~$C8MT;ulV_Ji$)|J4h`C#>m_Wtr;C9(u?Y1UVr8Lj!lz6Qw z5L*8H4V`PvuzRJG$bI;=44hF0(7XHASRes`+|Xks7yhUgXdY+J2l?eG@42i4iX?Cc z`!hmX8>qtxEHjkyL&fm!I;6SxK9aC5E&b+-?ZVqbAz058<9$^-7=h!ozV6XhFoc3? z&7A*}*fJ8;fOEG&!ST-v!3gYJ@F@|j-Ls&Tb}aKV7Z=<{>u{q&dYmm?TcuaB$ukE% z(U4mJ4jERCHlyA&AYY_Q4 zBf{bJ;@PK@K_9d@3jXN<5nP5Jk;#e$Ois3+x36MvSLDR*+|w&rP=`^-gOIzTXx3*;JRZ7>sTNys+;r^re`;PPg@eu{N=L zJ{^zFy$6^5F^2YNB%V7~6~1Z=Uj)@Y140vlaG+Pi)Ziy&$Is#T<_z~Thm}cHjM&_b zSRv`0npac)^&aIg5Vwl*DtbrfK#%NN@|I_#w0TEy-Pylqkzh^KYw#CXdAgJ()3(4v zhWAP0@ z-qj#jfExLM*pLkADl9NlIdUfdJm`6b4`@)BF~z=>B=BlN8yS`~q<>ipTHKj9*mphL9gSN;dXjw zaq+{nJ7pa|I`c{bKsUUNXvUWR?#?S8yb&^?b&3ju>^{sX##F~Y7(0mr07y$LU#Shp zKU1Phuz(z8V9#E`q*(dgVgW#d@-X56fUbjGuTSVW4Q8vWR>QsMe-Ak!g?ZN)J}(F2)d>oger3H29`3lO`f|#j>#*47=E+EUH#9#@ zPVJp`x90O;Mrrgen3lkygnf?4?obAsh7Hz^!rPq66 z;<~!^V|B<=CovAjyM3l1{2^H%9WXVvKZM@phkNgr4ZJG#a;`lMge0aL6N6Om@S8-e z+~#GjCDK`682uIOcxKcmekWPb<|P3bcciDDVQ{BvG+ALrTP8?@)Q}RIv1iDXP<^zpWOQyz>DbHA!mJ*@>5I+c?m)?#P~FKY5vo6@ zI`1!D>*6Pv>c=>IA|sgdugYxyc45t2)RD(QOtZ3vnf{s~$0c`qzXU7qyB<8;8_q`4A=*b(t51Q{l_rg`JH_hB2rdw3Usbcf7n4#3|IDo!=os)Uj6$f@R?B zwh2|r7#ab#yr+OY{+ycjXe#bTY#X7J$Q23El;j=HM@D&Ph;itg_}bsZS04^|(@DMD zG43jBeFL*4L#L1-YWe*LvKA!l2cz}}BT_R#6?z4KXgV1i!?qDH*0-no8*+mA;F|yx z(%Q-mGaY{OCeS2iEb!tPO4BA`F&ZkzA0n^?O#F<#1PW!^f!79P>gkpwmk|d>od(pu&X`f z8~OJjq}aaf5S@TEl*@Vd?QyXdqX*q=RoM`CyVN(tLgx8Go9>lq`c>d)L|Nj8!+G~4 zbBk<8?Kx38y1`hl{bf3Kjpt^UC{q58&uS-Ol{0^!>7AD)kIcB25CcpNdenkuew1V^ zXgmfRykBDcQk(XD3VCW@nrThShVfT_=$_7p%X#a1Q z+9a;iRzko}_ksfHf_zEw$GwmzKT9r0u4og@BOSX0VUcKLNswEA5`h-t1WANl(O=*l zs*=Wj7!>;efY{+>Cs*Uv^WDgd^(c}2HF?*@4jeq(%M;2^SIow<%x4~mu^M~uXrxu% zfViK!ssYm*vTCrkqM0vk!q;Udra0Ouz6Ykre3^;)?XWe`zT4R?as$6ik1P4_R^~up zPnPD<^)}d0#1_?Rd{&JLAqN0*=rRJjDHtxF`j+LRc>9M7sca9Nd`pW?YDYvjyv0g# z`jxw3nNBkp#d|SsbmLO#@$_Os!#{gM#(wvy2Vx&YZmdb01i;1gf;I8Qbn48~7IQ8| zY4xd~rEVQwOSJOvxEQ8zQ2m9pnGg=`{_d58q~)#W>U3YSuH&W+O${NljY)QH$%zre zwmlrlL_$al%{@pTr@nD-gQ-TCKGuRE7O>H@g}LFz%jY;wxJ7cc`VVL*L!A z89;F_Lk!j4CVP?f-KDv`s8G_85{9W)o3o}fVN{rk_Dt%@Q1hMM6L2DB9RA+h1N;ut zJou0;yS^(y`HQW?<92kOG&{XH2EO|!q|Q`r%5u~?=#4I8L-9(5Vj0tRK*Ujfczc51 zTCg~h-rxM%)-7TOm(qAp{_CC@mV$!pWMDu>bHz_VJ@X>ma&nxmpqlX-woLg#){f83 zd_!-!m=cwbWTrvllQXY@GC^8FBuUbuHFwGl5`R*)(lO zjT345hix%ivb|oh#A(}-Sgr7)L~6p767aKmkt^ zi>Yf|FY_k;xc<=sdyUcrv6=&s7qGuRV#o~rLdt>9S4*bgc4X>bHmHLr=P^WnY~AhI zQMBm3o0D7c2`DcKwP|hde~~!Ig^K26OW@74wcljDqTyQSzrH-wV#B80{YY;p;L}%_ zXc-(ysR)KI5}uyWB8Wch?&#(qPM&--=vAKIZ{fyvptKp~KNX=IsfbzyW)#JNp0}9S zc-O48$Dcq@|JDssfABpsQjAyJ>_YB50IKVnySP2fJHbYp%P7<6K6#@WWHcZkYv#?&;3*t+z#!4$nI15wt3-MSB0Yde8 zAoNPgylt@vBrpbeJMBxlMzgRLxy=__ItddxV9ICASp$LrT6{2QG8#SKh=Ku1vN{&D zNLp#=!#cwn4P>1mz^04uiwCbS(nPLA=XF`FS0=n9Kf=;V9WkZlMY#f#RFA-JK1MgU z`=Cton9PT!5g7z6%};tH_20&W3`lzTJ5l_8jFCHfNbXE42dBG+?<9AdW3$U@0Z45P zN7(EUVCFEwKs%kgdQG#@z)Mevr|7x_L`4nJqF}6x=@m%jK=@5!&bi~iSe;UN3vjS& zm4+PYhu0T~y}Q7~c5C!T{GgK*fI5YRV13%@VuYJ++ig?FUYi%M!Yz9ay-bmVU@*9F zfb7(gMc6#Y@z>n*$Aq6+_iS|vl78dt27g8l#TP6QwrW>!HA1N-bvdm0%AX71OM0F! zjm!Xrrq(uwcrt0F?-U6rrx8+-aRlMMw2zb}oWAe|_)<9UvFzF03s5ZTs+HL5<4=Nr zaQOU$4JSDe)@2*c%l?Ieg0AJ3Wdbu|$`a`)8(*;}>}JmPNMGISSUX;X+r{_?dUX3J z{`b=TDLW7>B!$Yd9-@Oe=+3ICLkd@YJj8R;KW_Bpbk@bQZzhGlE_Aj|sl;Uj9( z4x&@+CKk)<%em83RV^jgjTgM|Qt?$5={l_Z;ZEm*#l`g6!~;m=D$sM^t9oEb8SzyV z7mj$Uj%KueY!pE(77+VuwA5o0^0JrJl+-Dijb12?vQ>3}BL{wSdTLU8EqWf#gBwUh zD;Uf6m)XkJgq!u&wYhm6xV;*hbmqFZ=GP+Jhm+F+pVaLXbKo5h;8uznRFBqVKJ1}P zFl0arvpw+JxW`do$}nK7{&YyEUwVfPKcTx4U|o^JnEP2Eyd3pj^2liyEA2e)lDKE$ z*7MCpMOV8c_eGSLW}+3VXThyl)%!LPTTT(We8zK6(!;;fUk zjcOD>_a=9SpikK!!g`h2KM`BIHshN#f%@r+(p9<&HoBg!x~gR>GYsu0UZq=Eu(~}l z6aK9~l7*k4ubqcWxXSe|$5=ua^tG&eff6T*FW?!q2A0^2oZd|Rjs7z4eCk8qayVRI z;d;IB^WA1;9WpxZ7ut?+W;X@QHx#Usf(VqqJp`()b%ZWm8~f?12C0#AZsFUmKWSZ= zjl-b01x*3$eB8#Um24Quc@+Sj>OdWin;TV^X#%4;#{MUm_6`6O(1p_d&z8*J4Wc55 z+X6afh5Qk6MPRU+FH{EQFxztEwTSVE#`FAiDJmK9J9xQ;LvqE{*Rm*<$iv|nhWyz^ zgCF`-;%MZVcBMln&h44~-o|s4pG1~z^pv>8EXcTXskU)(w|)xqYhil-kpn6Ptr+LW z@B(E)A13%QPnAYs3Jk&eJBE!amAUnR7U7=B*X2PRfNXl~=Ls9msbnzkCVycJ)7z!d z_<2-sB`ZDr9nJbKa2`x4t8R9kE}H8?i;6JTXsX26KYGjGL=e%)0$z5|`>!xiaWHxI zAAzf*RdT%UF3P={wsDOwj0n(DyRN5uF87LVgA_tF&2F-fo{P*xrvT4gefg1mfHk_5 z{oyjWOG?vAK&R%h`iCvopb!jJU!5)XvY>KFD(0o3frRS7H6nvw%NF0|W>a zJg;!eKmp#Cbk`RFRLTZ3B3(+(R;1ML4e#N4PiubfmZNfH{IpUQV@F#+sRlADZv>L4 z+dHpfej866f|kgX-lqeUCfo$eKnH}!urtiiKWuC)W~rk zL?hgZv13=hSdK=T=Y$&s`Xs1h;K7+DIAnEo&AcnFSD85*J_R(V*W;D!(Y;|~k+|;L z5Uct)ZPS~euo10T*uMApZsx(#=!I7Dq8NrQDzX7auY8DEGdOQH-7!`a+IK$5E(8I0 zX?OGzx0Iblj{V&-_&NM51PqVI0vb~um6B(*vdC?;by5 z2lV~^!J0o*yNLPL@zwel`pHtH$hE4AV@X&qRc%D6qkFx z_;aqExeRd|idjMx2CC4OtAHiI^z5HZg`9YV?oG3d9}7LXuH5gdHuLd1&&xAHFxe0^ zqaK+jD)Id`5t*L@Z9Q{9-t$2rJ{lQ7cil=`T?y!N5+0vT?%=cF)e<|9f_WGy*t~PK zO?y-Vyf=?SbVJFKS4^YlJ)wlO;t0erl3owN^Q~T>MhH=h-8U^he*dJm^?1sG&mp4q zGx5_Jpqzvz6?_S}TJIqEyGF}cK9`a$<86+)pjwiY`JpRCKzy`QjgQrA)}BKc1M;%% zaDwKa8!3QkkjQX2nEfFNUPlVdQ_yW=KxC~T9W>x|^i#)6RX2omfv~CdUh^j_2e}B= zj^XHoAbd%dkA}! z?Jw}7wADkXA2a9tAulZTH~|y9F6XqwebT+317oEg@I*K})umR#(ZaGPi8U83S(zw- zKH<+I_y;6@#paLe5|;PJa+Gcu`c`lKa;1<{#@@qmc#*z{fFD8DH&9)v?@38{Lr34n zJI@7?D6e})vbuP>)NnBu!lgKX7`cG^;02`j0Wou~2Sxo3lM{r{dmDw{?jwfOxj&Rg z2gCx*fVaV4V9VKAmo4Yk9MdNf?PG&Wcib(-XH833TbJt8$6z(Hek}^-Gmb%SBu&oY zPmFbsM?0H!sRyM3hVP5GD47Gx3PY_25xe(deuk<4@iHPjrIbU{)-8B$u^8?dhj_p; zDi?d>%iV-{$c8XNtnQt9FcWtvz7g3coRVM8^IzORdl z5U9)??|6Qfjxsq5j7~JexCo&9a}d>vjv>=$VM|Wm970qv50d(B1U=w4tK2a;)Z>x0 zIBjPTfPUUXKDj9-;Trx;>+z@$M~A=0fWHqAU#1yPr2s9V8-aO#5})vir;aNooJ3ZG zoaj8o!=6(D_$?Kb$?q|!1QLfWAgY^=SUh};iVx8*jA;udxKFkiA7YPR94NW7W=k6MqG3z)w<38qk)+e-<1E<$rb=-K1AOgZuA zZ3vAgYdK1-v+@QNi8LTEl!R=(9wYZZpn&!zu-1XFjpY9o2I;nt9^%O0?e|4|k=q?F z17+vj)QMMERgE?g_`4e)BZxerO*~Fhn*+g5f%C=^>*6V{eEQwQ3rmuZEl*pIJ`R$k zJ^oN20Vvdnv$dq2yfq9KT*sAejZ^qVlAO$MRmjLvSgcD9bz&(8?v8W}V;~$7Z`M>H z6#sPk9ivh1hGMco?g$1r=!z+O=J?S_@`M|Xs+rvY1`}VQy zH&wOp&5}Bx*T@OWQCSnRm`7u{grGmAz#}z<{kp7sSml>qv1F_g52lHCeK*;@afecPiWogI?D^tXtU!v}m8t5^5Jvo=zPXSfMiP zX-qO#TgHD-0A|_#ydI))_Hy4SKTR9Adtp4H0zza2bB)M-#CMspAmxsZgH1MPW}DQ% z+BY0Xw@~prmLp+q_lKG*Ka(?++O%UQ^GCoZuwUAY?IopgLL;U3!Lj!`7#!(O8J$im zc$O>nuVrK`F`*FhHjxp9*q3i`p_hw`3)LU#Ki1zrB5h^d{oMEOpNDOcjfU?m$^xj* zwE-o*I9nIHrYVFb3X@;N>qrF9`}W78nAps$n6eourNA^HwztdE1Inhm-a?m}|5+>a zAb$E<4~fQ|cVvUJS!S02Tqs9&h00O4{_qd=y!V*@%;D3^S}@lH-WxSKE?ZeYUDbIT0!4;U)H0T^P9kYmPF_{i)Q=UA3FWv;NylgIAX0-s zn?nGAcZk~z?p-Wm+iF^hT5?*_8uPP-|B(A+9;{n}{Pw+(6Dq4CzOg2e{QerzEf=dr+jYZ#-TO|vR8 z^ealuP8n)bXGS{^7GUmHR+<76*;f;w4~bSfFtQlN$H!tL4axrkuSk?G`)8Unk!VTI zEldzt3AvkJ72^IP?3Lm6WiEvjFNb14kX>sVL_t=AOY`;&mxl(IZxb zvYzrcI$bd;{hJZ&3+I95Khp#tZEFO((TCgH2CGG%dpq_o|#wI{Y;Ch3om`+9DQhSs%%eCTF$h$S)HDVkSD;&@!nq$B&Ja^2@xLZt*%ao6I%>IrZ)5xrFb+4vR$L}> z8RwjENVaY*1=#lqt5OSXc_UtK$kP-xg_On)y~nJH<6s|Zx|UfZIDRsu5Qu~;W_sA> zd({+s%KW)=M$|ck_9aD71hTaB<{jNQ4>qqCssriSZz3z+5@CaGYGre7X;;K?o|0)o zDX(D5&Dv^s|Ir-TzTCtYc|7xnX7)DAIxTcHI!DbC@rY^gyfhm;5fF zRT;?0lwR+aiv9gQ0US794c*(1kWCig`^*pGwdNiZXcsWZcYqcD6DL8RfJ*7HxQ!g8 z&&z|@k{zaGW>VcuDd}vNP&V1w(uS1U3Y)fZgQBx=M^0ps+fLzzoYWU50fCqjQ+bK0 zzYdH_Y&{6uA*PdA_)PVwLdNaQj~;M5#k#qk0wIym#Zb)`7bL7~WjYx)6Jb>24^ zBF{Ea=Y*5h^*}Gl6LJ>H!wns61h>zoc3Idw&tCum2CP2;7HG>`ES0@9ep=vDTg1WB#QQFAI9nzy{>L*>xMYeD)w9h@#kiIpV2r66E8}-5r&4H z`iuelQs7KC!(=qreIv;YA7%X;fdPh9Yefu|;KqJuol$DL#nfW~s&7G-RBa{(0 z_jiRvRG|^k~O9#lW?L2ptQ^k)2r{fLv8x8uE4N7E2TW0|XBZzHN z9Cbya45%;v0VauIWg_#qBC`>lFAABre0L2A<4%jg zYT%a}p;k3@d%wo&?VR%AHGLlRGlub@ajFBg37LmWT@vrn$Y-`%zSIqsUY-O`Vb-w; zRNFX0QHfyws{a=5%;o@9o;5@#%yx&h$j=g5|L!YV4iZw%+GGhKrRAY;A^oB{S4jnn zLvm4*Sr;jl2M_p2K3r~RWWxed#TQTIP&MG>UC7;xvUi0Z?6mO<8*6@FlBow_@u1ZY z;!JO&tGobezW`MBrroOcT7_asUU^eocwI%TNw0g8v&S6yhjZrFP)a(A}Vf>S)8i>M5B7CyEkW4+AKYLbph)92xacBcQV8>v748%N z(g9s=oFJ6x+;GAWv-d{_7u#1knaMt2%7}{wx2gnftb_bQ(_3xHAx@MV8B8LelaY0+ zN^(Q&dDRMR1qj?Tq`c4No&0`sSIGu5y=#@z(M>IMGKRwa_$fKC2)%oPhr6`Oh=^pD z^AY40ax^4c^Fr0KdmU6m02g0Ldy(~sE&kK@9ud522ZtFc#{z+(6=X)NCJml(b#<;f zIvc?TXk}$IU6G9FmVDsA*jm5$cggOL4zXw zV};M`Jp=B@%G84E2IY<9kn&+aNIstN6M3ts+4Gs6@{5y>Pto!=EWF^YV8Q@K->3)G?=GkqhwRN5KgZXU`;(J5BfVZ|A zJ_0d+4Qd+Hb!l)5JTh{fQ^(iHB2d(B7TE7Cv`!8`Fq34Z8ja&l&IZ!we-ti(?Dx^apm(R#PRGzkegACH0 zhLoAj#pR4H#Qmgx-;zV6bFC`_UKf5F_!(0~< zKp7+73wmSQ7-Pb{t4NuLuEQc$c0iw&*OZ_seUOsQXkgNr@0R3%>bw86(bHngXA|+Y z-hkIU^VzQR?v(Si{Nl3~`Lwy+JoH)RH}fT!(nSuxeG|V?Iy@)|LHPLlOo6&tO8Vjz z%yujid%ruX(h?6{G0n?Uad+EzvGNQeB1(KHY@>UWydp@$d)?Z6hq#^=!4wZNP%}Qq zbO|=n!L&npL|zmm+@&r+KkOU-3IPBVWOoQv@HOa1%gMpNg!OJW-K65XgAUO@=bvF~ zC3j|;*o3Wt(-&{0`mOSDoSJZZ()uN2G^e@OwpEu#M%0XZLd;9W%PJo@is6^or(S<< zZ$%E>6d+&9W`a-=j9VVCshn`Kwh}^o?~dxaBYwEP)PO=?A6(?tLM;KI%(y7ZJ&Sn5{Xsh|EOh3{PP>C>p=5J%PVvWA}7b+$xD8GvFJYyI)`P7ClTt2mkO~#W+NPC4YgvfIw=m#(LU-Rb_rZ=HnYTkS%|V zb6KBiG$$s&fz03y`rKGKWuvJdX!hLoIKT{&0Blt~s~vDaj#IBE*EO>Oc3i89(C_bj z7e9(hamN1UApRH>DmhO+Y~Ef+P&iK$M?z290|iFz#b<d-Q1|bx}2>I#4tsKv-H(FWzKYu9ziOoF@6ehf`=N(Sxa_ znQ#qj=S&8hRGP$%2m@Y+jm9Dzt7uJ{wYZdG;_+^uiYI!DdrsFkbZVNd9|gp+gkX<*j%cL+M@LRLnC{Q35YR zy>7bk1`EtU=03q`tHaNWf$i^xdYn#Vx3*etr2fiUvE$f3Qj8RR@7&utW+$3`Z?2#X0`s}@6H>OpD ztZy}uX1FU88HP)H@e0j}Mn_1MYe6--i53lCQ@AW0=A?c<1Z27H0Dpb`=Kv10iGM3=-ROdumA9yn^GkXi1`orJqU%4nM@*=Evm4;7Jv_ zV+NWFc%G=#e$i_p!NCLAdL&IZ;KX3Q=CkpH9?JGwe-Tum|{S-VwZ>V{a zNqqPe-$jff2=wlgcHr`9$=D-5(of=BTB#xeLad=o6(2^KqiOa=0Da6vLS1 zP?5+I^bkemef+-nm$pO|nIV*nrgWzAFZNsb=JOkx$VB~JtGI=J8Ui92hxm_Gc~=1t zyT)vo2^_(lmm|LN+GQXh;a`p93zLujV!J_goK^%pi9hZbbAeay&6Dpt@$^b4;NYn8O7Hhc+s=p%uEDje$fxQK2Q_TiL-9p}96 zs?mJv)h_?Aiv-nVCKng?^{A_=(-Phe048E>I8t#Pm}UexsS8eUgv#~bz2@b0u$9-+ zb%sWWs?u7+wZIg2zQ1J^{+GQ1e$-tumR|z17aek_2^HndYk4Xwv$|@6dxjLk$I#I6 zSJpDUMFbd(i4p&R5=(ZXZqlDZSQD7Jfe!;^X;vAxcE~7V67(N9er0?QpyncUfu}KA zPSYcMv^^*M`#u3Te;E6%$v*o2P=SEQmJQ^hS;5M}cr2(gJQ8o1?dY*F0|i;TPrG%X;6Dk1bGtxIWKYg3F+Z) zsHbcBBr^nto6;YosmlgG31&a|T^2nFp-|gW4Yi0pRi2n(N5&=d>81@~$6-DTs z1>I^#dF+^_Dy;EV&5GIayNUam@J*{LH%kgfeJ}Dkl0{pHH{hN@jt1mq=u0aGB-~X` zZ#P(uZh%%bvtPUrMjpSys%)jWFbW3xw;8M?m-S55AcZnwu@WnAPBp6(*tmmmW zw1x~H1RQ-kwphAWc0A9KZtYL-4>(13RFe1Ens2Ax-sC(tjf?bgoegZ`if?_f$M|pM zOyvgD{aB8mK7yj1FoWHsy5mu<=KfKALW)$LfoHQ3Go!nJYtpQ#e&NIcCmI}bXYQla z5$82_d%eM}ndGIt^qly2_Fwh98++UBt`1UIuLL+O0(@oP23KFQMC~e&O7#g!kW?;j ziA5oDSN!BHv1r#;9q9{-&BXJGwa4x>H;>?KLF5~QTb=Bd6Xj&|X~g$plUKh&N}M@+ zW#V8~ESOA$!2dB(|Q_Pp~$W zR8nlx4K%Fd4ln*Glc`-?itfk<1CpIc=TX9foDrw5IEV9^9d2)rVHAdQzl6XRh9(u8 zB*CJ+-<}2 z+0}r`M5OK~me5&}&H3{ev=F#h?tn5SED;Ep{G!gAokP!JIMTDJ0h{K|I2pJb@PN>J zeW8MJO>l+`E@&hd)r{6qX02v(5pH#?OaHp(b1TjQ=Iyib9)aPx{Mrl98-0I%f7rM0 z;nQZzdi}2fG27(wQ>NNqe{`Zb)fP3&eSs zQ~kk%a6rUSjuL2{G?>g$o!Bv9{On8K@@i~Q zWYMn#rFJhyqi%$~&G>QwCSK+r9!UA_x{>$5b4a}Xv>hQ%v*uQRy&^J7K=AASWO^K| zmKtqD!lhhlqKCUsIe}7+!~J*}#O@2P)HD_>7SwgqYnyHI-Ugla3BRSPffeV6IIt_v zvv2Z`!{Dp{SGltxyDdF8^sV5%j9p3(;J!*GjS&KLB`7P;p)4Mz&|<)8%GL|LF`7-! z<%av*$=D4gvaTk=PCVYL*7*24vFo-TU$>52hs5YHB5+d8+|Shd6ydyv>X&KHzjua< z2;#^y{Myqk$e)U&r^}c)dI3O&6BU|x*OKVTI*G(B6h})W#xn&AmT~odsqplQAHyOe zlxKlN<@x*&s8=i@x(b4V6M`}|0?L1Wp03ObQ#&1>Stc>AJa4O&`ZtIGc^{-Lk&K?J z5H=w1FU;d-3=QcmH)1bI6y{~VVANNEOG}&L=fve%M6N7y7)Hdoox-5ghtx3Q(M7a(KbJ=_75+Z=oJZucUdA6X-5{FT_S4$l5?Y}Npvqo6!(iN%ou854>jT$ zx%)y4{e-T0I#TRzB+sv-Xoz%%#GVNy{GFx0)btr0R}PnloAdW{U9zYeXYV^$thNZ7 zl-E4w!O5h6nwr77VBnzfe}3TfMPZt8M_KE1Qh-hLD;{57YVjZQv=CyUtZ@GR@q^1a zW}H~n&(*DuUn!@V*UVwg(|QwH%&)D5HHhez=DCZ!OB97%5Qxr1tA7qW-GroOoAq;j zDvKqM@u;~M=CzHX=yxug=qprmIgO`MbG+gvz4`~~!LVaytaqx2B97l5~D2iXxC9kj(>y)6~g;pGOt16ii-O&FcJF~TbFRK z(wBFa#6>S@J8WtG2#+CNet_d(0GW;crCo!$-lwhh0F$!^00gt{vGB-~z_dbHV68^Q zravWCyD~XpHm*lia}L4oZJ_zcERX!bZ34lX7PnyE+}8TsU@_)8oT$A~kTQ_##qSsR zQwfN@bF808Kfi)`nmo(VU>nPbiCE`JQlMcdcnn&uRhp0tfQzUO0t)eA$TM(vYrZBR zFeUeTlg-R6v=j{?*xp6HO)%1?koYXV%fSKsc9l}dOdmPa6^LX*Y(ZY^XZ6(N-KHkU84)=bBW~0@%at(hQ+_3I&d0lz(VW#HYmOd3 zG&pSZM{2yp;Xv#Rc}m3v2Pu>u+O)SDCCV7{s=s!EQAlGlWDoYJr(@f;(;akd+qRRAI_lWAZQHipv28oqH+{}|&-;Df9ryQL zV~vfuR@I)fM(tH|J~f{zJI`k0ExywXR#e{|5-{BT4rtUZs=%lqHQ`A43?WV_ZD1Mx zR+$_s&l0o}V_~jo80nLC2;)%nO^0uUXuzS@fx3&ggWushO8#%nl0jKLJ=G1x4erIIvR56`(4U@~J2mHtwUs*I4?*}6PT zsD4U}8uMeoO};47A#r6+ z0`QLt)cPr$`>ZNfV(+(e`MR&^T2)A1Yn_caFb&$a6Uu4DqH1e~l3xjQ;=%bS#!ZO-5iNrp&P21v%-Ttkbx4OfrPvk2U0D`UEBBG;!#93(n$$ zzX2MNd$BO=SMT-=78+Ow}*>dekN`*Zz!@w(U ziLiSeYxP*kQIgWt3@$jVv-MW^Si&IFRa1a_14rb&!?01KJ>ND=_wY*P1NHIB=>siN z*8={b1OSfoMinkwEc%4z4MMP`H~mq@?>rVY>nfE;9xwgV?vNUy08|B9hSF9fG{~rC=78#-oaE)wnK+{Mcg>8iz zWX--Ra$2AtSo_C63F_2O*~qow$Qg90!~ zY#?ROa3dQey8^gfLTLSuN1*3oQHn?@WW;3BqX+xGH$8Nd5%qJcRZQm2yy~J>Oily`B%Md6~Ae5j4&4=`z2;Cku<9s`dO6}ZG z@!mOjTatc*&XmeN0AlQSp?6UVWp#<;<3^{-zT(U;J-MdRK#Yi z63ajIJZAkp8$4sZJH~oE_ZkmKEN)$BxoZLq;QhpJrTYY70EV%6%2Z4U?C;+a#uAAe zhrsj=JM64g04t(etaQ3X@O#QBmN;1PXM1FD5pg>RIPLkLz}^XL=q|3WiZJu3sbyuP zo`9CmEXtiSImf06WNc|B>|UGfkWrFp;keLsO^|{)5~ZgCpBI13dt2}|5UfO?PLHDZ?o3QMv?Q>3X!uk!aopo@rWzQP{ge`{%(Agqm(B zE`QooLrZP^9}&WMnY*~Q{C*zsFVOE(g|7)iEn}f}2Ge6~dRW{{fw~(%f30K=n??P4 zj>bDNI=eVv4#{!*t1z}tKZyhXW5*1|tVg_SDAdQA5>il~Z6m*9#fcx3zvCqW z!JGUT!pCb-H?Y4Cjy#Y)5fynI=M}KOw_h^g8?(~i+Jj)%Kog0CC)KH8=D5an=}OM{{yN(VO_wC zF>7JTwQ{_9P0?(!Ae{jSh%su$@5lDPYKU;<86l5MP^g$KhMC(Zc` zH4hI`2Kr5KM8gH|98W6RKDIP>RRxs`B+0-~-FhYxY+DLf9y23y(e=OG(zmvQ0c1e2 zlOwVo*$XI8hF;vS~Iw$pKE@G@I?rpIS8pK$Mj|9Dlr5c0XwyaDNIS73HCv~>)Mh`%3S zJZ|*WWB)#01iT|m%QGWp1H&a?yj@d|2L2aDp|AA(UQrO2W0AjBUY~7Py0Tw9}y0FobFH&NeG< zUe8-+-);RGV~TIwixs1O;q;s&}YZDa!YlJMNZR31l;0W_zvVP84MFB#!3;~%a4 z384g&aSr zL)Cno6<%z}m*6-3r+uf&m`jo{bq6(|iIqlwSWLI2xRyrl26yqzSFf*q*A8nd>jU!P z%^*2x(XyYV9&+?}_CA_G{`wz8~I1=4fak=#b0iTg*4;MKB%WH?zE_b-_en0PUXliBDv;wqj2w3>8?S{hPVvK^Q?!b zFim2Oh0iS%&aqMTZn3u5J@viqT5XDJfcx%dqS~xuUkl|Bif|aUG!rOmm1-6>jU_FI<~y(M?AO zo{t$F86UxRw{}Mq8wwiE{l+5@YnY>H$e7A7Ig1H8Xa|b&E*h_UgP(#Qy5H|fw8!x! zUs!PcwWUpi>+8RF z3uuc($^QDCaih|kDI|!?y+PvNCg2ur{E{x6aVLXC)VSiZ@%r1YK|4#@>747nhyh!A zB5EAxSrJA zG!AFMpGkj%zaFnO45`TZKcYIgC!XgY-^*|#5+rRI?WNV;$H6&lrq0vt?DY!klRBMWnq}3 z(vBGDDaSm=xch*+<5Wg=HK@RlKt^a3ZGcjwQ($Q9_fiu?8{o;9~uWquA5c!YX&M z4uj(Klf-wpB_8U#rcm4sM2g1xdb-+HXiH4tHGk?5V~WKICSkW|jIhs$`&K)e($sBQ zzxSvI`)QL<@HV|-a@f{E1<(HYs>UgA%w=t&zn8<#!5)Y|bIxG_mO4O<*D}r5Y)tuB zKD5RXJ$yaU*Q*BKb23(6axeJ`zvWqixb&v8#55~&sEBY?f*)$HhPRQwlZFZyMX~>D zUEUUbr#F)|kZY~ylZ??gcu5Qnm{^8SR@6FEI?v06rQ?ekWuM+J#n85Lr1HWI8%@r! zHaR&pDDB1o4bU@N()*V8K5^tWqq!#a$~t?$w^%$K0VGe-3lByHJ{(s2xG^Ax0L}|S zM1Qs4>|GZ)n=uwS$M06U2+u+iwIea`bos8&x`=Fh1zr6&2Q{C=8I20wPU@x9Z5Y1B z@bd%{ZVg5>e2-SjcQ4vXWNp>uEDvFeUBp

Ahm*@0j3#FU*H?a0M4)H1ws-&}(Si zFo^9O_zfW;ROb$NAGsgeA#mO|z*$xPMvR9RDYz~QM-TtmbN1+|N5Q++zcpav~)SHpd8 z{Ys_95GJ&vrt6Rq**ZMoX=L8h838u}>3-JO6?R$JciuEZA_uhRO{t|Ta9GPy>kVRh zR*_sN({-OP`=K~FV#Ln4N0J)nz;5<-zZfj5MrVZd3)%o`UdcbA zn%#9RSKZQoGN%%>b@d)+72z_PB2o7}AJOow9Xny(rILRe?Np|yRk6eG7uOotg1^6} zcheBD;XKU<9zihNrhgkUZfB%*(I)n0QxRNX zYp)Q=tt^4V7|HQ#?D)IzJ*Tx|}y))LFcZP)>D(}BuZsOA>0ETYds@#aJ{4edjt z3M$r1%V<}cM}6cJsDU;6y8=CPsJ!RU%#f}yT1|TfrMWMokq_pfV8NhmJ0O7Jw@(fQ zF(QbNr~r8@*)MIxO`VP5Ofh%Oo`+%OKU7>4N^A1 zP99l8`^J=^3D{t`VDx*d^1|<8JTN@uqEYib9}SK3GC_*OO9)4-#u(q>i=K2yIQ@(a zvdZ@(#a&uyeo9CRqU%3+Tr7I8IAwqzx(wp87}0_!aV!2;4bY6FmfSWfX_^8km?|CQqasj zm!Xxlni_y;FVhtL;EYwCY5R_NUdBSaIszI=hpi9GJD|lQ-FyLKAWBG4c#AXN4c`=} zH;enA`*OFs-#pssa~-ujq1RMR3eZnSSV34K9m5hhu=Kt@-iwyj8gC?9$5||<*h(H0 zxWF8JqOYw=Vf=dOw-wCigJKfvkx~I39MTwD1Mr6mA&aIZ~8x^vU1%t#*!p%l) zsSZSqR*BEVbqgJ(SxaJLZKedm*|A}HtwnQpd&y8(U`yp1^E@)qx>~_v5ew7xf@ww^ z+$ua#?=xrun^-+~H<_}Ey@V4=VNz=D?ABsTA}WEU=rzY_yfBu4*Rv;uZGGDbL<(!E zgnPG3@oS&5f+~%xY&Ib-c~nHkm)W>AI_p*}BGBYlS2#;S6U#;~aSa_BPGrlD+g_zxOLl?d+nMV-H`S@>*s;#%_K!0Z$F`_=^oxVM6| zZQ|Aa>Y|dY$_zwG!aX0`j za-`~N%!V^(>~6L-FY`qMVmb4vc+B|IGPNrL?$y3YAX53MT+kciPt4#ie8*xqzPbDU z^JxC2(aCL>YxDMY;S%zdVFyoF(mL1ZI@i@LcRUtk;>BZj_7!lVE1W&vetw|8YcD0) zFXIQqJ2tJ$z*!kUBM-c#_N4C?ataEeiS|AzWYov0B}#b>kYAID>Ci=|Dd{CXfdeK6x77C;1U z%v3^#5PBaQDYM%1s?&3MIcJUQ;Rw_i9J~H5w{ecurU#qp<2+aTe5vOLw-LGX#8*p_ zB4hBbO}vzpO+`SsodKa++BC58%x|Jk*QYFqAl^D=-vZ2H0Q_Zjd(}zu)ww(`_lL^^ zu%5*GDlE#%*US^@ql(()P{@ z>G!g)520S`9KYvhUX{HqP#%Im7AAG;^BzJjS8`sZFH5Lj%5YBR#E=&5&4UPd8bM@N zQeGu58&IAIuRlO0Uc~{dk-Y9;FQrkd`PENCbtf}lJf*HYh`m7q9)i6=?DiKANIG{m z9JgN-##erQ-;y&_b+nX2zYT9!`Ra$!2S-X&eb$T={K^+9^>KuAXd^@%gXlGHe3Lvr z2#!MXi+a(KU?w#6ZFkZ0uFOv5%pcYJuyY61$b@zf>jZc2v}?j3lP{gCy}mL$ko(Ms zAE+lCIM(h1kH-|TXVQqGm8`V6BM{|h83wMtCs{H%lS(lPgh|%B48X*lR!I0}T@FeY zd9vu@_cw;#H-^3lRVG;gRgRXwx{qI6t+%m&%P>Q54>x;@mSJGg`dTK|zwq3c=+elp3ZA(Ghj;APa zpk2*($;C4#1}*2T)rU}<|1-)x;3hKBr>M$Pw*y-iwdmeOR6Q>MxNRc}+STydN!KNU zitu#0&i|r0QN+NtC7)yUGB2v)nGpw=$w6R}d9Bi~!#+v}0*C7R2!uw>v*-y@=}~40 zd&%WMi_ZzzQ12-g$PQ{(F1ZP{=kNc#i|890P{lR3HaPlTV@t849Ht1g2LU8?CXb&$ z!&{M|!bd056R~J|7C6uZP3ajA*;c2p5KRXK$3C}cd_LDuq-1RQcM#jKUd33J;Ovwr z9cCK-3~|vi$H3IG{ff?p43cWxf=eW)wdPZD66QlKa-=hlyJKjT>4HrBrW zr0BQ8(F1geilRSKz*gGUoPF~{oUu--dx-qZd=#;@FQBQYox!DYXQgvW{c(49rTzVA zhg@W-!4uM)XKh4pD1evhvU-u{C(tSzr~1aRVEFIxC;~SdZlVH=`Ry}zl~C2`V??1k z@=-%D$0QCd=`HSoQgiM)1hVNfm#OJ^B-_y7TVUUT-nhGF0Ut?6dC!8j*P$rf=x$j~ zd`*6JRRZ;;f^2d%abLcLzM7ZpFDem@@KB^6lU9%tLF>gHa9cn?z27@H{XSv0-tT2U zor*n7z@Kyj{yFvhDBi&$bFPz-FhgR}7wSMBFt)w^IsfX;bUL+dpS~0XGBSK0rkLbs z#7l7Qp9ePLuO=)mXL}JuHbINCEQ~w`g&Xw)ge}k`L!AN3T9`$4cUXs-RCW!adLbfF z3LGR!^R4XEpD(Bo2ZjltbW~mz>f-lx0ad~{=H&~9qTCurwhM!Pc_hfmYw-POLOMM{#@KenNvS6@L{mO#QC1SvER} zidlSj7}cN6w=mx^3>-ACS7~VD1GJ4Z?m2}y4tv%0_X($%kpqNJE(QcYNQ5=<>1BvH zE+y-Lf8j(aJ{YkzYX~^|^Ems@$@ke01m`L_f$Z!cS2L$M9*as`t>}l2SGY_{!x;%k z^0Y_%jhtG)tH@%|l==JdsgXe;A7*cK8^>470o}94sRVf+)>D=;F?(b3%!C{feH&vh z`qO90@K12~WkmU+x_r+?upzOuNXl@yqqs^_NWVEWv(@qE{6cdWywq3EPtvoDTxB*7 z6y)vztBy`craJRPHb)^0W!POf+HAh?5DH}hQHS5wG}&`Xf15tsUyzgoQBbpo_UeO|MLSwjLCE_!BGi3JALLpnQr_eu5O@ zbc@W(YWkYKwBt2{!RQo^^SdCzAyBI-X`Mh7NWk&aU3knH`jLGmrC{ThPQw-v5rOz9 z28N?1DpC~co*Y{ax7ttIKe)|w-S*1Bq6R*PDB+B0DeH~lIIfO3I5?(|4=yJ6k2*la zb2>)R8nGECv3lr8hG$kN4yx65qQXLA+c$W~dw1LoUiqx*81;ErPfUE|h_y zBgQhGot$kxDGfN}h^_RM_2G2!)yP^B)^peEE|ObyxqU{sr6U8DN|#G;rfKa$0ZCC6vFwRSpx;adh0U;VQAR^Rrx= zZ2=t_o{G~(8$b?jZx2TNWL#NmlAp6q^E^G)ALTOo?jJt@Y_DrvGGI1RB;!{RZ$7Zm zogr7CXN;*5N4%W@-<81a|BV0&fUuK+W~Kr#It0KhQ--Dl$)D6Zj%9p#2>1Nrhu8*- zi6kKt@dJ#!l52F&h_0R;W}UbLEaFkBGa1~q@8l+tcfjo1Cvlvf#=hfGWpt5O%@oUvGGwDqQ%tifee_ zAAjzE!KBEXlhn4yLHicq(BAmr%p-p*M(?k9IqR85t z9zzZP=idpWN)24%qe*NNS%VX}@e+2bm)v(DwawD}#bORF^%yFKw#} zUQ4^_W4)X8jMVby54+Q%ttI!X{b7TDu9=aMaw(Vh@zxv<1ozn3 zQ%3Ewai)XLZ3zw@AdxiYvzwSK^6DV7fHO_@@bG6g4FVa-1d%a1>6~=y&p`bkFhQTT z1%xRkQY_aip!?_c+f}&=!Y@t$S*cgDU#?l6@M|FYG?Gq)KtQ0-P$?tnVv-*;p{c=8 zpwQ4BUq$2YIW?MWK9|_=_cs9hOt%Jj-{Vagg<$qa66)?H5E%v{L9d85?Yd$d?;dfX z#0F}s`qo%Hjsr+ngQdLp%bDd-%kXK__2Jsr6X^x4d{IcSv-Xz~*Kmfu+?kd7kmGNi z=l&Fb?kMm+j4~8>R6?XTKSIAE6clk0vVy%l!ujO-nX)%YGabZr>{VTWOnS-|VW^uKe$E}K-eG`jZVV9~$q%dV3FVre} zbsM`pr0)}GWj~sOmnVk#B+$aijw@%M`I!u?+##UE&83zwHdW(uq&zLEOFsG57{@daI< zL$=~01rnYDSs`vx2+BJn^n}?(Bd-O%`chyKF~HL)je`@N*5$)1JYil>)b8)W}L=yP=3tiW{c zb?SZ=%|BPo{ozcqe5315raA?+Dxj7VMC_)xZ6*@@1Y$0inK)~9_M!;fdSSfUGKIz` zamBXsVMO#Y(u4|Zk$YXJWjGIX}|6sw*a>Dx#UL7+3*p80*R)G6ERZk{Sbk?~LURJ6}7)62}<8C*D80b26#-k%E*FI)-yeyDfwT0HbPJnzDn<6L}nwDl|4e3~)cAjh24kLSV z>S2N#0zfEMPM*C8Z<53HLU5&=KIs7PicV*BR5)a60W5Up{3P(oLp=`maWa$S$G!StXHpHW<{Bn%1~) zt&Op%y*$n8RkT^Em%cjnl8}B;)Tl8#_*Ltp0;cyoO?S*r>^fx?yjc`TWV<44u0z#f zZyS6umUj1wVl9but^%X99p1Z9m2p{SzUAw8?TW~~VY*jhrL{ZtC$&)Fsp^_zxyN(b_u_WGdijr8 z+Z9nyF^&c0k9F#xUb4;#^vjY$0;sI|7|-tj4VnFg7Ec-iY94^ua;Zwf!*&fx)XaS9 z&p;!Sp3`#K;a$RmM=Ia%(cXW94<4_M9!S1wb4_?(DN92_z2k@cZRNBeNZX~H8gmT~ zJGuS%!nC?YU4ntx-fQRXRhVI6P31HJ>UN+)!o<_xS^Zd^ax!UFh?*yq2R={-PID7S zsHYcVW-MWs^gEO5Q&qr2oa}?F^ikX-Wfh|o>21NTz3$GnR#FG$pg2i@PjI7yvD|T zQWtAlrK~-6^WPL;izQEye1NYRB=m$Tj{IvI1-zz1JnVw7{IJ+2%020`{wMnIKjzri zG-(zJCq&2JlEOQ2#llbOr}2@wiJ>@Ecess2rIVb~u8RqL9~AIXAdu;S*o84gU-LCD zefet;wgu7a3Hl)}1Q4 zBCdQ2p}>N@0eAngw-F+R!Dos$>iCRMt5Wraa!7=A7t#vMd)$r;vVc`lMq(}4F9y=LDVn)7i7ZT`#?(+#TI|M!pIRW9cLa=uUb8b z;NZYSSUudWN-%nXahf$uMzYR-iyu7Zm`D$POt{C26X%+B4^ez|6=n}WLf<@0&;WQj zEJpFWThAe0^r445@g7FF0?SYaUN4&Z_6z3i!!R_OE|VDAN8zT9i^6F7Vpvb@bUPeo zWGePU)kMv}<`-i>WU+&Mp*u;Nl~}_1JFX4WV$U*#ej}~yh739M7ntyQl0fk zZ-S~|rsGdugZ1xo%5t7R^Y$?5;VfaZ`Nz8yekHrTwU)i12n>=514)`DLauTp5EgAj zfkYxQ67~8hXGMOdChehRsD;QvW^OrNCC?CF|Egu*5cTad7iu`=(q7(yk~1%Ed=Fwqb(wJdbZW zRv0}jqp+GvRp)EdaxqMYi$(bJhYnBa#pRY0%cuAD9Sz`Jz)}sXZP=a5#Jx=YN zSK(^kVz2Os;kP!B>WSH>;9QZ)`yO!q_JngdqIsR6 zX`G&WxGSOxp{oIN;i9&`u?yB-Ym3GYHuUDI&;A`qxY|uyvBhsW=jRvW$c6C@7U1T= zG*t+zJ!I{b;Vo-P<7Ng)azxtP7+9W^2hhyp^!u$K*AWN@Z7~I=JI0GPMStZM=)n*9 zxdDM^`D9C(2|>8=G{FIoUtPUh9xT{5n@6h*e@<-aia+=Tz_V{;wTtS{qEL*{@jn!<02mZ~hjxd9yZW@MBvA(|bqFPMko>S8 zX+}NT$3TnXXRZ7;K=IpHAnd`6ixMJ6y}g3NZiw6aJR|@Nd}Z$!8nQgfG<{^dhnc~d zs%b-f?MfC2Dk+59%S%FSuA@pCi#ABnDr21hh#{hW^AIrfDKT>y5ezlB474WYZUkNC z(4hH3ANn|0Arpe7ps~Mzj3`>+=&&TaNuFg|KYp=~bRlj~OKQ(MKboR02oEBIByr5U zzOtG6#mi#PI1?VCm}jOq+mUHhT*YEzOT>V1Mz>SHM84@v#Jb@Y5irmeshVND)~y9k zR$<=2O99Bl89L$JuY>ugecz|08pWT_-Xi2dvOEam;fE7OJ*+CF$e$Bq0KiM42n!1O zZI;b}WU+8LWj|nf=wMVN1hC@$NQHDPe0BW>JCKx;#QmiAPwh>!D{irT2K1gV9%7t> zu&Em*XnOgF*#$;G%~7vv2l%0WF-AB1ZoheO^iUBbW~qVF#CZQqdt&3_S_+;pIKo2M z=TeN$Y1#H)K})Z|UFW;NR#fVV{N6<>$JDcYP?rvH4kGJp5+#)oMd%ONX_m{KZ6-JL zg7T}AsI~jTGV2Znr>Mk)JTcU98K3cnFPD!hyllcWyKU+BG%LVytdW)YQ_WmTAT57G zV%Wn~`PQ!?#GPX8`EyOX12LHeGl9vzyYG1{cZ>`Pdv|kiUeNCqq~>51f(p#sdbBSj zdd2ZO{aQaKLsi?JL-1+i)~TtGh779&(9DGP3S3irxJI0)dya%03o*LdUW-m$91RKK?fEBSrY`BCPI*ZP?!xNMv@jOTUUqg?}Tc8wy%u@SJ?7xnQhb&~f(6-csB z_LvJ8^xV~Q-zJb=9JJtOnZNvZj+2{=nq^rGwa12W2ye;nX|5|$_7RpAH0hv9%(k94 z2Gi*F*cbs^Rnwy!5C;OHZL-$z`$wugN6T!OS4$n63Z|O$+IFZXw;T*@yUHVvlYOtr zX8yc{9#D#kn2n_{DAn|@*#pG#iU(|_~_U~2!kfJlf!tqw90v7PIEzNM(WCK_1K-13@IGt<#q%O263I5FV}q@& zX390@+|%!eVxk@V>6HtzNfnxHNS{PshMT0V)RGMwrgnN z+o&srXH#GCU^2`VTGc9Z2&yjl@ z`Zm8y^8TQ!(ummGQnsgV$E_jif9F;dI;6uedO!Y~TVZ?b#8__joQkjxuN5UaMO$3{ zTpy95(KdK(y7#s*QK;71(512FDGvA2zeIIBy&8kQd;B z!G>YLGIV$-Ua7R~la($fL^oqCj`p)B^<+ArPekZfU8J=*n0RuC~%vuc-ac| zb{H12i|Aai1C)L}mV(w1ZPfWEjuXiK7&Q*zCTa&UW?i}I&@5gK6yYwS`*rCwJHx5~ z@`%@qvP>A6-TE7lp;orFyTG2wvI-kP5 zdTyO}Hcl8;<8mfD2u*s5EF!W2bbkjM=s?*H%)aQ|ev=$^`&hEbf{p+}w7)w7l7EaO%IGq7ouQF7hd8 zY+NhbH)5#zy89UQ98NHkFAviReg!dAiBcQYY&d*P*LwJFHS*E1rK`Kva=mnd+6m$* zC)+!KVBDxqxT05QAl$hgZkNQ!_dn1J&X1Racl45;XDAu|c2YEI+C9x>fef7&cmP^^$Va>t0(K$XZ1NR zUW6d+>-SRGhtQATx+}$AD?{(4VXx*8pjE&|4$tp?tnc6Ym4=y@?7gSv4%f=N5Y_HMg zjhnpvVc9;a%HLe|Pxi_sH^lP#Dpch^j2GLqLx{F8L~-fBKK<$?D|Q@&!=~-*Z61LW zmF{v+Xieq^LHFB{s>4o>57NLfJry>{>rUMLP2?w|ft&%NND)VsX$YbmUI&pyXh|Q; z=v#mwArKtKaeP*Vawdi5sre6UR#Lx&*nvX{5vV%dhJW}o>vyresOeJgC6Z1SDB4jy&me=Zj6GfUB2A-Z>9b+?Nj?d8oK{P%9&YR;r>V8|9Q#jjJp0mhW=&De=pKq z6S4jn)uD94KmKf-|2AbCXjA>CT=9>sTnib<{tlWi87C>Zn-8yn27J7=Ef){^IA8_& ziuCe?K;Vws9DAV$_7%!qc8VHg{Y^l(=^CHiTYd88e%abHDXCY&lqn&a{ST{c`AVTn ze(iTm)jDXM&1?PB{n*&J`l~5fVhx&-d?!r!Zv13#T;}pFXl))Y?b}gI^QqVkitS&0 z1m+w-)k|K%Fd>goUm$;Kh-+E*jV^hEU!JG#LP3Y?t##wTuQ*-7nDBgtR$|P};i$iW zLtHyQfvPMP96@rWlrU~ZB^lTjo;r6Foy?$zi7wztD;hdq3ADaj>_P|%*KjAS;CcZJ zC(4qgv}^y=&!-EiYh@aZY{-N@_j60>s3>f;BMUK+&;78qAQt#!dD@E4f@}r-N&oy0 zzJZ9rFb{h7 zj1T?T%7h|CQX0j-97;!CP;NycLh@LkPi7dyn-OvNF;eWr-e<)8=~gCp)^#sq{!Dp36${pSF6-^#B+fj#Q{mUv7V{tR$Q<8gy*LUyy zXtz(aSeTF5jMOB}2=E!s!r0x5y*|$FwG4qt`Z!ryh9q)yojMG*6D9<^1&~)~EA|G{ z(<|%@Xrm}Oo+5TGeV4sD?$$yaShMbzRH8hPD3qkaJl_VPFQ_}CcH@VkPFD=Ou6CA; zEk+HtPSy3Vq|ablj6}mb&^E;b2O@qqAW~{yA>%eKJVSBBd{cD&Y0;mDgME~Nm+=A; LLO#R?SpI(i17&=1 literal 0 HcmV?d00001 diff --git a/src/data/core/icons/vnote.ico b/src/data/core/icons/vnote.ico new file mode 100644 index 0000000000000000000000000000000000000000..d3fc1b70f08cfdd46fecb73eb455770f933293ba GIT binary patch literal 106304 zcmeHQ2V76x8^5LSCS|;cWK&)wdo=7V^KV7u4SDUAqEZU&L1}52Wh9bFOFL;vQ`$q) z)X?t!pXaAv?@zm5rM&Lx^K{4W-gBPk`99~l=brPNa|wcl=t=bJN5FOzagdE54iE$} zYSj1R`*1!K&It+C9*-x8vx5j?;ll670*eV^gfKy(E0JZuO8@~xi~GzkKT1*jhoPb&$p#e48xBu=2)K(BzFwm`1%`yC*>hkifi z=LU2HXf2RlK6KnkY8VY8Q_}s&;*u|<^@C+72mSsA@}JWng7t6klV6K6 z$lUyRQXAx!2Y$@%3d6Z{GAY%QynJn7D)5NK}E;fETF(y1!;Q znbb2MM}mHulpo6nqT}?#7W1pkGaas(0ki;!9f)qfePI6{P$W=z6Z9U=WBuXIL@!p`RHAv=9jW4=thN>843Rt4`-^pa;}@XAtI1 zoQJaNCp-^?7$^Yw0r}Q$algGp&kOVZ0cScNa30HN2YL>Kc8WeTy@Lqz!aOl=ETcif zbG5(WHQ#{H*AE36-VWlcy>~rqOMsk!S}Gr}DF%`Nnhi9UNty@uO$Nd`I0+~Zs5Rx& z^^g1(wS(~fSfG(W6M+zewv>-}wU_XjJ03^?s6)!9`%Fe(+zg)`TE40QH+jWya4ii2 zzu&VZ{d7qAC@VfUKPJ5*zvRRKMU$VuyeA!9k3#vh=XX~nZ^5T3y`wC6DX zEBTf~el1KVEp3<3o{ddl&>`h3>-HvNEki#Jd2a>nfj;Ea4%&G9^fndp(XR5b-g&*zsLLOB+EJmYG_B9;QLX0k}H{*@|yOJS9+E+{a z=yNr$52g7D^LrvB(p8JU!2Vg0SG2!QEg$(q9bkQ-6CT&{{Zq=XEsI_z#!+FN`H)9^{*~jwH_6Y?I0^fZaefL0KI=lS(^434DEuZoI%LmT2hwz>2 zKF|=%yQS1g@1MP}?ADau5`UfbJNl~vg5XXjh+aQ|)hQYdV=wPjr9NQT!u*l|U7pOjyQ8ps_$`D;>!{y&iS;HV62g zLh(<-59>^4>$`sbU8aA0w__wGW$yz1S)pHwo4f>lXP2%Hs3TSVzM$J?`;hDF9*=)2 z|ETYKPd3r|8$V@*kx1Crm-!`})-P;eF_DHz8?gAP{G*PsAE$o8ep?*Ne;;$7yr{?7 z78#o2zdh}T#&D+fY23I6eXwQ!_QBHSz`nMUZ`ovZb!Aii&yD8UjQw;t|7bg20qS&? z>$WvDHDt!;U|Ku{o-8W<41H)z8|`0g#IAmd{*m{~*9HNfA$5GycfOV8LcgFF{gAfB z{&woMr`$yZM#|+hH5^epOl9D zLf=w9VGPp+onExMdh_ARAI9eB*M829APt}&81>K<_4j+slr5c|x-E{6*uUJz;AdE9 zz7wAX^;7i6r?lsEBQkWV{;@oal`1GqtIrad5AkbgH*}t`{~gCZgWp>=xE5vgf|xfY ztp?*3oytGj4vxz)j#tx}3yru%9~-N)3zS96cm%|>`O+_|+m@9VLd@H)I(chtsZ;sK zxV{ewPIWxcchI-kKHb7#JOA1?%4~L51TagbUtYJ(D@cTK!`X~7bQ=HYGp^s9L2DP( zF;Kgcl^q3RHNzPBsKWsDia6N6l&*UwGu|H???_(M=cHfXsr=(OUSr8W_$s~pCbt+9 z;uoY3xBnX}fi{HgRn6Qe?$y$>@F_RnU=>_ z@BtXRnUfbsi+!!F_npE&+OUPqLKyEaY`{N`FXDSkZTU^=A7w!sG_syX#zGy!cLYp0 zmW#2woykAu?H#DqfOkCM;dhZjC=Ipzs@HO-&Uozs}|#dB1$^PZHxRDyzz9 zbr5X^$Fs5C8d^xGWIs^bg2iOlSS4=$~E(u@2Oy*4RAVZm>O6SeyxVQ%!3-RRadNpA647eE086 z`=`s$o~_Z%Y2-co4dk82>uO0Hw&DR|Yax&dP+goBo}dz?0ZIdu z23nzk+BVBb*lGb;0a^YcguEipqkx!BcrOsfD0TMxNoVDMvIFE-_=V+H>;(DCAkTE5 zpB?wuQhCS|^2TUOh#k`j?*(GSzZ#BJfkp#i-Re$+JRxt$BV7j_EkDLAiUD=IgggNW z1K}L#&XivS%j#|kc>=;YjfvW%A)c+}Jv5^?ZjO#(r2-eTS zHMHo|)ZBFN<&5~YwBIf9SB5nfFn%NL(_7j+cZ@~B{d6RVW5r_^uX9b#&u@bcx}E$u zc8zgEjm6}A@1rFlhP{9+D)|iK_8Xgv8EpxB{Jq=Bk8vZ6>ub#sXuF z^voyJAM0<8-1KX@mHZg9@I8h&mM(6CEyfCCtSvpgi@Mj=xeRpKyB+>$`wyP&Xfy_y zE-%LBV|*n&Va(IZ*JnVM*2WwC;2*mc{uslIcs7+VwkSI830YoV^ur~^C0VVCHEhH$ zb{qN8_Hiwt#^Pz|!sZtwlM%5G>4!gT(JmO{q#Kcy(eCN{-9~=2{qO5;{u{^ogMe@l z1M8S#Tv<~I*9^S~?S*==Pjp!u+jblIF$SA)&9VA2Vm-$={`WBt>i<-CjB^(-mbitv zAdGtG7V>|O;f6KOU~X4aDLXe7;yHO~Ywcv^L^X98ZOy8?5YN}lT#{}n|0`(EHJ1Wm z%`NotDA(P`>p{-kCNIbJsBpebD|FB;@K@F6{$b6x`hwvaPq!YeVTdJXrP+C7b9LzV zVqL=c;ud^Cm&=cS4`YU#Ywx0OXOsnHx~SK;*=HrT4}BmuyoL9qE|(u=@qVL8hpo{q zu47#vM?BUs9rMGQfc0<2wFB*(_B6Pc;n~=w@}mqm_W|b@HcB%a6&vA|M<`T~BY{`#fe*r!pnoBshLs^%j{+gj(CO_haYtrL9pQaMF>v3L9 zOY&o0xJGHAu7wWXU-h8eq zm|ukJY2q5jxOQV#%a7&b8WOmkaZ@QD*4ETBAJ51u9kXV)IQP}-jXJG=2=m4{RX7(A z+ZR~Zx`X^^`;M+hni8FMJ}mMM%;RNiR#ryr>HDbLOIHVyG4anxeE!ELyV9`7O!0db zwd=&v^X(G*R{=j9m-w;oz zK);0iObgk}jg-kUky^MCv%WtOo(_^YfK^fg~{u|D5I|S4lh)R?OC=E~= zXtM^I>T9Sw|2;<%mKea)^tKn?kxY{GE$wot+Uu$9cl~vg9+YeK+KMg0(oDj2B2*A7 z_;zvKIuUq4B}xO71}F_s8lW^lX@JrIr2$FUK2{zk)XCT&s;>b@1iD2YoDMGwde<;WslYDe6=mppKJ({&ybm zSA?~jyD9+>h(8yQH&AECL{RzvsAC_{IX6(3B`h0g7|;hG3ZI{=16(5wb>C$P%dX`C zd7<$CxjOh*t9uInpR4!oV&@e8zbEc=`}>vfuK-{587LJfjiP3CfI325q0Z=7H@5v% z@XrA`aJ_N?AY99tqLy_qu~uiOyT-7`bH57ydN99*75Jr6D>Z<+f_Hn=nJ&<;j6crR z*oX2^scjlSodMxm;Ee0uGupzhQ2!DCzfl${wM_%4Gav~d3jemL?muxgh5vs7My7@M z58=O0K@WVHI?;n71|4V;ETE4j(|-hiY_9|Y*#O@Ne?H_rGLE-vH+&6#l;j){WUM_VKQv@Tc&n{Qqxh162KQ z*d}VsPyScWQTS8%Q_uh3*9NHi|NCN(&ol~u3V+J~|GqXr)&JiYd&>X+-q=(4Q}|Q< z|M#{53ja3Zk89a9RV#@Ycr zYCusR9@DPo(!#5W@3e&daL*d^F{PDT3 zZ$5#uvAccPu_$z9%km$SHlV1B@CSQ4-V=9a6+*s1kdTM9)3sCqsf_RTPxO3Mmp<3+IvPRwROet>%~UmMh!et^Qi5&Y5jW4|o++cBFGQ(n_-2)E3p znwo0TJ5Z}L#|S9=8^K>mo1F}gwq+JJ+I`q(gmz^8U>R9hoXK=v^oL~c7&trQD{e&GM!(3K{9E2XMSh21t|RM;g5Cp znaiOj`|4W*Vl0dm;g}Jur2jHFaAQqy>NNBaQ^|9beV09M%UVm8&()Q}D^ zR*ZH;#~*!)=Jnz2>PJR?g5H^vD!Lrx`FcFl%VAW|GAaqsMH@|C&PT z-XK*W!;pRn35#OiuG*7899dTvExw(Ce_i}-`WYy4aU^ZpveISjjr!m_er0@s)aZV<_Tel~9!dPEh zut&SV>oLA8Jo;XHiY7lMy@FVUA#E-nc=+w{M+~%0N0B*sADPAg$NJ3giMHDJGx`K9 zU)O9b*_IfQhK$yb{=o($&QD~_yA}JtJ^twXA3fjQ&aplZsK+Uf&-d;BlJ`#8Q!wI?~hmSy(&TW15`$BB-#s}1tCFb(2W7qo?! z-x`1Py;m*%BEJ@%3%pVn$Gw(8yclMLo{e*uZaH|5fxjU|xqUtIMl^*x zp2sohFFDb)afQq;;pCO(0{%O9S&O2_g&%zSgt%XJ3$B8ihlra^`##PmIzk(>cnRZ97`K4y2Q`)u z{}y6WeyjH11)ZK`_kPk4`~iQ$oH)d?R~E)<|+LDt^fG^ z#CPdJSc8|@g!4FYtv<}F?e(_f?orfYr}gi*G^dcl|6iTsv(w4_1hdf7?u&|h!c2@! z2ipoOZGIxI9okZ&@c$S8i+X(^PR^wzl{NW0wizD3_`6HmeRN-ge&+$qFKO+V6@~wI z{ITwv-kAq|qIpf?+tLqcJGdTHSNVP{*ZRS7X!oVH#A@B|6#n1wN8P>hk|!%FOGsQ# zp)G{#c85pXbkuw+rk(|8zs9#_(fal4z-`42g+JZ@vycWB0<^UpZ$O-GTL{~G$~fm5 zFrfS4pSi_yF+P}?u}TX6e=$Qn;`@JFsjF~D8^f}3{ikSXcQTVG{Qt%OXV%${C=2H! zV?5~h?+rEV+iQ(IQ2774_+#weOXzEA&o~vX8PmeNgx{+FuOsT^&&tE*$>w&wuV8$V zll$?O+AS3R;AejprmZap*P+0<=(r9Mes`pCdIs%+rzG}CVf%oQ-pAaBxa9q$3iNrj zP$q?cH^d*~Juc|5(_%}T`i^LG=W&d?mF-pv|89tX3w5@oI^CAvDf}t?*MPk>NO%rN z0;n3OF`N1b=Z67xS;Dewd5D8;V?0vln%4_e|C`s(f8Bm4{3-k?|Nr~iKzr*yFZKNY zrQ03t!9NDD=b`ZbZSlW>YyIQLM*fxj+ie{h)*tY@t3y3(c zP2mrE_*LH%n#Ny)R=0X9Xb?l{(I7bP1w^ZVU5Ebn@Gn#8{=acync zfH~#=+vj^I{M)C$uB^KqQ8tA?g@2>{Kdtq_U3nel|J&W}r0PFa|Ec=_``Q3i|9@ZX zvHeKlPvQTo`+sh*V_%?-cpv)R^2i0f%>w!*lRWf2Ur?v@0c`;pl7P^kRZ`R{9prytPjd~$lx!!$FWKs!{7P& z_ZYeD>ZG}0-HN^(!#IG+zN=O)-9!*9u**X9?g^V+r|ushh@obymM;3Ad|YnAxie9j zN||3vPv>8MCwQr!_TX`QJ!d;ONDHy-l#&+mpAoUvHaB?Y>GxR{tJcYcnngQ~o2Do3 z7ND2A@BKPsE0>75M>mx|pJ%vl{!!1#i$`fH&AM@QA@5?|0dX%CWbw^^e2vA7&LwAqL^nZE^brVa%Wh!BNgCA};>+M?6FaBB2F*R$Ybh9`4o<5}!%9gyo=8f!>b}7^0f#a;R>=cM85{SUAbPW#Xe0E2j!o^Hj1FD9abUs$QsJD?PS1lz-*(m&iN&`)=p-7woxJ zukg`q;aE7o-J2j#&2>Jd#=3BMfJEVp14SR@E@(wAWHtW! z(nmsS+6whB51lD<=k}u0RdlST%`86S@K|w9lqFy2+m*$Y<=$Fb?1HAUWtW-za@rCG4%4nI*~Tk> z>u+v8wH~2wO>bCu8*1nK@>FxIza%C)R9Lz!(9cn^=pg%&v13EuZa2R!zIyTP?Df*i zHxqB1buRfR=9i65oOk-~wcCpLH?JObQ6+3nIQx82ah6eO(wy#Idw0*<@OHs2kIyc{ zhVlbH*3)K|mJ~)Q3D1i@73G!fT0+LGtJ`o@r+3dawlG8R}_1^I8ZZiuriC( z(c+U)SygEzr#DCoxNh>9QJHwh>2;Xwtm!?!mW;dXG&#&HY{@xoo15gTSLwzV@D^>-xRvXQaCH;+fAL_ ziq$s5mSiRq!iT5MdnNW=F4;z+VUYJnjR^gU?D1D&sHX{D1 zYuc>ntR92^rffkkY2~*M<}}Fh<=+L>0-b9*w`9YPaeTDyV6#kzT-H+ zIK+(Cl3l)ho~*QU{0A?SZ#AlhkHt3^4X{s=9pYWkae+ch#KX5vH)8M=J z&dCiXq&WF^nwRC@`)GNV`)z=B5JC7PUKuv5^1Q{C6PXsT>;k70oFxbzACD`;UKr;l zKlHIykC#yFsWL6{jHIobL+Fk_CjRk<$PPCnwkZ-U{sl!}`iQt5ACk+pQzIkBPX=Olc+t^UA0HmESMoytCw!CB)MXN;Oc=BABp---_0w{}=X*|XU3^SpzWx*!pA!BQ zi!h!VAFW>U$8yIiDi_J@*tQ|KD8seOUd8g0GCQK-dm~o*zhCRznQ6}Pba=7XkD?tVQXD1~eg*&PY z97M95xU-~S-(g2bj!zS83+2NH6vW-}ik>b!(JXW11)ZoqMasF>nYK1xLjtVsj(ctJ z#3+}i=-J=HY6cD=UtgW$5|Q}m(b@SdNxR%G<)r_)K7^I^!U8hm;;gD{;r#Mg($LW2 zEw8?a7gVuWm*f1I!g0GyawmQrNzBQycg;ET>Y+lWpj1ZHu6#BXC&jaYl2tKV4lg*l z*TC-XzTFc)ym`p}>d2%d@uS;pv%iS?@Ulp84tcUCZ9~K$neqFA&HV=Yt@(Ox@Act_ zUn$ot-u>5ymFrG@x$iMfdh39&1D&au zb3^ooph4;@jPLFEV5eKe<+bA?K}yU1L00MQPphafTF9#W{8V3Sb7B4CBZZUCkc*}k ztRr}q9F^nG*!IQZy1_LAPh-EJ)E7(M5w8_WIckcOxKph?`Sf?x5PNnxXt_Q+Eniu@ z(M8(foWMGHenLe`!1r6+AzNMvu}vG6?iD%PTOugVZJA>3t-kw$SDP2STmyc%s<3kV zwd*0Snd^m>EQGDj{Y3~}dFx-1mE`ql3CD~BjvhDXda!y*4Bj97DN6Q+v-CHMRh2JT zto4&5URZbsf2dL_xg7gtl+Hk_J}NdIBUWc020oKZi_%l?jawh!KQzKiV$;BZvs|9yfqmLfo%W3%UsUD8D_<~JTx@e7&yu|d1_xebo3DQ5K&tJK&2B>p zp2XMDZ@&(f<5T?*I8kJ`$P8h&6%pw(u5$`O4S5)PwnEf>Y>{t>Tarhh6lcN`wH&)g zR>pjn7KDEC9v^J^51(pu;nWo$;D*)NQ;Tf*xo6yVWgVCrLOAc0OW1GDceZz;;S6iw z=)gK+dr)=J>2nVI#-7F-20fhr@xxY+8~#?u_^SEexPt9(iTOA$GBVljQnByQ$kFn5 z0y8tN=}I3fG+S%AM9pp2E0eL}+h&&WUzF=X@bvEM=x$@a!8c*%Dd`lxbQ`}5>dAHs zRi-``OtIE=43wF!vviDNe)`@Egb9TR7*Ji1!7Y_D2L+~V@ zmV1)CAmQct#o}TEOO&TdCa>4y8}<3bOI!K0T!645Pw<;?PQSHWzYE+2x zj-VyyE+0`i*kh<;yr_rbZ70plpwf3@@1EQt#}&fU!0ReLNGxWX+f5a?Ep+;9P6+F< zndNTN1I5LpquwV4^ckdZd;Rf41?&F`>qYpVNIs+%QJp6I0*3maJDpos`+J zO~1mlB3t>&$c^5I2=f6P#HayWMZ1sA67||EGs`Ye(ia@2blOZ$i4jvJyd$i4ta#>g zcpy~XbGcGOp%ubcZL7gbc=G5u?aIiRWx}WW&yl~hE`rUznjsvQZg^w1sJPh6O&=2i zUldA)kN2KcW~+mj$MxzJyCw4&_abS|8`{POW=1*321`xZv1+1QL4kBQ|DSwWe{dCj zxj6l=VcBqtDQofs-o4ur#>es5FLph(XvCyb@v^;pR$Zt$kumH-X6X8Pm7Lzuh2I|B zaZ{){Gg)$g?oJMs8#*b$PFwZ#Pb#|v&g7qH7UH)i;SBhTYE>n537n;$x^V_e?!6tFO~p4)ty=zS%reBMd~^KhgHyOOhZM%g_1!l&{!a3Vh(WvUC*M1KaKj4a zUQob(&c33OIj)ZC|*?ybDq)#v+NFfGQ{6)d$O*B)b$3k@{0h#(HXnk1~gZTOt>|H++wdXyA={F!$wh#bJP?)mJK z{(IGvRgGrO7WW^a8aKB>Z=lif35+7&&o3uj&O`c2;Lo%6?8 zn#mQwWBi5B1na9SFXda#^-YqD)bemx%5p+@@Y$%{sc{QmI}R9OY8|9hG*~E4`(kwA z6JtTS#Pp)lIopc)!fP+>87lkyWF&~Sb<^}4+WsF9p~-L3{H_JOIUAdP`r%`@Hqp}6$ZBb84i{UswVHn{9YQGSt( zt=_?9Njx?L&*fWE2Dwi5!fe`sYr?A1cc?fSr4MhmLTkFC{QiWra52^uUld%*B+8E+awPT*ln>2cX zs9Im`W8t9v^?y#y2znHAb$IW&kB-YEj8B}uD^yBg>G1e5rEI{<&?Re>r@CfOh3BjF zd^W?Htf`MP>|YgugT5>LC|6DIFto=8xl2BLKAnd#r4!NdawGZr?2L^s7rma+b8B) ze9Tr{Y{BFCVRCvS$IUd{R$Ov4l=O(A!S82@ zyqTw-J;>tV(bRiyH`#M@1*hM6?KkA&O?b8T;R$`YCvBzUM=me^!Bh8-6Iq-Q)stU8 z?nQCw*TsG#1fRbQN%zV>$Dwlab003pJ1?}J%9iR>+IS1UStXt+wb|!+{y~x9BT|${ zJl>}ue!V9NFT^~y?j^Hkesjt0=O!$yKI;|xt~|HU58tvx`<8v|BO||4T%kPTytL6T~uU`$Bi|Xae@511qlBj9(a`8&pj10db^0Q zb_x43i$jNPZrLiV-g8)LobL_wQpXj-<-UX1J>`ckkzUWOz#D&b#Ppz%$$@@BpSjuR zy^o)}|B3YDj1@BLzpBj$a57wPv5{Eoxl;ZTpHoz^x@zd5?IwHPct>(VDLiJkwNF*@ zW&M4?gYu>f~zUsZa9rQp*cPBjw}{6$FfC z_gu=eWT)~-*Wt%Tq|Onun!I~?=DSh(dk&jL<|mBgDD+RMHkuRtPeH&$c2Bk)ynAJG z$3w4$WmJJ#yyB^d>Gz%IpL;oeit$KGVLy0Fe&8pXYRW3*&1q{t>-5|G>QbwR@%9;V z+Bu6u)W`6&@YCB4R&%&=^{q+|pVW80N0Fx zXnfp{IHw%HnOJ)*p~U21uH47b+YOApylgZ@2hHur@f8@$IsERn)$W^wDW`wIq7}j` z%%9AiwD;_$0q|Oe>dUL{Gr0g-8f7UT2D&8W_vcVq^?u~=zZJwwj1sg*>cZ3c;O8tG zS&PGi{x>_isBc1k>7VSLcc&T6ihLg{?4+Nb7%KT;-sH7wGXIwyJ9XvkZ{G?Q`&oUy z6EdvI>K0)-*?+@FCCgLl(Ej*CQ^e?{M%rU>=?a${)z$mw=a&v=_Z&Bj>vHVw&3^AR zT)DhfaA?8%&xnZAe=K+dXSx3W%eVuP#cF%p&ue^O!5-$36_zsJC>N$7+6x4rq zW%JPxx3ed#D=I}-vj~~#q#QcVeGgoXAuG$)DZy#M0)zYH@(fST=%L_bZw*~~6L!oU zeqhDXSxSqbef(%}did;j0m*Ly@}+t7mX<{rt|(JqGxA`80wD8js89H(*`Uh@J5}oD~Q)Kc7=zF&GLEg`DaidL>iyRg6L=K64a!CFX%C-C9WZj;Z^lGeZ z2vd&P-ctql+&#)sQM4l4e%`z@+}!B|@ zUvy%g5;phPHxO(2qy-M&Pk9n%efGu8<+~+%_PF)gQY9~Cw8u&L*T>5Ju9%u#m`K>X zD|pj8Y5pcJ!4Oz0*_cNy5 z5#iW*`wz?HB7KD|_8LxLFPlEfO0G~YpT(h)CB=zC?Rx3aNL-rYmI&dUYOW>=Bl!FF)$ZRi5Ny*!y9ra}+iVE#Xe)GcbB))z(7 zT>6=$?o~L^=aS@*(KD9!c4l?c%{ZzvbZ>TyWK8;65jM|>la*OGdnAgQ8HPXQvF~B4 zX*yr0ufn;4C5mhd`Hba+I16-MDw~dx9yBtBI1@i)s7YCGqW{n#O?Nk^jwTd8uOiI0 z4qofaJ?@qLzT0qyL+I{A)_oE?rmKv%4>G+k-&@7?;*{+R+`ignON>i&_vkyon^;c- zNt(>q__ZGq=(%;Rd=JehT-i@`lY)<2xy7TX62?JK1H1qj$3sw-*>3_1x^)&r~B@b)0>fM(FGa zO?|T&{r0dB;Uj~O#4OVY{_~{azA@9!HruIgV=XJ`Def?USadT%w*Q!j^!ZnAW{(*) zfz?xG!Ml(U@nOqSlNNc` + + + + + + + diff --git a/src/data/core/logo/vnote.png b/src/data/core/logo/vnote.png new file mode 100644 index 0000000000000000000000000000000000000000..caf5fdec7e4e01bf56216ec45d3b81cd3132bc25 GIT binary patch literal 9865 zcmch7cTiJX+wTsFph)qcpwbn=0@4Jeqlk!<$Wf{^1p%d3>4~CXqX;S@C5is4s@7%fHH}lTC^T8k4WUuwCrmz7yb5G18-c;?il;J%qbjwiO3=`R<8 zs&@$)^B9RnEBj)ve3O@#@!gxq5iNfQ^$g{bA`uqh5oqKk#Py;4sVw1vMa#DW8Eb2c z7K=Q;7B$zv5*u%#?B!VJ#vPw{%mXoEWQ}pGtdaR#x4^f zA3V%8L8ooB^H1F4+D;HIIZ&(@YFA!YCsNv3Pk(#&pzVos<0)KR=N}MB2Y7Aoy%~P7 zEIB!M`jjHt?$U*z)=$S*tGSMNE{h%KlU(W>kL@e#*&;`uz`tn=668z_VH)dRZ!5Q5 zzBPs0fAE$~Z2674P+FsZ%lSk! zIRkQLbNuj-jo>D8JhF^SM;to01JZ>O-ayb+$nZb^xEsPk;)W=Q6H5HgKOTV~)NrOQ z?4npnb_mGAdi3uJ^UkJDd-O7H?l~cscESDGiO|fKA+Lkjn;%A+|0-$|l6B^TBvWEh z7ye$3Ri`VNzvYoREE}54&J73^P73HQ)p&Q+;%2N)T^}ity#dzltCxnzp;EEfIqM#9 zj^byCGvlzEFEdQm3wbMx^-p*6je^7pYi!~RM_^_C2;>@8GvZ3M8iqG~K||;Fa~D>h zf)boPaL|+8$Mccr035XYb20qLG66~)2n9sqWT}h|5e>`IqBu*$|J*D13^rX@eQzK> z@GA*3j`#rzFaf_pT;tz*HGT)bU-f{R&*B-2vXzDrXT~>1;MC8EutdYuE@?Y~R`lj| zpH>pB;0KHPLa>RUnPR|7fn?AZF|EXK3`raX%h?cI@o7ab1$XbUWR#_>iI-d38AKuNCx%_v-2E zm;TwmBlnnR+9P7A1?o+}R zaGSOiqMd!o#E7eo%e?GEs)1>&bHcSx`ulaF_(UJ<2APr#`^Yb=S|WRN@JL=qW(bRv zZ>WFcsPj;qC-@UKprQ(~^HoT}%)}KSF0Ax@sbVv~CDiQAB%rNW*xpV{8V9$XS!ssA z0^mW~-W|OcGq+<~9=w=gX;~>YO zT(>3HhoTN7>SBOT0wQp7QC-EPndTn5NLqlRV_hPta4EjYvE9U3S=7ZR_6*2+a^ zUiV3SnrcdUQ(L1(kp1*PHZo^3)UkCrNgiP_Gi;k<@6ce|%u~?}HjKkf+_rf&Z?`td zl!}l_gk@j$YR1KS12u)2Y63sOm3FfjQXHH4Bz9h4ZU{Ik7Sh#3&373zDvHI{pWFM_ z5}_(x7MqhHTDm@e3OQkv6Fb}~E0koloyftv%NgY?uX%XCw#Z))8({GPwDzZGmtm7} z|5t^w&qev{3Hxe4y-Ire6ujhwNEm3KZFQt#aQ7d-_1~qt1avGm1_R=;ww20=7gX<2 z3vXV0zr}H*?I2<0nl}5e17nPo<+o@xTM%5uQqmkgZUXnc#WH%iV17aK^4oHdUs2*v zLN|)<>|0UIK*cGDb7@pIG<@XjsfcH?EVeLP#Ctpmx8H9O50{<)^GU2|enDS|-Ncw| z1dIkYm!RhH90Bp0D%J64x$`F$^s5v_4nI9s?gD5-D4#m}%QjCu)cg)lL3<0Y#InZ= zE;oyuPmGP>VQt5t_+(O)WT&8$5$}$M=xw+NXxjh6PqrWJ4WztBw7xC~T{&k;p?i%U zekkJ59=|gCTv%345Ml#5!?TH(I=8j}v4JBCsM~k8a#J#jQ(d>iXJ2rdOIK8(p;1E} z#l?5y1XmoQsf`1QK&)!En2PP#`MirN_B~Tc9ImEc8Ws{ai3@1w!TkO}!)IG{d$me- zK;rdm;wM9vXh3$&84;CR`3(zyM_a)W)sPCUtv?@WBW^3rM!Rwe%Qb%Ca)A#e89)O= zv{$4v*YrD4zcy3U1XS%;MfXQpXdeSXkg$Q`6E3)6-HFO$lI}ODE|dQ?Y$&%Cf;GII@?8zA3p#X^vuDs($tp!uOX zWNKj{m3xlko7GxykYF{JCsgFq9Y-pTr@y7mg&EbiZ%fSvaSv_P{j@e2Y4;k>J)hL3 zCmU%z>$c%jFmj+4TZ3jWUpo;(`ftRL&jH$4sDS`+67Lcdw($R&N?Z`?wt=+%;53UP zSFX*7?b^02ok7+f+GrzL>6anySQfJ2t{!&26LleQ+}P#j8Llf8DjC`f1@X!0lSS3k zo8Fd;)=1@ugrb6vn?YTaFV44+ZN+2hgMDW(Lc{S%xB|Yjnrr0qB|mt?7%^n_md*V- z;eI|+l1M^oP^;B5Rak2JJR?xc$xU6R3hP+Bb{Zf4kVKH)*bG!9Ff-;^Ri=!LlZwB; zc@aB*Az5ER)WM=lG9}-$!(2pZWRoe#vGRUX*=XFDA5L20CE-pn<85fp@Zhcvfgkrg zs7(|bHLsfPZM74_g}lF`*=^u#icRyYc^7ELQT?u#!-VtE_c?8aJd61BdA{Lz18xGn zuluQrY4j(1*mzrYXV*H~YBPa`c^O}=#Fqx}Gkxl6wvivZz=rKM&kOc#il~;zn7;EI zw34oOqq-u}y}wqgO|CySn!&d=ky$1{&=gxN^q8Af*N6lqXTA1K+i!l=>8oB?G;&1x zNqM8Q87jLu+H-FX_Kcz)Ud!m4UYF1bG+9!+sKl(wi zGwT$Y^xW+Sr&ms@3!z4`qlMgkOH5GWkT^8;eY$bKbh-Olj(- z@9d?31Z_fb^kDNP4Pvb#}k9$!0|7ucj&#n=UBr z&gn}*9w3B3*1xV08_aPg92ygq~aa`pW@Z*YRP=zr2V%M zOwN3R>Z1Ljw7nlLySh+kS+3Ddh3v_QpW&~1DIWxW3onKhYm%})_onf@+)>hR(~`=H z!XP!5+7}?rH9po$$xXDj9TQo+*iAXF%1Lvi8Fu`M+a&;d=SzFKnfmC7pv`=YDwhY( z&h_oo-~LbYPW`f*6h-M-$d;3c8$E@sNVUD7BiNNaSSr~)3F?EsO5;qWhgpl5>xkw? z`>-gX$0&RXsVlmby{dyhPq^@;tEUWfw%@7tSi!r`OGbS8>xVDK$%^Pq>oP$^IZ@%T zul*RUA0mcU;Oe>(aG|g0%ahAp{lm^}vm&e|^gGpd#U}_dmixYhma(gH#n3%Gs(}|8 z_I#74?Bc6BdKmH6sJ@_YIUwoMF9`?;b9t}sTqjVy-`}xgOEtzlU;oHbFgMN2okG7# z851DNEPOlXVt$9yP206E1Xs;U{&V&dV-3%r7hH>~>rTLJlaQftbi|k;v2!o7=!PES z#OkW4tV|8JCdqZ~{+O94Mz2GQEzbN27g9TzRoVWH`%UB;rDs#sTTTyP^&(xo`h`~( zR6`k4ZEH_#BN|Jb9=3!N(3WhdV}O)562uujdS7=)#0=5<0~u&jsh> zJVLkWLy#}Ku21Jzb2Eo~C7>g2~azA4_!rHBub3Um+++l6N@S|kW2}xI`Q6MS&%&U zXs=_w3Ms3Flea(eqjxeTB6lmq=L+4qBGVry8b@Q(y4t*hD@a7x(rGEYq4m$=^uocy z4aQ%PZW@ZuLmA`JDL65|YXwADu}^m918j_1i>9BjcWxH7gkea zXA~(>BcUUBVCUdh(227`v7~YJ2Sa3L^0KOR1^4;~<+x|b(l>+LlZ56{fjW4wHP`tw zs~lrS&dte7{7S&ts6X?Y`t~=VEdqIm70J-H-->+~SCZgxS46NSutVo9Xd}y3hU)ks zcNrf(NbbtoUQHJZO23nYDvA8@d2xilpWZ_$~fkyE8T>*rc|1OoITZ+!pkWRRqK z^Dv>33h)3nagPDNseo&pf(y@%X-v2NHv2u@6E7}OHX4Me$HSp-n3b4K6&hJDb@XCH!DN-4|OiyA~}-y z*}~p!NtBrvr1D3o?^{eNSgo!i?eW}9>z~U4CsbS4-WzznowsPP{pX$Pa>#)NAA#ki|IO)l+z?QK%>K!qf2$djh|7^8G>E2t^<6NOLH04@c8I zG;TDswkkJMlD%`h#Edm@4Z-?>7WaDplS4@It6=IS}GXe%9gu)5un!FPEz> zijZis4r%;)kw1hMllCq8Q|GH%?BMr(d1EzYW^zYIvIBaxm9$r9Qd<|v)@Y4?+C5pF z-z7%NT#a!5*heM1PbT2zle{U$LlxTau;_1rRFpotO)qU(V?jYFsP;upxc86?a5)i! zcuDVuLX;^hW!@cm{rma$@&hjYZ2lJ;ITG15N`UiQUP?FJeB~fW{(wYk;0P0-8nnCP z)TFbnzr)%C?@Q?10`=mL@E)YmI3CN$YL@?7_43d|F`#S-%EgfZ1ZsF0$Izqk`%o%M zE??G*EV%OoVoPD>ULO z6Dy(9S~=@I*IA>+>Ou6@e+NwW_N<4hAIjIZpUx|uxnnY&iK)zPNi(d{EX`U%BMOgR z2EY*<4X^DJwsmz-Tfv~<59-Lm^8FSqB$5lh8MJfcUmbV8c5U&23I-HQQBE9o@8UtE z)p@pdUpqb1;d!Kbs8u=-=+`QoT>WXqjon4=Q)#S;BXy@ne%)r$bvy3$5SL^Loh(yJ zDGV|DwZ93%fk$ERk2e!y#$o<3i8dI!a-H&O6Xp|#SfLS3)_x&I>hVvRcmqZj!Rf|| zGQ;d^tw`b<(0I2fuo&!BoBSc8PzdHfn=o0OwVs2~^fxkt<;Tk2n&&SWu?|@Uk^Lz0 zTPTJaRIEsHH7B)R+8Xx+cYc=A^`q<%BFdMIzJSw?l*^qe=~{n2#?W_OuGFN}=?s|C zx_2?sEfMDa~DBtqf%dXzMW0X{h5t3&tx%AhL+ zFC}yg72P++N!PAL(~+(<;bJt$m#a9wp6hKD`?=S9BbU!DKg9G{d_7)e3ZuH%&^&5^ zzM0%rj&{2ZFOP-lJl8zAT9nm zB(*hqke@e0eIH{K4~no+l?4(D;s!gTE?*^+ouY*n{rA0Eew-naro_@iQX_RHF4Q*_ zKuZ!j$-}N_ZvW3L0lmQxtT0sv69!|rVCC_VB$T8f$n@#btgWw+#)V_Re$6?oXL#I7 zKLlu?l(EYz>LhwA7M{Z|y2736=@Nj92v$m6$tnk3fOb`(zY*C$&&D?VA>4kX(?Bcs znt7cHa;m>ODWpdFG~BrR>ml|IroyI23x{RLS-VPKI$+t#_In?L#4K3 zDCPih;q!Fj5`J-Y@LuNOa1q6(7@y;a4)|W>Grn(}J`D{H6qM3dg7v?yc|-?e%^m*a)w)S>8H>&PK@ zKVqkE2!qVcFG2iOl``glaN6Uk;2jEZ(khB~z2asW) zx`tG%)o%bWhh!&%H0lcv?QnTHW*X*&<_`rq*mEJ~RC{GP7)XIC2D%UK{7z8Kuq`=S z*nMlv4n7C62xE3Gm~rU#?4Zu1+g!qnG8HQv>>2ASZ*gvS2E|0C5!23V5?`2d?j&-> zr_9e2d%MQ~+-3~m(58nvmTUguMV1`(togShPa&K!b5({|vQg1}Fx>pO*cyNY#)`y%`tM7JQrG&8>uxL5^CJS4B3`rHQIxWh*&{t+_I=|RXD}&VoUl1>X4VGKdrSO zlsQED(#5Oxg&p>w;kVqWqu-lW1NIM>X^=kYl8I>Zr#6C!zGZesqY><(^6R$1}Z*1WrC<9r0A? zEa^wn$l}G{Ak{mdFIkY9<{|+63Inqu^(=k-WKghP0AyR6<=+B~lP}aoYKmaa4`(_d z0~FNNkY`7M8yFs}bl2ycNUca!-%F3Mp* zxHP|R3jwroIkd`NGU9_!S4xs6#{rs9Yy!q4V*@C0-~h6u1YP&5vAmynrtqcW?V{$>=4b(+JYXr>C`k9$AW6C zs65uiGE-2GZ_AzPKN~@+6LZ&wf4Yh!u_#1Vgas2Pytjn=UWjjUH&eM88pROpdPik= z-z5ISW3p1H7A`1d@wn_(ahkLH4hoc*$w?;=mHSP-! z^W(ew@%~FAQ3MfBv7nuZNvfj@Cn-lj5M47jU!<)zD{4qad)}TNBi^*cwZyTCZBO1% z?X` z!iQtjMm+(o&pc9HUS4!wy8}Nf`d}b6@{i(xi%$j8V^rrX#7b?I0yhgy^nfY=kojA^o`C3{On`Aq`B)2@-%j2Whb$~CmcSA6PpuM z{ooKl8E41p6JaoJ>84lqQ-{`j4)D-My5k_!rvU&N=800*#a~SXOUCq0yUHd7eR%7D zJbhUxaz|W>cB8eu4WO#hhxw@rnKV@wy!Z?-1@fG?}9sVzYgWeo1;$SA6BxH#NO<3%m%E0a>@5J zw*8i}0>AbT47#MtvPfg})kW!~5-pqYwO4R8nx(x6GD!k=9cBjA-qLaBUA&2Yy%;8F zc6}+xI1SRKHn*6P|4onPCXP~JQHR1B1wAC)E!N`aek&+_mvX6E31&9-X&$DCPCS2w zm^)-_Ub*o#4|a54QX=SrZI|b^r%J0?usS^ZeXIGo@6|;-p&X4;oyq)w5u;6Jx?rn+ z+69RI`?tVJPORqQh&9@PaYXkDt#Xqqf8^J#Cg@N-C*mm$M)3Vs!Bt|0+m@G&qw8|C z-IB&!bYte{I9^tZK&;AgpKhWKI60$f3B=`3sVy7CO~tSWW4Dp8`#v&QyWyhJaQ|@z zS(78rjT%P+GoLU&t91~?Yv-V!2yN9Wz7jZ|3-^3t;gntVY{=R7{H=Z^YH7UQfgRhk zhtL)9eGUNFzB^e+W^iRyj_)Es>ysq1pB(~FrI7$-z&`8vK=DCqT;!o#2~TCrSwGL~ zkEu9>4{*=>&wVNcU$KHeSopb*nfQO;_VvHLv#n<1_`i+>v0;dq6x^D_MH5`m!+C|p z4Y;$1i`#$Z6-)@W5$m@3-@j7+Z-vqYvG;#;3U>#re`A29`Im10A8DGlWVb`5_VB&8 zv+bE9)fzTcAt;>hqsHsAgyP(Br9}_NK4OLRHIV3*4Wmrv6 z;K?8+S#^tUOGnN`;iR&snSiY&JLGo&YEf5aoEeV)fRj0VEY#ps;l`{uA?HicgdO{# zSZ$nr$*f8475~DC(4$boMd0_l0SA&`X!-vtM+jhM5S<_%{=LTw zF{r$n`==8_$UC@%kMDu_(+^9gxIPom_Pka5mhI)+q`Q(!EuRHW+NQN<%Bh*1QzXjJ zqS<)_vr58QwyNs5;AXN=%8 zwFOSt?n}q47c6JAiA(btj^{*0EXTiiyxTTOR2OfeHGJj(A#K5tmc$fO?DiS{=w?U% zx%{kJtRw1%-&CZuprK3pMmyRw>n(;6aq8h{w^iu{)uN5&SoY@G@+ip^b^$@+)hle! f|G>}7cXUip_8WJV)7ew-afbS)XFi{Hy#2ob(ScVZ literal 0 HcmV?d00001 diff --git a/src/data/core/logo/vnote.svg b/src/data/core/logo/vnote.svg new file mode 100644 index 00000000..7e09a748 --- /dev/null +++ b/src/data/core/logo/vnote.svg @@ -0,0 +1,56 @@ + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + diff --git a/src/data/core/vnotex.json b/src/data/core/vnotex.json new file mode 100644 index 00000000..ad9f8d4a --- /dev/null +++ b/src/data/core/vnotex.json @@ -0,0 +1,231 @@ +{ + "//comment" : "This is the default configuration file of VNoteX. User should modify the one in user configuration folder instead of this.", + "metadata" : { + "//comment": "When releasing new version, please go through the following configs to check if override is needed.", + "//Comment": "markdown_editor#override_viewer_resource", + "version" : "0.1.5" + }, + "core" : { + "theme" : "native", + "locale" : "", + "shortcuts" : { + "FullScreen" : "F11", + "ExpandContentArea" : "Ctrl+G, E", + "Settings" : "Ctrl+Alt+P", + "NewNote" : "Ctrl+Alt+N", + "CloseTab" : "Ctrl+G, X", + "NavigationDock" : "Ctrl+G, 1", + "OutlineDock" : "Ctrl+G, 2", + "NavigationMode" : "Ctrl+G, W", + "LocateNode" : "Ctrl+G, D" + }, + "toolbar_icon_size" : 16 + }, + "editor" : { + "core": { + "toolbar_icon_size" : 14, + "//comment" : "none/autosave/backupfile", + "auto_save_policy" : "autosave", + "backup_file_extension" : "vswp", + "//comment" : "Where to put the backup file, related to the content file", + "backup_file_directory" : ".", + "shortcuts" : { + "Save" : "Ctrl+S", + "EditRead" : "Ctrl+T", + "Discard" : "Ctrl+G, Q", + "TypeHeading1" : "Ctrl+1", + "TypeHeading2" : "Ctrl+2", + "TypeHeading3" : "Ctrl+3", + "TypeHeading4" : "Ctrl+4", + "TypeHeading5" : "Ctrl+5", + "TypeHeading6" : "Ctrl+6", + "TypeHeadingNone" : "Ctrl+7", + "TypeBold" : "Ctrl+B", + "TypeItalic" : "Ctrl+I", + "TypeUnorderedList" : "Ctrl+8", + "TypeOrderedList" : "Ctrl+9", + "TypeCode" : "Ctrl+;", + "TypeCodeBlock" : "Ctrl+'", + "TypeMath" : "Ctrl+,", + "TypeMathBlock" : "Ctrl+.", + "TypeTable" : "Ctrl+/", + "Outline" : "Ctrl+G, O", + "RichPaste" : "Ctrl+Shift+V", + "FindAndReplace" : "Ctrl+F" + } + }, + "text_editor" : { + "theme" : "", + "//comment" : "none/absolute/relative", + "line_number" : "absolute", + "text_folding" : true, + "//comment" : "normal/vi", + "input_mode" : "normal", + "//comment" : "never/always/bottom", + "center_cursor" : "never", + "//comment" : "none/word/anywhere/word_anywhere", + "wrap_mode": "word_anywhere", + "expand_tab": true, + "tab_stop_width": 4, + "//comment" : "Positive to zoom in and negative to zoom out", + "zoom_delta": 0 + }, + "markdown_editor" : { + "override_viewer_resource" : true, + "viewer_resource" : { + "template" : "web/markdownviewertemplate.html", + "resources" : [ + { + "name" : "global_styles", + "enabled" : true, + "styles" : [ + "web/css/globalstyles.css" + ] + }, + { + "name" : "built_in", + "enabled" : true, + "scripts" : [ + "web/js/qwebchannel.js", + "web/js/eventemitter.js", + "web/js/utils.js", + "web/js/nodelinemapper.js", + "web/js/lrucache.js", + "web/js/graphcache.js", + "web/js/graphpreviewer.js", + "web/js/vnotex.js", + "web/js/vxworker.js", + "web/js/graphrenderer.js", + "web/js/svg-to-image.js", + "web/js/computed-style-to-inline-style.js", + "web/js/imageviewer.js", + "web/js/easyaccess.js", + "web/js/crosscopy.js" + ], + "styles" : [ + "web/css/imageviewer.css" + ] + }, + { + "name" : "markdown_viewer", + "enabled" : true, + "scripts" : [ + "web/js/markdownviewer.js" + ] + }, + { + "name" : "markdown_it", + "enabled" : true, + "scripts" : [ + "web/js/markdown-it/markdown-it.min.js", + "web/js/markdown-it/markdown-it-container.min.js", + "web/js/markdown-it/markdown-it-emoji.min.js", + "web/js/markdown-it/markdown-it-footnote.min.js", + "web/js/markdown-it/markdown-it-front-matter.js", + "web/js/markdown-it/markdown-it-headinganchor.js", + "web/js/markdown-it/markdown-it-imsize.min.js", + "web/js/markdown-it/markdown-it-sub.min.js", + "web/js/markdown-it/markdown-it-sup.min.js", + "web/js/markdown-it/markdown-it-task-lists.js", + "web/js/markdown-it/markdown-it-texmath.js", + "web/js/markdown-it/markdown-it-inject-linenumbers.js", + "web/js/markdownit.js" + ], + "styles" : [ + "web/css/markdownit.css" + ] + }, + { + "name" : "prism", + "enabled" : true, + "scripts" : [ + "web/js/prism/clipboard.min.js", + "web/js/prism.js" + ] + }, + { + "name" : "mermaid", + "enabled" : true, + "scripts" : [ + "web/js/mermaid.js" + ] + }, + { + "name" : "flowchart.js", + "enabled" : true, + "scripts" : [ + "web/js/flowchart.js/raphael.min.js", + "web/js/flowchart.js/flowchart.min.js", + "web/js/flowchartjs.js" + ] + }, + { + "name" : "wavedrom", + "enabled" : true, + "scripts" : [ + "web/js/wavedrom.js" + ] + }, + { + "name" : "mathjax", + "enabled" : true, + "scripts" : [ + "web/js/mathjax.js" + ] + }, + { + "name" : "plantuml", + "enabled" : true, + "scripts" : [ + "web/js/plantuml.js" + ] + }, + { + "name" : "graphviz", + "enabled" : true, + "scripts" : [ + "web/js/graphviz.js" + ] + }, + { + "name" : "turndown", + "enabled" : true, + "scripts" : [ + "web/js/turndown/turndown.js", + "web/js/turndown/turndown-plugin-gfm.js", + "web/js/turndown.js" + ] + } + ] + }, + "//comment" : "Whether use javascript or external program to render PlantUML", + "web_plantuml" : true, + "//comment" : "Whether use javascript or external program to render Graphviz", + "web_graphviz" : true, + "//comment" : "Whether prepend a dot at front in relative link like images", + "prepend_dot_in_relative_link" : false, + "//comment" : "Whether ask for user confirmation before clearing obsolete images", + "confirm_before_clear_obsolete_images" : true, + "//comment" : "Whether insert the file name as title on new file", + "insert_file_name_as_title" : true, + "//comment" : "Whether enable auto section numbering", + "section_number" : true, + "//comment" : "Whether enable image width constraint", + "constrain_image_width" : true, + "//comment" : "Whether enable in-place preview width constraint", + "constrain_inplace_preview_width" : false, + "//comment" : "Zoom factor in read mode", + "zoom_factor_in_read_mode" : 1, + "//comment" : "Whether fetch images to local in Parse To Markdown And Paste", + "fetch_images_in_parse_and_paste" : true, + "//comment" : "Whether protect from Cross-Site Scripting attack", + "protect_from_xss" : false + } + }, + "widget" : { + "//comment" : "Level of the heading in outline that should expand to automatically (1-6)", + "outline_auto_expanded_level" : 6, + "//comment" : "Default find options in FindAndReplace", + "find_and_replace_options" : 8 + } +} diff --git a/src/data/extra/docs/en/about_vnotex.txt b/src/data/extra/docs/en/about_vnotex.txt new file mode 100644 index 00000000..6d7888e0 --- /dev/null +++ b/src/data/extra/docs/en/about_vnotex.txt @@ -0,0 +1,7 @@ +

+VNoteX is designed to be a pleasant note-taking platform, refactored from VNote, which is an open source note-taking application for Markdown since 2016. VNote will share most of the code base with VNoteX since version 3.0 and continue to be open source. +

+Source code of VNote could be found at
GitHub. +

+Please visit Homepage for more information. +

diff --git a/src/data/extra/docs/en/get_started.txt b/src/data/extra/docs/en/get_started.txt new file mode 100644 index 00000000..ede56c1e --- /dev/null +++ b/src/data/extra/docs/en/get_started.txt @@ -0,0 +1,7 @@ +
+

Get Started

+
    +
  • Create a notebook and create notes within notebook
  • +
  • Drag and drop files here
  • +
+
diff --git a/src/data/extra/docs/en/shortcuts.md b/src/data/extra/docs/en/shortcuts.md new file mode 100644 index 00000000..6be5e3fc --- /dev/null +++ b/src/data/extra/docs/en/shortcuts.md @@ -0,0 +1,122 @@ +# Shortcuts +1. All the keys without special notice are **case insensitive**; +2. On macOS, `Ctrl` corresponds to `Command` except in Vi mode. + +## General +- `Ctrl+G E` +Toggle expanding the edit area. +- `Ctrl+Alt+N` +Create a note in current folder. +- `Ctrl+F` +Find/Replace in current note. +- `Ctrl+Alt+F` +Advanced find. +- `Ctrl+J`/`Ctrl+K` +VNote supports `Ctrl+J` and `Ctrl+K` for navigation in many widgets. +- `Ctrl+Left Mouse` +Scroll in all directions. +- `Ctrl+Shift+T` +Recover last closed file. +- `Ctrl+Alt+L` +Open Flash Page. +- `Ctrl+Alt+I` +Open Quick Access. +- `Ctrl+G 1` +Focus the Navigation dock. +- `Ctrl+G 2` +Focus the Outline dock. +- `Ctrl+G X` +Close current tab. +- `Ctrl+G D` +Locate to the folder of current note. +- `Ctrl+G O` +Open the Outline popup. + +## Text Editor +- `Ctrl+S` +Save current changes. +- `Ctrl+Wheel` +Zoom in/out the page through the mouse scroll. +- `Ctrl+J/K` +Scroll page down/up without changing cursor. +- `Ctrl+N/P` +Activate auto-completion. + - `Ctrl+N/P` + Navigate through the completion list and insert current completion. + - `Ctrl+E` + Cancel completion. + - `Enter` + Insert current completion. + - `Ctrl+[` or `Escape` + Finish completion. + +### Text Editing +- `Shift+Left`, `Shift+Right`, `Shift+Up`, `Shift+Down` +Expand the selection one character left or right, or one line up or down. +- `Ctrl+Shift+Left`, `Ctrl+Shift+Right` +Expand the selection to the beginning or end of current word. +- `Ctrl+Shift+Up`, `Ctrl+Sfhit+Down` +Expand the selection to the beginning or end of current paragraph. +- `Shift+Home`, `Shift+End` +Expand the selection to the beginning or end of current line. +- `Ctrl+Shift+Home`, `Ctrl+Shift+End` +Expand the selection to the beginning or end of current note. + +## Markdown Editor +### Read Mode +- `H`/`J`/`K`/`L` +Navigation, corresponding to Left/Down/Up/Right arrow keys. +- `Ctrl+U` +Scroll up half screen. +- `Ctrl+D` +Scroll down half screen. +- `gg`/`G` +Jump to the beginning or end of the note. (Case Sensitive). +- `Ctrl+=/-` +Zoom in/out the page. +- `Ctrl+Wheel` +Zoom in/out the page through the mouse scroll. +- `Ctrl+0` +Recover the page zoom factor to 100%. +- Jump between titles + - `[[`: jump to previous `N` title; + - `]]`: jump to next `N` title; + - `[]`: jump to previous `N` title at the same level; + - `][`: jump to next `N` title at the same level; + - `[{`: jump to previous `N` title at a higher level; + - `]}`: jump to next `N` title at a higher level; + +### Edit Mode +Shares the same shortcuts with Text Editor. + +- `Ctrl+T` +Edit current note or save changes and exit edit mode. +- `Ctrl+G Q` +Discard current changes and exit edit mode. + +#### Text Editing +- `Ctrl+B` +Insert bold. Press `Ctrl+B` again to exit. Current selected text will be changed to bold if exists. +- `Ctrl+I` +Insert italic. Press `Ctrl+I` again to exit. Current selected text will be changed to italic if exists. +- `Ctrl+;` +Insert inline code. Press `Ctrl+;` again to exit. Current selected text will be changed to inline code if exists. +- `Ctrl+'` +Insert fenced code block. Press `Ctrl+'` again to exit. Current selected text will be wrapped into a code block if exists. +- `Ctrl+,` +Insert inline math. Press `Ctrl+,` again to exit. Current selected text will be changed to inline math if exists. +- `Ctrl+.` +Insert math block. Press `Ctrl+.` again to exit. Current selected text will be changed to math block if exists. +- `Ctrl+/` +Insert table. +- `Ctrl+` +Insert title at level ``. `` should be 1 to 6. Current selected text will be changed to title if exists. +- `Ctrl+7` +Delete the title mark of current line or selected text. +- `Tab`/`Shift+Tab` +Increase or decrease the indentation. If any text is selected, the indentation will operate on all these selected lines. +- `Shift+Enter` +Insert two spaces followed by a new line, namely a soft linebreak in Markdown. + +## Navigation Mode +`Ctrl+G W` will turn VNote into **Navigation Mode**. In this mode, VNote will display at most two characters on some major widgets, and then pressing corresponding characters will jump to that widget. diff --git a/src/data/extra/extra.qrc b/src/data/extra/extra.qrc new file mode 100644 index 00000000..93204fa9 --- /dev/null +++ b/src/data/extra/extra.qrc @@ -0,0 +1,384 @@ + + + themes/native/text-editor.theme + themes/native/highlight.css + themes/native/interface.qss + themes/native/web.css + themes/native/palette.json + docs/en/get_started.txt + docs/en/about_vnotex.txt + docs/en/shortcuts.md + web/markdownviewertemplate.html + web/css/globalstyles.css + web/css/markdownit.css + web/css/imageviewer.css + web/js/qwebchannel.js + web/js/eventemitter.js + web/js/utils.js + web/js/nodelinemapper.js + web/js/lrucache.js + web/js/graphcache.js + web/js/graphpreviewer.js + web/js/vnotex.js + web/js/vxworker.js + web/js/graphrenderer.js + web/js/markdownviewer.js + web/js/imageviewer.js + web/js/easyaccess.js + web/js/crosscopy.js + web/js/markdown-it/markdown-it-container.min.js + web/js/markdown-it/markdown-it-emoji.min.js + web/js/markdown-it/markdown-it-footnote.min.js + web/js/markdown-it/markdown-it-front-matter.js + web/js/markdown-it/markdown-it-headinganchor.js + web/js/markdown-it/markdown-it-imsize.min.js + web/js/markdown-it/markdown-it-sub.min.js + web/js/markdown-it/markdown-it-sup.min.js + web/js/markdown-it/markdown-it-task-lists.js + web/js/markdown-it/markdown-it-texmath.js + web/js/markdown-it/markdown-it-inject-linenumbers.js + web/js/markdown-it/markdown-it-xss.min.js + web/js/markdown-it/markdown-it.min.js + web/js/markdownit.js + web/js/mermaid/mermaid.min.js + web/js/mermaid.js + web/js/flowchart.js/flowchart.min.js + web/js/flowchart.js/raphael.min.js + web/js/flowchartjs.js + web/js/wavedrom/theme-default.js + web/js/wavedrom/wavedrom.min.js + web/js/wavedrom.js + web/js/mathjax.js + web/js/plantuml/synchro2.js + web/js/plantuml/zopfli.raw.min.js + web/js/plantuml.js + web/js/viz.js/lite.render.js + web/js/viz.js/viz.js + web/js/graphviz.js + web/js/prism/clipboard.min.js + web/js/prism/prism.min.js + web/js/prism.js + web/js/svg-to-image.js + web/js/computed-style-to-inline-style.js + web/js/turndown/turndown.js + web/js/turndown/turndown-plugin-gfm.js + web/js/turndown.js + syntax-highlighting/themes/markdown-default.theme + syntax-highlighting/themes/default.theme + syntax-highlighting/themes/breeze-dark.theme + syntax-highlighting/themes/printing.theme + syntax-highlighting/themes/solarized-dark.theme + syntax-highlighting/themes/solarized-light.theme + syntax-highlighting/syntax/4dos.xml + syntax-highlighting/syntax/abap.xml + syntax-highlighting/syntax/abc.xml + syntax-highlighting/syntax/actionscript.xml + syntax-highlighting/syntax/ada.xml + syntax-highlighting/syntax/adblock.xml + syntax-highlighting/syntax/agda.xml + syntax-highlighting/syntax/ahdl.xml + syntax-highlighting/syntax/ahk.xml + syntax-highlighting/syntax/alert.xml + syntax-highlighting/syntax/ample.xml + syntax-highlighting/syntax/ansforth94.xml + syntax-highlighting/syntax/ansic89.xml + syntax-highlighting/syntax/ansys.xml + syntax-highlighting/syntax/apache.xml + syntax-highlighting/syntax/apparmor.xml + syntax-highlighting/syntax/asciidoc.xml + syntax-highlighting/syntax/asm-avr.xml + syntax-highlighting/syntax/asm-dsp56k.xml + syntax-highlighting/syntax/asm-m68k.xml + syntax-highlighting/syntax/asm6502.xml + syntax-highlighting/syntax/asn1.xml + syntax-highlighting/syntax/asp.xml + syntax-highlighting/syntax/awk.xml + syntax-highlighting/syntax/bash.xml + syntax-highlighting/syntax/bibtex.xml + syntax-highlighting/syntax/bitbake.xml + syntax-highlighting/syntax/bmethod.xml + syntax-highlighting/syntax/boo.xml + syntax-highlighting/syntax/brightscript.xml + syntax-highlighting/syntax/c.xml + syntax-highlighting/syntax/carto-css.xml + syntax-highlighting/syntax/ccss.xml + syntax-highlighting/syntax/cg.xml + syntax-highlighting/syntax/cgis.xml + syntax-highlighting/syntax/changelog.xml + syntax-highlighting/syntax/chicken.xml + syntax-highlighting/syntax/cil.xml + syntax-highlighting/syntax/cisco.xml + syntax-highlighting/syntax/clipper.xml + syntax-highlighting/syntax/clist.xml + syntax-highlighting/syntax/clojure.xml + syntax-highlighting/syntax/cmake.xml + syntax-highlighting/syntax/coffee.xml + syntax-highlighting/syntax/coldfusion.xml + syntax-highlighting/syntax/commonlisp.xml + syntax-highlighting/syntax/component-pascal.xml + syntax-highlighting/syntax/context.xml + syntax-highlighting/syntax/cpp.xml + syntax-highlighting/syntax/crk.xml + syntax-highlighting/syntax/cs.xml + syntax-highlighting/syntax/css.xml + syntax-highlighting/syntax/cubescript.xml + syntax-highlighting/syntax/cue.xml + syntax-highlighting/syntax/curry.xml + syntax-highlighting/syntax/d.xml + syntax-highlighting/syntax/debianchangelog.xml + syntax-highlighting/syntax/debiancontrol.xml + syntax-highlighting/syntax/desktop.xml + syntax-highlighting/syntax/diff.xml + syntax-highlighting/syntax/djangotemplate.xml + syntax-highlighting/syntax/dockerfile.xml + syntax-highlighting/syntax/dosbat.xml + syntax-highlighting/syntax/dot.xml + syntax-highlighting/syntax/doxyfile.xml + syntax-highlighting/syntax/doxygen.xml + syntax-highlighting/syntax/doxygenlua.xml + syntax-highlighting/syntax/dtd.xml + syntax-highlighting/syntax/e.xml + syntax-highlighting/syntax/eiffel.xml + syntax-highlighting/syntax/elixir.xml + syntax-highlighting/syntax/elm.xml + syntax-highlighting/syntax/email.xml + syntax-highlighting/syntax/erlang.xml + syntax-highlighting/syntax/euphoria.xml + syntax-highlighting/syntax/fasm.xml + syntax-highlighting/syntax/fastq.xml + syntax-highlighting/syntax/ferite.xml + syntax-highlighting/syntax/fgl-4gl.xml + syntax-highlighting/syntax/fgl-per.xml + syntax-highlighting/syntax/fish.xml + syntax-highlighting/syntax/flatbuffers.xml + syntax-highlighting/syntax/fortran-fixed.xml + syntax-highlighting/syntax/fortran-free.xml + syntax-highlighting/syntax/freebasic.xml + syntax-highlighting/syntax/fsharp.xml + syntax-highlighting/syntax/fstab.xml + syntax-highlighting/syntax/ftl.xml + syntax-highlighting/syntax/gap.xml + syntax-highlighting/syntax/gcc.xml + syntax-highlighting/syntax/gcode.xml + syntax-highlighting/syntax/gdb-bt.xml + syntax-highlighting/syntax/gdb.xml + syntax-highlighting/syntax/gdbinit.xml + syntax-highlighting/syntax/gdl.xml + syntax-highlighting/syntax/gettext.xml + syntax-highlighting/syntax/git-ignore.xml + syntax-highlighting/syntax/git-rebase.xml + syntax-highlighting/syntax/gitolite.xml + syntax-highlighting/syntax/glosstex.xml + syntax-highlighting/syntax/glsl.xml + syntax-highlighting/syntax/gnuassembler.xml + syntax-highlighting/syntax/gnuplot.xml + syntax-highlighting/syntax/go.xml + syntax-highlighting/syntax/grammar.xml + syntax-highlighting/syntax/groovy.xml + syntax-highlighting/syntax/haml.xml + syntax-highlighting/syntax/hamlet.xml + syntax-highlighting/syntax/haskell.xml + syntax-highlighting/syntax/haxe.xml + syntax-highlighting/syntax/html.xml + syntax-highlighting/syntax/hunspell-aff.xml + syntax-highlighting/syntax/hunspell-dat.xml + syntax-highlighting/syntax/hunspell-dic.xml + syntax-highlighting/syntax/hunspell-idx.xml + syntax-highlighting/syntax/idconsole.xml + syntax-highlighting/syntax/idl.xml + syntax-highlighting/syntax/ilerpg.xml + syntax-highlighting/syntax/inform.xml + syntax-highlighting/syntax/ini.xml + syntax-highlighting/syntax/intelhex.xml + syntax-highlighting/syntax/isocpp.xml + syntax-highlighting/syntax/j.xml + syntax-highlighting/syntax/jam.xml + syntax-highlighting/syntax/java.xml + syntax-highlighting/syntax/javadoc.xml + syntax-highlighting/syntax/javascript-react.xml + syntax-highlighting/syntax/javascript.xml + syntax-highlighting/syntax/jcl.xml + syntax-highlighting/syntax/jira.xml + syntax-highlighting/syntax/json.xml + syntax-highlighting/syntax/jsp.xml + syntax-highlighting/syntax/julia.xml + syntax-highlighting/syntax/k.xml + syntax-highlighting/syntax/kbasic.xml + syntax-highlighting/syntax/kconfig.xml + syntax-highlighting/syntax/kdesrc-buildrc.xml + syntax-highlighting/syntax/kotlin.xml + syntax-highlighting/syntax/latex.xml + syntax-highlighting/syntax/ld.xml + syntax-highlighting/syntax/ldif.xml + syntax-highlighting/syntax/less.xml + syntax-highlighting/syntax/lex.xml + syntax-highlighting/syntax/lilypond.xml + syntax-highlighting/syntax/literate-curry.xml + syntax-highlighting/syntax/literate-haskell.xml + syntax-highlighting/syntax/logcat.xml + syntax-highlighting/syntax/logtalk.xml + syntax-highlighting/syntax/lpc.xml + syntax-highlighting/syntax/lsl.xml + syntax-highlighting/syntax/lua.xml + syntax-highlighting/syntax/m3u.xml + syntax-highlighting/syntax/m4.xml + syntax-highlighting/syntax/mab.xml + syntax-highlighting/syntax/magma.xml + syntax-highlighting/syntax/makefile.xml + syntax-highlighting/syntax/mako.xml + syntax-highlighting/syntax/mandoc.xml + syntax-highlighting/syntax/markdown.xml + syntax-highlighting/syntax/mason.xml + syntax-highlighting/syntax/mathematica.xml + syntax-highlighting/syntax/matlab.xml + syntax-highlighting/syntax/maxima.xml + syntax-highlighting/syntax/mediawiki.xml + syntax-highlighting/syntax/mel.xml + syntax-highlighting/syntax/mergetagtext.xml + syntax-highlighting/syntax/meson.xml + syntax-highlighting/syntax/metafont.xml + syntax-highlighting/syntax/metamath.xml + syntax-highlighting/syntax/mib.xml + syntax-highlighting/syntax/mips.xml + syntax-highlighting/syntax/modelica.xml + syntax-highlighting/syntax/modelines.xml + syntax-highlighting/syntax/modula-2-iso-only.xml + syntax-highlighting/syntax/modula-2-pim-only.xml + syntax-highlighting/syntax/modula-2-r10-only.xml + syntax-highlighting/syntax/modula-2.xml + syntax-highlighting/syntax/monobasic.xml + syntax-highlighting/syntax/mup.xml + syntax-highlighting/syntax/mustache.xml + syntax-highlighting/syntax/nagios.xml + syntax-highlighting/syntax/nasm.xml + syntax-highlighting/syntax/nemerle.xml + syntax-highlighting/syntax/nesc.xml + syntax-highlighting/syntax/ninja.xml + syntax-highlighting/syntax/noweb.xml + syntax-highlighting/syntax/nsis.xml + syntax-highlighting/syntax/objectivec.xml + syntax-highlighting/syntax/objectivecpp.xml + syntax-highlighting/syntax/ocaml.xml + syntax-highlighting/syntax/ocamllex.xml + syntax-highlighting/syntax/ocamlyacc.xml + syntax-highlighting/syntax/octave.xml + syntax-highlighting/syntax/oors.xml + syntax-highlighting/syntax/opal.xml + syntax-highlighting/syntax/opencl.xml + syntax-highlighting/syntax/openscad.xml + syntax-highlighting/syntax/pango.xml + syntax-highlighting/syntax/pascal.xml + syntax-highlighting/syntax/perl.xml + syntax-highlighting/syntax/pgn.xml + syntax-highlighting/syntax/php.xml + syntax-highlighting/syntax/picsrc.xml + syntax-highlighting/syntax/pig.xml + syntax-highlighting/syntax/pike.xml + syntax-highlighting/syntax/pli.xml + syntax-highlighting/syntax/ply.xml + syntax-highlighting/syntax/pony.xml + syntax-highlighting/syntax/postscript.xml + syntax-highlighting/syntax/povray.xml + syntax-highlighting/syntax/powershell.xml + syntax-highlighting/syntax/ppd.xml + syntax-highlighting/syntax/praat.xml + syntax-highlighting/syntax/progress.xml + syntax-highlighting/syntax/prolog.xml + syntax-highlighting/syntax/protobuf.xml + syntax-highlighting/syntax/pug.xml + syntax-highlighting/syntax/puppet.xml + syntax-highlighting/syntax/purebasic.xml + syntax-highlighting/syntax/python.xml + syntax-highlighting/syntax/q.xml + syntax-highlighting/syntax/qdocconf.xml + syntax-highlighting/syntax/qmake.xml + syntax-highlighting/syntax/qml.xml + syntax-highlighting/syntax/r.xml + syntax-highlighting/syntax/rapidq.xml + syntax-highlighting/syntax/rdoc.xml + syntax-highlighting/syntax/relaxng.xml + syntax-highlighting/syntax/relaxngcompact.xml + syntax-highlighting/syntax/replicode.xml + syntax-highlighting/syntax/rest.xml + syntax-highlighting/syntax/rexx.xml + syntax-highlighting/syntax/rhtml.xml + syntax-highlighting/syntax/rib.xml + syntax-highlighting/syntax/rmarkdown.xml + syntax-highlighting/syntax/roff.xml + syntax-highlighting/syntax/rpmspec.xml + syntax-highlighting/syntax/rsiidl.xml + syntax-highlighting/syntax/rtf.xml + syntax-highlighting/syntax/ruby.xml + syntax-highlighting/syntax/rust.xml + syntax-highlighting/syntax/sass.xml + syntax-highlighting/syntax/sather.xml + syntax-highlighting/syntax/scala.xml + syntax-highlighting/syntax/scheme.xml + syntax-highlighting/syntax/sci.xml + syntax-highlighting/syntax/scss.xml + syntax-highlighting/syntax/sed.xml + syntax-highlighting/syntax/selinux-cil.xml + syntax-highlighting/syntax/selinux-fc.xml + syntax-highlighting/syntax/selinux.xml + syntax-highlighting/syntax/sgml.xml + syntax-highlighting/syntax/sieve.xml + syntax-highlighting/syntax/sisu.xml + syntax-highlighting/syntax/smali.xml + syntax-highlighting/syntax/sml.xml + syntax-highlighting/syntax/spice.xml + syntax-highlighting/syntax/sql-mysql.xml + syntax-highlighting/syntax/sql-oracle.xml + syntax-highlighting/syntax/sql-postgresql.xml + syntax-highlighting/syntax/sql.xml + syntax-highlighting/syntax/stan.xml + syntax-highlighting/syntax/stata.xml + syntax-highlighting/syntax/stl.xml + syntax-highlighting/syntax/systemc.xml + syntax-highlighting/syntax/systemverilog.xml + syntax-highlighting/syntax/tads3.xml + syntax-highlighting/syntax/taskjuggler.xml + syntax-highlighting/syntax/tcl.xml + syntax-highlighting/syntax/tcsh.xml + syntax-highlighting/syntax/template-toolkit.xml + syntax-highlighting/syntax/texinfo.xml + syntax-highlighting/syntax/textile.xml + syntax-highlighting/syntax/tibasic.xml + syntax-highlighting/syntax/tiger.xml + syntax-highlighting/syntax/toml.xml + syntax-highlighting/syntax/txt2tags.xml + syntax-highlighting/syntax/typescript-react.xml + syntax-highlighting/syntax/typescript.xml + syntax-highlighting/syntax/uscript.xml + syntax-highlighting/syntax/vala.xml + syntax-highlighting/syntax/valgrind-suppression.xml + syntax-highlighting/syntax/varnish.xml + syntax-highlighting/syntax/varnish4.xml + syntax-highlighting/syntax/varnishcc.xml + syntax-highlighting/syntax/varnishcc4.xml + syntax-highlighting/syntax/varnishtest.xml + syntax-highlighting/syntax/varnishtest4.xml + syntax-highlighting/syntax/vcard.xml + syntax-highlighting/syntax/velocity.xml + syntax-highlighting/syntax/vera.xml + syntax-highlighting/syntax/verilog.xml + syntax-highlighting/syntax/vhdl.xml + syntax-highlighting/syntax/vrml.xml + syntax-highlighting/syntax/wavefront-obj.xml + syntax-highlighting/syntax/wayland-trace.xml + syntax-highlighting/syntax/winehq.xml + syntax-highlighting/syntax/wml.xml + syntax-highlighting/syntax/xharbour.xml + syntax-highlighting/syntax/xml.xml + syntax-highlighting/syntax/xmldebug.xml + syntax-highlighting/syntax/xonotic-console.xml + syntax-highlighting/syntax/xorg.xml + syntax-highlighting/syntax/xslt.xml + syntax-highlighting/syntax/xul.xml + syntax-highlighting/syntax/yacas.xml + syntax-highlighting/syntax/yacc.xml + syntax-highlighting/syntax/yaml.xml + syntax-highlighting/syntax/yang.xml + syntax-highlighting/syntax/zonnon.xml + syntax-highlighting/syntax/zsh.xml + + diff --git a/src/data/extra/syntax-highlighting/syntax/4dos.xml b/src/data/extra/syntax-highlighting/syntax/4dos.xml new file mode 100644 index 00000000..b5f72ec0 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/4dos.xml @@ -0,0 +1,924 @@ + + + + + +]> + + + + + todo + attention + attn + fixme + achtung + info + + + DOSMEM + EMS + EXTENDED + XMS + CDROM + CLUSTSIZE + CODEPAGE + COM + DEVICE + DISKFREE + DISKTOTAL + DISKUSED + DRIVETYPE + HDDSIZE + LPT + READY + REMOTE + REMOVABLE + ATTRIB + COMPARE + FILEAGE + FILECLOSE + FILEOPEN + FILEREAD + FILEREADB + FILES + FILESEEK + FILESEEKL + FILESIZE + FILEWRITE + FILEWRITEB + FINDCLOSE + LINES + ASCII + COUNT + FIELDS + INDEX + ISALNUM + ISALPHA + ISASCII + ISCNTRL + ISDIGIT + ISLOWER + ISPRINT + ISPUNCT + ISSPACE + ISUPPER + ISXDIGIT + LEN + SIMILAR + WILD + WORDS + ABS + AVERAGE + CEILING + CONVERT + DEC + DECIMAL + DIGITS + EVAL + FLOOR + INC + INT + MAX + MIN + NUMERIC + RANDOM + DATE + DAY + DOWI + DOY + ISODOWI + ISOWEEK + ISOWYEAR + MAKEAGE + MONTH + TIME + YEAR + EXEC + INIWRITE + + + DDCSTR + MASTER + READSCR + SMBSTR + CWD + CWDS + FSTYPE + LABEL + SERIAL + ATTRIB + FILEDATE + FILETIME + FINDFIRST + FINDNEXT + LINE + MD5 + SEARCH + SHA1 + TRUENAME + UNIQUE + ALTNAME + EXPAND + EXT + FILENAME + FULL + LFN + NAME + PATH + QUOTE + SFN + UNQUOTE + UNQUOTES + ASCII + CAPS + CHAR + FIELD + FORMAT + INSERT + INSTR + LCS + LEFT + LOWER + LTRIM + REPEAT + REPLACE + RIGHT + RTRIM + REVERSE + STRIP + SUBST + SUBSTR + TRIM + UPPER + WORD + COMMA + AGEDATE + DATECONV + DOW + DOWF + MAKEDATE + MAKETIME + MONTHF + ALIAS + CLIP + CLIPW + EXECSTR + FUNCTION + HISTORY + IF + INIREAD + SELECT + TIMER + + if + iff + text + input + inkey + do + enddo + + iterate + leave + + switch + errorlevel + + defined + isalias + isfunction + isinternal + islabel + + + set + function + alias + + + ENDLOCAL + UNALIAS + UNFUNCTION + UNSET + + + for + else + elseiff + endiff + enddo + endtext + case + endswitch + default + + + + + BREAK + IDLE + LFNFOR + LOADBTM + SWAPPING + TRANSIENT + VERIFY + + + CALL + CD + CHDIR + CDD + DIR + ERASE + DEL + DESCRIBE + HEAD + MD + MKDIR + RD + RMDIR + PUSHD + REN + RENAME + TOUCH + + + BEEP + CANCEL + DATE + FREE + KEYBD + ELSE + PAUSE + POPD + QUIT + SETDOS + SHIFT + TAIL + TEE + TIME + TIMER + TYPE + + + CHCP + DELAY + COUNTRY + SETERROR + + + CLS + COLOR + + + ATTRIB + COPY + FFIND + MOVE + + + DRAWBOX + DRAWHLINE + DRAWVLINE + SCREEN + SCRPUT + VSCRPUT + + + EXCEPT + GLOBAL + + + SETLOCAL + + + on + off + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/abap.xml b/src/data/extra/syntax-highlighting/syntax/abap.xml new file mode 100644 index 00000000..12c604a0 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/abap.xml @@ -0,0 +1,285 @@ + + + + + + + + ADD + ADJACENT + ALL + AND + APPEND + APPENDING + AS + ASCENDING + AT + BEGIN + BETWEEN + BINARY + BLOCK + BY + CASE + CENTERED + CHAIN + CHANGING + CHECK + CHECKBOX + CLEAR + COL_BACKGROUND + COL_HEADING + COL_NORMAL + COL_TOTAL + COLOR + COMMENT + COMMIT + COMPARING + COMPUTE + CONCATENATE + CONDENSE + CONSTANTS + CONTINUE + CONTROLS + COUNTRY + DATA + DECIMALS + DEFAULT + DELETE + DELETING + DESCENDING + DESCRIBE + DO + DUPLICATES + EDIT + ELSE + ELSEIF + END + ENDCASE + ENDCHAIN + ENDDO + ENDIF + ENDLOOP + ENDMODULE + ENDSELECT + ENDWHILE + ENTRIES + EQ + EXCEPTIONS + EXCLUDING + EXIT + EXIT-COMMAND + EXPORT + EXPORTING + FIELD + FIRST + FOR + FORMAT + FRAME + FREE + FROM + GE + GROUP + GT + HEADER + HEADING + HIDE + HOTSPOT + ID + IF + IMPORT + IMPORTING + IN + INDEX + INITIAL + INNER + INPUT + INSERT + INTENSIFIED + INTERVALS + INTO + IS + JOIN + KEY + LE + LEAVE + LEFT + LEFT-JUSTIFIED + LIKE + LINE + LINE-COUNT + LINES + LINES + LINE-SIZE + LIST-PROCESSING + LOOP + LT + MASK + MEMORY + MESSAGE + MESSAGE-ID + MOD + MODIFY + MODULE + MOVE + MOVE-CORRESPONDING + NE + NEW-LINE + NEW-PAGE + NO + NO-EXTENSION + NO-GAP + NO-SCROLLING + NOT + NO-ZERO + NUMBER + OBLIGATORY + OCCURS + OF + OFF + ON + OR + OTHERS + OUTPUT + PAGE + PARAMETER + PARAMETERS + PERFORM + PF-STATUS + POS_HIGH + POS_LOW + POSITION + PROGRAM + RADIOBUTTON + RANGES + READ + REFRESH + REPORT + RESERVE + RESET + RIGHT + RIGHT-JUSTIFIED + ROLLBACK + ROWS + SCREEN + SCREEN-GROUP1 + SCREEN-GROUP2 + SCREEN-GROUP3 + SCREEN-GROUP4 + SCREEN-GROUP5 + SCREEN-INPUT + SCREEN-INTENSIFIED + SEARCH + SELECT + SELECTION + SELECTION-SCREEN + SELECT-OPTIONS + SEPARATED + SET + SHIFT + SINGLE + SKIP + SORT + SPACE + SPLIT + STANDARD + STARTING + STOP + STRLEN + STRUCTURE + SUBTRACT + SY-CUCOL + SY-DATUM + SY-DYNNR + SY-LINSZ + SY-LOOPC + SY-LSIND + SY-MSGID + SY-MSGTY + SY-MSGV1 + SY-MSGV2 + SY-MSGV3 + SY-MSGV4 + SY-PAGNO + SY-REPID + SY-STEPL + SY-SUBRC + SY-TABIX + SY-TCODE + SY-TMAXL + SY-UCOMM + SY-ULINE + SY-UNAME + SY-UZEIT + SY-VLINE + TABLE + TABLES + TABLEVIEW + TIMES + TITLE + TITLEBAR + TO + TRAILING + TRANSPORTING + TYPE + TYPE-POOLS + TYPES + ULINE + UP + UPDATE + USING + VALUE + WHEN + WHERE + WHILE + WITH + WORK + WRITE + AFTER + BEFORE + CALL + DURING + ENDFORM + END-OF-SELECTION + FORM + FUNCTION + INCLUDE + LINE-SELECTION + PROCESS + START-OF-SELECTION + TOP-OF-PAGE + TRANSACTION + USER-COMMAND + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/abc.xml b/src/data/extra/syntax-highlighting/syntax/abc.xml new file mode 100644 index 00000000..a4c3d9f6 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/abc.xml @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/actionscript.xml b/src/data/extra/syntax-highlighting/syntax/actionscript.xml new file mode 100644 index 00000000..89c91a9d --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/actionscript.xml @@ -0,0 +1,336 @@ + + + + + + + _accProps + _focusrect + _global + _highquality + _level + _parent + _quality + _root + _soundbuftime + maxscroll + scroll + this + + + + asfunction + call + chr + clearInterval + duplicateMovieClip + escape + eval + fscommand + getProperty + getTimer + getURL + getVersion + gotoAndPlay + gotoAndStop + ifFrameLoaded + int + isFinite + isNaN + length + loadMovie + loadMovieNum + loadVariables + loadVariablesNum + mbchr + mblength + mbord + mbsubstring + nextFrame + nextScene + on + onClipEvent + ord + parseFloat + parseInt + play + prevFrame + prevScene + print + printAsBitmap + printAsBitmapNum + printNum + random + removeMovieClip + setInterval + setProperty + showRedrawRegions + startDrag + stop + stopAllSounds + stopDrag + substring + targetPath + tellTarget + toggleHighQuality + trace + typeof + unescape + unloadMovie + unloadMovieNum + updateAfterEvent + + + + Accessibility + Accordion + Alert + Binding + Button + Camera + CellRenderer + CheckBox + Collection + Color + ComboBox + ComponentMixins + ContextMenu + ContextMenuItem + CustomActions + CustomFormatter + CustomValidator + DataGrid + DataHolder + DataProvider + DataSet + DataType + Date + DateChooser + DateField + Delta + DeltaItem + DeltaPacket + DepthManager + EndPoint + Error + FaultEvent + FocusManager + Form + Function + Iterator + Key + Label + List + LoadVars + Loader + LocalConnection + Log + Math + Media + Menu + MenuBar + Microphone + Mouse + MovieClip + MovieClipLoader + NetConnection + NetStream + Number + NumericStepper + PendingCall + PopUpManager + PrintJob + ProgressBar + RDBMSResolver + RadioButton + RelayResponder + SOAPCall + Screen + ScrollPane + Selection + SharedObject + Slide + Sound + Stage + StyleManager + System + TextArea + TextField + TextFormat + TextInput + TextSnapshot + TransferObject + Tree + TreeDataProvider + TypedValue + UIComponent + UIEventDispatcher + UIObject + Video + WebService + WebServiceConnector + Window + XML + XMLConnector + XUpdateResolver + + + + add + and + break + case + catch + class + continue + default + delete + do + dynamic + else + eq + extends + finally + for + function + ge + get + gt + if + implements + import + in + instanceof + interface + intrinsic + le + lt + ne + new + not + or + private + public + return + set + static + switch + throw + try + var + void + while + with + + + + false + Infinity + -Infinity + NaN + newline + null + true + undefined + + + + Array + Boolean + Number + Object + String + Void + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/ada.xml b/src/data/extra/syntax-highlighting/syntax/ada.xml new file mode 100644 index 00000000..64bb9b62 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/ada.xml @@ -0,0 +1,201 @@ + + + + + + abort + abs + abstract + accept + access + aliased + all + and + array + at + begin + body + constant + declare + delay + delta + digits + do + else + elsif + end + entry + exception + exit + for + function + generic + goto + in + interface + is + limited + mod + new + not + null + of + or + others + out + overriding + package + pragma + private + procedure + protected + raise + range + rem + record + renames + requeue + return + reverse + separate + subtype + tagged + task + terminate + then + type + until + use + when + while + with + xor + + + all_calls_remote + assert + assertion_policy + asynchronous + atomic + atomic_components + attach_handler + controlled + convention + detect_blocking + discard_names + elaborate + elaborate_all + elaborate_body + export + import + inline + inspection_point + interrupt_handler + interrupt_priority + linker_options + list + locking_policy + no_return + normalize_scalars + optimize + pack + page + partition_elaboration_policy + preelaborable_initialization + preelaborate + priority + priority_specific_dispatching + profile + pure + queuing_policy + relative_deadline + remote_call_interface + remote_types + restrictions + reviewable + shared_passive + storage_size + suppress + task_dispatching_policy + unchecked_union + unsuppress + volatile + volatile_components + + + boolean + character + float + integer + long_float + long_integer + long_long_float + long_long_integer + short_float + short_integer + string + wide_string + wide_character + wide_wide_character + wide_wide_string + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/adblock.xml b/src/data/extra/syntax-highlighting/syntax/adblock.xml new file mode 100644 index 00000000..796b2998 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/adblock.xml @@ -0,0 +1,87 @@ + + + + + + + Homepage + Title + Expires + Checksum + Redirect + Version + + + script + image + stylesheet + object + xmlhttprequest + object-subrequest + subdocument + ping + websocket + webrtc + document + elemhide + generichide + genericblock + popup + other + third-party + domain + sitekey + match-case + collapse + donottrack + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/agda.xml b/src/data/extra/syntax-highlighting/syntax/agda.xml new file mode 100644 index 00000000..958bc953 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/agda.xml @@ -0,0 +1,107 @@ + + + +]> + + + + abstract + codata + coinductive + constructor + data + field + forall + hiding + import + in + inductive + infix + infixl + infixr + let + open + pattern + postulate + primitive + private + public + module + mutual + quote + quoteGoal + quoteTerm + record + renaming + rewrite + syntax + to + unquote + using + where + with + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/ahdl.xml b/src/data/extra/syntax-highlighting/syntax/ahdl.xml new file mode 100644 index 00000000..76bd3359 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/ahdl.xml @@ -0,0 +1,145 @@ + + + + + + assert + bidir + bits + buried + case + clique + connected_pins + constant + defaults + define + design + device + else + elsif + for + function + generate + gnd + help_id + in + include + input + is + machine + node + of + options + others + output + parameters + returns + states + subdesign + then + title + to + tri_state_node + variable + vcc + when + with + + + carry + cascade + dffe + dff + exp + global + jkffe + jkff + latch + lcell + mcell + memory + opendrn + soft + srffe + srff + tffe + tff + tri + wire + x + + + not + and + nand + or + nor + xor + xnor + mod + div + log2 + used + ceil + floor + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/ahk.xml b/src/data/extra/syntax-highlighting/syntax/ahk.xml new file mode 100644 index 00000000..79965c43 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/ahk.xml @@ -0,0 +1,1143 @@ + + + + + + + if + ifequal + ifexist + ifgreater + ifgreaterorequal + ifinstring + ifless + iflessorequal + ifmsgbox + ifnotequal + ifnotexist + ifnotinstring + ifwinactive + ifwinexist + ifwinnotactive + ifwinnotexist + break + continue + else + exit + exitapp + gosub + goto + loop + onexit + pause + repeat + return + settimer + sleep + suspend + static + global + local + byref + while + until + for + + + autotrim + blockinput + clipwait + control + controlclick + controlfocus + controlget + controlgetfocus + controlgetpos + controlgettext + controlmove + controlsend + controlsendraw + controlsettext + coordmode + critical + detecthiddentext + detecthiddenwindows + drive + driveget + drivespacefree + edit + endrepeat + envadd + envdiv + envget + envmult + envset + envsub + envupdate + fileappend + filecopy + filecopydir + filecreatedir + filecreateshortcut + filedelete + filegetattrib + filegetshortcut + filegetsize + filegettime + filegetversion + fileinstall + filemove + filemovedir + fileread + filereadline + filerecycle + filerecycleempty + fileremovedir + fileselectfile + fileselectfolder + filesetattrib + filesettime + formattime + getkeystate + groupactivate + groupadd + groupclose + groupdeactivate + gui + guicontrol + guicontrolget + hideautoitwin + hotkey + imagesearch + inidelete + iniread + iniwrite + input + inputbox + keyhistory + keywait + listhotkeys + listlines + listvars + menu + mouseclick + mouseclickdrag + mousegetpos + mousemove + msgbox + outputdebug + pixelgetcolor + pixelsearch + postmessage + process + progress + random + regdelete + regread + regwrite + reload + run + runas + runwait + send + sendevent + sendinput + sendmessage + sendmode + sendplay + sendraw + setbatchlines + setcapslockstate + setcontroldelay + setdefaultmousespeed + setenv + setformat + setkeydelay + setmousedelay + setnumlockstate + setscrolllockstate + setstorecapslockmode + settitlematchmode + setwindelay + setworkingdir + shutdown + sort + soundbeep + soundget + soundgetwavevolume + soundplay + soundset + soundsetwavevolume + splashimage + splashtextoff + splashtexton + splitpath + statusbargettext + statusbarwait + stringcasesense + stringgetpos + stringleft + stringlen + stringlower + stringmid + stringreplace + stringright + stringsplit + stringtrimleft + stringtrimright + stringupper + sysget + thread + tooltip + transform + traytip + urldownloadtofile + winactivate + winactivatebottom + winclose + winget + wingetactivestats + wingetactivetitle + wingetclass + wingetpos + wingettext + wingettitle + winhide + winkill + winmaximize + winmenuselectitem + winminimize + winminimizeall + winminimizeallundo + winmove + winrestore + winset + winsettitle + winshow + winwait + winwaitactive + winwaitclose + winwaitnotactive + fileencoding + + + abs + acos + asc + asin + atan + ceil + chr + cos + dllcall + exp + fileexist + floor + getkeystate + numget + numput + registercallback + il_add + il_create + il_destroy + instr + islabel + isfunc + ln + log + lv_add + lv_delete + lv_deletecol + lv_getcount + lv_getnext + lv_gettext + lv_insert + lv_insertcol + lv_modify + lv_modifycol + lv_setimagelist + mod + onmessage + round + regexmatch + regexreplace + sb_seticon + sb_setparts + sb_settext + sin + sqrt + strlen + substr + tan + tv_add + tv_delete + tv_getchild + tv_getcount + tv_getnext + tv_get + tv_getparent + tv_getprev + tv_getselection + tv_gettext + tv_modify + varsetcapacity + winactive + winexist + trim + ltrim + rtrim + fileopen + strget + strput + object + array + isobject + objinsert + objremove + objminindex + objmaxindex + objsetcapacity + objgetcapacity + objgetaddress + objnewenum + objaddref + objrelease + objhaskey + objclone + _insert + _remove + _minindex + _maxindex + _setcapacity + _getcapacity + _getaddress + _newenum + _addref + _release + _haskey + _clone + comobjcreate + comobjget + comobjconnect + comobjerror + comobjactive + comobjenwrap + comobjunwrap + comobjparameter + comobjmissing + comobjtype + comobjvalue + comobjarray + comobjquery + comobjflags + + + allowsamelinecomments + clipboardtimeout + commentflag + errorstdout + escapechar + hotkeyinterval + hotkeymodifiertimeout + hotstring + if + iftimeout + ifwinactive + ifwinexist + include + includeagain + installkeybdhook + installmousehook + keyhistory + ltrim + maxhotkeysperinterval + maxmem + maxthreads + maxthreadsbuffer + maxthreadsperhotkey + menumaskkey + noenv + notrayicon + persistent + singleinstance + usehook + warn + winactivateforce + + + shift + lshift + rshift + alt + lalt + ralt + control + lcontrol + rcontrol + ctrl + lctrl + rctrl + lwin + rwin + appskey + altdown + altup + shiftdown + shiftup + ctrldown + ctrlup + lwindown + lwinup + rwindown + rwinup + lbutton + rbutton + mbutton + wheelup + wheeldown + xbutton1 + xbutton2 + joy1 + joy2 + joy3 + joy4 + joy5 + joy6 + joy7 + joy8 + joy9 + joy10 + joy11 + joy12 + joy13 + joy14 + joy15 + joy16 + joy17 + joy18 + joy19 + joy20 + joy21 + joy22 + joy23 + joy24 + joy25 + joy26 + joy27 + joy28 + joy29 + joy30 + joy31 + joy32 + joyx + joyy + joyz + joyr + joyu + joyv + joypov + joyname + joybuttons + joyaxes + joyinfo + space + tab + enter + escape + esc + backspace + bs + delete + del + insert + ins + pgup + pgdn + home + end + up + down + left + right + printscreen + ctrlbreak + pause + scrolllock + capslock + numlock + numpad0 + numpad1 + numpad2 + numpad3 + numpad4 + numpad5 + numpad6 + numpad7 + numpad8 + numpad9 + numpadmult + numpadadd + numpadsub + numpaddiv + numpaddot + numpaddel + numpadins + numpadclear + numpadup + numpaddown + numpadleft + numpadright + numpadhome + numpadend + numpadpgup + numpadpgdn + numpadenter + f1 + f2 + f3 + f4 + f5 + f6 + f7 + f8 + f9 + f10 + f11 + f12 + f13 + f14 + f15 + f16 + f17 + f18 + f19 + f20 + f21 + f22 + f23 + f24 + browser_back + browser_forward + browser_refresh + browser_stop + browser_search + browser_favorites + browser_home + volume_mute + volume_down + volume_up + media_next + media_prev + media_stop + media_play_pause + launch_mail + launch_media + launch_app1 + launch_app2 + blind + click + raw + wheelleft + wheelright + + + a_ahkpath + a_ahkversion + a_appdata + a_appdatacommon + a_autotrim + a_batchlines + a_caretx + a_carety + a_computername + a_controldelay + a_cursor + a_dd + a_ddd + a_dddd + a_defaultmousespeed + a_desktop + a_desktopcommon + a_detecthiddentext + a_detecthiddenwindows + a_endchar + a_eventinfo + a_exitreason + a_formatfloat + a_formatinteger + a_gui + a_guievent + a_guicontrol + a_guicontrolevent + a_guiheight + a_guiwidth + a_guix + a_guiy + a_hour + a_iconfile + a_iconhidden + a_iconnumber + a_icontip + a_index + a_ipaddress1 + a_ipaddress2 + a_ipaddress3 + a_ipaddress4 + a_isadmin + a_iscompiled + a_issuspended + a_keydelay + a_language + a_lasterror + a_linefile + a_linenumber + a_loopfield + a_loopfileattrib + a_loopfiledir + a_loopfileext + a_loopfilefullpath + a_loopfilelongpath + a_loopfilename + a_loopfileshortname + a_loopfileshortpath + a_loopfilesize + a_loopfilesizekb + a_loopfilesizemb + a_loopfiletimeaccessed + a_loopfiletimecreated + a_loopfiletimemodified + a_loopreadline + a_loopregkey + a_loopregname + a_loopregsubkey + a_loopregtimemodified + a_loopregtype + a_mday + a_min + a_mm + a_mmm + a_mmmm + a_mon + a_mousedelay + a_msec + a_mydocuments + a_now + a_nowutc + a_numbatchlines + a_ostype + a_osversion + a_priorhotkey + a_programfiles + a_programs + a_programscommon + a_screenheight + a_screenwidth + a_scriptdir + a_scriptfullpath + a_scriptname + a_sec + a_space + a_startmenu + a_startmenucommon + a_startup + a_startupcommon + a_stringcasesense + a_tab + a_temp + a_thishotkey + a_thismenu + a_thismenuitem + a_thismenuitempos + a_tickcount + a_timeidle + a_timeidlephysical + a_timesincepriorhotkey + a_timesincethishotkey + a_titlematchmode + a_titlematchmodespeed + a_username + a_wday + a_windelay + a_windir + a_workingdir + a_yday + a_year + a_yweek + a_yyyy + clipboard + clipboardall + comspec + errorlevel + programfiles + true + false + a_thisfunc + a_thislabel + a_ispaused + a_iscritical + a_isunicode + a_ptrsize + + + ltrim + rtrim + join + ahk_id + ahk_pid + ahk_class + ahk_group + processname + minmax + controllist + statuscd + filesystem + setlabel + alwaysontop + mainwindow + nomainwindow + useerrorlevel + altsubmit + hscroll + vscroll + imagelist + wantctrla + wantf2 + vis + visfirst + wantreturn + backgroundtrans + minimizebox + maximizebox + sysmenu + toolwindow + exstyle + check3 + checkedgray + readonly + notab + lastfound + lastfoundexist + alttab + shiftalttab + alttabmenu + alttabandmenu + alttabmenudismiss + controllisthwnd + hwnd + deref + pow + bitnot + bitand + bitor + bitxor + bitshiftleft + bitshiftright + sendandmouse + mousemove + mousemoveoff + hkey_local_machine + hkey_users + hkey_current_user + hkey_classes_root + hkey_current_config + hklm + hku + hkcu + hkcr + hkcc + reg_sz + reg_expand_sz + reg_multi_sz + reg_dword + reg_qword + reg_binary + reg_link + reg_resource_list + reg_full_resource_descriptor + reg_resource_requirements_list + reg_dword_big_endian + regex + pixel + mouse + screen + relative + rgb + low + belownormal + normal + abovenormal + high + realtime + between + contains + in + is + integer + float + number + digit + xdigit + integerfast + floatfast + alpha + upper + lower + alnum + time + date + not + or + and + topmost + top + bottom + transparent + transcolor + redraw + region + id + idlast + count + list + capacity + eject + lock + unlock + label + serial + type + status + seconds + minutes + hours + days + read + parse + logoff + close + error + single + shutdown + menu + exit + reload + tray + add + rename + check + uncheck + togglecheck + enable + disable + toggleenable + default + nodefault + standard + nostandard + color + delete + deleteall + icon + noicon + tip + click + show + edit + progress + hotkey + text + picture + pic + groupbox + button + checkbox + radio + dropdownlist + ddl + combobox + statusbar + treeview + listbox + listview + datetime + monthcal + updown + slider + tab + tab2 + iconsmall + tile + report + sortdesc + nosort + nosorthdr + grid + hdr + autosize + range + xm + ym + ys + xs + xp + yp + font + resize + owner + submit + nohide + minimize + maximize + restore + noactivate + na + cancel + destroy + center + margin + owndialogs + guiescape + guiclose + guisize + guicontextmenu + guidropfiles + tabstop + section + wrap + border + top + bottom + buttons + expand + first + lines + number + uppercase + lowercase + limit + password + multi + group + background + bold + italic + strike + underline + norm + theme + caption + delimiter + flash + style + checked + password + hidden + left + right + center + section + move + focus + hide + choose + choosestring + text + pos + enabled + disabled + visible + notimers + interrupt + priority + waitclose + unicode + tocodepage + fromcodepage\ + yes + no + ok + cancel + abort + retry + ignore + force + on + off + all + send + wanttab + monitorcount + monitorprimary + monitorname + monitorworkarea + pid + base + __get + __set + __call + __delete + useunsetlocal + useunsetglobal + useenv + localsameasglobal + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/alert.xml b/src/data/extra/syntax-highlighting/syntax/alert.xml new file mode 100644 index 00000000..ec881f15 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/alert.xml @@ -0,0 +1,53 @@ + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/ample.xml b/src/data/extra/syntax-highlighting/syntax/ample.xml new file mode 100644 index 00000000..2c77865b --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/ample.xml @@ -0,0 +1,3234 @@ + + + + + + + break + builtin + case + continue + do + else + extern + local + for + function + if + return + switch + while + + + void + undefined + $abort_enable + $dofile_arg1 + $dofile_arg2 + $dofile_arg3 + $dofile_arg4 + $dofile_arg5 + $dofile_arg6 + $dofile_arg7 + $dofile_arg8 + $dofile_arg9 + $dofile_arg10 + $dofile_arg11 + $dofile_arg12 + $dofile_arg13 + $dofile_arg14 + $dofile_arg15 + $dofile_arg16 + $dofile_arg17 + $dofile_arg18 + $dofile_arg19 + $dofile_arg20 + $dofile_arg_count + $dofile_result + false + off + on + pi + $stderr + $stdin + $stdout + true + two_pi + + + + + + abs + acos + $add_complex + $add_status_args + asin + atan + atan2 + $bad_status + ceil + $clear_file_error + $close_file + $complex_imaginary + $complex_real + $conjugate_complex + $constrain_value + cos + cosh + cot + $create_complex + $create_string_registry + $create_vector + csc + $current_user + $cvt_exist_file + $cvt_read_variable + $cvt_type + $cvt_write_variable + $date + deg + $divide_complex + $dofile + $e + $eof + exp + $expand_rest + $f + $file_error + $file_exist + $file_pos + $file_status + floor + $flush_file + $format + $free_stream_id + $function_help + $function_ref_help + $function_signature + $g + $generate_rand + $get_ample_status + $get_app_name + $get_app_ver + $get_env + $i + $integer_divide + length + $list_overwritten_functions + $load_library + log + log10 + $lower_string + $magnitude_complex + $multiply_complex + $n + $number_string + $open_file + $ord_to_string + $phase_complex + $pop_ample_status + pow + $qsort + rad + $raise_status + $read_file + $reads_file + $real_time + $register_alias + $register_args + $register_command + $resolve_mgc_path + $round + $round_prec + $s + sec + $seek_file + $set_function_status + $set_rand + $set_status + $set_thousands + $set_transcript_mode + sin + sinh + sqrt + $sscanf + $strcat + $strftime + $string_locate + $string_status + $string_to_ord + $subtract_complex + $suspend + $sys_time + $system + tan + tanh + $time + $traceback + $truncate + $type + $undefine_id + $upper_string + $vector_count_range + $vector_element_divide + $vector_element_multiply + $vector_find + $vector_histogram + $vector_integrate + $vector_max + $vector_min + $vector_search + $vector_slope + $vector_sum + $vendor_cpu + $where_is + $write_file + $writeln_file + $writes_file + + + $acquire_license + $activate_net + $activate_net_by_handle + $activate_net_by_name + $activate_port + $activate_port_by_handle + $activate_port_by_name + $add_cell + $add_contacts + $add_device + $add_fp_shape + $add_group_property + $add_metal + $add_multiple_text + $add_net_members_to_ports + $add_overflow + $add_overflow_by_handle + $add_panel + $add_path + $add_path_device + $add_point_device + $add_property + $add_property_group_members + $add_property_group_selections + $add_property_text + $add_route + $add_row + $add_rows_by_area + $add_ruler + $add_shape + $add_shape_device + $add_text + $add_text_on_ports + $add_to_library + $add_to_net + $add_to_port + $add_via + $align + $apply_print_vector_attributes + $attach_library + $autofloorplan + $autoplace_blocks + $autoplace_corner_cells + $autoplace_group + $autoplace_pins + $autoplace_ports + $autoplace_power_vias + $autoplace_standard_cells + $autoroute_all + $autoroute_nets + $autoroute_overflow + $backannotate_net_parameters + $build_hotplot_setup + $build_lib + $build_ports + $build_ports_shapes + $build_ports_text_location + $build_power_strap_shapes + $build_power_straps + $build_read_gdsii_optfile + $change_array + $change_aspect + $change_cursor_status + $change_device + $change_from_object_template + $change_group_property + $change_layer + $change_net + $change_object_attributes + $change_object_template + $change_overflow + $change_overflow_by_handle + $change_path + $change_port + $change_property + $change_property_group_members + $change_property_group_selections + $change_property_text + $change_row + $change_text + $change_via_type + $change_window + $checkpoint_cell + $checkpoint_cell_by_name + $check_drc + $check_fn + $check_instances + $check_overflows + $check_polygons + $check_power_pins + $check_preconditions + $check_shorts_all + $check_shorts_selected + $clear_clipboard + $close_layout_library + $close_logic + $close_selection + $close_session + $close_window + $compact + $compose_groups + $compose_layer_geometries + $compose_layer_selections + $connect_instance + $convert_dracula + $copy + $copy_edit_hotkey_settings + $copy_relative + $copy_to_clipboard + $copy_to_fp_layer + $copy_to_layer + $create_cell + $create_def_from_layout_view + $create_layout_library + $create_layout_view + $create_layout_view_from_def + $create_layout_view_from_lef + $create_layout_view_from_verilog + $create_lef_from_layout_library + $create_lef_from_layout_view + $create_library + $create_process + $create_toolbar + $create_via_cell + $create_viewpoint + $cut + $cut_stretch + $deactivate + $define_hotkey + $define_layer_alias + $define_layer_name + $define_layer_set + $define_max_gate_width + $define_mos_site_type + $define_must_connect + $define_net_pair + $define_net_shield + $define_route_transform + $delete + $delete_area + $delete_connectivity + $delete_drc_all + $delete_drc_area + $delete_drc_check + $delete_drc_current + $delete_drc_point + $delete_drc_scan + $delete_from_library + $delete_group_property + $delete_lvs_results + $delete_panel + $delete_property + $delete_property_group_members + $delete_property_group_selections + $delete_routing + $delete_ruler + $delete_rulers_all + $detach_library + $display_channels + $does_cell_exist + $edit_library + $edit_process + $edit_process_override + $enable_edit_layout_library + $export_drc_check + $extract_cell_connectivity + $extract_direct_distributed_parameters + $extract_direct_lumped_parameters + $extract_mask_distributed_parameters + $extract_mask_lumped_parameters + $fillet + $fillet_area + $filter_group + $fit_fp_shape + $flatten + $flatten_hierarchy + $flip + $flip_in_place + $flip_on_axis + $form_ic_action_buttons_gadget + $form_ic_color_paint_chip_gadget + $form_ic_display_gadget + $form_ic_layer_palette_gadget + $form_ic_patterns_list_box_gadget + $form_single_check_box_gadget + $fracture + $freeze_window + $get_absolute_points + $get_acap_info + $get_active_ic_window + $get_active_net + $get_active_port + $get_arc + $get_area + $get_area_estimate + $get_array_value + $get_auto_checkpoint + $get_basepoint + $get_bottom_orient_set + $get_boundary + $get_cap_extent + $get_cap_neg_pin + $get_cap_pos_pin + $get_cell_boundary + $get_cell_configuration + $get_cell_equivalents + $get_cell_info + $get_cell_list_dts + $get_cell_path + $get_cell_refs + $get_cell_xrefs + $get_circle + $get_closed_polygon + $get_closest_object_location + $get_closest_object_points + $get_compact_add_blkgs + $get_compact_jog_power + $get_compose_layer_geometries + $get_compose_layer_selections + $get_connectivity_layers + $get_containment + $get_context_contrast + $get_context_from_world + $get_crosshair_target_radius + $get_crosshair_target_style + $get_def_bus_bit_characters + $get_def_bus_bit_characters + $get_def_divider_character + $get_def_divider_character + $get_def_non_orthogonal + $set_def_non_orthogonal + $get_design_layers + $get_design_path + $get_design_refs + $get_dev_info + $get_dev_layer + $get_dev_rule + $get_device_alias + $get_device_iobj + $get_device_name + $get_drc_check_current_count + $get_drc_check_original_count + $get_drc_check_polygon_count + $get_drc_check_scan_count + $get_drc_current_result_check_name + $get_drc_current_result_number + $get_drc_current_result_points + $get_drc_current_result_type + $get_drc_default_layer_directory_name + $get_drc_default_summary_report_file_name + $get_drc_results_database_check_count + $get_drc_results_database_check_names + $get_drc_results_database_nonempty_check_names + $get_drc_results_database_result_count + $get_drc_results_database_scan_check_names + $get_drc_results_database_scan_result_count + $get_endangered_nets + $get_externals_info + $get_fp_compute_num_rows + $get_fp_compute_route_area_ratio + $get_fp_extend_row + $get_fractured_rectangles + $get_gadget_value + $get_graphic_preempt_list + $get_group_members + $get_group_names + $get_group_property_names + $get_highlight_count + $get_hotkey_settings + $get_ic_cell_windows + $get_ic_location + $get_ic_window_names + $get_instance_extent + $get_instance_fp_extent + $get_instance_version + $get_internal_row_layout + $get_internal_row_sequence + $get_layer_info + $get_layer_minimum_spacing + $get_layer_minimum_width + $get_layer_names + $get_layer_number + $get_layer_palette_height + $get_layers + $get_layout_counterpart + $get_layout_window + $get_lef_bus_bit_characters + $get_lef_bus_bit_characters + $get_lef_divider_character + $get_lef_divider_character + $get_lef_non_orthogonal + $set_lef_non_orthogonal + $get_lef_overlap_boundary + $set_lef_overlap_boundary + $get_left_orient_set + $get_library_cells + $get_licenses + $get_loaded_logic + $get_logic_counterpart + $get_mark + $get_mask_device_count + $get_mask_discrepancy_count + $get_mask_net_count + $get_mos_gate_pin + $get_mos_sd_extent + $get_mos_sd_pin + $get_nearest_edge + $get_net_members + $get_new_object_handles + $get_object_extent + $get_object_info + $get_outdated_cells + $get_outline + $get_panel_extent + $get_panel_names + $get_parameter_default + $get_peek_protected + $get_perimeter + $get_pid + $get_pin_members + $get_pins + $get_points + $get_port_members + $get_process + $get_process_override + $get_property_handles + $get_property_names + $get_property_value + $get_report_obj_types + $get_report_options + $get_res_extent + $get_res_neg_pin + $get_res_pos_pin + $get_reserved + $get_right_orient_set + $get_rotation_point + $get_router_add_blkgs + $get_router_align_cells + $get_router_align_mode + $get_router_block_feed_percent + $get_router_block_stub_mode + $get_router_cell_feed_percent + $get_router_channel_ocr + $get_router_connect_blk_pwr + $get_router_constrain_power + $get_router_create_power_grid + $get_router_limit_area + $get_router_overflow_mode + $get_router_pre_route + $get_router_preserve_power_width + $get_router_probe_extent_margin + $get_router_x_margin + $get_router_y_margin + $get_row_members + $get_rule_file_check_count + $get_rule_file_check_names + $get_rule_file_select_check_count + $get_rule_file_select_check_names + $get_select_area + $get_select_cell + $get_select_count + $get_select_extent + $get_select_set + $get_selectable_layers + $get_selected_edges + $get_short_segment + $get_snapped_points + $get_status_line_info + $get_top_orient_set + $get_traced_properties_numeric + $get_traced_properties_string + $get_visible_layers + $get_window_cell + $get_window_info + $get_world_from_context + $get_world_from_screen + $group + $group_by_name + $group_by_property + $group_on_selected + $group_text + $hide_layer_palette + $hide_status_line + $hide_system_toolbar + $hide_toolbar + $hide_tooltips + $highlight_all + $highlight_all_discrepancies + $highlight_all_incorrect + $highlight_all_unmatched + $highlight_by_location + $highlight_by_name + $highlight_by_property + $highlight_current_discrepancy + $highlight_discrepancy + $highlight_first_discrepancy + $highlight_group + $highlight_hierarchical_net + $highlight_next_discrepancy + $highlight_on_selected + $highlight_previous_discrepancy + $highlight_protected + $hotplot + $hotplot_invoke + $insert_posts + $iroute + $is_cell_outdated + $is_cell_reserved + $is_cell_salvage_pending + $is_edge_selected + $is_history_active + $is_layer_palette_visible + $is_library_reserved + $is_licensed + $is_process_reserved + $is_select_set_closed + $is_status_line_visible + $is_toolbar_visible + $link_floorplan_shape + $list_drc_all + $list_drc_check + $list_drc_selected + $load_design_hierarchy + $load_hotkey_settings + $load_logic + $load_mask_results + $load_process + $load_rules + $loc + $lvs_direct + $lvs_mask + $make_array + $make_cell + $make_font + $make_keypad_panels + $make_net + $make_port + $mark_instances_as_ignored + $measure_distance + $merge + $mgc_scope_name_pre_init + $minimize_levels + $minimize_vias + $modify_centerline + $move + $move_acap + $move_cursor_down + $move_cursor_left + $move_cursor_right + $move_cursor_up + $move_in_row + $move_on_row + $move_relative + $msg_cell_route_hierarchy_mode + $notch + $notch_special + $open_cell + $open_cell_map + $open_clipboard + $open_context_cell + $open_group_window + $open_hierarchy_window + $open_layout_library + $open_layout_view + $open_logic + $open_logic_by_name + $open_mask_logic + $open_selected_cell + $partition_hierarchy + $paste + $peek + $peek_area + $place + $place_on_row + $place_schematic_instances + $place_schematic_ports + $polygon_to_path + $print_cell + $prompt_for_ic_line + $prompt_for_ic_location + $prompt_for_ic_polygon + $prompt_for_ic_polyline + $prompt_for_ic_rectangle + $prompt_for_ic_route + $protect + $protect_group + $protect_nets + $read_def + $read_gdsii + $read_lef + $read_spice + $read_verilog + $read_xml + $redo + $redraw + $redraw_area + $regenerate_device + $release_license + $reload_cell + $reload_cell_by_name + $remove_contacts_by_area + $remove_contacts_by_m2 + $remove_contacts_by_via + $remove_from_net + $remove_from_port + $remove_metal_by_area + $reopen_selection + $repeat_fn + $repeat_objects + $replace_cell + $replace_toolbar + $report_active_context + $report_all_mask_devices + $report_all_mask_nets + $report_capacitor_type + $report_cell + $report_cell_list_dts + $report_current_direct_net + $report_current_discrepancy + $report_current_mask_device + $report_current_mask_discrepancy + $report_current_mask_net + $report_design_layers + $report_design_tree + $report_design_xref + $report_direct_thresholds + $report_drc_all + $report_drc_area + $report_drc_check + $report_drc_current + $report_drc_point + $report_drc_scan + $report_eco_results + $report_gb_type + $report_group + $report_group_names + $report_hotkey_settings + $report_layer_attributes + $report_layer_sets + $report_library + $report_licenses + $report_logic + $report_lvs_results + $report_mask_results + $report_mask_thresholds + $report_mos_type + $report_net_parameters + $report_nets + $report_outdated_cells + $report_panels + $report_paired_nets + $report_peek_protected + $report_place_route + $report_ports + $report_process + $report_property_names + $report_reserved + $report_resistor_type + $report_row_capacity + $report_scoring + $report_selected + $report_shown_mask_devices + $report_shown_mask_discrepancies + $report_shown_mask_nets + $report_text_file + $report_via_type + $report_windows + $reselect + $reserve_cell + $reserve_cell_by_name + $reserve_library + $reserve_process + $reset_basepoint + $reset_licensing + $resize + $restore_defaults + $restore_drc_results + $restructure_nets + $resync_cell + $resync_cell_by_name + $resync_library + $resync_viewpoint + $rotate + $route_point_to_point + $rule_file_loaded + $run_eco + $salvage_cell + $salvage_reference + $save_cell + $save_cell_as + $save_cell_by_name + $save_drc_results + $save_layout_library + $save_library + $save_process + $save_process_by_name + $save_setup + $scale_cells + $scale_context + $scan_drc_all + $scan_drc_check + $sdl_cleanup + $sdl_create_cell + $select_all + $select_area + $select_area_polygon + $select_by_name + $select_by_property + $select_drc_all + $select_drc_check + $select_edge + $select_fixed_routes + $select_folds + $select_group + $select_highlighted + $select_ignored_instances + $select_on_selected + $select_one + $select_range + $select_text + $select_unplaced_schematic_instances + $select_unplaced_schematic_ports + $send_to_prompt + $set_active_port_style + $get_active_port_style + $set_active_ruler_layer + $get_active_ruler_layer + $set_add_route_alignment + $get_add_route_alignment + $set_add_route_checking + $get_add_route_checking + $set_add_route_padding + $get_add_route_padding + $set_angle_mode + $set_angle_mode_enforcement + $get_angle_mode_enforcement + $set_anneal_cooling_factor + $get_anneal_cooling_factor + $set_arc_segments + $get_arc_segments + $set_array_display_style + $get_array_display_style + $set_auto_focus_active_window + $get_auto_focus_active_window + $set_auto_outline_mode + $get_auto_outline_mode + $set_auto_restructure + $get_auto_restructure + $set_autonotch + $get_autonotch + $set_autoselect + $get_autoselect + $set_basepoint + $set_cell_configuration + $set_cell_logical_name + $set_cell_origin + $set_cell_process + $set_cell_route_hierarchy_mode + $set_cell_type + $set_check_drc_message_mode + $set_circle_input_style + $get_circle_input_style + $set_click_distance + $get_click_distance + $set_compact_center_wires + $get_compact_center_wires + $set_compact_corner_spacing + $get_compact_corner_spacing + $set_compact_cost_factor + $get_compact_cost_factor + $set_compact_ext_cells + $get_compact_ext_cells + $set_compact_ext_rows + $get_compact_ext_rows + $set_compact_jogs + $get_compact_jogs + $set_compact_offset_vias + $get_compact_offset_vias + $set_compact_path_mini + $get_compact_path_mini + $set_compact_route_levels + $get_compact_route_levels + $set_compact_suppress_output + $get_compact_suppress_output + $set_compact_to + $get_compact_to + $set_compact_wires_mode + $get_compact_wires_mode + $set_contact_count + $set_context + $set_context_up + $set_copy_ports_on_copy + $get_copy_ports_on_copy + $set_cross_probe + $get_cross_probe + $set_cross_probe_mode + $set_crosshair_style + $get_crosshair_style + $set_crosshair_target + $set_crosshair_target_radius + $set_cull + $set_def_bus_bit_characters + $set_def_divider_character + $set_def_non_orthogonal + $set_direct_thresholds + $set_display_window_title + $get_display_window_title + $set_drag_complexity + $get_drag_complexity + $set_drag_ruler_mode + $get_drag_ruler_mode + $set_drc_check + $set_drc_first + $set_drc_fit_factor + $set_drc_jump + $set_drc_last + $set_drc_next + $set_drc_previous + $set_drc_result + $set_drc_skip + $set_duplicate_ports_policy + $set_dynamic_drc + $get_dynamic_drc + $set_dynamic_drc_complexity + $get_dynamic_drc_complexity + $set_dynamic_hotkey_mode + $get_dynamic_hotkey_mode + $set_dynamic_loading + $get_dynamic_loading + $set_dynamic_message_mode + $get_dynamic_message_mode + $set_dynamic_pre_locations + $set_error_handling + $get_error_handling + $set_fill_display + $get_fill_display + $set_filled_layers + $get_filled_layers + $set_first_direct_net + $set_first_mask_device + $set_first_mask_discrepancy + $set_first_mask_net + $set_fp_bottom_gap + $get_fp_bottom_gap + $set_fp_left_gap + $get_fp_left_gap + $set_fp_lower_aspect + $get_fp_lower_aspect + $set_fp_max_height + $get_fp_max_height + $set_fp_max_width + $get_fp_max_width + $set_fp_num_rows + $get_fp_num_rows + $set_fp_right_gap + $get_fp_right_gap + $set_fp_route_area_ratio + $get_fp_route_area_ratio + $set_fp_top_gap + $get_fp_top_gap + $set_fp_upper_aspect + $get_fp_upper_aspect + $set_fractured_route + $get_fractured_route + $set_gadget_value + $set_gate_size + $set_gds_allanglefracture + $get_gds_allanglefracture + $set_gds_anglemode + $get_gds_anglemode + $set_gds_auto_identify_vias + $get_gds_auto_identify_vias + $set_gds_cellnamecase + $get_gds_cellnamecase + $set_gds_cellnamelength + $get_gds_cellnamelength + $set_gds_cellnamemap + $get_gds_cellnamemap + $set_gds_fixpolygons + $get_gds_fixpolygons + $set_gds_layerfilter + $get_gds_layerfilter + $set_gds_layermap + $get_gds_layermap + $set_gds_library + $get_gds_library + $set_gds_lockcells + $get_gds_lockcells + $set_gds_logfile + $get_gds_logfile + $set_gds_process + $get_gds_process + $set_gds_properties + $get_gds_properties + $set_gds_read_scale + $get_gds_read_scale + $set_gds_replace + $get_gds_replace + $set_gds_save_cells + $get_gds_save_cells + $set_gds_skipunmapped + $get_gds_skipunmapped + $set_gds_textheightmap + $get_gds_textheightmap + $set_gds_transcript + $get_gds_transcript + $set_graphic_interrupt + $get_graphic_interrupt + $set_gravity_distance + $get_gravity_distance + $set_grid + $set_guideline_net_size + $get_guideline_net_size + $set_guideline_width_limit + $get_guideline_width_limit + $set_hocr + $get_hocr + $set_hotkey_mode + $get_hotkey_mode + $set_ic_array_columns + $get_ic_array_columns + $set_ic_array_rows + $get_ic_array_rows + $set_ic_aspect + $get_ic_aspect + $set_ic_cell_flip + $get_ic_cell_flip + $set_ic_cell_orientation + $get_ic_cell_orientation + $set_ic_cell_rotation + $get_ic_cell_rotation + $set_ic_cell_scale + $get_ic_cell_scale + $set_ic_layer + $get_ic_layer + $set_ic_path_end_style + $get_ic_path_end_style + $set_ic_path_old_style + $get_ic_path_old_style + $set_ic_path_padding + $get_ic_path_padding + $set_ic_path_style + $get_ic_path_style + $set_ic_path_width + $get_ic_path_width + $set_ic_property_owner + $get_ic_property_owner + $set_ic_property_replace + $get_ic_property_replace + $set_ic_property_text_height + $get_ic_property_text_height + $set_ic_property_text_horz_just + $get_ic_property_text_horz_just + $set_ic_property_text_orientation + $get_ic_property_text_orientation + $set_ic_property_text_vert_just + $get_ic_property_text_vert_just + $set_ic_row_auto_resize + $get_ic_row_auto_resize + $set_ic_row_justification + $get_ic_row_justification + $set_ic_row_site + $get_ic_row_site + $set_ic_row_slideable + $get_ic_row_slideable + $set_instance_extent_display + $get_instance_extent_display + $set_instance_name_display + $get_instance_name_display + $set_instance_origin_display + $get_instance_origin_display + $set_instance_route_hierarchy_mode + $set_iobj_points + $set_iroute_accept_at_current_loc + $set_iroute_auto_shield + $set_iroute_checking + $set_iroute_push_mode + $set_iroute_route_transforms + $set_iroute_select_with_active_layer + $set_iroute_show_alignment + $set_iroute_show_ortho_path + $set_iroute_via_generator_is_default + $set_iroute_width_change + $set_join_on_move + $get_join_on_move + $set_layer_appearance + $set_layer_palette_height + $get_layer_palette_height + $set_layer_path_width + $set_lef_bus_bit_characters + $get_lef_bus_bit_characters + $set_lef_divider_character + $get_lef_divider_character + $set_lef_non_orthogonal + $get_lef_non_orthogonal + $set_lef_overlap_boundary + $get_lef_overlap_boundary + $set_library_cell_type + $set_library_site_types + $set_location_mode + $get_location_mode + $set_logic_source + $set_logical_correspondence + $set_lvs_all_capacitor_pins_swappable + $get_lvs_all_capacitor_pins_swappable + $set_lvs_component_subtype_property + $get_lvs_component_subtype_property + $set_lvs_component_type_properties + $get_lvs_component_type_properties + $set_lvs_default_direct_source_subname + $get_lvs_default_direct_source_subname + $set_lvs_default_mask_source_subname + $get_lvs_default_mask_source_subname + $set_lvs_default_report_name + $get_lvs_default_report_name + $set_lvs_filter_unused_bipolar_transistors + $get_lvs_filter_unused_bipolar_transistors + $set_lvs_filter_unused_mos_transistors + $get_lvs_filter_unused_mos_transistors + $set_lvs_ground_names + $get_lvs_ground_names + $set_lvs_ignore_ports + $get_lvs_ignore_ports + $set_lvs_pin_name_properties + $get_lvs_pin_name_properties + $set_lvs_power_names + $get_lvs_power_names + $set_lvs_recognize_gates + $get_lvs_recognize_gates + $set_lvs_recognize_only_simple_gates + $get_lvs_recognize_only_simple_gates + $set_lvs_reduce_parallel_bipolar_transistors + $get_lvs_reduce_parallel_bipolar_transistors + $set_lvs_reduce_parallel_capacitors + $get_lvs_reduce_parallel_capacitors + $set_lvs_reduce_parallel_diodes + $get_lvs_reduce_parallel_diodes + $set_lvs_reduce_parallel_mos_transistors + $get_lvs_reduce_parallel_mos_transistors + $set_lvs_reduce_parallel_resistors + $get_lvs_reduce_parallel_resistors + $set_lvs_reduce_series_capacitors + $get_lvs_reduce_series_capacitors + $set_lvs_reduce_series_resistors + $get_lvs_reduce_series_resistors + $set_lvs_reduce_split_gates + $get_lvs_reduce_split_gates + $set_lvs_report_list_limit + $get_lvs_report_list_limit + $set_lvs_write_instance_cross_reference + $get_lvs_write_instance_cross_reference + $set_lvs_write_net_cross_reference + $get_lvs_write_net_cross_reference + $set_mark + $set_mask_auto_view + $set_mask_default_database_name + $get_mask_default_database_name + $set_mask_thresholds + $get_mask_thresholds + $set_max_auto_display + $get_max_auto_display + $set_modify_distance + $get_modify_distance + $set_mos_cell_type + $get_mos_cell_type + $set_mos_share + $get_mos_share + $set_net_priority + $set_new_window_cull + $get_new_window_cull + $set_new_window_grid + $get_new_window_grid + $set_next_direct_net + $set_next_mask_device + $set_next_mask_discrepancy + $set_next_mask_net + $set_packed_vias + $set_padding_grid + $set_path_display_style + $get_path_display_style + $set_peek_on_view + $get_peek_on_view + $set_peek_protect + $set_pex_backannotation_distributed + $get_pex_backannotation_distributed + $set_pex_backannotation_lumped + $get_pex_backannotation_lumped + $set_pex_capacitance_scale + $get_pex_capacitance_scale + $set_pex_coupled_distributed + $get_pex_coupled_distributed + $set_pex_delay + $get_pex_delay + $set_pex_exclude_distributed + $get_pex_exclude_distributed + $set_pex_include_distributed + $get_pex_include_distributed + $set_pex_netlist_distributed + $get_pex_netlist_distributed + $set_pex_netlist_lumped + $get_pex_netlist_lumped + $set_pex_netlist_simple + $get_pex_netlist_simple + $set_pex_options_lumped + $get_pex_options_lumped + $set_pex_report_distributed + $get_pex_report_distributed + $set_pex_report_lumped + $get_pex_report_lumped + $set_pin_shape_editing + $set_placement_select_mode + $get_placement_select_mode + $set_point_select_mode + $get_point_select_mode + $set_point_select_reset_basepoint + $get_point_select_reset_basepoint + $set_port_pin_name_display + $get_port_pin_name_display + $set_preferred_overflow_layers + $get_preferred_overflow_layers + $set_previous_direct_net + $set_previous_mask_device + $set_previous_mask_discrepancy + $set_previous_mask_net + $set_print_appearance + $set_print_array_style + $get_print_array_style + $set_print_cull + $get_print_cull + $set_print_grid + $get_print_grid + $set_print_layers + $get_print_layers + $set_print_levels + $get_print_levels + $set_print_peeked_only + $get_print_peeked_only + $set_process_override + $set_push_count_limit + $set_query_on_merge + $get_query_on_merge + $set_query_on_placement + $get_query_on_placement + $set_redraw_controls + $get_redraw_controls + $set_redraw_level + $get_redraw_level + $set_redraw_precision + $get_redraw_precision + $set_redraw_queue_control + $get_redraw_queue_control + $set_report_target + $get_report_target + $set_restrict_visible + $get_restrict_visible + $set_resync_on_peek + $get_resync_on_peek + $set_route_center_wires + $get_route_center_wires + $set_route_hierarchy_mode + $set_route_net_order + $get_route_net_order + $set_route_objects + $get_route_objects + $set_route_one_pass + $get_route_one_pass + $set_route_overflow_order + $get_route_overflow_order + $set_route_pack_wires + $get_route_pack_wires + $set_route_protection + $set_route_same_net_checking + $get_route_same_net_checking + $set_route_stub_direction + $get_route_stub_direction + $set_route_trim_nets + $get_route_trim_nets + $set_route_via_rotation + $get_route_via_rotation + $set_router_channel_size_variation + $get_router_channel_size_variation + $set_router_cleanup + $get_router_cleanup + $set_router_compound_path + $get_router_compound_path + $set_router_conn_order + $get_router_conn_order + $set_router_do_net_rules_check + $get_router_do_net_rules_check + $set_router_feed_bias + $get_router_feed_bias + $set_router_h_grid_size + $get_router_h_grid_size + $set_router_improve_global_val + $get_router_improve_global_val + $set_router_initial_global_val + $get_router_initial_global_val + $set_router_max_bends + $get_router_max_bends + $set_router_max_iters + $get_router_max_iters + $set_router_max_vias + $get_router_max_vias + $set_router_minimized_layers + $get_router_minimized_layers + $set_router_mode_type + $get_router_mode_type + $set_router_num_extra_tracks + $get_router_num_extra_tracks + $set_router_oper_mode_type + $get_router_oper_mode_type + $set_router_primary_layer_used + $get_router_primary_layer_used + $set_router_probe_layers + $get_router_probe_layers + $set_router_restricted_layers + $get_router_restricted_layers + $set_router_step_size + $get_router_step_size + $set_router_use_gridded_mode + $get_router_use_gridded_mode + $set_router_v_grid_size + $get_router_v_grid_size + $set_router_view_probes + $get_router_view_probes + $set_router_wrong_direction + $get_router_wrong_direction + $set_ruler_angle_mode + $get_ruler_angle_mode + $set_ruler_select_state + $get_ruler_select_state + $set_ruler_text_height + $get_ruler_text_height + $set_sd_hv_contact + $set_sdl_filter + $get_sdl_filter + $set_sdl_preserve_orientation + $get_sdl_preserve_orientation + $set_sdl_quiet + $get_sdl_quiet + $set_search_path + $get_search_path + $set_select_via_pin + $get_select_via_pin + $set_selectable_area + $get_selectable_area + $set_selectable_layers + $set_selectable_types + $get_selectable_types + $set_site_type + $set_snap_basepoint_to_grid + $get_snap_basepoint_to_grid + $set_target_mode + $get_target_mode + $set_text_cull_basis + $get_text_cull_basis + $set_text_display + $get_text_display + $set_text_origin_display + $get_text_origin_display + $set_timer + $set_toolbar_alignment + $get_toolbar_alignment + $set_toolbar_keep_items_visible + $get_toolbar_keep_items_visible + $set_undo_level + $get_undo_level + $set_undo_object_limit + $get_undo_object_limit + $set_unselect_empty + $get_unselect_empty + $set_update_connected + $get_update_connected + $set_verilog_array_delimiters + $get_verilog_array_delimiters + $set_verilog_supply0 + $get_verilog_supply0 + $set_verilog_supply1 + $get_verilog_supply1 + $set_view_controls + $get_view_controls + $set_visible_layers + $set_working_directory + $get_working_directory + $set_xml_group_protection + $get_xml_group_protection + $set_xml_logfile + $get_xml_logfile + $set_xml_other_protection + $get_xml_other_protection + $set_xml_read_cell_path_style + $get_xml_read_cell_path_style + $set_xml_replace + $get_xml_replace + $set_xml_style + $get_xml_style + $set_xml_write_cell_path_style + $get_xml_write_cell_path_style + $setup_auto_checkpoint + $setup_ic + $setup_ic_dynamics + $setup_new_windows + $setup_print + $setup_redraw_controls + $setup_reports + $setup_rulers + $get_active_ruler_bgd_color + $get_active_ruler_color + $get_active_ruler_font + $setup_sdl + $setup_select_filter + $setup_session + $setup_status_line + $show_all_mask_devices + $show_all_mask_discrepancies + $show_all_mask_nets + $show_aspect + $show_contact_gaps + $show_context + $show_current_mask_device + $show_current_mask_discrepancy + $show_current_mask_net + $show_drc_all + $show_drc_area + $show_drc_check + $show_drc_current + $show_drc_scan + $show_group + $show_guidelines + $show_layer_palette + $show_mask_device_id + $show_mask_device_name + $show_mask_device_point + $show_mask_discrepancy + $show_mask_net_id + $show_mask_net_name + $show_mask_net_point + $show_panel + $show_status_line + $show_system_toolbar + $show_toolbar + $show_tooltips + $show_unplaced_instances + $slice + $slice_array + $slice_with_polygon + $slide_route + $snap_to_grid + $snap_to_row + $startup + $stretch + $stretch_relative + $swap_logically_equivalent_nets + $toolbar_context_glyph_item + $toolbar_glyph_item + $tooltips_visible + $trace_property_numeric + $trace_property_string + $trim_invalid_nets + $trim_nets + $trim_nets_options + $undefine_layer_alias + $undefine_layer_name + $undefine_layer_set + $undefine_must_connect + $undefine_net_pairs + $undelete_drc + $undo + $unfreeze_window + $ungroup + $unhighlight_all + $unhighlight_group + $unhighlight_hierarchical_net + $unlink_floorplan_shape + $unload_closed_cells + $unload_mask_results + $unload_viewpoint + $unmake_port + $unmark_all_ignored + $unmark_instances_as_ignored + $unpeek + $unpeek_area + $unplace + $unprotect_all + $unprotect_group + $unprotect_nets + $unreserve_cell + $unreserve_cell_by_name + $unreserve_library + $unreserve_process + $unselect_all + $unselect_all_edges + $unselect_area + $unselect_area_polygon + $unselect_by_name + $unselect_by_property + $unselect_drc + $unselect_edge + $unselect_group + $unselect_range + $unset_cell_process + $unset_logic_source + $unset_process_override + $unshow_all_mask_devices + $unshow_all_mask_discrepancies + $unshow_all_mask_nets + $unshow_all_mask_results + $unshow_current_mask_device + $unshow_current_mask_discrepancy + $unshow_current_mask_net + $unshow_drc + $unshow_guidelines + $untrace_all_properties + $update_cell + $update_cell_by_name + $update_gadget + $update_group_window + $update_hier_window + $update_layout_view + $update_layout_config_view + $update_library + $view_all + $view_all_mask_devices + $view_all_mask_discrepancies + $view_all_mask_nets + $view_area + $view_centered + $view_context + $view_current_mask_device + $view_current_mask_discrepancy + $view_current_mask_net + $view_drc + $view_highlighted + $view_next + $view_panel + $view_previous + $view_selected + $write_calibre + $write_def + $write_design_lef + $write_direct_cnet + $write_direct_netlist + $write_gdsii + $write_hierarchical_netlist + $write_lef + $write_mask_cnet + $write_mask_netlist + $write_source_cnet + $write_xml + $zoom_in + $zoom_out + $zoom_to_grid + + + $$add_arc + $add_border + $add_bus + $add_circle + $add_dot + $add_fb_def + $add_fb_inst + $add_fb_pins + $add_frame + $add_ic_viewpoint_type + $add_instance + $add_line + $add_net + $add_panel + $add_parameters + $add_pin + $add_polygon + $add_polyline + $add_property + $add_property_to_handle + $add_rectangle + $add_selected_instance + $add_settings_block + $add_sheet_border + $add_text + $add_wire + $align + $allow_resizable_instances + $apply_edits + $auto_sequence_text + $begin_edit_symbol + $change_color + $change_compiled_pin_name + $change_group_visibility + $change_instance_resize_factor + $change_line_style + $change_line_width + $change_net_style + $change_net_width + $change_polygon_fill + $change_property_color + $change_property_font + $change_property_height + $change_property_justification + $change_property_name + $change_property_offset + $change_property_orientation + $change_property_stability_switch + $change_property_type + $change_property_value + $change_property_visibility + $change_property_visibility_switch + $change_text_font + $change_text_height + $change_text_justification + $change_text_value + $change_variant_display + $$check + $check_and_save + $clear_unattached_annotations + $close_design_configuration + $close_selection + $close_window + $comp_name + $connect + $connect_area + $construct_frame + $convert_fb_inst_to_def + $convert_to_comment + $convert_to_new_technology + $copy + $copy_edit_hotkey_settings + $copy_multiple + $copy_to_array + $create_design_configuration + $create_design_sheet + $create_entity + $create_fb_inst_from_def + $create_implicit_pins + $create_pin_list + $create_sheet + $create_symbol + $create_variant_viewpoint + $da_ic_crossprobe + $da_ic_crossprobe_diff + $define_hotkey + $delete + $delete_ba_property + $delete_interfaces + $delete_multiple_ba_properties + $delete_panel + $delete_parameter + $delete_property + $delete_property_owner + $delete_sheet + $delete_template_name + $direct_to_active_window + $disconnect + $disconnect_area + $disconnect_ba + $display_next_sheet + $display_prev_sheet + $display_spec_sheet + $does_selection_exist + $$dump_sim_values + $end_edit_symbol + $$exit_sim_mode + $expand_template_name + $export_spice + $export_verilog + $export_vhdl + $filter_property_check + $flip + $freeze_window + $generate_symbol + $get_active_symbol + $get_active_symbol_history + $get_apply_edits_needed + $get_attached_objects + $get_attributes + $get_auto_update_inst_handles + $get_basepoint + $get_body_text_restriction + $get_bundle_members + $get_check_schematic_status + $get_check_status + $get_comment_graphics_attributes + $get_comment_handles + $get_comment_text_attributes + $get_comment_text_restriction + $get_comment_visibility + $get_default_interface_name + $get_design_sheets + $get_diagram_location + $get_edit_mode + $get_evaluations + $get_fb_line_style_by_handle + $get_frame_attributes + $get_frame_handles + $get_grid + $get_hotkey_settings + $get_in_design_context + $get_instance_attributes + $get_instance_handles + $get_instance_models + $get_instance_pathname + $get_instance_resize_factor + $get_item_type + $get_model_path + $get_net_attributes + $get_net_handles + $get_next_active_symbol + $get_object_property_attributes + $get_objects + $get_objects_in_area + $get_origin + $get_owned_property_names + $get_parameter + $get_pathname + $get_pin_attributes + $get_pin_handles + $get_pin_names + $get_prop_text_restriction + $get_property + $get_property_attributes + $get_property_handles + $get_property_names + $get_property_owners + $get_schematic_sheets + $get_search_path + $get_select_count + $get_select_count_type + $get_select_design_paths + $get_select_extent + $get_select_handles + $get_select_handles_type + $get_select_identical + $get_select_text_exists + $get_select_text_handle + $get_select_text_name + $get_select_text_origin + $get_select_text_value + $get_sheet_design_pathname + $get_sheet_extent + $get_sheetname_viewed + $$get_sim_value + $$get_sim_version + $get_simulation_mode + $get_source_edit_allowed + $get_symbol_name + $get_text_information + $get_type_present + $get_vertex_attributes + $get_vertex_handles + $get_view_area + $get_viewpoint + $get_window_names + $get_window_sheet_list + $group + $hide_active_symbol_window + $hide_annotations + $hide_comment + $hide_context_window + $hide_panel_border + $hide_status_line + $hide_system_toolbar + $hide_toolbar + $highlight_by_handle + $highlight_by_name + $highlight_property_owner + $$hotplot_submit + $import_verilog + $insert_template + $is_active_symbol_window_visible + $is_context_window_visible + $is_handle_valid + $is_selection_open + $is_status_line_visible + $is_system_toolbar_visible + $is_toolbar_visible + $load_hotkey_settings + $make_fb + $make_polygon + $make_polyline + $make_symbol + $mark_property_attributes + $mark_property_value + $measure_distance + $merge_annotations + $modify_frame + $move + $move_cursor_incrementally + $$move_settings_block + $name_instances + $name_instances_auto + $open_design_configuration + $open_design_sheet + $open_down + $open_schematic + $open_sheet + $open_source_code + $open_symbol + $open_top + $open_up + $pivot + $place_active_symbol + $pop_to_front + $print_all_schematics + $print_design_sheets + $protect + $protect_area + $push_to_back + $recalculate_properties + $reconnect_annotations + $redo + $remove_comment_status + $reopen_selection + $replace + $replace_with_alternate_symbol + $report_broken_annotations + $$report_check + $report_default_property_settings + $report_groups + $report_hotkey_settings + $report_interfaces + $report_interfaces_selected + $report_object + $$report_object_name + $report_panels + $report_parameter + $report_unattached_annotations + $reselect + $reset_instance_colors + $resize_fb + $revalidate_models + $rotate + $route + $save_setup + $save_sheet + $save_sheet_as + $save_symbol + $save_symbol_as + $save_variant_viewpoint + $scale + $scroll_down_by_unit + $scroll_down_by_window + $scroll_hz + $scroll_left_by_unit + $scroll_left_by_window + $scroll_right_by_unit + $scroll_right_by_window + $scroll_up_by_unit + $scroll_up_by_window + $scroll_vt + $select_all + $select_area + $select_branches + $select_by_design_path + $select_by_handle + $select_by_name + $select_by_property + $select_by_property_type + $select_fb + $select_group + $select_instances + $select_nets + $select_pins + $select_property_owner + $select_template_name + $select_text + $select_vertices + $sequence_text + $set_active_symbol + $set_active_symbol_history + $set_basepoint + $set_color + $set_color_config + $set_compiler_options + $set_default_parts_menu + $set_edit_mode + $set_evaluations + $set_grid + $set_hotkey_mode + $set_next_active_symbol + $set_origin + $set_out_of_view_warn + $set_parameter + $set_previous_active_symbol + $set_property_owner + $set_property_type + $set_search_path + $set_sel_name_display + $$set_sim_value + $set_simulation_mode + $set_template_directory + $set_toolbar_alignment + $set_userrule_error + $set_userrule_warning + $set_variant_properties + $set_viewpoint + $$settings_block_visible + $setup_annotated_property_text + $setup_check_schematic + $setup_check_schematic_sheet + $$setup_check_sheet + $setup_check_symbol + $setup_color + $setup_comment + $setup_default_viewpoint + $setup_display + $setup_function_block + $setup_grid + $setup_hspice_alter + $setup_net + $setup_object_template + $setup_page + $setup_property_display + $setup_property_text + $setup_report + $setup_ripper + $setup_selection + $setup_select_filter + $setup_sim_config + $setup_sim_model_editor + $setup_symbol_body + $setup_text_restriction + $setup_unselect_filter + $show_active_symbol_window + $show_annotations + $show_comment + $show_context_window + $show_panel_border + $show_registration + $show_status_line + $show_system_toolbar + $show_toolbar + $sim_add_dspf + $sim_add_sdf + $sim_choose_library + $sim_copy_configuration_as + $sim_delete_converter + $sim_edit_commands + $sim_edit_measurements + $sim_edit_sdf + $sim_export_spice + $sim_get_adms_ini_file + $sim_hide_dcop + $sim_insert_converter_default + $sim_insert_converter_inst + $sim_insert_converter_net + $sim_insert_converter_pin + $sim_invoke + $sim_invoke_mr + $sim_invoke_ms + $$sim_merge_annotations + $sim_open_language + $sim_open_lang_model + $sim_process_extracted_netlist + $sim_restore_setup_from + $sim_run + $sim_save_selected + $sim_save_setup_as + $sim_set_additional_commands + $sim_set_include_paths + $sim_set_initial_condition + $sim_set_temperature + $sim_setup_analysis + $sim_setup_analysis_ac + $sim_setup_analysis_dc + $sim_setup_analysis_dcop + $sim_setup_analysis_mc + $sim_setup_analysis_mod_steadystate + $sim_setup_analysis_noise + $sim_setup_analysis_noisetran + $sim_setup_analysis_steadystate + $sim_setup_analysis_steadystateac + $sim_setup_analysis_steadystatenoise + $sim_setup_analysis_steadystateoscil + $sim_setup_analysis_tran + $sim_setup_netlister + $sim_setup_sim_environ + $$sim_setup_simulator_viewer + $$sim_setup_simulator_viewer_advance + $sim_simulate + $sim_view_measurements + $sim_view_output_file + $sim_write_commands + $sim_write_setup_file + $slice + $snap_to_grid + $sort_handles + $sort_handles_by_property + $stretch + $string_to_literal + $symb_name + $undo + $unfreeze_window + $ungroup + $unhighlight_by_handle + $unhighlight_by_name + $unhighlight_property_owner + $unmake_fb + $unprotect + $unprotect_area + $unselect_all + $unselect_area + $unselect_by_design_path + $unselect_by_handle + $unselect_by_property + $unselect_by_property_type + $unselect_fb + $unselect_property_owner + $unselect_vertices + $update + $update_all + $update_all_schematics + $update_border + $update_from_interface + $$update_settings_blocks + $update_title_block + $view_all + $view_area + $view_centered + $view_panel + $view_selected + $vpt_needs_save + $was_saved + $zoom_in + $zoom_out + $get_auto_name_net + $get_auto_place_instance_name + $get_check_busshorts + $get_check_functionblocks + $get_check_schematicbusshorts + $get_check_schematicnetio + $get_fb_def_color + $get_fb_def_line_style + $get_fb_inst_color + $get_fb_inst_line_style + $get_fb_int_change_popup + $get_fb_passthru + $get_fb_popupwin + $set_annotation_color + $set_annotation_visibility + $set_auto_name_net + $set_auto_place_instance_name + $set_auto_update_mode + $set_autoripper + $set_autoroute + $set_autoselect + $set_bus_width + $set_check_annotations + $set_check_busshorts + $set_check_closedots + $set_check_dangle + $set_check_expression + $set_check_filemode + $set_check_filename + $set_check_frame + $set_check_functionblocks + $set_check_initprops + $set_check_instance + $set_check_net + $set_check_notdots + $set_check_overlap + $set_check_owner + $set_check_parameter + $set_check_pins + $set_check_schematicbusshorts + $set_check_schematicinstance + $set_check_schematicinterface + $set_check_schematicnet + $set_check_schematicnetio + $set_check_schematicspecial + $set_check_schematicuserrule + $set_check_special + $set_check_symbolbody + $set_check_symbolinterface + $set_check_symbolpin + $set_check_symbolspecial + $set_check_symboluserrule + $set_check_transcript + $set_check_userrule + $set_check_window + $set_close_dot + $set_closeness_criteria + $set_dot_size + $set_dot_style + $set_dynamic_cursor + $set_dynamic_rounding_precision + $set_environment_dofile_pathname + $set_fb_def_color + $set_fb_def_line_style + $set_fb_inst_color + $set_fb_inst_line_style + $set_fb_int_change_popup + $set_fb_passthru + $set_fb_popupwin + $set_hidden_symbol_prop_display + $set_implicit_ripper + $set_line_style + $set_line_width + $set_modify_multiple_prop_filter + $set_net_style + $set_net_width + $set_new_annotation_visibility + $set_orthogonal + $set_orthogonal_angle + $set_pin_spacing + $set_polygon_fill + $set_property_font + $set_property_height + $set_property_hjustification + $set_property_orientation + $set_property_stability_switch + $set_property_transparency + $set_property_visibility + $set_property_visibility_switch + $set_property_vjustification + $set_report_filemode + $set_report_filename + $set_report_transcript + $set_report_window + $set_ripper_dot + $set_ripper_mode + $set_ripper_query + $set_ripper_symbol_pathname + $set_schem_check_mode + $set_schematicuserrules_file + $set_segment_select_mode + $set_select_aperture + $set_select_comment + $set_select_exterior + $set_select_frame + $set_select_instance + $set_select_net + $set_select_pin + $set_select_property + $set_select_segment + $set_select_symbolbody + $set_select_symbolpin + $set_select_text + $set_select_vertex + $set_selection_color + $set_selection_model + $set_snap + $set_symboluserrules_file + $set_text_font + $set_text_height + $set_text_hjustification + $set_text_orientation + $set_text_transparency + $set_text_vjustification + $set_undo_level + $set_unselect_comment + $set_unselect_exterior + $set_unselect_frame + $set_unselect_instance + $set_unselect_net + $set_unselect_pin + $set_unselect_property + $set_unselect_segment + $set_unselect_symbolbody + $set_unselect_symbolpin + $set_unselect_text + $set_unselect_vertex + $set_userrules_file + $set_user_units + + + $add_menu_item + $ask_color + $ask_frame_name + $ask_integer + $ask_number + $ask_pathname + $ask_pattern + $ask_save_edits + $ask_scope_builtin_name + $ask_scope_callable_name + $ask_scope_form_name + $ask_scope_frame_name + $ask_scope_function_name + $ask_scope_keydef_name + $ask_scope_menu_name + $ask_scope_stroke_name + $ask_string + $ask_yes_no + $ask_yes_no_cancel + $bell + $bottom_y + $c_ask_string + $change_location_map_entry + $change_workspace + $cleanup_icons + $cleanup_windows + $clear_message + $clear_saved_prompt + $close_application_windows + $close_physical_transcript + $close_session + $close_window + $collapse_dockable + $compile_userware + $create_form + $create_menu + $create_notepad + $create_prompt + $create_toolbar + $define_color + $define_userware + $delete_menu_item + $delete_stroke + $disable_interrupt + $disable_softkey_update + $dock_dockable + $dockable_collapsed + $dockable_docked + $dockable_permission + $dockable_pinned + $dockable_visible + $dockables_all_hidden + $dockables_all_shown + $dockables_locked + $double_click_distance + $edit_source + $enable_help + $enable_interrupt + $enable_ref_help + $enable_softkey_update + $eval + $execute + $execute_dynamic + $execute_last_menu + $execute_promptbar + $execute_ref + $execute_stroke + $expand_command + $float_dockable + $forget + $forget_all_promptbars + $forget_promptbar + $form_action + $form_action_buttons_gadget + $form_actual_value + $form_argument + $form_argument_gadget + $form_argument_integer_entry_gadget + $form_argument_number_entry_gadget + $form_argument_string_entry_gadget + $form_argument_value + $form_button + $form_check_boxes_gadget + $form_choice_buttons_gadget + $form_choice_stepper_gadget + $form_click_button_gadget + $form_color_paint_chip_gadget + $form_colors_list_box_gadget + $form_column + $form_display_only + $form_display_text_gadget + $form_dynamic_list_box_gadget + $form_entry_box_gadget + $form_execute_buttons + $form_gadget_value + $form_horiz_dynamic_list_box_gadget + $form_horiz_list_box_gadget + $form_item + $form_label + $form_left_justified_column + $form_list_box_gadget + $form_mouse_tracking + $form_named_argument + $form_named_argument_gadget + $form_navigator_entry + $form_navigator_gadget + $form_number_entry_box_gadget + $form_patterns_list_box_gadget + $form_prompt_text_gadget + $form_push_button_gadget + $form_radio_buttons_gadget + $form_repeat + $form_right_justified_column + $form_row + $form_scope_list_box_gadget + $form_set_no_enter + $form_single_check_box_gadget + $form_string_entry_box_gadget + $form_switch + $form_target_action + $form_target_button + $form_text_entry_box_gadget + $form_variable + $form_variable_gadget + $frame_maximized + $frame_window + $get_action_bar_bgd_color + $get_action_bar_fgd_color + $get_active_color + $get_active_window + $get_additional_workspaces + $get_app_name_and_version + $get_app_name_no_version + $get_auto_pop + $get_auto_refresh + $get_auto_resize_palette + $get_autosave + $get_base_window + $get_bgd_color + $get_border_width + $get_current_profile + $get_cursor_colors + $get_cursor_shape + $get_default_method + $get_default_notepad_font + $get_double_click_interval + $get_expanded_pathname + $get_fgd_color + $get_focus_follows_mouse + $get_focus_follows_mouse_delay + $get_font_nominal_width + $get_form_gadget_value + $get_frame_collapsed + $get_graphic_device + $get_keyboard_type + $get_last_window + $get_message_lines + $get_message_popup + $get_message_reply + $get_message_transcript + $get_notepad_document_status + $get_open_windows + $get_palette_menu_visible + $get_pattern + $get_prompt_fonts + $get_server_switch + $get_sidetab_color + $get_tabbed_workspace_trim_right + $get_text_cursor_blink + $get_transcript_output + $get_window_border_width + $get_window_frame_extent + $get_window_frame_width + $get_workspace + $graphic_x + $graphic_y + $grow_window + $help + $help_context + $help_enabled + $hide_all_dockables + $hide_command_shell + $hide_dockable + $hide_menu_bar + $hide_message_area + $hide_palette + $hide_palette_scrolls + $hide_scrolls + $hide_softkey_labels + $hide_softkeys + $hide_transcript + $hide_window_title + $identify_interrupt + $insert_menu_item + $key_ + $left_x + $load_profile + $load_userware + $location + $lock_dockables + $mark + $maximize_window + $menu_bar_item + $menu_bar_visible + $menu_context_item + $menu_name + $menu_parent_name + $menu_registered_item + $menu_separator_item + $menu_special_text_item + $menu_text_item + $menu_title_item + $message + $message_area_visible + $minimize_window + $move_cursor + $move_dockable + $move_dockable_into + $move_palette + $move_window + $next_field + $next_field_promptbar + $next_icon + $next_window + $open_notepad + $open_physical_transcript + $open_text_report + $option_form_promptbar + $palette_visible + $pause + $pin_dockable + $pop_window + $pop_window_to_top + $popup_command_line + $popup_last_menu + $popup_menu + $popup_menu_at_cursor + $popup_menu_bar + $popup_window_menu + $prev_field + $prev_field_promptbar + $prompt + $prompt_arg + $prompt_display + $prompt_dynamic + $prompt_for_location + $prompt_for_polylocation + $prompt_for_polyrectangle + $prompt_for_rectangle + $prompt_options + $read_cpu_timer + $read_cpu_timer_total + $read_map + $read_timer + $read_timer_total + $redirect_to_active_window + $ref_help + $ref_help_enabled + $refresh + $relative_location + $remove_profile + $replace_palette + $replay_physical_transcript + $report_color + $report_key + $report_stroke + $reposition_window + $reset + $reset_defaults + $reset_timer + $resize_palette + $restore_default_profile + $result + $resume + $right_x + $save_profile + $save_profile_as + $screen_x + $screen_y + $scroll_down_by_unit + $scroll_down_by_window + $scroll_hz + $scroll_left_by_unit + $scroll_left_by_window + $scroll_right_by_unit + $scroll_right_by_window + $scroll_to_bottom + $scroll_to_left + $scroll_to_right + $scroll_to_top + $scroll_up_by_unit + $scroll_up_by_window + $scroll_vt + $scrolls_visible + $select + $select_active_window + $send_ipc + $session_window_active + $set_action_bar_bgd_color + $set_action_bar_fgd_color + $set_active_color + $set_active_window + $set_additional_workspaces + $set_auto_pop + $set_auto_refresh + $set_auto_resize_palette + $set_autosave + $set_base_window + $set_bgd_color + $set_border_width + $set_cmd_line_font + $set_cursor_colors + $set_cursor_shape + $set_default_method + $set_default_notepad_font + $set_default_position + $set_double_click_distance + $set_double_click_interval + $set_fgd_color + $set_focus_follows_mouse + $set_focus_follows_mouse_delay + $set_form_gadget_value + $set_form_position + $set_frame_width + $set_graphic_device + $set_invert_text_color_on_highlight + $set_ipc_port + $set_ipc_wakeup_interval + $set_left_justify_palette_text + $set_list_gadget_double_click_action + $set_menu_rollover_color + $set_message_font_resize + $set_message_lines + $set_message_popup + $set_message_reply + $set_message_transcript + $set_palette_width + $set_pattern + $set_prompt_fonts + $set_sidetab_color + $set_softkey_bgd_color + $set_softkey_fgd_color + $set_softkey_font + $set_tabbed_workspace_trim_right + $set_text_cursor_blink + $set_transcript_output + $set_window_border_width + $set_window_frame_width + $set_working_directory + setup_registered_commands + $show_all_dockables + $show_command_shell + $show_dockable + $show_location_map + $show_menu_bar + $show_message_area + $show_palette + $show_palette_scrolls + $show_parent_palette + $show_scrolls + $show_softkey_labels + $show_softkeys + $show_sub_palette + $show_toolbar_icons + $show_toolbar_text + $show_top_palette + $show_transcript + $show_window_title + $show_workspace_tab + $softkey_bgd_color + $softkey_fgd_color + $softkey_font + $softkeys_visible + $source + $start_stroke + $start_stroke_location + $start_timer + $stop + $stop_stroke + $stop_stroke_location + $stop_timer + $stroke_extent + $stroke_identity + $stroke_ + $target_name + $title_visible + $toolbar_action_selector_item + $toolbar_add_item + $toolbar_associative_item + $toolbar_combo_box_item + $toolbar_insert_item + $toolbar_label_item + $toolbar_n_state_item + $toolbar_registered_item + $toolbar_remove_item + $toolbar_separator_item + $toolbar_text_field_item + $toolbar_text_icon_item + $top_y + $transcript_visible + $ui_message_ask_yes_no + $ui_message_fail + $update_menu_bar + $update_palette + $update_softkey_labels + $update_toolbars + $use_animations + $user_init + $user_pre_init + $user_window_init + $using_animations + $version + $wait + $window_class_name + $window_extent + $window_init + $window_interior_extent + $window_scope_name + $window_visible + $writeln + + + $add_back_annotation + $add_multiple_properties + $add_parameter + $add_primitive + $add_property + $add_substitute + $add_visible_property + $change_model + $change_property + $check_design + $clear_global_parameter + $close_design_viewpoint + $connect_back_annotation + $delete_invalid_entries + $delete_parameter + $delete_primitive + $delete_property + $delete_substitute + $delete_visible_property + $disconnect_back_annotation + $erc_check + $export_back_annotation + $export_design_configuration + $filter_property_check + $get_viewpoint_name + $import_back_annotation + $is_ba_readonly + $is_function_defined + $latch_using_label + $latch_version + $maintain_back_annotation_window + $open_back_annotation + $open_design_configuration + $open_design_viewpoint + $preset_global_parameter + $reload_model + $report_select_counts + $report_viewpoint_references + $save_design_viewpoint + $select_back_annotation + $select_design_configuration + $select_parameter + $select_primitive + $select_substitute + $select_visible_property + $unlatch_version + $unselect_back_annotation + $unselect_design_configuration + $unselect_parameter + $unselect_primitive + $unselect_substitute + $unselect_visible_property + $update_latched_version + + + + $$add_configuration_entry + $add_configuration_entry + $$add_container + $add_container + $$add_directory + $add_directory + $add_link + $add_object_property + $$add_reference + $add_reference + $add_reference_property + $add_toolbox + $$add_type + $add_versions + $browse_for_object + $$build_configuration + $build_configuration + $$change_configuration_references + $change_configuration_references + $$change_design_object_references + $change_design_object_references + $change_link_text + $change_location_map_entry + $$change_object_name + $change_object_name + $change_object_property + $$change_object_references + $change_object_references + $change_password + $change_protection + $change_reference_property + $change_reference_state + $change_version_depth + $check_references + $check_registries + $$clear_entry_filter + $$clear_global_status + $$clear_monitor + $$close_configuration + $close_hierarchy + $$close_versioned_object + $close_window + $$convert_configuration_references + $convert_configuration_references + $$convert_object_references + $convert_object_references + $$copy_configuration + $copy_configuration + $$copy_design_object + $copy_design_object + $$copy_object + $copy_object + $copy_version + $$create_configuration + $create_dm_category + $create_dm_cell + $create_dm_ext_lib + $create_dm_library + $create_dm_project + $create_dm_tech_category + $create_dm_tech_lib + $create_tech_config_object + $$create_versioned_object + $$delete_configuration + $delete_configuration + $delete_design_object + $delete_excess_versions + $$delete_object + $delete_object + $$delete_object_property + $delete_object_property + $$delete_reference + $delete_reference + $$delete_reference_handle + $$delete_reference_property + $delete_reference_property + $$delete_reference_property_handle + $$delete_version + $delete_version + $$delete_version_property + $descend_hierarchy_one_level + $descend_hierarchy_specify_level + $$duplicate_object + $edit_file + $empty_trash + $explore_contents + $explore_parent + $explore_reference_parent + $explore_references + $export_configuration_entries + $export_library + $export_location_map + $find_external_deps + $find_references + $$fix_relative_path + $$freeze_configuration + $freeze_configuration + $$freeze_version + $freeze_version + $get_area_selected_objects + $$get_children + $$get_configuration_entries + $$get_configuration_path + $$get_container_contents + $$get_date_last_modified + $get_default_tool + $$get_entry_version + $$get_fileset_members + $$get_hard_name + $$get_location_map + $$get_monitor_error_count + $$get_monitor_flag + $$get_monitor_verbosity + $$get_monitor_warning_count + $get_navigator_directory + $get_navigator_directory_hard + $get_next_tool_env + $$get_object_current_version + $$get_object_parent_path + $$get_object_path_filter + $get_object_pathname + $$get_object_properties + $$get_object_property_filter + $$get_object_property_value + $$get_object_protection + $$get_object_references + $$get_object_type + $get_object_type + $$get_object_type_filter + $get_object_version + $$get_object_versions + $$get_parent_entry + $$get_primaries + $$get_reference_properties + $$get_reference_properties_handle + $$get_reference_property_filter + $$get_reference_traversal + $$get_secondaries + $$get_soft_name + $$get_status_code + $$get_status_code_stack + $$get_status_messages + $get_subinvoke_mode + $$get_target_path + $get_technology + $get_toolbox_search_path + $get_tool_pathname + $get_tool_script + $get_tool_type + $$get_type_properties + $$get_type_property_value + $$get_version_depth + $$get_version_properties + $$get_working_directory + $goto_directory + $$handle_map_error + $$has_object_property + $$has_reference_property + $$has_reference_property_handle + $hide_secondary_entries + $hide_monitor + $import_classic_data + $import_custom_view + $import_design_kit + $import_ext_lib + $import_icstudio_library + $import_icstudio_project + $include_external_library + $invoke_bgd_tool + $invoke_tool + $$is_build_consistent + $$is_build_valid + $$is_configuration_edited + $$is_configuration_frozen + $$is_configuration_locked + $$is_container + $$is_directory + $$is_entry_container + $$is_entry_fixed + $$is_entry_primary + $$is_entry_retargetable + $$is_object_released + $$is_object_versioned + $$is_read_protected + $$is_relative_path + $$is_type_versioned + $$is_writable + $$is_write_protected + $list_references + $load_registry + $$lock_configuration + $lock_configuration + $$lock_object + $login_admin + $logged_in + $logout_admin + $maintain_hierarchy + $$monitor_global_status + $$move_design_object + $move_design_object + $$move_object + $move_object + $$object_complete + $$object_exists + $$open_configuration + $open_configuration_window + $$open_hierarchy + $open_navigator + $open_object + $open_read_only_editor + $open_session_monitor + $$open_tool + $open_tool + $open_tools_window + $open_trash_window + $open_types_window + $$open_versioned_object + $$prune_design_hierarchy + $$read_map + $read_map + $refresh_all + $$release_configuration + $release_configuration + $$release_object + $release_object + $$remove_configuration_entry + $remove_configuration_entry + $remove_external_library + $remove_toolbox + $report_configuration_info + $$report_configuration_references + $report_configuration_references + $report_entry_info + $$report_entry_verification + $report_entry_verification + $$report_global_status + $report_object_info + $report_reference_info + $report_tool_info + $report_type_info + $report_version_info + $$resolve_path + $$revert_version + $revert_version + $$salvage_object + $salvage_object + $$save_configuration + $save_configuration + $$save_configuration_as + $save_configuration_as + $$save_object + $save_toolbox_search_path + $search + $search_again + $select_all + $select_by_name + $select_by_library + $select_by_type + $select_config_entry + $select_object + $select_reference + $select_tool + $select_toolbox + $select_trash_object + $select_version + $set_build_rules + $$set_location_map_entry + $$set_monitor_flag + $$set_monitor_verbosity + $set_next_tool_env + $$set_object_path_filter + $$set_object_property + $$set_object_property_filter + $$set_object_type_filter + $set_project_refresh_heartbeat + $$set_protection + $$set_protection_numeric + $$set_reference_property + $$set_reference_property_filter + $$set_reference_property_handle + $$set_reference_traversal + $set_subinvoke_mode + $$set_target_path + $set_target_path + $set_technology + $set_toolbox_search_path + $$set_version_depth + $$set_version_property + $$set_working_directory + $set_working_directory + $setup_filter_active + $setup_filter_all + $setup_default_editor + $setup_iconic_window_layout + $setup_invoke_tool + $$setup_monitor + $setup_monitor + $setup_session_defaults + $setup_startup_windows + $show_all_files + $show_compiled_libs + $show_component_hierarchy + $show_custom_views + $show_directories + $show_ext_libs + $show_language_views + $show_layout_views + $$show_location_map + $show_location_map + $show_logic_views + $show_references + $show_monitor + $show_tech_libs + $show_versions + $trash_object + $$unfreeze_configuration + $unfreeze_configuration + $$unfreeze_version + $unfreeze_version + $$unlock_configuration + $unlock_configuration + $$unlock_object + $unselect_all + $unselect_by_name + $unselect_by_type + $unselect_config_entry + $unselect_object + $unselect_reference + $unselect_tool + $unselect_toolbox + $unselect_trash_object + $unselect_version + $unset_next_tool_env + $untrash_object + $$update_type + $update_window + $validate_technology + $view_by_icon + $view_by_name + $view_containment_hierarchy + $view_primary_hierarchy + $view_secondary_entries + $view_toolboxes + $view_tools + $write_default_startup_file + $$writeln_monitor + + + $get_current_obj_hier_path + $get_current_obj_inst_list + $idw_dh_setup_display + $idw_report_hier + $idw_open_hierarchy_window + $inst_area_extend_selection + $inst_area_select_all_items + $inst_area_select_item + $inst_area_show_instances + $inst_area_unselect_all_items + $make_obj_current + $open_new_comp_hierarchy + $open_new_hierarchy + $select_obj + $show_instance + $show_n_levels + $set_font + $setup_comp_hierarchy_display + $setup_hierarchy_selection + $write_default_startup_file + $add_components + $add_labels_to_models + $collapse_object + $delete_labels_from_models + $delete_part_interfaces + $expand_object + $forget_components_edits + $hide_body_props + $hide_labels + $hide_model + $hide_pin_properties + $hide_pins + $register_models + $remove_components + $rename_part_interface + $report_body_prop_info + $report_component_info + $report_model_entry_info + $report_models_for_each_label + $report_model_info + $report_models_with_all_labels + $report_pin_info + $save_components_edits + $select_model_object + $select_object + $set_bgd_color + $set_bgd_color_title_items + $set_bgd_color_titles + $set_constraints + $set_default_part_interface + $set_fgd_color + $set_fgd_color_title_items + $set_fgd_color_titles + $set_font + $set_part_interface_font + $show_body_props + $show_labels + $show_model + $show_pins + $show_pin_properties + $unselect_model_object + $unselect_object + $validate_models + + + quick_help + ref_help + + + + optional + default + + + + + name + callable + enum + integer + location + name + number + pathname + polylocation + polyrectangle + real + rectangle + status + string + vector + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/ansforth94.xml b/src/data/extra/syntax-highlighting/syntax/ansforth94.xml new file mode 100644 index 00000000..44876e87 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/ansforth94.xml @@ -0,0 +1,595 @@ + + + + + + + ! + # + #> + #S + ' + ( + * + */ + */MOD + + + +! + +LOOP + , + - + . + ." + / + /MOD + 0< + 0= + 1+ + 1- + 2! + 2* + 2/ + 2@ + 2DROP + 2DUP + 2OVER + 2SWAP + : + ; + < + <# + = + > + >BODY + >IN + >NUMBER + >R + ?DUP + @ + ABORT + ABORT" + ABS + ACCEPT + ALIGN + ALIGNED + ALLOT + AND + BASE + BEGIN + BL + C! + C, + C@ + CELL+ + CELLS + CHAR + CHAR+ + CHARS + CONSTANT + COUNT + CR + CREATE + DECIMAL + DEPTH + DO + DOES> + DROP + DUP + ELSE + EMIT + ENVIRONMENT? + EVALUATE + EXECUTE + EXIT + FILL + FIND + FM/MOD + HERE + HOLD + I + IF + IMMEDIATE + INVERT + J + KEY + LEAVE + LITERAL + LOOP + LSHIFT + M* + MAX + MIN + MOD + MOVE + NEGATE + OR + OVER + POSTPONE + QUIT + R> + R@ + RECURSE + REPEAT + ROT + RSHIFT + S" + S>D + SIGN + SM/REM + SOURCE + SPACE + SPACES + STATE + SWAP + THEN + TYPE + U. + U< + UM* + UM/MOD + UNLOOP + UNTIL + VARIABLE + WHILE + WORD + XOR + [ + ['] + [CHAR] + ] + + + .( + .R + 0<> + 0> + 2>R + 2R> + 2R@ + :NONAME + <> + ?DO + AGAIN + C" + CASE + COMPILE, + ENDCASE + ENDOF + ERASE + FALSE + HEX + MARKER + NIP + OF + PAD + PARSE + PICK + REFILL + RESTORE-INPUT + ROLL + SAVE-INPUT + SOURCE-ID + TO + TRUE + TUCK + U.R + U> + UNUSED + VALUE + WITHIN + [COMPILE] + \ + + + #TIB + CONVERT + EXPECT + QUERY + SPAN + TIB + + + BLK + BLOCK + BUFFER + EVALUATE + FLUSH + LOAD + SAVE-BUFFERS + UPDATE + + + EMPTY-BUFFERS + LIST + REFILL + SCR + THRU + \ + + + 2CONSTANT + 2LITERAL + 2VARIABLE + D+ + D- + D. + D.R + D0< + D0= + D2* + D2/ + D< + D= + D>S + DABS + DMAX + DMIN + DNEGATE + M*/ + M+ + + + 2ROT + DU< + + + CATCH + THROW + + + ABORT + ABORT" + + + AT-XY + KEY? + PAGE + + + EKEY + EKEY>CHAR + EKEY? + EMIT? + MS + TIME&DATE + + + ( + BIN + CLOSE-FILE + CREATE-FILE + DELETE-FILE + FILE-POSITION + FILE-SIZE + INCLUDE-FILE + INCLUDED + OPEN-FILE + R/O + R/W + READ-FILE + READ-LINE + REPOSITION-FILE + RESIZE-FILE + S" + SOURCE-ID + W/O + WRITE-FILE + WRITE-LINE + + + FILE-STATUS + FLUSH-FILE + REFILL + RENAME-FILE + + + >FLOAT + D>F + F! + F* + F+ + F- + F/ + F0< + F0= + F< + F>D + F@ + FALIGN + FALIGNED + FCONSTANT + FDEPTH + FDROP + FDUP + FLITERAL + FLOAT+ + FLOATS + FLOOR + FMAX + FMIN + FNEGATE + FOVER + FROT + FROUND + FSWAP + FVARIABLE + REPRESENT + + + DF! + DF@ + DFALIGN + DFALIGNED + DFLOAT+ + DFLOATS + F** + F. + FABS + FACOS + FACOSH + FALOG + FASIN + FASINH + FATAN + FATAN2 + FATANH + FCOS + FCOSH + FE. + FEXP + FEXPM1 + FLN + FLNP1 + FLOG + FS. + FSIN + FSINCOS + FSINH + FSQRT + FTAN + FTANH + F~ + PRECISION + SET-PRECISION + SF! + SF@ + SFALIGN + SFALIGNED + SFLOAT+ + SFLOATS + + + (LOCAL) + TO + + + LOCALS| + + + ALLOCATE + FREE + RESIZE + + + .S + ? + DUMP + SEE + WORDS + + + ;CODE + AHEAD + ASSEMBLER + BYE + CODE + CS-PICK + CS-ROLL + EDITOR + STATE + [ELSE] + [IF] + [THEN] + + + FORGET + + + DEFINITIONS + FIND + FORTH-WORDLIST + GET-CURRENT + GET-ORDER + SEARCH-WORDLIST + SET-CURRENT + SET-ORDER + WORDLIST + + + ALSO + FORTH + ONLY + ORDER + PREVIOUS + + + -TRAILING + /STRING + BLANK + CMOVE + CMOVE> + COMPARE + SEARCH + SLITERAL + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/ansic89.xml b/src/data/extra/syntax-highlighting/syntax/ansic89.xml new file mode 100644 index 00000000..e4425608 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/ansic89.xml @@ -0,0 +1,134 @@ + + + + + + break + case + continue + default + do + else + enum + extern + for + goto + if + return + sizeof + struct + switch + typedef + union + while + + + auto + char + const + double + float + int + long + register + short + signed + static + unsigned + void + volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/ansys.xml b/src/data/extra/syntax-highlighting/syntax/ansys.xml new file mode 100644 index 00000000..d405220e --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/ansys.xml @@ -0,0 +1,2056 @@ + + + + + + /BATCH + /CONFIG + /CWD + /EOF + /EXIT + /FILNAME + HELP + /INPUT + KEYW + MEMM + /MENU + /MSTART + /NERR + /OUTPUT + /STATUS + /SYP + /SYS + /UI + /UIS + /AUX2 + /AUX3 + /AUX12 + /AUX15 + FINISH + /OPT + /POST1 + /POST26 + /PREP7 + /QUIT + /RUNST + /SOLU + /ASSIGN + /CLOG + /COPY + /DELETE + /FDELE + /FTYPE + LGWRITE + *LIST + /RENAME + /COM + /GO + /GOLIST + /GOPR + /NOLIST + /NOPR + + + /CLEAR + RESUME + SAVE + /SMBC + STAT + /STITLE + /TITLE + UNDO + /UNITS + ALLSEL + ASLL + ASEL + ASLV + DOFSEL + ESEL + ESLA + ESLL + ESLN + ESLV + KSEL + KSLL + KSLN + LSEL + LSLA + LSLK + NSEL + NSLA + NSLE + NSLK + NSLL + NSLV + PARTSEL + VSEL + VSLA + CM + CMDELE + CMEDIT + CMGRP + CMLIST + CMMOD + CMPLOT + CMSEL + KWPAVE + KWPLAN + LWPLAN + NWPAVE + NWPLAN + WPAVE + WPCSYS + WPLANE + WPOFFS + WPROTA + WPSTYL + CLOCAL + CS + CSCIR + CSDELE + CSKP + CSLIST + CSWPLA + CSYS + LOCAL + FITEM + FLST + + + /CMAP + /COLOR + /DEVICE + DSYS + /DV3D + /ERASE + ERASE + /GCMD + /GCOLUMN + /GFILE + GPLOT + /GRAPHICS + /GRESUME + /GSAVE + /GTYPE + HPGL + /IMAGE + IMMED + JPEG + /MREP + /NOERASE + /PCOPY + PNGR + PSCR + /PSTATUS + /REPLOT + /RESET + /SEG + /SHOW + TIFF + /WINDOW + /ANGLE + /AUTO + /DIST + /FOCUS + /USER + /VCONE + /VIEW + /VUP + /XFRM + /ZOOM + /DSCALE + /ICLWID + /ICSCALE + /RATIO + /SHRINK + /SSCALE + /TXTRE + /VSCALE + /CPLANE + /CTYPE + /EDGE + /ESHAPE + /FACET + /GLINE + /GMARKER + GMFACE + /LIGHT + /NORMAL + /SHADE + /TRLCY + /TYPE + /CFORMAT + /CLABEL + /CONTOUR + /CVAL + /GFORMAT + /HBC + /NUMBER + /PBC + /PBF + PGSELE + /PICE + /PLOPTS + /PNUM + /PSF + /PSYMB + /TRIAD + /UDOC + /AXLAB + /GRID + /GROPT + /GRTYP + /GTHK + /XRANGE + /YRANGE + /AN3D + /ANNOT + /ANUM + /LARC + /LINE + /LSPEC + /LSYMBOL + /PCIRCLE + /PMORE + /POLYGON + /PSPEC + /PWEDGE + /TLABEL + /TSPEC + + + GET + *ABBR + ABBRES + ABBSAV + *AFUN + *ASK + *CFCLOS + *CFOPEN + *CFWRITE + *CREATE + *CYCLE + *DEL + /DFLAB + *DIM + /DIRECTORY + *DO + *DOWHILE + *ELSE + *ELSEIF + *END + *ENDDO + *ENDIF + *EXIT + *GET + *GO + *IF + /INQUIRE + /MAIL + *MFOURI + *MFUN + *MOPER + *MSG + *MWRITE + PARRES + PARSAV + /PMACRO + /PSEARCH + *REPEAT + *RETURN + *SET + *SREAD + *STATUS + *TAXIS + /TEE + *TOPER + *TREAD + /UCMD + *ULIB + *USE + *VABS + *VCOL + *VCUM + *VEDIT + *VFACT + *VFILL + *VFUN + *VGET + *VITRP + *VLEN + *VMASK + *VOPER + *VPLOT + *VPUT + *VREAD + *VSCFUN + *VSTAT + *VWRITE + /WAIT + + + AFLIST + CDREAD + CDWRITE + CDOPT + CECHECK + CHECK + CNCHECK + FC + FCCHECK + FCDELE + FCLIST + IGESOUT + NOOFFSET + NUMCMP + NUMMRG + NUMOFF + NUMSTR + DOF + ET + ETCONTROL + ETDELE + ETLIST + KEYOPT + NSVR + R + RDELE + RLIST + RMODIF + RMORE + SETFGAP + EMUNIT + *EVAL + *MOONEY + MP + MPAMOD + MPCHG + MPCOPY + MPDATA + MPDELE + MPDRES + /MPLIB + MPLIST + MPPLOT + MPREAD + MPTEMP + MPTGEN + MPTRES + MPWRITE + TBFT + UIMP + TB + TBCOPY + TBDATA + TBDELE + TBFIELD + TBLIST + TBMODIF + TBPLOT + TBPT + TBTEMP + BLC4 + BLC5 + BLOCK + CON4 + CONE + CYL4 + CYL5 + CYLIND + PCIRC + POLY + PRI2 + PRISM + PTXY + RECTNG + RPOLY + RPR4 + RPRISM + SPH4 + SPH5 + SPHERE + TORUS + GSUM + K + KBETW + KCENTER + KDELE + KDIST + KFILL + KGEN + KL + KLIST + KMODIF + KMOVE + KNODE + KPLOT + KPSCALE + KSCALE + KSUM + KSYMM + KTRAN + SOURCE + HPTCREATE + HPTDELETE + BSPLIN + CIRCLE + GSUM + L + L2ANG + L2TAN + LANG + LARC + LAREA + LCOMB + LDELE + LDIV + LDRAG + LEXTND + LFILLT + LGEN + LLIST + LPLOT + LREVERSE + LROTAT + LSSCALE + LSTR + LSUM + LSYMM + LTAN + LTRAN + SPLINE + SSLN + A + AATT + ADELE + ADGL + ADRAG + AFILLT + AGEN + AL + ALIST + ANORM + AOFFST + APLOT + AREVERSE + AROTAT + ARSCALE + ARSYM + ASKIN + ASUB + ASUM + ATRAN + GSUM + SPLOT + EXTOPT + GSUM + V + VA + VDELE + VDGL + VDRAG + VEXT + VGEN + VLIST + VLSCALE + VOFFST + VPLOT + VROTAT + VSUM + VSYMM + VTRAN + AADD + AGLUE + AINA + AINP + AINV + AOVLAP + APTN + ASBA + ASBL + ASBV + ASBW + BOPTN + BTOL + LCSL + LGLUE + LINA + LINL + LINP + LINV + LOVLAP + LPTN + LSBA + LSBL + LSBV + LSBW + VADD + VGLUE + VINP + VINV + VOVLAP + VPTN + VSBA + VSBV + VSBW + ACCAT + ACLEAR + AESIZE + AMAP + AMESH + AREFINE + CHKMSH + CLRMSHLN + CPCYC + DESIZE + EORIENT + EREFINE + ESIZE + ESYS + FVMESH + GSGDATA + IMESH + KATTA + KCLEAR + KESIZE + KMESH + KREFINE + KSCON + LATT + LCCAT + LCLEAR + LESIZE + LMESH + LREFINE + MAT + MCHECK + MODMSH + MOPT + MSHAPE + MSHCOPY + MSHKEY + MSHMID + MSHPATTERN + NREFINE + PSMESH + REAL + RTHICK + SHPP + SMRTSIZE + TCHG + TIMP + TYPE + VATT + VCLEAR + VIMP + VMESH + VEORIENT + VSWEEP + CENTER + FILL + MOVE + N + NANG + NDELE + NDIST + NGEN + NKPT + NLIST + NMODIF + NPLOT + NREAD + NROTAT + NRRANG + NSCALE + NSMOOTH + NSYM + NWRITE + QUAD + SOURCE + TRANSFER + AFSURF + E + EDELE + EGEN + EINTF + ELIST + EMID + EMODIF + EMORE + EMTGEN + EN + ENDRELEASE + ENGEN + ENORM + ENSYM + EORIENT + EPLOT + EREAD + ERRANG + ESURF + ESYM + ESYS + EWRITE + LAYLIST + LAYPLOT + LFSURF + MAT + NDSURF + REAL + SHSD + SWADD + SWDEL + SWGEN + SWLIST + TSHAP + TYPE + UPGEOM + SE + SEDLIST + SELISTL + SESYMM + SETRAN + BELLOW + BEND + BRANCH + FLANGE + MITER + PCORRO + PDRAG + PFLUID + PGAP + PINSUL + POPT + PPRES + PSPEC + PSPRNG + PTEMP + PUNIT + REDUCE + RUN + TEE + VALVE + DIG + DMOVE + DSET + DSURF + CP + CPDELE + CPINTF + CPLGEN + CPLIST + CPNGEN + CPSGEN + CE + CECYC + CEDELE + CEINTF + CELIST + CERIG + CESGEN + RBE3 + NOORDER + WAVES + WERASE + WFRONT + WMID + WMORE + WSORT + WSTART + FLDATA + FLDATA1 + FLDATA2 + FLDATA3 + FLDATA4 + FLDATA4A + FLDATA5 + FLDATA6 + FLDATA7 + FLDATA8 + FLDATA9 + FLDATA10 + FLDATA11 + FLDATA12 + FLDATA13 + FLDATA14 + FLDATA15 + FLDATA16 + FLDATA17 + FLDATA18 + FLDATA19 + FLDATA20 + FLDATA20A + FLDATA20B + FLDATA21 + FLDATA22 + FLDATA23 + FLDATA24 + FLDATA24A + FLDATA24B + FLDATA24C + FLDATA24D + FLDATA24E + FLDATA24F + FLDATA24G + FLDATA24H + FLDATA40 + FLDATA25 + FLDATA26 + FLDATA34 + FLDATA27 + FLDATA28 + FLDATA29 + FLDATA30 + FLDATA31 + FLDATA32 + FLDATA33 + FLDATA35 + FLDATA36 + FLDATA37 + FLDATA38 + FLDATA39 + ICVFRC + PLVFRC + MSADV + MSCAP + MSDATA + MSMASS + MSMETH + MSMIR + MSNOMF + MSPROP + MSQUAD + MSRELAX + MSSOLU + MSSPEC + MSTERM + MSVARY + /CYCEXPAND + CYCLIC + CYCOPT + EMSYM + HFEREFINE + PERBC2D + PHYSICS + RACE + AREAS + BOOL + CEQN + COUPLE + DIGIT + ELEM + ETYPE + FATIGUE + FEBODY + FECONS + FEFOR + FESURF + FLOTRAN + GEOMETRY + KEYPTS + LINE + MATER + MESHING + NODES + PIPE + PMETH + PRIM + RCON + REORDER + SELM + TBLE + VOLUMES + EDASMP + EDBOUND + EDBX + EDCGEN + EDCLIST + EDCMORE + EDCNSTR + EDCONTACT + EDCRB + EDCURVE + EDDBL + EDDC + EDIPART + EDLCS + EDMP + EDNB + EDNDTSD + EDNROT + EDPART + EDPC + EDSP + EDWELD + ALPFILL + ARCOLLAPSE + ARDETACH + ARFILL + ARMERGE + ARSPLIT + GAPFINISH + GAPLIST + GAPMERGE + GAPOPT + GAPPLOT + LNCOLLAPSE + LNDETACH + LNFILL + LNMERGE + LNSPLIT + SARPLOT + SLPPLOT + SLSPLOT + VCVFILL + BSAX + BSM1 + BSM2 + BSMD + BSS1 + BSS2 + BSTE + BSTQ + PRSSOL + SDELETE + SECDATA + SECJOINT + /SECLIB + SECLOCK + SECNUM + SECOFFSET + SECPLOT + SECREAD + SECSTOP + SECTYPE + SECWRITE + SLIST + SSBT + SSMT + SSPA + SSPB + SSPD + SSPE + SSPM + MORPH + DAMORPH + DEMORPH + DVMORPH + TZAMESH + TZDELE + TZEGEN + PMLOPT + PMLSIZE + FSAN + FSCO + FSDT + FSIN + FSIT + FSOR + FSOU + FSRE + FSSTAT + FSTI + FSTR + + + ABEXTRACT + ADAMS + ADAPT + ANTYPE + BCSOPTION + CECHECK + CHECK + CMATRIX + CMSOPT + CNCHECK + CUTCONTROL + CYCOPT + DMPEXT + DSPROC + DSOPT + EMATWRITE + EQSLV + ERESX + ESCHECK + ESSOLV + EXPASS + FSRS + FSSOLV + GAUGE + GMATRIX + HFEIGOPT + HFPA + HFPCSWP + HFSCAT + HFSWEEP + LMATRIX + LUMPM + MONITOR + MSAVE + OPNCONTROL + PRECISION + PSCONTROL + PSOLVE + RATE + RSTOFF + SEEXP + SEGEN + SEOPT + SOLCONTROL + /SOLU + SOLVE + SPSCAN + SPSWP + STAOPT + TOFFST + PCONV + PEXCLUDE + PINCLUDE + /PMETH + PMOPTS + PPRANGE + ARCLENA + ARCTRM + BUCOPT + CNVTOL + CRPLIM + /GST + LNSRCH + MXPAND + NCNV + NEQIT + NLDIAG + NLDPOST + NLGEOM + NLHIST + NROPT + PRED + PSTRES + SSTIF + SUBOPT + ALPHAD + BETAD + DMPRAT + HARFRQ + HREXP + HROPT + HROUT + LVSCALE + MDAMP + MDPLOT + MODOPT + MXPAND + RIGID + SUBOPT + TIMINT + TINTP + TRNOPT + ADDAM + COVAL + CQC + DSUM + FREQ + GRP + NRLSUM + PFACT + PSDCOM + PSDFRQ + PSDGRAPH + PSDSPL + PSDUNIT + PSDVAL + PSDWAV + QDVAL + ROCK + SED + SPOPT + SRSS + SV + SVTYP + VDDAM + AUTOTS + CECMOD + DELTIM + EXPSOL + HMAGSOLV + KBC + KUSE + MAGOPT + MAGSOLV + MODE + NSUBST + NUMEXP + TIME + TREF + TSRES + UPCOORD + USRCAL + WRFULL + DA + DADELE + DALIST + DK + DKDELE + DKLIST + DL + DLDELE + DLLIST + DTRAN + FK + FKDELE + FKLIST + FTRAN + SFA + SFADELE + SFALIST + SFL + SFLDELE + SFLLIST + SFTRAN + BFA + BFADELE + BFALIST + BFK + BFKDELE + BFKLIST + BFL + BFLDELE + BFLLIST + BFTRAN + BFV + BFVDELE + BFVLIST + ACEL + CGLOC + CGOMGA + CMACEL + CMDOMEGA + CMOMEGA + DCGOMG + DOMEGA + IRLF + OMEGA + BIOT + FMAGBC + HFPORT + IC + ICDELE + ICE + ICEDELE + ICELIST + ICLIST + ISFILE + MPCHG + OUTPR + OUTRES + PGRAPH + PGSAVE + PGWRITE + PLWAVE + RESCONTROL + SBCLIST + SBCTRAN + WSPRINGS + LSCLEAR + LSDELE + LSREAD + LSSOLVE + LSWRITE + M + MDELE + MGEN + MLIST + TOTAL + GP + GPDELE + GPLIST + REZONE + MAPSOLVE + REMESH + AREMESH + EALIVE + EKILL + ESTIF + D + DCUM + DDELE + DJ + DJDELE + DJLIST + DLIST + DSCALE + DSYM + GSBDATA + GSLIST + LDREAD + F + FCUM + FDELE + FJ + FJDELE + FJLIST + FLIST + FSCALE + SF + SFBEAM + SFCUM + SFDELE + SFE + SFEDELE + SFELIST + SFFUN + SFGRAD + SFLIST + SFSCALE + BF + BFCUM + BFDELE + BFE + BFECUM + BFEDELE + BFELIST + BFESCAL + BFLIST + BFSCALE + BFUNIF + LDREAD + RIMPORT + TUNIF + BIOOPT + DEACT + DYNOPT + GAP + GENOPT + INRTIA + LSOPER + MASTER + NLOPT + OUTOPT + SMBODY + SMCONS + SMFOR + SMSURF + SOLUOPT + SPTOPT + EDADAPT + EDALE + EDBVIS + EDCADAPT + EDCPU + EDCSC + EDCTS + EDDAMP + EDDRELAX + EDDUMP + EDENERGY + EDFPLOT + EDGCALE + EDHGLS + EDHIST + EDHTIME + EDINT + EDIS + EDLOAD + EDOPT + EDOUT + EDPL + EDPVEL + EDRC + EDRD + EDRI + EDRST + EDRUN + EDSHELL + EDSOLV + EDSTART + EDTERM + EDTP + EDVEL + EDWRITE + REXPORT + FLOCHECK + PEMOPTS + HEMIOPT + RADOPT + RDEC + RSURF + RSYMM + SPCNOD + SPCTEMP + STEF + V2DOPT + VFCALC + VFOPT + QSOPT + FSAN + FSCO + FSDT + FSIN + FSIT + FSOR + FSOU + FSRE + FSRS + FSSTAT + FSTI + FSTR + MFANALYSIS + MFBUCKET + MFCALC + MFCLEAR + MFCMMAND + MFCONV + MFDTIME + MFELEM + MFEM + MFEXTER + MFFNAME + MFIMPORT + MFINTER + MFITER + MFLIST + MFMAP + MFORDER + MFOUTPUT + MFRELAX + MFRSTART + MFSURFACE + MFTIME + MFTOL + MFVOLUME + + + APPEND + DETAB + DNSOL + FILE + HRCPLX + PGRSET + /POST1 + RESET + SET + SUBSET + AVPRIN + AVRES + /EFACET + ERNORM + FORCE + INRES + LAYER + RSYS + SHELL + NSORT + NUSORT + PLCONV + PLDISP + PLESOL + PLNSOL + PLVECT + PPLOT + PRCONV + PRESOL + PRJSOL + PRNLD + PRNSOL + PRRFOR + PRRSOL + PRSSOL + PRVECT + SUMTYPE + DESOL + ESORT + ETABLE + EUSORT + PLETAB + PLLS + PLVECT + PRETAB + PRVECT + SABS + SADD + SALLOW + SEXP + SFACT + SFCALC + SMAX + SMIN + SMULT + SSUM + TALLOW + VCROSS + VDOT + /FORMAT + /HEADER + IRLIST + /PAGE + PRERR + PRITER + ANCNTR + ANCUT + ANDATA + ANDSCL + ANCYC + ANDYNA + /ANFILE + ANFLOW + ANHARM + ANIM + ANISOS + ANMODE + ANMRES + ANTIME + TRTIME + PADELE + PAGET + PAPUT + PARESU + PASAVE + PATH + PCALC + PCROSS + PDEF + PDOT + PLPAGM + PLPATH + PLSECT + PMAP + PPATH + PRANGE + PRPATH + PRSECT + PSEL + PVECT + SUCALC + SUCR + SUDEL + SUEVAL + SUGET + SUMAP + SUPL + SUPR + SURESU + SUSAVE + SUSEL + SUVECT + LCABS + LCASE + LCDEF + LCFACT + LCFILE + LCOPER + LCSEL + LCSUM + LCWRITE + LCZERO + RAPPND + CURR2D + EMAGERR + EMF + EMFT + FLUXV + FMAGSUM + FOR2D + IMPD + MMF + PLF2D + POWERH + QFACT + REFLCOEF + SENERGY + SPARM + TORQ2D + TORQC2D + TORQSUM + FE + FELIST + FL + FLLIST + FP + FPLIST + FS + FSDELE + FSLIST + FSNODE + FSPLOT + FSSECT + FTCALC + FTSIZE + FTWRITE + PLTRAC + TRPDEL + TRPLIS + TRPOIN + FLREAD + BFINT + CBDOF + CMSFILE + /CYCEXPAND + CYCPHASE + /EXPAND + EXPAND + FSSPARM + FSUM + HFANG + HFARRAY + HFNEAR + HFPOWER + HFSYM + INTSRF + KCALC + NFORCE + PLCRACK + PLHFFAR + PLSCH + PLSYZ + PRHFFAR + PRSYZ + RMFLVEC + RSPLIT + SPOINT + DATADEF + DEFINE + DISPLAY + LCCALC + POINT + PRINT + SORT + SPEC + FC + FCCHECK + FCDELE + FCLIST + + + ANSOL + DATA + EDREAD + ESOL + FILE + GAPF + GSSOL + JSOL + NSOL + NSTORE + NUMVAR + /POST26 + RESET + RFORCE + /RGB + SOLU + STORE + TIMERANGE + VARDEL + VARNAM + CFACT + FORCE + LAYERP26 + SHELL + TVAR + ABS + ADD + ATAN + CLOG + CONJUG + DERIV + EXP + FILLDATA + IMAGIN + INT1 + LARGE + NLOG + PROD + QUOT + REALVAR + SMALL + SQRT + PLCPLX + PLTIME + PLVAR + SPREAD + XVAR + EXTREM + LINES + NPRINT + PRCPLX + PRTIME + PRVAR + CVAR + PMGTRAN + RESP + RPSD + SMOOTH + VGET + VPUT + DEFINE + OPERATE + PLOTTING + PRINT + + + /AUX2 + DUMP + FILEAUX2 + FORM + HBMAT + + + /AUX3 + COMPRESS + DELETE + FILEAUX3 + LIST + MODIFY + UNDELETE + + + /AUX12 + EMIS + GEOM + MPRINT + SPACE + STEF + VFQUERY + VTYPE + WRITE + + + /AUX15 + IGESIN + IOPTN + + + RALL + RFILSZ + RITER + RMEMRY + RSPEED + RSTAT + RTIMST + /RUNST + RWFRNT + + + /OPT + OPEQN + OPFACT + OPFRST + OPGRAD + OPKEEP + OPLOOP + OPPRNT + OPRAND + OPSUBP + OPSWEEP + OPTYPE + OPUSER + OPVAR + TOCOMP + TODEF + TOFREQ + TOTYPE + TOVAR + OPADD + OPCLR + OPDEL + OPMAKE + OPSEL + OPANL + OPDATA + OPRESU + OPSAVE + OPEXE + TOEXE + TOLOOP + OPLFA + OPLGR + OPLIST + OPLSW + OPRFA + OPRGR + OPRSW + PLVAROPT + PRVAROPT + TOGRAPH + TOLIST + TOPLOT + TOPRINT + TOSTAT + XVAROPT + + + /PDS + PDANL + PDCORR + PDINQR + PDPLOT + PDVAR + PDDOEL + PDDMCS + PDMETH + PDUSER + PDEXE + PDCDF + PDCMAT + PDHIST + PDPINV + PDPROB + PDROPT + PDSCAT + PDSENS + PDSHIS + PDWRITE + PDCLR + PDRESU + PDSAVE + RSFIT + RSPLOT + RSPRNT + RSSIMS + + + /CMAP + /DEVDISP + FILEDISP + HELPDISP + NOCOLOR + /SEG + /SHOWDISP + TRANS + GRPH + TERM + FINISH + PLOT + STAT + + + RMRESUME + RMSAVE + RMNDISP + RMNEVEC + RMALIST + RMANL + RMASTER + RMCAP + RMCLIST + RMMLIST + RMMRANGE + RMMSELECT + RMPORDER + RMRGENERATE + RMROPTIONS + RMRPLOT + RMRSTATUS + RMSMPLE + RMXPORT + DCVSWP + RMLVSCALE + RMUSE + + + ABS + SIGN + EXP + LOG + LOG10 + SQRT + NINT + MOD + RAND + GDIS + SIN + COS + TAN + SINH + COSH + TANH + ASIN + ACOS + ATAN + ATAN2 + VALCHR + CHRVAL + UPCASE + LWCASE + + + LINK1 + PLANE2 + BEAM3 + BEAM4 + SOLID5 + COMBIN7 + LINK8 + INFIN9 + LINK10 + LINK11 + CONTAC12 + PLANE13 + COMBIN14 + PIPE16 + PIPE17 + PIPE18 + PIPE20 + MASS21 + BEAM23 + BEAM24 + PLANE25 + MATRIX27 + SHELL28 + FLUID29 + FLUID30 + LINK31 + LINK32 + LINK33 + LINK34 + PLANE35 + SOURC36 + COMBIN37 + FLUID38 + COMBIN39 + COMBIN40 + SHELL41 + PLANE42 + SHELL43 + BEAM44 + SOLID45 + SOLID46 + INFIN47 + MATRIX50 + SHELL51 + CONTAC52 + PLANE53 + BEAM54 + PLANE55 + HYPER56 + SHELL57 + HYPER58 + PIPE59 + PIPE60 + SHELL61 + SOLID62 + SHELL63 + SOLID64 + SOLID65 + PLANE67 + LINK68 + SOLID69 + SOLID70 + MASS71 + HYPER74 + PLANE75 + PLANE77 + PLANE78 + FLUID79 + FLUID80 + FLUID81 + PLANE82 + PLANE83 + HYPER84 + HYPER86 + SOLID87 + VISCO88 + VISCO89 + SOLID90 + SHELL91 + SOLID92 + SHELL93 + CIRCU94 + SOLID95 + SOLID96 + SOLID97 + SOLID98 + SHELL99 + VISCO106 + VISCO107 + VISCO108 + TRANS109 + INFIN110 + INFIN111 + INTER115 + FLUID116 + SOLID117 + HF118 + HF119 + HF120 + PLANE121 + SOLID122 + SOLID123 + CIRCU124 + CIRCU125 + TRANS126 + SOLID127 + SOLID128 + FLUID129 + FLUID130 + SHELL131 + SHELL132 + FLUID136 + FLUID138 + FLUID139 + FLUID141 + FLUID142 + SHELL143 + ROM144 + PLANE145 + PLANE146 + SOLID147 + SOLID148 + SHELL150 + SURF151 + SURF152 + SURF153 + SURF154 + SHELL157 + HYPER158 + LINK160 + BEAM161 + PLANE162 + SHELL163 + SOLID164 + COMBI165 + MASS166 + LINK167 + SOLID168 + TARGE169 + TARGE170 + CONTA171 + CONTA172 + CONTA173 + CONTA174 + CONTA175 + CONTA178 + PRETS179 + LINK180 + SHELL181 + PLANE182 + PLANE183 + MPC184 + SOLID185 + SOLID186 + SOLID187 + BEAM188 + BEAM189 + SOLSH190 + SOLID191 + INTER192 + INTER193 + INTER194 + INTER195 + MESH200 + FOLLW201 + SHELL208 + SHELL209 + PLANE223 + SOLID226 + SOLID227 + PLANE230 + SOLID231 + SOLID232 + SURF251 + SURF252 + + + EX + EY + EZ + GXY + NUXY + ALPX + ALPY + ALPZ + CTEX + CTEY + CTEZ + THSX + THSY + THSZ + REFT + PRXY + PRYZ + PRXZ + NUXY + NUYZ + NUXZ + GXY + GYZ + GXZ + DAMP + DMPR + MU + DENS + C + ENTH + KXX + KYY + KZZ + HF + EMIS + QRATE + VISC + SONC + RSVX + RSVY + RSVZ + PERX + MURX + MURY + MURZ + MGXX + MGYY + MGZZ + LSST + SBKX + + + UX + UY + UZ + FX + FY + FZ + MX + MY + MZ + HEAT + HBOT + HE2 + HE3 + HTOP + FLOW + AMPS + CHRG + CSGX + CSGY + CSGZ + ROTX + ROTY + ROTZ + WARP + TEMP + TBOT + TE2 + TE3 + TTOP + PRES + VX + VY + VZ + ENKE + ENDS + SP01 + SP02 + SP03 + SP04 + SP05 + SP06 + VOLT + MAG + AX + AYAZ + + + STATIC + BUCKLE + MODAL + HARMIC + TRANS + SUBSTR + SPECTR + + + + + + NX + NY + NZ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/apache.xml b/src/data/extra/syntax-highlighting/syntax/apache.xml new file mode 100644 index 00000000..732d769b --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/apache.xml @@ -0,0 +1,633 @@ + + + + + + + + + +AcceptFilter +AccessFileName +Action +AddAlt +AddAltByEncoding +AddAltByType +AddCharset +AddDefaultCharset +AddDescription +AddEncoding +AddHandler +AddIcon +AddIconByEncoding +AddIconByType +AddInputFilter +AddLanguage +AddModuleInfo +AddOutputFilter +AddOutputFilterByType +AddType +Alias +AliasMatch +Allow +Anonymous +AuthBasicProvider +AuthDBMGroupFile +AuthDBMUserFile +AuthDigestDomain +AuthDigestFile +AuthDigestGroupFile +AuthDigestNonceFormat +AuthDigestProvider +AuthGroupFile +AuthLDAPBindDN +AuthLDAPBindPassword +AuthLDAPCharsetConfig +AuthLDAPGroupAttribute +AuthLDAPUrl +AuthName +AuthUserFile +BrowserMatch +BrowserMatchNoCase +BS2000Account +CacheDisable +CacheEnable +CacheFile +CacheGcClean +CacheGcUnused +CacheRoot +CGIMapExtension +CharsetDefault +CharsetOptions +CharsetSourceEnc +CookieDomain +CookieLog +CookieName +CoreDumpDirectory +CustomLog +Dav +DavGenericLockDB +DavLockDB +DBDParams +DBDPrepareSQL +DBDriver +DefaultIcon +DefaultLanguage +DefaultType +DeflateFilterNote +Deny +DirectoryIndex +DocumentRoot +ErrorDocument +ErrorLog +Example +ExpiresByType +ExpiresDefault +ExtFilterDefine +ExtFilterOptions +FilterChain +FilterDeclare +FilterProtocol +FilterProvider +FilterTrace +ForceType +ForensicLog +Group +Header +HeaderName +ImapBase +Include +IndexIgnore +IndexOptions +IndexStyleSheet +ISAPICacheFile +LanguagePriority +LDAPSharedCacheFile +LDAPTrustedCA +LDAPTrustedCAType +LDAPTrustedClientCert +LDAPTrustedGlobalCert +Listen +LoadFile +LoadModule +LockFile +LogFormat +MetaDir +MetaSuffix +MimeMagicFile +MMapFile +NameVirtualHost +NoProxy +NWSSLTrustedCerts +NWSSLUpgradeable +PassEnv +PidFile +ProxyBlock +ProxyDomain +ProxyPass +ProxyPassReverse +ProxyPassReverseCookieDomain +ProxyPassReverseCookiePath +ProxyRemote +ProxyRemoteMatch +ReadmeName +Redirect +RedirectMatch +RedirectPermanent +RedirectTemp +RemoveCharset +RemoveEncoding +RemoveHandler +RemoveInputFilter +RemoveLanguage +RemoveOutputFilter +RemoveType +RequestHeader +Require +RewriteBase +RewriteCond +RewriteLock +RewriteLog +RewriteMap +RewriteRule +ScoreBoardFile +Script +ScriptAlias +ScriptAliasMatch +ScriptLog +ScriptSock +SecureListen +ServerAdmin +ServerAlias +ServerName +ServerPath +ServerRoot +SetEnv +SetEnvIf +SetEnvIfNoCase +SetHandler +SetInputFilter +SetOutputFilter +SSIEndTag +SSIErrorMsg +SSIStartTag +SSITimeFormat +SSIUndefinedEcho +SSLCACertificateFile +SSLCACertificatePath +SSLCADNRequestFile +SSLCADNRequestPath +SSLCARevocationFile +SSLCARevocationPath +SSLCertificateChainFile +SSLCertificateFile +SSLCertificateKeyFile +SSLCipherSuite +SSLCryptoDevice +SSLHonorCiperOrder +SSLPassPhraseDialog +SSLProxyCACertificateFile +SSLProxyCACertificatePath +SSLProxyCARevocationFile +SSLProxyCARevocationPath +SSLProxyCipherSuite +SSLProxyMachineCertificateFile +SSLProxyMachineCertificatePath +SSLProxyProtocol +SSLRandomSeed +SSLRequire +SSLRequireSSL +SSLUserName +SuexecUserGroup +TransferLog +TypesConfig +UnsetEnv +User +UserDir +VirtualDocumentRoot +VirtualDocumentRootIP +VirtualScriptAlias +VirtualScriptAliasIP +Win32DisableAcceptEx + + + +AllowCONNECT +AssignUserID +AuthDigestNonceLifetime +AuthDigestShmemSize +CacheDefaultExpire +CacheDirLength +CacheDirLevels +CacheForceCompletion +CacheGcDaily +CacheGcInterval +CacheGcMemUsage +CacheLastModifiedFactor +CacheMaxExpire +CacheMaxFileSize +CacheMinFileSize +CacheSize +CacheTimeMargin +ChildPerUserID +CookieExpires +DavMinTimeout +DBDExptime +DBDKeep +DBDMax +DBDMin +DBDPersist +DeflateBufferSize +DeflateCompressionLevel +DeflateMemLevel +DeflateWindowSize +IdentityCheckTimeout +ISAPIReadAheadBuffer +KeepAliveTimeout +LDAPCacheEntries +LDAPCacheTTL +LDAPConnectionTimeout +LDAPOpCacheEntries +LDAPOpCacheTTL +LDAPSharedCacheSize +LimitInternalRecursion +LimitRequestBody +LimitRequestFields +LimitRequestFieldsize +LimitRequestLine +LimitXMLRequestBody +ListenBacklog +MaxClients +MaxKeepAliveRequests +MaxMemFree +MaxRequestsPerChild +MaxRequestsPerThread +MaxSpareServers +MaxSpareThreads +MaxThreads +MaxThreadsPerChild +MCacheMaxObjectCount +MCacheMaxObjectSize +MCacheMaxStreamingBuffer +MCacheMinObjectSize +MCacheSize +MinSpareServers +MinSpareThreads +NumServers +ProxyIOBufferSize +ProxyMaxForwards +ProxyReceiveBufferSize +ProxyTimeout +RewriteLogLevel +RLimitCPU +RLimitMEM +RLimitNPROC +ScriptLogBuffer +ScriptLogLength +SendBufferSize +ServerLimit +SSLProxyVerifyDepth +SSLSessionCacheTimeout +SSLVerifyDepth +StartServers +StartThreads +ThreadLimit +ThreadsPerChild +ThreadStackSize +TimeOut + + + +AcceptMutex +AcceptPathInfo +AllowEncodedSlashes +AllowOverride +Anonymous_Authoritative +Anonymous_LogEmail +Anonymous_MustGiveEmail +Anonymous_NoUserID +Anonymous_VerifyEmail +AuthAuthoritative +AuthBasicAuthoritative +AuthBasicProvider +AuthDBMAuthoritative +AuthDBMType +AuthDefaultAuthoritative +AuthDigestAlgorithm +AuthDigestNcCheck +AuthDigestQop +AuthLDAPAuthoritative +AuthLDAPCompareDNOnServer +AuthLDAPDereferenceAliases +AuthLDAPEnabled +AuthLDAPFrontPageHack +AuthLDAPGroupAttributeIsDN +AuthLDAPRemoteUserIsDN +AuthType +AuthzDBMAuthoritative +AuthzDBMType +AuthzDefaultAuthoritative +AuthzGroupFileAuthoritative +AuthzLDAPAuthoritative +AuthzOwnerAuthoritative +AuthzUserAuthoritative +BufferedLogs +CacheExpiryCheck +CacheIgnoreCacheControl +CacheIgnoreHeaders +CacheIgnoreNoLastMod +CacheNegotiatedDocs +CacheStoreNoStore +CacheStorePrivate +CheckSpelling +ContentDigest +CookieStyle +CookieTracking +CoreDumpDirectory +CustomLog +DavDepthInfinity +DirectorySlash +DumpIOInput +DumpIOOutput +EnableExceptionHook +EnableMMAP +EnableSendfile +ExpiresActive +ExtendedStatus +FileETag +ForceLanguagePriority +HostnameLookups +IdentityCheck +ImapDefault +ImapMenu +IndexOrderDefault +ISAPIAppendLogToErrors +ISAPIAppendLogToQuery +ISAPIFakeAsync +ISAPILogNotSupported +KeepAlive +LDAPTrustedMode +LDAPVerifyServerCert +LogLevel +MCacheRemovalAlgorithm +MetaFiles +ModMimeUsePathInfo +MultiviewsMatch +Options +Order +ProtocolEcho +ProxyBadHeader +ProxyErrorOverride +ProxyPreserveHost +ProxyRequests +ProxyVia +RewriteEngine +RewriteOptions +Satisfy +ScriptInterpreterSource +ServerSignature +ServerTokens +SSLEngine +SSLHonorCipherOrder +SSLMutex +SSLOptions +SSLProtocol +SSLProxyEngine +SSLProxyVerify +SSLSessionCache +SSLVerifyClient +UseCanonicalName +XBitHack + + + +On +Off +Default +flock +fcntl +posixsem +pthread +sysvsem +All +None +AuthConfig +FileInfo +Indexes +Limit +Options + +ExecCGI +FollowSymLinks +Includes +IncludesNOEXEC +Indexes +MultiViews +SymLinksIfOwnerMatch +StdEnvVars +CompatEnvVars +ExportCertData +FakeBasicAuth +StrictRequire +OptRenegotiate + +SDBM +GDBM +NDBM +DB +MD5 +MD5-sess +auth +auth-int +never +searching +finding +always +Basic +Digest +Connection +Keep-Alive +Proxy-Authenticate +Proxy-Authorization +TE +Trailers +Transfer-Encoding +Upgrade +Netscape +Cookie +Cookie2 +RFC2109 +RFC2965 +INode +MTime +Size +Prefer +Fallback +Double +error +nocontent +map +referer +formatted +semiformatted +unformatted +Ascending +Descending +Name +Date +Size +Description +SSL +TLS +STARTTLS +emerg +alert +crit +error +warn +notice +info +debug +LRU +GDSF +Any +NegotiatedOnly +Filters +Handlers +Deny,Allow +Allow,Deny +Mutual-failure +IsError +Ignore +StartBody +Full +Block +inherit +Registry +Registry-Strict +Script +EMail +Major +Minor +Min +Minimal +Prod +ProductOnly +OS +Full +optional +posixsem +sysvsem +sem +pthread +fcntl: +flock: +file: +yes +no +SSLv2 +SSLv3 +TLSv1 +require +optional_no_ca +nonenotnull +dbm: +shm: +dc: +DNS + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/apparmor.xml b/src/data/extra/syntax-highlighting/syntax/apparmor.xml new file mode 100644 index 00000000..2ec78c62 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/apparmor.xml @@ -0,0 +1,1602 @@ + + + + + + + + + +]> + + + + + + + + + + profile + hat + + + flags + xattrs + + + audit + complain + enforce + mediate_deleted + attach_disconnected + chroot_relative + chroot_attach + chroot_no_attach + delegate_deleted + no_attach_disconnected + namespace_relative + + + + + allow + deny + + + owner + other + + + audit + + + + + + + audit_control + audit_read + audit_write + block_suspend + chown + dac_override + dac_read_search + fowner + fsetid + ipc_lock + ipc_owner + kill + lease + linux_immutable + mac_admin + mac_override + mknod + net_admin + net_bind_service + net_broadcast + net_raw + setgid + setfcap + setpcap + setuid + sys_admin + sys_boot + sys_chroot + sys_module + sys_nice + sys_pacct + sys_ptrace + sys_rawio + sys_resource + sys_time + sys_tty_config + syslog + wake_alarm + + + + + + inet + ax25 + ipx + appletalk + netrom + bridge + atmpvc + x25 + inet6 + rose + netbeui + security + key + packet + ash + econet + atmsvc + sna + irda + pppox + wanpipe + bluetooth + netlink + rds + llc + can + tipc + iucv + rxrpc + isdn + phonet + ieee802154 + caif + alg + nfc + vsock + mpls + ib + kcm + smc + qipcrtr + xdp + + + stream + dgram + seqpacket + rdm + raw + + + tcp + udp + icmp + + + + unix + + + + + fstype + vfstype + options + option + + + r + w + rw + ro + read-only + suid + nosuid + dev + nodev + exec + noexec + sync + async + remount + mand + nomand + dirsync + atime + noatime + diratime + nodiratime + bind + B + move + M + rbind + R + verbose + silent + loud + acl + noacl + unbindable + make-unbindable + runbindable + make-runbindable + private + make-private + rprivate + make-rprivate + slave + make-slave + rslave + make-rslave + shared + make-shared + rshared + make-rshared + relatime + norelatime + iversion + noiversion + strictatime + user + nouser + + + ecryptfs + overlayfs + unionfs + shm + + cryfs + encfs + apparmorfs + autofs + bdev + bpf + cachefs + cgroup + cgroup2 + cifs + coherent + configfs + cpuset + cramfs + debugfs + devfs + devpts + devtmpfs + efs + fuse + fuseblk + fusectl + futexfs + hugetlbfs + kernfs + mqueue + pipefs + proc + procfs + pstorefs + pstore + ramfs + romfs + rootfs + sdcardfs + securityfs + selinuxfs + sockfs + specfs + squashfs + swapfs + sysfs + sysv + tmpfs + usbfs + vfat + functionfs + inotifyfs + labeledfs + oemfs + + adfs + affs + afs + apfs + bfs + btrfs + ceph + coda + exfat + ext2 + ext3 + ext4 + f2fs + fatx + gfs + hfs + hfsplus + hpfs + ifs + iso9660 + jffs2 + jffs + jfs + lvm2 + minix + msdos + ncpfs + nilfs + nilfs2 + nfs + nfs4 + ntfs-3g + ntfs + ocfs + qnx4 + qnx6 + reiser4 + reiserfs + smbfs + swap + tracefs + ubifs + udf + ufs + umsdos + urefs + xenix + yaffs2 + yaffs + xfs + zfs + + + + + + oldroot + + + + + peer + + + + readby + trace + tracedby + + + + + set + peer + + + + bus + hup + int + quit + ill + trap + abrt + fpe + kill + usr1 + segv + usr2 + pipe + alrm + term + stkflt + chld + cont + stop + stp + ttin + ttou + urg + xcpu + xfsz + vtalrm + prof + winch + io + pwr + sys + emt + exists + + + + send + receive + + + + + peer + bus + path + interface + member + name + + + name + label + + + + send + receive + bind + eavesdrop + + + system + session + + + + + peer + set + label + type + protocol + addr + attr + opt + + + + send + receive + bind + create + listen + accept + connect + shutdown + getattr + setattr + getopt + setopt + + + + + cpu + fsize + data + stack + core + rss + nofile + ofile + as + nproc + memlock + locks + sigpending + msgqueue + nice + rtprio + rttime + + + + + subset + + + + + safe + unsafe + + + + + if + exists + + + + + rw + r + w + read + write + + + + + profile_name + + HOME + HOMEDIRS + multiarch + pid + pids + PROC + securityfs + apparmorfs + sys + tid + XDG_DESKTOP_DIR + XDG_DOWNLOAD_DIR + XDG_TEMPLATES_DIR + XDG_PUBLICSHARE_DIR + XDG_DOCUMENTS_DIR + XDG_MUSIC_DIR + XDG_PICTURES_DIR + XDG_VIDEOS_DIR + flatpak_exports_root + system_share_dirs + user_share_dirs + + + abstractions/ + apache2-common + aspell + audio + authentication + base + bash + consoles + cups-client + dbus + dbus-accessibility + dbus-accessibility-strict + dbus-session + dbus-session-strict + dbus-strict + dconf + dovecot-common + dri-common + dri-enumerate + enchant + fcitx + fcitx-strict + fonts + freedesktop.org + gnome + gnupg + ibus + kde-icon-cache-write + kde-globals-write + kde-language-write + kde + kerberosclient + launchpad-integration + ldapclient + libpam-systemd + likewise + mdns + mesa + mir + mozc + mysql + nameservice + nis + nvidia + opencl + opencl-common + opencl-intel + opencl-mesa + opencl-nvidia + opencl-pocl + openssl + orbit2 + p11-kit + perl + php + php5 + postfix-common + private-files + private-files-strict + python + qt5-compose-cache-write + qt5-settings-write + qt5 + recent-documents-write + ruby + samba + smbpass + ssl_certs + ssl_keys + svn-repositories + ubuntu-bittorrent-clients + ubuntu-browsers + ubuntu-console-browsers + ubuntu-console-email + ubuntu-email + ubuntu-feed-readers + ubuntu-gnome-terminal + ubuntu-helpers + ubuntu-konsole + ubuntu-media-players + ubuntu-unity7-base + ubuntu-unity7-launcher + ubuntu-unity7-messaging + ubuntu-xterm + user-download + user-mail + user-manpages + user-tmp + user-write + video + vulkan + wayland + web-data + winbind + wutmp + X + xad + xdg-desktop + + ubuntu-browsers.d/ + java + mailto + multimedia + plugins-common + productivity + text-editors + ubuntu-integration + ubuntu-integration-xul + user-files + + apparmor_api/ + change_profile + examine + find_mountpoint + introspect + is_enabled + + tunables/ + alias + apparmorfs + dovecot + global + home + kernelvars + multiarch + ntpd + proc + securityfs + sys + xdg-user-dirs + home.d/ + multiarch.d/ + xdg-user-dirs.d/ + site.local + + local/ + + + + true + false + + + unspec + none + unconfined + + + + + mount + remount + umount + + alias + file + capability + network + pivot_root + ptrace + signal + dbus + unix + link + change_profile + rlimit + set + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/asciidoc.xml b/src/data/extra/syntax-highlighting/syntax/asciidoc.xml new file mode 100644 index 00000000..46bee871 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/asciidoc.xml @@ -0,0 +1,564 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +]> + + + + anchor + btn + footnote + footnoteref + icon + image + indexterm + indexterm2 + kbd + menu + pass + toc + xref + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/asm-avr.xml b/src/data/extra/syntax-highlighting/syntax/asm-avr.xml new file mode 100644 index 00000000..7075d10e --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/asm-avr.xml @@ -0,0 +1,212 @@ + + + + + + + + adc + add + adiw + and + andi + asr + bclr + bld + brbc + brbs + brcc + brcs + break + breq + brge + brhc + brhs + brid + brie + brlo + brlt + brmi + brne + brpl + brsh + brtc + brts + brvc + brvs + bset + bst + call + cbi + cbr + clc + clh + cli + cln + clr + cls + clt + clv + clz + com + cp + cpc + cpi + cpse + dec + eicall + eijmp + elpm + eor + fmul + fmuls + fmulsu + icall + ijmp + in + inc + jmp + ld + ldd + ldi + lds + lpm + lsl + lsr + mov + movw + mul + muls + mulsu + neg + nop + or + ori + out + pop + push + rcall + ret + reti + rjmp + rol + ror + sbc + sbr + sbrc + sbrs + sec + seh + sbi + sbci + sbic + sbis + sbiw + sei + sen + ser + ses + set + sev + sez + sleep + spm + st + std + sts + sub + subi + swap + tst + wdr + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/asm-dsp56k.xml b/src/data/extra/syntax-highlighting/syntax/asm-dsp56k.xml new file mode 100644 index 00000000..c9d7cd11 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/asm-dsp56k.xml @@ -0,0 +1,329 @@ + + + + + + + + x + x0 + x1 + y + y0 + y1 + a2 + a1 + a0 + a + a10 + ab + b2 + b1 + b0 + b + b10 + ba + + + + r0 + r1 + r2 + r3 + r4 + r5 + r6 + r7 + + + + n0 + n1 + n2 + n3 + n4 + n5 + n6 + n7 + + + + m0 + m1 + m2 + m3 + m4 + m5 + m6 + m7 + + + + la + lc + pc + ssh + ssl + omr + sr + sp + mr + ccr + + + + abs + adc + add + addl + addr + and + andi + asl + asr + bchg + bclr + bset + btst + clr + cmp + cmpm + div + do + enddo + eor + illegal + jcc + jhs + jcs + jls + jec + jeq + jes + jge + jgt + jlc + jle + jls + jlt + jmi + jne + jnr + jpl + jnn + jclr + jmp + jscc + jshs + jscs + jsls + jsec + jseq + jses + jsge + jsgt + jslc + jsle + jsls + jslt + jsmi + jsne + jsnr + jspl + jsnn + jsclr + jset + jsr + jsset + lsl + lsr + lua + mac + macr + move + movec + movem + movep + mpy + mpyr + neg + nop + norm + not + or + ori + rep + reset + rnd + rol + ror + rti + rts + sbc + stop + sub + subl + subr + swi + tcc + ths + tcs + tls + tec + teq + tes + tge + tgt + tlc + tle + tls + tlt + tmi + tne + tnr + tpl + snn + tfr + tst + wait + + + + endif + endc + else + ifne + if + ifeq + ifle + iflt + ifge + ifgt + include + incbin + printval + pass1val + pass2val + fail + endm + end + org + ds + dsm + list + nolist + macro + dc + equ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/asm-m68k.xml b/src/data/extra/syntax-highlighting/syntax/asm-m68k.xml new file mode 100644 index 00000000..bd5c36fd --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/asm-m68k.xml @@ -0,0 +1,651 @@ + + + + + + + + d0 + d1 + d2 + d3 + d4 + d5 + d6 + d7 + + + + a0 + a1 + a2 + a3 + a4 + a5 + a6 + a7 + sp + + + + ccr + sr + pc + zpc + ssp + usp + msp + isp + dfc + cacr + caar + vbr + crp + srp + urp + tc + tt0 + tt1 + mmusr + itt0 + itt1 + dtt0 + dtt1 + buscr + pcr + ic + + bc + + + + fp0 + fp1 + fp2 + fp3 + fp4 + fp5 + fp6 + fp7 + fpcr> + fpsr + fpiar + + + + abcd + adda + addi + add + addq + addx + andi + and + asl + asr + bcc + bchg + bclr + bcs + beq + bfchg + bfclr + bfexts + bfextu + bfffo + bfins + bfset + bftst + bge + bgt + bhi + bhs + bkpt + ble + blo + bls + blt + bmi + bne + bpl + bra + bset + bsr + btst + bvc + bvs + callm + cas2 + cas + chk2 + chk + cinva + cinvl + cinvp + clr + cmp2 + cmpa + cmpi + cmp + cmpm + cpusha + cpushl + cpushp + dbcc + dbcs + dbeq + dbf + dbge + dbgt + dbhi + dbhs + dble + dblo + dbls + dblt + dbmi + dbne + dbpl + dbra + dbt + dbvc + dbvs + divs + divsl + divu + divul + eori + eor + exg + extb + ext + illegal + jmp + jsr + lea + link + lpstop + lsl + lsr + move16 + movea + movec + move + movem + movep + moveq + moves + muls + mulu + nbcd + neg + negx + nop + not + ori + or + pack + pea + pflusha + pflushan + pflush + pflushn + ploadr + ploadw + plpa + pmovefd + pmove + ptestr + ptestw + reset + rol + ror + roxl + roxr + rtd + rte + rtm + rtr + rts + sbcd + scc + scs + seq + sf + sge + sgt + shi + shs + sle + slo + sls + slt + smi + sne + spl + st + stop + suba + subi + sub + subq + subx + svc + svs + swap + tas + trapcc + trapcs + trapeq + trapf + trapge + trapgt + traphi + traphs + trap + traple + traplo + trapls + traplt + trapmi + trapne + trappl + trapt + trapvc + trapvc + trapv + tst + unlk + unpk + + + + fabs + facos + fadd + fasin + fatanh + fatan + fbeq + fbf + fbge + fbgle + fbgl + fbgt + fble + fblt + fbne + fbnge + fbngle + fbngl + fbngt + fbnle + fbnlt + fboge + fbogl + fbogt + fbole + fbolt + fbor + fbseq + fbsf + fbsne + fbst + fbt + fbueq + fbuge + fbugt + fbule + fbult + fbun + fcmp + fcosh + fcos + fdabs + fdadd + fdbeq + fdbf + fdbge + fdbgle + fdbgl + fdbgt + fdble + fdblt + fdbne + fdbnge + fdbngle + fdbngl + fdbngt + fdbnle + fdbnlt + fdboge + fdbogl + fdbogt + fdbole + fdbolt + fdbor + fdbseq + fdbsf + fdbsne + fdbst + fdbt + fdbueq + fdbuge + fdbugt + fdbule + fdbult + fdbun + fddiv + fdiv + fdmove + fdmul + fdneg + fdsqrt + fdsub + fetox + fetoxm1 + fgetexp + fgetman + fint + fintrz + flog10 + flog2 + flogn + flognp1 + fmod + fmovecr + fmove + fmovem + fmul + fneg + fnop + frem + frestore + fsabs + fsadd + fsave + fscale + fsdiv + fseq + fsf + fsge + fsgldiv + fsgle + fsgl + fsglmul + fsgt + fsincos + fsinh + fsin + fsle + fslt + fsmove + fsmul + fsneg + fsne + fsnge + fsngle + fsngl + fsngt + fsnle + fsnlt + fsoge + fsogl + fsogt + fsole + fsolt + fsor + fsqrt + fsseq + fssf + fssne + fssqrt + fsst + fssub + fst + fsub + fsueq + fsuge + fsugt + fsule + fsult + fsun + ftanh + ftan + ftentox + ftrapeq + ftrapf + ftrapge + ftrapgle + ftrapgl + ftrapgt + ftraple + ftraplt + ftrapne + ftrapnge + ftrapngle + ftrapngl + ftrapngt + ftrapnle + ftrapnlt + ftrapoge + ftrapogl + ftrapogt + ftrapole + ftrapolt + ftrapor + ftrapseq + ftrapsf + ftrapsne + ftrapst + ftrapt + ftrapueq + ftrapuge + ftrapugt + ftrapule + ftrapult + ftrapun + ftst + ftwotox + + + + align + blk + bss + clrfo + clrso + cnop + code + cseg + data + dc + dcb + ds + dseg + else + end + endc + endif + endm + endr + equ + even + fo + idnt + if + ifeq + ifne + ifgt + ifge + iflt + ifle + ifd + ifnd + ifc + ifnc + incbin + incdir + include + macro + org + public + rept + rs + rsreset + rsset + section + set + setfo + setso + so + text + ttl + xdef + xref + sdreg + cpu32 + far + fpu + machine + mc68000 + mc68010 + mc68020 + mc68030 + mc68040 + mc68060 + mcf5200 + mcf5206 + mcf5307 + mcf5407 + near + opt + equr + equrl + fequr + fequrl + freg + reg + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/asm6502.xml b/src/data/extra/syntax-highlighting/syntax/asm6502.xml new file mode 100644 index 00000000..47e11791 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/asm6502.xml @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/asn1.xml b/src/data/extra/syntax-highlighting/syntax/asn1.xml new file mode 100644 index 00000000..ec3432af --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/asn1.xml @@ -0,0 +1,70 @@ + + + + + + + DEFINITIONS + BEGIN + END + EXPORTS + IMPORTS + FROM + APPLICATION + PRIVATE + UNIVERSAL + DEFAULT + OPTIONAL + FALSE + TRUE + + + BOOLEAN + INTEGER + OCTET + STRING + NULL + REAL + ENUMERATED + SEQUENCE + SET + CHOICE + OF + VisibleString + StringStore + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/asp.xml b/src/data/extra/syntax-highlighting/syntax/asp.xml new file mode 100644 index 00000000..e03e23be --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/asp.xml @@ -0,0 +1,389 @@ + + + + + + select + case + end select + + if + then + else + elseif + end if + + + while + do + until + loop + wend + + for + each + to + in + next + + exit + continue + + + dim + redim + preserve + + const + erase + nothing + set + + new + me + + + function + sub + call + + class + private + public + with + + randomize + + open + close + movenext + execute + eof + + not + true + false + or + and + xor + + + response + write + redirect + end + + request + form + querystring + servervariables + cookies + + session + + server + createobject + + abs + array + asc + atn + cbool + cbyte + ccur + cdate + cdbl + chr + cint + clng + cos + csng + cstr + date + dateadd + + DateDiff + DatePart + DateSerial + DateValue + Date + Day + Exp + Filter + Fix + FormatCurrency + FormatDateTime + FormatNumber + FormatPercent + + GetObject + Hex + Hour + InputBox + InStr + InStrRev + Int + IsArray + IsDate + IsEmpty + IsNull + IsNumeric + IsObject + Join + LBound + LCase + + Left + Len + LoadPicture + Log + LTrim + Mid + Minute + Month + MonthName + MsgBox + Now + Oct + Replace + + RGB + Right + Rnd + Round + RTrim + + ScriptEngine + ScriptEngineBuildVersion + ScriptEngineMajorVersion + ScriptEngineMinorVersion + Second + Sgn + Sin + Space + Split + Sqr + StrComp + StrReverse + String + Tan + Time + Timer + TimeSerial + TimeValue + Trim + TypeName + UBound + UCase + VarType + Weekday + WeekdayName + Year + + Add + AddFolders + BuildPath + Clear + Close + Copy + CopyFile + CopyFolder + CreateFolder + CreateTextFile + Delete + DeleteFile + DeleteFolder + DriveExists + Exists + FileExists + FolderExists + GetAbsolutePathName + GetBaseName + GetDrive + GetDriveName + GetExtensionName + GetFile + GetFileName + GetFolder + GetParentFolderName + + GetSpecialFolder + GetTempName + Items + item + Keys + Move + MoveFile + MoveFolder + OpenAsTextStream + OpenTextFile + Raise + Read + ReadAll + ReadLine + Remove + RemoveAll + Skip + SkipLine + Write + WriteBlankLines + WriteLine + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/awk.xml b/src/data/extra/syntax-highlighting/syntax/awk.xml new file mode 100644 index 00000000..9288a13d --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/awk.xml @@ -0,0 +1,288 @@ + + + + + + + if + else + while + do + for + break + continue + return + switch + case + default + exit + + + in + delete + print + printf + getline + function + next + nextfile + @include + @load + + + ARGC + ARGIND + ARGV + BINMODE + CONVFMT + ENVIRON + ERRNO + FIELDWIDTHS + FILENAME + FNR + FPAT + FS + FUNCTAB + IGNORECASE + LINT + NF + NR + OFMT + OFS + ORS + PREC + PROCINFO + ROUNDMODE + RS + RT + RSTART + RLENGTH + SUBSEP + SYMTAB + TEXTDOMAIN + + + + close + fflush + system + + atan2 + cos + exp + int + log + rand + sin + sqrt + srand + + asort + asorti + gensub + gsub + index + length + match + patsplit + split + sprintf + strtonum + sub + substr + tolower + toupper + + mktime + strftime + systime + + and + compl + lshift + or + rshift + xor + + isarray + typeof + + bindtextdomain + dcgettext + dcngettext + + + BEGIN + BEGINFILE + END + ENDFILE + + + alpha + alnum + blank + cntrl + digit + graph + lower + print + punct + space + upper + xdigit + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/bash.xml b/src/data/extra/syntax-highlighting/syntax/bash.xml new file mode 100644 index 00000000..cdfdf958 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/bash.xml @@ -0,0 +1,980 @@ + + + + + + + +]> + + + + + + + else + for + function + in + select + until + while + elif + then + set + + + + : + source + alias + bg + bind + break + builtin + cd + caller + command + compgen + complete + continue + dirs + disown + echo + enable + eval + exec + exit + fc + fg + getopts + hash + help + history + jobs + kill + let + logout + popd + printf + pushd + pwd + return + set + shift + shopt + suspend + test + time + times + trap + type + ulimit + umask + unalias + wait + + + + export + unset + declare + typeset + local + read + readonly + + + + + arch + awk + bash + bunzip2 + bzcat + bzcmp + bzdiff + bzegrep + bzfgrep + bzgrep + bzip2 + bzip2recover + bzless + bzmore + cat + chattr + chgrp + chmod + chown + chvt + cp + date + dd + deallocvt + df + dir + dircolors + dmesg + dnsdomainname + domainname + du + dumpkeys + echo + ed + egrep + false + fgconsole + fgrep + fuser + gawk + getkeycodes + gocr + grep + groff + groups + gunzip + gzexe + gzip + hostname + igawk + install + kbd_mode + kbdrate + killall + last + lastb + link + ln + loadkeys + loadunimap + login + ls + lsattr + lsmod + lsmod.old + lzcat + lzcmp + lzdiff + lzegrep + lzfgrep + lzgrep + lzless + lzcat + lzma + lzmainfo + lzmore + mapscrn + mesg + mkdir + mkfifo + mknod + mktemp + more + mount + mv + nano + netstat + nisdomainname + nroff + openvt + pgawk + pidof + ping + ps + pstree + pwd + rbash + readlink + red + resizecons + rm + rmdir + run-parts + sash + sed + setfont + setkeycodes + setleds + setmetamode + setserial + sh + showkey + shred + sleep + ssed + stat + stty + su + sync + tar + tempfile + touch + troff + true + umount + uname + unicode_start + unicode_stop + unlink + unlzma + unxz + utmpdump + uuidgen + vdir + wall + wc + xz + xzcat + ypdomainname + zcat + zcmp + zdiff + zegrep + zfgrep + zforce + zgrep + zless + zmore + znew + zsh + + + aclocal + aconnect + aplay + apm + apmsleep + apropos + ar + arecord + as + as86 + autoconf + autoheader + automake + awk + basename + bc + bison + c++ + cal + cat + cc + cdda2wav + cdparanoia + cdrdao + cd-read + cdrecord + chfn + chgrp + chmod + chown + chroot + chsh + clear + cmp + co + col + comm + cp + cpio + cpp + cut + dc + dd + df + diff + diff3 + dir + dircolors + directomatic + dirname + du + env + expr + fbset + file + find + flex + flex++ + fmt + free + ftp + funzip + fuser + g++ + gawk + gc + gcc + clang + valgrind + xdg-open + cmake + qmake + svn + git + rsync + gdb + getent + getopt + gettext + gettextize + gimp + gimp-remote + gimptool + gmake + gs + head + hexdump + id + install + join + kill + killall + ld + ld86 + ldd + less + lex + ln + locate + lockfile + logname + lp + lpr + ls + lynx + m4 + make + man + mkdir + mknod + msgfmt + mv + namei + nasm + nawk + nice + nl + nm + nm86 + nmap + nohup + nop + od + passwd + patch + pcregrep + pcretest + perl + perror + pidof + pr + printf + procmail + prune + ps2ascii + ps2epsi + ps2frag + ps2pdf + ps2ps + psbook + psmerge + psnup + psresize + psselect + pstops + rcs + rev + rm + scp + sed + seq + setterm + shred + size + size86 + skill + slogin + snice + sort + sox + split + ssh + ssh-add + ssh-agent + ssh-keygen + ssh-keyscan + stat + strings + strip + sudo + suidperl + sum + tac + tail + tee + test + tr + uniq + unlink + unzip + updatedb + updmap + uptime + users + vmstat + w + wc + wget + whatis + whereis + which + who + whoami + write + xargs + yacc + yes + zip + zsoelim + + + dcop + kdialog + kfile + xhost + xmodmap + xset + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/bibtex.xml b/src/data/extra/syntax-highlighting/syntax/bibtex.xml new file mode 100644 index 00000000..339f477f --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/bibtex.xml @@ -0,0 +1,108 @@ + + + + + + ]> + + + + @article + @book + @booklet + @conference + @collection + @electronic + @inbook + @incollection + @inproceedings + @manual + @mastersthesis + @misc + @online + @patent + @periodical + @proceedings + @report + @phdthesis + @set + @thesis + @techreport + @unpublished + @www + @person + @company + @place + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/bitbake.xml b/src/data/extra/syntax-highlighting/syntax/bitbake.xml new file mode 100644 index 00000000..056edf65 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/bitbake.xml @@ -0,0 +1,183 @@ + + + + + + + + + + after + before + python + branch + bareclone + protocol + name + if + fi + then + rm + ln + cp + for + done + cat + + + + do_build + do_compile + do_compile_append + do_compile_prepend + do_compile_ptest_base + do_configure + do_configure_append + do_configure_prepend + do_configure_ptest_base + do_deploy + do_fetch + do_install + do_install_append + do_install_prepend + do_install_ptest_base + do_package + do_package_qa + do_package_write_deb + do_package_write_ipk + do_package_write_rpm + do_package_write_tar + do_packagedata + do_patch + do_populate_lic + do_populate_sdk + do_populate_sysroot + do_rm_work + do_rm_work_all + do_unpack + do_checkuri + do_checkuriall + do_clean + do_cleanall + do_cleansstate + do_devshell + do_fetchall + do_listtasks + do_package_index + do_bootimg + do_bundle_initramfs + do_rootfs + do_testimage + do_testimage_auto + do_vmdkimg + do_compile_kernelmodules + do_diffconfig + do_kernel_checkout + do_kernel_configcheck + do_kernel_configme + do_kernel_link_vmlinux + do_menuconfig + do_savedefconfig + do_sizecheck + do_strip + do_uboot_mkimage + do_validate_branches + do_generate_qt_config_file + do_spdx + oe_runmake + export + install + kernel_configme + validate_branches + + + + + inherit + include + require + addtask + deltask + addhandler + EXPORT_FUNCTIONS + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/bmethod.xml b/src/data/extra/syntax-highlighting/syntax/bmethod.xml new file mode 100644 index 00000000..153b1145 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/bmethod.xml @@ -0,0 +1,96 @@ + + + + + + + MACHINE + SETS + CONSTANTS + PROPERTIES + PROMOTES + INCLUDES + USES + SEES + VARIABLES + INVARIANT + INITIALISATION + REFINEMENT + REFINES + CONSTRAINTS + IMPLEMENTATION + IMPORTS + + + OPERATIONS + + + END + + + THEN + WHEN + ELSE + OR + WHERE + INVARIANT + DO + VARIANT + IN + ELSIF + + + PRE + IF + ANY + LET + CHOICE + CASE + SELECT + VAR + WHILE + BEGIN + + + END + + + NAT + NAT1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/boo.xml b/src/data/extra/syntax-highlighting/syntax/boo.xml new file mode 100644 index 00000000..26ec8180 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/boo.xml @@ -0,0 +1,304 @@ + + + + + + + + import + from + as + namespace + + + + and + assert + in + is + not + or + + + + bool + byte + sbyte + double + decimal + single + short + ushort + int + char + uint + long + ulong + object + duck + string + regex + date + timespan + + + + abstract + virtual + override + static + final + transient + macro + + protected + private + public + internal + partial + + class + struct + interface + enum + callable + of + + def + constructor + destructor + + do + get + set + event + + return + yield + + + + true + false + + + + null + self + super + + + + and + break + cast + continue + elif + else + except + ensure + for + given + goto + if + in + is + isa + not + or + otherwise + pass + raise + try + unless + when + while + ref + + + + assert + __eval__ + __switch__ + enumerate + filter + len + typeof + map + max + min + property + using + getter + required + lock + range + zip + checked + unchecked + rawArrayIndexing + normalArrayIndexing + print + array + matrix + yieldAll + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/brightscript.xml b/src/data/extra/syntax-highlighting/syntax/brightscript.xml new file mode 100644 index 00000000..4d95946d --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/brightscript.xml @@ -0,0 +1,801 @@ + + + + + + + + + +library + +function +endfunction +sub +endsub +as + +exit + +if +endif +then +else +elseif + +while +endwhile +exitwhile + +for +endfor +each +in +to +step +next + +print +return + +dim +stop +goto + +m + + top + global + + + + then + end + exit + + + + not + + + + tab + pos + CreateObject + Type + GetGlobalAA + Box + Run + Eval + GetLastRunCompileError + GetLastRunRuntimeError + ObjFun + + + + Sleep + Wait + GetInterface + FindMemberFunction + UpTime + RebootSystem + ListDir + ReadAsciiFile + WriteAsciiFile + CopyFile + MoveFile + MatchFiles + DeleteFile + DeleteDirectory + CreateDirectory + FormatDrive + StrToI + RunGarbageCollector + ParseJson + FormatJson + Tr + + + + UCase + LCase + Asc + Chr + Instr + Left + Len + Mid + Str + StrI + String + StringI + Val + Substitute + + + + Abs + Atn + Cdbl + Cint + Cos + Csng + Exp + Fix + Int + Log + Rnd + Sgn + Sin + Sqr + Tan + + + + rem + + + + invalid + void + dynamic + boolean + integer + longinteger + float + double + string + object + function + interface + + + + true + false + invalid + LINE_NUM + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/c.xml b/src/data/extra/syntax-highlighting/syntax/c.xml new file mode 100644 index 00000000..359d2307 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/c.xml @@ -0,0 +1,287 @@ + + + + + + + + +]> + + + + + break + case + continue + default + do + else + for + goto + if + return + switch + while + + + enum + extern + inline + sizeof + struct + typedef + union + _Alignas + _Alignof + _Atomic + _Noreturn + _Static_assert + _Thread_local + + + auto + char + const + double + float + int + long + register + restrict + short + signed + static + unsigned + void + volatile + int8_t + int16_t + int32_t + int64_t + uint8_t + uint16_t + uint32_t + uint64_t + int_least8_t + int_least16_t + int_least32_t + int_least64_t + uint_least8_t + uint_least16_t + uint_least32_t + uint_least64_t + int_fast8_t + int_fast16_t + int_fast32_t + int_fast64_t + uint_fast8_t + uint_fast16_t + uint_fast32_t + uint_fast64_t + size_t + ssize_t + wchar_t + intptr_t + uintptr_t + intmax_t + uintmax_t + ptrdiff_t + sig_atomic_t + wint_t + _Bool + bool + _Complex + complex + _Imaginary + imaginary + _Generic + va_list + FILE + fpos_t + time_t + max_align_t + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/carto-css.xml b/src/data/extra/syntax-highlighting/syntax/carto-css.xml new file mode 100644 index 00000000..5ce4474d --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/carto-css.xml @@ -0,0 +1,405 @@ + + + + + + + + + + + true + false + + + + AliceBlue + AntiqueWhite + Aqua + Aquamarine + Azure + Beige + Bisque + Black + BlanchedAlmond + Blue + BlueViolet + Brown + BurlyWood + CadetBlue + Chartreuse + Chocolate + Coral + CornflowerBlue + Cornsilk + Crimson + Cyan + DarkBlue + DarkCyan + DarkGoldenRod + DarkGray + DarkGreen + DarkKhaki + DarkMagenta + DarkOliveGreen + DarkOrange + DarkOrchid + DarkRed + DarkSalmon + DarkSeaGreen + DarkSlateBlue + DarkSlateGray + DarkTurquoise + DarkViolet + DeepPink + DeepSkyBlue + DimGray + DodgerBlue + FireBrick + FloralWhite + ForestGreen + Fuchsia + Gainsboro + GhostWhite + Gold + GoldenRod + Gray + Green + GreenYellow + HoneyDew + HotPink + IndianRed + Indigo + Ivory + Khaki + Lavender + LavenderBlush + LawnGreen + LemonChiffon + LightBlue + LightCoral + LightCyan + LightGoldenRodYellow + LightGray + LightGreen + LightPink + LightSalmon + LightSeaGreen + LightSkyBlue + LightSlateGray + LightSteelBlue + LightYellow + Lime + LimeGreen + Linen + Magenta + Maroon + MediumAquaMarine + MediumBlue + MediumOrchid + MediumPurple + MediumSeaGreen + MediumSlateBlue + MediumSpringGreen + MediumTurquoise + MediumVioletRed + MidnightBlue + MintCream + MistyRose + Moccasin + NavajoWhite + Navy + OldLace + Olive + OliveDrab + Orange + OrangeRed + Orchid + PaleGoldenRod + PaleGreen + PaleTurquoise + PaleVioletRed + PapayaWhip + PeachPuff + Peru + Pink + Plum + PowderBlue + Purple + Red + RosyBrown + RoyalBlue + SaddleBrown + Salmon + SandyBrown + SeaGreen + SeaShell + Sienna + Silver + SkyBlue + SlateBlue + SlateGray + Snow + SpringGreen + SteelBlue + Tan + Teal + Thistle + Tomato + Turquoise + Violet + Wheat + White + WhiteSmoke + Yellow + YellowGreen + + + + + + line-clip + line-pattern-clip + marker-allow-overlap + marker-clip + marker-ignore-placement + point-allow-overlap + point-ignore-placement + polygon-clip + polygon-pattern-clip + shield-allow-overlap + shield-avoid-edges + shield-clip + shield-unlock-image + shield-wrap-before + text-allow-overlap + text-avoid-edges + text-clip + + + building-fill + line-color + background-color + marker-fill + marker-line-color + polygon-fill + raster-colorizer-default-color + shield-fill + shield-halo-fill + text-fill + text-halo-fill + + + building-height + marker-height + marker-width + shield-name + text-name + text-orientation + + + opacity + building-fill-opacity + line-gamma + line-miterlimit + line-offset + line-opacity + line-simplify + line-smooth + line-width + line-pattern-offset + line-pattern-simplify + line-pattern-smooth + background-image-opacity + buffer-size + marker-fill-opacity + marker-line-opacity + marker-line-width + marker-max-error + marker-opacity + marker-smooth + marker-spacing + point-opacity + polygon-gamma + polygon-opacity + polygon-simplify + polygon-smooth + polygon-pattern-gamma + polygon-pattern-opacity + polygon-pattern-simplify + polygon-pattern-smooth + raster-colorizer-epsilon + raster-filter-factor + raster-opacity + shield-dx + shield-dy + shield-halo-radius + shield-min-distance + shield-min-padding + shield-opacity + shield-size + shield-spacing + shield-text-dx + shield-text-dy + shield-text-opacity + text-character-spacing + text-dx + text-dy + text-halo-radius + text-max-char-angle-delta + text-min-distance + text-min-padding + text-min-path-length + text-opacity + text-size + + + direct-image-filters + image-filters + line-geometry-transform + line-pattern-geometry-transform + marker-geometry-transform + marker-transform + point-transform + polygon-geometry-transform + polygon-pattern-geometry-transform + shield-transform + + + comp-op + line-cap + line-comp-op + line-gamma-method + line-join + line-rasterizer + line-simplify-algorithm + line-pattern-comp-op + line-pattern-simplify-algorithm + background-image-comp-op + marker-comp-op + marker-multi-policy + marker-placement + marker-type + point-comp-op + point-placement + polygon-comp-op + polygon-gamma-method + polygon-simplify-algorithm + polygon-pattern-alignment + polygon-pattern-comp-op + polygon-pattern-simplify-algorithm + raster-colorizer-default-mode + raster-comp-op + raster-scaling + shield-comp-op + shield-horizontal-alignment + shield-justify-alignment + shield-placement + shield-placement-type + shield-text-transform + shield-vertical-alignment + text-align + text-comp-op + text-halo-rasterizer + text-horizontal-alignment + text-placement + text-placement-type + text-transform + text-vertical-alignment + + + line-dash-offset + line-dasharray + + + debug-mode + base + srs + shield-face-name + shield-placements + shield-wrap-character + text-face-name + text-placements + text-wrap-character + + + raster-colorizer-stops + + + raster-mesh-size + shield-character-spacing + shield-line-spacing + shield-wrap-width + text-label-position-tolerance + text-line-spacing + text-ratio + text-spacing + text-wrap-width + + + line-pattern-file + background-image + font-directory + marker-file + point-file + polygon-pattern-file + shield-file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/ccss.xml b/src/data/extra/syntax-highlighting/syntax/ccss.xml new file mode 100644 index 00000000..46484204 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/ccss.xml @@ -0,0 +1,655 @@ + + + + +]> + + + + + + + azimuth + background + background-attachment + background-color + background-image + background-position + background-repeat + border + border-bottom + border-bottom-color + border-bottom-style + border-bottom-width + border-collapse + border-color + border-left + border-left-color + border-left-style + border-left-width + border-right + border-right-color + border-right-style + border-right-width + border-spacing + border-style + border-top + border-top-color + border-top-style + border-top-width + border-width + bottom + caption-side + clear + clip + color + content + counter-increment + counter-reset + cue + cue-after + cue-before + cursor + direction + display + elevation + empty-cells + float + font + font-family + font-size + font-size-adjust + font-stretch + font-style + font-variant + font-weight + height + left + letter-spacing + line-height + list-style + list-style-image + list-style-keyword + list-style-position + list-style-type + margin + margin-bottom + margin-left + margin-right + margin-top + marker-offset + max-height + max-width + min-height + min-width + orphans + outline + outline-color + outline-style + outline-width + overflow + padding + padding-bottom + padding-left + padding-right + padding-top + page + page-break-after + page-break-before + page-break-inside + pause + pause-after + pause-before + pitch + pitch-range + play-during + position + quotes + richness + right + size + speak + speak-header + speak-numeral + speak-punctuation + speech-rate + stress + table-layout + text-align + text-decoration + text-decoration-color + text-indent + text-shadow + text-transform + top + unicode-bidi + vertical-align + visibility + voice-family + volume + white-space + widows + width + word-spacing + z-index + + + border-bottom-image + border-bottom-left-image + border-bottom-left-radius + border-bottom-right-image + border-bottom-right-radius + border-corner-image + border-image + border-left-image + border-radius + border-right-image + border-top-image + border-top-left-image + border-top-left-radius + border-top-right-image + border-top-right-radius + box-align + box-shadow + box-sizing + box-orient + box-pack + opacity + outline-offset + overflow-x + overflow-y + text-overflow + text-shadow + + + -moz-border-bottom-colors + -moz-border-left-colors + -moz-border-radius + -moz-border-right-colors + -moz-border-top-colors + -moz-box-flex + + + -o-background-size + -o-text-overflow + + + -khtml-background-size + konq_bgpos_x + konq_bgpos_y + + + -webkit-background-size + -webkit-border-radius + + + filter + -ms-filter + + + font-family + font-size + font-stretch + font-style + font-variant + font-weight + unicode-range + units-per-em + src + panose-1 + stemv + stemh + slope + cap-height + x-height + ascent + descent + widths + bbox + definition-src + baseline + centerline + mathline + topline + + + + inherit + none + hidden + dotted + dashed + solid + double + groove + ridge + inset + outset + xx-small + x-small + small + medium + large + x-large + xx-large + smaller + larger + italic + oblique + small-caps + normal + bold + bolder + lighter + light + 100 + 200 + 300 + 400 + 500 + 600 + 700 + 800 + 900 + transparent + repeat + repeat-x + repeat-y + no-repeat + baseline + sub + super + top + text-top + middle + bottom + text-bottom + left + right + center + justify + konq-center + disc + circle + square + box + decimal + decimal-leading-zero + lower-roman + upper-roman + lower-greek + lower-alpha + lower-latin + upper-alpha + upper-latin + hebrew + armenian + georgian + cjk-ideographic + hiragana + katakana + hiragana-iroha + katakana-iroha + inline + inline-block + block + list-item + run-in + compact + marker + table + inline-table + table-row-group + table-header-group + table-footer-group + table-row + table-column-group + table-column + table-cell + table-caption + auto + crosshair + default + pointer + move + e-resize + ne-resize + nw-resize + n-resize + se-resize + sw-resize + s-resize + w-resize + text + wait + help + above + absolute + always + avoid + below + bidi-override + blink + both + capitalize + caption + clip + close-quote + collapse + condensed + crop + cross + ellipsis + ellipsis-word + embed + expanded + extra-condensed + extra-expanded + fixed + hand + hide + higher + icon + inside + invert + landscape + level + line-through + loud + lower + lowercase + ltr + menu + message-box + mix + narrower + no-close-quote + no-open-quote + nowrap + open-quote + outside + overline + portrait + pre + pre-line + pre-wrap + relative + rtl + scroll + semi-condensed + semi-expanded + separate + show + small-caption + static + static-position + status-bar + thick + thin + ultra-condensed + ultra-expanded + underline + uppercase + visible + wider + break + serif + sans-serif + cursive + fantasy + monospace + border-box + content-box + horizontal + + + -moz-box + + + linear + radial + + + + + + aqua + black + blue + fuchsia + gray + green + lime + maroon + navy + olive + purple + red + silver + teal + white + yellow + ActiveBorder + ActiveCaption + AppWorkspace + Background + ButtonFace + ButtonHighlight + ButtonShadow + ButtonText + CaptionText + GrayText + Highlight + HighlightText + InactiveBorder + InactiveCaption + InactiveCaptionText + InfoBackground + InfoText + Menu + MenuText + Scrollbar + ThreeDDarkShadow + ThreeDFace + ThreeDHighlight + ThreeDLightShadow + ThreeDShadow + Window + WindowFrame + WindowText + + + + url + attr + rect + rgb + rgba + hsl + hsla + counter + counters + + + local + format + + + -webkit-gradient + color-stop + + + -moz-linear-gradient + -moz-radial-gradient + + + expression + progid:DXImageTransform.Microsoft.gradient + + + + + all + aural + braille + embossed + handheld + print + projection + screen + tty + tv + + + + hover + link + visited + active + focus + first-child + last-child + only-child + first-of-type + last-of-type + only-of-type + first-letter + first-line + before + after + selection + root + empty + target + enabled + disabled + checked + indeterminate + nth-child + nth-last-child + nth-of-type + nth-last-of-type + not + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/cg.xml b/src/data/extra/syntax-highlighting/syntax/cg.xml new file mode 100644 index 00000000..0ad61f1d --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/cg.xml @@ -0,0 +1,273 @@ + + + + + + + + + POSITION + COLOR + COLOR0 + COLOR1 + COLOR2 + COLOR3 + TEXCOORD0 + TEXCOORD1 + TEXCOORD2 + TEXCOORD3 + TEXCOORD4 + TEXCOORD5 + TEXCOORD6 + TEXCOORD7 + TEXCOORD8 + TEXCOORD9 + TEXCOORD10 + TEXCOORD11 + TEXCOORD12 + TEXCOORD13 + TEXCOORD14 + TEXCOORD15 + TEXUNIT0 + TEXUNIT1 + TEXUNIT2 + TEXUNIT3 + TEXUNIT4 + TEXUNIT5 + TEXUNIT6 + TEXUNIT7 + TEXUNIT8 + TEXUNIT9 + TEXUNIT10 + TEXUNIT11 + TEXUNIT12 + TEXUNIT13 + TEXUNIT14 + TEXUNIT15 + WPOS + DEPTH + BLENDWEIGHT + NORMAL + TESSFACTOR + FOGCOORD + PSIZE + BLENDINDICES + TANGENT + BINORMAL + FOG + BCOL0 + BCOL1 + FACE + + + do + while + if + else + for + struct + return + static + typedef + discard + true + false + + + bool + int + fixed + half + float + + void + sampler + sampler1D + sampler2D + sampler3D + samplerCUBE + samplerRECT + + packed + const + uniform + in + out + inout + + + FIXME + TODO + BUG + + + abs + acos + all + any + asin + atan + atan2 + ceil + clamp + cos + cosh + cross + degrees + determinant + dot + exp + exp2 + floor + fmod + frac + frexp + isfinite + isinf + isnan + ldexp + lerp + lit + log + log2 + log10 + max + min + modf + mul + noise + pow + radians + round + rsqrt + saturate + sign + sin + sincos + sinh + smoothstep + step + sqrt + tan + tanh + transpose + distance + faceforward + length + normalize + reflect + refract + tex1D + tex1Dproj + tex2D + tex2Dproj + texRECT + texRECTproj + tex3D + tex3Dproj + texCUBE + texCUBEproj + ddx + ddy + debug + pack_2half + unpack_2half + pack_2ushort + unpack_2ushort + pack_4byte + unpack_4byte + pack_4ubyte + unpack_4ubyte + + + fragout + fragout_float + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/cgis.xml b/src/data/extra/syntax-highlighting/syntax/cgis.xml new file mode 100644 index 00000000..5b718c7b --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/cgis.xml @@ -0,0 +1,134 @@ + + + + + + 1D + 2D + break + continue + do + else + extern + for + forall + foreach + function + if + in + inout + internal + out + reduction + return + struct + typedef + while + + + bool + bool2 + bool3 + bool4 + int + int2 + int3 + int4 + half + half2 + half3 + half4 + float + float2 + float3 + float4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/changelog.xml b/src/data/extra/syntax-highlighting/syntax/changelog.xml new file mode 100644 index 00000000..e0048162 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/changelog.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/chicken.xml b/src/data/extra/syntax-highlighting/syntax/chicken.xml new file mode 100644 index 00000000..eaa9e971 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/chicken.xml @@ -0,0 +1,435 @@ + + + + + + + <= + < + = + => + >= + > + - + / + *,* + *) + + + + + #\nul + #\soh + #\stx + #\etx + #\eot + #\enq + #\ack + #\bel + #\bs + #\ht + #\nl + #\vt + #\np + #\cr + #\so + #\si + #\dle + #\dc1 + #\dc2 + #\dc3 + #\dc4 + #\nak + #\syn + #\etb + #\can + #\em + #\sub + #\esc + #\fs + #\gs + #\rs + #\us + #\space + #\sp + #\newline + #\nl + #\tab + #\ht + #\backspace + #\bs + #\return + #\cr + #\page + #\np + #\null + #\nul + + + define + define* + define-accessor + define-class + defined? + define-generic + define-macro + define-method + define-module + define-private + define-public + define*-public + define-reader-ctor + define-syntax + define-syntax-macro + defmacro + defmacro* + defmacro*-public + + + abs + acos + and + angle + append + applymap + asin + assoc + assq + assv + atan + begin + boolean? + break + caaaar + caaadr + caaar + caadar + caaddr + caadr + caar + cadaar + cadadr + cadar + caddar + cadddr + caddr + cadr + call/cc + call-with-current-continuation + call-with-input-file + call-with-output-file + call-with-values + car + case + catch + cdaaar + cdaadr + cdaar + cdadar + cdaddr + cdadr + cdar + cddaar + cddadr + cddar + cdddar + cddddr + cdddr + cddr + cdr + ceiling + char-alphabetic? + char-ci>=? + char-ci>? + char-ci=? + char-ci<=? + char-downcase + char->integer + char>=? + char>? + char=? + char? + char-lower-case? + char<?c + char<=? + char-numeric? + char-ready? + char-upcase + char-upper-case? + char-whitespace? + close-input-port + close-output-port + complex? + cond + cons + continue + cos + current-input-port + current-output-port + denominator + display + do + dynamic-wind + else + eof-object? + eq? + equal? + eqv? + eval + even? + exact->inexact + exact? + exp + expt + floor + force + for-each + gcd + har-ci<? + if + imag-part + inexact->exact + inexact? + input-port? + integer->char + integer? + interaction-environment + lambda + lcm + length + let + let* + letrec + letrec-syntax + let-syntax + list->string + list + list? + list-ref + list-tail + load + log + magnitude + make-polar + make-rectangular + make-string + make-vector + max + member + memq + memv + min + modulo + negative? + newline + not + null-environment + null? + number? + number->string + numerator + odd? + open-input-file + open-output-file + or + output-port? + pair? + peek-char + port? + positive? + procedure? + quotient + rational? + rationalize + read-char + read + real? + real-part + remainder + reverse + round + scheme-report-environment + set-car! + set-cdr! + sin + sqrt + string-append + string-ci>=? + string-ci>? + string-ci=? + string-ci<=? + string-ci<? + string-copy + string-fill! + string>=? + string>? + string->list + string->number + string->symbol + string=? + string + string? + string-length + string<=? + string<? + string-ref + string-set! + substring + symbol->string + symbol? + syntax-rules + tan + transcript-off + transcript-on + truncate + values + vector-fill! + vector->listlist->vector + vector + vector? + vector-length + vector-ref + vector-set! + while + with-input-from-file + with-output-to-file + write-char + write + zero? + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/cil.xml b/src/data/extra/syntax-highlighting/syntax/cil.xml new file mode 100644 index 00000000..3226d2fb --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/cil.xml @@ -0,0 +1,192 @@ + + + + + + + cil + class + catch + default + extends + extern + finally + instance + managed + method + private + public + static + try + virtual + + + bool + float32 + float64 + int8 + int32 + int64 + object + string + unsigned + void + + + assembly + custom + entrypoint + field + locals + namespace + maxstack + module + property + + + + add + and + arglist + beq + bge + bgt + ble + blt + bne + box + br + break + brfalse + brinst + brnull + brtrue + brzero + call + calli + callvirt + castclass + ceq + cgt + ckfinite + clt + constrained + conv + cpblk + cpobj + div + dup + endfault + endfilter + endfinally + initblk + initobj + isinst + jmp + ldarg + ldarga + ldc + ldelem + ldelema + ldfld + ldflda + ldftn + ldind + ldlen + ldloc + ldloca + ldnull + ldobj + ldsfld + ldsflda + ldstr + ldtoken + ldvirtftn + leave + localloc + mkrefany + mul + neg + newarr + newobj + nop + not + or + pop + readonly + refanytype + refanyval + rem + ret + rethrow + shl + shr + sizeof + starg + stelem + stfld + stind + stloc + stobj + stsfld + sub + switch + tail + throw + unaligned + unbox + volatile + xor + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/cisco.xml b/src/data/extra/syntax-highlighting/syntax/cisco.xml new file mode 100644 index 00000000..c3d78f90 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/cisco.xml @@ -0,0 +1,302 @@ + + + + + + aaa + access-list + address + alias + arp + async-bootp + banner + boot + bridge + buffers + busy-message + call-history-mib + cdp + chat-script + class-map + clock + cns + config-register + controller + crypto + default + default-value + dialer + dialer-list + dnsix-dmdp + dnsix-nat + downward-compatible-config + enable + end + exception + exit + file + frame-relay + help + hostname + interface + ip + isdn + isdn-mib + kerberos + key + line + logging + login-string + map-class + map-list + memory-size + menu + modemcap + multilink + netbios + no + ntp + partition + policy-map + priority-list + privilege + process-max-time + prompt + queue-list + resume-string + rlogin + rmon + route-map + router + rtr + scheduler + service + snmp-server + sntp + stackmaker + state-machine + subscriber-policy + tacacs-server + template + terminal-queue + tftp-server + time-range + username + virtual-profile + virtual-template + vpdn + vpdn-group + x25 + x29 + + + accounting + accounting-list + accounting-threshold + accounting-transits + address-pool + as-path + audit + auth-proxy + authentication + authorization + bgp-community + bootp + cef + classless + community-list + default-gateway + default-network + dhcp + dhcp-server + domain-list + domain-lookup + domain-name + dvmrp + exec-callback + extcommunity-list + finger + flow-aggregation + flow-cache + flow-export + forward-protocol + ftp + gratuitous-arps + host + host-routing + hp-host + http + icmp + inspect + local + mrm + mroute + msdp + multicast + multicast-routing + name-server + nat + new-model + ospf + password + password-encryption + pgm + pim + port-map + prefix-list + radius + rcmd + reflexive-list + route + routing + rsvp + rtcp + sap + sdr + security + source-route + subnet-zero + tacacs + tcp + tcp-small-servers + telnet + tftp + timestamps + udp-small-servers + vrf + wccp + + + accounting + accounting-list + accounting-threshold + accounting-transits + address-pool + as-path + audit + auth-proxy + authentication + authorization + bgp-community + bootp + cef + classless + community-list + default-gateway + default-network + dhcp + dhcp-server + domain-list + domain-lookup + domain-name + dvmrp + exec-callback + extcommunity-list + finger + flow-aggregation + flow-cache + flow-export + forward-protocol + ftp + gratuitous-arps + host + host-routing + hp-host + http + icmp + inspect + local + mrm + mroute + msdp + multicast + multicast-routing + name-server + nat + new-model + ospf + password + password-encryption + pgm + pim + port-map + prefix-list + radius + rcmd + reflexive-list + route + routing + rsvp + rtcp + sap + sdr + security + source-route + subnet-zero + tacacs + tcp + tcp-small-servers + telnet + tftp + timestamps + udp-small-servers + vrf + wccp + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/clipper.xml b/src/data/extra/syntax-highlighting/syntax/clipper.xml new file mode 100644 index 00000000..898ff312 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/clipper.xml @@ -0,0 +1,498 @@ + + + + + + + + .and. + announce + begin + case + command + define + do + elseif + else + endcase + enddo + endif + error + exit + field + .f. + for + function + ifdef + if + include + init + inndef + local + memvar + next + nil + .not. + .or. + other + parameters + private + procedure + public + request + return + sequence + static + stdout + .t. + traslate + undef + while + xcommand + xtranslate + + + + + accept + all + alternate + append + ascending + average + bell + blank + box + century + clear + close + coclor + color + commit + confirm + console + continue + copy + count + create + cursor + date + decimals + default + deleted + delete + delimiters + descending + device + display + do + eject + epoch + erase + escape + eval + every + exact + extended + file + filter + fixed + form + from + get + gets + go + goto + index + input + intensity + ? + ?? + @ + join + keyboard + key + label + list + locate + margin + memory + menu + message + new + on + order + pack + path + pict + printer + prompt + quit + range + read + recall + record + reindex + relation + release + rename + replace + report + rest + restore + run + save + say + scoreboard + seek + select + set + skip + softseek + sort + structure + sum + tag + to + total + typeahead + type + unique + unlock + update + use + valid + wait + when + with + wrap + zap + + + + + aadd + abs + achoice + aclone + acopy + adel + aeval + afill + ains + alert + alias + alltrim + altd + array + ascan + asize + asort + atail + at + bin2i + bin2l + bin2w + bof + break + browse + cdowchr + chr + cmonth + col + colorselect + ctod + curdir + date + day + dbappend + dbclearall + dbclearfilter + dbclearindex + dbclearrelation + dbcloseall + dbclosearea + dbcommitall + dbcommit + dbcreateindex + dbcreate + dbdelete + dbedit + dbeval + dbfilter + dbf + dbgobottom + dbgoto + dbgotop + dbrecall + dbreindex + dbrelation + dbrlock + dbrlocklist + dbrselect + dbrunlock + dbseek + dbselectarea + dbsetfilter + dbsetindex + dbsetorder + dbsetrelation + dbskip + dbstruct + dbunlockall + dbunlock + dbusearea + deleted + descend + devout + devpos + directory + dispbegin + dispbox + dispcount + dispend + dispout + dispspace + doserror + dow + dtoc + dtos + empty + eof + errorblock + errorinhandler + errorlevel + eval + exp + fclose + fcount + fcreate + ferase + ferror + fieldblock + fieldget + field + fieldname + fieldpos + fieldput + fieldwblock + file + flock + fopen + found + fread + freadstr + frename + fseek + fwrite + getactive + getenv + hardcr + header + i2bin + iif + indexext + indexkey + indexord + inkey + int + isalpha + iscolor + isdigit + islower + isprinter + isupper + l2bin + lastkey + lastrec + left + len + lock + log + lower + ltrim + lupdate + maxcol + max + maxrow + memoedit + memoline + memoread + memory + memotran + memowrit + memvarblock + min + mlcount + mlctopos + mlpos + mod + month + mpostolc + neterr + netname + nextkey + nosnow + ordbagext + ordbagname + ordcreate + orddestroy + ordfor + ordkey + ordlistadd + ordlistclear + ordlistrebuild + ordname + ordnumber + ordsetfocus + os + outerr + outstd + padc + padl + padr + pcol + pcount + proclineprocname + prow + qout + qqout + rat + rddlist + rddname + rddsetdefault + readexit + readinsert + readmodal + readvar + reccount + recno + recsize + replicate + restscreen + right + rlock + round + row + rtrim + savesreen + scroll + seconds + select + setblink + setcancel + setcolor + setcursor + setkey + setmode + setpos + setprc + soundex + space + sqrt + str + strtran + stuff + substr + time + tone + transform + trim + updated + upper + used + val + valtype + version + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/clist.xml b/src/data/extra/syntax-highlighting/syntax/clist.xml new file mode 100644 index 00000000..a76495f4 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/clist.xml @@ -0,0 +1,87 @@ + + + + + + + ATTN + CONTROL + DATA-ENDDATA + DATA-PROMPT + ERROR + EXIT + GLOBAL + GOTO + NGLOBAL + PROC + RETURN + SYSCALL + SYSREF + TERMIN + WRITE + WRITENR + + + READ + READDVAL + SET + LISTDSI + + + DO + IF + TO + THEN + END + ELSE + SELECT + + + CLOSFILE + GETFILE + OPENFILE + PUTFILE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/clojure.xml b/src/data/extra/syntax-highlighting/syntax/clojure.xml new file mode 100644 index 00000000..855e01a8 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/clojure.xml @@ -0,0 +1,883 @@ + + + + + + + def + def- + defalias + defhinted + definline + defmethod + defmulti + defnk + defn-memo + defonce + defonce- + defprotocol + defrecord + defstruct + defstruct- + deftest + deftest- + deftype + defunbound + defunbound- + defvar + defvar- + + + defn + defn- + defmacro + defmacro- + + + < + <= + = + == + > + >= + - + -' + -> + ->> + / + . + .. + * + *' + + + +' + accessor + aclone + add-classpath + add-watch + agent + agent-errors + aget + alength + alias + all-ns + alter + alter-meta! + alter-var-root + amap + ancestors + and + append-child + apply + apply-template + are + areduce + array-map + as-> + aset + aset-boolean + aset-byte + aset-char + aset-double + aset-float + aset-int + aset-long + aset-short + assert + assert-any + assert-expr + assert-predicate + assoc + assoc! + associative? + assoc-in + atom + atom? + attrs + await + await1 + await-for + bases + bean + bigdec + bigint + binding + bit-and + bit-and-not + bit-clear + bit-flip + bit-not + bit-or + bit-set + bit-shift-left + bit-shift-right + bit-test + bit-xor + boolean + boolean-array + booleans + bound-fn + bound-fn* + branch? + butlast + byte + byte-array + bytes + case + cast + catch + char + char? + char-array + char-escape-string + char-name-string + chars + children + chunk + chunk-append + chunk-buffer + chunk-cons + chunked-seq? + chunk-first + chunk-next + chunk-rest + class + class? + clear-agent-errors + clojure-version + coll? + collection-tag + comment + commute + comp + comparator + compare + compare-and-set! + compile + complement + compose-fixtures + concat + cond + condp + conj + conj! + cons + constantly + construct-proxy + contains? + content + content-handler + count + counted? + create-ns + create-struct + cycle + dec + dec' + decimal? + declare + delay + delay? + deliver + deref + derive + descendants + destructure + difference + disj + disj! + dissoc + dissoc! + distinct + distinct? + do + doall + doc + dorun + doseq + dosync + do-template + dotimes + doto + double + double-array + doubles + down + drop + drop-last + drop-while + e + edit + element + emit + emit-element + empty + empty? + end? + ensure + enumeration-seq + eval + even? + every? + extend + extenders + extend-protocol + extends? + extend-type + false? + ffirst + file-position + file-seq + filter + filterv + finally + find + find-doc + find-ns + find-var + first + float + float? + float-array + floats + flush + fn + fn? + fnext + fnil + for + force + format + frequencies + function? + future + future? + future-call + future-cancel + future-cancelled? + future-done? + gen-and-load-class + gen-and-save-class + gen-class + gen-interface + gensym + get + get-child + get-child-count + get-in + get-method + get-possibly-unbound-var + get-proxy-class + get-thread-bindings + get-validator + group-by + handle + handler-case + hash + hash-map + hash-set + identical? + identity + if + if-let + ifn? + if-not + import + inc + inc' + inc-report-counter + index + init-proxy + in-ns + insert-child + insert-left + insert-right + inspect + inspect-table + inspect-tree + instance? + int + int-array + integer? + interleave + intern + interpose + intersection + into + into-array + ints + io! + is + isa? + is-leaf + iterate + iterator-seq + join + join-fixtures + juxt + key + keys + keyword + keyword? + keywordize-keys + last + lazy-cat + lazy-seq + left + leftmost + lefts + let + letfn + line-seq + list + list* + list? + list-model + list-provider + load + loaded-libs + load-file + load-reader + load-script + load-string + locking + long + long-array + longs + loop + macroexpand + macroexpand-1 + macroexpand-all + main + make-array + make-hierarchy + make-node + map + map? + mapcat + mapv + map-invert + max + max-key + memfn + memoize + merge + merge-with + meta + methods + method-sig + min + min-key + mod + name + namespace + neg? + newline + next + nfirst + nil? + nnext + node + not + not= + not-any? + not-empty + not-every? + ns + ns-aliases + ns-imports + ns-interns + ns-map + ns-name + ns-publics + ns-refers + ns-resolve + ns-unalias + ns-unmap + nth + nthnext + num + number? + odd? + or + parents + partial + partition + path + pcalls + peek + persistent! + pmap + pop + pop! + pop-thread-bindings + pos? + postwalk + postwalk-demo + postwalk-replace + pr + prefer-method + prefers + prev + prewalk + prewalk-demo + prewalk-replace + primitives-classnames + print + print-cause-trace + print-ctor + print-doc + print-dup + printf + println + println-str + print-method + print-namespace-doc + print-simple + print-special-doc + print-stack-trace + print-str + print-throwable + print-trace-element + prn + prn-str + project + promise + proxy + proxy-call-with-super + proxy-mappings + proxy-name + proxy-super + pr-str + push-thread-bindings + pvalues + quot + rand + rand-int + rand-nth + range + ratio? + rational? + rationalize + read + read-line + read-string + recur + reduce + ref + refer + refer-clojure + ref-history-count + re-find + ref-max-history + ref-min-history + ref-set + re-groups + reify + release-pending-sends + rem + re-matcher + re-matches + remove + remove-method + remove-ns + remove-watch + rename + rename-keys + re-pattern + repeat + repeatedly + repl + replace + repl-caught + repl-exception + replicate + repl-prompt + repl-read + report + require + re-seq + reset! + reset-meta! + resolve + rest + resultset-seq + reverse + reversible? + right + rightmost + rights + root + rseq + rsubseq + run-all-tests + run-tests + satisfies? + second + select + select-keys + send + send-off + seq + seq? + seque + sequence + sequential? + seq-zip + set + set? + set-test + set-validator! + short + short-array + shorts + shutdown-agents + skip-if-eol + skip-whitespace + slurp + some + sort + sort-by + sorted? + sorted-map + sorted-map-by + sorted-set + sorted-set-by + special-form-anchor + special-symbol? + split-at + split-with + str + stream? + string? + stringify-keys + struct + struct-map + subs + subseq + subvec + successful? + supers + swap! + symbol + symbol? + sync + syntax-symbol-anchor + take + take-last + take-nth + take-while + test + test-all-vars + testing + testing-contexts-str + testing-vars-str + test-ns + test-var + the-ns + throw + time + to-array + to-array-2d + trampoline + transient + tree-seq + true? + try + try-expr + type + unchecked-add + unchecked-dec + unchecked-divide + unchecked-inc + unchecked-multiply + unchecked-negate + unchecked-remainder + unchecked-subtract + underive + unimport + union + unquote + unquote-splicing + up + update + update-in + update-proxy + use + use-fixtures + val + vals + var? + var-get + var-set + vary-meta + vec + vector + vector? + vector-of + walk + when + when-first + when-let + when-not + while + with-bindings + with-bindings* + with-in-str + with-loading-context + with-local-vars + with-meta + with-open + with-out-str + with-precision + with-test + with-test-out + xml-seq + zero? + zipmap + + + *1 + *2 + *3 + *agent* + *allow-unresolved-vars* + *assert* + *clojure-version* + *command-line-args* + *compile-files* + *compile-path* + *current* + *e + *err* + *file* + *flush-on-newline* + *in* + *initial-report-counters* + *load-tests* + *macro-meta* + *math-context* + *ns* + *out* + *print-dup* + *print-length* + *print-level* + *print-meta* + *print-readably* + *read-eval* + *report-counters* + *sb* + *source-path* + *stack* + *stack-trace-depth* + *state* + *testing-contexts* + *testing-vars* + *test-out* + *use-context-classloader* + *warn-on-reflection* + *warn-on-reflection* + false + nil + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/cmake.xml b/src/data/extra/syntax-highlighting/syntax/cmake.xml new file mode 100644 index 00000000..def91cc4 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/cmake.xml @@ -0,0 +1,3994 @@ + + +]> + + + + + + + break + cmake_host_system_information + cmake_minimum_required + cmake_parse_arguments + cmake_policy + configure_file + continue + elseif + else + endforeach + endfunction + endif + endmacro + endwhile + execute_process + file + find_file + find_library + find_package + find_path + find_program + foreach + function + get_cmake_property + get_directory_property + get_filename_component + get_property + if + include + include_guard + list + macro + mark_as_advanced + math + message + option + return + separate_arguments + set_directory_properties + set_property + set + site_name + string + unset + variable_watch + while + add_compile_definitions + add_compile_options + add_custom_command + add_custom_target + add_definitions + add_dependencies + add_executable + add_library + add_link_options + add_subdirectory + add_test + aux_source_directory + build_command + create_test_sourcelist + define_property + enable_language + enable_testing + export + fltk_wrap_ui + get_source_file_property + get_target_property + get_test_property + include_directories + include_external_msproject + include_regular_expression + install + link_directories + link_libraries + load_cache + project + qt_wrap_cpp + qt_wrap_ui + remove_definitions + set_source_files_properties + set_target_properties + set_tests_properties + source_group + target_compile_definitions + target_compile_features + target_compile_options + target_include_directories + target_link_directories + target_link_libraries + target_link_options + target_sources + try_compile + try_run + ctest_build + ctest_configure + ctest_coverage + ctest_empty_binary_directory + ctest_memcheck + ctest_read_custom_files + ctest_run_script + ctest_sleep + ctest_start + ctest_submit + ctest_test + ctest_update + ctest_upload + + + + QUERY + RESULT + + + AVAILABLE_PHYSICAL_MEMORY + AVAILABLE_VIRTUAL_MEMORY + FQDN + HAS_AMD_3DNOW + HAS_AMD_3DNOW_PLUS + HAS_FPU + HAS_IA64 + HAS_MMX + HAS_MMX_PLUS + HAS_SERIAL_NUMBER + HAS_SSE + HAS_SSE2 + HAS_SSE_FP + HAS_SSE_MMX + HOSTNAME + IS_64BIT + NUMBER_OF_LOGICAL_CORES + NUMBER_OF_PHYSICAL_CORES + OS_NAME + OS_PLATFORM + OS_RELEASE + OS_VERSION + PROCESSOR_DESCRIPTION + PROCESSOR_NAME + PROCESSOR_SERIAL_NUMBER + TOTAL_PHYSICAL_MEMORY + TOTAL_VIRTUAL_MEMORY + + + FATAL_ERROR + VERSION + + + PARSE_ARGV + + + GET + POP + PUSH + SET + VERSION + + + NEW + OLD + + + @ONLY + COPYONLY + ESCAPE_QUOTES + NEWLINE_STYLE + + + CRLF + DOS + LF + UNIX + WIN32 + + + AND + DEFINED + EQUAL + EXISTS + GREATER + GREATER_EQUAL + IN_LIST + IS_ABSOLUTE + IS_DIRECTORY + IS_NEWER_THAN + IS_SYMLINK + LESS + LESS_EQUAL + MATCHES + NOT + OR + POLICY + STREQUAL + STRGREATER + STRGREATER_EQUAL + STRLESS + STRLESS_EQUAL + TARGET + TEST + VERSION_EQUAL + VERSION_GREATER + VERSION_GREATER_EQUAL + VERSION_LESS + VERSION_LESS_EQUAL + + + COMMAND + COMMAND_ECHO + ENCODING + ERROR_FILE + ERROR_QUIET + ERROR_STRIP_TRAILING_WHITESPACE + ERROR_VARIABLE + INPUT_FILE + OUTPUT_FILE + OUTPUT_QUIET + OUTPUT_STRIP_TRAILING_WHITESPACE + OUTPUT_VARIABLE + RESULTS_VARIABLE + RESULT_VARIABLE + TIMEOUT + WORKING_DIRECTORY + + + ANSI + AUTO + NONE + OEM + STDERR + STDOUT + UTF8 + + + APPEND + CONDITION + CONFIGURE_DEPENDS + CONTENT + COPY + DESTINATION + DIRECTORY + DIRECTORY_PERMISSIONS + DOWNLOAD + ENCODING + EXCLUDE + EXPECTED_HASH + EXPECTED_MD5 + FILES_MATCHING + FILE_PERMISSIONS + FOLLOW_SYMLINKS + FOLLOW_SYMLINK_CHAIN + GENERATE + GLOB + GLOB_RECURSE + GUARD + HEX + HTTPHEADER + INACTIVITY_TIMEOUT + INPUT + INSTALL + LENGTH_MAXIMUM + LENGTH_MINIMUM + LIMIT + LIMIT_COUNT + LIMIT_INPUT + LIMIT_OUTPUT + LIST_DIRECTORIES + LOCK + LOG + MAKE_DIRECTORY + MD5 + NETRC + NETRC_FILE + NEWLINE_CONSUME + NO_HEX_CONVERSION + NO_SOURCE_PERMISSIONS + OFFSET + OUTPUT + PATTERN + PERMISSIONS + READ + READ_SYMLINK + REGEX + RELATIVE + RELATIVE_PATH + RELEASE + REMOVE + REMOVE_RECURSE + RENAME + RESULT_VARIABLE + SHA1 + SHA224 + SHA256 + SHA384 + SHA3_224 + SHA3_256 + SHA3_384 + SHA3_512 + SHA512 + SHOW_PROGRESS + SIZE + STATUS + STRINGS + TIMEOUT + TIMESTAMP + TLS_CAINFO + TLS_VERIFY + TOUCH + TOUCH_NOCREATE + TO_CMAKE_PATH + TO_NATIVE_PATH + UPLOAD + USERPWD + USE_SOURCE_PERMISSIONS + UTC + WRITE + + + FILE + FUNCTION + GROUP_EXECUTE + GROUP_READ + GROUP_WRITE + IGNORED + OPTIONAL + OWNER_EXECUTE + OWNER_READ + OWNER_WRITE + PROCESS + REQUIRED + SETGID + SETUID + UTF-16BE + UTF-16LE + UTF-32B + UTF-32LE + UTF-8 + WORLD_EXECUTE + WORLD_READ + WORLD_WRITE + + + CMAKE_FIND_ROOT_PATH_BOTH + DOC + HINTS + NAMES + NO_CMAKE_ENVIRONMENT_PATH + NO_CMAKE_FIND_ROOT_PATH + NO_CMAKE_PATH + NO_CMAKE_SYSTEM_PATH + NO_DEFAULT_PATH + NO_PACKAGE_ROOT_PATH + NO_SYSTEM_ENVIRONMENT_PATH + ONLY_CMAKE_FIND_ROOT_PATH + PATHS + PATH_SUFFIXES + + + CMAKE_FIND_ROOT_PATH_BOTH + DOC + HINTS + NAMES + NAMES_PER_DIR + NO_CMAKE_ENVIRONMENT_PATH + NO_CMAKE_FIND_ROOT_PATH + NO_CMAKE_PATH + NO_CMAKE_SYSTEM_PATH + NO_DEFAULT_PATH + NO_PACKAGE_ROOT_PATH + NO_SYSTEM_ENVIRONMENT_PATH + ONLY_CMAKE_FIND_ROOT_PATH + PATHS + PATH_SUFFIXES + + + CMAKE_FIND_ROOT_PATH_BOTH + COMPONENTS + CONFIG + CONFIGS + EXACT + HINTS + MODULE + NAMES + NO_CMAKE_ENVIRONMENT_PATH + NO_CMAKE_FIND_ROOT_PATH + NO_CMAKE_PACKAGE_REGISTRY + NO_CMAKE_PATH + NO_CMAKE_SYSTEM_PACKAGE_REGISTRY + NO_CMAKE_SYSTEM_PATH + NO_DEFAULT_PATH + NO_MODULE + NO_PACAKGE_ROOT_PATH + NO_POLICY_SCOPE + NO_SYSTEM_ENVIRONMENT_PATH + ONLY_CMAKE_FIND_ROOT_PATH + OPTIONAL_COMPONENTS + PATHS + PATH_SUFFIXES + QUIET + REQUIRED + + + CMAKE_FIND_ROOT_PATH_BOTH + DOC + HINTS + NAMES + NO_CMAKE_ENVIRONMENT_PATH + NO_CMAKE_FIND_ROOT_PATH + NO_CMAKE_PATH + NO_CMAKE_SYSTEM_PATH + NO_DEFAULT_PATH + NO_PACKAGE_ROOT_PATH + NO_SYSTEM_ENVIRONMENT_PATH + ONLY_CMAKE_FIND_ROOT_PATH + PATHS + PATH_SUFFIXES + + + CMAKE_FIND_ROOT_PATH_BOTH + DOC + HINTS + NAMES + NAMES_PER_DIR + NO_CMAKE_ENVIRONMENT_PATH + NO_CMAKE_FIND_ROOT_PATH + NO_CMAKE_PATH + NO_CMAKE_SYSTEM_PATH + NO_DEFAULT_PATH + NO_PACKAGE_ROOT_PATH + NO_SYSTEM_ENVIRONMENT_PATH + ONLY_CMAKE_FIND_ROOT_PATH + PATHS + PATH_SUFFIXES + + + IN + ITEMS + LISTS + RANGE + + + DEFINITION + DIRECTORY + + + ABSOLUTE + BASE_DIR + CACHE + DIRECTORY + EXT + LAST_EXT + NAME + NAME_WE + NAME_WLE + PATH + PROGRAM + PROGRAM_ARGS + REALPATH + + + BRIEF_DOCS + CACHE + DEFINED + DIRECTORY + FULL_DOCS + GLOBAL + INSTALL + PROPERTY + SET + SOURCE + TARGET + TEST + VARIABLE + + + AND + DEFINED + EQUAL + EXISTS + GREATER + GREATER_EQUAL + IN_LIST + IS_ABSOLUTE + IS_DIRECTORY + IS_NEWER_THAN + IS_SYMLINK + LESS + LESS_EQUAL + MATCHES + NOT + OR + POLICY + STREQUAL + STRGREATER + STRGREATER_EQUAL + STRLESS + STRLESS_EQUAL + TARGET + TEST + VERSION_EQUAL + VERSION_GREATER + VERSION_GREATER_EQUAL + VERSION_LESS + VERSION_LESS_EQUAL + + + NO_POLICY_SCOPE + OPTIONAL + RESULT_VARIABLE + + + DIRECTORY + GLOBAL + + + APPEND + AT + CASE + COMPARE + EXCLUDE + FILTER + FIND + FOR + GENEX_STRIP + GET + INCLUDE + INSERT + JOIN + LENGTH + ORDER + OUTPUT_VARIABLE + POP_BACK + POP_FRONT + PREPEND + REGEX + REMOVE_AT + REMOVE_DUPLICATES + REMOVE_ITEM + REPLACE + REVERSE + SORT + STRIP + SUBLIST + TOLOWER + TRANSFORM + + + ASCENDING + DESCENDING + FILE_BASENAME + INSENSITIVE + SENSITIVE + STRING + + + CLEAR + FORCE + + + EXPR + OUTPUT_FORMAT + + + DECIMAL + HEXADECIMAL + + + AUTHOR_WARNING + DEBUG + DEPRECATION + FATAL_ERROR + NOTICE + SEND_ERROR + STATUS + TRACE + VERBOSE + WARNING + + + NATIVE_COMMAND + UNIX_COMMAND + WINDOWS_COMMAND + + + PROPERTIES + + + APPEND + APPEND_STRING + CACHE + DIRECTORY + GLOBAL + INSTALL + PROPERTY + SOURCE + TARGET + TEST + VARIABLE + + + CACHE + FORCE + PARENT_SCOPE + + + BOOL + FILEPATH + INTERNAL + PATH + STATIC + STRING + + + @ONLY + ALPHABET + APPEND + ASCII + COMPARE + CONCAT + CONFIGURE + EQUAL + ESCAPE_QUOTES + FIND + GENEX_STRIP + GREATER + GREATER_EQUAL + JOIN + LENGTH + LESS + LESS_EQUAL + MAKE_C_IDENTIFIER + MATCH + MATCHALL + MD5 + NAME + NAMESPACE + NOTEQUAL + PREPEND + RANDOM + RANDOM_SEED + REGEX + REPEAT + REPLACE + REVERSE + SHA1 + SHA224 + SHA256 + SHA384 + SHA3_224 + SHA3_256 + SHA3_384 + SHA3_512 + SHA512 + STRIP + SUBSTRING + TIMESTAMP + TOLOWER + TOUPPER + TYPE + UPPER + UTC + UUID + + + CACHE + PARENT_SCOPE + + + AND + DEFINED + EQUAL + EXISTS + GREATER + GREATER_EQUAL + IN_LIST + IS_ABSOLUTE + IS_DIRECTORY + IS_NEWER_THAN + IS_SYMLINK + LESS + LESS_EQUAL + MATCHES + NOT + OR + POLICY + STREQUAL + STRGREATER + STRGREATER_EQUAL + STRLESS + STRLESS_EQUAL + TARGET + TEST + VERSION_EQUAL + VERSION_GREATER + VERSION_GREATER_EQUAL + VERSION_LESS + VERSION_LESS_EQUAL + + + APPEND + ARGS + BYPRODUCTS + COMMAND + COMMAND_EXPAND_LISTS + COMMENT + DEPENDS + DEPFILE + IMPLICIT_DEPENDS + JOB_POOL + MAIN_DEPENDENCY + OUTPUT + POST_BUILD + PRE_BUILD + PRE_LINK + TARGET + USES_TERMINAL + VERBATIM + WORKING_DIRECTORY + + + ALL + APPEND + BYPRODUCTS + COMMAND + COMMAND_EXPAND_LISTS + COMMENT + DEPENDS + DEPFILE + IMPLICIT_DEPENDS + JOB_POOL + SOURCES + USES_TERMINAL + VERBATIM + WORKING_DIRECTORY + + + ALIAS + EXCLUDE_FROM_ALL + GLOBAL + IMPORTED + MACOSX_BUNDLE + WIN32 + + + ALIAS + EXCLUDE_FROM_ALL + GLOBAL + IMPORTED + INTERFACE + MODULE + OBJECT + SHARED + STATIC + UNKNOWN + + + EXCLUDE_FROM_ALL + + + COMMAND + CONFIGURATIONS + NAME + WORKING_DIRECTORY + + + CONFIGURATION + TARGET + + + EXTRA_INCLUDE + FUNCTION + + + BRIEF_DOCS + CACHED_VARIABLE + DIRECTORY + FULL_DOCS + GLOBAL + INHERITED + PROPERTY + SOURCE + TEST + VARIABLE + + + OPTIONAL + + + C + CXX + Fortran + RC + + + ANDROID_MK + APPEND + EXPORT + EXPORT_LINK_INTERFACE_LIBRARIES + FILE + NAMESPACE + TARGETS + + + AFTER + BEFORE + SYSTEM + + + GUID + PLATFORM + TYPE + + + ARCHIVE + BUNDLE + CODE + COMPONENT + CONFIGURATIONS + DESTINATION + DIRECTORY + DIRECTORY_PERMISSIONS + EXCLUDE + EXCLUDE_FROM_ALL + EXPORT + EXPORT_ANDROID_MK + EXPORT_LINK_INTERFACE_LIBRARIES + FILE + FILES + FILES_MATCHING + FILE_PERMISSIONS + FRAMEWORK + INCLUDES + LIBRARY + MESSAGE_NEVER + NAMELINK_COMPONENT + NAMELINK_ONLY + NAMELINK_SKIP + NAMESPACE + OBJECTS + OPTIONAL + PATTERN + PERMISSIONS + PRIVATE_HEADER + PROGRAMS + PUBLIC_HEADER + REGEX + RENAME + RESOURCE + RUNTIME + SCRIPT + TARGETS + USE_SOURCE_PERMISSIONS + + + GROUP_EXECUTE + GROUP_READ + GROUP_WRITE + OWNER_EXECUTE + OWNER_READ + OWNER_WRITE + SETGID + SETUID + WORLD_EXECUTE + WORLD_READ + WORLD_WRITE + + + AFTER + BEFORE + + + debug + general + optimized + + + EXCLUDE + INCLUDE_INTERNALS + READ_WITH_PREFIX + + + DESCRIPTION + HOMEPAGE_URL + LANGUAGES + VERSION + + + ASM + C + CUDA + CXX + Fortran + NONE + RC + + + PROPERTIES + + + PROPERTIES + + + PROPERTIES + + + FILES + PREFIX + REGULAR_EXPRESSION + TREE + + + INTERFACE + PRIVATE + PUBLIC + + + INTERFACE + PRIVATE + PUBLIC + + + c_function_prototypes + c_restrict + c_static_assert + c_std_11 + c_std_90 + c_std_99 + c_variadic_macros + cxx_aggregate_default_initializers + cxx_alias_templates + cxx_alignas + cxx_alignof + cxx_attribute_deprecated + cxx_attributes + cxx_auto_type + cxx_binary_literals + cxx_constexpr + cxx_contextual_conversions + cxx_decltype + cxx_decltype_auto + cxx_decltype_incomplete_return_types + cxx_default_function_template_args + cxx_defaulted_functions + cxx_defaulted_move_initializers + cxx_delegating_constructors + cxx_deleted_functions + cxx_digit_separators + cxx_enum_forward_declarations + cxx_explicit_conversions + cxx_extended_friend_declarations + cxx_extern_templates + cxx_final + cxx_func_identifier + cxx_generalized_initializers + cxx_generic_lambdas + cxx_inheriting_constructors + cxx_inline_namespaces + cxx_lambda_init_captures + cxx_lambdas + cxx_local_type_template_args + cxx_long_long_type + cxx_noexcept + cxx_nonstatic_member_init + cxx_nullptr + cxx_override + cxx_range_for + cxx_raw_string_literals + cxx_reference_qualified_functions + cxx_relaxed_constexpr + cxx_return_type_deduction + cxx_right_angle_brackets + cxx_rvalue_references + cxx_sizeof_member + cxx_static_assert + cxx_std_11 + cxx_std_14 + cxx_std_17 + cxx_std_20 + cxx_std_98 + cxx_strong_enums + cxx_template_template_parameters + cxx_thread_local + cxx_trailing_return_types + cxx_unicode_literals + cxx_uniform_initialization + cxx_unrestricted_unions + cxx_user_literals + cxx_variable_templates + cxx_variadic_macros + cxx_variadic_templates + + + BEFORE + INTERFACE + PRIVATE + PUBLIC + + + BEFORE + INTERFACE + PRIVATE + PUBLIC + SYSTEM + + + BEFORE + INTERFACE + PRIVATE + PUBLIC + + + INTERFACE + PRIVATE + PUBLIC + + + INTERFACE + PRIVATE + PUBLIC + + + INTERFACE + PRIVATE + PUBLIC + + + CMAKE_FLAGS + COMPILE_DEFINITIONS + COPY_FILE + COPY_FILE_ERROR + LINK_LIBRARIES + LINK_OPTIONS + OUTPUT_VARIABLE + RESULT_VAR + SOURCES + + + ARGS + CMAKE_FLAGS + COMPILE_DEFINITIONS + COMPILE_OUTPUT_VARIABLE + COMPILE_RESULT_VAR + LINK_LIBRARIES + LINK_OPTIONS + OUTPUT_VARIABLE + RUN_OUTPUT_VARIABLE + RUN_RESULT_VAR + + + APPEND + BUILD + CAPTURE_CMAKE_ERROR + CONFIGURATION + FLAGS + NUMBER_ERRORS + NUMBER_WARNINGS + PROJECT_NAME + RETURN_VALUE + TARGET + + + APPEND + BUILD + CAPTURE_CMAKE_ERROR + OPTIONS + QUIET + RETURN_VALUE + SOURCE + + + APPEND + BUILD + CAPTURE_CMAKE_ERROR + LABELS + QUIET + RETURN_VALUE + + + APPEND + BUILD + DEFECT_COUNT + END + EXCLUDE + EXCLUDE_FIXTURE + EXCLUDE_FIXTURE_CLEANUP + EXCLUDE_FIXTURE_SETUP + EXCLUDE_LABEL + INCLUDE + INCLUDE_LABEL + PARALLEL_LEVEL + QUIET + RETURN_VALUE + SCHEDULE_RANDOM + START + STOP_TIME + STRIDE + TEST_LOAD + + + NEW_PROCESS + RETURN_VALUE + + + APPEND + QUIET + TRACK + + + BUILD_ID + CDASH_UPLOAD + CDASH_UPLOAD_TYPE + FILES + HTTPHEADER + PARTS + QUIET + RETRY_COUNT + RETRY_DELAY + RETURN_VALUE + SUBMIT_URL + + + APPEND + BUILD + CAPTURE_CMAKE_ERROR + END + EXCLUDE + EXCLUDE_FIXTURE + EXCLUDE_FIXTURE_CLEANUP + EXCLUDE_FIXTURE_SETUP + EXCLUDE_LABEL + INCLUDE + INCLUDE_LABEL + PARALLEL_LEVEL + QUIET + RETURN_VALUE + SCHEDULE_RANDOM + START + STOP_TIME + STRIDE + TEST_LOAD + + + QUIET + RETURN_VALUE + SOURCE + + + CAPTURE_CMAKE_ERROR + FILES + QUIET + + + + ANDROID + APPLE + BORLAND + BUILD_SHARED_LIBS + BUILD_TESTING + CMAKE_ABSOLUTE_DESTINATION_FILES + CMAKE_ANDROID_ANT_ADDITIONAL_OPTIONS + CMAKE_ANDROID_API + CMAKE_ANDROID_API_MIN + CMAKE_ANDROID_ARCH + CMAKE_ANDROID_ARCH_ABI + CMAKE_ANDROID_ARM_MODE + CMAKE_ANDROID_ARM_NEON + CMAKE_ANDROID_ASSETS_DIRECTORIES + CMAKE_ANDROID_GUI + CMAKE_ANDROID_JAR_DEPENDENCIES + CMAKE_ANDROID_JAR_DIRECTORIES + CMAKE_ANDROID_JAVA_SOURCE_DIR + CMAKE_ANDROID_NATIVE_LIB_DEPENDENCIES + CMAKE_ANDROID_NATIVE_LIB_DIRECTORIES + CMAKE_ANDROID_NDK + CMAKE_ANDROID_NDK_DEPRECATED_HEADERS + CMAKE_ANDROID_NDK_TOOLCHAIN_HOST_TAG + CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION + CMAKE_ANDROID_PROCESS_MAX + CMAKE_ANDROID_PROGUARD + CMAKE_ANDROID_PROGUARD_CONFIG_PATH + CMAKE_ANDROID_SECURE_PROPS_PATH + CMAKE_ANDROID_SKIP_ANT_STEP + CMAKE_ANDROID_STANDALONE_TOOLCHAIN + CMAKE_ANDROID_STL_TYPE + CMAKE_ANSI_CXXFLAGS + CMAKE_APPBUNDLE_PATH + CMAKE_AR + CMAKE_ARCHIVE_OUTPUT_DIRECTORY + CMAKE_ARGC + CMAKE_AUTOGEN_ORIGIN_DEPENDS + CMAKE_AUTOGEN_PARALLEL + CMAKE_AUTOGEN_VERBOSE + CMAKE_AUTOMOC + CMAKE_AUTOMOC_DEPEND_FILTERS + CMAKE_AUTOMOC_MOC_OPTIONS + CMAKE_AUTOMOC_RELAXED_MODE + CMAKE_AUTORCC + CMAKE_AUTORCC_OPTIONS + CMAKE_AUTOUIC + CMAKE_AUTOUIC_OPTIONS + CMAKE_AUTOUIC_SEARCH_PATHS + CMAKE_BACKWARDS_COMPATIBILITY + CMAKE_BINARY_DIR + CMAKE_BUILD_RPATH + CMAKE_BUILD_RPATH_USE_ORIGIN + CMAKE_BUILD_TOOL + CMAKE_BUILD_TYPE + CMAKE_BUILD_WITH_INSTALL_NAME_DIR + CMAKE_BUILD_WITH_INSTALL_RPATH + CMAKE_CACHEFILE_DIR + CMAKE_CACHE_MAJOR_VERSION + CMAKE_CACHE_MINOR_VERSION + CMAKE_CACHE_PATCH_VERSION + CMAKE_CFG_INTDIR + CMAKE_CL_64 + CMAKE_CODEBLOCKS_COMPILER_ID + CMAKE_CODEBLOCKS_EXCLUDE_EXTERNAL_FILES + CMAKE_CODELITE_USE_TARGETS + CMAKE_COLOR_MAKEFILE + CMAKE_COMMAND + CMAKE_COMPILER_2005 + CMAKE_COMPILER_IS_GNUCC + CMAKE_COMPILER_IS_GNUCXX + CMAKE_COMPILER_IS_GNUG77 + CMAKE_COMPILE_PDB_OUTPUT_DIRECTORY + CMAKE_CONFIGURATION_TYPES + CMAKE_CROSSCOMPILING + CMAKE_CROSSCOMPILING_EMULATOR + CMAKE_CTEST_COMMAND + CMAKE_CUDA_EXTENSIONS + CMAKE_CUDA_SEPARABLE_COMPILATION + CMAKE_CUDA_STANDARD + CMAKE_CUDA_STANDARD_REQUIRED + CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES + CMAKE_CURRENT_BINARY_DIR + CMAKE_CURRENT_LIST_DIR + CMAKE_CURRENT_LIST_FILE + CMAKE_CURRENT_LIST_LINE + CMAKE_CURRENT_SOURCE_DIR + CMAKE_CXX_COMPILE_FEATURES + CMAKE_CXX_EXTENSIONS + CMAKE_CXX_STANDARD + CMAKE_CXX_STANDARD_REQUIRED + CMAKE_C_COMPILE_FEATURES + CMAKE_C_EXTENSIONS + CMAKE_C_STANDARD + CMAKE_C_STANDARD_REQUIRED + CMAKE_DEBUG_POSTFIX + CMAKE_DEBUG_TARGET_PROPERTIES + CMAKE_DEPENDS_IN_PROJECT_ONLY + CMAKE_DIRECTORY_LABELS + CMAKE_DL_LIBS + CMAKE_DOTNET_TARGET_FRAMEWORK_VERSION + CMAKE_ECLIPSE_GENERATE_LINKED_RESOURCES + CMAKE_ECLIPSE_GENERATE_SOURCE_PROJECT + CMAKE_ECLIPSE_MAKE_ARGUMENTS + CMAKE_ECLIPSE_VERSION + CMAKE_EDIT_COMMAND + CMAKE_ENABLE_EXPORTS + CMAKE_ERROR_DEPRECATED + CMAKE_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION + CMAKE_EXECUTABLE_SUFFIX + CMAKE_EXECUTE_PROCESS_COMMAND_ECHO + CMAKE_EXE_LINKER_FLAGS + CMAKE_EXE_LINKER_FLAGS_INIT + CMAKE_EXPORT_COMPILE_COMMANDS + CMAKE_EXPORT_NO_PACKAGE_REGISTRY + CMAKE_EXPORT_PACKAGE_REGISTRY + CMAKE_EXTRA_GENERATOR + CMAKE_EXTRA_INCLUDE_FILES + CMAKE_EXTRA_SHARED_LIBRARY_SUFFIXES + CMAKE_FIND_APPBUNDLE + CMAKE_FIND_FRAMEWORK + CMAKE_FIND_FRAMEWORK_EXTRA_LOCATIONS + CMAKE_FIND_LIBRARY_CUSTOM_LIB_SUFFIX + CMAKE_FIND_LIBRARY_PREFIXES + CMAKE_FIND_LIBRARY_SUFFIXES + CMAKE_FIND_NO_INSTALL_PREFIX + CMAKE_FIND_PACKAGE_NAME + CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY + CMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY + CMAKE_FIND_PACKAGE_PREFER_CONFIG + CMAKE_FIND_PACKAGE_RESOLVE_SYMLINKS + CMAKE_FIND_PACKAGE_SORT_DIRECTION + CMAKE_FIND_PACKAGE_SORT_ORDER + CMAKE_FIND_PACKAGE_WARN_NO_MODULE + CMAKE_FIND_ROOT_PATH + CMAKE_FIND_ROOT_PATH_MODE_INCLUDE + CMAKE_FIND_ROOT_PATH_MODE_LIBRARY + CMAKE_FIND_ROOT_PATH_MODE_PACKAGE + CMAKE_FIND_ROOT_PATH_MODE_PROGRAM + CMAKE_FOLDER + CMAKE_FRAMEWORK + CMAKE_FRAMEWORK_PATH + CMAKE_Fortran_FORMAT + CMAKE_Fortran_MODDIR_DEFAULT + CMAKE_Fortran_MODDIR_FLAG + CMAKE_Fortran_MODOUT_FLAG + CMAKE_Fortran_MODULE_DIRECTORY + CMAKE_GENERATOR + CMAKE_GENERATOR_INSTANCE + CMAKE_GENERATOR_PLATFORM + CMAKE_GENERATOR_TOOLSET + CMAKE_GLOBAL_AUTOGEN_TARGET + CMAKE_GLOBAL_AUTOGEN_TARGET_NAME + CMAKE_GLOBAL_AUTORCC_TARGET + CMAKE_GLOBAL_AUTORCC_TARGET_NAME + CMAKE_GNUtoMS + CMAKE_HAS_ANSI_STRING_STREAM + CMAKE_HOME_DIRECTORY + CMAKE_HOST_APPLE + CMAKE_HOST_SOLARIS + CMAKE_HOST_SYSTEM + CMAKE_HOST_SYSTEM_NAME + CMAKE_HOST_SYSTEM_PROCESSOR + CMAKE_HOST_SYSTEM_VERSION + CMAKE_HOST_UNIX + CMAKE_HOST_WIN32 + CMAKE_HP_PTHREADS_INIT + CMAKE_IGNORE_PATH + CMAKE_IMPORT_LIBRARY_PREFIX + CMAKE_IMPORT_LIBRARY_SUFFIX + CMAKE_INCLUDE_CURRENT_DIR + CMAKE_INCLUDE_CURRENT_DIR_IN_INTERFACE + CMAKE_INCLUDE_DIRECTORIES_BEFORE + CMAKE_INCLUDE_DIRECTORIES_PROJECT_BEFORE + CMAKE_INCLUDE_PATH + CMAKE_INSTALL_BINDIR + CMAKE_INSTALL_DATADIR + CMAKE_INSTALL_DATAROOTDIR + CMAKE_INSTALL_DEBUG_LIBRARIES + CMAKE_INSTALL_DEBUG_LIBRARIES_ONLY + CMAKE_INSTALL_DEFAULT_COMPONENT_NAME + CMAKE_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS + CMAKE_INSTALL_DOCDIR + CMAKE_INSTALL_FULL_BINDIR + CMAKE_INSTALL_FULL_DATADIR + CMAKE_INSTALL_FULL_DATAROOTDIR + CMAKE_INSTALL_FULL_DOCDIR + CMAKE_INSTALL_FULL_INCLUDEDIR + CMAKE_INSTALL_FULL_INFODIR + CMAKE_INSTALL_FULL_LIBDIR + CMAKE_INSTALL_FULL_LIBEXECDIR + CMAKE_INSTALL_FULL_LOCALEDIR + CMAKE_INSTALL_FULL_LOCALSTATEDIR + CMAKE_INSTALL_FULL_MANDIR + CMAKE_INSTALL_FULL_OLDINCLUDEDIR + CMAKE_INSTALL_FULL_RUNSTATEDIR + CMAKE_INSTALL_FULL_SBINDIR + CMAKE_INSTALL_FULL_SHAREDSTATEDIR + CMAKE_INSTALL_FULL_SYSCONFDIR + CMAKE_INSTALL_INCLUDEDIR + CMAKE_INSTALL_INFODIR + CMAKE_INSTALL_LIBDIR + CMAKE_INSTALL_LIBEXECDIR + CMAKE_INSTALL_LOCALEDIR + CMAKE_INSTALL_LOCALSTATEDIR + CMAKE_INSTALL_MANDIR + CMAKE_INSTALL_MESSAGE + CMAKE_INSTALL_MFC_LIBRARIES + CMAKE_INSTALL_NAME_DIR + CMAKE_INSTALL_OLDINCLUDEDIR + CMAKE_INSTALL_OPENMP_LIBRARIES + CMAKE_INSTALL_PREFIX + CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT + CMAKE_INSTALL_RPATH + CMAKE_INSTALL_RPATH_USE_LINK_PATH + CMAKE_INSTALL_RUNSTATEDIR + CMAKE_INSTALL_SBINDIR + CMAKE_INSTALL_SHAREDSTATEDIR + CMAKE_INSTALL_SYSCONFDIR + CMAKE_INSTALL_SYSTEM_RUNTIME_COMPONENT + CMAKE_INSTALL_SYSTEM_RUNTIME_DESTINATION + CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS + CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_NO_WARNINGS + CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP + CMAKE_INSTALL_UCRT_LIBRARIES + CMAKE_INTERNAL_PLATFORM_ABI + CMAKE_INTERPROCEDURAL_OPTIMIZATION + CMAKE_IOS_INSTALL_COMBINED + CMAKE_JOB_POOLS + CMAKE_JOB_POOL_COMPILE + CMAKE_JOB_POOL_LINK + CMAKE_LIBRARY_ARCHITECTURE + CMAKE_LIBRARY_ARCHITECTURE_REGEX + CMAKE_LIBRARY_OUTPUT_DIRECTORY + CMAKE_LIBRARY_PATH + CMAKE_LIBRARY_PATH_FLAG + CMAKE_LINK_DEF_FILE_FLAG + CMAKE_LINK_DEPENDS_NO_SHARED + CMAKE_LINK_DIRECTORIES_BEFORE + CMAKE_LINK_INTERFACE_LIBRARIES + CMAKE_LINK_LIBRARY_FILE_FLAG + CMAKE_LINK_LIBRARY_FLAG + CMAKE_LINK_LIBRARY_SUFFIX + CMAKE_LINK_SEARCH_END_STATIC + CMAKE_LINK_SEARCH_START_STATIC + CMAKE_LINK_WHAT_YOU_USE + CMAKE_MACOSX_BUNDLE + CMAKE_MACOSX_RPATH + CMAKE_MAJOR_VERSION + CMAKE_MAKE_PROGRAM + CMAKE_MATCH_COUNT + CMAKE_MAXIMUM_RECURSION_DEPTH + CMAKE_MFC_FLAG + CMAKE_MINIMUM_REQUIRED_VERSION + CMAKE_MINOR_VERSION + CMAKE_MODULE_LINKER_FLAGS + CMAKE_MODULE_LINKER_FLAGS_INIT + CMAKE_MODULE_PATH + CMAKE_MSVCIDE_RUN_PATH + CMAKE_MSVC_RUNTIME_LIBRARY + CMAKE_NETRC + CMAKE_NETRC_FILE + CMAKE_NINJA_OUTPUT_PATH_PREFIX + CMAKE_NOT_USING_CONFIG_FLAGS + CMAKE_NO_ANSI_FOR_SCOPE + CMAKE_NO_ANSI_STREAM_HEADERS + CMAKE_NO_ANSI_STRING_STREAM + CMAKE_NO_BUILTIN_CHRPATH + CMAKE_NO_STD_NAMESPACE + CMAKE_NO_SYSTEM_FROM_IMPORTED + CMAKE_OBJECT_PATH_MAX + CMAKE_OSX_ARCHITECTURES + CMAKE_OSX_DEPLOYMENT_TARGET + CMAKE_OSX_SYSROOT + CMAKE_PARENT_LIST_FILE + CMAKE_PATCH_VERSION + CMAKE_PDB_OUTPUT_DIRECTORY + CMAKE_POSITION_INDEPENDENT_CODE + CMAKE_PREFIX_PATH + CMAKE_PROGRAM_PATH + CMAKE_PROJECT_DESCRIPTION + CMAKE_PROJECT_HOMEPAGE_URL + CMAKE_PROJECT_INCLUDE + CMAKE_PROJECT_INCLUDE_BEFORE + CMAKE_PROJECT_NAME + CMAKE_PROJECT_VERSION + CMAKE_PROJECT_VERSION_MAJOR + CMAKE_PROJECT_VERSION_MINOR + CMAKE_PROJECT_VERSION_PATCH + CMAKE_PROJECT_VERSION_TWEAK + CMAKE_RANLIB + CMAKE_REQUIRED_DEFINITIONS + CMAKE_REQUIRED_FLAGS + CMAKE_REQUIRED_INCLUDES + CMAKE_REQUIRED_LIBRARIES + CMAKE_REQUIRED_LINK_OPTIONS + CMAKE_REQUIRED_QUIET + CMAKE_ROOT + CMAKE_RUNTIME_OUTPUT_DIRECTORY + CMAKE_SCRIPT_MODE_FILE + CMAKE_SHARED_LIBRARY_PREFIX + CMAKE_SHARED_LIBRARY_SUFFIX + CMAKE_SHARED_LINKER_FLAGS + CMAKE_SHARED_LINKER_FLAGS_INIT + CMAKE_SHARED_MODULE_PREFIX + CMAKE_SHARED_MODULE_SUFFIX + CMAKE_SIZEOF_VOID_P + CMAKE_SKIP_BUILD_RPATH + CMAKE_SKIP_INSTALL_ALL_DEPENDENCY + CMAKE_SKIP_INSTALL_RPATH + CMAKE_SKIP_INSTALL_RULES + CMAKE_SKIP_RPATH + CMAKE_SOURCE_DIR + CMAKE_STAGING_PREFIX + CMAKE_STATIC_LIBRARY_PREFIX + CMAKE_STATIC_LIBRARY_SUFFIX + CMAKE_STATIC_LINKER_FLAGS + CMAKE_STATIC_LINKER_FLAGS_INIT + CMAKE_SUBLIME_TEXT_2_ENV_SETTINGS + CMAKE_SUBLIME_TEXT_2_EXCLUDE_BUILD_TREE + CMAKE_SUPPRESS_DEVELOPER_ERRORS + CMAKE_SUPPRESS_DEVELOPER_WARNINGS + CMAKE_SUPPRESS_REGENERATION + CMAKE_SWIG_FLAGS + CMAKE_SWIG_OUTDIR + CMAKE_SYSROOT + CMAKE_SYSROOT_COMPILE + CMAKE_SYSROOT_LINK + CMAKE_SYSTEM + CMAKE_SYSTEM_APPBUNDLE_PATH + CMAKE_SYSTEM_FRAMEWORK_PATH + CMAKE_SYSTEM_IGNORE_PATH + CMAKE_SYSTEM_INCLUDE_PATH + CMAKE_SYSTEM_LIBRARY_PATH + CMAKE_SYSTEM_NAME + CMAKE_SYSTEM_PREFIX_PATH + CMAKE_SYSTEM_PROCESSOR + CMAKE_SYSTEM_PROGRAM_PATH + CMAKE_SYSTEM_VERSION + CMAKE_Swift_LANGUAGE_VERSION + CMAKE_Swift_MODULE_DIRECTORY + CMAKE_THREAD_LIBS_INIT + CMAKE_THREAD_PREFER_PTHREAD + CMAKE_TOOLCHAIN_FILE + CMAKE_TRY_COMPILE_CONFIGURATION + CMAKE_TRY_COMPILE_PLATFORM_VARIABLES + CMAKE_TRY_COMPILE_TARGET_TYPE + CMAKE_TWEAK_VERSION + CMAKE_USER_MAKE_RULES_OVERRIDE + CMAKE_USE_PTHREADS_INIT + CMAKE_USE_RELATIVE_PATHS + CMAKE_USE_SPROC_INIT + CMAKE_USE_WIN32_THREADS_INIT + CMAKE_VERBOSE_MAKEFILE + CMAKE_VERSION + CMAKE_VISIBILITY_INLINES_HIDDEN + CMAKE_VS_DEVENV_COMMAND + CMAKE_VS_GLOBALS + CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD + CMAKE_VS_INCLUDE_PACKAGE_TO_DEFAULT_BUILD + CMAKE_VS_INTEL_Fortran_PROJECT_VERSION + CMAKE_VS_JUST_MY_CODE_DEBUGGING + CMAKE_VS_MSBUILD_COMMAND + CMAKE_VS_NsightTegra_VERSION + CMAKE_VS_PLATFORM_NAME + CMAKE_VS_PLATFORM_TOOLSET + CMAKE_VS_PLATFORM_TOOLSET_CUDA + CMAKE_VS_PLATFORM_TOOLSET_HOST_ARCHITECTURE + CMAKE_VS_SDK_EXCLUDE_DIRECTORIES + CMAKE_VS_SDK_EXECUTABLE_DIRECTORIES + CMAKE_VS_SDK_INCLUDE_DIRECTORIES + CMAKE_VS_SDK_LIBRARY_DIRECTORIES + CMAKE_VS_SDK_LIBRARY_WINRT_DIRECTORIES + CMAKE_VS_SDK_REFERENCE_DIRECTORIES + CMAKE_VS_SDK_SOURCE_DIRECTORIES + CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION + CMAKE_WARN_DEPRECATED + CMAKE_WARN_ON_ABSOLUTE_INSTALL_DESTINATION + CMAKE_WIN32_EXECUTABLE + CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS + CMAKE_XCODE_GENERATE_SCHEME + CMAKE_XCODE_GENERATE_TOP_LEVEL_PROJECT_ONLY + CMAKE_XCODE_PLATFORM_TOOLSET + CMAKE_XCODE_SCHEME_ADDRESS_SANITIZER + CMAKE_XCODE_SCHEME_ADDRESS_SANITIZER_USE_AFTER_RETURN + CMAKE_XCODE_SCHEME_DISABLE_MAIN_THREAD_CHECKER + CMAKE_XCODE_SCHEME_DYNAMIC_LIBRARY_LOADS + CMAKE_XCODE_SCHEME_DYNAMIC_LINKER_API_USAGE + CMAKE_XCODE_SCHEME_GUARD_MALLOC + CMAKE_XCODE_SCHEME_MAIN_THREAD_CHECKER_STOP + CMAKE_XCODE_SCHEME_MALLOC_GUARD_EDGES + CMAKE_XCODE_SCHEME_MALLOC_SCRIBBLE + CMAKE_XCODE_SCHEME_MALLOC_STACK + CMAKE_XCODE_SCHEME_THREAD_SANITIZER + CMAKE_XCODE_SCHEME_THREAD_SANITIZER_STOP + CMAKE_XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER + CMAKE_XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER_STOP + CMAKE_XCODE_SCHEME_ZOMBIE_OBJECTS + CPACK_ABSOLUTE_DESTINATION_FILES + CPACK_ARCHIVE_COMPONENT_INSTALL + CPACK_ARCHIVE_FILE_NAME + CPACK_BUILD_SOURCE_DIRS + CPACK_BUNDLE_APPLE_CERT_APP + CPACK_BUNDLE_APPLE_CODESIGN_FILES + CPACK_BUNDLE_APPLE_CODESIGN_PARAMETER + CPACK_BUNDLE_APPLE_ENTITLEMENTS + CPACK_BUNDLE_ICON + CPACK_BUNDLE_NAME + CPACK_BUNDLE_PLIST + CPACK_BUNDLE_STARTUP_COMMAND + CPACK_CMAKE_GENERATOR + CPACK_COMMAND_CODESIGN + CPACK_COMMAND_HDIUTIL + CPACK_COMMAND_PKGBUILD + CPACK_COMMAND_PRODUCTBUILD + CPACK_COMMAND_REZ + CPACK_COMMAND_SETFILE + CPACK_COMPONENTS_ALL + CPACK_COMPONENTS_GROUPING + CPACK_COMPONENT_INCLUDE_TOPLEVEL_DIRECTORY + CPACK_CREATE_DESKTOP_LINKS + CPACK_CYGWIN_BUILD_SCRIPT + CPACK_CYGWIN_PATCH_FILE + CPACK_CYGWIN_PATCH_NUMBER + CPACK_DEBIAN_ARCHIVE_TYPE + CPACK_DEBIAN_COMPRESSION_TYPE + CPACK_DEBIAN_DEBUGINFO_PACKAGE + CPACK_DEBIAN_ENABLE_COMPONENT_DEPENDS + CPACK_DEBIAN_FILE_NAME + CPACK_DEBIAN_PACKAGE_ARCHITECTURE + CPACK_DEBIAN_PACKAGE_BREAKS + CPACK_DEBIAN_PACKAGE_CONFLICTS + CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA + CPACK_DEBIAN_PACKAGE_CONTROL_STRICT_PERMISSION + CPACK_DEBIAN_PACKAGE_DEBUG + CPACK_DEBIAN_PACKAGE_DEPENDS + CPACK_DEBIAN_PACKAGE_DESCRIPTION + CPACK_DEBIAN_PACKAGE_ENHANCES + CPACK_DEBIAN_PACKAGE_EPOCH + CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS + CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS_POLICY + CPACK_DEBIAN_PACKAGE_HOMEPAGE + CPACK_DEBIAN_PACKAGE_MAINTAINER + CPACK_DEBIAN_PACKAGE_NAME + CPACK_DEBIAN_PACKAGE_PREDEPENDS + CPACK_DEBIAN_PACKAGE_PRIORITY + CPACK_DEBIAN_PACKAGE_PROVIDES + CPACK_DEBIAN_PACKAGE_RECOMMENDS + CPACK_DEBIAN_PACKAGE_RELEASE + CPACK_DEBIAN_PACKAGE_REPLACES + CPACK_DEBIAN_PACKAGE_SECTION + CPACK_DEBIAN_PACKAGE_SHLIBDEPS + CPACK_DEBIAN_PACKAGE_SOURCE + CPACK_DEBIAN_PACKAGE_SUGGESTS + CPACK_DEBIAN_PACKAGE_VERSION + CPACK_DEB_COMPONENT_INSTALL + CPACK_DMG_BACKGROUND_IMAGE + CPACK_DMG_DISABLE_APPLICATIONS_SYMLINK + CPACK_DMG_DS_STORE + CPACK_DMG_DS_STORE_SETUP_SCRIPT + CPACK_DMG_FORMAT + CPACK_DMG_SLA_DIR + CPACK_DMG_SLA_LANGUAGES + CPACK_DMG_VOLUME_NAME + CPACK_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION + CPACK_EXT_ENABLE_STAGING + CPACK_EXT_PACKAGE_SCRIPT + CPACK_EXT_REQUESTED_VERSIONS + CPACK_GENERATOR + CPACK_IFW_ADMIN_TARGET_DIRECTORY + CPACK_IFW_BINARYCREATOR_EXECUTABLE + CPACK_IFW_DEVTOOL_EXECUTABLE + CPACK_IFW_DOWNLOAD_ALL + CPACK_IFW_FRAMEWORK_VERSION + CPACK_IFW_INSTALLERBASE_EXECUTABLE + CPACK_IFW_PACKAGES_DIRECTORIES + CPACK_IFW_PACKAGE_ALLOW_NON_ASCII_CHARACTERS + CPACK_IFW_PACKAGE_ALLOW_SPACE_IN_PATH + CPACK_IFW_PACKAGE_BACKGROUND + CPACK_IFW_PACKAGE_BANNER + CPACK_IFW_PACKAGE_CONTROL_SCRIPT + CPACK_IFW_PACKAGE_GROUP + CPACK_IFW_PACKAGE_ICON + CPACK_IFW_PACKAGE_LOGO + CPACK_IFW_PACKAGE_MAINTENANCE_TOOL_INI_FILE + CPACK_IFW_PACKAGE_MAINTENANCE_TOOL_NAME + CPACK_IFW_PACKAGE_NAME + CPACK_IFW_PACKAGE_PUBLISHER + CPACK_IFW_PACKAGE_REMOVE_TARGET_DIR + CPACK_IFW_PACKAGE_RESOURCES + CPACK_IFW_PACKAGE_START_MENU_DIRECTORY + CPACK_IFW_PACKAGE_STYLE_SHEET + CPACK_IFW_PACKAGE_TITLE + CPACK_IFW_PACKAGE_TITLE_COLOR + CPACK_IFW_PACKAGE_WATERMARK + CPACK_IFW_PACKAGE_WINDOW_ICON + CPACK_IFW_PACKAGE_WIZARD_DEFAULT_HEIGHT + CPACK_IFW_PACKAGE_WIZARD_DEFAULT_WIDTH + CPACK_IFW_PACKAGE_WIZARD_STYLE + CPACK_IFW_PRODUCT_URL + CPACK_IFW_REPOGEN_EXECUTABLE + CPACK_IFW_REPOSITORIES_ALL + CPACK_IFW_RESOLVE_DUPLICATE_NAMES + CPACK_IFW_ROOT + CPACK_IFW_TARGET_DIRECTORY + CPACK_IFW_VERBOSE + CPACK_INCLUDE_TOPLEVEL_DIRECTORY + CPACK_INSTALLED_DIRECTORIES + CPACK_INSTALL_CMAKE_PROJECTS + CPACK_INSTALL_COMMANDS + CPACK_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS + CPACK_INSTALL_SCRIPT + CPACK_MONOLITHIC_INSTALL + CPACK_NSIS_COMPRESSOR + CPACK_NSIS_CONTACT + CPACK_NSIS_CREATE_ICONS_EXTRA + CPACK_NSIS_DELETE_ICONS_EXTRA + CPACK_NSIS_DISPLAY_NAME + CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL + CPACK_NSIS_EXECUTABLES_DIRECTORY + CPACK_NSIS_EXTRA_INSTALL_COMMANDS + CPACK_NSIS_EXTRA_PREINSTALL_COMMANDS + CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS + CPACK_NSIS_HELP_LINK + CPACK_NSIS_INSTALLED_ICON_NAME + CPACK_NSIS_INSTALLER_MUI_ICON_CODE + CPACK_NSIS_INSTALL_ROOT + CPACK_NSIS_MENU_LINKS + CPACK_NSIS_MODIFY_PATH + CPACK_NSIS_MUI_FINISHPAGE_RUN + CPACK_NSIS_MUI_ICON + CPACK_NSIS_MUI_UNIICON + CPACK_NSIS_MUI_UNWELCOMEFINISHPAGE_BITMAP + CPACK_NSIS_MUI_WELCOMEFINISHPAGE_BITMAP + CPACK_NSIS_PACKAGE_NAME + CPACK_NSIS_URL_INFO_ABOUT + CPACK_NUGET_COMPONENT_INSTALL + CPACK_NUGET_PACKAGE_AUTHORS + CPACK_NUGET_PACKAGE_COPYRIGHT + CPACK_NUGET_PACKAGE_DEBUG + CPACK_NUGET_PACKAGE_DEPENDENCIES + CPACK_NUGET_PACKAGE_DESCRIPTION + CPACK_NUGET_PACKAGE_DESCRIPTION_SUMMARY + CPACK_NUGET_PACKAGE_HOMEPAGE_URL + CPACK_NUGET_PACKAGE_ICONURL + CPACK_NUGET_PACKAGE_LICENSEURL + CPACK_NUGET_PACKAGE_NAME + CPACK_NUGET_PACKAGE_OWNERS + CPACK_NUGET_PACKAGE_RELEASE_NOTES + CPACK_NUGET_PACKAGE_TAGS + CPACK_NUGET_PACKAGE_TITLE + CPACK_NUGET_PACKAGE_VERSION + CPACK_OSX_PACKAGE_VERSION + CPACK_OUTPUT_CONFIG_FILE + CPACK_PACKAGE_CHECKSUM + CPACK_PACKAGE_CONTACT + CPACK_PACKAGE_DESCRIPTION + CPACK_PACKAGE_DESCRIPTION_FILE + CPACK_PACKAGE_DESCRIPTION_SUMMARY + CPACK_PACKAGE_DIRECTORY + CPACK_PACKAGE_EXECUTABLES + CPACK_PACKAGE_FILE_NAME + CPACK_PACKAGE_HOMEPAGE_URL + CPACK_PACKAGE_ICON + CPACK_PACKAGE_INSTALL_DIRECTORY + CPACK_PACKAGE_INSTALL_REGISTRY_KEY + CPACK_PACKAGE_NAME + CPACK_PACKAGE_VENDOR + CPACK_PACKAGE_VERSION + CPACK_PACKAGE_VERSION_MAJOR + CPACK_PACKAGE_VERSION_MINOR + CPACK_PACKAGE_VERSION_PATCH + CPACK_PACKAGING_INSTALL_PREFIX + CPACK_PKGBUILD_IDENTITY_NAME + CPACK_PKGBUILD_KEYCHAIN_PATH + CPACK_PRODUCTBUILD_IDENTITY_NAME + CPACK_PRODUCTBUILD_KEYCHAIN_PATH + CPACK_PRODUCTBUILD_RESOURCES_DIR + CPACK_PROJECT_CONFIG_FILE + CPACK_RESOURCE_FILE_LICENSE + CPACK_RESOURCE_FILE_README + CPACK_RESOURCE_FILE_WELCOME + CPACK_RPM_ADDITIONAL_MAN_DIRS + CPACK_RPM_BUILDREQUIRES + CPACK_RPM_BUILD_SOURCE_DIRS_PREFIX + CPACK_RPM_CHANGELOG_FILE + CPACK_RPM_COMPONENT_INSTALL + CPACK_RPM_COMPRESSION_TYPE + CPACK_RPM_DEBUGINFO_EXCLUDE_DIRS + CPACK_RPM_DEBUGINFO_EXCLUDE_DIRS_ADDITION + CPACK_RPM_DEBUGINFO_FILE_NAME + CPACK_RPM_DEBUGINFO_PACKAGE + CPACK_RPM_DEBUGINFO_SINGLE_PACKAGE + CPACK_RPM_DEFAULT_DIR_PERMISSIONS + CPACK_RPM_DEFAULT_FILE_PERMISSIONS + CPACK_RPM_DEFAULT_GROUP + CPACK_RPM_DEFAULT_USER + CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST + CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION + CPACK_RPM_FILE_NAME + CPACK_RPM_GENERATE_USER_BINARY_SPECFILE_TEMPLATE + CPACK_RPM_INSTALL_WITH_EXEC + CPACK_RPM_MAIN_COMPONENT + CPACK_RPM_NO_INSTALL_PREFIX_RELOCATION + CPACK_RPM_PACKAGE_ARCHITECTURE + CPACK_RPM_PACKAGE_AUTOPROV + CPACK_RPM_PACKAGE_AUTOREQ + CPACK_RPM_PACKAGE_AUTOREQPROV + CPACK_RPM_PACKAGE_CONFLICTS + CPACK_RPM_PACKAGE_DEBUG + CPACK_RPM_PACKAGE_DESCRIPTION + CPACK_RPM_PACKAGE_EPOCH + CPACK_RPM_PACKAGE_GROUP + CPACK_RPM_PACKAGE_LICENSE + CPACK_RPM_PACKAGE_NAME + CPACK_RPM_PACKAGE_OBSOLETES + CPACK_RPM_PACKAGE_PROVIDES + CPACK_RPM_PACKAGE_RELEASE + CPACK_RPM_PACKAGE_RELEASE_DIST + CPACK_RPM_PACKAGE_RELOCATABLE + CPACK_RPM_PACKAGE_REQUIRES + CPACK_RPM_PACKAGE_REQUIRES_POST + CPACK_RPM_PACKAGE_REQUIRES_POSTUN + CPACK_RPM_PACKAGE_REQUIRES_PRE + CPACK_RPM_PACKAGE_REQUIRES_PREUN + CPACK_RPM_PACKAGE_SOURCES + CPACK_RPM_PACKAGE_SUGGESTS + CPACK_RPM_PACKAGE_SUMMARY + CPACK_RPM_PACKAGE_URL + CPACK_RPM_PACKAGE_VENDOR + CPACK_RPM_PACKAGE_VERSION + CPACK_RPM_POST_INSTALL_SCRIPT_FILE + CPACK_RPM_POST_UNINSTALL_SCRIPT_FILE + CPACK_RPM_PRE_INSTALL_SCRIPT_FILE + CPACK_RPM_PRE_UNINSTALL_SCRIPT_FILE + CPACK_RPM_RELOCATION_PATHS + CPACK_RPM_SOURCE_PKG_BUILD_PARAMS + CPACK_RPM_SOURCE_PKG_PACKAGING_INSTALL_PREFIX + CPACK_RPM_SPEC_INSTALL_POST + CPACK_RPM_SPEC_MORE_DEFINE + CPACK_RPM_USER_BINARY_SPECFILE + CPACK_RPM_USER_FILELIST + CPACK_SET_DESTDIR + CPACK_SOURCE_GENERATOR + CPACK_SOURCE_IGNORE_FILES + CPACK_SOURCE_OUTPUT_CONFIG_FILE + CPACK_SOURCE_PACKAGE_FILE_NAME + CPACK_SOURCE_STRIP_FILES + CPACK_STRIP_FILES + CPACK_SYSTEM_NAME + CPACK_TOPLEVEL_TAG + CPACK_VERBATIM_VARIABLES + CPACK_WARN_ON_ABSOLUTE_INSTALL_DESTINATION + CPACK_WIX_CMAKE_PACKAGE_REGISTRY + CPACK_WIX_CULTURES + CPACK_WIX_EXTENSIONS + CPACK_WIX_EXTRA_OBJECTS + CPACK_WIX_EXTRA_SOURCES + CPACK_WIX_LICENSE_RTF + CPACK_WIX_PATCH_FILE + CPACK_WIX_PRODUCT_GUID + CPACK_WIX_PRODUCT_ICON + CPACK_WIX_PROGRAM_MENU_FOLDER + CPACK_WIX_ROOT + CPACK_WIX_ROOT_FEATURE_DESCRIPTION + CPACK_WIX_ROOT_FEATURE_TITLE + CPACK_WIX_ROOT_FOLDER_ID + CPACK_WIX_SKIP_PROGRAM_FOLDER + CPACK_WIX_TEMPLATE + CPACK_WIX_UI_BANNER + CPACK_WIX_UI_DIALOG + CPACK_WIX_UI_REF + CPACK_WIX_UPGRADE_GUID + CTEST_BINARY_DIRECTORY + CTEST_BUILD_COMMAND + CTEST_BUILD_NAME + CTEST_BZR_COMMAND + CTEST_BZR_UPDATE_OPTIONS + CTEST_CHANGE_ID + CTEST_CHECKOUT_COMMAND + CTEST_CONFIGURATION_TYPE + CTEST_CONFIGURE_COMMAND + CTEST_COVERAGE_COMMAND + CTEST_COVERAGE_EXTRA_FLAGS + CTEST_CURL_OPTIONS + CTEST_CUSTOM_COVERAGE_EXCLUDE + CTEST_CUSTOM_ERROR_EXCEPTION + CTEST_CUSTOM_ERROR_MATCH + CTEST_CUSTOM_ERROR_POST_CONTEXT + CTEST_CUSTOM_ERROR_PRE_CONTEXT + CTEST_CUSTOM_MAXIMUM_FAILED_TEST_OUTPUT_SIZE + CTEST_CUSTOM_MAXIMUM_NUMBER_OF_ERRORS + CTEST_CUSTOM_MAXIMUM_NUMBER_OF_WARNINGS + CTEST_CUSTOM_MAXIMUM_PASSED_TEST_OUTPUT_SIZE + CTEST_CUSTOM_MEMCHECK_IGNORE + CTEST_CUSTOM_POST_MEMCHECK + CTEST_CUSTOM_POST_TEST + CTEST_CUSTOM_PRE_MEMCHECK + CTEST_CUSTOM_PRE_TEST + CTEST_CUSTOM_TEST_IGNORE + CTEST_CUSTOM_WARNING_EXCEPTION + CTEST_CUSTOM_WARNING_MATCH + CTEST_CVS_CHECKOUT + CTEST_CVS_COMMAND + CTEST_CVS_UPDATE_OPTIONS + CTEST_DROP_LOCATION + CTEST_DROP_METHOD + CTEST_DROP_SITE + CTEST_DROP_SITE_CDASH + CTEST_DROP_SITE_PASSWORD + CTEST_DROP_SITE_USER + CTEST_EXTRA_COVERAGE_GLOB + CTEST_GIT_COMMAND + CTEST_GIT_INIT_SUBMODULES + CTEST_GIT_UPDATE_CUSTOM + CTEST_GIT_UPDATE_OPTIONS + CTEST_HG_COMMAND + CTEST_HG_UPDATE_OPTIONS + CTEST_LABELS_FOR_SUBPROJECTS + CTEST_MEMORYCHECK_COMMAND + CTEST_MEMORYCHECK_COMMAND_OPTIONS + CTEST_MEMORYCHECK_SANITIZER_OPTIONS + CTEST_MEMORYCHECK_SUPPRESSIONS_FILE + CTEST_MEMORYCHECK_TYPE + CTEST_NIGHTLY_START_TIME + CTEST_P4_CLIENT + CTEST_P4_COMMAND + CTEST_P4_OPTIONS + CTEST_P4_UPDATE_OPTIONS + CTEST_SCP_COMMAND + CTEST_SITE + CTEST_SOURCE_DIRECTORY + CTEST_SUBMIT_URL + CTEST_SVN_COMMAND + CTEST_SVN_OPTIONS + CTEST_SVN_UPDATE_OPTIONS + CTEST_TEST_LOAD + CTEST_TEST_TIMEOUT + CTEST_TRIGGER_SITE + CTEST_UPDATE_COMMAND + CTEST_UPDATE_OPTIONS + CTEST_UPDATE_VERSION_ONLY + CTEST_UPDATE_VERSION_OVERRIDE + CTEST_USE_LAUNCHERS + CYGWIN + EXECUTABLE_OUTPUT_PATH + ExternalData_BINARY_ROOT + ExternalData_CUSTOM_ERROR + ExternalData_CUSTOM_FILE + ExternalData_CUSTOM_LOCATION + ExternalData_LINK_CONTENT + ExternalData_NO_SYMLINKS + ExternalData_OBJECT_STORES + ExternalData_SERIES_MATCH + ExternalData_SERIES_PARSE + ExternalData_SERIES_PARSE_NUMBER + ExternalData_SERIES_PARSE_PREFIX + ExternalData_SERIES_PARSE_SUFFIX + ExternalData_SOURCE_ROOT + ExternalData_TIMEOUT_ABSOLUTE + ExternalData_TIMEOUT_INACTIVITY + ExternalData_URL_TEMPLATES + GHS-MULTI + GRAPHVIZ_EXECUTABLES + GRAPHVIZ_EXTERNAL_LIBS + GRAPHVIZ_GENERATE_PER_TARGET + GRAPHVIZ_GRAPH_HEADER + GRAPHVIZ_GRAPH_NAME + GRAPHVIZ_GRAPH_TYPE + GRAPHVIZ_IGNORE_TARGETS + GRAPHVIZ_MODULE_LIBS + GRAPHVIZ_NODE_PREFIX + GRAPHVIZ_SHARED_LIBS + GRAPHVIZ_STATIC_LIBS + LIBRARY_OUTPUT_PATH + MINGW + MSVC + MSVC10 + MSVC11 + MSVC12 + MSVC14 + MSVC60 + MSVC70 + MSVC71 + MSVC80 + MSVC90 + MSVC_IDE + MSVC_TOOLSET_VERSION + MSVC_VERSION + PACKAGE_FIND_NAME + PACKAGE_FIND_VERSION + PACKAGE_FIND_VERSION_COUNT + PACKAGE_FIND_VERSION_MAJOR + PACKAGE_FIND_VERSION_MINOR + PACKAGE_FIND_VERSION_PATCH + PACKAGE_FIND_VERSION_TWEAK + PACKAGE_VERSION + PACKAGE_VERSION_COMPATIBLE + PACKAGE_VERSION_EXACT + PACKAGE_VERSION_UNSUITABLE + PKG_CONFIG_EXECUTABLE + PKG_CONFIG_USE_CMAKE_PREFIX_PATH + PKG_CONFIG_VERSION_STRING + PROJECT_BINARY_DIR + PROJECT_DESCRIPTION + PROJECT_HOMEPAGE_URL + PROJECT_NAME + PROJECT_SOURCE_DIR + PROJECT_VERSION + PROJECT_VERSION_MAJOR + PROJECT_VERSION_MINOR + PROJECT_VERSION_PATCH + PROJECT_VERSION_TWEAK + QTIFWDIR + SWIG_OUTFILE_DIR + SWIG_SOURCE_FILE_EXTENSIONS + THREADS_PREFER_PTHREAD_FLAG + UNIX + WIN32 + WINCE + WINDOWS_PHONE + WINDOWS_STORE + XCODE + XCODE_VERSION + + + + CC + CFLAGS + CMAKE_APPBUNDLE_PATH + CMAKE_BUILD_PARALLEL_LEVEL + CMAKE_CONFIG_TYPE + CMAKE_FRAMEWORK_PATH + CMAKE_GENERATOR + CMAKE_GENERATOR_INSTANCE + CMAKE_GENERATOR_PLATFORM + CMAKE_GENERATOR_TOOLSET + CMAKE_MSVCIDE_RUN_PATH + CMAKE_NO_VERBOSE + CMAKE_OSX_ARCHITECTURES + CMAKE_PREFIX_PATH + CSFLAGS + CTEST_INTERACTIVE_DEBUG_MODE + CTEST_OUTPUT_ON_FAILURE + CTEST_PARALLEL_LEVEL + CTEST_PROGRESS_OUTPUT + CTEST_USE_LAUNCHERS_DEFAULT + CUDACXX + CUDAFLAGS + CUDAHOSTCXX + CXX + CXXFLAGS + DASHBOARD_TEST_FROM_CTEST + DESTDIR + FC + FFLAGS + LDFLAGS + MACOSX_DEPLOYMENT_TARGET + PATH + RC + RCFLAGS + SWIFTC + VERBOSE + + + ALLOW_DUPLICATE_CUSTOM_TARGETS + AUTOGEN_SOURCE_GROUP + AUTOGEN_TARGETS_FOLDER + AUTOMOC_SOURCE_GROUP + AUTOMOC_TARGETS_FOLDER + AUTORCC_SOURCE_GROUP + CMAKE_CXX_KNOWN_FEATURES + CMAKE_C_KNOWN_FEATURES + CMAKE_ROLE + DEBUG_CONFIGURATIONS + DISABLED_FEATURES + ECLIPSE_EXTRA_NATURES + ENABLED_FEATURES + ENABLED_LANGUAGES + FIND_LIBRARY_USE_LIB32_PATHS + FIND_LIBRARY_USE_LIB64_PATHS + FIND_LIBRARY_USE_LIBX32_PATHS + FIND_LIBRARY_USE_OPENBSD_VERSIONING + FeatureSummary_DEFAULT_PKG_TYPE + FeatureSummary_PKG_TYPES + FeatureSummary_REQUIRED_PKG_TYPES + GENERATOR_IS_MULTI_CONFIG + GLOBAL_DEPENDS_DEBUG_MODE + GLOBAL_DEPENDS_NO_CYCLES + IN_TRY_COMPILE + JOB_POOLS + PACKAGES_FOUND + PACKAGES_NOT_FOUND + PREDEFINED_TARGETS_FOLDER + REPORT_UNDEFINED_PROPERTIES + RULE_LAUNCH_COMPILE + RULE_LAUNCH_CUSTOM + RULE_LAUNCH_LINK + RULE_MESSAGES + TARGET_ARCHIVES_MAY_BE_SHARED_LIBS + TARGET_MESSAGES + TARGET_SUPPORTS_SHARED_LIBS + USE_FOLDERS + XCODE_EMIT_EFFECTIVE_PLATFORM_NAME + + + ADDITIONAL_CLEAN_FILES + ADDITIONAL_MAKE_CLEAN_FILES + BINARY_DIR + BUILDSYSTEM_TARGETS + CACHE_VARIABLES + CLEAN_NO_CUSTOM + CMAKE_CONFIGURE_DEPENDS + COMPILE_DEFINITIONS + COMPILE_OPTIONS + DEFINITIONS + EXCLUDE_FROM_ALL + IMPLICIT_DEPENDS_INCLUDE_TRANSFORM + INCLUDE_DIRECTORIES + INCLUDE_REGULAR_EXPRESSION + INTERPROCEDURAL_OPTIMIZATION + LABELS + LINK_DIRECTORIES + LINK_OPTIONS + LISTFILE_STACK + MACROS + PARENT_DIRECTORY + RULE_LAUNCH_COMPILE + RULE_LAUNCH_CUSTOM + RULE_LAUNCH_LINK + SOURCE_DIR + SUBDIRECTORIES + TESTS + TEST_INCLUDE_FILE + TEST_INCLUDE_FILES + VARIABLES + VS_STARTUP_PROJECT + + + ADDITIONAL_CLEAN_FILES + ALIASED_TARGET + ANDROID_ANT_ADDITIONAL_OPTIONS + ANDROID_API + ANDROID_API_MIN + ANDROID_ARCH + ANDROID_ASSETS_DIRECTORIES + ANDROID_GUI + ANDROID_JAR_DEPENDENCIES + ANDROID_JAR_DIRECTORIES + ANDROID_JAVA_SOURCE_DIR + ANDROID_NATIVE_LIB_DEPENDENCIES + ANDROID_NATIVE_LIB_DIRECTORIES + ANDROID_PROCESS_MAX + ANDROID_PROGUARD + ANDROID_PROGUARD_CONFIG_PATH + ANDROID_SECURE_PROPS_PATH + ANDROID_SKIP_ANT_STEP + ANDROID_STL_TYPE + ARCHIVE_OUTPUT_DIRECTORY + ARCHIVE_OUTPUT_NAME + AUTOGEN_BUILD_DIR + AUTOGEN_ORIGIN_DEPENDS + AUTOGEN_TARGET_DEPENDS + AUTOMOC + AUTOMOC_COMPILER_PREDEFINES + AUTOMOC_DEPEND_FILTERS + AUTOMOC_EXECUTABLE + AUTOMOC_MACRO_NAMES + AUTOMOC_MOC_OPTIONS + AUTORCC + AUTORCC_EXECUTABLE + AUTORCC_OPTIONS + AUTOUIC + AUTOUIC_EXECUTABLE + AUTOUIC_OPTIONS + AUTOUIC_SEARCH_PATHS + BINARY_DIR + BUILD_RPATH + BUILD_RPATH_USE_ORIGIN + BUILD_WITH_INSTALL_NAME_DIR + BUILD_WITH_INSTALL_RPATH + BUNDLE + BUNDLE_EXTENSION + COMMON_LANGUAGE_RUNTIME + COMPATIBLE_INTERFACE_BOOL + COMPATIBLE_INTERFACE_NUMBER_MAX + COMPATIBLE_INTERFACE_NUMBER_MIN + COMPATIBLE_INTERFACE_STRING + COMPILE_DEFINITIONS + COMPILE_FEATURES + COMPILE_FLAGS + COMPILE_OPTIONS + COMPILE_PDB_NAME + COMPILE_PDB_OUTPUT_DIRECTORY + CROSSCOMPILING_EMULATOR + CUDA_EXTENSIONS + CUDA_PTX_COMPILATION + CUDA_RESOLVE_DEVICE_SYMBOLS + CUDA_SEPARABLE_COMPILATION + CUDA_STANDARD + CUDA_STANDARD_REQUIRED + CXX_EXTENSIONS + CXX_STANDARD + CXX_STANDARD_REQUIRED + C_EXTENSIONS + C_STANDARD + C_STANDARD_REQUIRED + DEFINE_SYMBOL + DEPLOYMENT_ADDITIONAL_FILES + DEPLOYMENT_REMOTE_DIRECTORY + DOTNET_TARGET_FRAMEWORK_VERSION + ENABLE_EXPORTS + EXCLUDE_FROM_ALL + EXCLUDE_FROM_DEFAULT_BUILD + EXPORT_NAME + EXPORT_PROPERTIES + EchoString + FOLDER + FRAMEWORK + FRAMEWORK_VERSION + Fortran_FORMAT + Fortran_MODULE_DIRECTORY + GENERATOR_FILE_NAME + GNUtoMS + HAS_CXX + IMPLICIT_DEPENDS_INCLUDE_TRANSFORM + IMPORTED + IMPORTED_COMMON_LANGUAGE_RUNTIME + IMPORTED_CONFIGURATIONS + IMPORTED_GLOBAL + IMPORTED_IMPLIB + IMPORTED_LIBNAME + IMPORTED_LINK_DEPENDENT_LIBRARIES + IMPORTED_LINK_INTERFACE_LANGUAGES + IMPORTED_LINK_INTERFACE_LIBRARIES + IMPORTED_LINK_INTERFACE_MULTIPLICITY + IMPORTED_LOCATION + IMPORTED_NO_SONAME + IMPORTED_OBJECTS + IMPORTED_SONAME + IMPORT_PREFIX + IMPORT_SUFFIX + INCLUDE_DIRECTORIES + INSTALL_NAME_DIR + INSTALL_RPATH + INSTALL_RPATH_USE_LINK_PATH + INTERFACE_AUTOUIC_OPTIONS + INTERFACE_COMPILE_DEFINITIONS + INTERFACE_COMPILE_FEATURES + INTERFACE_COMPILE_OPTIONS + INTERFACE_INCLUDE_DIRECTORIES + INTERFACE_LINK_DEPENDS + INTERFACE_LINK_DIRECTORIES + INTERFACE_LINK_LIBRARIES + INTERFACE_LINK_OPTIONS + INTERFACE_POSITION_INDEPENDENT_CODE + INTERFACE_SOURCES + INTERFACE_SYSTEM_INCLUDE_DIRECTORIES + INTERPROCEDURAL_OPTIMIZATION + IOS_INSTALL_COMBINED + JOB_POOL_COMPILE + JOB_POOL_LINK + LABELS + LIBRARY_OUTPUT_DIRECTORY + LIBRARY_OUTPUT_NAME + LINKER_LANGUAGE + LINK_DEPENDS + LINK_DEPENDS_NO_SHARED + LINK_DIRECTORIES + LINK_FLAGS + LINK_INTERFACE_LIBRARIES + LINK_INTERFACE_MULTIPLICITY + LINK_LIBRARIES + LINK_OPTIONS + LINK_SEARCH_END_STATIC + LINK_SEARCH_START_STATIC + LINK_WHAT_YOU_USE + LOCATION + MACOSX_BUNDLE + MACOSX_BUNDLE_INFO_PLIST + MACOSX_FRAMEWORK_INFO_PLIST + MACOSX_RPATH + MANUALLY_ADDED_DEPENDENCIES + MSVC_RUNTIME_LIBRARY + NAME + NO_SONAME + NO_SYSTEM_FROM_IMPORTED + OSX_ARCHITECTURES + OUTPUT_NAME + PDB_NAME + PDB_OUTPUT_DIRECTORY + POSITION_INDEPENDENT_CODE + PREFIX + PRIVATE_HEADER + PROJECT_LABEL + PUBLIC_HEADER + RESOURCE + RULE_LAUNCH_COMPILE + RULE_LAUNCH_CUSTOM + RULE_LAUNCH_LINK + RUNTIME_OUTPUT_DIRECTORY + RUNTIME_OUTPUT_NAME + SKIP_BUILD_RPATH + SOURCES + SOURCE_DIR + SOVERSION + STATIC_LIBRARY_FLAGS + STATIC_LIBRARY_OPTIONS + SUFFIX + Swift_DEPENDENCIES_FILE + Swift_MODULE_DIRECTORY + Swift_MODULE_NAME + TYPE + VERSION + VISIBILITY_INLINES_HIDDEN + VS_CONFIGURATION_TYPE + VS_DEBUGGER_COMMAND + VS_DEBUGGER_COMMAND_ARGUMENTS + VS_DEBUGGER_ENVIRONMENT + VS_DEBUGGER_WORKING_DIRECTORY + VS_DESKTOP_EXTENSIONS_VERSION + VS_DOTNET_REFERENCES + VS_DOTNET_REFERENCES_COPY_LOCAL + VS_DOTNET_TARGET_FRAMEWORK_VERSION + VS_GLOBAL_KEYWORD + VS_GLOBAL_PROJECT_TYPES + VS_GLOBAL_ROOTNAMESPACE + VS_IOT_EXTENSIONS_VERSION + VS_IOT_STARTUP_TASK + VS_JUST_MY_CODE_DEBUGGING + VS_KEYWORD + VS_MOBILE_EXTENSIONS_VERSION + VS_NO_SOLUTION_DEPLOY + VS_PACKAGE_REFERENCES + VS_PROJECT_IMPORT + VS_SCC_AUXPATH + VS_SCC_LOCALPATH + VS_SCC_PROJECTNAME + VS_SCC_PROVIDER + VS_SDK_REFERENCES + VS_USER_PROPS + VS_WINDOWS_TARGET_PLATFORM_MIN_VERSION + VS_WINRT_COMPONENT + VS_WINRT_EXTENSIONS + VS_WINRT_REFERENCES + WIN32_EXECUTABLE + WINDOWS_EXPORT_ALL_SYMBOLS + XCODE_EXPLICIT_FILE_TYPE + XCODE_GENERATE_SCHEME + XCODE_PRODUCT_TYPE + XCODE_SCHEME_ADDRESS_SANITIZER + XCODE_SCHEME_ADDRESS_SANITIZER_USE_AFTER_RETURN + XCODE_SCHEME_ARGUMENTS + XCODE_SCHEME_DEBUG_AS_ROOT + XCODE_SCHEME_DISABLE_MAIN_THREAD_CHECKER + XCODE_SCHEME_DYNAMIC_LIBRARY_LOADS + XCODE_SCHEME_DYNAMIC_LINKER_API_USAGE + XCODE_SCHEME_ENVIRONMENT + XCODE_SCHEME_EXECUTABLE + XCODE_SCHEME_GUARD_MALLOC + XCODE_SCHEME_MAIN_THREAD_CHECKER_STOP + XCODE_SCHEME_MALLOC_GUARD_EDGES + XCODE_SCHEME_MALLOC_SCRIBBLE + XCODE_SCHEME_MALLOC_STACK + XCODE_SCHEME_THREAD_SANITIZER + XCODE_SCHEME_THREAD_SANITIZER_STOP + XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER + XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER_STOP + XCODE_SCHEME_ZOMBIE_OBJECTS + XCTEST + + + ABSTRACT + AUTORCC_OPTIONS + AUTOUIC_OPTIONS + COMPILE_DEFINITIONS + COMPILE_FLAGS + COMPILE_OPTIONS + EXTERNAL_OBJECT + Fortran_FORMAT + GENERATED + HEADER_FILE_ONLY + INCLUDE_DIRECTORIES + KEEP_EXTENSION + LABELS + LANGUAGE + LOCATION + MACOSX_PACKAGE_LOCATION + OBJECT_DEPENDS + OBJECT_OUTPUTS + SKIP_AUTOGEN + SKIP_AUTOMOC + SKIP_AUTORCC + SKIP_AUTOUIC + SYMBOLIC + Swift_DEPENDENCIES_FILE + Swift_DIAGNOSTICS_FILE + VS_COPY_TO_OUT_DIR + VS_DEPLOYMENT_CONTENT + VS_DEPLOYMENT_LOCATION + VS_INCLUDE_IN_VSIX + VS_RESOURCE_GENERATOR + VS_SHADER_DISABLE_OPTIMIZATIONS + VS_SHADER_ENABLE_DEBUG + VS_SHADER_ENTRYPOINT + VS_SHADER_FLAGS + VS_SHADER_MODEL + VS_SHADER_OBJECT_FILE_NAME + VS_SHADER_OUTPUT_HEADER_FILE + VS_SHADER_TYPE + VS_SHADER_VARIABLE_NAME + VS_TOOL_OVERRIDE + VS_XAML_TYPE + WRAP_EXCLUDE + XCODE_EXPLICIT_FILE_TYPE + XCODE_FILE_ATTRIBUTES + XCODE_LAST_KNOWN_FILE_TYPE + + + ATTACHED_FILES + ATTACHED_FILES_ON_FAIL + COST + DEPENDS + DISABLED + ENVIRONMENT + FAIL_REGULAR_EXPRESSION + FIXTURES_CLEANUP + FIXTURES_REQUIRED + FIXTURES_SETUP + LABELS + MEASUREMENT + PASS_REGULAR_EXPRESSION + PROCESSORS + PROCESSOR_AFFINITY + REQUIRED_FILES + RESOURCE_LOCK + RUN_SERIAL + SKIP_RETURN_CODE + TIMEOUT + TIMEOUT_AFTER_MATCH + WILL_FAIL + WORKING_DIRECTORY + + + ADVANCED + HELPSTRING + MODIFIED + STRINGS + TYPE + VALUE + + + CPACK_DESKTOP_SHORTCUTS + CPACK_NEVER_OVERWRITE + CPACK_PERMANENT + CPACK_STARTUP_SHORTCUTS + CPACK_START_MENU_SHORTCUTS + CPACK_WIX_ACL + + + + 0 + 1 + BOOL + AND + OR + NOT + STREQUAL + EQUAL + IN_LIST + VERSION_LESS + VERSION_GREATER + VERSION_EQUAL + VERSION_LESS_EQUAL + VERSION_GREATER_EQUAL + TARGET_EXISTS + CONFIG + PLATFORM_ID + C_COMPILER_ID + CXX_COMPILER_ID + CUDA_COMPILER_ID + Fortran_COMPILER_ID + C_COMPILER_VERSION + CXX_COMPILER_VERSION + CUDA_COMPILER_VERSION + Fortran_COMPILER_VERSION + TARGET_POLICY + COMPILE_FEATURES + COMPILE_LANG_AND_ID + COMPILE_LANGUAGE + ANGLE-R + COMMA + SEMICOLON + IF + JOIN + REMOVE_DUPLICATES + FILTER + LOWER_CASE + UPPER_CASE + GENEX_EVAL + TARGET_GENEX_EVAL + TARGET_NAME_IF_EXISTS + TARGET_FILE + TARGET_FILE_BASE_NAME + TARGET_FILE_PREFIX + TARGET_FILE_SUFFIX + TARGET_FILE_NAME + TARGET_FILE_DIR + TARGET_LINKER_FILE + TARGET_LINKER_FILE_BASE_NAME + TARGET_LINKER_FILE_PREFIX + TARGET_LINKER_FILE_SUFFIX + TARGET_LINKER_FILE_NAME + TARGET_LINKER_FILE_DIR + TARGET_SONAME_FILE + TARGET_SONAME_FILE + TARGET_SONAME_FILE_NAME + TARGET_SONAME_FILE_DIR + TARGET_PDB_FILE + TARGET_PDB_FILE_BASE_NAME + TARGET_PDB_FILE_NAME + TARGET_PDB_FILE_DIR + TARGET_BUNDLE_DIR + TARGET_BUNDLE_CONTENT_DIR + TARGET_PROPERTY + INSTALL_PREFIX + TARGET_NAME + LINK_ONLY + INSTALL_INTERFACE + BUILD_INTERFACE + MAKE_C_IDENTIFIER + TARGET_OBJECTS + SHELL_PATH + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/coffee.xml b/src/data/extra/syntax-highlighting/syntax/coffee.xml new file mode 100644 index 00000000..46d3a281 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/coffee.xml @@ -0,0 +1,340 @@ + + + + + + + + false + true + yes + no + on + off + undefined + null + NaN + Infinity + + + + return + break + continue + throw + for + while + until + loop + if + else + unless + switch + when + then + and + or + in + do + of + by + is + isnt + not + typeof + delete + where + super + try + catch + finally + try + catch + finally + constructor + + + + class + extends + new + instanceof + + + + case + default + function + var + void + with + const + let + enum + export + import + native + __hasProp + __extends + __slice + __bind + __indexOf + + + + Object + Number + Boolean + Array + String + RegExp + Function + Date + Math + eval + setInterval + clearInterval + setTimeout + clearTimeout + isFinite + isNaN + parseFloat + parseInt + escape + unescape + console + encodeURI + encodeURIComponent + decodeURI + decodeURIComponent + + + + window + document + navigator + location + history + screen + alert + prompt + + + + process + GLOBAL + require + exports + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/coldfusion.xml b/src/data/extra/syntax-highlighting/syntax/coldfusion.xml new file mode 100644 index 00000000..1875eeec --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/coldfusion.xml @@ -0,0 +1,731 @@ + + + + + + + + + if + else + for + in + while + do + continue + break + with + try + catch + switch + case + new + var + function + return + this + delete + true + false + void + throw + typeof + const + default + + + + + + Anchor + Applet + Area + Array + Boolean + Button + Checkbox + Date + Document + Event + FileUpload + Form + Frame + Function + Hidden + History + Image + Layer + Linke + Location + Math + Navigator + Number + Object + Option + Password + Radio + RegExp + Reset + Screen + Select + String + Submit + Text + Textarea + Window + + + + + + abs + acos + alert + anchor + apply + asin + atan + atan2 + back + blur + call + captureEvents + ceil + charAt + charCodeAt + clearInterval + clearTimeout + click + close + compile + concat + confirm + cos + disableExternalCapture + enableExternalCapture + eval + exec + exp + find + floor + focus + forward + fromCharCode + getDate + getDay + getFullYear + getHours + getMilliseconds + getMinutes + getMonth + getSeconds + getSelection + getTime + getTimezoneOffset + getUTCDate + getUTCDay + getUTCFullYear + getUTCHours + getUTCMilliseconds + getUTCMinutes + getUTCMonth + getUTCSeconds + go + handleEvent + home + indexOf + javaEnabled + join + lastIndexOf + link + load + log + match + max + min + moveAbove + moveBelow + moveBy + moveTo + moveToAbsolute + open + parse + plugins.refresh + pop + pow + preference + print + prompt + push + random + releaseEvents + reload + replace + reset + resizeBy + resizeTo + reverse + round + routeEvent + scrollBy + scrollTo + search + select + setDate + setFullYear + setHours + setInterval + setMilliseconds + setMinutes + setMonth + setSeconds + setTime + setTimeout + setUTCDate + setUTCFullYear + setUTCHours + setUTCMilliseconds + setUTCMinutes + setUTCMonth + setUTCSeconds + shift + sin + slice + sort + splice + split + sqrt + stop + submit + substr + substring + taintEnabled + tan + test + toLocaleString + toLowerCase + toSource + toString + toUpperCase + toUTCString + unshift + unwatch + UTC + valueOf + watch + write + writeln + + + + + + break + case + catch + continue + default + do + else + for + function + if + in + return + switch + try + var + while + + + + + + Abs + ACos + ArrayAppend + ArrayAvg + ArrayClear + ArrayDeleteAt + ArrayInsertAt + ArrayIsEmpty + ArrayLen + ArrayMax + ArrayMin + ArrayNew + ArrayPrepend + ArrayResize + ArraySet + ArraySort + ArraySum + ArraySwap + ArrayToList + Asc + ASin + Atn + BitAnd + BitMaskClear + BitMaskRead + BitMaskSet + BitNot + BitOr + BitSHLN + BitSHRN + BitXor + Ceiling + Chr + CJustify + Compare + CompareNoCase + Cos + CreateDate + CreateDateTime + CreateObject + CreateODBCDate + CreateODBCDateTime + CreateODBCTime + CreateTime + CreateTimeSpan + CreateUUID + DateAdd + DateCompare + DateConvert + DateDiff + DateFormat + DatePart + Day + DayOfWeek + DayOfWeekAsString + DayOfYear + DaysInMonth + DaysInYear + DE + DecimalFormat + DecrementValue + Decrypt + DeleteClientVariable + DirectoryExists + DollarFormat + Duplicate + Encrypt + Evaluate + Exp + ExpandPath + FileExists + Find + FindNoCase + FindOneOf + FirstDayOfMonth + Fix + FormatBaseN + GetAuthUser + GetBaseTagData + GetBaseTagList + GetBaseTemplatePath + GetClientVariablesList + GetCurrentTemplatePath + GetDirectoryFromPath + GetException + GetFileFromPath + GetFunctionList + GetHttpRequestData + GetHttpTimeString + GetK2ServerDocCount + GetK2ServerDocCountLimit + GetLocale + GetMetaData + GetMetricData + GetPageContext + GetProfileSections + GetProfileString + GetServiceSettings + GetTempDirectory + GetTempFile + GetTemplatePath + GetTickCount + GetTimeZoneInfo + GetToken + Hash + Hour + HTMLCodeFormat + HTMLEditFormat + IIf + IncrementValue + InputBaseN + Insert + Int + IsArray + IsBinary + IsBoolean + IsCustomFunction + IsDate + IsDebugMode + IsDefined + IsK2ServerABroker + IsK2ServerDocCountExceeded + IsK2ServerOnline + IsLeapYear + IsNumeric + IsNumericDate + IsObject + IsQuery + IsSimpleValue + IsStruct + IsUserInRole + IsWDDX + IsXmlDoc + IsXmlElement + IsXmlRoot + JavaCast + JSStringFormat + LCase + Left + Len + ListAppend + ListChangeDelims + ListContains + ListContainsNoCase + ListDeleteAt + ListFind + ListFindNoCase + ListFirst + ListGetAt + ListInsertAt + ListLast + ListLen + ListPrepend + ListQualify + ListRest + ListSetAt + ListSort + ListToArray + ListValueCount + ListValueCountNoCase + LJustify + Log + Log10 + LSCurrencyFormat + LSDateFormat + LSEuroCurrencyFormat + LSIsCurrency + LSIsDate + LSIsNumeric + LSNumberFormat + LSParseCurrency + LSParseDateTime + LSParseEuroCurrency + LSParseNumber + LSTimeFormat + LTrim + Max + Mid + Min + Minute + Month + MonthAsString + Now + NumberFormat + ParagraphFormat + ParameterExists + ParseDateTime + Pi + PreserveSingleQuotes + Quarter + QueryAddColumn + QueryAddRow + QueryNew + QuerySetCell + QuotedValueList + Rand + Randomize + RandRange + REFind + REFindNoCase + RemoveChars + RepeatString + Replace + ReplaceList + ReplaceNoCase + REReplace + REReplaceNoCase + Reverse + Right + RJustify + Round + RTrim + Second + SetEncoding + SetLocale + SetProfileString + SetVariable + Sgn + Sin + SpanExcluding + SpanIncluding + Sqr + StripCR + StructAppend + StructClear + StructCopy + StructCount + StructDelete + StructFind + StructFindKey + StructFindValue + StructGet + StructInsert + StructIsEmpty + StructKeyArray + StructKeyExists + StructKeyList + StructNew + StructSort + StructUpdate + Tan + TimeFormat + ToBase64 + ToBinary + ToString + Trim + UCase + URLDecode + URLEncodedFormat + URLSessionFormat + Val + ValueList + Week + WriteOutput + XmlChildPos + XmlElemNew + XmlFormat + XmlNew + XmlParse + XmlSearch + XmlTransform + Year + YesNoFormat + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/commonlisp.xml b/src/data/extra/syntax-highlighting/syntax/commonlisp.xml new file mode 100644 index 00000000..49dd7f56 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/commonlisp.xml @@ -0,0 +1,1177 @@ + + + + + + < + <= + = + > + >= + => + - + / + /= + // + /// + * + ** + *** + + + ++ + +++ + 1- + 1+ + + + defclass + defconstant + defgeneric + define-compiler-macro + define-condition + define-method-combination + define-modify-macro + define-setf-expander + define-setf-method + define-symbol-macro + defmacro + defmethod + defpackage + defparameter + defsetf + deftype + defvar + defun + defstruct + + + abort + abs + access + acons + acos + acosh + add-method + adjoin + adjustable-array-p + adjust-array + allocate-instance + alpha-char-p + alphanumericp + and + append + apply + applyhook + apropos + apropos-list + aref + arithmetic-error + arithmetic-error-operands + arithmetic-error-operation + array + array-dimension + array-dimension-limit + array-dimensions + array-displacement + array-element-type + array-has-fill-pointer-p + array-in-bounds-p + arrayp + array-rank + array-rank-limit + array-row-major-index + array-total-size + array-total-size-limit + ash + asin + asinh + assert + assoc + assoc-if + assoc-if-not + atan + atanh + atom + base-char + base-string + bignum + bit + bit-and + bit-andc1 + bit-andc2 + bit-eqv + bit-ior + bit-nand + bit-nor + bit-not + bit-orc1 + bit-orc2 + bit-vector + bit-vector-p + bit-xor + block + boole + boole-1 + boole-2 + boolean + boole-and + boole-andc1 + boole-andc2 + boole-c1 + boole-c2 + boole-clr + boole-eqv + boole-ior + boole-nand + boole-nor + boole-orc1 + boole-orc2 + boole-set + boole-xor + both-case-p + boundp + break + broadcast-stream + broadcast-stream-streams + built-in-class + butlast + byte + byte-position + byte-size + caaaar + caaadr + caaar + caadar + caaddr + caadr + caar + cadaar + cadadr + cadar + caddar + cadddr + caddr + cadr + call-arguments-limit + call-method + call-next-method + capitalize + car + case + catch + ccase + cdaaar + cdaadr + cdaar + cdadar + cdaddr + cdadr + cdar + cddaar + cddadr + cddar + cdddar + cddddr + cdddr + cddr + cdr + ceiling + cell-error + cell-error-name + cerror + change-class + char + char< + char<= + char= + char> + char>= + char/= + character + characterp + char-bit + char-bits + char-bits-limit + char-code + char-code-limit + char-control-bit + char-downcase + char-equal + char-font + char-font-limit + char-greaterp + char-hyper-bit + char-int + char-lessp + char-meta-bit + char-name + char-not-equal + char-not-greaterp + char-not-lessp + char-super-bit + char-upcase + check-type + cis + class + class-name + class-of + clear-input + clear-output + close + clrhash + code-char + coerce + commonp + compilation-speed + compile + compiled-function + compiled-function-p + compile-file + compile-file-pathname + compiler-let + compiler-macro + compiler-macro-function + complement + complex + complexp + compute-applicable-methods + compute-restarts + concatenate + concatenated-stream + concatenated-stream-streams + cond + condition + conjugate + cons + consp + constantly + constantp + continue + control-error + copy-alist + copy-list + copy-pprint-dispatch + copy-readtable + copy-seq + copy-structure + copy-symbol + copy-tree + cos + cosh + count + count-if + count-if-not + ctypecase + debug + decf + declaim + declaration + declare + decode-float + decode-universal-time + delete + delete-duplicates + delete-file + delete-if + delete-if-not + delete-package + denominator + deposit-field + describe + describe-object + destructuring-bind + digit-char + digit-char-p + directory + directory-namestring + disassemble + division-by-zero + do + do* + do-all-symbols + documentation + do-exeternal-symbols + do-external-symbols + dolist + do-symbols + dotimes + double-float + double-float-epsilon + double-float-negative-epsilon + dpb + dribble + dynamic-extent + ecase + echo-stream + echo-stream-input-stream + echo-stream-output-stream + ed + eighth + elt + encode-universal-time + end-of-file + endp + enough-namestring + ensure-directories-exist + ensure-generic-function + eq + eql + equal + equalp + error + etypecase + eval + evalhook + eval-when + evenp + every + exp + export + expt + extended-char + fboundp + fceiling + fdefinition + ffloor + fifth + file-author + file-error + file-error-pathname + file-length + file-namestring + file-position + file-stream + file-string-length + file-write-date + fill + fill-pointer + find + find-all-symbols + find-class + find-if + find-if-not + find-method + find-package + find-restart + find-symbol + finish-output + first + fixnum + flet + float + float-digits + floating-point-inexact + floating-point-invalid-operation + floating-point-overflow + floating-point-underflow + floatp + float-precision + float-radix + float-sign + floor + fmakunbound + force-output + format + formatter + fourth + fresh-line + fround + ftruncate + ftype + funcall + function + function-keywords + function-lambda-expression + functionp + gbitp + gcd + generic-function + gensym + gentemp + get + get-decoded-time + get-dispatch-macro-character + getf + gethash + get-internal-real-time + get-internal-run-time + get-macro-character + get-output-stream-string + get-properties + get-setf-expansion + get-setf-method + get-universal-time + go + graphic-char-p + handler-bind + handler-case + hash-table + hash-table-count + hash-table-p + hash-table-rehash-size + hash-table-rehash-threshold + hash-table-size + hash-table-test + host-namestring + identity + if + if-exists + ignorable + ignore + ignore-errors + imagpart + import + incf + initialize-instance + inline + in-package + in-package + input-stream-p + inspect + int-char + integer + integer-decode-float + integer-length + integerp + interactive-stream-p + intern + internal-time-units-per-second + intersection + invalid-method-error + invoke-debugger + invoke-restart + invoke-restart-interactively + isqrt + keyword + keywordp + labels + lambda + lambda-list-keywords + lambda-parameters-limit + last + lcm + ldb + ldb-test + ldiff + least-negative-double-float + least-negative-long-float + least-negative-normalized-double-float + least-negative-normalized-long-float + least-negative-normalized-short-float + least-negative-normalized-single-float + least-negative-short-float + least-negative-single-float + least-positive-double-float + least-positive-long-float + least-positive-normalized-double-float + least-positive-normalized-long-float + least-positive-normalized-short-float + least-positive-normalized-single-float + least-positive-short-float + least-positive-single-float + length + let + let* + lisp + lisp-implementation-type + lisp-implementation-version + list + list* + list-all-packages + listen + list-length + listp + load + load-logical-pathname-translations + load-time-value + locally + log + logand + logandc1 + logandc2 + logbitp + logcount + logeqv + logical-pathname + logical-pathname-translations + logior + lognand + lognor + lognot + logorc1 + logorc2 + logtest + logxor + long-float + long-float-epsilon + long-float-negative-epsilon + long-site-name + loop + loop-finish + lower-case-p + machine-instance + machine-type + machine-version + macroexpand + macroexpand-1 + macroexpand-l + macro-function + macrolet + make-array + make-array + make-broadcast-stream + make-char + make-concatenated-stream + make-condition + make-dispatch-macro-character + make-echo-stream + make-hash-table + make-instance + make-instances-obsolete + make-list + make-load-form + make-load-form-saving-slots + make-method + make-package + make-pathname + make-random-state + make-sequence + make-string + make-string-input-stream + make-string-output-stream + make-symbol + make-synonym-stream + make-two-way-stream + makunbound + map + mapc + mapcan + mapcar + mapcon + maphash + map-into + mapl + maplist + mask-field + max + member + member-if + member-if-not + merge + merge-pathname + merge-pathnames + method + method-combination + method-combination-error + method-qualifiers + min + minusp + mismatch + mod + most-negative-double-float + most-negative-fixnum + most-negative-long-float + most-negative-short-float + most-negative-single-float + most-positive-double-float + most-positive-fixnum + most-positive-long-float + most-positive-short-float + most-positive-single-float + muffle-warning + multiple-value-bind + multiple-value-call + multiple-value-list + multiple-value-prog1 + multiple-value-seteq + multiple-value-setq + multiple-values-limit + name-char + namestring + nbutlast + nconc + next-method-p + nil + nintersection + ninth + no-applicable-method + no-next-method + not + notany + notevery + notinline + nreconc + nreverse + nset-difference + nset-exclusive-or + nstring + nstring-capitalize + nstring-downcase + nstring-upcase + nsublis + nsubst + nsubst-if + nsubst-if-not + nsubstitute + nsubstitute-if + nsubstitute-if-not + nth + nthcdr + nth-value + null + number + numberp + numerator + nunion + oddp + open + open-stream-p + optimize + or + otherwise + output-stream-p + package + package-error + package-error-package + package-name + package-nicknames + packagep + package-shadowing-symbols + package-used-by-list + package-use-list + pairlis + parse-error + parse-integer + parse-namestring + pathname + pathname-device + pathname-directory + pathname-host + pathname-match-p + pathname-name + pathnamep + pathname-type + pathname-version + peek-char + phase + pi + plusp + pop + position + position-if + position-if-not + pprint + pprint-dispatch + pprint-exit-if-list-exhausted + pprint-fill + pprint-indent + pprint-linear + pprint-logical-block + pprint-newline + pprint-pop + pprint-tab + pprint-tabular + prin1 + prin1-to-string + princ + princ-to-string + print + print-not-readable + print-not-readable-object + print-object + print-unreadable-object + probe-file + proclaim + prog + prog* + prog1 + prog2 + progn + program-error + progv + provide + psetf + psetq + push + pushnew + putprop + quote + random + random-state + random-state-p + rassoc + rassoc-if + rassoc-if-not + ratio + rational + rationalize + rationalp + read + read-byte + read-char + read-char-no-hang + read-delimited-list + reader-error + read-eval-print + read-from-string + read-line + read-preserving-whitespace + read-sequence + readtable + readtable-case + readtablep + real + realp + realpart + reduce + reinitialize-instance + rem + remf + remhash + remove + remove-duplicates + remove-if + remove-if-not + remove-method + remprop + rename-file + rename-package + replace + require + rest + restart + restart-bind + restart-case + restart-name + return + return-from + revappend + reverse + room + rotatef + round + row-major-aref + rplaca + rplacd + safety + satisfies + sbit + scale-float + schar + search + second + sequence + serious-condition + set + set-char-bit + set-difference + set-dispatch-macro-character + set-exclusive-or + setf + set-macro-character + set-pprint-dispatch + setq + set-syntax-from-char + seventh + shadow + shadowing-import + shared-initialize + shiftf + short-float + short-float-epsilon + short-float-negative-epsilon + short-site-name + signal + signed-byte + signum + simle-condition + simple-array + simple-base-string + simple-bit-vector + simple-bit-vector-p + simple-condition-format-arguments + simple-condition-format-control + simple-error + simple-string + simple-string-p + simple-type-error + simple-vector + simple-vector-p + simple-warning + sin + single-flaot-epsilon + single-float + single-float-epsilon + single-float-negative-epsilon + sinh + sixth + sleep + slot-boundp + slot-exists-p + slot-makunbound + slot-missing + slot-unbound + slot-value + software-type + software-version + some + sort + space + special + special-form-p + special-operator-p + speed + sqrt + stable-sort + standard + standard-char + standard-char-p + standard-class + standard-generic-function + standard-method + standard-object + step + storage-condition + store-value + stream + stream-element-type + stream-error + stream-error-stream + stream-external-format + streamp + streamup + string + string< + string<= + string= + string> + string>= + string/= + string-capitalize + string-char + string-char-p + string-downcase + string-equal + string-greaterp + string-left-trim + string-lessp + string-not-equal + string-not-greaterp + string-not-lessp + stringp + string-right-strim + string-right-trim + string-stream + string-trim + string-upcase + structure + structure-class + structure-object + style-warning + sublim + sublis + subseq + subsetp + subst + subst-if + subst-if-not + substitute + substitute-if + substitute-if-not + subtypep + svref + sxhash + symbol + symbol-function + symbol-macrolet + symbol-name + symbolp + symbol-package + symbol-plist + symbol-value + synonym-stream + synonym-stream-symbol + sys + system + t + tagbody + tailp + tan + tanh + tenth + terpri + the + third + throw + time + trace + translate-logical-pathname + translate-pathname + tree-equal + truename + truncase + truncate + two-way-stream + two-way-stream-input-stream + two-way-stream-output-stream + type + typecase + type-error + type-error-datum + type-error-expected-type + type-of + typep + unbound-slot + unbound-slot-instance + unbound-variable + undefined-function + unexport + unintern + union + unless + unread + unread-char + unsigned-byte + untrace + unuse-package + unwind-protect + update-instance-for-different-class + update-instance-for-redefined-class + upgraded-array-element-type + upgraded-complex-part-type + upper-case-p + use-package + user + user-homedir-pathname + use-value + values + values-list + vector + vectorp + vector-pop + vector-push + vector-push-extend + warn + warning + when + wild-pathname-p + with-accessors + with-compilation-unit + with-condition-restarts + with-hash-table-iterator + with-input-from-string + with-open-file + with-open-stream + with-output-to-string + with-package-iterator + with-simple-restart + with-slots + with-standard-io-syntax + write + write-byte + write-char + write-line + write-sequence + write-string + write-to-string + yes-or-no-p + y-or-n-p + zerop + + + + :abort + :adjustable + :append + :array + :base + :case + :circle + :conc-name + :constructor + :copier + :count + :create + :default + :defaults + :device + :direction + :directory + :displaced-index-offset + :displaced-to + :element-type + :end1 + :end2 + :end + :error + :escape + :external + :from-end + :gensym + :host + :if-does-not-exist:pretty + :if-exists:print + :include:print-function + :index + :inherited + :initial-contents + :initial-element + :initial-offset + :initial-value + :input + :internal:size + :io + :junk-allowed + :key + :length + :level + :named + :name + :new-version + :nicknames + :output-file + :output + :overwrite + :predicate + :preserve-whitespace + :probe + :radix + :read-only + :rehash-size + :rehash-threshold + :rename-and-delete + :rename + :start1 + :start2 + :start + :stream + :supersede + :test + :test-not + :type + :use + :verbose + :version + + + *applyhook* + *break-on-signals* + *break-on-signals* + *break-on-warnings* + *compile-file-pathname* + *compile-file-pathname* + *compile-file-truename* + *compile-file-truename* + *compile-print* + *compile-verbose* + *compile-verbose* + *debugger-hook* + *debug-io* + *default-pathname-defaults* + *error-output* + *evalhook* + *features* + *gensym-counter* + *load-pathname* + *load-print* + *load-truename* + *load-verbose* + *macroexpand-hook* + *modules* + *package* + *print-array* + *print-base* + *print-case* + *print-circle* + *print-escape* + *print-gensym* + *print-length* + *print-level* + *print-lines* + *print-miser-width* + *print-miser-width* + *print-pprint-dispatch* + *print-pprint-dispatch* + *print-pretty* + *print-radix* + *print-readably* + *print-right-margin* + *print-right-margin* + *query-io* + *random-state* + *read-base* + *read-default-float-format* + *read-eval* + *read-suppress* + *readtable* + *standard-input* + *standard-output* + *terminal-io* + *trace-output* + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/component-pascal.xml b/src/data/extra/syntax-highlighting/syntax/component-pascal.xml new file mode 100644 index 00000000..5017e06a --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/component-pascal.xml @@ -0,0 +1,172 @@ + + + + + + + + + + + + + + + + BEGIN + BY + CASE + CLOSE + CONST + DO + ELSE + ELSIF + END + FOR + IF + IMPORT + LOOP + MODULE + NEW + OF + OUT + PROCEDURE + REPEAT + THEN + TO + TYPE + UNTIL + VAR + WHILE + WITH + + + ASSERT + EXIT + HALT + RETURN + + + ANYPTR + ANYREC + ARRAY + BOOLEAN + SHORTCHAR + CHAR + BYTE + SHORTINT + INTEGER + LONGINT + POINTER + RECORD + SHORTREAL + REAL + SET + + + ABSTRACT + EMPTY + EXTENSIBLE + LIMITED + + + ABS + ASH + BITS + CAP + CHR + DEC + ENTIER + EXCL + INC + INCL + LEN + LONG + MAX + MIN + ODD + ORD + SHORT + SIZE + + + FALSE + INF + NIL + TRUE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/context.xml b/src/data/extra/syntax-highlighting/syntax/context.xml new file mode 100644 index 00000000..c1f1296b --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/context.xml @@ -0,0 +1,130 @@ + + + + + + \part + \chapter + \section + \subsection + \subsubsection + \title + \subject + \subsubject + \subsubsubject + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/cpp.xml b/src/data/extra/syntax-highlighting/syntax/cpp.xml new file mode 100644 index 00000000..dfb43c3c --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/cpp.xml @@ -0,0 +1,2030 @@ + + + + +]> + + + + + + emit + signals + slots + foreach + forever + SIGNAL + SLOT + + qApp + + Q_COREAPP_STARTUP_FUNCTION + Q_DECLARE_TR_FUNCTIONS + + QT_NO_NARROWING_CONVERSIONS_IN_CONNECT + Q_CLASSINFO + Q_DISABLE_COPY + Q_EMIT + Q_ENUM + Q_ENUMS + Q_FLAG + Q_FLAGS + Q_GADGET + Q_INTERFACES + Q_INVOKABLE + Q_OBJECT + Q_PROPERTY + Q_REVISION + Q_SET_OBJECT_NAME + Q_SIGNAL + Q_SIGNALS + Q_SLOT + Q_SLOTS + + Q_DECLARE_ASSOCIATIVE_CONTAINER_METATYPE + Q_DECLARE_METATYPE + Q_DECLARE_OPAQUE_POINTER + Q_DECLARE_SEQUENTIAL_CONTAINER_METATYPE + Q_DECLARE_SMART_POINTER_METATYPE + QT_NO_CAST_FROM_BYTEARRAY + QT_NO_CAST_FROM_ASCII + QT_NO_CAST_TO_ASCII + QT_RESTRICTED_CAST_FROM_ASCII + QT_NO_URL_CAST_FROM_STRING + QT_USE_QSTRINGBUILDER + + QBENCHMARK + QBENCHMARK_ONCE + QCOMPARE + QEXPECT_FAIL + QFAIL + QFETCH + QFINDTESTDATA + QSKIP + QTEST + QTEST_APPLESS_MAIN + QTEST_GUILESS_MAIN + QTEST_MAIN + QTRY_COMPARE + QTRY_COMPARE_WITH_TIMEOUT + QTRY_VERIFY2 + QTRY_VERIFY + QTRY_VERIFY2_WITH_TIMEOUT + QTRY_VERIFY_WITH_TIMEOUT + QVERIFY2 + QVERIFY + QVERIFY_EXCEPTION_THROWN + QWARN + + QAXCLASS + QAXFACTORY_BEGIN + QAXFACTORY_DEFAULT + QAXFACTORY_END + QAXFACTORY_EXPORT + QAXTYPE + + QDESIGNER_WIDGET_EXPORT + + QML_DECLARE_TYPE + QML_DECLARE_TYPEINFO + + Q_ARG + Q_RETURN_ARG + + Q_ATOMIC_POINTER_FETCH_AND_ADD_IS_ALWAYS_NATIVE + Q_ATOMIC_POINTER_FETCH_AND_ADD_IS_NOT_NATIVE + Q_ATOMIC_POINTER_FETCH_AND_ADD_IS_SOMETIMES_NATIVE + Q_ATOMIC_POINTER_FETCH_AND_ADD_IS_WAIT_FREE + Q_ATOMIC_POINTER_FETCH_AND_STORE_IS_ALWAYS_NATIVE + Q_ATOMIC_POINTER_FETCH_AND_STORE_IS_NOT_NATIVE + Q_ATOMIC_POINTER_FETCH_AND_STORE_IS_SOMETIMES_NATIVE + Q_ATOMIC_POINTER_FETCH_AND_STORE_IS_WAIT_FREE + Q_ATOMIC_POINTER_TEST_AND_SET_IS_ALWAYS_NATIVE + Q_ATOMIC_POINTER_TEST_AND_SET_IS_NOT_NATIVE + Q_ATOMIC_POINTER_TEST_AND_SET_IS_SOMETIMES_NATIVE + Q_ATOMIC_POINTER_TEST_AND_SET_IS_WAIT_FREE + + Q_DECLARE_EXTENSION_INTERFACE + + Q_DECLARE_INTERFACE + Q_IMPORT_PLUGIN + Q_PLUGIN_METADATA + + Q_NOREPLY + + Q_SCRIPT_DECLARE_QMETAOBJECT + + QWIDGETSIZE_MAX + + QT_ASCII_CAST_WARN + QT_CATCH + QT_COMPILER_SUPPORTS_AVX + QT_COMPILER_SUPPORTS_AVX2 + QT_COMPILER_SUPPORTS_SSE2 + QT_COMPILER_SUPPORTS_SSE3 + QT_COMPILER_SUPPORTS_SSE4_1 + QT_COMPILER_SUPPORTS_SSE4_2 + QT_COMPILER_SUPPORTS_SSSE3 + QT_DEBUG + QT_DEPRECATED + QT_DEPRECATED_CONSTRUCTOR + QT_DEPRECATED_SINCE + QT_DEPRECATED_VARIABLE + QT_DEPRECATED_X + QT_DISABLE_DEPRECATED_BEFORE + QT_EMULATED_ALIGNOF + QT_ENSURE_STACK_ALIGNED_FOR_SSE + QT_FASTCALL + QT_FORWARD_DECLARE_CLASS + QT_FORWARD_DECLARE_STRUCT + QT_IOS_DEPLOYMENT_TARGET_BELOW + QT_IOS_PLATFORM_SDK_EQUAL_OR_ABOVE + QT_LARGEFILE_SUPPORT + QT_LINKED_OPENSSL + QT_MAC_DEPLOYMENT_TARGET_BELOW + QT_MAC_PLATFORM_SDK_EQUAL_OR_ABOVE + QT_MOC_COMPAT + QT_MODULE + QT_NO_ACCESSIBILITY + QT_NO_ANIMATION + QT_NO_BEARERMANAGEMENT + QT_NO_BIG_CODECS + QT_NO_BUTTONGROUP + QT_NO_CALENDARWIDGET + QT_NO_CODECS + QT_NO_COLORDIALOG + QT_NO_COLUMNVIEW + QT_NO_COMBOBOX + QT_NO_COMPLETER + QT_NO_CONTEXTMENU + QT_NO_CRASHHANDLER + QT_NO_CUPS + QT_NO_DATAWIDGETMAPPER + QT_NO_DATESTRING + QT_NO_DATETIMEEDIT + QT_NO_DBUS + QT_NO_DIAL + QT_NO_DIRMODEL + QT_NO_DOCKWIDGET + QT_NO_DRAGANDDROP + QT_NO_ERRORMESSAGE + QT_NO_EXCEPTIONS + QT_NO_FILEDIALOG + QT_NO_FILESYSTEMWATCHER + QT_NO_FONTCOMBOBOX + QT_NO_FONTDIALOG + QT_NO_FSCOMPLETER + QT_NO_FTP + QT_NO_GRAPHICSEFFECT + QT_NO_GRAPHICSVIEW + QT_NO_ICONV + QT_NO_IDENTITYPROXYMODEL + QT_NO_IM + QT_NO_IMAGEFORMATPLUGIN + QT_NO_IMAGEFORMAT_JPEG + QT_NO_INPUTDIALOG + QT_NO_ITEMVIEWS + QT_NO_KEYSEQUENCEEDIT + QT_NO_LISTVIEW + QT_NO_LISTWIDGET + QT_NO_LOCALSERVER + QT_NO_MAINWINDOW + QT_NO_MDIAREA + QT_NO_MENU + QT_NO_MENUBAR + QT_NO_MULTIPROCESS + QT_NO_NETWORKDISKCACHE + QT_NO_NETWORKPROXY + QT_NO_OPENVG + QT_NO_PAINT_DEBUG + QT_NO_PDF + QT_NO_PRINTDIALOG + QT_NO_PRINTER + QT_NO_PRINTPREVIEWDIALOG + QT_NO_PRINTPREVIEWWIDGET + QT_NO_PROCESS + QT_NO_PROGRESSDIALOG + QT_NO_PROXYMODEL + QT_NO_SCROLLAREA + QT_NO_SCROLLBAR + QT_NO_SHAREDMEMORY + QT_NO_SOCKETNOTIFIER + QT_NO_SOCKS5 + QT_NO_SORTFILTERPROXYMODEL + QT_NO_SPINBOX + QT_NO_SPLITTER + QT_NO_STANDARDITEMMODEL + QT_NO_STATEMACHINE + QT_NO_STRINGLISTMODEL + QT_NO_STYLE_FUSION + QT_NO_STYLE_STYLESHEET + QT_NO_STYLE_WINDOWSCE + QT_NO_STYLE_WINDOWSMOBILE + QT_NO_STYLE_WINDOWSVISTA + QT_NO_STYLE_WINDOWSXP + QT_NO_SYNTAXHIGHLIGHTER + QT_NO_SYSTEMSEMAPHORE + QT_NO_TABBAR + QT_NO_TABLEVIEW + QT_NO_TABLEWIDGET + QT_NO_TABWIDGET + QT_NO_TEXTBROWSER + QT_NO_TEXTEDIT + QT_NO_TEXTODFWRITER + QT_NO_TOOLBAR + QT_NO_TOOLBOX + QT_NO_TOOLBUTTON + QT_NO_TREEVIEW + QT_NO_TREEWIDGET + QT_NO_UNDOGROUP + QT_NO_UNDOSTACK + QT_NO_UNDOVIEW + QT_NO_UNSHARABLE_CONTAINERS + QT_NO_WARNINGS + QT_NO_WHATSTHIS + QT_NO_WIZARD + QT_NO_XMLSTREAMREADER + QT_NO_XMLSTREAMWRITER + QT_NO_ZLIB + QT_OSX_DEPLOYMENT_TARGET_BELOW + QT_OSX_PLATFORM_SDK_EQUAL_OR_ABOVE + QT_POINTER_SIZE + QT_PREPEND_NAMESPACE + QT_QPA_DEFAULT_PLATFORM_NAME + QT_REDUCE_RELOCATIONS + QT_REQUIRE_VERSION + QT_RETHROW + QT_SHARED + QT_STATIC + QT_STRINGIFY + QT_STRINGIFY2 + QT_SUPPORTS + QT_TERMINATE_ON_EXCEPTION + QT_THREADSAFE_CLOEXEC + QT_THROW + QT_TRANSLATE_NOOP + QT_TRANSLATE_NOOP3 + QT_TRANSLATE_NOOP3_UTF8 + QT_TRANSLATE_NOOP_UTF8 + QT_TRID_NOOP + QT_TRY + QT_TR_NOOP + QT_TR_NOOP_UTF8 + QT_USE_NAMESPACE + QT_VERSION + QT_VERSION_CHECK + QT_VERSION_MAJOR + QT_VERSION_MINOR + QT_VERSION_PATCH + QT_VERSION_STR + QT_VISIBILITY_AVAILABLE + QT_WIN_CALLBACK + Q_ALIGNOF + Q_ALWAYS_INLINE + Q_ASSERT + Q_ASSERT_X + Q_ASSUME + Q_ATTRIBUTE_FORMAT_PRINTF + Q_BIG_ENDIAN + Q_BYTE_ORDER + Q_CC_BOR + Q_CC_CDS + Q_CC_COMEAU + Q_CC_DEC + Q_CC_EDG + Q_CC_GHS + Q_CC_GNU + Q_CC_HIGHC + Q_CC_HPACC + Q_CC_INTEL + Q_CC_KAI + Q_CC_MIPS + Q_CC_MSVC + Q_CC_OC + Q_CC_PGI + Q_CC_SUN + Q_CC_SYM + Q_CC_USLC + Q_CC_WAT + Q_CHECK_PTR + Q_CHECK_PTRx + Q_CLEANUP_RESOURCE + Q_CONSTRUCTOR_FUNCTION + Q_CONSTRUCTOR_FUNCTION0 + Q_D + Q_DECLARE_PRIVATE + Q_DECLARE_PRIVATE_D + Q_DECLARE_PUBLIC + Q_DECLARE_TYPEINFO + Q_DECL_CONSTEXPR + Q_DECL_EXPORT + Q_DECL_FINAL + Q_DECL_IMPORT + Q_DECL_NOEXCEPT + Q_DECL_NOEXCEPT_EXPR + Q_DECL_NOTHROW + Q_DECL_OVERRIDE + Q_DECL_RELAXED_CONSTEXPR + Q_DESTRUCTOR_FUNCTION + Q_DESTRUCTOR_FUNCTION0 + Q_DISABLE_COPY + Q_DUMMY_COMPARISON_OPERATOR + Q_FALLTHROUGH + Q_FOREACH + Q_FOREVER + Q_FORWARD_DECLARE_CF_TYPE + Q_FORWARD_DECLARE_MUTABLE_CF_TYPE + Q_FORWARD_DECLARE_OBJC_CLASS + Q_FUNC_INFO + Q_INIT_RESOURCE + Q_INLINE_TEMPLATE + Q_INT64_C + Q_LIKELY + Q_LITTLE_ENDIAN + Q_NEVER_INLINE + Q_OF_ELF + Q_OF_MACH_O + Q_OS_AIX + Q_OS_ANDROID + Q_OS_BSD4 + Q_OS_BSDI + Q_OS_CYGWIN + Q_OS_DARWIN + Q_OS_DGUX + Q_OS_DYNIX + Q_OS_FREEBSD + Q_OS_HPUX + Q_OS_HURD + Q_OS_IOS + Q_OS_IRIX + Q_OS_LINUX + Q_OS_LYNX + Q_OS_MAC + Q_OS_MACOS + Q_OS_NETBSD + Q_OS_OPENBSD + Q_OS_OSF + Q_OS_OSX + Q_OS_QNX + Q_OS_RELIANT + Q_OS_SCO + Q_OS_SOLARIS + Q_OS_TVOS + Q_OS_ULTRIX + Q_OS_UNIX + Q_OS_UNIXWARE + Q_OS_WATCHOS + Q_OS_WIN + Q_OS_WIN32 + Q_OS_WIN64 + Q_OS_WINPHONE + Q_OS_WINRT + Q_OUTOFLINE_TEMPLATE + Q_PROCESSOR_ALPHA + Q_PROCESSOR_ARM + Q_PROCESSOR_ARM_V5 + Q_PROCESSOR_ARM_V6 + Q_PROCESSOR_ARM_V7 + Q_PROCESSOR_AVR32 + Q_PROCESSOR_BLACKFIN + Q_PROCESSOR_IA64 + Q_PROCESSOR_MIPS + Q_PROCESSOR_MIPS_32 + Q_PROCESSOR_MIPS_64 + Q_PROCESSOR_MIPS_I + Q_PROCESSOR_MIPS_II + Q_PROCESSOR_MIPS_III + Q_PROCESSOR_MIPS_IV + Q_PROCESSOR_MIPS_V + Q_PROCESSOR_POWER + Q_PROCESSOR_POWER_32 + Q_PROCESSOR_POWER_64 + Q_PROCESSOR_S390 + Q_PROCESSOR_S390_X + Q_PROCESSOR_SH + Q_PROCESSOR_SH_4A + Q_PROCESSOR_SPARC + Q_PROCESSOR_SPARC_V9 + Q_PROCESSOR_X86 + Q_PROCESSOR_X86_32 + Q_PROCESSOR_X86_64 + Q_Q + Q_STATIC_ASSERT + Q_STATIC_ASSERT_PRIVATE_JOIN + Q_STATIC_ASSERT_PRIVATE_JOIN_IMPL + Q_STATIC_ASSERT_X + Q_UINT64_C + Q_UNIMPLEMENTED + Q_UNLIKELY + Q_UNREACHABLE + Q_UNUSED + + Q_COMPLEX_TYPE + Q_PRIMITIVE_TYPE + Q_STATIC_TYPE + Q_MOVABLE_TYPE + Q_DUMMY_TYPE + Q_RELOCATABLE_TYPE + + + + + connect + disconnect + staticMetaObject + tr + trUtf8 + + qFindChildren + qobject_cast + + qAbs + qAsConst + qBound + qConstOverload + qCritical + qDebug + qEnvironmentVariableIntValue + qEnvironmentVariableIsEmpty + qEnvironmentVariableIsSet + qFloatDistance + qFormatLogMessage + qFatal + qFuzzyCompare + qFuzzyIsNull + qInfo + qMove + qInstallMessageHandler + qIsFinite + qIsInf + qIsNaN + qMakePair + qMax + qMin + qNonConstOverload + qOverload + qPrintable + qQNaN + qUtf16Printable + qUtf8Printable + qRound64 + qRound + qSNaN + qSetMessagePattern + qVersion + qWarning + q_check_ptr + qgetenv + qrand + qsrand + qtTrId + qt_set_sequence_auto_mnemonic + + qCountLeadingZeroBits + qCountTrailingZeroBits + qBinaryFind + qCopy + qCopyBackward + qCount + qDeleteAll + qPopulationCount + qEqual + qFill + qFind + qGreater + qLess + qLowerBound + qSort + qStableSort + qSwap + qUpperBound + + qChecksum + qCompress + qUncompress + qsnprintf + qstrcmp + qstrcpy + qstrdup + qstricmp + qstrlen + qstrncmp + qstrncpy + qstrnicmp + qstrnlen + qvsnprintf + + qGlobalQHashSeed + qHash + qHashBits + qHashRange + qHashRangeCommutative + qSetGlobalQHashSeed + + qMetaTypeId + qRegisterMetaType + qRegisterMetaTypeStreamOperators + + qAlpha + qBlue + qGray + qGreen + qPremultiply + qRed + qRgb + qRgba + qRgba + qRgba64 + qUnpremultiply + + qAddPostRoutine + qRemovePostRoutine + + qmlAttachedPropertiesObject + qmlClearTypeRegistrations + qmlContext + qmlEngine + qmlInfo + qmlProtectModule + qmlRegisterExtendedType + qmlRegisterExtendedUncreatableType + qmlRegisterInterface + qmlRegisterRevision + qmlRegisterSingletonType + qmlRegisterType + qmlRegisterTypeNotAvailable + qmlRegisterUncreatableType + + qt_extension + + qDBusRegisterMetaType + qdbus_cast + + + + + QtFunctionPointer + QtMessageHandler + QtMsgType + qint8 + qint16 + qint32 + qint64 + qlonglong + qptrdiff + qreal + quint8 + quint16 + quint32 + quint64 + quintptr + qulonglong + uchar + uint + ulong + ushort + + Q_PID + + QRgb + + qScriptConnect + qScriptDisconnect + qScriptRegisterMetaType + qScriptRegisterSequenceMetaType + qScriptValueFromSequence + qScriptValueToSequence + + + + + + Q3DBars + Q3DCamera + Q3DInputHandler + Q3DLight + Q3DObject + Q3DScatter + Q3DScene + Q3DSurface + Q3DTheme + QAbstract3DAxis + QAbstract3DGraph + QAbstract3DInputHandler + QAbstract3DSeries + QAbstractAnimation + QAbstractAxis + QAbstractBarSeries + QAbstractButton + QAbstractDataProxy + QAbstractEventDispatcher + QAbstractExtensionFactory + QAbstractExtensionManager + QAbstractFormBuilder + QAbstractGraphicsShapeItem + QAbstractItemDelegate + QAbstractItemModel + QAbstractItemView + QAbstractListModel + QAbstractMessageHandler + QAbstractNativeEventFilter + QAbstractNetworkCache + QAbstractOAuth + QAbstractOAuth2 + QAbstractOAuthReplyHandler + QAbstractOpenGLFunctions + QAbstractPlanarVideoBuffer + QAbstractPrintDialog + QAbstractProxyModel + QAbstractScrollArea + QAbstractSeries + QAbstractSlider + QAbstractSocket + QAbstractSpinBox + QAbstractState + QAbstractTableModel + QAbstractTextDocumentLayout + QAbstractTransition + QAbstractUriResolver + QAbstractVideoBuffer + QAbstractVideoFilter + QAbstractVideoSurface + QAbstractXmlNodeModel + QAbstractXmlReceiver + QAccelerometer + QAccelerometerFilter + QAccelerometerReading + QAccessible + QAccessibleActionInterface + QAccessibleEditableTextInterface + QAccessibleEvent + QAccessibleInterface + QAccessibleObject + QAccessiblePlugin + QAccessibleStateChangeEvent + QAccessibleTableCellInterface + QAccessibleTableInterface + QAccessibleTableModelChangeEvent + QAccessibleTextCursorEvent + QAccessibleTextInsertEvent + QAccessibleTextInterface + QAccessibleTextRemoveEvent + QAccessibleTextSelectionEvent + QAccessibleTextUpdateEvent + QAccessibleValueChangeEvent + QAccessibleValueInterface + QAccessibleWidget + QAction + QActionEvent + QActionGroup + QAltimeter + QAltimeterFilter + QAltimeterReading + QAmbientLightFilter + QAmbientLightReading + QAmbientLightSensor + QAmbientTemperatureFilter + QAmbientTemperatureReading + QAmbientTemperatureSensor + QAndroidActivityResultReceiver + QAndroidJniEnvironment + QAndroidJniObject + QAnimationGroup + QApplication + QAreaLegendMarker + QAreaSeries + QAssociativeIterable + QAtomicInt + QAtomicInteger + QAtomicPointer + QAudioBuffer + QAudioDecoder + QAudioDecoderControl + QAudioDeviceInfo + QAudioEncoderSettings + QAudioEncoderSettingsControl + QAudioFormat + QAudioInput + QAudioInputSelectorControl + QAudioOutput + QAudioOutputSelectorControl + QAudioProbe + QAudioRecorder + QAudioRoleControl + QAuthenticator + QAxAggregated + QAxBase + QAxBindable + QAxFactory + QAxObject + QAxScript + QAxScriptEngine + QAxScriptManager + QAxSelect + QAxWidget + QBackingStore + QBar3DSeries + QBarCategoryAxis + QBarDataItem + QBarDataProxy + QBarLegendMarker + QBarSeries + QBarSet + QBasicTimer + QBitArray + QBitmap + QBluetoothAddress + QBluetoothDeviceDiscoveryAgent + QBluetoothDeviceInfo + QBluetoothHostInfo + QBluetoothLocalDevice + QBluetoothServer + QBluetoothServiceDiscoveryAgent + QBluetoothServiceInfo + QBluetoothSocket + QBluetoothTransferManager + QBluetoothTransferReply + QBluetoothTransferRequest + QBluetoothUuid + QBoxLayout + QBoxPlotLegendMarker + QBoxPlotSeries + QBoxSet + QBrush + QBuffer + QButtonGroup + QByteArray + QByteArrayList + QByteArrayMatcher + QCache + QCalendarWidget + QCamera + QCameraCaptureBufferFormatControl + QCameraCaptureDestinationControl + QCameraControl + QCameraExposure + QCameraExposureControl + QCameraFeedbackControl + QCameraFlashControl + QCameraFocus + QCameraFocusControl + QCameraFocusZone + QCameraImageCapture + QCameraImageCaptureControl + QCameraImageProcessing + QCameraImageProcessingControl + QCameraInfo + QCameraInfoControl + QCameraLocksControl + QCameraViewfinder + QCameraViewfinderSettings + QCameraViewfinderSettingsControl + QCameraViewfinderSettingsControl2 + QCameraZoomControl + QCanBus + QCanBusDevice + QCanBusFactory + QCanBusFrame + QCandlestickLegendMarker + QCandlestickModelMapper + QCandlestickSeries + QCandlestickSet + QCategory3DAxis + QCategoryAxis + QChar + QChart + QChartView + QCheckBox + QChildEvent + QClipboard + QCloseEvent + QCocoaNativeContext + QCocoaWindowFunctions + QCollator + QCollatorSortKey + QColor + QColorDialog + QColormap + QColumnView + QComboBox + QCommandLineOption + QCommandLineParser + QCommandLinkButton + QCommonStyle + QCompass + QCompassFilter + QCompassReading + QCompleter + QConicalGradient + QContextMenuEvent + QContiguousCache + QCoreApplication + QCryptographicHash + QCursor + QCustom3DItem + QCustom3DLabel + QCustom3DVolume + QDataStream + QDataWidgetMapper + QDate + QDateEdit + QDateTime + QDateTimeAxis + QDateTimeEdit + QDBusAbstractAdaptor + QDBusAbstractInterface + QDBusArgument + QDBusConnection + QDBusConnectionInterface + QDBusContext + QDBusError + QDBusInterface + QDBusMessage + QDBusObjectPath + QDBusPendingCall + QDBusPendingCallWatcher + QDBusPendingReply + QDBusReply + QDBusServer + QDBusServiceWatcher + QDBusSignature + QDBusUnixFileDescriptor + QDBusVariant + QDBusVirtualObject + QDeadlineTimer + QDebug + QDebugStateSaver + QDesignerActionEditorInterface + QDesignerContainerExtension + QDesignerCustomWidgetCollectionInterface + QDesignerCustomWidgetInterface + QDesignerDynamicPropertySheetExtension + QDesignerFormEditorInterface + QDesignerFormWindowCursorInterface + QDesignerFormWindowInterface + QDesignerFormWindowManagerInterface + QDesignerMemberSheetExtension + QDesignerObjectInspectorInterface + QDesignerPropertyEditorInterface + QDesignerPropertySheetExtension + QDesignerTaskMenuExtension + QDesignerWidgetBoxInterface + QDesktopServices + QDesktopWidget + QDial + QDialog + QDialogButtonBox + QDir + QDirIterator + QDirModel + QDistanceFilter + QDistanceReading + QDistanceSensor + QDnsDomainNameRecord + QDnsHostAddressRecord + QDnsLookup + QDnsMailExchangeRecord + QDnsServiceRecord + QDnsTextRecord + QDockWidget + QDomAttr + QDomCDATASection + QDomCharacterData + QDomComment + QDomDocument + QDomDocumentFragment + QDomDocumentType + QDomElement + QDomEntity + QDomEntityReference + QDomImplementation + QDomNamedNodeMap + QDomNode + QDomNodeList + QDomNotation + QDomProcessingInstruction + QDomText + QDoubleSpinBox + QDoubleValidator + QDrag + QDragEnterEvent + QDragLeaveEvent + QDragMoveEvent + QDropEvent + QDynamicPropertyChangeEvent + QEasingCurve + QEglFSFunctions + QEGLNativeContext + QElapsedTimer + QEnableSharedFromThis + QEnterEvent + QErrorMessage + QEvent + QEventLoop + QEventLoopLocker + QEventTransition + QException + QExplicitlySharedDataPointer + QExposeEvent + QExtensionFactory + QExtensionManager + QFile + QFileDevice + QFileDialog + QFileIconProvider + QFileInfo + QFileOpenEvent + QFileSelector + QFileSystemModel + QFileSystemWatcher + QFinalState + QFlag + QFlags + QFocusEvent + QFocusFrame + QFont + QFontComboBox + QFontDatabase + QFontDialog + QFontInfo + QFontMetrics + QFontMetricsF + QFormBuilder + QFormLayout + QFrame + QFuture + QFutureIterator + QFutureSynchronizer + QFutureWatcher + QGamepad + QGenericArgument + QGenericMatrix + QGenericPlugin + QGenericPluginFactory + QGenericReturnArgument + QGeoAddress + QGeoAreaMonitorInfo + QGeoAreaMonitorSource + QGeoCircle + QGeoCodeReply + QGeoCodingManager + QGeoCodingManagerEngine + QGeoCoordinate + QGeoLocation + QGeoManeuver + QGeoPositionInfo + QGeoPositionInfoSource + QGeoPositionInfoSourceFactory + QGeoRectangle + QGeoRoute + QGeoRouteReply + QGeoRouteRequest + QGeoRouteSegment + QGeoRoutingManager + QGeoRoutingManagerEngine + QGeoSatelliteInfo + QGeoSatelliteInfoSource + QGeoServiceProvider + QGeoServiceProviderFactory + QGeoShape + QGesture + QGestureEvent + QGestureRecognizer + QGLBuffer + QGLColormap + QGLContext + QGLFormat + QGLFramebufferObject + QGLFramebufferObjectFormat + QGLFunctions + QGlobalStatic + QGLPixelBuffer + QGLShader + QGLShaderProgram + QGLWidget + QGLXNativeContext + QGlyphRun + QGradient + QGraphicsAnchor + QGraphicsAnchorLayout + QGraphicsBlurEffect + QGraphicsColorizeEffect + QGraphicsDropShadowEffect + QGraphicsEffect + QGraphicsEllipseItem + QGraphicsGridLayout + QGraphicsItem + QGraphicsItemAnimation + QGraphicsItemGroup + QGraphicsLayout + QGraphicsLayoutItem + QGraphicsLinearLayout + QGraphicsLineItem + QGraphicsObject + QGraphicsOpacityEffect + QGraphicsPathItem + QGraphicsPixmapItem + QGraphicsPolygonItem + QGraphicsProxyWidget + QGraphicsRectItem + QGraphicsRotation + QGraphicsScale + QGraphicsScene + QGraphicsSceneContextMenuEvent + QGraphicsSceneDragDropEvent + QGraphicsSceneEvent + QGraphicsSceneHelpEvent + QGraphicsSceneHoverEvent + QGraphicsSceneMouseEvent + QGraphicsSceneMoveEvent + QGraphicsSceneResizeEvent + QGraphicsSceneWheelEvent + QGraphicsSimpleTextItem + QGraphicsSvgItem + QGraphicsTextItem + QGraphicsTransform + QGraphicsVideoItem + QGraphicsView + QGraphicsWidget + QGridLayout + QGroupBox + QGuiApplication + QGyroscope + QGyroscopeFilter + QGyroscopeReading + QHash + QHashIterator + QHBarModelMapper + QHBoxLayout + QHBoxPlotModelMapper + QHCandlestickModelMapper + QHeaderView + QHeightMapSurfaceDataProxy + QHelpContentItem + QHelpContentModel + QHelpContentWidget + QHelpEngine + QHelpEngineCore + QHelpEvent + QHelpIndexModel + QHelpIndexWidget + QHelpSearchEngine + QHelpSearchQuery + QHelpSearchQueryWidget + QHelpSearchResultWidget + QHideEvent + QHistoryState + QHolsterFilter + QHolsterReading + QHolsterSensor + QHorizontalBarSeries + QHorizontalPercentBarSeries + QHorizontalStackedBarSeries + QHostAddress + QHostInfo + QHoverEvent + QHPieModelMapper + QHttpMultiPart + QHttpPart + QHXYModelMapper + QIcon + QIconDragEvent + QIconEngine + QIconEnginePlugin + QIdentityProxyModel + QImage + QImageEncoderControl + QImageEncoderSettings + QImageIOHandler + QImageIOPlugin + QImageReader + QImageWriter + QInAppProduct + QInAppStore + QInAppTransaction + QInputDialog + QInputEvent + QInputMethod + QInputMethodEvent + QInputMethodQueryEvent + QIntValidator + QIODevice + QIRProximityFilter + QIRProximityReading + QIRProximitySensor + QItemDelegate + QItemEditorCreator + QItemEditorCreatorBase + QItemEditorFactory + QItemModelBarDataProxy + QItemModelScatterDataProxy + QItemModelSurfaceDataProxy + QItemSelection + QItemSelectionModel + QItemSelectionRange + QJSEngine + QJsonArray + QJsonDocument + QJsonObject + QJsonParseError + QJsonValue + QJSValue + QJSValueIterator + QKeyEvent + QKeyEventTransition + QKeySequence + QKeySequenceEdit + QLabel + QLatin1Char + QLatin1String + QLayout + QLayoutItem + QLCDNumber + QLegend + QLegendMarker + QLibrary + QLibraryInfo + QLightFilter + QLightReading + QLightSensor + QLine + QLinearGradient + QLineEdit + QLineF + QLineSeries + QLinkedList + QLinkedListIterator + QList + QListIterator + QListView + QListWidget + QListWidgetItem + QLocale + QLocalServer + QLocalSocket + QLockFile + QLoggingCategory + QLogValue3DAxisFormatter + QLogValueAxis + QLowEnergyAdvertisingData + QLowEnergyAdvertisingParameters + QLowEnergyCharacteristic + QLowEnergyCharacteristicData + QLowEnergyConnectionParameters + QLowEnergyController + QLowEnergyDescriptor + QLowEnergyDescriptorData + QLowEnergyService + QLowEnergyServiceData + QMacCocoaViewContainer + QMacNativeWidget + QMacPasteboardMime + QMacToolBar + QMacToolBarItem + QMagnetometer + QMagnetometerFilter + QMagnetometerReading + QMainWindow + QMap + QMapIterator + QMargins + QMarginsF + QMaskGenerator + QMatrix + QMatrix4x4 + QMdiArea + QMdiSubWindow + QMediaAudioProbeControl + QMediaAvailabilityControl + QMediaBindableInterface + QMediaContainerControl + QMediaContent + QMediaControl + QMediaGaplessPlaybackControl + QMediaNetworkAccessControl + QMediaObject + QMediaPlayer + QMediaPlayerControl + QMediaPlaylist + QMediaRecorder + QMediaRecorderControl + QMediaResource + QMediaService + QMediaServiceCameraInfoInterface + QMediaServiceDefaultDeviceInterface + QMediaServiceFeaturesInterface + QMediaServiceProviderPlugin + QMediaServiceSupportedDevicesInterface + QMediaServiceSupportedFormatsInterface + QMediaStreamsControl + QMediaTimeInterval + QMediaTimeRange + QMediaVideoProbeControl + QMenu + QMenuBar + QMessageAuthenticationCode + QMessageBox + QMessageLogContext + QMessageLogger + QMetaClassInfo + QMetaDataReaderControl + QMetaDataWriterControl + QMetaEnum + QMetaMethod + QMetaObject + QMetaProperty + QMetaType + QMimeData + QMimeDatabase + QMimeType + QModbusClient + QModbusDataUnit + QModbusDevice + QModbusDeviceIdentification + QModbusExceptionResponse + QModbusPdu + QModbusReply + QModbusRequest + QModbusResponse + QModbusRtuSerialMaster + QModbusRtuSerialSlave + QModbusServer + QModbusTcpClient + QModbusTcpServer + QModelIndex + QMouseEvent + QMouseEventTransition + QMoveEvent + QMovie + QMultiHash + QMultiMap + QMutableHashIterator + QMutableLinkedListIterator + QMutableListIterator + QMutableMapIterator + QMutableSetIterator + QMutableVectorIterator + QMutex + QMutexLocker + QNativeGestureEvent + QNdefFilter + QNdefMessage + QNdefNfcSmartPosterRecord + QNdefNfcTextRecord + QNdefNfcUriRecord + QNdefRecord + QNearFieldManager + QNearFieldShareManager + QNearFieldShareTarget + QNearFieldTarget + QNetworkAccessManager + QNetworkAddressEntry + QNetworkCacheMetaData + QNetworkConfiguration + QNetworkConfigurationManager + QNetworkCookie + QNetworkCookieJar + QNetworkDatagram + QNetworkDiskCache + QNetworkInterface + QNetworkProxy + QNetworkProxyFactory + QNetworkProxyQuery + QNetworkReply + QNetworkRequest + QNetworkSession + QNmeaPositionInfoSource + QObject + QObjectCleanupHandler + QOffscreenSurface + QOpenGLBuffer + QOpenGLContext + QOpenGLContextGroup + QOpenGLDebugLogger + QOpenGLDebugMessage + QOpenGLExtraFunctions + QOpenGLFramebufferObject + QOpenGLFramebufferObjectFormat + QOpenGLFunctions + QOpenGLFunctions_1_0 + QOpenGLFunctions_1_1 + QOpenGLFunctions_1_2 + QOpenGLFunctions_1_3 + QOpenGLFunctions_1_4 + QOpenGLFunctions_1_5 + QOpenGLFunctions_2_0 + QOpenGLFunctions_2_1 + QOpenGLFunctions_3_0 + QOpenGLFunctions_3_1 + QOpenGLFunctions_3_2_Compatibility + QOpenGLFunctions_3_2_Core + QOpenGLFunctions_3_3_Compatibility + QOpenGLFunctions_3_3_Core + QOpenGLFunctions_4_0_Compatibility + QOpenGLFunctions_4_0_Core + QOpenGLFunctions_4_1_Compatibility + QOpenGLFunctions_4_1_Core + QOpenGLFunctions_4_2_Compatibility + QOpenGLFunctions_4_2_Core + QOpenGLFunctions_4_3_Compatibility + QOpenGLFunctions_4_3_Core + QOpenGLFunctions_4_4_Compatibility + QOpenGLFunctions_4_4_Core + QOpenGLFunctions_4_5_Compatibility + QOpenGLFunctions_4_5_Core + QOpenGLFunctions_ES2 + QOpenGLPaintDevice + QOpenGLPixelTransferOptions + QOpenGLShader + QOpenGLShaderProgram + QOpenGLTexture + QOpenGLTextureBlitter + QOpenGLTimeMonitor + QOpenGLTimerQuery + QOpenGLVersionProfile + QOpenGLVertexArrayObject + QOpenGLWidget + QOpenGLWindow + QOrientationFilter + QOrientationReading + QOrientationSensor + QPagedPaintDevice + QPageLayout + QPageSetupDialog + QPageSize + QPaintDevice + QPaintDeviceWindow + QPaintEngine + QPaintEngineState + QPainter + QPainterPath + QPainterPathStroker + QPaintEvent + QPair + QPalette + QPanGesture + QParallelAnimationGroup + QPauseAnimation + QPdfWriter + QPen + QPercentBarSeries + QPersistentModelIndex + QPicture + QPictureFormatPlugin + QPictureIO + QPieLegendMarker + QPieSeries + QPieSlice + QPinchGesture + QPixelFormat + QPixmap + QPixmapCache + QPlace + QPlaceAttribute + QPlaceCategory + QPlaceContactDetail + QPlaceContent + QPlaceContentReply + QPlaceContentRequest + QPlaceDetailsReply + QPlaceEditorial + QPlaceIcon + QPlaceIdReply + QPlaceImage + QPlaceManager + QPlaceManagerEngine + QPlaceMatchReply + QPlaceMatchRequest + QPlaceProposedSearchResult + QPlaceRatings + QPlaceReply + QPlaceResult + QPlaceReview + QPlaceSearchReply + QPlaceSearchRequest + QPlaceSearchResult + QPlaceSearchSuggestionReply + QPlaceSupplier + QPlaceUser + QPlainTextDocumentLayout + QPlainTextEdit + QPlatformGraphicsBuffer + QPlatformSurfaceEvent + QPlatformSystemTrayIcon + QPluginLoader + QPoint + QPointer + QPointF + QPointingDeviceUniqueId + QPolarChart + QPolygon + QPolygonF + QPressureFilter + QPressureReading + QPressureSensor + QPrintDialog + QPrintEngine + QPrinter + QPrinterInfo + QPrintPreviewDialog + QPrintPreviewWidget + QProcess + QProcessEnvironment + QProgressBar + QProgressDialog + QPropertyAnimation + QProximityFilter + QProximityReading + QProximitySensor + QProxyStyle + QPushButton + QQmlAbstractUrlInterceptor + QQmlApplicationEngine + QQmlComponent + QQmlContext + QQmlEngine + QQmlError + QQmlExpression + QQmlExtensionPlugin + QQmlFileSelector + QQmlImageProviderBase + QQmlIncubationController + QQmlIncubator + QQmlListProperty + QQmlListReference + QQmlNdefRecord + QQmlNetworkAccessManagerFactory + QQmlParserStatus + QQmlProperty + QQmlPropertyMap + QQmlPropertyValueSource + QQmlScriptString + QQuaternion + QQueue + QQuickAsyncImageProvider + QQuickFramebufferObject + QQuickImageProvider + QQuickImageResponse + QQuickItem + QQuickItemGrabResult + QQuickPaintedItem + QQuickRenderControl + QQuickStyle + QQuickTextDocument + QQuickTextureFactory + QQuickView + QQuickWebEngineProfile + QQuickWidget + QQuickWindow + QRadialGradient + QRadioButton + QRadioData + QRadioDataControl + QRadioTuner + QRadioTunerControl + QRasterPaintEngine + QRasterWindow + QRawFont + QReadLocker + QReadWriteLock + QRect + QRectF + QRegExp + QRegExpValidator + QRegion + QRegularExpression + QRegularExpressionMatch + QRegularExpressionMatchIterator + QRegularExpressionValidator + QResizeEvent + QResource + QRgba64 + QRotationFilter + QRotationReading + QRotationSensor + QRubberBand + QRunnable + QSaveFile + QScatter3DSeries + QScatterDataItem + QScatterDataProxy + QScatterSeries + QScopedArrayPointer + QScopedPointer + QScopedValueRollback + QScreen + QScriptable + QScriptClass + QScriptClassPropertyIterator + QScriptContext + QScriptContextInfo + QScriptEngine + QScriptEngineAgent + QScriptEngineDebugger + QScriptExtensionPlugin + QScriptProgram + QScriptString + QScriptSyntaxCheckResult + QScriptValue + QScriptValueIterator + QScrollArea + QScrollBar + QScroller + QScrollerProperties + QScrollEvent + QScrollPrepareEvent + QSctpServer + QSctpSocket + QScxmlCompiler + QScxmlCppDataModel + QScxmlDataModel + QScxmlDynamicScxmlServiceFactory + QScxmlEcmaScriptDataModel + QScxmlError + QScxmlEvent + QScxmlInvokableService + QScxmlInvokableServiceFactory + QScxmlNullDataModel + QScxmlStateMachine + QScxmlStaticScxmlServiceFactory + QScxmlTableData + QSemaphore + QSensor + QSensorBackend + QSensorBackendFactory + QSensorChangesInterface + QSensorFilter + QSensorGesture + QSensorGestureManager + QSensorGesturePluginInterface + QSensorGestureRecognizer + QSensorManager + QSensorPluginInterface + QSensorReading + QSequentialAnimationGroup + QSequentialIterable + QSerialPort + QSerialPortInfo + QSessionManager + QSet + QSetIterator + QSettings + QSGAbstractRenderer + QSGBasicGeometryNode + QSGClipNode + QSGDynamicTexture + QSGEngine + QSGFlatColorMaterial + QSGGeometry + QSGGeometryNode + QSGImageNode + QSGMaterial + QSGMaterialShader + QSGMaterialType + QSGNode + QSGOpacityNode + QSGOpaqueTextureMaterial + QSGRectangleNode + QSGRendererInterface + QSGRenderNode + QSGSimpleMaterial + QSGSimpleMaterialShader + QSGSimpleRectNode + QSGSimpleTextureNode + QSGTexture + QSGTextureMaterial + QSGTextureProvider + QSGTransformNode + QSGVertexColorMaterial + QSharedData + QSharedDataPointer + QSharedMemory + QSharedPointer + QShortcut + QShortcutEvent + QShowEvent + QSignalBlocker + QSignalMapper + QSignalSpy + QSignalTransition + QSimpleXmlNodeModel + QSize + QSizeF + QSizeGrip + QSizePolicy + QSlider + QSocketNotifier + QSortFilterProxyModel + QSound + QSoundEffect + QSourceLocation + QSpacerItem + QSpinBox + QSplashScreen + QSplineSeries + QSplitter + QSplitterHandle + QSqlDatabase + QSqlDriver + QSqlDriverCreator + QSqlDriverCreatorBase + QSqlDriverPlugin + QSqlError + QSqlField + QSqlIndex + QSqlQuery + QSqlQueryModel + QSqlRecord + QSqlRelation + QSqlRelationalDelegate + QSqlRelationalTableModel + QSqlResult + QSqlTableModel + QSslCertificate + QSslCertificateExtension + QSslCipher + QSslConfiguration + QSslDiffieHellmanParameters + QSslEllipticCurve + QSslError + QSslKey + QSslPreSharedKeyAuthenticator + QSslSocket + QStack + QStackedBarSeries + QStackedLayout + QStackedWidget + QStandardItem + QStandardItemEditorCreator + QStandardItemModel + QStandardPaths + QState + QStateMachine + QStaticPlugin + QStaticText + QStatusBar + QStatusTipEvent + QStorageInfo + QString + QStringList + QStringListModel + QStringMatcher + QStringRef + QStyle + QStyledItemDelegate + QStyleFactory + QStyleHintReturn + QStyleHintReturnMask + QStyleHintReturnVariant + QStyleHints + QStyleOption + QStyleOptionButton + QStyleOptionComboBox + QStyleOptionComplex + QStyleOptionDockWidget + QStyleOptionFocusRect + QStyleOptionFrame + QStyleOptionGraphicsItem + QStyleOptionGroupBox + QStyleOptionHeader + QStyleOptionMenuItem + QStyleOptionProgressBar + QStyleOptionRubberBand + QStyleOptionSizeGrip + QStyleOptionSlider + QStyleOptionSpinBox + QStyleOptionTab + QStyleOptionTabBarBase + QStyleOptionTabWidgetFrame + QStyleOptionTitleBar + QStyleOptionToolBar + QStyleOptionToolBox + QStyleOptionToolButton + QStyleOptionViewItem + QStylePainter + QStylePlugin + QSupportedWritingSystems + QSurface + QSurface3DSeries + QSurfaceDataItem + QSurfaceDataProxy + QSurfaceFormat + QSvgGenerator + QSvgRenderer + QSvgWidget + QSwipeGesture + QSyntaxHighlighter + QSysInfo + QSystemSemaphore + QSystemTrayIcon + QTabBar + QTabletEvent + QTableView + QTableWidget + QTableWidgetItem + QTableWidgetSelectionRange + QTabWidget + QTapAndHoldGesture + QTapFilter + QTapGesture + QTapReading + QTapSensor + QTcpServer + QTcpSocket + QTemporaryDir + QTemporaryFile + QTestEventList + QTextBlock + QTextBlockFormat + QTextBlockGroup + QTextBlockUserData + QTextBoundaryFinder + QTextBrowser + QTextCharFormat + QTextCodec + QTextCursor + QTextDecoder + QTextDocument + QTextDocumentFragment + QTextDocumentWriter + QTextEdit + QTextEncoder + QTextFormat + QTextFragment + QTextFrame + QTextFrameFormat + QTextImageFormat + QTextInlineObject + QTextItem + QTextLayout + QTextLength + QTextLine + QTextList + QTextListFormat + QTextObject + QTextObjectInterface + QTextOption + QTextStream + QTextTable + QTextTableCell + QTextTableCellFormat + QTextTableFormat + QTextToSpeech + QTextToSpeechPlugin + QThread + QThreadPool + QThreadStorage + QTileRules + QTiltFilter + QTiltReading + QTiltSensor + QTime + QTimeEdit + QTimeLine + QTimer + QTimerEvent + QTimeZone + QToolBar + QToolBox + QToolButton + QToolTip + QTouch3DInputHandler + QTouchDevice + QTouchEvent + QTransform + QTranslator + QTreeView + QTreeWidget + QTreeWidgetItem + QTreeWidgetItemIterator + QUdpSocket + QUiLoader + QUndoCommand + QUndoGroup + QUndoStack + QUndoView + QUnhandledException + QUrl + QUrlQuery + QUuid + QValidator + QValue3DAxis + QValue3DAxisFormatter + QValueAxis + QVariant + QVariantAnimation + QVarLengthArray + QVBarModelMapper + QVBoxLayout + QVBoxPlotModelMapper + QVCandlestickModelMapper + QVector + QVector2D + QVector3D + QVector4D + QVectorIterator + QVersionNumber + QVideoDeviceSelectorControl + QVideoEncoderSettings + QVideoEncoderSettingsControl + QVideoFilterRunnable + QVideoFrame + QVideoProbe + QVideoRendererControl + QVideoSurfaceFormat + QVideoWidget + QVideoWidgetControl + QVideoWindowControl + QVPieModelMapper + QVXYModelMapper + QWaitCondition + QWaylandBufferRef + QWaylandClient + QWaylandCompositor + QWaylandIviSurface + QWaylandKeyboard + QWaylandOutput + QWaylandOutputMode + QWaylandPointer + QWaylandQuickItem + QWaylandQuickShellSurfaceItem + QWaylandSeat + QWaylandSurface + QWaylandSurfaceGrabber + QWaylandTouch + QWaylandView + QWaylandWlShell + QWaylandWlShellSurface + QWaylandXdgPopupV5 + QWaylandXdgSurfaceV5 + QWeakPointer + QWebChannel + QWebChannelAbstractTransport + QWebEngineCertificateError + QWebEngineContextMenuData + QWebEngineCookieStore + QWebEngineDownloadItem + QWebEngineFullScreenRequest + QWebEngineHistory + QWebEngineHistoryItem + QWebEnginePage + QWebEngineProfile + QWebEngineScript + QWebEngineScriptCollection + QWebEngineSettings + QWebEngineUrlRequestInfo + QWebEngineUrlRequestInterceptor + QWebEngineUrlRequestJob + QWebEngineUrlSchemeHandler + QWebEngineView + QWebSocket + QWebSocketCorsAuthenticator + QWebSocketServer + QWGLNativeContext + QWhatsThis + QWhatsThisClickedEvent + QWheelEvent + QWidget + QWidgetAction + QWidgetItem + QWindow + QWindowStateChangeEvent + QWindowsWindowFunctions + QWinEventNotifier + QWinJumpList + QWinJumpListCategory + QWinJumpListItem + QWinMime + QWinTaskbarButton + QWinTaskbarProgress + QWinThumbnailToolBar + QWinThumbnailToolButton + QWizard + QWizardPage + QWriteLocker + QX11Info + QXcbWindowFunctions + QXmlAttributes + QXmlContentHandler + QXmlDeclHandler + QXmlDefaultHandler + QXmlDTDHandler + QXmlEntityResolver + QXmlErrorHandler + QXmlFormatter + QXmlInputSource + QXmlItem + QXmlLexicalHandler + QXmlLocator + QXmlName + QXmlNamePool + QXmlNamespaceSupport + QXmlNodeModelIndex + QXmlParseException + QXmlQuery + QXmlReader + QXmlResultItems + QXmlSchema + QXmlSchemaValidator + QXmlSerializer + QXmlSimpleReader + QXmlStreamAttribute + QXmlStreamAttributes + QXmlStreamEntityDeclaration + QXmlStreamEntityResolver + QXmlStreamNamespaceDeclaration + QXmlStreamNotationDeclaration + QXmlStreamReader + QXmlStreamWriter + QXYLegendMarker + QXYSeries + + QStringLiteral + + Qt + QTest + QtConcurrent + Phonon + + QFileInfoList + QMutableStringListIterator + QTouchEventSequence + QStringListIterator + QStringBuilder + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/crk.xml b/src/data/extra/syntax-highlighting/syntax/crk.xml new file mode 100644 index 00000000..211ddccc --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/crk.xml @@ -0,0 +1,163 @@ + + + + + + break + catch + class + continue + else + false + for + if + in + is + null + oper + return + this + true + try + typeof + while + + + bool + byte + int16 + int32 + int64 + uint16 + uint32 + uint64 + float32 + float64 + int + uint + intz + uintz + float + void + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/cs.xml b/src/data/extra/syntax-highlighting/syntax/cs.xml new file mode 100644 index 00000000..264d1f4c --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/cs.xml @@ -0,0 +1,168 @@ + + + + + abstract + as + base + break + case + catch + class + checked + continue + default + delegate + do + else + enum + event + explicit + extern + false + for + foreach + finally + fixed + goto + if + implicit + in + interface + internal + is + lock + namespace + new + null + operator + out + override + params + private + protected + public + readonly + ref + return + sealed + sizeof + stackalloc + static + struct + switch + this + throw + true + try + typeof + unchecked + unsafe + using + virtual + while + #if + #else + #elif + #endif + #define + #undef + #warning + #error + #line + + + bool + byte + char + const + decimal + double + float + int + long + object + uint + ushort + ulong + sbyte + short + string + void + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/css.xml b/src/data/extra/syntax-highlighting/syntax/css.xml new file mode 100644 index 00000000..228bb45b --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/css.xml @@ -0,0 +1,1738 @@ + + + + +]> + + + + + + + + + + align-content + align-items + alignment-baseline + align-self + all + animation + animation-delay + animation-direction + animation-duration + animation-fill-mode + animation-iteration-count + animation-name + animation-play-state + animation-timing-function + appearance + azimuth + backface-visibility + background + background-attachment + background-blend-mode + background-clip + background-color + background-image + background-image-transform + background-origin + background-position + background-repeat + background-size + baseline-shift + block-size + block-step + block-step-align + block-step-insert + block-step-round + block-step-size + bookmark-label + bookmark-level + bookmark-state + border + border-block + border-block-color + border-block-end + border-block-end-color + border-block-end-style + border-block-end-width + border-block-start + border-block-start-color + border-block-start-style + border-block-start-width + border-block-style + border-block-width + border-bottom + border-bottom-color + border-bottom-left-radius + border-bottom-right-radius + border-bottom-style + border-bottom-width + border-boundary + border-collapse + border-color + border-image + border-image-outset + border-image-repeat + border-image-slice + border-image-source + border-image-transform + border-image-width + border-inline + border-inline-color + border-inline-end + border-inline-end-color + border-inline-end-style + border-inline-end-width + border-inline-start + border-inline-start-color + border-inline-start-style + border-inline-start-width + border-inline-style + border-inline-width + border-left + border-left-color + border-left-style + border-left-width + border-radius + border-right + border-right-color + border-right-style + border-right-width + border-spacing + border-style + border-top + border-top-color + border-top-left-radius + border-top-right-radius + border-top-style + border-top-width + border-width + bottom + box-decoration-break + box-shadow + box-sizing + box-snap + break-after + break-before + break-inside + caption-side + caret + caret-color + caret-shape + clear + clip + clip-path + clip-rule + color + color-adjust + color-interpolation-filters + columns + column-count + column-fill + column-gap + column-rule + column-rule-color + column-rule-style + column-rule-width + column-span + column-width + contain + content + continue + counter-increment + counter-reset + counter-set + cue + cue-after + cue-before + cursor + direction + display + dominant-baseline + elevation + empty-cells + fill + fill-break + fill-color + fill-image + fill-opacity + fill-origin + fill-position + fill-repeat + fill-rule + fill-size + filter + flex + flex-basis + flex-direction + flex-flow + flex-grow + flex-shrink + flex-wrap + float + float-defer + float-offset + float-reference + flood-color + flood-opacity + flow-from + flow-into + font + font-family + font-feature-settings + font-kerning + font-language-override + font-max-size + font-min-size + font-optical-sizing + font-palette + font-size + font-size-adjust + font-stretch + font-style + font-synthesis + font-variant + font-variant-alternates + font-variant-caps + font-variant-east-asian + font-variant-emoji + font-variant-ligatures + font-variant-numeric + font-variant-position + font-variation-settings + font-weight + footnote-display + footnote-policy + gap + glyph-orientation-vertical + grid + grid-area + grid-auto-columns + grid-auto-flow + grid-auto-rows + grid-column + grid-column-end + grid-column-gap + grid-column-start + grid-gap + grid-row + grid-row-end + grid-row-gap + grid-row-start + grid-template + grid-template-areas + grid-template-columns + grid-template-rows + hanging-punctuation + height + hyphenate-character + hyphenate-limit-chars + hyphenate-limit-last + hyphenate-limit-lines + hyphenate-limit-zone + hyphens + image-orientation + image-rendering + image-resolution + initial-letter + initial-letter-align + initial-letter-wrap + inline-size + inset + inset-block + inset-block-end + inset-block-start + inset-inline + inset-inline-end + inset-inline-start + isolation + justify-content + justify-items + justify-self + left + letter-spacing + lighting-color + line-break + line-grid + line-height + line-height-step + line-snap + list-style + list-style-image + list-style-position + list-style-type + margin + margin-block + margin-block-end + margin-block-start + margin-bottom + margin-inline + margin-inline-end + margin-inline-start + margin-left + margin-right + margin-top + marker + marker-end + marker-knockout-left + marker-knockout-right + marker-mid + marker-pattern + marker-segment + marker-side + marker-start + marquee-direction + marquee-loop + marquee-speed + marquee-style + mask + mask-border + mask-border-mode + mask-border-outset + mask-border-repeat + mask-border-slice + mask-border-source + mask-border-width + mask-clip + mask-composite + mask-image + mask-mode + mask-origin + mask-position + mask-repeat + mask-size + mask-type + max-block-size + max-height + max-inline-size + max-lines + max-width + min-block-size + min-height + min-inline-size + min-width + mix-blend-mode + nav-up + nav-down + nav-left + nav-right + object-fit + object-position + offset + offset-after + offset-anchor + offset-before + offset-distance + offset-end + offset-path + offset-position + offset-rotate + offset-start + opacity + order + orphans + outline + outline-color + outline-offset + outline-style + outline-width + overflow + overflow-style + overflow-wrap + overflow-x + overflow-y + padding + padding-block + padding-block-end + padding-block-start + padding-bottom + padding-inline + padding-inline-end + padding-inline-start + padding-left + padding-right + padding-top + page + page-break-after + page-break-before + page-break-inside + pause + pause-after + pause-before + perspective + perspective-origin + pitch + pitch-range + place-content + place-items + place-self + play-during + pointer-events + position + quotes + region-fragment + resize + richness + right + rotation + rotation-point + row-gap + ruby-align + ruby-merge + ruby-position + running + scrollbar-gutter + shape-image-threshold + shape-inside + shape-margin + shape-outside + size + speak + speak-header + speak-numeral + speak-punctuation + speech-rate + stress + string-set + table-layout + tab-size + text-align-all + text-align + text-align-last + text-combine-upright + text-decoration-color + text-decoration + text-decoration-line + text-decoration-skip + text-decoration-skip-ink + text-decoration-style + text-decoration-width + text-emphasis + text-emphasis-color + text-emphasis-position + text-emphasis-skip + text-emphasis-style + text-indent + text-justify + text-orientation + text-overflow + text-shadow + text-space-collapse + text-space-trim + text-spacing + text-transform + text-underline-offset + text-underline-position + text-wrap + top + transform + transform-box + transform-origin + transform-style + transition + transition-delay + transition-duration + transition-property + transition-timing-function + unicode-bidi + user-select + vertical-align + visibility + voice-family + volume + white-space + widows + width + will-change + word-break + word-spacing + word-wrap + wrap-after + wrap-before + wrap-flow + wrap-inside + wrap-through + writing-mode + z-index + + + -moz-animation + -moz-animation-delay + -moz-animation-direction + -moz-animation-duration + -moz-animation-fill-mode + -moz-animation-iteration-count + -moz-animation-name + -moz-animation-play-state + -moz-animation-timing-function + -moz-appearance + -moz-background-clip + -moz-background-origin + -moz-background-size + -moz-border-image + -moz-border-radius + -moz-border-radius-bottomleft + -moz-border-radius-bottomright + -moz-border-radius-topleft + -moz-border-radius-topright + -moz-box-align + -moz-box-direction + -moz-box-flex + -moz-box-flex-group + -moz-box-ordinal-group + -moz-box-orient + -moz-box-pack + -moz-box-shadow + -moz-box-sizing + -moz-box + -moz-column-count + -moz-column-fill + -moz-column-gap + -moz-column-rule + -moz-column-rule-color + -moz-column-rule-style + -moz-column-rule-width + -moz-columns + -moz-column-width + -moz-hyphens + -moz-opacity + -moz-outline-style + -moz-perspective + -moz-resize + -moz-text-align-last + -moz-text-decoration-color + -moz-text-decoration-line + -moz-text-decoration-style + -moz-transform + -moz-transform-origin + -moz-transform-style + -moz-transition + -moz-transition-delay + -moz-transition-duration + -moz-transition-property + -moz-transition-timing-function + -moz-user-select + + + -o-background-size + -o-linear-gradient + -o-text-overflow + -o-transition + -o-transform-origin + + + konq_bgpos_x + konq_bgpos_y + -khtml-background-size + -khtml-border-top-left-radius + -khtml-border-top-right-radius + -khtml-border-bottom-left-radius + -khtml-border-bottom-right-radius + -khtml-border-radius + -khtml-box-shadow + -khtml-opacity + + + -webkit-appearance + -webkit-animation + -webkit-animation-name + -webkit-animation-duration + -webkit-animation-iteration + -webkit-animation-direction + -webkit-animation-delay + -webkit-animation-play-state + -webkit-animation-fill-mode + -webkit-background-size + -webkit-backface-visibility + -webkit-border-image + -webkit-border-bottom-colors + -webkit-border-left-colors + -webkit-border-radius + -webkit-border-right-colors + -webkit-border-top-colors + -webkit-border-top-left-radius + -webkit-border-top-right-radius + -webkit-border-bottom-left-radius + -webkit-border-bottom-right-radius + -webkit-border-radius-bottomleft + -webkit-border-radius-bottomright + -webkit-box-align + -webkit-box-direction + -webkit-box-flex + -webkit-box-ordinal-group + -webkit-box-orient + -webkit-box-pack + -webkit-box-reflect + -webkit-box-shadow + -webkit-box-sizing + -webkit-column-count + -webkit-column-gap + -webkit-hyphens + -webkit-linear-gradient + -webkit-gradient + -webkit-overflow-scrolling + -webkit-perspective + -webkit-text-decoration + -webkit-text-decoration-skip + -webkit-text-fill-color + -webkit-text-stroke-color + -webkit-text-stroke-width + -webkit-text-size-adjust + -webkit-tap-highlight-color + -webkit-transform + -webkit-transform-origin + -webkit-transform-style + -webkit-transition + -webkit-transition-property + -webkit-transition-delay + -webkit-transition-duration + -webkit-user-select + + + zoom + -ms-animation-name + -ms-animation-duration + -ms-animation-iteration + -ms-animation-direction + -ms-animation-delay + -ms-animation-play-state + -ms-animation-fill-mode + -ms-box-sizing + -ms-filter + -ms-flex + -ms-flex-align + -ms-flex-direction + -ms-flex-flow + -ms-flex-item-align + -ms-flex-line-pack + -ms-flex-negative + -ms-flex-order + -ms-flex-pack + -ms-flex-positive + -ms-flex-position + -ms-flex-preferred-size + -ms-flex-wrap + -ms-interpolation-mode + -ms-linear-gradient + -ms-overflow-style + -ms-text-size-adjust + -ms-transform + -ms-transition + -ms-user-select + + + + inherit + unset + auto + + + + + none + hidden + dotted + dashed + solid + double + groove + ridge + inset + outset + xx-small + x-small + small + medium + large + x-large + xx-large + smaller + larger + italic + oblique + small-caps + normal + bold + bolder + lighter + light + transparent + repeat + repeat-x + repeat-y + no-repeat + baseline + sub + super + top + text-top + middle + bottom + text-bottom + left + right + center + justify + konq-center + disc + circle + square + box + decimal + decimal-leading-zero + lower-roman + upper-roman + lower-greek + lower-alpha + lower-latin + upper-alpha + upper-latin + hebrew + armenian + georgian + cjk-ideographic + hiragana + katakana + hiragana-iroha + katakana-iroha + inline + inline-block + block + list-item + run-in + compact + marker + table + inline-table + table-row-group + table-header-group + table-footer-group + table-row + table-column-group + table-column + table-cell + table-caption + crosshair + default + pointer + move + e-resize + ne-resize + nw-resize + n-resize + se-resize + sw-resize + s-resize + w-resize + text + wait + help + above + absolute + always + avoid + below + bidi-override + blink + both + capitalize + caption + clip + close-quote + collapse + condensed + crop + cross + ellipsis + ellipsis-word + embed + expanded + extra-condensed + extra-expanded + fixed + hand + hide + higher + icon + inside + invert + landscape + level + line-through + loud + lower + lowercase + ltr + menu + message-box + mix + narrower + no-close-quote + no-open-quote + nowrap + open-quote + outside + overline + portrait + pre + pre-line + pre-wrap + relative + rtl + scroll + semi-condensed + semi-expanded + separate + show + small-caption + static + static-position + status-bar + thick + thin + ultra-condensed + ultra-expanded + underline + uppercase + visible + wider + break + serif + sans-serif + cursive + fantasy + monospace + border-box + content-box + -epub-hyphens + contain + cover + + + all + ease + ease-in + ease-out + ease-in-out + step-start + step-end + linear + + + infinite + reverse + alternate + alternate-reverse + forwards + backwards + running + paused + + + + black + silver + gray + white + maroon + red + purple + fuchsia + green + lime + olive + yellow + navy + blue + teal + aqua + orange + aliceblue + antiquewhite + aquamarine + azure + beige + bisque + blanchedalmond + blueviolet + brown + burlywood + cadetblue + chartreuse + chocolate + coral + cornflowerblue + cornsilk + crimson + cyan + aqua + darkblue + darkcyan + darkgoldenrod + darkgray + darkgreen + darkgrey + darkkhaki + darkmagenta + darkolivegreen + darkorange + darkorchid + darkred + darksalmon + darkseagreen + darkslateblue + darkslategray + darkslategrey + darkturquoise + darkviolet + deeppink + deepskyblue + dimgray + dimgrey + dodgerblue + firebrick + floralwhite + forestgreen + gainsboro + ghostwhite + gold + goldenrod + greenyellow + grey + honeydew + hotpink + indianred + indigo + ivory + khaki + lavender + lavenderblush + lawngreen + lemonchiffon + lightblue + lightcoral + lightcyan + lightgoldenrodyellow + lightgray + lightgreen + lightgrey + lightpink + lightsalmon + lightseagreen + lightskyblue + lightslategray + lightslategrey + lightsteelblue + lightyellow + limegreen + linen + magenta + fuchsia + mediumaquamarine + mediumblue + mediumorchid + mediumpurple + mediumseagreen + mediumslateblue + mediumspringgreen + mediumturquoise + mediumvioletred + midnightblue + mintcream + mistyrose + moccasin + navajowhite + oldlace + olivedrab + orangered + orchid + palegoldenrod + palegreen + paleturquoise + palevioletred + papayawhip + peachpuff + peru + pink + plum + powderblue + rosybrown + royalblue + saddlebrown + salmon + sandybrown + seagreen + seashell + sienna + skyblue + slateblue + slategray + slategrey + snow + springgreen + steelblue + tan + thistle + tomato + turquoise + violet + wheat + whitesmoke + yellowgreen + rebeccapurple + + ActiveBorder + ActiveCaption + AppWorkspace + Background + ButtonFace + ButtonHighlight + ButtonShadow + ButtonText + CaptionText + GrayText + Highlight + HighlightText + InactiveBorder + InactiveCaption + InactiveCaptionText + InfoBackground + InfoText + Menu + MenuText + Scrollbar + ThreeDDarkShadow + ThreeDFace + ThreeDHighlight + ThreeDLightShadow + ThreeDShadow + Window + WindowFrame + WindowText + + + + attr + calc + hsl + hsla + linear-gradient + radial-gradient + repeating-linear-gradient + repeating-radial-gradient + rgb + rgba + var + url + + + rect + + + inset + circle + ellipse + polygon + + + blur + brightness + contrast + drop-shadow + grayscale + hue-rotate + invert + opacity + saturate + sepia + + + max-content + min-content + minmax + fix-content + repeat + + + cubic-bezier + frames + steps + + + matrix + matrix3d + perspective + rotate + rotate3d + rotateX + rotateY + rotateZ + scale + scale3d + scaleX + scaleY + scaleZ + skew + skewX + skewY + translate + translate3d + translateX + translateY + translateZ + + + local + format + + + + + all + print + screen + speech + + + any-pointer + any-hover + aspect-ratio + color + color-gamut + color-index + display-mode + grid + height + hover + max-aspect-ratio + max-color + max-color-index + max-device-aspect-ratio + max-device-height + max-device-width + max-height + max-monochrome + max-resolution + max-width + min-aspect-ratio + min-color + min-color-index + min-device-aspect-ratio + min-device-height + min-device-width + min-height + min-monochrome + min-resolution + min-width + monochrome + orientation + pointer + resolution + scan + update + width + + + + + after + before + cue + first-letter + first-line + selection + + + backdrop + placeholder + + slotted + + + + + value + choices + repeat-item + repeat-index + + -moz-progress-bar + -moz-range-progress + -moz-range-thumb + -moz-range-track + -moz-selection + -ms-fill + -ms-fill-lower + -ms-fill-upper + -ms-thumb + -ms-track + -webkit-progress-bar + -webkit-progress-value + -webkit-slider-runnable-track + -webkit-slider-thumb + + + + + active + any-link + checked + default + defined + + disabled + empty + enabled + first-child + first-of-type + fullscreen + focus + focus-within + host + hover + in-range + indeterminate + invalid + lang + last-child + last-of-type + link + not + nth-child + nth-last-child + nth-last-of-type + nth-of-type + only-child + only-of-type + optional + out-of-range + placeholder-shown + read-only + read-write + required + root + scope + target + valid + visited + + + after + before + cue + first-letter + first-line + selection + + + + not + matches + + + + blank + first + left + recto + right + verso + + + + @character + @charset + @import + @namespace + + + + @document + @media + @supports + + + + @viewport + + + + min-width + max-width + width + min-height + max-height + height + zoom + min-zoom + max-zoom + user-zoom + orientation + viewport-fit + + + + @page + + + + size + marks + bleed + + + + @font-face + + + + font-display + font-family + font-stretch + font-style + font-weight + font-variant + font-feature-settings + font-variation-settings + src + unicode-range + + + + @keyframes + + + + from + to + + + + and + only + not + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/cubescript.xml b/src/data/extra/syntax-highlighting/syntax/cubescript.xml new file mode 100644 index 00000000..88e550c6 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/cubescript.xml @@ -0,0 +1,452 @@ + + + + + + + + ? + alias + at + case + casef + cases + clearconsole + clearsleep + complete + concat + concatword + cond + conskip + do + echo + error + escape + exec + format + getalias + getfvarmin + getfvarmax + getvarmin + getvarmax + history + if + indexof + inputcommand + keymap + listcomplete + listdel + listfind + listlen + listsplice + local + loop + loopconcat + loopconcatword + loopfiles + looplist + loopwhile + miniconskip + nodebug + onrelease + prettylist + push + resetvar + result + rnd + saycommand + searchbinds + searcheditbinds + searchspecbinds + sleep + strcmp + strlen + strreplace + strstr + sublist + substr + tabify + toggleconsole + unescape + while + writecfg + + + bind + editbind + specbind + getbind + geteditbind + getspecbind + + + + + + * + - + +f + *f + -f + = + != + > + < + >= + <= + =f + !=f + >f + <f + >=f + <=f + ^ + ! + & + | + ~ + ^~ + &~ + |~ + << + >> + && + || + abs + absf + div + mod + divf + modf + sin + cos + tan + asin + acos + atan + sqrt + pow + loge + log2 + log10 + exp + min + max + minf + maxf + =s + !=s + <s + >s + <=s + >=s + + + + MOUSELEFT + MOUSEMIDDLE + MOUSERIGHT + MOUSEWHEELUP + MOUSEWHEELDOWN + MOUSEX1 + MOUSEX2 + + + MOUSE1 + MOUSE2 + MOUSE3 + MOUSE4 + MOUSE5 + + + BACKSPACE + TAB + CLEAR + RETURN + PAUSE + ESCAPE + SPACE + EXCLAIM + QUOTEDBL + HASH + DOLLAR + AMPERSAND + QUOTE + LEFTPAREN + RIGHTPAREN + ASTERISK + PLUS + COMMA + MINUS + PERIOD + SLASH + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + COLON + SEMICOLON + LESS + EQUALS + GREATER + QUESTION + AT + LEFTBRACKET + BACKSLASH + RIGHTBRACKET + CARET + UNDERSCORE + BACKQUOTE + A + B + C + D + E + F + G + H + I + J + K + L + M + N + O + P + Q + R + S + T + U + V + W + X + Y + Z + DELETE + KP0 + KP1 + KP2 + KP3 + KP4 + KP5 + KP6 + KP7 + KP8 + KP9 + KP_PERIOD + KP_DIVIDE + KP_MULTIPLY + KP_MINUS + KP_PLUS + KP_ENTER + KP_EQUALS + UP + DOWN + RIGHT + LEFT + INSERT + HOME + END + PAGEUP + PAGEDOWN + F1 + F2 + F3 + F4 + F5 + F6 + F7 + F8 + F9 + F10 + F11 + F12 + F13 + F14 + F15 + NUMLOCK + CAPSLOCK + SCROLLOCK + RSHIFT + LSHIFT + RCTRL + LCTRL + RALT + LALT + RMETA + LMETA + LSUPER + RSUPER + MODE + COMPOSE + HELP + PRINT + SYSREQ + BREAK + MENU + + + + commandbuf + editing + mainmenu + numargs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/cue.xml b/src/data/extra/syntax-highlighting/syntax/cue.xml new file mode 100644 index 00000000..fc4eb1b0 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/cue.xml @@ -0,0 +1,74 @@ + + + + + + CATALOG + CDTEXTFILE + FILE + FLAGS + INDEX + ISRC + PERFORMER + PREGAP + POSTGAP + REM + SONGWRITER + TITLE + TRACK + + + AIFF + WAVE + MP3 + BINARY + MOTOTOLA + + + AUDIO + CDG + CDI + MODE1 + MODE2 + RAW + + + 4CH + DCP + PRE + SCMS + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/curry.xml b/src/data/extra/syntax-highlighting/syntax/curry.xml new file mode 100644 index 00000000..b289f1c9 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/curry.xml @@ -0,0 +1,364 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +]> + + + + case + data + do + else + external + fcase + free + if + + in + infix + infixl + infixr + let + module + of + then + type + where + + + and + all + any + appendFile + best + break + browse + browseList + chr + concat + concatMap + const + curry + div + done + doSolve + drop + dropWhile + either + elem + ensureNotFree + ensureSpine + enumFrom + enumFromThen + enumFromTo + enumFromThenTo + error + failed + filter + findall + flip + foldl + foldl1 + foldr + foldr1 + fst + getChar + getLine + id + if_then_else + iterate + head + length + lines + lookup + map + mapIO + mapIO_ + max + maybe + min + mod + negate + not + notElem + null + once + or + ord + otherwise + print + putChar + putStr + putStrLn + readFile + repeat + replicate + return + reverse + seq + sequenceIO + sequenceIO_ + show + snd + solveAll + span + splitAt + success + tail + take + takeWhile + try + uncurry + unknown + unlines + unpack + until + unwords + unzip + unzip3 + writeFile + words + zip + zip3 + zipWith + zipWith3 + + + Bool + Char + Either + Float + Int + IO + Maybe + Ordering + String + Success + + + False + True + Left + Right + Just + Nothing + EQ + LT + GT + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/d.xml b/src/data/extra/syntax-highlighting/syntax/d.xml new file mode 100644 index 00000000..17a5e940 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/d.xml @@ -0,0 +1,934 @@ + + + + + + + + + + + asm + body + break + case + catch + continue + default + do + else + finally + for + foreach + foreach_reverse + goto + if + mixin + return + switch + throw + try + while + with + + + synchronized + + + + + + abstract + align + auto + const + export + final + immutable + inout + invariant + lazy + nothrow + override + package + private + protected + public + pure + ref + shared + static + + + + out + scope + + __gshared + + + + + false + null + super + this + true + typeid + + + assert + cast + is + new + delete + in + + + delegate + function + + + + module + import + + + + alias + enum + typedef + class + interface + struct + union + + + + typeof + + void + bool + byte + ubyte + short + ushort + int + uint + long + ulong + cent + ucent + float + double + real + ireal + ifloat + idouble + creal + cfloat + cdouble + char + wchar + dchar + + + + macro + template + + + + init + sizeof + alignof + mangleof + stringof + tupleof + offsetof + max + min + infinity + nan + dig + epsilon + mant_dig + max_10_exp + max_exp + min_10_exp + min_exp + re + im + length + ptr + dup + idup + reverse + sort + keys + values + rehash + + + + + size_t + ptrdiff_t + hash_t + Error + Exception + Object + TypeInfo + ClassInfo + ModuleInfo + Interface + OffsetTypeInfo + TypeInfo_Typedef + TypeInfo_Enum + TypeInfo_Pointer + TypeInfo_Array + TypeInfo_StaticArray + TypeInfo_AssociativeArray + TypeInfo_Function + TypeInfo_Delegate + TypeInfo_Class + TypeInfo_Interface + TypeInfo_Struct + TypeInfo_Tuple + + + string + wstring + dstring + bit + TypeInfo_Const + TypeInfo_Invariant + + + + extern + + + C + + D + Windows + Pascal + System + + + + + inline + lib + linkerDirective + mangle + msg + startaddress + + + + exit + success + failure + + + + DigitalMars + X86 + X86_64 + Windows + Win32 + Win64 + linux + LittleEndian + BigEndian + D_Coverage + D_InlineAsm_X86 + unittest + D_Version2 + none + all + + + + __FILE__ + __LINE__ + __DATE__ + __TIME__ + __TIMESTAMP__ + __VENDOR__ + __VERSION__ + __EOF__ + + + + debug + unittest + + + + pragma + + + + version + + + + deprecated + volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/debianchangelog.xml b/src/data/extra/syntax-highlighting/syntax/debianchangelog.xml new file mode 100644 index 00000000..f8709a05 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/debianchangelog.xml @@ -0,0 +1,251 @@ + + + + + + urgency + + + + oldstable + oldstable-security + oldstable-proposed-updates + stable + stable-security + stable-proposed-updates + testing + testing-security + testing-proposed-updates + frozen + unstable + sid + experimental + UNRELEASED + + sarge + sarge-backports + sarge-volatile + etch + etch-backports + etch-volatile + lenny + lenny-backports + lenny-backports-sloppy + lenny-volatile + squeeze + squeeze-backports + squeeze-backports-sloppy + squeeze-volatile + wheezy + wheezy-backports + wheezy-backports-sloppy + jessie + jessie-backports + jessie-backports-sloppy + stretch + stretch-backports + stretch-backports-sloppy + buster + buster-backports + buster-backports-sloppy + bullseye + bullseye-backports + bullseye-backports-sloppy + bookworm + bookworm-backports + bookworm-backports-sloppy + + dapper + dapper-security + dapper-proposed + dapper-updates + dapper-backports + dapper-commercial + edgy + edgy-security + edgy-proposed + edgy-updates + edgy-backports + edgy-commercial + feisty + feisty-security + feisty-proposed + feisty-updates + feisty-backports + feisty-commercial + gutsy + gutsy-security + gutsy-proposed + gutsy-updates + gutsy-backports + gutsy-partner + hardy + hardy-security + hardy-proposed + hardy-updates + hardy-backports + hardy-partner + intrepid + intrepid-security + intrepid-proposed + intrepid-updates + intrepid-backports + intrepid-partner + jaunty + jaunty-security + jaunty-proposed + jaunty-updates + jaunty-backports + jaunty-partner + karmic + karmic-security + karmic-proposed + karmic-updates + karmic-backports + lucid + lucid-security + lucid-proposed + lucid-updates + lucid-backports + maverick + maverick-security + maverick-proposed + maverick-updates + maverick-backports + natty + natty-security + natty-proposed + natty-updates + natty-backports + oneiric + oneiric-security + oneiric-proposed + oneiric-updates + oneiric-backports + precise + precise-security + precise-proposed + precise-updates + precise-backports + quantal + quantal-security + quantal-proposed + quantal-updates + quantal-backports + raring + raring-security + raring-proposed + raring-updates + raring-backports + saucy + saucy-security + saucy-proposed + saucy-updates + saucy-backports + trusty + trusty-security + trusty-proposed + trusty-updates + trusty-backports + utopic + utopic-security + utopic-proposed + utopic-updates + utopic-backports + vivid + vivid-security + vivid-proposed + vivid-updates + vivid-backports + wily + wily-security + wily-proposed + wily-updates + wily-backports + xenial + xenial-security + xenial-proposed + xenial-updates + xenial-backports + yakkety + yakkety-security + yakkety-proposed + yakkety-updates + yakkety-backports + zesty + zesty-security + zesty-proposed + zesty-updates + zesty-backports + artful + artful-security + artful-proposed + artful-updates + artful-backports + bionic + bionic-security + bionic-proposed + bionic-updates + bionic-backports + cosmic + cosmic-security + cosmic-proposed + cosmic-updates + cosmic-backports + disco + disco-security + disco-proposed + disco-updates + disco-backports + eoan + eoan-security + eoan-proposed + eoan-updates + eoan-backports + + + + low + medium + high + emergency + bug + critical + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/debiancontrol.xml b/src/data/extra/syntax-highlighting/syntax/debiancontrol.xml new file mode 100644 index 00000000..d3149c61 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/debiancontrol.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/desktop.xml b/src/data/extra/syntax-highlighting/syntax/desktop.xml new file mode 100644 index 00000000..fc508c45 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/desktop.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/diff.xml b/src/data/extra/syntax-highlighting/syntax/diff.xml new file mode 100644 index 00000000..0d2ade76 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/diff.xml @@ -0,0 +1,118 @@ + + + + + +]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/djangotemplate.xml b/src/data/extra/syntax-highlighting/syntax/djangotemplate.xml new file mode 100644 index 00000000..6aee2506 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/djangotemplate.xml @@ -0,0 +1,330 @@ + + + +]> + + + + + + + + for + block + if + ifequal + ifnotequal + ifchanged + blocktrans + spaceless + autoescape + + + + endfor + endblock + endif + endifequal + endifnotequal + endifchanged + endblocktrans + endspaceless + endautoescape + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/dockerfile.xml b/src/data/extra/syntax-highlighting/syntax/dockerfile.xml new file mode 100644 index 00000000..980fd042 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/dockerfile.xml @@ -0,0 +1,67 @@ + + + + + + + ADD + ARG + CMD + COPY + ENTRYPOINT + ENV + EXPOSE + FROM + HEALTHCHECK + LABEL + MAINTAINER + ONBUILD + RUN + SHELL + STOPSIGNAL + USER + VOLUME + WORKDIR + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/dosbat.xml b/src/data/extra/syntax-highlighting/syntax/dosbat.xml new file mode 100644 index 00000000..807763ba --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/dosbat.xml @@ -0,0 +1,309 @@ + + + + + + + +]> + + + + + + + assoc + break + call + cd + chdir + cls + color + copy + date + del + dir + endlocal + erase + exit + ftype + md + mkdir + move + path + pause + popd + prompt + pushd + rd + ren + rename + rmdir + setlocal + shift + start + time + title + type + ver + verify + vol + + + + echo + else + for + in + do + goto + if + not + set + + + + at + attrib + break + cacls + chcp + chkdsk + chkntfs + cmd + comp + compact + convert + diskcomp + diskcopy + doskey + fc + find + findstr + format + graftabl + help + label + mode + more + print + recover + replace + sort + subst + tree + xcopy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/dot.xml b/src/data/extra/syntax-highlighting/syntax/dot.xml new file mode 100644 index 00000000..6f8aacf3 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/dot.xml @@ -0,0 +1,172 @@ + + + + + + + + + digraph + node + edge + subgraph + + + + + center + layers + margin + mclimit + name + nodesep + nslimit + ordering + page + pagedir + rank + rankdir + ranksep + ratio + rotate + size + + distortion + fillcolor + fontcolor + fontname + fontsize + height + layer + orientation + peripheries + regular + shape + shapefile + sides + skew + width + + arrowhead + arrowsize + arrowtail + constraint + decorateP + dir + headclip + headlabel + labelangle + labeldistance + labelfontcolor + labelfontname + labelfontsize + minlen + port_label_distance + samehead + sametail + tailclip + taillabel + weight + + color + + bgcolor + label + URL + + fontcolor + fontname + fontsize + layer + style + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/doxyfile.xml b/src/data/extra/syntax-highlighting/syntax/doxyfile.xml new file mode 100644 index 00000000..1002d675 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/doxyfile.xml @@ -0,0 +1,350 @@ + + + + + + + + ABBREVIATE_BRIEF + ALIASES + ALLEXTERNALS + ALLOW_UNICODE_NAMES + ALPHABETICAL_INDEX + ALWAYS_DETAILED_SEC + AUTOLINK_SUPPORT + BINARY_TOC + BRIEF_MEMBER_DESC + BUILTIN_STL_SUPPORT + CALLER_GRAPH + CALL_GRAPH + CASE_SENSE_NAMES + CHM_FILE + CHM_INDEX_ENCODING + CITE_BIB_FILES + CLANG_ASSISTED_PARSING + CLANG_OPTIONS + CLASS_DIAGRAMS + CLASS_GRAPH + COLLABORATION_GRAPH + COLS_IN_ALPHA_INDEX + COMPACT_LATEX + COMPACT_RTF + CPP_CLI_SUPPORT + CREATE_SUBDIRS + DIAFILE_DIRS + DIA_PATH + DIRECTORY_GRAPH + DISABLE_INDEX + DISTRIBUTE_GROUP_DOC + DOCBOOK_OUTPUT + DOCBOOK_PROGRAMLISTING + DOCSET_BUNDLE_ID + DOCSET_FEEDNAME + DOCSET_PUBLISHER_ID + DOCSET_PUBLISHER_NAME + DOTFILE_DIRS + DOT_CLEANUP + DOT_FONTNAME + DOT_FONTPATH + DOT_FONTSIZE + DOT_GRAPH_MAX_NODES + DOT_IMAGE_FORMAT + DOT_MULTI_TARGETS + DOT_NUM_THREADS + DOT_PATH + DOT_TRANSPARENT + DOXYFILE_ENCODING + ECLIPSE_DOC_ID + ENABLED_SECTIONS + ENABLE_PREPROCESSING + ENUM_VALUES_PER_LINE + EXAMPLE_PATH + EXAMPLE_PATTERNS + EXAMPLE_RECURSIVE + EXCLUDE + EXCLUDE_PATTERNS + EXCLUDE_SYMBOLS + EXCLUDE_SYMLINKS + EXPAND_AS_DEFINED + EXPAND_ONLY_PREDEF + EXTENSION_MAPPING + EXTERNAL_GROUPS + EXTERNAL_PAGES + EXTERNAL_SEARCH + EXTERNAL_SEARCH_ID + EXTRACT_ALL + EXTRACT_ANON_NSPACES + EXTRACT_LOCAL_CLASSES + EXTRACT_LOCAL_METHODS + EXTRACT_PACKAGE + EXTRACT_PRIVATE + EXTRACT_STATIC + EXTRA_PACKAGES + EXTRA_SEARCH_MAPPINGS + EXT_LINKS_IN_WINDOW + FILE_PATTERNS + FILE_VERSION_FILTER + FILTER_PATTERNS + FILTER_SOURCE_FILES + FILTER_SOURCE_PATTERNS + FORCE_LOCAL_INCLUDES + FORMULA_FONTSIZE + FORMULA_TRANSPARENT + FULL_PATH_NAMES + GENERATE_AUTOGEN_DEF + GENERATE_BUGLIST + GENERATE_CHI + GENERATE_DEPRECATEDLIST + GENERATE_DOCBOOK + GENERATE_DOCSET + GENERATE_ECLIPSEHELP + GENERATE_HTML + GENERATE_HTMLHELP + GENERATE_LATEX + GENERATE_LEGEND + GENERATE_MAN + GENERATE_PERLMOD + GENERATE_QHP + GENERATE_RTF + GENERATE_TAGFILE + GENERATE_TESTLIST + GENERATE_TODOLIST + GENERATE_TREEVIEW + GENERATE_XML + GRAPHICAL_HIERARCHY + GROUP_GRAPHS + GROUP_NESTED_COMPOUNDS + HAVE_DOT + HHC_LOCATION + HIDE_COMPOUND_REFERENCE + HIDE_FRIEND_COMPOUNDS + HIDE_IN_BODY_DOCS + HIDE_SCOPE_NAMES + HIDE_UNDOC_CLASSES + HIDE_UNDOC_MEMBERS + HIDE_UNDOC_RELATIONS + HTML_COLORSTYLE_GAMMA + HTML_COLORSTYLE_HUE + HTML_COLORSTYLE_SAT + HTML_DYNAMIC_SECTIONS + HTML_EXTRA_FILES + HTML_EXTRA_STYLESHEET + HTML_FILE_EXTENSION + HTML_FOOTER + HTML_HEADER + HTML_INDEX_NUM_ENTRIES + HTML_OUTPUT + HTML_STYLESHEET + HTML_TIMESTAMP + IDL_PROPERTY_SUPPORT + IGNORE_PREFIX + IMAGE_PATH + INCLUDED_BY_GRAPH + INCLUDE_FILE_PATTERNS + INCLUDE_GRAPH + INCLUDE_PATH + INHERIT_DOCS + INLINE_GROUPED_CLASSES + INLINE_INFO + INLINE_INHERITED_MEMB + INLINE_SIMPLE_STRUCTS + INLINE_SOURCES + INPUT + INPUT_ENCODING + INPUT_FILTER + INTERACTIVE_SVG + INTERNAL_DOCS + JAVADOC_AUTOBRIEF + LATEX_BATCHMODE + LATEX_BIB_STYLE + LATEX_CMD_NAME + LATEX_EXTRA_FILES + LATEX_EXTRA_STYLESHEET + LATEX_FOOTER + LATEX_HEADER + LATEX_HIDE_INDICES + LATEX_OUTPUT + LATEX_SOURCE_CODE + LATEX_TIMESTAMP + LAYOUT_FILE + LOOKUP_CACHE_SIZE + MACRO_EXPANSION + MAKEINDEX_CMD_NAME + MAN_EXTENSION + MAN_LINKS + MAN_OUTPUT + MAN_SUBDIR + MARKDOWN_SUPPORT + MATHJAX_CODEFILE + MATHJAX_EXTENSIONS + MATHJAX_FORMAT + MATHJAX_RELPATH + MAX_DOT_GRAPH_DEPTH + MAX_INITIALIZER_LINES + MSCFILE_DIRS + MSCGEN_PATH + MULTILINE_CPP_IS_BRIEF + OPTIMIZE_FOR_FORTRAN + OPTIMIZE_OUTPUT_FOR_C + OPTIMIZE_OUTPUT_JAVA + OPTIMIZE_OUTPUT_VHDL + OUTPUT_DIRECTORY + OUTPUT_LANGUAGE + PAPER_TYPE + PDF_HYPERLINKS + PERLMOD_LATEX + PERLMOD_MAKEVAR_PREFIX + PERLMOD_PRETTY + PERL_PATH + PLANTUML_INCLUDE_PATH + PLANTUML_JAR_PATH + PREDEFINED + PROJECT_BRIEF + PROJECT_LOGO + PROJECT_NAME + PROJECT_NUMBER + QCH_FILE + QHG_LOCATION + QHP_CUST_FILTER_ATTRS + QHP_CUST_FILTER_NAME + QHP_NAMESPACE + QHP_SECT_FILTER_ATTRS + QHP_VIRTUAL_FOLDER + QT_AUTOBRIEF + QUIET + RECURSIVE + REFERENCED_BY_RELATION + REFERENCES_LINK_SOURCE + REFERENCES_RELATION + REPEAT_BRIEF + RTF_EXTENSIONS_FILE + RTF_HYPERLINKS + RTF_OUTPUT + RTF_SOURCE_CODE + RTF_STYLESHEET_FILE + SEARCHDATA_FILE + SEARCHENGINE + SEARCHENGINE_URL + SEARCH_INCLUDES + SEPARATE_MEMBER_PAGES + SERVER_BASED_SEARCH + SHORT_NAMES + SHOW_FILES + SHOW_GROUPED_MEMB_INC + SHOW_INCLUDE_FILES + SHOW_NAMESPACES + SHOW_USED_FILES + SIP_SUPPORT + SKIP_FUNCTION_MACROS + SORT_BRIEF_DOCS + SORT_BY_SCOPE_NAME + SORT_GROUP_NAMES + SORT_MEMBERS_CTORS_1ST + SORT_MEMBER_DOCS + SOURCE_BROWSER + SOURCE_TOOLTIPS + STRICT_PROTO_MATCHING + STRIP_CODE_COMMENTS + STRIP_FROM_INC_PATH + STRIP_FROM_PATH + SUBGROUPING + TAB_SIZE + TAGFILES + TCL_SUBST + TEMPLATE_RELATIONS + TOC_EXPAND + TREEVIEW_WIDTH + TYPEDEF_HIDES_STRUCT + UML_LIMIT_NUM_FIELDS + UML_LOOK + USE_HTAGS + USE_MATHJAX + USE_MDFILE_AS_MAINPAGE + USE_PDFLATEX + VERBATIM_HEADERS + WARNINGS + WARN_AS_ERROR + WARN_FORMAT + WARN_IF_DOC_ERROR + WARN_IF_UNDOCUMENTED + WARN_LOGFILE + WARN_NO_PARAMDOC + XML_OUTPUT + XML_PROGRAMLISTING + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/doxygen.xml b/src/data/extra/syntax-highlighting/syntax/doxygen.xml new file mode 100644 index 00000000..a6abda92 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/doxygen.xml @@ -0,0 +1,489 @@ + + +]> + + + + + + \arg @arg + \author @author + \authors @authors + \brief @brief + \callgraph @callgraph + \callergraph @callergraph + \date @date + \deprecated @deprecated + \details @details + \docbookonly @docbookonly + \else @else + \endcond @endcond + \enddocbookonly @enddocbookonly + \endhtmlonly @endhtmlonly + \endif @endif + \endinternal @endinternal + \endlatexonly @endlatexonly + \endlink @endlink + \endmanonly @endmanonly + \endparblock @endparblock + \endrtfonly @endrtfonly + \endsecreflist @endsecreflist + \endxmlonly @endxmlonly + \f[ @f[ + \f] @f] + \f$ @f$ + + \hideinitializer @hideinitializer + \htmlonly @htmlonly + + \internal @internal + \invariant @invariant + \latexonly @latexonly + \li @li + \manonly @manonly + \n @n + \nosubgrouping @nosubgrouping + \only @only + \parblock @parblock + \post @post + \pre @pre + \private @pivate + \privatesection @pivatesection + \protected @protected + \protectedsection @protectedsection + \public @public + \publicsection @publicsection + \pure @pure + \remark @remark + \remarks @remarks + \return @return + \returns @returns + \result @result + \rtfonly @rtfonly + \sa @sa + \secreflist @secreflist + \see @see + \short @short + \showinitializer @showinitializer + \since @since + \static @static + \tableofcontents @tableofcontents + \test @test + \version @version + \xmlonly @xmlonly + + \# @# + \$ @$ + \% @% + \& @& + \> @> + \< @< + \" @" + \:: @:: + \@ @@ + \\ @\ + \~ @~ + \. @. + \-- @-- + \--- @--- + + + + \a @a + \anchor @anchor + \b @b + \c @c + \cite @cite + \cond @cond + \copybrief @copybrief + \copydetails @copydetails + \copydoc @copydoc + \def @def + \dir @dir + \dontinclude @dontinclude + \e @e + \elseif @elseif + \em @em + \enum @enum + \example @example + \exception @exception + \exceptions @exceptions + \extends @extends + \file @file + \htmlinclude @htmlinclude + \idlexcept @idlexcept + \if @if + \ifnot @ifnot + \implements @implements + \include @include + \includelineno @includelineno + \latexinclude @latexinclude + \link @link + \memberof @memberof + \namespace @namespace + \p @p + \package @package + \property @property + \relatedalso @relatedalso + \relatesalso @relatesalso + \related @related + \relates @relates + \retval @retval + \throw @throw + \throws @throws + \verbinclude @verbinclude + \version @version + + \xrefitem @xrefitem + + + \param @param + + \tparam @tparam + + + + \image @image + + + + + \addtogroup @addtogroup + \category @category + \class @class + \diafile @diafile + \dotfile @dotfile + \defgroup @defgroup + \interface @interface + \headerfile @headerfile + \mscfile @mscfile + \page @page + \paragraph @paragraph + \protocol @prtocol + \ref @ref + \section @section + \snippet @snippet + \struct @struct + \subpage @subpage + \subsection @subsection + \subsubsection @subsubsection + \union @union + \weakgroup @weakgroup + + + \addindex @addindex + \copyright @copyright + \fn @fn + \ingroup @ingroup + \line @line + \mainpage @mainpage + \name @name + \overload @overload + \par @par + \skip @skip + \skipline @skipline + \typedef @typedef + \until @until + \var @var + \vhdlflow @vhdlflow + + + \note @note + + + \warning @warning + + + \attention @attention + \bug @bug + + + \todo @todo + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/doxygenlua.xml b/src/data/extra/syntax-highlighting/syntax/doxygenlua.xml new file mode 100644 index 00000000..f3298b54 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/doxygenlua.xml @@ -0,0 +1,497 @@ + + +]> + + + + + + + \arg @arg + \author @author + \authors @authors + \brief @brief + \callgraph @callgraph + \callergraph @callergraph + \date @date + \deprecated @deprecated + \details @details + \docbookonly @docbookonly + \else @else + \endcond @endcond + \enddocbookonly @enddocbookonly + \endhtmlonly @endhtmlonly + \endif @endif + \endinternal @endinternal + \endlatexonly @endlatexonly + \endlink @endlink + \endmanonly @endmanonly + \endparblock @endparblock + \endrtfonly @endrtfonly + \endsecreflist @endsecreflist + \endxmlonly @endxmlonly + \f[ @f[ + \f] @f] + \f$ @f$ + + \hideinitializer @hideinitializer + \htmlonly @htmlonly + + \internal @internal + \invariant @invariant + \latexonly @latexonly + \li @li + \manonly @manonly + \n @n + \nosubgrouping @nosubgrouping + \only @only + \parblock @parblock + \post @post + \pre @pre + \private @pivate + \privatesection @pivatesection + \protected @protected + \protectedsection @protectedsection + \public @public + \publicsection @publicsection + \pure @pure + \remark @remark + \remarks @remarks + \return @return + \returns @returns + \result @result + \rtfonly @rtfonly + \sa @sa + \secreflist @secreflist + \see @see + \short @short + \showinitializer @showinitializer + \since @since + \static @static + \tableofcontents @tableofcontents + \test @test + \version @version + \xmlonly @xmlonly + + \# @# + \$ @$ + \% @% + \& @& + \> @> + \< @< + \" @" + \:: @:: + \@ @@ + \\ @\ + \~ @~ + \. @. + \-- @-- + \--- @--- + + + + \a @a + \anchor @anchor + \b @b + \c @c + \cite @cite + \cond @cond + \copybrief @copybrief + \copydetails @copydetails + \copydoc @copydoc + \def @def + \dir @dir + \dontinclude @dontinclude + \e @e + \elseif @elseif + \em @em + \enum @enum + \example @example + \exception @exception + \exceptions @exceptions + \extends @extends + \file @file + \htmlinclude @htmlinclude + \idlexcept @idlexcept + \if @if + \ifnot @ifnot + \implements @implements + \include @include + \includelineno @includelineno + \latexinclude @latexinclude + \link @link + \memberof @memberof + \namespace @namespace + \p @p + \package @package + \property @property + \relatedalso @relatedalso + \relatesalso @relatesalso + \related @related + \relates @relates + \retval @retval + \throw @throw + \throws @throws + \verbinclude @verbinclude + \version @version + + \xrefitem @xrefitem + + + \param @param + + \tparam @tparam + + + + \image @image + + + + + \addtogroup @addtogroup + \category @category + \class @class + \diafile @diafile + \dotfile @dotfile + \defgroup @defgroup + \interface @interface + \headerfile @headerfile + \mscfile @mscfile + \page @page + \paragraph @paragraph + \protocol @prtocol + \ref @ref + \section @section + \snippet @snippet + \struct @struct + \subpage @subpage + \subsection @subsection + \subsubsection @subsubsection + \union @union + \weakgroup @weakgroup + + + \addindex @addindex + \copyright @copyright + \fn @fn + \ingroup @ingroup + \line @line + \mainpage @mainpage + \name @name + \overload @overload + \par @par + \skip @skip + \skipline @skipline + \typedef @typedef + \until @until + \var @var + \vhdlflow @vhdlflow + + + \note @note + + + \warning @warning + + + \attention @attention + \bug @bug + + + \todo @todo + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/dtd.xml b/src/data/extra/syntax-highlighting/syntax/dtd.xml new file mode 100644 index 00000000..5c39c1b5 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/dtd.xml @@ -0,0 +1,110 @@ + + + +]> + + + + + EMPTY + ANY + CDATA + ID + IDREF + IDREFS + NMTOKEN + NMTOKENS + ENTITY + ENTITIES + NOTATION + PUBLIC + SYSTEM + NDATA + + + + #PCDATA + #REQUIRED + #IMPLIED + #FIXED + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/e.xml b/src/data/extra/syntax-highlighting/syntax/e.xml new file mode 100644 index 00000000..0b96d97e --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/e.xml @@ -0,0 +1,260 @@ + + + + + + FALSE + MAX_INT + MIN_INT + NULL + TRUE + UNDEF + bit + bits + body + bool + byte + byte_array + continue + copy + default + external_pointer + files + file + form + global + index + init + int + it + list + load + long + me + method + module + ntv + of + pat + print + result + source_ref + string + symtab + sys + test + uint + untyped + vec + + + run + init + pre_generate + dut_error + pack + unpack + post_generate + pre_generate + set_config + hex + stop_run + append + size + delete + is_empty + deep_compare + deep_compare_physical + clear + pop0 + setup + crc_32 + + + chars + define + extend + event + ECHO + DOECHO + import + initialize + non_terminal + struct + unit + script + testgroup + type + + + C + add + also + and + as + as_a + break + code + compute + computed + delayed + do + else + each + emit + empty + end + exit + finish + for + from + if + in + is + like + log + new + no + not + only + or + out + read + repeat + return + reverse + routine + step + then + to + traceable + untraceable + var + when + while + with + write + xor + + + before + by + choose + gen + keep + keeping + matches + next + select + sequence + soft + using + + + address + cover + error + events + event + length + kind + ranges + range + sample + text + value + item + transition + illegal + + + always + all + basic + call + cycles + cycle + clock + change + check + expect + fall + first + forever + idle + initial + negedge + others + on + posedge + rise + start + that + time + task + until + verilog + vhdl + wait + within + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/eiffel.xml b/src/data/extra/syntax-highlighting/syntax/eiffel.xml new file mode 100644 index 00000000..51420ec6 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/eiffel.xml @@ -0,0 +1,125 @@ + + + + + + + agent + alias + all + and + as + assign + class + convert + create + creation + debug + deferred + do + else + elseif + end + expanded + export + external + feature + from + frozen + if + implies + indexing + infix + inherit + inspect + is + like + local + loop + not + obsolete + old + once + or + prefix + pure + redefine + reference + rename + rescue + retry + separate + then + undefine + + + + Current + False + Precursor + Result + True + TUPLE + + + + check + ensure + require + variant + invariant + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/elixir.xml b/src/data/extra/syntax-highlighting/syntax/elixir.xml new file mode 100644 index 00000000..85081b89 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/elixir.xml @@ -0,0 +1,225 @@ + + + + + + + + catch + cond + else + if + raise + rescue + throw + try + unless + + + do + end + case + bc + lc + for + receive + exit + after + quote + unquote + super + and + not + or + when + xor + in + inlist + inbits + + + nil + true + false + + + fn + defmodule + def + defp + defprotocol + defimpl + defrecord + defstruct + defmacro + defmacrop + defdelegate + defcallback + defmacrocallback + defexception + defoverridable + + + import + require + alias + use + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/elm.xml b/src/data/extra/syntax-highlighting/syntax/elm.xml new file mode 100644 index 00000000..183d5766 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/elm.xml @@ -0,0 +1,143 @@ + + + + + + type + alias + port + + + case + of + if + else + then + + + let + in + + + module + exposing + import + as + + + infix + left + right + non + + + effect + where + command + subscription + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/email.xml b/src/data/extra/syntax-highlighting/syntax/email.xml new file mode 100644 index 00000000..de1d44c3 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/email.xml @@ -0,0 +1,101 @@ + + + + + + Authentication-Results: + Bcc: + Cc: + Comments: + Content-Description: + Content-Disposition: + Content-Transfer-Encoding: + Content-Type: + Date: + Delivered-To: + DKIM-Signature: + Errors-To: + From: + In-Reply-To: + Keywords: + Lines: + Message-Id: + List-Archive: + List-Id: + List-Help: + List-Post: + List-Unsubscribe: + List-Subscribe: + MIME-Version: + Organization: + Precedence: + Received: + Received-SPF: + References: + Resent-Bcc: + Resent-Cc: + Resent-Date: + Resent-From: + Resent-Message-Id: + Return-Path: + Resent-Reply-To: + Resent-Sender: + Resent-To: + Reply-To: + Sender: + Subject: + Supersedes: + To: + User-Agent: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/erlang.xml b/src/data/extra/syntax-highlighting/syntax/erlang.xml new file mode 100644 index 00000000..7bbcbc96 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/erlang.xml @@ -0,0 +1,250 @@ + + + + + + + + + +] +> + + + + + + + after + begin + case + catch + cond + end + fun + if + let + of + query + receive + all_true + some_true + + + + + div + rem + or + xor + bor + bxor + bsl + bsr + and + band + not + bnot + + + + + abs + accept + alarm + apply + atom_to_list + binary_to_list + binary_to_term + check_process_code + concat_binary + date + delete_module + disconnect_node + element + erase + exit + float + float_to_list + garbage_collect + get + get_keys + group_leader + halt + hd + integer_to_list + is_alive + is_atom + is_binary + is_boolean + is_float + is_function + is_integer + is_list + is_number + is_pid + is_port + is_process_alive + is_record + is_reference + is_tuple + length + link + list_to_atom + list_to_binary + list_to_float + list_to_integer + list_to_pid + list_to_tuple + load_module + loaded + localtime + make_ref + module_loaded + node + nodes + now + open_port + pid_to_list + port_close + port_command + port_connect + port_control + ports + pre_loaded + process_flag + process_info + processes + purge_module + put + register + registered + round + self + setelement + size + spawn + spawn_link + spawn_opt + split_binary + statistics + term_to_binary + throw + time + tl + trunc + tuple_to_list + unlink + unregister + whereis + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/euphoria.xml b/src/data/extra/syntax-highlighting/syntax/euphoria.xml new file mode 100644 index 00000000..ef280771 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/euphoria.xml @@ -0,0 +1,378 @@ + + + + + + + + + + abort + allocate + allocate_string + allow_break + and + and_bits + append + arccos + arcsin + arctan + atom_to_float32 + atom_to_float64 + as + begin + bits_to_int + bytes_to_int + c_func + c_proc + call + call_back + call_func + call_proc + check_break + chdir + clear_screen + close + command_line + compare + cos + crash_file + crash_message + current_dir + custom_sort + date + define_c_func + define_c_proc + define_c_var + dir + display_text_image + do + else + elsif + end + equal + exit + find + float32_to_atom + float64_to_atom + floor + flush + for + free + free_console + function + get_bytes + get_key + get_mouse + get_position + get_screen_char + getc + getenv + gets + if + include + int_to_bits + int_to_bytes + length + lock_file + log + lower + machine_func + machine_proc + match + mem_copy + mem_set + mouse_events + mouse_pointer + not + not_bits + of + open + open_dll + or + or_bits + peek + peek4 + peek4s + peek4u + platform + poke + poke4 + position + power + prepend + print + printf + procedure + profile + prompt_number + prompt_string + put_screen_char + puts + rand + read_bitmap + register_block + remainder + repeat + return + reverse + routine_id + save_bitmap + save_text_image + scroll + seek + set_rand + sin + sleep + sort + sprint + sprintf + sqrt + system + system_exec + tan + text_color + then + time + to + trace + type + unlock_file + unregister_block + upper + value + video_config + wait_key + walk_dir + where + while + wildcard_file + wildcard_match + with + without + wrap + xor + xor_bits + ? + + + + atom + constant + global + integer + object + sequence + type + + + + PI + GET_SUCCESS + + + + addto + adjustment + alignment + appendto + append_page + arrow + aspect_frame + button + calendar + cell_renderer_text + cell_renderer_toggle + check + checkbutton + check_menu_item + choice + combo + connect + drawingarea + draw_arc + draw_image + draw_line + draw_polygon + draw_point + draw_rectangle + end_submenu + entry + euget + event_box + flatten + font + frame + get + getImage + getSize + g_list + g_list_to_sequence + deallocate_strings + draw_line + hbox + hbuttonbox + hpaned + hscrollbar + hseparator + hscale + idle_add + image + image_menu_item + init + label + limit + list_store + list_view + list_view_column + main + mark_day + menu + menubar + menu_item + mouse_button + new_gc + new_group + new_menu_group + notebook + option + option_menu + pack + path + pop + progress_bar + push + quit + radio + radiobutton + radio_menu_item + rc_parse + run + separator_menu_item + set + set_submenu + str + scrolled_window + seq_to_str + setfg + setProperty + show + spinbutton + statusbar + table + textbox + timer + togglebutton + toolbar + tooltip + tree_store + tree_view + tree_view_column + vbox + vbuttonbox + vpaned + vscale + vscrollbar + vseparator + when + window + NULL + TRUE + FALSE + color_selection + file_selection + font_selection_dialog + Error + Info + Question + Warn + YesNo + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/fasm.xml b/src/data/extra/syntax-highlighting/syntax/fasm.xml new file mode 100644 index 00000000..04158a5e --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/fasm.xml @@ -0,0 +1,898 @@ + + + + + + + + + rax + eax + ax + ah + al + rbx + ebx + bx + bh + bl + rcx + ecx + cx + ch + cl + rdx + edx + dx + dh + dl + rbp + ebp + bp + rsi + esi + si + rdi + edi + di + rsp + esp + sp + r8 + r9 + r10 + r11 + r12 + r13 + r14 + r15 + + cs + ds + es + fs + gs + ss + + cr0 + + cr2 + cr3 + cr4 + + dr0 + dr1 + dr2 + dr3 + dr6 + dr7 + + st + + mm0 + mm1 + mm2 + mm3 + mm4 + mm5 + mm6 + mm7 + + xmm0 + xmm1 + xmm2 + xmm3 + xmm4 + xmm5 + xmm6 + xmm7 + + + aaa + aad + aam + aas + adc + add + addpd + addps + addsd + addss + addsubpd + addsubps + and + andnpd + andnps + andpd + andps + arpl + bound + bsf + bsr + bswap + bt + btc + btr + bts + call + cbw + cwde + cwd + cdq + cdqe + cqo + clc + cld + clgi + cli + clts + clflush + cmc + cmova + cmovae + cmovb + cmovbe + cmovc + cmove + cmovg + cmovge + cmovl + cmovle + cmovna + cmovnae + cmovnb + cmovnbe + cmovnc + cmovne + cmovng + cmovnge + cmovnl + cmovnle + cmovno + cmovnp + cmovns + cmovnz + cmovo + cmovp + cmovpe + cmovpo + cmovs + cmovz + cmp + cmpeqpd + cmpeqps + cmpeqsd + cmpeqss + cmplepd + cmpleps + cmplesd + cmpless + cmpltpd + cmpltps + cmpltsd + cmpltss + cmpneqpd + cmpneqps + cmpneqsd + cmpneqss + cmpnlepd + cmpnleps + cmpnlesd + cmpnless + cmpnltpd + cmpnltps + cmpnltsd + cmpnltss + cmpordpd + cmpordps + cmpordsd + cmpordss + cmppd + cmpps + cmps + cmpsb + cmpsd + cmpss + cmpsw + cmpunordpd + cmpunordps + cmpunordsd + cmpunordss + cmpxchg + cmpxchg486 + cmpxchg8b + cmpxchg16b + comisd + comiss + cpuid + cvtdq2pd + cvtdq2ps + cvtpd2dq + cvtpd2pi + cvtpd2ps + cvtpi2pd + cvtpi2ps + cvtps2dq + cvtps2pd + cvtps2pi + cvtsd2si + cvtsd2ss + cvtsi2sd + cvtsi2ss + cvtss2sd + cvtss2si + cvttpd2dq + cvttpd2pi + cvttps2dq + cvttps2pi + cvttsd2si + cvttss2si + daa + das + dec + div + divpd + divps + divsd + divss + emms + enter + f2xm1 + fabs + fadd + faddp + fbld + fbstp + fchs + fclex + fnclex + fcmovb + fcmovbe + fcmove + fcmovnb + fcmovnbe + fcmovne + fcmovnu + fcmovu + fcom + fcomp + fcompp + fcomi + fcomip + fcos + fdecstp + fdisi + feni + fdiv + fdivr + fdivp + fdivrp + femms + ffree + ffreep + fiadd + ficom + ficomp + fidiv + fidivr + fild + fimul + fincstp + finit + fist + fistp + fisttp + fisub + fisubr + fld + fld1 + fldl2e + fldl2t + fldlg2 + fldln2 + fldcw + fldenv + fldpi + fldz + fmul + fmulp + fndisi + fneni + fninit + fnop + fnsave + fnstcw + fnstenv + fnstsw + fnwait + fpatan + fptan + fprem + fprem1 + frndint + frstor + fsave + fscale + fsetpm + fsin + fsincos + fsqrt + fst + fstp + fstcw + fstenv + fstsw + fsub + fsubr + fsubp + fsubrp + ftst + fucom + fucomp + fucompp + fucomi + fucomip + fwait + fxam + fxch + fxrstor + fxsave + fxtract + fyl2x + fyl2xp1 + haddpd + haddps + hlt + hsubpd + hsubps + ibts + idiv + imul + in + inc + ins + insb + insd + insw + int + int1 + int3 + into + invd + invlpg + invlpga + iret + iretd + iretq + iretw + ja + jae + jb + jbe + jc + je + jg + jge + jl + jle + jna + jnae + jnb + jnbe + jnc + jne + jng + jnge + jnl + jnle + jno + jnp + jns + jnz + jo + jp + jpe + jpo + js + jz + jcxz + jecxz + jrcxz + jmp + lahf + lar + lddqu + ldmxcsr + lds + les + lea + leave + lfence + lfs + lgdt + lgs + lidt + lldt + lmsw + loadall + loadall286 + lods + lodsb + lodsd + lodsq + lodsw + loop + loope + loopne + loopnz + loopz + lsl + lss + ltr + maskmovdqu + maskmovq + maxpd + maxps + maxsd + maxss + mfence + minpd + minps + minsd + minss + monitor + mov + movapd + movaps + movd + movddup + movdq2q + movdqa + movdqu + movhlps + movhpd + movhps + movlhps + movlpd + movlps + movmskpd + movmskps + movntdq + movnti + movntpd + movntps + movntq + movq + movq2dq + movs + movsb + movsd + movshdup + movsldup + movsq + movss + movsx + movsxd + movsw + movupd + movups + movzx + mul + mulpd + mulps + mulsd + mulss + mwait + neg + nop + not + or + orpd + orps + out + outs + outsb + outsw + outsd + packssdw + packsswb + packuswb + paddb + paddd + paddq + paddsb + paddsw + paddusb + paddusw + paddw + pand + pandn + pause + pavgb + pavgusb + pavgw + pcmpeqb + pcmpeqw + pcmpeqd + pcmpgtb + pcmpgtw + pcmpgtd + pdistib + pextrw + pf2id + pf2iw + pfacc + pfadd + pfcmpeq + pfcmpge + pfcmpgt + pfmax + pfmin + pfmul + pfnacc + pfpnacc + pfrcp + pfrcpit1 + pfrcpit2 + pfrsqit1 + pfrsqrt + pfsub + pfsubr + pi2fd + pi2fw + pinsrw + pmachriw + pmaddwd + pmagw + pmaxsw + pmaxub + pminsw + pminub + pmovmskb + pmulhrw + pmulhuw + pmulhw + pmullw + pmuludq + pmvgezb + pmvlzb + pmvnzb + pmvzb + pop + popa + popaw + popad + popf + popfw + popfd + popfq + por + prefetch + prefetchnta + prefetcht0 + prefetcht1 + prefetcht2 + prefetchw + psadbw + pshufd + pshufhw + pshuflw + pshufw + pslld + pslldq + psllq + psllw + psrad + psraw + psrld + psrldq + psrlq + psrlw + psubb + psubd + psubq + psubsb + psubsiw + psubsw + psubusb + psubusw + psubw + pswapd + punpckhbw + punpckhdq + punpckhqdq + punpckhwd + punpcklbw + punpckldq + punpcklqdq + punpcklwd + push + pusha + pushad + pushaw + pushf + pushfd + pushfq + pushfw + pxor + rcl + rcr + rcpps + rcpss + rdmsr + rdpmc + rdshr + rdtsc + rdtscp + ret + retf + retn + rol + ror + rsdc + rsldt + rsm + rsqrtps + rsqrtss + rsts + sahf + sal + sar + salc + sbb + scas + scasb + scasd + scasq + scasw + seta + setae + setb + setbe + setc + sete + setg + setge + setl + setle + setna + setnae + setnb + setnbe + setnc + setne + setng + setnge + setnl + setnle + setno + setnp + setns + setnz + seto + setp + setpe + setpo + sets + setz + sfence + sgdt + shl + shld + shr + shrd + shufpd + shufps + sidt + skinit + sldt + smi + smint + smintold + smsw + sqrtpd + sqrtps + sqrtsd + sqrtss + stc + std + stgi + sti + stmxcsr + stos + stosb + stosd + stosq + stosw + str + sub + subpd + subps + subsd + subss + svdc + svldt + svts + swapgs + syscall + sysenter + sysexit + sysret + test + ucomisd + ucomiss + ud0 + ud1 + ud2 + umov + unpckhpd + unpckhps + unpcklpd + unpcklps + verr + verw + vmload + vmmcall + vmrun + vmsave + wait + wbinvd + wrmsr + wrshr + xadd + xbts + xchg + xlat + xlatb + xor + xorpd + xorps + + + + + db + dw + du + dd + dp + df + dq + dt + + rb + rw + rd + rp + rf + rq + rt + + file + + byte + word + dword + pword + qword + tbyte + tword + dqword + ptr + + + + append + at + break + common + display + else + end + equ + fix + foward + if + irp + irps + label + local + match + macro + purge + repeat + rept + reverse + restore + struc + times + while + virtual + + + + align + entry + extrn + format + include + invoke + data + load + from + heap + org + proc + public + section + segment + stack + store + use16 + use32 + use64 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/fastq.xml b/src/data/extra/syntax-highlighting/syntax/fastq.xml new file mode 100644 index 00000000..30387fc0 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/fastq.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/ferite.xml b/src/data/extra/syntax-highlighting/syntax/ferite.xml new file mode 100644 index 00000000..13951c7a --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/ferite.xml @@ -0,0 +1,117 @@ + + + + + + break + case + continue + else + for + if + do + function + namespace + while + class + new + uses + global + return + self + super + null + iferr + fix + + + number + void + string + array + object + final + static + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/fgl-4gl.xml b/src/data/extra/syntax-highlighting/syntax/fgl-4gl.xml new file mode 100644 index 00000000..b546243f --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/fgl-4gl.xml @@ -0,0 +1,363 @@ + + + + + + at + by + go + if + in + is + no + of + on + or + to + up + + add + ALL + and + ANY + avg + day + end + ESC + for + key + let + log + max + mdy + min + not + put + red + row + run + set + sum + top + + blue + BOLD + call + case + cyan + desc + DROP + else + exit + file + form + FREE + from + goto + help + HIDE + HOLD + HOUR + into + last + left + like + line + load + LOCK + main + menu + MODE + name + NEED + next + null + open + page + PIPE + quit + READ + rows + show + skip + sort + STEP + STOP + TEMP + text + then + thru + true + user + WAIT + when + with + WORK + WRAP + year + + after + alter + ascii + BEGIN + blink + clear + close + count + DEFER + DIRTY + error + every + false + fetch + field + first + flush + green + GROUP + index + input + label + lines + month + order + outer + pause + print + right + share + sleep + space + start + TABLE + today + union + UNITS + using + where + WHILE + white + + ACCEPT + before + border + bottom + column + commit + create + cursor + define + delete + enable + ESCAPE + exists + finish + format + HAVING + header + insert + length + locate + margin + MINUTE + MODIFY + normal + option + output + PAGENO + prompt + record + report + return + revoke + SCREEN + scroll + SECOND + select + spaces + status + UNIQUE + UNLOAD + update + values + window + yellow + + between + clipped + cluster + columns + command + comment + connect + CURRENT + declare + display + execute + foreach + globals + infield + MAGENTA + matches + message + options + prepare + printer + program + reverse + trailer + upshift + waiting + without + + ABSOLUTE + continue + database + defaults + DISTINCT + EXTERNAL + function + INT_FLAG + NOTFOUND + previous + ROLLBACK + whenever + wordwrap + + attribute + committed + construct + delimiter + downshift + exclusive + INTERRUPT + ISOLATION + otherwise + quit_flag + returning + + attributes + CONSTRAINT + initialize + statistics + + fgl_lastkey + formhandler + + fgl_lastkey() + + + + + char + date + array + float + money + serial + DECIMAL + integer + NUMERIC + VARCHAR + DATETIME + FRACTION + INTERVAL + smallint + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/fgl-per.xml b/src/data/extra/syntax-highlighting/syntax/fgl-per.xml new file mode 100644 index 00000000..b3cea4d4 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/fgl-per.xml @@ -0,0 +1,172 @@ + + + + + + by + to + + end + not + red + + blue + cyan + keys + like + null + size + type + + black + color + green + input + today + white + + format + record + screen + tables + yellow + + default + display + include + magenta + noentry + picture + reverse + through + UPSHIFT + without + + autonext + comments + COMPRESS + database + formonly + noupdate + required + WORDWRAP + + character + downshift + invisible + underline + + attributes + delimiters + + instructions + + + char + date + array + float + money + serial + DECIMAL + integer + NUMERIC + VARCHAR + DATETIME + FRACTION + INTERVAL + smallint + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/fish.xml b/src/data/extra/syntax-highlighting/syntax/fish.xml new file mode 100644 index 00000000..a13fb0a6 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/fish.xml @@ -0,0 +1,1001 @@ + + + + + + + + + + + + + + + + + + + + + +]> + + + + + + + + + abbr + alias + argparse + bg + bind + block + cd + cdh + commandline + complete + contains + count + dirs + disown + echo + emit + end + exit + fg + fish + fish_config + fish_indent + fish_key_reader + fish_mode_prompt + fish_opt + fish_prompt + fish_right_prompt + fish_update_completions + fish_vi_mode + funced + funcsave + functions + help + history + isatty + jobs + math + nextd + open + prevd + printf + psub + pushd + random + realpath + return + set_color + source + status + suspend + trap + type + ulimit + umask + vared + + + + break + breakpoint + continue + dirh + false + popd + prompt_pwd + pwd + true + + + + and + not + or + + + + escape + join + length + lower + match + repeat + replace + split + sub + trim + unescape + upper + + + + aclocal + aconnect + aplay + apm + apmsleep + apropos + arch + arecord + ar + as86 + as + autoconf + autoheader + automake + awk + basename + bash + bc + bison + bunzip2 + bzcat + bzcmp + bzdiff + bzegrep + bzfgrep + bzgrep + bzip2 + bzip2recover + bzless + bzmore + cal + cat + cc + cdda2wav + cdparanoia + cdrdao + cd-read + cdrecord + chattr + chfn + chgrp + chmod + chown + chroot + chsh + chvt + c++ + clang + clear + cmake + cmp + co + col + comm + cpio + cp + cpp + cut + date + dc + dcop + dd + deallocvt + df + diff3 + diff + dircolors + directomatic + dir + dirname + dmesg + dnsdomainname + domainname + du + dumpkeys + echo + ed + egrep + env + expr + false + fbset + fgconsole + fgrep + file + find + flex + flex++ + fmt + free + ftp + funzip + fuser + gawk + gcc + gc + gdb + getent + getkeycodes + getopt + gettext + gettextize + gimp + gimp-remote + gimptool + g++ + git + gmake + gocr + grep + groff + groups + gs + gunzip + gzexe + gzip + head + hexdump + hostname + id + igawk + install + join + kbd_mode + kbdrate + kdialog + kfile + killall + kill + lastb + last + ld86 + ldd + ld + less + lex + link + ln + ln + loadkeys + loadunimap + locate + lockfile + login + logname + lp + lpr + lsattr + ls + lsmod + lsmod.old + lynx + lzcat + lzcmp + lzdiff + lzegrep + lzfgrep + lzgrep + lzless + lzmainfo + lzma + lzmore + m4 + make + man + mapscrn + mesg + mkdir + mkfifo + mknod + mktemp + more + mount + msgfmt + mv + namei + nano + nasm + nawk + netstat + nice + nisdomainname + nl + nm86 + nmap + nm + nohup + nop + nroff + od + openvt + passwd + patch + pcregrep + pcretest + perl + perror + pgawk + pidof + ping + printf + pr + procmail + prune + ps2ascii + ps2epsi + ps2frag + ps2pdf + ps2ps + psbook + ps + psmerge + psnup + psresize + psselect + pstops + pstree + pwd + qmake + rbash + rcs + readlink + red + resizecons + rev + rmdir + rm + rsync + run-parts + sash + scp + sed + seq + setfont + setkeycodes + setleds + setmetamode + setserial + setterm + sh + showkey + shred + size86 + size + skill + sleep + slogin + snice + sort + sox + split + ssed + ssh-add + ssh-agent + ssh + ssh-keygen + ssh-keyscan + stat + strings + strip + stty + sudo + suidperl + su + sum + svn + sync + tac + tail + tar + tee + tempfile + test + touch + tr + troff + true + truncate + umount + uname + unicode_start + unicode_stop + uniq + unlink + unlzma + unxz + unzip + updatedb + updmap + uptime + users + utmpdump + uuidgen + valgrind + vdir + vmstat + wall + wc + wget + whatis + whereis + which + whoami + who + w + write + xargs + xdg-open + xhost + xmodmap + xset + xzcat + xz + yacc + yes + ypdomainname + zcat + zcmp + zdiff + zegrep + zfgrep + zforce + zgrep + zip + zless + zmore + znew + zsh + zsoelim + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/flatbuffers.xml b/src/data/extra/syntax-highlighting/syntax/flatbuffers.xml new file mode 100644 index 00000000..ae258ac4 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/flatbuffers.xml @@ -0,0 +1,114 @@ + + + + + + + namespace + attribute + table + struct + enum + union + rpc_service + root_type + include + file_identifier + file_extension + + + bool + byte + ubyte + short + ushort + int + uint + float + long + ulong + double + int8 + uint8 + int16 + uint16 + int32 + uint32 + int64 + uint64 + float32 + float64 + string + + + true + false + + + deprecated + required + key + hash + id + force_align + bit_flags + original_order + nested_flatbuffer + csharp_partial + streaming + idempotent + cpp_type + cpp_ptr_type + native_inline + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/fortran-fixed.xml b/src/data/extra/syntax-highlighting/syntax/fortran-fixed.xml new file mode 100644 index 00000000..6ea08a3b --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/fortran-fixed.xml @@ -0,0 +1,592 @@ + + + + + + + + + + + + allocate + break + call + common + continue + cycle + deallocate + forall + where + elsewhere + equivalence + exit + external + for + go + goto + if + implicit + include + interface + intrinsic + namelist + none + nullify + operator + assignment + pause + procedure + pure + elemental + record + recursive + result + return + stop + to + use + only + entry + while + + + + access + backspace + close + inquire + open + print + read + rewind + write + format + + + + unit + end + err + fmt + iostat + status + advance + size + eor + + + + unit + iostat + err + file + status + access + form + recl + blank + position + action + delim + pad + + + + unit + iostat + err + file + exist + opened + number + named + name + access + sequential + direct + form + formatted + unformatted + recl + nextrec + blank + position + action + read + write + readwrite + delim + pad + + + parameter + save + pointer + public + private + target + allocatable + optional + sequence + + + + + + + + + abs + cabs + dabs + iabs + aimag + aint + dint + anint + dnint + ceiling + cmplx + dcmplx + dimag + floor + nint + idnint + int + idint + ifix + real + float + sngl + dble + dreal + aprime + dconjg + dfloat + ddmim + rand + + modulo + conjg + dprod + dim + ddim + idim + max + amax0 + amax1 + max0 + max1 + dmax1 + min + amin0 + amin1 + min0 + min1 + dmin1 + mod + amod + dmod + sign + dsign + isign + + acos + dacos + asin + dasin + atan + datan + atan2 + datan2 + cos + ccos + dcos + cosh + dcosh + exp + cexp + dexp + log + alog + dlog + clog + log10 + alog10 + dlog10 + sin + csin + dsin + sinh + dsinh + sqrt + csqrt + dsqrt + tan + dtan + tanh + dtanh + + + achar + char + iachar + ichar + + lge + lgt + lle + llt + + adjustl + adjustr + index + len_trim + scan + verify + + logical + + exponent + fraction + nearest + rrspacing + scale + set_exponent + spacing + + btest + iand + ibclr + ibits + ibset + ieor + ior + ishft + ishftc + not + + mvbits + + merge + + + + + + associated + present + kind + + len + + digits + epsilon + huge + maxexponent + minexponent + precision + radix + range + tiny + + bit_size + + allocated + lbound + ubound + shape + size + + + + + + repeat + trim + + selected_int_kind + selected_real_kind + + transfer + + dot_product + matmul + + all + any + count + maxval + minval + product + sum + + pack + unpack + + reshape + + spread + + cshift + eoshift + + transpose + + maxloc + minloc + + + + + + date_and_time + system_clock + + random_number + random_seed + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/fortran-free.xml b/src/data/extra/syntax-highlighting/syntax/fortran-free.xml new file mode 100644 index 00000000..36605295 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/fortran-free.xml @@ -0,0 +1,311 @@ + + + + + + + + + + + + keywords##Fortran (Fixed Format) + associate + import + impure + + + io_functions##Fortran (Fixed Format) + + + + io_keywords##Fortran (Fixed Format) + + + + open_keywords##Fortran (Fixed Format) + + + + inquire_keywords##Fortran (Fixed Format) + + + types##Fortran (Fixed Format) + abstract + asynchronous + bind + contiguous + deferred + enum + enumerator + final + generic + nopass + non_overridable + protected + value + volatile + + + + + + + elemental_procs##Fortran (Fixed Format) + + acosh + asinh + atanh + bessel_j0 + bessel_j1 + bessel_jn + bessel_y0 + bessel_y1 + bessel_yn + erf + erfc + erfc_scaled + gamma + log_gamma + hypot + + + + + inquiry_fn##Fortran (Fixed Format) + + extends_type_of + same_type_as + storage_size + + lcobound + ucobound + image_index + + + + + transform_fn##Fortran (Fixed Format) + + selected_char_kind + + parity + iall + iany + iparity + + num_images + this_image + + + + + non_elem_subr##Fortran (Fixed Format) + + cpu_time + + execute_command_line + get_environment_variable + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/freebasic.xml b/src/data/extra/syntax-highlighting/syntax/freebasic.xml new file mode 100644 index 00000000..e7f38314 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/freebasic.xml @@ -0,0 +1,573 @@ + + + + + + + #DEFINE + #ELSE + #ELSEIF + #ENDIF + #IF + #IFDEF + #IFNDEF + #UNDEF + $DYNAMIC + $INCLIB + $INCLUDE + $STATIC + + + + + Declare + + Open + + For + Input + Output + Binary + Random + + Close + + To + Step + Next + As + Break + Exit + If + Then + Else + Until + Select + System + Case + Default + EndSelect + Do + Loop + While + Wend + End + Type + DefType + Dim + Global + Function + Sub + Shared + Protected + Static + Declare + + Unsigned + + Data + Restore + Read + + + Goto + Gosub + Return + + DEFBYTE + DEFDBL + DEFINT + DEFLNG + DEFSHORT + DEFSNG + DEFSTR + DEFUBYTE + DEFUINT + DEFUSHORT + + + + Integer + Long + Single + Double + String + PTR + Byte + Dword + Qword + Word + + + + AAA + AAD + AAM + AAS + ABS + ACOS + ADC + ADD + ALLOCATE + AND + AND + ARPL + ASC + ASIN + ASM + ATAN2 + ATN + BASE + BEEP + BIN$ + BLOAD + BOUND + BREAK + BSAVE + BSF + BSR + BSWAP + BT + BTC + BTR + BTS + BYREF + CALL + CALLOCATE + CALLS + CBW + CBYTE + CDBL + CDQ + CHAIN + CHDIR + CHR$ + CINT + CIRCLE + CLC + CLD + CLEAR + CLI + CLNG + CLOSE + CLTS + CMC + CMP + CMPS + CMPSB + CMPSD + CMPSW + CMPXCHG + COLOR + COMMAND$ + COMMON + CONST + CONTINUE + COS + CSHORT + CSIGN + CSNG + CUNSG + CURDIR$ + CVD + CVI + CVL + CVS + CWD + CWDE + DAA + DAS + DATA + DATE$ + DEALLOCATE + DEC + DIM + DIR$ + DIV + DRAW + END + ENTER + ENUM + ENVIRON + ENVIRON$ + EOF + EQV + ERASE + EXEC + EXEPATH + EXP + FIX + FLIP + FRE + FREEFILE + GET + GETKEY + GETMOUSE + HEX$ + HLT + IDIV + IMP + IMUL + IN + INC + INKEY$ + INP + INPUT + INPUT$ + INS + INSB + INSD + INSTR + INT + INT + INTO + INVD + INVLPG + IRET + IRETD + JA + JAE + JB + JBE + JC + JCXZ + JE + JECXZ + JG + JGE + JL + JLE + JMP + JNA + JNAE + JNB + JNBE + JNC + JNE + JNG + JNGE + JNL + JNLE + JNO + JNP + JNS + JNZ + JO + JP + JPE + JPO + JS + JUMP + JZ + KILL + LAHF + LAR + LBOUND + LCASE$ + LDS + LEA + LEAVE + LEAVED + LEAVEW + LEFT$ + LEN + LES + LET + LFS + LGDT + LGS + LIB + LIDT + LINE + LLDT + LMSW + LOC + LOCK + LOCK + LODS + LODSB + LODSD + LODSW + LOF + LOG + LOOPD + LOOPDE + LOOPDNE + LOOPDNZ + LOOPDZ + LOOPE + LOOPNE + LOOPNZ + LOOPW + LOOPWE + LOOPWNE + LOOPWNZ + LOOPWZ + LOOPZ + LSET + LSL + LSS + LTR + LTRIM$ + MID$ + MKD$ + MKDIR + MKI$ + MKL$ + MKS$ + MOD + MOV + MOVS + MOVSB + MOVSD + MOVSW + MOVSX + MOVZX + MUL + MULTIKEY + NAME + NEG + NOP + NOT + NOTHING + OCT$ + OPTION + OR + OUT + OUTS + OUTSB + OUTSD + OUTSW + PAINT + PALETTE + PCOPY + PEEK + PEEKI + PEEKS + PMAP + POINT + POKE + POKEI + POKES + POP + POPA + POPAD + POPF + POPFD + POS + PRESERVE + PRESET + PRINT + PRIVATE + PROCPTR + PSET + PTR + PUBLIC + PUSH + PUSHA + PUSHAD + PUSHF + PUSHFD + PUT + RANDOMIZE + RCL + RCR + REALLOCATE + REDIM + REM + REP + REPE + REPNE + REPNZ + REPZ + RESET + RET + RETURN + RGB + RIGHT$ + RMDIR + RND + ROL + ROR + RSET + RTRIM$ + RUN + SADD + SAHF + SAL + SAR + SBB + SCAS + SCASB + SCASD + SCASW + SCREEN + SCREENCOPY + SCREENINFO + SCREENLOCK + SCREENPTR + SCREENSET + SCREENUNLOCK + SEEK + SETA + SETAE + SETB + SETBE + SETC + SETDATE + SETE + SETENVIRON + SETG + SETGE + SETL + SETLE + SETNA + SETNAE + SETNB + SETNBE + SETNC + SETNE + SETNG + SETNGE + SETNL + SETNLE + SETNO + SETNP + SETNS + SETNZ + SETO + SETP + SETPE + SETPO + SETS + SETZ + SGDT + SGN + SHARED + SHELL + SHL + SHLD + SHR + SHRD + SIDT + SIN + SLDT + SLEEP + SMSW + SPACE$ + SQR + STATIC + STC + STD + STI + STOP + STOS + STOSB + STOSD + STOSW + STR + STR$ + STRING$ + SWAP + TAN + TEST + TIME$ + TIMER + TRIM$ + TYPE + UBOUND + UCASE$ + UNION + UNLOCK + VAL + VARPTR + VERR + VERW + VIEW + WAIT + WINDOWTITLE + WRITE + XADD + XCHG + XLAT + XLATB + XOR + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/fsharp.xml b/src/data/extra/syntax-highlighting/syntax/fsharp.xml new file mode 100644 index 00000000..ad42ca02 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/fsharp.xml @@ -0,0 +1,283 @@ + + + + + + + + +]> + + + + + abstract + and + as + assert + base + + class + delegate + + + dowcast + downto + elif + else + + exception + extern + false + for + fun + function + functor + global + if + in + + inherit + inline + interfaece + internal + lazy + let + match + member + + mutable + namespace + new + not + null + + of + + or + override + private + public + rec + ref + return + + static + + then + to + true + try + type + upcast + use + val + void + when + while + with + yield + + + bool + byte + sbyte + int16 + uint16 + int + uint32 + int64 + uint64 + nativeint + unativeint + char + string + decimal + unit + void + float32 + single + float + double + bigint + option + seq + + + end + + + sig + + + struct + + + object + + + begin + + + do + + + done + + + module + open + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/fstab.xml b/src/data/extra/syntax-highlighting/syntax/fstab.xml new file mode 100644 index 00000000..c0470379 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/fstab.xml @@ -0,0 +1,96 @@ + + + + + + + ext2 + ext3 + fat + vfat + reiser + proc + none + sysfs + ntfs + umsdos + swap + minix + iso9660 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/ftl.xml b/src/data/extra/syntax-highlighting/syntax/ftl.xml new file mode 100644 index 00000000..e20db763 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/ftl.xml @@ -0,0 +1,84 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/gap.xml b/src/data/extra/syntax-highlighting/syntax/gap.xml new file mode 100644 index 00000000..43bcafff --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/gap.xml @@ -0,0 +1,7835 @@ + + + + + + + + + + + + + break + continue + do + elif + else + + + + + + then + + + + + + and + fail + false + not + or + true + + + + + + in + local + rec + return + + + + mod + + + + AClosVecLib + AClosestVectorCombinationsMatFFEVecFFE + AClosestVectorCombinationsMatFFEVecFFECoords + AClosestVectorDriver + ANFAutomorphism + ANonReesCongruenceOfSemigroup + APolyProd + AbelianGroup + AbelianGroupCons + AbelianInvariants + AbelianInvariantsMultiplier + AbelianInvariantsNormalClosureFpGroup + AbelianInvariantsNormalClosureFpGroupRrs + AbelianInvariantsOfList + AbelianInvariantsSubgroupFpGroup + AbelianInvariantsSubgroupFpGroupMtc + AbelianInvariantsSubgroupFpGroupRrs + AbelianNumberField + AbelianNumberFieldByReducedGaloisStabilizerInfo + AbelianPQuotient + AbelianSubfactorAction + AbsAndIrredModules + AbsInt + AbsolutIrreducibleModules + AbsoluteIrreducibleModules + AbsoluteValue + AbstractWordTietzeWord + AbstractWordTzWord + ActingAlgebra + ActingDomain + Action + ActionAbelianCSPG + ActionHomomorphism + ActionHomomorphismAttr + ActionHomomorphismConstructor + ActionKernelExternalSet + ActionSubspacesElementaryAbelianGroup + ActorOfExternalSet + Add + AddAbelianRelator + AddCoeffs + AddCosetInfoStabChain + AddDictionary + AddEquationsSQ + AddGenerator + AddGenerators + AddGeneratorsExtendSchreierTree + AddGeneratorsGenimagesExtendSchreierTree + AddHashEntry + AddImage + AddImageNC + AddNaturalHomomorphismsPool + AddNormalizingElementPcgs + AddPageNumbersToSix + AddParagraphNumbersGapDocTree + AddRefinement + AddRelator + AddRootParseTree + AddRowVector + AddRule + AddRuleReduced + AddSet + AddToListEntries + AddVectorLTM + AddendumSCTable + AdditiveCoset + AdditiveElementAsMultiplicativeElement + AdditiveElementsAsMultiplicativeElementsFamily + AdditiveGroup + AdditiveGroupByGenerators + AdditiveInverse + AdditiveInverseAttr + AdditiveInverseImmutable + AdditiveInverseMutable + AdditiveInverseOp + AdditiveInverseSM + AdditiveInverseSameMutability + AdditiveMagma + AdditiveMagmaByGenerators + AdditiveMagmaWithInverses + AdditiveMagmaWithInversesByGenerators + AdditiveMagmaWithZero + AdditiveMagmaWithZeroByGenerators + AdditiveNeutralElement + AdditivelyActingDomain + AdjointAssociativeAlgebra + AdjointBasis + AdjointMatrix + AdjointModule + AffineAction + AffineActionByMatrixGroup + AffineActionLayer + AffineOperation + AffineOperationLayer + Agemo + AgemoAbove + AgemoOp + AlgExtElm + AlgExtEmbeddedPol + AlgExtFactSQFree + AlgExtSquareHensel + AlgFacUPrep + Algebra + AlgebraByGenerators + AlgebraByStructureConstants + AlgebraByStructureConstantsArg + AlgebraGeneralMappingByImages + AlgebraHomomorphismByImages + AlgebraHomomorphismByImagesNC + AlgebraWithOne + AlgebraWithOneByGenerators + AlgebraWithOneGeneralMappingByImages + AlgebraWithOneHomomorphismByImages + AlgebraWithOneHomomorphismByImagesNC + AlgebraicElementsFamilies + AlgebraicElementsFamily + AlgebraicExtension + AlgebraicPolynomialModP + AllBlocks + AllGroups + AllIrreducibleMonicPolynomialCoeffsOfDegree + AllIrreducibleMonicPolynomials + AllIrreducibleSolvableGroups + AllLibTomNames + AllModulesSQ + AllMonicPolynomialCoeffsOfDegree + AllPrimitiveGroups + AllSmallGroups + AllTransitiveGroups + AllowableSubgroup + Alpha + AlternatingDegree + AlternatingGroup + AlternatingGroupCons + AlternatingSubgroup + AntiSymmetricParts + Append + AppendCollectedList + AppendTo + ApplicableMethod + ApplicableMethodTypes + Apply + ApplyGeneratorsToPoint + ApplyGeneratorsToPointsList + ApplyRel + ApplySimpleReflection + ApplyToNodesParseTree + ApproxRational + ApproxRootBound + ApproximateRoot + ApproximateSuborbitsStabilizerPermGroup + ArithmeticElementCreator + Arrangements + ArrangementsA + ArrangementsK + AsAlgebra + AsAlgebraWithOne + AsBinaryRelationOnPoints + AsBlockMatrix + AsCharacterMorphismFunction + AsDivisionRing + AsDuplicateFreeList + AsFLMLOR + AsFLMLORWithOne + AsField + AsFreeLeftModule + AsGroup + AsGroupGeneralMappingByImages + AsInducedPcgs + AsLeftIdeal + AsLeftMagmaIdeal + AsLeftModule + AsLeftModuleGeneralMappingByImages + AsLieAlgebra + AsList + AsListOfFreeLeftModule + AsListSorted + AsMagma + AsMagmaIdeal + AsMonoid + AsNearRing + AsPerm + AsPlist + AsPolynomial + AsRightIdeal + AsRightMagmaIdeal + AsRing + AsSSortedList + AsSSortedListList + AsSSortedListNonstored + AsSemigroup + AsSemiring + AsSemiringWithOne + AsSemiringWithOneAndZero + AsSemiringWithZero + AsSet + AsSortedList + AsSubFLMLOR + AsSubFLMLORWithOne + AsSubalgebra + AsSubalgebraWithOne + AsSubgroup + AsSubgroupOfWholeGroupByQuotient + AsSubmagma + AsSubmonoid + AsSubsemigroup + AsSubspace + AsTransformation + AsTransformationNC + AsTwoSidedIdeal + AsVectorSpace + AscendingChain + AscendingChainOp + Assert + AssertionLevel + AssignGeneratorVariables + AssignNiceMonomorphismAutomorphismGroup + AssocBWorLetRepPow + AssocWWorLetRepPow + AssocWord + AssocWordByLetterRep + AssociatedPartition + AssociatedReesMatrixSemigroupOfDClass + AssociatedSemigroup + Associates + AtlasIrrationality + AttributeMethodByNiceMonomorphism + AttributeMethodByNiceMonomorphismCollColl + AttributeMethodByNiceMonomorphismCollElm + AttributeMethodByNiceMonomorphismElmColl + AttributeValueNotSet + AugmentationIdeal + AugmentedCosetTableInWholeGroup + AugmentedCosetTableMtc + AugmentedCosetTableMtcInWholeGroup + AugmentedCosetTableNormalClosure + AugmentedCosetTableNormalClosureInWholeGroup + AugmentedCosetTableRrs + AugmentedCosetTableRrsInWholeGroup + AutoloadPackages + AutomorphismDomain + AutomorphismGroup + AutomorphismGroupAbelianGroup + AutomorphismGroupElAbGroup + AutomorphismGroupFrattFreeGroup + AutomorphismGroupPermGroup + AutomorphismGroupSolvableGroup + AutomorphismRepresentingGroup + AutomorphismsOfTable + AvoidedLayers + BPolyProd + BagStats + BarPartitions + BaseFixedSpace + BaseImage + BaseIntMat + BaseIntersectionIntMats + BaseMat + BaseMatDestructive + BaseOfBasicImageGroup + BaseOfElt + BaseOfGroup + BaseOrthogonalSpaceMat + BasePoint + BasePointOfSchreierTransversal + BaseShortVectors + BaseStabChain + BaseSteinitzVectors + BasicImageEltRepFamily + BasicImageGroup + BasicImageGroupElement + BasicWreathProductOrdering + BasicWreathProductOrderingNC + Basis + BasisForFreeModuleByNiceBasis + BasisNC + BasisNullspaceModN + BasisOfAlgebraModule + BasisOfHomCosetAddMatrixGroup + BasisOfHomCosetAddMatrixGroupFnc + BasisOfMonomialSpace + BasisOfSparseRowSpace + BasisOfWeightRepSpace + BasisVectors + BasisVectorsForMatrixAction + BasisWithReplacedLeftModule + BaumClausenInfo + BaumClausenInfoDebug + BeauzamyBound + BeauzamyBoundGcd + Bell + Bernoulli + BestQuoInt + BestSplittingMatrix + BetaSet + BiAlgebraModule + BiAlgebraModuleByGenerators + BilinearFormMat + BinaryRelationByElements + BinaryRelationByListOfImages + BinaryRelationByListOfImagesNC + BinaryRelationOnPoints + BinaryRelationOnPointsNC + BinaryRelationTransformation + BindGlobal + Binomial + BlistList + BlistStringDecode + BlockMatrix + BlockStabilizer + Blocks + BlocksAttr + BlocksInfo + BlocksOp + BlowUpCocycleSQ + BlowUpIsomorphism + BlownUpMat + BlownUpMatrix + BlownUpModule + BlownUpVector + BombieriNorm + BooleanFamily + BrauerCharacterValue + BrauerTable + BrauerTableOp + BravaisGroup + BravaisSubgroups + BravaisSupergroups + BuildIsomorphismReesMatrixSemigroupWithMap + CIUnivPols + COAffineBlocks + COComplements + COComplementsMain + CONextCentral + CONextCentralizer + CONextCocycles + CONextComplements + CalcDoubleCosets + CalcOrder + CallFuncList + CallFuncTrapError + CanComputeIndex + CanComputeIsSubset + CanComputeSize + CanComputeSizeAnySubgroup + CanEasilyCompareElements + CanEasilyCompareElementsFamily + CanEasilyComputePcgs + CanEasilySortElements + CanEasilySortElementsFamily + CanEasilyTestMembership + CanFindGeneratorOfCyclicGroup + CanFindNilpotentClassTwoElement + CanonicalBasis + CanonicalElt + CanonicalGenerators + CanonicalNiceMonomorphism + CanonicalPcElement + CanonicalPcgs + CanonicalPcgsByGeneratorsWithImages + CanonicalPcgsWrtFamilyPcgs + CanonicalPcgsWrtHomePcgs + CanonicalPcgsWrtSpecialPcgs + CanonicalRelator + CanonicalRepresentativeDeterminatorOfExternalSet + CanonicalRepresentativeOfExternalSet + CanonicalRightCosetElement + CanonicalSubgroupRepresentativePcGroup + CartanMatrix + CartanSubalgebra + Cartesian + CasesCSPG + CategoriesOfObject + CategoryCollections + CategoryFamily + CayleyGraphDualSemigroup + CayleyGraphSemigroup + Cell + CellNoPoint + CellNoPoints + Cells + Center + CenterOfCharacter + CentralCharacter + CentralIdempotentsOfAlgebra + CentralIdempotentsOfSemiring + CentralNormalSeriesByPcgs + CentralProductOfMatrixGroups + CentralRelations + CentralStelClEANSNonsolv + CentralStepClEANS + CentralStepConjugatingElement + CentralStepRatClPGroup + Centralizer + CentralizerInAssociativeGaussianMatrixAlgebra + CentralizerInFiniteDimensionalAlgebra + CentralizerInGLnZ + CentralizerInParent + CentralizerModulo + CentralizerNormalCSPG + CentralizerNormalTransCSPG + CentralizerOp + CentralizerOrder + CentralizerSizeLimitConsiderFunction + CentralizerSolvableGroup + CentralizerTransSymmCSPG + CentralizerWreath + Centre + CentreFromSCTable + CentreOfCharacter + CentrePcGroup + ChaNuPol + ChainHomomorphicImage + ChainStatistics + ChainSubgroup + ChainSubgroupByDirectProduct + ChainSubgroupByHomomorphism + ChainSubgroupByPSubgroupOfAbelian + ChainSubgroupByProjectionFunction + ChainSubgroupBySiftFunction + ChainSubgroupByStabiliser + ChainSubgroupByStabilizer + ChainSubgroupByTrivialSubgroup + ChainSubgroupQuotient + ChangeStabChain + ChangeTypeObj + ChangedBaseGroup + CharTableAlternating + CharTableDoubleCoverAlternating + CharTableDoubleCoverSymmetric + CharTableSymmetric + CharTableWeylB + CharTableWeylD + CharValueDoubleCoverSymmetric + CharValueSymmetric + CharValueWeylB + CharValueWreathSymmetric + Character + CharacterDegreePool + CharacterDegrees + CharacterMorphismGroup + CharacterMorphismOrbits + CharacterNames + CharacterParameters + CharacterString + CharacterTable + CharacterTableDirectProduct + CharacterTableDisplayPrintLegendDefault + CharacterTableDisplayStringEntryDataDefault + CharacterTableDisplayStringEntryDefault + CharacterTableFactorGroup + CharacterTableFromLibrary + CharacterTableHeadOfFactorGroupByFusion + CharacterTableIsoclinic + CharacterTableOfNormalSubgroup + CharacterTableQuaternionic + CharacterTableRegular + CharacterTableWithSortedCharacters + CharacterTableWithSortedClasses + CharacterTableWreathSymmetric + Characteristic + CharacteristicPolynomial + CharacteristicPolynomialMatrixNC + CharsFamily + CheckAndCleanGapDocTree + CheckAuto + CheckCompletionFiles + CheckConsistencyOfDefinitions + CheckCosetTableFpGroup + CheckFixedPoints + CheckForHandlingByNiceBasis + CheckGlobalName + CheckPackageLoading + CheckPermChar + CheckSchreierTreeInternalConsistency + ChevalleyBasis + ChiefNormalSeriesByPcgs + ChiefSeries + ChiefSeriesOfGroup + ChiefSeriesThrough + ChiefSeriesUnderAction + ChineseRem + Chomp + ChooseNextBasePoint + ClassComparison + ClassElementLargeGroup + ClassElementLattice + ClassElementSmallGroup + ClassFunction + ClassFunctionSameType + ClassMultiplicationCoefficient + ClassNames + ClassNamesTom + ClassNumbersElements + ClassOrbit + ClassParameters + ClassPermutation + ClassPositionsOfAgemo + ClassPositionsOfCentre + ClassPositionsOfDerivedSubgroup + ClassPositionsOfDirectProductDecompositions + ClassPositionsOfElementaryAbelianSeries + ClassPositionsOfFittingSubgroup + ClassPositionsOfKernel + ClassPositionsOfLowerCentralSeries + ClassPositionsOfMaximalNormalSubgroups + ClassPositionsOfNormalClosure + ClassPositionsOfNormalSubgroup + ClassPositionsOfNormalSubgroups + ClassPositionsOfSolvableResiduum + ClassPositionsOfSupersolvableResiduum + ClassPositionsOfUpperCentralSeries + ClassRepsPermutedTuples + ClassRoots + ClassStructureCharTable + ClassTypesTom + ClassesSolvableGroup + CleanedTailPcElement + ClearCacheStats + ClearCentralRelations + ClearDefinitionNC + ClearPQuotientStatistics + ClearProfile + CloseMutableBasis + CloseNaturalHomomorphismsPool + CloseStream + ClosedStreamType + ClosureAdditiveGroup + ClosureAdditiveMagmaDefault + ClosureAdditiveMagmaWithInverses + ClosureAlgebra + ClosureDivisionRing + ClosureField + ClosureGroup + ClosureGroupAddElm + ClosureGroupCompare + ClosureGroupDefault + ClosureGroupIntest + ClosureLeftModule + ClosureLeftOperatorRing + ClosureMagmaDefault + ClosureNearAdditiveGroup + ClosureNearAdditiveMagmaWithInverses + ClosureRandomPermGroup + ClosureRing + ClosureSemiring + ClosureSubgroup + ClosureSubgroupNC + CntOp + CoKernel + CoKernelGensIterator + CoKernelGensPermHom + CoKernelOfAdditiveGeneralMapping + CoKernelOfMultiplicativeGeneralMapping + CoSuFp + Coboundaries + CocGroup + Cochain + CochainSpace + CocycleSQ + CocycleToRelVector + Cocycles + CodeGenerators + CodePcGroup + CodePcgs + CoefficientTaylorSeries + Coefficients + CoefficientsAndMagmaElements + CoefficientsFamily + CoefficientsMultiadic + CoefficientsOfLaurentPolynomial + CoefficientsOfUnivariateLaurentPolynomial + CoefficientsOfUnivariatePolynomial + CoefficientsOfUnivariateRationalFunction + CoefficientsOfVector + CoefficientsQadic + CoefficientsRing + CoeffsCyc + CoeffsMod + CollFamRangeEqFamElms + CollFamSourceEqFamElms + CollapsedMat + CollectPolycyclic + CollectUEALatticeElement + CollectWord + CollectWordOrFail + Collected + CollectedPartition + CollectedWordSQ + CollectionsFamily + CollectorSQ + ColorPrompt + ColumnIndexOfReesMatrixSemigroupElement + ColumnIndexOfReesZeroMatrixSemigroupElement + ColumnsOfReesMatrixSemigroup + ColumnsOfReesZeroMatrixSemigroup + Combinations + CombinationsA + CombinationsK + CombinatorialCollector + CombinatorialCollectorByGenerators + CombinatoricSplit + Comm + CommutGenImgs + CommutativeDiagram + CommutatorFactorGroup + CommutatorLength + CommutatorSubgroup + Compacted + CompanionMat + CompareVersionNumbers + CompatibleConjugacyClasses + CompatibleConjugacyClassesDefault + CompatiblePairs + CompileFunc + ComplementIntMat + ComplementSystem + Complementclasses + ComplementclassesEA + ComplementclassesSolvableNC + ComplementclassesSolvableWBG + CompleteChain + CompleteGaloisGroupPElement + CompleteOrdersOfRws + CompleteSchreierTransversal + CompletionBar + ComplexConjugate + ComplexificationQuat + ComponentsOfTuplesFamily + ComposedXMLString + CompositionMapping + CompositionMaps + CompositionOfStraightLinePrograms + CompositionSeries + Compress + ComputeTails + ComputedAgemos + ComputedAscendingChains + ComputedBrauerTables + ComputedClassFusions + ComputedCyclicExtensionsTom + ComputedHallSubgroups + ComputedIndicators + ComputedIsPNilpotents + ComputedIsPSolvableCharacterTables + ComputedIsPSolvables + ComputedOmegas + ComputedPCentralSeriess + ComputedPCores + ComputedPRumps + ComputedPowerMaps + ComputedPrimeBlockss + ComputedSylowComplements + ComputedSylowSubgroups + ConcatSubos + Concatenation + Conductor + ConfluentRws + Congruences + ConjugacyClass + ConjugacyClassSubgroups + ConjugacyClasses + ConjugacyClassesByOrbits + ConjugacyClassesByRandomSearch + ConjugacyClassesFittingFreeGroup + ConjugacyClassesForSmallGroup + ConjugacyClassesMaximalSubgroups + ConjugacyClassesOfNaturalGroup + ConjugacyClassesPerfectSubgroups + ConjugacyClassesSubgroups + ConjugacyClassesSubwreath + ConjugacyClassesTry + ConjugacyClassesViaRadical + ConjugateDominantWeight + ConjugateDominantWeightWithWord + ConjugateGroup + ConjugateMatrixActionToLinearAction + ConjugateMatrixGroupToLinearAction + ConjugateMatrixGroupToLinearGroup + ConjugateStabChain + ConjugateSubgroup + ConjugateSubgroups + ConjugatedModule + Conjugates + ConjugatingElement + ConjugatorAutomorphism + ConjugatorAutomorphismNC + ConjugatorInnerAutomorphism + ConjugatorIsomorphism + ConjugatorOfConjugatorIsomorphism + ConnectGroupAndCharacterTable + ConsiderKernels + ConsiderSmallerPowerMaps + ConsiderStructureConstants + ConsiderTableAutomorphisms + ConstantInBaseRingPol + ConstantTimeAccessList + ConstituentsCompositionMapping + ConstituentsOfCharacter + ConstituentsPolynomial + ContainedCharacters + ContainedDecomposables + ContainedMaps + ContainedPossibleCharacters + ContainedPossibleVirtualCharacters + ContainedSpecialVectors + ContainedTom + ContainingTom + ContinuedFractionApproximationOfRoot + ContinuedFractionExpansionOfRoot + ConvertBasicImageGroupElement + ConvertToCharacterTable + ConvertToCharacterTableNC + ConvertToLibTom + ConvertToLibraryCharacterTableNC + ConvertToMatrixRep + ConvertToMatrixRepNC + ConvertToNormalFormMonomialElement + ConvertToRangeRep + ConvertToSiftGroup + ConvertToStringRep + ConvertToTableOfMarks + ConvertToVectorRep + ConvertToVectorRepNC + ConwayCandidates + ConwayPol + ConwayPolynomial + CopiedAugmentedCosetTable + CopyMappingAttributes + CopyOptionsDefaults + CopyRel + CopyStabChain + Core + CoreInParent + CoreOp + CorestEval + CorrectConjugacyClass + CorrespondingGeneratorsByModuloPcgs + CorrespondingPermutations + CosetLeadersInner + CosetLeadersMatFFE + CosetNumber + CosetRepAsWord + CosetTable + CosetTableBySubgroup + CosetTableDefaultLimit + CosetTableDefaultMaxLimit + CosetTableFpHom + CosetTableFromGensAndRels + CosetTableInWholeGroup + CosetTableNormalClosure + CosetTableNormalClosureInWholeGroup + CosetTableOfFpSemigroup + CosetTableStandard + CoveringTriplesCharacters + CrcFile + CreateAllCycleStructures + CreateCompletionFiles + CreateKnuthBendixRewritingSystem + CreateOrderingByLtFunction + CreateOrderingByLteqFunction + CrystGroupDefaultAction + CurrentAssertionLevel + CycList + Cycle + CycleByPosOp + CycleIndex + CycleIndexOp + CycleLength + CycleLengthOp + CycleLengthPermInt + CycleLengths + CycleLengthsOp + CycleOp + CyclePermInt + CycleStructureClass + CycleStructurePerm + CycleStructuresGroup + Cycles + CyclesOp + CyclicExtensionsTom + CyclicExtensionsTomOp + CyclicGroup + CyclicGroupCons + CyclicTopExtensions + CyclotomicField + CyclotomicPol + CyclotomicPolynomial + Cyclotomics + CyclotomicsFamily + DMYDay + DMYhmsSeconds + DTCommutator + DTConjugate + DTMultiply + DTPower + DTQuotient + DTSolution + DataObj + DataType + DayDMY + DaysInMonth + DaysInYear + DeclareAttribute + DeclareAttributeKernel + DeclareAttributeSuppCT + DeclareAutoPackage + DeclareAutoreadableVariables + DeclareCategory + DeclareCategoryCollections + DeclareCategoryFamily + DeclareCategoryKernel + DeclareComponent + DeclareConstructor + DeclareConstructorKernel + DeclareFilter + DeclareGlobalFunction + DeclareGlobalVariable + DeclareHandlingByNiceBasis + DeclareInfoClass + DeclareOperation + DeclareOperationKernel + DeclarePackage + DeclarePackageAutoDocumentation + DeclarePackageDocumentation + DeclareProperty + DeclarePropertyKernel + DeclarePropertySuppCT + DeclareRepresentation + DeclareRepresentationKernel + DeclareSynonym + DeclareSynonymAttr + DecodeTree + DecodedTreeEntry + DecomposeEltIntoPElts + DecomposeTensorProduct + DecomposedFixedPointVector + DecomposedRationalClass + Decomposition + DecompositionInt + DecompositionMatrix + DecompositionTypes + DecompositionTypesOfGroup + Decreased + DeepThoughtCollector + DeepThoughtCollectorByGenerators + DefaultField + DefaultFieldByGenerators + DefaultFieldOfMatrix + DefaultFieldOfMatrixGroup + DefaultHashLength + DefaultPackageBannerString + DefaultRing + DefaultRingByGenerators + DefaultSparseHashRepType + DefaultSparseHashWithIKRepType + DefaultStabChainOptions + DefectApproximation + DefineNewGenerators + DefiningPcgs + DefiningPolynomial + DefiningQuotientHomomorphism + Degree + DegreeAction + DegreeFFE + DegreeIndeterminate + DegreeNaturalHomomorphismsPool + DegreeOfBinaryRelation + DegreeOfCharacter + DegreeOfLaurentPolynomial + DegreeOfMatrixGroup + DegreeOfTransformation + DegreeOfTransformationSemigroup + DegreeOfUnivariateLaurentPolynomial + DegreeOperation + DegreeOverPrimeField + DeleteImage + Delta + DenominatorCyc + DenominatorOfModuloPcgs + DenominatorOfRationalFunction + DenominatorRat + DenseHashTable + DenseIntKey + DepthOfPcElement + DepthOfUpperTriangularMatrix + DepthSchreierTrees + Derangements + DerangementsK + Derivations + Derivative + DerivedLength + DerivedSeries + DerivedSeriesOfGroup + DerivedSubgroup + DerivedSubgroupTom + DerivedSubgroupsTom + DerivedSubgroupsTomPossible + DerivedSubgroupsTomUnique + DescendingListWithElementRemoved + DescriptionOfNormalizedUEAElement + DescriptionOfRootOfUnity + Determinant + DeterminantIntMat + DeterminantMat + DeterminantMatDestructive + DeterminantMatDivFree + DeterminantOfCharacter + DiagonalMat + DiagonalOfMat + DiagonalSocleAction + DiagonalizeIntMat + DiagonalizeIntMatNormDriven + DiagonalizeMat + DictionariesFamily + DictionaryByList + DictionaryByPosition + DictionaryBySort + DiffCoc + Difference + DifferenceBlist + DifferenceLists + DifferenceOfPcElement + DigitsNumber + DihedralGenerators + DihedralGroup + DihedralGroupCons + Dimension + DimensionOfHighestWeightModule + DimensionOfMatrixGroup + DimensionOfVectors + DimensionsLoewyFactors + DimensionsMat + DirProdTransversal + DirectFactorsOfGroup + DirectProduct + DirectProductDecompositionsLocal + DirectProductInfo + DirectProductOp + DirectSumDecomposition + DirectSumMat + DirectSumOfAlgebraModules + DirectSumOfAlgebras + DirectoriesFamily + DirectoriesLibrary + DirectoriesPackageLibrary + DirectoriesPackagePrograms + DirectoriesSystemPrograms + Directory + DirectoryContents + DirectoryCurrent + DirectoryTemporary + DirectoryType + DisableAttributeValueStoring + Discriminant + Display + DisplayCacheStats + DisplayCompositionSeries + DisplayEggBoxOfDClass + DisplayImfInvariants + DisplayImfReps + DisplayInformationPerfectGroups + DisplayOptions + DisplayOptionsStack + DisplayProfile + DisplayRevision + DisplaySemigroup + DisplayXMLStructure + DistVecClosVecLib + DistanceVecFFE + DistancesDistributionMatFFEVecFFE + DistancesDistributionVecFFEsVecFFE + DivisionRingByGenerators + DivisorsInt + DivisorsIntCache + DixonInit + DixonRecord + DixonRepChi + DixonRepGHchi + DixonSplit + DixontinI + DnLattice + DnLatticeIterative + DoAlgebraicExt + DoCentralSeriesPcgsIfNilpot + DoCheapActionImages + DoCheapOperationImages + DoClosurePrmGp + DoEASLS + DoExponentsConjLayerFampcgs + DoFactorCosetAction + DoGaloisType + DoImmutableMatrix + DoInducedPcgsByPcSequenceNC + DoLogModRho + DoLowIndexSubgroupsFpGroup + DoMulExt + DoNFIM + DoNormalClosurePermGroup + DoNormalizerSA + DoPcgsElementaryAbelianSeries + DoPcgsOrbitOp + DoPrintUnivariateLaurent + DoReadPkg + DoRereadPkg + DoRightTransversalPc + DoShortwordBasepoint + DoSnAnGiantTest + DoSparseActionHomomorphism + DoSparseLinearActionOnFaithfulSubset + DoTest + DoUnivTestRatfun + Domain + DomainByGenerators + DomainForAction + DominantCharacter + DominantWeights + DoubleCentralizerOrbit + DoubleCoset + DoubleCosetRepsAndSizes + DoubleCosets + DoubleCosetsNC + DoubleCosetsPcGroup + DoubleHashArraySize + DoubleHashDictSize + DownEnv + DualGModule + DumpWorkspace + DuplicateFreeList + DxActiveCols + DxCalcAllPowerMaps + DxCalcPrimeClasses + DxDegreeCandidates + DxEigenbase + DxFrobSchurInd + DxGaloisOrbits + DxGeneratePrimeCyclotomic + DxIncludeIrreducibles + DxIsInSpace + DxLiftCharacter + DxLinearCharacters + DxModProduct + DxModularValuePol + DxNiceBasis + DxPreparation + DxRegisterModularChar + DxSplitDegree + EANormalSeriesByPcgs + EAPrimeLayerSQ + ERepAssWorInv + ERepAssWorProd + ERepLettWord + Earns + Edit + EggBoxOfDClass + EichlerTransformation + Eigenspaces + Eigenvalues + EigenvaluesChar + Eigenvectors + ElementByRws + ElementOfFpAlgebra + ElementOfFpGroup + ElementOfFpMonoid + ElementOfFpSemigroup + ElementOfMagmaRing + ElementOrdersPowerMap + ElementProperty + ElementTestFunction + ElementaryAbelianGroup + ElementaryAbelianGroupCons + ElementaryAbelianSeries + ElementaryAbelianSeriesLargeSteps + ElementaryAbelianSubseries + ElementaryDivisorsMat + ElementaryDivisorsMatDestructive + Elements + ElementsFamily + ElementsStabChain + EliminatedWord + EliminationOrdering + ElmDivRingElm + ElmTimesRingElm + ElmWPObj + ElsymsPowersums + Embedding + EmptyBinaryRelation + EmptyMatrix + EmptyRBase + EmptyRowVector + EmptySCTable + EmptyStabChain + EmptyTuplesFamily + EnableAttributeValueStoring + End + EndoMappingByTransformation + EnumerateIndependentAbelianProducts + Enumerator + EnumeratorByBasis + EnumeratorByFunctions + EnumeratorByPcgs + EnumeratorOfAdditiveMagma + EnumeratorOfGroup + EnumeratorOfIdeal + EnumeratorOfMagma + EnumeratorOfMagmaIdeal + EnumeratorOfNormedRowVectors + EnumeratorOfPrimeField + EnumeratorOfRing + EnumeratorOfSemigroupIdeal + EnumeratorOfSubset + EnumeratorOfTrivialAdditiveMagmaWithZero + EnumeratorOfTrivialMagmaWithOne + EnumeratorOfTuples + EnumeratorOfZmodnZ + EnumeratorSorted + EnvelopingAlgebra + EpiPcByModpcgs + EpimorphismNilpotentQuotient + EpimorphismNilpotentQuotientOp + EpimorphismPGroup + EpimorphismQuotientSystem + EpimorphismSchurCover + EqualBoxedObj + EquivalenceClassOfElement + EquivalenceClassOfElementNC + EquivalenceClassRelation + EquivalenceClasses + EquivalenceRelationByPairs + EquivalenceRelationByPairsNC + EquivalenceRelationByPartition + EquivalenceRelationByPartitionNC + EquivalenceRelationByProperty + EquivalenceRelationByRelation + EquivalenceRelationPartition + EquivalenceType + Error + ErrorCount + EspaceBasePoints + EuclideanDegree + EuclideanQuotient + EuclideanRemainder + EulerianFunction + EulerianFunctionByTom + EvalF + EvalFpCoc + EvalStraightLineProgElm + EvalString + EvaluateConsistency + EvaluateOverlapANA + EvaluateOverlapBAN + EvaluateOverlapBNA + EvaluateOverlapCBA + EvaluateRelation + EvaluateRelators + EvectBasePoints + ExactSizeConsiderFunction + ExcludeFromAutoload + ExcludedOrders + Exec + ExecuteProcess + ExpPcElmSortedFun + Exponent + ExponentOfPcElement + ExponentOfPowering + ExponentSumWord + ExponentSums + ExponentSyllable + ExponentsConjugateLayer + ExponentsOfCommutator + ExponentsOfConjugate + ExponentsOfPcElement + ExponentsOfPcElementPermGroup + ExponentsOfRelativePower + ExportToKernelFinished + ExtOrbStabDom + ExtRepByTailVector + ExtRepDenominatorRatFun + ExtRepNumeratorRatFun + ExtRepOfObj + ExtRepPolynomialRatFun + ExtendRepresentation + ExtendSchreierTransversal + ExtendSchreierTransversalShortCube + ExtendSchreierTransversalShortTree + ExtendSeriesPermGroup + ExtendStabChain + ExtendToBasis + ExtendedGroup + ExtendedIntersectionSumPcgs + ExtendedPcgs + ExtendedT + ExtendedVectors + Extension + ExtensionNC + ExtensionOnBlocks + ExtensionRepresentatives + ExtensionSQ + Extensions + ExtensionsOfModule + ExteriorPower + ExteriorPowerOfAlgebraModule + ExternalOrbit + ExternalOrbitOp + ExternalOrbits + ExternalOrbitsStabilizers + ExternalSet + ExternalSetByFilterConstructor + ExternalSetByTypeConstructor + ExternalSubset + ExternalSubsetOp + Extract + ExtraspecialGroup + ExtraspecialGroupCons + FFEFamily + FFPFactors + FFPOrderKnownDividend + FFPPowerModCheck + FFPUpperBoundOrder + FLMLORByGenerators + FLMLORFromFFE + FLMLORWithOne + FLMLORWithOneByGenerators + FMRRemoveZero + FactorCosetAction + FactorCosetOperation + FactorFreeAlgebraByRelators + FactorFreeGroupByRelators + FactorFreeMonoidByRelations + FactorFreeSemigroupByRelations + FactorGroup + FactorGroupFpGroupByRels + FactorGroupNC + FactorGroupNormalSubgroupClasses + FactorGroupTom + FactorSemigroup + FactorSemigroupByClosure + Factorial + Factorization + Factors + FactorsCommonDegreePol + FactorsInt + FactorsOfDirectProduct + FactorsRho + FactorsSquarefree + FaithfulModule + FamElmEqFamRange + FamElmEqFamSource + FamMapFamSourceFamRange + FamRangeEqFamElm + FamRangeNotEqFamElm + FamSourceEqFamElm + FamSourceNotEqFamElm + FamSourceRgtEqFamsLft + FamiliesOfGeneralMappingsAndRanges + FamiliesOfRows + FamilyForOrdering + FamilyForRewritingSystem + FamilyObj + FamilyOfFamilies + FamilyOfTypes + FamilyPcgs + FamilyRange + FamilySource + FamilyType + FastExtSQ + Fibonacci + FibonacciGroup + Field + FieldByGenerators + FieldExtension + FieldOfMatrixGroup + FieldOfMatrixList + FieldOverItselfByGenerators + FileDescriptorOfStream + FileString + Filename + FilterSGMLMarkup + Filtered + FilteredOp + FinIndexCyclicSubgroupGenerator + FindActionKernel + FindBag + FindLayer + FindNewReps + FindNormalCSPG + FindOperationKernel + FindRegularNormalCSPG + FindWindowId + Fingerprint + FingerprintFF + FingerprintLarge + FingerprintMedium + FingerprintPerm + FingerprintSmall + FiniteField + First + FirstOp + FittingSubgroup + FixcellPoint + Fixcells + FixcellsCell + FixedPointSpace + FixpointCellNo + FlagsFamily + FlagsObj + FlagsType + Flat + FlatBlockMat + FlatHashParams + FloatsFamily + FlushCaches + ForAll + ForAllOp + ForAny + ForAnyOp + FormatParagraph + FormattedString + FpAlgebraByGeneralizedCartanMatrix + FpElmComparisonMethod + FpElmEqualityMethod + FpElmKBRWS + FpGroupPcGroupSQ + FpGroupPresentation + FpGrpMonSmgOfFpGrpMonSmgElement + FpLieAlgebraByCartanMatrix + FpLieAlgebraEnumeration + FpMonoidOfElementOfFpMonoid + FpOfModules + FpSemigroupOfElementOfFpSemigroup + FptoSCAMorphismImageElm + FrattiniSubgroup + FrattinifactorId + FrattinifactorSize + FreeAlgebra + FreeAlgebraConstructor + FreeAlgebraOfFpAlgebra + FreeAlgebraWithOne + FreeAssociativeAlgebra + FreeAssociativeAlgebraWithOne + FreeGeneratorsOfFpAlgebra + FreeGeneratorsOfFpGroup + FreeGeneratorsOfFpMonoid + FreeGeneratorsOfFpSemigroup + FreeGeneratorsOfWholeGroup + FreeGroup + FreeGroupOfBasicImageGroup + FreeGroupOfElt + FreeGroupOfFpGroup + FreeLeftModule + FreeLieAlgebra + FreeMagma + FreeMagmaRing + FreeMagmaWithOne + FreeMonoid + FreeMonoidNatHomByGeneratorsNC + FreeMonoidOfFpMonoid + FreeMonoidOfRewritingSystem + FreeSemigroup + FreeSemigroupNatHomByGeneratorsNC + FreeSemigroupOfFpSemigroup + FreeSemigroupOfRewritingSystem + FreeStructureOfRewritingSystem + FrobeniusAutomorphism + FrobeniusAutomorphismI + FrobeniusCharacterValue + FullMatrixAlgebra + FullMatrixAlgebraCentralizer + FullMatrixFLMLOR + FullMatrixLieAlgebra + FullMatrixLieFLMLOR + FullMatrixModule + FullMatrixSpace + FullRowModule + FullRowSpace + FullSparseRowSpace + FullTransformationSemigroup + FunctionAction + FunctionsFamily + FusionCharTableTom + FusionConjugacyClasses + FusionConjugacyClassesOp + FusionRationalClassesPSubgroup + FusionsAllowedByRestrictions + FusionsOfLibTom + FusionsToLibTom + FusionsTom + GAPDocManualLab + GAPInfo + GInverses + GLDegree + GLUnderlyingField + GModuleByMats + GPartitions + GPartitionsEasy + GPartitionsGreatestEQ + GPartitionsGreatestEQHelper + GPartitionsGreatestLE + GPartitionsGreatestLEEasy + GPartitionsNrParts + GPartitionsNrPartsHelper + GQuotients + GaloisConjugates + GaloisCyc + GaloisDiffResolvent + GaloisField + GaloisGroup + GaloisMat + GaloisSetResolvent + GaloisStabilizer + GaloisType + GapInputPcGroup + GapInputSCTable + GasmanLimits + GasmanMessageStatus + GasmanStatistics + GaussianIntegers + GaussianRationals + Gcd + GcdCoeffs + GcdInt + GcdOp + GcdRepresentation + GcdRepresentationOp + Gcdex + GeneralLinearGroup + GeneralLinearGroupCons + GeneralMappingByElements + GeneralMappingsFamily + GeneralOrthogonalGroup + GeneralOrthogonalGroupCons + GeneralStepClEANS + GeneralStepClEANSNonsolv + GeneralUnitaryGroup + GeneralUnitaryGroupCons + GeneralisedEigenspaces + GeneralisedEigenvalues + GeneralizedEigenspaces + GeneralizedEigenvalues + GeneralizedPcgs + GeneratingPairsOfLeftMagmaCongruence + GeneratingPairsOfMagmaCongruence + GeneratingPairsOfRightMagmaCongruence + GeneratingPairsOfSemigroupCongruence + GeneratingSetIsComplete + GeneratorNumberOfQuotient + GeneratorOfCyclicGroup + GeneratorSyllable + GeneratorTranslationAugmentedCosetTable + GeneratorsCenterPGroup + GeneratorsCentrePGroup + GeneratorsListTom + GeneratorsOfAdditiveGroup + GeneratorsOfAdditiveMagma + GeneratorsOfAdditiveMagmaWithInverses + GeneratorsOfAdditiveMagmaWithZero + GeneratorsOfAlgebra + GeneratorsOfAlgebraModule + GeneratorsOfAlgebraWithOne + GeneratorsOfDivisionRing + GeneratorsOfDomain + GeneratorsOfEquivalenceRelationPartition + GeneratorsOfExtASet + GeneratorsOfExtLSet + GeneratorsOfExtRSet + GeneratorsOfExtUSet + GeneratorsOfFLMLOR + GeneratorsOfFLMLORWithOne + GeneratorsOfField + GeneratorsOfGroup + GeneratorsOfIdeal + GeneratorsOfLayer + GeneratorsOfLeftIdeal + GeneratorsOfLeftMagmaIdeal + GeneratorsOfLeftModule + GeneratorsOfLeftOperatorAdditiveGroup + GeneratorsOfLeftOperatorRing + GeneratorsOfLeftOperatorRingWithOne + GeneratorsOfLeftVectorSpace + GeneratorsOfMagma + GeneratorsOfMagmaIdeal + GeneratorsOfMagmaWithInverses + GeneratorsOfMagmaWithOne + GeneratorsOfMonoid + GeneratorsOfNearAdditiveGroup + GeneratorsOfNearAdditiveMagma + GeneratorsOfNearAdditiveMagmaWithInverses + GeneratorsOfNearAdditiveMagmaWithZero + GeneratorsOfPresentation + GeneratorsOfRightIdeal + GeneratorsOfRightMagmaIdeal + GeneratorsOfRightModule + GeneratorsOfRightOperatorAdditiveGroup + GeneratorsOfRing + GeneratorsOfRingForIdeal + GeneratorsOfRingWithOne + GeneratorsOfRws + GeneratorsOfSemigroup + GeneratorsOfSemiring + GeneratorsOfSemiringWithOne + GeneratorsOfSemiringWithOneAndZero + GeneratorsOfSemiringWithZero + GeneratorsOfTwoSidedIdeal + GeneratorsOfVectorSpace + GeneratorsOverIntersection + GeneratorsPrimeResidues + GeneratorsSmallest + GeneratorsSmallestStab + GeneratorsSubgroupsTom + GenericFindActionKernel + GetChars + GetCommutatorNC + GetConjugateNC + GetDefinitionNC + GetETag + GetElement + GetEnt + GetFusionMap + GetHashEntry + GetHashEntryAtLastIndex + GetHashEntryIndex + GetMax + GetNaturalHomomorphismsPool + GetNumRight + GetPols + GetPowerNC + GetSTag + GetWord + GiveNumbersNIndeterminates + GlasbyCover + GlasbyIntersection + GlasbyShift + GlasbyStabilizer + GlobalPartitionOfClasses + Grading + GreensDClassOfElement + GreensDClasses + GreensDRelation + GreensHClassOfElement + GreensHClasses + GreensHRelation + GreensJClassOfElement + GreensJClasses + GreensJRelation + GreensLClassOfElement + GreensLClasses + GreensLRelation + GreensRClassOfElement + GreensRClasses + GreensRRelation + GroebnerBasis + GroebnerBasisNC + Group + GroupByGenerators + GroupByMultiplicationTable + GroupByNiceMonomorphism + GroupByPcgs + GroupByPrimeResidues + GroupByQuotientSystem + GroupByRws + GroupByRwsNC + GroupFromAdditiveGroup + GroupGeneralMappingByImages + GroupHClassOfGreensDClass + GroupHomomorphismByFunction + GroupHomomorphismByImages + GroupHomomorphismByImagesNC + GroupMethodByNiceMonomorphism + GroupMethodByNiceMonomorphismCollColl + GroupMethodByNiceMonomorphismCollElm + GroupMethodByNiceMonomorphismCollOther + GroupOfPcgs + GroupOnSubgroupsOrbit + GroupRing + GroupSeriesMethodByNiceMonomorphism + GroupSeriesMethodByNiceMonomorphismCollColl + GroupSeriesMethodByNiceMonomorphismCollElm + GroupSeriesMethodByNiceMonomorphismCollOther + GroupStabChain + GroupString + GroupToAdditiveGroupHomomorphismByFunction + GroupWithGenerators + HMSMSec + HallSubgroup + HallSubgroupOp + HallSystem + HasANonReesCongruenceOfSemigroup + HasAbelianFactorGroup + HasAbelianInvariants + HasAbelianInvariantsOfList + HasAbsoluteValue + HasActingDomain + HasActionHomomorphismAttr + HasActionKernelExternalSet + HasActorOfExternalSet + HasAdditiveElementAsMultiplicativeElement + HasAdditiveElementsAsMultiplicativeElementsFamily + HasAdditiveInverse + HasAdditiveInverseAttr + HasAdditiveInverseImmutable + HasAdditiveNeutralElement + HasAdditivelyActingDomain + HasAdjointBasis + HasAdjointModule + HasAlgebraicElementsFamilies + HasAllBlocks + HasAlpha + HasAlternatingDegree + HasAlternatingSubgroup + HasAsDuplicateFreeList + HasAsGroup + HasAsGroupGeneralMappingByImages + HasAsLeftModuleGeneralMappingByImages + HasAsList + HasAsMagma + HasAsMonoid + HasAsNearRing + HasAsPolynomial + HasAsRing + HasAsSSortedList + HasAsSemigroup + HasAsSemiring + HasAsSemiringWithOne + HasAsSemiringWithOneAndZero + HasAsSemiringWithZero + HasAsSortedList + HasAsSubgroupOfWholeGroupByQuotient + HasAssociatedReesMatrixSemigroupOfDClass + HasAssociatedSemigroup + HasAugmentationIdeal + HasAugmentedCosetTableMtcInWholeGroup + HasAugmentedCosetTableNormalClosureInWholeGroup + HasAugmentedCosetTableRrsInWholeGroup + HasAutomorphismDomain + HasAutomorphismGroup + HasAutomorphismsOfTable + HasBaseIntMat + HasBaseMat + HasBaseOfBasicImageGroup + HasBaseOfGroup + HasBaseOrthogonalSpaceMat + HasBasis + HasBasisOfHomCosetAddMatrixGroup + HasBasisVectors + HasBaumClausenInfo + HasBilinearFormMat + HasBlocksAttr + HasBlocksInfo + HasBrauerCharacterValue + HasBravaisGroup + HasBravaisSubgroups + HasBravaisSupergroups + HasCanEasilyCompareElements + HasCanEasilySortElements + HasCanFindNilpotentClassTwoElement + HasCanonicalBasis + HasCanonicalElt + HasCanonicalGenerators + HasCanonicalNiceMonomorphism + HasCanonicalPcgs + HasCanonicalPcgsWrtFamilyPcgs + HasCanonicalPcgsWrtHomePcgs + HasCanonicalPcgsWrtSpecialPcgs + HasCanonicalRepresentativeDeterminatorOfExternalSet + HasCanonicalRepresentativeOfExternalSet + HasCartanMatrix + HasCartanSubalgebra + HasCayleyGraphDualSemigroup + HasCayleyGraphSemigroup + HasCenter + HasCentralCharacter + HasCentralIdempotentsOfSemiring + HasCentralNormalSeriesByPcgs + HasCentralizerInGLnZ + HasCentralizerInParent + HasCentre + HasCentreOfCharacter + HasChainHomomorphicImage + HasChainSubgroup + HasChainSubgroupQuotient + HasCharacterDegrees + HasCharacterNames + HasCharacterParameters + HasCharacteristic + HasCharacteristicPolynomial + HasChevalleyBasis + HasChiefNormalSeriesByPcgs + HasChiefSeries + HasClassNames + HasClassNamesTom + HasClassParameters + HasClassPermutation + HasClassPositionsOfCentre + HasClassPositionsOfDerivedSubgroup + HasClassPositionsOfDirectProductDecompositions + HasClassPositionsOfElementaryAbelianSeries + HasClassPositionsOfFittingSubgroup + HasClassPositionsOfKernel + HasClassPositionsOfLowerCentralSeries + HasClassPositionsOfMaximalNormalSubgroups + HasClassPositionsOfNormalSubgroups + HasClassPositionsOfSolvableResiduum + HasClassPositionsOfSupersolvableResiduum + HasClassPositionsOfUpperCentralSeries + HasClassRoots + HasClassTypesTom + HasCoKernelOfAdditiveGeneralMapping + HasCoKernelOfMultiplicativeGeneralMapping + HasCoefficientsAndMagmaElements + HasCoefficientsFamily + HasCoefficientsOfLaurentPolynomial + HasCoefficientsOfUnivariatePolynomial + HasCoefficientsOfUnivariateRationalFunction + HasCoefficientsRing + HasCollectionsFamily + HasColumnIndexOfReesMatrixSemigroupElement + HasColumnIndexOfReesZeroMatrixSemigroupElement + HasColumnsOfReesMatrixSemigroup + HasColumnsOfReesZeroMatrixSemigroup + HasCommutatorFactorGroup + HasCommutatorLength + HasComplementSystem + HasComplexConjugate + HasComponentsOfTuplesFamily + HasCompositionSeries + HasComputedAgemos + HasComputedAscendingChains + HasComputedBrauerTables + HasComputedClassFusions + HasComputedCyclicExtensionsTom + HasComputedHallSubgroups + HasComputedIndicators + HasComputedIsPNilpotents + HasComputedIsPSolvableCharacterTables + HasComputedIsPSolvables + HasComputedOmegas + HasComputedPCentralSeriess + HasComputedPCores + HasComputedPRumps + HasComputedPowerMaps + HasComputedPrimeBlockss + HasComputedSylowComplements + HasComputedSylowSubgroups + HasConductor + HasConfluentRws + HasConjugacyClasses + HasConjugacyClassesMaximalSubgroups + HasConjugacyClassesPerfectSubgroups + HasConjugacyClassesSubgroups + HasConjugates + HasConjugatorInnerAutomorphism + HasConjugatorOfConjugatorIsomorphism + HasConstantTimeAccessList + HasConstituentsOfCharacter + HasConvertBasicImageGroupElement + HasCoreInParent + HasCosetTableFpHom + HasCosetTableInWholeGroup + HasCosetTableNormalClosureInWholeGroup + HasCosetTableOfFpSemigroup + HasCycleStructurePerm + HasCyclicExtensionsTom + HasDecompositionMatrix + HasDecompositionTypesOfGroup + HasDefaultFieldOfMatrix + HasDefaultFieldOfMatrixGroup + HasDefectApproximation + HasDefiningPcgs + HasDefiningPolynomial + HasDegreeAction + HasDegreeOfBinaryRelation + HasDegreeOfCharacter + HasDegreeOfLaurentPolynomial + HasDegreeOfMatrixGroup + HasDegreeOfTransformation + HasDegreeOfTransformationSemigroup + HasDegreeOperation + HasDegreeOverPrimeField + HasDelta + HasDenominatorOfModuloPcgs + HasDenominatorOfRationalFunction + HasDepthOfUpperTriangularMatrix + HasDerivations + HasDerivative + HasDerivedLength + HasDerivedSeriesOfGroup + HasDerivedSubgroup + HasDerivedSubgroupsTomPossible + HasDerivedSubgroupsTomUnique + HasDeterminantMat + HasDeterminantOfCharacter + HasDihedralGenerators + HasDimension + HasDimensionOfMatrixGroup + HasDimensionOfVectors + HasDimensionsLoewyFactors + HasDimensionsMat + HasDirectFactorsOfGroup + HasDirectProductInfo + HasDirectSumDecomposition + HasDisplayOptions + HasDixonRecord + HasEANormalSeriesByPcgs + HasEarns + HasEggBoxOfDClass + HasElementTestFunction + HasElementaryAbelianFactorGroup + HasElementaryAbelianSeries + HasElementaryAbelianSeriesLargeSteps + HasElementaryAbelianSubseries + HasElementsFamily + HasEmptyRowVector + HasEnumerator + HasEnumeratorByBasis + HasEnumeratorSorted + HasEquivalenceClassRelation + HasEquivalenceClasses + HasEquivalenceRelationPartition + HasExponent + HasExponentOfPowering + HasExtRepDenominatorRatFun + HasExtRepNumeratorRatFun + HasExtRepPolynomialRatFun + HasExternalOrbits + HasExternalOrbitsStabilizers + HasExternalSet + HasFactorsOfDirectProduct + HasFaithfulModule + HasFamiliesOfGeneralMappingsAndRanges + HasFamilyForOrdering + HasFamilyForRewritingSystem + HasFamilyPcgs + HasFamilyRange + HasFamilySource + HasFieldOfMatrixGroup + HasFittingSubgroup + HasFpElmComparisonMethod + HasFpElmEqualityMethod + HasFpElmKBRWS + HasFrattiniSubgroup + HasFrattinifactorId + HasFrattinifactorSize + HasFreeAlgebraOfFpAlgebra + HasFreeGeneratorsOfFpAlgebra + HasFreeGeneratorsOfFpGroup + HasFreeGeneratorsOfFpMonoid + HasFreeGeneratorsOfFpSemigroup + HasFreeGroupOfBasicImageGroup + HasFreeGroupOfFpGroup + HasFreeMonoidOfFpMonoid + HasFreeMonoidOfRewritingSystem + HasFreeSemigroupOfFpSemigroup + HasFreeSemigroupOfRewritingSystem + HasFrobeniusAutomorphism + HasFunctionAction + HasFusionConjugacyClassesOp + HasFusionsOfLibTom + HasFusionsToLibTom + HasFusionsTom + HasGLDegree + HasGLUnderlyingField + HasGaloisGroup + HasGaloisMat + HasGaloisStabilizer + HasGaloisType + HasGeneralizedPcgs + HasGeneratingPairsOfLeftMagmaCongruence + HasGeneratingPairsOfMagmaCongruence + HasGeneratingPairsOfRightMagmaCongruence + HasGeneratingSetIsComplete + HasGeneratorOfCyclicGroup + HasGeneratorsOfAdditiveGroup + HasGeneratorsOfAdditiveMagma + HasGeneratorsOfAdditiveMagmaWithInverses + HasGeneratorsOfAdditiveMagmaWithZero + HasGeneratorsOfAlgebra + HasGeneratorsOfAlgebraModule + HasGeneratorsOfAlgebraWithOne + HasGeneratorsOfDivisionRing + HasGeneratorsOfDomain + HasGeneratorsOfEquivalenceRelationPartition + HasGeneratorsOfExtASet + HasGeneratorsOfExtLSet + HasGeneratorsOfExtRSet + HasGeneratorsOfExtUSet + HasGeneratorsOfFLMLOR + HasGeneratorsOfFLMLORWithOne + HasGeneratorsOfField + HasGeneratorsOfGroup + HasGeneratorsOfIdeal + HasGeneratorsOfLeftIdeal + HasGeneratorsOfLeftMagmaIdeal + HasGeneratorsOfLeftModule + HasGeneratorsOfLeftOperatorAdditiveGroup + HasGeneratorsOfLeftOperatorRing + HasGeneratorsOfLeftOperatorRingWithOne + HasGeneratorsOfLeftVectorSpace + HasGeneratorsOfMagma + HasGeneratorsOfMagmaIdeal + HasGeneratorsOfMagmaWithInverses + HasGeneratorsOfMagmaWithOne + HasGeneratorsOfMonoid + HasGeneratorsOfNearAdditiveGroup + HasGeneratorsOfNearAdditiveMagma + HasGeneratorsOfNearAdditiveMagmaWithInverses + HasGeneratorsOfNearAdditiveMagmaWithZero + HasGeneratorsOfRightIdeal + HasGeneratorsOfRightMagmaIdeal + HasGeneratorsOfRightModule + HasGeneratorsOfRightOperatorAdditiveGroup + HasGeneratorsOfRing + HasGeneratorsOfRingWithOne + HasGeneratorsOfRws + HasGeneratorsOfSemigroup + HasGeneratorsOfSemiring + HasGeneratorsOfSemiringWithOne + HasGeneratorsOfSemiringWithOneAndZero + HasGeneratorsOfSemiringWithZero + HasGeneratorsOfTwoSidedIdeal + HasGeneratorsOfVectorSpace + HasGeneratorsSmallest + HasGeneratorsSubgroupsTom + HasGlobalPartitionOfClasses + HasGrading + HasGreensDRelation + HasGreensHRelation + HasGreensJRelation + HasGreensLRelation + HasGreensRRelation + HasGroupByPcgs + HasGroupHClassOfGreensDClass + HasGroupOfPcgs + HasHallSystem + HasHirschLength + HasHomCosetFamily + HasHomFromFreeOfBasicImageGroup + HasHomeEnumerator + HasHomePcgs + HasIBr + HasIdGroup + HasIdempotents + HasIdempotentsTom + HasIdempotentsTomInfo + HasIdentificationOfConjugacyClasses + HasIdentifier + HasIdentity + HasIdentityMapping + HasImageElt + HasImageListOfTransformation + HasImageSetOfTransformation + HasImagesSmallestGenerators + HasImagesSource + HasImfRecord + HasIndependentGeneratorsOfAbelianGroup + HasIndependentGeneratorsOfAbelianMatrixGroup + HasIndeterminateName + HasIndeterminateNumberOfLaurentPolynomial + HasIndeterminateNumberOfUnivariateLaurentPolynomial + HasIndeterminateNumberOfUnivariateRationalFunction + HasIndeterminateOfUnivariateRationalFunction + HasIndeterminatesOfPolynomialRing + HasIndexInParent + HasIndexInWholeGroup + HasIndicesCentralNormalSteps + HasIndicesChiefNormalSteps + HasIndicesEANormalSteps + HasIndicesInvolutaryGenerators + HasIndicesNormalSteps + HasIndicesOfAdjointBasis + HasIndicesPCentralNormalStepsPGroup + HasInducedPcgsWrtFamilyPcgs + HasInducedPcgsWrtHomePcgs + HasInducedPcgsWrtSpecialPcgs + HasInfoText + HasInjectionZeroMagma + HasInnerAutomorphismsAutomorphismGroup + HasInt + HasInternalRepresentative + HasInvariantBilinearForm + HasInvariantConjugateSubgroup + HasInvariantForm + HasInvariantLattice + HasInvariantQuadraticForm + HasInvariantSesquilinearForm + HasInverse + HasInverseAttr + HasInverseClasses + HasInverseGeneralMapping + HasInverseImmutable + HasIrr + HasIrrBaumClausen + HasIrrConlon + HasIrrDixonSchneider + HasIrrFacsPol + HasIrreducibleRepresentations + HasIsAbelian + HasIsAbelianNumberField + HasIsAbelianTom + HasIsAdditiveGroupGeneralMapping + HasIsAdditiveGroupHomomorphism + HasIsAdditiveGroupToGroupGeneralMapping + HasIsAdditiveGroupToGroupHomomorphism + HasIsAdditivelyCommutative + HasIsAlgebraGeneralMapping + HasIsAlgebraHomomorphism + HasIsAlgebraModule + HasIsAlgebraWithOneGeneralMapping + HasIsAlgebraWithOneHomomorphism + HasIsAlternatingGroup + HasIsAnticommutative + HasIsAntisymmetricBinaryRelation + HasIsAssociative + HasIsAutomorphismGroup + HasIsBasicWreathProductOrdering + HasIsBergerCondition + HasIsBijective + HasIsBravaisGroup + HasIsBuiltFromAdditiveMagmaWithInverses + HasIsBuiltFromGroup + HasIsBuiltFromMagma + HasIsBuiltFromMagmaWithInverses + HasIsBuiltFromMagmaWithOne + HasIsBuiltFromMonoid + HasIsBuiltFromSemigroup + HasIsCanonicalBasis + HasIsCanonicalBasisFullMatrixModule + HasIsCanonicalBasisFullRowModule + HasIsCanonicalBasisFullSCAlgebra + HasIsCanonicalNiceMonomorphism + HasIsCanonicalPcgs + HasIsCanonicalPcgsWrtSpecialPcgs + HasIsChainTypeGroup + HasIsCharacter + HasIsCharacteristicMatrixPGroup + HasIsCommutative + HasIsCommutativeFamily + HasIsConfluent + HasIsConjugatorAutomorphism + HasIsConjugatorIsomorphism + HasIsConstantRationalFunction + HasIsConstantTimeAccessGeneralMapping + HasIsCycInt + HasIsCyclic + HasIsCyclicTom + HasIsCyclotomicField + HasIsDihedralGroup + HasIsDistributive + HasIsDivisionRing + HasIsDuplicateFree + HasIsDuplicateFreeList + HasIsElementaryAbelian + HasIsEmpty + HasIsEndoGeneralMapping + HasIsEndoMapping + HasIsEquivalenceRelation + HasIsFFEMatrixGroupOverLargeSpace + HasIsFamilyPcgs + HasIsField + HasIsFieldHomomorphism + HasIsFinite + HasIsFiniteDimensional + HasIsFiniteOrdersPcgs + HasIsFiniteSemigroupGreensRelation + HasIsFinitelyGeneratedGroup + HasIsFrattiniFree + HasIsFreeMonoid + HasIsFreeSemigroup + HasIsFullFpAlgebra + HasIsFullHomModule + HasIsFullMatrixModule + HasIsFullRowModule + HasIsFullSCAlgebra + HasIsFullSubgroupGLorSLRespectingBilinearForm + HasIsFullSubgroupGLorSLRespectingQuadraticForm + HasIsFullSubgroupGLorSLRespectingSesquilinearForm + HasIsFullTransformationSemigroup + HasIsGL + HasIsGeneralLinearGroup + HasIsGeneralizedCartanMatrix + HasIsGeneratorsOfMagmaWithInverses + HasIsGreensClass + HasIsGreensDClass + HasIsGreensDRelation + HasIsGreensHClass + HasIsGreensHRelation + HasIsGreensJClass + HasIsGreensJRelation + HasIsGreensLClass + HasIsGreensLRelation + HasIsGreensRClass + HasIsGreensRRelation + HasIsGreensRelation + HasIsGroupGeneralMapping + HasIsGroupHClass + HasIsGroupHomomorphism + HasIsGroupOfAutomorphisms + HasIsGroupOfAutomorphismsFiniteGroup + HasIsGroupRing + HasIsGroupToAdditiveGroupGeneralMapping + HasIsGroupToAdditiveGroupHomomorphism + HasIsHandledByNiceMonomorphism + HasIsHasseDiagram + HasIsHomCosetOfAdditiveElt + HasIsHomCosetOfFp + HasIsHomCosetOfMatrix + HasIsHomCosetOfPerm + HasIsHomCosetOfTuple + HasIsIdealInParent + HasIsIdempotent + HasIsImpossible + HasIsInducedFromNormalSubgroup + HasIsInducedPcgsWrtSpecialPcgs + HasIsInjective + HasIsInnerAutomorphism + HasIsIntegerMatrixGroup + HasIsIntegralBasis + HasIsIntegralCyclotomic + HasIsIntegralRing + HasIsIrreducibleCharacter + HasIsJacobianRing + HasIsLDistributive + HasIsLatticeOrderBinaryRelation + HasIsLaurentPolynomial + HasIsLeftActedOnByDivisionRing + HasIsLeftAlgebraModule + HasIsLeftIdealInParent + HasIsLeftModuleGeneralMapping + HasIsLeftModuleHomomorphism + HasIsLeftSemigroupCongruence + HasIsLeftSemigroupIdeal + HasIsLieAbelian + HasIsLieAlgebra + HasIsLieNilpotent + HasIsLieSolvable + HasIsLinearlyPrimitive + HasIsMagmaHomomorphism + HasIsMapping + HasIsMatrixModule + HasIsMinimalNonmonomial + HasIsMonoid + HasIsMonomialCharacter + HasIsMonomialCharacterTable + HasIsMonomialGroup + HasIsMonomialMatrix + HasIsMonomialNumber + HasIsNaturalAlternatingGroup + HasIsNaturalGL + HasIsNaturalSL + HasIsNaturalSymmetricGroup + HasIsNearRing + HasIsNearRingWithOne + HasIsNilpQuotientSystem + HasIsNilpotentCharacterTable + HasIsNilpotentGroup + HasIsNilpotentTom + HasIsNonTrivial + HasIsNoncharacteristicMatrixPGroup + HasIsNormalBasis + HasIsNormalForm + HasIsNormalInParent + HasIsNumberField + HasIsNumeratorParentPcgsFamilyPcgs + HasIsOne + HasIsOrderingOnFamilyOfAssocWords + HasIsPGroup + HasIsPQuotientSystem + HasIsPSL + HasIsParentPcgsFamilyPcgs + HasIsPartialOrderBinaryRelation + HasIsPcgsCentralSeries + HasIsPcgsChiefSeries + HasIsPcgsElementaryAbelianSeries + HasIsPcgsPCentralSeriesPGroup + HasIsPerfectCharacterTable + HasIsPerfectGroup + HasIsPerfectTom + HasIsPolycyclicGroup + HasIsPolynomial + HasIsPositionsList + HasIsPreOrderBinaryRelation + HasIsPrimeField + HasIsPrimeOrdersPcgs + HasIsPrimitive + HasIsPrimitiveAffine + HasIsPrimitiveCharacter + HasIsPrimitiveMatrixGroup + HasIsPseudoCanonicalBasisFullHomModule + HasIsQuasiDihedralGroup + HasIsQuasiPrimitive + HasIsQuaternionGroup + HasIsRDistributive + HasIsRationalMatrixGroup + HasIsRectangularTable + HasIsReduced + HasIsReesCongruence + HasIsReesCongruenceSemigroup + HasIsReesMatrixSemigroup + HasIsReesZeroMatrixSemigroup + HasIsReflexiveBinaryRelation + HasIsRegular + HasIsRegularDClass + HasIsRegularSemigroup + HasIsRelativelySM + HasIsRestrictedLieAlgebra + HasIsRightAlgebraModule + HasIsRightIdealInParent + HasIsRightSemigroupCongruence + HasIsRightSemigroupIdeal + HasIsRing + HasIsRingGeneralMapping + HasIsRingHomomorphism + HasIsRingWithOne + HasIsRingWithOneGeneralMapping + HasIsRingWithOneHomomorphism + HasIsRowModule + HasIsSL + HasIsSSortedList + HasIsSemiEchelonized + HasIsSemiRegular + HasIsSemigroup + HasIsSemigroupCongruence + HasIsSemigroupIdeal + HasIsSemiring + HasIsSemiringWithOne + HasIsSemiringWithOneAndZero + HasIsSemiringWithZero + HasIsShortLexOrdering + HasIsSimpleAlgebra + HasIsSimpleCharacterTable + HasIsSimpleGroup + HasIsSimpleSemigroup + HasIsSingleValued + HasIsSkewFieldFamily + HasIsSmallList + HasIsSolvableCharacterTable + HasIsSolvableGroup + HasIsSolvableTom + HasIsSortedList + HasIsSpecialLinearGroup + HasIsSpecialPcgs + HasIsSporadicSimpleCharacterTable + HasIsSporadicSimpleGroup + HasIsStabChainViaChainSubgroup + HasIsSubgroupSL + HasIsSubmonoidFpMonoid + HasIsSubnormallyMonomial + HasIsSubsemigroupFpSemigroup + HasIsSubsemigroupReesMatrixSemigroup + HasIsSubsemigroupReesZeroMatrixSemigroup + HasIsSubsetLocallyFiniteGroup + HasIsSupersolvableCharacterTable + HasIsSupersolvableGroup + HasIsSurjective + HasIsSymmetricBinaryRelation + HasIsSymmetricGroup + HasIsTotal + HasIsTotalOrdering + HasIsTransformationMonoid + HasIsTransformationSemigroup + HasIsTransitive + HasIsTransitiveBinaryRelation + HasIsTranslationInvariantOrdering + HasIsTrivial + HasIsTwoSidedIdealInParent + HasIsUFDFamily + HasIsUniformMatrixGroup + HasIsUnivariatePolynomial + HasIsUnivariateRationalFunction + HasIsVectorSpaceHomomorphism + HasIsVirtualCharacter + HasIsWeightLexOrdering + HasIsWellFoundedOrdering + HasIsWeylGroup + HasIsWholeFamily + HasIsWreathProductOrdering + HasIsZero + HasIsZeroGroup + HasIsZeroMultiplicationRing + HasIsZeroRationalFunction + HasIsZeroSimpleSemigroup + HasIsZeroSquaredRing + HasIsomorphismFpAlgebra + HasIsomorphismFpFLMLOR + HasIsomorphismFpGroup + HasIsomorphismFpMonoid + HasIsomorphismFpSemigroup + HasIsomorphismMatrixAlgebra + HasIsomorphismMatrixFLMLOR + HasIsomorphismPcGroup + HasIsomorphismPermGroup + HasIsomorphismReesMatrixSemigroup + HasIsomorphismRefinedPcGroup + HasIsomorphismSCAlgebra + HasIsomorphismSCFLMLOR + HasIsomorphismSimplifiedFpGroup + HasIsomorphismSpecialPcGroup + HasIsomorphismTransformationSemigroup + HasJenningsLieAlgebra + HasJenningsSeries + HasJordanDecomposition + HasKernelOfAdditiveGeneralMapping + HasKernelOfCharacter + HasKernelOfMultiplicativeGeneralMapping + HasKernelOfTransformation + HasKillingMatrix + HasKnowsHowToDecompose + HasLClassOfHClass + HasLGFirst + HasLGHeads + HasLGLayers + HasLGLength + HasLGTails + HasLGWeights + HasLargestElementGroup + HasLargestMovedPoint + HasLargestMovedPointPerm + HasLatticeGeneratorsInUEA + HasLatticeSubgroups + HasLeadCoeffsIGS + HasLeftActingAlgebra + HasLeftActingDomain + HasLeftActingGroup + HasLeftActingRingOfIdeal + HasLeftDerivations + HasLength + HasLengthsTom + HasLessThanFunction + HasLessThanOrEqualFunction + HasLetterRepWordsLessFunc + HasLevelsOfGenerators + HasLeviMalcevDecomposition + HasLieAlgebraByDomain + HasLieCenter + HasLieCentralizerInParent + HasLieCentre + HasLieDerivedSeries + HasLieDerivedSubalgebra + HasLieFamily + HasLieLowerCentralSeries + HasLieNilRadical + HasLieNormalizerInParent + HasLieObject + HasLieSolvableRadical + HasLieUpperCentralSeries + HasLinearActionBasis + HasLinearCharacters + HasLinesOfStraightLineProgram + HasLongestWeylWordPerm + HasLowerCentralSeriesOfGroup + HasMagmaGeneratorsOfFamily + HasMappingGeneratorsImages + HasMappingOfWhichItIsAsGGMBI + HasMarksTom + HasMatTom + HasMatrixByBlockMatrix + HasMatrixDimension + HasMaximalAbelianQuotient + HasMaximalBlocksAttr + HasMaximalNormalSubgroups + HasMaximalSubgroupClassReps + HasMaximalSubgroups + HasMaximalSubgroupsLattice + HasMaximalSubgroupsTom + HasMinimalBlockDimension + HasMinimalGeneratingSet + HasMinimalNormalSubgroups + HasMinimalStabChain + HasMinimalSupergroupsLattice + HasMinimizedBombieriNorm + HasModuleOfExtension + HasModulusOfZmodnZObj + HasMoebiusTom + HasMolienSeriesInfo + HasMonoidOfRewritingSystem + HasMonomialComparisonFunction + HasMonomialExtrepComparisonFun + HasMovedPoints + HasMultiplicationTable + HasMultiplicativeNeutralElement + HasMultiplicativeZero + HasName + HasNameIsomorphismClass + HasNamesLibTom + HasNamesOfFusionSources + HasNaturalCharacter + HasNaturalHomomorphismByNormalSubgroupNCInParent + HasNaturalHomomorphismsPool + HasNegativeRootVectors + HasNegativeRoots + HasNestingDepthA + HasNestingDepthM + HasNiceAlgebraMonomorphism + HasNiceBasis + HasNiceFreeLeftModule + HasNiceFreeLeftModuleInfo + HasNiceMonomorphism + HasNiceNormalFormByExtRepFunction + HasNiceObject + HasNilpotencyClassOfGroup + HasNilpotentClassTwoElement + HasNonLieNilpotentElement + HasNonNilpotentElement + HasNorm + HasNormalBase + HasNormalClosureInParent + HasNormalMaximalSubgroups + HasNormalSeriesByPcgs + HasNormalSubgroupClassesInfo + HasNormalSubgroups + HasNormalizerInGLnZ + HasNormalizerInGLnZBravaisGroup + HasNormalizerInHomePcgs + HasNormalizerInParent + HasNormalizersTom + HasNormedRowVector + HasNormedRowVectors + HasNormedVectors + HasNotifiedFusionsOfLibTom + HasNotifiedFusionsToLibTom + HasNrConjugacyClasses + HasNrInputsOfStraightLineProgram + HasNrMovedPoints + HasNrMovedPointsPerm + HasNrSubsTom + HasNrSyllables + HasNullAlgebra + HasNullspaceIntMat + HasNullspaceMat + HasNumberGeneratorsOfRws + HasNumberSyllables + HasNumeratorOfModuloPcgs + HasNumeratorOfRationalFunction + HasONanScottType + HasOccuringVariableIndices + HasOmegaAndLowerPCentralSeries + HasOmegaSeries + HasOne + HasOneAttr + HasOneImmutable + HasOneOfPcgs + HasOperatorOfExternalSet + HasOrbitGeneratorsOfGroup + HasOrbitLengths + HasOrbitLengthsDomain + HasOrbitStabilizingParentGroup + HasOrbits + HasOrbitsDomain + HasOrder + HasOrderingOfRewritingSystem + HasOrderingOnGenerators + HasOrderingsFamily + HasOrdersClassRepresentatives + HasOrdersTom + HasOrdinaryCharacterTable + HasOrthogonalSpaceInFullRowSpace + HasPCentralLieAlgebra + HasPCentralNormalSeriesByPcgsPGroup + HasPClassPGroup + HasPSLDegree + HasPSLUnderlyingField + HasParent + HasParentAttr + HasParentPcgs + HasPartialClosureOfCongruence + HasPartialOrderOfHasseDiagram + HasPcGroupWithPcgs + HasPcSeries + HasPcgs + HasPcgsCentralSeries + HasPcgsChiefSeries + HasPcgsElementaryAbelianSeries + HasPcgsPCentralSeriesPGroup + HasPerfectIdentification + HasPerfectResiduum + HasPermutationTom + HasPositiveRootVectors + HasPositiveRoots + HasPositiveRootsAsWeights + HasPowerS + HasPowerSubalgebraSeries + HasPreBasis + HasPreImagesRange + HasPreferredGenerators + HasPrefrattiniSubgroup + HasPresentation + HasPrimaryGeneratorWords + HasPrimeField + HasPrimePGroup + HasPrimePowerComponents + HasPrimitiveElement + HasPrimitiveIdentification + HasPrimitiveRoot + HasProjectiveOrder + HasPseudoRandomSeed + HasPthPowerImages + HasQuasiDihedralGenerators + HasQuaternionGenerators + HasQuotientGroup + HasQuotientGroupHom + HasQuotientSemigroupCongruence + HasQuotientSemigroupHomomorphism + HasQuotientSemigroupPreimage + HasRClassOfHClass + HasRadicalGroup + HasRadicalOfAlgebra + HasRange + HasRankAction + HasRankMat + HasRankOfTransformation + HasRankPGroup + HasRat + HasRationalClasses + HasRationalFunctionsFamily + HasRationalizedMat + HasRealClasses + HasRecNames + HasReducedConfluentRewritingSystem + HasReesCongruenceOfSemigroupIdeal + HasReesZeroMatrixSemigroupElementIsZero + HasRefinedPcGroup + HasRegularActionHomomorphism + HasRelationsOfFpMonoid + HasRelationsOfFpSemigroup + HasRelativeOrders + HasRelatorsOfFpAlgebra + HasRelatorsOfFpGroup + HasRepresentative + HasRepresentativeSmallest + HasRepresentativesContainedRightCosets + HasRepresentativesMinimalBlocksAttr + HasRepresentativesPerfectSubgroups + HasRepresentativesSimpleSubgroups + HasRespectsAddition + HasRespectsAdditiveInverses + HasRespectsInverses + HasRespectsMultiplication + HasRespectsOne + HasRespectsScalarMultiplication + HasRespectsZero + HasRightActingAlgebra + HasRightActingDomain + HasRightActingGroup + HasRightActingRingOfIdeal + HasRightDerivations + HasRightTransversalInParent + HasRootOfDefiningPolynomial + HasRootSystem + HasRowIndexOfReesMatrixSemigroupElement + HasRowIndexOfReesZeroMatrixSemigroupElement + HasRowsOfReesMatrixSemigroup + HasRowsOfReesZeroMatrixSemigroup + HasRules + HasSLDegree + HasSLUnderlyingField + HasSandwichMatrixOfReesMatrixSemigroup + HasSandwichMatrixOfReesZeroMatrixSemigroup + HasSemiEchelonBasis + HasSemiEchelonMat + HasSemiEchelonMatTransformation + HasSemiSimpleType + HasSemidirectFactorsOfGroup + HasSemidirectProductInfo + HasSemigroupOfRewritingSystem + HasSiftFunction + HasSiftGroup + HasSignPerm + HasSimpleSystem + HasSimsNo + HasSize + HasSizesCentralizers + HasSizesConjugacyClasses + HasSmallGeneratingSet + HasSmallestGeneratorPerm + HasSmallestMovedPoint + HasSmallestMovedPointPerm + HasSocle + HasSocleComplement + HasSocleDimensions + HasSocleTypePrimitiveGroup + HasSortingPerm + HasSource + HasSparseCartanMatrix + HasSpecialPcgs + HasSplittingField + HasStabChainImmutable + HasStabChainMutable + HasStabChainOptions + HasStabilizerOfExternalSet + HasStandardGeneratorsInfo + HasStoredExcludedOrders + HasStoredGroebnerBasis + HasStraightLineProgElmType + HasStraightLineProgramsTom + HasString + HasStructureConstantsTable + HasStructureDescription + HasSubdirectProductInfo + HasSubfields + HasSubnormalSeriesInParent + HasSubsTom + HasSubspaces + HasSubspacesAll + HasSuccessors + HasSupersolvableResiduum + HasSurjectiveActionHomomorphismAttr + HasSylowSystem + HasSymmetricDegree + HasSymmetricParentGroup + HasTableOfMarks + HasTestMonomial + HasTestMonomialQuick + HasTestQuasiPrimitive + HasTestRelativelySM + HasTestSubnormallyMonomial + HasTietzeOrigin + HasTrace + HasTranformsOneIntoZero + HasTransformationRepresentation + HasTransformsAdditionIntoMultiplication + HasTransformsAdditiveInversesIntoInverses + HasTransformsInversesIntoAdditiveInverses + HasTransformsMultiplicationIntoAddition + HasTransformsZeroIntoOne + HasTransitiveIdentification + HasTransitivity + HasTransposedMat + HasTransposedMatAttr + HasTransposedMatImmutable + HasTransposedMatrixGroup + HasTransversal + HasTriangulizedNullspaceMat + HasTrivialCharacter + HasTrivialSubFLMLOR + HasTrivialSubadditiveMagmaWithZero + HasTrivialSubalgebra + HasTrivialSubgroup + HasTrivialSubmagmaWithOne + HasTrivialSubmodule + HasTrivialSubmonoid + HasTrivialSubnearAdditiveMagmaWithZero + HasTrivialSubspace + HasTwoClosure + HasTzOptions + HasTzRules + HasUnderlyingCharacterTable + HasUnderlyingCharacteristic + HasUnderlyingCollection + HasUnderlyingElementOfReesMatrixSemigroupElement + HasUnderlyingElementOfReesZeroMatrixSemigroupElement + HasUnderlyingExternalSet + HasUnderlyingFamily + HasUnderlyingField + HasUnderlyingGeneralMapping + HasUnderlyingGroup + HasUnderlyingLeftModule + HasUnderlyingLieAlgebra + HasUnderlyingMagma + HasUnderlyingRelation + HasUnderlyingSemigroupOfReesMatrixSemigroup + HasUnderlyingSemigroupOfReesZeroMatrixSemigroup + HasUnderlyingVectorSpace + HasUnits + HasUniversalEnvelopingAlgebra + HasUpperActingDomain + HasUpperCentralSeriesOfGroup + HasValuesOfClassFunction + HasWeightOfGenerators + HasWeightsTom + HasWeylGroup + HasWreathProductInfo + HasZClassRepsQClass + HasZero + HasZeroAttr + HasZeroCoefficient + HasZeroImmutable + HasZuppos + HashDictAddDictionary + HashFunct + HashKeyBag + HashKeyEnumerator + HashTable + HasnpeGL + HasnpePSL + HasnpeSL + HasseDiagramBinaryRelation + HeadPcElementByNumber + HeadsInfoOfSemiEchelonizedMat + HeadsInfoOfSemiEchelonizedMats + HenselBound + HermiteNormalFormIntegerMat + HermiteNormalFormIntegerMatTransform + HermiteNormalFormIntegerMatTransforms + HeuGcdIntPolsCoeffs + HeuGcdIntPolsExtRep + HeuristicCancelPolynomialsExtRep + HexBlistSetup + HexStringBlist + HexStringBlistEncode + HexStringInt + HideGlobalVariables + HighestWeightModule + HirschLength + Hom + HomCoset + HomCosetFamily + HomCosetWithImage + HomFromFree + HomFromFreeOfBasicImageGroup + HomTransversal + HomeEnumerator + HomePcgs + HomomorphicCanonicalPcgs + HomomorphicInducedPcgs + Homomorphism + HomomorphismFactorSemigroup + HomomorphismFactorSemigroupByClosure + HomomorphismQuotientSemigroup + HomomorphismTransformationSemigroup + HomomorphismsSeries + HumanReadableDefinition + IBr + IMFList + IMFLoad + IMFRec + IdFunc + IdGroup + IdSmallGroup + Ideal + IdealByGenerators + IdealByGeneratorsForLieAlgebra + IdealNC + Idempotents + IdempotentsTom + IdempotentsTomInfo + IdentificationGenericGroup + IdentificationOfConjugacyClasses + IdentificationPermGroup + IdentificationSolvableGroup + Identifier + IdentifierLetters + Identity + IdentityBinaryRelation + IdentityFromSCTable + IdentityMapping + IdentityMat + IdentityTransformation + IdsOfAllGroups + IdsOfAllSmallGroups + Ignore + Image + ImageElm + ImageElmActionHomomorphism + ImageElt + ImageGroup + ImageInWord + ImageKernelBlocksHomomorphism + ImageListOfTransformation + ImageMat + ImageOnAbelianCSPG + ImageSetOfTransformation + ImageSiftedBaseImage + ImageUnderWord + Images + ImagesElm + ImagesListOfBinaryRelation + ImagesRepresentative + ImagesRepresentativeGMBIByElementsList + ImagesSet + ImagesSmallestGenerators + ImagesSource + ImfInvariants + ImfMatrixGroup + ImfNumberQClasses + ImfNumberQQClasses + ImfNumberZClasses + ImfPositionNumber + ImfRecord + ImgElmSLP + ImgElmSLPNonrecursive + ImmediateImplicationsIdentityMapping + ImmediateImplicationsZeroMapping + Immutable + ImmutableBasis + ImmutableMatrix + ImproveActionDegreeByBlocks + ImproveMaps + ImproveOperationDegreeByBlocks + InParentFOA + IncorporateCentralRelations + IncreaseCounter + IndPcgsWrtSpecFromFamOrHome + IndependentGeneratorsAbelianPPermGroup + IndependentGeneratorsOfAbelianGroup + IndependentGeneratorsOfAbelianMatrixGroup + Indeterminate + IndeterminateName + IndeterminateNumberOfLaurentPolynomial + IndeterminateNumberOfUnivariateLaurentPolynomial + IndeterminateNumberOfUnivariateRationalFunction + IndeterminateOfLaurentPolynomial + IndeterminateOfUnivariateRationalFunction + Indeterminateness + IndeterminatenessInfo + IndeterminatesOfPolynomialRing + Index + IndexCosetTab + IndexInParent + IndexInWholeGroup + IndexNC + IndexOp + Indicator + IndicatorOp + IndicesCentralNormalSteps + IndicesChiefNormalSteps + IndicesEANormalSteps + IndicesInvolutaryGenerators + IndicesNormalSteps + IndicesOfAdjointBasis + IndicesPCentralNormalStepsPGroup + IndicesStabChain + Indirected + Induced + InducedActionAutGroup + InducedActionFactor + InducedAutomorphism + InducedClassFunction + InducedClassFunctions + InducedClassFunctionsByFusionMap + InducedCyclic + InducedGModule + InducedLinearAction + InducedModule + InducedModuleByFieldReduction + InducedPcgs + InducedPcgsByGenerators + InducedPcgsByGeneratorsNC + InducedPcgsByGeneratorsWithImages + InducedPcgsByPcSequence + InducedPcgsByPcSequenceAndGenerators + InducedPcgsByPcSequenceNC + InducedPcgsWrtFamilyPcgs + InducedPcgsWrtHomePcgs + InducedPcgsWrtSpecialPcgs + InducedRepFpGroup + InducedRepresentation + InducedRepresentationImagesRepresentative + InduciblePairs + InductionScheme + Inequalities + InertiaSubgroup + InfiniteListOfGenerators + InfiniteListOfNames + Inflated + Info + InfoAction + InfoAlgebra + InfoAttributes + InfoAutGrp + InfoBasicImage + InfoBckt + InfoChain + InfoCharacterTable + InfoClassFamily + InfoClasses + InfoCoh + InfoCompPairs + InfoComplement + InfoConfluence + InfoCoset + InfoData + InfoDebug + InfoDecision + InfoDoPrint + InfoExtReps + InfoFactor + InfoFpGroup + InfoGalois + InfoGlobal + InfoGroebner + InfoGroup + InfoHash + InfoHashTables + InfoHomClass + InfoIdgroup + InfoImf + InfoKnuthBendix + InfoLattice + InfoLevel + InfoMatInt + InfoMatOrb + InfoMatrix + InfoMeatAxe + InfoMethodSelection + InfoMonomial + InfoMorph + InfoNumtheor + InfoOperation + InfoOptions + InfoOverGr + InfoPcGroup + InfoPcNormalizer + InfoPcSubgroup + InfoPerformance + InfoPoly + InfoPrimeInt + InfoQuotientGroup + InfoQuotientSystem + InfoRSS + InfoRandIso + InfoSQ + InfoSchur + InfoSearchTable + InfoSpecPcgs + InfoTeaching + InfoText + InfoTiming + InfoTom + InfoTransversal + InfoTuples + InfoWarning + InfoZLattice + InitAbsAndIrredModules + InitEpimorphismSQ + InitFusion + InitPowerMap + InitialiseCentralRelations + InitializePackagesInfoRecords + InitializeSchreierTree + Injection + InjectionZeroMagma + InnerAutomorphism + InnerAutomorphismNC + InnerAutomorphismsAutomorphismGroup + InnerSubdirectProducts + InputLogTo + InputOutputLocalProcess + InputOutputStreamByPtyDefaultType + InputTextFile + InputTextFileStillOpen + InputTextFileType + InputTextNone + InputTextNoneType + InputTextString + InputTextStringType + InputTextUser + Insert + InsertElmList + InsertTrivialStabilizer + InstallAccessToGenerators + InstallAtExit + InstallAttributeFunction + InstallAttributeMethodByGroupGeneralMappingByImages + InstallCharReadHookFunc + InstallEqMethodForMappingsFromGenerators + InstallFactorMaintenance + InstallFlushableValue + InstallGlobalFunction + InstallHandlingByNiceBasis + InstallHiddenTrueMethod + InstallImmediateMethod + InstallIsomorphismMaintenance + InstallIsomorphismMaintenanceFunction + InstallMethod + InstallMonomialOrdering + InstallOtherMethod + InstallPcgsSeriesFromIndices + InstallSubsetMaintenance + InstallTrueMethod + InstallTrueMethodNewFilter + InstallValue + InstalledPackageVersion + Int + IntFFE + IntFFESymm + IntHexString + IntScalarProducts + IntVecFFE + Integers + IntegralizedMat + IntegratedStraightLineProgram + IntermediateGroup + IntermediateSubgroups + InternalRepresentative + InterpolatedPolynomial + IntersectBlist + IntersectSet + Intersection + IntersectionBlist + IntersectionNormalClosurePermGroup + IntersectionSet + IntersectionSumPcgs + IntersectionsTom + InvariantBilinearForm + InvariantElementaryAbelianSeries + InvariantForm + InvariantLattice + InvariantQuadraticForm + InvariantSesquilinearForm + InvariantSubgroupsElementaryAbelianGroup + InvariantSubspaceOrCyclicGroup + InvariantSubspaceOrUniformCyclicPGroup + Inverse + InverseAsWord + InverseAttr + InverseClasses + InverseGeneralMapping + InverseImmutable + InverseMap + InverseMatMod + InverseMutable + InverseOp + InversePcgs + InverseRepresentative + InverseRepresentativeWord + InverseSLPElm + InverseSM + InverseSameMutability + Irr + IrrBaumClausen + IrrConlon + IrrDixonSchneider + IrrFacsPol + IrredSolGroupList + IrredSolJSGens + IrreducibleDifferences + IrreducibleModules + IrreducibleRepresentations + IrreducibleRepresentationsByBaumClausen + IrreducibleRepresentationsDixon + IrreducibleSolvableGroup + IrreducibleSolvableGroupMS + IsANFAutomorphism + IsANFAutomorphismRep + IsAbelian + IsAbelianNumberField + IsAbelianNumberFieldPolynomialRing + IsAbelianTom + IsActionHomomorphism + IsActionHomomorphismAutomGroup + IsActionHomomorphismByActors + IsActionHomomorphismByBase + IsActionHomomorphismSubset + IsAdditiveCoset + IsAdditiveCosetDefaultRep + IsAdditiveElement + IsAdditiveElementAsMultiplicativeElementRep + IsAdditiveElementCollColl + IsAdditiveElementCollCollColl + IsAdditiveElementCollection + IsAdditiveElementList + IsAdditiveElementTable + IsAdditiveElementWithInverse + IsAdditiveElementWithInverseCollColl + IsAdditiveElementWithInverseCollCollColl + IsAdditiveElementWithInverseCollection + IsAdditiveElementWithInverseList + IsAdditiveElementWithInverseTable + IsAdditiveElementWithZero + IsAdditiveElementWithZeroCollColl + IsAdditiveElementWithZeroCollCollColl + IsAdditiveElementWithZeroCollection + IsAdditiveElementWithZeroList + IsAdditiveElementWithZeroTable + IsAdditiveGroup + IsAdditiveGroupGeneralMapping + IsAdditiveGroupHomomorphism + IsAdditiveGroupToGroupGeneralMapping + IsAdditiveGroupToGroupHomomorphism + IsAdditiveMagma + IsAdditiveMagmaWithInverses + IsAdditiveMagmaWithZero + IsAdditivelyCommutative + IsAdditivelyCommutativeElement + IsAdditivelyCommutativeElementCollColl + IsAdditivelyCommutativeElementCollection + IsAdditivelyCommutativeElementFamily + IsAlgBFRep + IsAlgExtRep + IsAlgebra + IsAlgebraGeneralMapping + IsAlgebraGeneralMappingByImagesDefaultRep + IsAlgebraHomomorphism + IsAlgebraHomomorphismFromFpRep + IsAlgebraModule + IsAlgebraModuleElement + IsAlgebraModuleElementCollection + IsAlgebraModuleElementFamily + IsAlgebraWithOne + IsAlgebraWithOneGeneralMapping + IsAlgebraWithOneHomomorphism + IsAlgebraicElement + IsAlgebraicElementCollColl + IsAlgebraicElementCollCollColl + IsAlgebraicElementCollection + IsAlgebraicElementFamily + IsAlgebraicExtension + IsAlgebraicExtensionDefaultRep + IsAlgebraicExtensionPolynomialRing + IsAlphaChar + IsAlternatingGroup + IsAnticommutative + IsAntisymmetricBinaryRelation + IsAssocWord + IsAssocWordCollection + IsAssocWordFamily + IsAssocWordWithInverse + IsAssocWordWithInverseCollection + IsAssocWordWithInverseFamily + IsAssocWordWithOne + IsAssocWordWithOneCollection + IsAssocWordWithOneFamily + IsAssociated + IsAssociative + IsAssociativeAOpDSum + IsAssociativeAOpESum + IsAssociativeElement + IsAssociativeElementCollColl + IsAssociativeElementCollection + IsAssociativeLOpDProd + IsAssociativeLOpEProd + IsAssociativeROpDProd + IsAssociativeROpEProd + IsAssociativeUOpDProd + IsAssociativeUOpEProd + IsAttributeStoringRep + IsAttributeStoringRepFlags + IsAutomorphismGroup + IsBLetterAssocWordRep + IsBLetterWordsFamily + IsBasicImageEltRep + IsBasicImageEltRepCollection + IsBasicImageGroup + IsBasicWreathLessThanOrEqual + IsBasicWreathProductOrdering + IsBasis + IsBasisByNiceBasis + IsBasisFiniteFieldRep + IsBasisOfAlgebraModuleElementSpace + IsBasisOfMonomialSpaceRep + IsBasisOfSparseRowSpaceRep + IsBasisOfWeightRepElementSpace + IsBasisWithReplacedLeftModuleRep + IsBergerCondition + IsBijective + IsBinaryRelation + IsBinaryRelationDefaultRep + IsBinaryRelationOnPointsRep + IsBlist + IsBlistRep + IsBlockMatrixRep + IsBlocksHomomorphism + IsBlocksOfActionHomomorphism + IsBlowUpIsomorphism + IsBool + IsBound + IsBoundElmWPObj + IsBoundGlobal + IsBracketRep + IsBrauerTable + IsBravaisGroup + IsBuiltFromAdditiveMagmaWithInverses + IsBuiltFromGroup + IsBuiltFromMagma + IsBuiltFromMagmaWithInverses + IsBuiltFromMagmaWithOne + IsBuiltFromMonoid + IsBuiltFromSemigroup + IsCanonicalBasis + IsCanonicalBasisAbelianNumberFieldRep + IsCanonicalBasisAlgebraicExtension + IsCanonicalBasisCyclotomicFieldRep + IsCanonicalBasisFreeMagmaRingRep + IsCanonicalBasisFullMatrixModule + IsCanonicalBasisFullRowModule + IsCanonicalBasisFullSCAlgebra + IsCanonicalBasisGaussianIntegersRep + IsCanonicalBasisIntegersRep + IsCanonicalBasisRationals + IsCanonicalNiceMonomorphism + IsCanonicalPcgs + IsCanonicalPcgsWrtSpecialPcgs + IsCentral + IsCentralFromGenerators + IsChainTypeGroup + IsChar + IsCharCollection + IsCharacter + IsCharacterTable + IsCharacterTableInProgress + IsCharacteristicMatrixPGroup + IsCharacteristicSubgroup + IsCheapConwayPolynomial + IsClassFunction + IsClassFunctionsSpace + IsClassFusionOfNormalSubgroup + IsClosedStream + IsCochain + IsCochainCollection + IsCochainsSpace + IsCocycle + IsCoeffsElms + IsCollCollsElms + IsCollCollsElmsElms + IsCollCollsElmsElmsX + IsCollLieCollsElms + IsCollection + IsCollectionFamily + IsCollsCollsElms + IsCollsCollsElmsX + IsCollsCollsElmsXX + IsCollsElms + IsCollsElmsColls + IsCollsElmsElms + IsCollsElmsElmsElms + IsCollsElmsElmsX + IsCollsElmsX + IsCollsElmsXElms + IsCollsElmsXX + IsCollsXElms + IsCollsXElmsX + IsCombinatorialCollectorRep + IsCommutative + IsCommutativeElement + IsCommutativeElementCollColl + IsCommutativeElementCollection + IsCommutativeFamily + IsCommutativeFromGenerators + IsCompatiblePair + IsComponentObjectRep + IsCompositionMappingRep + IsConfluent + IsCongruenceClass + IsConjugacyClassGroupRep + IsConjugacyClassPermGroupRep + IsConjugacyClassSubgroupsByStabilizerRep + IsConjugacyClassSubgroupsRep + IsConjugate + IsConjugatorAutomorphism + IsConjugatorIsomorphism + IsConsistentPolynomial + IsConstantRationalFunction + IsConstantTimeAccessGeneralMapping + IsConstantTimeAccessList + IsConstituentHomomorphism + IsContainedInSpan + IsCopyable + IsCyc + IsCycInt + IsCyclic + IsCyclicTom + IsCyclotomic + IsCyclotomicCollColl + IsCyclotomicCollCollColl + IsCyclotomicCollection + IsCyclotomicField + IsCyclotomicMatrixGroup + IsDataObjectRep + IsDeepThoughtCollectorRep + IsDefaultGeneralMappingRep + IsDefaultRhsTypeSingleCollector + IsDefaultTupleRep + IsDenseCoeffVectorRep + IsDenseHashRep + IsDenseList + IsDiagonalMat + IsDictionary + IsDictionaryDefaultRep + IsDigitChar + IsDihedralGroup + IsDirectSumElement + IsDirectSumElementCollection + IsDirectSumElementFamily + IsDirectSumElementsSpace + IsDirectory + IsDirectoryPath + IsDirectoryRep + IsDistributive + IsDistributiveLOpDProd + IsDistributiveLOpDSum + IsDistributiveLOpEProd + IsDistributiveLOpESum + IsDistributiveROpDProd + IsDistributiveROpDSum + IsDistributiveROpEProd + IsDistributiveROpESum + IsDistributiveUOpDProd + IsDistributiveUOpDSum + IsDistributiveUOpEProd + IsDistributiveUOpESum + IsDivisionRing + IsDocumentedVariable + IsDomain + IsDoneIterator + IsDoubleCoset + IsDoubleCosetDefaultRep + IsDuplicateFree + IsDuplicateFreeCollection + IsDuplicateFreeList + IsDxLargeGroup + IsElementFinitePolycyclicGroup + IsElementFinitePolycyclicGroupCollection + IsElementOfFpAlgebra + IsElementOfFpAlgebraCollection + IsElementOfFpAlgebraFamily + IsElementOfFpGroup + IsElementOfFpGroupCollection + IsElementOfFpGroupFamily + IsElementOfFpMonoid + IsElementOfFpMonoidCollection + IsElementOfFpMonoidFamily + IsElementOfFpSemigroup + IsElementOfFpSemigroupCollection + IsElementOfFpSemigroupFamily + IsElementOfFreeGroup + IsElementOfFreeGroupFamily + IsElementOfFreeMagmaRing + IsElementOfFreeMagmaRingCollection + IsElementOfFreeMagmaRingFamily + IsElementOfMagmaRingModuloRelations + IsElementOfMagmaRingModuloRelationsCollection + IsElementOfMagmaRingModuloRelationsFamily + IsElementOfMagmaRingModuloSpanOfZeroFamily + IsElementaryAbelian + IsElementsFamilyByRws + IsElmsCoeffs + IsElmsCollColls + IsElmsCollCollsX + IsElmsCollLieColls + IsElmsColls + IsElmsCollsX + IsElmsCollsXX + IsElmsLieColls + IsEmbeddingDirectProductPermGroup + IsEmbeddingImprimitiveWreathProductPermGroup + IsEmbeddingMagmaMagmaRing + IsEmbeddingProductActionWreathProductPermGroup + IsEmbeddingRingMagmaRing + IsEmbeddingWreathProductPermGroup + IsEmpty + IsEmptyRowVectorRep + IsEmptyString + IsEndOfStream + IsEndoGeneralMapping + IsEndoMapping + IsEnumeratorByFunctions + IsEnumeratorByFunctionsRep + IsEnumeratorByPcgsRep + IsEqualSet + IsEquivalenceClass + IsEquivalenceClassDefaultRep + IsEquivalenceRelation + IsEquivalenceRelationDefaultRep + IsEquivalentByFp + IsEuclideanRing + IsEvenInt + IsExecutableFile + IsExistingFile + IsExtAElement + IsExtAElementCollColl + IsExtAElementCollection + IsExtAElementList + IsExtAElementTable + IsExtASet + IsExtLElement + IsExtLElementCollColl + IsExtLElementCollection + IsExtLElementList + IsExtLElementTable + IsExtLSet + IsExtRElement + IsExtRElementCollColl + IsExtRElementCollection + IsExtRElementList + IsExtRElementTable + IsExtRSet + IsExtUSet + IsExtensibleGeneralMapping + IsExtensiblePartialMapping + IsExternalOrbit + IsExternalOrbitByStabilizerRep + IsExternalSet + IsExternalSetByActorsRep + IsExternalSetByOperatorsRep + IsExternalSetByPcgs + IsExternalSetDefaultRep + IsExternalSubset + IsFFE + IsFFECollColl + IsFFECollCollColl + IsFFECollection + IsFFEFamily + IsFFEMatrixGroup + IsFFEMatrixGroupOverLargeSpace + IsFLMLOR + IsFLMLORWithOne + IsFamFamFam + IsFamFamFamX + IsFamFamX + IsFamFamXY + IsFamLieFam + IsFamXFam + IsFamXFamY + IsFamXYFamZ + IsFamily + IsFamilyDefaultRep + IsFamilyElementOfFreeLieAlgebra + IsFamilyOfFamilies + IsFamilyOfTypes + IsFamilyOverFullCoefficientsFamily + IsFamilyPcgs + IsField + IsFieldControlledByGaloisGroup + IsFieldElementsSpace + IsFieldHomomorphism + IsFilter + IsFinite + IsFiniteBasisDefault + IsFiniteDimensional + IsFiniteFieldPolynomialRing + IsFiniteOrderElement + IsFiniteOrderElementCollColl + IsFiniteOrderElementCollection + IsFiniteOrdersPcgs + IsFiniteSemigroupGreensRelation + IsFinitelyGeneratedGroup + IsFixedStabilizer + IsFlatHashTable + IsFlexibleGeneralMapping + IsFlexiblePartialMapping + IsFpAlgebraElementsSpace + IsFpGroup + IsFpMonoid + IsFpSemigroup + IsFptoSCAMorphism + IsFrattiniFree + IsFreeGroup + IsFreeLeftModule + IsFreeMagma + IsFreeMagmaRing + IsFreeMagmaRingWithOne + IsFreeMonoid + IsFreeSemigroup + IsFrobeniusAutomorphism + IsFromFpGroupGeneralMapping + IsFromFpGroupGeneralMappingByImages + IsFromFpGroupHomomorphism + IsFromFpGroupHomomorphismByImages + IsFromFpGroupStdGensGeneralMappingByImages + IsFromFpGroupStdGensHomomorphismByImages + IsFullFpAlgebra + IsFullHomModule + IsFullMatrixModule + IsFullRowModule + IsFullSCAlgebra + IsFullSubgroupGLorSLRespectingBilinearForm + IsFullSubgroupGLorSLRespectingQuadraticForm + IsFullSubgroupGLorSLRespectingSesquilinearForm + IsFullTransformationSemigroup + IsFunction + IsGL + IsGaussInt + IsGaussRat + IsGaussianIntegers + IsGaussianMatrixSpace + IsGaussianRationals + IsGaussianRowSpace + IsGaussianSpace + IsGeneralLinearGroup + IsGeneralMapping + IsGeneralMappingCollection + IsGeneralMappingFamily + IsGeneralPcgs + IsGeneralizedCartanMatrix + IsGeneralizedDomain + IsGeneralizedRowVector + IsGeneratorsOfMagmaWithInverses + IsGenericCharacterTableRep + IsGenericFiniteSpace + IsGreensClass + IsGreensDClass + IsGreensDRelation + IsGreensHClass + IsGreensHRelation + IsGreensJClass + IsGreensJRelation + IsGreensLClass + IsGreensLRelation + IsGreensLessThanOrEqual + IsGreensRClass + IsGreensRRelation + IsGreensRelation + IsGroup + IsGroupGeneralMapping + IsGroupGeneralMappingByAsGroupGeneralMappingByImages + IsGroupGeneralMappingByImages + IsGroupGeneralMappingByPcgs + IsGroupHClass + IsGroupHomomorphism + IsGroupOfAutomorphisms + IsGroupOfAutomorphismsFiniteGroup + IsGroupOfFamily + IsGroupRing + IsGroupToAdditiveGroupGeneralMapping + IsGroupToAdditiveGroupHomomorphism + IsHandledByNiceBasis + IsHandledByNiceMonomorphism + IsHash + IsHashTable + IsHasseDiagram + IsHomCoset + IsHomCosetCollection + IsHomCosetOfAdditiveElt + IsHomCosetOfFp + IsHomCosetOfMatrix + IsHomCosetOfPerm + IsHomCosetOfTuple + IsHomCosetToAdditiveElt + IsHomCosetToAdditiveEltCollection + IsHomCosetToAdditiveEltRep + IsHomCosetToFp + IsHomCosetToFpCollection + IsHomCosetToFpRep + IsHomCosetToMatrix + IsHomCosetToMatrixCollection + IsHomCosetToMatrixRep + IsHomCosetToObjectRep + IsHomCosetToPerm + IsHomCosetToPermCollection + IsHomCosetToPermRep + IsHomCosetToTuple + IsHomCosetToTupleCollection + IsHomCosetToTupleRep + IsHomQuotientGroup + IsHomogeneousList + IsIdeal + IsIdealInParent + IsIdealOp + IsIdempotent + IsIdenticalObj + IsIdenticalObjFamiliesColObjObj + IsIdenticalObjFamiliesColObjObjObj + IsIdenticalObjFamiliesColXXXObj + IsIdenticalObjFamiliesColXXXXXXObj + IsIdenticalObjFamiliesRwsObj + IsIdenticalObjFamiliesRwsObjObj + IsIdenticalObjFamiliesRwsObjXXX + IsIdenticalObjObjObjX + IsIdenticalObjObjXObj + IsImfMatrixGroup + IsImpossible + IsInBasicOrbit + IsInCenter + IsInCentre + IsInChain + IsIncomparableUnder + IsInducedFromNormalSubgroup + IsInducedPcgs + IsInducedPcgsRep + IsInducedPcgsWrtSpecialPcgs + IsInfBitsAssocWord + IsInfBitsFamily + IsInfiniteListOfGeneratorsRep + IsInfiniteListOfNamesRep + IsInfinity + IsInfoClass + IsInfoClassCollection + IsInfoClassListRep + IsInfoSelector + IsInjective + IsInnerAutomorphism + IsInputOutputStream + IsInputOutputStreamByPtyRep + IsInputStream + IsInputTextFileRep + IsInputTextNone + IsInputTextNoneRep + IsInputTextStream + IsInputTextStringRep + IsInt + IsIntegerMatrixGroup + IsIntegers + IsIntegralBasis + IsIntegralCyclotomic + IsIntegralRing + IsInternalRep + IsInternallyConsistent + IsInverseGeneralMappingRep + IsIrreducible + IsIrreducibleCharacter + IsIrreducibleRingElement + IsIterator + IsIteratorByFunctions + IsIteratorByFunctionsRep + IsJacobianElement + IsJacobianElementCollColl + IsJacobianElementCollection + IsJacobianRing + IsKernelPcWord + IsKnuthBendixRewritingSystem + IsKnuthBendixRewritingSystemRep + IsLDistributive + IsLatticeOrderBinaryRelation + IsLatticeSubgroupsRep + IsLaurentPolynomial + IsLaurentPolynomialDefaultRep + IsLaurentPolynomialsFamily + IsLaurentPolynomialsFamilyElement + IsLeftActedOnByDivisionRing + IsLeftActedOnByRing + IsLeftActedOnBySuperset + IsLeftAlgebraModule + IsLeftAlgebraModuleElement + IsLeftAlgebraModuleElementCollection + IsLeftIdeal + IsLeftIdealFromGenerators + IsLeftIdealInParent + IsLeftIdealOp + IsLeftMagmaCongruence + IsLeftMagmaIdeal + IsLeftModule + IsLeftModuleGeneralMapping + IsLeftModuleHomomorphism + IsLeftOperatorAdditiveGroup + IsLeftOperatorRing + IsLeftOperatorRingWithOne + IsLeftSemigroupCongruence + IsLeftSemigroupIdeal + IsLeftVectorSpace + IsLessThanOrEqualUnder + IsLessThanUnder + IsLetterAssocWordRep + IsLetterWordsFamily + IsLexicographicallyLess + IsLibTomRep + IsLibraryCharacterTableRep + IsLieAbelian + IsLieAlgebra + IsLieEmbeddingRep + IsLieFamFam + IsLieMatrix + IsLieNilpotent + IsLieNilpotentElement + IsLieObject + IsLieObjectCollection + IsLieObjectsModule + IsLieSolvable + IsLinearActionHomomorphism + IsLinearGeneralMappingByImagesDefaultRep + IsLinearMapping + IsLinearMappingByMatrixDefaultRep + IsLinearMappingsModule + IsLinearlyIndependent + IsLinearlyPrimitive + IsList + IsListDefault + IsListDictionary + IsListHashTable + IsListLookupDictionary + IsListOrCollection + IsLockedRepresentationVector + IsLookupDictionary + IsLowerAlphaChar + IsLowerTriangularMat + IsMagma + IsMagmaByMultiplicationTableObj + IsMagmaCollsMagmaRingColls + IsMagmaCongruence + IsMagmaHomomorphism + IsMagmaIdeal + IsMagmaRingModuloRelations + IsMagmaRingModuloSpanOfZero + IsMagmaRingObjDefaultRep + IsMagmaRingsMagmas + IsMagmaRingsRings + IsMagmaWithInverses + IsMagmaWithInversesIfNonzero + IsMagmaWithMultiplicativeZeroAdjoinedElementRep + IsMagmaWithOne + IsMagmasMagmaRings + IsMapping + IsMappingByFunctionRep + IsMappingByFunctionWithInverseRep + IsMatchingSublist + IsMatrix + IsMatrixCollection + IsMatrixFLMLOR + IsMatrixGroup + IsMatrixModule + IsMatrixSpace + IsMemberPcSeriesPermGroup + IsMinimalNonmonomial + IsModuloPcgs + IsModuloPcgsFpGroupRep + IsModuloPcgsPermGroupRep + IsModuloPcgsRep + IsModuloTailPcgsByListRep + IsModuloTailPcgsRep + IsModulusRep + IsMonoid + IsMonomial + IsMonomialCharacter + IsMonomialCharacterTable + IsMonomialElement + IsMonomialElementCollection + IsMonomialElementFamily + IsMonomialElementRep + IsMonomialGroup + IsMonomialMatrix + IsMonomialNumber + IsMonomialOrdering + IsMonomialOrderingDefaultRep + IsMultiplicativeElement + IsMultiplicativeElementCollColl + IsMultiplicativeElementCollCollColl + IsMultiplicativeElementCollection + IsMultiplicativeElementList + IsMultiplicativeElementTable + IsMultiplicativeElementWithInverse + IsMultiplicativeElementWithInverseByPolycyclicCollector + IsMultiplicativeElementWithInverseByPolycyclicCollectorCollection + IsMultiplicativeElementWithInverseByRws + IsMultiplicativeElementWithInverseCollColl + IsMultiplicativeElementWithInverseCollCollColl + IsMultiplicativeElementWithInverseCollection + IsMultiplicativeElementWithInverseList + IsMultiplicativeElementWithInverseTable + IsMultiplicativeElementWithOne + IsMultiplicativeElementWithOneCollColl + IsMultiplicativeElementWithOneCollCollColl + IsMultiplicativeElementWithOneCollection + IsMultiplicativeElementWithOneList + IsMultiplicativeElementWithOneTable + IsMultiplicativeElementWithZero + IsMultiplicativeElementWithZeroCollection + IsMultiplicativeGeneralizedRowVector + IsMultiplicativeZero + IsMutable + IsMutableBasis + IsMutableBasisByImmutableBasisRep + IsMutableBasisOfGaussianMatrixSpaceRep + IsMutableBasisOfGaussianRowSpaceRep + IsMutableBasisViaNiceMutableBasisRep + IsMutableBasisViaUnderlyingMutableBasisRep + IsNBitsPcWordRep + IsNameOfNoninstalledTableOfMarks + IsNaturalAlternatingGroup + IsNaturalGL + IsNaturalGLnZ + IsNaturalHomomorphismPcGroupRep + IsNaturalSL + IsNaturalSLnZ + IsNaturalSymmetricGroup + IsNearAdditiveElement + IsNearAdditiveElementCollColl + IsNearAdditiveElementCollCollColl + IsNearAdditiveElementCollection + IsNearAdditiveElementList + IsNearAdditiveElementTable + IsNearAdditiveElementWithInverse + IsNearAdditiveElementWithInverseCollColl + IsNearAdditiveElementWithInverseCollCollColl + IsNearAdditiveElementWithInverseCollection + IsNearAdditiveElementWithInverseList + IsNearAdditiveElementWithInverseTable + IsNearAdditiveElementWithZero + IsNearAdditiveElementWithZeroCollColl + IsNearAdditiveElementWithZeroCollCollColl + IsNearAdditiveElementWithZeroCollection + IsNearAdditiveElementWithZeroList + IsNearAdditiveElementWithZeroTable + IsNearAdditiveGroup + IsNearAdditiveMagma + IsNearAdditiveMagmaWithInverses + IsNearAdditiveMagmaWithZero + IsNearRing + IsNearRingElement + IsNearRingElementCollColl + IsNearRingElementCollCollColl + IsNearRingElementCollection + IsNearRingElementFamily + IsNearRingElementList + IsNearRingElementTable + IsNearRingElementWithInverse + IsNearRingElementWithInverseCollColl + IsNearRingElementWithInverseCollCollColl + IsNearRingElementWithInverseCollection + IsNearRingElementWithInverseList + IsNearRingElementWithInverseTable + IsNearRingElementWithOne + IsNearRingElementWithOneCollColl + IsNearRingElementWithOneCollCollColl + IsNearRingElementWithOneCollection + IsNearRingElementWithOneList + IsNearRingElementWithOneTable + IsNearRingWithOne + IsNearlyCharacterTable + IsNegInt + IsNegRat + IsNiceMonomorphism + IsNilpQuotientSystem + IsNilpotent + IsNilpotentCharacterTable + IsNilpotentElement + IsNilpotentGroup + IsNilpotentTom + IsNoImmediateMethodsObject + IsNonGaussianMatrixSpace + IsNonGaussianRowSpace + IsNonSPGeneralMapping + IsNonSPMappingByFunctionRep + IsNonSPMappingByFunctionWithInverseRep + IsNonTrivial + IsNonassocWord + IsNonassocWordCollection + IsNonassocWordFamily + IsNonassocWordWithOne + IsNonassocWordWithOneCollection + IsNonassocWordWithOneFamily + IsNoncharacteristicMatrixPGroup + IsNonnegativeIntegers + IsNormal + IsNormalBasis + IsNormalForm + IsNormalInParent + IsNormalOp + IsNotElmsColls + IsNotIdenticalObj + IsNullMapMatrix + IsNumberField + IsNumeratorParentForExponentsRep + IsNumeratorParentPcgsFamilyPcgs + IsObjToBePrinted + IsObject + IsOddAdditiveNestingDepthFamily + IsOddAdditiveNestingDepthObject + IsOddInt + IsOne + IsOperation + IsOperationAlgebraHomomorphismDefaultRep + IsOrdering + IsOrderingOnFamilyOfAssocWords + IsOrdinaryMatrix + IsOrdinaryMatrixCollection + IsOrdinaryTable + IsOutputStream + IsOutputTextFileRep + IsOutputTextNone + IsOutputTextNoneRep + IsOutputTextStream + IsOutputTextStringRep + IsPGroup + IsPNilpotent + IsPNilpotentOp + IsPQuotientSystem + IsPSL + IsPSolvable + IsPSolvableCharacterTable + IsPSolvableCharacterTableOp + IsPSolvableOp + IsPackedElementDefaultRep + IsPadicExtensionNumber + IsPadicExtensionNumberFamily + IsPadicNumber + IsPadicNumberCollColl + IsPadicNumberCollection + IsPadicNumberFamily + IsPadicNumberList + IsPadicNumberTable + IsParentPcgsFamilyPcgs + IsPartialOrderBinaryRelation + IsPartition + IsPcGroup + IsPcGroupGeneralMappingByImages + IsPcGroupHomomorphismByImages + IsPcgs + IsPcgsCentralSeries + IsPcgsChiefSeries + IsPcgsDefaultRep + IsPcgsElementaryAbelianSeries + IsPcgsFamily + IsPcgsPCentralSeriesPGroup + IsPcgsPermGroupRep + IsPcgsToPcgsGeneralMappingByImages + IsPcgsToPcgsHomomorphism + IsPerfect + IsPerfectCharacterTable + IsPerfectGroup + IsPerfectLibraryGroup + IsPerfectTom + IsPerm + IsPermCollColl + IsPermCollection + IsPermGroup + IsPermGroupGeneralMappingByImages + IsPermGroupHomomorphismByImages + IsPermOnEnumerator + IsPlistRep + IsPolycyclicCollector + IsPolycyclicGroup + IsPolynomial + IsPolynomialDefaultRep + IsPolynomialFunction + IsPolynomialFunctionCollection + IsPolynomialFunctionsFamily + IsPolynomialFunctionsFamilyElement + IsPolynomialRing + IsPolynomialRingIdeal + IsPosInt + IsPosRat + IsPositionDictionary + IsPositionLookupDictionary + IsPositionalObjectRep + IsPositionsList + IsPositiveIntegers + IsPowerCommutatorCollector + IsPowerConjugateCollector + IsPreOrderBinaryRelation + IsPreimagesByAsGroupGeneralMappingByImages + IsPresentation + IsPresentationDefaultRep + IsPrimGrpIterRep + IsPrime + IsPrimeField + IsPrimeInt + IsPrimeOrdersPcgs + IsPrimePowerInt + IsPrimitive + IsPrimitiveAffine + IsPrimitiveCharacter + IsPrimitiveMatrixGroup + IsPrimitivePolynomial + IsPrimitiveRootMod + IsProbablyPrimeInt + IsProbablyPrimeIntWithFail + IsProjectionDirectProductPermGroup + IsProjectionSubdirectProductPermGroup + IsPseudoCanonicalBasisFullHomModule + IsPurePadicNumber + IsPurePadicNumberFamily + IsQuasiDihedralGroup + IsQuasiPrimitive + IsQuaternion + IsQuaternionCollColl + IsQuaternionCollection + IsQuaternionGroup + IsQuickPositionList + IsQuotientSemigroup + IsQuotientSystem + IsQuotientToAdditiveGroup + IsQuotientToFpGroup + IsQuotientToMatrixGroup + IsQuotientToPermGroup + IsQuotientToTupleGroup + IsRDistributive + IsRange + IsRangeRep + IsRat + IsRationalClassGroupRep + IsRationalClassPermGroupRep + IsRationalFunction + IsRationalFunctionCollection + IsRationalFunctionDefaultRep + IsRationalFunctionOverField + IsRationalFunctionsFamily + IsRationalFunctionsFamilyElement + IsRationalMatrixGroup + IsRationals + IsRationalsPolynomialRing + IsReadOnlyGVar + IsReadOnlyGlobal + IsReadableFile + IsRecord + IsRecordCollColl + IsRecordCollection + IsRectangularTable + IsRectangularTablePlist + IsReduced + IsReducedConfluentRewritingSystem + IsReducedForm + IsReductionOrdering + IsReesCongruence + IsReesCongruenceSemigroup + IsReesMatrixSemigroup + IsReesMatrixSemigroupElement + IsReesMatrixSemigroupElementCollection + IsReesMatrixSemigroupElementRep + IsReesZeroMatrixSemigroup + IsReesZeroMatrixSemigroupElement + IsReesZeroMatrixSemigroupElementCollection + IsReflexiveBinaryRelation + IsRegular + IsRegularDClass + IsRegularSemigroup + IsRegularSemigroupElement + IsRelativeBasisDefaultRep + IsRelativelySM + IsRestrictedLieAlgebra + IsRewritingSystem + IsRightActedOnByDivisionRing + IsRightActedOnByRing + IsRightActedOnBySuperset + IsRightAlgebraModule + IsRightAlgebraModuleElement + IsRightAlgebraModuleElementCollection + IsRightCoset + IsRightCosetDefaultRep + IsRightIdeal + IsRightIdealFromGenerators + IsRightIdealInParent + IsRightIdealOp + IsRightMagmaCongruence + IsRightMagmaIdeal + IsRightModule + IsRightOperatorAdditiveGroup + IsRightSemigroupCongruence + IsRightSemigroupIdeal + IsRightTransversal + IsRightTransversalCollection + IsRightTransversalFpGroupRep + IsRightTransversalPcGroupRep + IsRightTransversalPermGroupRep + IsRightTransversalRep + IsRightTransversalViaCosetsRep + IsRing + IsRingCollsMagmaRingColls + IsRingElement + IsRingElementCollColl + IsRingElementCollCollColl + IsRingElementCollection + IsRingElementFamily + IsRingElementList + IsRingElementTable + IsRingElementWithInverse + IsRingElementWithInverseCollColl + IsRingElementWithInverseCollCollColl + IsRingElementWithInverseCollection + IsRingElementWithInverseList + IsRingElementWithInverseTable + IsRingElementWithOne + IsRingElementWithOneCollColl + IsRingElementWithOneCollCollColl + IsRingElementWithOneCollection + IsRingElementWithOneList + IsRingElementWithOneTable + IsRingGeneralMapping + IsRingHomomorphism + IsRingWithOne + IsRingWithOneGeneralMapping + IsRingWithOneHomomorphism + IsRingsMagmaRings + IsRootSystem + IsRootSystemFromLieAlgebra + IsRowModule + IsRowSpace + IsRowVector + IsSCAlgebraObj + IsSCAlgebraObjCollColl + IsSCAlgebraObjCollCollColl + IsSCAlgebraObjCollection + IsSCAlgebraObjFamily + IsSCAlgebraObjSpace + IsSL + IsSPGeneralMapping + IsSPMappingByFunctionRep + IsSPMappingByFunctionWithInverseRep + IsSSortedList + IsScalar + IsScalarCollColl + IsScalarCollection + IsScalarList + IsScalarTable + IsSearchTable + IsSemiEchelonBasisOfGaussianMatrixSpaceRep + IsSemiEchelonBasisOfGaussianRowSpaceRep + IsSemiEchelonized + IsSemiRegular + IsSemigroup + IsSemigroupCongruence + IsSemigroupIdeal + IsSemiring + IsSemiringWithOne + IsSemiringWithOneAndZero + IsSemiringWithZero + IsSet + IsShortLexLessThanOrEqual + IsShortLexOrdering + IsSimple + IsSimpleAlgebra + IsSimpleCharacterTable + IsSimpleGroup + IsSimpleSemigroup + IsSingleCollectorRep + IsSingleValued + IsSkewFieldFamily + IsSlicedPerm + IsSlicedPermInv + IsSmallIntRep + IsSmallList + IsSolvable + IsSolvableCharacterTable + IsSolvableGroup + IsSolvableTom + IsSortDictionary + IsSortLookupDictionary + IsSortedList + IsSortedPcgsRep + IsSpaceOfElementsOfMagmaRing + IsSpaceOfRationalFunctions + IsSpaceOfUEAElements + IsSparseHashRep + IsSparseRowSpaceElement + IsSparseRowSpaceElementCollection + IsSparseRowSpaceElementFamily + IsSpecialLinearGroup + IsSpecialPcgs + IsSporadicSimple + IsSporadicSimpleCharacterTable + IsSporadicSimpleGroup + IsStabChainViaChainSubgroup + IsStandardGeneratorsOfGroup + IsStandardized + IsStraightLineProgElm + IsStraightLineProgram + IsStream + IsString + IsStringRep + IsSubalgebraFpAlgebra + IsSubgroup + IsSubgroupFgGroup + IsSubgroupFpGroup + IsSubgroupOfWholeGroupByQuotientRep + IsSubgroupSL + IsSubmonoidFpMonoid + IsSubnormal + IsSubnormallyMonomial + IsSubsemigroupFpSemigroup + IsSubsemigroupReesMatrixSemigroup + IsSubsemigroupReesZeroMatrixSemigroup + IsSubset + IsSubsetBlist + IsSubsetInducedNumeratorModuloTailPcgsRep + IsSubsetInducedPcgsRep + IsSubsetLocallyFiniteGroup + IsSubsetSet + IsSubspace + IsSubspacesFullRowSpaceDefaultRep + IsSubspacesVectorSpace + IsSubspacesVectorSpaceDefaultRep + IsSupersolvable + IsSupersolvableCharacterTable + IsSupersolvableGroup + IsSurjective + IsSyllableAssocWordRep + IsSyllableWordsFamily + IsSymmetricBinaryRelation + IsSymmetricGroup + IsSymmetricPowerElement + IsSymmetricPowerElementCollection + IsTable + IsTableOfMarks + IsTableOfMarksWithGens + IsTailInducedPcgsRep + IsTensorElement + IsTensorElementCollection + IsToBeDefinedObj + IsToFpGroupGeneralMappingByImages + IsToFpGroupHomomorphismByImages + IsToPcGroupGeneralMappingByImages + IsToPcGroupHomomorphismByImages + IsToPermGroupGeneralMappingByImages + IsToPermGroupHomomorphismByImages + IsTotal + IsTotalOrdering + IsTransformation + IsTransformationCollection + IsTransformationMonoid + IsTransformationRep + IsTransformationRepOfEndo + IsTransformationSemigroup + IsTransitive + IsTransitiveBinaryRelation + IsTranslationInvariantOrdering + IsTransvByDirProd + IsTransvByDirProdCollection + IsTransvByHomomorphism + IsTransvByHomomorphismCollection + IsTransvBySchreierTree + IsTransvBySchreierTreeCollection + IsTransvBySiftFunct + IsTransvBySiftFunctCollection + IsTransvByTrivSubgrp + IsTransvByTrivSubgrpCollection + IsTrivial + IsTrivialAOpEZero + IsTrivialHomCoset + IsTrivialLOpEOne + IsTrivialLOpEZero + IsTrivialRBase + IsTrivialROpEOne + IsTrivialROpEZero + IsTrivialUOpEOne + IsTrivialUOpEZero + IsTuple + IsTupleCollection + IsTupleFamily + IsTwoSidedIdeal + IsTwoSidedIdealInParent + IsTwoSidedIdealOp + IsType + IsTypeDefaultRep + IsUEALatticeElement + IsUEALatticeElementCollection + IsUEALatticeElementFamily + IsUFDFamily + IsUniformMatrixGroup + IsUniqueFactorizationRing + IsUnit + IsUnivariatePolynomial + IsUnivariatePolynomialRing + IsUnivariatePolynomialsFamily + IsUnivariatePolynomialsFamilyElement + IsUnivariateRationalFunction + IsUnivariateRationalFunctionDefaultRep + IsUnknown + IsUnknownDefaultRep + IsUnsortedPcgsRep + IsUpToDatePolycyclicCollector + IsUpperActedOnByGroup + IsUpperActedOnBySuperset + IsUpperAlphaChar + IsUpperTriangularMat + IsValidIdentifier + IsVector + IsVectorCollColl + IsVectorCollection + IsVectorList + IsVectorSearchTable + IsVectorSearchTableDefaultRep + IsVectorSpace + IsVectorSpaceHomomorphism + IsVectorTable + IsVirtualCharacter + IsWLetterAssocWordRep + IsWLetterWordsFamily + IsWPObj + IsWeakPointerObject + IsWedgeElement + IsWedgeElementCollection + IsWeightLexOrdering + IsWeightRepElement + IsWeightRepElementCollection + IsWeightRepElementFamily + IsWellFoundedOrdering + IsWeylGroup + IsWholeFamily + IsWord + IsWordCollection + IsWordWithInverse + IsWordWithOne + IsWreathProductElement + IsWreathProductElementCollection + IsWreathProductElementDefaultRep + IsWreathProductOrdering + IsWritableFile + IsZDFRE + IsZDFRECollColl + IsZDFRECollection + IsZero + IsZeroCochainRep + IsZeroCyc + IsZeroGroup + IsZeroMultiplicationRing + IsZeroRationalFunction + IsZeroSimpleSemigroup + IsZeroSquaredElement + IsZeroSquaredElementCollColl + IsZeroSquaredElementCollection + IsZeroSquaredRing + IsZmodnZObj + IsZmodnZObjNonprime + IsZmodnZObjNonprimeCollColl + IsZmodnZObjNonprimeCollCollColl + IsZmodnZObjNonprimeCollection + IsZmodnZObjNonprimeFamily + IsZmodpZObj + IsZmodpZObjLarge + IsZmodpZObjSmall + IsolatePoint + IsomorphicSubgroups + IsomorphismAbelianGroups + IsomorphismFpAlgebra + IsomorphismFpFLMLOR + IsomorphismFpGroup + IsomorphismFpGroupByCompositionSeries + IsomorphismFpGroupByGenerators + IsomorphismFpGroupByGeneratorsNC + IsomorphismFpGroupByPcgs + IsomorphismFpGroupBySubnormalSeries + IsomorphismFpMonoid + IsomorphismFpSemigroup + IsomorphismGroups + IsomorphismMatrixAlgebra + IsomorphismMatrixFLMLOR + IsomorphismPcGroup + IsomorphismPermGroup + IsomorphismPermGroupImfGroup + IsomorphismPermGroupOrFailFpGroup + IsomorphismPermGroups + IsomorphismReesMatrixSemigroup + IsomorphismRefinedPcGroup + IsomorphismSCAlgebra + IsomorphismSCFLMLOR + IsomorphismSimplifiedFpGroup + IsomorphismSolvableSmallGroups + IsomorphismSpecialPcGroup + IsomorphismToFullRowSpace + IsomorphismTransformationSemigroup + IsomorphismTypeInfoFiniteSimpleGroup + Iterated + Iterator + IteratorByBasis + IteratorByFunctions + IteratorList + IteratorSorted + IteratorsFamily + Jacobi + JenningsLieAlgebra + JenningsSeries + JoinEquivalenceRelations + JoinMagmaCongruences + JoinSemigroupCongruences + JoinStringsWithSeparator + JordanDecomposition + KBOverlaps + KappaPerp + Kernel + KernelHcommaC + KernelOfAdditiveGeneralMapping + KernelOfCharacter + KernelOfHomQuotientGroup + KernelOfMultiplicativeGeneralMapping + KernelOfTransformation + KernelUnderDualAction + KeyDependentOperation + KillingMatrix + KnownAttributesOfObject + KnownNaturalHomomorphismsPool + KnownPropertiesOfObject + KnownTruePropertiesOfObject + KnowsDictionary + KnowsHowToDecompose + KnuthBendixRewritingSystem + KroneckerProduct + KuKGenerators + LClassOfHClass + LGFirst + LGHeads + LGLayers + LGLength + LGTails + LGWeights + LLLReducedBasis + LLLReducedGramMat + LLLint + LMPSLPSeed + LaTeX + LaTeXObj + LaTeXStringDecompositionMatrix + LaTeXToHTMLString + LabsLims + Lambda + LargeGaloisField + LargestElementGroup + LargestElementStabChain + LargestMovedPoint + LargestMovedPointPerm + LargestMovedPointPerms + LargestUnknown + LastHashIndex + LastReadValue + LastSystemError + LatticeByCyclicExtension + LatticeGeneratorsInUEA + LatticeSubgroups + LatticeSubgroupsByTom + LaurentPolynomialByCoefficients + LaurentPolynomialByExtRep + Lcm + LcmInt + LcmOp + LcmPP + LeadCoeffsIGS + LeadingCoefficient + LeadingCoefficientOfPolynomial + LeadingExponentOfPcElement + LeadingMonomial + LeadingMonomialOfPolynomial + LeadingMonomialPosExtRep + LeadingTermOfPolynomial + LeadingUEALatticeMonomial + LeastBadComplementLayer + LeastBadHallLayer + LeftActingAlgebra + LeftActingDomain + LeftActingGroup + LeftActingRingOfIdeal + LeftAction + LeftAlgebraModule + LeftAlgebraModuleByGenerators + LeftDerivations + LeftIdeal + LeftIdealByGenerators + LeftIdealNC + LeftMagmaCongruence + LeftMagmaCongruenceByGeneratingPairs + LeftMagmaIdeal + LeftMagmaIdealByGenerators + LeftModuleByGenerators + LeftModuleByHomomorphismToMatAlg + LeftModuleGeneralMappingByImages + LeftModuleGeneratorsForIdealFromGenerators + LeftModuleHomomorphismByImages + LeftModuleHomomorphismByImagesNC + LeftModuleHomomorphismByMatrix + LeftNormedComm + LeftQuotient + LeftQuotientPowerPcgsElement + LeftReduceUEALatticeElement + LeftSemigroupCongruenceByGeneratingPairs + LeftSemigroupIdealEnumeratorDataGetElement + LeftShiftRowVector + Legendre + Length + LengthOfDescendingSeries + LengthOfLongestCommonPrefixOfTwoAssocWords + LengthWPObj + LengthsTom + LenstraBase + LessBoxedObj + LessThanFunction + LessThanOrEqualFunction + LetterRepAssocWord + LetterRepWordsLessFunc + LevelsOfGenerators + LeviMalcevDecomposition + LexicographicOrdering + LexicographicOrderingNC + LieAlgebra + LieAlgebraByDomain + LieAlgebraByStructureConstants + LieBracket + LieCenter + LieCentralizer + LieCentralizerInParent + LieCentre + LieCoboundaryOperator + LieDerivedSeries + LieDerivedSubalgebra + LieFamily + LieLowerCentralSeries + LieNilRadical + LieNormalizer + LieNormalizerInParent + LieObject + LieSolvableRadical + LieUpperCentralSeries + LiftAbsAndIrredModules + LiftEpimorphism + LiftEpimorphismSQ + LiftInduciblePair + LiftedInducedPcgs + LiftedPcElement + LineNumberStringPosition + LinearAction + LinearActionBasis + LinearActionLayer + LinearCharacters + LinearCombination + LinearCombinationPcgs + LinearCombinationVecs + LinearGroupParameters + LinearIndependentColumns + LinearOperation + LinearOperationLayer + LinesOfStraightLineProgram + List + ListBlist + ListHashParams + ListN + ListOp + ListPerm + ListSorted + ListStabChain + ListWithIdenticalEntries + ListX + ListXHelp + ListsFamily + LoadAllPackages + LoadDynamicModule + LoadPackage + LoadPackageDocumentation + LoadStaticModule + LoadedModules + LockNaturalHomomorphismsPool + Log + LogFFE + LogInputTo + LogInt + LogMod + LogModRhoIterate + LogModShanks + LogOutputTo + LogTo + LongestWeylWordPerm + LookupDictionary + LowIndexSubgroupsFpGroup + LowerCentralSeries + LowerCentralSeriesOfGroup + LowerTriangularMatrix + LowercaseString + Lucas + MATINTbezout + MATINTmgcdex + MATINTrgcd + MATINTsplit + Magma + MagmaByGenerators + MagmaByMultiplicationTable + MagmaByMultiplicationTableCreator + MagmaCongruenceByGeneratingPairs + MagmaCongruencePartition + MagmaElement + MagmaGeneratorsOfFamily + MagmaHomomorphismByFunctionNC + MagmaIdeal + MagmaIdealByGenerators + MagmaInputString + MagmaIsomorphismByFunctionsNC + MagmaRingModuloSpanOfZero + MagmaWithInverses + MagmaWithInversesByGenerators + MagmaWithInversesByMultiplicationTable + MagmaWithOne + MagmaWithOneByGenerators + MagmaWithOneByMultiplicationTable + MakeCanonical + MakeConfluent + MakeConsequences + MakeConsequencesPres + MakeFormulaVector + MakeGAPDocDoc + MakeHomChain + MakeImagesInfoLinearGeneralMappingByImages + MakeImmutable + MakeKnuthBendixRewritingSystemConfluent + MakeLIBTOMLIST + MakeMagmaWithInversesByFiniteGenerators + MakeMapping + MakeMonomialOrdering + MakePreImagesInfoLinearGeneralMappingByImages + MakePreImagesInfoLinearMappingByMatrix + MakePreImagesInfoOperationAlgebraHomomorphism + MakeReadOnlyGVar + MakeReadOnlyGlobal + MakeReadWriteGVar + MakeReadWriteGlobal + MakeStabChainLong + ManageableQuotientOfAbelianPGroup + ManageableQuotientOfNilpotentGroup + MappedExpression + MappedExpressionForElementOfFreeAssociativeAlgebra + MappedPcElement + MappedVector + MappedWord + MappedWordSyllableAssocWord + MappingByFunction + MappingGeneratorsImages + MappingOfWhichItIsAsGGMBI + MappingPermListList + MarksTom + MatAlgebra + MatAutomorphismsFamily + MatCharsWreathSymmetric + MatClassMultCoeffsCharTable + MatLieAlgebra + MatOrbs + MatOrbsApprox + MatScalarProducts + MatSpace + MatTom + MathieuGroup + MathieuGroupCons + MatricesOfRelator + MatrixAlgebra + MatrixAutomorphisms + MatrixByBlockMatrix + MatrixDimension + MatrixLieAlgebra + MatrixNewBasePoint + MatrixOfAction + MatrixOperationOfCP + MatrixOperationOfCPGroup + MatrixSpace + MatrixSpinCharsSn + MaxHashViewSize + MaxNumeratorCoeffAlgElm + MaximalAbelianQuotient + MaximalBlocks + MaximalBlocksAttr + MaximalBlocksOp + MaximalNormalSubgroups + MaximalSubgroupClassReps + MaximalSubgroupClassesRepsLayer + MaximalSubgroups + MaximalSubgroupsLattice + MaximalSubgroupsSymmAlt + MaximalSubgroupsTom + Maximum + MaximumList + MeetEquivalenceRelations + MeetMagmaCongruences + MeetMaps + MeetPartitionStrat + MeetPartitionStratCell + MeetSemigroupCongruences + MembershipTestKnownBase + MinimalBlockDimension + MinimalElementCosetStabChain + MinimalGeneratingSet + MinimalGensLayer + MinimalNonmonomialGroup + MinimalNormalSubgroups + MinimalPolynomial + MinimalPolynomialMatrixNC + MinimalStabChain + MinimalSupergroupsLattice + MinimalSupergroupsTom + MinimizeExplicitTransversal + MinimizedBombieriNorm + Minimum + MinimumGroupOnSubgroupsOrbit + MinimumList + MinusCharacter + ModGauss + ModifyMinGens + ModifyPcgs + ModularCharacterDegree + ModuleByRestriction + ModuleOfExtension + ModuloPcgs + ModuloPcgsByPcSequence + ModuloPcgsByPcSequenceNC + ModuloTailPcgsByList + ModulusOfZmodnZObj + MoebiusMu + MoebiusTom + MolienSeries + MolienSeriesInfo + MolienSeriesWithGivenDenominator + Monoid + MonoidByGenerators + MonoidByMultiplicationTable + MonoidOfRewritingSystem + MonomialComparisonFunction + MonomialExtGrlexLess + MonomialExtrepComparisonFun + MonomialGrevlexOrdering + MonomialGrlexOrdering + MonomialLexOrdering + MonomialOrderingsFamily + MonomialTotalDegreeLess + MorClassLoop + MorClassOrbs + MorFindGeneratingSystem + MorFroWords + MorMaxFusClasses + MorRatClasses + Morphium + MorrisRecursion + MostFrequentGeneratorFpGroup + MovedPoints + MovedPointsPerms + MulExt + MultCoeffs + MultMatrixPadicNumbersByCoefficientsList + MultRowVector + MultiplicationTable + MultiplicativeElementsWithInversesFamilyByRws + MultiplicativeNeutralElement + MultiplicativeZero + MultiplicativeZeroOp + Multiply + MutableBasis + MutableBasisOfClosureUnderAction + MutableBasisOfIdealInNonassociativeAlgebra + MutableBasisOfNonassociativeAlgebra + MutableBasisOfProductSpace + MutableCopyMat + MutableIdentityMat + MutableNullMat + MutableTransposedMat + MutableTransposedMatDestructive + MyFingerprint + MyIntCoefficients + Naive + Name + NameFunction + NameIsomorphismClass + NameMonth + NameRNam + NameWeekDay + NamesFilter + NamesGVars + NamesLibTom + NamesLocalVariablesFunction + NamesOfComponents + NamesOfFusionSources + NamesSystemGVars + NamesUserGVars + NaturalActedSpace + NaturalCharacter + NaturalHomomorphismByFixedPointSubspace + NaturalHomomorphismByGenerators + NaturalHomomorphismByHomVW + NaturalHomomorphismByIdeal + NaturalHomomorphismByInvariantSubspace + NaturalHomomorphismByNilpotentClassTwoElement + NaturalHomomorphismByNormalSubgroup + NaturalHomomorphismByNormalSubgroupInParent + NaturalHomomorphismByNormalSubgroupNC + NaturalHomomorphismByNormalSubgroupNCInParent + NaturalHomomorphismByNormalSubgroupNCOp + NaturalHomomorphismByNormalSubgroupNCOrig + NaturalHomomorphismByNormalSubgroupOp + NaturalHomomorphismBySubAlgebraModule + NaturalHomomorphismBySubspace + NaturalHomomorphismBySubspaceOntoFullRowSpace + NaturalHomomorphismsPool + NaturalIsomorphismByPcgs + NearAdditiveGroup + NearAdditiveGroupByGenerators + NearAdditiveMagma + NearAdditiveMagmaByGenerators + NearAdditiveMagmaWithInverses + NearAdditiveMagmaWithInversesByGenerators + NearAdditiveMagmaWithZero + NearAdditiveMagmaWithZeroByGenerators + NearlyCharacterTablesFamily + NegativeRootVectors + NegativeRoots + NestingDepthA + NestingDepthM + NewAttribute + NewCategory + NewConstructor + NewDictionary + NewFamily + NewFilter + NewInfoClass + NewOperation + NewProperty + NewRepresentation + NewToBeDefinedObj + NewType + NewmanInfinityCriterion + NextIterator + NextLevelRegularGroups + NextPrimeInt + NextRBasePoint + NextStepCentralizer + NiceAlgebraMonomorphism + NiceBasis + NiceBasisFiltersInfo + NiceBasisNC + NiceFreeLeftModule + NiceFreeLeftModuleForFLMLOR + NiceFreeLeftModuleInfo + NiceMonomorphism + NiceMonomorphismAutomGroup + NiceNormalFormByExtRepFunction + NiceObject + NiceVector + NicomorphismOfFFEMatrixGroup + NicomorphismOfGeneralMatrixGroup + NilpotencyClassOfGroup + NilpotentClassTwoElement + NilpotentQuotientOfFpLieAlgebra + NinKernelCSPG + NonLieNilpotentElement + NonNilpotentElement + NonPerfectCSPG + NonSplitExtensions + NonTrivialRightHandSides + NonassocWord + NonnegIntScalarProducts + NonnegativeIntegers + NorSerPermPcgs + Norm + NormalBase + NormalClosure + NormalClosureByChain + NormalClosureInParent + NormalClosureOp + NormalFormIntMat + NormalIntersection + NormalIntersectionPcgs + NormalMaximalSubgroups + NormalSeriesByPcgs + NormalSubgroupClasses + NormalSubgroupClassesInfo + NormalSubgroups + NormalSubgroupsAbove + NormalSubgroupsCalc + NormalizeNameAndKey + NormalizeWhitespace + NormalizedArgList + NormalizedElementOfMagmaRingModuloRelations + NormalizedNameAndKey + NormalizedWhitespace + Normalizer + NormalizerInGLnZ + NormalizerInGLnZBravaisGroup + NormalizerInHomePcgs + NormalizerInParent + NormalizerOp + NormalizerParentSA + NormalizerStabCSPG + NormalizerTom + NormalizersTom + NormalizingReducedGL + NormedRowVector + NormedRowVectors + NormedVectors + NotifiedFusionsOfLibTom + NotifiedFusionsToLibTom + NrAffinePrimitiveGroups + NrArrangements + NrArrangementsMSetA + NrArrangementsMSetK + NrArrangementsSetA + NrArrangementsSetK + NrArrangementsX + NrBasisVectors + NrBitsInt + NrCombinations + NrCombinationsMSetA + NrCombinationsMSetK + NrCombinationsSetA + NrCombinationsSetK + NrCombinationsX + NrCompatiblePolynomials + NrConjugacyClasses + NrConjugacyClassesGL + NrConjugacyClassesGU + NrConjugacyClassesInSupergroup + NrConjugacyClassesPGL + NrConjugacyClassesPGU + NrConjugacyClassesPSL + NrConjugacyClassesPSU + NrConjugacyClassesSL + NrConjugacyClassesSLIsogeneous + NrConjugacyClassesSU + NrConjugacyClassesSUIsogeneous + NrDerangements + NrDerangementsK + NrInputsOfStraightLineProgram + NrIrreducibleSolvableGroups + NrMovedPoints + NrMovedPointsPerm + NrMovedPointsPerms + NrOrderedPartitions + NrPartitionTuples + NrPartitions + NrPartitionsSet + NrPerfectGroups + NrPerfectLibraryGroups + NrPermutationsList + NrPolyhedralSubgroups + NrPrimitiveGroups + NrRestrictedPartitions + NrRestrictedPartitionsK + NrSmallGroups + NrSolvableAffinePrimitiveGroups + NrSubsTom + NrSyllables + NrTransitiveGroups + NrTuples + NrUnorderedTuples + NthChainSubgroup + NthFundamentalOrbit + NthRoot + NthSchreierTransversalOfChainSubgroup + NthSiftOneLevel + Nucleus + NullAlgebra + NullMapMatrix + NullMat + NullspaceIntMat + NullspaceMat + NullspaceMatDestructive + NullspaceModQ + NumBol + Number + NumberArgumentsFunction + NumberCells + NumberCoset + NumberDigits + NumberFFVector + NumberField + NumberGeneratorsOfRws + NumberIrreducibleSolvableGroups + NumberOfCommutators + NumberOfNewGenerators + NumberOp + NumberPerfectGroups + NumberPerfectLibraryGroups + NumberSmallGroups + NumberSyllables + NumeratorOfModuloPcgs + NumeratorOfRationalFunction + NumeratorRat + OCAddBigMatrices + OCAddCentralizer + OCAddComplement + OCAddGenerators + OCAddGeneratorsGeneral + OCAddGeneratorsPcgs + OCAddMatrices + OCAddRelations + OCAddSumMatrices + OCAddToFunctions + OCConjugatingWord + OCCoprimeComplement + OCEquationMatrix + OCEquationVector + OCNormalRelations + OCOneCoboundaries + OCOneCocycles + OCSmallEquationMatrix + OCSmallEquationVector + OCTestRelations + OCTestRelators + ONanScottType + ObjByExponents + ObjByExtRep + ObjByVector + Objectify + ObjectifyWithAttributes + OccuringVariableIndices + OctaveAlgebra + OddSpinVals + OldGeneratorsOfPresentation + OldKernelHcommaC + OldSubspaceVectorSpaceGroup + Omega + OmegaAndLowerPCentralSeries + OmegaOp + OmegaSeries + OminusEven + OnBreak + OnBreakMessage + OnCharReadHookExcFds + OnCharReadHookExcFuncs + OnCharReadHookExcStreams + OnCharReadHookInFds + OnCharReadHookInFuncs + OnCharReadHookInStreams + OnCharReadHookOutFds + OnCharReadHookOutFuncs + OnCharReadHookOutStreams + OnCocycle + OnIndeterminates + OnLeftAntiOperation + OnLeftInverse + OnLines + OnPairs + OnPoints + OnQuit + OnRelVector + OnRight + OnSets + OnSetsDisjointSets + OnSetsSets + OnSetsTuples + OnSubspacesByCanonicalBasis + OnTuples + OnTuplesSets + OnTuplesTuples + One + OneAttr + OneCoboundaries + OneCocycles + OneFactorBound + OneGroup + OneImmutable + OneIrreducibleSolvableGroup + OneMutable + OneNormalizerfixedBlockSystem + OneOfPcgs + OneOp + OnePrimitiveGroup + OneSM + OneSameMutability + OneSmallGroup + OneTransitiveGroup + OperationAlgebraHomomorphism + OperatorOfExternalSet + OplusEven + OpmOdd + OpmSmall + OptionsStack + Orbit + OrbitByPosOp + OrbitChar + OrbitFusions + OrbitGenerators + OrbitGeneratorsInv + OrbitGeneratorsOfGroup + OrbitLength + OrbitLengthOp + OrbitLengths + OrbitLengthsDomain + OrbitOp + OrbitPerms + OrbitPowerMaps + OrbitRepresentativesCharacters + OrbitShortVectors + OrbitSplit + OrbitStabChain + OrbitStabilizer + OrbitStabilizerAlgorithm + OrbitStabilizerOp + OrbitStabilizingParentGroup + OrbitalPartition + OrbitishFO + OrbitishReq + Orbits + OrbitsByPosOp + OrbitsCharacters + OrbitsDomain + OrbitsPartition + OrbitsPerms + OrbitsishOperation + OrbitsishReq + Order + OrderKnownDividendList + OrderMatLimit + OrderMatTrial + OrderMod + OrderModK + OrderOfRewritingSystem + OrderOfSchurLift + OrderPerm + OrderedPartitions + OrderedPartitionsA + OrderedPartitionsK + OrderingByLessThanFunctionNC + OrderingByLessThanOrEqualFunctionNC + OrderingOfRewritingSystem + OrderingOnGenerators + OrderingsFamily + OrdersClassRepresentatives + OrdersTom + Ordinal + OrdinaryCharacterTable + OrthogonalComponents + OrthogonalEmbeddings + OrthogonalEmbeddingsSpecialDimension + OrthogonalSpaceInFullRowSpace + OrthogonalityDefectEuclideanLattice + OutdatePolycyclicCollector + OutputLogTo + OutputTextFile + OutputTextFileStillOpen + OutputTextFileType + OutputTextNone + OutputTextNoneType + OutputTextString + OutputTextStringType + OutputTextUser + OzeroEven + OzeroOdd + PBIsMinimal + PCentralLieAlgebra + PCentralNormalSeriesByPcgsPGroup + PCentralSeries + PCentralSeriesOp + PClassPGroup + PCore + PCoreOp + PCover + PERFRec + PGroupGeneratorsOfAbelianGroup + PMultiplicator + PQStatistics + PQuotient + PRIMGrp + PRump + PRumpOp + PSLDegree + PSLUnderlyingField + PSp + PackageInfo + PackageVariablesInfo + PadicCoefficients + PadicExpansionByRat + PadicExtensionNumberFamily + PadicNumber + Page + PageDisplay + Pager + Parametrized + Parent + ParentAttr + ParentPcgs + ParityPol + ParseArguments + ParseBibFiles + ParseError + ParseTreeXMLString + PartialClosureOfCongruence + PartialOrderByOrderingFunction + PartialOrderOfHasseDiagram + Partition + PartitionBacktrack + PartitionSortedPoints + PartitionStabilizerPermGroup + PartitionTuples + Partitions + PartitionsA + PartitionsGreatestEQ + PartitionsGreatestLE + PartitionsK + PartitionsRecursively + PartitionsSet + PartitionsSetA + PartitionsSetK + PartitionsTest + PcElementByExponents + PcElementByExponentsNC + PcGroupClassMatrixColumn + PcGroupCode + PcGroupCodeRec + PcGroupFpGroup + PcGroupFpGroupNC + PcGroupWithPcgs + PcSeries + Pcgs + PcgsByIndependentGeneratorsOfAbelianGroup + PcgsByPcSequence + PcgsByPcSequenceCons + PcgsByPcSequenceNC + PcgsCentralSeries + PcgsChiefSeries + PcgsElAbSerFromSpecPcgs + PcgsElementaryAbelianSeries + PcgsHomSoImPow + PcgsMemberPcSeriesPermGroup + PcgsPCentralSeriesPGroup + PcgsStabChainSeries + PcgsSystemLGSeries + PcgsSystemWithComplementSystem + PcgsSystemWithHallSystem + PcgsSystemWithWf + PerfGrpConst + PerfGrpLoad + PerfectCSPG + PerfectCentralProduct + PerfectGroup + PerfectIdentification + PerfectResiduum + PerfectSubdirectProduct + PerfectSubgroupsAlternatingGroup + Perform + PermBounds + PermCandidates + PermCandidatesFaithful + PermCharInfo + PermCharInfoRelative + PermChars + PermCharsTom + PermComb + PermLeftQuoTransformation + PermList + PermListList + PermMatrixGroup + PermNatAnTestDetect + PermNewBasePoint + PermOnEnumerator + Permanent + PermgpContainsAn + PermpcgsPcGroupPcgs + Permut + Permutation + PermutationCharacter + PermutationCycle + PermutationCycleOp + PermutationGModule + PermutationMat + PermutationOp + PermutationToSortCharacters + PermutationToSortClasses + PermutationTom + PermutationsFamily + PermutationsList + PermutationsListK + Permuted + Phi + PlainListCopy + PlainListCopyOp + PointInCellNo + PolycyclicFactorGroup + PolycyclicFactorGroupByRelators + PolycyclicFactorGroupByRelatorsNC + PolycyclicFactorGroupNC + PolynomialByExtRep + PolynomialByExtRepNC + PolynomialCoefficientsOfPolynomial + PolynomialDivisionAlgorithm + PolynomialModP + PolynomialReducedRemainder + PolynomialReduction + PolynomialRing + PopOptions + PosSublOdd + PosVecEnumFF + Position + PositionBound + PositionCanonical + PositionFirstComponent + PositionMatchingDelimiter + PositionNonZero + PositionNot + PositionNthOccurrence + PositionNthTrueBlist + PositionProperty + PositionSet + PositionSorted + PositionStream + PositionSublist + PositionWord + PositionsTrueBlist + PositiveExponentsPresentationFpHom + PositiveIntegers + PositiveRootVectors + PositiveRoots + PositiveRootsAsWeights + PossibleClassFusions + PossibleFusionsCharTableTom + PossiblePowerMaps + PostMakeImmutable + Pover + PowerDecompositions + PowerMap + PowerMapByComposition + PowerMapOfGroup + PowerMapOfGroupWithInvariants + PowerMapOp + PowerMapsAllowedBySymmetrisations + PowerMapsAllowedBySymmetrizations + PowerMod + PowerModCoeffs + PowerModEvalPol + PowerModInt + PowerPartition + PowerPcgsElement + PowerS + PowerSi + PowerSubalgebraSeries + PowerWreath + PowersumsElsyms + PreBasis + PreImage + PreImageElm + PreImageSetStabBlocksHomomorphism + PreImageWord + PreImages + PreImagesElm + PreImagesRange + PreImagesRepresentative + PreImagesRepresentativeOperationAlgebraHomomorphism + PreImagesSet + PreOrbishProcessing + PreferredGenerators + PrefrattiniSubgroup + PreimagesOfTransformation + Presentation + PresentationAugmentedCosetTable + PresentationFpGroup + PresentationNormalClosure + PresentationNormalClosureRrs + PresentationRegularPermutationGroup + PresentationRegularPermutationGroupNC + PresentationSubgroup + PresentationSubgroupMtc + PresentationSubgroupRrs + PresentationViaCosetTable + PresentationsFamily + PrevPrimeInt + PriGroItNext + PrimGrpLoad + PrimaryGeneratorWords + PrimeBlocks + PrimeBlocksOp + PrimeField + PrimeOfPGroup + PrimePGroup + PrimePowerComponent + PrimePowerComponents + PrimePowerPcSequence + PrimePowersInt + PrimeResidues + PrimeResiduesCache + Primes + PrimitiveElement + PrimitiveFacExtRepRatPol + PrimitiveGroup + PrimitiveGroupSims + PrimitiveGroupsIterator + PrimitiveIdentification + PrimitiveIndexIrreducibleSolvableGroup + PrimitivePolynomial + PrimitiveRoot + PrimitiveRootMod + Print + PrintAmbiguity + PrintArray + PrintBibAsBib + PrintBibAsHTML + PrintBibAsText + PrintCharacterTable + PrintCounters + PrintFactorsInt + PrintFormattedString + PrintFormattingStatus + PrintGAPDocElementTemplates + PrintHashWithNames + PrintObj + PrintPadicExpansion + PrintRecIndent + PrintSixFile + PrintTo + ProbabilityShapes + Process + ProcessFixpoint + ProdCoefRatfun + ProdCoeffLaurpol + ProdCoeffUnivfunc + Product + ProductCoeffs + ProductMod + ProductOp + ProductPP + ProductPol + ProductRootsPol + ProductSpace + ProductX + ProductXHelp + ProfileFunctions + ProfileFunctionsInGlobalVariables + ProfileGlobalFunctions + ProfileMethods + ProfileOperations + ProfileOperationsAndMethods + ProfileOperationsAndMethodsOff + ProfileOperationsAndMethodsOn + ProfileOperationsOff + ProfileOperationsOn + ProjectedInducedPcgs + ProjectedPcElement + Projection + ProjectionMap + ProjectionOntoFullRowSpace + ProjectionOntoVectorSubspace + ProjectiveActionHomomorphismMatrixGroup + ProjectiveActionOnFullSpace + ProjectiveCharDeg + ProjectiveGeneralLinearGroup + ProjectiveGeneralLinearGroupCons + ProjectiveGeneralUnitaryGroup + ProjectiveGeneralUnitaryGroupCons + ProjectiveOrder + ProjectiveSpecialLinearGroup + ProjectiveSpecialLinearGroupCons + ProjectiveSpecialUnitaryGroup + ProjectiveSpecialUnitaryGroupCons + ProjectiveSymplecticGroup + ProjectiveSymplecticGroupCons + PropertyMethodByNiceMonomorphism + PropertyMethodByNiceMonomorphismCollColl + PropertyMethodByNiceMonomorphismCollElm + PropertyMethodByNiceMonomorphismElmColl + PseudoRandom + PseudoRandomSeed + PthPowerImage + PthPowerImages + PullBack + PullbackCSPG + PullbackKernelCSPG + PurePadicNumberFamily + PushOptions + Quadratic + QuasiDihedralGenerators + QuaternionAlgebra + QuaternionGenerators + QuickInverseRepresentative + QuoInt + QuotRemLaurpols + QuotRemPolList + QuotSysDefinitionByIndex + QuotSysIndexByDefinition + Quotient + QuotientFromSCTable + QuotientGroup + QuotientGroupByChainHomomorphicImage + QuotientGroupByHomomorphism + QuotientGroupByImages + QuotientGroupByImagesNC + QuotientGroupHom + QuotientMod + QuotientPolynomialsExtRep + QuotientRemainder + QuotientSemigroupCongruence + QuotientSemigroupHomomorphism + QuotientSemigroupPreimage + QuotientSystem + RBaseGroupsBloxPermGroup + RClassOfHClass + RNamObj + RPFactorsModPrime + RPGcdCRT + RPGcdModPrime + RPGcdRepresentationModPrime + RPIFactors + RPIGcd + RPQuotientModPrime + RPSquareHensel + RRefine + RSSDefaultOptions + RadicalGroup + RadicalOfAlgebra + RanImgSrcSurjBloho + RanImgSrcSurjTraho + Random + RandomBinaryRelationOnPoints + RandomByPcs + RandomCommutatorSubproduct + RandomElmAsWord + RandomHashKey + RandomInvertibleMat + RandomIsomorphismTest + RandomList + RandomMat + RandomNormalSubproduct + RandomPcgsSylowSubgroup + RandomPol + RandomPrimitivePolynomial + RandomSchreierSims + RandomSpecialPcgsCoded + RandomSubprod + RandomTransformation + RandomUnimodularMat + Range + Rank + RankAction + RankFilter + RankMat + RankMatDestructive + RankOfTransformation + RankPGroup + RanksOfDescendingSeries + Rat + RatClasPElmArrangeClasses + RatPairString + RationalClass + RationalClasses + RationalClassesInEANS + RationalClassesPElements + RationalClassesPermGroup + RationalClassesSolvableGroup + RationalClassesTry + RationalFunctionByExtRep + RationalFunctionByExtRepWithCancellation + RationalFunctionsFamily + RationalIdentificationPermGroup + RationalizedMat + Rationals + ReObjectify + Read + ReadAll + ReadAllIoStreamByPty + ReadAllLine + ReadAndCheckFunc + ReadAsFunction + ReadByte + ReadGapRoot + ReadGrp + ReadLib + ReadLine + ReadOrComplete + ReadPackage + ReadPkg + ReadPrim + ReadSmall + ReadSmallLib + ReadTest + ReadTom + ReadTrans + RealClasses + RealizableBrauerCharacters + RecFields + RecNames + RecordsFamily + RecurseSchreierTree + RedispatchOnCondition + ReduceCoefficientsOfRws + ReduceCoeffs + ReduceCoeffsMod + ReduceLetterRepWordsRewSys + ReduceRules + ReduceStabChain + ReduceWordUsingRewritingSystem + Reduced + ReducedAdditiveInverse + ReducedByIsomorphisms + ReducedCharacters + ReducedClassFunctions + ReducedComm + ReducedConfluentRewritingSystem + ReducedConfluentRwsFromKbrwsNC + ReducedConjugate + ReducedDifference + ReducedForm + ReducedGaloisStabilizerInfo + ReducedGroebnerBasis + ReducedInverse + ReducedLeftQuotient + ReducedOne + ReducedOrdinary + ReducedPcElement + ReducedPower + ReducedProduct + ReducedQuotient + ReducedRrsWord + ReducedSCTable + ReducedScalarProduct + ReducedSum + ReducedVectorLTM + ReducedZero + Ree + ReeGroup + ReeGroupCons + ReesCongruenceOfSemigroupIdeal + ReesMatrixSemigroup + ReesMatrixSemigroupElement + ReesMatrixSemigroupEnumeratorGetElement + ReesZeroMatrixSemigroup + ReesZeroMatrixSemigroupElement + ReesZeroMatrixSemigroupElementIsZero + ReesZeroMatrixSemigroupEnumeratorGetElement + RefinedChain + RefinedPcGroup + RefinedSymmetrisations + RefinedSymmetrizations + Refinements + ReflectionMat + ReflexiveClosureBinaryRelation + RegisterRBasePoint + RegularActionHomomorphism + RegularModule + RegularModuleByGens + RegularNinKernelCSPG + RelVectorToCocycle + RelationsOfFpMonoid + RelationsOfFpSemigroup + RelativeBasis + RelativeBasisNC + RelativeOrderOfPcElement + RelativeOrders + RelatorFixedMultiplier + RelatorMatrixAbelianizedNormalClosure + RelatorMatrixAbelianizedNormalClosureRrs + RelatorMatrixAbelianizedSubgroup + RelatorMatrixAbelianizedSubgroupMtc + RelatorMatrixAbelianizedSubgroupRrs + RelatorRepresentatives + RelatorsCode + RelatorsOfFpAlgebra + RelatorsOfFpGroup + RelatorsPermGroupHom + RelsSortedByStartGen + RelsViaCosetTable + RemInt + RemoveCharacters + RemoveElmList + RemoveFile + RemoveOuterCoeffs + RemoveRelator + RemoveRootParseTree + RemoveSet + RemoveStabChain + RenumberHighestWeightGenerators + RenumberTree + RenumberedWord + RepOpElmTuplesPermGroup + RepOpSetsPermGroup + RepeatedString + ReplacedString + RepresentationsOfMatrix + RepresentationsOfObject + Representative + RepresentativeAction + RepresentativeActionOp + RepresentativeFromGenerators + RepresentativeLinearOperation + RepresentativeSmallest + RepresentativeTom + RepresentativeTomByGenerators + RepresentativeTomByGeneratorsNC + RepresentativesContainedRightCosets + RepresentativesFusions + RepresentativesMinimalBlocks + RepresentativesMinimalBlocksAttr + RepresentativesMinimalBlocksOp + RepresentativesPerfectSubgroups + RepresentativesPowerMaps + RepresentativesSimpleSubgroups + RepsPerfSimpSub + RequirePackage + Reread + RereadAndCheckFunc + RereadGrp + RereadLib + RereadPackage + RereadPkg + RereadPrim + RereadSmall + RereadTrans + ResetFilterObj + ResetOptionsStack + ResizeFlatHashTable + ResizeListHashTable + RespectsAddition + RespectsAdditiveInverses + RespectsInverses + RespectsMultiplication + RespectsOne + RespectsScalarMultiplication + RespectsZero + RestoreStateRandom + Restricted + RestrictedClassFunction + RestrictedClassFunctions + RestrictedExternalSet + RestrictedMapping + RestrictedNiceMonomorphism + RestrictedPartitions + RestrictedPartitionsA + RestrictedPartitionsK + RestrictedPerm + RestrictedTransformation + ResultOfLineOfStraightLineProgram + ResultOfStraightLineProgram + Resultant + ReturnFail + ReturnFalse + ReturnNextBasePoint + ReturnPopOptions + ReturnTrue + Reversed + ReversedOp + Revision + RewindStream + RewriteAbelianizedSubgroupRelators + RewriteSubgroupRelators + RewriteWord + RightActingAlgebra + RightActingDomain + RightActingGroup + RightActingRingOfIdeal + RightAction + RightAlgebraModule + RightAlgebraModuleByGenerators + RightCoset + RightCosetCanonicalRepresentativeDeterminator + RightCosets + RightCosetsNC + RightDerivations + RightIdeal + RightIdealByGenerators + RightIdealNC + RightMagmaCongruence + RightMagmaCongruenceByGeneratingPairs + RightMagmaIdeal + RightMagmaIdealByGenerators + RightModuleByHomomorphismToMatAlg + RightSemigroupCongruenceByGeneratingPairs + RightSemigroupIdealEnumeratorDataGetElement + RightShiftRowVector + RightTransversal + RightTransversalInParent + RightTransversalOp + RightTransversalPermGroupConstructor + Ring + RingByGenerators + RingElmTimesElm + RingFromFFE + RingWithOne + RingWithOneByGenerators + Root + RootBound + RootInt + RootMod + RootModPrime + RootModPrimePower + RootOfDefiningPolynomial + RootSystem + RootsMod + RootsModPrime + RootsModPrimePower + RootsOfUPol + RootsRepresentativeFFPol + RootsUnityMod + RootsUnityModPrime + RootsUnityModPrimePower + RoundCyc + RoundCycDown + RowEchelonFormLTM + RowIndexOfReesMatrixSemigroupElement + RowIndexOfReesZeroMatrixSemigroupElement + RowSpace + RowsOfReesMatrixSemigroup + RowsOfReesZeroMatrixSemigroup + Rules + RunImmediateMethods + Runtime + Runtimes + SCMinSmaGens + SCRExtend + SCRExtendRecord + SCRMakeStabStrong + SCRNotice + SCRRandomPerm + SCRRandomString + SCRRandomSubproduct + SCRRestoredRecord + SCRSchTree + SCRSift + SCRStrongGenTest + SCTableEntry + SCTableProduct + SLDegree + SLUnderlyingField + SNFofREF + SPolynomial + SSortedList + SSortedListList + STDOut + STGSelFunc + SameBlock + SandwichMatrixOfReesMatrixSemigroup + SandwichMatrixOfReesZeroMatrixSemigroup + SaveWorkspace + ScalarProduct + SchreierTransversal + SchreierTreeDepth + SchreierTreeInternalConsistencyCheck + SchuMu + SchurCover + SchurCoverFP + ScriptFromString + Search + SecHMSM + SecondaryGeneratorWordsAugmentedCosetTable + SecondaryImagesAugmentedCosetTable + SecondsDMYhms + SeekPositionStream + SelectSmallGroups + SelectTransitiveGroups + SemiEchelonBasis + SemiEchelonBasisNC + SemiEchelonMat + SemiEchelonMatDestructive + SemiEchelonMatTransformation + SemiEchelonMatTransformationDestructive + SemiEchelonMats + SemiEchelonMatsDestructive + SemiEchelonMatsNoCo + SemiSimpleType + SemidirectFactorsOfGroup + SemidirectProduct + SemidirectProductInfo + Semigroup + SemigroupByGenerators + SemigroupByMultiplicationTable + SemigroupCongruenceByGeneratingPairs + SemigroupIdealByGenerators + SemigroupIdealEnumeratorDataGetElement + SemigroupOfRewritingSystem + SemigroupTCInitialTableSize + SemigroupToddCoxeterInfo + Semiring + SemiringByGenerators + SemiringWithOne + SemiringWithOneAndZero + SemiringWithOneAndZeroByGenerators + SemiringWithOneByGenerators + SemiringWithZero + SemiringWithZeroByGenerators + SeqsOrbits + Set + SetANonReesCongruenceOfSemigroup + SetAbelianInvariants + SetAbelianInvariantsOfList + SetAbsoluteValue + SetActingDomain + SetActionHomomorphismAttr + SetActionKernelExternalSet + SetActorOfExternalSet + SetActualLibFileName + SetAdditiveElementAsMultiplicativeElement + SetAdditiveElementsAsMultiplicativeElementsFamily + SetAdditiveInverse + SetAdditiveInverseAttr + SetAdditiveInverseImmutable + SetAdditiveNeutralElement + SetAdditivelyActingDomain + SetAdjointBasis + SetAdjointModule + SetAlgebraicElementsFamilies + SetAllBlocks + SetAllInfoLevels + SetAlpha + SetAlternatingDegree + SetAlternatingSubgroup + SetAsDuplicateFreeList + SetAsGroup + SetAsGroupGeneralMappingByImages + SetAsLeftModuleGeneralMappingByImages + SetAsList + SetAsMagma + SetAsMonoid + SetAsNearRing + SetAsPolynomial + SetAsRing + SetAsSSortedList + SetAsSemigroup + SetAsSemiring + SetAsSemiringWithOne + SetAsSemiringWithOneAndZero + SetAsSemiringWithZero + SetAsSortedList + SetAsSubgroupOfWholeGroupByQuotient + SetAssertionLevel + SetAssociatedReesMatrixSemigroupOfDClass + SetAssociatedSemigroup + SetAugmentationIdeal + SetAugmentedCosetTableMtcInWholeGroup + SetAugmentedCosetTableNormalClosureInWholeGroup + SetAugmentedCosetTableRrsInWholeGroup + SetAutomorphismDomain + SetAutomorphismGroup + SetAutomorphismsOfTable + SetBaseIntMat + SetBaseMat + SetBaseOfBasicImageGroup + SetBaseOfGroup + SetBaseOrthogonalSpaceMat + SetBasis + SetBasisOfHomCosetAddMatrixGroup + SetBasisVectors + SetBaumClausenInfo + SetBilinearFormMat + SetBlocksAttr + SetBlocksInfo + SetBrauerCharacterValue + SetBravaisGroup + SetBravaisSubgroups + SetBravaisSupergroups + SetCanEasilyCompareElements + SetCanEasilySortElements + SetCanFindNilpotentClassTwoElement + SetCanonicalBasis + SetCanonicalElt + SetCanonicalGenerators + SetCanonicalNiceMonomorphism + SetCanonicalPcgs + SetCanonicalPcgsWrtFamilyPcgs + SetCanonicalPcgsWrtHomePcgs + SetCanonicalPcgsWrtSpecialPcgs + SetCanonicalRepresentativeDeterminatorOfExternalSet + SetCanonicalRepresentativeOfExternalOrbitByPcgs + SetCanonicalRepresentativeOfExternalSet + SetCartanMatrix + SetCartanSubalgebra + SetCayleyGraphDualSemigroup + SetCayleyGraphSemigroup + SetCenter + SetCentralCharacter + SetCentralIdempotentsOfSemiring + SetCentralNormalSeriesByPcgs + SetCentralizerInGLnZ + SetCentralizerInParent + SetCentre + SetCentreOfCharacter + SetChainSubgroup + SetChainSubgroupQuotient + SetCharacterDegrees + SetCharacterNames + SetCharacterParameters + SetCharacteristic + SetCharacteristicPolynomial + SetChevalleyBasis + SetChiefNormalSeriesByPcgs + SetChiefSeries + SetClassNames + SetClassNamesTom + SetClassParameters + SetClassPermutation + SetClassPositionsOfCentre + SetClassPositionsOfDerivedSubgroup + SetClassPositionsOfDirectProductDecompositions + SetClassPositionsOfElementaryAbelianSeries + SetClassPositionsOfFittingSubgroup + SetClassPositionsOfKernel + SetClassPositionsOfLowerCentralSeries + SetClassPositionsOfMaximalNormalSubgroups + SetClassPositionsOfNormalSubgroups + SetClassPositionsOfSolvableResiduum + SetClassPositionsOfSupersolvableResiduum + SetClassPositionsOfUpperCentralSeries + SetClassRoots + SetClassTypesTom + SetCoKernelOfAdditiveGeneralMapping + SetCoKernelOfMultiplicativeGeneralMapping + SetCoefficientsAndMagmaElements + SetCoefficientsFamily + SetCoefficientsOfLaurentPolynomial + SetCoefficientsOfUnivariatePolynomial + SetCoefficientsOfUnivariateRationalFunction + SetCoefficientsRing + SetCollectionsFamily + SetColumnIndexOfReesMatrixSemigroupElement + SetColumnIndexOfReesZeroMatrixSemigroupElement + SetColumnsOfReesMatrixSemigroup + SetColumnsOfReesZeroMatrixSemigroup + SetCommutator + SetCommutatorANC + SetCommutatorFactorGroup + SetCommutatorLength + SetCommutatorNC + SetComplementSystem + SetComplexConjugate + SetComponentsOfTuplesFamily + SetCompositionSeries + SetComputedAgemos + SetComputedAscendingChains + SetComputedBrauerTables + SetComputedClassFusions + SetComputedCyclicExtensionsTom + SetComputedHallSubgroups + SetComputedIndicators + SetComputedIsPNilpotents + SetComputedIsPSolvableCharacterTables + SetComputedIsPSolvables + SetComputedOmegas + SetComputedPCentralSeriess + SetComputedPCores + SetComputedPRumps + SetComputedPowerMaps + SetComputedPrimeBlockss + SetComputedSylowComplements + SetComputedSylowSubgroups + SetConductor + SetConfluentRws + SetConjugacyClasses + SetConjugacyClassesMaximalSubgroups + SetConjugacyClassesPerfectSubgroups + SetConjugacyClassesSubgroups + SetConjugate + SetConjugateANC + SetConjugateNC + SetConjugates + SetConjugatorInnerAutomorphism + SetConjugatorOfConjugatorIsomorphism + SetConstantTimeAccessList + SetConstituentsOfCharacter + SetConvertBasicImageGroupElement + SetCoreInParent + SetCosetTableFpHom + SetCosetTableInWholeGroup + SetCosetTableNormalClosureInWholeGroup + SetCosetTableOfFpSemigroup + SetCrystGroupDefaultAction + SetCycleStructurePerm + SetCyclicExtensionsTom + SetDataType + SetDecompositionMatrix + SetDecompositionTypesOfGroup + SetDefaultFieldOfMatrix + SetDefaultFieldOfMatrixGroup + SetDefectApproximation + SetDefiningPcgs + SetDefiningPolynomial + SetDefinitionNC + SetDegreeAction + SetDegreeOfBinaryRelation + SetDegreeOfCharacter + SetDegreeOfLaurentPolynomial + SetDegreeOfMatrixGroup + SetDegreeOfTransformation + SetDegreeOfTransformationSemigroup + SetDegreeOperation + SetDegreeOverPrimeField + SetDelta + SetDenominatorOfModuloPcgs + SetDenominatorOfRationalFunction + SetDepthOfUpperTriangularMatrix + SetDerivations + SetDerivative + SetDerivedLength + SetDerivedSeriesOfGroup + SetDerivedSubgroup + SetDerivedSubgroupsTomPossible + SetDerivedSubgroupsTomUnique + SetDeterminantMat + SetDeterminantOfCharacter + SetDihedralGenerators + SetDimension + SetDimensionOfMatrixGroup + SetDimensionOfVectors + SetDimensionsLoewyFactors + SetDimensionsMat + SetDirectFactorsOfGroup + SetDirectProductInfo + SetDirectSumDecomposition + SetDisplayOptions + SetDixonRecord + SetEANormalSeriesByPcgs + SetEarns + SetEggBoxOfDClass + SetElementTestFunction + SetElementaryAbelianSeries + SetElementaryAbelianSeriesLargeSteps + SetElementaryAbelianSubseries + SetElementsFamily + SetElmWPObj + SetEmptyRowVector + SetEntrySCTable + SetEnumerator + SetEnumeratorByBasis + SetEnumeratorSorted + SetEquivalenceClassRelation + SetEquivalenceClasses + SetEquivalenceRelationPartition + SetErrorHandler + SetExponent + SetExponentOfPowering + SetExtRepDenominatorRatFun + SetExtRepNumeratorRatFun + SetExtRepPolynomialRatFun + SetExternalOrbits + SetExternalOrbitsStabilizers + SetExternalSet + SetFactorsOfDirectProduct + SetFaithfulModule + SetFamiliesOfGeneralMappingsAndRanges + SetFamilyForOrdering + SetFamilyForRewritingSystem + SetFamilyPcgs + SetFamilyRange + SetFamilySource + SetFeatureObj + SetFieldOfMatrixGroup + SetFilterObj + SetFittingSubgroup + SetFpElmComparisonMethod + SetFpElmEqualityMethod + SetFpElmKBRWS + SetFrattiniSubgroup + SetFrattinifactorId + SetFrattinifactorSize + SetFreeAlgebraOfFpAlgebra + SetFreeGeneratorsOfFpAlgebra + SetFreeGeneratorsOfFpGroup + SetFreeGeneratorsOfFpMonoid + SetFreeGeneratorsOfFpSemigroup + SetFreeGroupOfBasicImageGroup + SetFreeGroupOfFpGroup + SetFreeMonoidOfFpMonoid + SetFreeMonoidOfRewritingSystem + SetFreeSemigroupOfFpSemigroup + SetFreeSemigroupOfRewritingSystem + SetFrobeniusAutomorphism + SetFunctionAction + SetFusionConjugacyClassesOp + SetFusionsOfLibTom + SetFusionsToLibTom + SetFusionsTom + SetGLDegree + SetGLUnderlyingField + SetGaloisGroup + SetGaloisMat + SetGaloisStabilizer + SetGaloisType + SetGapDocHTMLOptions + SetGapDocLaTeXOptions + SetGapDocTxtOptions + SetGasmanMessageStatus + SetGeneralizedPcgs + SetGeneratingPairsOfLeftMagmaCongruence + SetGeneratingPairsOfMagmaCongruence + SetGeneratingPairsOfRightMagmaCongruence + SetGeneratingSetIsComplete + SetGeneratorOfCyclicGroup + SetGeneratorsOfAdditiveGroup + SetGeneratorsOfAdditiveMagma + SetGeneratorsOfAdditiveMagmaWithInverses + SetGeneratorsOfAdditiveMagmaWithZero + SetGeneratorsOfAlgebra + SetGeneratorsOfAlgebraModule + SetGeneratorsOfAlgebraWithOne + SetGeneratorsOfDivisionRing + SetGeneratorsOfDomain + SetGeneratorsOfEquivalenceRelationPartition + SetGeneratorsOfExtASet + SetGeneratorsOfExtLSet + SetGeneratorsOfExtRSet + SetGeneratorsOfExtUSet + SetGeneratorsOfFLMLOR + SetGeneratorsOfFLMLORWithOne + SetGeneratorsOfField + SetGeneratorsOfGroup + SetGeneratorsOfIdeal + SetGeneratorsOfLeftIdeal + SetGeneratorsOfLeftMagmaIdeal + SetGeneratorsOfLeftModule + SetGeneratorsOfLeftOperatorAdditiveGroup + SetGeneratorsOfLeftOperatorRing + SetGeneratorsOfLeftOperatorRingWithOne + SetGeneratorsOfLeftVectorSpace + SetGeneratorsOfMagma + SetGeneratorsOfMagmaIdeal + SetGeneratorsOfMagmaWithInverses + SetGeneratorsOfMagmaWithOne + SetGeneratorsOfMonoid + SetGeneratorsOfNearAdditiveGroup + SetGeneratorsOfNearAdditiveMagma + SetGeneratorsOfNearAdditiveMagmaWithInverses + SetGeneratorsOfNearAdditiveMagmaWithZero + SetGeneratorsOfRightIdeal + SetGeneratorsOfRightMagmaIdeal + SetGeneratorsOfRightModule + SetGeneratorsOfRightOperatorAdditiveGroup + SetGeneratorsOfRing + SetGeneratorsOfRingWithOne + SetGeneratorsOfRws + SetGeneratorsOfSemigroup + SetGeneratorsOfSemiring + SetGeneratorsOfSemiringWithOne + SetGeneratorsOfSemiringWithOneAndZero + SetGeneratorsOfSemiringWithZero + SetGeneratorsOfTwoSidedIdeal + SetGeneratorsOfVectorSpace + SetGeneratorsSmallest + SetGeneratorsSubgroupsTom + SetGlobalPartitionOfClasses + SetGrading + SetGreensDRelation + SetGreensHRelation + SetGreensJRelation + SetGreensLRelation + SetGreensRRelation + SetGroupByPcgs + SetGroupHClassOfGreensDClass + SetGroupOfPcgs + SetHallSystem + SetHashEntry + SetHashEntryAtLastIndex + SetHelpViewer + SetHirschLength + SetHomCosetFamily + SetHomFromFreeOfBasicImageGroup + SetHomeEnumerator + SetHomePcgs + SetIBr + SetIdGroup + SetIdempotents + SetIdempotentsTom + SetIdempotentsTomInfo + SetIdentificationOfConjugacyClasses + SetIdentifier + SetIdentity + SetIdentityMapping + SetImage + SetImageElt + SetImageListOfTransformation + SetImageSetOfTransformation + SetImagesSmallestGenerators + SetImagesSource + SetImfRecord + SetIndependentGeneratorsOfAbelianGroup + SetIndependentGeneratorsOfAbelianMatrixGroup + SetIndeterminateName + SetIndeterminateNumberOfLaurentPolynomial + SetIndeterminateNumberOfUnivariateLaurentPolynomial + SetIndeterminateNumberOfUnivariateRationalFunction + SetIndeterminateOfUnivariateRationalFunction + SetIndeterminatesOfPolynomialRing + SetIndexInParent + SetIndexInWholeGroup + SetIndicesCentralNormalSteps + SetIndicesChiefNormalSteps + SetIndicesEANormalSteps + SetIndicesInvolutaryGenerators + SetIndicesNormalSteps + SetIndicesOfAdjointBasis + SetIndicesPCentralNormalStepsPGroup + SetInducedPcgs + SetInducedPcgsWrtFamilyPcgs + SetInducedPcgsWrtHomePcgs + SetInducedPcgsWrtSpecialPcgs + SetInfoLevel + SetInfoText + SetInjectionZeroMagma + SetInnerAutomorphismsAutomorphismGroup + SetInt + SetInternalRepresentative + SetInvariantBilinearForm + SetInvariantForm + SetInvariantLattice + SetInvariantQuadraticForm + SetInvariantSesquilinearForm + SetInverse + SetInverseAttr + SetInverseClasses + SetInverseGeneralMapping + SetInverseImmutable + SetIrr + SetIrrBaumClausen + SetIrrConlon + SetIrrDixonSchneider + SetIrrFacsPol + SetIrreducibleRepresentations + SetIsAbelian + SetIsAbelianNumberField + SetIsAbelianTom + SetIsAdditiveGroupGeneralMapping + SetIsAdditiveGroupHomomorphism + SetIsAdditiveGroupToGroupGeneralMapping + SetIsAdditiveGroupToGroupHomomorphism + SetIsAdditivelyCommutative + SetIsAlgebraGeneralMapping + SetIsAlgebraHomomorphism + SetIsAlgebraModule + SetIsAlgebraWithOneGeneralMapping + SetIsAlgebraWithOneHomomorphism + SetIsAlternatingGroup + SetIsAnticommutative + SetIsAntisymmetricBinaryRelation + SetIsAssociative + SetIsAutomorphismGroup + SetIsBasicWreathProductOrdering + SetIsBergerCondition + SetIsBijective + SetIsBravaisGroup + SetIsBuiltFromAdditiveMagmaWithInverses + SetIsBuiltFromGroup + SetIsBuiltFromMagma + SetIsBuiltFromMagmaWithInverses + SetIsBuiltFromMagmaWithOne + SetIsBuiltFromMonoid + SetIsBuiltFromSemigroup + SetIsCanonicalBasis + SetIsCanonicalBasisFullMatrixModule + SetIsCanonicalBasisFullRowModule + SetIsCanonicalBasisFullSCAlgebra + SetIsCanonicalNiceMonomorphism + SetIsCanonicalPcgs + SetIsCanonicalPcgsWrtSpecialPcgs + SetIsChainTypeGroup + SetIsCharacter + SetIsCharacteristicMatrixPGroup + SetIsCommutative + SetIsCommutativeFamily + SetIsConfluent + SetIsConjugatorAutomorphism + SetIsConjugatorIsomorphism + SetIsConstantRationalFunction + SetIsConstantTimeAccessGeneralMapping + SetIsCycInt + SetIsCyclic + SetIsCyclicTom + SetIsCyclicWithSize + SetIsCyclotomicField + SetIsDihedralGroup + SetIsDistributive + SetIsDivisionRing + SetIsDuplicateFree + SetIsDuplicateFreeList + SetIsElementaryAbelian + SetIsEmpty + SetIsEndoGeneralMapping + SetIsEndoMapping + SetIsEquivalenceRelation + SetIsFFEMatrixGroupOverLargeSpace + SetIsFamilyPcgs + SetIsField + SetIsFieldHomomorphism + SetIsFinite + SetIsFiniteDimensional + SetIsFiniteOrdersPcgs + SetIsFiniteSemigroupGreensRelation + SetIsFinitelyGeneratedGroup + SetIsFrattiniFree + SetIsFreeMonoid + SetIsFreeSemigroup + SetIsFullFpAlgebra + SetIsFullHomModule + SetIsFullMatrixModule + SetIsFullRowModule + SetIsFullSCAlgebra + SetIsFullSubgroupGLorSLRespectingBilinearForm + SetIsFullSubgroupGLorSLRespectingQuadraticForm + SetIsFullSubgroupGLorSLRespectingSesquilinearForm + SetIsFullTransformationSemigroup + SetIsGL + SetIsGeneralLinearGroup + SetIsGeneralizedCartanMatrix + SetIsGeneratorsOfMagmaWithInverses + SetIsGreensClass + SetIsGreensDClass + SetIsGreensDRelation + SetIsGreensHClass + SetIsGreensHRelation + SetIsGreensJClass + SetIsGreensJRelation + SetIsGreensLClass + SetIsGreensLRelation + SetIsGreensRClass + SetIsGreensRRelation + SetIsGreensRelation + SetIsGroupGeneralMapping + SetIsGroupHClass + SetIsGroupHomomorphism + SetIsGroupOfAutomorphisms + SetIsGroupOfAutomorphismsFiniteGroup + SetIsGroupRing + SetIsGroupToAdditiveGroupGeneralMapping + SetIsGroupToAdditiveGroupHomomorphism + SetIsHandledByNiceMonomorphism + SetIsHasseDiagram + SetIsHomCosetOfAdditiveElt + SetIsHomCosetOfFp + SetIsHomCosetOfMatrix + SetIsHomCosetOfPerm + SetIsHomCosetOfTuple + SetIsIdealInParent + SetIsIdempotent + SetIsImpossible + SetIsInducedFromNormalSubgroup + SetIsInducedPcgsWrtSpecialPcgs + SetIsInjective + SetIsInnerAutomorphism + SetIsIntegerMatrixGroup + SetIsIntegralBasis + SetIsIntegralCyclotomic + SetIsIntegralRing + SetIsIrreducibleCharacter + SetIsJacobianRing + SetIsLDistributive + SetIsLatticeOrderBinaryRelation + SetIsLaurentPolynomial + SetIsLeftActedOnByDivisionRing + SetIsLeftAlgebraModule + SetIsLeftIdealInParent + SetIsLeftModuleGeneralMapping + SetIsLeftModuleHomomorphism + SetIsLeftSemigroupCongruence + SetIsLeftSemigroupIdeal + SetIsLieAbelian + SetIsLieAlgebra + SetIsLieNilpotent + SetIsLieSolvable + SetIsLinearlyPrimitive + SetIsMagmaHomomorphism + SetIsMapping + SetIsMatrixModule + SetIsMinimalNonmonomial + SetIsMonoid + SetIsMonomialCharacter + SetIsMonomialCharacterTable + SetIsMonomialGroup + SetIsMonomialMatrix + SetIsMonomialNumber + SetIsNaturalAlternatingGroup + SetIsNaturalGL + SetIsNaturalSL + SetIsNaturalSymmetricGroup + SetIsNearRing + SetIsNearRingWithOne + SetIsNilpQuotientSystem + SetIsNilpotentCharacterTable + SetIsNilpotentGroup + SetIsNilpotentTom + SetIsNonTrivial + SetIsNoncharacteristicMatrixPGroup + SetIsNormalBasis + SetIsNormalForm + SetIsNormalInParent + SetIsNumberField + SetIsNumeratorParentPcgsFamilyPcgs + SetIsOne + SetIsOrderingOnFamilyOfAssocWords + SetIsPGroup + SetIsPQuotientSystem + SetIsPSL + SetIsParentPcgsFamilyPcgs + SetIsPartialOrderBinaryRelation + SetIsPcgsCentralSeries + SetIsPcgsChiefSeries + SetIsPcgsElementaryAbelianSeries + SetIsPcgsPCentralSeriesPGroup + SetIsPerfectCharacterTable + SetIsPerfectGroup + SetIsPerfectTom + SetIsPolycyclicGroup + SetIsPolynomial + SetIsPositionsList + SetIsPreOrderBinaryRelation + SetIsPrimeField + SetIsPrimeOrdersPcgs + SetIsPrimitive + SetIsPrimitiveAffine + SetIsPrimitiveCharacter + SetIsPrimitiveMatrixGroup + SetIsPseudoCanonicalBasisFullHomModule + SetIsQuasiDihedralGroup + SetIsQuasiPrimitive + SetIsQuaternionGroup + SetIsRDistributive + SetIsRationalMatrixGroup + SetIsRectangularTable + SetIsReduced + SetIsReesCongruence + SetIsReesCongruenceSemigroup + SetIsReesMatrixSemigroup + SetIsReesZeroMatrixSemigroup + SetIsReflexiveBinaryRelation + SetIsRegular + SetIsRegularDClass + SetIsRegularSemigroup + SetIsRelativelySM + SetIsRestrictedLieAlgebra + SetIsRightAlgebraModule + SetIsRightIdealInParent + SetIsRightSemigroupCongruence + SetIsRightSemigroupIdeal + SetIsRing + SetIsRingGeneralMapping + SetIsRingHomomorphism + SetIsRingWithOne + SetIsRingWithOneGeneralMapping + SetIsRingWithOneHomomorphism + SetIsRowModule + SetIsSL + SetIsSSortedList + SetIsSemiEchelonized + SetIsSemiRegular + SetIsSemigroup + SetIsSemigroupCongruence + SetIsSemigroupIdeal + SetIsSemiring + SetIsSemiringWithOne + SetIsSemiringWithOneAndZero + SetIsSemiringWithZero + SetIsShortLexOrdering + SetIsSimpleAlgebra + SetIsSimpleCharacterTable + SetIsSimpleGroup + SetIsSimpleSemigroup + SetIsSingleValued + SetIsSkewFieldFamily + SetIsSmallList + SetIsSolvableCharacterTable + SetIsSolvableGroup + SetIsSolvableTom + SetIsSortedList + SetIsSpecialLinearGroup + SetIsSpecialPcgs + SetIsSporadicSimpleCharacterTable + SetIsSporadicSimpleGroup + SetIsStabChainViaChainSubgroup + SetIsSubgroupSL + SetIsSubmonoidFpMonoid + SetIsSubnormallyMonomial + SetIsSubsemigroupFpSemigroup + SetIsSubsemigroupReesMatrixSemigroup + SetIsSubsemigroupReesZeroMatrixSemigroup + SetIsSubsetLocallyFiniteGroup + SetIsSupersolvableCharacterTable + SetIsSupersolvableGroup + SetIsSurjective + SetIsSymmetricBinaryRelation + SetIsSymmetricGroup + SetIsTotal + SetIsTotalOrdering + SetIsTransformationMonoid + SetIsTransformationSemigroup + SetIsTransitive + SetIsTransitiveBinaryRelation + SetIsTranslationInvariantOrdering + SetIsTrivial + SetIsTwoSidedIdealInParent + SetIsUFDFamily + SetIsUniformMatrixGroup + SetIsUnivariatePolynomial + SetIsUnivariateRationalFunction + SetIsVectorSpaceHomomorphism + SetIsVirtualCharacter + SetIsWeightLexOrdering + SetIsWellFoundedOrdering + SetIsWeylGroup + SetIsWholeFamily + SetIsWreathProductOrdering + SetIsZero + SetIsZeroGroup + SetIsZeroMultiplicationRing + SetIsZeroRationalFunction + SetIsZeroSimpleSemigroup + SetIsZeroSquaredRing + SetIsomorphismFpAlgebra + SetIsomorphismFpFLMLOR + SetIsomorphismFpGroup + SetIsomorphismFpMonoid + SetIsomorphismFpSemigroup + SetIsomorphismMatrixAlgebra + SetIsomorphismMatrixFLMLOR + SetIsomorphismPcGroup + SetIsomorphismPermGroup + SetIsomorphismReesMatrixSemigroup + SetIsomorphismRefinedPcGroup + SetIsomorphismSCAlgebra + SetIsomorphismSCFLMLOR + SetIsomorphismSimplifiedFpGroup + SetIsomorphismSpecialPcGroup + SetIsomorphismTransformationSemigroup + SetJenningsLieAlgebra + SetJenningsSeries + SetJordanDecomposition + SetKernelOfAdditiveGeneralMapping + SetKernelOfCharacter + SetKernelOfMultiplicativeGeneralMapping + SetKernelOfTransformation + SetKillingMatrix + SetKnowsHowToDecompose + SetLClassOfHClass + SetLGFirst + SetLGHeads + SetLGLayers + SetLGLength + SetLGTails + SetLGWeights + SetLargestElementGroup + SetLargestMovedPoint + SetLargestMovedPointPerm + SetLatticeGeneratorsInUEA + SetLatticeSubgroups + SetLeadCoeffsIGS + SetLeftActingAlgebra + SetLeftActingDomain + SetLeftActingGroup + SetLeftActingRingOfIdeal + SetLeftDerivations + SetLength + SetLengthsTom + SetLessThanFunction + SetLessThanOrEqualFunction + SetLetterRepWordsLessFunc + SetLevelsOfGenerators + SetLeviMalcevDecomposition + SetLieAlgebraByDomain + SetLieCenter + SetLieCentralizerInParent + SetLieCentre + SetLieDerivedSeries + SetLieDerivedSubalgebra + SetLieFamily + SetLieLowerCentralSeries + SetLieNilRadical + SetLieNormalizerInParent + SetLieObject + SetLieSolvableRadical + SetLieUpperCentralSeries + SetLinearActionBasis + SetLinearCharacters + SetLinesOfStraightLineProgram + SetLongestWeylWordPerm + SetLowerCentralSeriesOfGroup + SetMagmaGeneratorsOfFamily + SetMappingGeneratorsImages + SetMappingOfWhichItIsAsGGMBI + SetMarksTom + SetMatTom + SetMatrixByBlockMatrix + SetMatrixDimension + SetMaximalAbelianQuotient + SetMaximalBlocksAttr + SetMaximalNormalSubgroups + SetMaximalSubgroupClassReps + SetMaximalSubgroups + SetMaximalSubgroupsLattice + SetMaximalSubgroupsTom + SetMinimalBlockDimension + SetMinimalGeneratingSet + SetMinimalNormalSubgroups + SetMinimalStabChain + SetMinimalSupergroupsLattice + SetMinimizedBombieriNorm + SetModuleOfExtension + SetModulusOfZmodnZObj + SetMoebiusTom + SetMolienSeriesInfo + SetMonoidOfRewritingSystem + SetMonomialComparisonFunction + SetMonomialExtrepComparisonFun + SetMovedPoints + SetMultipleAttributes + SetMultiplicationTable + SetMultiplicativeNeutralElement + SetMultiplicativeZero + SetName + SetNameIsomorphismClass + SetNamesLibTom + SetNamesOfFusionSources + SetNaturalCharacter + SetNaturalHomomorphismByNormalSubgroupNCInParent + SetNaturalHomomorphismsPool + SetNegativeRootVectors + SetNegativeRoots + SetNestingDepthA + SetNestingDepthM + SetNiceAlgebraMonomorphism + SetNiceBasis + SetNiceFreeLeftModule + SetNiceFreeLeftModuleInfo + SetNiceMonomorphism + SetNiceNormalFormByExtRepFunction + SetNiceObject + SetNilpotencyClassOfGroup + SetNilpotentClassTwoElement + SetNonLieNilpotentElement + SetNonNilpotentElement + SetNorm + SetNormalBase + SetNormalClosureInParent + SetNormalMaximalSubgroups + SetNormalSeriesByPcgs + SetNormalSubgroupClassesInfo + SetNormalSubgroups + SetNormalizerInGLnZ + SetNormalizerInGLnZBravaisGroup + SetNormalizerInHomePcgs + SetNormalizerInParent + SetNormalizersTom + SetNormedRowVector + SetNormedRowVectors + SetNormedVectors + SetNotifiedFusionsOfLibTom + SetNotifiedFusionsToLibTom + SetNrConjugacyClasses + SetNrInputsOfStraightLineProgram + SetNrMovedPoints + SetNrMovedPointsPerm + SetNrSubsTom + SetNrSyllables + SetNullAlgebra + SetNullspaceIntMat + SetNullspaceMat + SetNumberGeneratorsOfRws + SetNumberSyllables + SetNumeratorOfModuloPcgs + SetNumeratorOfRationalFunction + SetONanScottType + SetOccuringVariableIndices + SetOmegaAndLowerPCentralSeries + SetOmegaSeries + SetOne + SetOneAttr + SetOneImmutable + SetOneOfPcgs + SetOperatorOfExternalSet + SetOrbitGeneratorsOfGroup + SetOrbitLengths + SetOrbitLengthsDomain + SetOrbitStabilizingParentGroup + SetOrbits + SetOrbitsDomain + SetOrder + SetOrderingOfRewritingSystem + SetOrderingOnGenerators + SetOrderingsFamily + SetOrdersClassRepresentatives + SetOrdersTom + SetOrdinaryCharacterTable + SetOrthogonalSpaceInFullRowSpace + SetPCentralLieAlgebra + SetPCentralNormalSeriesByPcgsPGroup + SetPClassPGroup + SetPSLDegree + SetPSLUnderlyingField + SetPackageInfo + SetParent + SetParentAttr + SetParentPcgs + SetPartialClosureOfCongruence + SetPartialOrderOfHasseDiagram + SetPcGroupWithPcgs + SetPcSeries + SetPcgs + SetPcgsCentralSeries + SetPcgsChiefSeries + SetPcgsElementaryAbelianSeries + SetPcgsPCentralSeriesPGroup + SetPerfectIdentification + SetPerfectResiduum + SetPermutationTom + SetPositiveRootVectors + SetPositiveRoots + SetPositiveRootsAsWeights + SetPower + SetPowerANC + SetPowerNC + SetPowerS + SetPowerSubalgebraSeries + SetPreBasis + SetPreImagesRange + SetPreferredGenerators + SetPrefrattiniSubgroup + SetPresentation + SetPrimaryGeneratorWords + SetPrimeField + SetPrimePGroup + SetPrimePowerComponents + SetPrimitiveElement + SetPrimitiveIdentification + SetPrimitiveRoot + SetPrintFormattingStatus + SetProjectiveOrder + SetPseudoRandomSeed + SetPthPowerImages + SetQuasiDihedralGenerators + SetQuaternionGenerators + SetQuotientGroup + SetQuotientGroupHom + SetQuotientSemigroupCongruence + SetQuotientSemigroupHomomorphism + SetQuotientSemigroupPreimage + SetRClassOfHClass + SetRadicalGroup + SetRadicalOfAlgebra + SetRange + SetRankAction + SetRankMat + SetRankOfTransformation + SetRankPGroup + SetRat + SetRationalClasses + SetRationalFunctionsFamily + SetRationalizedMat + SetRealClasses + SetRecNames + SetRecursionTrapInterval + SetReducedConfluentRewritingSystem + SetReducedMultiplication + SetReesCongruenceOfSemigroupIdeal + SetReesZeroMatrixSemigroupElementIsZero + SetRefinedPcGroup + SetRegularActionHomomorphism + SetRelationsOfFpMonoid + SetRelationsOfFpSemigroup + SetRelativeOrder + SetRelativeOrderNC + SetRelativeOrders + SetRelatorsOfFpAlgebra + SetRelatorsOfFpGroup + SetRepresentative + SetRepresentativeSmallest + SetRepresentativesContainedRightCosets + SetRepresentativesMinimalBlocksAttr + SetRepresentativesPerfectSubgroups + SetRepresentativesSimpleSubgroups + SetRespectsAddition + SetRespectsAdditiveInverses + SetRespectsInverses + SetRespectsMultiplication + SetRespectsOne + SetRespectsScalarMultiplication + SetRespectsZero + SetRightActingAlgebra + SetRightActingDomain + SetRightActingGroup + SetRightActingRingOfIdeal + SetRightDerivations + SetRightTransversalInParent + SetRootOfDefiningPolynomial + SetRootSystem + SetRowIndexOfReesMatrixSemigroupElement + SetRowIndexOfReesZeroMatrixSemigroupElement + SetRowsOfReesMatrixSemigroup + SetRowsOfReesZeroMatrixSemigroup + SetRules + SetSLDegree + SetSLUnderlyingField + SetSandwichMatrixOfReesMatrixSemigroup + SetSandwichMatrixOfReesZeroMatrixSemigroup + SetSemiEchelonBasis + SetSemiEchelonMat + SetSemiEchelonMatTransformation + SetSemiSimpleType + SetSemidirectFactorsOfGroup + SetSemidirectProductInfo + SetSemigroupOfRewritingSystem + SetSiftFunction + SetSiftGroup + SetSignPerm + SetSimpleSystem + SetSimsNo + SetSize + SetSizesCentralizers + SetSizesConjugacyClasses + SetSmallGeneratingSet + SetSmallestGeneratorPerm + SetSmallestMovedPoint + SetSmallestMovedPointPerm + SetSocle + SetSocleComplement + SetSocleDimensions + SetSocleTypePrimitiveGroup + SetSortingPerm + SetSource + SetSparseCartanMatrix + SetSpecialPcgs + SetSplittingField + SetStabChainImmutable + SetStabChainMutable + SetStabChainOptions + SetStabilizerOfExternalSet + SetStandardGeneratorsInfo + SetStoredExcludedOrders + SetStoredGroebnerBasis + SetStraightLineProgElmType + SetStraightLineProgramsTom + SetString + SetStructureConstantsTable + SetStructureDescription + SetSubdirectProductInfo + SetSubfields + SetSubnormalSeriesInParent + SetSubsTom + SetSubspaces + SetSubspacesAll + SetSuccessors + SetSupersolvableResiduum + SetSurjectiveActionHomomorphismAttr + SetSylowSystem + SetSymmetricDegree + SetSymmetricParentGroup + SetTableOfMarks + SetTestMonomial + SetTestMonomialQuick + SetTestQuasiPrimitive + SetTestRelativelySM + SetTestSubnormallyMonomial + SetTietzeOrigin + SetTrace + SetTranformsOneIntoZero + SetTransformationRepresentation + SetTransformsAdditionIntoMultiplication + SetTransformsAdditiveInversesIntoInverses + SetTransformsInversesIntoAdditiveInverses + SetTransformsMultiplicationIntoAddition + SetTransformsZeroIntoOne + SetTransitiveIdentification + SetTransitivity + SetTransposedMat + SetTransposedMatAttr + SetTransposedMatImmutable + SetTransposedMatrixGroup + SetTransversal + SetTriangulizedNullspaceMat + SetTrivialCharacter + SetTrivialSubFLMLOR + SetTrivialSubadditiveMagmaWithZero + SetTrivialSubalgebra + SetTrivialSubgroup + SetTrivialSubmagmaWithOne + SetTrivialSubmodule + SetTrivialSubmonoid + SetTrivialSubnearAdditiveMagmaWithZero + SetTrivialSubspace + SetTwoClosure + SetTypeObj + SetTzOptions + SetTzRules + SetUnderlyingCharacterTable + SetUnderlyingCharacteristic + SetUnderlyingCollection + SetUnderlyingElementOfReesMatrixSemigroupElement + SetUnderlyingElementOfReesZeroMatrixSemigroupElement + SetUnderlyingExternalSet + SetUnderlyingFamily + SetUnderlyingField + SetUnderlyingGeneralMapping + SetUnderlyingGroup + SetUnderlyingLeftModule + SetUnderlyingLieAlgebra + SetUnderlyingMagma + SetUnderlyingRelation + SetUnderlyingSemigroupOfReesMatrixSemigroup + SetUnderlyingSemigroupOfReesZeroMatrixSemigroup + SetUnderlyingVectorSpace + SetUnits + SetUniversalEnvelopingAlgebra + SetUpperActingDomain + SetUpperCentralSeriesOfGroup + SetValueOption + SetValuesOfClassFunction + SetWeightOfGenerators + SetWeightsTom + SetWeylGroup + SetWreathProductInfo + SetX + SetXHelp + SetZClassRepsQClass + SetZero + SetZeroAttr + SetZeroCoefficient + SetZeroImmutable + SetZuppos + SetnpeGL + SetnpePSL + SetnpeSL + SetsOrbits + Setter + ShallowCopy + ShapeFrequencies + SharedObj + SharedType + ShiftedCoeffs + ShiftedPadicNumber + ShortLexOrdering + ShortLexOrderingNC + ShortestVectors + ShowArgument + ShowArguments + ShowDetails + ShowImpliedFilters + ShowMethods + ShowOtherMethods + ShowPackageVariables + ShrinkCoeffs + ShrinkRowVector + ShrinkableHashTable + ShrinkableSingleValuedHashTable + Sift + SiftAsWord + SiftForStrongGenerator + SiftFunction + SiftGroup + SiftOneLevel + SiftVector + SiftedPcElement + SiftedPermutation + SiftedVector + SiftedVectorForGaussianMatrixSpace + SiftedVectorForGaussianRowSpace + SiftedWord + Sigma + SignInt + SignPartition + SignPerm + SignPermGroup + SimpleLieAlgebra + SimpleLieAlgebraTypeH + SimpleLieAlgebraTypeK + SimpleLieAlgebraTypeS + SimpleLieAlgebraTypeW + SimpleSystem + SimplifiedFpGroup + SimplifyPresentation + SimsName + SimsNo + SimultaneousEigenvalues + SingleCollector + SingleCollectorByGenerators + SingleCollectorByRelators + SingleValuedHashTable + Size + SizeBlist + SizeConsiderFunction + SizeGL + SizeNumbersPerfectGroups + SizeOfChainOfGroup + SizeOfFieldOfDefinition + SizeOfGLdZmodmZ + SizePSL + SizePolynomialUnipotentClassGL + SizeSL + SizeScreen + SizeStabChain + SizeUpperBound + SizesCentralizers + SizesConjugacyClasses + SizesPerfectGroups + Sleep + SmallGeneratingSet + SmallGroup + SmallGroupsInformation + SmallSpaceCutoff + SmallerDegreePermutationRepresentation + SmallestGeneratorPerm + SmallestMovedPoint + SmallestMovedPointPerm + SmallestMovedPointPerms + SmallestPrimeDivisor + SmallestRootInt + SmithNormalFormIntegerMat + SmithNormalFormIntegerMatTransforms + SmithNormalFormSQ + Socle + SocleComplement + SocleDimensions + SocleTypePrimitiveGroup + SolutionIntMat + SolutionMat + SolutionMatDestructive + SolutionMatNoCo + SolutionNullspaceIntMat + SolutionSQ + SolvableNormalClosurePermGroup + SolvableQuotient + SomeVerbalSubgroups + Sort + SortParallel + SortRationalClasses + SortRelsSortedByStartGen + SortedCharacterTable + SortedCharacters + SortedList + SortedSparseActionHomomorphism + SortedSparseActionHomomorphismOp + SortedTom + Sortex + SortingPerm + Source + SourceElt + Sp + SpanOfMatrixGroup + SpanningTree + SparseActionHomomorphism + SparseActionHomomorphismOp + SparseCartanMatrix + SparseHashTable + SparseIntKey + SpecialLinearGroup + SpecialLinearGroupCons + SpecialOrthogonalGroup + SpecialOrthogonalGroupCons + SpecialPcgs + SpecialPcgsFactor + SpecialPcgsSubgroup + SpecialUnitaryGroup + SpecialUnitaryGroupCons + SpecializedExtRepPol + SpinInductionScheme + SpinorNorm + SplitCell + SplitCharacters + SplitExtension + SplitStep + SplitString + SplitStringInternal + SplitTwoSpace + SplitUpSublistsByFpFunc + SplitWordTail + SplittingField + Sqrt + SquareRoots + StabChain + StabChainBaseStrongGenerators + StabChainForcePoint + StabChainImmutable + StabChainMutable + StabChainOp + StabChainOptions + StabChainPermGroupToPermGroupGeneralMappingByImages + StabChainRandomPermGroup + StabChainStrong + StabChainSwap + Stabilizer + StabilizerByMatrixOperation + StabilizerFunc + StabilizerFuncOp + StabilizerOfBlockNC + StabilizerOfExternalSet + StabilizerOp + StabilizerPcgs + StandardAssociate + StandardClassMatrixColumn + StandardGeneratorsFunctions + StandardGeneratorsInfo + StandardGeneratorsOfFullHomModule + StandardGeneratorsOfFullMatrixModule + StandardGeneratorsOfGroup + StandardScalarProduct + StandardizeTable + StandardizeTableC + StarCyc + StateRandom + StatusRandom + StepModGauss + StopNumConsecSiftToOne + StopNumSift + StopSize + StoreAlgExtFam + StoreFactorsPol + StoreFusion + StoreInfoFreeMagma + StoredExcludedOrders + StoredGroebnerBasis + StraightLineProgElm + StraightLineProgElmType + StraightLineProgGens + StraightLineProgram + StraightLineProgramElmRankFilter + StraightLineProgramNC + StraightLineProgramsDefaultType + StraightLineProgramsFamily + StraightLineProgramsTom + StratMeetPartition + StreamsFamily + StretchImportantSLPElement + String + StringDate + StringFamily + StringFile + StringImType + StringOfResultOfLineOfStraightLineProgram + StringOfResultOfStraightLineProgram + StringOfUnivariateRationalPolynomialByCoefficients + StringPP + StringPrint + StringStreamInputTextFile + StringTime + StringToStraightLineProgram + StringUnivariateLaurent + StringView + StripBeginEnd + StripEscapeSequences + StrongGeneratorsStabChain + StrongGens + StronglyConnectedComponents + StructuralCopy + StructureConstantsPadicNumbers + StructureConstantsTable + StructureDescription + SuPeRfail + SubAlgebraModule + SubFLMLOR + SubFLMLORNC + SubFLMLORWithOne + SubFLMLORWithOneNC + SubGModLeadPos + SubSyllables + SubadditiveGroup + SubadditiveGroupNC + SubadditiveMagma + SubadditiveMagmaNC + SubadditiveMagmaWithInverses + SubadditiveMagmaWithInversesNC + SubadditiveMagmaWithZero + SubadditiveMagmaWithZeroNC + Subalgebra + SubalgebraNC + SubalgebraWithOne + SubalgebraWithOneNC + SubdirProdPcGroups + SubdirectDiagonalPerms + SubdirectProduct + SubdirectProductInfo + SubdirectProductOp + SubdirectProducts + Subfield + SubfieldNC + Subfields + SubgpConjSymmgp + Subgroup + SubgroupByPcgs + SubgroupByProperty + SubgroupGeneratorsCosetTable + SubgroupMethodByNiceMonomorphism + SubgroupMethodByNiceMonomorphismCollColl + SubgroupMethodByNiceMonomorphismCollElm + SubgroupMethodByNiceMonomorphismCollOther + SubgroupNC + SubgroupOfWholeGroupByCosetTable + SubgroupOfWholeGroupByQuotientSubgroup + SubgroupProperty + SubgroupShell + SubgroupsMethodByNiceMonomorphism + SubgroupsOrbitsAndNormalizers + SubgroupsSolvableGroup + Submagma + SubmagmaNC + SubmagmaWithInverses + SubmagmaWithInversesNC + SubmagmaWithOne + SubmagmaWithOneNC + Submodule + SubmoduleNC + Submonoid + SubmonoidNC + SubnearAdditiveGroup + SubnearAdditiveGroupNC + SubnearAdditiveMagma + SubnearAdditiveMagmaNC + SubnearAdditiveMagmaWithInverses + SubnearAdditiveMagmaWithInversesNC + SubnearAdditiveMagmaWithZero + SubnearAdditiveMagmaWithZeroNC + SubnormalSeries + SubnormalSeriesInParent + SubnormalSeriesOp + SuboLiBli + SuboSiBli + SuboTruePos + SuboUniteBlist + Suborbits + Subring + SubringNC + SubringWithOne + SubringWithOneNC + SubsTom + Subsemigroup + SubsemigroupNC + Subsemiring + SubsemiringNC + SubsemiringWithOne + SubsemiringWithOneAndZero + SubsemiringWithOneAndZeroNC + SubsemiringWithOneNC + SubsemiringWithZero + SubsemiringWithZeroNC + Subspace + SubspaceNC + SubspaceVectorSpaceGroup + Subspaces + SubspacesAll + SubspacesDim + SubstitutedWord + SubstitutionSublist + SubtractBlist + SubtractBlistOrbitStabChain + SubtractSet + Subtype + Subword + Successors + SuggestUpgrades + Sum + SumCoefPolynomial + SumCoefRatfun + SumCoeffLaurpol + SumCoeffUnivfunc + SumFactorizationFunctionPcgs + SumIntersectionMat + SumOfMBMAndMapping + SumOfMappingAndMBM + SumOfPcElement + SumOp + SumPcgs + SumRootsPol + SumRootsPolComp + SumX + SumXHelp + SummandMolienSeries + SupType + SupersolvableResiduum + SupersolvableResiduumDefault + SupportedCharacterTableInfo + SupportedLibraryTableComponents + SurjectiveActionHomomorphismAttr + SuzukiGroup + SuzukiGroupCons + SyllableRepAssocWord + SyllableWordObjByExtRep + SylowComplement + SylowComplementOp + SylowSubgroup + SylowSubgroupOp + SylowSubgroupPermGroup + SylowSystem + SymAdic + SymmetricClosureBinaryRelation + SymmetricDegree + SymmetricGroup + SymmetricGroupCons + SymmetricParentGroup + SymmetricParts + SymmetricPower + SymmetricPowerOfAlgebraModule + Symmetrisations + Symmetrizations + SymplecticComponents + SymplecticGroup + SymplecticGroupCons + SyzygyCriterion + Sz + TRANSGrp + TRANSProperties + TableAutomorphisms + TableHasIntKeyFun + TableOfMarks + TableOfMarksByLattice + TableOfMarksComponents + TableOfMarksCyclic + TableOfMarksDihedral + TableOfMarksFamily + TableOfMarksFrobenius + TableOfMarksFromLibrary + TailOfPcgsPermGroup + TailsInverses + Tau + TeX + TeXObj + TemporaryGlobalVarName + TensorProduct + TensorProductGModule + TensorProductOfAlgebraModules + TensorWreathProductOfMatrixGroup + Tensored + TestConsistencyMaps + TestHomogeneous + TestInducedFromNormalSubgroup + TestJacobi + TestMonomial + TestMonomialFromLattice + TestMonomialQuick + TestMonomialUseLattice + TestPackageAvailability + TestQuasiPrimitive + TestRelativelySM + TestRelativelySMFun + TestRow + TestSubnormallyMonomial + Tester + TextAttr + TextM + TietzeOrigin + TietzeWordAbstractWord + TmpDirectory + TmpName + ToBeDefinedObjFamily + ToBeDefinedObjType + ToggleEcho + TopExtensionsByAutomorphism + Trace + TraceDefinition + TraceImmediateMethods + TraceMat + TraceMethods + TraceModQF + TracePolynomial + TracedCosetFpGroup + TrailingEntriesLTM + TranformsOneIntoZero + TransArrange + TransCombinat + TransGrpLoad + TransStabCSPG + TransferDiagram + TransferPcgsInfo + TransferedExtensionPol + Transformation + TransformationData + TransformationFamily + TransformationNC + TransformationRelation + TransformationRepresentation + TransformationType + TransformingPermutationFamily + TransformingPermutations + TransformingPermutationsCharacterTables + TransformsAdditionIntoMultiplication + TransformsAdditiveInversesIntoInverses + TransformsInversesIntoAdditiveInverses + TransformsMultiplicationIntoAddition + TransformsZeroIntoOne + TransitiveClosureBinaryRelation + TransitiveGroup + TransitiveIdentification + Transitivity + TranslateString + TranslatorSubalgebra + TransposedMat + TransposedMatAttr + TransposedMatDestructive + TransposedMatImmutable + TransposedMatMutable + TransposedMatOp + TransposedMatrixGroup + TransvByDirProdFamily + TransvByHomomorphismFamily + TransvBySchreierTreeFamily + TransvBySiftFunctFamily + TransvByTrivSubgrpFamily + Transversal + TransversalBySiftFunction + TransversalByTrivial + TransversalElt + TransversalOfChainSubgroup + TreeEntry + TreeRepresentedWord + TrialQuotientRPF + TriangulizeIntegerMat + TriangulizeMat + TriangulizeMonomialElementList + TriangulizeWeightRepElementList + TriangulizedGeneratorsByMatrix + TriangulizedIntegerMat + TriangulizedIntegerMatTransform + TriangulizedIntegerMatTransforms + TriangulizedNullspaceMat + TriangulizedNullspaceMatDestructive + TriangulizedNullspaceMatNT + TrivialCharacter + TrivialGModule + TrivialGroup + TrivialGroupCons + TrivialIterator + TrivialModule + TrivialPartition + TrivialQuotientSubgroup + TrivialSubFLMLOR + TrivialSubadditiveMagmaWithZero + TrivialSubalgebra + TrivialSubgroup + TrivialSubmagmaWithOne + TrivialSubmodule + TrivialSubmonoid + TrivialSubnearAdditiveMagmaWithZero + TrivialSubspace + TryCombinations + TryConwayPolynomialForFrobeniusCharacterValue + TryCosetTableInWholeGroup + TryGcdCancelExtRepPolynomials + TryLayerSQ + TryModuleSQ + TryNextMethod + TryPcgsPermGroup + TrySecondaryImages + Tschirnhausen + Tuple + TupleNC + Tuples + TuplesFamily + TuplesK + TwoClosure + TwoClosurePermGroup + TwoCoboundaries + TwoCoboundariesSQ + TwoCocycles + TwoCocyclesSQ + TwoCohomology + TwoCohomologySQ + TwoSeqPol + TwoSidedIdeal + TwoSidedIdealByGenerators + TwoSidedIdealNC + TwoSquares + TypeObj + TypeOfDefaultGeneralMapping + TypeOfFamilies + TypeOfFamilyOfFamilies + TypeOfFamilyOfTypes + TypeOfTypes + TzCheckRecord + TzEliminate + TzEliminateFromTree + TzEliminateGen + TzEliminateGens + TzFindCyclicJoins + TzGeneratorExponents + TzGo + TzGoGo + TzImagesOldGens + TzInitGeneratorImages + TzMostFrequentPairs + TzNewGenerator + TzOccurrences + TzOccurrencesPairs + TzOptionNames + TzOptions + TzPreImagesNewGens + TzPrint + TzPrintGeneratorImages + TzPrintGenerators + TzPrintLengths + TzPrintOptions + TzPrintPairs + TzPrintPresentation + TzPrintRelators + TzPrintStatus + TzRelator + TzRemoveGenerators + TzRenumberGens + TzReplaceGens + TzRules + TzSearch + TzSearchC + TzSearchEqual + TzSort + TzSortC + TzSubstitute + TzSubstituteCyclicJoins + TzSubstituteGen + TzSubstituteWord + TzTestInitialSetup + TzUpdateGeneratorImages + TzWordAbstractWord + UNIXSelect + UglyVector + UnInstallCharReadHookFunc + UnSetImage + Unbind + UnbindElmWPObj + UnbindGlobal + UnderlyingCharacterTable + UnderlyingCharacteristic + UnderlyingCollection + UnderlyingDomainOfBinaryRelation + UnderlyingElement + UnderlyingElementOfReesMatrixSemigroupElement + UnderlyingElementOfReesZeroMatrixSemigroupElement + UnderlyingExternalSet + UnderlyingFamily + UnderlyingField + UnderlyingGeneralMapping + UnderlyingGroup + UnderlyingLeftModule + UnderlyingLieAlgebra + UnderlyingMagma + UnderlyingRelation + UnderlyingSemigroupOfReesMatrixSemigroup + UnderlyingSemigroupOfReesZeroMatrixSemigroup + UnderlyingVectorSpace + UndoRefinement + UnhideGlobalVariables + Union + UnionBlist + UnionSet + UnipotentSubgroup + Unique + UniteBlist + UniteBlistList + UniteSet + Units + UnivariateLaurentPolynomialByCoefficients + UnivariatePolynomial + UnivariatePolynomialByCoefficients + UnivariatePolynomialRing + UnivariateRationalFunctionByCoefficients + UnivariateRationalFunctionByExtRep + UnivariatenessTestRationalFunction + UniversalEnvelopingAlgebra + Unknown + UnknownsType + UnloadSmallGroupsData + UnlockNaturalHomomorphismsPool + UnmarkTree + UnorderedTuples + UnorderedTuplesK + UnprofileFunctions + UnprofileMethods + UntraceMethods + UpEnv + UpdateMap + UpdatePolycyclicCollector + UpdateWeightInfo + UpperActingDomain + UpperCentralSeries + UpperCentralSeriesOfGroup + UpperSubdiagonal + UseBasis + UseFactorRelation + UseIsomorphismRelation + UseMatrixChainSubgroups + UsePermChainSubgroups + UseStabChainViaChainSubgroup + UseSubsetRelation + UseSubsetRelationNC + VPActionHom + VSTInsertToLeft + VSTNode + ValidatePackageInfo + Valuation + Value + ValueCochain + ValueGlobal + ValueMolienSeries + ValueOption + ValuePol + ValuesOfClassFunction + VectorOfRelator + VectorSearchTable + VectorSpace + VectorSpaceByPcgsOfElementaryAbelianGroup + VerifySGS + VerifyStabilizer + View + ViewFullHomModule + ViewLength + ViewMolienSeries + ViewObj + VirtualCharacter + WallForm + WeakPointerObj + WedgeGModule + WeekDay + WeightLexOrdering + WeightLexOrderingNC + WeightOfGenerators + WeightVecFFE + WeightsTom + WeylGroup + WeylOrbitIterator + Where + WindowCmd + Word + WordAlp + WordsString + WreathElm + WreathProduct + WreathProductImprimitiveAction + WreathProductInfo + WreathProductOfMatrixGroup + WreathProductOrdering + WreathProductProductAction + WriteAll + WriteBibFile + WriteByte + WriteLine + ZClassRepsQClass + ZOp + ZassenhausIntersection + Zero + ZeroAttr + ZeroCoefficient + ZeroCoefficientRatFun + ZeroImmutable + ZeroMapping + ZeroMutable + ZeroOp + ZeroSM + ZeroSameMutability + ZevData + ZevDataValue + ZippedListQuotient + ZippedProduct + ZippedSum + ZmodnZ + ZmodnZObj + ZmodpZ + ZmodpZNC + ZumbroichBase + Zuppos + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/gcc.xml b/src/data/extra/syntax-highlighting/syntax/gcc.xml new file mode 100644 index 00000000..258686dd --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/gcc.xml @@ -0,0 +1,610 @@ + + + + + +]> + + + diff --git a/src/data/extra/syntax-highlighting/syntax/gcode.xml b/src/data/extra/syntax-highlighting/syntax/gcode.xml new file mode 100644 index 00000000..23b6318c --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/gcode.xml @@ -0,0 +1,202 @@ + + + + + + + + and + or + xor + eq + ne + gt + ge + lt + le + mod + + + + atan + abs + acos + asin + cos + exp + exists + fix + fup + ln + round + sin + sqrt + tan + + + + sub + endsub + call + return + + + + do + while + endwhile + repeat + endrepeat + break + continue + if + elseif + else + endif + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/gdb-bt.xml b/src/data/extra/syntax-highlighting/syntax/gdb-bt.xml new file mode 100644 index 00000000..2ebe7e1b --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/gdb-bt.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/gdb.xml b/src/data/extra/syntax-highlighting/syntax/gdb.xml new file mode 100644 index 00000000..91678e07 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/gdb.xml @@ -0,0 +1,88 @@ + + + + + + + + break + run + continue + backtrace + detach + quit + up + down + frame + where + info + ptype + print + call + catch + condition + command + set + awatch + thread + list + dprintf + target + end + source + next + nexti + step + stepi + finish + start + reverse-continue + reverse-next + reverse-step + reverse-nexti + reverse-stepi + reverse-finish + checkpoint + restart + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/gdbinit.xml b/src/data/extra/syntax-highlighting/syntax/gdbinit.xml new file mode 100644 index 00000000..7999bf55 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/gdbinit.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/gdl.xml b/src/data/extra/syntax-highlighting/syntax/gdl.xml new file mode 100644 index 00000000..8966f5ba --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/gdl.xml @@ -0,0 +1,313 @@ + + + + + + white + blue + red + green + yellow + magenta + cyan + darkgrey + darkgray + darkblue + darkred + darkgreen + darkyellow + darkmagenta + darkcyan + gold + lightgrey + lightgray + lightblue + lightred + lightgreen + lightyellow + lightmagenta + lightcyan + lilac + turquoise + aquamarine + khaki + purple + yellowgreen + pink + orange + orchid + black + + + box + triangle + circle + ellipse + hexagon + rhomb + rhomboid + trapeze + uptrapeze + trapezoid + uptrapezoid + lparallelogram + rparallelogram + + + unfolded + folded + boxed + clustered + wrapped + exclusive + white + + + normal + tree + forcedir + dfs + minbackward + maxdepth + maxdepthslow + mindepth + mindepthslow + minindegree + minoutdegree + maxindegree + maxoutdegree + maxdegree + mindegree + + + attraction + repulsion + randomfactor + randomimpulse + randomrounds + tempscheme + temptreshold + tempmin + tempmax + + + no + polar + circular + polcircular + orthogonal + + + toptobottom + bottomtotop + lefttoright + righttoleft + top_to_bottom + bottom_to_top + left_to_right + right_to_left + + + solid + continuous + dashed + dotted + double + triple + invisible + + + pfish + cfish + fpfish + fcfish + dpfish + dcfish + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/gettext.xml b/src/data/extra/syntax-highlighting/syntax/gettext.xml new file mode 100644 index 00000000..7b459947 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/gettext.xml @@ -0,0 +1,222 @@ + + + + +]> + + + + msgid + msgid_plural + msgctxt + + + + msgstr + + + + fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/git-ignore.xml b/src/data/extra/syntax-highlighting/syntax/git-ignore.xml new file mode 100644 index 00000000..ceb25e46 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/git-ignore.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/git-rebase.xml b/src/data/extra/syntax-highlighting/syntax/git-rebase.xml new file mode 100644 index 00000000..49c2dae7 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/git-rebase.xml @@ -0,0 +1,65 @@ + + + + + + p + pick + + + r + reword + + + e + edit + + + s + squash + + + f + fixup + + + x + exec + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/gitolite.xml b/src/data/extra/syntax-highlighting/syntax/gitolite.xml new file mode 100644 index 00000000..d82838eb --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/gitolite.xml @@ -0,0 +1,44 @@ + + + + + + repo + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/glosstex.xml b/src/data/extra/syntax-highlighting/syntax/glosstex.xml new file mode 100644 index 00000000..751cce46 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/glosstex.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/glsl.xml b/src/data/extra/syntax-highlighting/syntax/glsl.xml new file mode 100644 index 00000000..4550273b --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/glsl.xml @@ -0,0 +1,1217 @@ + + + + + + break + continue + do + for + while + + if + else + + true + false + + discard + return + + struct + subroutine + layout + uniform + buffer + invariant + + + float + int + void + bool + + mat2 + mat3 + mat4 + + vec2 + vec3 + vec4 + ivec2 + ivec3 + ivec4 + bvec2 + bvec3 + bvec4 + + sampler1D + sampler2D + sampler3D + samplerCube + sampler2DRect + sampler1DArray + sampler2DArray + samplerCubeArray + samplerBuffer + sampler2DMS + sampler2DMSArray + + sampler1DShadow + sampler2DShadow + samplerCubeShadow + sampler2DRectShadow + sampler1DArrayShadow + sampler2DArrayShadow + samplerCubeArrayShadow + + isampler1D + isampler2D + isampler3D + isamplerCube + isampler2DRect + isampler1DArray + isampler2DArray + isamplerCubeArray + isamplerBuffer + isampler2DMS + isampler2DMSArray + + isampler1DShadow + isampler2DShadow + isamplerCubeShadow + isampler2DRectShadow + isampler1DArrayShadow + isampler2DArrayShadow + isamplerCubeArrayShadow + + usampler1D + usampler2D + usampler3D + usamplerCube + usampler2DRect + usampler1DArray + usampler2DArray + usamplerCubeArray + usamplerBuffer + usampler2DMS + usampler2DMSArray + + usampler1DShadow + usampler2DShadow + usamplerCubeShadow + usampler2DRectShadow + usampler1DArrayShadow + usampler2DArrayShadow + usamplerCubeArrayShadow + + atomic_uint + + + attribute + const + varying + + in + out + inout + + + flat + noperspective + smooth + + + location + component + binding + index + offset + + + row_major + packed + shared + std140 + std430 + + + xfb_buffer + xfb_offset + xfb_stride + + + origin_upper_left + pixel_center_integer + early_fragment_tests + + + points + lines + lines_adjacency + triangles + triangles_adjacency + line_strip + triangle_strip + max_vertices + invocations + stream + + + isolines + triangles + quads + point_mode + equal_spacing + fractional_even_spacing + fractional_odd_spacing + cw + ccw + vertices + + + coherent + volatile + restrict + readonly + writeonly + + + FIXME + TODO + BUG + + + + abs + acos + acosh + glActiveShaderProgram + glActiveTexture + all + any + asin + asinh + atan + atanh + atomicAdd + atomicAnd + atomicCompSwap + atomicCounter + atomicCounterDecrement + atomicCounterIncrement + atomicExchange + atomicMax + atomicMin + atomicOr + atomicXor + glAttachShader + barrier + glBeginConditionalRender + glBeginQuery + glBeginQueryIndexed + glBeginTransformFeedback + glBindAttribLocation + glBindBuffer + glBindBufferBase + glBindBufferRange + glBindBuffersBase + glBindBuffersRange + glBindFragDataLocation + glBindFragDataLocationIndexed + glBindFramebuffer + glBindImageTexture + glBindImageTextures + glBindProgramPipeline + glBindRenderbuffer + glBindSampler + glBindSamplers + glBindTexture + glBindTextures + glBindTextureUnit + glBindTransformFeedback + glBindVertexArray + glBindVertexBuffer + glBindVertexBuffers + bitCount + bitfieldExtract + bitfieldInsert + bitfieldReverse + glBlendColor + glBlendEquation + glBlendEquationi + glBlendEquationSeparate + glBlendEquationSeparatei + glBlendFunc + glBlendFunci + glBlendFuncSeparate + glBlendFuncSeparatei + glBlitFramebuffer + glBlitNamedFramebuffer + glBufferData + glBufferStorage + glBufferSubData + ceil + glCheckFramebufferStatus + glCheckNamedFramebufferStatus + clamp + glClampColor + glClear + glClearBuffer + glClearBufferData + glClearBufferfi + glClearBufferfv + glClearBufferiv + glClearBufferSubData + glClearBufferuiv + glClearColor + glClearDepth + glClearDepthf + glClearNamedBufferData + glClearNamedBufferSubData + glClearNamedFramebufferfi + glClearNamedFramebufferfv + glClearNamedFramebufferiv + glClearNamedFramebufferuiv + glClearStencil + glClearTexImage + glClearTexSubImage + glClientWaitSync + glClipControl + glColorMask + glColorMaski + glCompileShader + glCompressedTexImage1D + glCompressedTexImage2D + glCompressedTexImage3D + glCompressedTexSubImage1D + glCompressedTexSubImage2D + glCompressedTexSubImage3D + glCompressedTextureSubImage1D + glCompressedTextureSubImage2D + glCompressedTextureSubImage3D + glCopyBufferSubData + glCopyImageSubData + glCopyNamedBufferSubData + glCopyTexImage1D + glCopyTexImage2D + glCopyTexSubImage1D + glCopyTexSubImage2D + glCopyTexSubImage3D + glCopyTextureSubImage1D + glCopyTextureSubImage2D + glCopyTextureSubImage3D + cos + cosh + glCreateBuffers + glCreateFramebuffers + glCreateProgram + glCreateProgramPipelines + glCreateQueries + glCreateRenderbuffers + glCreateSamplers + glCreateShader + glCreateShaderProgram + glCreateShaderProgramv + glCreateTextures + glCreateTransformFeedbacks + glCreateVertexArrays + cross + glCullFace + glDebugMessageCallback + glDebugMessageControl + glDebugMessageInsert + degrees + glDeleteBuffers + glDeleteFramebuffers + glDeleteProgram + glDeleteProgramPipelines + glDeleteQueries + glDeleteRenderbuffers + glDeleteSamplers + glDeleteShader + glDeleteSync + glDeleteTextures + glDeleteTransformFeedbacks + glDeleteVertexArrays + glDepthFunc + glDepthMask + glDepthRange + glDepthRangeArray + glDepthRangeArrayv + glDepthRangef + glDepthRangeIndexed + glDetachShader + determinant + dFdx + dFdxCoarse + dFdxFine + dFdy + dFdyCoarse + dFdyFine + glDisable + glDisablei + glDisableVertexArrayAttrib + glDisableVertexAttribArray + glDispatchCompute + glDispatchComputeIndirect + distance + dot + glDrawArrays + glDrawArraysIndirect + glDrawArraysInstanced + glDrawArraysInstancedBaseInstance + glDrawBuffer + glDrawBuffers + glDrawElements + glDrawElementsBaseVertex + glDrawElementsIndirect + glDrawElementsInstanced + glDrawElementsInstancedBaseInstance + glDrawElementsInstancedBaseVertex + glDrawElementsInstancedBaseVertexBaseInstance + glDrawRangeElements + glDrawRangeElementsBaseVertex + glDrawTransformFeedback + glDrawTransformFeedbackInstanced + glDrawTransformFeedbackStream + glDrawTransformFeedbackStreamInstanced + EmitStreamVertex + EmitVertex + glEnable + glEnablei + glEnableVertexArrayAttrib + glEnableVertexAttribArray + glEndConditionalRender + EndPrimitive + glEndQuery + glEndQueryIndexed + EndStreamPrimitive + glEndTransformFeedback + equal + exp + exp2 + faceforward + glFenceSync + findLSB + findMSB + glFinish + floatBitsToInt + floatBitsToUint + floor + glFlush + glFlushMappedBufferRange + glFlushMappedNamedBufferRange + fma + fract + glFramebufferParameteri + glFramebufferRenderbuffer + glFramebufferTexture + glFramebufferTexture1D + glFramebufferTexture2D + glFramebufferTexture3D + glFramebufferTextureLayer + frexp + glFrontFace + fwidth + fwidthCoarse + fwidthFine + glGenBuffers + glGenerateMipmap + glGenerateTextureMipmap + glGenFramebuffers + glGenProgramPipelines + glGenQueries + glGenRenderbuffers + glGenSamplers + glGenTextures + glGenTransformFeedbacks + glGenVertexArrays + glGet + glGetActiveAtomicCounterBufferiv + glGetActiveAttrib + glGetActiveSubroutineName + glGetActiveSubroutineUniform + glGetActiveSubroutineUniformiv + glGetActiveSubroutineUniformName + glGetActiveUniform + glGetActiveUniformBlock + glGetActiveUniformBlockiv + glGetActiveUniformBlockName + glGetActiveUniformName + glGetActiveUniformsiv + glGetAttachedShaders + glGetAttribLocation + glGetBooleani_v + glGetBooleanv + glGetBufferParameter + glGetBufferParameteri64v + glGetBufferParameteriv + glGetBufferPointerv + glGetBufferSubData + glGetCompressedTexImage + glGetCompressedTextureImage + glGetCompressedTextureSubImage + glGetDebugMessageLog + glGetDoublei_v + glGetDoublev + glGetError + glGetFloati_v + glGetFloatv + glGetFragDataIndex + glGetFragDataLocation + glGetFramebufferAttachmentParameter + glGetFramebufferAttachmentParameteriv + glGetFramebufferParameter + glGetFramebufferParameteriv + glGetGraphicsResetStatus + glGetInteger64i_v + glGetInteger64v + glGetIntegeri_v + glGetIntegerv + glGetInternalformat + glGetInternalformati64v + glGetInternalformativ + glGetMultisample + glGetMultisamplefv + glGetNamedBufferParameteri64v + glGetNamedBufferParameteriv + glGetNamedBufferPointerv + glGetNamedBufferSubData + glGetNamedFramebufferAttachmentParameteriv + glGetNamedFramebufferParameteriv + glGetNamedRenderbufferParameteriv + glGetnCompressedTexImage + glGetnTexImage + glGetnUniformdv + glGetnUniformfv + glGetnUniformiv + glGetnUniformuiv + glGetObjectLabel + glGetObjectPtrLabel + glGetPointerv + glGetProgram + glGetProgramBinary + glGetProgramInfoLog + glGetProgramInterface + glGetProgramInterfaceiv + glGetProgramiv + glGetProgramPipeline + glGetProgramPipelineInfoLog + glGetProgramPipelineiv + glGetProgramResource + glGetProgramResourceIndex + glGetProgramResourceiv + glGetProgramResourceLocation + glGetProgramResourceLocationIndex + glGetProgramResourceName + glGetProgramStage + glGetProgramStageiv + glGetQueryIndexed + glGetQueryIndexediv + glGetQueryiv + glGetQueryObject + glGetQueryObjecti64v + glGetQueryObjectiv + glGetQueryObjectui64v + glGetQueryObjectuiv + glGetRenderbufferParameter + glGetRenderbufferParameteriv + glGetSamplerParameter + glGetSamplerParameterfv + glGetSamplerParameterIiv + glGetSamplerParameterIuiv + glGetSamplerParameteriv + glGetShader + glGetShaderInfoLog + glGetShaderiv + glGetShaderPrecisionFormat + glGetShaderSource + glGetString + glGetStringi + glGetSubroutineIndex + glGetSubroutineUniformLocation + glGetSync + glGetSynciv + glGetTexImage + glGetTexLevelParameter + glGetTexLevelParameterfv + glGetTexLevelParameteriv + glGetTexParameter + glGetTexParameterfv + glGetTexParameterIiv + glGetTexParameterIuiv + glGetTexParameteriv + glGetTextureImage + glGetTextureLevelParameterfv + glGetTextureLevelParameteriv + glGetTextureParameterfv + glGetTextureParameterIiv + glGetTextureParameterIuiv + glGetTextureParameteriv + glGetTextureSubImage + glGetTransformFeedback + glGetTransformFeedbacki64_v + glGetTransformFeedbacki_v + glGetTransformFeedbackiv + glGetTransformFeedbackVarying + glGetUniform + glGetUniformBlockIndex + glGetUniformdv + glGetUniformfv + glGetUniformIndices + glGetUniformiv + glGetUniformLocation + glGetUniformSubroutine + glGetUniformSubroutineuiv + glGetUniformuiv + glGetVertexArrayIndexed + glGetVertexArrayIndexed64iv + glGetVertexArrayIndexediv + glGetVertexArrayiv + glGetVertexAttrib + glGetVertexAttribdv + glGetVertexAttribfv + glGetVertexAttribIiv + glGetVertexAttribIuiv + glGetVertexAttribiv + glGetVertexAttribLdv + glGetVertexAttribPointerv + gl_ClipDistance + gl_CullDistance + gl_FragCoord + gl_FragDepth + gl_FrontFacing + gl_GlobalInvocationID + gl_HelperInvocation + gl_InstanceID + gl_InvocationID + gl_Layer + gl_LocalInvocationID + gl_LocalInvocationIndex + gl_NumSamples + gl_NumWorkGroups + gl_PatchVerticesIn + gl_PointCoord + gl_PointSize + gl_Position + gl_PrimitiveID + gl_PrimitiveIDIn + gl_SampleID + gl_SampleMask + gl_SampleMaskIn + gl_SamplePosition + gl_TessCoord + gl_TessLevelInner + gl_TessLevelOuter + gl_VertexID + gl_ViewportIndex + gl_WorkGroupID + gl_WorkGroupSize + greaterThan + greaterThanEqual + groupMemoryBarrier + glHint + imageAtomicAdd + imageAtomicAnd + imageAtomicCompSwap + imageAtomicExchange + imageAtomicMax + imageAtomicMin + imageAtomicOr + imageAtomicXor + imageLoad + imageSamples + imageSize + imageStore + imulExtended + intBitsToFloat + interpolateAtCentroid + interpolateAtOffset + interpolateAtSample + glInvalidateBufferData + glInvalidateBufferSubData + glInvalidateFramebuffer + glInvalidateNamedFramebufferData + glInvalidateNamedFramebufferSubData + glInvalidateSubFramebuffer + glInvalidateTexImage + glInvalidateTexSubImage + inverse + inversesqrt + glIsBuffer + glIsEnabled + glIsEnabledi + glIsFramebuffer + isinf + isnan + glIsProgram + glIsProgramPipeline + glIsQuery + glIsRenderbuffer + glIsSampler + glIsShader + glIsSync + glIsTexture + glIsTransformFeedback + glIsVertexArray + ldexp + length + lessThan + lessThanEqual + glLineWidth + glLinkProgram + log + log2 + glLogicOp + glMapBuffer + glMapBufferRange + glMapNamedBuffer + glMapNamedBufferRange + matrixCompMult + max + memoryBarrier + glMemoryBarrier + memoryBarrierAtomicCounter + memoryBarrierBuffer + glMemoryBarrierByRegion + memoryBarrierImage + memoryBarrierShared + min + glMinSampleShading + mix + mod + modf + glMultiDrawArrays + glMultiDrawArraysIndirect + glMultiDrawElements + glMultiDrawElementsBaseVertex + glMultiDrawElementsIndirect + glNamedBufferData + glNamedBufferStorage + glNamedBufferSubData + glNamedFramebufferDrawBuffer + glNamedFramebufferDrawBuffers + glNamedFramebufferParameteri + glNamedFramebufferReadBuffer + glNamedFramebufferRenderbuffer + glNamedFramebufferTexture + glNamedFramebufferTextureLayer + glNamedRenderbufferStorage + glNamedRenderbufferStorageMultisample + noise + noise1 + noise2 + noise3 + noise4 + normalize + not + notEqual + glObjectLabel + glObjectPtrLabel + outerProduct + packDouble2x32 + packHalf2x16 + packSnorm2x16 + packSnorm4x8 + packUnorm + packUnorm2x16 + packUnorm4x8 + glPatchParameter + glPatchParameterfv + glPatchParameteri + glPauseTransformFeedback + glPixelStore + glPixelStoref + glPixelStorei + glPointParameter + glPointParameterf + glPointParameterfv + glPointParameteri + glPointParameteriv + glPointSize + glPolygonMode + glPolygonOffset + glPopDebugGroup + pow + glPrimitiveRestartIndex + glProgramBinary + glProgramParameter + glProgramParameteri + glProgramUniform + glProgramUniform1f + glProgramUniform1fv + glProgramUniform1i + glProgramUniform1iv + glProgramUniform1ui + glProgramUniform1uiv + glProgramUniform2f + glProgramUniform2fv + glProgramUniform2i + glProgramUniform2iv + glProgramUniform2ui + glProgramUniform2uiv + glProgramUniform3f + glProgramUniform3fv + glProgramUniform3i + glProgramUniform3iv + glProgramUniform3ui + glProgramUniform3uiv + glProgramUniform4f + glProgramUniform4fv + glProgramUniform4i + glProgramUniform4iv + glProgramUniform4ui + glProgramUniform4uiv + glProgramUniformMatrix2fv + glProgramUniformMatrix2x3fv + glProgramUniformMatrix2x4fv + glProgramUniformMatrix3fv + glProgramUniformMatrix3x2fv + glProgramUniformMatrix3x4fv + glProgramUniformMatrix4fv + glProgramUniformMatrix4x2fv + glProgramUniformMatrix4x3fv + glProvokingVertex + glPushDebugGroup + glQueryCounter + radians + glReadBuffer + glReadnPixels + glReadPixels + reflect + refract + glReleaseShaderCompiler + removedTypes + glRenderbufferStorage + glRenderbufferStorageMultisample + glResumeTransformFeedback + round + roundEven + glSampleCoverage + glSampleMaski + glSamplerParameter + glSamplerParameterf + glSamplerParameterfv + glSamplerParameteri + glSamplerParameterIiv + glSamplerParameterIuiv + glSamplerParameteriv + glScissor + glScissorArray + glScissorArrayv + glScissorIndexed + glScissorIndexedv + glShaderBinary + glShaderSource + glShaderStorageBlockBinding + sign + sin + sinh + smoothstep + sqrt + glStencilFunc + glStencilFuncSeparate + glStencilMask + glStencilMaskSeparate + glStencilOp + glStencilOpSeparate + step + tan + tanh + glTexBuffer + glTexBufferRange + texelFetch + texelFetchOffset + glTexImage1D + glTexImage2D + glTexImage2DMultisample + glTexImage3D + glTexImage3DMultisample + glTexParameter + glTexParameterf + glTexParameterfv + glTexParameteri + glTexParameterIiv + glTexParameterIuiv + glTexParameteriv + glTexStorage1D + glTexStorage2D + glTexStorage2DMultisample + glTexStorage3D + glTexStorage3DMultisample + glTexSubImage1D + glTexSubImage2D + glTexSubImage3D + texture + glTextureBarrier + glTextureBuffer + glTextureBufferRange + textureGather + textureGatherOffset + textureGatherOffsets + textureGrad + textureGradOffset + textureLod + textureLodOffset + textureOffset + glTextureParameterf + glTextureParameterfv + glTextureParameteri + glTextureParameterIiv + glTextureParameterIuiv + glTextureParameteriv + textureProj + textureProjGrad + textureProjGradOffset + textureProjLod + textureProjLodOffset + textureProjOffset + textureQueryLevels + textureQueryLod + textureSamples + textureSize + glTextureStorage1D + glTextureStorage2D + glTextureStorage2DMultisample + glTextureStorage3D + glTextureStorage3DMultisample + glTextureSubImage1D + glTextureSubImage2D + glTextureSubImage3D + glTextureView + glTransformFeedbackBufferBase + glTransformFeedbackBufferRange + glTransformFeedbackVaryings + transpose + trunc + uaddCarry + uintBitsToFloat + umulExtended + glUniform + glUniform1f + glUniform1fv + glUniform1i + glUniform1iv + glUniform1ui + glUniform1uiv + glUniform2f + glUniform2fv + glUniform2i + glUniform2iv + glUniform2ui + glUniform2uiv + glUniform3f + glUniform3fv + glUniform3i + glUniform3iv + glUniform3ui + glUniform3uiv + glUniform4f + glUniform4fv + glUniform4i + glUniform4iv + glUniform4ui + glUniform4uiv + glUniformBlockBinding + glUniformMatrix2fv + glUniformMatrix2x3fv + glUniformMatrix2x4fv + glUniformMatrix3fv + glUniformMatrix3x2fv + glUniformMatrix3x4fv + glUniformMatrix4fv + glUniformMatrix4x2fv + glUniformMatrix4x3fv + glUniformSubroutines + glUniformSubroutinesuiv + glUnmapBuffer + glUnmapNamedBuffer + unpackDouble2x32 + unpackHalf2x16 + unpackSnorm2x16 + unpackSnorm4x8 + unpackUnorm + unpackUnorm2x16 + unpackUnorm4x8 + glUseProgram + glUseProgramStages + usubBorrow + glValidateProgram + glValidateProgramPipeline + glVertexArrayAttribBinding + glVertexArrayAttribFormat + glVertexArrayAttribIFormat + glVertexArrayAttribLFormat + glVertexArrayBindingDivisor + glVertexArrayElementBuffer + glVertexArrayVertexBuffer + glVertexArrayVertexBuffers + glVertexAttrib + glVertexAttrib1d + glVertexAttrib1dv + glVertexAttrib1f + glVertexAttrib1fv + glVertexAttrib1s + glVertexAttrib1sv + glVertexAttrib2d + glVertexAttrib2dv + glVertexAttrib2f + glVertexAttrib2fv + glVertexAttrib2s + glVertexAttrib2sv + glVertexAttrib3d + glVertexAttrib3dv + glVertexAttrib3f + glVertexAttrib3fv + glVertexAttrib3s + glVertexAttrib3sv + glVertexAttrib4bv + glVertexAttrib4d + glVertexAttrib4dv + glVertexAttrib4f + glVertexAttrib4fv + glVertexAttrib4iv + glVertexAttrib4Nbv + glVertexAttrib4Niv + glVertexAttrib4Nsv + glVertexAttrib4Nub + glVertexAttrib4Nubv + glVertexAttrib4Nuiv + glVertexAttrib4Nusv + glVertexAttrib4s + glVertexAttrib4sv + glVertexAttrib4ubv + glVertexAttrib4uiv + glVertexAttrib4usv + glVertexAttribBinding + glVertexAttribDivisor + glVertexAttribFormat + glVertexAttribI1i + glVertexAttribI1iv + glVertexAttribI1ui + glVertexAttribI1uiv + glVertexAttribI2i + glVertexAttribI2iv + glVertexAttribI2ui + glVertexAttribI2uiv + glVertexAttribI3i + glVertexAttribI3iv + glVertexAttribI3ui + glVertexAttribI3uiv + glVertexAttribI4bv + glVertexAttribI4i + glVertexAttribI4iv + glVertexAttribI4sv + glVertexAttribI4ubv + glVertexAttribI4ui + glVertexAttribI4uiv + glVertexAttribI4usv + glVertexAttribIFormat + glVertexAttribIPointer + glVertexAttribL1d + glVertexAttribL1dv + glVertexAttribL2d + glVertexAttribL2dv + glVertexAttribL3d + glVertexAttribL3dv + glVertexAttribL4d + glVertexAttribL4dv + glVertexAttribLFormat + glVertexAttribLPointer + glVertexAttribP1ui + glVertexAttribP2ui + glVertexAttribP3ui + glVertexAttribP4ui + glVertexAttribPointer + glVertexBindingDivisor + glViewport + glViewportArray + glViewportArrayv + glViewportIndexed + glViewportIndexedf + glViewportIndexedfv + glWaitSync + + + + gl_Position + gl_PointSize + gl_ClipVertex + + + gl_FragCoord + gl_FragFacing + gl_FragColor + gl_FragData + gl_FragDepth + + + gl_Color + gl_SecondaryColor + gl_Normal + gl_Vertex + gl_MultiTexCoord0 + gl_MultiTexCoord1 + gl_MultiTexCoord2 + gl_MultiTexCoord2 + gl_MultiTexCoord3 + gl_MultiTexCoord4 + gl_MultiTexCoord5 + gl_MultiTexCoord6 + gl_MultiTexCoord7 + gl_FogColor + + + gl_ClipDistance + gl_PrimitiveIDIn + gl_InvocationID + gl_PrimitiveID + gl_Layer + gl_ViewportIndex + + + gl_TessCoord + gl_PatchVerticesIn + gl_TessLevelOuter + gl_TessLevelInner + gl_MaxPatchVertices + gl_in + gl_out + + + gl_MaxLights + gl_MaxClipPlanes + gl_MaxTextureUnits + gl_MaxTextureCoords + gl_MaxVertexAttributes + gl_MaxVertexUniformComponents + gl_MaxVaryingFloats + gl_MaxVertexTextureImageUnits + gl_MaxCombinedTextureImageUnits + gl_MaxTextureImageUnits + gl_MaxFragmentUniformComponents + gl_MaxDrawBuffers + + + gl_ModelViewMatrix + gl_ProjectionMatrix + gl_ModelViewProjectionMatrix + gl_TextureMatrix + gl_NormalMatrix + gl_ModelViewMatrixInverse + gl_ProjectionMatrixInverse + gl_ModelViewProjectionMatrixInverse + gl_TextureMatrixInverse + gl_ModelViewMatrixTranspose + gl_ProjectionMatrixTranspose + gl_ModelViewProjectionMatrixTranspose + gl_TextureMatrixTranspose + gl_ModelViewMatrixInverseTranspose + gl_ProjectionMatrixInverseTranspose + gl_ModelViewProjectionMatrixInverseTranspose + gl_TextureMatrixInverseTranspose + gl_NormScale + gl_DepthRangeParameters + gl_DepthRange + gl_ClipPlane + gl_PointParameters + gl_Point + gl_MaterialParameters + gl_FrontMaterial + gl_BackMaterial + gl_LightSourceParameters + gl_LightSource + gl_LightModelParameters + gl_LightModel + gl_LightModelProducts + gl_FrontLightModelProduct + gl_BackLightModelProduct + gl_LightProducts + gl_FrontLightProduct + gl_BackLightProduct + gl_TextureEnvColor + gl_EyePlaneS + gl_EyePlaneT + gl_EyePlaneR + gl_EyePlaneQ + gl_ObjectPlaneS + gl_ObjectPlaneT + gl_ObjectPlaneR + gl_ObjectPlaneQ + gl_FogParameters + gl_Fog + + + gl_FrontColor + gl_BackColor + gl_FrontSecondaryColor + gl_BackSecondaryColor + gl_TexCoord + gl_FogFragCoord + gl_Color + gl_SecondaryColor + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/gnuassembler.xml b/src/data/extra/syntax-highlighting/syntax/gnuassembler.xml new file mode 100644 index 00000000..38203423 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/gnuassembler.xml @@ -0,0 +1,303 @@ + + + + + + + + .abort + .align + .app-file + .appline + .ascii + .asciz + .att_syntax + .balign + .balignl + .balignw + .byte + .code16 + .code32 + .comm + .common.s + .common + .data + .dc.b + .dc.d + .dc.l + .dc.s + .dc.w + .dc.x + .dc + .dcb.b + .dcb.d + .dcb.l + .dcb.s + .dcb.w + .dcb.x + .dcb + .debug + .def + .desc + .dim + .double + .ds.b + .ds.d + .ds.l + .ds.p + .ds.s + .ds.w + .ds.x + .ds + .dsect + .eject + .else + .elsec + .elseif + .end + .endc + .endef + .endfunc + .endif + .endm + .endr + .equ + .equiv + .err + .exitm + .extend + .extern + .fail + .file + .fill + .float + .format + .func + .global + .globl + .hidden + .hword + .ident + .if + .ifc + .ifdef + .ifeq + .ifeqs + .ifge + .ifgt + .ifle + .iflt + .ifnc + .ifndef + .ifne + .ifnes + .ifnotdef + .include + .int + .intel_syntax + .internal + .irep + .irepc + .irp + .irpc + .lcomm + .lflags + .line + .linkonce + .list + .llen + .ln + .long + .lsym + .macro + .mexit + .name + .noformat + .nolist + .nopage + noprefix + .octa + .offset + .org + .p2align + .p2alignl + .p2alignw + .page + .plen + .popsection + .previous + .print + .protected + .psize + .purgem + .pushsection + .quad + .rodata + .rep + .rept + .rva + .sbttl + .scl + .sect.s + .sect + .section.s + .section + .set + .short + .single + .size + .skip + .sleb128 + .space + .spc + .stabd + .stabn + .stabs + .string + .struct + .subsection + .symver + .tag + .text + .title + .ttl + .type + .uleb128 + .use + .val + .version + .vtable_entry + .vtable_inherit + .weak + .word + .xcom + .xdef + .xref + .xstabs + .zero + + .arm + .bss + .code + .even + .force_thumb + .ldouble + .loc + .ltorg + .packed + .pool + .req + .thumb + .thumb_func + .thumb_set + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/gnuplot.xml b/src/data/extra/syntax-highlighting/syntax/gnuplot.xml new file mode 100644 index 00000000..97ee96a7 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/gnuplot.xml @@ -0,0 +1,890 @@ + + + + + + noarrow + noborder + noclabel + noclip + nocontour + nodgrid3d + nogrid + nohidden3d + nokey + nolabel + nolinestyle + nomultiplot + nomx2tics + nomxtics + nomy2tics + nomytics + nomztics + nooffsets + noparametric + nopolar + nosurface + notimestamp + nox2dtics + nox2mtics + nox2tics + nox2zeroaxis + noxdtics + noxmtics + noxtics + noxzeroaxis + noy2dtics + noy2mtics + noy2tics + noy2zeroaxis + noydtics + noymtics + noytics + noyzeroaxis + nozdtics + nozeroaxis + nozmtics + noztics + + + + grid + parametric + + + + angles + arrow + bar + border + boxwidth + clip + cntrparam + data + dgrid3d + dummy + encoding + format + function + functions + hidden3d + isosamples + label + linestyle + mapping + margin + mx2tics + mxtics + my2tics + mytics + mztics + offsets + origin + parametric + pointsize + polar + samples + size + surface + tics + ticscale + ticslevel + timefmt + timestamp + variables + version + view + x2data + x2dtics + x2label + x2mtics + x2tics + x2zeroaxis + xdata + xdtics + xmtics + xtics + xzeroaxis + y2data + y2dtics + y2mtics + y2tics + y2zeroaxis + ydata + ydtics + ymtics + ytics + yzeroaxis + zdata + zdtics + zero + zeroaxis + zmtics + ztics + + + + clabel + title + xlabel + x2label + ylabel + y2label + zlabel + + + + rrange + trange + urange + vrange + x2range + xrange + y2range + yrange + zrange + + + + base + surface + both + + + + left + right + top + bottom + outside + below + Left + Right + noreverse + reverse + + + + noautoscale + autoscale + nologscale + + + + x + y + z + x2 + y2 + xy + + + + aed512 + aed767 + aifm + bitgraph + cgm + dumb + dxf + dxy800a + eepic + epson-180dpi + epson-60dpi + epson-lx800 + excl + gpic + hp2623a + hp2648 + kc-tek40xx + km-tek40xx + kyo + mf + mif + mp + nec-cp6 + okidata + prescribe + pstricks + qms + regis + rgip + selanar + starc + table + tandy-60dpi + tek40xx + tek410x + texdraw + uniplex + unixplot + vttek + vx384 + x11 + + + + landscape + portrait + eps + default + enhanced + noenhanced + solid + dashed + defaultplex + simplex + duplex + + + + courier + roman + default + + + + color + monochrome + dashed + rotate + norotate + auxfile + + + + transparent + notransparent + + + + small + medium + large + monochrome + gray + color + + + + landscape + portrait + solid + dashed + + + + monochrome + color + small + big + pointsmax + landscape + portrait + metric + inches + fontsize + size + thickness + depth + + + + monochrome + color + + + + FNT5X9 + FNT9X17 + FNT13X25 + + + + mode + landscape + portrait + monochrome + color + solid + dashed + letter + legal + noextended + extended + stick + univers + cg_times + zapf_dingbats + antique_olive + arial + courier + garamond_antigua + letter_gothic + cg_omega + albertus + times_new_roman + clarendon + coronet + marigold + truetype_symbols + wingdings + + + + 75 + 100 + 150 + 300 + + + + landscape + portrait + + + + acsplines + bezier + csplines + sbezier + unique + + + + x1y1 + x2y1 + x1y2 + x2y2 + + + + lines + l + points + p + linespoints + linesp + impulses + i + dots + d + steps + fsteps + histeps + + + + errorbars + xerrorbars + yerrorbars + xyerrorbars + boxes + boxerrorbars + boxxyerrorbars + financebars + candlesticks + vector + + + + linestyle + ls + linetype + lt + linewidth + lw + pointtype + pt + pointsize + ps + + + + replot + exit + quit + clear + reset + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/go.xml b/src/data/extra/syntax-highlighting/syntax/go.xml new file mode 100644 index 00000000..61d422db --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/go.xml @@ -0,0 +1,175 @@ + + + + + + + + + + + break + case + chan + const + continue + default + defer + else + fallthrough + for + func + go + goto + if + import + interface + map + package + range + return + select + struct + switch + type + var + + + bool + byte + complex64 + complex128 + error + float32 + float64 + int + int8 + int16 + int32 + int64 + rune + string + uint + uintptr + uint8 + uint16 + uint32 + uint64 + + + append + cap + close + complex + copy + delete + imag + len + make + new + panic + print + println + real + recover + + + false + nil + true + iota + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/grammar.xml b/src/data/extra/syntax-highlighting/syntax/grammar.xml new file mode 100644 index 00000000..b797f3cd --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/grammar.xml @@ -0,0 +1,145 @@ + + + + + + + ast_extra_members + export_macro + export_macro_header + namespace + parserclass + token + token_stream + parser_declaration_header + parser_bits_header + ast_header + ast_base + parser_base + bin + pre + post + tern + paren + left + right + < + > + + + try/rollback + try/recover + catch + + + public + protected + private + + + declaration + destructor + constructor + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/groovy.xml b/src/data/extra/syntax-highlighting/syntax/groovy.xml new file mode 100644 index 00000000..958cec33 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/groovy.xml @@ -0,0 +1,3889 @@ + + + + + + + ACTIVE + ACTIVITY_COMPLETED + ACTIVITY_REQUIRED + ARG_IN + ARG_INOUT + ARG_OUT + AWTError + AWTEvent + AWTEventListener + AWTEventListenerProxy + AWTEventMulticaster + AWTException + AWTKeyStroke + AWTPermission + AbstractAction + AbstractBorder + AbstractButton + AbstractCellEditor + AbstractCollection + AbstractColorChooserPanel + AbstractDocument + AbstractDocument.AttributeContext + AbstractDocument.Content + AbstractDocument.ElementEdit + AbstractExecutorService + AbstractInterruptibleChannel + AbstractLayoutCache + AbstractLayoutCache.NodeDimensions + AbstractList + AbstractListModel + AbstractMap + AbstractMethodError + AbstractPreferences + AbstractQueue + AbstractQueuedSynchronizer + AbstractSelectableChannel + AbstractSelectionKey + AbstractSelector + AbstractSequentialList + AbstractSet + AbstractSpinnerModel + AbstractTableModel + AbstractUndoableEdit + AbstractWriter + AccessControlContext + AccessControlException + AccessController + AccessException + Accessible + AccessibleAction + AccessibleAttributeSequence + AccessibleBundle + AccessibleComponent + AccessibleContext + AccessibleEditableText + AccessibleExtendedComponent + AccessibleExtendedTable + AccessibleExtendedText + AccessibleHyperlink + AccessibleHypertext + AccessibleIcon + AccessibleKeyBinding + AccessibleObject + AccessibleRelation + AccessibleRelationSet + AccessibleResourceBundle + AccessibleRole + AccessibleSelection + AccessibleState + AccessibleStateSet + AccessibleStreamable + AccessibleTable + AccessibleTableModelChange + AccessibleText + AccessibleTextSequence + AccessibleValue + AccountException + AccountExpiredException + AccountLockedException + AccountNotFoundException + Acl + AclEntry + AclNotFoundException + Action + ActionEvent + ActionListener + ActionMap + ActionMapUIResource + Activatable + ActivateFailedException + ActivationDesc + ActivationException + ActivationGroup + ActivationGroupDesc + ActivationGroupDesc.CommandEnvironment + ActivationGroupID + ActivationGroup_Stub + ActivationID + ActivationInstantiator + ActivationMonitor + ActivationSystem + Activator + ActiveEvent + ActivityCompletedException + ActivityRequiredException + AdapterActivator + AdapterActivatorOperations + AdapterAlreadyExists + AdapterAlreadyExistsHelper + AdapterInactive + AdapterInactiveHelper + AdapterManagerIdHelper + AdapterNameHelper + AdapterNonExistent + AdapterNonExistentHelper + AdapterStateHelper + AddressHelper + Adjustable + AdjustmentEvent + AdjustmentListener + Adler32 + AffineTransform + AffineTransformOp + AlgorithmParameterGenerator + AlgorithmParameterGeneratorSpi + AlgorithmParameterSpec + AlgorithmParameters + AlgorithmParametersSpi + AllPermission + AlphaComposite + AlreadyBound + AlreadyBoundException + AlreadyBoundHelper + AlreadyBoundHolder + AlreadyConnectedException + AncestorEvent + AncestorListener + AnnotatedElement + Annotation + Annotation + AnnotationFormatError + AnnotationTypeMismatchException + Any + AnyHolder + AnySeqHelper + AnySeqHelper + AnySeqHolder + AppConfigurationEntry + AppConfigurationEntry.LoginModuleControlFlag + Appendable + Applet + AppletContext + AppletInitializer + AppletStub + ApplicationException + Arc2D + Arc2D.Double + Arc2D.Float + Area + AreaAveragingScaleFilter + ArithmeticException + Array + Array + ArrayBlockingQueue + ArrayIndexOutOfBoundsException + ArrayList + ArrayStoreException + ArrayType + Arrays + AssertionError + AsyncBoxView + AsynchronousCloseException + AtomicBoolean + AtomicInteger + AtomicIntegerArray + AtomicIntegerFieldUpdater + AtomicLong + AtomicLongArray + AtomicLongFieldUpdater + AtomicMarkableReference + AtomicReference + AtomicReferenceArray + AtomicReferenceFieldUpdater + AtomicStampedReference + Attr + Attribute + Attribute + Attribute + AttributeChangeNotification + AttributeChangeNotificationFilter + AttributeException + AttributeInUseException + AttributeList + AttributeList + AttributeList + AttributeListImpl + AttributeModificationException + AttributeNotFoundException + AttributeSet + AttributeSet + AttributeSet.CharacterAttribute + AttributeSet.ColorAttribute + AttributeSet.FontAttribute + AttributeSet.ParagraphAttribute + AttributeSetUtilities + AttributeValueExp + AttributedCharacterIterator + AttributedCharacterIterator.Attribute + AttributedString + Attributes + Attributes + Attributes + Attributes.Name + Attributes2 + Attributes2Impl + AttributesImpl + AudioClip + AudioFileFormat + AudioFileFormat.Type + AudioFileReader + AudioFileWriter + AudioFormat + AudioFormat.Encoding + AudioInputStream + AudioPermission + AudioSystem + AuthPermission + AuthProvider + AuthenticationException + AuthenticationException + AuthenticationNotSupportedException + Authenticator + Authenticator.RequestorType + AuthorizeCallback + Autoscroll + BAD_CONTEXT + BAD_INV_ORDER + BAD_OPERATION + BAD_PARAM + BAD_POLICY + BAD_POLICY_TYPE + BAD_POLICY_VALUE + BAD_QOS + BAD_TYPECODE + BMPImageWriteParam + BackingStoreException + BadAttributeValueExpException + BadBinaryOpValueExpException + BadKind + BadLocationException + BadPaddingException + BadStringOperationException + BandCombineOp + BandedSampleModel + BaseRowSet + BasicArrowButton + BasicAttribute + BasicAttributes + BasicBorders + BasicBorders.ButtonBorder + BasicBorders.FieldBorder + BasicBorders.MarginBorder + BasicBorders.MenuBarBorder + BasicBorders.RadioButtonBorder + BasicBorders.RolloverButtonBorder + BasicBorders.SplitPaneBorder + BasicBorders.ToggleButtonBorder + BasicButtonListener + BasicButtonUI + BasicCheckBoxMenuItemUI + BasicCheckBoxUI + BasicColorChooserUI + BasicComboBoxEditor + BasicComboBoxEditor.UIResource + BasicComboBoxRenderer + BasicComboBoxRenderer.UIResource + BasicComboBoxUI + BasicComboPopup + BasicControl + BasicDesktopIconUI + BasicDesktopPaneUI + BasicDirectoryModel + BasicEditorPaneUI + BasicFileChooserUI + BasicFormattedTextFieldUI + BasicGraphicsUtils + BasicHTML + BasicIconFactory + BasicInternalFrameTitlePane + BasicInternalFrameUI + BasicLabelUI + BasicListUI + BasicLookAndFeel + BasicMenuBarUI + BasicMenuItemUI + BasicMenuUI + BasicOptionPaneUI + BasicOptionPaneUI.ButtonAreaLayout + BasicPanelUI + BasicPasswordFieldUI + BasicPermission + BasicPopupMenuSeparatorUI + BasicPopupMenuUI + BasicProgressBarUI + BasicRadioButtonMenuItemUI + BasicRadioButtonUI + BasicRootPaneUI + BasicScrollBarUI + BasicScrollPaneUI + BasicSeparatorUI + BasicSliderUI + BasicSpinnerUI + BasicSplitPaneDivider + BasicSplitPaneUI + BasicStroke + BasicTabbedPaneUI + BasicTableHeaderUI + BasicTableUI + BasicTextAreaUI + BasicTextFieldUI + BasicTextPaneUI + BasicTextUI + BasicTextUI.BasicCaret + BasicTextUI.BasicHighlighter + BasicToggleButtonUI + BasicToolBarSeparatorUI + BasicToolBarUI + BasicToolTipUI + BasicTreeUI + BasicViewportUI + BatchUpdateException + BeanContext + BeanContextChild + BeanContextChildComponentProxy + BeanContextChildSupport + BeanContextContainerProxy + BeanContextEvent + BeanContextMembershipEvent + BeanContextMembershipListener + BeanContextProxy + BeanContextServiceAvailableEvent + BeanContextServiceProvider + BeanContextServiceProviderBeanInfo + BeanContextServiceRevokedEvent + BeanContextServiceRevokedListener + BeanContextServices + BeanContextServicesListener + BeanContextServicesSupport + BeanContextServicesSupport.BCSSServiceProvider + BeanContextSupport + BeanContextSupport.BCSIterator + BeanDescriptor + BeanInfo + Beans + BevelBorder + Bidi + BigDecimal + BigInteger + BinaryRefAddr + BindException + Binding + Binding + BindingHelper + BindingHolder + BindingIterator + BindingIteratorHelper + BindingIteratorHolder + BindingIteratorOperations + BindingIteratorPOA + BindingListHelper + BindingListHolder + BindingType + BindingTypeHelper + BindingTypeHolder + BitSet + Blob + BlockView + BlockingQueue + Book + Boolean + BooleanControl + BooleanControl.Type + BooleanHolder + BooleanSeqHelper + BooleanSeqHolder + Border + BorderFactory + BorderLayout + BorderUIResource + BorderUIResource.BevelBorderUIResource + BorderUIResource.CompoundBorderUIResource + BorderUIResource.EmptyBorderUIResource + BorderUIResource.EtchedBorderUIResource + BorderUIResource.LineBorderUIResource + BorderUIResource.MatteBorderUIResource + BorderUIResource.TitledBorderUIResource + BoundedRangeModel + Bounds + Bounds + Box + Box.Filler + BoxLayout + BoxView + BoxedValueHelper + BreakIterator + BrokenBarrierException + Buffer + BufferCapabilities + BufferCapabilities.FlipContents + BufferOverflowException + BufferStrategy + BufferUnderflowException + BufferedImage + BufferedImageFilter + BufferedImageOp + BufferedInputStream + BufferedOutputStream + BufferedReader + BufferedWriter + Button + ButtonGroup + ButtonModel + ButtonUI + Byte + ByteArrayInputStream + ByteArrayOutputStream + ByteBuffer + ByteChannel + ByteHolder + ByteLookupTable + ByteOrder + CDATASection + CMMException + CODESET_INCOMPATIBLE + COMM_FAILURE + CRC32 + CRL + CRLException + CRLSelector + CSS + CSS.Attribute + CTX_RESTRICT_SCOPE + CacheRequest + CacheResponse + CachedRowSet + Calendar + Callable + CallableStatement + Callback + CallbackHandler + CancelablePrintJob + CancellationException + CancelledKeyException + CannotProceed + CannotProceedException + CannotProceedHelper + CannotProceedHolder + CannotRedoException + CannotUndoException + Canvas + CardLayout + Caret + CaretEvent + CaretListener + CellEditor + CellEditorListener + CellRendererPane + CertPath + CertPath.CertPathRep + CertPathBuilder + CertPathBuilderException + CertPathBuilderResult + CertPathBuilderSpi + CertPathParameters + CertPathTrustManagerParameters + CertPathValidator + CertPathValidatorException + CertPathValidatorResult + CertPathValidatorSpi + CertSelector + CertStore + CertStoreException + CertStoreParameters + CertStoreSpi + Certificate + Certificate + Certificate + Certificate.CertificateRep + CertificateEncodingException + CertificateEncodingException + CertificateException + CertificateException + CertificateExpiredException + CertificateExpiredException + CertificateFactory + CertificateFactorySpi + CertificateNotYetValidException + CertificateNotYetValidException + CertificateParsingException + CertificateParsingException + ChangeEvent + ChangeListener + ChangedCharSetException + Channel + ChannelBinding + Channels + CharArrayReader + CharArrayWriter + CharBuffer + CharConversionException + CharHolder + CharSeqHelper + CharSeqHolder + CharSequence + Character + Character.Subset + Character.UnicodeBlock + CharacterCodingException + CharacterData + CharacterIterator + Charset + CharsetDecoder + CharsetEncoder + CharsetProvider + Checkbox + CheckboxGroup + CheckboxMenuItem + CheckedInputStream + CheckedOutputStream + Checksum + Choice + ChoiceCallback + ChoiceFormat + Chromaticity + Cipher + CipherInputStream + CipherOutputStream + CipherSpi + Class + ClassCastException + ClassCircularityError + ClassDefinition + ClassDesc + ClassFileTransformer + ClassFormatError + ClassLoader + ClassLoaderRepository + ClassLoadingMXBean + ClassNotFoundException + ClientRequestInfo + ClientRequestInfoOperations + ClientRequestInterceptor + ClientRequestInterceptorOperations + Clip + Clipboard + ClipboardOwner + Clob + CloneNotSupportedException + Cloneable + Closeable + ClosedByInterruptException + ClosedChannelException + ClosedSelectorException + CodeSets + CodeSigner + CodeSource + Codec + CodecFactory + CodecFactoryHelper + CodecFactoryOperations + CodecOperations + CoderMalfunctionError + CoderResult + CodingErrorAction + CollationElementIterator + CollationKey + Collator + Collection + CollectionCertStoreParameters + Collections + Color + ColorChooserComponentFactory + ColorChooserUI + ColorConvertOp + ColorModel + ColorSelectionModel + ColorSpace + ColorSupported + ColorType + ColorUIResource + ComboBoxEditor + ComboBoxModel + ComboBoxUI + ComboPopup + Comment + CommunicationException + Comparable + Comparator + CompilationMXBean + Compiler + CompletionService + CompletionStatus + CompletionStatusHelper + Component + ComponentAdapter + ComponentColorModel + ComponentEvent + ComponentIdHelper + ComponentInputMap + ComponentInputMapUIResource + ComponentListener + ComponentOrientation + ComponentSampleModel + ComponentUI + ComponentView + Composite + CompositeContext + CompositeData + CompositeDataSupport + CompositeName + CompositeType + CompositeView + CompoundBorder + CompoundControl + CompoundControl.Type + CompoundEdit + CompoundName + Compression + ConcurrentHashMap + ConcurrentLinkedQueue + ConcurrentMap + ConcurrentModificationException + Condition + Configuration + ConfigurationException + ConfirmationCallback + ConnectException + ConnectException + ConnectIOException + Connection + ConnectionEvent + ConnectionEventListener + ConnectionPendingException + ConnectionPoolDataSource + ConsoleHandler + Constructor + Container + ContainerAdapter + ContainerEvent + ContainerListener + ContainerOrderFocusTraversalPolicy + ContentHandler + ContentHandler + ContentHandlerFactory + ContentModel + Context + Context + ContextList + ContextNotEmptyException + ContextualRenderedImageFactory + Control + Control + Control.Type + ControlFactory + ControllerEventListener + ConvolveOp + CookieHandler + CookieHolder + Copies + CopiesSupported + CopyOnWriteArrayList + CopyOnWriteArraySet + CountDownLatch + CounterMonitor + CounterMonitorMBean + CredentialException + CredentialExpiredException + CredentialNotFoundException + CropImageFilter + CubicCurve2D + CubicCurve2D.Double + CubicCurve2D.Float + Currency + Current + Current + Current + CurrentHelper + CurrentHelper + CurrentHelper + CurrentHolder + CurrentOperations + CurrentOperations + CurrentOperations + Cursor + CustomMarshal + CustomValue + Customizer + CyclicBarrier + DATA_CONVERSION + DESKeySpec + DESedeKeySpec + DGC + DHGenParameterSpec + DHKey + DHParameterSpec + DHPrivateKey + DHPrivateKeySpec + DHPublicKey + DHPublicKeySpec + DISCARDING + DOMConfiguration + DOMError + DOMErrorHandler + DOMException + DOMImplementation + DOMImplementationLS + DOMImplementationList + DOMImplementationRegistry + DOMImplementationSource + DOMLocator + DOMLocator + DOMResult + DOMSource + DOMStringList + DSAKey + DSAKeyPairGenerator + DSAParameterSpec + DSAParams + DSAPrivateKey + DSAPrivateKeySpec + DSAPublicKey + DSAPublicKeySpec + DTD + DTDConstants + DTDHandler + DataBuffer + DataBufferByte + DataBufferDouble + DataBufferFloat + DataBufferInt + DataBufferShort + DataBufferUShort + DataFlavor + DataFormatException + DataInput + DataInputStream + DataInputStream + DataLine + DataLine.Info + DataOutput + DataOutputStream + DataOutputStream + DataSource + DataTruncation + DatabaseMetaData + DatagramChannel + DatagramPacket + DatagramSocket + DatagramSocketImpl + DatagramSocketImplFactory + DatatypeConfigurationException + DatatypeConstants + DatatypeConstants.Field + DatatypeFactory + Date + Date + DateFormat + DateFormat.Field + DateFormatSymbols + DateFormatter + DateTimeAtCompleted + DateTimeAtCreation + DateTimeAtProcessing + DateTimeSyntax + DebugGraphics + DecimalFormat + DecimalFormatSymbols + DeclHandler + DefaultBoundedRangeModel + DefaultButtonModel + DefaultCaret + DefaultCellEditor + DefaultColorSelectionModel + DefaultComboBoxModel + DefaultDesktopManager + DefaultEditorKit + DefaultEditorKit.BeepAction + DefaultEditorKit.CopyAction + DefaultEditorKit.CutAction + DefaultEditorKit.DefaultKeyTypedAction + DefaultEditorKit.InsertBreakAction + DefaultEditorKit.InsertContentAction + DefaultEditorKit.InsertTabAction + DefaultEditorKit.PasteAction + DefaultFocusManager + DefaultFocusTraversalPolicy + DefaultFormatter + DefaultFormatterFactory + DefaultHandler + DefaultHandler2 + DefaultHighlighter + DefaultHighlighter.DefaultHighlightPainter + DefaultKeyboardFocusManager + DefaultListCellRenderer + DefaultListCellRenderer.UIResource + DefaultListModel + DefaultListSelectionModel + DefaultLoaderRepository + DefaultLoaderRepository + DefaultMenuLayout + DefaultMetalTheme + DefaultMutableTreeNode + DefaultPersistenceDelegate + DefaultSingleSelectionModel + DefaultStyledDocument + DefaultStyledDocument.AttributeUndoableEdit + DefaultStyledDocument.ElementSpec + DefaultTableCellRenderer + DefaultTableCellRenderer.UIResource + DefaultTableColumnModel + DefaultTableModel + DefaultTextUI + DefaultTreeCellEditor + DefaultTreeCellRenderer + DefaultTreeModel + DefaultTreeSelectionModel + DefinitionKind + DefinitionKindHelper + Deflater + DeflaterOutputStream + DelayQueue + Delayed + Delegate + Delegate + Delegate + DelegationPermission + Deprecated + Descriptor + DescriptorAccess + DescriptorSupport + DesignMode + DesktopIconUI + DesktopManager + DesktopPaneUI + Destination + DestroyFailedException + Destroyable + Dialog + Dictionary + DigestException + DigestInputStream + DigestOutputStream + Dimension + Dimension2D + DimensionUIResource + DirContext + DirObjectFactory + DirStateFactory + DirStateFactory.Result + DirectColorModel + DirectoryManager + DisplayMode + DnDConstants + Doc + DocAttribute + DocAttributeSet + DocFlavor + DocFlavor.BYTE_ARRAY + DocFlavor.CHAR_ARRAY + DocFlavor.INPUT_STREAM + DocFlavor.READER + DocFlavor.SERVICE_FORMATTED + DocFlavor.STRING + DocFlavor.URL + DocPrintJob + Document + Document + DocumentBuilder + DocumentBuilderFactory + DocumentEvent + DocumentEvent.ElementChange + DocumentEvent.EventType + DocumentFilter + DocumentFilter.FilterBypass + DocumentFragment + DocumentHandler + DocumentListener + DocumentName + DocumentParser + DocumentType + Documented + DomainCombiner + DomainManager + DomainManagerOperations + Double + DoubleBuffer + DoubleHolder + DoubleSeqHelper + DoubleSeqHolder + DragGestureEvent + DragGestureListener + DragGestureRecognizer + DragSource + DragSourceAdapter + DragSourceContext + DragSourceDragEvent + DragSourceDropEvent + DragSourceEvent + DragSourceListener + DragSourceMotionListener + Driver + DriverManager + DriverPropertyInfo + DropTarget + DropTarget.DropTargetAutoScroller + DropTargetAdapter + DropTargetContext + DropTargetDragEvent + DropTargetDropEvent + DropTargetEvent + DropTargetListener + DuplicateFormatFlagsException + DuplicateName + DuplicateNameHelper + Duration + DynAny + DynAny + DynAnyFactory + DynAnyFactoryHelper + DynAnyFactoryOperations + DynAnyHelper + DynAnyOperations + DynAnySeqHelper + DynArray + DynArray + DynArrayHelper + DynArrayOperations + DynEnum + DynEnum + DynEnumHelper + DynEnumOperations + DynFixed + DynFixed + DynFixedHelper + DynFixedOperations + DynSequence + DynSequence + DynSequenceHelper + DynSequenceOperations + DynStruct + DynStruct + DynStructHelper + DynStructOperations + DynUnion + DynUnion + DynUnionHelper + DynUnionOperations + DynValue + DynValue + DynValueBox + DynValueBoxOperations + DynValueCommon + DynValueCommonOperations + DynValueHelper + DynValueOperations + DynamicImplementation + DynamicImplementation + DynamicMBean + ECField + ECFieldF2m + ECFieldFp + ECGenParameterSpec + ECKey + ECParameterSpec + ECPoint + ECPrivateKey + ECPrivateKeySpec + ECPublicKey + ECPublicKeySpec + ENCODING_CDR_ENCAPS + EOFException + EditorKit + Element + Element + Element + ElementIterator + ElementType + Ellipse2D + Ellipse2D.Double + Ellipse2D.Float + EllipticCurve + EmptyBorder + EmptyStackException + EncodedKeySpec + Encoder + Encoding + EncryptedPrivateKeyInfo + Entity + Entity + EntityReference + EntityResolver + EntityResolver2 + Enum + EnumConstantNotPresentException + EnumControl + EnumControl.Type + EnumMap + EnumSet + EnumSyntax + Enumeration + Environment + Error + ErrorHandler + ErrorListener + ErrorManager + EtchedBorder + Event + EventContext + EventDirContext + EventHandler + EventListener + EventListenerList + EventListenerProxy + EventObject + EventQueue + EventSetDescriptor + Exception + ExceptionDetailMessage + ExceptionInInitializerError + ExceptionList + ExceptionListener + Exchanger + ExecutionException + Executor + ExecutorCompletionService + ExecutorService + Executors + ExemptionMechanism + ExemptionMechanismException + ExemptionMechanismSpi + ExpandVetoException + ExportException + Expression + ExtendedRequest + ExtendedResponse + Externalizable + FREE_MEM + FactoryConfigurationError + FailedLoginException + FeatureDescriptor + Fidelity + Field + FieldNameHelper + FieldNameHelper + FieldPosition + FieldView + File + FileCacheImageInputStream + FileCacheImageOutputStream + FileChannel + FileChannel.MapMode + FileChooserUI + FileDescriptor + FileDialog + FileFilter + FileFilter + FileHandler + FileImageInputStream + FileImageOutputStream + FileInputStream + FileLock + FileLockInterruptionException + FileNameMap + FileNotFoundException + FileOutputStream + FilePermission + FileReader + FileSystemView + FileView + FileWriter + FilenameFilter + Filter + FilterInputStream + FilterOutputStream + FilterReader + FilterWriter + FilteredImageSource + FilteredRowSet + Finishings + FixedHeightLayoutCache + FixedHolder + FlatteningPathIterator + FlavorEvent + FlavorException + FlavorListener + FlavorMap + FlavorTable + Float + FloatBuffer + FloatControl + FloatControl.Type + FloatHolder + FloatSeqHelper + FloatSeqHolder + FlowLayout + FlowView + FlowView.FlowStrategy + Flushable + FocusAdapter + FocusEvent + FocusListener + FocusManager + FocusTraversalPolicy + Font + FontFormatException + FontMetrics + FontRenderContext + FontUIResource + FormSubmitEvent + FormSubmitEvent.MethodType + FormView + Format + Format.Field + FormatConversionProvider + FormatFlagsConversionMismatchException + FormatMismatch + FormatMismatchHelper + Formattable + FormattableFlags + Formatter + Formatter + FormatterClosedException + ForwardRequest + ForwardRequest + ForwardRequestHelper + ForwardRequestHelper + Frame + Future + FutureTask + GSSContext + GSSCredential + GSSException + GSSManager + GSSName + GZIPInputStream + GZIPOutputStream + GapContent + GarbageCollectorMXBean + GatheringByteChannel + GaugeMonitor + GaugeMonitorMBean + GeneralPath + GeneralSecurityException + GenericArrayType + GenericDeclaration + GenericSignatureFormatError + GlyphJustificationInfo + GlyphMetrics + GlyphVector + GlyphView + GlyphView.GlyphPainter + GradientPaint + GraphicAttribute + Graphics + Graphics2D + GraphicsConfigTemplate + GraphicsConfiguration + GraphicsDevice + GraphicsEnvironment + GrayFilter + GregorianCalendar + GridBagConstraints + GridBagLayout + GridLayout + Group + Guard + GuardedObject + HOLDING + HTML + HTML.Attribute + HTML.Tag + HTML.UnknownTag + HTMLDocument + HTMLDocument.Iterator + HTMLEditorKit + HTMLEditorKit.HTMLFactory + HTMLEditorKit.HTMLTextAction + HTMLEditorKit.InsertHTMLTextAction + HTMLEditorKit.LinkController + HTMLEditorKit.Parser + HTMLEditorKit.ParserCallback + HTMLFrameHyperlinkEvent + HTMLWriter + Handler + HandlerBase + HandshakeCompletedEvent + HandshakeCompletedListener + HasControls + HashAttributeSet + HashDocAttributeSet + HashMap + HashPrintJobAttributeSet + HashPrintRequestAttributeSet + HashPrintServiceAttributeSet + HashSet + Hashtable + HeadlessException + HierarchyBoundsAdapter + HierarchyBoundsListener + HierarchyEvent + HierarchyListener + Highlighter + Highlighter.Highlight + Highlighter.HighlightPainter + HostnameVerifier + HttpRetryException + HttpURLConnection + HttpsURLConnection + HyperlinkEvent + HyperlinkEvent.EventType + HyperlinkListener + ICC_ColorSpace + ICC_Profile + ICC_ProfileGray + ICC_ProfileRGB + IDLEntity + IDLType + IDLTypeHelper + IDLTypeOperations + ID_ASSIGNMENT_POLICY_ID + ID_UNIQUENESS_POLICY_ID + IIOByteBuffer + IIOException + IIOImage + IIOInvalidTreeException + IIOMetadata + IIOMetadataController + IIOMetadataFormat + IIOMetadataFormatImpl + IIOMetadataNode + IIOParam + IIOParamController + IIOReadProgressListener + IIOReadUpdateListener + IIOReadWarningListener + IIORegistry + IIOServiceProvider + IIOWriteProgressListener + IIOWriteWarningListener + IMPLICIT_ACTIVATION_POLICY_ID + IMP_LIMIT + INACTIVE + INITIALIZE + INTERNAL + INTF_REPOS + INVALID_ACTIVITY + INVALID_TRANSACTION + INV_FLAG + INV_IDENT + INV_OBJREF + INV_POLICY + IOException + IOR + IORHelper + IORHolder + IORInfo + IORInfoOperations + IORInterceptor + IORInterceptorOperations + IORInterceptor_3_0 + IORInterceptor_3_0Helper + IORInterceptor_3_0Holder + IORInterceptor_3_0Operations + IRObject + IRObjectOperations + Icon + IconUIResource + IconView + IdAssignmentPolicy + IdAssignmentPolicyOperations + IdAssignmentPolicyValue + IdUniquenessPolicy + IdUniquenessPolicyOperations + IdUniquenessPolicyValue + IdentifierHelper + Identity + IdentityHashMap + IdentityScope + IllegalAccessError + IllegalAccessException + IllegalArgumentException + IllegalBlockSizeException + IllegalBlockingModeException + IllegalCharsetNameException + IllegalClassFormatException + IllegalComponentStateException + IllegalFormatCodePointException + IllegalFormatConversionException + IllegalFormatException + IllegalFormatFlagsException + IllegalFormatPrecisionException + IllegalFormatWidthException + IllegalMonitorStateException + IllegalPathStateException + IllegalSelectorException + IllegalStateException + IllegalThreadStateException + Image + ImageCapabilities + ImageConsumer + ImageFilter + ImageGraphicAttribute + ImageIO + ImageIcon + ImageInputStream + ImageInputStreamImpl + ImageInputStreamSpi + ImageObserver + ImageOutputStream + ImageOutputStreamImpl + ImageOutputStreamSpi + ImageProducer + ImageReadParam + ImageReader + ImageReaderSpi + ImageReaderWriterSpi + ImageTranscoder + ImageTranscoderSpi + ImageTypeSpecifier + ImageView + ImageWriteParam + ImageWriter + ImageWriterSpi + ImagingOpException + ImplicitActivationPolicy + ImplicitActivationPolicyOperations + ImplicitActivationPolicyValue + IncompatibleClassChangeError + IncompleteAnnotationException + InconsistentTypeCode + InconsistentTypeCode + InconsistentTypeCodeHelper + IndexColorModel + IndexOutOfBoundsException + IndexedPropertyChangeEvent + IndexedPropertyDescriptor + IndirectionException + Inet4Address + Inet6Address + InetAddress + InetSocketAddress + Inflater + InflaterInputStream + InheritableThreadLocal + Inherited + InitialContext + InitialContextFactory + InitialContextFactoryBuilder + InitialDirContext + InitialLdapContext + InlineView + InputContext + InputEvent + InputMap + InputMapUIResource + InputMethod + InputMethodContext + InputMethodDescriptor + InputMethodEvent + InputMethodHighlight + InputMethodListener + InputMethodRequests + InputMismatchException + InputSource + InputStream + InputStream + InputStream + InputStreamReader + InputSubset + InputVerifier + Insets + InsetsUIResource + InstanceAlreadyExistsException + InstanceNotFoundException + InstantiationError + InstantiationException + Instrument + Instrumentation + InsufficientResourcesException + IntBuffer + IntHolder + Integer + IntegerSyntax + Interceptor + InterceptorOperations + InternalError + InternalFrameAdapter + InternalFrameEvent + InternalFrameFocusTraversalPolicy + InternalFrameListener + InternalFrameUI + InternationalFormatter + InterruptedException + InterruptedIOException + InterruptedNamingException + InterruptibleChannel + IntrospectionException + IntrospectionException + Introspector + Invalid + InvalidActivityException + InvalidAddress + InvalidAddressHelper + InvalidAddressHolder + InvalidAlgorithmParameterException + InvalidApplicationException + InvalidAttributeIdentifierException + InvalidAttributeValueException + InvalidAttributeValueException + InvalidAttributesException + InvalidClassException + InvalidDnDOperationException + InvalidKeyException + InvalidKeyException + InvalidKeySpecException + InvalidMarkException + InvalidMidiDataException + InvalidName + InvalidName + InvalidName + InvalidNameException + InvalidNameHelper + InvalidNameHelper + InvalidNameHolder + InvalidObjectException + InvalidOpenTypeException + InvalidParameterException + InvalidParameterSpecException + InvalidPolicy + InvalidPolicyHelper + InvalidPreferencesFormatException + InvalidPropertiesFormatException + InvalidRelationIdException + InvalidRelationServiceException + InvalidRelationTypeException + InvalidRoleInfoException + InvalidRoleValueException + InvalidSearchControlsException + InvalidSearchFilterException + InvalidSeq + InvalidSlot + InvalidSlotHelper + InvalidTargetObjectTypeException + InvalidTransactionException + InvalidTypeForEncoding + InvalidTypeForEncodingHelper + InvalidValue + InvalidValue + InvalidValueHelper + InvocationEvent + InvocationHandler + InvocationTargetException + InvokeHandler + IstringHelper + ItemEvent + ItemListener + ItemSelectable + Iterable + Iterator + IvParameterSpec + JApplet + JButton + JCheckBox + JCheckBoxMenuItem + JColorChooser + JComboBox + JComboBox.KeySelectionManager + JComponent + JDesktopPane + JDialog + JEditorPane + JFileChooser + JFormattedTextField + JFormattedTextField.AbstractFormatter + JFormattedTextField.AbstractFormatterFactory + JFrame + JInternalFrame + JInternalFrame.JDesktopIcon + JLabel + JLayeredPane + JList + JMException + JMRuntimeException + JMXAuthenticator + JMXConnectionNotification + JMXConnector + JMXConnectorFactory + JMXConnectorProvider + JMXConnectorServer + JMXConnectorServerFactory + JMXConnectorServerMBean + JMXConnectorServerProvider + JMXPrincipal + JMXProviderException + JMXServerErrorException + JMXServiceURL + JMenu + JMenuBar + JMenuItem + JOptionPane + JPEGHuffmanTable + JPEGImageReadParam + JPEGImageWriteParam + JPEGQTable + JPanel + JPasswordField + JPopupMenu + JPopupMenu.Separator + JProgressBar + JRadioButton + JRadioButtonMenuItem + JRootPane + JScrollBar + JScrollPane + JSeparator + JSlider + JSpinner + JSpinner.DateEditor + JSpinner.DefaultEditor + JSpinner.ListEditor + JSpinner.NumberEditor + JSplitPane + JTabbedPane + JTable + JTable.PrintMode + JTableHeader + JTextArea + JTextComponent + JTextComponent.KeyBinding + JTextField + JTextPane + JToggleButton + JToggleButton.ToggleButtonModel + JToolBar + JToolBar.Separator + JToolTip + JTree + JTree.DynamicUtilTreeNode + JTree.EmptySelectionModel + JViewport + JWindow + JarEntry + JarException + JarFile + JarInputStream + JarOutputStream + JarURLConnection + JdbcRowSet + JobAttributes + JobAttributes.DefaultSelectionType + JobAttributes.DestinationType + JobAttributes.DialogType + JobAttributes.MultipleDocumentHandlingType + JobAttributes.SidesType + JobHoldUntil + JobImpressions + JobImpressionsCompleted + JobImpressionsSupported + JobKOctets + JobKOctetsProcessed + JobKOctetsSupported + JobMediaSheets + JobMediaSheetsCompleted + JobMediaSheetsSupported + JobMessageFromOperator + JobName + JobOriginatingUserName + JobPriority + JobPrioritySupported + JobSheets + JobState + JobStateReason + JobStateReasons + JoinRowSet + Joinable + KerberosKey + KerberosPrincipal + KerberosTicket + Kernel + Key + KeyAdapter + KeyAgreement + KeyAgreementSpi + KeyAlreadyExistsException + KeyEvent + KeyEventDispatcher + KeyEventPostProcessor + KeyException + KeyFactory + KeyFactorySpi + KeyGenerator + KeyGeneratorSpi + KeyListener + KeyManagementException + KeyManager + KeyManagerFactory + KeyManagerFactorySpi + KeyPair + KeyPairGenerator + KeyPairGeneratorSpi + KeyRep + KeyRep.Type + KeySpec + KeyStore + KeyStore.Builder + KeyStore.CallbackHandlerProtection + KeyStore.Entry + KeyStore.LoadStoreParameter + KeyStore.PasswordProtection + KeyStore.PrivateKeyEntry + KeyStore.ProtectionParameter + KeyStore.SecretKeyEntry + KeyStore.TrustedCertificateEntry + KeyStoreBuilderParameters + KeyStoreException + KeyStoreSpi + KeyStroke + KeyboardFocusManager + Keymap + LDAPCertStoreParameters + LIFESPAN_POLICY_ID + LOCATION_FORWARD + LSException + LSInput + LSLoadEvent + LSOutput + LSParser + LSParserFilter + LSProgressEvent + LSResourceResolver + LSSerializer + LSSerializerFilter + Label + LabelUI + LabelView + LanguageCallback + LastOwnerException + LayeredHighlighter + LayeredHighlighter.LayerPainter + LayoutFocusTraversalPolicy + LayoutManager + LayoutManager2 + LayoutQueue + LdapContext + LdapName + LdapReferralException + Lease + Level + LexicalHandler + LifespanPolicy + LifespanPolicyOperations + LifespanPolicyValue + LimitExceededException + Line + Line.Info + Line2D + Line2D.Double + Line2D.Float + LineBorder + LineBreakMeasurer + LineEvent + LineEvent.Type + LineListener + LineMetrics + LineNumberInputStream + LineNumberReader + LineUnavailableException + LinkException + LinkLoopException + LinkRef + LinkageError + LinkedBlockingQueue + LinkedHashMap + LinkedHashSet + LinkedList + List + List + ListCellRenderer + ListDataEvent + ListDataListener + ListIterator + ListModel + ListResourceBundle + ListSelectionEvent + ListSelectionListener + ListSelectionModel + ListUI + ListView + ListenerNotFoundException + LoaderHandler + LocalObject + Locale + LocateRegistry + Locator + Locator2 + Locator2Impl + LocatorImpl + Lock + LockSupport + LogManager + LogRecord + LogStream + Logger + LoggingMXBean + LoggingPermission + LoginContext + LoginException + LoginModule + Long + LongBuffer + LongHolder + LongLongSeqHelper + LongLongSeqHolder + LongSeqHelper + LongSeqHolder + LookAndFeel + LookupOp + LookupTable + MARSHAL + MBeanAttributeInfo + MBeanConstructorInfo + MBeanException + MBeanFeatureInfo + MBeanInfo + MBeanNotificationInfo + MBeanOperationInfo + MBeanParameterInfo + MBeanPermission + MBeanRegistration + MBeanRegistrationException + MBeanServer + MBeanServerBuilder + MBeanServerConnection + MBeanServerDelegate + MBeanServerDelegateMBean + MBeanServerFactory + MBeanServerForwarder + MBeanServerInvocationHandler + MBeanServerNotification + MBeanServerNotificationFilter + MBeanServerPermission + MBeanTrustPermission + MGF1ParameterSpec + MLet + MLetMBean + Mac + MacSpi + MalformedInputException + MalformedLinkException + MalformedObjectNameException + MalformedParameterizedTypeException + MalformedURLException + ManageReferralControl + ManagementFactory + ManagementPermission + ManagerFactoryParameters + Manifest + Map + Map.Entry + MappedByteBuffer + MarshalException + MarshalledObject + MaskFormatter + MatchResult + Matcher + Math + MathContext + MatteBorder + Media + MediaName + MediaPrintableArea + MediaSize + MediaSize.Engineering + MediaSize.ISO + MediaSize.JIS + MediaSize.NA + MediaSize.Other + MediaSizeName + MediaTracker + MediaTray + Member + MemoryCacheImageInputStream + MemoryCacheImageOutputStream + MemoryHandler + MemoryImageSource + MemoryMXBean + MemoryManagerMXBean + MemoryNotificationInfo + MemoryPoolMXBean + MemoryType + MemoryUsage + Menu + MenuBar + MenuBarUI + MenuComponent + MenuContainer + MenuDragMouseEvent + MenuDragMouseListener + MenuElement + MenuEvent + MenuItem + MenuItemUI + MenuKeyEvent + MenuKeyListener + MenuListener + MenuSelectionManager + MenuShortcut + MessageDigest + MessageDigestSpi + MessageFormat + MessageFormat.Field + MessageProp + MetaEventListener + MetaMessage + MetalBorders + MetalBorders.ButtonBorder + MetalBorders.Flush3DBorder + MetalBorders.InternalFrameBorder + MetalBorders.MenuBarBorder + MetalBorders.MenuItemBorder + MetalBorders.OptionDialogBorder + MetalBorders.PaletteBorder + MetalBorders.PopupMenuBorder + MetalBorders.RolloverButtonBorder + MetalBorders.ScrollPaneBorder + MetalBorders.TableHeaderBorder + MetalBorders.TextFieldBorder + MetalBorders.ToggleButtonBorder + MetalBorders.ToolBarBorder + MetalButtonUI + MetalCheckBoxIcon + MetalCheckBoxUI + MetalComboBoxButton + MetalComboBoxEditor + MetalComboBoxEditor.UIResource + MetalComboBoxIcon + MetalComboBoxUI + MetalDesktopIconUI + MetalFileChooserUI + MetalIconFactory + MetalIconFactory.FileIcon16 + MetalIconFactory.FolderIcon16 + MetalIconFactory.PaletteCloseIcon + MetalIconFactory.TreeControlIcon + MetalIconFactory.TreeFolderIcon + MetalIconFactory.TreeLeafIcon + MetalInternalFrameTitlePane + MetalInternalFrameUI + MetalLabelUI + MetalLookAndFeel + MetalMenuBarUI + MetalPopupMenuSeparatorUI + MetalProgressBarUI + MetalRadioButtonUI + MetalRootPaneUI + MetalScrollBarUI + MetalScrollButton + MetalScrollPaneUI + MetalSeparatorUI + MetalSliderUI + MetalSplitPaneUI + MetalTabbedPaneUI + MetalTextFieldUI + MetalTheme + MetalToggleButtonUI + MetalToolBarUI + MetalToolTipUI + MetalTreeUI + Method + MethodDescriptor + MidiChannel + MidiDevice + MidiDevice.Info + MidiDeviceProvider + MidiEvent + MidiFileFormat + MidiFileReader + MidiFileWriter + MidiMessage + MidiSystem + MidiUnavailableException + MimeTypeParseException + MinimalHTMLWriter + MissingFormatArgumentException + MissingFormatWidthException + MissingResourceException + Mixer + Mixer.Info + MixerProvider + ModelMBean + ModelMBeanAttributeInfo + ModelMBeanConstructorInfo + ModelMBeanInfo + ModelMBeanInfoSupport + ModelMBeanNotificationBroadcaster + ModelMBeanNotificationInfo + ModelMBeanOperationInfo + ModificationItem + Modifier + Monitor + MonitorMBean + MonitorNotification + MonitorSettingException + MouseAdapter + MouseDragGestureRecognizer + MouseEvent + MouseInfo + MouseInputAdapter + MouseInputListener + MouseListener + MouseMotionAdapter + MouseMotionListener + MouseWheelEvent + MouseWheelListener + MultiButtonUI + MultiColorChooserUI + MultiComboBoxUI + MultiDesktopIconUI + MultiDesktopPaneUI + MultiDoc + MultiDocPrintJob + MultiDocPrintService + MultiFileChooserUI + MultiInternalFrameUI + MultiLabelUI + MultiListUI + MultiLookAndFeel + MultiMenuBarUI + MultiMenuItemUI + MultiOptionPaneUI + MultiPanelUI + MultiPixelPackedSampleModel + MultiPopupMenuUI + MultiProgressBarUI + MultiRootPaneUI + MultiScrollBarUI + MultiScrollPaneUI + MultiSeparatorUI + MultiSliderUI + MultiSpinnerUI + MultiSplitPaneUI + MultiTabbedPaneUI + MultiTableHeaderUI + MultiTableUI + MultiTextUI + MultiToolBarUI + MultiToolTipUI + MultiTreeUI + MultiViewportUI + MulticastSocket + MultipleComponentProfileHelper + MultipleComponentProfileHolder + MultipleDocumentHandling + MultipleMaster + MutableAttributeSet + MutableComboBoxModel + MutableTreeNode + NON_EXISTENT + NO_IMPLEMENT + NO_MEMORY + NO_PERMISSION + NO_RESOURCES + NO_RESPONSE + NVList + Name + NameAlreadyBoundException + NameCallback + NameClassPair + NameComponent + NameComponentHelper + NameComponentHolder + NameDynAnyPair + NameDynAnyPairHelper + NameDynAnyPairSeqHelper + NameHelper + NameHolder + NameList + NameNotFoundException + NameParser + NameValuePair + NameValuePair + NameValuePairHelper + NameValuePairHelper + NameValuePairSeqHelper + NamedNodeMap + NamedValue + NamespaceChangeListener + NamespaceContext + NamespaceSupport + Naming + NamingContext + NamingContextExt + NamingContextExtHelper + NamingContextExtHolder + NamingContextExtOperations + NamingContextExtPOA + NamingContextHelper + NamingContextHolder + NamingContextOperations + NamingContextPOA + NamingEnumeration + NamingEvent + NamingException + NamingExceptionEvent + NamingListener + NamingManager + NamingSecurityException + NavigationFilter + NavigationFilter.FilterBypass + NegativeArraySizeException + NetPermission + NetworkInterface + NoClassDefFoundError + NoConnectionPendingException + NoContext + NoContextHelper + NoInitialContextException + NoPermissionException + NoRouteToHostException + NoServant + NoServantHelper + NoSuchAlgorithmException + NoSuchAttributeException + NoSuchElementException + NoSuchFieldError + NoSuchFieldException + NoSuchMethodError + NoSuchMethodException + NoSuchObjectException + NoSuchPaddingException + NoSuchProviderException + Node + NodeChangeEvent + NodeChangeListener + NodeList + NonReadableChannelException + NonWritableChannelException + NoninvertibleTransformException + NotActiveException + NotBoundException + NotCompliantMBeanException + NotContextException + NotEmpty + NotEmptyHelper + NotEmptyHolder + NotFound + NotFoundHelper + NotFoundHolder + NotFoundReason + NotFoundReasonHelper + NotFoundReasonHolder + NotOwnerException + NotSerializableException + NotYetBoundException + NotYetConnectedException + Notation + Notification + NotificationBroadcaster + NotificationBroadcasterSupport + NotificationEmitter + NotificationFilter + NotificationFilterSupport + NotificationListener + NotificationResult + NullCipher + NullPointerException + Number + NumberFormat + NumberFormat.Field + NumberFormatException + NumberFormatter + NumberOfDocuments + NumberOfInterveningJobs + NumberUp + NumberUpSupported + NumericShaper + OAEPParameterSpec + OBJECT_NOT_EXIST + OBJ_ADAPTER + OMGVMCID + ORB + ORB + ORBIdHelper + ORBInitInfo + ORBInitInfoOperations + ORBInitializer + ORBInitializerOperations + ObjID + Object + Object + ObjectAlreadyActive + ObjectAlreadyActiveHelper + ObjectChangeListener + ObjectFactory + ObjectFactoryBuilder + ObjectHelper + ObjectHolder + ObjectIdHelper + ObjectIdHelper + ObjectImpl + ObjectImpl + ObjectInput + ObjectInputStream + ObjectInputStream.GetField + ObjectInputValidation + ObjectInstance + ObjectName + ObjectNotActive + ObjectNotActiveHelper + ObjectOutput + ObjectOutputStream + ObjectOutputStream.PutField + ObjectReferenceFactory + ObjectReferenceFactoryHelper + ObjectReferenceFactoryHolder + ObjectReferenceTemplate + ObjectReferenceTemplateHelper + ObjectReferenceTemplateHolder + ObjectReferenceTemplateSeqHelper + ObjectReferenceTemplateSeqHolder + ObjectStreamClass + ObjectStreamConstants + ObjectStreamException + ObjectStreamField + ObjectView + Observable + Observer + OceanTheme + OctetSeqHelper + OctetSeqHolder + Oid + OpenDataException + OpenMBeanAttributeInfo + OpenMBeanAttributeInfoSupport + OpenMBeanConstructorInfo + OpenMBeanConstructorInfoSupport + OpenMBeanInfo + OpenMBeanInfoSupport + OpenMBeanOperationInfo + OpenMBeanOperationInfoSupport + OpenMBeanParameterInfo + OpenMBeanParameterInfoSupport + OpenType + OpenType + OperatingSystemMXBean + Operation + OperationNotSupportedException + OperationsException + Option + OptionPaneUI + OptionalDataException + OrientationRequested + OutOfMemoryError + OutputDeviceAssigned + OutputKeys + OutputStream + OutputStream + OutputStream + OutputStreamWriter + OverlappingFileLockException + OverlayLayout + Override + Owner + PBEKey + PBEKeySpec + PBEParameterSpec + PDLOverrideSupported + PERSIST_STORE + PKCS8EncodedKeySpec + PKIXBuilderParameters + PKIXCertPathBuilderResult + PKIXCertPathChecker + PKIXCertPathValidatorResult + PKIXParameters + POA + POAHelper + POAManager + POAManagerOperations + POAOperations + PRIVATE_MEMBER + PSSParameterSpec + PSource + PSource.PSpecified + PUBLIC_MEMBER + Pack200 + Pack200.Packer + Pack200.Unpacker + Package + PackedColorModel + PageAttributes + PageAttributes.ColorType + PageAttributes.MediaType + PageAttributes.OrientationRequestedType + PageAttributes.OriginType + PageAttributes.PrintQualityType + PageFormat + PageRanges + Pageable + PagedResultsControl + PagedResultsResponseControl + PagesPerMinute + PagesPerMinuteColor + Paint + PaintContext + PaintEvent + Panel + PanelUI + Paper + ParagraphView + ParagraphView + Parameter + ParameterBlock + ParameterDescriptor + ParameterMetaData + ParameterMode + ParameterModeHelper + ParameterModeHolder + ParameterizedType + ParseException + ParsePosition + Parser + Parser + ParserAdapter + ParserConfigurationException + ParserDelegator + ParserFactory + PartialResultException + PasswordAuthentication + PasswordCallback + PasswordView + Patch + PathIterator + Pattern + PatternSyntaxException + Permission + Permission + PermissionCollection + Permissions + PersistenceDelegate + PersistentMBean + PhantomReference + Pipe + Pipe.SinkChannel + Pipe.SourceChannel + PipedInputStream + PipedOutputStream + PipedReader + PipedWriter + PixelGrabber + PixelInterleavedSampleModel + PlainDocument + PlainView + Point + Point2D + Point2D.Double + Point2D.Float + PointerInfo + Policy + Policy + Policy + PolicyError + PolicyErrorCodeHelper + PolicyErrorHelper + PolicyErrorHolder + PolicyFactory + PolicyFactoryOperations + PolicyHelper + PolicyHolder + PolicyListHelper + PolicyListHolder + PolicyNode + PolicyOperations + PolicyQualifierInfo + PolicyTypeHelper + Polygon + PooledConnection + Popup + PopupFactory + PopupMenu + PopupMenuEvent + PopupMenuListener + PopupMenuUI + Port + Port.Info + PortUnreachableException + PortableRemoteObject + PortableRemoteObjectDelegate + Position + Position.Bias + Predicate + PreferenceChangeEvent + PreferenceChangeListener + Preferences + PreferencesFactory + PreparedStatement + PresentationDirection + Principal + Principal + PrincipalHolder + PrintEvent + PrintException + PrintGraphics + PrintJob + PrintJobAdapter + PrintJobAttribute + PrintJobAttributeEvent + PrintJobAttributeListener + PrintJobAttributeSet + PrintJobEvent + PrintJobListener + PrintQuality + PrintRequestAttribute + PrintRequestAttributeSet + PrintService + PrintServiceAttribute + PrintServiceAttributeEvent + PrintServiceAttributeListener + PrintServiceAttributeSet + PrintServiceLookup + PrintStream + PrintWriter + Printable + PrinterAbortException + PrinterException + PrinterGraphics + PrinterIOException + PrinterInfo + PrinterIsAcceptingJobs + PrinterJob + PrinterLocation + PrinterMakeAndModel + PrinterMessageFromOperator + PrinterMoreInfo + PrinterMoreInfoManufacturer + PrinterName + PrinterResolution + PrinterState + PrinterStateReason + PrinterStateReasons + PrinterURI + PriorityBlockingQueue + PriorityQueue + PrivateClassLoader + PrivateCredentialPermission + PrivateKey + PrivateMLet + PrivilegedAction + PrivilegedActionException + PrivilegedExceptionAction + Process + ProcessBuilder + ProcessingInstruction + ProfileDataException + ProfileIdHelper + ProgressBarUI + ProgressMonitor + ProgressMonitorInputStream + Properties + PropertyChangeEvent + PropertyChangeListener + PropertyChangeListenerProxy + PropertyChangeSupport + PropertyDescriptor + PropertyEditor + PropertyEditorManager + PropertyEditorSupport + PropertyPermission + PropertyResourceBundle + PropertyVetoException + ProtectionDomain + ProtocolException + Provider + Provider.Service + ProviderException + Proxy + Proxy + Proxy.Type + ProxySelector + PublicKey + PushbackInputStream + PushbackReader + QName + QuadCurve2D + QuadCurve2D.Double + QuadCurve2D.Float + Query + QueryEval + QueryExp + Queue + QueuedJobCount + RC2ParameterSpec + RC5ParameterSpec + REBIND + REQUEST_PROCESSING_POLICY_ID + RGBImageFilter + RMIClassLoader + RMIClassLoaderSpi + RMIClientSocketFactory + RMIConnection + RMIConnectionImpl + RMIConnectionImpl_Stub + RMIConnector + RMIConnectorServer + RMICustomMaxStreamFormat + RMIFailureHandler + RMIIIOPServerImpl + RMIJRMPServerImpl + RMISecurityException + RMISecurityManager + RMIServer + RMIServerImpl + RMIServerImpl_Stub + RMIServerSocketFactory + RMISocketFactory + RSAKey + RSAKeyGenParameterSpec + RSAMultiPrimePrivateCrtKey + RSAMultiPrimePrivateCrtKeySpec + RSAOtherPrimeInfo + RSAPrivateCrtKey + RSAPrivateCrtKeySpec + RSAPrivateKey + RSAPrivateKeySpec + RSAPublicKey + RSAPublicKeySpec + RTFEditorKit + Random + RandomAccess + RandomAccessFile + Raster + RasterFormatException + RasterOp + Rdn + ReadOnlyBufferException + ReadWriteLock + Readable + ReadableByteChannel + Reader + RealmCallback + RealmChoiceCallback + Receiver + Rectangle + Rectangle2D + Rectangle2D.Double + Rectangle2D.Float + RectangularShape + ReentrantLock + ReentrantReadWriteLock + ReentrantReadWriteLock.ReadLock + ReentrantReadWriteLock.WriteLock + Ref + RefAddr + Reference + Reference + ReferenceQueue + ReferenceUriSchemesSupported + Referenceable + ReferralException + ReflectPermission + ReflectionException + RefreshFailedException + Refreshable + Region + RegisterableService + Registry + RegistryHandler + RejectedExecutionException + RejectedExecutionHandler + Relation + RelationException + RelationNotFoundException + RelationNotification + RelationService + RelationServiceMBean + RelationServiceNotRegisteredException + RelationSupport + RelationSupportMBean + RelationType + RelationTypeNotFoundException + RelationTypeSupport + RemarshalException + Remote + RemoteCall + RemoteException + RemoteObject + RemoteObjectInvocationHandler + RemoteRef + RemoteServer + RemoteStub + RenderContext + RenderableImage + RenderableImageOp + RenderableImageProducer + RenderedImage + RenderedImageFactory + Renderer + RenderingHints + RenderingHints.Key + RepaintManager + ReplicateScaleFilter + RepositoryIdHelper + Request + RequestInfo + RequestInfoOperations + RequestProcessingPolicy + RequestProcessingPolicyOperations + RequestProcessingPolicyValue + RequestingUserName + RequiredModelMBean + RescaleOp + ResolutionSyntax + ResolveResult + Resolver + ResourceBundle + ResponseCache + ResponseHandler + Result + ResultSet + ResultSetMetaData + Retention + RetentionPolicy + ReverbType + Robot + Role + RoleInfo + RoleInfoNotFoundException + RoleList + RoleNotFoundException + RoleResult + RoleStatus + RoleUnresolved + RoleUnresolvedList + RootPaneContainer + RootPaneUI + RoundRectangle2D + RoundRectangle2D.Double + RoundRectangle2D.Float + RoundingMode + RowMapper + RowSet + RowSetEvent + RowSetInternal + RowSetListener + RowSetMetaData + RowSetMetaDataImpl + RowSetReader + RowSetWarning + RowSetWriter + RuleBasedCollator + RunTime + RunTimeOperations + Runnable + Runtime + RuntimeErrorException + RuntimeException + RuntimeMBeanException + RuntimeMXBean + RuntimeOperationsException + RuntimePermission + SAXException + SAXNotRecognizedException + SAXNotSupportedException + SAXParseException + SAXParser + SAXParserFactory + SAXResult + SAXSource + SAXTransformerFactory + SERVANT_RETENTION_POLICY_ID + SQLData + SQLException + SQLInput + SQLInputImpl + SQLOutput + SQLOutputImpl + SQLPermission + SQLWarning + SSLContext + SSLContextSpi + SSLEngine + SSLEngineResult + SSLEngineResult.HandshakeStatus + SSLEngineResult.Status + SSLException + SSLHandshakeException + SSLKeyException + SSLPeerUnverifiedException + SSLPermission + SSLProtocolException + SSLServerSocket + SSLServerSocketFactory + SSLSession + SSLSessionBindingEvent + SSLSessionBindingListener + SSLSessionContext + SSLSocket + SSLSocketFactory + SUCCESSFUL + SYNC_WITH_TRANSPORT + SYSTEM_EXCEPTION + SampleModel + Sasl + SaslClient + SaslClientFactory + SaslException + SaslServer + SaslServerFactory + Savepoint + Scanner + ScatteringByteChannel + ScheduledExecutorService + ScheduledFuture + ScheduledThreadPoolExecutor + Schema + SchemaFactory + SchemaFactoryLoader + SchemaViolationException + ScrollBarUI + ScrollPane + ScrollPaneAdjustable + ScrollPaneConstants + ScrollPaneLayout + ScrollPaneLayout.UIResource + ScrollPaneUI + Scrollable + Scrollbar + SealedObject + SearchControls + SearchResult + SecretKey + SecretKeyFactory + SecretKeyFactorySpi + SecretKeySpec + SecureCacheResponse + SecureClassLoader + SecureRandom + SecureRandomSpi + Security + SecurityException + SecurityManager + SecurityPermission + Segment + SelectableChannel + SelectionKey + Selector + SelectorProvider + Semaphore + SeparatorUI + Sequence + SequenceInputStream + Sequencer + Sequencer.SyncMode + SerialArray + SerialBlob + SerialClob + SerialDatalink + SerialException + SerialJavaObject + SerialRef + SerialStruct + Serializable + SerializablePermission + Servant + ServantActivator + ServantActivatorHelper + ServantActivatorOperations + ServantActivatorPOA + ServantAlreadyActive + ServantAlreadyActiveHelper + ServantLocator + ServantLocatorHelper + ServantLocatorOperations + ServantLocatorPOA + ServantManager + ServantManagerOperations + ServantNotActive + ServantNotActiveHelper + ServantObject + ServantRetentionPolicy + ServantRetentionPolicyOperations + ServantRetentionPolicyValue + ServerCloneException + ServerError + ServerException + ServerIdHelper + ServerNotActiveException + ServerRef + ServerRequest + ServerRequestInfo + ServerRequestInfoOperations + ServerRequestInterceptor + ServerRequestInterceptorOperations + ServerRuntimeException + ServerSocket + ServerSocketChannel + ServerSocketFactory + ServiceContext + ServiceContextHelper + ServiceContextHolder + ServiceContextListHelper + ServiceContextListHolder + ServiceDetail + ServiceDetailHelper + ServiceIdHelper + ServiceInformation + ServiceInformationHelper + ServiceInformationHolder + ServiceNotFoundException + ServicePermission + ServiceRegistry + ServiceRegistry.Filter + ServiceUI + ServiceUIFactory + ServiceUnavailableException + Set + SetOfIntegerSyntax + SetOverrideType + SetOverrideTypeHelper + Severity + Shape + ShapeGraphicAttribute + SheetCollate + Short + ShortBuffer + ShortBufferException + ShortHolder + ShortLookupTable + ShortMessage + ShortSeqHelper + ShortSeqHolder + Sides + Signature + SignatureException + SignatureSpi + SignedObject + Signer + SimpleAttributeSet + SimpleBeanInfo + SimpleDateFormat + SimpleDoc + SimpleFormatter + SimpleTimeZone + SimpleType + SinglePixelPackedSampleModel + SingleSelectionModel + Size2DSyntax + SizeLimitExceededException + SizeRequirements + SizeSequence + Skeleton + SkeletonMismatchException + SkeletonNotFoundException + SliderUI + Socket + SocketAddress + SocketChannel + SocketException + SocketFactory + SocketHandler + SocketImpl + SocketImplFactory + SocketOptions + SocketPermission + SocketSecurityException + SocketTimeoutException + SoftBevelBorder + SoftReference + SortControl + SortKey + SortResponseControl + SortedMap + SortedSet + SortingFocusTraversalPolicy + Soundbank + SoundbankReader + SoundbankResource + Source + SourceDataLine + SourceLocator + SpinnerDateModel + SpinnerListModel + SpinnerModel + SpinnerNumberModel + SpinnerUI + SplitPaneUI + Spring + SpringLayout + SpringLayout.Constraints + SslRMIClientSocketFactory + SslRMIServerSocketFactory + Stack + StackOverflowError + StackTraceElement + StandardMBean + StartTlsRequest + StartTlsResponse + State + StateEdit + StateEditable + StateFactory + Statement + Statement + StreamCorruptedException + StreamHandler + StreamPrintService + StreamPrintServiceFactory + StreamResult + StreamSource + StreamTokenizer + Streamable + StreamableValue + StrictMath + String + StringBuffer + StringBufferInputStream + StringBuilder + StringCharacterIterator + StringContent + StringHolder + StringIndexOutOfBoundsException + StringMonitor + StringMonitorMBean + StringNameHelper + StringReader + StringRefAddr + StringSelection + StringSeqHelper + StringSeqHolder + StringTokenizer + StringValueExp + StringValueHelper + StringWriter + Stroke + Struct + StructMember + StructMemberHelper + Stub + StubDelegate + StubNotFoundException + Style + StyleConstants + StyleConstants.CharacterConstants + StyleConstants.ColorConstants + StyleConstants.FontConstants + StyleConstants.ParagraphConstants + StyleContext + StyleSheet + StyleSheet.BoxPainter + StyleSheet.ListPainter + StyledDocument + StyledEditorKit + StyledEditorKit.AlignmentAction + StyledEditorKit.BoldAction + StyledEditorKit.FontFamilyAction + StyledEditorKit.FontSizeAction + StyledEditorKit.ForegroundAction + StyledEditorKit.ItalicAction + StyledEditorKit.StyledTextAction + StyledEditorKit.UnderlineAction + Subject + SubjectDelegationPermission + SubjectDomainCombiner + SupportedValuesAttribute + SuppressWarnings + SwingConstants + SwingPropertyChangeSupport + SwingUtilities + SyncFactory + SyncFactoryException + SyncFailedException + SyncProvider + SyncProviderException + SyncResolver + SyncScopeHelper + SynchronousQueue + SynthConstants + SynthContext + SynthGraphicsUtils + SynthLookAndFeel + SynthPainter + SynthStyle + SynthStyleFactory + Synthesizer + SysexMessage + System + SystemColor + SystemException + SystemFlavorMap + TAG_ALTERNATE_IIOP_ADDRESS + TAG_CODE_SETS + TAG_INTERNET_IOP + TAG_JAVA_CODEBASE + TAG_MULTIPLE_COMPONENTS + TAG_ORB_TYPE + TAG_POLICIES + TAG_RMI_CUSTOM_MAX_STREAM_FORMAT + TCKind + THREAD_POLICY_ID + TIMEOUT + TRANSACTION_MODE + TRANSACTION_REQUIRED + TRANSACTION_ROLLEDBACK + TRANSACTION_UNAVAILABLE + TRANSIENT + TRANSPORT_RETRY + TabExpander + TabSet + TabStop + TabableView + TabbedPaneUI + TableCellEditor + TableCellRenderer + TableColumn + TableColumnModel + TableColumnModelEvent + TableColumnModelListener + TableHeaderUI + TableModel + TableModelEvent + TableModelListener + TableUI + TableView + TabularData + TabularDataSupport + TabularType + TagElement + TaggedComponent + TaggedComponentHelper + TaggedComponentHolder + TaggedProfile + TaggedProfileHelper + TaggedProfileHolder + Target + TargetDataLine + TargetedNotification + Templates + TemplatesHandler + Text + TextAction + TextArea + TextAttribute + TextComponent + TextEvent + TextField + TextHitInfo + TextInputCallback + TextLayout + TextLayout.CaretPolicy + TextListener + TextMeasurer + TextOutputCallback + TextSyntax + TextUI + TexturePaint + Thread + Thread.State + Thread.UncaughtExceptionHandler + ThreadDeath + ThreadFactory + ThreadGroup + ThreadInfo + ThreadLocal + ThreadMXBean + ThreadPolicy + ThreadPolicyOperations + ThreadPolicyValue + ThreadPoolExecutor + ThreadPoolExecutor.AbortPolicy + ThreadPoolExecutor.CallerRunsPolicy + ThreadPoolExecutor.DiscardOldestPolicy + ThreadPoolExecutor.DiscardPolicy + Throwable + Tie + TileObserver + Time + TimeLimitExceededException + TimeUnit + TimeZone + TimeoutException + Timer + Timer + Timer + TimerAlarmClockNotification + TimerMBean + TimerNotification + TimerTask + Timestamp + Timestamp + TitledBorder + TooManyListenersException + ToolBarUI + ToolTipManager + ToolTipUI + Toolkit + Track + TransactionRequiredException + TransactionRolledbackException + TransactionService + TransactionalWriter + TransferHandler + Transferable + TransformAttribute + Transformer + TransformerConfigurationException + TransformerException + TransformerFactory + TransformerFactoryConfigurationError + TransformerHandler + Transmitter + Transparency + TreeCellEditor + TreeCellRenderer + TreeExpansionEvent + TreeExpansionListener + TreeMap + TreeModel + TreeModelEvent + TreeModelListener + TreeNode + TreePath + TreeSelectionEvent + TreeSelectionListener + TreeSelectionModel + TreeSet + TreeUI + TreeWillExpandListener + TrustAnchor + TrustManager + TrustManagerFactory + TrustManagerFactorySpi + Type + TypeCode + TypeCodeHolder + TypeInfo + TypeInfoProvider + TypeMismatch + TypeMismatch + TypeMismatch + TypeMismatchHelper + TypeMismatchHelper + TypeNotPresentException + TypeVariable + Types + UID + UIDefaults + UIDefaults.ActiveValue + UIDefaults.LazyInputMap + UIDefaults.LazyValue + UIDefaults.ProxyLazyValue + UIManager + UIManager.LookAndFeelInfo + UIResource + ULongLongSeqHelper + ULongLongSeqHolder + ULongSeqHelper + ULongSeqHolder + UNKNOWN + UNKNOWN + UNSUPPORTED_POLICY + UNSUPPORTED_POLICY_VALUE + URI + URIException + URIResolver + URISyntax + URISyntaxException + URL + URLClassLoader + URLConnection + URLDecoder + URLEncoder + URLStreamHandler + URLStreamHandlerFactory + URLStringHelper + USER_EXCEPTION + UShortSeqHelper + UShortSeqHolder + UTFDataFormatException + UUID + UndeclaredThrowableException + UndoManager + UndoableEdit + UndoableEditEvent + UndoableEditListener + UndoableEditSupport + UnexpectedException + UnicastRemoteObject + UnionMember + UnionMemberHelper + UnknownEncoding + UnknownEncodingHelper + UnknownError + UnknownException + UnknownFormatConversionException + UnknownFormatFlagsException + UnknownGroupException + UnknownHostException + UnknownHostException + UnknownObjectException + UnknownServiceException + UnknownUserException + UnknownUserExceptionHelper + UnknownUserExceptionHolder + UnmappableCharacterException + UnmarshalException + UnmodifiableClassException + UnmodifiableSetException + UnrecoverableEntryException + UnrecoverableKeyException + Unreferenced + UnresolvedAddressException + UnresolvedPermission + UnsatisfiedLinkError + UnsolicitedNotification + UnsolicitedNotificationEvent + UnsolicitedNotificationListener + UnsupportedAddressTypeException + UnsupportedAudioFileException + UnsupportedCallbackException + UnsupportedCharsetException + UnsupportedClassVersionError + UnsupportedEncodingException + UnsupportedFlavorException + UnsupportedLookAndFeelException + UnsupportedOperationException + UserDataHandler + UserException + Util + UtilDelegate + Utilities + VMID + VM_ABSTRACT + VM_CUSTOM + VM_NONE + VM_TRUNCATABLE + Validator + ValidatorHandler + ValueBase + ValueBaseHelper + ValueBaseHolder + ValueExp + ValueFactory + ValueHandler + ValueHandlerMultiFormat + ValueInputStream + ValueMember + ValueMemberHelper + ValueOutputStream + VariableHeightLayoutCache + Vector + VerifyError + VersionSpecHelper + VetoableChangeListener + VetoableChangeListenerProxy + VetoableChangeSupport + View + ViewFactory + ViewportLayout + ViewportUI + VirtualMachineError + Visibility + VisibilityHelper + VoiceStatus + Void + VolatileImage + WCharSeqHelper + WCharSeqHolder + WStringSeqHelper + WStringSeqHolder + WStringValueHelper + WeakHashMap + WeakReference + WebRowSet + WildcardType + Window + WindowAdapter + WindowConstants + WindowEvent + WindowFocusListener + WindowListener + WindowStateListener + WrappedPlainView + WritableByteChannel + WritableRaster + WritableRenderedImage + WriteAbortedException + Writer + WrongAdapter + WrongAdapterHelper + WrongPolicy + WrongPolicyHelper + WrongTransaction + WrongTransactionHelper + WrongTransactionHolder + X500Principal + X500PrivateCredential + X509CRL + X509CRLEntry + X509CRLSelector + X509CertSelector + X509Certificate + X509Certificate + X509EncodedKeySpec + X509ExtendedKeyManager + X509Extension + X509KeyManager + X509TrustManager + XAConnection + XADataSource + XAException + XAResource + XMLConstants + XMLDecoder + XMLEncoder + XMLFilter + XMLFilterImpl + XMLFormatter + XMLGregorianCalendar + XMLParseException + XMLReader + XMLReaderAdapter + XMLReaderFactory + XPath + XPathConstants + XPathException + XPathExpression + XPathExpressionException + XPathFactory + XPathFactoryConfigurationException + XPathFunction + XPathFunctionException + XPathFunctionResolver + XPathVariableResolver + Xid + XmlReader + XmlWriter + ZipEntry + ZipException + ZipFile + ZipInputStream + ZipOutputStream + ZoneView + _BindingIteratorImplBase + _BindingIteratorStub + _DynAnyFactoryStub + _DynAnyStub + _DynArrayStub + _DynEnumStub + _DynFixedStub + _DynSequenceStub + _DynStructStub + _DynUnionStub + _DynValueStub + _IDLTypeStub + _NamingContextExtStub + _NamingContextImplBase + _NamingContextStub + _PolicyStub + _Remote_Stub + _ServantActivatorStub + _ServantLocatorStub + + + + AbstractAnnotationValueVisitor6 + AbstractElementVisitor6 + AbstractMarshallerImpl + AbstractOwnableSynchronizer + AbstractProcessor + AbstractQueuedLongSynchronizer + AbstractScriptEngine + AbstractTypeVisitor6 + AbstractUnmarshallerImpl + ActivationDataFlavor + AlgorithmMethod + AnnotationMirror + AnnotationValue + AnnotationValueVisitor + ArrayDeque + AsyncHandler + AttachmentMarshaller + AttachmentPart + AttachmentUnmarshaller + Binder + BindingProvider + Bindings + BlockingDeque + BreakIteratorProvider + C14NMethodParameterSpec + CanonicalizationMethod + Characters + ClientInfoStatus + CollapsedStringAdapter + CollatorProvider + CommandInfo + CommandMap + CommandObject + CommonDataSource + Compilable + CompiledScript + Completion + Completions + CompositeDataInvocationHandler + CompositeDataView + ConcurrentNavigableMap + ConcurrentSkipListMap + ConcurrentSkipListSet + ConfigurationSpi + Console + ConstructorProperties + CookieManager + CookiePolicy + CookieStore + CurrencyNameProvider + Data + DataContentHandler + DataContentHandlerFactory + DataHandler + DatatypeConverter + DatatypeConverterInterface + DateFormatProvider + DateFormatSymbolsProvider + DecimalFormatSymbolsProvider + DeclaredType + DefaultRowSorter + DefaultValidationEventHandler + DeflaterInputStream + Deque + DescriptorKey + DescriptorRead + Desktop + Detail + DetailEntry + Diagnostic + DiagnosticCollector + DiagnosticListener + DigestMethod + DigestMethodParameterSpec + Dispatch + DOMCryptoContext + DomHandler + DOMSignContext + DOMStructure + DOMURIReference + DOMValidateContext + DropMode + ElementFilter + ElementKind + ElementKindVisitor6 + Elements + ElementScanner6 + ElementVisitor + EndDocument + EndElement + Endpoint + EntityDeclaration + ErrorType + EventException + EventFilter + EventReaderDelegate + EventTarget + ExcC14NParameterSpec + ExecutableElement + ExecutableType + FileDataSource + FileNameExtensionFilter + FileObject + Filer + FilerException + FileTypeMap + ForwardingFileObject + ForwardingJavaFileManager + ForwardingJavaFileObject + Generated + GridBagLayoutInfo + GroupLayout + HandlerChain + HandlerResolver + HexBinaryAdapter + HMACParameterSpec + Holder + HTTPBinding + HttpCookie + HTTPException + IDN + ImmutableDescriptor + InflaterOutputStream + InitParam + InterfaceAddress + Invocable + IOError + JavaCompiler + JavaFileManager + JavaFileObject + JAXBContext + JAXBElement + JAXBException + JAXBIntrospector + JAXBResult + JAXBSource + JMX + JMXAddressable + KeyInfo + KeyInfoFactory + KeyName + KeySelector + KeySelectorException + KeySelectorResult + KeyValue + LayoutPath + LayoutStyle + LinearGradientPaint + LinkedBlockingDeque + LocaleNameProvider + LocaleServiceProvider + Location + LockInfo + LogicalHandler + LogicalMessage + LogicalMessageContext + MailcapCommandMap + Marshaller + MessageContext + MessageFactory + Messager + MimeHeader + MimeHeaders + MimeType + MimeTypeParameterList + MimetypesFileTypeMap + MirroredTypeException + MirroredTypesException + MLetContent + MonitorInfo + MultipleGradientPaint + MutationEvent + MXBean + Namespace + NavigableMap + NavigableSet + NClob + NestingKind + NodeSetData + NormalizedStringAdapter + Normalizer + NoSuchMechanismException + NotationDeclaration + NotIdentifiableEvent + NotIdentifiableEventImpl + NoType + NullType + NumberFormatProvider + OctetStreamData + Oneway + OptionChecker + PackageElement + ParseConversionEvent + ParseConversionEventImpl + Path2D + PGPData + PolicySpi + PortInfo + PostConstruct + PreDestroy + PrimitiveType + PrintConversionEvent + PrintConversionEventImpl + ProcessingEnvironment + Processor + PropertyException + RadialGradientPaint + ReferenceType + RequestWrapper + Resource + Resources + Response + ResponseWrapper + RetrievalMethod + RoundEnvironment + RowFilter + RowId + RowIdLifetime + RowSorter + RowSorterEvent + RowSorterListener + RunnableFuture + RunnableScheduledFuture + SAAJMetaFactory + SAAJResult + SchemaOutputResolver + ScriptContext + ScriptEngine + ScriptEngineFactory + ScriptEngineManager + ScriptException + Service + ServiceConfigurationError + ServiceDelegate + ServiceLoader + ServiceMode + SignatureMethod + SignatureMethodParameterSpec + SignatureProperties + SignatureProperty + SignedInfo + SimpleAnnotationValueVisitor6 + SimpleBindings + SimpleElementVisitor6 + SimpleJavaFileObject + SimpleScriptContext + SimpleTypeVisitor6 + SOAPBinding + SOAPBinding + SOAPBody + SOAPBodyElement + SOAPConnection + SOAPConnectionFactory + SOAPConstants + SOAPElement + SOAPElementFactory + SOAPEnvelope + SOAPException + SOAPFactory + SOAPFault + SOAPFaultElement + SOAPFaultException + SOAPHandler + SOAPHeader + SOAPHeaderElement + SOAPMessage + SOAPMessageContext + SOAPMessageHandler + SOAPMessageHandlers + SOAPPart + SortOrder + SourceVersion + SplashScreen + SQLClientInfoException + SQLDataException + SQLFeatureNotSupportedException + SQLIntegrityConstraintViolationException + SQLInvalidAuthorizationSpecException + SQLNonTransientConnectionException + SQLNonTransientException + SQLRecoverableException + SQLSyntaxErrorException + SQLTimeoutException + SQLTransactionRollbackException + SQLTransientConnectionException + SQLTransientException + SQLXML + SSLParameters + StandardEmitterMBean + StandardJavaFileManager + StandardLocation + StartDocument + StartElement + StatementEvent + StatementEventListener + StAXResult + StAXSource + StreamFilter + StreamReaderDelegate + SupportedAnnotationTypes + SupportedOptions + SupportedSourceVersion + SwingWorker + SystemTray + TableRowSorter + TableStringConverter + TimeZoneNameProvider + Tool + ToolProvider + Transform + TransformException + TransformParameterSpec + TransformService + TrayIcon + TypeConstraintException + TypeElement + TypeKind + TypeKindVisitor6 + TypeMirror + TypeParameterElement + TypeVisitor + UIEvent + UnknownAnnotationValueException + UnknownElementException + UnknownTypeException + Unmarshaller + UnmarshallerHandler + UnsupportedDataTypeException + URIDereferencer + URIParameter + URIReference + URIReferenceException + URLDataSource + ValidationEvent + ValidationEventCollector + ValidationEventHandler + ValidationEventImpl + ValidationEventLocator + ValidationEventLocatorImpl + ValidationException + VariableElement + W3CDomHandler + WebEndpoint + WebFault + WebMethod + WebParam + WebResult + WebService + WebServiceClient + WebServiceContext + WebServiceException + WebServicePermission + WebServiceProvider + WebServiceRef + WebServiceRefs + Wrapper + X509Data + X509IssuerSerial + XmlAccessOrder + XmlAccessorOrder + XmlAccessorType + XmlAccessType + XmlAdapter + XmlAnyAttribute + XmlAnyElement + XmlAttachmentRef + XmlAttribute + XMLCryptoContext + XmlElement + XmlElementDecl + XmlElementRef + XmlElementRefs + XmlElements + XmlElementWrapper + XmlEnum + XmlEnumValue + XMLEvent + XMLEventAllocator + XMLEventConsumer + XMLEventFactory + XMLEventReader + XMLEventWriter + XmlID + XmlIDREF + XmlInlineBinaryData + XMLInputFactory + XmlJavaTypeAdapter + XmlJavaTypeAdapters + XmlList + XmlMimeType + XmlMixed + XmlNs + XmlNsForm + XMLObject + XMLOutputFactory + XmlRegistry + XMLReporter + XMLResolver + XmlRootElement + XmlSchema + XmlSchemaType + XmlSchemaTypes + XMLSignature + XMLSignatureException + XMLSignatureFactory + XMLSignContext + XMLStreamConstants + XMLStreamException + XMLStreamReader + XMLStreamWriter + XMLStructure + XmlTransient + XmlType + XMLValidateContext + XmlValue + XPathFilter2ParameterSpec + XPathFilterParameterSpec + XPathType + XSLTTransformParameterSpec + ZipError + + + + + as + in + + abstract + break + case + catch + class + continue + default + do + else + enum + extends + false + finally + for + goto + if + implements + instanceof + @interface + interface + native + new + null + private + protected + public + return + super + strictfp + switch + synchronized + this + throws + throw + transient + true + try + volatile + while + + + def + + boolean + byte + char + const + double + final + float + int + long + short + static + void + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/haml.xml b/src/data/extra/syntax-highlighting/syntax/haml.xml new file mode 100644 index 00000000..1358eddd --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/haml.xml @@ -0,0 +1,500 @@ + + + + + + + + + + + + + + + + + BEGIN + END + and + begin + break + case + defined? + do + else + elsif + end + ensure + for + if + in + include + next + not + or + redo + rescue + retry + return + then + unless + until + when + while + yield + + + + private_class_method + private + protected + public_class_method + public + + + + attr_reader + attr_writer + attr_accessor + + + + alias + module + class + def + undef + + + + self + super + nil + false + true + caller + __FILE__ + __LINE__ + + + + $stdout + $defout + $stderr + $deferr + $stdin + + + + + + abort + at_exit + autoload + autoload? + binding + block_given? + callcc + caller + catch + chomp + chomp! + chop + chop! + eval + exec + exit + exit! + fail + fork + format + getc + gets + global_variables + gsub + gsub! + iterator? + lambda + load + local_variables + loop + method_missing + open + p + print + printf + proc + putc + puts + raise + rand + readline + readlines + require + scan + select + set_trace_func + sleep + split + sprintf + srand + sub + sub! + syscall + system + test + throw + trace_var + trap + untrace_var + warn + + + + TODO + FIXME + NOTE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/hamlet.xml b/src/data/extra/syntax-highlighting/syntax/hamlet.xml new file mode 100644 index 00000000..9d5b61bc --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/hamlet.xml @@ -0,0 +1,104 @@ + + + +]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/haskell.xml b/src/data/extra/syntax-highlighting/syntax/haskell.xml new file mode 100644 index 00000000..20bb33db --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/haskell.xml @@ -0,0 +1,649 @@ + + + + + + case + class + data + deriving + do + else + family + forall + if + in + infixl + infixr + instance + let + module + newtype + of + pattern + primitive + then + type + where + + + abs + acos + acosh + all + and + any + appendFile + approxRational + asTypeOf + asin + asinh + atan + atan2 + atanh + basicIORun + break + catch + ceiling + chr + compare + concat + concatMap + const + cos + cosh + curry + cycle + decodeFloat + denominator + digitToInt + div + divMod + drop + dropWhile + either + elem + encodeFloat + enumFrom + enumFromThen + enumFromThenTo + enumFromTo + error + even + exp + exponent + fail + filter + flip + floatDigits + floatRadix + floatRange + floor + fmap + foldl + foldl1 + foldMap + foldr + foldr1 + fromDouble + fromEnum + fromInt + fromInteger + fromIntegral + fromRational + fst + gcd + getChar + getContents + getLine + group + head + id + inRange + index + init + intToDigit + interact + ioError + isAlpha + isAlphaNum + isAscii + isControl + isDenormalized + isDigit + isHexDigit + isIEEE + isInfinite + isLower + isNaN + isNegativeZero + isOctDigit + isPrint + isSpace + isUpper + iterate + last + lcm + length + lex + lexDigits + lexLitChar + lines + log + logBase + lookup + map + mappend + mapM + mapM_ + max + maxBound + maximum + maybe + mconcat + mempty + min + minBound + minimum + mod + negate + not + notElem + null + numerator + odd + or + ord + otherwise + pack + pi + pred + primExitWith + print + product + properFraction + pure + putChar + putStr + putStrLn + quot + quotRem + range + rangeSize + read + readDec + readFile + readFloat + readHex + readIO + readInt + readList + readLitChar + readLn + readOct + readParen + readSigned + reads + readsPrec + realToFrac + recip + rem + repeat + replicate + return + reverse + round + scaleFloat + scanl + scanl1 + scanr + scanr1 + seq + sequence + sequenceA + sequence_ + show + showChar + showInt + showList + showLitChar + showParen + showSigned + showString + shows + showsPrec + significand + signum + sin + sinh + snd + sort + span + splitAt + sqrt + subtract + succ + sum + tail + take + takeWhile + tan + tanh + threadToIOResult + toEnum + toInt + toInteger + toLower + toRational + toUpper + traverse + truncate + uncurry + undefined + unlines + until + unwords + unzip + unzip3 + userError + words + writeFile + zip + zip3 + zipWith + zipWith3 + + + Applicative + Bounded + Enum + Eq + Floating + Foldable + Fractional + Functor + Integral + Ix + Monad + Monoid + Num + Ord + Read + Real + RealFloat + RealFrac + Show + Traversable + + + Bool + ByteString + Char + Double + Either + FilePath + Float + Int + Integer + IO + IOError + Maybe + Ordering + Ratio + Rational + ReadS + ShowS + String + Word + + + False + True + Left + Right + Just + Nothing + EQ + LT + GT + + + defined + if + ifdef + ifndef + include + undef + + + qualified + lib + prefix + as + with + call + pure + unsafe + get + set + foreign + stable + nocode + + + as + qualified + hiding + + + AllowAmbiguousTypes + ApplicativeDo + Arrows + AutoDeriveTypeable + BangPatterns + BinaryLiterals + CApiFFI + CPP + ConstrainedClassMethods + ConstraintKinds + DataKinds + DatatypeContexts + DefaultSignatures + DeriveAnyClass + DeriveDataTypeable + DeriveFoldable + DeriveFunctor + DeriveGeneric + DeriveLift + DeriveTraversable + DisambiguateRecordFields + DoAndIfThenElse + DoRec + DuplicateRecordFields + EmptyCase + EmptyDataDecls + ExistentialQuantification + ExplicitForAll + ExplicitNamespaces + ExtendedDefaultRules + ExtensibleRecords + FlexibleContexts + FlexibleInstances + ForeignFunctionInterface + FunctionalDependencies + GADTSyntax + GADTs + GHCForeignImportPrim + GeneralizedNewtypeDeriving + Generics + HereDocuments + ImplicitParams + ImplicitPrelude + ImpredicativeTypes + IncoherentInstances + InstanceSigs + InterruptibleFFI + JavaScriptFFI + KindSignatures + LambdaCase + LiberalTypeSynonyms + MagicHash + MonadComprehensions + MonadFailDesugaring + MonoLocalBinds + MonoPatBinds + MonomorphismRestriction + MultiParamTypeClasses + MultiWayIf + NPlusKPatterns + NamedFieldPuns + NamedWildCards + NegativeLiterals + NewQualifiedOperators + NondecreasingIndentation + NullaryTypeClasses + NumDecimals + OverlappingInstances + OverloadedLabels + OverloadedLists + OverloadedStrings + PackageImports + ParallelArrays + ParallelListComp + PartialTypeSignatures + PatternGuards + PatternSignatures + PatternSynonyms + PolyKinds + PolymorphicComponents + PostfixOperators + QuasiQuotes + Rank2Types + RankNTypes + RebindableSyntax + RecordPuns + RecordWildCards + RecursiveDo + RegularPatterns + RelaxedPolyRec + RestrictedTypeSynonyms + RoleAnnotations + Safe + SafeImports + ScopedTypeVariables + StandaloneDeriving + StaticPointers + Strict + StrictData + TemplateHaskell + TemplateHaskellQuotes + TraditionalRecordSyntax + TransformListComp + Trustworthy + TupleSections + TypeApplications + TypeFamilies + TypeInType + TypeOperators + TypeSynonymInstances + UnboxedTuples + UndecidableInstances + UndecidableSuperClasses + UnicodeSyntax + UnliftedFFITypes + Unsafe + ViewPatterns + XmlSyntax + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/haxe.xml b/src/data/extra/syntax-highlighting/syntax/haxe.xml new file mode 100644 index 00000000..3c8cd0d4 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/haxe.xml @@ -0,0 +1,181 @@ + + + + + + + + + break + + case + cast + catch + class + continue + + default + + else + enum + extends + + false + for + function + + if + implements + in + inline + interface + + new + null + + override + + private + public + + return + + static + super + switch + + this + throw + trace + true + try + typedef + + untyped + + var + + while + + + + + package + import + + + + Array + Void + Bool + Int + UInt + Float + Dynamic + String + List + Error + Unknown + Type + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/html.xml b/src/data/extra/syntax-highlighting/syntax/html.xml new file mode 100644 index 00000000..d67efb17 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/html.xml @@ -0,0 +1,307 @@ + + + + +]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/hunspell-aff.xml b/src/data/extra/syntax-highlighting/syntax/hunspell-aff.xml new file mode 100644 index 00000000..843d5051 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/hunspell-aff.xml @@ -0,0 +1,239 @@ + + + + + + + + + + + SET + FLAG + LANG + + + + TRY + WORDCHARS + IGNORE + + + + BREAK + COMPOUNDSYLLABLE + + + + SFX + PFX + + + + + COMPOUNDRULE + PHONE + ICONV + OCONV + KEY + MAP + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/hunspell-dat.xml b/src/data/extra/syntax-highlighting/syntax/hunspell-dat.xml new file mode 100644 index 00000000..a57fd589 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/hunspell-dat.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/hunspell-dic.xml b/src/data/extra/syntax-highlighting/syntax/hunspell-dic.xml new file mode 100644 index 00000000..d714d8dc --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/hunspell-dic.xml @@ -0,0 +1,85 @@ + + + + + + + + LEFTHYPHENMIN + RIGHTHYPHENMIN + COMPOUNDLEFTHYPHENMIN + COMPOUNDRIGHTHYPHENMIN + NEXTWORD + NOHYPHEN + NEXTLEVEL + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/hunspell-idx.xml b/src/data/extra/syntax-highlighting/syntax/hunspell-idx.xml new file mode 100644 index 00000000..27ba59ac --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/hunspell-idx.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/idconsole.xml b/src/data/extra/syntax-highlighting/syntax/idconsole.xml new file mode 100644 index 00000000..5464bd95 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/idconsole.xml @@ -0,0 +1,2145 @@ + + + + + + +ForceCloseComman +_config_com_baud +_config_com_modem +_vid_default_mode +_vid_default_mode_win +_vid_wait_override +_windowed_mouse +addip +addressbook +adjust_crosshair +advancedupdate +allow_download +allow_download_maps +allow_download_models +allow_download_skins +allow_download_sounds +allskins +appenddemo +autosave +ban +banClient +banUser +banid +baseskin +begin +bf +bgetmod +bindlist +block_switch +bottomcolor +buyNow +buyequip +cache_endgather +cache_flush +cache_mapchange +cache_print +cache_profile +cache_setindex +cache_startgather +cache_usedfile +cancelselect +cd +centerview +changeVectors +changelevel +changelevel2 +changing +chase_active +cinematic +cl_deadbodyfilter +cl_gibfilter +cl_hightrack +cl_hudswap +cl_messages +cl_nodelta +cl_nolerp +cl_nopred +cl_predict_players +cl_rate +cl_sbar +cl_sbar_separator +cl_shownet +cl_sidespeed +cl_solid_players +cl_warncmd +cl_writecfg +clear +clearplayers +clientinfo +clientkick +cmd +cmdline +cmdlist +color +commands +condebug +condump +configstrings +confirm_quit +connect +contimes +coop +crash +credits +cropimages +crosshair +cvar_restart +cvarlist +d_mipcap +d_subdiv16 +deathmatch +delta_clear +delta_stats +demo +demolist +demomap +demos +developer +devmap +dir +disconnect +dlfile +dmoptions +download +drawradar +drop +dropclient +dumpuser +edict +edictcount +edicts +endmovie +entities +envmap +error +escape +exec +exit +fastsprites +fdir +filterban +firstperson +floodprot +floodprotmsg +flush +fly +force_centerview +fov +fraglogfile +freelook +freeze +front +fs_openedList +fs_referencedList +fullinfo +fullserverinfo +game +gameCompleteStatus +gamedir +gamemap +gameversion +getcertificate +gfxinfo +gg +gib +gibload +gibstats +give +gl_affinemodels +gl_clear +gl_colorlights +gl_constretch +gl_cull +gl_dlight_lightmap +gl_dlight_polyblend +gl_dlight_smooth +gl_fb_bmodels +gl_fb_models +gl_finish +gl_fires +gl_flashblend +gl_keeptjunctions +gl_lerp_anim +gl_lightmode +gl_max_size +gl_multitexture +gl_nobind +gl_nocolors +gl_picmip +gl_playermip +gl_polyblend +gl_reportjunctions +gl_sky_clip +gl_skymultipass +gl_smoothmodels +gl_texsort +gl_texturemode +gl_triplebuffer +gl_ztrick +globalservers +god +gun +gun_model +gun_next +gun_prev +gunsmoke +heartbeat +help +hideconsole +hideradar +host_speeds +hostname +hpkextract +hpklist +hpkremove +hpkval +hud_centerid +imagelist +impulse +imt +in_bind +in_paste_buffer +in_restart +in_unbind +info +interp +invdrop +inven +invnext +invnextp +invnextw +invprev +invprevp +invprevw +invuse +joinserver +joy +joy_advancedupdate +joy_enable +joyadvanced +joyadvancedupdat +joyadvancedupdate +joyname +joystick +keys +kick +kill +killserver +lefthand +link +list +listdemo +listen +listid +listip +listmaps +load +loadas8bit +loadgame +loading +loadsky +loadtranslations +loc +localinfo +localservers +log +logaddress +logfile +lookspring +lookstrafe +m_filter +main +map +map_restart +maplist +maps +maxplayers +max_smokepuffs +max_shells +mcache +meminfo +menu +menu_addressbook +menu_credits +menu_help +menu_keys +menu_load +menu_loadgame +menu_main +menu_multiplayer +menu_options +menu_playerconfig +menu_quit +menu_save +menu_savegame +menu_setup +menu_select +menu_singleplayer +menu_startserver +menu_video +menu_dmoptions +menu_game +menu_joinserver +messagemode +messagemode2 +messagemode3 +messagemode4 +model +modelist +modellist +msg +multiplayer +music +name +net_stats +new +next +nextul +nightvision +no_pogo_stick +noaim +noclip +noexit +nomonsters +noskins +nosound +notarget +options +packet +password +path +pausable +pause +paused +ping +pingservers +play +playdemo +playerconfig +players +playvol +pushlatency +pointfile +ppdemostart +pr_boundscheck +precache +prespawn +prev +profile +profilequit +prog +quit +r_drawentities +r_drawflat +r_draworder +r_drawviewmodel +r_dspeeds +r_dynamic +r_fullbright +r_lightmap +r_netgraph +r_netgraph_box +r_norefresh +r_novis +r_numedges +r_numsurfs +r_particles +r_polymodelstats +r_reportsurfout +r_shadows +r_speeds +r_timegraph +r_wateralpha +r_waterripple +r_waterwarp +r_zgraph +rcon +rcon_password +reconnect +record +registered +reload +removedemo +removeid +removeip +rerecord +reset +resetrcon +restart +retry +s_disable_a3d +s_enable_a3d +s_info +s_list +s_stop +samelevel +save +savegame +savetranslations +score +screenshot +screenshotJPEG +sectorlist +sendents +serverinfo +serverprofile +serverrecord +serverstatus +serverstop +setRecommended +setdemoinfo +setenv +setinfo +setmaster +setrom +shaderlist +show_fps +show_time +showdrop +showinfo +showip +showpackets +showpause +showram +showturtle +shutdownserver +singlePlayLink +sizedown +sizeup +skill +skin +skinlist +skins +sky +skyboxlist +slist +slot1 +slot10 +slot2 +slot3 +slot4 +slot5 +slot6 +slot7 +slot8 +slot9 +snap +snapall +snapshot +snapto +snd +snd_noextraupdate +snd_restart +snd_show +soundfade +soundinfo +soundlist +spawn +spdevmap +speak +special +specmode +spectator +spectator_password +spk +spmap +startLimboMode +startSingleplayer +startdemos +startmovie +startserver +stat +stats +status +stop +stopLimboMode +stopdemo +stoprecord +stopsound +stopul +streamingsound +stuffcmd +stuffcmds +sv +sv_allow_log +sv_allow_pings +sv_allow_status +sv_gamedir +sv_highchars +sv_mapcheck +sv_nostep +sv_spectatormaxspeed +sv_spetalk +sv_maplist +swapdemo +sys_cpuid +sys_dead_sleep +sys_extrasleep +sys_nostdout +systeminfo +taginfo +team +teamplay +tell +test +test2 +time +thirdperson +timedemo +timeleft +timerefresh +toggle +togglebrowser +togglechat +toggleconsole +togglemenu +topcolor +touchFile +trackplayer +ui_restart +unalias +unbindall +updatehunkusage +updatescreen +upload +use +user +userinfo +users +v_centerspeed +v_cshift +v_idlescale +version +vid +vid_center +vid_config_x +vid_describecurrentmode +vid_describemode +vid_describemodes +vid_forcemode +vid_fullscreen +vid_fullscreen_mode +vid_minimize +vid_nopageflip +vid_nummodes +vid_restart +vid_stretch_by_2 +vid_testmode +vid_windowed +vid_windowed_mode +vid_front +video +viewframe +viewmodel +viewnext +viewpos +viewprev +vminfo +vmprofile +voice_showbanned +votemap +vstr +wait +watervis +wave +weapon +weapon_knife +weaplast +weapnext +weapprev +windowsr_drawentities +writecfg +writeconfig +writeid +writeip +z_stats + + + + +ah +ActiveAction +_cl_color +_cl_name +_config_com_baud +_config_com_irq +_config_com_modem +_config_com_port +_config_modem_clear +_config_modem_dialtype +_config_modem_hangup +_config_modem_init +_snd_mixahead +_vid_default_mode +_vid_default_mode_win +_vid_wait_override +_windowed_mouse +address +adr +adr0 +adr1 +adr2 +adr3 +adr4 +adr5 +adr6 +adr7 +adr8 +advanced +advaxisr +advaxisu +advaxisv +advaxisx +advaxisy +advaxisz +airaccelerate +allow +allow_download_players +ambient_fade +ambient_level +anglespeedkey +arch +array +arrays +att +auto +autoskins +b +bgmbuffer +bgmvolume +bit +bitdepth +blend +bob +bob_pitch +bob_roll +bob_up +bot_aasoptimize +bot_challenge +bot_debug +bot_developer +bot_enable +bot_fastchat +bot_forceclustering +bot_forcereachability +bot_forcewrite +bot_grapple +bot_groundonly +bot_interbreedbots +bot_interbreedchar +bot_interbreedcycle +bot_interbreedwrite +bot_maxdebugpolys +bot_miniplayers +bot_minplayers +bot_nochat +bot_pause +bot_reachability +bot_reloadcharacters +bot_report +bot_rocketjump +bot_saveroutingcache +bot_testclusters +bot_testichat +bot_testrchat +bot_testsolid +bot_thinktime +bot_visualizejumppads +brighten +brightness +broken +cd +cd_loopcount +cd_looptrack +cd_nocd +cd_plugin +centermove +centerspeed +centertime +cg_autoactivate +cg_autoswitch +cg_blinktime +cg_bloodTime +cg_bobpitch +cg_bobroll +cg_bobup +cg_brassTime +cg_cameraOrbitDelay +cg_clipboardName +cg_coronafardist +cg_coronas +cg_crosshairAlpha +cg_crosshairHealth +cg_crosshairSize +cg_crosshairX +cg_crosshairY +cg_currentSelectedPlayer +cg_currentSelectedPlayerName +cg_cursorHints +cg_cycleAllWeaps +cg_deferPlayers +cg_descriptiveText +cg_draw2D +cg_draw3dIcons +cg_drawAllWeaps +cg_drawAmmoWarning +cg_drawAttacker +cg_drawCompass +cg_drawCrosshair +cg_drawCrosshairNames +cg_drawCrosshairPickups +cg_drawFPGun +cg_drawFPS +cg_drawFrags +cg_drawGun +cg_drawIcons +cg_drawNotifyText +cg_drawRewards +cg_drawSnapshot +cg_drawSpreadScale +cg_drawStatus +cg_drawTeamOverlay +cg_drawTimer +cg_emptyswitch +cg_fov +cg_forcemodel +cg_gibs +cg_hudAlpha +cg_hudFiles +cg_lagometer +cg_marks +cg_marktime +cg_noplayeranims +cg_nopredict +cg_noTaunt +cg_noVoiceChats +cg_noVoiceText +cg_particleDist +cg_particleLOD +cg_popupLimboMenu +cg_predictItems +cg_quickMessageAlt +cg_railTrailTime +cg_recoilPitch +cg_reticleBrightness +cg_reticleType +cg_runpitch +cg_runroll +cg_scorePlums +cg_selectedPlayer +cg_selectedPlayerName +cg_shadows +cg_showblood +cg_simpleItems +cg_skybox +cg_stereoSeparation +cg_teamChatHeight +cg_teamChatTime +cg_teamChatsOnly +cg_thirdperson +cg_thirdpersonrange +cg_thirdPersonAngle +cg_useWeapsForZoom +cg_uselessNostalgia +cg_viewsize +cg_voiceSpriteTime +cg_weaponCycleDelay +cg_wolfparticles +cg_zoomDefaultBinoc +cg_zoomDefaultFG +cg_zoomDefaultSniper +cg_zoomDefaultSnooper +cg_zoomStepBinoc +cg_zoomStepFG +cg_zoomStepSnooper +cg_zoomfov +cg_zoomstepsniper +chase_active +chase_back +chase_right +chase_up +cheats +cl +cl_allowDownload +cl_anglespeedkey +cl_anonymous +cl_autoexec +cl_autoskins +cl_avidemo +cl_backspeed +cl_blend +cl_bob +cl_bobcycle +cl_bobup +cl_bypassMouseInput +cl_cacheGathering +cl_camera_maxpitch +cl_camera_maxyaw +cl_chasecam +cl_chatmode +cl_conXOffset +cl_crossx +cl_crossy +cl_cshift_bonus +cl_cshift_content +cl_cshift_damage +cl_cshift_powerup +cl_debugMove +cl_debugTranslation +cl_demospeed +cl_entities +cl_footsteps +cl_forceavidemo +cl_forwardspeed +cl_freelook +cl_freezeDemo +cl_gun +cl_hidefrags +cl_hightrack +cl_hudswap +cl_language +cl_lights +cl_maxPing +cl_maxfps +cl_maxpackets +cl_motd +cl_motdString +cl_mouseAccel +cl_movespeedkey +cl_nodelta +cl_nofake +cl_nolerp +cl_nopred +cl_noprint +cl_noskins +cl_packetdup +cl_parsesay +cl_particles +cl_paused +cl_pitchspeed +cl_predict +cl_predict_players +cl_predict_players2 +cl_observercrosshair +cl_quakerc +cl_rollangle +cl_rollspeed +cl_run +cl_running +cl_serverStatusResendTime +cl_showfps +cl_showSend +cl_showServerCommands +cl_showTimeDelta +cl_showmiss +cl_showmouserate +cl_shownet +cl_shownuments +cl_sidespeed +cl_stats +cl_stereo +cl_stereo_separation +cl_testblend +cl_testentities +cl_testlights +cl_testparticles +cl_timeNudge +cl_timeout +cl_upspeed +cl_verstring +cl_visibleClients +cl_vwep +cl_waitForFire +cl_wavefilerecord +cl_yawspeed +clear +clearcolor +clientport +cm_playerCurveClip +cmd_highchars +cmd_warncmd +cmdlist +color +color1 +color2 +com_blood +com_buildScript +com_cameraMode +com_dropsim +com_hunkMegs +com_hunkused +com_introplayed +com_maxfps +com_recommendedSet +com_showtrace +com_soundMegs +com_speeds +com_zoneMegs +compiled +con_debug +con_notifytime +con_restricted +conspeed +contrast +coop +crosshair +crosshaircolor +cull +d_mipcap +d_mipscale +deathmatch +debug_protocol +debuggraph +dedicated +devdll +developer +dlabs +dmflags +dm +down +download +drawall +drawbuffer +drawentities +drawflat +draworder +drawworld +driver +dspeeds +dynamic +easter_eggs +edgefriction +empty +enforcetime +entities +entlatency +ext +filter +filterban +finish +fixedtime +flashblend +flood +flood_msgs +flood_persecond +flood_waitdelay +flushmap +footsteps +forward +forwardsensitivity +forwardspeed +forwardthreshold +fov +fraglimit +freelook +fs_basegame +fs_basepath +fs_cdpath +fs_copyfiles +fs_debug +fs_game +fs_globalcfg +fs_homepath +fs_pluginpath +fs_restrict +fs_sharepath +fs_skinbase +fs_usercfg +fs_userpath +fullbright +fullscreen +g_allowvote +g_altStopwatchMode +g_arenasFile +g_blueTeam +g_botsFile +g_complaintlimit +g_currentRound +g_friendlyFire +g_gameskill +g_gametype +g_maxlives +g_minGameClients +g_missionStats +g_nextTimeLimit +g_noTeamSwitching +g_redTeam +g_select_empty +g_spAwards +g_spScores1 +g_spScores2 +g_spScores3 +g_spScores4 +g_spScores5 +g_spSkill +g_spVideos +g_userAlliedRespawnTime +g_userAxisRespawnTime +g_userTimeLimit +game +gamecfg +gamedate +gamedir +gamename +gamestate +gamma +gender +gender_auto +gl_3dlabs_broken +gl_allow_software +gl_bitdepth +gl_clear +gl_conalpha +gl_conspin +gl_cshiftpercent +gl_cull +gl_drawbuffer +gl_driver +gl_dynamic +gl_ext_compiled_vertex_array +gl_ext_multitexture +gl_ext_palettedtexture +gl_ext_pointparameters +gl_ext_swapinterval +gl_finish +gl_flashblend +gl_keeptjunctions +gl_lightmap +gl_lightmap_align +gl_lightmap_subimage +gl_lockpvs +gl_log +gl_max_size +gl_mesh_cache +gl_mode +gl_modulate +gl_monolightmap +gl_nobind +gl_nocolors +gl_nosubimage +gl_occlusion +gl_particle_att_a +gl_particle_att_b +gl_particle_att_c +gl_particle_max_size +gl_particle_min_size +gl_particle_mip +gl_particle_size +gl_picmip +gl_playermip +gl_polyblend +gl_reporttjunctions +gl_round_down +gl_saturatelighting +gl_screenshot_byte_swap +gl_shadows +gl_showtris +gl_sky_debug +gl_sky_divide +gl_skymip +gl_smoothmodels +gl_subdivide_size +gl_swapinterval +gl_texsort +gl_texturealphamode +gl_texturemode +gl_texturesolidmode +gl_triplebuffer +gl_vertex_arrays +gl_ztrick +graphheight +graphscale +graphshift +gravity +gun +gun_x +gun_y +gun_z +hand +handicap +head +headModel +headmodel +host +host_framerate +host_speeds +hostname +hostport +hud_fastswitch +in +in_amp +in_bind_imt +in_debugjoystick +in_dga +in_dga_mouseaccel +in_dgamouse +in_grab +in_joystick +in_midi +in_mouse +in_mouse_amp +in_mouse_filter +in_mouse_pre_amp +in_pre_amp +initsound +intensity +ip +ip_clientport +ip_hostport +ipx +ipx_clientport +ipx_hostport +journal +joy +joy_advanced +joy_advaxisr +joy_advaxisu +joy_advaxisv +joy_advaxisx +joy_advaxisy +joy_advaxisz +joy_amp +joy_device +joy_forwardsensitivity +joy_forwardthreshold +joy_name +joy_pitchsensitivity +joy_pitchthreshold +joy_pre_amp +joy_sensitivity +joy_sidesensitivity +joy_sidethreshold +joy_threshold +joy_upsensitivity +joy_upthreshold +joy_yawsensitivity +joy_yawthreshold +joyadvanced +joyadvaxisr +joyadvaxisu +joyadvaxisv +joyadvaxisx +joyadvaxisy +joyadvaxisz +joyaxis1 +joyaxis2 +joyaxis3 +joyaxis4 +joyaxis5 +joyaxis6 +joyaxis7 +joyaxis8 +joyforwardsensitivity +joyforwardthreshold +joyname +joypitchsensitivity +joypitchthreshold +joysidesensitivity +joysidethreshold +joystick +joywwhack1 +joywwhack2 +joyyawsensitivity +joyyawthreshold +khz +lcd_x +lcd_yaw +lerpmodels +lightmap +lights +limit +listen +loadas +loadas8bit +localid +lockpvs +log +log_stats +logfile +lookspring +lookstrafe +loopcount +looptrack +m_filter +m_forward +m_pitch +m_side +m_yaw +mapname +maps +max +maxclients +maxedges +maxentities +maxfps +maxplayers +maxspectators +maxsurfs +maxvelocity +min +mipcap +mipscale +mixahead +mode +model +models +modex +modulate +monolightmap +mouse +mp_currentPlayerType +mp_currentTeam +mp_playerType +mp_team +mp_weapon +mp_autokick +mp_autoteambalance +mp_c4timer +mp_flashlight +mp_footsteps +mp_forcechasecam +mp_freezetime +mp_friendlyfire +mp_hostagepenalty +mp_limitteams +mp_logmessages +mp_mapvoteration +mp_roundtime +mp_timelimit +mp_tkpunish +msg +msgs +multitexture +name +net_graph +net_ip +net_messagetimeout +net_noudp +net_port +net_qport +net_restart +netdosexpire +netdosvalues +netgraph +nextdemo +nextmap +nextserver +noalttab +nobind +nocd +nocull +nodelta +noexit +nomonsters +norefresh +noreload +noskins +nosound +nosubimage +novis +palettedtexture +particle +particles +password +pausable +persecond +picmip +pitch +pitchsensitivity +pitchspeed +pitchthreshold +playermip +players +pointparameters +polyblend +polymodelstats +port +pr_checkextensions +pr_deadbeef_ents +pr_deadbeef_locals +pr_debug +pr_source_path +precache +predict +primary +printspeed +protocol +public +pushlatency +qport +r_aliastransadj +r_aliastransbase +r_allowExtensions +r_allowSoftwareGL +r_ambient +r_ambientScale +r_bonesDebug +r_cache +r_cacheModels +r_cacheShaders +r_clear +r_clearcolor +r_colorMipLevels +r_colorbits +r_compressModels +r_customaspect +r_customheight +r_customwidth +r_debugSort +r_debugSurface +r_debuglight +r_depthbits +r_detailtextures +r_directedScale +r_displayRefresh +r_dlightBacks +r_dlight_lightmap +r_dlight_max +r_drawBuffer +r_drawSun +r_drawentities +r_drawexplosions +r_drawflat +r_draworder +r_drawviewmodel +r_drawworld +r_dspeeds +r_dynamic +r_dynamiclight +r_explosionclip +r_exportCompressedModels +r_ext_compiled_vertex_array +r_ext_compress_textures +r_ext_compressed_textures +r_ext_gamma_control +r_ext_multitexture +r_ext_texture_env_add +r_facePlaneCull +r_fastsky +r_finish +r_firecolor +r_flareFade +r_flareSize +r_flares +r_fullbright +r_fullscreen +r_gamma +r_glDriver +r_glIgnoreWicked3D +r_graphheight +r_highQualit +r_highQualityVideo +r_ignore +r_ignoreFastPath +r_ignoreGLErrors +r_ignorehwgamma +r_inGameVideo +r_intensity +r_lastValidRenderer +r_lerpmodels +r_lightmap +r_lightmap_components +r_lockpvs +r_lodCurveError +r_lodbias +r_lodscale +r_logFile +r_lowMemTextureSize +r_lowMemTextureThreshold +r_mapOverBrightBits +r_maxedges +r_maxpolys +r_maxpolyverts +r_maxsurfs +r_measureOverdraw +r_mirroralpha +r_mode +r_netgraph +r_netgraph_alpha +r_nobind +r_nocull +r_nocurves +r_noportals +r_norefresh +r_novis +r_numedges +r_numsurfs +r_offsetfactor +r_offsetunits +r_overBrightBits +r_particles_max +r_particles_style +r_picmip +r_picmip2 +r_polymodelstats +r_portalOnly +r_preloadTextures +r_previousglDriver +r_primitives +r_printShaders +r_railCoreWidth +r_railSegmentLength +r_railWidth +r_reportedgeout +r_reportsurfout +r_rmse +r_roundImagesDown +r_saveFontData +r_shadows +r_showImages +r_showSmp +r_showcluster +r_shownormals +r_showsky +r_showtris +r_simpleMipMaps +r_singleShader +r_skipBackEnd +r_skyname +r_smp +r_speeds +r_stencilbits +r_stereo +r_subdivisions +r_swapInterval +r_textureMode +r_texturebits +r_timegraph +r_uiFullScreen +r_verbose +r_vertexLight +r_wateralpha +r_waterwarp +r_wolffog +r_zfar +r_znear +rate +rcon +rconAddress +rconPassword +rcon_address +rcon_password +reconnect +ref +registered +reportedgeout +reportsurfout +roll +rollangle +rollspeed +round +run +run_pitch +run_roll +s_compression +s_defaultsound +s_doppler +s_initsound +s_khz +s_loadas8bit +s_mixPreStep +s_mixahead +s_musicvolume +s_mute +s_nocompressed +s_usingA3D +s_primary +s_separation +s_show +s_testsound +s_volume +s_wavonly +samelevel +saturatelighting +saved1 +saved2 +saved3 +saved4 +savedgamecfg +scr +scr_centertime +scr_consize +scr_conspeed +scr_drawall +scr_ofsx +scr_ofsy +scr_ofsz +scr_printspeed +scr_showpause +scr_showturtle +scratch1 +scratch2 +scratch3 +scratch4 +screenshot +select +sensitivity +separation +server1 +server10 +server11 +server12 +server13 +server14 +server15 +server16 +server2 +server3 +server4 +server5 +server6 +server7 +server8 +server9 +serverprofile +sex +shadows +show +showclamp +showdrop +showmiss +shownet +showpackets +showpause +showram +showtrace +showtris +showturtle +side +sidesensitivity +sidespeed +sidethreshold +size +skill +skin +skymip +snaps +snd_bits +snd_device +snd_interp +snd_loadas8bit +snd_mixahead +snd_noextraupdate +snd_oss_mmaped +snd_output +snd_phasesep +snd_rate +snd_render +snd_show +snd_stereo +snd_volumesep +sndbits +sndchannels +snddevice +sndspeed +software +sounds +spectator +spectator_password +speeds +stats +stereo +stipplealpha +surfcacheoverride +sv +sv_accelerate +sv_aim +sv_airaccelerate +sv_allowAnonymous +sv_allowDownload +sv_cheats +sv_enforcetime +sv_floodProtect +sv_fps +sv_friction +sv_gravity +sv_hostname +sv_idealpitchscale +sv_keywords +sv_killserver +sv_mapChecksum +sv_master1 +sv_master2 +sv_master3 +sv_master4 +sv_master5 +sv_maxPing +sv_maxRate +sv_maxclients +sv_maxrate +sv_maxspeed +sv_maxtic +sv_maxvelocity +sv_minPing +sv_minqfversion +sv_mintic +sv_netdosprotect +sv_noreload +sv_nostep +sv_onlyVisibleClients +sv_padPackets +sv_pakNames +sv_paks +sv_paused +sv_phs +sv_privateClients +sv_privatePassword +sv_progs +sv_pure +sv_reconnect_limit +sv_reconnectlimit +sv_referencedPakNames +sv_referencedPaks +sv_restartround +sv_rollangle +sv_rollspeed +sv_running +sv_serverid +sv_showAverageBPS +sv_showloss +sv_spectalk +sv_stopspeed +sv_timefmt +sv_timekick +sv_timekick_fuzz +sv_timekick_interval +sv_timeout +sv_timestamps +sv_wateraccelerate +sv_waterfriction +sv_zombietime +sw +sw_allow_modex +sw_clearcolor +sw_drawflat +sw_draworder +sw_maxedges +sw_maxsurfs +sw_mipcap +sw_mipscale +sw_mode +sw_polymodelstats +sw_reportedgeout +sw_reportsurfout +sw_stipplealpha +sw_surfcacheoverride +sw_waterwarp +swapinterval +sys_cpustring +sys_nostdout +sys_sleep +sys_ticrate +team +team_headmodel +team_model +teamplay +teamtask +temp1 +testblend +testentities +testlights +testparticles +testsound +texturealphamode +texturemode +texturesolidmode +timedemo +timegraph +timelimit +timeout +timescale +topcolor +triplebuffer +ttycon +ui_Q3Model +ui_actualNetGametype +ui_bigFont +ui_browserGameType +ui_browserMaster +ui_browserShowEmpty +ui_browserShowFriendlyFire +ui_browserShowFull +ui_browserShowMaxlives +ui_browserShowTourney +ui_browserSortKey +ui_cdkeychecked +ui_class +ui_cmd +ui_ctf_capturelimit +ui_ctf_friendly +ui_ctf_timelimit +ui_currentMap +ui_currentNetMap +ui_dedicated +ui_ffa_fraglimit +ui_ffa_timelimit +ui_gametype +ui_glCustom +ui_isSpectator +ui_joinGametype +ui_limboMode +ui_limboObjective +ui_limboOptions +ui_limboPrevOptions +ui_mapIndex +ui_master +ui_menuFiles +ui_mousePitch +ui_netGametype +ui_netSource +ui_notebookCurrentPage +ui_objective +ui_prevClass +ui_prevTeam +ui_prevWeapon +ui_serverStatusTimeOut +ui_singlePlayerActive +ui_smallFont +ui_spSelection +ui_team +ui_teamArenaFirstRun +ui_team_fraglimit +ui_team_friendly +ui_team_timelimit +ui_tourney_fraglimit +ui_tourney_timelimit +ui_userAlliedRespawnTime +ui_userAxisRespawnTime +ui_userTimeLimit +ui_weapon +up +upsensitivity +upspeed +upthreshold +username +v_centermove +v_centerspeed +v_idlescale +v_ipitch_cycle +v_ipitch_level +v_iroll_cycle +v_iroll_level +v_iuaw_cycle +v_iyaw_cycle +v_iyaw_level +v_kickpitch +v_kickroll +v_kicktime +version +vertex +vid +vid_config_x +vid_config_y +vid_fullscreen +vid_fullscreen_mode +vid_gamma +vid_height +vid_mode +vid_nopageflip +vid_ref +vid_system_gamma +vid_use8bit +vid_wait +vid_width +vid_window_x +vid_window_y +vid_windowed_mode +vid_xpos +vid_ypos +viewlog +viewsize +vm_cgame +vm_game +vm_ui +volume +vwep +waitdelay +waterwarp +wavonly +win +win_noalttab +win_hinstance +win_wndproc +xpos +yaw +yawsensitivity +yawspeed +yawthreshold +ypos +zombietime +ztrick + + + + ++attack ++ttack2 ++alt1 ++activate ++back ++break ++button0 ++button1 ++button10 ++button11 ++button12 ++button13 ++button14 ++button2 ++button3 ++button4 ++button5 ++button6 ++button7 ++button8 ++button9 ++camdistance ++camin ++cammousemove ++camout ++campitchdown ++campitchup ++camyawleft ++camyawright ++commandmenu ++dropweapon ++duck ++forward ++graph ++jlook ++jump ++kick ++klook ++leanleft ++leanright ++left ++lookdown ++lookup ++mlook ++movedown ++moveleft ++moveright ++moveup ++nvgadjust ++quickgren ++reload ++right ++salute ++score ++showscores ++speed ++sprint ++strafe ++use ++useitem ++voicerecord ++wbutton7 ++zoom +-activate +-alt1 +-attack +-attack2 +-back +-break +-button0 +-button1 +-button10 +-button11 +-button12 +-button13 +-button14 +-button2 +-button3 +-button4 +-button5 +-button6 +-button7 +-button8 +-button9 +-camdistance +-camin +-cammousemove +-camout +-campitchdown +-campitchup +-camyawleft +-camyawright +-commandmenu +-dropweapon +-duck +-forward +-graph +-jlook +-jump +-kick +-klook +-leanleft +-leanright +-left +-lookdown +-lookup +-mlook +-movedown +-moveleft +-moveright +-moveup +-nvgadjust +-quickgren +-reload +-right +-salute +-score +-showscores +-speed +-sprint +-strafe +-use +-useitem +-voicerecord +-wbutton7 +-zoom + + + + +* +[ +] +\ +/ +' += +- ++ +, +. +` +~ +1 +2 +3 +4 +5 +6 +7 +8 +9 +0 +a +b +c +d +e +f +g +h +i +j +k +l +m +n +o +p +q +r +s +t +u +v +x +w +y +z +ALT +AUX1 +AUX10 +AUX11 +AUX12 +AUX13 +AUX14 +AUX15 +AUX16 +AUX17 +AUX18 +AUX2 +AUX20 +AUX21 +AUX22 +AUX23 +AUX24 +AUX25 +AUX26 +AUX27 +AUX28 +AUX29 +AUX3 +AUX30 +AUX31 +AUX32 +AUX4 +AUX5 +AUX6 +AUX7 +AUX8 +AUX9 +BACKSPACE +CTRL +DEL +DOWNARROW +END +ENTER +ESCAPE +F1 +F10 +F11 +F12 +F2 +F3 +F4 +F5 +F6 +F7 +F8 +F9 +HOME +INS +JOY1 +JOY2 +JOY3 +JOY4 +KP_SLASH +KP_5 +KP_UPARROW +KP_LEFTARROW +KP_RIGHTARROW +KP_DOWNARROW +KP_HOME +KP_END +KP_PGUP +KP_PGDN +KP_INS +KP_DEL +LEFTARROW +MOUSE1 +MOUSE2 +MOUSE3 +MWHEELDOWN +MWHEELUP +PAUSE +PGDN +PGUP +RIGHTARROW +SEMICOLON +CAPSLOCK +SHIFT +SPACE +TAB +UPARROW + + + + ; + $ + + + bind + unbind + + + set + seta + setu + sets + + + echo + say_team + say + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/idl.xml b/src/data/extra/syntax-highlighting/syntax/idl.xml new file mode 100644 index 00000000..a8a2787d --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/idl.xml @@ -0,0 +1,114 @@ + + + + + + any + attribute + case + const + context + default + enum + exception + FALSE + fixed + public + in + inout + interface + module + Object + oneway + out + raises + readonly + sequence + struct + switch + TRUE + typedef + unsigned + union + + + boolean + char + double + float + long + octet + short + string + void + wchar + wstring + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/ilerpg.xml b/src/data/extra/syntax-highlighting/syntax/ilerpg.xml new file mode 100644 index 00000000..4858efb4 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/ilerpg.xml @@ -0,0 +1,701 @@ + + + + + + + EXTPROC + EXTPGM + OPDESC + DATFMT + DIM + LIKEDS + LIKEREC + LIKE + PROCPTR + TIMFMT + VARYING + ASCEND + CONST + NOOPT + OPTIONS + VALUE + QUALIFIED + INZ + BASED + + + FREE + END-FREE + TITLE + EJECT + SPACE + COPY + INCLUDE + DEFINE + UNDEFINE + IF + ELSE + EXEC + END-EXEC + ELSEIF + ENDIF + EOF + + + NOT + DEFINED + + + DEFINED + + + ABS + ADDR + ALLOC + BITAND + BITNOT + BITOR + BITXOR + CHAR + CHECK + CHECKR + DATE + DAYS + DEC + DECH + DECPOS + DIFF + DIV + EDITC + EDITFLT + EDITW + ELEM + EOF + EQUAL + ERROR + FIELDS + FLOAT + FOUND + GRAPH + HOURS + INT + INTH + KDS + LEN + LOOKUP + LOOKUPLT + LOOKUPLE + LOOKUPGT + LOOKUPGE + MINUTES + MONTHS + MSECONDS + NULLIND + OCCUR + OPEN + PADDR + PARMS + REALLOC + REM + REPLACE + SCAN + SECONDS + SHTDN + SIZE + SQRT + STATUS + STR + SUBARR + SUBDT + SUBST + THIS + TIME + TIMESTAMP + TLOOKUP + TLOOKUPLT + TLOOKUPLE + TLOOKUPGT + TLOOKUPGE + TRIM + TRIML + TRIMR + UCS2 + UNS + UNSH + XFOOT + XLATE + YEARS + + + IF + + + DOW + DOU + FOR + + + WHEN + EVAL + + + EVALR + + + RETURN + + + DO + IN + OR + + + ACQ + ADD + AND + CAB + CAS + CAT + DIV + DOU + END + MVR + OUT + REL + SUB + TAG + + + CALL + COMP + DUMP + ELSE + EXSR + FEOD + GOTO + IFGT + IFLT + IFEQ + IFNE + IFGE + IFLE + ITER + KFLD + MOVE + MULT + NEXT + OPEN + ORGT + ORLT + OREQ + ORNE + ORGE + ORLE + PARM + POST + READ + SCAN + SQRT + TEST + TIME + + + ALLOC + ANDGT + ANDLT + ANDEQ + ANDNE + ANDGE + ANDLE + BEGSR + BITON + CABGT + CABLT + CABEQ + CABNE + CABGE + CABLE + CALLB + CALLP + CASGT + CASLT + CASEQ + CASNE + CASGE + CASLE + CHAIN + CHECK + CLEAR + CLOSE + CHECK + CLEAR + CLOSE + DOWGT + DOWLT + DOWEQ + DOWNE + DOWGE + DOWLE + DOUGT + DOULT + DOUEQ + DOUNE + DOUGE + DOULE + DSPLY + ENDCS + ENDDO + ENDIF + ENDSL + ENDSR + EXFMT + FORCE + KLIST + LEAVE + MHHZO + MHLZO + MLHZO + MLLZO + MOVEA + MOVEL + OCCUR + OTHER + PLIST + READC + READE + READP + RESET + ROLBK + SETGT + SETLL + SETON + SHTDN + SORTA + SUBST + TESTB + TESTN + TESTZ + WRITE + XFOOT + XLATE + + + ADDDUR + BITOFF + CHECKR + COMMIT + DEFINE + DELETE + EXCEPT + EXTRCT + LOOKUP + READPE + RETURN + SELECT + SETOFF + SUBDUR + UNLOCK + UPDATE + WHENGT + WHENLT + WHENEQ + WHENNR + WHENGE + WHENLE + + + DEALLOC + REALLOC + + + ACQ + BEGSR + CALLP + CHAIN + CLEAR + CLOSE + COMMIT + DEALLOC + DELETE + DOU + DOW + DSPLY + DUMP + ELSE + ELSEIF + ENDDO + ENDFOR + ENDIF + ENDMON + ENDSL + ENDSR + EVAL + EVALR + EXCEPT + EXFMT + EXSR + FEOD + FOR + FORCE + IF + IN + ITER + LEAVE + LEAVESR + MONITOR + NEXT + ON-ERROR + OPEN + OTHER + OUT + POST + READ + READC + READE + READP + READPE + REL + RESET + RETURN + ROLBK + SELECT + SETGT + SETLL + SORTA + TEST + UNLOCK + UPDATE + WHEN + WRITE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/inform.xml b/src/data/extra/syntax-highlighting/syntax/inform.xml new file mode 100644 index 00000000..8bc04a20 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/inform.xml @@ -0,0 +1,405 @@ + + + + + + + + if + for + else + box + break + continue + do + until + font + give + inversion + jump + on + to + move + new_line + objectloop + print + print_ret + quit + read + remove + restore + return + rtrue + rfalse + save + spaces + spring + style + switch + + + + metaclass + parent + child + children + Achieved + AddToScope + allowpushdir + CDefArt + ChangeDefault + DefArt + DoMenu + EnglishNumber + HasLightSource + InDefArt + Locale + LoopOverScope + NextWord + NextWordStopped + NounDomain + ObjectIsUntouchable + OffersLight + PlaceInScope + PlayerTo + PrintShortName + ScopeWithin + SetTime + StartDaemon + StartTimer + StopDaemon + StopTimer + TestScope + TryNumber + UnsignedCompare + WordAddress + WordLenght + WriteListFrom + YesOrNo + ZRegion + + + Pronouns + Quit + Restore + Save + Verify + Restart + ScriptOn + ScriptOff + NotifyOn + NotifyOff + Places + Objects + Score + FullScore + Version + LMode1 + LMode2 + LMode3 + Inv + + + Inv + InvTall + InvWide + Take + Drop + Empty + Enter + Exit + GetOff + Go + GoIn + Look + Examine + Search + Give + Show + Unlock + Lock + SwitchOn + SwitchOff + Open + Close + Disrobe + Wear + Eat + + LetGo + Receive + Insert + PutOn + Transfer + Empty + EmptyT + GetOff + GoIn + Listen + Taste + Touch + + Pull + Push + Wave + Turn + PushDir + ThrowAt + ThrownAt + JumpOn + Drink + Attack + Tie + Fill + Swing + Blow + Rub + Set + SetTo + Buy + Climb + Squeeze + Climb + Burn + Cut + Dig + + Consult + Tell + Answer + Ask + AskFor + Kiss + + Sleep + Sing + WaveHands + Swim + Sorry + Sing + Strong + Mild + Smell + Pray + Jump + Think + VagueGo + Yes + No + Sing + + + + String + Routine + bold + roman + underline + fixed + nothing + true + false + on + off + sender + self + location + score + action + actor + noun + second + the_time + consult_from + consult_words + wn + actors_location + buffer + player + + + + Ifdef + Ifndef + Iftrue + Iffalse + Ifnot + Endif + End + Abbreviate + Array + Attribute + Constant + Default + Extend + Global + Ifnot + Iftrue + Iffalse + Import + Include + Link + Lowstring + Message + Property + Release + Replace + Serial + Switches + Statusline + score + System_file + Verb + + + + #ifdef + #else + #ifndef + #endif + + + + has + hasn't + in + notin + provides + ofclass + or + + + + with + private + has + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/ini.xml b/src/data/extra/syntax-highlighting/syntax/ini.xml new file mode 100644 index 00000000..ce300fff --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/ini.xml @@ -0,0 +1,78 @@ + + + + + + +On +Off +Default +Defaults +Localhost +Null +True +False +Yes +No +Normal + + +E_ALL +E_ERROR +E_WARNING +E_PARSE +E_NOTICE +E_STRICT +E_CORE_ERROR +E_CORE_WARNING +E_COMPILE_ERROR +E_COMPILE_WARNING +E_USER_ERROR +E_USER_WARNING +E_USER_NOTICE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/intelhex.xml b/src/data/extra/syntax-highlighting/syntax/intelhex.xml new file mode 100644 index 00000000..cfadf671 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/intelhex.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/isocpp.xml b/src/data/extra/syntax-highlighting/syntax/isocpp.xml new file mode 100644 index 00000000..89eacca8 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/isocpp.xml @@ -0,0 +1,842 @@ + + + + + + + + + + + + + + + + + + +]> + + + + + + break + case + catch + continue + default + do + else + for + goto + if + return + switch + throw + try + while + + + + alignof + alignas + asm + auto + class + consteval + constexpr + const_cast + decltype + delete + dynamic_cast + enum + explicit + false + final + friend + inline + namespace + new + noexcept + nullptr + operator + override + private + protected + public + reinterpret_cast + sizeof + static_assert + static_cast + struct + template + this + true + typedef + typeid + typename + union + using + virtual + + and + and_eq + bitand + bitor + compl + not + not_eq + or + or_eq + xor + xor_eq + + concept + requires + + + + import + module + export + + co_await + co_return + co_yield + + + + + + template + + + + + + + noreturn + carries_dependency + + deprecated + + fallthrough + nodiscard + maybe_unused + + likely + unlikely + no_unique_address + + + + + + using + + + + + bool + char + char8_t + char16_t + char32_t + double + float + int + long + short + signed + unsigned + void + int8_t + int16_t + int32_t + int64_t + uint8_t + uint16_t + uint32_t + uint64_t + int_least8_t + int_least16_t + int_least32_t + int_least64_t + uint_least8_t + uint_least16_t + uint_least32_t + uint_least64_t + int_fast8_t + int_fast16_t + int_fast32_t + int_fast64_t + uint_fast8_t + uint_fast16_t + uint_fast32_t + uint_fast64_t + size_t + ssize_t + wchar_t + intptr_t + uintptr_t + intmax_t + uintmax_t + ptrdiff_t + sig_atomic_t + wint_t + va_list + FILE + fpos_t + time_t + + + const + extern + mutable + register + static + thread_local + volatile + + + + __DATE__ + __FILE__ + __LINE__ + __STDCPP_DEFAULT_NEW_ALIGNMENT__ + __STDCPP_STRICT_POINTER_SAFETY__ + __STDCPP_THREADS__ + __STDC_HOSTED__ + __STDC_ISO_10646__ + __STDC_MB_MIGHT_NEQ_WC__ + __STDC_VERSION__ + __STDC__ + __TIME__ + __cplusplus + __func__ + assert + _Pragma + + __has_include + + __has_cpp_attribute + + + __VA_ARGS__ + __VA_OPT__ + + + if + + + ifdef + ifndef + + + elif + + + else + + + endif + + + cmakedefine01 + cmakedefine + define + + + include + + + error + line + pragma + undef + warning + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/j.xml b/src/data/extra/syntax-highlighting/syntax/j.xml new file mode 100644 index 00000000..fae5b2f3 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/j.xml @@ -0,0 +1,119 @@ + + + + + + + + + + + + + + + +]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/jam.xml b/src/data/extra/syntax-highlighting/syntax/jam.xml new file mode 100644 index 00000000..32d74536 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/jam.xml @@ -0,0 +1,589 @@ + + +]> + + + + + + break + continue + else + + + if + while + + + include + return + + class + module + switch + actions + rule + for + on + return + in + case + local + + + existing + ignore + piecemeal + quietly + together + updated + + + bind + + + target + + + <address-model> + <address-sanitizer> + <allow-system-cflags> + <allow-system-libs> + <architecture> + <archiver> + <asciidoctor-attribute> + <asciidoctor-backend> + <asciidoctor-doctype> + <assembler> + <boostbook> + <build> + <build-name> + <c++-template-depth> + <catalog> + <cflags> + <compileflags> + <compiler> + <compiler-filter> + <cxxflags> + <debug-symbols> + <def-file> + <define> + <dll-path> + <doxygen:param> + <doxygen:xml-imagedir> + <embed-manifest> + <embed-manifest-file> + <file> + <format> + <hardcode-dll-paths> + <idl-compiler> + <implicit-dependency> + <import> + <include> + <includes> + <inlining> + <install-dependencies> + <install-source-root> + <install-type> + <instruction-set> + <libdir> + <library> + <link> + <linker> + <linkflags> + <local-visibility> + <location> + <location-prefix> + <mc-compiler> + <name> + <optimization> + <parallelism> + <path> + <pkg-config> + <pkg-config-define> + <prefix> + <profiling> + <ranlib> + <rc> + <rc-type> + <reftitle> + <relevant> + <resource-compiler> + <root> + <runtime-debugging> + <runtime-link> + <sass-line-numbers> + <sass-style> + <search> + <setup> + <setup-amd64> + <setup-i386> + <setup-ia64> + <source> + <sysroot> + <target-os> + <testing.arg> + <testing.launcher> + <thread-sanitizer> + <threading> + <toolset> + <undefined-sanitizer> + <use> + <variable> + <variant> + <verbatim-options> + <version> + <visibility> + <warnings> + <warnings-as-errors> + <xsl:param> + <xsl:path> + <xslt> + <xslt-dir> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/java.xml b/src/data/extra/syntax-highlighting/syntax/java.xml new file mode 100644 index 00000000..f5941504 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/java.xml @@ -0,0 +1,3865 @@ + + + +]> + + + + ACTIVE + ACTIVITY_COMPLETED + ACTIVITY_REQUIRED + ARG_IN + ARG_INOUT + ARG_OUT + AWTError + AWTEvent + AWTEventListener + AWTEventListenerProxy + AWTEventMulticaster + AWTException + AWTKeyStroke + AWTPermission + AbstractAction + AbstractBorder + AbstractButton + AbstractCellEditor + AbstractCollection + AbstractColorChooserPanel + AbstractDocument + AbstractDocument.AttributeContext + AbstractDocument.Content + AbstractDocument.ElementEdit + AbstractExecutorService + AbstractInterruptibleChannel + AbstractLayoutCache + AbstractLayoutCache.NodeDimensions + AbstractList + AbstractListModel + AbstractMap + AbstractMethodError + AbstractPreferences + AbstractQueue + AbstractQueuedSynchronizer + AbstractSelectableChannel + AbstractSelectionKey + AbstractSelector + AbstractSequentialList + AbstractSet + AbstractSpinnerModel + AbstractTableModel + AbstractUndoableEdit + AbstractWriter + AccessControlContext + AccessControlException + AccessController + AccessException + Accessible + AccessibleAction + AccessibleAttributeSequence + AccessibleBundle + AccessibleComponent + AccessibleContext + AccessibleEditableText + AccessibleExtendedComponent + AccessibleExtendedTable + AccessibleExtendedText + AccessibleHyperlink + AccessibleHypertext + AccessibleIcon + AccessibleKeyBinding + AccessibleObject + AccessibleRelation + AccessibleRelationSet + AccessibleResourceBundle + AccessibleRole + AccessibleSelection + AccessibleState + AccessibleStateSet + AccessibleStreamable + AccessibleTable + AccessibleTableModelChange + AccessibleText + AccessibleTextSequence + AccessibleValue + AccountException + AccountExpiredException + AccountLockedException + AccountNotFoundException + Acl + AclEntry + AclNotFoundException + Action + ActionEvent + ActionListener + ActionMap + ActionMapUIResource + Activatable + ActivateFailedException + ActivationDesc + ActivationException + ActivationGroup + ActivationGroupDesc + ActivationGroupDesc.CommandEnvironment + ActivationGroupID + ActivationGroup_Stub + ActivationID + ActivationInstantiator + ActivationMonitor + ActivationSystem + Activator + ActiveEvent + ActivityCompletedException + ActivityRequiredException + AdapterActivator + AdapterActivatorOperations + AdapterAlreadyExists + AdapterAlreadyExistsHelper + AdapterInactive + AdapterInactiveHelper + AdapterManagerIdHelper + AdapterNameHelper + AdapterNonExistent + AdapterNonExistentHelper + AdapterStateHelper + AddressHelper + Adjustable + AdjustmentEvent + AdjustmentListener + Adler32 + AffineTransform + AffineTransformOp + AlgorithmParameterGenerator + AlgorithmParameterGeneratorSpi + AlgorithmParameterSpec + AlgorithmParameters + AlgorithmParametersSpi + AllPermission + AlphaComposite + AlreadyBound + AlreadyBoundException + AlreadyBoundHelper + AlreadyBoundHolder + AlreadyConnectedException + AncestorEvent + AncestorListener + AnnotatedElement + Annotation + AnnotationFormatError + AnnotationTypeMismatchException + Any + AnyHolder + AnySeqHelper + AnySeqHelper + AnySeqHolder + AppConfigurationEntry + AppConfigurationEntry.LoginModuleControlFlag + Appendable + Applet + AppletContext + AppletInitializer + AppletStub + ApplicationException + Arc2D + Arc2D.Double + Arc2D.Float + Area + AreaAveragingScaleFilter + ArithmeticException + Array + Array + ArrayBlockingQueue + ArrayIndexOutOfBoundsException + ArrayList + ArrayStoreException + ArrayType + Arrays + AssertionError + AsyncBoxView + AsynchronousCloseException + AtomicBoolean + AtomicInteger + AtomicIntegerArray + AtomicIntegerFieldUpdater + AtomicLong + AtomicLongArray + AtomicLongFieldUpdater + AtomicMarkableReference + AtomicReference + AtomicReferenceArray + AtomicReferenceFieldUpdater + AtomicStampedReference + Attr + Attribute + Attribute + Attribute + AttributeChangeNotification + AttributeChangeNotificationFilter + AttributeException + AttributeInUseException + AttributeList + AttributeList + AttributeList + AttributeListImpl + AttributeModificationException + AttributeNotFoundException + AttributeSet + AttributeSet + AttributeSet.CharacterAttribute + AttributeSet.ColorAttribute + AttributeSet.FontAttribute + AttributeSet.ParagraphAttribute + AttributeSetUtilities + AttributeValueExp + AttributedCharacterIterator + AttributedCharacterIterator.Attribute + AttributedString + Attributes + Attributes + Attributes + Attributes.Name + Attributes2 + Attributes2Impl + AttributesImpl + AudioClip + AudioFileFormat + AudioFileFormat.Type + AudioFileReader + AudioFileWriter + AudioFormat + AudioFormat.Encoding + AudioInputStream + AudioPermission + AudioSystem + AuthPermission + AuthProvider + AuthenticationException + AuthenticationException + AuthenticationNotSupportedException + Authenticator + Authenticator.RequestorType + AuthorizeCallback + Autoscroll + BAD_CONTEXT + BAD_INV_ORDER + BAD_OPERATION + BAD_PARAM + BAD_POLICY + BAD_POLICY_TYPE + BAD_POLICY_VALUE + BAD_QOS + BAD_TYPECODE + BMPImageWriteParam + BackingStoreException + BadAttributeValueExpException + BadBinaryOpValueExpException + BadKind + BadLocationException + BadPaddingException + BadStringOperationException + BandCombineOp + BandedSampleModel + BaseRowSet + BasicArrowButton + BasicAttribute + BasicAttributes + BasicBorders + BasicBorders.ButtonBorder + BasicBorders.FieldBorder + BasicBorders.MarginBorder + BasicBorders.MenuBarBorder + BasicBorders.RadioButtonBorder + BasicBorders.RolloverButtonBorder + BasicBorders.SplitPaneBorder + BasicBorders.ToggleButtonBorder + BasicButtonListener + BasicButtonUI + BasicCheckBoxMenuItemUI + BasicCheckBoxUI + BasicColorChooserUI + BasicComboBoxEditor + BasicComboBoxEditor.UIResource + BasicComboBoxRenderer + BasicComboBoxRenderer.UIResource + BasicComboBoxUI + BasicComboPopup + BasicControl + BasicDesktopIconUI + BasicDesktopPaneUI + BasicDirectoryModel + BasicEditorPaneUI + BasicFileChooserUI + BasicFormattedTextFieldUI + BasicGraphicsUtils + BasicHTML + BasicIconFactory + BasicInternalFrameTitlePane + BasicInternalFrameUI + BasicLabelUI + BasicListUI + BasicLookAndFeel + BasicMenuBarUI + BasicMenuItemUI + BasicMenuUI + BasicOptionPaneUI + BasicOptionPaneUI.ButtonAreaLayout + BasicPanelUI + BasicPasswordFieldUI + BasicPermission + BasicPopupMenuSeparatorUI + BasicPopupMenuUI + BasicProgressBarUI + BasicRadioButtonMenuItemUI + BasicRadioButtonUI + BasicRootPaneUI + BasicScrollBarUI + BasicScrollPaneUI + BasicSeparatorUI + BasicSliderUI + BasicSpinnerUI + BasicSplitPaneDivider + BasicSplitPaneUI + BasicStroke + BasicTabbedPaneUI + BasicTableHeaderUI + BasicTableUI + BasicTextAreaUI + BasicTextFieldUI + BasicTextPaneUI + BasicTextUI + BasicTextUI.BasicCaret + BasicTextUI.BasicHighlighter + BasicToggleButtonUI + BasicToolBarSeparatorUI + BasicToolBarUI + BasicToolTipUI + BasicTreeUI + BasicViewportUI + BatchUpdateException + BeanContext + BeanContextChild + BeanContextChildComponentProxy + BeanContextChildSupport + BeanContextContainerProxy + BeanContextEvent + BeanContextMembershipEvent + BeanContextMembershipListener + BeanContextProxy + BeanContextServiceAvailableEvent + BeanContextServiceProvider + BeanContextServiceProviderBeanInfo + BeanContextServiceRevokedEvent + BeanContextServiceRevokedListener + BeanContextServices + BeanContextServicesListener + BeanContextServicesSupport + BeanContextServicesSupport.BCSSServiceProvider + BeanContextSupport + BeanContextSupport.BCSIterator + BeanDescriptor + BeanInfo + Beans + BevelBorder + Bidi + BigDecimal + BigInteger + BinaryRefAddr + BindException + Binding + Binding + BindingHelper + BindingHolder + BindingIterator + BindingIteratorHelper + BindingIteratorHolder + BindingIteratorOperations + BindingIteratorPOA + BindingListHelper + BindingListHolder + BindingType + BindingTypeHelper + BindingTypeHolder + BitSet + Blob + BlockView + BlockingQueue + Book + Boolean + BooleanControl + BooleanControl.Type + BooleanHolder + BooleanSeqHelper + BooleanSeqHolder + Border + BorderFactory + BorderLayout + BorderUIResource + BorderUIResource.BevelBorderUIResource + BorderUIResource.CompoundBorderUIResource + BorderUIResource.EmptyBorderUIResource + BorderUIResource.EtchedBorderUIResource + BorderUIResource.LineBorderUIResource + BorderUIResource.MatteBorderUIResource + BorderUIResource.TitledBorderUIResource + BoundedRangeModel + Bounds + Bounds + Box + Box.Filler + BoxLayout + BoxView + BoxedValueHelper + BreakIterator + BrokenBarrierException + Buffer + BufferCapabilities + BufferCapabilities.FlipContents + BufferOverflowException + BufferStrategy + BufferUnderflowException + BufferedImage + BufferedImageFilter + BufferedImageOp + BufferedInputStream + BufferedOutputStream + BufferedReader + BufferedWriter + Button + ButtonGroup + ButtonModel + ButtonUI + Byte + ByteArrayInputStream + ByteArrayOutputStream + ByteBuffer + ByteChannel + ByteHolder + ByteLookupTable + ByteOrder + CDATASection + CMMException + CODESET_INCOMPATIBLE + COMM_FAILURE + CRC32 + CRL + CRLException + CRLSelector + CSS + CSS.Attribute + CTX_RESTRICT_SCOPE + CacheRequest + CacheResponse + CachedRowSet + Calendar + Callable + CallableStatement + Callback + CallbackHandler + CancelablePrintJob + CancellationException + CancelledKeyException + CannotProceed + CannotProceedException + CannotProceedHelper + CannotProceedHolder + CannotRedoException + CannotUndoException + Canvas + CardLayout + Caret + CaretEvent + CaretListener + CellEditor + CellEditorListener + CellRendererPane + CertPath + CertPath.CertPathRep + CertPathBuilder + CertPathBuilderException + CertPathBuilderResult + CertPathBuilderSpi + CertPathParameters + CertPathTrustManagerParameters + CertPathValidator + CertPathValidatorException + CertPathValidatorResult + CertPathValidatorSpi + CertSelector + CertStore + CertStoreException + CertStoreParameters + CertStoreSpi + Certificate + Certificate + Certificate + Certificate.CertificateRep + CertificateEncodingException + CertificateEncodingException + CertificateException + CertificateException + CertificateExpiredException + CertificateExpiredException + CertificateFactory + CertificateFactorySpi + CertificateNotYetValidException + CertificateNotYetValidException + CertificateParsingException + CertificateParsingException + ChangeEvent + ChangeListener + ChangedCharSetException + Channel + ChannelBinding + Channels + CharArrayReader + CharArrayWriter + CharBuffer + CharConversionException + CharHolder + CharSeqHelper + CharSeqHolder + CharSequence + Character + Character.Subset + Character.UnicodeBlock + CharacterCodingException + CharacterData + CharacterIterator + Charset + CharsetDecoder + CharsetEncoder + CharsetProvider + Checkbox + CheckboxGroup + CheckboxMenuItem + CheckedInputStream + CheckedOutputStream + Checksum + Choice + ChoiceCallback + ChoiceFormat + Chromaticity + Cipher + CipherInputStream + CipherOutputStream + CipherSpi + Class + ClassCastException + ClassCircularityError + ClassDefinition + ClassDesc + ClassFileTransformer + ClassFormatError + ClassLoader + ClassLoaderRepository + ClassLoadingMXBean + ClassNotFoundException + ClientRequestInfo + ClientRequestInfoOperations + ClientRequestInterceptor + ClientRequestInterceptorOperations + Clip + Clipboard + ClipboardOwner + Clob + CloneNotSupportedException + Cloneable + Closeable + ClosedByInterruptException + ClosedChannelException + ClosedSelectorException + CodeSets + CodeSigner + CodeSource + Codec + CodecFactory + CodecFactoryHelper + CodecFactoryOperations + CodecOperations + CoderMalfunctionError + CoderResult + CodingErrorAction + CollationElementIterator + CollationKey + Collator + Collection + CollectionCertStoreParameters + Collections + Color + ColorChooserComponentFactory + ColorChooserUI + ColorConvertOp + ColorModel + ColorSelectionModel + ColorSpace + ColorSupported + ColorType + ColorUIResource + ComboBoxEditor + ComboBoxModel + ComboBoxUI + ComboPopup + Comment + CommunicationException + Comparable + Comparator + CompilationMXBean + Compiler + CompletionService + CompletionStatus + CompletionStatusHelper + Component + ComponentAdapter + ComponentColorModel + ComponentEvent + ComponentIdHelper + ComponentInputMap + ComponentInputMapUIResource + ComponentListener + ComponentOrientation + ComponentSampleModel + ComponentUI + ComponentView + Composite + CompositeContext + CompositeData + CompositeDataSupport + CompositeName + CompositeType + CompositeView + CompoundBorder + CompoundControl + CompoundControl.Type + CompoundEdit + CompoundName + Compression + ConcurrentHashMap + ConcurrentLinkedQueue + ConcurrentMap + ConcurrentModificationException + Condition + Configuration + ConfigurationException + ConfirmationCallback + ConnectException + ConnectException + ConnectIOException + Connection + ConnectionEvent + ConnectionEventListener + ConnectionPendingException + ConnectionPoolDataSource + ConsoleHandler + Constructor + Container + ContainerAdapter + ContainerEvent + ContainerListener + ContainerOrderFocusTraversalPolicy + ContentHandler + ContentHandler + ContentHandlerFactory + ContentModel + Context + Context + ContextList + ContextNotEmptyException + ContextualRenderedImageFactory + Control + Control + Control.Type + ControlFactory + ControllerEventListener + ConvolveOp + CookieHandler + CookieHolder + Copies + CopiesSupported + CopyOnWriteArrayList + CopyOnWriteArraySet + CountDownLatch + CounterMonitor + CounterMonitorMBean + CredentialException + CredentialExpiredException + CredentialNotFoundException + CropImageFilter + CubicCurve2D + CubicCurve2D.Double + CubicCurve2D.Float + Currency + Current + Current + Current + CurrentHelper + CurrentHelper + CurrentHelper + CurrentHolder + CurrentOperations + CurrentOperations + CurrentOperations + Cursor + CustomMarshal + CustomValue + Customizer + CyclicBarrier + DATA_CONVERSION + DESKeySpec + DESedeKeySpec + DGC + DHGenParameterSpec + DHKey + DHParameterSpec + DHPrivateKey + DHPrivateKeySpec + DHPublicKey + DHPublicKeySpec + DISCARDING + DOMConfiguration + DOMError + DOMErrorHandler + DOMException + DOMImplementation + DOMImplementationLS + DOMImplementationList + DOMImplementationRegistry + DOMImplementationSource + DOMLocator + DOMLocator + DOMResult + DOMSource + DOMStringList + DSAKey + DSAKeyPairGenerator + DSAParameterSpec + DSAParams + DSAPrivateKey + DSAPrivateKeySpec + DSAPublicKey + DSAPublicKeySpec + DTD + DTDConstants + DTDHandler + DataBuffer + DataBufferByte + DataBufferDouble + DataBufferFloat + DataBufferInt + DataBufferShort + DataBufferUShort + DataFlavor + DataFormatException + DataInput + DataInputStream + DataInputStream + DataLine + DataLine.Info + DataOutput + DataOutputStream + DataOutputStream + DataSource + DataTruncation + DatabaseMetaData + DatagramChannel + DatagramPacket + DatagramSocket + DatagramSocketImpl + DatagramSocketImplFactory + DatatypeConfigurationException + DatatypeConstants + DatatypeConstants.Field + DatatypeFactory + Date + Date + DateFormat + DateFormat.Field + DateFormatSymbols + DateFormatter + DateTimeAtCompleted + DateTimeAtCreation + DateTimeAtProcessing + DateTimeSyntax + DebugGraphics + DecimalFormat + DecimalFormatSymbols + DeclHandler + DefaultBoundedRangeModel + DefaultButtonModel + DefaultCaret + DefaultCellEditor + DefaultColorSelectionModel + DefaultComboBoxModel + DefaultDesktopManager + DefaultEditorKit + DefaultEditorKit.BeepAction + DefaultEditorKit.CopyAction + DefaultEditorKit.CutAction + DefaultEditorKit.DefaultKeyTypedAction + DefaultEditorKit.InsertBreakAction + DefaultEditorKit.InsertContentAction + DefaultEditorKit.InsertTabAction + DefaultEditorKit.PasteAction + DefaultFocusManager + DefaultFocusTraversalPolicy + DefaultFormatter + DefaultFormatterFactory + DefaultHandler + DefaultHandler2 + DefaultHighlighter + DefaultHighlighter.DefaultHighlightPainter + DefaultKeyboardFocusManager + DefaultListCellRenderer + DefaultListCellRenderer.UIResource + DefaultListModel + DefaultListSelectionModel + DefaultLoaderRepository + DefaultLoaderRepository + DefaultMenuLayout + DefaultMetalTheme + DefaultMutableTreeNode + DefaultPersistenceDelegate + DefaultSingleSelectionModel + DefaultStyledDocument + DefaultStyledDocument.AttributeUndoableEdit + DefaultStyledDocument.ElementSpec + DefaultTableCellRenderer + DefaultTableCellRenderer.UIResource + DefaultTableColumnModel + DefaultTableModel + DefaultTextUI + DefaultTreeCellEditor + DefaultTreeCellRenderer + DefaultTreeModel + DefaultTreeSelectionModel + DefinitionKind + DefinitionKindHelper + Deflater + DeflaterOutputStream + DelayQueue + Delayed + Delegate + Delegate + Delegate + DelegationPermission + Deprecated + Descriptor + DescriptorAccess + DescriptorSupport + DesignMode + DesktopIconUI + DesktopManager + DesktopPaneUI + Destination + DestroyFailedException + Destroyable + Dialog + Dictionary + DigestException + DigestInputStream + DigestOutputStream + Dimension + Dimension2D + DimensionUIResource + DirContext + DirObjectFactory + DirStateFactory + DirStateFactory.Result + DirectColorModel + DirectoryManager + DisplayMode + DnDConstants + Doc + DocAttribute + DocAttributeSet + DocFlavor + DocFlavor.BYTE_ARRAY + DocFlavor.CHAR_ARRAY + DocFlavor.INPUT_STREAM + DocFlavor.READER + DocFlavor.SERVICE_FORMATTED + DocFlavor.STRING + DocFlavor.URL + DocPrintJob + Document + Document + DocumentBuilder + DocumentBuilderFactory + DocumentEvent + DocumentEvent.ElementChange + DocumentEvent.EventType + DocumentFilter + DocumentFilter.FilterBypass + DocumentFragment + DocumentHandler + DocumentListener + DocumentName + DocumentParser + DocumentType + Documented + DomainCombiner + DomainManager + DomainManagerOperations + Double + DoubleBuffer + DoubleHolder + DoubleSeqHelper + DoubleSeqHolder + DragGestureEvent + DragGestureListener + DragGestureRecognizer + DragSource + DragSourceAdapter + DragSourceContext + DragSourceDragEvent + DragSourceDropEvent + DragSourceEvent + DragSourceListener + DragSourceMotionListener + Driver + DriverManager + DriverPropertyInfo + DropTarget + DropTarget.DropTargetAutoScroller + DropTargetAdapter + DropTargetContext + DropTargetDragEvent + DropTargetDropEvent + DropTargetEvent + DropTargetListener + DuplicateFormatFlagsException + DuplicateName + DuplicateNameHelper + Duration + DynAny + DynAny + DynAnyFactory + DynAnyFactoryHelper + DynAnyFactoryOperations + DynAnyHelper + DynAnyOperations + DynAnySeqHelper + DynArray + DynArray + DynArrayHelper + DynArrayOperations + DynEnum + DynEnum + DynEnumHelper + DynEnumOperations + DynFixed + DynFixed + DynFixedHelper + DynFixedOperations + DynSequence + DynSequence + DynSequenceHelper + DynSequenceOperations + DynStruct + DynStruct + DynStructHelper + DynStructOperations + DynUnion + DynUnion + DynUnionHelper + DynUnionOperations + DynValue + DynValue + DynValueBox + DynValueBoxOperations + DynValueCommon + DynValueCommonOperations + DynValueHelper + DynValueOperations + DynamicImplementation + DynamicImplementation + DynamicMBean + ECField + ECFieldF2m + ECFieldFp + ECGenParameterSpec + ECKey + ECParameterSpec + ECPoint + ECPrivateKey + ECPrivateKeySpec + ECPublicKey + ECPublicKeySpec + ENCODING_CDR_ENCAPS + EOFException + EditorKit + Element + Element + Element + ElementIterator + ElementType + Ellipse2D + Ellipse2D.Double + Ellipse2D.Float + EllipticCurve + EmptyBorder + EmptyStackException + EncodedKeySpec + Encoder + Encoding + EncryptedPrivateKeyInfo + Entity + Entity + EntityReference + EntityResolver + EntityResolver2 + Enum + EnumConstantNotPresentException + EnumControl + EnumControl.Type + EnumMap + EnumSet + EnumSyntax + Enumeration + Environment + Error + ErrorHandler + ErrorListener + ErrorManager + EtchedBorder + Event + EventContext + EventDirContext + EventHandler + EventListener + EventListenerList + EventListenerProxy + EventObject + EventQueue + EventSetDescriptor + Exception + ExceptionDetailMessage + ExceptionInInitializerError + ExceptionList + ExceptionListener + Exchanger + ExecutionException + Executor + ExecutorCompletionService + ExecutorService + Executors + ExemptionMechanism + ExemptionMechanismException + ExemptionMechanismSpi + ExpandVetoException + ExportException + Expression + ExtendedRequest + ExtendedResponse + Externalizable + FREE_MEM + FactoryConfigurationError + FailedLoginException + FeatureDescriptor + Fidelity + Field + FieldNameHelper + FieldNameHelper + FieldPosition + FieldView + File + FileCacheImageInputStream + FileCacheImageOutputStream + FileChannel + FileChannel.MapMode + FileChooserUI + FileDescriptor + FileDialog + FileFilter + FileFilter + FileHandler + FileImageInputStream + FileImageOutputStream + FileInputStream + FileLock + FileLockInterruptionException + FileNameMap + FileNotFoundException + FileOutputStream + FilePermission + FileReader + FileSystemView + FileView + FileWriter + FilenameFilter + Filter + FilterInputStream + FilterOutputStream + FilterReader + FilterWriter + FilteredImageSource + FilteredRowSet + Finishings + FixedHeightLayoutCache + FixedHolder + FlatteningPathIterator + FlavorEvent + FlavorException + FlavorListener + FlavorMap + FlavorTable + Float + FloatBuffer + FloatControl + FloatControl.Type + FloatHolder + FloatSeqHelper + FloatSeqHolder + FlowLayout + FlowView + FlowView.FlowStrategy + Flushable + FocusAdapter + FocusEvent + FocusListener + FocusManager + FocusTraversalPolicy + Font + FontFormatException + FontMetrics + FontRenderContext + FontUIResource + FormSubmitEvent + FormSubmitEvent.MethodType + FormView + Format + Format.Field + FormatConversionProvider + FormatFlagsConversionMismatchException + FormatMismatch + FormatMismatchHelper + Formattable + FormattableFlags + Formatter + Formatter + FormatterClosedException + ForwardRequest + ForwardRequest + ForwardRequestHelper + ForwardRequestHelper + Frame + Future + FutureTask + GSSContext + GSSCredential + GSSException + GSSManager + GSSName + GZIPInputStream + GZIPOutputStream + GapContent + GarbageCollectorMXBean + GatheringByteChannel + GaugeMonitor + GaugeMonitorMBean + GeneralPath + GeneralSecurityException + GenericArrayType + GenericDeclaration + GenericSignatureFormatError + GlyphJustificationInfo + GlyphMetrics + GlyphVector + GlyphView + GlyphView.GlyphPainter + GradientPaint + GraphicAttribute + Graphics + Graphics2D + GraphicsConfigTemplate + GraphicsConfiguration + GraphicsDevice + GraphicsEnvironment + GrayFilter + GregorianCalendar + GridBagConstraints + GridBagLayout + GridLayout + Group + Guard + GuardedObject + HOLDING + HTML + HTML.Attribute + HTML.Tag + HTML.UnknownTag + HTMLDocument + HTMLDocument.Iterator + HTMLEditorKit + HTMLEditorKit.HTMLFactory + HTMLEditorKit.HTMLTextAction + HTMLEditorKit.InsertHTMLTextAction + HTMLEditorKit.LinkController + HTMLEditorKit.Parser + HTMLEditorKit.ParserCallback + HTMLFrameHyperlinkEvent + HTMLWriter + Handler + HandlerBase + HandshakeCompletedEvent + HandshakeCompletedListener + HasControls + HashAttributeSet + HashDocAttributeSet + HashMap + HashPrintJobAttributeSet + HashPrintRequestAttributeSet + HashPrintServiceAttributeSet + HashSet + Hashtable + HeadlessException + HierarchyBoundsAdapter + HierarchyBoundsListener + HierarchyEvent + HierarchyListener + Highlighter + Highlighter.Highlight + Highlighter.HighlightPainter + HostnameVerifier + HttpRetryException + HttpURLConnection + HttpsURLConnection + HyperlinkEvent + HyperlinkEvent.EventType + HyperlinkListener + ICC_ColorSpace + ICC_Profile + ICC_ProfileGray + ICC_ProfileRGB + IDLEntity + IDLType + IDLTypeHelper + IDLTypeOperations + ID_ASSIGNMENT_POLICY_ID + ID_UNIQUENESS_POLICY_ID + IIOByteBuffer + IIOException + IIOImage + IIOInvalidTreeException + IIOMetadata + IIOMetadataController + IIOMetadataFormat + IIOMetadataFormatImpl + IIOMetadataNode + IIOParam + IIOParamController + IIOReadProgressListener + IIOReadUpdateListener + IIOReadWarningListener + IIORegistry + IIOServiceProvider + IIOWriteProgressListener + IIOWriteWarningListener + IMPLICIT_ACTIVATION_POLICY_ID + IMP_LIMIT + INACTIVE + INITIALIZE + INTERNAL + INTF_REPOS + INVALID_ACTIVITY + INVALID_TRANSACTION + INV_FLAG + INV_IDENT + INV_OBJREF + INV_POLICY + IOException + IOR + IORHelper + IORHolder + IORInfo + IORInfoOperations + IORInterceptor + IORInterceptorOperations + IORInterceptor_3_0 + IORInterceptor_3_0Helper + IORInterceptor_3_0Holder + IORInterceptor_3_0Operations + IRObject + IRObjectOperations + Icon + IconUIResource + IconView + IdAssignmentPolicy + IdAssignmentPolicyOperations + IdAssignmentPolicyValue + IdUniquenessPolicy + IdUniquenessPolicyOperations + IdUniquenessPolicyValue + IdentifierHelper + Identity + IdentityHashMap + IdentityScope + IllegalAccessError + IllegalAccessException + IllegalArgumentException + IllegalBlockSizeException + IllegalBlockingModeException + IllegalCharsetNameException + IllegalClassFormatException + IllegalComponentStateException + IllegalFormatCodePointException + IllegalFormatConversionException + IllegalFormatException + IllegalFormatFlagsException + IllegalFormatPrecisionException + IllegalFormatWidthException + IllegalMonitorStateException + IllegalPathStateException + IllegalSelectorException + IllegalStateException + IllegalThreadStateException + Image + ImageCapabilities + ImageConsumer + ImageFilter + ImageGraphicAttribute + ImageIO + ImageIcon + ImageInputStream + ImageInputStreamImpl + ImageInputStreamSpi + ImageObserver + ImageOutputStream + ImageOutputStreamImpl + ImageOutputStreamSpi + ImageProducer + ImageReadParam + ImageReader + ImageReaderSpi + ImageReaderWriterSpi + ImageTranscoder + ImageTranscoderSpi + ImageTypeSpecifier + ImageView + ImageWriteParam + ImageWriter + ImageWriterSpi + ImagingOpException + ImplicitActivationPolicy + ImplicitActivationPolicyOperations + ImplicitActivationPolicyValue + IncompatibleClassChangeError + IncompleteAnnotationException + InconsistentTypeCode + InconsistentTypeCode + InconsistentTypeCodeHelper + IndexColorModel + IndexOutOfBoundsException + IndexedPropertyChangeEvent + IndexedPropertyDescriptor + IndirectionException + Inet4Address + Inet6Address + InetAddress + InetSocketAddress + Inflater + InflaterInputStream + InheritableThreadLocal + Inherited + InitialContext + InitialContextFactory + InitialContextFactoryBuilder + InitialDirContext + InitialLdapContext + InlineView + InputContext + InputEvent + InputMap + InputMapUIResource + InputMethod + InputMethodContext + InputMethodDescriptor + InputMethodEvent + InputMethodHighlight + InputMethodListener + InputMethodRequests + InputMismatchException + InputSource + InputStream + InputStream + InputStream + InputStreamReader + InputSubset + InputVerifier + Insets + InsetsUIResource + InstanceAlreadyExistsException + InstanceNotFoundException + InstantiationError + InstantiationException + Instrument + Instrumentation + InsufficientResourcesException + IntBuffer + IntHolder + Integer + IntegerSyntax + Interceptor + InterceptorOperations + InternalError + InternalFrameAdapter + InternalFrameEvent + InternalFrameFocusTraversalPolicy + InternalFrameListener + InternalFrameUI + InternationalFormatter + InterruptedException + InterruptedIOException + InterruptedNamingException + InterruptibleChannel + IntrospectionException + IntrospectionException + Introspector + Invalid + InvalidActivityException + InvalidAddress + InvalidAddressHelper + InvalidAddressHolder + InvalidAlgorithmParameterException + InvalidApplicationException + InvalidAttributeIdentifierException + InvalidAttributeValueException + InvalidAttributeValueException + InvalidAttributesException + InvalidClassException + InvalidDnDOperationException + InvalidKeyException + InvalidKeyException + InvalidKeySpecException + InvalidMarkException + InvalidMidiDataException + InvalidName + InvalidName + InvalidName + InvalidNameException + InvalidNameHelper + InvalidNameHelper + InvalidNameHolder + InvalidObjectException + InvalidOpenTypeException + InvalidParameterException + InvalidParameterSpecException + InvalidPolicy + InvalidPolicyHelper + InvalidPreferencesFormatException + InvalidPropertiesFormatException + InvalidRelationIdException + InvalidRelationServiceException + InvalidRelationTypeException + InvalidRoleInfoException + InvalidRoleValueException + InvalidSearchControlsException + InvalidSearchFilterException + InvalidSeq + InvalidSlot + InvalidSlotHelper + InvalidTargetObjectTypeException + InvalidTransactionException + InvalidTypeForEncoding + InvalidTypeForEncodingHelper + InvalidValue + InvalidValue + InvalidValueHelper + InvocationEvent + InvocationHandler + InvocationTargetException + InvokeHandler + IstringHelper + ItemEvent + ItemListener + ItemSelectable + Iterable + Iterator + IvParameterSpec + JApplet + JButton + JCheckBox + JCheckBoxMenuItem + JColorChooser + JComboBox + JComboBox.KeySelectionManager + JComponent + JDesktopPane + JDialog + JEditorPane + JFileChooser + JFormattedTextField + JFormattedTextField.AbstractFormatter + JFormattedTextField.AbstractFormatterFactory + JFrame + JInternalFrame + JInternalFrame.JDesktopIcon + JLabel + JLayeredPane + JList + JMException + JMRuntimeException + JMXAuthenticator + JMXConnectionNotification + JMXConnector + JMXConnectorFactory + JMXConnectorProvider + JMXConnectorServer + JMXConnectorServerFactory + JMXConnectorServerMBean + JMXConnectorServerProvider + JMXPrincipal + JMXProviderException + JMXServerErrorException + JMXServiceURL + JMenu + JMenuBar + JMenuItem + JOptionPane + JPEGHuffmanTable + JPEGImageReadParam + JPEGImageWriteParam + JPEGQTable + JPanel + JPasswordField + JPopupMenu + JPopupMenu.Separator + JProgressBar + JRadioButton + JRadioButtonMenuItem + JRootPane + JScrollBar + JScrollPane + JSeparator + JSlider + JSpinner + JSpinner.DateEditor + JSpinner.DefaultEditor + JSpinner.ListEditor + JSpinner.NumberEditor + JSplitPane + JTabbedPane + JTable + JTable.PrintMode + JTableHeader + JTextArea + JTextComponent + JTextComponent.KeyBinding + JTextField + JTextPane + JToggleButton + JToggleButton.ToggleButtonModel + JToolBar + JToolBar.Separator + JToolTip + JTree + JTree.DynamicUtilTreeNode + JTree.EmptySelectionModel + JViewport + JWindow + JarEntry + JarException + JarFile + JarInputStream + JarOutputStream + JarURLConnection + JdbcRowSet + JobAttributes + JobAttributes.DefaultSelectionType + JobAttributes.DestinationType + JobAttributes.DialogType + JobAttributes.MultipleDocumentHandlingType + JobAttributes.SidesType + JobHoldUntil + JobImpressions + JobImpressionsCompleted + JobImpressionsSupported + JobKOctets + JobKOctetsProcessed + JobKOctetsSupported + JobMediaSheets + JobMediaSheetsCompleted + JobMediaSheetsSupported + JobMessageFromOperator + JobName + JobOriginatingUserName + JobPriority + JobPrioritySupported + JobSheets + JobState + JobStateReason + JobStateReasons + JoinRowSet + Joinable + KerberosKey + KerberosPrincipal + KerberosTicket + Kernel + Key + KeyAdapter + KeyAgreement + KeyAgreementSpi + KeyAlreadyExistsException + KeyEvent + KeyEventDispatcher + KeyEventPostProcessor + KeyException + KeyFactory + KeyFactorySpi + KeyGenerator + KeyGeneratorSpi + KeyListener + KeyManagementException + KeyManager + KeyManagerFactory + KeyManagerFactorySpi + KeyPair + KeyPairGenerator + KeyPairGeneratorSpi + KeyRep + KeyRep.Type + KeySpec + KeyStore + KeyStore.Builder + KeyStore.CallbackHandlerProtection + KeyStore.Entry + KeyStore.LoadStoreParameter + KeyStore.PasswordProtection + KeyStore.PrivateKeyEntry + KeyStore.ProtectionParameter + KeyStore.SecretKeyEntry + KeyStore.TrustedCertificateEntry + KeyStoreBuilderParameters + KeyStoreException + KeyStoreSpi + KeyStroke + KeyboardFocusManager + Keymap + LDAPCertStoreParameters + LIFESPAN_POLICY_ID + LOCATION_FORWARD + LSException + LSInput + LSLoadEvent + LSOutput + LSParser + LSParserFilter + LSProgressEvent + LSResourceResolver + LSSerializer + LSSerializerFilter + Label + LabelUI + LabelView + LanguageCallback + LastOwnerException + LayeredHighlighter + LayeredHighlighter.LayerPainter + LayoutFocusTraversalPolicy + LayoutManager + LayoutManager2 + LayoutQueue + LdapContext + LdapName + LdapReferralException + Lease + Level + LexicalHandler + LifespanPolicy + LifespanPolicyOperations + LifespanPolicyValue + LimitExceededException + Line + Line.Info + Line2D + Line2D.Double + Line2D.Float + LineBorder + LineBreakMeasurer + LineEvent + LineEvent.Type + LineListener + LineMetrics + LineNumberInputStream + LineNumberReader + LineUnavailableException + LinkException + LinkLoopException + LinkRef + LinkageError + LinkedBlockingQueue + LinkedHashMap + LinkedHashSet + LinkedList + List + List + ListCellRenderer + ListDataEvent + ListDataListener + ListIterator + ListModel + ListResourceBundle + ListSelectionEvent + ListSelectionListener + ListSelectionModel + ListUI + ListView + ListenerNotFoundException + LoaderHandler + LocalObject + Locale + LocateRegistry + Locator + Locator2 + Locator2Impl + LocatorImpl + Lock + LockSupport + LogManager + LogRecord + LogStream + Logger + LoggingMXBean + LoggingPermission + LoginContext + LoginException + LoginModule + Long + LongBuffer + LongHolder + LongLongSeqHelper + LongLongSeqHolder + LongSeqHelper + LongSeqHolder + LookAndFeel + LookupOp + LookupTable + MARSHAL + MBeanAttributeInfo + MBeanConstructorInfo + MBeanException + MBeanFeatureInfo + MBeanInfo + MBeanNotificationInfo + MBeanOperationInfo + MBeanParameterInfo + MBeanPermission + MBeanRegistration + MBeanRegistrationException + MBeanServer + MBeanServerBuilder + MBeanServerConnection + MBeanServerDelegate + MBeanServerDelegateMBean + MBeanServerFactory + MBeanServerForwarder + MBeanServerInvocationHandler + MBeanServerNotification + MBeanServerNotificationFilter + MBeanServerPermission + MBeanTrustPermission + MGF1ParameterSpec + MLet + MLetMBean + Mac + MacSpi + MalformedInputException + MalformedLinkException + MalformedObjectNameException + MalformedParameterizedTypeException + MalformedURLException + ManageReferralControl + ManagementFactory + ManagementPermission + ManagerFactoryParameters + Manifest + Map + Map.Entry + MappedByteBuffer + MarshalException + MarshalledObject + MaskFormatter + MatchResult + Matcher + Math + MathContext + MatteBorder + Media + MediaName + MediaPrintableArea + MediaSize + MediaSize.Engineering + MediaSize.ISO + MediaSize.JIS + MediaSize.NA + MediaSize.Other + MediaSizeName + MediaTracker + MediaTray + Member + MemoryCacheImageInputStream + MemoryCacheImageOutputStream + MemoryHandler + MemoryImageSource + MemoryMXBean + MemoryManagerMXBean + MemoryNotificationInfo + MemoryPoolMXBean + MemoryType + MemoryUsage + Menu + MenuBar + MenuBarUI + MenuComponent + MenuContainer + MenuDragMouseEvent + MenuDragMouseListener + MenuElement + MenuEvent + MenuItem + MenuItemUI + MenuKeyEvent + MenuKeyListener + MenuListener + MenuSelectionManager + MenuShortcut + MessageDigest + MessageDigestSpi + MessageFormat + MessageFormat.Field + MessageProp + MetaEventListener + MetaMessage + MetalBorders + MetalBorders.ButtonBorder + MetalBorders.Flush3DBorder + MetalBorders.InternalFrameBorder + MetalBorders.MenuBarBorder + MetalBorders.MenuItemBorder + MetalBorders.OptionDialogBorder + MetalBorders.PaletteBorder + MetalBorders.PopupMenuBorder + MetalBorders.RolloverButtonBorder + MetalBorders.ScrollPaneBorder + MetalBorders.TableHeaderBorder + MetalBorders.TextFieldBorder + MetalBorders.ToggleButtonBorder + MetalBorders.ToolBarBorder + MetalButtonUI + MetalCheckBoxIcon + MetalCheckBoxUI + MetalComboBoxButton + MetalComboBoxEditor + MetalComboBoxEditor.UIResource + MetalComboBoxIcon + MetalComboBoxUI + MetalDesktopIconUI + MetalFileChooserUI + MetalIconFactory + MetalIconFactory.FileIcon16 + MetalIconFactory.FolderIcon16 + MetalIconFactory.PaletteCloseIcon + MetalIconFactory.TreeControlIcon + MetalIconFactory.TreeFolderIcon + MetalIconFactory.TreeLeafIcon + MetalInternalFrameTitlePane + MetalInternalFrameUI + MetalLabelUI + MetalLookAndFeel + MetalMenuBarUI + MetalPopupMenuSeparatorUI + MetalProgressBarUI + MetalRadioButtonUI + MetalRootPaneUI + MetalScrollBarUI + MetalScrollButton + MetalScrollPaneUI + MetalSeparatorUI + MetalSliderUI + MetalSplitPaneUI + MetalTabbedPaneUI + MetalTextFieldUI + MetalTheme + MetalToggleButtonUI + MetalToolBarUI + MetalToolTipUI + MetalTreeUI + Method + MethodDescriptor + MidiChannel + MidiDevice + MidiDevice.Info + MidiDeviceProvider + MidiEvent + MidiFileFormat + MidiFileReader + MidiFileWriter + MidiMessage + MidiSystem + MidiUnavailableException + MimeTypeParseException + MinimalHTMLWriter + MissingFormatArgumentException + MissingFormatWidthException + MissingResourceException + Mixer + Mixer.Info + MixerProvider + ModelMBean + ModelMBeanAttributeInfo + ModelMBeanConstructorInfo + ModelMBeanInfo + ModelMBeanInfoSupport + ModelMBeanNotificationBroadcaster + ModelMBeanNotificationInfo + ModelMBeanOperationInfo + ModificationItem + Modifier + Monitor + MonitorMBean + MonitorNotification + MonitorSettingException + MouseAdapter + MouseDragGestureRecognizer + MouseEvent + MouseInfo + MouseInputAdapter + MouseInputListener + MouseListener + MouseMotionAdapter + MouseMotionListener + MouseWheelEvent + MouseWheelListener + MultiButtonUI + MultiColorChooserUI + MultiComboBoxUI + MultiDesktopIconUI + MultiDesktopPaneUI + MultiDoc + MultiDocPrintJob + MultiDocPrintService + MultiFileChooserUI + MultiInternalFrameUI + MultiLabelUI + MultiListUI + MultiLookAndFeel + MultiMenuBarUI + MultiMenuItemUI + MultiOptionPaneUI + MultiPanelUI + MultiPixelPackedSampleModel + MultiPopupMenuUI + MultiProgressBarUI + MultiRootPaneUI + MultiScrollBarUI + MultiScrollPaneUI + MultiSeparatorUI + MultiSliderUI + MultiSpinnerUI + MultiSplitPaneUI + MultiTabbedPaneUI + MultiTableHeaderUI + MultiTableUI + MultiTextUI + MultiToolBarUI + MultiToolTipUI + MultiTreeUI + MultiViewportUI + MulticastSocket + MultipleComponentProfileHelper + MultipleComponentProfileHolder + MultipleDocumentHandling + MultipleMaster + MutableAttributeSet + MutableComboBoxModel + MutableTreeNode + NON_EXISTENT + NO_IMPLEMENT + NO_MEMORY + NO_PERMISSION + NO_RESOURCES + NO_RESPONSE + NVList + Name + NameAlreadyBoundException + NameCallback + NameClassPair + NameComponent + NameComponentHelper + NameComponentHolder + NameDynAnyPair + NameDynAnyPairHelper + NameDynAnyPairSeqHelper + NameHelper + NameHolder + NameList + NameNotFoundException + NameParser + NameValuePair + NameValuePair + NameValuePairHelper + NameValuePairHelper + NameValuePairSeqHelper + NamedNodeMap + NamedValue + NamespaceChangeListener + NamespaceContext + NamespaceSupport + Naming + NamingContext + NamingContextExt + NamingContextExtHelper + NamingContextExtHolder + NamingContextExtOperations + NamingContextExtPOA + NamingContextHelper + NamingContextHolder + NamingContextOperations + NamingContextPOA + NamingEnumeration + NamingEvent + NamingException + NamingExceptionEvent + NamingListener + NamingManager + NamingSecurityException + NavigationFilter + NavigationFilter.FilterBypass + NegativeArraySizeException + NetPermission + NetworkInterface + NoClassDefFoundError + NoConnectionPendingException + NoContext + NoContextHelper + NoInitialContextException + NoPermissionException + NoRouteToHostException + NoServant + NoServantHelper + NoSuchAlgorithmException + NoSuchAttributeException + NoSuchElementException + NoSuchFieldError + NoSuchFieldException + NoSuchMethodError + NoSuchMethodException + NoSuchObjectException + NoSuchPaddingException + NoSuchProviderException + Node + NodeChangeEvent + NodeChangeListener + NodeList + NonReadableChannelException + NonWritableChannelException + NoninvertibleTransformException + NotActiveException + NotBoundException + NotCompliantMBeanException + NotContextException + NotEmpty + NotEmptyHelper + NotEmptyHolder + NotFound + NotFoundHelper + NotFoundHolder + NotFoundReason + NotFoundReasonHelper + NotFoundReasonHolder + NotOwnerException + NotSerializableException + NotYetBoundException + NotYetConnectedException + Notation + Notification + NotificationBroadcaster + NotificationBroadcasterSupport + NotificationEmitter + NotificationFilter + NotificationFilterSupport + NotificationListener + NotificationResult + NullCipher + NullPointerException + Number + NumberFormat + NumberFormat.Field + NumberFormatException + NumberFormatter + NumberOfDocuments + NumberOfInterveningJobs + NumberUp + NumberUpSupported + NumericShaper + OAEPParameterSpec + OBJECT_NOT_EXIST + OBJ_ADAPTER + OMGVMCID + ORB + ORB + ORBIdHelper + ORBInitInfo + ORBInitInfoOperations + ORBInitializer + ORBInitializerOperations + ObjID + Object + Object + ObjectAlreadyActive + ObjectAlreadyActiveHelper + ObjectChangeListener + ObjectFactory + ObjectFactoryBuilder + ObjectHelper + ObjectHolder + ObjectIdHelper + ObjectIdHelper + ObjectImpl + ObjectImpl + ObjectInput + ObjectInputStream + ObjectInputStream.GetField + ObjectInputValidation + ObjectInstance + ObjectName + ObjectNotActive + ObjectNotActiveHelper + ObjectOutput + ObjectOutputStream + ObjectOutputStream.PutField + ObjectReferenceFactory + ObjectReferenceFactoryHelper + ObjectReferenceFactoryHolder + ObjectReferenceTemplate + ObjectReferenceTemplateHelper + ObjectReferenceTemplateHolder + ObjectReferenceTemplateSeqHelper + ObjectReferenceTemplateSeqHolder + ObjectStreamClass + ObjectStreamConstants + ObjectStreamException + ObjectStreamField + ObjectView + Observable + Observer + OceanTheme + OctetSeqHelper + OctetSeqHolder + Oid + OpenDataException + OpenMBeanAttributeInfo + OpenMBeanAttributeInfoSupport + OpenMBeanConstructorInfo + OpenMBeanConstructorInfoSupport + OpenMBeanInfo + OpenMBeanInfoSupport + OpenMBeanOperationInfo + OpenMBeanOperationInfoSupport + OpenMBeanParameterInfo + OpenMBeanParameterInfoSupport + OpenType + OpenType + OperatingSystemMXBean + Operation + OperationNotSupportedException + OperationsException + Option + OptionPaneUI + OptionalDataException + OrientationRequested + OutOfMemoryError + OutputDeviceAssigned + OutputKeys + OutputStream + OutputStream + OutputStream + OutputStreamWriter + OverlappingFileLockException + OverlayLayout + Override + Owner + PBEKey + PBEKeySpec + PBEParameterSpec + PDLOverrideSupported + PERSIST_STORE + PKCS8EncodedKeySpec + PKIXBuilderParameters + PKIXCertPathBuilderResult + PKIXCertPathChecker + PKIXCertPathValidatorResult + PKIXParameters + POA + POAHelper + POAManager + POAManagerOperations + POAOperations + PRIVATE_MEMBER + PSSParameterSpec + PSource + PSource.PSpecified + PUBLIC_MEMBER + Pack200 + Pack200.Packer + Pack200.Unpacker + Package + PackedColorModel + PageAttributes + PageAttributes.ColorType + PageAttributes.MediaType + PageAttributes.OrientationRequestedType + PageAttributes.OriginType + PageAttributes.PrintQualityType + PageFormat + PageRanges + Pageable + PagedResultsControl + PagedResultsResponseControl + PagesPerMinute + PagesPerMinuteColor + Paint + PaintContext + PaintEvent + Panel + PanelUI + Paper + ParagraphView + ParagraphView + Parameter + ParameterBlock + ParameterDescriptor + ParameterMetaData + ParameterMode + ParameterModeHelper + ParameterModeHolder + ParameterizedType + ParseException + ParsePosition + Parser + Parser + ParserAdapter + ParserConfigurationException + ParserDelegator + ParserFactory + PartialResultException + PasswordAuthentication + PasswordCallback + PasswordView + Patch + PathIterator + Pattern + PatternSyntaxException + Permission + Permission + PermissionCollection + Permissions + PersistenceDelegate + PersistentMBean + PhantomReference + Pipe + Pipe.SinkChannel + Pipe.SourceChannel + PipedInputStream + PipedOutputStream + PipedReader + PipedWriter + PixelGrabber + PixelInterleavedSampleModel + PlainDocument + PlainView + Point + Point2D + Point2D.Double + Point2D.Float + PointerInfo + Policy + Policy + Policy + PolicyError + PolicyErrorCodeHelper + PolicyErrorHelper + PolicyErrorHolder + PolicyFactory + PolicyFactoryOperations + PolicyHelper + PolicyHolder + PolicyListHelper + PolicyListHolder + PolicyNode + PolicyOperations + PolicyQualifierInfo + PolicyTypeHelper + Polygon + PooledConnection + Popup + PopupFactory + PopupMenu + PopupMenuEvent + PopupMenuListener + PopupMenuUI + Port + Port.Info + PortUnreachableException + PortableRemoteObject + PortableRemoteObjectDelegate + Position + Position.Bias + Predicate + PreferenceChangeEvent + PreferenceChangeListener + Preferences + PreferencesFactory + PreparedStatement + PresentationDirection + Principal + Principal + PrincipalHolder + PrintEvent + PrintException + PrintGraphics + PrintJob + PrintJobAdapter + PrintJobAttribute + PrintJobAttributeEvent + PrintJobAttributeListener + PrintJobAttributeSet + PrintJobEvent + PrintJobListener + PrintQuality + PrintRequestAttribute + PrintRequestAttributeSet + PrintService + PrintServiceAttribute + PrintServiceAttributeEvent + PrintServiceAttributeListener + PrintServiceAttributeSet + PrintServiceLookup + PrintStream + PrintWriter + Printable + PrinterAbortException + PrinterException + PrinterGraphics + PrinterIOException + PrinterInfo + PrinterIsAcceptingJobs + PrinterJob + PrinterLocation + PrinterMakeAndModel + PrinterMessageFromOperator + PrinterMoreInfo + PrinterMoreInfoManufacturer + PrinterName + PrinterResolution + PrinterState + PrinterStateReason + PrinterStateReasons + PrinterURI + PriorityBlockingQueue + PriorityQueue + PrivateClassLoader + PrivateCredentialPermission + PrivateKey + PrivateMLet + PrivilegedAction + PrivilegedActionException + PrivilegedExceptionAction + Process + ProcessBuilder + ProcessingInstruction + ProfileDataException + ProfileIdHelper + ProgressBarUI + ProgressMonitor + ProgressMonitorInputStream + Properties + PropertyChangeEvent + PropertyChangeListener + PropertyChangeListenerProxy + PropertyChangeSupport + PropertyDescriptor + PropertyEditor + PropertyEditorManager + PropertyEditorSupport + PropertyPermission + PropertyResourceBundle + PropertyVetoException + ProtectionDomain + ProtocolException + Provider + Provider.Service + ProviderException + Proxy + Proxy + Proxy.Type + ProxySelector + PublicKey + PushbackInputStream + PushbackReader + QName + QuadCurve2D + QuadCurve2D.Double + QuadCurve2D.Float + Query + QueryEval + QueryExp + Queue + QueuedJobCount + RC2ParameterSpec + RC5ParameterSpec + REBIND + REQUEST_PROCESSING_POLICY_ID + RGBImageFilter + RMIClassLoader + RMIClassLoaderSpi + RMIClientSocketFactory + RMIConnection + RMIConnectionImpl + RMIConnectionImpl_Stub + RMIConnector + RMIConnectorServer + RMICustomMaxStreamFormat + RMIFailureHandler + RMIIIOPServerImpl + RMIJRMPServerImpl + RMISecurityException + RMISecurityManager + RMIServer + RMIServerImpl + RMIServerImpl_Stub + RMIServerSocketFactory + RMISocketFactory + RSAKey + RSAKeyGenParameterSpec + RSAMultiPrimePrivateCrtKey + RSAMultiPrimePrivateCrtKeySpec + RSAOtherPrimeInfo + RSAPrivateCrtKey + RSAPrivateCrtKeySpec + RSAPrivateKey + RSAPrivateKeySpec + RSAPublicKey + RSAPublicKeySpec + RTFEditorKit + Random + RandomAccess + RandomAccessFile + Raster + RasterFormatException + RasterOp + Rdn + ReadOnlyBufferException + ReadWriteLock + Readable + ReadableByteChannel + Reader + RealmCallback + RealmChoiceCallback + Receiver + Rectangle + Rectangle2D + Rectangle2D.Double + Rectangle2D.Float + RectangularShape + ReentrantLock + ReentrantReadWriteLock + ReentrantReadWriteLock.ReadLock + ReentrantReadWriteLock.WriteLock + Ref + RefAddr + Reference + Reference + ReferenceQueue + ReferenceUriSchemesSupported + Referenceable + ReferralException + ReflectPermission + ReflectionException + RefreshFailedException + Refreshable + Region + RegisterableService + Registry + RegistryHandler + RejectedExecutionException + RejectedExecutionHandler + Relation + RelationException + RelationNotFoundException + RelationNotification + RelationService + RelationServiceMBean + RelationServiceNotRegisteredException + RelationSupport + RelationSupportMBean + RelationType + RelationTypeNotFoundException + RelationTypeSupport + RemarshalException + Remote + RemoteCall + RemoteException + RemoteObject + RemoteObjectInvocationHandler + RemoteRef + RemoteServer + RemoteStub + RenderContext + RenderableImage + RenderableImageOp + RenderableImageProducer + RenderedImage + RenderedImageFactory + Renderer + RenderingHints + RenderingHints.Key + RepaintManager + ReplicateScaleFilter + RepositoryIdHelper + Request + RequestInfo + RequestInfoOperations + RequestProcessingPolicy + RequestProcessingPolicyOperations + RequestProcessingPolicyValue + RequestingUserName + RequiredModelMBean + RescaleOp + ResolutionSyntax + ResolveResult + Resolver + ResourceBundle + ResponseCache + ResponseHandler + Result + ResultSet + ResultSetMetaData + Retention + RetentionPolicy + ReverbType + Robot + Role + RoleInfo + RoleInfoNotFoundException + RoleList + RoleNotFoundException + RoleResult + RoleStatus + RoleUnresolved + RoleUnresolvedList + RootPaneContainer + RootPaneUI + RoundRectangle2D + RoundRectangle2D.Double + RoundRectangle2D.Float + RoundingMode + RowMapper + RowSet + RowSetEvent + RowSetInternal + RowSetListener + RowSetMetaData + RowSetMetaDataImpl + RowSetReader + RowSetWarning + RowSetWriter + RuleBasedCollator + RunTime + RunTimeOperations + Runnable + Runtime + RuntimeErrorException + RuntimeException + RuntimeMBeanException + RuntimeMXBean + RuntimeOperationsException + RuntimePermission + SAXException + SAXNotRecognizedException + SAXNotSupportedException + SAXParseException + SAXParser + SAXParserFactory + SAXResult + SAXSource + SAXTransformerFactory + SERVANT_RETENTION_POLICY_ID + SQLData + SQLException + SQLInput + SQLInputImpl + SQLOutput + SQLOutputImpl + SQLPermission + SQLWarning + SSLContext + SSLContextSpi + SSLEngine + SSLEngineResult + SSLEngineResult.HandshakeStatus + SSLEngineResult.Status + SSLException + SSLHandshakeException + SSLKeyException + SSLPeerUnverifiedException + SSLPermission + SSLProtocolException + SSLServerSocket + SSLServerSocketFactory + SSLSession + SSLSessionBindingEvent + SSLSessionBindingListener + SSLSessionContext + SSLSocket + SSLSocketFactory + SUCCESSFUL + SYNC_WITH_TRANSPORT + SYSTEM_EXCEPTION + SampleModel + Sasl + SaslClient + SaslClientFactory + SaslException + SaslServer + SaslServerFactory + Savepoint + Scanner + ScatteringByteChannel + ScheduledExecutorService + ScheduledFuture + ScheduledThreadPoolExecutor + Schema + SchemaFactory + SchemaFactoryLoader + SchemaViolationException + ScrollBarUI + ScrollPane + ScrollPaneAdjustable + ScrollPaneConstants + ScrollPaneLayout + ScrollPaneLayout.UIResource + ScrollPaneUI + Scrollable + Scrollbar + SealedObject + SearchControls + SearchResult + SecretKey + SecretKeyFactory + SecretKeyFactorySpi + SecretKeySpec + SecureCacheResponse + SecureClassLoader + SecureRandom + SecureRandomSpi + Security + SecurityException + SecurityManager + SecurityPermission + Segment + SelectableChannel + SelectionKey + Selector + SelectorProvider + Semaphore + SeparatorUI + Sequence + SequenceInputStream + Sequencer + Sequencer.SyncMode + SerialArray + SerialBlob + SerialClob + SerialDatalink + SerialException + SerialJavaObject + SerialRef + SerialStruct + Serializable + SerializablePermission + Servant + ServantActivator + ServantActivatorHelper + ServantActivatorOperations + ServantActivatorPOA + ServantAlreadyActive + ServantAlreadyActiveHelper + ServantLocator + ServantLocatorHelper + ServantLocatorOperations + ServantLocatorPOA + ServantManager + ServantManagerOperations + ServantNotActive + ServantNotActiveHelper + ServantObject + ServantRetentionPolicy + ServantRetentionPolicyOperations + ServantRetentionPolicyValue + ServerCloneException + ServerError + ServerException + ServerIdHelper + ServerNotActiveException + ServerRef + ServerRequest + ServerRequestInfo + ServerRequestInfoOperations + ServerRequestInterceptor + ServerRequestInterceptorOperations + ServerRuntimeException + ServerSocket + ServerSocketChannel + ServerSocketFactory + ServiceContext + ServiceContextHelper + ServiceContextHolder + ServiceContextListHelper + ServiceContextListHolder + ServiceDetail + ServiceDetailHelper + ServiceIdHelper + ServiceInformation + ServiceInformationHelper + ServiceInformationHolder + ServiceNotFoundException + ServicePermission + ServiceRegistry + ServiceRegistry.Filter + ServiceUI + ServiceUIFactory + ServiceUnavailableException + Set + SetOfIntegerSyntax + SetOverrideType + SetOverrideTypeHelper + Severity + Shape + ShapeGraphicAttribute + SheetCollate + Short + ShortBuffer + ShortBufferException + ShortHolder + ShortLookupTable + ShortMessage + ShortSeqHelper + ShortSeqHolder + Sides + Signature + SignatureException + SignatureSpi + SignedObject + Signer + SimpleAttributeSet + SimpleBeanInfo + SimpleDateFormat + SimpleDoc + SimpleFormatter + SimpleTimeZone + SimpleType + SinglePixelPackedSampleModel + SingleSelectionModel + Size2DSyntax + SizeLimitExceededException + SizeRequirements + SizeSequence + Skeleton + SkeletonMismatchException + SkeletonNotFoundException + SliderUI + Socket + SocketAddress + SocketChannel + SocketException + SocketFactory + SocketHandler + SocketImpl + SocketImplFactory + SocketOptions + SocketPermission + SocketSecurityException + SocketTimeoutException + SoftBevelBorder + SoftReference + SortControl + SortKey + SortResponseControl + SortedMap + SortedSet + SortingFocusTraversalPolicy + Soundbank + SoundbankReader + SoundbankResource + Source + SourceDataLine + SourceLocator + SpinnerDateModel + SpinnerListModel + SpinnerModel + SpinnerNumberModel + SpinnerUI + SplitPaneUI + Spring + SpringLayout + SpringLayout.Constraints + SslRMIClientSocketFactory + SslRMIServerSocketFactory + Stack + StackOverflowError + StackTraceElement + StandardMBean + StartTlsRequest + StartTlsResponse + State + StateEdit + StateEditable + StateFactory + Statement + Statement + StreamCorruptedException + StreamHandler + StreamPrintService + StreamPrintServiceFactory + StreamResult + StreamSource + StreamTokenizer + Streamable + StreamableValue + StrictMath + String + StringBuffer + StringBufferInputStream + StringBuilder + StringCharacterIterator + StringContent + StringHolder + StringIndexOutOfBoundsException + StringMonitor + StringMonitorMBean + StringNameHelper + StringReader + StringRefAddr + StringSelection + StringSeqHelper + StringSeqHolder + StringTokenizer + StringValueExp + StringValueHelper + StringWriter + Stroke + Struct + StructMember + StructMemberHelper + Stub + StubDelegate + StubNotFoundException + Style + StyleConstants + StyleConstants.CharacterConstants + StyleConstants.ColorConstants + StyleConstants.FontConstants + StyleConstants.ParagraphConstants + StyleContext + StyleSheet + StyleSheet.BoxPainter + StyleSheet.ListPainter + StyledDocument + StyledEditorKit + StyledEditorKit.AlignmentAction + StyledEditorKit.BoldAction + StyledEditorKit.FontFamilyAction + StyledEditorKit.FontSizeAction + StyledEditorKit.ForegroundAction + StyledEditorKit.ItalicAction + StyledEditorKit.StyledTextAction + StyledEditorKit.UnderlineAction + Subject + SubjectDelegationPermission + SubjectDomainCombiner + SupportedValuesAttribute + SuppressWarnings + SwingConstants + SwingPropertyChangeSupport + SwingUtilities + SyncFactory + SyncFactoryException + SyncFailedException + SyncProvider + SyncProviderException + SyncResolver + SyncScopeHelper + SynchronousQueue + SynthConstants + SynthContext + SynthGraphicsUtils + SynthLookAndFeel + SynthPainter + SynthStyle + SynthStyleFactory + Synthesizer + SysexMessage + System + SystemColor + SystemException + SystemFlavorMap + TAG_ALTERNATE_IIOP_ADDRESS + TAG_CODE_SETS + TAG_INTERNET_IOP + TAG_JAVA_CODEBASE + TAG_MULTIPLE_COMPONENTS + TAG_ORB_TYPE + TAG_POLICIES + TAG_RMI_CUSTOM_MAX_STREAM_FORMAT + TCKind + THREAD_POLICY_ID + TIMEOUT + TRANSACTION_MODE + TRANSACTION_REQUIRED + TRANSACTION_ROLLEDBACK + TRANSACTION_UNAVAILABLE + TRANSIENT + TRANSPORT_RETRY + TabExpander + TabSet + TabStop + TabableView + TabbedPaneUI + TableCellEditor + TableCellRenderer + TableColumn + TableColumnModel + TableColumnModelEvent + TableColumnModelListener + TableHeaderUI + TableModel + TableModelEvent + TableModelListener + TableUI + TableView + TabularData + TabularDataSupport + TabularType + TagElement + TaggedComponent + TaggedComponentHelper + TaggedComponentHolder + TaggedProfile + TaggedProfileHelper + TaggedProfileHolder + Target + TargetDataLine + TargetedNotification + Templates + TemplatesHandler + Text + TextAction + TextArea + TextAttribute + TextComponent + TextEvent + TextField + TextHitInfo + TextInputCallback + TextLayout + TextLayout.CaretPolicy + TextListener + TextMeasurer + TextOutputCallback + TextSyntax + TextUI + TexturePaint + Thread + Thread.State + Thread.UncaughtExceptionHandler + ThreadDeath + ThreadFactory + ThreadGroup + ThreadInfo + ThreadLocal + ThreadMXBean + ThreadPolicy + ThreadPolicyOperations + ThreadPolicyValue + ThreadPoolExecutor + ThreadPoolExecutor.AbortPolicy + ThreadPoolExecutor.CallerRunsPolicy + ThreadPoolExecutor.DiscardOldestPolicy + ThreadPoolExecutor.DiscardPolicy + Throwable + Tie + TileObserver + Time + TimeLimitExceededException + TimeUnit + TimeZone + TimeoutException + Timer + Timer + Timer + TimerAlarmClockNotification + TimerMBean + TimerNotification + TimerTask + Timestamp + Timestamp + TitledBorder + TooManyListenersException + ToolBarUI + ToolTipManager + ToolTipUI + Toolkit + Track + TransactionRequiredException + TransactionRolledbackException + TransactionService + TransactionalWriter + TransferHandler + Transferable + TransformAttribute + Transformer + TransformerConfigurationException + TransformerException + TransformerFactory + TransformerFactoryConfigurationError + TransformerHandler + Transmitter + Transparency + TreeCellEditor + TreeCellRenderer + TreeExpansionEvent + TreeExpansionListener + TreeMap + TreeModel + TreeModelEvent + TreeModelListener + TreeNode + TreePath + TreeSelectionEvent + TreeSelectionListener + TreeSelectionModel + TreeSet + TreeUI + TreeWillExpandListener + TrustAnchor + TrustManager + TrustManagerFactory + TrustManagerFactorySpi + Type + TypeCode + TypeCodeHolder + TypeInfo + TypeInfoProvider + TypeMismatch + TypeMismatch + TypeMismatch + TypeMismatchHelper + TypeMismatchHelper + TypeNotPresentException + TypeVariable + Types + UID + UIDefaults + UIDefaults.ActiveValue + UIDefaults.LazyInputMap + UIDefaults.LazyValue + UIDefaults.ProxyLazyValue + UIManager + UIManager.LookAndFeelInfo + UIResource + ULongLongSeqHelper + ULongLongSeqHolder + ULongSeqHelper + ULongSeqHolder + UNKNOWN + UNKNOWN + UNSUPPORTED_POLICY + UNSUPPORTED_POLICY_VALUE + URI + URIException + URIResolver + URISyntax + URISyntaxException + URL + URLClassLoader + URLConnection + URLDecoder + URLEncoder + URLStreamHandler + URLStreamHandlerFactory + URLStringHelper + USER_EXCEPTION + UShortSeqHelper + UShortSeqHolder + UTFDataFormatException + UUID + UndeclaredThrowableException + UndoManager + UndoableEdit + UndoableEditEvent + UndoableEditListener + UndoableEditSupport + UnexpectedException + UnicastRemoteObject + UnionMember + UnionMemberHelper + UnknownEncoding + UnknownEncodingHelper + UnknownError + UnknownException + UnknownFormatConversionException + UnknownFormatFlagsException + UnknownGroupException + UnknownHostException + UnknownHostException + UnknownObjectException + UnknownServiceException + UnknownUserException + UnknownUserExceptionHelper + UnknownUserExceptionHolder + UnmappableCharacterException + UnmarshalException + UnmodifiableClassException + UnmodifiableSetException + UnrecoverableEntryException + UnrecoverableKeyException + Unreferenced + UnresolvedAddressException + UnresolvedPermission + UnsatisfiedLinkError + UnsolicitedNotification + UnsolicitedNotificationEvent + UnsolicitedNotificationListener + UnsupportedAddressTypeException + UnsupportedAudioFileException + UnsupportedCallbackException + UnsupportedCharsetException + UnsupportedClassVersionError + UnsupportedEncodingException + UnsupportedFlavorException + UnsupportedLookAndFeelException + UnsupportedOperationException + UserDataHandler + UserException + Util + UtilDelegate + Utilities + VMID + VM_ABSTRACT + VM_CUSTOM + VM_NONE + VM_TRUNCATABLE + Validator + ValidatorHandler + ValueBase + ValueBaseHelper + ValueBaseHolder + ValueExp + ValueFactory + ValueHandler + ValueHandlerMultiFormat + ValueInputStream + ValueMember + ValueMemberHelper + ValueOutputStream + VariableHeightLayoutCache + Vector + VerifyError + VersionSpecHelper + VetoableChangeListener + VetoableChangeListenerProxy + VetoableChangeSupport + View + ViewFactory + ViewportLayout + ViewportUI + VirtualMachineError + Visibility + VisibilityHelper + VoiceStatus + Void + VolatileImage + WCharSeqHelper + WCharSeqHolder + WStringSeqHelper + WStringSeqHolder + WStringValueHelper + WeakHashMap + WeakReference + WebRowSet + WildcardType + Window + WindowAdapter + WindowConstants + WindowEvent + WindowFocusListener + WindowListener + WindowStateListener + WrappedPlainView + WritableByteChannel + WritableRaster + WritableRenderedImage + WriteAbortedException + Writer + WrongAdapter + WrongAdapterHelper + WrongPolicy + WrongPolicyHelper + WrongTransaction + WrongTransactionHelper + WrongTransactionHolder + X500Principal + X500PrivateCredential + X509CRL + X509CRLEntry + X509CRLSelector + X509CertSelector + X509Certificate + X509Certificate + X509EncodedKeySpec + X509ExtendedKeyManager + X509Extension + X509KeyManager + X509TrustManager + XAConnection + XADataSource + XAException + XAResource + XMLConstants + XMLDecoder + XMLEncoder + XMLFilter + XMLFilterImpl + XMLFormatter + XMLGregorianCalendar + XMLParseException + XMLReader + XMLReaderAdapter + XMLReaderFactory + XPath + XPathConstants + XPathException + XPathExpression + XPathExpressionException + XPathFactory + XPathFactoryConfigurationException + XPathFunction + XPathFunctionException + XPathFunctionResolver + XPathVariableResolver + Xid + XmlReader + XmlWriter + ZipEntry + ZipException + ZipFile + ZipInputStream + ZipOutputStream + ZoneView + _BindingIteratorImplBase + _BindingIteratorStub + _DynAnyFactoryStub + _DynAnyStub + _DynArrayStub + _DynEnumStub + _DynFixedStub + _DynSequenceStub + _DynStructStub + _DynUnionStub + _DynValueStub + _IDLTypeStub + _NamingContextExtStub + _NamingContextImplBase + _NamingContextStub + _PolicyStub + _Remote_Stub + _ServantActivatorStub + _ServantLocatorStub + + + + AbstractAnnotationValueVisitor6 + AbstractElementVisitor6 + AbstractMarshallerImpl + AbstractOwnableSynchronizer + AbstractProcessor + AbstractQueuedLongSynchronizer + AbstractScriptEngine + AbstractTypeVisitor6 + AbstractUnmarshallerImpl + ActivationDataFlavor + AlgorithmMethod + AnnotationMirror + AnnotationValue + AnnotationValueVisitor + ArrayDeque + AsyncHandler + AttachmentMarshaller + AttachmentPart + AttachmentUnmarshaller + Binder + BindingProvider + Bindings + BlockingDeque + BreakIteratorProvider + C14NMethodParameterSpec + CanonicalizationMethod + Characters + ClientInfoStatus + CollapsedStringAdapter + CollatorProvider + CommandInfo + CommandMap + CommandObject + CommonDataSource + Compilable + CompiledScript + Completion + Completions + CompositeDataInvocationHandler + CompositeDataView + ConcurrentNavigableMap + ConcurrentSkipListMap + ConcurrentSkipListSet + ConfigurationSpi + Console + ConstructorProperties + CookieManager + CookiePolicy + CookieStore + CurrencyNameProvider + Data + DataContentHandler + DataContentHandlerFactory + DataHandler + DatatypeConverter + DatatypeConverterInterface + DateFormatProvider + DateFormatSymbolsProvider + DecimalFormatSymbolsProvider + DeclaredType + DefaultRowSorter + DefaultValidationEventHandler + DeflaterInputStream + Deque + DescriptorKey + DescriptorRead + Desktop + Detail + DetailEntry + Diagnostic + DiagnosticCollector + DiagnosticListener + DigestMethod + DigestMethodParameterSpec + Dispatch + DOMCryptoContext + DomHandler + DOMSignContext + DOMStructure + DOMURIReference + DOMValidateContext + DropMode + ElementFilter + ElementKind + ElementKindVisitor6 + Elements + ElementScanner6 + ElementVisitor + EndDocument + EndElement + Endpoint + EntityDeclaration + ErrorType + EventException + EventFilter + EventReaderDelegate + EventTarget + ExcC14NParameterSpec + ExecutableElement + ExecutableType + FileDataSource + FileNameExtensionFilter + FileObject + Filer + FilerException + FileTypeMap + ForwardingFileObject + ForwardingJavaFileManager + ForwardingJavaFileObject + Generated + GridBagLayoutInfo + GroupLayout + HandlerChain + HandlerResolver + HexBinaryAdapter + HMACParameterSpec + Holder + HTTPBinding + HttpCookie + HTTPException + IDN + ImmutableDescriptor + InflaterOutputStream + InitParam + InterfaceAddress + Invocable + IOError + JavaCompiler + JavaFileManager + JavaFileObject + JAXBContext + JAXBElement + JAXBException + JAXBIntrospector + JAXBResult + JAXBSource + JMX + JMXAddressable + KeyInfo + KeyInfoFactory + KeyName + KeySelector + KeySelectorException + KeySelectorResult + KeyValue + LayoutPath + LayoutStyle + LinearGradientPaint + LinkedBlockingDeque + LocaleNameProvider + LocaleServiceProvider + Location + LockInfo + LogicalHandler + LogicalMessage + LogicalMessageContext + MailcapCommandMap + Marshaller + MessageContext + MessageFactory + Messager + MimeHeader + MimeHeaders + MimeType + MimeTypeParameterList + MimetypesFileTypeMap + MirroredTypeException + MirroredTypesException + MLetContent + MonitorInfo + MultipleGradientPaint + MutationEvent + MXBean + Namespace + NavigableMap + NavigableSet + NClob + NestingKind + NodeSetData + NormalizedStringAdapter + Normalizer + NoSuchMechanismException + NotationDeclaration + NotIdentifiableEvent + NotIdentifiableEventImpl + NoType + NullType + NumberFormatProvider + OctetStreamData + Oneway + OptionChecker + PackageElement + ParseConversionEvent + ParseConversionEventImpl + Path2D + PGPData + PolicySpi + PortInfo + PostConstruct + PreDestroy + PrimitiveType + PrintConversionEvent + PrintConversionEventImpl + ProcessingEnvironment + Processor + PropertyException + RadialGradientPaint + ReferenceType + RequestWrapper + Resource + Resources + Response + ResponseWrapper + RetrievalMethod + RoundEnvironment + RowFilter + RowId + RowIdLifetime + RowSorter + RowSorterEvent + RowSorterListener + RunnableFuture + RunnableScheduledFuture + SAAJMetaFactory + SAAJResult + SchemaOutputResolver + ScriptContext + ScriptEngine + ScriptEngineFactory + ScriptEngineManager + ScriptException + Service + ServiceConfigurationError + ServiceDelegate + ServiceLoader + ServiceMode + SignatureMethod + SignatureMethodParameterSpec + SignatureProperties + SignatureProperty + SignedInfo + SimpleAnnotationValueVisitor6 + SimpleBindings + SimpleElementVisitor6 + SimpleJavaFileObject + SimpleScriptContext + SimpleTypeVisitor6 + SOAPBinding + SOAPBinding + SOAPBody + SOAPBodyElement + SOAPConnection + SOAPConnectionFactory + SOAPConstants + SOAPElement + SOAPElementFactory + SOAPEnvelope + SOAPException + SOAPFactory + SOAPFault + SOAPFaultElement + SOAPFaultException + SOAPHandler + SOAPHeader + SOAPHeaderElement + SOAPMessage + SOAPMessageContext + SOAPMessageHandler + SOAPMessageHandlers + SOAPPart + SortOrder + SourceVersion + SplashScreen + SQLClientInfoException + SQLDataException + SQLFeatureNotSupportedException + SQLIntegrityConstraintViolationException + SQLInvalidAuthorizationSpecException + SQLNonTransientConnectionException + SQLNonTransientException + SQLRecoverableException + SQLSyntaxErrorException + SQLTimeoutException + SQLTransactionRollbackException + SQLTransientConnectionException + SQLTransientException + SQLXML + SSLParameters + StandardEmitterMBean + StandardJavaFileManager + StandardLocation + StartDocument + StartElement + StatementEvent + StatementEventListener + StAXResult + StAXSource + StreamFilter + StreamReaderDelegate + SupportedAnnotationTypes + SupportedOptions + SupportedSourceVersion + SwingWorker + SystemTray + TableRowSorter + TableStringConverter + TimeZoneNameProvider + Tool + ToolProvider + Transform + TransformException + TransformParameterSpec + TransformService + TrayIcon + TypeConstraintException + TypeElement + TypeKind + TypeKindVisitor6 + TypeMirror + TypeParameterElement + TypeVisitor + UIEvent + UnknownAnnotationValueException + UnknownElementException + UnknownTypeException + Unmarshaller + UnmarshallerHandler + UnsupportedDataTypeException + URIDereferencer + URIParameter + URIReference + URIReferenceException + URLDataSource + ValidationEvent + ValidationEventCollector + ValidationEventHandler + ValidationEventImpl + ValidationEventLocator + ValidationEventLocatorImpl + ValidationException + VariableElement + W3CDomHandler + WebEndpoint + WebFault + WebMethod + WebParam + WebResult + WebService + WebServiceClient + WebServiceContext + WebServiceException + WebServicePermission + WebServiceProvider + WebServiceRef + WebServiceRefs + Wrapper + X509Data + X509IssuerSerial + XmlAccessOrder + XmlAccessorOrder + XmlAccessorType + XmlAccessType + XmlAdapter + XmlAnyAttribute + XmlAnyElement + XmlAttachmentRef + XmlAttribute + XMLCryptoContext + XmlElement + XmlElementDecl + XmlElementRef + XmlElementRefs + XmlElements + XmlElementWrapper + XmlEnum + XmlEnumValue + XMLEvent + XMLEventAllocator + XMLEventConsumer + XMLEventFactory + XMLEventReader + XMLEventWriter + XmlID + XmlIDREF + XmlInlineBinaryData + XMLInputFactory + XmlJavaTypeAdapter + XmlJavaTypeAdapters + XmlList + XmlMimeType + XmlMixed + XmlNs + XmlNsForm + XMLObject + XMLOutputFactory + XmlRegistry + XMLReporter + XMLResolver + XmlRootElement + XmlSchema + XmlSchemaType + XmlSchemaTypes + XMLSignature + XMLSignatureException + XMLSignatureFactory + XMLSignContext + XMLStreamConstants + XMLStreamException + XMLStreamReader + XMLStreamWriter + XMLStructure + XmlTransient + XmlType + XMLValidateContext + XmlValue + XPathFilter2ParameterSpec + XPathFilterParameterSpec + XPathType + XSLTTransformParameterSpec + ZipError + + + + + abstract + break + case + catch + class + continue + default + do + else + enum + extends + false + finally + for + goto + if + implements + instanceof + @interface + interface + native + new + null + private + protected + public + return + super + strictfp + switch + synchronized + this + throws + throw + transient + true + try + volatile + while + + + boolean + byte + char + const + double + final + float + int + long + short + static + void + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/javadoc.xml b/src/data/extra/syntax-highlighting/syntax/javadoc.xml new file mode 100644 index 00000000..e72488b2 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/javadoc.xml @@ -0,0 +1,111 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/javascript-react.xml b/src/data/extra/syntax-highlighting/syntax/javascript-react.xml new file mode 100644 index 00000000..48c96139 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/javascript-react.xml @@ -0,0 +1,382 @@ + + + + + + + + + + + + +]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/javascript.xml b/src/data/extra/syntax-highlighting/syntax/javascript.xml new file mode 100644 index 00000000..c0daa9cf --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/javascript.xml @@ -0,0 +1,289 @@ + + +]> + + + + + + + await + break + case + catch + continue + debugger + do + else + finally + for + if + return + switch + throw + try + while + with + + + const + delete + function + in + instanceof + new + of + this + typeof + var + void + + + async + class + enum + extends + super + + + arguments + implements + interface + let + private + protected + public + static + yield + + + import + from + as + default + export + package + + + Infinity + NaN + false + null + true + undefined + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/jcl.xml b/src/data/extra/syntax-highlighting/syntax/jcl.xml new file mode 100644 index 00000000..e674baca --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/jcl.xml @@ -0,0 +1,170 @@ + + + + + + + JOB + CLASS + PRTY + NOTIFY + MSGCLASS + MSGLEVEL + TYPRUN + TIME + REGION + + + IF + THEN + ELSE + ENDIF + + + AND + OR + GT + LT + RC + EQ + + + COND + MEMBER + ORDER + PARM + PGM + EXEC + PROC + RETAIN + SYSDA + DD + + + ACCODE + AMP + AVGREC + SET + BLKSZLIM + BLKSIZE + BURST + CCSID + CHARS + CHKPT + CNTL + COPIES + DATA + DATACLAS + DCB + DDNAME + DEST + DISP + DLM + DSID + DSNAME + DSN + DSNTYPE + DSORG + DUMMY + DYNAM + EATTR + EXPDT + FCB + FILEDATA + FLASH + FREE + FREEVOL + GDGORDER + HOLD + KEYENCD1 + KEYENCD2 + KEYLABL1 + KEYLABL2 + KEYLEN + KEYOFF + LABEL + LGSTREAM + LIKE + LRECL + MAXGENS + MGMTCLAS + MODIFY + OUTLIM + OUTPUT + PATH + PATHDISP + PATHMODE + PATHOPTS + PROTECT + RECFM + RECORG + REFDD + RETPD + RLS + RLSE + SECMODEL + SEGMENT + SPACE + SPIN + STORCLAS + SUBSYS + SYMBOLS + SYMLIST + SYSOUT + TERM + UCS + UNIT + VOLUME + JCLLIB + STEPLIB + SYSEXEC + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/jira.xml b/src/data/extra/syntax-highlighting/syntax/jira.xml new file mode 100644 index 00000000..aa556bf9 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/jira.xml @@ -0,0 +1,718 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + +]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/json.xml b/src/data/extra/syntax-highlighting/syntax/json.xml new file mode 100644 index 00000000..28ad8e8a --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/json.xml @@ -0,0 +1,104 @@ + + + + + + + null + true + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/jsp.xml b/src/data/extra/syntax-highlighting/syntax/jsp.xml new file mode 100644 index 00000000..c7c8755d --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/jsp.xml @@ -0,0 +1,245 @@ + + + + + + + and + eq + gt + true + instanceof + or + ne + le + false + empty + not + lt + ge + null + div + mod + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/julia.xml b/src/data/extra/syntax-highlighting/syntax/julia.xml new file mode 100644 index 00000000..868341ab --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/julia.xml @@ -0,0 +1,708 @@ + + + + + +]> + + + + + + begin + do + for + function + if + let + quote + try + type + while + + + catch + finally + else + elseif + + + end + + + abstract + bitstype + break + ccall + const + continue + export + global + import + in + local + macro + module + return + typealias + importall + baremodule + using + where + new + in + struct + ans + + ccall + + + AbstractArray + AbstractMatrix + AbstractVector + Any + Array + ASCIIString + Associative + Bool + ByteString + Char + Complex + Complex64 + Complex128 + ComplexPair + DArray + Dict + Exception + Expr + Float + Float32 + Float64 + Function + ObjectIdDict + Int + Int8 + Int16 + Int32 + Int64 + Integer + IntSet + IO + IOStream + Matrix + Nothing + None + NTuple + Number + Ptr + Range + Range1 + Ranges + Rational + Real + Regex + RegexMatch + Set + Signed + StridedArray + StridedMatrix + StridedVecOrMat + StridedVector + String + SubArray + SubString + Symbol + Task + Tuple + Type + UInt + UInt8 + UInt16 + UInt32 + UInt64 + Union + Unsigned + UTF8String + VecOrMat + Vector + Void + WeakRef + + Missing + Cmd + EnvDict + VersionNumber + ArgumentError + AssertionError + BoundsError + CompositeException + DimensionMismatch + DivideError + DomainError + EOFError + ErrorException + InexactError + InterruptException + KeyError + LoadError + MethodError + MissingException + OutOfMemoryError + ReadOnlyMemoryError + OverflowError + StackOverflowError + SystemError + TypeError + UndefKeywordError + UndefRefError + UndefVarError + StringIndexError + InitError + ExponentialBackOff + Timer + AsyncCondition + ParseError + + IteratorEltype + AbstractRange + OrdinalRange + AbstractUnitRange + StepRange + UnitRange + LinRange + IdDict + WeakKeyDict + ImmutableDict + BitSet + Pair + + OneTo + StepRangeLen + RoundingMode + + AbstractFloat + AbstractIrrational + Float16 + Float32 + Float64 + BigFloat + Int128 + UInt128 + BigInt + ComplexF16 + ComplexF32 + ComplexF64 + Irrational + UnionAll + NamedTuple + Val + Vararg + Some + + AbstractChar + SubstitutionString + AbstractString + + UndefInitializer + DenseArray + DenseVector + DenseMatrix + BitArray + IndexStyle + IndexLinear + IndexCartesian + BroadcastStyle + AbstractArrayStyle + ArrayStyle + DefaultArrayStyle + Colon + CartesianIndex + CartesianIndices + Dims + LinearIndices + PermutedDimsArray + + Condition + Channel + + Atomic + AbstractLock + ReentrantLock + Mutex + SpinLock + RecursiveSpinLock + Semaphore + + RawFD + + IOBuffer + IOContext + TextDisplay + AbstractDisplay + + PartialQuickSort + + Stateful + + Pairs + + CFunction + Ptr + Ref + Cchar + Cuchar + Cshort + Cstring + Cushort + Cint + Cuint + Clong + Culong + Clonglong + Culonglong + Cintmax_t + Cuintmax_t + Csize_t + Cssize_t + Cptrdiff_t + Cwchar_t + Cwstring + Cfloat + Cdouble + + TmStruct + + StackFrame + StackTrace + + Base64EncodePipe + Base64DecodePipe + + Period + CompoundPeriod + Instant + UTInstant + TimeType + DateTime + Date + Time + DateFormat + + LogLevel + AbstractLogger + NullLogger + ConsoleLogger + SimpleLogger + + Anonymous + + RandomDevice + MersenneTwister + + SharedArray + + IPv4 + IPv6 + TCPSocket + UDPSocket + + SparseVector + SparseMatrixCSC + + AbstractChannel + AbstractSet + AbstractDict + BitMatrix + BitVector + Enum + CapturedException + InvalidStateException + ProcessFailedException + + + + + nothing + PROGRAM_FILE + ARGS + C_NULL + VERSION + LOAD_PATH + DEPOT_PATH + + BINDIR + CPU_THREADS + WORD_SIZE + KERNEL + ARCH + MACHINE + + missing + devnull + ENV + + stdout + stderr + stdin + open + read + write + create + truncate + append + ENDIAN_BOM + + im + pi + e + catalan + eulergamma + golden + Inf + Inf64 + Inf32 + Inf16 + NaN + NaN64 + NaN32 + NaN16 + + RoundNearest + RoundNearestTiesAway + RoundNearestTiesUp + RoundToZero + RoundFromZero + RoundUp + RoundDown + + AbstractVecOrMat + undef + VecOrMat + DenseVecOrMat + StridedArray + StridedVector + StridedMatrix + StridedVecOrMat + + InsertionSort + MergeSort + QuickSort + InsertionSort + + MS_ASYNC + MS_INVALIDATE + MS_SYNC + + + true + false + + + Base + Core + Main + Meta + StackTraces + Sys + Libc + Docs + Threads + Iterators + Broadcast + MathConstants + Math + Unicode + Sort + Base64 + Dates + Mmap + Random + SharedArrays + Sockets + SparseArrays + CoreLogging + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/k.xml b/src/data/extra/syntax-highlighting/syntax/k.xml new file mode 100644 index 00000000..9cd0fe3f --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/k.xml @@ -0,0 +1,430 @@ + + + + + + while + if + do + + + abs + acos + asin + atan + avg + bin + by + cos + delete + div + exec + exit + exp + from + getenv + i + in + insert + last + like + log + max + min + prd + select + setenv + sin + sqrt + ss + sum + tan + update + wavg + within + wsum + xexp + + + .Q.addmonths + .Q.addr + .Q.host + .Q.chk + .Q.cn + .Q.dd + .Q.dpft + .Q.dsftg + .Q.def + .Q.en + .Q.fc + .Q.fk + .Q.fmt + .Q.foo + .Q.fs + .Q.ft + .Q.fu + .Q.gc + .Q.hdpf + .Q.ind + .Q.j10 + .Q.x10 + .Q.j12 + .Q.x12 + .Q.k + .Q.l + .Q.opt + .Q.par + .Q.qp + .Q.qt + .Q.s + .Q.s1 + .Q.ty + .Q.v + .Q.V + .Q.view + .Q.w + .Q.M + .Q.pf + .Q.pt + .Q.PD + .Q.PV + .Q.pd + .Q.pv + .Q.pn + .Q.bv + .Q.vp + .Q.P + .Q.D + .Q.u + + + .h.br + .h.c0 + .h.c1 + .h.cd + .h.code + .h.data + .h.eb + .h.ec + .h.ed + .h.edsn + .h.es + .h.ex + .h.fram + .h.ha + .h.hb + .h.hc + .h.he + .h.hn + .h.hp + .h.hr + .h.ht + .h.hta + .h.htac + .h.htc + .h.html + .h.http + .h.hu + .h.hug + .h.hy + .h.iso8601 + .h.jx + .h.logo + .h.nbr + .h.pre + .h.text + .h.tx + .h.ty + .h.uh + .h.xd + .h.xmp + .h.xs + .h.xt + + + .o.B0 + .o.C0 + .o.Cols + .o.Columns + .o.FG + .o.Fkey + .o.Gkey + .o.Key + .o.PS + .o.Special + .o.Stats + .o.T + .o.T0 + .o.TI + .o.Tables + .o.Ts + .o.TypeInfo + .o.ex + .o.o + .o.t + + + .z.a + .z.ac + .z.b + .z.bm + .z.c + .z.exit + .z.f + .z.h + .z.i + .z.k + .z.K + .z.l + .z.n + .z.N + .z.o + .z.p + .z.P + .z.pc + .z.pg + .z.ph + .z.pi + .z.po + .z.pp + .z.ps + .z.pw + .z.q + .z.s + .z.ts + .z.u + .z.vs + .z.w + .z.W + .z.ws + .z.x + .z.z + .z.Z + .z.t + .z.T + .z.d + .z.D + .z.zd + + + .q.aj + .q.aj0 + .q.all + .q.and + .q.any + .q.asc + .q.asof + .q.attr + .q.avgs + .q.ceiling + .q.cols + .q.cor + .q.count + .q.cov + .q.cross + .q.csv + .q.cut + .q.deltas + .q.desc + .q.dev + .q.differ + .q.distinct + .q.each + .q.ej + .q.enlist + .q.eval + .q.except + .q.fby + .q.fills + .q.first + .q.fkeys + .q.flip + .q.floor + .q.get + .q.group + .q.gtime + .q.hclose + .q.hcount + .q.hdel + .q.hopen + .q.hsym + .q.iasc + .q.idesc + .q.ij + .q.inter + .q.inv + .q.key + .q.keys + .q.lj + .q.load + .q.lower + .q.lsq + .q.ltime + .q.ltrim + .q.mavg + .q.maxs + .q.mcount + .q.md5 + .q.mdev + .q.med + .q.meta + .q.mins + .q.mmax + .q.mmin + .q.mmu + .q.mod + .q.msum + .q.neg + .q.next + .q.not + .q.null + .q.or + .q.over + .q.parse + .q.peach + .q.pj + .q.plist + .q.prds + .q.prev + .q.prior + .q.rand + .q.rank + .q.ratios + .q.raze + .q.read0 + .q.read1 + .q.reciprocal + .q.reverse + .q.rload + .q.rotate + .q.rsave + .q.rtrim + .q.save + .q.scan + .q.set + .q.show + .q.signum + .q.ssr + .q.string + .q.sublist + .q.sums + .q.sv + .q.system + .q.tables + .q.til + .q.trim + .q.txf + .q.type + .q.uj + .q.ungroup + .q.union + .q.upper + .q.upsert + .q.value + .q.var + .q.view + .q.views + .q.vs + .q.where + .q.wj + .q.wj1 + .q.xasc + .q.xbar + .q.xcol + .q.xcols + .q.xdesc + .q.xgroup + .q.xkey + .q.xlog + .q.xprev + .q.xrank + + + TODO + FIXME + FIX + HACK + XXX + NOTE + GOTCHA + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/kbasic.xml b/src/data/extra/syntax-highlighting/syntax/kbasic.xml new file mode 100644 index 00000000..41fc705b --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/kbasic.xml @@ -0,0 +1,97 @@ + + + + + + For + Next + Do + Loop + While + Wend + Until + If + Else + End + Function + Goto + Sub + Implements + In + Sub + Private + Public + Global + As + Dim + Set + Let + Get + To + Property + True + False + Or + Not + Xor + And + Then + Exit + Put + Open + Close + Seek + Print + Input + Output + Repeat + Load + Unload + Declare + Option + Explicit + + + Integer + Long + Byte + Boolean + Variant + Single + Double + Currency + String + Object + Control + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/kconfig.xml b/src/data/extra/syntax-highlighting/syntax/kconfig.xml new file mode 100644 index 00000000..e5e7433c --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/kconfig.xml @@ -0,0 +1,1144 @@ + + + + + + + + +]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/kdesrc-buildrc.xml b/src/data/extra/syntax-highlighting/syntax/kdesrc-buildrc.xml new file mode 100644 index 00000000..6eaddff6 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/kdesrc-buildrc.xml @@ -0,0 +1,247 @@ + + + + + + + true + false + TRUE + FALSE + 0 + 1 + + + + set-env + + + + + use-modules + ignore-modules + + + + + async + colorful-output + disable-agent-check + disable-snapshot + pretend + purge-old-logs + stop-on-failure + use-idle-io-priority + + + + build-system-only + build-when-unchanged + ignore-kde-structure + install-after-build + install-session-driver + manual-build + manual-update + no-src + reconfigure + recreate-configure + refresh-build + run-tests + use-clean-install + + + + branch-group + git-desired-protocol + git-repository-base + http-proxy + kde-languages + niceness + debug-level + persistent-data-file + + + + binpath + branch + build-dir + checkout-only + cmake-options + configure-flags + custom-build-command + cxxflags + dest-dir + do-not-compile + git-user + kdedir + libpath + log-dir + make-install-prefix + make-options + module-base-path + override-build-system + override-url + prefix + qmake-options + qtdir + remove-after-install + repository + revision + source-dir + svn-server + tag + + + + include + + + module + options + + + module-set + + + global + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/kotlin.xml b/src/data/extra/syntax-highlighting/syntax/kotlin.xml new file mode 100644 index 00000000..db58f670 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/kotlin.xml @@ -0,0 +1,298 @@ + + + + + + + package + import + + sealed + data + class + enum + interface + companion + object + + private + public + protected + internal + open + final + + get + set + fun + var + val + constructor + + inline + reified + crossinline + tailrec + + in + out + is + as + by + where + + vararg + get + set + + return + throw + + typealias + typeof + override + infix + operator + + + if + else + when + + for + while + do + + try + catch + finally + + continue + break + yield + + + this + super + null + true + false + + + Unit + Nothing + + String + Char + + Int + Long + Byte + Short + Float + Double + + Boolean + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/latex.xml b/src/data/extra/syntax-highlighting/syntax/latex.xml new file mode 100644 index 00000000..df05bf33 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/latex.xml @@ -0,0 +1,1107 @@ + + + +]> + + + + \begin + + + + \end + + + + \Autocite + \autocite + \autoref + \Cite + \cite + \Citeauthor + \citeauthor + \citep + \citet + \citetitle + \citeurl + \citeyear + \cref + \Cref + \cref* + \Cref* + \eqref + \Footcite + \footcite + \footfullcite + \fullcite + \label + \nocite + \pagecite + \pageref + \Parencite + \parencite + \ref + \subref + \subref* + \supercite + \Textcite + \textcite + \vpageref + \vref + + + + \documentclass + \includegraphics + \include + \usepackage + \bibliography + \bibliographystyle + + + + \cites + \Cites + \parencites + \Parencites + \autocites + \Autocites + \supercites + \footcites + \Footcites + + + + \part* + \part + \chapter* + \chapter + \section* + \section + \subsection* + \subsection + \subsubsection* + \subsubsection + \paragraph* + \paragraph + \subparagraph* + \subparagraph + + + + \column + \definecolor + \geometry + \hspace* + \hspace + \input + \newboolean + \rule + \setboolean + \setcounter + \setlength + \special + \textcolor + \vspace* + \vspace + + + + \footnote* + \footnote + + + + \renewcommand* + \renewcommand + \providecommand* + \providecommand + \newcommand* + \newcommand + + + + \edef + \gdef + \xdef + + + + \ensuremath + + + + \iffalse + + + + \fi + \else + + + + verb* + verb + Verb + + + + lstinline + + + + mint + + + + lstlisting* + lstlisting + + + + minted* + minted + + + + Verbatim* + Verbatim + BVerbatim* + BVerbatim + LVerbatim* + LVerbatim + verbatim* + verbatim + boxedverbatim* + boxedverbatim + + + + comment* + comment + + + + alignat* + alignat + xalignat* + xalignat + xxalignat* + xxalignat + + + + Bmatrix* + Bmatrix + IEEEeqnarray* + IEEEeqnarray + IEEEeqnarraybox* + IEEEeqnarraybox + Vmatrix* + Vmatrix + align* + align + bmatrix* + bmatrix + cases* + cases + displaymath* + displaymath + eqnarray* + eqnarray + equation* + equation + flalign* + flalign + gather* + gather + math* + math + multline* + multline + pmatrix* + pmatrix + smallmatrix* + smallmatrix + subeqnarray* + subeqnarray + vmatrix* + vmatrix + + + + tabularx* + tabularx + tabular* + tabular + supertabular* + supertabular + mpsupertabular* + mpsupertabular + xtabular* + xtabular + mpxtabular* + mpxtabular + longtable* + longtable + + + + \text + \textit + \textbf + \textmd + \textsl + \textsc + \textrm + \textsf + \texttt + \textup + \textlf + \textnormal + \shortintertext + \intertext + \mbox + \emph + + + + \KileResetHL + \KateResetHL + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/ld.xml b/src/data/extra/syntax-highlighting/syntax/ld.xml new file mode 100644 index 00000000..0f7a8aff --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/ld.xml @@ -0,0 +1,84 @@ + + + + + + + AT + ENTRY + INPUT + GROUP + OUTPUT + OUTPUT_ARCH + OUTPUT_FORMAT + SEARCH_DIR + STARTUP + TARGET + + + ABSOLUTE + ADDR + ALIGN + DATA_SEGMENT_ALIGN + DATA_SEGMENT_END + DATA_SEGMENT_RELRO_END + DEFINED + LOADADDR + MAX + MIN + NEXT + SIZEOF + SIZEOF_HEADERS + + + SECTIONS + MEMORY + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/ldif.xml b/src/data/extra/syntax-highlighting/syntax/ldif.xml new file mode 100644 index 00000000..c49dbf75 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/ldif.xml @@ -0,0 +1,304 @@ + + + + + + IPPhone + URL + aRecord + aliasedEntryName + aliasedObjectName + associatedDomain + associatedName + audio + authorityRevocationList + bootFile + bootParameter + buildingName + businessCategory + c + cACertificate + cNAMERecord + certificateRevocationList + cn + comment + commonName + conferenceInformation + corbaContainer + corbaRepositoryId + countryName + crossCertificatePair + custom1 + custom2 + custom3 + custom4 + dITRedirect + dSAQuality + dc + deltaRevocationList + description + destinationIndicator + distinguishedName + dmdName + dnQualifier + documentAuthor + documentIdentifier + documentLocation + documentPublisher + documentTitle + documentVersion + domainComponent + enhancedSearchGuide + facsimileTelephoneNumber + fax + gecos + generationQualifier + gidNumber + givenName + gn + homeDirectory + homePostalAddress + homeUrl + host + houseIdentifier + info + initials + internationaliSDNNumber + ipHostNumber + ipNetmaskNumber + ipNetworkNumber + ipProtocolNumber + ipServicePort + ipServiceProtocol + janetMailbox + javaClassNames + javaCodebase + javaContainer + javaDoc + javaFactory + javaReferenceAddress + javaSerializedData + knowledgeInformation + l + labeledURI + lastModifiedBy + lastModifiedTime + lmpassword + localityName + loginShell + mDRecord + mXRecord + macAddress + mail + manager + member + memberNisNetgroup + memberUid + mozillaHomeCountryName + mozillaHomeFriendlyCountryName + mozillaHomeLocalityName + mozillaHomePostalAddress2 + mozillaHomePostalCode + mozillaHomeState + mozillaPostalAddress2 + mozillaSecondemail + nSRecord + name + nisMapEntry + nisMapName + nisNetgroupTriple + ntpasswd + o + objectClass + oncRpcNumber + organizationName + organizationalStatus + organizationalUnitName + otherFacsimiletelephoneNumber + otherMailbox + ou + owner + personalSignature + personalTitle + photo + physicalDeliveryOfficeName + postOfficeBox + postalAddress + postalCode + preferredDeliveryMethod + presentationAddress + protocolInformation + rdn + registeredAddress + reports + rfc822Mailbox + roleOccupant + roomNumber + sOARecord + searchGuide + secretary + seeAlso + serialNumber + shadowExpire + shadowFlag + shadowInactive + shadowLastChange + shadowMax + shadowMin + shadowWarning + singleLevelQuality + sn + st + stateOrProvinceName + street + streetAddress + subtreeMaximumQuality + subtreeMinimumQuality + supportedAlgorithms + supportedApplicationContext + surname + telephoneNumber + teletexTerminalIdentifier + telexNumber + textEncodedORAddress + title + uid + uidNumber + uniqueIdentifier + uniqueMember + userCertificate + userClass + userPassword + userid + workUrl + x121Address + x500UniqueIdentifier + xmozillaNickname + xmozillaUseHtmlMail + xmozillanickname + xmozillausehtmlmail + + + RFC822localPart + SUP + account + alias + applicationEntity + applicationProcess + bootableDevice + cRLDistributionPoint + certificationAuthority + certificationAuthority-V2 + corbaObject + corbaObjectReference + country + dNSDomain + dSA + dcObject + deltaCRL + device + dmd + document + documentSeries + domain + domainRelatedObject + friendlyCountry + groupOfNames + groupOfUniqueNames + ieee802Device + inetOrgPerson + ipHost + ipNetwork + ipProtocol + ipService + javaClassName + javaMarshalledObject + javaNamingReference + javaObject + javaSerializedObject + labeledURIObject + locality + mozillaAbPersonObsolete + nisMap + nisNetgroup + nisObject + officePerson + oncRpc + organization + organizationalPerson + organizationalRole + organizationalUnit + pager + pagerTelephoneNumber + person + pilotDSA + pilotObject + pilotOrganization + pkiCA + pkiUser + posixAccount + posixGroup + qualityLabelledData + residentialPerson + rid + room + sambaAccount + shadowAccount + simpleSecurityObject + strongAuthenticationUser + telephoneNumber + top + uid + uidNumber + uidObject + userSecurityInformation + userid + xmozillaanyphone + zillaPerson + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/less.xml b/src/data/extra/syntax-highlighting/syntax/less.xml new file mode 100644 index 00000000..423d2f6c --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/less.xml @@ -0,0 +1,459 @@ + + + + +]> + + + + + + properties##CSS + within-@font-face##CSS + + + + values##CSS + + + + value keywords##CSS + + + + colors##CSS + + + + functions##CSS + + + + + color + convert + data-uri + default + get-unit + image-height + image-size + image-width + svg-gradient + unit + + + % + e + escape + replace + + + extract + length + + + abs + acos + asin + atan + ceil + cos + floor + max + min + mod + percentage + pi + pow + round + sin + sqrt + tan + + + iscolor + isem + iskeyword + isnumber + ispercentage + ispixel + isruleset + isstring + isunit + isurl + + + argb + hsl + hsla + hsv + hsva + rgb + rgba + + + alpha + blue + green + hsvhue + hsvsaturation + hsvvalue + hue + lightness + luma + luminance + red + saturation + + + contrast + darken + desaturate + fade + fadein + fadeout + greyscale + lighten + mix + saturate + shade + spin + tint + + + average + difference + exclusion + hardlight + multiply + negation + overlay + screen + softlight + + + + all + aural + braille + embossed + handheld + print + projection + screen + speech + tty + tv + + + + media operators##CSS + or + + + + width + min-width + max-width + height + min-height + max-height + device-width + min-device-width + max-device-width + device-height + min-device-height + max-device-height + orientation + aspect-ratio + min-aspect-ratio + max-aspect-ratio + device-aspect-ratio + min-device-aspect-ratio + max-device-aspect-ratio + color + min-color + max-color + color-index + min-color-index + max-color-index + monochrome + min-monochrome + max-monochrome + resolution + min-resolution + max-resolution + scan + grid + + + + pseudoclasses##CSS + + extend + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/lex.xml b/src/data/extra/syntax-highlighting/syntax/lex.xml new file mode 100644 index 00000000..7f605752 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/lex.xml @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/lilypond.xml b/src/data/extra/syntax-highlighting/syntax/lilypond.xml new file mode 100644 index 00000000..fc92d543 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/lilypond.xml @@ -0,0 +1,1199 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +]> + + + + + + + ChoirStaff + ChordNames + CueVoice + Devnull + DrumStaff + DrumVoice + Dynamics + FiguredBass + FretBoards + Global + GrandStaff + GregorianTranscriptionStaff + GregorianTranscriptionVoice + Lyrics + MensuralStaff + MensuralVoice + NoteNames + PianoStaff + RhythmicStaff + Score + Staff + StaffGroup + TabStaff + TabVoice + Timing + VaticanaStaff + VaticanaVoice + Voice + + + InnerChoirStaff + InnerStaffGroup + + + Accidental + AccidentalCautionary + AccidentalPlacement + AccidentalSuggestion + Ambitus + AmbitusAccidental + AmbitusLine + AmbitusNoteHead + Arpeggio + BalloonTextItem + BarLine + BarNumber + BassFigure + BassFigureAlignment + BassFigureAlignmentPositioning + BassFigureBracket + BassFigureContinuation + BassFigureLine + Beam + BendAfter + BreakAlignGroup + BreakAlignment + BreathingSign + ChordName + Clef + ClusterSpanner + ClusterSpannerBeacon + CombineTextScript + Custos + DotColumn + Dots + DoublePercentRepeat + DoublePercentRepeatCounter + DynamicLineSpanner + DynamicText + DynamicTextSpanner + Episema + Fingering + FretBoard + Glissando + GraceSpacing + GridLine + GridPoint + Hairpin + HarmonicParenthesesItem + HorizontalBracket + InstrumentName + InstrumentSwitch + KeyCancellation + KeySignature + LaissezVibrerTie + LaissezVibrerTieColumn + LedgerLineSpanner + LeftEdge + LigatureBracket + LyricExtender + LyricHyphen + LyricSpace + LyricText + MeasureGrouping + MelodyItem + MensuralLigature + MetronomeMark + MultiMeasureRest + MultiMeasureRestNumber + MultiMeasureRestText + NonMusicalPaperColumn + NoteCollision + NoteColumn + NoteHead + NoteName + NoteSpacing + OctavateEight + OttavaBracket + PaperColumn + ParenthesesItem + PercentRepeat + PercentRepeatCounter + PhrasingSlur + PianoPedalBracket + RehearsalMark + RepeatSlash + RepeatTie + RepeatTieColumn + Rest + RestCollision + Script + ScriptColumn + ScriptRow + SeparationItem + Slur + SostenutoPedal + SostenutoPedalLineSpanner + SpacingSpanner + SpanBar + StaffGrouper + StaffSpacing + StaffSymbol + StanzaNumber + Stem + StemTremolo + StringNumber + StrokeFinger + SustainPedal + SustainPedalLineSpanner + System + SystemStartBar + SystemStartBrace + SystemStartBracket + SystemStartSquare + TabNoteHead + TextScript + TextSpanner + Tie + TieColumn + TimeSignature + TrillPitchAccidental + TrillPitchGroup + TrillPitchHead + TrillSpanner + TupletBracket + TupletNumber + UnaCordaPedal + UnaCordaPedalLineSpanner + VaticanaLigature + VerticalAlignment + VerticalAxisGroup + VoiceFollower + VoltaBracket + VoltaBracketSpanner + + + aDueText + alignAboveContext + alignBassFigureAccidentals + alignBelowContext + allowBeamBreak + associatedVoice + autoAccidentals + autoBeamCheck + autoBeamSettings + autoBeaming + autoCautionaries + automaticBars + barAlways + barCheckSynchronize + barNumberVisibility + baseMoment + bassFigureFormatFunction + bassStaffProperties + beamExceptions + beatGrouping + beatLength + beatStructure + chordChanges + chordNameExceptions + chordNameExceptionsFull + chordNameExceptionsPartial + chordNameFunction + chordNameSeparator + chordNoteNamer + chordPrefixSpacer + chordRootNamer + clefGlyph + clefOctavation + clefPosition + connectArpeggios + countPercentRepeats + createKeyOnClefChange + createSpacing + crescendoSpanner + crescendoText + currentBarNumber + decrescendoSpanner + decrescendoText + defaultBarType + doubleSlurs + doubleRepeatType + drumPitchTable + drumStyleTable + dynamicAbsoluteVolumeFunction + explicitClefVisibility + explicitKeySignatureVisibility + extendersOverRests + extraNatural + figuredBassAlterationDirection + figuredBassCenterContinuations + figuredBassFormatter + figuredBassPlusDirection + fingeringOrientations + firstClef + followVoice + fontSize + forbidBreak + forceClef + gridInterval + hairpinToBarline + harmonicAccidentals + highStringOne + ignoreBarChecks + ignoreFiguredBassRest + ignoreMelismata + implicitBassFigures + implicitTimeSignatureVisibility + instrumentCueName + instrumentEqualizer + instrumentName + instrumentTransposition + internalBarNumber + keepAliveInterfaces + keyAlterationOrder + keySignature + lyricMelismaAlignment + majorSevenSymbol + markFormatter + maximumFretStretch + measureLength + measurePosition + melismaBusyProperties + metronomeMarkFormatter + middleCClefPosition + middleCOffset + middleCPosition + midiInstrument + midiMaximumVolume + midiMinimumVolume + minimumFret + minimumPageTurnLength + minimumRepeatLengthForPageTurn + noteToFretFunction + ottavation + output + pedalSostenutoStrings + pedalSostenutoStyle + pedalSustainStrings + pedalSustainStyle + pedalUnaCordaStrings + pedalUnaCordaStyle + printKeyCancellation + printOctaveNames + printPartCombineTexts + proportionalNotationDuration + recordEventSequence + rehearsalMark + repeatCommands + restNumberThreshold + scriptDefinitions + shapeNoteStyles + shortInstrumentName + shortVocalName + skipBars + skipTypesetting + soloIIText + soloText + squashedPosition + staffLineLayoutFunction + stanza + stemLeftBeamCount + stemRightBeamCount + stringNumberOrientations + stringOneTopmost + stringTunings + strokeFingerOrientations + subdivideBeams + suggestAccidentals + systemStartDelimiter + systemStartDelimiterHierarchy + tablatureFormat + tempoUnitCount + tempoUnitDuration + tempoWholesPerMinute + tieWaitForNote + timeSignatureFraction + timing + tonic + topLevelAlignment + trebleStaffProperties + tremoloFlags + tupletFullLength + tupletFullLengthNote + tupletSpannerDuration + useBassFigureExtenders + verticallySpacedContexts + vocalName + voltaOnThisStaff + voltaSpannerDuration + whichBar + + + barNumberAlignSymbol + centralCPosition + extraVerticalExtent + fingerHorizontalDirection + instr + instrument + keyAccidentalOrder + minimumVerticalExtent + rehearsalMarkAlignSymbol + soloADue + tupletNumberFormatFunction + vocNam + + + AbsoluteDynamicEvent + AnnotateOutputEvent + ApplyContext + ApplyOutputEvent + ArpeggioEvent + ArticulationEvent + AutoChangeMusic + BarCheck + BassFigureEvent + BeamEvent + BeamForbidEvent + BendAfterEvent + BreathingEvent + ClusterNoteEvent + ContextChange + ContextSpeccedMusic + CrescendoEvent + DecrescendoEvent + Event + EventChord + ExtenderEvent + FingeringEvent + GlissandoEvent + GraceMusic + HarmonicEvent + HyphenEvent + KeyChangeEvent + LabelEvent + LaissezVibrerEvent + LigatureEvent + LineBreakEvent + LyricCombineMusic + LyricEvent + MarkEvent + MultiMeasureRestEvent + MultiMeasureRestMusic + MultiMeasureTextEvent + Music + NoteEvent + NoteGroupingEvent + OverrideProperty + PageBreakEvent + PageTurnEvent + PartCombineMusic + PercentEvent + PercentRepeatedMusic + PesOrFlexaEvent + PhrasingSlurEvent + PropertySet + PropertyUnset + QuoteMusic + RelativeOctaveCheck + RelativeOctaveMusic + RepeatTieEvent + RepeatedMusic + RestEvent + RevertProperty + ScriptEvent + SequentialMusic + SimultaneousMusic + SkipEvent + SkipMusic + SlurEvent + SoloOneEvent + SoloTwoEvent + SostenutoEvent + SpacingSectionEvent + SpanEvent + StaffSpanEvent + StringNumberEvent + StrokeFingerEvent + SustainEvent + TextScriptEvent + TextSpanEvent + TieEvent + TimeScaledMusic + TransposedMusic + TremoloEvent + TremoloRepeatedMusic + TremoloSpanEvent + TrillSpanEvent + TupletSpanEvent + UnaCordaEvent + UnfoldedRepeatedMusic + UnisonoEvent + UnrelativableMusic + VoiceSeparator + VoltaRepeatedMusic + + + acousticbassdrum + acousticsnare + agh + agl + bassdrum + bd + bda + boh + bohm + boho + bol + bolm + bolo + cab + cabasa + cb + cgh + cghm + cgho + cgl + cglm + cglo + chinesecymbal + cl + claves + closedhihat + cowbell + crashcymbal + crashcymbala + crashcymbalb + cuim + cuio + cymc + cymca + cymcb + cymch + cymr + cymra + cymrb + cyms + da + db + dc + dd + de + electricsnare + fivedown + fiveup + fourdown + fourup + gui + guil + guiro + guis + halfopenhihat + handclap + hc + hh + hhc + hhho + hho + hhp + hiagogo + hibongo + hiconga + highfloortom + hightom + hihat + himidtom + hisidestick + hitimbale + hiwoodblock + loagogo + lobongo + loconga + longguiro + longwhistle + losidestick + lotimbale + lowfloortom + lowmidtom + lowoodblock + lowtom + mar + maracas + mutecuica + mutehibongo + mutehiconga + mutelobongo + muteloconga + mutetriangle + onedown + oneup + opencuica + openhibongo + openhiconga + openhihat + openlobongo + openloconga + opentriangle + pedalhihat + rb + ridebell + ridecymbal + ridecymbala + ridecymbalb + shortguiro + shortwhistle + sidestick + sn + sna + snare + sne + splashcymbal + ss + ssh + ssl + tamb + tambourine + tamtam + threedown + threeup + timh + timl + tomfh + tomfl + tomh + toml + tommh + tomml + tri + triangle + trim + trio + tt + twodown + twoup + ua + ub + uc + ud + ue + vibraslap + vibs + wbh + wbl + whl + whs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/literate-curry.xml b/src/data/extra/syntax-highlighting/syntax/literate-curry.xml new file mode 100644 index 00000000..ceb53b2a --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/literate-curry.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/literate-haskell.xml b/src/data/extra/syntax-highlighting/syntax/literate-haskell.xml new file mode 100644 index 00000000..1e0c10ef --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/literate-haskell.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/logcat.xml b/src/data/extra/syntax-highlighting/syntax/logcat.xml new file mode 100644 index 00000000..f683cffc --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/logcat.xml @@ -0,0 +1,204 @@ + + + + +]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/logtalk.xml b/src/data/extra/syntax-highlighting/syntax/logtalk.xml new file mode 100644 index 00000000..43d063c9 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/logtalk.xml @@ -0,0 +1,248 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/lpc.xml b/src/data/extra/syntax-highlighting/syntax/lpc.xml new file mode 100644 index 00000000..bf1dac5e --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/lpc.xml @@ -0,0 +1,167 @@ + + + + + + + + + + + + + private + protected + static + public + nomask + varargs + nosave + virtual + + + void + int + status + string + object + array + mapping + closure + symbol + float + mixed + + + break + continue + return + if + else + for + foreach + do + while + switch + case + inherit + default + variables + functions + publish + nolog + + + FIXME + HACK + NOTE + NOTICE + TODO + WARNING + ### + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/lsl.xml b/src/data/extra/syntax-highlighting/syntax/lsl.xml new file mode 100644 index 00000000..2d0fc511 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/lsl.xml @@ -0,0 +1,1050 @@ + + + + + + + + + +]> + + + + + + integer + float + string + key + vector + quaternion + rotation + list + + + default + state + event + jump + return + if + else + for + do + while + + + state_entry + state_exit + touch_start + touch + touch_end + collision_start + collision + collision_end + land_collision_start + land_collision + land_collision_end + timer + listen + sensor + no_sensor + control + print + at_target + not_at_target + at_rot_target + not_at_rot_target + money + email + run_time_permissions + changed + attach + dataserver + moving_start + moving_end + link_message + on_rez + object_rez + remote_data + http_response + + + TRUE + FALSE + STATUS_PHYSICS + STATUS_ROTATE_X + STATUS_ROTATE_Y + STATUS_ROTATE_Z + STATUS_PHANTOM + STATUS_SANDBOX + STATUS_BLOCK_GRAB + STATUS_DIE_AT_EDGE + STATUS_RETURN_AT_EDGE + STATUS_CAST_SHADOWS + + AGENT_FLYING + AGENT_ATTACHMENTS + AGENT_SCRIPTED + AGENT_MOUSELOOK + AGENT_SITTING + AGENT_ON_OBJECT + AGENT_AWAY + AGENT_WALKING + AGENT_IN_AIR + AGENT_TYPING + AGENT_CROUCHING + AGENT_BUSY + AGENT_ALWAYS_RUN + + CAMERA_PITCH + CAMERA_FOCUS_OFFSET + CAMERA_POSITION_LAG + CAMERA_FOCUS_LAG + CAMERA_DISTANCE + CAMERA_BEHINDNESS_ANGLE + CAMERA_BEHINDNESS_LAG + CAMERA_POSITION_THRESHOLD + CAMERA_FOCUS_THRESHOLD + CAMERA_ACTIVE + CAMERA_POSITION + CAMERA_FOCUS + CAMERA_POSITION_LOCKED + CAMERA_FOCUS_LOCKED + + ANIM_ON + LOOP + REVERSE + PING_PONG + SMOOTH + ROTATE + SCALE + + ALL_SIDES + LINK_ROOT + LINK_SET + LINK_ALL_OTHERS + LINK_ALL_CHILDREN + LINK_THIS + + AGENT + ACTIVE + PASSIVE + SCRIPTED + + CONTROL_FWD + CONTROL_BACK + CONTROL_LEFT + CONTROL_RIGHT + CONTROL_ROT_LEFT + CONTROL_ROT_RIGHT + CONTROL_UP + CONTROL_DOWN + CONTROL_LBUTTON + CONTROL_ML_LBUTTON + + PERMISSION_DEBIT + PERMISSION_TAKE_CONTROLS + PERMISSION_REMAP_CONTROLS + PERMISSION_TRIGGER_ANIMATION + PERMISSION_ATTACH + PERMISSION_RELEASE_OWNERSHIP + PERMISSION_CHANGE_LINKS + PERMISSION_CHANGE_JOINTS + PERMISSION_CHANGE_PERMISSIONS + PERMISSION_TRACK_CAMERA + PERMISSION_CONTROL_CAMERA + + INVENTORY_TEXTURE + INVENTORY_SOUND + INVENTORY_OBJECT + INVENTORY_SCRIPT + INVENTORY_LANDMARK + INVENTORY_CLOTHING + INVENTORY_NOTECARD + INVENTORY_BODYPART + INVENTORY_ANIMATION + INVENTORY_GESTURE + INVENTORY_ALL + INVENTORY_NONE + + CHANGED_INVENTORY + CHANGED_COLOR + CHANGED_SHAPE + CHANGED_SCALE + CHANGED_TEXTURE + CHANGED_LINK + CHANGED_ALLOWED_DROP + CHANGED_OWNER + CHANGED_REGION + CHANGED_TELEPORT + + OBJECT_UNKNOWN_DETAIL + OBJECT_NAME + OBJECT_DESC + OBJECT_POS + OBJECT_ROT + OBJECT_VELOCITY + OBJECT_OWNER + OBJECT_GROUP + OBJECT_CREATOR + + TYPE_INTEGER + TYPE_FLOAT + TYPE_STRING + TYPE_KEY + TYPE_VECTOR + TYPE_ROTATION + TYPE_INVALID + + NULL_KEY + EOF + + PI + TWO_PI + PI_BY_TWO + DEG_TO_RAD + RAD_TO_DEG + SQRT2 + + DEBUG_CHANNEL + PUBLIC_CHANNEL + + ZERO_VECTOR + ZERO_ROTATION + + ATTACH_CHEST + ATTACH_HEAD + ATTACH_LSHOULDER + ATTACH_RSHOULDER + ATTACH_LHAND + ATTACH_RHAND + ATTACH_LFOOT + ATTACH_RFOOT + ATTACH_BACK + ATTACH_PELVIS + ATTACH_MOUTH + ATTACH_CHIN + ATTACH_LEAR + ATTACH_REAR + ATTACH_LEYE + ATTACH_REYE + ATTACH_NOSE + ATTACH_RUARM + ATTACH_RLARM + ATTACH_LUARM + ATTACH_LLARM + ATTACH_RHIP + ATTACH_RULEG + ATTACH_RLLEG + ATTACH_LHIP + ATTACH_LULEG + ATTACH_LLLEG + ATTACH_BELLY + ATTACH_LPEC + ATTACH_RPEC + ATTACH_HUD_CENTER_2 + ATTACH_HUD_TOP_RIGHT + ATTACH_HUD_TOP_CENTER + ATTACH_HUD_TOP_LEFT + ATTACH_HUD_CENTER_1 + ATTACH_HUD_BOTTOM_LEFT + ATTACH_HUD_BOTTOM + ATTACH_HUD_BOTTOM_RIGHT + + LAND_LEVEL + LAND_RAISE + LAND_LOWER + LAND_SMOOTH + LAND_NOISE + LAND_REVERT + + LAND_SMALL_BRUSH + LAND_MEDIUM_BRUSH + LAND_LARGE_BRUSH + + DATA_ONLINE + DATA_NAME + DATA_BORN + DATA_RATING + DATA_SIM_POS + DATA_SIM_STATUS + DATA_SIM_RATING + DATA_PAYINFO + + PAYMENT_INFO_ON_FILE + PAYMENT_INFO_USED + + REMOTE_DATA_CHANNEL + REMOTE_DATA_REQUEST + REMOTE_DATA_REPLY + + + PSYS_PART_FLAGS + PSYS_PART_START_COLOR + PSYS_PART_START_ALPHA + PSYS_PART_START_SCALE + PSYS_PART_END_COLOR + PSYS_PART_END_ALPHA + PSYS_PART_END_SCALE + PSYS_PART_MAX_AGE + + + PSYS_PART_WIND_MASK + PSYS_PART_INTERP_COLOR_MASK + PSYS_PART_INTERP_SCALE_MASK + PSYS_PART_BOUNCE_MASK + PSYS_PART_FOLLOW_SRC_MASK + PSYS_PART_FOLLOW_VELOCITY_MASK + PSYS_PART_TARGET_POS_MASK + PSYS_PART_EMISSIVE_MASK + PSYS_PART_TARGET_LINEAR_MASK + + + PSYS_SRC_MAX_AGE + PSYS_SRC_PATTERN + PSYS_SRC_INNERANGLE + PSYS_SRC_OUTERANGLE + PSYS_SRC_ANGLE_BEGIN + PSYS_SRC_ANGLE_END + PSYS_SRC_BURST_RATE + PSYS_SRC_BURST_PART_COUNT + PSYS_SRC_BURST_RADIUS + PSYS_SRC_BURST_SPEED_MIN + PSYS_SRC_BURST_SPEED_MAX + PSYS_SRC_ACCEL + PSYS_SRC_TEXTURE + PSYS_SRC_TARGET_KEY + PSYS_SRC_OMEGA + + PSYS_SRC_OBJ_REL_MASK + + PSYS_SRC_PATTERN_DROP + PSYS_SRC_PATTERN_EXPLODE + PSYS_SRC_PATTERN_ANGLE + PSYS_SRC_PATTERN_ANGLE_CONE + PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY + + + VEHICLE_TYPE_NONE + VEHICLE_TYPE_SLED + VEHICLE_TYPE_CAR + VEHICLE_TYPE_BOAT + VEHICLE_TYPE_AIRPLANE + VEHICLE_TYPE_BALLOON + + VEHICLE_REFERENCE_FRAME + VEHICLE_LINEAR_FRICTION_TIMESCALE + VEHICLE_ANGULAR_FRICTION_TIMESCALE + VEHICLE_LINEAR_MOTOR_DIRECTION + VEHICLE_ANGULAR_MOTOR_DIRECTION + VEHICLE_LINEAR_MOTOR_OFFSET + + + + VEHICLE_HOVER_HEIGHT + VEHICLE_HOVER_EFFICIENCY + VEHICLE_HOVER_TIMESCALE + VEHICLE_BUOYANCY + + VEHICLE_LINEAR_DEFLECTION_EFFICIENCY + VEHICLE_LINEAR_DEFLECTION_TIMESCALE + VEHICLE_LINEAR_MOTOR_TIMESCALE + VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE + + VEHICLE_ANGULAR_DEFLECTION_EFFICIENCY + VEHICLE_ANGULAR_DEFLECTION_TIMESCALE + VEHICLE_ANGULAR_MOTOR_TIMESCALE + VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE + + VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY + VEHICLE_VERTICAL_ATTRACTION_TIMESCALE + + VEHICLE_BANKING_EFFICIENCY + VEHICLE_BANKING_MIX + VEHICLE_BANKING_TIMESCALE + + VEHICLE_FLAG_NO_FLY_UP + VEHICLE_FLAG_NO_DEFLECTION_UP + VEHICLE_FLAG_LIMIT_ROLL_ONLY + VEHICLE_FLAG_HOVER_WATER_ONLY + VEHICLE_FLAG_HOVER_TERRAIN_ONLY + VEHICLE_FLAG_HOVER_GLOBAL_HEIGHT + VEHICLE_FLAG_HOVER_UP_ONLY + VEHICLE_FLAG_LIMIT_MOTOR_UP + VEHICLE_FLAG_MOUSELOOK_STEER + VEHICLE_FLAG_MOUSELOOK_BANK + VEHICLE_FLAG_CAMERA_DECOUPLED + + + + PRIM_TYPE + PRIM_MATERIAL + PRIM_PHYSICS + PRIM_FLEXIBLE + PRIM_POINT_LIGHT + PRIM_TEMP_ON_REZ + PRIM_PHANTOM + PRIM_CAST_SHADOWS + PRIM_POSITION + PRIM_SIZE + PRIM_ROTATION + PRIM_TEXTURE + PRIM_COLOR + PRIM_BUMP_SHINY + PRIM_FULLBRIGHT + PRIM_TEXGEN + PRIM_GLOW + + PRIM_TYPE_BOX + PRIM_TYPE_CYLINDER + PRIM_TYPE_PRISM + PRIM_TYPE_SPHERE + PRIM_TYPE_TORUS + PRIM_TYPE_TUBE + PRIM_TYPE_RING + PRIM_TYPE_SCULPT + + PRIM_HOLE_DEFAULT + PRIM_HOLE_CIRCLE + PRIM_HOLE_SQUARE + PRIM_HOLE_TRIANGLE + + PRIM_MATERIAL_STONE + PRIM_MATERIAL_METAL + PRIM_MATERIAL_GLASS + PRIM_MATERIAL_WOOD + PRIM_MATERIAL_FLESH + PRIM_MATERIAL_PLASTIC + PRIM_MATERIAL_RUBBER + PRIM_MATERIAL_LIGHT + + PRIM_SHINY_NONE + PRIM_SHINY_LOW + PRIM_SHINY_MEDIUM + PRIM_SHINY_HIGH + + PRIM_BUMP_NONE + PRIM_BUMP_BRIGHT + PRIM_BUMP_DARK + PRIM_BUMP_WOOD + PRIM_BUMP_BARK + PRIM_BUMP_BRICKS + PRIM_BUMP_CHECKER + PRIM_BUMP_CONCRETE + PRIM_BUMP_TILE + PRIM_BUMP_STONE + PRIM_BUMP_DISKS + PRIM_BUMP_GRAVEL + PRIM_BUMP_BLOBS + PRIM_BUMP_SIDING + PRIM_BUMP_LARGETILE + PRIM_BUMP_STUCCO + PRIM_BUMP_SUCTION + PRIM_BUMP_WEAVE + + PRIM_TEXGEN_DEFAULT + PRIM_TEXGEN_PLANAR + + PRIM_SCULPT_TYPE_SPHERE + PRIM_SCULPT_TYPE_TORUS + PRIM_SCULPT_TYPE_PLANE + PRIM_SCULPT_TYPE_CYLINDER + PRIM_SCULPT_TYPE_MASK + PRIM_SCULPT_FLAG_MIRROR + PRIM_SCULPT_FLAG_INVERT + + MASK_BASE + MASK_OWNER + MASK_GROUP + MASK_EVERYONE + MASK_NEXT + + PERM_TRANSFER + PERM_MODIFY + PERM_COPY + PERM_MOVE + PERM_ALL + + PARCEL_MEDIA_COMMAND_STOP + PARCEL_MEDIA_COMMAND_PAUSE + PARCEL_MEDIA_COMMAND_PLAY + PARCEL_MEDIA_COMMAND_LOOP + PARCEL_MEDIA_COMMAND_TEXTURE + PARCEL_MEDIA_COMMAND_URL + PARCEL_MEDIA_COMMAND_TIME + PARCEL_MEDIA_COMMAND_AGENT + PARCEL_MEDIA_COMMAND_UNLOAD + PARCEL_MEDIA_COMMAND_AUTO_ALIGN + PARCEL_MEDIA_COMMAND_TYPE + PARCEL_MEDIA_COMMAND_SIZE + PARCEL_MEDIA_COMMAND_DESC + PARCEL_MEDIA_COMMAND_LOOP_SET + + LIST_STAT_MAX + LIST_STAT_MIN + LIST_STAT_MEAN + LIST_STAT_MEDIAN + LIST_STAT_STD_DEV + LIST_STAT_SUM + LIST_STAT_SUM_SQUARES + LIST_STAT_NUM_COUNT + LIST_STAT_GEOMETRIC_MEAN + LIST_STAT_RANGE + + PAY_HIDE + PAY_DEFAULT + + PARCEL_FLAG_ALLOW_FLY + PARCEL_FLAG_ALLOW_GROUP_SCRIPTS + PARCEL_FLAG_ALLOW_SCRIPTS + PARCEL_FLAG_ALLOW_LANDMARK + PARCEL_FLAG_ALLOW_TERRAFORM + PARCEL_FLAG_ALLOW_DAMAGE + PARCEL_FLAG_ALLOW_CREATE_OBJECTS + PARCEL_FLAG_ALLOW_CREATE_GROUP_OBJECTS + PARCEL_FLAG_USE_ACCESS_GROUP + PARCEL_FLAG_USE_ACCESS_LIST + PARCEL_FLAG_USE_BAN_LIST + PARCEL_FLAG_USE_LAND_PASS_LIST + PARCEL_FLAG_LOCAL_SOUND_ONLY + PARCEL_FLAG_RESTRICT_PUSHOBJECT + PARCEL_FLAG_ALLOW_GROUP_OBJECT_ENTRY + PARCEL_FLAG_ALLOW_ALL_OBJECT_ENTRY + + REGION_FLAG_ALLOW_DAMAGE + REGION_FLAG_FIXED_SUN + REGION_FLAG_BLOCK_TERRAFORM + REGION_FLAG_SANDBOX + REGION_FLAG_DISABLE_COLLISIONS + REGION_FLAG_DISABLE_PHYSICS + REGION_FLAG_BLOCK_FLY + REGION_FLAG_ALLOW_DIRECT_TELEPORT + REGION_FLAG_RESTRICT_PUSHOBJECT + + HTTP_METHOD + HTTP_MIMETYPE + HTTP_BODY_MAXLENGTH + HTTP_BODY_TRUNCATED + HTTP_VERIFY_CERT + + PARCEL_COUNT_TOTAL + PARCEL_COUNT_OWNER + PARCEL_COUNT_GROUP + PARCEL_COUNT_OTHER + PARCEL_COUNT_SELECTED + PARCEL_COUNT_TEMP + + PARCEL_DETAILS_NAME + PARCEL_DETAILS_DESC + PARCEL_DETAILS_OWNER + PARCEL_DETAILS_GROUP + PARCEL_DETAILS_AREA + + STRING_TRIM_HEAD + STRING_TRIM_TAIL + STRING_TRIM + + CLICK_ACTION_NONE + CLICK_ACTION_TOUCH + CLICK_ACTION_SIT + CLICK_ACTION_BUY + CLICK_ACTION_PAY + CLICK_ACTION_OPEN + CLICK_ACTION_PLAY + CLICK_ACTION_OPEN_MEDIA + + TEXTURE_BLANK + TEXTURE_DEFAULT + TEXTURE_MEDIA + TEXTURE_PLYWOOD + TEXTURE_TRANSPARENT + + TOUCH_INVALID_FACE + TOUCH_INVALID_VECTOR + TOUCH_INVALID_TEXCOORD + + + ++ + -- + += + -= + *= + /= + %= + ; + , + = + ( + ) + - + + + * + / + % + @ + : + > + < + == + != + >= + <= + & + | + ^ + ~ + ! + && + || + << + >> + + + + + llSin + llCos + llTan + llAtan2 + llSqrt + llPow + llAbs + llFabs + llFrand + llFloor + llCeil + llRound + llVecMag + llVecNorm + llVecDist + llRot2Euler + llEuler2Rot + llAxes2Rot + llRot2Fwd + llRot2Left + llRot2Up + llRotBetween + llWhisper + llSay + llShout + llListen + llListenControl + llListenRemove + llSensor + llSensorRepeat + llSensorRemove + llDetectedName + llDetectedKey + llDetectedOwner + llDetectedType + llDetectedPos + llDetectedVel + llDetectedGrab + llDetectedRot + llDetectedGroup + llDetectedLinkNumber + llDie + llGround + llCloud + llWind + llSetStatus + llGetStatus + llSetScale + llGetScale + llSetColor + llGetAlpha + llSetAlpha + llGetColor + llSetTexture + llScaleTexture + llOffsetTexture + llRotateTexture + llGetTexture + llSetPos + llGetPos + llGetLocalPos + llSetRot + llGetRot + llGetLocalRot + llSetForce + llGetForce + llTarget + llTargetRemove + llRotTarget + llRotTargetRemove + llMoveToTarget + llStopMoveToTarget + llApplyImpulse + llApplyRotationalImpulse + llSetTorque + llGetTorque + llSetForceAndTorque + llGetVel + llGetAccel + llGetOmega + llGetTimeOfDay + llGetWallclock + llGetTime + llResetTime + llGetAndResetTime + llSound + llPlaySound + llLoopSound + llLoopSoundMaster + llLoopSoundSlave + llPlaySoundSlave + llTriggerSound + llStopSound + llPreloadSound + llGetSubString + llDeleteSubString + llInsertString + llToUpper + llToLower + llGiveMoney + llMakeExplosion + llMakeFountain + llMakeSmoke + llMakeFire + llRezObject + llLookAt + llStopLookAt + llSetTimerEvent + llSleep + llGetMass + llCollisionFilter + llTakeControls + llReleaseControls + llAttachToAvatar + llDetachFromAvatar + llTakeCamera + llReleaseCamera + llGetOwner + llInstantMessage + llEmail + llGetNextEmail + llGetKey + llSetBuoyancy + llSetHoverHeight + llStopHover + llMinEventDelay + llSoundPreload + llRotLookAt + llStringLength + llStartAnimation + llStopAnimation + llPointAt + llStopPointAt + llTargetOmega + llGetStartParameter + llGodLikeRezObject + llRequestPermissions + llGetPermissionsKey + llGetPermissions + llGetLinkNumber + llSetLinkColor + llCreateLink + llBreakLink + llBreakAllLinks + llGetLinkKey + llGetLinkName + llGetInventoryNumber + llGetInventoryName + llSetScriptState + llGetEnergy + llGiveInventory + llRemoveInventory + llSetText + llWater + llPassTouches + llRequestAgentData + llRequestInventoryData + llSetDamage + llTeleportAgentHome + llModifyLand + llCollisionSound + llCollisionSprite + llGetAnimation + llResetScript + llMessageLinked + llPushObject + llPassCollisions + llGetScriptName + llGetNumberOfSides + llAxisAngle2Rot + llRot2Axis + llRot2Angle + llAcos + llAsin + llAngleBetween + llGetInventoryKey + llAllowInventoryDrop + llGetSunDirection + llGetTextureOffset + llGetTextureScale + llGetTextureRot + llSubStringIndex + llGetOwnerKey + llGetCenterOfMass + llListSort + llGetListLength + llList2Integer + llList2Float + llList2String + llList2Key + llList2Vector + llList2Rot + llList2List + llDeleteSubList + llGetListEntryType + llList2CSV + llCSV2List + llListRandomize + llList2ListStrided + llGetRegionCorner + llListInsertList + llListFindList + llGetObjectName + llSetObjectName + llGetDate + llEdgeOfWorld + llGetAgentInfo + llAdjustSoundVolume + llSetSoundQueueing + llSetSoundRadius + llKey2Name + llSetTextureAnim + llTriggerSoundLimited + llEjectFromLand + llParseString2List + llOverMyLand + llGetLandOwnerAt + llGetNotecardLine + llGetAgentSize + llSameGroup + llUnSit + llGroundSlope + llGroundNormal + llGroundContour + llGetAttached + llGetFreeMemory + llGetRegionName + llGetRegionTimeDilation + llGetRegionFPS + + llParticleSystem + llGroundRepel + llGiveInventoryList + + llSetVehicleType + llSetVehicleFloatParam + llSetVehicleVectorParam + llSetVehicleRotationParam + llSetVehicleFlags + llRemoveVehicleFlags + llSitTarget + llAvatarOnSitTarget + llAddToLandPassList + llSetTouchText + llSetSitText + llSetCameraEyeOffset + llSetCameraAtOffset + + llDumpList2String + llScriptDanger + llDialog + llVolumeDetect + llResetOtherScript + llGetScriptState + llRemoteLoadScript + + llSetRemoteScriptAccessPin + llRemoteLoadScriptPin + + llOpenRemoteDataChannel + llSendRemoteData + llRemoteDataReply + llCloseRemoteDataChannel + + llMD5String + llSetPrimitiveParams + llStringToBase64 + llBase64ToString + llXorBase64Strings + llRemoteDataSetRegion + llLog10 + llLog + llGetAnimationList + llSetParcelMusicURL + + llGetRootPosition + llGetRootRotation + + llGetObjectDesc + llSetObjectDesc + llGetCreator + llGetTimestamp + llSetLinkAlpha + llGetNumberOfPrims + llGetNumberOfNotecardLines + + llGetBoundingBox + llGetGeometricCenter + llGetPrimitiveParams + llIntegerToBase64 + llBase64ToInteger + llGetGMTclock + llGetSimulatorHostname + + llSetLocalRot + + llParseStringKeepNulls + llRezAtRoot + + llGetObjectPermMask + llSetObjectPermMask + + llGetInventoryPermMask + llSetInventoryPermMask + llGetInventoryCreator + llOwnerSay + llRequestSimulatorData + llForceMouselook + llGetObjectMass + llListReplaceList + llLoadURL + + llParcelMediaCommandList + llParcelMediaQuery + + llModPow + + llGetInventoryType + llSetPayPrice + llGetCameraPos + llGetCameraRot + + llSetPrimURL + llRefreshPrimURL + llEscapeURL + llUnescapeURL + + llMapDestination + llAddToLandBanList + llRemoveFromLandPassList + llRemoveFromLandBanList + + llSetCameraParams + llClearCameraParams + + llListStatistics + llGetUnixTime + llGetParcelFlags + llGetRegionFlags + llXorBase64StringsCorrect + + llHTTPRequest + + llResetLandBanList + llResetLandPassList + + llGetObjectPrimCount + llGetParcelPrimOwners + llGetParcelPrimCount + llGetParcelMaxPrims + llGetParcelDetails + + llSetLinkPrimitiveParams + llSetLinkTexture + + + llStringTrim + llRegionSay + llGetObjectDetails + llSetClickAction + + llGetRegionAgentCount + llTextBox + llGetAgentLanguage + llDetectedTouchUV + llDetectedTouchFace + llDetectedTouchPos + llDetectedTouchNormal + llDetectedTouchBinormal + llDetectedTouchST + + llSHA1String + + + + + FIXME + TODO + BUG + HACK + XXX + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/lua.xml b/src/data/extra/syntax-highlighting/syntax/lua.xml new file mode 100644 index 00000000..0413e568 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/lua.xml @@ -0,0 +1,569 @@ + + +]> + + + + + and + function + in + local + not + or + + nil + false + true + + + + break + do + else + elseif + end + for + goto + if + repeat + return + then + until + while + + + + do + if + repeat + + + + else + elseif + + + + end + until + + + + _PROMPT + _PROMPT2 + LUA_PATH + LUA_CPATH + LUA_INIT + _ENV + _VERSION + _G + + package.config + package.cpath + package.loaded + package.path + package.preload + package.searchers + + utf8.charpattern + + math.maxinteger + math.mininteger + math.pi + + + + + assert + collectgarbage + dofile + error + getmetatable + ipairs + load + loadfile + next + pairs + pcall + print + rawequal + rawget + rawlen + rawset + select + setmetatable + tonumber + tostring + type + warn + xpcall + + + coroutine.create + coroutine.isyieldable + coroutine.resume + coroutine.kill + coroutine.running + coroutine.status + coroutine.wrap + coroutine.yield + + + require + package.loadlib + package.searchpath + + + string.byte + string.char + string.dump + string.find + string.format + string.gmatch + string.gsub + string.len + string.lower + string.match + string.pack + string.packsize + string.rep + string.reverse + string.sub + string.unpack + string.upper + + + utf8.char + utf8.codes + utf8.codepoint + utf8.len + utf8.offset + + + table.concat + table.insert + table.move + table.pack + table.remove + table.sort + table.unpack + + + math.abs + math.acos + math.asin + math.atan + math.ceil + math.cos + math.deg + math.exp + math.floor + math.fmod + math.huge + math.log + math.max + math.min + math.modf + math.rad + math.random + math.randomseed + math.sin + math.sqrt + math.tan + math.tointeger + math.type + math.utl + + + io.close + io.flush + io.input + io.lines + io.open + io.output + io.popen + io.read + io.stderr + io.stdin + io.stdout + io.tmpfile + io.type + io.write + + + os.clock + os.date + os.difftime + os.execute + os.exit + os.getenv + os.remove + os.rename + os.setlocale + os.time + os.tmpname + + + debug.debug + debug.gethook + debug.getinfo + debug.getlocal + debug.getmetatable + debug.getregistry + debug.getupvalue + debug.getuservalue + debug.sethook + debug.setlocal + debug.setmetatable + debug.setupvalue + debug.setuservalue + debug.traceback + debug.upvalueid + debug.upvaluejoin + + cgilua + cgilua.addclosefunction + cgilua.addopenfunction + cgilua.addopenfunction + cgilua.addscripthandler + cgilua.addscripthandler + cgilua.buildprocesshandler + cgilua.contentheader + cgilua.cookies.delete + cgilua.cookies.get + cgilua.cookies.set + cgilua.cookies.sethtml + cgilua.cookies + cgilua.doif + cgilua.doscript + cgilua.errorlog + cgilua.handlelp + cgilua.header + cgilua.htmlheader + cgilua.lp.compile + cgilua.lp.include + cgilua.lp.setcompatmode + cgilua.lp.setoutfunc + cgilua.lp.translate + cgilua.mkabsoluteurl + cgilua.mkurlpath + cgilua.pack + cgilua.put + cgilua.redirect + cgilua.script_file + cgilua.script_path + cgilua.script_pdir + cgilua.script_vdir + cgilua.script_vpath + cgilua.serialize + cgilua.servervariable + cgilua.session.close + cgilua.session.data + cgilua.session.delete + cgilua.session.load + cgilua.session.new + cgilua.session.open + cgilua.session.save + cgilua.session.setsessiondir + cgilua.session + cgilua.seterrorhandler + cgilua.seterroroutput + cgilua.setmaxfilesize + cgilua.setmaxinput + cgilua.setoutfunc + cgilua.splitpath + cgilua.urlcode.encodetable + cgilua.urlcode.escape + cgilua.urlcode.insertfield + cgilua.urlcode.parsequery + cgilua.urlcode.unescape + cgilua.urlpath + + lfs + lfs.attributes + lfs.chdir + lfs.currentdir + lfs.dir + lfs.lock + lfs.mkdir + lfs.rmdir + lfs.touch + lfs.unlock + + zip + zip.open + zip.openfile + + + + + byte + char + dump + find + format + gmatch + gsub + len + lower + match + pack + packsize + rep + reverse + sub + unpack + upper + + + concat + insert + move + pack + remove + sort + unpack + + + close + commit + connect + escape + execute + fetch + getcolnames + getcoltypes + getlastautoid + numrows + rollback + setautocommit + + + files + + + close + flush + lines + read + seek + setvbuf + write + + + + __add + __sub + __mul + __div + __mod + __pow + __unm + __idiv + __band + __bor + __bxor + __bnot + __shl + __shr + __concat + __len + __eq + __lt + __le + __index + __newindex + __call + + __tostring + __pairs + + __metatable + + __gc + + __mode + + + + _ALERT + _ERRORMESSAGE + _LOADED + __ipairs + foreach + foreachi + loadstring + math.atan2 + math.cosh + math.frexp + math.ldexp + math.log10 + math.mod + math.pow + math.sinh + math.tanh + string.gfind + table.foreach + table.foreachi + table.getn + table.setn + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/m3u.xml b/src/data/extra/syntax-highlighting/syntax/m3u.xml new file mode 100644 index 00000000..99171b0c --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/m3u.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/m4.xml b/src/data/extra/syntax-highlighting/syntax/m4.xml new file mode 100644 index 00000000..687c3eac --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/m4.xml @@ -0,0 +1,193 @@ + + + + + + + __gnu__ + __os2__ + os2 + __unix__ + unix + __windows__ + windows + + + m4___gnu__ + m4___os2__ + m4_os2 + m4___unix__ + m4_unix + m4___windows__ + m4_windows + + + __file__ + __line__ + __program__ + builtin + changecom + changequote + changeword + debugfile + debugmode + decr + define + defn + divert + divnum + dnl + dumpdef + errprint + esyscmd + eval + format + ifdef + ifelse + include + incr + index + indir + len + m4exit + m4wrap + maketemp + mkstemp + patsubst + popdef + pushdef + regexp + shift + sinclude + substr + syscmd + sysval + traceon + traceoff + translit + undefine + undivert + + + m4___file__ + m4___line__ + m4___program__ + m4_builtin + m4_changecom + m4_changequote + m4_changeword + m4_debugfile + m4_debugmode + m4_decr + m4_define + m4_defn + m4_divert + m4_divnum + m4_dnl + m4_dumpdef + m4_errprint + m4_esyscmd + m4_eval + m4_format + m4_ifdef + m4_ifelse + m4_include + m4_incr + m4_index + m4_indir + m4_len + m4_m4exit + m4_m4wrap + m4_maketemp + m4_mkstemp + m4_patsubst + m4_popdef + m4_pushdef + m4_regexp + m4_shift + m4_sinclude + m4_substr + m4_syscmd + m4_sysval + m4_traceon + m4_traceoff + m4_translit + m4_undefine + m4_undivert + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/mab.xml b/src/data/extra/syntax-highlighting/syntax/mab.xml new file mode 100644 index 00000000..387432df --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/mab.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/magma.xml b/src/data/extra/syntax-highlighting/syntax/magma.xml new file mode 100644 index 00000000..a2fe461a --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/magma.xml @@ -0,0 +1,154 @@ + + + + + + and + assert + assigned + attributes + break + by + case + cat + cmpeq + cmpne + continue + declare + delete + diff + div + do + else + elif + end + eq + error + exists + false + for + forall + forward + freeze + function + ge + gt + if + import + in + intrinsic + join + le + lt + max + meet + min + mod + ne + not + or + procedure + quit + repeat + require + requirege + requirerange + return + sdiff + select + then + time + to + true + until + verbose + vprint + vtime + when + while + xor + + + Booleans + EllipticCurve + ExtensionField + FiniteField + GF + HyperellipticCurve + Integers + Jacobian + PolynomialRing + Rationals + RealField + + + AddAttribute + AssignNames + Attach + AttachSpec + CoveringStructure + Cputime + Detach + DetachSpec + ElementType + ExistsCoveringStructure + ExtendedType + GetAttributes + GetSeed + ISA + IsCoercible + IsIntrinsic + ListAttributes + MakeType + Random + Realtime + SetSeed + Type + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/makefile.xml b/src/data/extra/syntax-highlighting/syntax/makefile.xml new file mode 100644 index 00000000..6067a247 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/makefile.xml @@ -0,0 +1,498 @@ + + + + + + + + + + + + + include + -include + define + endef + + + + if + ifeq + ifneq + ifdef + ifndef + + else + endif + + + .if + .ifdef + .ifndef + .ifmake + .ifnmake + + + .elif + .elifdef + .elifndef + .elifmake + .elifnmake + .else + + .endif + + + defined + empty + exists + target + commands + + + + .include + .-include + .sinclude + + + + .info + .warning + .error + + + .for + .endfor + + + + .BEGIN + .DEFAULT + .END + .ERROR + .IGNORE + .INTERRUPT + .MAIN + .MAKEFLAGS + .NOPATH + .NOTPARALLEL + .NO_PARALLEL + .OBJDIR + .ORDER + .PATH + .PHONY + .PRECIOUS + .SHELL + .SILENT + .STALE + .SUFFIXES + + + + .EXEC + .IGNORE + .MADE + .MAKE + .META + .NOMETA + .NOMETA_CMP + .NOPATH + .NOTMAIN + .OPTIONAL + .PHONY + .PRECIOUS + .RECURSIVE + .SILENT + .USE + .USEBEFORE + .WAIT + + + + .unexport-env + .unexport + .undef + .export-env + .export + + + + call + subst + patsubst + strip + findstring + filter + filter-out + sort + word + wordlist + words + firstword + lastword + dir + notdir + suffix + basename + addsuffix + addprefix + join + wildcard + realpath + abspath + if + or + and + foreach + value + eval + origin + flavor + shell + error + warning + info + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/mako.xml b/src/data/extra/syntax-highlighting/syntax/mako.xml new file mode 100644 index 00000000..9f3e11ce --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/mako.xml @@ -0,0 +1,253 @@ + + + +]> + + + + + endfor + endif + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/mandoc.xml b/src/data/extra/syntax-highlighting/syntax/mandoc.xml new file mode 100644 index 00000000..ed23b826 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/mandoc.xml @@ -0,0 +1,88 @@ + + + + + + + + SH + SS + TH + + + + HP + IP + LP + P + PD + PP + RE + RS + TP + + + + B + BI + BR + I + IB + IR + RB + RI + SM + SB + + + + DT + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/markdown.xml b/src/data/extra/syntax-highlighting/syntax/markdown.xml new file mode 100644 index 00000000..a39df65c --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/markdown.xml @@ -0,0 +1,642 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/mason.xml b/src/data/extra/syntax-highlighting/syntax/mason.xml new file mode 100644 index 00000000..32c2885b --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/mason.xml @@ -0,0 +1,233 @@ + + + + + + sub + bless + caller + cmp + print + echo + die + import + lt + le + local + defined + last + ! + || + eq + ne + use + elsif + my + foreach + wantarray + push + pop + dbmclose + dbmopen + dump + each + ge + gt + split + open + close + eval + chomp + chop + unless + undef + next + unlink + new + and + not + no + ref + redo + require + tied + tie + untie + or + xor + continue + do + else + for + goto + if + return + switch + while + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/mathematica.xml b/src/data/extra/syntax-highlighting/syntax/mathematica.xml new file mode 100644 index 00000000..3deb3def --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/mathematica.xml @@ -0,0 +1,3229 @@ + + + + + + A + AbelianGroup + All + ArcSinh + Abort + AllowGroupClose + ArcTan + AbortKernels + AllowReverseGroupClose + ArcTanh + AbortProtect + AlphaChannel + Arg + Abs + AlternatingGroup + ArgMax + AbsoluteCurrentValue + AlternativeHypothesis + ArgMin + AbsoluteDashing + Alternatives + ArithmeticGeometricMean + AbsoluteFileName + AnchoredSearch + Array + AbsoluteOptions + And + ArrayComponents + AbsolutePointSize + AndersonDarlingTest + ArrayDepth + AbsoluteThickness + AngerJ + ArrayFlatten + AbsoluteTime + AngleBracket + ArrayPad + AbsoluteTiming + Animate + ArrayPlot + AccountingForm + AnimationDirection + ArrayQ + Accumulate + AnimationDisplayTime + ArrayRules + Accuracy + AnimationRate + Arrow + AccuracyGoal + AnimationRepetitions + Arrowheads + ActionMenu + AnimationRunning + AspectRatio + ActiveStyle + Animator + Assert + AcyclicGraphQ + Annotation + Assuming + AddTo + Annuity + Assumptions + AdjacencyGraph + AnnuityDue + AstronomicalData + AdjacencyMatrix + Antialiasing + Asynchronous + AdjustmentBox + Apart + AtomQ + AffineTransform + ApartSquareFree + Attributes + AiryAi + Appearance + AugmentedSymmetricPolynomial + AiryAiPrime + AppearanceElements + AutoAction + AiryAiZero + AppellF1 + AutoIndent + AiryBi + Append + AutoItalicWords + AiryBiPrime + AppendTo + Automatic + AiryBiZero + Apply + AutoMultiplicationSymbol + AlgebraicIntegerQ + ArcCos + AutorunSequencing + AlgebraicNumber + ArcCosh + AutoScroll + AlgebraicNumberDenominator + ArcCot + AutoSpacing + AlgebraicNumberNorm + ArcCoth + Axes + AlgebraicNumberPolynomial + ArcCsc + AxesEdge + AlgebraicNumberTrace + ArcCsch + AxesLabel + Algebraics + ArcSec + AxesOrigin + AlgebraicUnitQ + ArcSech + AxesStyle + Alignment + ArcSin + Axis + AlignmentPoint + ArcSinDistribution + B + BabyMonsterGroupB + BetaRegularized + BooleanGraph + Back + BetweennessCentrality + BooleanMaxterms + Background + BezierCurve + BooleanMinimize + Backslash + BezierFunction + BooleanMinterms + Backward + BilateralFilter + Booleans + Band + Binarize + BooleanTable + BarabasiAlbertGraphDistribution + BinaryFormat + BooleanVariables + BarChart + BinaryImageQ + BorderDimensions + BarChart3D + BinaryRead + BorelTannerDistribution + BarnesG + BinaryReadList + Bottom + BarOrigin + BinaryWrite + BottomHatTransform + BarSpacing + BinCounts + BoundaryStyle + BaseForm + BinLists + BoxData + Baseline + Binomial + Boxed + BaselinePosition + BinomialDistribution + BoxMatrix + BaseStyle + BinormalDistribution + BoxRatios + BatesDistribution + BiorthogonalSplineWavelet + BoxStyle + BattleLemarieWavelet + BipartiteGraphQ + BoxWhiskerChart + Because + BirnbaumSaundersDistribution + BracketingBar + BeckmannDistribution + BitAnd + BrayCurtisDistance + Beep + BitClear + BreadthFirstScan + Begin + BitGet + Break + BeginDialogPacket + BitLength + Brown + BeginPackage + BitNot + BrownForsytheTest + BellB + BitOr + BSplineBasis + BellY + BitSet + BSplineCurve + BenfordDistribution + BitShiftLeft + BSplineFunction + BeniniDistribution + BitShiftRight + BSplineSurface + BenktanderGibratDistribution + BitXor + BubbleChart + BenktanderWeibullDistribution + Black + BubbleChart3D + BernoulliB + Blank + BubbleScale + BernoulliDistribution + BlankNullSequence + BubbleSizes + BernoulliGraphDistribution + BlankSequence + ButterflyGraph + BernsteinBasis + Blend + Button + BesselI + Block + ButtonBar + BesselJ + BlockRandom + ButtonBox + BesselJZero + Blue + ButtonData + BesselK + Blur + ButtonFrame + BesselY + BodePlot + ButtonFunction + BesselYZero + Bold + ButtonMinHeight + Beta + Bookmarks + ButtonNotebook + BetaBinomialDistribution + Boole + ButtonSource + BetaDistribution + BooleanConvert + Byte + BetaNegativeBinomialDistribution + BooleanCountingFunction + ByteCount + BetaPrimeDistribution + BooleanFunction + ByteOrdering + C + C + CityData + ContinuousAction + CallPacket + Clear + ContinuousTimeModelQ + CanberraDistance + ClearAll + ContinuousWaveletData + Cancel + ClearAttributes + ContinuousWaveletTransform + CancelButton + ClearSystemCache + ContourDetect + CandlestickChart + ClebschGordan + ContourLabels + Cap + ClickPane + ContourPlot + CapForm + Clip + ContourPlot3D + CapitalDifferentialD + ClippingStyle + Contours + CarmichaelLambda + Clock + ContourShading + Cases + Close + ContourStyle + Cashflow + CloseKernels + ContraharmonicMean + Casoratian + ClosenessCentrality + Control + Catalan + Closing + ControlActive + CatalanNumber + ClusteringComponents + ControllabilityGramian + Catch + CMYKColor + ControllabilityMatrix + CauchyDistribution + Coefficient + ControllableDecomposition + CayleyGraph + CoefficientArrays + ControllableModelQ + CDF + CoefficientList + ControllerInformation + CDFWavelet + CoefficientRules + ControllerLinking + Ceiling + CoifletWavelet + ControllerManipulate + Cell + Collect + ControllerMethod + CellAutoOverwrite + Colon + ControllerPath + CellBaseline + ColorCombine + ControllerState + CellChangeTimes + ColorConvert + ControlPlacement + CellContext + ColorData + ControlsRendering + CellDingbat + ColorDataFunction + ControlType + CellDynamicExpression + ColorFunction + Convergents + CellEditDuplicate + ColorFunctionScaling + ConversionRules + CellEpilog + Colorize + Convolve + CellEvaluationDuplicate + ColorNegate + ConwayGroupCo1 + CellEvaluationFunction + ColorQuantize + ConwayGroupCo2 + CellEventActions + ColorRules + ConwayGroupCo3 + CellFrame + ColorSeparate + CoordinatesToolOptions + CellFrameMargins + ColorSetter + CoprimeQ + CellGroup + ColorSlider + Coproduct + CellGroupData + ColorSpace + CopulaDistribution + CellGrouping + Column + Copyable + CellLabel + ColumnAlignments + CopyDirectory + CellLabelAutoDelete + ColumnLines + CopyFile + CellMargins + ColumnsEqual + CopyToClipboard + CellOpen + ColumnSpacings + CornerFilter + CellPrint + ColumnWidths + CornerNeighbors + CellProlog + Commonest + Correlation + CellTags + CommonestFilter + CorrelationDistance + CellularAutomaton + CompilationOptions + Cos + CensoredDistribution + CompilationTarget + Cosh + Censoring + Compile + CoshIntegral + Center + Compiled + CosineDistance + CenterDot + CompiledFunction + CosIntegral + CentralMoment + Complement + Cot + CentralMomentGeneratingFunction + CompleteGraph + Coth + CForm + CompleteGraphQ + Count + ChampernowneNumber + CompleteKaryTree + CountRoots + ChanVeseBinarize + Complex + CountryData + Character + Complexes + Covariance + CharacterEncoding + ComplexExpand + CovarianceEstimatorFunction + CharacteristicFunction + ComplexInfinity + CramerVonMisesTest + CharacteristicPolynomial + ComplexityFunction + CreateArchive + CharacterRange + ComponentMeasurements + CreateDialog + Characters + ComposeList + CreateDirectory + ChartBaseStyle + ComposeSeries + CreateDocument + ChartElementFunction + Composition + CreateIntermediateDirectories + ChartElements + CompoundExpression + CreatePalette + ChartLabels + Compress + CreateScheduledTask + ChartLayout + Condition + CreateWindow + ChartLegends + ConditionalExpression + CriticalSection + ChartStyle + Conditioned + Cross + ChebyshevT + Cone + CrossingDetect + ChebyshevU + ConfidenceLevel + CrossMatrix + Check + Congruent + Csc + CheckAbort + Conjugate + Csch + Checkbox + ConjugateTranspose + Cubics + CheckboxBar + Conjunction + Cuboid + ChemicalData + ConnectedComponents + Cumulant + ChessboardDistance + ConnectedGraphQ + CumulantGeneratingFunction + ChiDistribution + ConoverTest + Cup + ChineseRemainder + Constant + CupCap + ChiSquareDistribution + ConstantArray + CurrentImage + ChoiceButtons + Constants + CurrentValue + ChoiceDialog + ContentPadding + CurvatureFlowFilter + CholeskyDecomposition + ContentSelectable + CurveClosed + Chop + ContentSize + Cyan + Circle + Context + CycleGraph + CircleDot + Contexts + Cycles + CircleMinus + ContextToFileName + CyclicGroup + CirclePlus + Continue + Cyclotomic + CircleTimes + ContinuedFraction + Cylinder + CirculantGraph + ContinuedFractionK + CylindricalDecomposition + D + D + DepthFirstScan + DiskMatrix + DagumDistribution + Derivative + Dispatch + DamerauLevenshteinDistance + DerivativeFilter + DispersionEstimatorFunction + Darker + DesignMatrix + DisplayAllSteps + Dashed + Det + DisplayEndPacket + Dashing + DGaussianWavelet + DisplayForm + DataDistribution + Diagonal + DisplayFunction + DataRange + DiagonalMatrix + DisplayPacket + DataReversed + Dialog + DistanceFunction + DateDifference + DialogInput + DistanceTransform + DateFunction + DialogNotebook + Distribute + DateList + DialogProlog + Distributed + DateListLogPlot + DialogReturn + DistributedContexts + DateListPlot + DialogSymbols + DistributeDefinitions + DatePattern + Diamond + DistributionChart + DatePlus + DiamondMatrix + DistributionFitTest + DateString + DiceDissimilarity + DistributionParameterAssumptions + DateTicksFormat + DictionaryLookup + DistributionParameterQ + DaubechiesWavelet + DifferenceDelta + Divide + DavisDistribution + DifferenceRoot + DivideBy + DawsonF + DifferenceRootReduce + Dividers + DeBruijnGraph + Differences + Divisible + DeclarePackage + DifferentialD + Divisors + Decompose + DifferentialRoot + DivisorSigma + Decrement + DifferentialRootReduce + DivisorSum + DedekindEta + DigitBlock + DMSList + Default + DigitCharacter + DMSString + DefaultAxesStyle + DigitCount + Do + DefaultBaseStyle + DigitQ + DockedCells + DefaultBoxStyle + DihedralGroup + DocumentNotebook + DefaultButton + Dilation + Dot + DefaultDuplicateCellStyle + Dimensions + DotDashed + DefaultDuration + DiracComb + DotEqual + DefaultElement + DiracDelta + Dotted + DefaultFaceGridsStyle + DirectedEdge + DoubleBracketingBar + DefaultFieldHintStyle + DirectedEdges + DoubleDownArrow + DefaultFrameStyle + DirectedGraph + DoubleLeftArrow + DefaultFrameTicksStyle + DirectedGraphQ + DoubleLeftRightArrow + DefaultGridLinesStyle + DirectedInfinity + DoubleLongLeftArrow + DefaultLabelStyle + Direction + DoubleLongLeftRightArrow + DefaultMenuStyle + Directive + DoubleLongRightArrow + DefaultNewCellStyle + Directory + DoubleRightArrow + DefaultOptions + DirectoryName + DoubleUpArrow + DefaultTicksStyle + DirectoryQ + DoubleUpDownArrow + Defer + DirectoryStack + DoubleVerticalBar + Definition + DirichletCharacter + DownArrow + Degree + DirichletConvolve + DownArrowBar + DegreeCentrality + DirichletDistribution + DownArrowUpArrow + DegreeGraphDistribution + DirichletL + DownLeftRightVector + Deinitialization + DirichletTransform + DownLeftTeeVector + Del + DiscreteConvolve + DownLeftVector + Deletable + DiscreteDelta + DownLeftVectorBar + Delete + DiscreteIndicator + DownRightTeeVector + DeleteBorderComponents + DiscreteLQEstimatorGains + DownRightVector + DeleteCases + DiscreteLQRegulatorGains + DownRightVectorBar + DeleteContents + DiscreteLyapunovSolve + DownTeeArrow + DeleteDirectory + DiscretePlot + DownValues + DeleteDuplicates + DiscretePlot3D + DragAndDrop + DeleteFile + DiscreteRatio + Drop + DeleteSmallComponents + DiscreteRiccatiSolve + DSolve + Delimiter + DiscreteShift + Dt + DelimiterFlashTime + DiscreteTimeModelQ + DualSystemsModel + Denominator + DiscreteUniformDistribution + DumpSave + DensityHistogram + DiscreteWaveletData + Dynamic + DensityPlot + DiscreteWaveletPacketTransform + DynamicEvaluationTimeout + DependentVariables + DiscreteWaveletTransform + DynamicModule + Deploy + Discriminant + DynamicModuleValues + Deployed + Disjunction + DynamicSetting + Depth + Disk + DynamicWrapper + E + E + End + ExactNumberQ + EdgeAdd + EndDialogPacket + ExampleData + EdgeCount + EndOfFile + Except + EdgeCoverQ + EndOfLine + ExcludedForms + EdgeDelete + EndOfString + ExcludePods + EdgeDetect + EndPackage + Exclusions + EdgeForm + EngineeringForm + ExclusionsStyle + EdgeIndex + EnterExpressionPacket + Exists + EdgeLabeling + EnterTextPacket + Exit + EdgeLabels + Entropy + Exp + EdgeList + EntropyFilter + Expand + EdgeQ + Environment + ExpandAll + EdgeRenderingFunction + Epilog + ExpandDenominator + EdgeRules + Equal + ExpandFileName + EdgeShapeFunction + EqualTilde + ExpandNumerator + EdgeStyle + Equilibrium + Expectation + EdgeWeight + Equivalent + ExpGammaDistribution + Editable + Erf + ExpIntegralE + EditDistance + Erfc + ExpIntegralEi + EffectiveInterest + Erfi + Exponent + Eigensystem + ErlangDistribution + ExponentFunction + Eigenvalues + Erosion + ExponentialDistribution + EigenvectorCentrality + ErrorBox + ExponentialFamily + Eigenvectors + EstimatedDistribution + ExponentialGeneratingFunction + Element + EstimatorGains + ExponentialMovingAverage + ElementData + EstimatorRegulator + ExponentialPowerDistribution + Eliminate + EuclideanDistance + ExponentStep + EllipticE + EulerE + Export + EllipticExp + EulerGamma + ExportString + EllipticExpPrime + EulerianGraphQ + Expression + EllipticF + EulerPhi + ExpressionCell + EllipticK + Evaluatable + ExpToTrig + EllipticLog + Evaluate + ExtendedGCD + EllipticNomeQ + EvaluatePacket + Extension + EllipticPi + EvaluationElements + ExtentElementFunction + EllipticTheta + EvaluationMonitor + ExtentMarkers + EllipticThetaPrime + EvaluationNotebook + ExtentSize + EmitSound + EvaluationObject + Extract + EmpiricalDistribution + Evaluator + ExtractArchive + EmptyGraphQ + EvenQ + ExtremeValueDistribution + Enabled + EventHandler + Encode + EventLabels + F + FaceForm + FindFit + FormBox + FaceGrids + FindGeneratingFunction + FortranForm + FaceGridsStyle + FindGeoLocation + Forward + Factor + FindGeometricTransform + ForwardBackward + Factorial + FindGraphIsomorphism + Fourier + Factorial2 + FindHamiltonianCycle + FourierCoefficient + FactorialMoment + FindIndependentEdgeSet + FourierCosCoefficient + FactorialMomentGeneratingFunction + FindIndependentVertexSet + FourierCosSeries + FactorialPower + FindInstance + FourierCosTransform + FactorInteger + FindIntegerNullVector + FourierDCT + FactorList + FindLibrary + FourierDST + FactorSquareFree + FindLinearRecurrence + FourierParameters + FactorSquareFreeList + FindList + FourierSequenceTransform + FactorTerms + FindMaximum + FourierSeries + FactorTermsList + FindMaxValue + FourierSinCoefficient + False + FindMinimum + FourierSinSeries + FeedbackType + FindMinValue + FourierSinTransform + Fibonacci + FindPermutation + FourierTransform + FieldHint + FindRoot + FourierTrigSeries + FieldHintStyle + FindSequenceFunction + FractionalPart + FieldMasked + FindShortestPath + FractionBox + FieldSize + FindShortestTour + Frame + FileBaseName + FindThreshold + FrameBox + FileByteCount + FindVertexCover + Framed + FileDate + FinishDynamic + FrameLabel + FileExistsQ + FiniteAbelianGroupCount + FrameMargins + FileExtension + FiniteGroupCount + FrameStyle + FileFormat + FiniteGroupData + FrameTicks + FileHash + First + FrameTicksStyle + FileNameDepth + FischerGroupFi22 + FRatioDistribution + FileNameDrop + FischerGroupFi23 + FrechetDistribution + FileNameJoin + FischerGroupFi24Prime + FreeQ + FileNames + FisherHypergeometricDistribution + FresnelC + FileNameSetter + FisherRatioTest + FresnelS + FileNameSplit + FisherZDistribution + FrobeniusNumber + FileNameTake + Fit + FrobeniusSolve + FilePrint + FittedModel + FromCharacterCode + FileType + FixedPoint + FromCoefficientRules + FilledCurve + FixedPointList + FromContinuedFraction + Filling + Flat + FromDigits + FillingStyle + Flatten + FromDMS + FillingTransform + FlattenAt + Front + FilterRules + FlipView + FrontEndDynamicExpression + FinancialBond + Floor + FrontEndEventActions + FinancialData + Fold + FrontEndExecute + FinancialDerivative + FoldList + FrontEndToken + FinancialIndicator + FontColor + FrontEndTokenExecute + Find + FontFamily + Full + FindArgMax + FontSize + FullDefinition + FindArgMin + FontSlant + FullForm + FindClique + FontSubstitutions + FullGraphics + FindClusters + FontTracking + FullSimplify + FindCurvePath + FontVariations + Function + FindDistributionParameters + FontWeight + FunctionExpand + FindDivisions + For + FunctionInterpolation + FindEdgeCover + ForAll + FunctionSpace + FindEulerianCycle + Format + FindFile + FormatType + G + GaborWavelet + GeoPositionXYZ + GraphStyle + GainMargins + GeoProjectionData + GraphUnion + GainPhaseMargins + Get + Gray + Gamma + Glaisher + GrayLevel + GammaDistribution + Glow + Greater + GammaRegularized + GoldenRatio + GreaterEqual + GapPenalty + GompertzMakehamDistribution + GreaterEqualLess + Gather + Goto + GreaterFullEqual + GatherBy + Gradient + GreaterGreater + GaussianFilter + GradientFilter + GreaterLess + GaussianIntegers + Graph + GreaterSlantEqual + GaussianMatrix + GraphCenter + GreaterTilde + GCD + GraphComplement + Green + GegenbauerC + GraphData + Grid + General + GraphDiameter + GridBox + GeneralizedLinearModelFit + GraphDifference + GridDefaultElement + GenerateConditions + GraphDisjointUnion + GridGraph + GeneratedCell + GraphDistance + GridLines + GeneratedParameters + GraphDistanceMatrix + GridLinesStyle + GeneratingFunction + GraphHighlight + GroebnerBasis + GenericCylindricalDecomposition + GraphHighlightStyle + GroupActionBase + GenomeData + Graphics + GroupCentralizer + GenomeLookup + Graphics3D + GroupElementPosition + GeodesicDilation + GraphicsColumn + GroupElementQ + GeodesicErosion + GraphicsComplex + GroupElements + GeoDestination + GraphicsGrid + GroupGenerators + GeodesyData + GraphicsGroup + GroupMultiplicationTable + GeoDirection + GraphicsRow + GroupOrbits + GeoDistance + GraphIntersection + GroupOrder + GeoGridPosition + GraphLayout + GroupPageBreakWithin + GeometricDistribution + GraphPeriphery + GroupSetwiseStabilizer + GeometricMean + GraphPlot + GroupStabilizer + GeometricMeanFilter + GraphPlot3D + GroupStabilizerChain + GeometricTransformation + GraphPower + Gudermannian + GeoPosition + GraphQ + GumbelDistribution + GeoPositionENU + GraphRadius + H + HaarWavelet + HermitianMatrixQ + Hue + HalfNormalDistribution + HessenbergDecomposition + HumpDownHump + HamiltonianGraphQ + HexadecimalCharacter + HumpEqual + HammingDistance + HighlightGraph + HurwitzLerchPhi + HankelH1 + HigmanSimsGroupHS + HurwitzZeta + HankelH2 + HilbertMatrix + HyperbolicDistribution + HankelMatrix + Histogram + HypercubeGraph + HaradaNortonGroupHN + Histogram3D + Hyperfactorial + HararyGraph + HistogramDistribution + Hypergeometric0F1 + HarmonicMean + HistogramList + Hypergeometric0F1Regularized + HarmonicMeanFilter + HitMissTransform + Hypergeometric1F1 + HarmonicNumber + HITSCentrality + Hypergeometric1F1Regularized + Hash + Hold + Hypergeometric2F1 + Haversine + HoldAll + Hypergeometric2F1Regularized + HazardFunction + HoldAllComplete + HypergeometricDistribution + Head + HoldComplete + HypergeometricPFQ + Heads + HoldFirst + HypergeometricPFQRegularized + HeavisideLambda + HoldForm + HypergeometricU + HeavisidePi + HoldPattern + Hyperlink + HeavisideTheta + HoldRest + Hyphenation + HeldGroupHe + HornerForm + HypothesisTestData + HermiteDecomposition + HotellingTSquareDistribution + HermiteH + HoytDistribution + I + I + ImportString + Interrupt + Identity + In + Intersection + IdentityMatrix + IncidenceGraph + Interval + If + IncidenceMatrix + IntervalIntersection + IgnoreCase + IncludeConstantBasis + IntervalMemberQ + Im + IncludePods + IntervalUnion + Image + Increment + Inverse + ImageAdd + IndependentEdgeSetQ + InverseBetaRegularized + ImageAdjust + IndependentVertexSetQ + InverseCDF + ImageAlign + Indeterminate + InverseChiSquareDistribution + ImageApply + IndexGraph + InverseContinuousWaveletTransform + ImageAspectRatio + InexactNumberQ + InverseDistanceTransform + ImageAssemble + Infinity + InverseEllipticNomeQ + ImageCapture + Infix + InverseErf + ImageChannels + Information + InverseErfc + ImageClip + Inherited + InverseFourier + ImageColorSpace + Initialization + InverseFourierCosTransform + ImageCompose + InitializationCell + InverseFourierSequenceTransform + ImageConvolve + Inner + InverseFourierSinTransform + ImageCooccurrence + Inpaint + InverseFourierTransform + ImageCorrelate + Input + InverseFunction + ImageCorrespondingPoints + InputAliases + InverseFunctions + ImageCrop + InputAssumptions + InverseGammaDistribution + ImageData + InputAutoReplacements + InverseGammaRegularized + ImageDeconvolve + InputField + InverseGaussianDistribution + ImageDifference + InputForm + InverseGudermannian + ImageDimensions + InputNamePacket + InverseHaversine + ImageEffect + InputNotebook + InverseJacobiCD + ImageFilter + InputPacket + InverseJacobiCN + ImageForestingComponents + InputStream + InverseJacobiCS + ImageForwardTransformation + InputString + InverseJacobiDC + ImageHistogram + InputStringPacket + InverseJacobiDN + ImageKeypoints + Insert + InverseJacobiDS + ImageLevels + InsertResults + InverseJacobiNC + ImageLines + Inset + InverseJacobiND + ImageMargins + Install + InverseJacobiNS + ImageMultiply + InstallService + InverseJacobiSC + ImagePad + InString + InverseJacobiSD + ImagePadding + Integer + InverseJacobiSN + ImagePartition + IntegerDigits + InverseLaplaceTransform + ImagePerspectiveTransformation + IntegerExponent + InversePermutation + ImageQ + IntegerLength + InverseRadon + ImageReflect + IntegerPart + InverseSeries + ImageResize + IntegerPartitions + InverseSurvivalFunction + ImageResolution + IntegerQ + InverseWaveletTransform + ImageRotate + Integers + InverseWeierstrassP + ImageScaled + IntegerString + InverseZTransform + ImageSize + Integrate + Invisible + ImageSizeAction + InteractiveTradingChart + IrreduciblePolynomialQ + ImageSizeMultipliers + Interleaving + IsolatingInterval + ImageSubtract + InternallyBalancedDecomposition + IsomorphicGraphQ + ImageTake + InterpolatingFunction + IsotopeData + ImageTransformation + InterpolatingPolynomial + Italic + ImageTrim + Interpolation + Item + ImageType + InterpolationOrder + ItemAspectRatio + ImageValue + Interpretation + ItemSize + Implies + InterpretationBox + ItemStyle + Import + InterquartileRange + J + JaccardDissimilarity + JacobiNS + JankoGroupJ4 + JacobiAmplitude + JacobiP + JarqueBeraALMTest + JacobiCD + JacobiSC + JohnsonDistribution + JacobiCN + JacobiSD + Join + JacobiCS + JacobiSN + Joined + JacobiDC + JacobiSymbol + JoinedCurve + JacobiDN + JacobiZeta + JoinForm + JacobiDS + JankoGroupJ1 + JordanDecomposition + JacobiNC + JankoGroupJ2 + JordanModelDecomposition + JacobiND + JankoGroupJ3 + K + KagiChart + KelvinKer + KolmogorovSmirnovTest + KalmanEstimator + KernelMixtureDistribution + KroneckerDelta + KarhunenLoeveDecomposition + KernelObject + KroneckerProduct + KaryTree + Kernels + KroneckerSymbol + KatzCentrality + Khinchin + KuiperTest + KCoreComponents + KirchhoffGraph + KumaraswamyDistribution + KDistribution + KirchhoffMatrix + Kurtosis + KelvinBei + KleinInvariantJ + KuwaharaFilter + KelvinBer + KnightTourGraph + KelvinKei + KnotData + L + Label + LibraryFunction + ListDensityPlot + Labeled + LibraryFunctionError + ListInterpolation + LabelingFunction + LibraryFunctionInformation + ListLineIntegralConvolutionPlot + LabelStyle + LibraryFunctionLoad + ListLinePlot + LaguerreL + LibraryFunctionUnload + ListLogLinearPlot + LandauDistribution + LibraryLoad + ListLogLogPlot + LanguageCategory + LibraryUnload + ListLogPlot + LaplaceDistribution + LiftingFilterData + ListPlay + LaplaceTransform + LiftingWaveletTransform + ListPlot + LaplacianFilter + LightBlue + ListPlot3D + LaplacianGaussianFilter + LightBrown + ListPointPlot3D + Large + LightCyan + ListPolarPlot + Larger + Lighter + ListStreamDensityPlot + Last + LightGray + ListStreamPlot + Latitude + LightGreen + ListSurfacePlot3D + LatitudeLongitude + Lighting + ListVectorDensityPlot + LatticeData + LightingAngle + ListVectorPlot + LatticeReduce + LightMagenta + ListVectorPlot3D + LaunchKernels + LightOrange + LocalizeVariables + LayeredGraphPlot + LightPink + LocationEquivalenceTest + LayerSizeFunction + LightPurple + LocationTest + LCM + LightRed + Locator + LeafCount + LightYellow + LocatorAutoCreate + LeastSquares + Likelihood + LocatorPane + Left + Limit + LocatorRegion + LeftArrow + LimitsPositioning + Locked + LeftArrowBar + LindleyDistribution + Log + LeftArrowRightArrow + Line + Log10 + LeftDownTeeVector + LinearFractionalTransform + Log2 + LeftDownVector + LinearModelFit + LogBarnesG + LeftDownVectorBar + LinearOffsetFunction + LogGamma + LeftRightArrow + LinearProgramming + LogGammaDistribution + LeftRightVector + LinearRecurrence + LogicalExpand + LeftTeeArrow + LinearSolve + LogIntegral + LeftTeeVector + LinearSolveFunction + LogisticDistribution + LeftTriangle + LineBreakChart + LogitModelFit + LeftTriangleBar + LineGraph + LogLikelihood + LeftTriangleEqual + LineIndent + LogLinearPlot + LeftUpDownVector + LineIndentMaxFraction + LogLogisticDistribution + LeftUpTeeVector + LineIntegralConvolutionPlot + LogLogPlot + LeftUpVector + LineIntegralConvolutionScale + LogNormalDistribution + LeftUpVectorBar + LineSpacing + LogPlot + LeftVector + LinkClose + LogSeriesDistribution + LeftVectorBar + LinkConnect + Longest + LegendAppearance + LinkCreate + LongestCommonSequence + Legended + LinkFunction + LongestCommonSubsequence + LegendreP + LinkInterrupt + Longitude + LegendreQ + LinkLaunch + LongLeftArrow + Length + LinkObject + LongLeftRightArrow + LengthWhile + LinkPatterns + LongRightArrow + LerchPhi + LinkProtocol + LoopFreeGraphQ + Less + LinkRead + LowerCaseQ + LessEqual + LinkReadyQ + LowerLeftArrow + LessEqualGreater + Links + LowerRightArrow + LessFullEqual + LinkWrite + LowerTriangularize + LessGreater + LiouvilleLambda + LQEstimatorGains + LessLess + List + LQGRegulator + LessSlantEqual + Listable + LQOutputRegulatorGains + LessTilde + ListAnimate + LQRegulatorGains + LetterCharacter + ListContourPlot + LucasL + LetterQ + ListContourPlot3D + LUDecomposition + Level + ListConvolve + LyapunovSolve + LeveneTest + ListCorrelate + LyonsGroupLy + LeviCivitaTensor + ListCurvePathPlot + LevyDistribution + ListDeconvolve + M + MachineNumberQ + MaxDetect + MinDetect + MachinePrecision + MaxExtraBandwidths + MinFilter + Magenta + MaxExtraConditions + MinimalPolynomial + Magnification + MaxFilter + MinimalStateSpaceModel + Magnify + Maximize + Minimize + Majority + MaxIterations + Minors + MakeBoxes + MaxMemoryUsed + MinStableDistribution + MakeExpression + MaxMixtureKernels + Minus + MangoldtLambda + MaxPlotPoints + MinusPlus + ManhattanDistance + MaxRecursion + MinValue + Manipulate + MaxStableDistribution + Missing + Manipulator + MaxStepFraction + MixtureDistribution + MannWhitneyTest + MaxSteps + Mod + MantissaExponent + MaxStepSize + Modal + Manual + MaxValue + ModularLambda + Map + MaxwellDistribution + Module + MapAll + McLaughlinGroupMcL + Modulus + MapAt + Mean + MoebiusMu + MapIndexed + MeanDeviation + Moment + MapThread + MeanFilter + MomentConvert + MarcumQ + MeanShift + MomentEvaluate + MardiaCombinedTest + MeanShiftFilter + MomentGeneratingFunction + MardiaKurtosisTest + Median + Monitor + MardiaSkewnessTest + MedianDeviation + MonomialList + MarginalDistribution + MedianFilter + MonsterGroupM + Masking + Medium + MorletWavelet + MatchingDissimilarity + MeijerG + MorphologicalBinarize + MatchLocalNames + MemberQ + MorphologicalBranchPoints + MatchQ + MemoryConstrained + MorphologicalComponents + MathieuC + MemoryInUse + MorphologicalEulerNumber + MathieuCharacteristicA + MenuCommandKey + MorphologicalGraph + MathieuCharacteristicB + MenuPacket + MorphologicalPerimeter + MathieuCharacteristicExponent + MenuSortingValue + MorphologicalTransform + MathieuCPrime + MenuStyle + Most + MathieuGroupM11 + MenuView + MouseAnnotation + MathieuGroupM12 + Mesh + MouseAppearance + MathieuGroupM22 + MeshFunctions + Mouseover + MathieuGroupM23 + MeshShading + MousePosition + MathieuGroupM24 + MeshStyle + MovingAverage + MathieuS + Message + MovingMedian + MathieuSPrime + MessageDialog + MoyalDistribution + MathMLForm + MessageList + MultiedgeStyle + MatrixExp + MessageName + Multinomial + MatrixForm + MessagePacket + MultinomialDistribution + MatrixPlot + Messages + MultinormalDistribution + MatrixPower + Method + MultiplicativeOrder + MatrixQ + MexicanHatWavelet + MultivariateHypergeometricDistribution + MatrixRank + MeyerWavelet + MultivariatePoissonDistribution + Max + Min + MultivariateTDistribution + N + N + NormalizedSquaredEuclideanDistance + NotPrecedesSlantEqual + NakagamiDistribution + NormalsFunction + NotPrecedesTilde + NameQ + NormFunction + NotReverseElement + Names + Not + NotRightTriangle + Nand + NotCongruent + NotRightTriangleBar + NArgMax + NotCupCap + NotRightTriangleEqual + NArgMin + NotDoubleVerticalBar + NotSquareSubset + NCache + Notebook + NotSquareSubsetEqual + NDSolve + NotebookApply + NotSquareSuperset + Nearest + NotebookAutoSave + NotSquareSupersetEqual + NearestFunction + NotebookClose + NotSubset + NeedlemanWunschSimilarity + NotebookDelete + NotSubsetEqual + Needs + NotebookDirectory + NotSucceeds + Negative + NotebookDynamicExpression + NotSucceedsEqual + NegativeBinomialDistribution + NotebookEvaluate + NotSucceedsSlantEqual + NegativeMultinomialDistribution + NotebookEventActions + NotSucceedsTilde + NeighborhoodGraph + NotebookFileName + NotSuperset + Nest + NotebookFind + NotSupersetEqual + NestedGreaterGreater + NotebookGet + NotTilde + NestedLessLess + NotebookInformation + NotTildeEqual + NestList + NotebookLocate + NotTildeFullEqual + NestWhile + NotebookObject + NotTildeTilde + NestWhileList + NotebookOpen + NotVerticalBar + NevilleThetaC + NotebookPrint + NProbability + NevilleThetaD + NotebookPut + NProduct + NevilleThetaN + NotebookRead + NRoots + NevilleThetaS + Notebooks + NSolve + NExpectation + NotebookSave + NSum + NextPrime + NotebookSelection + Null + NHoldAll + NotebookWrite + NullRecords + NHoldFirst + NotElement + NullSpace + NHoldRest + NotEqualTilde + NullWords + NicholsGridLines + NotExists + Number + NicholsPlot + NotGreater + NumberFieldClassNumber + NIntegrate + NotGreaterEqual + NumberFieldDiscriminant + NMaximize + NotGreaterFullEqual + NumberFieldFundamentalUnits + NMaxValue + NotGreaterGreater + NumberFieldIntegralBasis + NMinimize + NotGreaterLess + NumberFieldNormRepresentatives + NMinValue + NotGreaterSlantEqual + NumberFieldRegulator + NominalVariables + NotGreaterTilde + NumberFieldRootsOfUnity + NoncentralBetaDistribution + NotHumpDownHump + NumberFieldSignature + NoncentralChiSquareDistribution + NotHumpEqual + NumberForm + NoncentralFRatioDistribution + NotLeftTriangle + NumberFormat + NoncentralStudentTDistribution + NotLeftTriangleBar + NumberMarks + NonCommutativeMultiply + NotLeftTriangleEqual + NumberMultiplier + NonConstants + NotLess + NumberPadding + None + NotLessEqual + NumberPoint + NonlinearModelFit + NotLessFullEqual + NumberQ + NonNegative + NotLessGreater + NumberSeparator + NonPositive + NotLessLess + NumberSigns + Nor + NotLessSlantEqual + NumberString + NorlundB + NotLessTilde + Numerator + Norm + NotNestedGreaterGreater + NumericFunction + Normal + NotNestedLessLess + NumericQ + NormalDistribution + NotPrecedes + NyquistGridLines + Normalize + NotPrecedesEqual + NyquistPlot + O + O + Operate + OutputForm + ObservabilityGramian + OperatingSystem + OutputNamePacket + ObservabilityMatrix + Optional + OutputResponse + ObservableDecomposition + Options + OutputSizeLimit + ObservableModelQ + OptionsPattern + OutputStream + OddQ + OptionValue + OverBar + Off + Or + OverDot + Offset + Orange + Overflow + On + Order + OverHat + ONanGroupON + OrderDistribution + Overlaps + OneIdentity + OrderedQ + Overlay + Opacity + Ordering + Overscript + OpenAppend + Orderless + OverscriptBox + Opener + Orthogonalize + OverTilde + OpenerView + Out + OverVector + Opening + Outer + OwenT + OpenRead + OutputControllabilityMatrix + OwnValues + OpenWrite + OutputControllableModelQ + P + PackingMethod + PermutationList + PopupMenu + PaddedForm + PermutationListQ + PopupView + Padding + PermutationMax + PopupWindow + PadeApproximant + PermutationMin + Position + PadLeft + PermutationOrder + Positive + PadRight + PermutationPower + PositiveDefiniteMatrixQ + PageBreakAbove + PermutationProduct + PossibleZeroQ + PageBreakBelow + PermutationReplace + Postfix + PageBreakWithin + Permutations + Power + PageFooters + PermutationSupport + PowerDistribution + PageHeaders + Permute + PowerExpand + PageRankCentrality + PeronaMalikFilter + PowerMod + PageWidth + PERTDistribution + PowerModList + PairedBarChart + PetersenGraph + PowersRepresentations + PairedHistogram + PhaseMargins + PowerSymmetricPolynomial + PairedTTest + Pi + PrecedenceForm + PairedZTest + Pick + Precedes + PaletteNotebook + Piecewise + PrecedesEqual + Pane + PiecewiseExpand + PrecedesSlantEqual + Panel + PieChart + PrecedesTilde + Paneled + PieChart3D + Precision + PaneSelector + Pink + PrecisionGoal + ParabolicCylinderD + PixelConstrained + PreDecrement + ParagraphIndent + PixelValue + PreemptProtect + ParagraphSpacing + Placed + Prefix + ParallelArray + Placeholder + PreIncrement + ParallelCombine + PlaceholderReplace + Prepend + ParallelDo + Plain + PrependTo + ParallelEvaluate + Play + PreserveImageOptions + Parallelization + PlayRange + PriceGraphDistribution + Parallelize + Plot + Prime + ParallelMap + Plot3D + PrimeNu + ParallelNeeds + PlotLabel + PrimeOmega + ParallelProduct + PlotLayout + PrimePi + ParallelSubmit + PlotMarkers + PrimePowerQ + ParallelSum + PlotPoints + PrimeQ + ParallelTable + PlotRange + Primes + ParallelTry + PlotRangeClipping + PrimeZetaP + ParameterEstimator + PlotRangePadding + PrimitiveRoot + ParameterMixtureDistribution + PlotRegion + PrincipalComponents + ParametricPlot + PlotStyle + PrincipalValue + ParametricPlot3D + Plus + Print + ParentDirectory + PlusMinus + PrintingStyleEnvironment + ParetoDistribution + Pochhammer + PrintTemporary + Part + PodStates + Probability + ParticleData + PodWidth + ProbabilityDistribution + Partition + Point + ProbabilityPlot + PartitionsP + PointFigureChart + ProbabilityScalePlot + PartitionsQ + PointSize + ProbitModelFit + PascalDistribution + PoissonConsulDistribution + Product + PassEventsDown + PoissonDistribution + ProductDistribution + PassEventsUp + PolarAxes + ProductLog + Paste + PolarAxesOrigin + ProgressIndicator + PasteButton + PolarGridLines + Projection + Path + PolarPlot + Prolog + PathGraph + PolarTicks + Properties + PathGraphQ + PoleZeroMarkers + Property + Pattern + PolyaAeppliDistribution + PropertyList + PatternSequence + PolyGamma + PropertyValue + PatternTest + Polygon + Proportion + PauliMatrix + PolyhedronData + Proportional + PaulWavelet + PolyLog + Protect + Pause + PolynomialExtendedGCD + Protected + PDF + PolynomialGCD + ProteinData + PearsonChiSquareTest + PolynomialLCM + Pruning + PearsonDistribution + PolynomialMod + PseudoInverse + PerformanceGoal + PolynomialQ + Purple + PermutationCycles + PolynomialQuotient + Put + PermutationCyclesQ + PolynomialQuotientRemainder + PutAppend + PermutationGroup + PolynomialReduce + PermutationLength + PolynomialRemainder + Q + QBinomial + QRDecomposition + Quartiles + QFactorial + QuadraticIrrationalQ + QuartileSkewness + QGamma + Quantile + Quiet + QHypergeometricPFQ + QuantilePlot + Quit + QPochhammer + Quartics + Quotient + QPolyGamma + QuartileDeviation + QuotientRemainder + R + RadicalBox + RefreshRate + RightArrowBar + RadioButton + RegionBinarize + RightArrowLeftArrow + RadioButtonBar + RegionFunction + RightCosetRepresentative + Radon + RegionPlot + RightDownTeeVector + RamanujanTau + RegionPlot3D + RightDownVector + RamanujanTauL + RegularExpression + RightDownVectorBar + RamanujanTauTheta + Regularization + RightTeeArrow + RamanujanTauZ + ReleaseHold + RightTeeVector + RandomChoice + ReliefImage + RightTriangle + RandomComplex + ReliefPlot + RightTriangleBar + RandomGraph + Remove + RightTriangleEqual + RandomImage + RemoveAlphaChannel + RightUpDownVector + RandomInteger + RemoveProperty + RightUpTeeVector + RandomPermutation + RemoveScheduledTask + RightUpVector + RandomPrime + RenameDirectory + RightUpVectorBar + RandomReal + RenameFile + RightVector + RandomSample + RenkoChart + RightVectorBar + RandomVariate + Repeated + RogersTanimotoDissimilarity + Range + RepeatedNull + Root + RangeFilter + Replace + RootApproximant + RankedMax + ReplaceAll + RootIntervals + RankedMin + ReplaceList + RootLocusPlot + Raster + ReplacePart + RootMeanSquare + Rasterize + ReplaceRepeated + RootOfUnityQ + RasterSize + Resampling + RootReduce + Rational + Rescale + Roots + Rationalize + RescalingTransform + RootSum + Rationals + ResetDirectory + Rotate + Ratios + ResetScheduledTask + RotateLabel + RawBoxes + Residue + RotateLeft + RawData + Resolve + RotateRight + RayleighDistribution + Rest + RotationAction + Re + Resultant + RotationMatrix + Read + ResumePacket + RotationTransform + ReadList + Return + Round + ReadProtected + ReturnExpressionPacket + RoundingRadius + Real + ReturnPacket + Row + RealBlockDiagonalForm + ReturnTextPacket + RowAlignments + RealDigits + Reverse + RowBox + RealExponent + ReverseBiorthogonalSplineWavelet + RowLines + Reals + ReverseElement + RowMinHeight + Reap + ReverseEquilibrium + RowReduce + Record + ReverseGraph + RowsEqual + RecordLists + ReverseUpEquilibrium + RowSpacings + RecordSeparators + RevolutionAxis + RSolve + Rectangle + RevolutionPlot3D + RudvalisGroupRu + RectangleChart + RGBColor + Rule + RectangleChart3D + RiccatiSolve + RuleDelayed + RecurrenceTable + RiceDistribution + Run + Red + RidgeFilter + RunScheduledTask + Reduce + RiemannR + RunThrough + ReferenceLineStyle + RiemannSiegelTheta + RuntimeAttributes + Refine + RiemannSiegelZ + RuntimeOptions + ReflectionMatrix + Riffle + RussellRaoDissimilarity + ReflectionTransform + Right + Refresh + RightArrow + S + SameQ + Sin + StationaryWaveletPacketTransform + SameTest + Sinc + StationaryWaveletTransform + SampleDepth + SinghMaddalaDistribution + StatusArea + SampledSoundFunction + SingleLetterItalics + StepMonitor + SampledSoundList + SingularValueDecomposition + StieltjesGamma + SampleRate + SingularValueList + StirlingS1 + SamplingPeriod + SingularValuePlot + StirlingS2 + SatisfiabilityCount + Sinh + StopScheduledTask + SatisfiabilityInstances + SinhIntegral + StreamColorFunction + SatisfiableQ + SinIntegral + StreamColorFunctionScaling + Save + SixJSymbol + StreamDensityPlot + SaveDefinitions + Skeleton + StreamPlot + SawtoothWave + SkeletonTransform + StreamPoints + Scale + SkellamDistribution + StreamPosition + Scaled + Skewness + Streams + ScalingFunctions + SkewNormalDistribution + StreamScale + ScalingMatrix + Skip + StreamStyle + ScalingTransform + Slider + String + Scan + Slider2D + StringCases + ScheduledTaskObject + SlideView + StringCount + ScheduledTasks + Slot + StringDrop + SchurDecomposition + SlotSequence + StringExpression + ScientificForm + Small + StringForm + ScreenStyleEnvironment + SmallCircle + StringFormat + ScriptBaselineShifts + Smaller + StringFreeQ + ScriptMinSize + SmithWatermanSimilarity + StringInsert + ScriptSizeMultipliers + SmoothDensityHistogram + StringJoin + Scrollbars + SmoothHistogram + StringLength + ScrollPosition + SmoothHistogram3D + StringMatchQ + Sec + SmoothKernelDistribution + StringPosition + Sech + SokalSneathDissimilarity + StringQ + SechDistribution + Solve + StringReplace + SectorChart + SolveAlways + StringReplaceList + SectorChart3D + Sort + StringReplacePart + SectorOrigin + SortBy + StringReverse + SectorSpacing + Sound + StringSkeleton + SeedRandom + SoundNote + StringSplit + Select + SoundVolume + StringTake + Selectable + Sow + StringToStream + SelectComponents + Spacer + StringTrim + SelectedNotebook + Spacings + StructuredSelection + SelectionAnimate + Span + StruveH + SelectionCreateCell + SpanFromAbove + StruveL + SelectionEvaluate + SpanFromBoth + Stub + SelectionEvaluateCreateCell + SpanFromLeft + StudentTDistribution + SelectionMove + SparseArray + Style + SelfLoopStyle + Speak + StyleBox + SemialgebraicComponentInstances + Specularity + StyleData + SendMail + SpellingCorrection + StyleDefinitions + Sequence + Sphere + Subfactorial + SequenceAlignment + SphericalBesselJ + Subgraph + SequenceHold + SphericalBesselY + SubMinus + Series + SphericalHankelH1 + SubPlus + SeriesCoefficient + SphericalHankelH2 + Subresultants + SeriesData + SphericalHarmonicY + Subscript + SessionTime + SphericalPlot3D + SubscriptBox + Set + SphericalRegion + Subset + SetAccuracy + SpheroidalEigenvalue + SubsetEqual + SetAlphaChannel + SpheroidalJoiningFactor + Subsets + SetAttributes + SpheroidalPS + SubStar + SetDelayed + SpheroidalPSPrime + Subsuperscript + SetDirectory + SpheroidalQS + SubsuperscriptBox + SetFileDate + SpheroidalQSPrime + Subtract + SetOptions + SpheroidalRadialFactor + SubtractFrom + SetPrecision + SpheroidalS1 + Succeeds + SetProperty + SpheroidalS1Prime + SucceedsEqual + SetSelectedNotebook + SpheroidalS2 + SucceedsSlantEqual + SetSharedFunction + SpheroidalS2Prime + SucceedsTilde + SetSharedVariable + Splice + SuchThat + SetStreamPosition + SplineClosed + Sum + SetSystemOptions + SplineDegree + SumConvergence + Setter + SplineKnots + SuperDagger + SetterBar + SplineWeights + SuperMinus + Setting + Split + SuperPlus + Shallow + SplitBy + Superscript + ShannonWavelet + SpokenString + SuperscriptBox + ShapiroWilkTest + Sqrt + Superset + Share + SqrtBox + SupersetEqual + Sharpen + Square + SuperStar + ShearingMatrix + SquaredEuclideanDistance + SurvivalDistribution + ShearingTransform + SquareFreeQ + SurvivalFunction + Short + SquareIntersection + SuspendPacket + ShortDownArrow + SquaresR + SuzukiDistribution + Shortest + SquareSubset + SuzukiGroupSuz + ShortestPathFunction + SquareSubsetEqual + Switch + ShortLeftArrow + SquareSuperset + Symbol + ShortRightArrow + SquareSupersetEqual + SymbolName + ShortUpArrow + SquareUnion + SymletWavelet + Show + SquareWave + SymmetricGroup + ShowAutoStyles + StabilityMargins + SymmetricMatrixQ + ShowCellBracket + StabilityMarginsStyle + SymmetricPolynomial + ShowCellLabel + StableDistribution + SymmetricReduction + ShowCellTags + Stack + SynchronousInitialization + ShowCursorTracker + StackBegin + SynchronousUpdating + ShowGroupOpener + StackComplete + SyntaxInformation + ShowPageBreaks + StackInhibit + SyntaxLength + ShowSelection + StandardDeviation + SyntaxPacket + ShowSpecialCharacters + StandardDeviationFilter + SyntaxQ + ShowStringCharacters + StandardForm + SystemDialogInput + ShrinkingDelay + Standardize + SystemInformation + SiegelTheta + Star + SystemOpen + SiegelTukeyTest + StarGraph + SystemOptions + Sign + StartingStepSize + SystemsModelDelete + Signature + StartOfLine + SystemsModelDimensions + SignedRankTest + StartOfString + SystemsModelExtract + SignificanceLevel + StartScheduledTask + SystemsModelFeedbackConnect + SignPadding + StateFeedbackGains + SystemsModelLabels + SignTest + StateOutputEstimator + SystemsModelOrder + SimilarityRules + StateResponse + SystemsModelParallelConnect + SimpleGraph + StateSpaceModel + SystemsModelSeriesConnect + SimpleGraphQ + StateSpaceRealization + SystemsModelStateFeedbackConnect + Simplify + StateSpaceTransform + T + Table + Tilde + TraceOn + TableAlignments + TildeEqual + TraceOriginal + TableDepth + TildeFullEqual + TracePrint + TableDirections + TildeTilde + TraceScan + TableForm + TimeConstrained + TrackedSymbols + TableHeadings + TimeConstraint + TradingChart + TableSpacing + Times + TraditionalForm + TabView + TimesBy + TransferFunctionCancel + TagBox + TimeUsed + TransferFunctionExpand + TaggingRules + TimeValue + TransferFunctionFactor + TagSet + TimeZone + TransferFunctionModel + TagSetDelayed + Timing + TransferFunctionPoles + TagUnset + Tiny + TransferFunctionZeros + Take + TitsGroupT + TransformationFunction + TakeWhile + ToBoxes + TransformationFunctions + Tally + ToCharacterCode + TransformationMatrix + Tan + ToContinuousTimeModel + TransformedDistribution + Tanh + ToDiscreteTimeModel + Translate + TargetFunctions + ToeplitzMatrix + TranslationTransform + TautologyQ + ToExpression + Transparent + Temporary + Together + Transpose + TeXForm + Toggler + TreeForm + Text + TogglerBar + TreeGraph + TextAlignment + TokenWords + TreeGraphQ + TextCell + Tolerance + TreePlot + TextClipboardType + ToLowerCase + TrendStyle + TextData + ToNumberField + TriangleWave + TextJustification + Tooltip + TriangularDistribution + TextPacket + TooltipDelay + Trig + TextRecognize + Top + TrigExpand + Texture + TopHatTransform + TrigFactor + TextureCoordinateFunction + TopologicalSort + TrigFactorList + TextureCoordinateScaling + ToRadicals + Trigger + Therefore + ToRules + TrigReduce + Thick + ToString + TrigToExp + Thickness + Total + TrimmedMean + Thin + TotalVariationFilter + True + Thinning + TotalWidth + TrueQ + ThompsonGroupTh + ToUpperCase + TruncatedDistribution + Thread + Tr + TTest + ThreeJSymbol + Trace + Tube + Threshold + TraceAbove + TukeyLambdaDistribution + Through + TraceBackward + Tuples + Throw + TraceDepth + TuranGraph + Thumbnail + TraceDialog + TuringMachine + Ticks + TraceForward + TicksStyle + TraceOff + U + Uncompress + UniformSumDistribution + UpArrowBar + Undefined + Uninstall + UpArrowDownArrow + UnderBar + Union + Update + Underflow + UnionPlus + UpdateInterval + Underlined + Unique + UpDownArrow + Underoverscript + UnitBox + UpEquilibrium + UnderoverscriptBox + Unitize + UpperCaseQ + Underscript + UnitStep + UpperLeftArrow + UnderscriptBox + UnitTriangle + UpperRightArrow + UndirectedEdge + UnitVector + UpperTriangularize + UndirectedGraph + Unprotect + UpSet + UndirectedGraphQ + UnsameQ + UpSetDelayed + Unequal + UnsavedVariables + UpTeeArrow + Unevaluated + Unset + UpValues + UniformDistribution + UnsetShared + UsingFrontEnd + UniformGraphDistribution + UpArrow + V + ValidationLength + VertexAdd + VertexReplace + ValueQ + VertexColors + VertexShape + Variables + VertexComponent + VertexShapeFunction + Variance + VertexCoordinateRules + VertexSize + VarianceEquivalenceTest + VertexCoordinates + VertexStyle + VarianceEstimatorFunction + VertexCount + VertexTextureCoordinates + VarianceTest + VertexCoverQ + VertexWeight + VectorAngle + VertexDegree + VerticalBar + VectorColorFunction + VertexDelete + VerticalSeparator + VectorColorFunctionScaling + VertexEccentricity + VerticalSlider + VectorDensityPlot + VertexInComponent + VerticalTilde + VectorPlot + VertexInDegree + ViewAngle + VectorPlot3D + VertexIndex + ViewCenter + VectorPoints + VertexLabeling + ViewMatrix + VectorQ + VertexLabels + ViewPoint + VectorScale + VertexList + ViewRange + VectorStyle + VertexNormals + ViewVector + Vee + VertexOutComponent + ViewVertical + Verbatim + VertexOutDegree + Visible + VerifyConvergence + VertexQ + VonMisesDistribution + VerifyTestAssumptions + VertexRenderingFunction + W + WaitAll + WeierstrassHalfPeriods + WindowFloating + WaitNext + WeierstrassInvariants + WindowFrame + WakebyDistribution + WeierstrassP + WindowMargins + WalleniusHypergeometricDistribution + WeierstrassPPrime + WindowMovable + WaringYuleDistribution + WeierstrassSigma + WindowOpacity + WatershedComponents + WeierstrassZeta + WindowSize + WatsonUSquareTest + WeightedAdjacencyGraph + WindowStatusArea + WattsStrogatzGraphDistribution + WeightedAdjacencyMatrix + WindowTitle + WaveletBestBasis + WeightedGraphQ + WindowToolbars + WaveletFilterCoefficients + Weights + With + WaveletImagePlot + WheelGraph + WolframAlpha + WaveletListPlot + Which + Word + WaveletMapIndexed + While + WordBoundary + WaveletMatrixPlot + White + WordCharacter + WaveletPhi + Whitespace + WordData + WaveletPsi + WhitespaceCharacter + WordSearch + WaveletScale + WhittakerM + WordSeparators + WaveletScalogram + WhittakerW + WorkingPrecision + WaveletThreshold + WienerFilter + Write + WeatherData + WignerD + WriteString + WeberE + WignerSemicircleDistribution + Wronskian + Wedge + WindowClickSelect + WeibullDistribution + WindowElements + X + XMLElement + Xnor + XMLObject + Xor + Y + Yellow + YuleDissimilarity + Z + ZernikeR + ZetaZero + ZTransform + ZeroTest + ZipfDistribution + Zeta + ZTest + $ + $Aborted + $Inspector + $OutputSizeLimit + $AssertFunction + $InstallationDirectory + $Packages + $Assumptions + $IterationLimit + $ParentLink + $BaseDirectory + $KernelCount + $ParentProcessID + $BatchInput + $KernelID + $Path + $BatchOutput + $Language + $PathnameSeparator + $ByteOrdering + $LibraryPath + $PerformanceGoal + $Canceled + $LicenseExpirationDate + $Post + $CharacterEncoding + $LicenseID + $Pre + $CharacterEncodings + $LicenseServer + $PrePrint + $CommandLine + $Line + $PreRead + $CompilationTarget + $Linked + $ProcessID + $ConfiguredKernels + $MachineAddresses + $ProcessorCount + $Context + $MachineDomains + $ProcessorType + $ContextPath + $MachineEpsilon + $RecursionLimit + $ControlActiveSetting + $MachineID + $ReleaseNumber + $CreationDate + $MachineName + $RootDirectory + $CurrentLink + $MachinePrecision + $ScheduledTask + $DateStringFormat + $MachineType + $ScriptCommandLine + $DefaultImagingDevice + $MaxExtraPrecision + $SessionID + $Display + $MaxMachineNumber + $SharedFunctions + $DisplayFunction + $MaxNumber + $SharedVariables + $DistributedContexts + $MaxPiecewiseCases + $SoundDisplayFunction + $DynamicEvaluation + $MaxPrecision + $SyntaxHandler + $Echo + $MaxRootDegree + $System + $Epilog + $MessageGroups + $SystemCharacterEncoding + $ExportFormats + $MessageList + $SystemID + $Failed + $MessagePrePrint + $SystemWordLength + $FrontEnd + $Messages + $TemporaryDirectory + $FrontEndSession + $MinMachineNumber + $TimedOut + $GeoLocation + $MinNumber + $TimeUnit + $HistoryLength + $MinPrecision + $TimeZone + $HomeDirectory + $ModuleNumber + $Urgent + $IgnoreEOF + $NewMessage + $UserBaseDirectory + $ImagingDevices + $NewSymbol + $UserDocumentsDirectory + $ImportFormats + $Notebooks + $UserName + $InitialDirectory + $NumberMarks + $Version + $Input + $OperatingSystem + $VersionNumber + $InputFileName + $Output + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/matlab.xml b/src/data/extra/syntax-highlighting/syntax/matlab.xml new file mode 100644 index 00000000..4eeb8cad --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/matlab.xml @@ -0,0 +1,163 @@ + + + + + + + + + + + break + case + catch + classdef + continue + else + elseif + end + for + function + global + if + otherwise + parfor + persistent + return + spmd + switch + try + while + methods + properties + events + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/maxima.xml b/src/data/extra/syntax-highlighting/syntax/maxima.xml new file mode 100644 index 00000000..827f09cc --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/maxima.xml @@ -0,0 +1,1903 @@ + + + + + + + + + + and + do + else + elseif + false + for + if + in + not + or + step + then + thru + true + while + + + + FIXME + TODO + + + + abasep + abs + absint + absolute_real_time + acos + acosh + acot + acoth + acsc + acsch + activate + addcol + add_edge + add_edges + addmatrices + addrow + add_vertex + add_vertices + adjacency_matrix + adjoin + adjoint + af + agd + airy_ai + airy_bi + airy_dai + airy_dbi + algsys + alg_type + alias + allroots + alphacharp + alphanumericp + antid + antidiff + AntiDifference + append + appendfile + apply + apply1 + apply2 + applyb1 + apropos + args + arithmetic + arithsum + array + arrayapply + arrayinfo + arraymake + ascii + asec + asech + asin + asinh + askinteger + asksign + assoc + assoc_legendre_p + assoc_legendre_q + assume + asympa + at + atan + atan2 + atanh + atensimp + atom + atvalue + augcoefmatrix + augmented_lagrangian_method + av + average_degree + backtrace + barsplot + bashindices + batch + batchload + bc2 + bdvac + belln + bern + bernpoly + bessel + bessel_i + bessel_j + bessel_k + bessel_y + beta + bezout + bffac + bfhzeta + bfloat + bfloatp + bfpsi + bfpsi0 + bfzeta + biconected_components + bimetric + binomial + bipartition + block + blockmatrixp + bode_gain + bode_phase + bothcoef + box + boxplot + break + bug_report + build_info + buildq + burn + cabs + canform + canten + cardinality + carg + cartan + cartesian_product + catch + cbffac + cdf_bernoulli + cdf_beta + cdf_binomial + cdf_cauchy + cdf_chi2 + cdf_continuous_uniform + cdf_discrete_uniform + cdf_exp + cdf_f + cdf_gamma + cdf_geometric + cdf_gumbel + cdf_hypergeometric + cdf_laplace + cdf_logistic + cdf_lognormal + cdf_negative_binomial + cdf_normal + cdf_pareto + cdf_poisson + cdf_rank_sum + cdf_rayleigh + cdf_signed_rank + cdf_student_t + cdf_weibull + cdisplay + celine + ceiling + central_moment + cequal + cequalignore + cf + cfdisrep + cfexpand + cgeodesic + cgreaterp + cgreaterpignore + changename + changevar + chaosgame + charat + charfun + charfun2 + charlist + charp + charpoly + chebyshev_t + chebyshev_u + checkdiv + check_overlaps + cholesky + christof + chromatic_index + chromatic_number + cint + circulant_graph + clear_edge_weight + clear_rules + clear_vertex_label + clebsch_graph + clessp + clesspignore + close + closefile + cmetric + coeff + coefmatrix + cograd + col + collapse + collectterms + columnop + columnspace + columnswap + columnvector + combination + combine + comp2pui + compare + compfile + compile + compile_file + complement_graph + complete_bipartite_graph + complete_graph + components + concan + concat + conjugate + conmetderiv + connected_components + connect_vertices + cons + constantp + constituent + cont2part + content + continuous_freq + contortion + contour_plot + contract + contract_edge + contragrad + contrib_ode + convert + coord + copy + copy_graph + copylist + copymatrix + cor + cos + cosh + cot + coth + cov + cov1 + covdiff + covect + covers + create_graph + create_list + csc + csch + csetup + cspline + ctaylor + ct_coordsys + ctransform + ctranspose + cube_graph + cunlisp + cv + cycle_digraph + cycle_graph + dblint + deactivate + declare + declare_translated + declare_weight + decsym + defcon + define + define_variable + defint + defmatch + defrule + deftaylor + degree_sequence + del + delete + deleten + delta + demo + demoivre + denom + depends + derivdegree + derivlist + describe + desolve + determinant + dgauss_a + dgauss_b + dgeev + dgesvd + diag + diagmatrix + diag_matrix + diagmatrixp + diameter + diff + digitcharp + dimacs_export + dimacs_import + dimension + direct + discrete_freq + disjoin + disjointp + disolate + disp + dispcon + dispform + dispfun + dispJordan + display + disprule + dispterms + distrib + divide + divisors + divsum + dkummer_m + dkummer_u + dlange + dodecahedron_graph + dotproduct + dotsimp + dpart + draw + draw2d + draw3d + draw_graph + dscalar + echelon + edge_coloring + edges + eigens_by_jacobi + eigenvalues + eigenvectors + eighth + einstein + eivals + eivects + elapsed_real_time + elapsed_run_time + ele2comp + ele2polynome + ele2pui + elem + elementp + eliminate + elliptic_e + elliptic_ec + elliptic_eu + elliptic_f + elliptic_kc + elliptic_pi + ematrix + empty_graph + emptyp + endcons + entermatrix + entertensor + entier + equal + equalp + equiv_classes + erf + errcatch + error + errormsg + euler + ev + eval_string + evenp + every + evolution + evolution2d + evundiff + example + exp + expand + expandwrt + expandwrt_factored + explose + exponentialize + express + expt + exsec + extdiff + extract_linear_equations + extremal_subset + ezgcd + f90 + facsum + factcomb + factor + factorfacsum + factorial + factorout + factorsum + facts + fast_central_elements + fast_linsolve + fasttimes + featurep + fft + fib + fibtophi + fifth + filename_merge + file_search + file_type + fillarray + findde + find_root + first + fix + flatten + flength + float + floatnump + floor + flower_snark + flush + flush1deriv + flushd + flushnd + forget + fortran + fourcos + fourexpand + fourier + fourint + fourintcos + fourintsin + foursimp + foursin + fourth + fposition + frame_bracket + freeof + freshline + from_adjacency_matrix + frucht_graph + full_listify + fullmap + fullmapl + fullratsimp + fullratsubst + fullsetify + funcsolve + fundef + funmake + funp + gamma + gauss_a + gauss_b + gaussprob + gcd + gcdex + gcdivide + gcfac + gcfactor + gd + genfact + gen_laguerre + genmatrix + geometric + geometric_mean + geosum + get + get_edge_weight + get_lu_factors + get_pixel + get_vertex_label + gfactor + gfactorsum + ggf + girth + global_variances + gnuplot_close + gnuplot_replot + gnuplot_reset + gnuplot_restart + gnuplot_start + go + Gosper + GosperSum + gradef + gramschmidt + graph6_decode + graph6_encode + graph6_export + graph6_import + graph_center + graph_charpoly + graph_eigenvalues + graph_order + graph_periphery + graph_product + graph_size + graph_union + grid_graph + grind + grobner_basis + grotzch_graph + hamilton_cycle + hamilton_path + hankel + harmonic + harmonic_mean + hav + heawood_graph + hermite + hessian + hilbert_matrix + hipow + histogram + hodge + horner + ic1 + ic2 + ic_convert + ichr1 + ichr2 + icosahedron_graph + icurvature + ident + identfor + identity + idiff + idim + idummy + ieqn + ifactors + iframes + ifs + ift + igeodesic_coords + ilt + imagpart + imetric + implicit_derivative + implicit_plot + indexed_tensor + indices + induced_subgraph + inferencep + inference_result + infix + init_atensor + init_ctensor + in_neighbors + innerproduct + inpart + inprod + inrt + integerp + integer_partitions + integrate + intersect + intersection + intervalp + intopois + intosum + invariant1 + invariant2 + inverse_jacobi_cd + inverse_jacobi_cn + inverse_jacobi_cs + inverse_jacobi_dc + inverse_jacobi_dn + inverse_jacobi_ds + inverse_jacobi_nc + inverse_jacobi_nd + inverse_jacobi_ns + inverse_jacobi_sc + inverse_jacobi_sd + inverse_jacobi_sn + invert + invert_by_lu + inv_mod + is + is_biconnected + is_bipartite + is_connected + is_digraph + is_edge_in_graph + is_graph + is_graph_or_digraph + ishow + is_isomorphic + isolate + isomorphism + is_planar + isqrt + is_sconnected + is_tree + is_vertex_in_graph + items_inference + jacobi + jacobian + jacobi_cd + jacobi_cn + jacobi_cs + jacobi_dc + jacobi_dn + jacobi_ds + jacobi_nc + jacobi_nd + jacobi_ns + jacobi_p + jacobi_sc + jacobi_sd + jacobi_sn + JF + join + jordan + julia + kdels + kdelta + kill + killcontext + kostka + kron_delta + kronecker_product + kummer_m + kummer_u + kurtosis + kurtosis_bernoulli + kurtosis_beta + kurtosis_binomial + kurtosis_chi2 + kurtosis_continuous_uniform + kurtosis_discrete_uniform + kurtosis_exp + kurtosis_f + kurtosis_gamma + kurtosis_geometric + kurtosis_gumbel + kurtosis_hypergeometric + kurtosis_laplace + kurtosis_logistic + kurtosis_lognormal + kurtosis_negative_binomial + kurtosis_normal + kurtosis_pareto + kurtosis_poisson + kurtosis_rayleigh + kurtosis_student_t + kurtosis_weibull + labels + lagrange + laguerre + lambda + laplace + laplacian_matrix + last + lbfgs + lc2kdt + lcharp + lc_l + lcm + lc_u + ldefint + ldisp + ldisplay + legendre_p + legendre_q + leinstein + length + let + letrules + letsimp + levi_civita + lfreeof + lgtreillis + lhs + li + liediff + limit + Lindstedt + linear + linearinterpol + linear_program + line_graph + linsolve + listarray + list_correlations + listify + list_nc_monomials + listoftens + listofvars + listp + lmax + lmin + load + loadfile + local + locate_matrix_entry + log + logand + logarc + logcontract + logor + logxor + lopow + lorentz_gauge + lowercasep + lpart + lratsubst + lreduce + lriemann + lsquares_estimates + lsquares_estimates_approximate + lsquares_estimates_exact + lsquares_mse + lsquares_residual_mse + lsquares_residuals + lsum + ltreillis + lu_backsub + lu_factor + macroexpand + macroexpand1 + make_array + makebox + makefact + makegamma + make_level_picture + makelist + makeOrders + make_poly_continent + make_poly_country + make_polygon + make_random_state + make_rgb_picture + makeset + make_transform + mandelbrot + map + mapatom + maplist + matchdeclare + matchfix + mat_cond + mat_fullunblocker + mat_function + mat_norm + matrix + matrixmap + matrixp + matrix_size + mattrace + mat_trace + mat_unblocker + max + max_clique + max_degree + max_flow + maxi + maximize_lp + max_independent_set + max_matching + maybe + mean + mean_bernoulli + mean_beta + mean_binomial + mean_chi2 + mean_continuous_uniform + mean_deviation + mean_discrete_uniform + mean_exp + mean_f + mean_gamma + mean_geometric + mean_gumbel + mean_hypergeometric + mean_laplace + mean_logistic + mean_lognormal + mean_negative_binomial + mean_normal + mean_pareto + mean_poisson + mean_rayleigh + mean_student_t + mean_weibull + median + median_deviation + member + metricexpandall + min + min_degree + minfactorial + mini + minimalPoly + minimize_lp + minimum_spanning_tree + minor + mnewton + mod + mode_declare + mode_identity + ModeMatrix + moebius + mon2schur + mono + monomial_dimensions + multi_elem + multinomial + multinomial_coeff + multi_orbit + multi_pui + multsym + multthru + mycielski_graph + nary + nc_degree + ncexpt + ncharpoly + negative_picture + neighbors + newcontext + newdet + new_graph + newline + newton + next_prime + niceindices + ninth + noncentral_moment + nonmetricity + nonnegintegerp + nonscalarp + nonzeroandfreeof + notequal + nounify + nptetrad + nroots + nterms + ntermst + nthroot + nullity + nullspace + num + numbered_boundaries + numberp + num_distinct_partitions + numerval + numfactor + num_partitions + nusum + odd_girth + oddp + ode2 + ode_check + odelin + op + opena + openr + openw + operatorp + opsubst + optimize + orbit + orbits + ordergreat + ordergreatp + orderless + orderlessp + orthogonal_complement + orthopoly_recur + orthopoly_weight + outermap + out_neighbors + outofpois + pade + parGosper + parse_string + part + part2cont + partfrac + partition + partition_set + partpol + path_digraph + path_graph + pdf_bernoulli + pdf_beta + pdf_binomial + pdf_cauchy + pdf_chi2 + pdf_continuous_uniform + pdf_discrete_uniform + pdf_exp + pdf_f + pdf_gamma + pdf_geometric + pdf_gumbel + pdf_hypergeometric + pdf_laplace + pdf_logistic + pdf_lognormal + pdf_negative_binomial + pdf_normal + pdf_pareto + pdf_poisson + pdf_rank_sum + pdf_rayleigh + pdf_signed_rank + pdf_student_t + pdf_weibull + pearson_skewness + permanent + permut + permutation + permutations + petersen_graph + petrov + pickapart + picture_equalp + picturep + piechart + planar_embedding + playback + plog + plot2d + plot3d + plotdf + plsquares + pochhammer + poisdiff + poisexpt + poisint + poismap + poisplus + poissimp + poissubst + poistimes + poistrim + polarform + polartorect + poly_add + poly_buchberger + poly_buchberger_criterion + poly_colon_ideal + poly_content + polydecomp + poly_depends_p + poly_elimination_ideal + poly_exact_divide + poly_expand + poly_expt + poly_gcd + poly_grobner + poly_grobner_equal + poly_grobner_member + poly_grobner_subsetp + poly_ideal_intersection + poly_ideal_polysaturation + poly_ideal_polysaturation1 + poly_ideal_saturation + poly_ideal_saturation1 + poly_lcm + poly_minimization + polymod + poly_multiply + polynome2ele + polynomialp + poly_normal_form + poly_normalize + poly_normalize_list + poly_polysaturation_extension + poly_primitive_part + poly_pseudo_divide + poly_reduced_grobner + poly_reduction + poly_saturation_extension + poly_s_polynomial + poly_subtract + polytocompanion + potential + power_mod + powers + powerseries + powerset + prev_prime + primep + print + printf + print_graph + printpois + printprops + prodrac + product + properties + propvars + psi + ptriangularize + pui + pui2comp + pui2ele + pui2polynome + pui_direct + puireduc + put + qput + qrange + quad_qag + quad_qagi + quad_qags + quad_qawc + quad_qawf + quad_qawo + quad_qaws + quantile + quantile_bernoulli + quantile_beta + quantile_binomial + quantile_cauchy + quantile_chi2 + quantile_continuous_uniform + quantile_discrete_uniform + quantile_exp + quantile_f + quantile_gamma + quantile_geometric + quantile_gumbel + quantile_hypergeometric + quantile_laplace + quantile_logistic + quantile_lognormal + quantile_negative_binomial + quantile_normal + quantile_pareto + quantile_poisson + quantile_rayleigh + quantile_student_t + quantile_weibull + quartile_skewness + quit + qunit + quotient + radcan + radius + random + random_bernoulli + random_beta + random_binomial + random_cauchy + random_chi2 + random_continuous_uniform + random_digraph + random_discrete_uniform + random_exp + random_f + random_gamma + random_geometric + random_graph + random_graph1 + random_gumbel + random_hypergeometric + random_laplace + random_logistic + random_lognormal + random_negative_binomial + random_network + random_normal + random_pareto + random_permutation + random_poisson + random_rayleigh + random_regular_graph + random_student_t + random_tournament + random_tree + random_weibull + range + rank + rat + ratcoef + ratdenom + ratdiff + ratdisrep + ratexpand + rational + rationalize + ratnumer + ratnump + ratp + ratsimp + ratsubst + ratvars + ratweight + read + read_hashed_array + readline + read_lisp_array + read_list + read_matrix + read_maxima_array + read_nested_list + readonly + read_xpm + realpart + realroots + rearray + rectform + recttopolar + rediff + reduce_consts + reduce_order + region_boundaries + rem + remainder + remarray + rembox + remcomps + remcon + remcoord + remfun + remfunction + remlet + remove + remove_edge + remove_vertex + rempart + remrule + remsym + remvalue + rename + reset + residue + resolvante + resolvante_alternee1 + resolvante_bipartite + resolvante_diedrale + resolvante_klein + resolvante_klein3 + resolvante_produit_sym + resolvante_unitaire + resolvante_vierer + rest + resultant + return + reveal + reverse + revert + revert2 + rgb2level + rhs + ricci + riemann + rinvariant + risch + rk + rncombine + romberg + room + rootscontract + row + rowop + rowswap + rreduce + run_testsuite + save + scalarp + scaled_bessel_i + scaled_bessel_i0 + scaled_bessel_i1 + scalefactors + scanmap + scatterplot + schur2comp + sconcat + scopy + scsimp + scurvature + sdowncase + sec + sech + second + sequal + sequalignore + setdifference + set_edge_weight + setelmx + setequalp + setify + setp + set_partitions + set_plot_option + set_random_state + setunits + setup_autoload + set_up_dot_simplifications + set_vertex_label + seventh + sexplode + sf + shortest_path + show + showcomps + showratvars + sign + signum + similaritytransform + simple_linear_regression + simplify_sum + simplode + simpmetderiv + simtran + sin + sinh + sinsert + sinvertcase + sixth + skewness + skewness_bernoulli + skewness_beta + skewness_binomial + skewness_chi2 + skewness_continuous_uniform + skewness_discrete_uniform + skewness_exp + skewness_f + skewness_gamma + skewness_geometric + skewness_gumbel + skewness_hypergeometric + skewness_laplace + skewness_logistic + skewness_lognormal + skewness_negative_binomial + skewness_normal + skewness_pareto + skewness_poisson + skewness_rayleigh + skewness_student_t + skewness_weibull + slength + smake + smismatch + solve + solve_rec + solve_rec_rat + some + somrac + sort + sparse6_decode + sparse6_encode + sparse6_export + sparse6_import + specint + spherical_bessel_j + spherical_bessel_y + spherical_hankel1 + spherical_hankel2 + spherical_harmonic + splice + split + sposition + sprint + sqfr + sqrt + sqrtdenest + sremove + sremovefirst + sreverse + ssearch + ssort + sstatus + ssubst + ssubstfirst + staircase + status + std + std1 + std_bernoulli + std_beta + std_binomial + std_chi2 + std_continuous_uniform + std_discrete_uniform + std_exp + std_f + std_gamma + std_geometric + std_gumbel + std_hypergeometric + std_laplace + std_logistic + std_lognormal + std_negative_binomial + std_normal + std_pareto + std_poisson + std_rayleigh + std_student_t + std_weibull + stirling + stirling1 + stirling2 + strim + striml + strimr + string + stringout + stringp + strong_components + sublis + sublist + sublist_indices + submatrix + subsample + subset + subsetp + subst + substinpart + substpart + substring + subvar + subvarp + sum + sumcontract + summand_to_rec + supcase + supcontext + symbolp + symmdifference + symmetricp + system + take_channel + take_inference + tan + tanh + taylor + taylorinfo + taylorp + taylor_simplifier + taytorat + tcl_output + tcontract + tellrat + tellsimp + tellsimpafter + tentex + tenth + test_mean + test_means_difference + test_normality + test_rank_sum + test_sign + test_signed_rank + test_variance + test_variance_ratio + tex + texput + %th + third + throw + time + timedate + timer + timer_info + tldefint + tlimit + todd_coxeter + toeplitz + tokens + to_lisp + topological_sort + totaldisrep + totalfourier + totient + tpartpol + trace + tracematrix + trace_options + translate + translate_file + transpose + tree_reduce + treillis + treinat + triangularize + trigexpand + trigrat + trigreduce + trigsimp + trunc + tr_warnings_get + ueivects + uforget + ultraspherical + underlying_graph + undiff + union + unique + uniteigenvectors + unit_step + unitvector + unknown + unorder + unsum + untellrat + untimer + untrace + uppercasep + uricci + uriemann + uvect + vandermonde_matrix + var + var1 + var_bernoulli + var_beta + var_binomial + var_chi2 + var_continuous_uniform + var_discrete_uniform + var_exp + var_f + var_gamma + var_geometric + var_gumbel + var_hypergeometric + var_laplace + var_logistic + var_lognormal + var_negative_binomial + var_normal + var_pareto + var_poisson + var_rayleigh + var_student_t + var_weibull + vectorpotential + vectorsimp + verbify + vers + vertex_coloring + vertex_degree + vertex_distance + vertex_eccentricity + vertex_in_degree + vertex_out_degree + vertices + vertices_to_cycle + vertices_to_path + weyl + wheel_graph + with_stdout + write_data + writefile + wronskian + xgraph_curves + xreduce + xthru + Zeilberger + zeroequiv + zerofor + zeromatrix + zeromatrixp + zeta + zlange + + + + _ + __ + % + %% + absboxchar + activecontexts + additive + algebraic + algepsilon + algexact + aliases + all_dotsimp_denoms + allbut + allsym + arrays + askexp + assume_pos + assume_pos_pred + assumescalar + atomgrad + backsubst + berlefact + besselexpand + bftorat + bftrunc + boxchar + breakup + cauchysum + cflength + cframe_flag + cnonmet_flag + context + contexts + cosnpiflag + ctaypov + ctaypt + ctayswitch + ctayvar + ct_coords + ctorsion_flag + ctrgsimp + current_let_rule_package + debugmode + default_let_rule_package + demoivre + dependencies + derivabbrev + derivsubst + detout + diagmetric + dim + dispflag + display2d + display_format_internal + doallmxops + domain + domxexpt + domxmxops + domxnctimes + dontfactor + doscmxops + doscmxplus + dot0nscsimp + dot0simp + dot1simp + dotassoc + dotconstrules + dotdistrib + dotexptsimp + dotident + dotscrules + draw_graph_program + %e + %edispflag + %emode + %enumer + epsilon_lp + erfflag + error + error_size + error_syms + %e_to_numlog + evflag + evfun + expandwrt_denom + expon + exponentialize + expop + exptdispflag + exptisolate + exptsubst + facexpand + factlim + factorflag + file_output_append + file_search_demo + file_search_lisp + file_search_maxima + find_root_abs + find_root_error + find_root_rel + flipflag + float2bf + fortindent + fortspaces + fpprec + fpprintprec + functions + %gamma + gammalim + gdet + genindex + gensumnum + GGFCFMAX + GGFINFINITY + globalsolve + gradefs + grind + halfangles + %i + %iargs + ibase + icounter + idummyx + ieqnprint + iframe_bracket_form + igeowedge_flag + imetric + inchar + ind + inf + infeval + infinity + inflag + infolists + in_netmath + integrate_use_rootsof + integration_constant + integration_constant_counter + intfaclim + isolate_wrt_times + keepfloat + labels + letrat + let_rule_packages + lhospitallim + limsubst + linechar + linel + linenum + linsolve_params + linsolvewarn + lispdisp + listarith + listconstvars + listdummyvars + lmxchar + loadprint + logabs + logarc + logconcoeffp + logexpand + lognegint + lognumer + logsimp + m1pbranch + macroexpansion + maperror + mapprint + matrix_element_add + matrix_element_mult + matrix_element_transpose + maxapplydepth + maxapplyheight + maxima_tempdir + maxima_userdir + maxnegex + maxposex + maxpsifracdenom + maxpsifracnum + maxpsinegint + maxpsiposint + maxtayorder + method + minf + mode_check_errorp + mode_checkp + mode_check_warnp + modulus + multiplicities + myoptions + negdistrib + negsumdispflag + newtonepsilon + newtonmaxiter + niceindicespref + nolabels + nonegative_lp + noundisp + obase + opproperties + opsubst + optimprefix + optionset + outchar + packagefile + partswitch + pfeformat + %phi + %pi + %piargs + piece + plot_options + poislim + poly_coefficient_ring + poly_elimination_order + poly_grobner_algorithm + poly_grobner_debug + poly_monomial_order + poly_primary_elimination_order + poly_return_term_list + poly_secondary_elimination_order + poly_top_reduction_only + powerdisp + prederror + primep_number_of_tests + product_use_gamma + programmode + prompt + psexpand + radexpand + radsubstflag + random_beta_algorithm + random_binomial_algorithm + random_chi2_algorithm + random_exp_algorithm + random_f_algorithm + random_gamma_algorithm + random_geometric_algorithm + random_hypergeometric_algorithm + random_negative_binomial_algorithm + random_normal_algorithm + random_poisson_algorithm + random_student_t_algorithm + ratalgdenom + ratchristof + ratdenomdivide + rateinstein + ratepsilon + ratexpand + ratfac + ratmx + ratprint + ratriemann + ratsimpexpons + ratvars + ratweights + ratweyl + ratwtlvl + realonly + refcheck + rmxchar + %rnum_list + rombergabs + rombergit + rombergmin + rombergtol + rootsconmode + rootsepsilon + savedef + savefactors + scalarmatrixp + setcheck + setcheckbreak + setval + showtime + simplify_products + simpsum + sinnpiflag + solvedecomposes + solveexplicit + solvefactors + solve_inconsistent_error + solvenullwarn + solveradcan + solvetrigwarn + sparse + sqrtdispflag + stardisp + stats_numer + stringdisp + sublis_apply_lambda + sumexpand + sumsplitfact + taylordepth + taylor_logexpand + taylor_order_coefficients + taylor_truncate_polynomials + tensorkill + testsuite_files + timer_devalue + tlimswitch + transcompile + transrun + tr_array_as_ref + tr_bound_function_applyp + tr_file_tty_messagesp + tr_float_can_branch_complex + tr_function_call_default + trigexpandplus + trigexpandtimes + triginverses + trigsign + tr_numer + tr_optimize_max_loop + tr_semicompile + tr_state_vars + tr_warn_bad_function_calls + tr_warn_fexpr + tr_warn_meval + tr_warn_mode + tr_warn_undeclared + tr_warn_undefined_variable + tr_windy + ttyoff + und + use_fast_arrays + values + vect_cross + verbose + zeroa + zerob + zerobern + zeta%pi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/mediawiki.xml b/src/data/extra/syntax-highlighting/syntax/mediawiki.xml new file mode 100644 index 00000000..b9a3815e --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/mediawiki.xml @@ -0,0 +1,622 @@ + + + + + + +]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/mel.xml b/src/data/extra/syntax-highlighting/syntax/mel.xml new file mode 100644 index 00000000..8806852c --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/mel.xml @@ -0,0 +1,1380 @@ + + + + + + + + break + case + continue + default + do + else + false + for + global + if + in + proc + return + switch + true + while + + + + + about + abs + addAttr + addAttributeEditorNodeHelp + addDynamic + addNewShelfTab + addPanelCategory + addPP + addPrefixToName + advanceToNextDrivenKey + affectedNet + affects + aimConstraint + air + aliasAttr + alias + alignCtx + alignCurve + align + alignSurface + allViewFit + ambientLight + angleBetween + angle + animCurveEditor + animDisplay + animView + annotate + appendStringArray + applicationName + applyAttrPreset + applyTake + arcLenDimContext + arcLengthDimension + arclen + arrayMapper + art3dPaintCtx + artAttrCtx + artAttrPaintVertexCtx + artAttrSkinPaintCtx + artAttrTool + artBuildPaintMenu + artFluidAttrCtx + artPuttyCtx + artSelectCtx + artSetPaintCtx + artUserPaintCtx + assignCommand + assignInputDevice + assignViewportFactories + attachCurve + attachDeviceAttr + attachSurface + attrColorSliderGrp + attrCompatibility + attrControlGrp + attrEnumOptionMenuGrp + attrEnumOptionMenu + attrFieldGrp + attrFieldSliderGrp + attributeExists + attributeInfo + attributeMenu + attributeQuery + attrNavigationControlGrp + attrPresetEditWin + autoKeyframe + autoPlace + bakeClip + bakeFluidShading + bakePartialHistory + bakeResults + bakeSimulation + basenameEx + basename + batchRender + bessel + bevel + bevelPlus + bindSkin + binMembership + blank + blend2 + blendShapeEditor + blendShape + blendShapePanel + blendTwoAttr + blindDataType + boneLattice + boundary + boxDollyCtx + boxZoomCtx + bufferCurve + buildBookmarkMenu + buildKeyframeMenu + button + buttonManip + cacheFileCombine + cacheFile + cacheFileMerge + cacheFileTrack + camera + cameraView + canCreateManip + canvas + capitalizeString + cat_Animation + catch + catchQuiet + cat_Effects + cat_General + cat_Language + cat_Modeling + cat_Rendering + cat_System + cat_Windows + CBG + ceil + changeSubdivComponentDisplayLevel + changeSubdivRegion + channelBox + character + characterize + characterMap + characterOutlineEditor + chdir + checkBoxGrp + checkBox + checkDefaultRenderGlobals + choice + circle + circularFillet + clamp + clearCache + clear + clipEditorCurrentTimeCtx + clipEditor + clip + clipSchedule + clipSchedulerOutliner + clipTrimBefore + closeCurve + closeSurface + cluster + cmdFileOutput + cmdScrollFieldExecuter + cmdScrollFieldReporter + cmdShell + coarsenSubdivSelectionList + collision + colorAtPoint + colorEditor + color + colorIndex + colorIndexSliderGrp + colorSliderButtonGrp + colorSliderGrp + columnLayout + commandEcho + commandLine + commandPort + compactHairSystem + componentEditor + compositingInterop + computePolysetVolume + condition + cone + confirmDialog + connectAttr + connectControl + connectDynamic + connectionInfo + connectJoint + constrain + constrainValue + constructionHistory + container + containsMultibyte + contextInfo + control + convertFromOldLayers + convertIffToPsd + convertLightmap + convertSolidTx + convertTessellation + convertUnit + copyArray + copyFlexor + copyKey + copySkinWeights + cos + cpButton + cpCache + cpClothSet + cpCollision + cpConstraint + cpConvClothToMesh + cpForces + cpGetSolverAttr + cpPanel + cpProperty + cpRigidCollisionFilter + cpSeam + cpSetEdit + cpSetSolverAttr + cpSolver + cpSolverTypes + cpTool + cpUpdateClothUVs + createDisplayLayer + createDrawCtx + createEditor + createLayeredPsdFile + createMotionField + createNewShelf + createNode + createRenderLayer + createSubdivRegion + cross + crossProduct + ctxAbort + ctxCompletion + ctxEditMode + ctxTraverse + currentCtx + currentTimeCtx + currentTime + currentUnit + curveAddPtCtx + curveCVCtx + curveEditorCtx + curveEPCtx + curve + curveIntersect + curveMoveEPCtx + curveOnSurface + curveSketchCtx + cutKey + cycleCheck + cylinder + dagPose + date + defaultLightListCheckBox + defaultNavigation + defineDataServer + defineVirtualDevice + deformer + deg_to_rad + deleteAttr + delete + deleteShadingGroupsAndMaterials + deleteShelfTab + deleteUI + deleteUnusedBrushes + delrandstr + detachCurve + detachDeviceAttr + detachSurface + deviceEditor + devicePanel + dgdirty + dgeval + dgInfo + dgtimer + dimWhen + directionalLight + directKeyCtx + dirmap + dirname + disable + disconnectAttr + disconnectJoint + diskCache + displacementToPoly + displayAffected + displayColor + displayCull + displayLevelOfDetail + displayPref + displayRGBColor + displaySmoothness + displayStats + displayString + displaySurface + distanceDimContext + distanceDimension + doBlur + dollyCtx + dolly + dopeSheetEditor + dot + dotProduct + doubleProfileBirailSurface + dragAttrContext + draggerContext + drag + dropoffLocator + duplicateCurve + duplicate + duplicateSurface + dynamicLoad + dynCache + dynControl + dynExport + dynExpression + dynGlobals + dynPaintEditor + dynParticleCtx + dynPref + dynRelEditor + dynRelEdPanel + editAttrLimits + editDisplayLayerGlobals + editDisplayLayerMembers + editor + editorTemplate + editRenderLayerAdjustment + editRenderLayerGlobals + editRenderLayerMembers + effector + emit + emitter + enableDevice + encodeString + endString + endsWith + env + equivalent + equivalentTol + erf + error + evalDeferred + evalEcho + eval + event + exactWorldBoundingBox + exclusiveLightCheckBox + exec + executeForEachObject + exists + exp + expressionEditorListen + expression + extendCurve + extendSurface + extrude + fcheck + fclose + feof + fflush + fgetline + fgetword + fileBrowserDialog + fileDialog + fileExtension + file + fileInfo + filetest + filletCurve + filterCurve + filterExpand + filter + filterStudioImport + findAllIntersections + findAnimCurves + finder + findKeyframe + findMenuItem + findRelatedSkinCluster + firstParentOf + fitBspline + flexor + floatEq + floatFieldGrp + floatField + floatScrollBar + floatSlider2 + floatSliderButtonGrp + floatSliderGrp + floatSlider + floor + flow + fluidCacheInfo + fluidEmitter + fluidVoxelInfo + flushUndo + fmod + fontDialog + fopen + format + formLayout + fprint + frameLayout + frame_search + fread + freeFormFillet + frewind + fromNativePath + fwrite + gamma + gauss + geometryConstraint + getApplicationVersionAsFloat + getAttr + getClassification + getDefaultBrush + getenv + getFileList + getFluidAttr + getInputDeviceRange + getMayaPanelTypes + getModifiers + getPanel + getParticleAttr + getpid + getPluginResource + globalStitch + glRenderEditor + glRender + gmatch + goal + gotoBindPose + grabColor + gradientControl + gradientControlNoAttr + graphDollyCtx + graphSelectContext + graphTrackCtx + gravity + grid + gridLayout + group + groupObjectsByName + hardenPointCurve + hardware + hardwareRenderPanel + headsUpDisplay + headsUpMessage + help + helpLine + hermite + HfAddAttractorToAS + HfAssignAS + HfBuildEqualMap + HfBuildFurFiles + HfBuildFurImages + HfCancelAFR + HfConnectASToHF + HfCreateAttractor + HfDeleteAS + HfEditAS + HfPerformCreateAS + HfRemoveAttractorFromAS + HfSelectAttached + HfSelectAttractors + HfUnassignAS + hide + hilite + hitTest + hotBox + hotkeyCheck + hotkey + hsv_to_rgb + hudButton + hudSliderButton + hudSlider + hwReflectionMap + hwRender + hwRenderLoad + hyperGraph + hyperPanel + hyperShade + hypot + iconTextButton + iconTextCheckBox + iconTextRadioButton + iconTextRadioCollection + iconTextScrollList + iconTextStaticLabel + ikfkDisplayMethod + ikHandleCtx + ikHandleDisplayScale + ikHandle + ikSolver + ikSplineHandleCtx + ikSystem + ikSystemInfo + illustratorCurves + image + imfPlugins + index_all + index + index_overview + index_substring + inheritTransform + insertJointCtx + insertJoint + insertKeyCtx + insertKnotCurve + insertKnotSurface + instanceable + instance + instancer + internalVar + intersect + interToUI + intFieldGrp + intField + intScrollBar + intSliderGrp + intSlider + iprEngine + isAnimCurve + isConnected + isDirty + isolateSelect + isParentOf + isSameObject + isTrue + isValidObjectName + isValidString + isValidUiName + itemFilterAttr + itemFilter + itemFilterRender + itemFilterType + jointCluster + jointCtx + jointDisplayScale + joint + jointLattice + keyframe + keyframeOutliner + keyframeRegionCurrentTimeCtx + keyframeRegionDirectKeyCtx + keyframeRegionDollyCtx + keyframeRegionInsertKeyCtx + keyframeRegionMoveKeyCtx + keyframeRegionScaleKeyCtx + keyframeRegionSelectKeyCtx + keyframeRegionSetKeyCtx + keyframeRegionTrackCtx + keyframeStats + keyTangent + lassoContext + latticeDeformKeyCtx + lattice + launch + launchImageEditor + layerButton + layeredShaderPort + layeredTexturePort + layoutDialog + layout + lightlink + lightListEditor + lightList + lightListPanel + linearPrecision + lineIntersection + linstep + listAnimatable + listAttr + listCameras + listConnections + listDeviceAttachments + listerEditor + listHistory + listInputDeviceAxes + listInputDeviceButtons + listInputDevices + listMenuAnnotation + listNodeTypes + listPanelCategories + listRelatives + listSets + listTransforms + listUnselected + loadFluid + loadNewShelf + loadPlugin + loadPluginLanguageResources + loadPrefObjects + localizedPanelLabel + lockNode + loft + log + longNameOf + lookThru + ls + lsThroughFilter + lsType + lsUI + mag + makebot + makeIdentity + makeLive + makePaintable + makeRoll + makeSingleSurface + makeTubeOn + manipMoveContext + manipMoveLimitsCtx + manipOptions + manipRotateContext + manipRotateLimitsCtx + manipScaleContext + manipScaleLimitsCtx + marker + match + max + Mayatomr + memory + menuBarLayout + menuEditor + menu + menuItem + menuItemToShelf + menuSet + menuSetPref + messageLine + min + minimizeApp + mirrorJoint + modelCurrentTimeCtx + modelEditor + modelPanel + mouse + move + moveIKtoFK + moveKeyCtx + moveVertexAlongDirection + movIn + movOut + multiProfileBirailSurface + mute + nameCommand + nameField + namespace + namespaceInfo + nav_Animation + nav_Effects + nav_General + nav_Language + nav_Modeling + nav_Rendering + nav_System + nav_Windows + newPanelItems + newton + nodeCast + nodeIconButton + nodeOutliner + nodePreset + nodeType + noise + nonLinear + normalConstraint + normalize + nParticle + nurbsBoolean + nurbsCopyUVSet + nurbsCube + nurbsEditUV + nurbsPlane + nurbsSelect + nurbsSquare + nurbsToPolygonsPref + nurbsToPoly + nurbsToSubdiv + nurbsToSubdivPref + nurbsUVSet + nurbsViewDirectionVector + objectCenter + objectLayer + objectType + objectTypeUI + objExists + obsoleteProc + oceanNurbsPreviewPlane + offsetCurve + offsetCurveOnSurface + offsetSurface + openGLExtension + openMayaPref + optionMenuGrp + optionMenu + optionVar + orbitCtx + orbit + orientConstraint + outlinerEditor + outlinerPanel + overrideModifier + paintEffectsDisplay + pairBlend + palettePort + paneLayout + panelConfiguration + panelHistory + panel + paramDimContext + paramDimension + paramLocator + parentConstraint + parent + particleExists + particle + particleInstancer + particleRenderInfo + partition + pasteKey + pathAnimation + pause + pclose + percent + performanceOptions + pfxstrokes + pickWalk + picture + pixelMove + planarSrf + plane + playbackOptions + playblast + play + plugAttr + pluginInfo + pluginResourceUtil + plugNode + pointConstraint + pointCurveConstraint + pointLight + pointMatrixMult + pointOnCurve + pointOnSurface + pointPosition + poleVectorConstraint + polyAppendFacetCtx + polyAppend + polyAppendVertex + polyAutoProjection + polyAverageNormal + polyAverageVertex + polyBevel + polyBlendColor + polyBlindData + polyBoolOp + polyBridgeEdge + polyCacheMonitor + polyCheck + polyChipOff + polyClipboard + polyCloseBorder + polyCollapseEdge + polyCollapseFacet + polyColorBlindData + polyColorDel + polyColorPerVertex + polyColorSet + polyCompare + polyCone + polyCopyUV + polyCreaseCtx + polyCrease + polyCreateFacetCtx + polyCreateFacet + polyCube + polyCutCtx + polyCut + polyCylinder + polyCylindricalProjection + polyDelEdge + polyDelFacet + polyDelVertex + polyDuplicateAndConnect + polyDuplicateEdge + polyEditUV + polyEditUVShell + polyEvaluate + polyExtrudeEdge + polyExtrudeFacet + polyExtrudeVertex + polyFlipEdge + polyFlipUV + polyForceUV + polyGeoSampler + polyHelix + polyInfo + polyInstallAction + polyLayoutUV + polyListComponentConversion + polyMapCut + polyMapDel + polyMapSew + polyMapSewMove + polyMergeEdgeCtx + polyMergeEdge + polyMergeFacetCtx + polyMergeFacet + polyMergeUV + polyMergeVertex + polyMirrorFace + polyMoveEdge + polyMoveFacet + polyMoveFacetUV + polyMoveUV + polyMoveVertex + polyNormal + polyNormalizeUV + polyNormalPerVertex + polyOptions + polyOptUvs + polyOutput + polyPipe + polyPlanarProjection + polyPlane + polyPlatonicSolid + polyPoke + polyPrimitive + polyPrism + polyProjection + polyPyramid + polyQuad + polyQueryBlindData + polyReduce + polySelectConstraint + polySelectConstraintMonitor + polySelectCtx + polySelectEditCtx + polySelect + polySeparate + polySetToFaceNormal + polySewEdge + polyShortestPathCtx + polySlideEdge + polySmooth + polySoftEdge + polySphere + polySphericalProjection + polySplitCtx + polySplitEdge + polySplit + polySplitRing + polySplitVertex + polyStraightenUVBorder + polySubdivideEdge + polySubdivideFacet + polyTorus + polyToSubdiv + polyTransfer + polyTriangulate + polyUnite + polyUVSet + polyWedgeFace + popen + popupMenu + pose + pow + preloadRefEd + print + progressBar + progressWindow + projectCurve + projectionContext + projectionManip + projectTangent + projFileViewer + promptDialog + propModCtx + propMove + psdChannelOutliner + psdEditTextureFile + psdExport + psdTextureFile + putenv + pwd + python + querySubdiv + quit + radial + radioButtonGrp + radioButton + radioCollection + radioMenuItemCollection + rad_to_deg + rampColorPort + rand + randomizeFollicles + randstate + rangeControl + readTake + rebuildCurve + rebuildSurface + recordAttr + recordDevice + redo + referenceEdit + reference + referenceQuery + refineSubdivSelectionList + refreshAE + refresh + registerPluginResource + rehash + reloadImage + removeJoint + removeMultiInstance + removePanelCategory + renameAttr + rename + renameSelectionList + renameUI + renderer + renderGlobalsNode + render + renderInfo + renderLayerButton + renderLayerParent + renderLayerPostProcess + renderLayerUnparent + renderManip + renderPartition + renderQualityNode + renderSettings + renderThumbnailUpdate + renderWindowEditor + renderWindowSelectContext + reorderDeformers + reorder + requires + reroot + resampleFluid + resetAE + resetPfxToPolyCamera + resetTool + resolutionNode + retarget + reverseCurve + reverseSurface + revolve + rgb_to_hsv + rigidBody + rigidSolver + rollCtx + roll + rootOf + rotate + rotationInterpolation + rot + roundConstantRadius + rowColumnLayout + rowLayout + runTimeCommand + runup + sampleImage + saveAllShelves + saveAttrPreset + saveFluid + saveImage + saveInitialState + saveMenu + savePrefObjects + savePrefs + saveShelf + saveToolSettings + scaleBrushBrightness + scaleComponents + scaleConstraint + scale + scaleKeyCtx + scaleKey + sceneEditor + sceneUIReplacement + scmh + scriptCtx + scriptEditorInfo + scriptedPanel + scriptedPanelType + scriptJob + scriptNode + scriptTable + scriptToShelf + scrollField + scrollLayout + sculpt + searchPathArray + seed + selectContext + selectCurveCV + selectedNodes + select + selectionConnection + selectKeyCtx + selectKeyframeRegionCtx + selectKey + selectMode + selectPref + selectPriority + selectType + selLoadSettings + separator + setAttrEnumResource + setAttr + setAttrMapping + setAttrNiceNameResource + setConstraintRestPosition + setCustomAttrEnumResource + setCustomAttrNiceNameResource + setDefaultShadingGroup + setDrivenKeyframe + setDynamic + setEditCtx + setEditor + setFluidAttr + setFocus + setInfinity + setInputDeviceMapping + setKeyCtx + setKeyframeBlendshapeTargetWts + setKeyframe + setKeyPath + setMenuMode + setNodeNiceNameResource + setNodeTypeFlag + setParent + setParticleAttr + setPfxToPolyCamera + setPluginResource + setProject + sets + setStampDensity + setStartupMessage + setState + setToolTo + setUITemplate + setXformManip + shadingConnection + shadingGeometryRelCtx + shadingLightRelCtx + shadingNetworkCompare + shadingNode + shapeCompare + shelfButton + shelfLayout + shelfTabLayout + shellField + shortNameOf + showHelp + showHidden + show + showManipCtx + showSelectionInTitle + showShadingGroupAttrEditor + showWindow + sign + simplify + singleProfileBirailSurface + sin + sizeBytes + size + skinCluster + skinPercent + smoothCurve + smoothstep + smoothTangentSurface + snap2to2 + snapKey + snapMode + snapshot + snapTogetherCtx + soft + softModCtx + softMod + sort + soundControl + sound + source + spaceLocator + sphere + sphrand + spotLight + spotLightPreviewPort + spreadSheetEditor + spring + sqrt + squareSurface + srtContext + stackTrace + startString + startsWith + stitchAndExplodeShell + stitchSurface + stitchSurfacePoints + strcmp + stringArrayCatenate + stringArrayContains + stringArrayCount + stringArrayInsertAtIndex + stringArrayIntersector + stringArrayRemoveAtIndex + stringArrayRemoveDuplicates + stringArrayRemoveExact + stringArrayRemove + stringArrayToString + stringToStringArray + strip + stripPrefixFromName + stroke + subdAutoProjection + subdCleanTopology + subdCollapse + subdDuplicateAndConnect + subdEditUV + subdivCrease + subdivDisplaySmoothness + subdiv + subdListComponentConversion + subdMapCut + subdMapSewMove + subdMatchTopology + subdMirror + subdToBlind + subdToPoly + subdTransferUVsToCache + substituteAllString + substituteGeometry + substitute + substring + surface + surfaceSampler + surfaceShaderList + swatchDisplayPort + switchTable + SymbolsButton + SymbolsCheckBox + symmetricModelling + sysFile + system + tabLayout + tangentConstraint + tan + texLatticeDeformContext + texManipContext + texMoveContext + texMoveUVShellContext + texRotateContext + texScaleContext + texSelectContext + texSelectShortestPathCtx + texSmudgeUVContext + textCurves + textFieldButtonGrp + textFieldGrp + textField + text + textManip + textScrollList + textToShelf + textureDisplacePlane + textureHairColor + texturePlacementContext + textureWindow + texWinToolCtx + threadCount + threePointArcCtx + timeControl + timePort + timerX + toggleAxis + toggle + toggleWindowVisibility + tokenize + tokenizeList + tolerance + tolower + toNativePath + toolButton + toolCollection + toolDropped + toolHasOptions + toolPropertyWindow + torus + toupper + trace + trackCtx + track + transferAttributes + transformCompare + transformLimits + translator + trim + truncateFluidCache + truncateHairCache + trunc + tumbleCtx + tumble + turbulence + twoPointArcCtx + uiRes + uiTemplate + unassignInputDevice + undo + undoInfo + ungroup + uniform + unit + unloadPlugin + untangleUV + untitledFileName + untrim + upAxis + updateAE + userCtx + uvLink + uvSnapshot + validateShelfName + vectorize + view2dToolCtx + viewCamera + viewClipPlane + viewFit + viewHeadOn + viewLookAt + viewManip + viewPlace + viewSet + visor + volumeAxis + vortex + waitCursor + warning + webBrowser + webBrowserPrefs + whatIs + window + windowPref + wireContext + wire + workspace + wrinkleContext + wrinkle + writeTake + xbmLangPathList + xform + xpmPicker + + + int + string + float + vector + matrix + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/mergetagtext.xml b/src/data/extra/syntax-highlighting/syntax/mergetagtext.xml new file mode 100644 index 00000000..efcc1f77 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/mergetagtext.xml @@ -0,0 +1,145 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/meson.xml b/src/data/extra/syntax-highlighting/syntax/meson.xml new file mode 100644 index 00000000..4ecf547f --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/meson.xml @@ -0,0 +1,117 @@ + + + + + + + if + else + endif + foreach + endforeach + + + add_global_arguments + build_target + configuration_data + configure_file + custom_target + declare_dependency + dependency + error + executable + find_program + find_library + files + generator + get_option + gettext + import + include_directories + install_data + install_headers + install_man + install_subdir + is_subproject + jar + message + pkgconfig_gen + project + run_command + run_target + set_variable + shared_library + static_library + subdir + subproject + test + vcs_tag + + + and + or + not + + + true + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/data/extra/syntax-highlighting/syntax/metafont.xml b/src/data/extra/syntax-highlighting/syntax/metafont.xml new file mode 100644 index 00000000..88166ef8 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/metafont.xml @@ -0,0 +1,986 @@ + + + + + + + + + + + true + + false + known + unknown + odd + charexists + not + + and + or + + + + + normaldeviate + length + + ASCII + oct + hex + angle + turningnumber + totalweight + + directiontime + xpart + ypart + xxpart + xypart + yxpart + + yypart + sqrt + sind + cosd + mlog + mexp + + floor + uniformdeviate + abs + div + dotprod + max + + min + mod + ceiling + + + + + tracingtitles + + tracingequations + tracingcapsules + tracingchoices + tracingspecs + tracingpens + tracingcommands + + tracingrestores + tracingmacros + tracingedges + tracingoutput + tracingonline + tracingstats + + pausing + showstopping + fontmaking + proofing + turningcheck + warningcheck + + smoothing + autorounding + granularity + fillin + year + month + + day + time + charcode + charext + charwd + charht + + chardp + charic + chardx + chardy + designsize + hppp + + vppp + xoffset + yoffset + boundarychar + + + + + + point + of + precontrol + postcontrol + penoffset + + rotated + scaled + shifted + slanted + transformed + xscaled + + yscaled + zscaled + + + + + makepath + reverse + + subpath + curl + tension + atleast + controls + cycle + + + + + + nullpen + pencircle + makepen + + + + + nullpicture + + + + + jobname + + readstring + str + char + decimal + substring + + + + + end + dump + save + interim + + newinternal + randomseed + let + delimiters + outer + everyjob + + show + showvariable + showtoken + showdependencies + showstats + message + + errmessage + errhelp + batchmode + nonstopmode + scrollmode + errorstopmode + + addto + also + contour + doublepath + withpen + withweight + + cull + keeping + dropping + display + inwindow + openwindow + + at + from + to + shipout + special + numspecial + + + + + + boolean + numeric + pair + path + + pen + picture + string + transform + + + + + + + + + + + + + + + expr + suffix + + text + primary + secondary + tertiary + + primarydef + secondarydef + + tertiarydef + + + + + + + else + elseif + + + + + + step + until + upto + exitif + + + + + charlist + endinput + expandafter + extensible + + fontdimen + headerbyte + inner + input + intersectiontimes + kern + + ligtable + quote + scantokens + skipto + + + + + + + addto_currentpicture + aspect_ratio + base_name + base_version + + blacker + + blankpicture + bot + bye + byte + capsule_def + + change_width + + clear_pen_memory + clearit + clearpen + clearxy + counterclockwise + culldraw + + cullit + currentpen + currentpen_path + currentpicture + currenttransform + currentwindow + + cutdraw + cutoff + d + decr + define_blacker_pixels + define_corrected_pixels + + define_good_x_pixels + define_good_y_pixels + define_horizontal_corrected_pixels + define_pixels + define_whole_blacker_pixels + define_whole_pixels + + define_whole_vertical_blacker_pixels + define_whole_vertical_pixels + dir + direction + directionpoint + displaying + + ditto + + + down + downto + draw + drawdot + + + eps + epsilon + + + extra_setup + erase + exitunless + + fill + filldraw + fix_units + flex + font_coding_scheme + font_extra_space + + font_identifier + font_normal_shrink + font_normal_space + font_normal_stretch + font_quad + font_setup + + font_size + font_slant + font_x_height + fullcircle + generate + gfcorners + + gobble + gobbled + grayfont + h + halfcircle + hide + + hround + identity + image_rules + incr + infinity + interact + + interpath + intersectionpoint + inverse + italcorr + join_radius + killtext + + labelfont + labels + left + lft + localfont + loggingall + + lowres + lowres_fix + mag + magstep + makebox + makegrid + + makelabel + maketicks + + + + mode + mode_def + mode_name + + mode_setup + nodisplays + notransforms + number_of_modes + numtok + o_correction + + openit + origin + pen_bot + pen_lft + pen_rt + pen_top + + penlabels + penpos + penrazor + penspeck + pensquare + penstroke + + pickup + pixels_per_inch + proof + proofoffset + proofrule + proofrulethickness + + quartercircle + range + reflectedabout + relax + right + rotatedabout + + rotatedaround + round + rt + rulepen + savepen + screenchars + + screen_rows + screen_cols + screenrule + screenstrokes + shipit + showit + + slantfont + smode + smoke + softjoin + solve + stop + + superellipse + takepower + tensepath + titlefont + tolerance + top + + tracingall + tracingnone + undraw + undrawdot + unfill + unfilldraw + + unitpixel + unitsquare + unitvector + up + upto + vround + + w + whatever + + + + + + + bluepart + + clip + color + dashed + fontsize + greenpart + infont + + linecap + linejoin + llcorner + lrcorner + miterlimit + mpxbreak + + prologues + redpart + setbounds + tracinglostchars + truecorners + ulcorner + + urcorner + withcolor + + + + + ahangle + ahlength + background + bbox + + bboxmargin + + beveled + black + blue + buildcycle + butt + + center + cutafter + cutbefore + cuttings + dashpattern + defaultfont + + defaultpen + defaultscale + dotlabel + dotlabels + drawarrow + drawdblarrow + + drawoptions + + evenly + + + green + label + labeloffset + + mitered + red + rounded + squared + thelabel + white + + base_name + base_version + upto + downto + exitunless + relax + + gobble + gobbled + interact + loggingall + tracingall + tracingnone + + eps + epsilon + infinity + right + left + up + + down + origin + quartercircle + halfcircle + fullcircle + unitsquare + + identity + blankpicture + withdots + ditto + EOF + pensquare + + penrazor + penspeck + whatever + + round + + byte + + dir + unitvector + inverse + counterclockwise + tensepath + + + + + takepower + direction + directionpoint + intersectionpoint + softjoin + incr + + decr + reflectedabout + rotatedaround + rotatedabout + + + flex + + superellipse + interpath + magstep + currentpen + currentpen_path + currentpicture + + fill + draw + filldraw + drawdot + unfill + undraw + + unfilldraw + undrawdot + erase + cutdraw + image + pickup + + numeric_pickup + pen_lft + pen_rt + pen_top + pen_bot + savepen + + clearpen + clear_pen_memory + lft + rt + top + bot + + ulft + urt + llft + lrt + penpos + penstroke + + arrowhead + makelabel + labels + penlabel + range + numtok + + thru + clearxy + clearit + clearpen + pickup + shipit + + bye + hide + stop + solve + + blacker + capsule_def + + change_width + define_blacker_pixels + define_corrected_pixels + define_good_x_pixels + define_good_y_pixels + define_horizontal_corrected_pixels + + define_pixels + define_whole_blacker_pixels + define_whole_vertical_blacker_pixels + define_whole_vertical_pixels + + + + extra_setup + + font_coding_scheme + font_extra_space + font_identifier + font_normal_shrink + font_normal_space + font_normal_stretch + + font_quad + font_size + font_slant + font_x_height + italcorr + labelfont + + makebox + makegrid + maketicks + mode_def + mode_setup + o_correction + + proofrule + proofrulethickness + rulepen + smode + cullit + currenttransform + + gfcorners + grayfont + hround + imagerules + lowres_fix + nodisplays + + notransforms + openit + proofoffset + screenchars + screenrule + screenstrokes + + showit + slantfont + titlefont + unitpixel + vround + circmargin + + defaultdx + defaultdy + boxit + boxjoin + bpath + circleit + + drawboxed + drawboxes + drawunboxed + fixpos + fixsize + pic + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/metamath.xml b/src/data/extra/syntax-highlighting/syntax/metamath.xml new file mode 100644 index 00000000..232603a6 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/metamath.xml @@ -0,0 +1,122 @@ + + + +]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/mib.xml b/src/data/extra/syntax-highlighting/syntax/mib.xml new file mode 100644 index 00000000..04552062 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/mib.xml @@ -0,0 +1,182 @@ + + + + + + + ABSENT + ACCESS + AGENT-CAPABILITIES + ANY + APPLICATION + AUGMENTS + BEGIN + BIT + BITS + BOOLEAN + BY + CHOICE + COMPONENT + COMPONENTS + CONTACT-INFO + CREATION-REQUIRES + DEFAULT + DEFINED + DEFINITIONS + DEFVAL + DESCRIPTION + DISPLAY-HINT + END + ENUMERATED + ENTERPRISE + EXPLICIT + EXPORTS + EXTERNAL + FALSE + FROM + GROUP + IMPLICIT + IMPLIED + IMPORTS + INCLUDES + INDEX + LAST-UPDATED + MANDATORY-GROUPS + MAX + MAX-ACCESS + MIN + MIN-ACCESS + MINUS-INFINITY + MODULE + MODULE-COMPLIANCE + MODULE-IDENTITY + NOTIFICATION-GROUP + NOTIFICATION-TYPE + NOTIFICATIONS + NULL + OBJECT-GROUP + OBJECT-IDENTITY + OBJECT-TYPE + OBJECTS + OF + OPTIONAL + ORGANIZATION + PLUS-INFINITY + PRESENT + PRIVATE + PRODUCT-RELEASE + REAL + REFERENCE + REVISION + SEQUENCE + SET + SIZE + STATUS + SUPPORTS + SYNTAX + TAGS + TEXTUAL-CONVENTION + TRAP-TYPE + TRUE + UNITS + UNIVERSAL + VARIABLES + VARIATION + WITH + WRITE-SYNTAX + + + INTEGER + OCTET + STRING + OBJECT + IDENTIFIER + Integer32 + IpAddress + Counter32 + Gauge32 + Unsigned32 + TimeTicks + Opaque + Counter64 + + + obsolete + deprecated + current + + + not-accessible + accessible-for-notify + read-only + read-write + read-create + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/mips.xml b/src/data/extra/syntax-highlighting/syntax/mips.xml new file mode 100644 index 00000000..6802706c --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/mips.xml @@ -0,0 +1,359 @@ + + + + + + .align + .ascii + .asciiz + .byte + .double + .extern + .float + .globl + .half + .sdata + .set + .space + .word + + + .data + .kdata + .ktext + .text + + + abs.d + abs.s + add + add.d + add.s + addi + addiu + addu + and + andi + bc0f + bc0t + bc1f + bc1t + bc2f + bc2t + bc3f + bc3t + beq + bgez + bgezal + bgtz + blez + bltz + bltzal + bne + break + c.eq.d + c.eq.s + c.seq.s + c.seq.d + c.ueq.s + c.ueq.d + c.olt.d + c.olt.s + c.ole.d + c.ole.s + c.ult.d + c.ult.s + c.ule.d + c.ule.s + c.le.d + c.le.s + c.lt.d + c.lt.s + c.un.s + c.un.d + cvt.d.s + cvt.d.w + cvt.s.d + cvt.s.w + cvt.w.d + cvt.w.s + div.d + div.s + j + jal + jalr + jr + lb + lbu + lh + lhu + lui + lw + lwc0 + lwc1 + lwc2 + lwc3 + lwl + lwr + mfc0 + mfc1 + mfc2 + mfc3 + mfhi + mflo + mtc0 + mtc1 + mtc2 + mtc3 + mthi + mtlo + mul.d + mul.s + mult + multu + nor + or + ori + rfe + sb + sh + sw + swcl + swl + swr + sll + sllv + slt + slti + sltiu + sra + srav + srl + srlv + sub + sub.d + sub.s + subu + sw + swc0 + swc1 + swc2 + swc3 + swl + swr + syscall + xor + xori + + + abs + b + beqz + bge + bgeu + bgt + bgtu + ble + bleu + blt + bltu + bnez + div + divu + l.d + l.s + la + ld + li + li.d + li.s + mfc0.d + mfc1.d + mfc2.d + mfc3.d + mov.d + mov.s + move + mul + mulo + mulou + neg + neg.d + neg.s + negu + nop + not + rem + remu + rol + ror + s.d + s.s + sd + seq + sge + sgeu + sgt + sgtu + sle + sleu + sne + ulh + ulhu + ulw + ush + usw + + + $0 + $1 + $2 + $3 + $4 + $5 + $6 + $7 + $8 + $9 + $10 + $11 + $12 + $13 + $14 + $15 + $16 + $17 + $18 + $19 + $20 + $21 + $22 + $23 + $24 + $25 + $26 + $27 + $28 + $29 + $30 + $31 + $zero + $t0 + $t1 + $t2 + $t3 + $t4 + $t5 + $t6 + $t7 + $t8 + $t9 + + + $v0 + $v1 + $a0 + $a1 + $a2 + $a3 + $k0 + $k1 + $at + $gp + $sp + $fp + $s0 + $s1 + $s2 + $s3 + $s4 + $s5 + $s6 + $s7 + $ra + + + $f0 + $f1 + $f2 + $f3 + $f4 + $f5 + $f6 + $f7 + $f8 + $f9 + $f10 + $f11 + $f12 + $f13 + $f14 + $f15 + $f16 + $f17 + $f18 + $f19 + $f20 + $f21 + $f22 + $f23 + $f24 + $f25 + $f26 + $f27 + $f28 + $f29 + $f30 + $f31 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/modelica.xml b/src/data/extra/syntax-highlighting/syntax/modelica.xml new file mode 100644 index 00000000..76cf2811 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/modelica.xml @@ -0,0 +1,260 @@ + + + + + + + + + + + block + class + connector + function + model + package + record + + + + + type + + + + + Boolean + enumeration + ExternalObject + Integer + Real + StateSelect + String + + + + + display + fixed + max + min + nominal + quantity + start + stateSelect + unit + value + + + + + algorithm + and + annotation + assert + break + connect + constant + constrainedby + discrete + else + elseif + elsewhen + encapsulated + end + equation + expandable + extends + external + false + final + flow + for + if + import + in + inner + input + loop + not + or + outer + output + parameter + partial + protected + public + redeclare + replaceable + return + then + true + when + while + within + + + + + + time + + abs + ceil + div + floor + integer + mod + rem + sign + sqrt + + sin + cos + tan + asin + acos + atan + atan2 + sinh + cosh + tanh + exp + log + log10 + + analysisType + cardinality + change + delay + der + direction + edge + initial + isPresent + noEvent + pre + reinit + sample + semiLinear + smooth + terminal + terminate + + ndims + size + scalar + vector + matrix + array + zeros + ones + fill + identity + diagonal + linspace + min + max + sum + product + transpose + outerProduct + symmetric + cross + skew + cat + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/modelines.xml b/src/data/extra/syntax-highlighting/syntax/modelines.xml new file mode 100644 index 00000000..0f3c882b --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/modelines.xml @@ -0,0 +1,197 @@ + + + +]> + + + diff --git a/src/data/extra/syntax-highlighting/syntax/modula-2-iso-only.xml b/src/data/extra/syntax-highlighting/syntax/modula-2-iso-only.xml new file mode 100644 index 00000000..9da7ae31 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/modula-2-iso-only.xml @@ -0,0 +1,342 @@ + + + + + + + + + ??? + + + + + AND + ARRAY + BEGIN + BY + CASE + CONST + DEFINITION + DIV + DO + ELSE + ELSIF + END + EXIT + EXCEPT + EXPORT + FINALLY + FOR + FORWARD + FROM + IF + IMPLEMENTATION + IMPORT + IN + LOOP + MOD + MODULE + NOT + OF + OR + PACKEDSET + POINTER + PROCEDURE + QUALIFIED + RECORD + REM + REPEAT + RETRY + RETURN + SET + THEN + TO + TYPE + UNTIL + VAR + WHILE + WITH + + + + + FALSE + INTERRUPTIBLE + NIL + TRUE + UNINTERRUPTIBLE + + + + + + BOOLEAN + BITSET + CARDINAL + COMPLEX + CHAR + INTEGER + LONGCOMPLEX + LONGREAL + PROC + PROTECTION + REAL + + + + + + ABS + CAP + CHR + CMPLX + DEC + EXCL + FLOAT + HALT + HIGH + IM + INC + INCL + INT + LENGTH + LFLOAT + MAX + MIN + ODD + ORD + RE + SIZE + TRUNC + VAL + + + + + + NEW + ALLOCATE + + + DISPOSE + DEALLOCATE + + + + + + SYSTEM + + + BITSPERLOC + BITSPERWORD + + + ADDRESS + LOC + WORD + + + ADDADR + ADR + CAST + DIFADR + MAKEADR + ROTATE + SHIFT + SUBADR + TSIZE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/modula-2-pim-only.xml b/src/data/extra/syntax-highlighting/syntax/modula-2-pim-only.xml new file mode 100644 index 00000000..9906339d --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/modula-2-pim-only.xml @@ -0,0 +1,308 @@ + + + + + + + + + ??? + + + + + AND + ARRAY + BEGIN + BY + CASE + CONST + DEFINITION + DIV + DO + ELSE + ELSIF + END + EXIT + EXPORT + FOR + FROM + IF + IMPLEMENTATION + IMPORT + IN + LOOP + MOD + MODULE + NOT + OF + OR + POINTER + PROCEDURE + QUALIFIED + RECORD + REPEAT + RETURN + SET + THEN + TO + TYPE + UNTIL + VAR + WHILE + WITH + + + + + FALSE + NIL + TRUE + + + + + + BOOLEAN + BITSET + CARDINAL + CHAR + INTEGER + LONGINT + LONGREAL + PROC + REAL + + + + + + ABS + CAP + CHR + DEC + EXCL + FLOAT + HALT + HIGH + INC + INCL + MAX + MIN + ODD + ORD + SIZE + TRUNC + VAL + + + + + + NEW + ALLOCATE + + + DISPOSE + DEALLOCATE + + + + + + SYSTEM + + + ADDRESS + PROCESS + WORD + + + ADR + NEWPROCESS + TRANSFER + TSIZE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/modula-2-r10-only.xml b/src/data/extra/syntax-highlighting/syntax/modula-2-r10-only.xml new file mode 100644 index 00000000..de4fd1b1 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/modula-2-r10-only.xml @@ -0,0 +1,347 @@ + + + + + + + + + ??? + + + + + ALIAS + AND + ARGLIST + ARRAY + BEGIN + BLUEPRINT + BY + CASE + CONST + COPY + DEFINITION + DIV + DO + ELSE + ELSIF + END + EXIT + FOR + FROM + GENLIB + IF + IMPLEMENTATION + IMPORT + IN + LOOP + MOD + MODULE + NEW + NOT + OF + OPAQUE + OR + POINTER + PROCEDURE + READ + RECORD + REFERENTIAL + RELEASE + REPEAT + RETAIN + RETURN + SET + THEN + TO + TYPE + UNTIL + VAR + WHILE + WRITE + YIELD + + + + + FALSE + NIL + TRUE + + + + + + BOOLEAN + CARDINAL + CHAR + INTEGER + LONGCARD + LONGINT + LONGREAL + OCTET + REAL + UNICHAR + + + + + + ABS + APPEND + CAPACITY + CHR + COUNT + ENTIER + INSERT + LENGTH + LOG2 + MAX + MIN + ODD + ORD + POW2 + PRED + PTR + REMOVE + SGN + SUCC + + + + + TLIMIT + TMAX + TMIN + TSIZE + + + + + + CAST + + + UNSAFE + + + BitsPerAddress + BitsPerByte + BytesPerWord + BytesPerLongWord + + + ADDRESS + BYTE + LONGWORD + OCTETSEQ + WORD + + + ADD + ADR + BIT + BWAND + BWNOT + BWOR + HALT + SETBIT + SHL + SHR + SUB + + + NOP + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/modula-2.xml b/src/data/extra/syntax-highlighting/syntax/modula-2.xml new file mode 100644 index 00000000..da3676b5 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/modula-2.xml @@ -0,0 +1,1191 @@ + + + + + + + + + ??? + + + + + + AND + ARRAY + BEGIN + BY + CASE + CONST + DEFINITION + DIV + DO + ELSE + ELSIF + END + EXIT + FOR + FROM + IF + IMPLEMENTATION + IMPORT + IN + LOOP + MOD + MODULE + NOT + OF + OR + POINTER + PROCEDURE + RECORD + REPEAT + RETURN + SET + THEN + TO + TYPE + UNTIL + VAR + WHILE + + + + + FALSE + NIL + TRUE + + + + + BOOLEAN + CARDINAL + CHAR + INTEGER + LONGREAL + REAL + + + + + ABS + CHR + MAX + MIN + ODD + ORD + + + + + + ADDRESS + WORD + + ADR + + + + + + + + + InOut + MathLib0 + + + + + + + EXCEPT + FINALLY + PACKEDSET + REM + RETRY + + + + + INTERRUPTIBLE + UNINTERRUPTIBLE + + + + + + PROTECTION + + + + + CMPLX + IM + LFLOAT + RE + + + + + + BITSPERLOC + BITSPERWORD + + LOC + + ADDADR + DIFADR + MAKEADR + ROTATE + SHIFT + SUBADR + + + + + IOConsts + IOLink + IOResult + LongIO + WholeIO + RawIO + SIOResult + SLongIO + SWholeIO + SRealIO + SRawIO + ConvTypes + RealStr + WholeStr + WholeConv + + + + + + ALIAS + ARGLIST + BLUEPRINT + COPY + GENLIB + OPAQUE + READ + REFERENTIAL + RELEASE + RETAIN + WRITE + YIELD + + + + + + OCTET + UNICHAR + + + + + APPEND + CAPACITY + COUNT + INSERT + LOG2 + POW2 + PRED + PTR + REMOVE + SGN + SUCC + + + + + TLIMIT + TMAX + TMIN + + + + + + UNSAFE + + LONGWORD + OCTETSEQ + + BIT + BWAND + BWNOT + BWOR + SETBIT + SHL + SHR + + + + + PervasiveIO + UnsafeIO + + + + + + AND + ARRAY + BEGIN + BY + CASE + CONST + DEFINITION + DIV + DO + ELSE + ELSIF + END + EXIT + EXPORT + FOR + FROM + IF + IMPLEMENTATION + IMPORT + IN + LOOP + MOD + MODULE + NOT + OF + OR + POINTER + PROCEDURE + QUALIFIED + RECORD + REPEAT + RETURN + SET + THEN + TO + TYPE + UNTIL + VAR + WHILE + WITH + + + + + FALSE + NIL + TRUE + + + + + BOOLEAN + BITSET + CARDINAL + CHAR + INTEGER + LONGINT + LONGREAL + PROC + REAL + + + + + ABS + CAP + CHR + DEC + EXCL + FLOAT + HALT + HIGH + INC + INCL + MAX + MIN + ODD + ORD + SIZE + TRUNC + VAL + + + + + NEW + + ALLOCATE + DISPOSE + + DEALLOCATE + + + + + + SYSTEM + + ADDRESS + PROCESS + WORD + + ADR + NEWPROCESS + TRANSFER + TSIZE + + + + + + AND + ARRAY + BEGIN + BY + CASE + CONST + DEFINITION + DIV + DO + ELSE + ELSIF + END + EXIT + EXCEPT + EXPORT + FINALLY + FOR + FORWARD + FROM + IF + IMPLEMENTATION + IMPORT + IN + LOOP + MOD + MODULE + NOT + OF + OR + PACKEDSET + POINTER + PROCEDURE + QUALIFIED + RECORD + REM + REPEAT + RETRY + RETURN + SET + THEN + TO + TYPE + UNTIL + VAR + WHILE + WITH + + + + + FALSE + INTERRUPTIBLE + NIL + TRUE + UNINTERRUPTIBLE + + + + + BOOLEAN + BITSET + CARDINAL + COMPLEX + CHAR + INTEGER + LONGCOMPLEX + LONGREAL + PROC + PROTECTION + REAL + + + + + ABS + CAP + CHR + CMPLX + DEC + EXCL + FLOAT + HALT + HIGH + IM + INC + INCL + INT + LENGTH + LFLOAT + MAX + MIN + ODD + ORD + RE + SIZE + TRUNC + VAL + + + + + NEW + + ALLOCATE + DISPOSE + + DEALLOCATE + + + + + + SYSTEM + + BITSPERLOC + BITSPERWORD + + ADDRESS + LOC + WORD + + ADDADR + ADR + CAST + DIFADR + MAKEADR + ROTATE + SHIFT + SUBADR + TSIZE + + + + + + ALIAS + AND + ARGLIST + ARRAY + BEGIN + BLUEPRINT + BY + CASE + CONST + COPY + DEFINITION + DIV + DO + ELSE + ELSIF + END + EXIT + FOR + FROM + GENLIB + IF + IMPLEMENTATION + IMPORT + IN + LOOP + MOD + MODULE + NEW + NOT + OF + OPAQUE + OR + POINTER + PROCEDURE + READ + RECORD + REFERENTIAL + RELEASE + REPEAT + RETAIN + RETURN + SET + THEN + TO + TYPE + UNTIL + VAR + WHILE + WRITE + YIELD + + + + + FALSE + NIL + TRUE + + + + + BOOLEAN + CARDINAL + CHAR + INTEGER + LONGCARD + LONGINT + LONGREAL + OCTET + REAL + UNICHAR + + + + + ABS + APPEND + CAPACITY + CHR + COUNT + ENTIER + INSERT + LENGTH + LOG2 + MAX + MIN + ODD + ORD + POW2 + PRED + PTR + REMOVE + SGN + SUCC + + + + + TLIMIT + TMAX + TMIN + TSIZE + + + + + + CAST + + UNSAFE + + BitsPerAddress + BitsPerByte + BytesPerWord + BytesPerLongWord + + ADDRESS + BYTE + LONGWORD + OCTETSEQ + WORD + + ADD + ADR + BIT + BWAND + BWNOT + BWOR + HALT + SETBIT + SHL + SHR + SUB + + NOP + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/monobasic.xml b/src/data/extra/syntax-highlighting/syntax/monobasic.xml new file mode 100644 index 00000000..558dded9 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/monobasic.xml @@ -0,0 +1,216 @@ + + + + + + + + + Option + Explicit + Strict + Imports + Inherits + As + New + Dim + Redim + Private + Friend + Public + Const + ReadOnly + WriteOnly + Default + Shared + Shadows + Protected + Overloads + Overrides + NotOverridable + NotInheritable + MustInherit + MustOverride + MyBase + MyClass + Me + Delegate + Catch + Finaly + When + Throw + To + Step + Then + Else + True + False + Nothing + Call + ByVal + ByRef + Optional + ParamArray + Return + Declare + WithEvents + Event + RaiseEvent + AddHandler + And + Or + Not + Xor + AndAlso + OrElse + Goto + On + Error + Resume + + + + Boolean + Char + String + Integer + Long + Double + Object + Exception + Date + DateTime + Int16 + Int32 + Int64 + ParamArray + TimeSpan + Byte + Decimal + IntPtr + Single + Guid + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/mup.xml b/src/data/extra/syntax-highlighting/syntax/mup.xml new file mode 100644 index 00000000..a33fb495 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/mup.xml @@ -0,0 +1,865 @@ + + + + + + + + score + music + header + header2 + footer + footer2 + top + top2 + bottom + bottom2 + staff + voice + grids + music + headshapes + block + + + + + aboveorder + addtranspose + barstyle + beamslope + beamstyle + beloworder + betweenorder + bottommargin + brace + bracket + cancelkey + chorddist + clef + crescdist + defoct + dist + division + dyndist + endingstyle + firstpage + font + fontfamily + gridfret + gridsatend + gridscale + gridswhereused + key + label + label2 + leftmargin + lyricsalign + lyricsfont + lyricsfontfamily + lyricssize + measnum + measnumfont + measnumfontfamily + measnumsize + noteheads + numbermrpt + ontheline + packexp + packfact + pad + pageheight + pagewidth + panelsperpage + pedstyle + printmultnum + rehstyle + release + restcombine + restsymmult + rightmargin + scale + scorepad + scoresep + size + stafflines + staffpad + staffs + staffscale + staffsep + stemlen + swingunit + sylposition + tabwhitebox + time + timeunit + topmargin + transpose + units + visible + vscheme + warn + + + + + y + n + 2f + 2o + 3f + 3o + mussym + octave + dyn + othertext + chord + lyrics + ending + reh + up + down + major + minor + perfect + augmented + diminished + maj + min + per + aug + dim + pedal + 8treble + treble8 + treble + frenchviolin + soprano + mezzosoprano + alto + tenor + baritone + bass + cut + common + line + alt + pedstar + top + barred + grouped + times + boxed + circled + plain + 1n + 5n + 1drum + 5drum + drum + tab + inches + cm + whereused + + + + + define + ifdef + ifndef + + + + + @ + endif + + + + + else + include + undef + + + + + exclamdown + questiondown + sterling + yen + cent + quotedblbase + quotedblleft + `` + quotedblright + '' + guillemotleft + << + guillemotright + >> + guildsinglleft + guilsinglright + dagger + daggerdbl + grave + acute + macron + breve + dotaccent + dieresis + ring + cedilla + hungarumlaut + ogonek + caron + emdash + AE + ae + ordfeminine + ordmasculine + Lslash + L/ + lslash + l/ + Oslash + O/ + oslash + o/ + OE + oe + dotlessi + germandbls + ss + Aacute + A' + aacute + a' + Acircumflex + A^ + acircumflex + a^ + Adieresis + A: + adieresis + a: + Agrave + A` + agrave + a` + Aring + Ao + aring + ao + Atilde + A~ + atilde + a~ + Ccedilla + C, + ccedilla + c, + Eacute + E' + eacute + e' + Ecircumflex + E^ + ecircumflex + e^ + Edieresis + E: + edieresis + e: + Egrave + E` + egrave + e` + Iacute + I' + iacute + i' + Icircumflex + I^ + icircumflex + i^ + Idieresis + i: + idieresis + i: + Igrave + I` + igrave + i` + Ntilde + N~ + ntilde + n~ + Oacute + O' + oacute + o' + Ocircumflex + O^ + ocircumflex + o^ + Odieresis + O: + odieresis + o: + Ograve + O` + ograve + o` + Otilde + O~ + otilde + o~ + Scaron + Sv + scaron + sv + Uacute + U' + uacute + u' + Ucircumflex + U^ + ucircumflex + u^ + Udieresis + U: + udieresis + u: + Ugrave + U` + ugrave + u` + Ydieresis + Y: + ydieresis + y: + Zcaron + Zv + zcaron + zv + bullet + space + + + + + gclef + fclef + cclef + com + cut + flat + dblflat + sharp + dblsharp + nat + 4n + 2n + 1n + dblwhole + xnote + diamond + filldiamond + dwhdiamond + dn2n + dn4n + dn8n + dn16n + dn32n + dn64n + dn128n + dn256n + up2n + up4n + up8n + up16n + up32n + up64n + up128n + up256n + upflag + dnflag + qwhrest + dwhrest + 1rest + 2rest + 4rest + 8rest + 16rest + 32rest + 64rest + 128rest + 256rest + begped + endped + pedal + tr + mor + invmor + turn + invturn + ferm + uferm + acc_gt + acc_hat + acc_uhat + leg + dot + wedge + uwedge + sign + coda + upbow + dnbow + rr + measrpt + copyright + dim + halfdim + triangle + + smgclef + smfclef + smcclef + smcom + smcut + smflat + smdblflat + smsharp + smdblsharp + smnat + sm4n + sm2n + sm1n + smdblwhole + smxnote + smdiamond + smfilldiamond + smdwhdiamond + smdn2n + smdn4n + smdn8n + smdn16n + smdn32n + smdn64n + smdn128n + smdn256n + smup2n + smup4n + smup8n + smup16n + smup32n + smup64n + smup128n + smup256n + smupflag + smdnflag + smqwhrest + smdwhrest + sm1rest + sm2rest + sm4rest + sm8rest + sm16rest + sm32rest + sm64rest + sm128rest + sm256rest + smbegped + smendped + smpedal + smtr + smmor + sminvmor + smturn + sminvturn + smferm + smuferm + smacc_gt + smacc_hat + smacc_uhat + smleg + smdot + smwedge + smuwedge + smsign + smcoda + smupbow + smdnbow + smrr + smmeasrpt + smcopyright + smdim + smhalfdim + smtriangle + + + + + print + left + right + center + title + paragraph + postscript + + + + + avantgarde + bookman + courier + helvetica + newcentury + palatino + times + + + + + rom + bold + ital + boldital + + + + + chord + analysis + figbass + dyn + + + + + dotted + dashed + wavy + wide + medium + + line + curve + to + bulge + + octave + mussym + phrase + pedal + roll + to + + down + up + with + + midi + + + + + above + below + between + all + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/mustache.xml b/src/data/extra/syntax-highlighting/syntax/mustache.xml new file mode 100644 index 00000000..c83b3507 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/mustache.xml @@ -0,0 +1,470 @@ + + + + + + + +]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/nagios.xml b/src/data/extra/syntax-highlighting/syntax/nagios.xml new file mode 100644 index 00000000..20b81eab --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/nagios.xml @@ -0,0 +1,83 @@ + + + + + + host + hostgroup + service + servicegroup + contact + contactgroup + timeperiod + command + servicedependency + serviceescalation + hostdependency + hostescalation + hostextinfo + serviceextinfo + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/nasm.xml b/src/data/extra/syntax-highlighting/syntax/nasm.xml new file mode 100644 index 00000000..ba50d500 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/nasm.xml @@ -0,0 +1,893 @@ + + + + + + + + eax + ax + ah + al + ebx + bx + bh + bl + ecx + cx + ch + cl + edx + dx + dh + dl + ebp + bp + esi + si + edi + di + + esp + sp + + cs + ds + es + fs + gs + ss + + cr0 + + cr2 + cr3 + cr4 + + dr0 + dr1 + dr2 + dr3 + dr6 + dr7 + + st + + mm0 + mm1 + mm2 + mm3 + mm4 + mm5 + mm6 + mm7 + + xmm0 + xmm1 + xmm2 + xmm3 + xmm4 + xmm5 + xmm6 + xmm7 + + + aaa + aad + aam + aas + adc + add + addpd + addps + addsd + addss + addsubpd + addsubps + and + andnpd + andnps + andpd + andps + arpl + bound + bsf + bsr + bswap + bt + btc + btr + bts + call + cbw + cwde + cwd + cdq + cdqe + cqo + clc + cld + clgi + cli + clts + clflush + cmc + cmova + cmovae + cmovb + cmovbe + cmovc + cmove + cmovg + cmovge + cmovl + cmovle + cmovna + cmovnae + cmovnb + cmovnbe + cmovnc + cmovne + cmovng + cmovnge + cmovnl + cmovnle + cmovno + cmovnp + cmovns + cmovnz + cmovo + cmovp + cmovpe + cmovpo + cmovs + cmovz + cmp + cmpeqpd + cmpeqps + cmpeqsd + cmpeqss + cmplepd + cmpleps + cmplesd + cmpless + cmpltpd + cmpltps + cmpltsd + cmpltss + cmpneqpd + cmpneqps + cmpneqsd + cmpneqss + cmpnlepd + cmpnleps + cmpnlesd + cmpnless + cmpnltpd + cmpnltps + cmpnltsd + cmpnltss + cmpordpd + cmpordps + cmpordsd + cmpordss + cmppd + cmpps + cmps + cmpsb + cmpsd + cmpss + cmpsw + cmpunordpd + cmpunordps + cmpunordsd + cmpunordss + cmpxchg + cmpxchg486 + cmpxchg8b + cmpxchg16b + comisd + comiss + cpuid + cvtdq2pd + cvtdq2ps + cvtpd2dq + cvtpd2pi + cvtpd2ps + cvtpi2pd + cvtpi2ps + cvtps2dq + cvtps2pd + cvtps2pi + cvtsd2si + cvtsd2ss + cvtsi2sd + cvtsi2ss + cvtss2sd + cvtss2si + cvttpd2dq + cvttpd2pi + cvttps2dq + cvttps2pi + cvttsd2si + cvttss2si + daa + das + dec + div + divpd + divps + divsd + divss + emms + enter + f2xm1 + fabs + fadd + faddp + fbld + fbstp + fchs + fclex + fnclex + fcmovb + fcmovbe + fcmove + fcmovnb + fcmovnbe + fcmovne + fcmovnu + fcmovu + fcom + fcomp + fcompp + fcomi + fcomip + fcos + fdecstp + fdisi + feni + fdiv + fdivr + fdivp + fdivrp + femms + ffree + ffreep + fiadd + ficom + ficomp + fidiv + fidivr + fild + fimul + fincstp + finit + fist + fistp + fisttp + fisub + fisubr + fld + fld1 + fldl2e + fldl2t + fldlg2 + fldln2 + fldcw + fldenv + fldpi + fldz + fmul + fmulp + fndisi + fneni + fninit + fnop + fnsave + fnstcw + fnstenv + fnstsw + fnwait + fpatan + fptan + fprem + fprem1 + frndint + frstor + fsave + fscale + fsetpm + fsin + fsincos + fsqrt + fst + fstp + fstcw + fstenv + fstsw + fsub + fsubr + fsubp + fsubrp + ftst + fucom + fucomp + fucompp + fucomi + fucomip + fwait + fxam + fxch + fxrstor + fxsave + fxtract + fyl2x + fyl2xp1 + haddpd + haddps + hlt + hsubpd + hsubps + ibts + idiv + imul + in + inc + ins + insb + insd + insw + int + int1 + int3 + into + invd + invlpg + invlpga + iret + iretd + iretq + iretw + ja + jae + jb + jbe + jc + je + jg + jge + jl + jle + jna + jnae + jnb + jnbe + jnc + jne + jng + jnge + jnl + jnle + jno + jnp + jns + jnz + jo + jp + jpe + jpo + js + jz + jcxz + jecxz + jrcxz + jmp + lahf + lar + lddqu + ldmxcsr + lds + les + lea + leave + lfence + lfs + lgdt + lgs + lidt + lldt + lmsw + loadall + loadall286 + lods + lodsb + lodsd + lodsq + lodsw + loop + loope + loopne + loopnz + loopz + lsl + lss + ltr + maskmovdqu + maskmovq + maxpd + maxps + maxsd + maxss + mfence + minpd + minps + minsd + minss + monitor + mov + movapd + movaps + movd + movddup + movdq2q + movdqa + movdqu + movhlps + movhpd + movhps + movlhps + movlpd + movlps + movmskpd + movmskps + movntdq + movnti + movntpd + movntps + movntq + movq + movq2dq + movs + movsb + movsd + movshdup + movsldup + movsq + movss + movsx + movsxd + movsw + movupd + movups + movzx + mul + mulpd + mulps + mulsd + mulss + mwait + neg + nop + not + or + orpd + orps + out + outs + outsb + outsw + outsd + packssdw + packsswb + packuswb + paddb + paddd + paddq + paddsb + paddsw + paddusb + paddusw + paddw + pand + pandn + pause + pavgb + pavgusb + pavgw + pcmpeqb + pcmpeqw + pcmpeqd + pcmpgtb + pcmpgtw + pcmpgtd + pdistib + pextrw + pf2id + pf2iw + pfacc + pfadd + pfcmpeq + pfcmpge + pfcmpgt + pfmax + pfmin + pfmul + pfnacc + pfpnacc + pfrcp + pfrcpit1 + pfrcpit2 + pfrsqit1 + pfrsqrt + pfsub + pfsubr + pi2fd + pi2fw + pinsrw + pmachriw + pmaddwd + pmagw + pmaxsw + pmaxub + pminsw + pminub + pmovmskb + pmulhrw + pmulhuw + pmulhw + pmullw + pmuludq + pmvgezb + pmvlzb + pmvnzb + pmvzb + pop + popa + popaw + popad + popf + popfw + popfd + popfq + por + prefetch + prefetchnta + prefetcht0 + prefetcht1 + prefetcht2 + prefetchw + psadbw + pshufd + pshufhw + pshuflw + pshufw + pslld + pslldq + psllq + psllw + psrad + psraw + psrld + psrldq + psrlq + psrlw + psubb + psubd + psubq + psubsb + psubsiw + psubsw + psubusb + psubusw + psubw + pswapd + punpckhbw + punpckhdq + punpckhqdq + punpckhwd + punpcklbw + punpckldq + punpcklqdq + punpcklwd + push + pusha + pushad + pushaw + pushf + pushfd + pushfq + pushfw + pxor + rcl + rcr + rcpps + rcpss + rdmsr + rdpmc + rdshr + rdtsc + rdtscp + ret + retf + retn + rol + ror + rsdc + rsldt + rsm + rsqrtps + rsqrtss + rsts + sahf + sal + sar + salc + sbb + scas + scasb + scasd + scasq + scasw + seta + setae + setb + setbe + setc + sete + setg + setge + setl + setle + setna + setnae + setnb + setnbe + setnc + setne + setng + setnge + setnl + setnle + setno + setnp + setns + setnz + seto + setp + setpe + setpo + sets + setz + sfence + sgdt + shl + shld + shr + shrd + shufpd + shufps + sidt + skinit + sldt + smi + smint + smintold + smsw + sqrtpd + sqrtps + sqrtsd + sqrtss + stc + std + stgi + sti + stmxcsr + stos + stosb + stosd + stosq + stosw + str + sub + subpd + subps + subsd + subss + svdc + svldt + svts + swapgs + syscall + sysenter + sysexit + sysret + test + ucomisd + ucomiss + ud0 + ud1 + ud2 + umov + unpckhpd + unpckhps + unpcklpd + unpcklps + verr + verw + vmload + vmmcall + vmrun + vmsave + wait + wbinvd + wrmsr + wrshr + xadd + xbts + xchg + xlat + xlatb + xor + xorpd + xorps + + + + times + + equ + + db + dw + dd + dq + dt + + resb + resw + resd + resq + rest + + incbin + + byte + word + dword + qword + short + ptr + + + + absolute + bits + common + extern + global + org + section + seg + segment + strict + use16 + use32 + wrt + + struc + endstruc + istruc + at + iend + align + alignb + + __SECT__ + __NASM_MAJOR__ + __NASM_MINOR__ + __NASM_SUBMINOR__ + ___NASM_PATCHLEVEL__ + __NASM_VERSION_ID__ + __NASM_VER__ + __FILE__ + __LINE__ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/nemerle.xml b/src/data/extra/syntax-highlighting/syntax/nemerle.xml new file mode 100644 index 00000000..208d70df --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/nemerle.xml @@ -0,0 +1,208 @@ + + + + + + + abstract + def + delegate + event + extern + internal + mutable + override + public + private + protected + sealed + static + volatile + virtual + new + + + + macro + namespace + using + \[Record\] + + + + array + bool + byte + char + decimal + double + enum + float + int + list + long + object + sbyte + short + string + uint + ulong + ushort + variant + void + + + + _ + as + assert + base + catch + checked + do + else + false + finally + for + foreach + fun + get + if + ignore + implements + in + is + lock + match + null + out + params + ref + repeat + set + syntax + this + throw + true + try + typeof + unchecked + unless + when + where + while + with + + + + #define + #elif + #else + #endif + #endregion + #error + #if + #line + #region + #undef + #warning + #pragma + + + + class + interface + module + struct + type + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/nesc.xml b/src/data/extra/syntax-highlighting/syntax/nesc.xml new file mode 100644 index 00000000..5a5d0db5 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/nesc.xml @@ -0,0 +1,185 @@ + + + + + + break + case + continue + default + do + else + enum + extern + for + goto + if + inline + return + sizeof + struct + switch + typedef + union + while interface + module + configuration + implementation + components + as + uses + provides + includes + command + event + async + task + norace + default + __attribute__ + atomic + call + signal + post + + + + auto + char + const + double + float + int + long + register + restrict + short + signed + static + unsigned + void + volatile + _Imaginary + _Complex + _Bool + bool + uint8_t + uint16_t + uint32_t + uint64_t + result_t + SUCCESS + FAIL + TRUE + FALSE + TOSH_INTERRUPT + TOSH_SIGNAL + TOS_MsgPtr + TOS_Msg + + + FIXME + TODO + ### + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/ninja.xml b/src/data/extra/syntax-highlighting/syntax/ninja.xml new file mode 100644 index 00000000..9e769ea9 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/ninja.xml @@ -0,0 +1,288 @@ + + + +]> + + + rule + build + pool + + default + include + subninja + + + + console + + + + phony + + + + builddir + ninja_required_version + + + + depth + + + + command + console + depfile + deps + msvc_deps_prefix + description + generator + in + in_newline + out + pool + restat + rspfile + rspfile_content + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/noweb.xml b/src/data/extra/syntax-highlighting/syntax/noweb.xml new file mode 100644 index 00000000..09641afa --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/noweb.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/nsis.xml b/src/data/extra/syntax-highlighting/syntax/nsis.xml new file mode 100644 index 00000000..567419d5 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/nsis.xml @@ -0,0 +1,494 @@ + + + + + + packhdr + finalize + system + execute + makensis + AddIncludeDir + include + cd + if + ifdef + ifndef + endif + define + undef + else + echo + warning + error + verbose + macro + macroend + macroundef + insertmacro + ifmacrodef + ifmacrondef + tempfile + delfile + appendfile + getdllversion + searchparse + searchreplace + AddPluginDir + + + nonfatal + MB_ICONQUESTION + MB_YESNO + MB_DEFBUTTON2 + MB_ICONINFORMATION + MB_OK + + + + MUI_SYSVERSION + MUI_ICON + MUI_UNICON + MUI_HEADERIMAGE + MUI_HEADERIMAGE_BITMAP + MUI_HEADERIMAGE_BITMAP_NOSTRETCH + MUI_HEADERIMAGE_BITMAP_RTL + MUI_HEADERIMAGE_BITMAP_RTL_NOSTRETCH + MUI_HEADERIMAGE_UNBITMAP + MUI_HEADERIMAGE_UNBITMAP_NOSTRETCH + MUI_HEADERIMAGE_UNBITMAP_RTL + MUI_HEADERIMAGE_UNBITMAP_RTL_NOSTRETCH + MUI_HEADERIMAGE_RIGHT + MUI_BGCOLOR + MUI_UI + MUI_UI_HEADERIMAGE + MUI_UI_HEADERIMAGE_RIGHT + MUI_UI_COMPONENTSPAGE_SMALLDESC + MUI_UI_COMPONENTSPAGE_NODESC + MUI_WELCOMEFINISHPAGE_BITMAP + MUI_WELCOMEFINISHPAGE_BITMAP_NOSTRETCH + MUI_WELCOMEFINISHPAGE_INI + MUI_UNWELCOMEFINISHPAGE_BITMAP + MUI_UNWELCOMEFINISHPAGE_BITMAP_NOSTRETCH + MUI_UNWELCOMEFINISHPAGE_INI + MUI_LICENSEPAGE_BGCOLOR + MUI_COMPONENTSPAGE_CHECKBITMAP + MUI_COMPONENTSPAGE_SMALLDESC + MUI_COMPONENTSPAGE_NODESC + MUI_INSTFILESPAGE_COLORS + MUI_INSTFILESPAGE_PROGRESSBAR + MUI_FINISHPAGE_NOAUTOCLOSE + MUI_UNFINISHPAGE_NOAUTOCLOSE + MUI_ABORTWARNING + MUI_ABORTWARNING_TEXT + MUI_UNABORTWARNING + MUI_UNABORTWARNING_TEXT + MUI_PAGE_WELCOME + MUI_PAGE_LICENSE + MUI_PAGE_COMPONENTS + MUI_PAGE_DIRECTORY + MUI_PAGE_STARTMENU + MUI_PAGE_INSTFILES + MUI_PAGE_FINISH + MUI_UNPAGE_WELCOME + MUI_UNPAGE_CONFIRM + MUI_UNPAGE_LICENSE + MUI_UNPAGE_COMPONENTS + MUI_UNPAGE_DIRECTORY + MUI_UNPAGE_INSTFILES + MUI_UNPAGE_FINISH + MUI_PAGE_HEADER_TEXT + MUI_PAGE_HEADER_SUBTEXT + MUI_WELCOMEPAGE_TITLE + MUI_WELCOMEPAGE_TITLE_3LINES + MUI_WELCOMEPAGE_TEXT + MUI_LICENSEPAGE_TEXT_TOP + MUI_LICENSEPAGE_TEXT_BOTTOM + MUI_LICENSEPAGE_BUTTON + MUI_LICENSEPAGE_CHECKBOX + MUI_LICENSEPAGE_CHECKBOX_TEXT + MUI_LICENSEPAGE_RADIOBUTTONS + MUI_LICENSEPAGE_RADIOBUTTONS_TEXT_ACCEPT + MUI_LICENSEPAGE_RADIOBUTTONS_TEXT_DECLINE + MUI_COMPONENTSPAGE_TEXT_TOP + MUI_COMPONENTSPAGE_TEXT_COMPLIST + MUI_COMPONENTSPAGE_TEXT_INSTTYPE + MUI_COMPONENTSPAGE_TEXT_DESCRIPTION_TITLE + MUI_COMPONENTSPAGE_TEXT_DESCRIPTION_INFO + MUI_DIRECTORYPAGE_TEXT_TOP + MUI_DIRECTORYPAGE_TEXT_DESTINATION + MUI_DIRECTORYPAGE_VARIABLE + MUI_DIRECTORYPAGE_VERIFYONLEAVE + MUI_STARTMENU_WRITE_BEGIN + MUI_STARTMENU_WRITE_END + MUI_STARTMENUPAGE_TEXT_TOP + MUI_STARTMENUPAGE_TEXT_CHECKBOX + MUI_STARTMENUPAGE_DEFAULTFOLDER + MUI_STARTMENUPAGE_NODISABLE + MUI_STARTMENUPAGE_REGISTRY_ROOT + MUI_STARTMENUPAGE_REGISTRY_KEY + MUI_STARTMENUPAGE_REGISTRY_VALUENAME + MUI_INSTFILESPAGE_FINISHHEADER_TEXT + MUI_INSTFILESPAGE_FINISHHEADER_SUBTEXT + MUI_INSTFILESPAGE_ABORTHEADER_TEXT + MUI_INSTFILESPAGE_ABORTHEADER_SUBTEXT + MUI_FINISHPAGE_TITLE + MUI_FINISHPAGE_TITLE_3LINES + MUI_FINISHPAGE_TEXT + MUI_FINISHPAGE_TEXT_LARGE + MUI_FINISHPAGE_BUTTON + MUI_FINISHPAGE_TEXT_REBOOT + MUI_FINISHPAGE_TEXT_REBOOTNOW + MUI_FINISHPAGE_TEXT_REBOOTLATER + MUI_FINISHPAGE_RUN + MUI_FINISHPAGE_RUN_TEXT + MUI_FINISHPAGE_RUN_PARAMETERS + MUI_FINISHPAGE_RUN_NOTCHECKED + MUI_FINISHPAGE_RUN_FUNCTION + MUI_FINISHPAGE_SHOWREADME + MUI_FINISHPAGE_SHOWREADME_TEXT + MUI_FINISHPAGE_SHOWREADME_NOTCHECKED + MUI_FINISHPAGE_SHOWREADME_FUNCTION + MUI_FINISHPAGE_LINK + MUI_FINISHPAGE_LINK_LOCATION + MUI_FINISHPAGE_LINK_COLOR + MUI_FINISHPAGE_NOREBOOTSUPPORT + MUI_UNCONFIRMPAGE_TEXT_TOP + MUI_UNCONFIRMPAGE_TEXT_LOCATION + MUI_LANGUAGE + MUI_LANGDLL_DISPLAY + MUI_LANGDLL_REGISTRY_ROOT + MUI_LANGDLL_REGISTRY_KEY + MUI_LANGDLL_REGISTRY_VALUENAME + MUI_LANGDLL_WINDOWTITLE + MUI_LANGDLL_INFO + MUI_LANGDLL_ALWAYSSHOW + MUI_RESERVEFILE_INSTALLOPTIONS + MUI_RESERVEFILE_LANGDLL + MUI_FUNCTION_DESCRIPTION_BEGIN + MUI_DESCRIPTION_TEXT + MUI_FUNCTION_DESCRIPTION_END + MUI_INSTALLOPTIONS_EXTRACT + MUI_INSTALLOPTIONS_EXTRACT_AS + MUI_HEADER_TEXT + MUI_INSTALLOPTIONS_DISPLAY + MUI_INSTALLOPTIONS_INITDIALOG + MUI_INSTALLOPTIONS_SHOW + MUI_INSTALLOPTIONS_DISPLAY_RETURN + MUI_INSTALLOPTIONS_SHOW_RETURN + MUI_INSTALLOPTIONS_READ + MUI_INSTALLOPTIONS_WRITE + MUI_CUSTOMFUNCTION_GUIINIT + MUI_CUSTOMFUNCTION_UNGUIINIT + MUI_CUSTOMFUNCTION_ABORT + MUI_CUSTOMFUNCTION_UNABORT + MUI_PAGE_CUSTOMFUNCTION_PRE + MUI_PAGE_CUSTOMFUNCTION_SHOW + MUI_PAGE_CUSTOMFUNCTION_LEAVE + MUI_WELCOMEFINISHPAGE_CUSTOMFUNCTION_INIT + + + IfCmd + If + Unless + IfNot + AndIf + AndUnless + AndIfNot + OrIf + OrUnless + OrIfNot + Else + ElseIf + ElseUnless + ElseIfNot + EndIf + EndUnless + IfThen + IfNotThen + ForEach + For + ExitFor + Next + While + ExitWhile + EndWhile + Do + DoWhile + DoUntil + ExitDo + Loop + LoopWhile + LoopUntil + Continue + Break + Select + CaseElse + Case_Else + Default + Case + Case2 + Case3 + Case4 + Case5 + EndSelect + Switch + EndSwitch + + + + Abort + AddBrandingImage + AddSize + AutoCloseWindow + BGFont + BGGradient + BrandingText + BringToFront + Call + CallInstDLL + Caption + ChangeUI + ClearErrors + ComponentText + GetDLLVersion + GetDLLVersionLocal + GetFileTime + GetFileTimeLocal + CopyFiles + CRCCheck + CreateDirectory + CreateFont + CreateShortcut + SetDatablockOptimize + DeleteINISec + DeleteINIStr + DeleteRegKey + DeleteRegValue + Delete + DetailPrint + DirText + DirShow + DirVar + DirVerify + GetInstDirError + AllowRootDirInstall + CheckBitmap + EnableWindow + EnumRegKey + EnumRegValue + Exch + Exec + ExecWait + ExecShell + ExpandEnvStrings + FindWindow + FindClose + FindFirst + FindNext + File + FileBufSize + FlushINI + ReserveFile + FileClose + FileErrorText + FileOpen + FileRead + FileWrite + FileReadByte + FileWriteByte + FileReadUTF16LE + FileWriteUTF16LE + FileReadWord + FileWriteWord + FileSeek + Function + FunctionEnd + GetDlgItem + GetFullPathName + GetTempFileName + HideWindow + Icon + IfAbort + IfErrors + IfFileExists + IfRebootFlag + IfSilent + InstallDirRegKey + InstallColors + InstallDir + InstProgressFlags + InstType + IntOp + IntCmp + IntCmpU + IntFmt + IsWindow + Goto + LangString + LangStringUP + LicenseData + LicenseForceSelection + LicenseLangString + LicenseText + LicenseBkColor + LoadLanguageFile + LogSet + LogText + MessageBox + Nop + Name + OutFile + Page + PageCallbacks + PageEx + PageExEnd + Pop + Push + Quit + ReadINIStr + ReadRegDWORD + ReadRegStr + ReadEnvStr + Reboot + RegDLL + Rename + Return + RMDir + Section + SectionEnd + SectionIn + SubSection + SectionGroup + SubSectionEnd + SectionGroupEnd + SearchPath + SectionSetFlags + SectionGetFlags + SectionSetInstTypes + SectionGetInstTypes + SectionGetText + SectionSetText + SectionGetSize + SectionSetSize + GetCurInstType + SetCurInstType + InstTypeSetText + InstTypeGetText + SendMessage + SetAutoClose + SetCtlColors + SetBrandingImage + SetCompress + SetCompressor + SetCompressorDictSize + SetCompressionLevel + SetDateSave + SetDetailsView + SetDetailsPrint + SetErrors + SetErrorLevel + GetErrorLevel + SetFileAttributes + SetFont + SetOutPath + SetOverwrite + SetPluginUnload + SetRebootFlag + SetRegView + SetShellVarContext + SetSilent + ShowInstDetails + ShowUninstDetails + ShowWindow + SilentInstall + SilentUnInstall + Sleep + StrCmp + StrCmpS + StrCpy + UnsafeStrCpy + StrLen + SubCaption + Unicode + UninstallExeName + UninstallCaption + UninstallIcon + UninstPage + UninstallText + UninstallSubCaption + UnRegDLL + WindowIcon + WriteINIStr + WriteRegBin + WriteRegDWORD + WriteRegStr + WriteRegExpandStr + WriteUninstaller + PEDllCharacteristics + PESubsysVer + XPStyle + RequestExecutionLevel + ManifestDPIAware + ManifestSupportedOS + MiscButtonText + DetailsButtonText + UninstallButtonText + InstallButtonText + SpaceTexts + CompletedText + GetFunctionAddress + GetLabelAddress + GetCurrentAddress + InitPluginsDir + AllowSkipFiles + Var + VIAddVersionKey + VIProductVersion + VIFileVersion + LockWindow + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/objectivec.xml b/src/data/extra/syntax-highlighting/syntax/objectivec.xml new file mode 100644 index 00000000..bdad6fe8 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/objectivec.xml @@ -0,0 +1,130 @@ + + + + + + break + case + continue + default + do + else + enum + extern + for + goto + if + return + sizeof + struct + switch + typedef + union + while + @class + @defs + @encode + @end + @implementation + @interface + @private + @protected + @protocol + @public + @selector + self + super + + + auto + char + const + double + float + int + long + register + short + signed + static + unsigned + void + volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/objectivecpp.xml b/src/data/extra/syntax-highlighting/syntax/objectivecpp.xml new file mode 100644 index 00000000..a48f9c9c --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/objectivecpp.xml @@ -0,0 +1,300 @@ + + + + + + break + case + continue + default + do + else + enum + extern + for + goto + if + return + sizeof + struct + switch + typedef + union + while + @class + @defs + @encode + @end + @implementation + @interface + @private + @protected + @protocol + @public + @selector + self + super + + asm + catch + class + const_cast + delete + dynamic_cast + explicit + export + false + friend + inline + namespace + new + operator + private + protected + public + qobject_cast + reinterpret_cast + static_cast + template + this + throw + true + try + typeid + type_info + typename + using + virtual + + and + and_eq + bad_cast + bad_typeid + bitand + bitor + compl + not + not_eq + or + or_eq + xor + xor_eq + + + K_DCOP + SLOT + SIGNAL + Q_CLASSINFO + Q_ENUMS + Q_EXPORT + Q_OBJECT + Q_OVERRIDE + Q_PROPERTY + Q_SETS + Q_SIGNALS + Q_SLOTS + Q_FOREACH + Q_DECLARE_FLAGS + Q_INIT_RESOURCE + Q_CLEANUP_RESOURCE + Q_GLOBAL_STATIC + Q_GLOBAL_STATIC_WITH_ARGS + Q_DECLARE_INTERFACE + Q_DECLARE_TYPEINFO + Q_DECLARE_SHARED + Q_DECLARE_FLAGS + Q_DECLARE_OPERATORS_FOR_FLAGS + Q_FOREVER + Q_DECLARE_PRIVATE + Q_DECLARE_PUBLIC + Q_D + Q_Q + Q_DISABLE_COPY + Q_INTERFACES + Q_FLAGS + Q_SCRIPTABLE + Q_INVOKABLE + Q_GADGET + Q_ARG + Q_RETURN_ARG + Q_ASSERT + Q_ASSERT_X + TRUE + FALSE + connect + disconnect + emit + signals + slots + foreach + forever + + + auto + char + const + double + float + int + long + register + short + signed + static + unsigned + void + volatile + + bool + mutable + uchar + uint + int8_t + int16_t + int32_t + int64_t + uint8_t + uint16_t + uint32_t + uint64_t + wchar_t + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/ocaml.xml b/src/data/extra/syntax-highlighting/syntax/ocaml.xml new file mode 100644 index 00000000..4d47d7b0 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/ocaml.xml @@ -0,0 +1,624 @@ + + + + + + + + + + + + +]> + + + + + in + as + forall + + + and + as + assert + asr + begin + class + closed + constraint + do + done + downto + else + end + exception + external + false + for + fun + function + functor + if + in + include + inherit + land + lazy + let + lor + lsl + lsr + lxor + match + method + mod + module + mutable + new + nonrec + object + of + open + or + parser + private + rec + sig + struct + then + to + true + try + type + val + virtual + when + while + with + + + + + + + declare + value + where + + + + abs + abs_float + acos + asin + at_exit + atan + atan2 + bool_of_string + ceil + char_of_int + classify_float + close_in + close_in_noerr + close_out + close_out_noerr + compare + copysign + cos + cosh + decr + do_at_exit + epsilon_float + exp + expm1 + float + float_of_int + float_of_string + floor + flush + flush_all + format_of_string + frexp + fst + hypot + ignore + in_channel_length + incr + infinity + input + input_binary_int + input_byte + input_char + input_line + input_value + int_of_char + int_of_float + int_of_string + ldexp + lnot + log + log10 + log1p + max + max_float + max_int + min + min_float + min_int + mod_float + modf + nan + neg_infinity + not + open_in + open_in_bin + open_in_gen + open_out + open_out_bin + open_out_gen + out_channel_length + output + output_binary_int + output_byte + output_bytes + output_char + output_string + output_substring + output_value + pos_in + pos_out + pred + prerr_bytes + prerr_char + prerr_endline + prerr_float + prerr_int + prerr_newline + prerr_string + print_bytes + print_char + print_endline + print_float + print_int + print_newline + print_string + read_float + read_int + read_line + really_input + really_input_string + ref + seek_in + seek_out + set_binary_mode_in + set_binary_mode_out + sin + sinh + snd + sqrt + stderr + stdin + stdout + string_of_bool + string_of_float + string_of_format + string_of_int + succ + tan + tanh + truncate + unsafe_really_input + valid_float_lexem + + + + + + exit + failwith + invalid_arg + raise + raise_notrace + + + + array + bool + bytes + char + exn + float + format4 + format6 + fpclass + in_channel + int + int32 + int64 + lazy_t + list + nativeint + open_flag + option + out_channel + real + ref + string + unit + + + + FP_infinite + FP_nan + FP_normal + FP_subnormal + FP_zero + None + Open_append + Open_binary + Open_creat + Open_excl + Open_nonblock + Open_rdonly + Open_text + Open_trunc + Open_wronly + Some + + + + Assert_failure + Division_by_zero + End_of_file + Exit + Failure + Invalid_argument + Match_failure + Not_found + Out_of_memory + Stack_overflow + Sys_blocked_io + Sys_error + Undefined_recursive_module + + + + Arg + Array + ArrayLabels + Buffer + Bytes + Callback + Char + Complex + Digest + Ephemeron + Filename + Format + Gc + Genlex + Hashtbl + Int32 + Int64 + Lazy + Lexing + List + ListLabels + Map + Marshal + MoreLabels + Nativeint + Oo + Parsing + Printexc + Printf + Queue + Random + Scanf + Set + Sort + Spacetime + Stack + StdLabels + Stream + String + StringLabels + Sys + Uchar + Weak + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/ocamllex.xml b/src/data/extra/syntax-highlighting/syntax/ocamllex.xml new file mode 100644 index 00000000..14b5837b --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/ocamllex.xml @@ -0,0 +1,81 @@ + + + + + + +]> + + + + + + and + as + eof + let + parse + rule + shortest + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/ocamlyacc.xml b/src/data/extra/syntax-highlighting/syntax/ocamlyacc.xml new file mode 100644 index 00000000..6d4d7ba6 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/ocamlyacc.xml @@ -0,0 +1,160 @@ + + + + + + + + + +]> + + + + + %token + %type + + + + %left + %right + %nonassoc + %start + + + + %prec + error + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/octave.xml b/src/data/extra/syntax-highlighting/syntax/octave.xml new file mode 100644 index 00000000..d3a3197b --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/octave.xml @@ -0,0 +1,2833 @@ + + + + + + + + + + + + case + catch + continue + else + elseif + global + otherwise + return + static + persistent + unwind_protect_cleanup + varargin + varargout + break + for + endfor + if + endif + do + until + while + endwhile + function + endfunction + unwind_protect + end_unwind_protect + parfor + endparfor + classdef + endclassdef + enumeration + endenumeration + events + endevents + methods + endmethods + properties + endproperties + switch + endswitch + try + end_try_catch + end + + + + EDITOR + EXEC_PATH + F_DUPFD + F_GETFD + F_GETFL + F_SETFD + F_SETFL + IMAGE_PATH + J + OCTAVE_HOME + OCTAVE_VERSION + O_APPEND + O_ASYNC + O_CREAT + O_EXCL + O_NONBLOCK + O_RDONLY + O_RDWR + O_SYNC + O_TRUNC + O_WRONLY + PAGER + PAGER_FLAGS + PS1 + PS2 + PS4 + P_tmpdir + SEEK_CUR + SEEK_END + SEEK_SET + SIG + S_ISBLK + S_ISCHR + S_ISDIR + S_ISFIFO + S_ISLNK + S_ISREG + S_ISSOCK + WCONTINUE + WCOREDUMP + WEXITSTATUS + WIFCONTINUED + WIFEXITED + WIFSIGNALED + WIFSTOPPED + WNOHANG + WSTOPSIG + WTERMSIG + WUNTRACED + __accumarray_max__ + __accumarray_min__ + __accumarray_sum__ + __accumdim_sum__ + __builtins__ + __calc_dimensions__ + __compactformat__ + __contourc__ + __current_scope__ + __db_next_breakpoint_quiet__ + __diaryfile__ + __diarystate__ + __dispatch__ + __display_tokens__ + __dsearchn__ + __dump_load_path__ + __dump_symtab_info__ + __dump_typeinfo__ + __echostate__ + __fieldnames__ + __fnmatch__ + __formatstring__ + __ftp__ + __ftp_ascii__ + __ftp_binary__ + __ftp_close__ + __ftp_cwd__ + __ftp_delete__ + __ftp_dir__ + __ftp_mget__ + __ftp_mkdir__ + __ftp_mode__ + __ftp_mput__ + __ftp_pwd__ + __ftp_rename__ + __ftp_rmdir__ + __get__ + __get_cmdline_fcn_txt__ + __go_axes__ + __go_axes_init__ + __go_delete__ + __go_execute_callback__ + __go_figure__ + __go_figure_handles__ + __go_handles__ + __go_hggroup__ + __go_image__ + __go_light__ + __go_line__ + __go_patch__ + __go_surface__ + __go_text__ + __go_uibuttongroup__ + __go_uicontextmenu__ + __go_uicontrol__ + __go_uimenu__ + __go_uipanel__ + __go_uipushtool__ + __go_uitoggletool__ + __go_uitoolbar__ + __gud_mode__ + __ichol0__ + __icholt__ + __ilu0__ + __iluc__ + __ilutp__ + __image_pixel_size__ + __is_handle_visible__ + __java_exit__ + __java_get__ + __java_init__ + __java_set__ + __keywords__ + __lexer_debug_flag__ + __lin_interpn__ + __list_functions__ + __luinc__ + __magick_finfo__ + __magick_formats__ + __magick_ping__ + __magick_read__ + __magick_write__ + __meta_class_query__ + __meta_get_package__ + __methods__ + __mkdir__ + __octave_config_info__ + __octave_link_edit_file__ + __octave_link_enabled__ + __octave_link_file_dialog__ + __octave_link_input_dialog__ + __octave_link_list_dialog__ + __octave_link_message_dialog__ + __octave_link_question_dialog__ + __octave_link_show_doc__ + __octave_link_show_preferences__ + __open_with_system_app__ + __operators__ + __parent_classes__ + __parse_file__ + __parser_debug_flag__ + __pathorig__ + __pchip_deriv__ + __profiler_data__ + __profiler_enable__ + __profiler_reset__ + __qp__ + __request_drawnow__ + __sort_rows_idx__ + __superclass_reference__ + __textscan__ + __token_count__ + __usage__ + __varval__ + __version_info__ + __wglob__ + __which__ + __zoom__ + + + + Inf + NaN + e + eps + pi + realmax + realmin + I + NA + dbstop + dbclear + dbstatus + dbwhere + dbtype + dblist + dbstack + dbup + dbdown + dbstep + dbcont + dbquit + cd + rmdir + link + symlink + readlink + rename + diary + more + exit + load + save + edit_history + history + run_history + who + whos + clear + format + echo + + + + __actual_axis_position__ + __all_opts__ + __clabel__ + __default_plot_options__ + __delaunayn__ + __eigs__ + __finish__ + __fltk_check__ + __fltk_uigetfile__ + __getlegenddata__ + __glpk__ + __gnuplot_drawnow__ + __gripe_missing_component__ + __have_feature__ + __have_gnuplot__ + __init_fltk__ + __init_gnuplot__ + __makeinfo__ + __next_line_color__ + __next_line_style__ + __opengl_info__ + __osmesa_print__ + __player_audioplayer__ + __player_get_channels__ + __player_get_fs__ + __player_get_id__ + __player_get_nbits__ + __player_get_sample_number__ + __player_get_tag__ + __player_get_total_samples__ + __player_get_userdata__ + __player_isplaying__ + __player_pause__ + __player_play__ + __player_playblocking__ + __player_resume__ + __player_set_fs__ + __player_set_tag__ + __player_set_userdata__ + __player_stop__ + __plt_get_axis_arg__ + __pltopt__ + __printf_assert__ + __prog_output_assert__ + __recorder_audiorecorder__ + __recorder_get_channels__ + __recorder_get_fs__ + __recorder_get_id__ + __recorder_get_nbits__ + __recorder_get_sample_number__ + __recorder_get_tag__ + __recorder_get_total_samples__ + __recorder_get_userdata__ + __recorder_getaudiodata__ + __recorder_isrecording__ + __recorder_pause__ + __recorder_record__ + __recorder_recordblocking__ + __recorder_resume__ + __recorder_set_fs__ + __recorder_set_tag__ + __recorder_set_userdata__ + __recorder_stop__ + __run_test_suite__ + __unimplemented__ + __voronoi__ + abs + accumarray + accumdim + acos + acosd + acosh + acot + acotd + acoth + acsc + acscd + acsch + add_input_event_hook + addlistener + addpath + addpref + addproperty + addtodate + airy + all + allchild + allow_noninteger_range_as_index + amd + ancestor + and + angle + annotation + anova + ans + any + arch_fit + arch_rnd + arch_test + area + arg + argnames + argv + arma_rnd + arrayfun + asctime + asec + asecd + asech + asin + asind + asinh + assert + assignin + atan + atan2 + atan2d + atand + atanh + atexit + audiodevinfo + audioformats + audioinfo + audioread + audiowrite + autoload + autoreg_matrix + autumn + available_graphics_toolkits + axes + axis + balance + bandwidth + bar + barh + bartlett + bartlett_test + base2dec + base64_decode + base64_encode + beep + beep_on_error + bessel + besselh + besseli + besselj + besselk + bessely + beta + betacdf + betainc + betaincinv + betainv + betaln + betapdf + betarnd + bicg + bicgstab + bicubic + bin2dec + bincoeff + binocdf + binoinv + binopdf + binornd + bitand + bitcmp + bitget + bitmax + bitor + bitpack + bitset + bitshift + bitunpack + bitxor + blackman + blanks + blkdiag + blkmm + bone + box + brighten + bsxfun + bug_report + built_in_docstrings_file + builtin + bunzip2 + bzip2 + calendar + camlight + canonicalize_file_name + cart2pol + cart2sph + cast + cat + cauchy_cdf + cauchy_inv + cauchy_pdf + cauchy_rnd + caxis + cbrt + ccolamd + ceil + cell + cell2mat + cell2struct + celldisp + cellfun + cellindexmat + cellslices + cellstr + center + cgs + char + chdir + chi2cdf + chi2inv + chi2pdf + chi2rnd + chisquare_test_homogeneity + chisquare_test_independence + chol + chol2inv + choldelete + cholinsert + cholinv + cholshift + cholupdate + chop + circshift + citation + cla + clabel + class + clc + clf + clock + cloglog + close + closereq + cmpermute + cmunique + colamd + colloc + colon + colorbar + colorcube + colormap + colperm + colstyle + columns + comet + comet3 + comma + command_line_path + common_size + commutation_matrix + compan + compare_versions + compass + completion_append_char + completion_matches + complex + computer + cond + condeig + condest + confirm_recursive_rmdir + conj + contour + contour3 + contourc + contourf + contrast + conv + conv2 + convhull + convhulln + convn + cool + copper + copyfile + copyobj + cor_test + corr + corrcoef + cos + cosd + cosh + cot + cotd + coth + cov + cplxpair + cputime + crash_dumps_octave_core + cross + csc + cscd + csch + cstrcat + csvread + csvwrite + csymamd + ctime + ctranspose + cubehelix + cummax + cummin + cumprod + cumsum + cumtrapz + curl + cylinder + daspect + daspk + daspk_options + dasrt + dasrt_options + dassl + dassl_options + date + datenum + datestr + datetick + datevec + dawson + dblquad + dbnext + deal + debian_missing_handler + deblank + debug + debug_java + debug_jit + debug_on_error + debug_on_interrupt + debug_on_warning + dec2base + dec2bin + dec2hex + deconv + deg2rad + del2 + delaunay + delaunay3 + delaunayn + delete + dellistener + demo + desktop + det + detrend + diag + dialog + diff + diffpara + diffuse + dir + dir_in_loadpath + disable_diagonal_matrix + disable_permutation_matrix + disable_range + discrete_cdf + discrete_inv + discrete_pdf + discrete_rnd + disp + display + divergence + dlmread + dlmwrite + dmperm + do_braindead_shortcircuit_evaluation + do_string_escapes + doc + doc_cache_create + doc_cache_file + dos + dot + double + drawnow + dsearch + dsearchn + dump_prefs + dup2 + duplication_matrix + durbinlevinson + echo_executing_commands + edit + eig + eigs + ellipj + ellipke + ellipsoid + empirical_cdf + empirical_inv + empirical_pdf + empirical_rnd + end + endgrent + endpwent + eomday + eq + erf + erfc + erfcinv + erfcx + erfi + erfinv + errno + errno_list + error + error_ids + errorbar + errordlg + etime + etree + etreeplot + eval + evalc + evalin + example + exec + exist + exp + expcdf + expint + expinv + expm + expm1 + exppdf + exprnd + eye + ezcontour + ezcontourf + ezmesh + ezmeshc + ezplot + ezplot3 + ezpolar + ezsurf + ezsurfc + f_test_regression + fact + factor + factorial + fail + false + fcdf + fclear + fclose + fcntl + fdisp + feather + feof + ferror + feval + fflush + fft + fft2 + fftconv + fftfilt + fftn + fftshift + fftw + fgetl + fgets + fieldnames + figure + file_in_loadpath + file_in_path + fileattrib + filemarker + fileparts + fileread + filesep + fill + filter + filter2 + find + find_dir_in_path + findall + findfigs + findobj + findstr + finite + finv + fix + fixed_point_format + flag + flintmax + flip + flipdim + fliplr + flipud + floor + fminbnd + fminsearch + fminunc + fmod + fnmatch + fopen + fork + formula + fpdf + fplot + fprintf + fputs + fractdiff + frame2im + fread + freport + freqz + freqz_plot + frewind + frnd + fscanf + fseek + fskipl + fsolve + ftell + full + fullfile + func2str + functions + fwrite + fzero + gallery + gamcdf + gaminv + gamma + gammainc + gammaln + gampdf + gamrnd + gca + gcbf + gcbo + gcd + gcf + gco + ge + genpath + genvarname + geocdf + geoinv + geopdf + geornd + get + get_first_help_sentence + get_help_text + get_help_text_from_file + get_home_directory + getappdata + getegid + getenv + geteuid + getfield + getgid + getgrent + getgrgid + getgrnam + gethostname + getpgrp + getpid + getppid + getpref + getpwent + getpwnam + getpwuid + getrusage + getuid + ginput + givens + glob + glpk + gls + gmap40 + gmres + gmtime + gnuplot_binary + gplot + grabcode + gradient + graphics_toolkit + gray + gray2ind + grid + griddata + griddata3 + griddatan + gt + gtext + guidata + guihandles + gunzip + gzip + hadamard + hamming + hankel + hanning + hash + have_window_system + hdl2struct + help + helpdlg + hess + hex2dec + hex2num + hggroup + hgload + hgsave + hidden + hilb + hist + histc + history_control + history_file + history_save + history_size + history_timestamp_format_string + hold + home + horzcat + hot + hotelling_test + hotelling_test_2 + housh + hsv + hsv2rgb + hurst + hygecdf + hygeinv + hygepdf + hygernd + hypot + i + ichol + idivide + ifelse + ifft + ifft2 + ifftn + ifftshift + ignore_function_time_stamp + ilu + im2double + im2frame + imag + image + imagesc + imfinfo + imformats + importdata + imread + imshow + imwrite + ind2gray + ind2rgb + ind2sub + index + inf + inferiorto + info + info_file + info_program + inline + inpolygon + input + inputParser + inputdlg + inputname + int16 + int2str + int32 + int64 + int8 + interp1 + interp2 + interp3 + interpft + interpn + intersect + intmax + intmin + inv + inverse + invhilb + ipermute + iqr + is_absolute_filename + is_dq_string + is_function_handle + is_leap_year + is_rooted_relative_filename + is_sq_string + is_valid_file_id + isa + isalnum + isalpha + isappdata + isargout + isascii + isaxes + isbanded + isbool + iscell + iscellstr + ischar + iscntrl + iscolormap + iscolumn + iscomplex + isdebugmode + isdefinite + isdeployed + isdiag + isdigit + isdir + isempty + isequal + isequaln + isfield + isfigure + isfinite + isfloat + isglobal + isgraph + isguirunning + ishandle + ishermitian + ishghandle + ishold + isieee + isindex + isinf + isinteger + isjava + iskeyword + isletter + islogical + islower + ismac + ismatrix + ismember + ismethod + isna + isnan + isnull + isnumeric + isobject + isocaps + isocolors + isonormals + isosurface + ispc + ispref + isprime + isprint + isprop + ispunct + isreal + isrow + isscalar + issorted + isspace + issparse + issquare + isstr + isstrprop + isstruct + isstudent + issymmetric + istril + istriu + isunix + isupper + isvarname + isvector + isxdigit + j + java2mat + javaArray + javaMethod + javaObject + java_get + java_matrix_autoconversion + java_set + java_unsigned_autoconversion + javaaddpath + javachk + javaclasspath + javamem + javarmpath + jet + jit_enable + jit_failcnt + jit_startcnt + kbhit + kendall + keyboard + keywords + kill + kolmogorov_smirnov_cdf + kolmogorov_smirnov_test + kolmogorov_smirnov_test_2 + kron + kruskal_wallis_test + krylov + kurtosis + laplace_cdf + laplace_inv + laplace_pdf + laplace_rnd + lasterr + lasterror + lastwarn + lcm + ldivide + le + legend + legendre + length + lgamma + license + light + lighting + lin2mu + line + lines + linkaxes + linkprop + linsolve + linspace + list_in_columns + list_primes + listdlg + loadaudio + loaded_graphics_toolkits + loadobj + localfunctions + localtime + log + log10 + log1p + log2 + logical + logistic_cdf + logistic_inv + logistic_pdf + logistic_regression + logistic_rnd + logit + loglog + loglogerr + logm + logncdf + logninv + lognpdf + lognrnd + logspace + lookfor + lookup + lower + ls + ls_command + lscov + lsode + lsode_options + lsqnonneg + lstat + lt + lu + luinc + luupdate + magic + mahalanobis + make_absolute_filename + makeinfo_program + manova + mat2cell + mat2str + material + matlabroot + matrix_type + max + max_recursion_depth + mcnemar_test + md5sum + mean + meansq + median + menu + merge + mesh + meshc + meshgrid + meshz + meta.class + meta.dynproperty + meta.event + meta.method + meta.package + meta.property + metaclass + methods + mex + mexext + mfilename + mgorth + min + minus + mislocked + missing_component_hook + missing_function_hook + mkdir + mkfifo + mkoctfile + mkpp + mkstemp + mktime + mldivide + mlock + mod + mode + moment + mouse_wheel_zoom + movefile + mpoles + mpower + mrdivide + msgbox + mtimes + mu2lin + munlock + namelengthmax + nan + nargchk + nargin + narginchk + nargout + nargoutchk + native_float_format + nbincdf + nbininv + nbinpdf + nbinrnd + nchoosek + ndgrid + ndims + ne + newplot + news + nextpow2 + nfields + nnz + nonzeros + norm + normcdf + normest + normest1 + norminv + normpdf + normrnd + not + now + nproc + nth_element + nthargout + nthroot + ntsc2rgb + null + num2cell + num2hex + num2str + numel + numfields + nzmax + ocean + octave_config_info + octave_core_file_limit + octave_core_file_name + octave_core_file_options + octave_tmp_file_name + ode23 + ode45 + odeget + odeplot + odeset + ols + onCleanup + onenormest + ones + open + optimget + optimize_subsasgn_calls + optimset + or + orderfields + ordschur + orient + orth + ostrsplit + output_precision + pack + padecoef + page_output_immediately + page_screen_output + pan + paren + pareto + parseparams + pascal + patch + path + pathdef + pathsep + pause + pbaspect + pcg + pchip + pclose + pcolor + pcr + peaks + periodogram + perl + perms + permute + pie + pie3 + pink + pinv + pipe + pkg + planerot + playaudio + plot + plot3 + plotmatrix + plotyy + plus + poisscdf + poissinv + poisspdf + poissrnd + pol2cart + polar + poly + polyaffine + polyarea + polyder + polyeig + polyfit + polygcd + polyint + polyout + polyreduce + polyval + polyvalm + popen + popen2 + postpad + pow2 + power + powerset + ppder + ppint + ppjumps + ppplot + ppval + pqpnonneg + prctile + prefdir + preferences + prepad + primes + print + print_empty_dimensions + print_struct_array_contents + print_usage + printd + printf + prism + probit + prod + profexplore + profexport + profile + profshow + program_invocation_name + program_name + prop_test_2 + psi + publish + putenv + puts + pwd + python + qmr + qp + qqplot + qr + qrdelete + qrinsert + qrshift + qrupdate + quad + quad_options + quadcc + quadgk + quadl + quadv + quantile + questdlg + quit + quiver + quiver3 + qz + qzhess + rad2deg + rainbow + rand + rande + randg + randi + randn + randp + randperm + range + rank + ranks + rat + rats + rcond + rdivide + readdir + readline_re_read_init_file + readline_read_init_file + real + reallog + realpow + realsqrt + record + rectangle + rectint + recycle + reducepatch + reducevolume + refresh + refreshdata + regexp + regexpi + regexprep + regexptranslate + register_graphics_toolkit + rehash + rem + remove_input_event_hook + repelems + repmat + reset + reshape + residue + resize + restoredefaultpath + rethrow + rgb2hsv + rgb2ind + rgb2ntsc + rgbplot + ribbon + rindex + rmappdata + rmfield + rmpath + rmpref + roots + rose + rosser + rot90 + rotate + rotate3d + rotdim + round + roundb + rows + rref + rsf2csf + run + run_count + run_test + rundemos + runlength + runtests + save_default_options + save_header_format_string + save_precision + saveas + saveaudio + saveobj + savepath + scanf + scatter + scatter3 + schur + sec + secd + sech + semicolon + semilogx + semilogxerr + semilogy + semilogyerr + set + setappdata + setaudio + setdiff + setenv + setfield + setgrent + setpref + setpwent + setxor + shading + shg + shift + shiftdim + shrinkfaces + sighup_dumps_octave_core + sign + sign_test + signbit + sigterm_dumps_octave_core + silent_functions + sin + sinc + sind + sinetone + sinewave + single + sinh + size + size_equal + sizemax + sizeof + skewness + sleep + slice + smooth3 + sombrero + sort + sortrows + sound + soundsc + source + spalloc + sparse + sparse_auto_mutate + spaugment + spconvert + spdiags + spearman + spectral_adf + spectral_xdf + specular + speed + spencer + speye + spfun + sph2cart + sphere + spinmap + spline + splinefit + split_long_rows + spones + spparms + sprand + sprandn + sprandsym + sprank + spring + sprintf + spstats + spy + sqp + sqrt + sqrtm + squeeze + sscanf + stairs + stat + statistics + std + stderr + stdin + stdnormal_cdf + stdnormal_inv + stdnormal_pdf + stdnormal_rnd + stdout + stem + stem3 + stemleaf + stft + str2double + str2func + str2num + strcat + strchr + strcmp + strcmpi + strfind + strftime + string_fill_char + strjoin + strjust + strmatch + strncmp + strncmpi + strptime + strread + strrep + strsplit + strtok + strtrim + strtrunc + struct + struct2cell + struct2hdl + struct_levels_to_print + structfun + strvcat + sub2ind + subplot + subsasgn + subsindex + subspace + subsref + substr + substruct + sum + summer + sumsq + superiorto + suppress_verbose_help_message + surf + surface + surfc + surfl + surfnorm + svd + svd_driver + svds + swapbytes + syl + sylvester + symamd + symbfact + symrcm + symvar + synthesis + system + t_test + t_test_2 + t_test_regression + table + tan + tand + tanh + tar + tcdf + tempdir + tempname + terminal_size + test + tetramesh + texi_macros_file + text + textread + textscan + tic + tilde_expand + time + times + tinv + title + tmpfile + tmpnam + toascii + toc + toeplitz + tolower + toupper + tpdf + trace + transpose + trapz + treelayout + treeplot + tril + trimesh + triplequad + triplot + trisurf + triu + trnd + true + tsearch + tsearchn + type + typecast + typeinfo + u_test + uibuttongroup + uicontextmenu + uicontrol + uigetdir + uigetfile + uimenu + uint16 + uint32 + uint64 + uint8 + uipanel + uipushtool + uiputfile + uiresume + uitoggletool + uitoolbar + uiwait + umask + uminus + uname + undo_string_escapes + unidcdf + unidinv + unidpdf + unidrnd + unifcdf + unifinv + unifpdf + unifrnd + union + unique + unix + unlink + unmkpp + unpack + unsetenv + untabify + untar + unwrap + unzip + uplus + upper + urlread + urlwrite + usage + usejava + usleep + validateattributes + validatestring + vander + var + var_test + vec + vech + vectorize + ver + version + vertcat + view + viridis + voronoi + voronoin + waitbar + waitfor + waitforbuttonpress + waitpid + warndlg + warning + warning_ids + warranty + waterfall + wavread + wavwrite + wblcdf + wblinv + wblpdf + wblrnd + weekday + welch_test + what + which + white + whitebg + whos_line_format + wienrnd + wilcoxon_test + wilkinson + winter + xlabel + xlim + xor + yes_or_no + ylabel + ylim + yulewalker + z_test + z_test_2 + zeros + zip + zlabel + zlim + zoom + zscore + + + + airy_Ai + airy_Ai_deriv + airy_Ai_deriv_scaled + airy_Ai_scaled + airy_Bi + airy_Bi_deriv + airy_Bi_deriv_scaled + airy_Bi_scaled + airy_zero_Ai + airy_zero_Ai_deriv + airy_zero_Bi + airy_zero_Bi_deriv + atanint + bchdeco + bchenco + bessel_il_scaled + bessel_In + bessel_In_scaled + bessel_Inu + bessel_Inu_scaled + bessel_jl + bessel_Jn + bessel_Jnu + bessel_kl_scaled + bessel_Kn + bessel_Kn_scaled + bessel_Knu + bessel_Knu_scaled + bessel_lnKnu + bessel_yl + bessel_Yn + bessel_Ynu + bessel_zero_J0 + bessel_zero_J1 + beta_gsl + bfgsmin + bisectionstep + builtin + bwfill + bwlabel + cell2csv + celleval + Chi + chol + Ci + clausen + conicalP_0 + conicalP_1 + conicalP_half + conicalP_mhalf + conv2 + cordflt2 + coupling_3j + coupling_6j + coupling_9j + csv2cell + csvconcat + csvexplode + cyclgen + cyclpoly + dawson + debye_1 + debye_2 + debye_3 + debye_4 + deref + dispatch + dispatch_help + display_fixed_operations + dlmread + ellint_Ecomp + ellint_Kcomp + ellipj + erfc_gsl + erf_gsl + erf_Q + erf_Z + _errcore + eta + eta_int + expint_3 + expint_E1 + expint_E2 + expint_Ei + expm1 + exp_mult + exprel + exprel_2 + exprel_n + fabs + fangle + farg + fatan2 + fceil + fconj + fcos + fcosh + fcumprod + fcumsum + fdiag + fermi_dirac_3half + fermi_dirac_half + fermi_dirac_inc_0 + fermi_dirac_int + fermi_dirac_mhalf + fexp + ffloor + fimag + finitedifference + fixed + flog + flog10 + fprod + freal + freshape + fround + fsin + fsinh + fsqrt + fsum + fsumsq + ftan + ftanh + full + gamma_gsl + gamma_inc + gamma_inc_P + gamma_inc_Q + gammainv_gsl + gammastar + gdet + gdiag + gexp + gf + gfilter + _gfweight + ginv + ginverse + glog + glu + gpick + gprod + grab + grank + graycomatrix + __grcla__ + __grclf__ + __grcmd__ + greshape + __grexit__ + __grfigure__ + __grgetstat__ + __grhold__ + __grinit__ + __grishold__ + __grnewset__ + __grsetgraph__ + gsl_sf + gsqrt + gsum + gsumsq + gtext + gzoom + hazard + houghtf + hyperg_0F1 + hzeta + is_complex_sparse + isfixed + isgalois + isprimitive + is_real_sparse + is_sparse + jpgread + jpgwrite + lambert_W0 + lambert_Wm1 + legendre_Pl + legendre_Plm + legendre_Ql + legendre_sphPlm + legendre_sphPlm_array + leval + listen + lnbeta + lncosh + lngamma_gsl + lnpoch + lnsinh + log_1plusx + log_1plusx_mx + log_erfc + lp + make_sparse + mark_for_deletion + medfilt1 + newtonstep + nnz + numgradient + numhessian + pchip_deriv + pngread + pngwrite + poch + pochrel + pretty + primpoly + psi + psi_1_int + psi_1piy + psi_n + rand + rande + randn + randp + regexp + remez + reset_fixed_operations + rotate_scale + rsdec + rsenc + samin + SBBacksub + SBEig + SBFactor + SBProd + SBSolve + Shi + Si + sinc_gsl + spabs + sparse + spfind + spimag + spinv + splu + spreal + SymBand + synchrotron_1 + synchrotron_2 + syndtable + taylorcoeff + transport_2 + transport_3 + transport_4 + transport_5 + trisolve + waitbar + xmlread + zeta + zeta_int + aar + aarmam + ac2poly + ac2rc + acorf + acovf + addpath + ademodce + adim + adsmax + amodce + anderson_darling_cdf + anderson_darling_test + anovan + apkconst + append_save + applylut + ar2poly + ar2rc + arburg + arcext + arfit2 + ar_spa + aryule + assert + au + aucapture + auload + auplot + aurecord + ausave + autumn + average_moments + awgn + azimuth + BandToFull + BandToSparse + base64encode + battery + bchpoly + bestblk + best_dir + best_dir_cov + betaln + bfgs + bfgsmin_example + bi2de + biacovf + bilinear + bisdemo + bispec + biterr + blkdiag + blkproc + bmpwrite + bone + bound_convex + boxcar + boxplot + brighten + bs_gradient + butter + buttord + bwborder + bweuler + bwlabel + bwmorph + bwselect + calendar + cceps + cdiff + cellstr + char + cheb + cheb1ord + cheb2ord + chebwin + cheby1 + cheby2 + chirp + clf + clip + cmpermute + cmunique + cohere + col2im + colfilt + colorgradient + comms + compand + complex + concat + conndef + content + contents + Contents + contourf + convhull + convmtx + cool + copper + corr2 + cosets + count + covm + cplxpair + cquadnd + create_lookup_table + crule + crule2d + crule2dgen + csape + csapi + csd + csvread + csvwrite + ctranspose + cumtrapz + czt + d2_min + datenum + datestr + datevec + dct + dct2 + dctmtx + de2bi + deal + decimate + decode + deg2rad + del2 + delaunay + delaunay3 + delta_method + demo + demodmap + deriv + detrend + dfdp + dftmtx + dhbar + dilate + dispatch + distance + dlmread + dlmwrite + dos + double + drawnow + durlev + dxfwrite + edge + edit + ellip + ellipdemo + ellipj + ellipke + ellipord + __ellip_ws + __ellip_ws_min + encode + eomday + erode + example + ExampleEigenValues + ExampleGenEigenValues + expdemo + expfit + eyediagram + factor + factorial + fail + fcnchk + feedback + fem_test + ff2n + fftconv2 + fieldnames + fill + fill3 + filter2 + filtfilt + filtic + findsym + fir1 + fir2 + fixedpoint + flag + flag_implicit_samplerate + flattopwin + flix + float + fmin + fminbnd + fmins + fminunc + fnder + fnplt + fnval + fplot + freqs + freqs_plot + fsort + fullfact + FullToBand + funm + fzero + gammaln + gapTest + gaussian + gausswin + gconv + gconvmtx + gdeconv + gdftmtx + gen2par + geomean + getfield + getfields + gfft + gftable + gfweight + gget + gifft + ginput + gmm_estimate + gmm_example + gmm_obj + gmm_results + gmm_variance + gmm_variance_inefficient + gquad + gquad2d + gquad2d6 + gquad2dgen + gquad6 + gquadnd + grace_octave_path + gradient + grayslice + grep + grid + griddata + groots + grpdelay + grule + grule2d + grule2dgen + hadamard + hammgen + hankel + hann + harmmean + hilbert + histeq + histfit + histo + histo2 + histo3 + histo4 + hot + hsv + hup + idct + idct2 + idplot + idsim + ifftshift + im2bw + im2col + imadjust + imginfo + imhist + imnoise + impad + impz + imread + imrotate + imshear + imtranslate + imwrite + innerfun + inputname + interp + interp1 + interp2 + interpft + intersect + invest0 + invest1 + invfdemo + invfreq + invfreqs + invfreqz + inz + irsa_act + irsa_actcore + irsa_check + irsa_dft + irsa_dftfp + irsa_genreal + irsa_idft + irsa_isregular + irsa_jitsp + irsa_mdsp + irsa_normalize + irsa_plotdft + irsa_resample + irsa_rgenreal + isa + isbw + isdir + isequal + isfield + isgray + isind + ismember + isprime + isrgb + issparse + isunix + jet + kaiser + kaiserord + lambertw + lattice + lauchli + leasqr + leasqrdemo + legend + legendre + levinson + lin2mu + line_min + lloyds + lookup + lookup_table + lpc + lp_test + mad + magic + makelut + MakeShears + map + mat2gray + mat2str + mdsmax + mean2 + medfilt2 + meshc + minimize + minpol + mkpp + mktheta + mle_estimate + mle_example + mle_obj + mle_results + mle_variance + modmap + mu2lin + mvaar + mvar + mvfilter + mvfreqz + myfeval + nanmax + nanmean + nanmedian + nanmin + nanstd + nansum + ncauer + nchoosek + ncrule + ndims + nelder_mead_min + newmark + nlfilter + nlnewmark + __nlnewmark_fcn__ + nmsmax + nonzeros + normplot + now + nrm + nthroot + nze + OCTAVE_FORGE_VERSION + ode23 + ode45 + ode78 + optimset + ordfilt2 + orient + pacf + padarray + parameterize + parcor + pareto + pascal + patch + pburg + pcg + pchip + pcolor + pcr + peaks + penddot + pendulum + perms + pie + pink + plot3 + __plt3__ + poly2ac + poly2ar + poly_2_ex + poly2mask + poly2rc + poly2sym + poly2th + polyarea + polyconf + polyder + polyderiv + polygcd + polystab + __power + ppval + prctile + prettyprint + prettyprint_c + primes + princomp + print + prism + proplan + pulstran + pwelch + pyulear + qaskdeco + qaskenco + qtdecomp + qtgetblk + qtsetblk + quad2dc + quad2dcgen + quad2dg + quad2dggen + quadc + quadg + quadl + quadndg + quantiz + quiver + rad2deg + rainbow + randerr + randint + randsrc + rat + rats + rc2ac + rc2ar + rc2poly + rceps + read_options + read_pdb + rectpuls + resample + rgb2gray + rk2fixed + rk4fixed + rk8fixed + rmfield + rmle + rmpath + roicolor + rosser + rotparams + rotv + rref + rsdecof + rsencof + rsgenpoly + samin_example + save_vrml + sbispec + scale_data + scatter + scatterplot + select_3D_points + selmo + setdiff + setfield + setfields + setxor + sftrans + sgolay + sgolayfilt + sinvest1 + slurp_file + sortrows + sound + soundsc + spdiags + specgram + speed + speye + spfun + sphcat + spline + splot + spones + sprand + sprandn + spring + spstats + spsum + sp_test + sptest + spvcat + spy + std2 + stem + str2double + strcmpi + stretchlim + strfind + strmatch + strncmp + strncmpi + strsort + strtok + strtoz + struct + strvcat + summer + sumskipnan + surf + surfc + sym2poly + symerr + symfsolve + tabulate + tar + temp_name + test + test_d2_min_1 + test_d2_min_2 + test_d2_min_3 + test_ellipj + test_fminunc_1 + testimio + test_inline_1 + test_min_1 + test_min_2 + test_min_3 + test_min_4 + test_minimize_1 + test_nelder_mead_min_1 + test_nelder_mead_min_2 + test_sncndn + test_struct + test_vmesh + test_vrml_faces + test_wpolyfit + text + textread + tf2zp + tfe + thfm + tics + toeplitz + toggle_grace_use + transpose + trapz + triang + tril + trimmean + tripuls + trisolve + triu + tsademo + tsearchdemo + ucp + uintlut + unique + unix + unmkpp + unscale_parameters + vec2mat + view + vmesh + voronoi + voronoin + vrml_arrow + vrml_Background + vrml_browse + vrml_cyl + vrml_demo_tutorial_1 + vrml_demo_tutorial_2 + vrml_demo_tutorial_3 + vrml_demo_tutorial_4 + vrml_ellipsoid + vrml_faces + vrml_flatten + vrml_frame + vrml_group + vrml_kill + vrml_lines + vrml_material + vrml_parallelogram + vrml_PointLight + vrml_points + vrml_select_points + vrml_surf + vrml_text + vrml_thick_surf + vrml_transfo + wavread + wavwrite + weekday + wgn + white + wilkinson + winter + wpolyfit + wpolyfitdemo + write_pdb + wsolve + xcorr + xcorr2 + xcov + xlsread + xmlwrite + y2res + zero_count + zoom + zp2tf + zplane + zscore + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/oors.xml b/src/data/extra/syntax-highlighting/syntax/oors.xml new file mode 100644 index 00000000..d28011ca --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/oors.xml @@ -0,0 +1,87 @@ + + + + + + allow + apply + backtrack + copy + condition + deny + extends + graph + if + else + linear + profile + rule + ruleset + search + unsafe + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/opal.xml b/src/data/extra/syntax-highlighting/syntax/opal.xml new file mode 100644 index 00000000..e390d13b --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/opal.xml @@ -0,0 +1,331 @@ + + + + + + + + ALL + AND + ANDIF + ANY + AS + ASSERT + AXM + COMPLETELY + DATA + DEF + DERIVE + DFD + DISCRIMINATORS + ELSE + EX + EXTERNAL + FI + FIX + FUN + IF + IMPLEMENTATION + IMPLIES + IMPORT + IN + INHERIT + INJECTIONS + INTERFACE + INTERNAL + LAW + LAZY + LEFTASSOC + LET + MODULE + NOT + ONLY + OR + ORIF + OTHERWISE + POST + PRE + PRED + PRIORITY + PROPERTIES + REALIZES + REQUIRE + RIGHTASSOC + SELECTORS + SIGNATURE + SORT + SPC + SPEC + SPECIFICATION + STRUCTURE + THE + THEN + THEORY + THM + TYPE + UNIQ + WHERE + + + aEntry + agent + align + anchor + ans + arg + arg1 + arg2 + array + arrowWhere + bag + bitmap + bool + bstree + byte + callback + canvasEditor + capStyle + channel + char + childstat + codom + codomFrom + codomTo + color + colorModel + com + composeOp + config + configCom + cursor + dArray + data + data1 + data11 + data2 + data21 + data3 + data31 + data4 + data41 + dataFrom + dataTo + defaultPrio + denotation + device + dist + distOut + dom + domFrom + domTo + drawing + dyn + emitter + env + event + eventInfo + file + filemode + filestat + filetype + first + first1 + first2 + first3 + fission + fmt + font + from + from1 + from2 + funct + group + groupid + heap + iconfig + image + in + inData + index + inode + input + int + inter + interdom + interpreter + iseq + items + joinStyle + justifyHow + long + manager + managerRequest + map + mapEntry + mark + mid + modifier + nat + natMap + OBJECT + option + orient + out + outData + output + packOp + pair + parser + permission + point + positionRequest + process + procstat + quad + range + real + regulator + rel + relief + res + res1 + res2 + result + role + sap + script + scroller + scrollView + scrollWindow + searchOpt + second + seekMode + selector + semaphor + seq + seqEntry + set + setEntry + short + sigaction + sighandler + sigmask + signal + size + sizeRequest + some + sreal + state + stateId + stateRequest + string + subrel + tag + textEditor + time + to + tree + triple + union + user + userid + version + view + void + wconfig + wconfigCom + wday + widget + window + wrapStyle + + + true + false + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + 15 + 16 + 17 + 18 + 19 + 20 + 21 + 22 + 23 + 24 + 25 + 26 + 27 + 28 + 29 + 30 + 31 + 32 + 64 + 128 + 256 + 512 + 1024 + 10000 + 100000 + 1000000 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/opencl.xml b/src/data/extra/syntax-highlighting/syntax/opencl.xml new file mode 100644 index 00000000..f18ac7fd --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/opencl.xml @@ -0,0 +1,260 @@ + + + + + + __constant + __global + __local + __private + __kernel + __read_only + __write_only + constant + global + local + private + kernel + read_only + write_only + break + case + continue + default + do + else + enum + for + goto + if + inline + return + sizeof + struct + switch + typedef + union + while + + + bool + uchar + uchar2 + uchar3 + uchar4 + uchar8 + uchar16 + char + char2 + char3 + char4 + char8 + char16 + const + double + double2 + double3 + double4 + double8 + double16 + event_t + float + float2 + float3 + float4 + float8 + float16 + half + half2 + half3 + half4 + half8 + half16 + image1d_t + image2d_t + image3d_t + uint + uint2 + uint3 + uint4 + uint8 + uint16 + int + int2 + int3 + int4 + int8 + int16 + ulong + ulong2 + ulong3 + ulong4 + ulong8 + ulong16 + long + long2 + long3 + long4 + long8 + long16 + restrict + sampler_t + ushort + ushort2 + ushort3 + ushort4 + ushort8 + ushort16 + short + short2 + short3 + short4 + short8 + short16 + signed + static + unsigned + void + volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/openscad.xml b/src/data/extra/syntax-highlighting/syntax/openscad.xml new file mode 100644 index 00000000..90028533 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/openscad.xml @@ -0,0 +1,173 @@ + + + + + + + + include + import + use + + + echo + for + intersection_for + if + else + module + function + + + + circle + square + polygon + text + + + + sphere + cube + cylinder + polyhedron + + + + translate + rotate + scale + resize + mirror + multmatrix + color + color + offset + hull + minkowski + + + + union + difference + intersection + + + + abs + sign + sin + cos + tan + acos + asin + atan + atan2 + floor + round + ceil + ln + len + let + log + pow + sqrt + exp + rands + min + max + + + + concat + lookup + str + chr + search + version + version_num + norm + cross + parent_module + + + + Generate + Conditions + Assignments + + + + linear_extrude + rotate_extrude + surface + projection + render + children + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/pango.xml b/src/data/extra/syntax-highlighting/syntax/pango.xml new file mode 100644 index 00000000..2a4f4208 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/pango.xml @@ -0,0 +1,160 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/pascal.xml b/src/data/extra/syntax-highlighting/syntax/pascal.xml new file mode 100644 index 00000000..54ae2668 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/pascal.xml @@ -0,0 +1,219 @@ + + + + + + and + array + asm + case + const + div + do + downto + else + file + for + function + goto + if + in + label + mod + nil + not + of + operator + or + packed + procedure + program + record + repeat + set + then + to + type + unit + until + uses + var + while + with + xor + + + at + automated + break + continue + dispinterface + dispose + exit + false + finalization + initialization + library + new + published + resourcestring + self + true + + + abstract + as + bindable + constructor + destructor + except + export + finally + import + implementation + inherited + inline + interface + is + module + on + only + otherwise + override + private + property + protected + public + read + qualified + raise + restricted + shl + shr + threadvar + try + virtual + write + + + Integer + Cardinal + ShortInt + SmallInt + LongInt + Int64 + Byte + Word + LongWord + DWord + QWord + Char + AnsiChar + WideChar + Boolean + ByteBool + WordBool + LongBool + Single + Double + Extended + Comp + Currency + Real + Real48 + String + ShortString + AnsiString + WideString + Pointer + Variant + File + Text + + + FIXME + TODO + NOTE + ### + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/perl.xml b/src/data/extra/syntax-highlighting/syntax/perl.xml new file mode 100644 index 00000000..0d193164 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/perl.xml @@ -0,0 +1,881 @@ + + + + + + + if + unless + else + elsif + while + until + for + each + foreach + next + last + break + continue + return + my + our + local + state + BEGIN + END + package + sub + do + given + when + default + __END__ + __DATA__ + __FILE__ + __LINE__ + __PACKAGE__ + + + = + != + ~= + += + -= + *= + /= + **= + |= + ||= + //= + &= + &&= + ?= + + + - + * + + % + || + // + && + | + & + < + << + > + >> + ^ + -> + => + . + , + ; + :: + \ + and + or + not + eq + ne + lt + gt + le + ge + cmp + + + abs + accept + alarm + atan2 + bind + binmode + bless + caller + chdir + chmod + chomp + chop + chown + chr + chroot + close + closedir + connect + cos + crypt + dbmclose + dbmopen + defined + delete + die + dump + endgrent + endhostent + endnetent + endprotoent + endpwent + endservent + eof + eval + exec + exists + exit + exp + fcntl + fileno + flock + fork + format + formline + getc + getgrent + getgrgid + getgrnam + gethostbyaddr + gethostbyname + gethostent + getlogin + getnetbyaddr + getnetbyname + getnetent + getpeername + getpgrp + getppid + getpriority + getprotobyname + getprotobynumber + getprotoent + getpwent + getpwnam + getpwuid + getservbyname + getservbyport + getservent + getsockname + getsockopt + glob + gmtime + goto + grep + hex + import + index + int + ioctl + join + keys + kill + last + lc + lcfirst + length + link + listen + localtime + lock + log + lstat + map + mkdir + msgctl + msgget + msgrcv + msgsnd + no + oct + open + opendir + ord + pack + package + pipe + pop + pos + print + printf + prototype + push + quotemeta + rand + read + readdir + readline + readlink + recv + redo + ref + rename + require + reset + return + reverse + rewinddir + rindex + rmdir + scalar + seek + seekdir + select + semctl + semget + semop + send + setgrent + sethostent + setnetent + setpgrp + setpriority + setprotoent + setpwent + setservent + setsockopt + shift + shmctl + shmget + shmread + shmwrite + shutdown + sin + sleep + socket + socketpair + sort + splice + split + sprintf + sqrt + srand + stat + study + sub + substr + symlink + syscall + sysread + sysseek + system + syswrite + tell + telldir + tie + time + times + truncate + uc + ucfirst + umask + undef + unlink + unpack + unshift + untie + use + utime + values + vec + wait + waitpid + wantarray + warn + write + + + strict + english + warnings + vars + subs + utf8 + sigtrap + locale + open + less + integer + filetest + constant + bytes + diagnostics + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/pgn.xml b/src/data/extra/syntax-highlighting/syntax/pgn.xml new file mode 100644 index 00000000..ee508df5 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/pgn.xml @@ -0,0 +1,108 @@ + + + + + Event + Site + Date + Round + White + Black + Result + ECO + Annotator + PlyCount + EventDate + EventCountry + SourceDate + WhiteTitle + BlackTitle + FM + IM + GM + WhiteElo + BlackElo + WhiteNA + BlackNA + WhiteType + BlackType + program + human + TimeControl + FEN + Termination + abandoned + adjudication + death + emergency + normal + rules + infraction + time + forfeit + unterminated + Mode + OTB + PM + EM + ICS + TC + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/php.xml b/src/data/extra/syntax-highlighting/syntax/php.xml new file mode 100644 index 00000000..35f65247 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/php.xml @@ -0,0 +1,11052 @@ + + + +]> + + diff --git a/src/data/extra/syntax-highlighting/syntax/picsrc.xml b/src/data/extra/syntax-highlighting/syntax/picsrc.xml new file mode 100644 index 00000000..a60c8901 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/picsrc.xml @@ -0,0 +1,401 @@ + + + + + + + + + + + __BADRAM + __CONFIG + __IDLOCS + __MAXRAM + + cblock + constant + da + data + db + de + dt + dw + endc + endm + equ + error + errorlevel + exitm + fill + list + local + macro + messg + noexpand + nolist + org + page + processor + radix + res + set + space + subtitle + title + variable + end + + CBLOCK + CONSTANT + DA + DATA + DB + DE + DT + DW + ENDC + ENDM + EQU + ERROR + ERRORLEVEL + EXITM + FILL + LIST + LOCAL + MACRO + MESSG + NOEXPAND + NOLIST + ORG + PAGE + PROCESSOR + RADIX + RES + SET + SPACE + SUBTITLE + TITLE + VARIABLE + END + + + + if + else + idef + ifndef + endif + while + include + endw + { + } + + + + addcf + b + clrc + clrz + setc + setz + movfw + skpc + skpz + skpnc + skpnz + subcf + tstf + + ADDCF + B + CLRC + CLRZ + SETC + SETZ + MOVFW + SKPC + SKPZ + SKPNC + SKPNZ + SUBCF + TSTF + + + + addlw + addwf + addwfc + andlw + andwf + bc + bcf + bn + bnc + bnov + bnz + bov + bra + bsf + btg + bz + btfsc + btfss + call + clrf + clrw + clrwdt + comf + cpfseq + cpfslt + cpfsgt + daw + decf + dcfsnz + decfsz + goto + incf + incfsz + infsnz + iorlw + iorwf + lfsr + movf + movff + movlb + movlw + movwf + mullw + mulwf + negf + nop + option + pop + push + rcall + reset + retfie + retlw + return + rlcf + rlf + rlncf + rrcf + rrf + rrncf + setf + sleep + subfwb + sublw + subwf + subwfb + swapf + tblrd + tblwt + tstfsz + xorlw + xorwf + + ADDLW + ADDWF + ADDWFC + ANDLW + ANDWF + BC + BCF + BN + BNC + BNOV + BNZ + BOV + BRA + BSF + BTG + BZ + BTFSC + BTFSS + CALL + CLRF + CLRW + CLRWDT + COMF + CPFSEQ + CPFSLT + CPFSGT + DAW + DCFSNZ + DECF + DECFSZ + GOTO + INCF + INCFSZ + INFSNZ + IORLW + IORWF + LFSR + MOVF + MOVFF + MOVLB + MOVLW + MOVWF + MULLW + MULWF + NEGF + NOP + OPTION + POP + PUSH + RCALL + RESET + RETFIE + RETLW + RETURN + RLCF + RLF + RLNCF + RRCF + RRF + RRNCF + SETF + SLEEP + SUBFWB + SUBLW + SUBWF + SUBWFB + SWAPF + TBLRD + TBLWT + TSTFSZ + XORLW + XORWF + + + + A + ACCESS + BANKED + W + F + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/pig.xml b/src/data/extra/syntax-highlighting/syntax/pig.xml new file mode 100644 index 00000000..fe2a6f15 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/pig.xml @@ -0,0 +1,205 @@ + + + + + + + load + store + filter + foreach + order + arrange + distinct + cogroup + join + cross + union + onschema + split + into + if + all + any + as + by + using + inner + outer + parallel + group + continuously + window + tuples + generate + eval + define + returns + input + output + ship + cache + stream + through + seconds + minutes + hours + asc + desc + null + left + right + full + + + cat + cd + cp + copyFromLocal + copyToLocal + define + dump + illustrate + describe + explain + exec + help + kill + ls + mv + mkdir + pwd + quit + register + import + rm + set + + + chararray + bytearray + int + long + float + double + tuple + bag + map + + + and + is + not + or + eq + neq + gt + lt + gte + lte + matches + + + flatten + sum + count + min + max + avg + arity + tokenize + diff + size + concat + BinStorage + PigStorage + TextLoader + PigDump + IsEmpty + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/pike.xml b/src/data/extra/syntax-highlighting/syntax/pike.xml new file mode 100644 index 00000000..5a111e26 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/pike.xml @@ -0,0 +1,121 @@ + + + + + + + break + case + class + continue + default + do + else + for + foreach + if + return + switch + while + + + array + float + function + int + mapping + mixed + multiset> + object + program + static + string + void + + + catch + gauge + sscanf + typeof + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/pli.xml b/src/data/extra/syntax-highlighting/syntax/pli.xml new file mode 100644 index 00000000..15148bc8 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/pli.xml @@ -0,0 +1,454 @@ + + + + + + ALIGNED + AUTOMATIC + BACKWARDS + BIN + BINARY + BIT + BUFFERED + BUILTIN + COMPLEX + CONDITION + CONNECTED + CONTROLLED + DEC + DECIMAL + DIRECT + EVENT + EXCLUSIVE + EXTERNAL + FILE + FIXED + FLOAT + INPUT + INTERNAL + IRREDUCIBLE + KEYED + LIKE + OUTPUT + POINTER + PRINT + REAL + RECORD + REDUCIBLE + SEQUENTIAL + STATIC + STREAM + TASK + TRANSIENT + UNALIGNED + UNBUFFERED + UPDATE + VARIABLE + VAR + VARYING + + + A + ABS + ACOS + ACTIVATE + ADD + ADDR + ALIGNED + ALL + ALLOCATE + ALLOCATION + ANY + AREA + ASIN + ASMTDLI + ASSEMBLER + ATAN + ATAND + ATANH + ATTENTION + AUTOMATIC + B + BACKWARDS + BASED + BEGIN + BINARY + BINARYVALUE + BIT + BOOL + BUFFERED + BUILTIN + BY + C + CALL + CEIL + CHAR + CHARACTER + CHARGRAPHIC + CHECK + CLOSE + COBOL + COL + COLUMN + COMPILE + COMPILETIME + COMPLETION + COMPLEX + CONDITION + CONJG + CONNECTED + CONTROLLED + CONVERSION + COPY + COS + COSD + COSH + COUNT + COUNTER + CURRENTSTORAGE + DATA + DATAFIELD + DATE + DATETIME + DCL + DEACTIVATE + DECIMAL + DECLARE + DEF + DEFAULT + DEFINED + DELAY + DELETE + DESCRIPTORS + DIM + DIRECT + DISPLAY + DIVIDE + DO + E + EDIT + ELSE + EMPTY + END + ENDFILE + ENDPAGE + ENTRY + ENTRYADDR + ENVIRONMENT + ERF + ERFC + ERROR + EVENT + EXCLUSIVE + EXIT + EXP + EXTERNAL + F + FETCH + FILE + FINISH + FIXED + FIXEDOVERFLOW + FLOAT + FLOOR + FORMAT + FORTRAN + FREE + FROM + G + GENERIC + GET + GET-STRING + GO + GOTO + GO_TO + GRAPHIC + HBOUND + HIGH + IF + IGNORE + IMAG + IN + %INCLUDE + INCLUDE + INDEX + INIT + INITIAL + INPUT + INTER + INTERNAL + INTO + IRREDUCIBLE + ITEM + KEY + KEYED + KEYFROM + KEYTO + LABEL + LBOUND + LEAVE + LENGTH + LIKE + LINE + LINENO + LINESIZE + LIST + LOCATE + LOG + LOG10 + LOG2 + LOW + MAIN + MAX + MIN + MPSTR + MULTIPLY + NAME + NOCHARGRAPHIC + NOEXECOPS + NOLOCK + NOMAP + NOMAPIN + NOMAPOUT + NOPRINT + NORESCAN + NOTE + NULL + OFFSET + ON + ONCHAR + ONCODE + ONCOUNT + ONFILE + ONKEY + ONLOC + ONSOURCE + OPEN + OPTIONS + ORDER + OTHERWISE + OUTPUT + OVERFLOW + P + PAGE + PAGESIZE + PARMSET + PENDING + PICTURE + PLICANC + PLICKPT + PLIDUMP + PLIREST + PLISRTA + PLISRTB + PLISRTC + PLISRTD + PLITDLI + PLITEST + POINTER + POINTERADD + POINTERVALUE + POLY + POS + POSITION + PRECISION + PRINT + PRIORITY + PROC + PROCEDURE + PROCESS + PROD + PUT + PUT-STRING + R + RANGE + READ + REAL + RECORD + RECURSIVE + REDUCIBLE + REENTRANT + REFER + RELEASE + REORDER + REPEAT + REPLY + REREAD + RESCAN + RETCODE + RETURN + RETURNS + REVERT + REWRITE_FILE + SAMEKEY + SELECT + SEQUENTIAL + SET + SIGN + SIGNAL + SIN + SIND + SINH + SIZE + SKIP + SNAP + SQRT + STATEMENT + STATIC + STATUS + STOP + STORAGE + STREAM + STRING + STRINGRANGE + STRINGSIZE + SUBSCRIPTRANGE + SUBSTR + SUM + SYSNULL + SYSTEM + TAN + TAND + TANH + TASK + THEN + TIME + TITLE + TO + TRANSIENT + TRANSLATE + TRANSMIT + TRUNC + UNALIGNED + UNBUFFERED + UNDEFINEDFILE + UNDERFLOW + UNLOCK + UNSPEC + UNTIL + UPDATE + VALUE + VARIABLE + VARYING + VERIFY + WAIT + WHEN + WHILE + WRITE + ZERODIVIDE + + + MOD + ROUND + PLIRETC + PLIRETV + ADDR + CEIL + DATETIME + INDEX + LENGTH + MAX + MOD + NULL + PLIRETC + PLIRETV + PLISRTD + ROUND + STG + SUBSTR + ONCODE + ONCONDCOND + ONCOUNT + ONFILE + ONLOC + ONSUBCODE + + + BIN + BINARY + BIT + BUILTIN + CHAR + CHARACTER + DEC + DECIMAL + ENTRY + FIXED + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/ply.xml b/src/data/extra/syntax-highlighting/syntax/ply.xml new file mode 100644 index 00000000..852f4b3b --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/ply.xml @@ -0,0 +1,54 @@ + + + + + + format + element + property + end_header + + + char + uchar + short + ushort + int + uint + float + double + list + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/pony.xml b/src/data/extra/syntax-highlighting/syntax/pony.xml new file mode 100644 index 00000000..43c24ae5 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/pony.xml @@ -0,0 +1,314 @@ + + + + + + + +]> + + + + + + type + interface + trait + primitive + struct + class + actor + + + fun + be + + + new + + + do + then + return + break + continue + error + compile_intrinsic + compile_error + recover + until + + + if + ifdef + iftype + match + while + repeat + for + with + try + + + else + elseif + elseiftype + + + end + + + and + or + xor + not + + + create + + + update + apply + add + sub + mul + div + mod + eq + ne + lt + le + ge + gt + shl + shr + op_and + op_or + op_xor + + + iso + trn + ref + val + box + tag + + + #read + #send + #share + #alias + #any + + + this + use + object + as + is + isnt + in + where + is + consume + addressof + digestof + + true + false + + var + let + embed + + + None + String + Bool + ISize + ILong + I8 + I16 + I32 + I64 + I128 + USize + ULong + U8 + U16 + U32 + U64 + U128 + F32 + F64 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/postscript.xml b/src/data/extra/syntax-highlighting/syntax/postscript.xml new file mode 100644 index 00000000..474167d3 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/postscript.xml @@ -0,0 +1,434 @@ + + + + + + abs + add + aload + anchorsearch + and + arc + arcn + arct + arcto + array + ashow + astore + awidthshow + begin + bind + bitshift + ceiling + charpath + clear + cleartomark + clip + clippath + closepath + concat + concatmatrix + copy + count + counttomark + currentcmykcolor + currentdash + currentdict + currentfile + currentfont + currentgray + currentgstate + currenthsbcolor + currentlinecap + currentlinejoin + currentlinewidth + currentmatrix + currentpoint + currentrgbcolor + currentshared + curveto + cvi + cvlit + cvn + cvr + cvrs + cvs + cvx + def + defineusername + dict + div + dtransform + dup + end + eoclip + eofill + eoviewclip + eq + exch + exec + exit + file + fill + findfont + flattenpath + floor + flush + flushfile + for + forall + ge + get + getinterval + grestore + gsave + gstate + gt + identmatrix + idiv + idtransform + if + ifelse + image + imagemask + index + ineofill + infill + initviewclip + inueofill + inufill + invertmatrix + itransform + known + le + length + lineto + load + loop + lt + makefont + matrix + maxlength + mod + moveto + mul + ne + neg + newpath + not + null + or + pathbbox + pathforall + pop + print + printobject + put + putinterval + rcurveto + read + readhexstring + readline + readstring + rectclip + rectfill + rectstroke + rectviewclip + repeat + restore + rlineto + rmoveto + roll + rotate + round + save + scale + scalefont + search + selectfont + setbbox + setcachedevice + setcachedevice2 + setcharwidth + setcmykcolor + setdash + setfont + setgray + setgstate + sethsbcolor + setlinecap + setlinejoin + setlinewidth + setmatrix + setrgbcolor + setshared + shareddict + show + showpage + stop + stopped + store + string + stringwidth + stroke + strokepath + sub + systemdict + token + transform + translate + truncate + type + uappend + ucache + ueofill + ufill + undef + upath + userdict + ustroke + viewclip + viewclippath + where + widthshow + write + writehexstring + writeobject + writestring + wtranslation + xor + xshow + xyshow + yshow + FontDirectory + SharedFontDirectory + Courier + Courier-Bold + Courier-BoldOblique + Courier-Oblique + Helvetica + Helvetica-Bold + Helvetica-BoldOblique + Helvetica-Oblique + Symbol + Times-Bold + Times-BoldItalic + Times-Italic + Times-Roman + execuserobject + currentcolor + currentcolorspace + currentglobal + execform + filter + findresource + globaldict + makepattern + setcolor + setcolorspace + setglobal + setpagedevice + setpattern + ISOLatin1Encoding + StandardEncoding + atan + banddevice + bytesavailable + cachestatus + closefile + colorimage + condition + copypage + cos + countdictstack + countexecstack + cshow + currentblackgeneration + currentcacheparams + currentcolorscreen + currentcolortransfer + currentcontext + currentflat + currenthalftone + currenthalftonephase + currentmiterlimit + currentobjectformat + currentpacking + currentscreen + currentstrokeadjust + currenttransfer + currentundercolorremoval + defaultmatrix + definefont + deletefile + detach + deviceinfo + dictstack + echo + erasepage + errordict + execstack + executeonly + exp + false + filenameforall + fileposition + fork + framedevice + grestoreall + handleerror + initclip + initgraphics + initmatrix + instroke + inustroke + join + kshow + ln + lock + log + mark + monitor + noaccess + notify + nulldevice + packedarray + quit + rand + rcheck + readonly + realtime + renamefile + renderbands + resetfile + reversepath + rootfont + rrand + run + scheck + setblackgeneration + setcachelimit + setcacheparams + setcolorscreen + setcolortransfer + setfileposition + setflat + sethalftone + sethalftonephase + setmiterlimit + setobjectformat + setpacking + setscreen + setstrokeadjust + settransfer + setucacheparams + setundercolorremoval + sin + sqrt + srand + stack + status + statusdict + true + ucachestatus + undefinefont + usertime + ustrokepath + version + vmreclaim + vmstatus + wait + wcheck + xcheck + yield + defineuserobject + undefineuserobject + UserObjects + cleardictstack + setvmthreshold + currentcolorrendering + currentdevparams + currentoverprint + currentpagedevice + currentsystemparams + currentuserparams + defineresource + findencoding + gcheck + glyphshow + languagelevel + product + pstack + resourceforall + resourcestatus + revision + serialnumber + setcolorrendering + setdevparams + setoverprint + setsystemparams + setuserparams + startjob + undefineresource + GlobalFontDirectory + ASCII85Decode + ASCII85Encode + ASCIIHexDecode + ASCIIHexEncode + CCITTFaxDecode + CCITTFaxEncode + DCTDecode + DCTEncode + LZWDecode + LZWEncode + NullEncode + RunLengthDecode + RunLengthEncode + SubFileDecode + CIEBasedA + CIEBasedABC + DeviceCMYK + DeviceGray + DeviceRGB + Indexed + Pattern + Separation + CIEBasedDEF + CIEBasedDEFG + DeviceN + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/povray.xml b/src/data/extra/syntax-highlighting/syntax/povray.xml new file mode 100644 index 00000000..152559a2 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/povray.xml @@ -0,0 +1,967 @@ + + + + + + + + + + + aa_threshold + aa_level + absorption + abs + accuracy + acosh + acos + adaptive + adc_bailout + agate + agate_turb + all_intersections + all + alpha + always_sample + altitude + ambient_light + ambient + angle + aperture + append + arc_angle + area_light + array + ascii + asc + asinh + asin + assumed_gamma + atan2 + atanh + atan + average + background + bezier_spline + bicubic_patch + black_hole + blob + blue + blur_samples + bounded_by + boxed + box + bozo + brick_size + brick + brightness + brilliance + bumps + bump_map + bump_size + b_spline + camera + caustics + ceil + cells + charset + checker + chr + circular + clipped_by + clock_delta + clock_on + clock + color_map + colour_map + color + colour + component + composite + concat + cone + confidence + conic_sweep + contained_by + control0 + control1 + coords + cosh + cos + count + crackle + crand + cube + cubic_spline + cubic + cubic_wave + cylinder + cylindrical + defined + degrees + density_file + density_map + density + dents + df3 + difference + diffuse + dimensions + dimension_size + direction + disc + dispersion + dispersion_samples + distance_maximum + distance + dist_exp + div + double_illuminate + eccentricity + emission + error_bound + evaluate + exp + exponent + exterior + extinction + facets + face_indices + fade_colour + fade_color + fade_distance + fade_power + falloff_angle + falloff + false + file_exists + shadowless + filter + final_clock + final_frame + finish + fisheye + flatness + flip + floor + focal_point + fog_alt + fog_offset + fog + fog_type + form + frame_number + frequency + fresnel + function + gif + global_settings + gradient + granite + gray + gray_threshold + green + height_field + hexagon + hf_gray_16 + hierarchy + hollow + hypercomplex + image_width + image_height + initial_clock + initial_frame + interior_texture + iff + image_map + image_pattern + inside + inside_vector + interior + interpolate + intersection + intervals + int + inverse + ior + irid + irid_wavelength + isosurface + jitter + julia + julia_fractal + jpeg + lambda + lathe + leopard + light_group + light_source + linear_spline + linear_sweep + ln + load_file + location + log + looks_like + look_at + low_error_factor + magnet + major_radius + mandel + map_type + marble + material_map + material + matrix + max_extent + max_gradient + max_intersections + max_iteration + max_sample + max + max_trace_level + max_trace + media_attenuation + media_interaction + media + merge + mesh2 + mesh + metallic + method + metric + minimum_reuse + min_extent + min + mod + mortar + natural_spline + nearest_count + normal + normal_indices + normal_map + normal_vectors + no_image + no_reflection + no_shadow + no + number_of_waves + object + octaves + offset + off + omega + omnimax + once + onion + on + open + orientation + orient + orthographic + panoramic + parallel + parametric + pattern + perspective + pgm + phase + phong_size + phong + pigment_map + pigment + pi + planar + plane + png + point_at + polygon + poly + poly_wave + pot + pow + ppm + precision + precompute + pretrace_start + pretrace_end + prism + prod + projected_through + pwr + quadratic_spline + quadric + quartic + quaternion + quick_color + quick_colour + quilted + radial + radians + radiosity + radius + rainbow + ramp_wave + rand + range + ratio + reciprocal + recursion_limit + red + reflection_exponent + reflection + refraction + repeat + rgbft + rgbf + rgbt + rgb + right + ripples + rotate + roughness + samples + save_file + scale + scallop_wave + scattering + seed + select + sine_wave + sinh + sin + size + sky_sphere + sky + slice + slope_map + slope + smooth + smooth_triangle + solid + sor + specular + sphere_sweep + sphere + spherical + spiral1 + spiral2 + spline + spotlight + spotted + sqrt + sqr + statistics + strcmp + strength + strlen + strlwr + strupr + str + sturm + substr + sum + superellipsoid + sys + tanh + tan + texture_list + texture_map + texture + text + tga + thickness + threshold + tiff + tightness + tile2 + tiles + normal + tolerance + toroidal + torus + trace + transform + translate + transmit + triangle + triangle_wave + true + ttf + turbulence + turb_depth + type + t + ultra_wide_angle + union + up + use_alpha + use_color + use_colour + use_index + utf8 + uv_indices + uv_mapping + uv_vectors + u_steps + u + val + variance + vaxis_rotate + vcross + vdot + vertex_vectors + vlength + vnormalize + vrotate + vstr + vturbulence + v_steps + v + warning + warp + water_level + waves + while + width + wood + wrinkles + write + x + yes + y + z + photons + steps + pass_through + collect + autostop + gather + split_union + expand_thresholds + spacing + global + target + conserve_energy + cutaway_textures + pigment_pattern + no_bump_scale + global_lights + internal + noise_generator + + + akima_spline + aoi + basic_x_spline + camera_view + displace + exposure + exposure_gain + extended_x_spline + float + frame_step + date + start_chrono + current_chrono + general_x_spline + glow + h_align_left + h_align_right + h_align_center + v_align_top + v_align_bottom + v_align_center + inverted_normals + is + listed + mpeg + n_roots + noise_pigment + output_filename + post_process + projection + point + blur + set + sor_spline + string + structure + tcb_spline + tension + continuity + bias + user_defined + vector + unofficial_version + gravity + environment + friction + damping + simcloth + wind + neighbors + neighbours + internal_collision + viscosity + iterations + input + mesh_output + smooth_mesh + uv_mesh + output + stiffness + topology + mass + connection + face + velocity + position + mass_count + connection_count + face_count + index1 + index2 + index3 + time + time_step + step_count + start_time + end_time + fixed + collision + interaction + group + attach + field + mechsim + bounding + viscoelastic + viscoelastic_count + element + length + force + message + weight + randomize + hdr + no_radiosity + motion_blur + tone_mapping + show_samples + show_low_count + + + bicubic_patch + blob + box + cone + cubic + cylinder + difference + disc + height_field + intersection + isosurface + julia_fractal + lathe + light_source + merge + mesh + mesh2 + object + parametric + plane + poly + polygon + prism + quadric + quartic + smooth_triangle + sor + sphere + sphere_sweep + superellipsoid + text + torus + triangle + union + + + aa_threshold + aa_level + absorption + agate + agate_turb + ambient + average + black_hole + blue + boxed + brick_size + brick + brilliance + bumps + bump_map + bump_size + caustics + cells + checker + color_map + colour_map + color + colour + conserve_energy + control0 + control1 + crackle + crand + cubic_wave + cylindrical + density_file + density_map + density + dents + diffuse + dist_exp + double_illuminate + eccentricity + emission + exponent + exterior + extinction + facets + fade_colour + fade_color + fade_distance + fade_power + filter + finish + form + frequency + fresnel + gradient + granite + gray + green + hexagon + hypercomplex + interior_texture + image_map + image_pattern + interior + interpolate + intervals + ior + irid + irid_wavelength + julia + lambda + leopard + magnet + mandel + map_type + marble + material_map + material + media + metallic + method + metric + mortar + normal + normal_map + number_of_waves + octaves + omega + once + onion + orientation + phase + phong_size + phong + pigment_map + pigment + planar + quaternion + quick_color + quick_colour + quilted + radial + ramp_wave + red + reflection_exponent + reflection + repeat + rgbft + rgbf + rgbt + rgb + ripples + roughness + samples + scallop_wave + scattering + sine_wave + slope_map + slope + solid + specular + spherical + spiral1 + spiral2 + spotted + texture_list + texture_map + texture + tile2 + tiles + normal + toroidal + transmit + triangle_wave + turbulence + turb_depth + use_alpha + use_color + use_colour + use_index + uv_mapping + warp + waves + wood + wrinkles + cutaway_textures + pigment_pattern + no_bump_scale + + + matrix + rotate + scale + translate + transform + + + df3 + gif + iff + jpeg + pgm + png + pot + ppm + tga + tiff + ttf + + + clock + clock_delta + clock_on + final_clock + final_frame + frame_number + image_height + image_width + initial_clock + initial_frame + t + u + v + x + y + z + + + false + no + off + on + pi + true + yes + + + abs + acos + acosh + asc + asin + asinh + atan + atan2 + atanh + ceil + chr + concat + cos + cosh + cube + defined + degress + dimension_size + dimensions + div + exp + file_exists + floor + inside + int + ln + log + max + min + mod + pow + prod + pwr + radians + rand + seed + select + sin + sinh + sqrt + str + strcmp + strlen + strlwr + strupr + substr + sum + tan + tanh + trace + val + vaxis_rotate + vcross + vdot + vlength + vnormalize + vrotate + vstr + vturbulence + + + #debug + #default + #else + #end + #error + #fclose + #fopen + #if + #ifdef + #ifndef + #include + #range + #read + #render + #statistics + #switch + #undef + #version + #warning + #while + #write + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/powershell.xml b/src/data/extra/syntax-highlighting/syntax/powershell.xml new file mode 100644 index 00000000..8208fd7a --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/powershell.xml @@ -0,0 +1,934 @@ + + + + + Begin + Exit + Process + Break + Filter + Return + Catch + Finally + Sequence + Class + For + Switch + Continue + ForEach + Throw + Data + From + Trap + Define + Function + Try + Do + If + Until + DynamicParam + In + Using + Else + InlineScript + Var + ElseIf + Parallel + While + End + Param + Workflow + + + + bool + byte + char + decimal + double + float + int + long + object + sbyte + short + string + switch + uint + ulong + ushort + + + + Add-Content + Add-ADComputerServiceAccount + Add-ADDomainControllerPasswordReplicationPolicy + Add-ADFineGrainedPasswordPolicySubject + Add-ADGroupMember + Add-ADPrincipalGroupMembership + Add-BitsFile + Add-ClusterDisk + Add-ClusterFileServerRole + Add-ClusterGenericApplicationRole + Add-ClusterGenericScriptRole + Add-ClusterGenericServiceRole + Add-ClusterGroup + Add-ClusterNode + Add-ClusterPrintServerRole + Add-ClusterResource + Add-ClusterResourceDependency + Add-ClusterResourceType + Add-ClusterServerRole + Add-ClusterSharedVolume + Add-ClusterVirtualMachineRole + Add-Computer + Add-Content + Add-History + Add-JobTrigger + Add-Member + Add-NlbClusterNode + Add-NlbClusterNodeDip + Add-NlbClusterPortRule + Add-NlbClusterVip + Add-PSSnapin + Add-Type + Backup-GPO + Block-ClusterAccess + Checkpoint-Computer + Clear-ADAccountExpiration + Clear-ClusterDiskReservation + Clear-ClusterNode + Clear-Content + Clear-EventLog + Clear-History + Clear-Item + Clear-ItemProperty + Clear-RecycleBin + Clear-Variable + Compare-Object + Complete-BitsTransfer + Complete-Transaction + Connect-PSSession + Connect-WSMan + ConvertFrom-Csv + ConvertFrom-Json + ConvertFrom-SecureString + ConvertFrom-String + ConvertFrom-StringData + Convert-Path + Convert-String + ConvertTo-Csv + ConvertTo-Html + ConvertTo-Json + ConvertTo-SecureString + ConvertTo-Xml + Copy-GPO + Copy-Item + Copy-ItemProperty + Debug-Job + Debug-Process + Debug-Runspace + Disable-ADAccount + Disable-ADOptionalFeature + Disable-ComputerRestore + Disable-JobTrigger + Disable-NlbClusterPortRule + Disable-PSBreakpoint + Disable-PSRemoting + Disable-PSSessionConfiguration + Disable-RunspaceDebug + Disable-ScheduledJob + Disable-WSManCredSSP + Disconnect-PSSession + Disconnect-WSMan + Enable-ADAccount + Enable-ADOptionalFeature + Enable-ComputerRestore + Enable-JobTrigger + Enable-NlbClusterPortRule + Enable-PSBreakpoint + Enable-PSRemoting + Enable-PSSessionConfiguration + Enable-RunspaceDebug + Enable-ScheduledJob + Enable-WSManCredSSP + Enter-PSHostProcess + Enter-PSSession + Exit-PSHostProcess + Exit-PSSession + Export-Alias + Export-BinaryMiLog + Export-Clixml + Export-Console + Export-Counter + Export-Csv + Export-FormatData + Export-ModuleMember + Export-PSSession + Find-Package + Find-PackageProvider + ForEach-Object + Format-Custom + Format-List + Format-Table + Format-Wide + Get-Acl + Get-ADAccountAuthorizationGroup + Get-ADAccountResultantPasswordReplicationPolicy + Get-ADComputer + Get-ADComputerServiceAccount + Get-ADDefaultDomainPasswordPolicy + Get-ADDomain + Get-ADDomainController + Get-ADDomainControllerPasswordReplicationPolicy + Get-ADDomainControllerPasswordReplicationPolicyUsage + Get-ADFineGrainedPasswordPolicy + Get-ADFineGrainedPasswordPolicySubject + Get-ADForest + Get-ADGroup + Get-ADGroupMember + Get-ADObject + Get-ADOptionalFeature + Get-ADOrganizationalUnit + Get-ADPrincipalGroupMembership + Get-ADRootDSE + Get-ADServiceAccount + Get-ADUser + Get-ADUserResultantPasswordPolicy + Get-Alias + Get-AppLockerFileInformation + Get-AppLockerPolicy + Get-AuthenticodeSignature + Get-BitsTransfer + Get-ChildItem + Get-CimAssociatedInstance + Get-CimClass + Get-CimInstance + Get-CimSession + Get-Clipboard + Get-Cluster + Get-ClusterAccess + Get-ClusterAvailableDisk + Get-ClusterGroup + Get-ClusterLog + Get-ClusterNetwork + Get-ClusterNetworkInterfac + Get-ClusterNode + Get-ClusterOwnerNode + Get-ClusterParameter + Get-ClusterQuorum + Get-ClusterResource + Get-ClusterResourceDependency + Get-ClusterResourceDependencyReport + Get-ClusterResourceType + Get-ClusterSharedVolume + Get-CmsMessage + Get-Command + Get-ComputerRestorePoint + Get-Content + Get-ControlPanelItem + Get-Counter + Get-Credential + Get-Culture + Get-Date + Get-Event + Get-EventLog + Get-EventSubscriber + Get-ExecutionPolicy + Get-FormatData + Get-GPInheritance + Get-GPO + Get-GPOReport + Get-GPPermissions + Get-GPPrefRegistryValue + Get-GPRegistryValue + Get-GPResultantSetOfPolicy + Get-GPStarterGPO + Get-Help + Get-History + Get-Host + Get-HotFix + Get-Item + Get-ItemProperty + Get-ItemPropertyValue + Get-Job + Get-JobTrigger + Get-Location + Get-Member + Get-Module + Get-NlbCluster + Get-NlbClusterDriverInfo + Get-NlbClusterNode + Get-NlbClusterNodeDip + Get-NlbClusterNodeNetworkInterface + Get-NlbClusterPortRule + Get-NlbClusterVip + Get-Package + Get-PackageProvider + Get-PackageSource + Get-PfxCertificate + Get-Process + Get-PSBreakpoint + Get-PSCallStack + Get-PSDrive + Get-PSHostProcessInfo + Get-PSProvider + Get-PSReadlineKeyHandler + Get-PSReadlineOption + Get-PSSession + Get-PSSessionCapability + Get-PSSessionConfiguration + Get-PSSnapin + Get-Random + Get-Runspace + Get-RunspaceDebug + Get-ScheduledJob + Get-ScheduledJobOption + Get-Service + Get-TraceSource + Get-Transaction + Get-TroubleshootingPack + Get-TypeData + Get-UICulture + Get-Unique + Get-Variable + Get-WinEvent + Get-WmiObject + Get-WSManCredSSP + Get-WSManInstance + Grant-ClusterAccess + Group-Object + Import-Alias + Import-BinaryMiLog + Import-Clixml + Import-Counter + Import-Csv + Import-GPO + Import-LocalizedData + Import-Module + Import-PackageProvider + Import-PSSession + Install-ADServiceAccount + Install-Package + Install-PackageProvider + Invoke-CimMethod + Invoke-Command + Invoke-DscResource + Invoke-Expression + Invoke-History + Invoke-Item + Invoke-RestMethod + Invoke-TroubleshootingPack + Invoke-WebRequest + Invoke-WmiMethod + Invoke-WSManAction + Join-Path + Limit-EventLog + Measure-Command + Measure-Object + Move-ADDirectoryServer + Move-ADDirectoryServerOperationMasterRole + Move-ADObject + Move-ClusterGroup + Move-ClusterResource + Move-ClusterSharedVolume + Move-ClusterVirtualMachineRole + Move-Item + Move-ItemProperty + New-ADComputer + New-ADFineGrainedPasswordPolicy + New-ADGroup + New-ADObject + New-ADOrganizationalUnit + New-ADServiceAccount + New-ADUser + New-Alias + New-AppLockerPolicy + New-CimInstance + New-CimSession + New-CimSessionOption + New-Cluster + New-Event + New-EventLog + New-GPLink + New-GPO + New-GPStarterGPO + New-Item + New-ItemProperty + New-JobTrigger + New-Module + New-ModuleManifest + New-NlbCluster + New-NlbClusterIpv6Address + New-Object + New-PSDrive + New-PSRoleCapabilityFile + New-PSSession + New-PSSessionConfigurationFile + New-PSSessionOption + New-PSTransportOption + New-PSWorkflowExecutionOption + New-ScheduledJobOption + New-Service + New-TimeSpan + New-Variable + New-WebServiceProxy + New-WinEvent + New-WSManInstance + New-WSManSessionOption + Out-Default + Out-File + Out-GridView + Out-Host + Out-Null + Out-Printer + Out-String + Pop-Location + Protect-CmsMessage + Publish-DscConfiguration + Push-Location + Read-Host + Receive-Job + Receive-PSSession + Register-ArgumentCompleter + Register-CimIndicationEvent + Register-EngineEvent + Register-ObjectEvent + Register-PackageSource + Register-PSSessionConfiguration + Register-ScheduledJob + Register-WmiEvent + Remove-ADComputer + Remove-ADComputerServiceAccount + Remove-ADDomainControllerPasswordReplicationPolicy + Remove-ADFineGrainedPasswordPolicy + Remove-ADFineGrainedPasswordPolicySubject + Remove-ADGroup + Remove-ADGroupMember + Remove-ADObject + Remove-ADOrganizationalUnit + Remove-ADPrincipalGroupMembership + Remove-ADServiceAccount + Remove-ADUser + Remove-BitsTransfer + Remove-CimInstance + Remove-CimSession + Remove-Cluster + Remove-ClusterAccess + Remove-ClusterGroup + Remove-ClusterNode + Remove-ClusterResource + Remove-ClusterResourceDependency + Remove-ClusterResourceType + Remove-ClusterSharedVolume + Remove-Computer + Remove-Event + Remove-EventLog + Remove-GPLink + Remove-GPO + Remove-GPPrefRegistryValue + Remove-GPRegistryValue + Remove-Item + Remove-ItemProperty + Remove-Job + Remove-JobTrigger + Remove-Module + Remove-NlbCluster + Remove-NlbClusterNode + Remove-NlbClusterNodeDip + Remove-NlbClusterPortRule + Remove-NlbClusterVip + Remove-PSBreakpoint + Remove-PSDrive + Remove-PSReadlineKeyHandler + Remove-PSSession + Remove-PSSnapin + Remove-TypeData + Remove-Variable + Remove-WmiObject + Remove-WSManInstance + Rename-ADObject + Rename-Computer + Rename-GPO + Rename-Item + Rename-ItemProperty + Repair-ClusterSharedVolume + Reset-ADServiceAccountPassword + Reset-ComputerMachinePassword + Resolve-Path + Restart-Computer + Restart-Service + Restore-ADObject + Restore-Computer + Restore-GPO + Resume-BitsTransfer + Resume-ClusterNode + Resume-ClusterResource + Resume-Job + Resume-NlbCluster + Resume-NlbClusterNode + Resume-Service + Save-Help + Save-Package + Search-ADAccount + Select-Object + Select-String + Select-Xml + Send-MailMessage + Set-Acl + Set-ADAccountControl + Set-ADAccountExpiration + Set-ADAccountPassword + Set-ADComputer + Set-ADDefaultDomainPasswordPolicy + Set-ADDomain + Set-ADDomainMode + Set-ADFineGrainedPasswordPolicy + Set-ADForest + Set-ADForestMode + Set-ADGroup + Set-ADObject + Set-ADOrganizationalUnit + Set-ADServiceAccount + Set-ADUser + Set-Alias + Set-AppLockerPolicy + Set-AuthenticodeSignature + Set-BitsTransfer + Set-CimInstance + Set-Clipboard + Set-ClusterLog + Set-ClusterOwnerNode + Set-ClusterParameter + Set-ClusterQuorum + Set-ClusterResourceDependency + Set-Content + Set-Date + Set-DscLocalConfigurationManager + Set-ExecutionPolicy + Set-GPInheritance + Set-GPLink + Set-GPPermissions + Set-GPPrefRegistryValue + Set-GPRegistryValue + Set-Item + Set-ItemProperty + Set-JobTrigger + Set-Location + Set-NlbCluster + Set-NlbClusterNode + Set-NlbClusterNodeDip + Set-NlbClusterPortRule + Set-NlbClusterPortRuleNodeHandlingPriority + Set-NlbClusterPortRuleNodeWeight + Set-NlbClusterVip + Set-PackageSource + Set-PSBreakpoint + Set-PSDebug + Set-PSReadlineKeyHandler + Set-PSReadlineOption + Set-PSSessionConfiguration + Set-ScheduledJob + Set-ScheduledJobOption + Set-Service + Set-StrictMode + Set-TraceSource + Set-Variable + Set-WmiInstance + Set-WSManInstance + Set-WSManQuickConfig + Show-Command + Show-ControlPanelItem + Show-EventLog + Sort-Object + Split-Path + Start-BitsTransfer + Start-Cluster + Start-ClusterGroup + Start-ClusterNode + Start-ClusterResource + Start-DscConfiguration + Start-Job + Start-NlbCluster + Start-NlbClusterNode + Start-Process + Start-Service + Start-Sleep + Start-Transaction + Start-Transcript + Stop-Cluster + Stop-ClusterGroup + Stop-ClusterNode + Stop-ClusterResource + Stop-Computer + Stop-Job + Stop-NlbCluster + Stop-NlbClusterNode + Stop-Process + Stop-Service + Stop-Transcript + Suspend-BitsTransfer + Suspend-ClusterNode + Suspend-ClusterResource + Suspend-Job + Suspend-NlbCluster + Suspend-NlbClusterNode + Suspend-Service + Tee-Object + Test-AppLockerPolicy + Test-Cluster + Test-ClusterResourceFailure + Test-ComputerSecureChannel + Test-Connection + Test-DscConfiguration + Test-ModuleManifest + Test-Path + Test-PSSessionConfigurationFile + Test-WSMan + Trace-Command + Unblock-File + Undo-Transaction + Uninstall-ADServiceAccount + Uninstall-Package + Unlock-ADAccount + Unprotect-CmsMessage + Unregister-Event + Unregister-PackageSource + Unregister-PSSessionConfiguration + Unregister-ScheduledJob + Update-ClusterIPResource + Update-ClusterVirtualMachineConfiguration + Update-FormatData + Update-Help + Update-List + Update-TypeData + Use-Transaction + Wait-Debugger + Wait-Event + Wait-Job + Wait-Process + Where-Object + Write-Debug + Write-Error + Write-EventLog + Write-Host + Write-Information + Write-Output + Write-Progress + Write-Verbose + Write-Warning + ac + asnp + cat + cd + chdir + clc + clear + clhy + cli + clp + cls + clv + cnsn + compare + copy + cp + cpi + cpp + curl + cvpa + dbp + del + diff + dir + dnsn + ebp + echo + epal + epcsv + epsn + erase + etsn + exsn + fc + fl + foreach + ft + fw + gal + gbp + gc + gci + gcm + gcs + gdr + ghy + gi + gjb + gl + gm + gmo + gp + gps + group + gsn + gsnp + gsv + gu + gv + gwmi + h + history + icm + iex + ihy + ii + ipal + ipcsv + ipmo + ipsn + irm + ise + iwmi + iwr + kill + lp + ls + man + md + measure + mi + mount + move + mp + mv + nal + ndr + ni + nmo + npssc + nsn + nv + ogv + oh + popd + ps + pushd + pwd + r + rbp + rcjb + rcsn + rd + rdr + ren + ri + rjb + rm + rmdir + rmo + rni + rnp + rp + rsn + rsnp + rujb + rv + rvpa + rwmi + sajb + sal + saps + sasv + sbp + sc + select + set + shcm + si + sl + sleep + sls + sort + sp + spjb + spps + spsv + start + sujb + sv + swmi + tee + trcm + type + wget + where + wjb + write + \% + \? + + + $_ + $True + $False + $Env + $Null + $^ + $$ + $? + $input + $foreach + $args + $switch + $matches + $LastExitCode + $Error + $StackTrace + $HOME + $PsHome + $ConsoleFileName + $PWD + $ShellId + $Profile + $Host + $OFS + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/ppd.xml b/src/data/extra/syntax-highlighting/syntax/ppd.xml new file mode 100644 index 00000000..a0495128 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/ppd.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/praat.xml b/src/data/extra/syntax-highlighting/syntax/praat.xml new file mode 100644 index 00000000..a10219d5 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/praat.xml @@ -0,0 +1,510 @@ + + +]> + + + + + assert + clearinfo + demo + elif + else + elsif + from + minus + nocheck + noprogress + nowarn + plus + select + stopwatch + then + to + + + backslashTrigraphsToUnicode$ + chooseDirectory$ + chooseReadFile$ + chooseWriteFile$ + date$ + demoKey$ + do$ + environment$ + extractLine$ + extractWord$ + fixed$ + info$ + left$ + mid$ + percent$ + readFile$ + replace$ + replace_regex$ + right$ + selected$ + string$ + + + abs + appendFile + appendFileLine + appendInfo + appendInfoLine + arccos + arccosh + arcsin + arcsinh + arctan + arctan2 + arctanh + barkToHertz + beginPause + beginSendPraat + besselI + besselK + beta + beta2 + binomialP + binomialQ + boolean + ceiling + chiSquareP + chiSquareQ + choice + comment + cos + cosh + createDirectory + deleteFile + demoClicked + demoClickedIn + demoCommandKeyPressed + demoExtraControlKeyPressed + demoInput + demoKeyPressed + demoOptionKeyPressed + demoShiftKeyPressed + demoShow + demoWaitForInput + demoWindowTitle + demoX + demoY + differenceLimensToPhon + do + editor + endPause + endSendPraat + endsWith + erb + erbToHertz + erf + erfc + exitScript + exp + extractNumber + fileReadable + fisherP + fisherQ + floor + gaussP + gaussQ + hash + hertzToBark + hertzToErb + hertzToMel + hertzToSemitones + imax + imin + incompleteBeta + incompleteGammaP + index + index_regex + integer + invBinomialP + invBinomialQ + invChiSquareQ + invFisherQ + invGaussQ + invSigmoid + invStudentQ + length + ln + lnBeta + lnGamma + log10 + log2 + max + melToHertz + min + minusObject + natural + number + numberOfColumns + numberOfRows + numberOfSelected + objectsAreIdentical + option + optionMenu + pauseScript + phonToDifferenceLimens + plusObject + positive + randomBinomial + randomGauss + randomInteger + randomPoisson + randomUniform + real + readFile + removeObject + rindex + rindex_regex + round + runScript + runSystem + runSystem_nocheck + selectObject + selected + semitonesToHertz + sentence + sentencetext + sigmoid + sin + sinc + sincpi + sinh + soundPressureToPhon + sqrt + startsWith + studentP + studentQ + tan + tanh + text + variableExists + word + writeFile + writeFileLine + writeInfo + writeInfoLine + + + linear# + randomGauss# + randomInteger# + randomUniform# + zero# + + + all + average + e + left + macintosh + mono + pi + praatVersion + right + stereo + undefined + unix + windows + + + praatVersion$ + tab$ + shellDirectory$ + homeDirectory$ + preferencesDirectory$ + newline$ + temporaryDirectory$ + defaultDirectory$ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/progress.xml b/src/data/extra/syntax-highlighting/syntax/progress.xml new file mode 100644 index 00000000..c467ae17 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/progress.xml @@ -0,0 +1,1707 @@ + + + + + + + + CHAR + CHARACTER + COM-HANDLE + DECI + DECIMAL + DATE + INTE + INTEGER + ROWID + RECID + LOGI + LONGCHAR + LOGICAL + HANDLE + WIDGET-HANDLE + RAW + LONG + BYTE + SHORT + BLOB + UNSIGNED-SHORT + FLOAT + DOUBLE + CLOB + LONGCHAR + DATETIME + DATETIME-TZ + TEMP-TABLE + DATASET + DATASET-HANDLE + BUFFER + STREAM + SAX-WRITER + MEMPTR + + + + AND + OR + NOT + BEGINS + MATCHES + MODULO + EQ + NE + LT + GT + GE + LE + FALSE + TRUE + YES + NO + + + + OUT + BATCH-MODE + FILE-NAME + GLOBAL-DEFINE + LINE-NUMBER + OPSYS + ENDIF + SCOPED-DEFINE + SEQUENCE + UNDEFINE + WINDOW-SYSTEM + ANALYZE-RESUME + ANALYZE-SUSPEND + WEBSTREAM + + + + VOID + IMPLEMENTS + OVERRIDE + FINAL + INHERITS + AS + WORD-INDEX + LIKE + ALERT-BOX + AT + COLOR + COMBO-BOX + EDITOR + FORMAT + FRAME + IMAGE + ENDKEY + ERROR + QUIT + STOP + PRESELECT + QUERY-TUNING + RADIO-SET + RECORD + SELECTION-LIST + SIZE + SLIDER + TRIGGER + WIDGET + VIEW-AS + NO-UNDO + NO-ERROR + OUT + WHERE + GLOBAL + SHARED + DEFINED + EXCLUSIVE-LOCK + SHARE-LOCK + NO-LOCK + EACH + FIRST + PREV + LAST + SKIP + FORWARD + UNIQUE + UNFORMATTED + APPEND + IN + OF + BEFORE-HIDE + NO-BOX + NO-UNDERLINE + KEEP-TAB-ORDER + UNBUFFERED + BINARY + NO-CONVERT + CONVERT + TARGET + NO-FILL + BY + NO-LABEL + GROUP + BREAK + COLON-ALIGNED + WITH + NO-LABELS + NO-PAUSE + NO-MESSAGE + NO-ECHO + NO-MAP + PRIVATE + PUBLIC + PROTECTED + + + + ROW-UPDATE + VALID-OBJECT + TYPE-OF + CAST + AUDIT-ENABLED + GENERATE-UUID + GUID + HEX-DECODE + HEX-ENCODE + SET-DB-CLIENT + output-content-type + get-value + get-cgi + get-field + html-encode + url-encode + ABSOLUTE + ACCUM + ADD-INTERVAL + ALIAS + AMBIGUOUS + ASC + AVAILABLE + BASE64-DECODE + BASE64-ENCODE + CAN-DO + CAN-FIND + CAN-QUERY + CAN-SET + CAPS + CHR + CODEPAGE-CONVERT + COMPARE + CONNECTED + COUNT-OF + CURRENT-CHANGED + CURRENT-LANGUAGE + CURRENT-RESULT-ROW + CURRENT-VALUE + DATASERVERS + DATA-SOURCE-MODIFIED + DATE + DATETIME + DATETIME-TZ + DAY + DBCODEPAGE + DBCOLLATION + DBNAME + DBPARAM + DBRESTRICTIONS + DBTASKID + DBTYPE + DBVERSION + DECIMAL + DECRYPT + DYNAMIC-CURRENT-VALUE + DYNAMIC-FUNCTION + DYNAMIC-NEXT-VALUE + ENCODE + ENCRYPT + ENTERED + ENTRY + ERROR + ETIME + EXP + EXTENT + FILL + FIRST + FIRST-OF + FIX-CODEPAGE + FRAME-COL + FRAME-DB + FRAME-DOWN + FRAME-FIELD + FRAME-FILE + FRAME-INDEX + FRAME-LINE + FRAME-NAME + FRAME-ROW + FRAME-VALUE + GENERATE-PBE-KEY + GENERATE-PBE-SALT + GENERATE-RANDOM-KEY + GET-BITS + GET-BYTE + GET-BYTE-ORDER + GET-BYTES + GET-CODEPAGE + GET-CODEPAGES + GET-COLLATION + GET-COLLATIONS + GET-DOUBLE + GET-FLOAT + GET-LONG + GET-POINTER-VALUE + GET-SHORT + GET-SIZE + GET-STRING + GET-UNSIGNED-SHORT + INDEX + INTEGER + INTERVAL + IS-CODEPAGE-FIXED + IS-COLUMN-CODEPAGE + IS-LEAD-BYTE + ISO-DATE + KBLABEL + KEYCODE + KEYFUNCTION + KEYLABEL + KEYWORD + KEYWORD-ALL + LAST + LASTKEY + LAST-OF + LC + LDBNAME + LEFT-TRIM + LENGTH + LIBRARY + LINE-COUNTER + LIST-EVENTS + LIST-QUERY-ATTRS + LIST-SET-ATTRS + LIST-WIDGETS + LOCKED + LOG + LOGICAL + LOOKUP + MAXIMUM + MD5-DIGEST + MEMBER + MESSAGE-LINES + MINIMUM + MONTH + MTIME + NEW + NEXT-VALUE + NORMALIZE + NOT + NOW + NUM-ALIASES + NUM-DBS + NUM-ENTRIES + NUM-RESULTS + OPSYS + OS-DRIVES + OS-ERROR + OS-GETENV + PAGE-NUMBER + PAGE-SIZE + PDBNAME + PROC-HANDLE + PROC-STATUS + PROGRAM-NAME + PROGRESS + PROMSGS + PROPATH + PROVERSION + QUERY-OFF-END + QUOTER + RANDOM + RAW + RECID + RECORD-LENGTH + REJECTED + REPLACE + RETRY + RETURN-VALUE + RGB-VALUE + RIGHT-TRIM + R-INDEX + ROUND + ROWID + ROW-STATE + SCREEN-LINES + SDBNAME + SEARCH + SEEK + SETUSERID + SHA1-DIGEST + SQRT + SSL-SERVER-NAME + STRING + SUBSTITUTE + SUBSTRING + SUPER + TERMINAL + TIME + TIMEZONE + TODAY + TO-ROWID + TRANSACTION + TRIM + TRUNCATE + USERID + VALID-EVENT + VALID-HANDLE + WEEKDAY + WIDGET-HANDLE + YEAR + + + + IF + THEN + ELSE + WHEN + OTHERWISE + ACCUMULATE + APPLY + ASSIGN + BELL + BUFFER-COMPARE + BUFFER-COPY + CLEAR + CLOSE + QUERY + STORED-PROCEDURE + COLOR + COMPILE + CONNECT + COPY-LOB + CREATE + CLIENT-PRINCIPAL + ALIAS + BROWSE + BUFFER + CALL + DATABASE + DATA-SOURCE + QUERY + SAX-READER + SERVER + SERVER-SOCKET + SOAP-HEADER + SOAP-HEADER-ENTRYREF + SOCKET + TEMP-TABLE + WIDGET + WIDGET-POOL + X-DOCUMENT + X-NODEREF + CURRENT-LANGUAGE + CURRENT-VALUE + DDE + ADVISE + EXECUTE + GET + INITIATE + REQUEST + SEND + TERMINATE + DEF + DEFINE + VAR + VARIABLE + BROWSE + BUFFER + BUTTON + DATA-SOURCE + FRAME + IMAGE + MENU + PARAM + PARAMETER + QUERY + RECTANGLE + STREAM + SUB-MENU + TEMP-TABLE + VARIABLE + WORK-TABLE + WORKFILE + DELETE + ALIAS + OBJECT + WIDGET + WIDGET-POOL + DICTIONARY + DISABLE + TRIGGERS + DISCONNECT + DISPLAY + DOS + DOWN + DYNAMIC-CURRENT-VALUE + EMPTY + TEMP-TABLE + ENABLE + ENTRY + EXPORT + FIND + FORM + FRAME-VALUE + GET + GET-KEY-VALUE + HIDE + IMPORT + INPUT + CLEAR + CLOSE + FROM + TO + THROUGH + INPUT-OUTPUT + THROUGH + INSERT + LEAVE + LENGTH + LOAD + LOAD-PICTURE + MESSAGE + NEXT + NEXT-PROMPT + QUERY + OPEN + OS-APPEND + OS-COMMAND + OS-COPY + OS-CREATE-DIR + OS-DELETE + OS-RENAME + OUTPUT + OVERLAY + PAGE + PAUSE + PROCESS + EVENTS + PROMPT-FOR + PROMSGS + PROPATH + PUBLISH + CURSOR + PUT + PUT-BITS + PUT-BYTE + PUT-BYTES + PUT-DOUBLE + PUT-FLOAT + PUT-KEY-VALUE + PUT-LONG + PUT-SHORT + PUT-STRING + PUT-UNSIGNED-SHORT + QUIT + RAW + RAW-TRANSFER + READKEY + RELEASE + EXTERNAL + OBJECT + REPOSITION + RETURN + RETURNS + RUN + STORED-PROCEDURE + SUPER + SAVE + CACHE + SEEK + SET + SET-BYTE-ORDER + SET-POINTER-VALUE + SET-SIZE + SHOW-STATS + STATUS + STOP + SUBSCRIBE + SUBSTRING + COLOR + SYSTEM-DIALOG + FONT + GET-DIR + GET-FILE + PRINTER-SETUP + SYSTEM-HELP + TERMINAL + TRANSACTION-MODE + AUTOMATIC + TRIGGER + UNDERLINE + UNDO + UNIX + UNLOAD + UNSUBSCRIBE + UP + UPDATE + USE + VALIDATE + VIEW + WAIT-FOR + + + + BROWSE + BUTTON + COMBO-BOX + CONTROL-FRAME + DIALOG-BOX + EDITOR + FIELD-GROUP + FILL-IN + FRAME + IMAGE + LITERAL + MENU + MENU-ITEM + RADIO-SET + RECTANGLE + SELECTION-LIST + SLIDER + SUB-MENU + TEXT + TOGGLE-BOX + WINDOW + + + + THIS-OBJECT + AUDIT-CONTROL + AUDIT-POLICY + SECURITY-POLICY + ACTIVE-WINDOW + BUFFER + BUFFER-FIELD + CALL + CLIPBOARD + CODEBASE-LOCATOR + COLOR-TABLE + COM-SELF + COMPILER + CURRENT-WINDOW + DATA-RELATION + DATE-SOURCE + DEBUGGER + DEFAULT-WINDOW + ERROR-STATUS + FILE-INFO + FIELD + FOCUS + FONT-TABLE + LAST-EVENT + LOG-MANAGER + PRODATASET + QUERY + RCODE-INFO + SAX-ATTRIBUTES + SAX-READER + SELF + SERVER + SESSION + SOAP-FAULT + SOAP-FAULT-DETAIL + SOAP-HEADER + SOAP-HEADER-ENTRYREF + SOCKET + SOURCE-PROCEDURE + TARGET-PROCEDURE + TEMP-TABLE + THIS-PROCEDURE + TRANSACTION + WEB-CONTEXT + X-DOCUMENT + X-NODEREF + + + + CONTROL-NAME + CONTROLS + HEIGHT + HONORPROKEYS + HONORRETURNKEY + LEFT + TOP + WIDTH + TAG + + + + ANYWHERE + SCHEMA-MARSHAL + ATTACHED-PAIRLIST + DATA-SOURCE-COMPLETE-MAP + KEYS + NEXT-ROWID + NUM-REFERENCES + RESTART-ROWID + CLASS-TYPE + FIRST-OBJECT + LAST-OBJECT + MULTI-COMPILE + WIDGET-ID + SCHEMA-LOCATION + STANDALONE + STRICT + VERSION + WRITE-STATUS + NONAMESPACE-SCHEMA-LOCATION + FRAGMENT + APPL-CONTEXT-ID + AUDIT-EVENT-CONTEXT + CLIENT-TTY + CLIENT-WORKSTATION + DOMAIN-DESCRIPTION + DOMAIN-NAME + DOMAIN-TYPE + EVENT-GROUP-ID + LOGIN-EXPIRATION-TIMESTAMP + LOGIN-HOST + LOGIN-STATE + ROLES + SEAL-TIMESTAMP + SESSION-ID + STATE-DETAIL + USER-ID + ACCELERATOR + ACTIVE + ACTOR + ADM-DATA + AFTER-BUFFER + AFTER-ROWID + AFTER-TABLE + ALLOW-COLUMN-SEARCHING + ALWAYS-ON-TOP + AMBIGUOUS + APPL-ALERT-BOXES + APPSERVER-INFO + APPSERVER-PASSWORD + APPSERVER-USERID + ASYNCHRONOUS + ASYNC-REQUEST-COUNT + ASYNC-REQUEST-HANDLE + ATTRIBUTE-NAMES + ATTR-SPACE + AUTO-COMPLETION + AUTO-DELETE + AUTO-ENDKEY + AUTO-GO + AUTO-INDENT + AUTO-RESIZE + AUTO-RETURN + AUTO-VALIDATE + AUTO-ZAP + AVAILABLE + AVAILABLE-FORMATS + BACKGROUND + BASE-ADE + BASIC-LOGGING + BATCH-MODE + BEFORE-BUFFER + BEFORE-ROWID + BEFORE-TABLE + BGCOLOR + BLANK + BLOCK-ITERATION-DISPLAY + BORDER-BOTTOM-CHARS + BORDER-BOTTOM-PIXELS + BORDER-LEFT-CHARS + BORDER-LEFT-PIXELS + BORDER-RIGHT-CHARS + BORDER-RIGHT-PIXELS + BORDER-TOP-CHARS + BORDER-TOP-PIXELS + BOX + BOX-SELECTABLE + BUFFER-CHARS + BUFFER-VALUE + BYTES-READ + BYTES-WRITTEN + CACHE + CALL-NAME + CALL-TYPE + BUFFER-FIELD + BUFFER-HANDLE + BUFFER-LINES + BUFFER-NAME + CANCEL-BUTTON + CANCELLED + CAN-CREATE + CAN-DELETE + CAN-READ + CAN-WRITE + CAREFUL-PAINT + CASE-SENSITIVE + CENTERED + CHARSET + CHECKED + CHILD-BUFFER + CHILD-NUM + CLIENT-CONNECTION-ID + CLIENT-TYPE + CODE + CODEPAGE + COLUMN + COLUMN-BGCOLOR + COLUMN-DCOLOR + COLUMN-FGCOLOR + COLUMN-FONT + COLUMN-LABEL + COLUMN-MOVABLE + COLUMN-PFCOLOR + COLUMN-READ-ONLY + COLUMN-RESIZABLE + COLUMN-SCROLLING + COM-HANDLE + COMPLETE + CONTEXT-HELP + CONTEXT-HELP-FILE + CONTEXT-HELP-ID + CONTROL-BOX + CONVERT-D-COLORS + CPCASE + CPCOLL + CPINTERNAL + CPLOG + CPPRINT + CPRCODEIN + CPRCODEOUT + CPSTREAM + CPTERM + CRC-VALUE + CURRENT-CHANGED + CURRENT-COLUMN + CURRENT-ITERATION + CURRENT-RESULT-ROW + CURRENT-ROW-MODIFIED + CURRENT-WINDOW + CURSOR-CHAR + CURSOR-LINE + CURSOR-OFFSET + DATA-ENTRY-RETURN + DATA-SOURCE + DATA-TYPE + DATASET + DATE-FORMAT + DBNAME + DB-REFERENCES + DCOLOR + DDE-ERROR + DDE-ID + DDE-ITEM + DDE-NAME + DDE-TOPIC + DEBLANK + DEBUG-ALERT + DECIMALS + DEFAULT + DEFAULT-BUFFER-HANDLE + DEFAULT-BUTTON + DEFAULT-COMMIT + DELIMITER + DISABLE-AUTO-ZAP + DISPLAY-TIMEZONE + DISPLAY-TYPE + DOWN + DRAG-ENABLED + DROP-TARGET + DYNAMIC + EDGE-CHARS + EDGE-PIXELS + EDIT-CAN-PASTE + EDIT-CAN-UNDO + EMPTY + ENCODING + END-USER-PROMPT + ENTRY-TYPES-LIST + ERROR + ERROR-COLUMN + ERROR-OBJECT-DETAIL + ERROR-ROW + ERROR-STRING + EVENT-PROCEDURE + EVENT-PROCEDURE-CONTEXT + EVENT-TYPE + EXPAND + EXPANDABLE + EXTENT + FGCOLOR + FILE-CREATE-DATE + FILE-CREATE-TIME + FILE-MOD-DATE + FILE-MOD-TIME + FILE-NAME + FILE-OFFSET + FILE-SIZE + FILE-TYPE + FILLED + FILL-MODE + FILL-WHERE-STRING + FIRST-ASYNC-REQUEST + FIRST-BUFFER + FIRST-CHILD + FIRST-COLUMN + FIRST-DATASET + FIRST-DATA-SOURCE + FIRST-PROCEDURE + FIRST-QUERY + FIRST-SERVER + FIRST-SERVER-SOCKET + FIRST-SOCKET + FIRST-TAB-ITEM + FIT-LAST-COLUMN + FLAT-BUTTON + FOCUSED-ROW + FOCUSED-ROW-SELECTED + FONT + FOREGROUND + FORMAT + FORWARD-ONLY + FRAME + FRAME-COL + FRAME-NAME + FRAME-ROW + FRAME-SPACING + FRAME-X + FRAME-Y + FREQUENCY + FULL-HEIGHT-CHARS + FULL-HEIGHT-PIXELS + FULL-PATHNAME + FULL-WIDTH-CHARS + FULL-WIDTH-PIXELS + GRAPHIC-EDGE + GRID-FACTOR-HORIZONTAL + GRID-FACTOR-VERTICAL + GRID-SNAP + GRID-UNIT-HEIGHT-CHARS + GRID-UNIT-HEIGHT-PIXELS + GRID-UNIT-WIDTH-CHARS + GRID-UNIT-WIDTH-PIXELS + GRID-VISIBLE + HANDLER + HAS-LOBS + HAS-RECORDS + HEIGHT-CHARS + HEIGHT-PIXELS + HELP + HIDDEN + HORIZONTAL + HTML-CHARSET + HWND + ICFPARAMETER + ICON + IGNORE-CURRENT-MODIFIED + IMAGE + IMAGE-DOWN + IMAGE-INSENSITIVE + IMAGE-UP + IMMEDIATE-DISPLAY + INDEX + INDEX-INFORMATION + INIT + INITIAL + INNER-CHARS + INNER-LINES + INPUT-VALUE + INSTANTIATING-PROCEDURE + INTERNAL-ENTRIES + IN-HANDLE + IS-OPEN + IS-PARAMETER-SET + ITEMS-PER-ROW + KEEP-CONNECTION-OPEN + KEEP-FRAME-Z-ORDER + KEEP-SECURITY-CACHE + KEY + LABEL + LABEL-BGCOLOR + LABEL-DCOLOR + LABEL-FGCOLOR + LABEL-FONT + LABELS + LANGUAGES + LARGE + LARGE-TO-SMALL + LAST-ASYNC-REQUEST + LAST-CHILD + LAST-PROCEDURE + LAST-SERVER + LAST-SERVER-SOCKET + LAST-SOCKET + LAST-TAB-ITEM + LENGTH + LINE + LIST-ITEM-PAIRS + LIST-ITEMS + LITERAL-QUESTION + LOCAL-HOST + LOCAL-NAME + LOCAL-PORT + LOCATOR-COLUMN-NUMBER + LOCATOR-LINE-NUMBER + LOCATOR-PUBLIC-ID + LOCATOR-SYSTEM-ID + LOCATOR-TYPE + LOCKED + LOG-ENTRY-TYPES + LOG-THRESHOLD + LOGFILE-NAME + LOGGING-LEVEL + MANDATORY + MANUAL-HIGHLIGHT + MAX-BUTTON + MAX-CHARS + MAX-DATA-GUESS + MAX-HEIGHT-CHARS + MAX-HEIGHT-PIXELS + MAX-VALUE + MAX-WIDTH-CHARS + MAX-WIDTH-PIXELS + MD-VALUE + MENU-BAR + MENU-KEY + MENU-MOUSE + MESSAGE-AREA + MESSAGE-AREA-FONT + MIN-BUTTON + MIN-COLUMN-WIDTH-CHARS + MIN-COLUMN-WIDTH-PIXELS + MIN-HEIGHT-CHARS + MIN-HEIGHT-PIXELS + MIN-SCHEMA-MARSHAL + MIN-VALUE + MIN-WIDTH-CHARS + MIN-WIDTH-PIXELS + MODIFIED + MOUSE-POINTER + MOVABLE + MULTIPLE + MULTITASKING-INTERVAL + MUST-UNDERSTAND + NAMESPACE-PREFIX + NAMESPACE-URI + NEEDS-APPSERVER-PROMPT + NEEDS-PROMPT + NEW + NEW-ROW + NEXT-COLUMN + NEXT-SIBLING + NEXT-TAB-ITEM + NO-CURRENT-VALUE + NO-EMPTY-SPACE + NO-FOCUS + NO-SCHEMA-MARSHAL + NO-VALIDATE + NODE-VALUE + NUM-BUFFERS + NUM-BUTTONS + NUM-CHILD-RELATIONS + NUM-CHILDREN + NUM-COLUMNS + NUM-DROPPED-FILES + NUM-ENTRIES + NUM-FIELDS + NUM-FORMATS + NUM-HEADER-ENTRIES + NUM-ITEMS + NUM-ITERATIONS + NUM-LINES + NUM-LOCKED-COLUMNS + NUM-LOG-FILES + NUM-MESSAGES + NUM-PARAMETERS + NUM-RELATIONS + NUM-REPLACED + NUM-RESULTS + NUM-SELECTED-ROWS + NUM-SELECTED-WIDGETS + NUM-SOURCE-BUFFERS + NUM-TABS + NUM-TO-RETAIN + NUM-TOP-BUFFERS + NUM-VISIBLE-COLUMNS + NUMERIC-DECIMAL-POINT + NUMERIC-FORMAT + NUMERIC-SEPARATOR + ON-FRAME-BORDER + ORIGIN-HANDLE + ORIGIN-ROWID + OVERLAY + OWNER + OWNER-DOCUMENT + PAGE-BOTTOM + PAGE-TOP + PARAMETER + PARENT + PARENT-BUFFER + PARENT-RELATION + PARSE-STATUS + PASSWORD-FIELD + PATHNAME + PERSISTENT + PERSISTENT-CACHE-DISABLED + PERSISTENT-PROCEDURE + PFCOLOR + PIXELS-PER-COLUMN + PIXELS-PER-ROW + POPUP-MENU + POPUP-ONLY + POSITION + PREPARED + PREPARE-STRING + PREV-COLUMN + PREV-SIBLING + PREV-TAB-ITEM + PRIMARY + PRINTER-CONTROL-HANDLE + PRINTER-HDC + PRINTER-NAME + PRINTER-PORT + PRIVATE-DATA + PROCEDURE-NAME + PROGRESS-SOURCE + PROXY + PROXY-PASSWORD + PROXY-USERID + PUBLIC-ID + PUBLISHED-EVENTS + QUERY + QUERY-OFF-END + QUIT + RADIO-BUTTONS + READ-ONLY + RECID + RECORD-LENGTH + REFRESHABLE + REJECTED + RELATION-FIELDS + RELATIONS-ACTIVE + REMOTE + REMOTE-HOST + REMOTE-PORT + REPOSITION + RESIZABLE + RESIZE + RETAIN-SHAPE + RETURN-INSERTED + RETURN-VALUE + RETURN-VALUE-DATA-TYPE + ROW + COL + ROW-HEIGHT-CHARS + ROW-HEIGHT-PIXELS + ROW-STATE + ROWID + ROW-MARKERS + ROW-RESIZABLE + SAVE-WHERE-STRING + SCHEMA-CHANGE + SCHEMA-PATH + SCREEN-LINES + SCREEN-VALUE + SCROLL-BARS + SCROLLABLE + SCROLLBAR-HORIZONTAL + SCROLLBAR-VERTICAL + SELECTABLE + SELECTED + SELECTION-END + SELECTION-START + SELECTION-TEXT + SENSITIVE + SEPARATORS + SEPARATOR-FGCOLOR + SERVER + SERVER-CONNECTION-BOUND + SERVER-CONNECTION-BOUND-REQUEST + SERVER-CONNECTION-CONTEXT + SERVER-CONNECTION-ID + SERVER-OPERATING-MODE + SHOW-IN-TASKBAR + SIDE-LABEL-HANDLE + SIDE-LABELS + SKIP-DELETED-RECORD + SMALL-ICON + SMALL-TITLE + SOAP-FAULT-ACTOR + SOAP-FAULT-CODE + SOAP-FAULT-DETAIL + SOAP-FAULT-STRING + SORT + STARTUP-PARAMETERS + STATUS-AREA + STATUS-AREA-FONT + STOP + STOPPED + STREAM + STRETCH-TO-FIT + STRING-VALUE + SUBTYPE + SUPER-PROCEDURES + SUPPRESS-NAMESPACE-PROCESSING + SUPPRESS-WARNINGS + SYSTEM-ALERT-BOXES + SYSTEM-ID + TAB-POSITION + TAB-STOP + TABLE + TABLE-CRC-LIST + TABLE-HANDLE + TABLE-LIST + TABLE-NUMBER + TEMP-DIRECTORY + TEXT-SELECTED + THREE-D + TIC-MARKS + TIME-SOURCE + TITLE + TITLE-BGCOLOR + TITLE-DCOLOR + TITLE-FGCOLOR + TITLE-FONT + TOGGLE-BOX + TOOLTIP + TOOLTIPS + TOP-ONLY + TRACKING-CHANGES + TRANSACTION + TRANSPARENT + TRANS-INIT-PROCEDURE + TYPE + UNDO + UNIQUE-ID + UNIQUE-MATCH + URL + URL-PASSWORD + URL-USERID + DISPLAY + VALIDATE-EXPRESSION + VALIDATE-MESSAGE + VALIDATION-ENABLED + VALUE + VIEW-FIRST-COLUMN-ON-REOPEN + VIRTUAL-HEIGHT + VIRTUAL-WIDTH + VIRTUAL-HEIGHT-CHARS + VIRTUAL-HEIGHT-PIXELS + VIRTUAL-WIDTH-CHARS + VIRTUAL-WIDTH-PIXELS + VISIBLE + WARNING + WHERE-STRING + WIDGET-ENTER + WIDGET-LEAVE + WIDTH-CHARS + WIDTH-PIXELS + WINDOW + WINDOW-STATE + WINDOW-SYSTEM + WORD-WRAP + WORK-AREA-HEIGHT-PIXELS + WORK-AREA-WIDTH-PIXELS + WORK-AREA-X + WORK-AREA-Y + X + XML-SCHEMA-PATH + XML-SUPPRESS-NAMESPACE-PROCESSING + Y + YEAR-OFFSET + WRITE-XMLSCHEMA + READ-XMLSCHEMA + WRITE-XML + READ-XML + NESTED + XML-DATA-TYPE + XML-NODE-TYPE + FORMATTED + SET-OUTPUT-DESTINATION + START-DOCUMENT + START-ELEMENT + WRITE-CHARACTERS + END-ELEMENT + END-DOCUMENT + WRITE-DATA-ELEMENT + INSERT-ATTRIBUTE + + + + COPY-DATASET + COPY-TEMP-TABLE + GET-CALLBACK-PROC-CONTEXT + GET-CALLBACK-PROC-NAME + GET-BINARY-DATA + ADD-SCHEMA-LOCATION + DECLARE-NAMESPACE + RESET + WRITE-CDATA + WRITE-COMMENT + WRITE-EMPTY-ELEMENT + WRITE-ENTITY-REF + WRITE-EXTERNAL-DTD + WRITE-FRAGMENT + WRITE-PROCESSING-INSTRUCTION + CLEAR-LOG + CLOSE-LOG + WRITE-MESSAGE + AUTHENTICATION-FAILED + BEGIN-EVENT-GROUP + CLEAR-APPL-CONTEXT + ENCRYPT-AUDIT-MAC-KEY + END-EVENT-GROUP + EXPORT-PRINCIPAL + GET-PROPERTY + IMPORT-PRINCIPAL + LIST-PROPERTY-NAMES + LOAD-DOMAINS + LOCK-REGISTRATION + LOG-AUDIT-EVENT + LOGOUT + REFRESH-AUDIT-POLICY + REGISTER-DOMAIN + SEAL + SET-APPL-CONTEXT + SET-CLIENT + SET-PROPERTY + VALIDATE-SEAL + ACCEPT-CHANGES + ACCEPT-ROW-CHANGES + ADD-BUFFER + ADD-CALC-COLUMN + ADD-COLUMNS-FROM + ADD-EVENTS-PROCEDURE + ADD-FIELDS-FROM + ADD-FIRST + ADD-HEADER-ENTRY + ADD-INDEX-FIELD + ADD-LAST + ADD-LIKE-COLUMN + ADD-LIKE-FIELD + ADD-LIKE-INDEX + ADD-NEW-FIELD + ADD-NEW-INDEX + ADD-RELATION + ADD-SOURCE-BUFFER + ADD-SUPER-PROCEDURE + APPEND-CHILD + APPLY-CALLBACK + ATTACH-DATA-SOURCE + BUFFER-COMPARE + BUFFER-COPY + BUFFER-CREATE + BUFFER-DELETE + BUFFER-FIELD + BUFFER-RELEASE + BUFFER-VALIDATE + CANCEL-BREAK + CANCEL-REQUESTS + CLEAR + CLEAR-SELECTION + CLONE-NODE + CONNECT + CONNECTED + CONVERT-TO-OFFSET + CREATE-LIKE + CREATE-NODE + CREATE-NODE-NAMESPACE + CREATE-RESULT-LIST-ENTRY + DEBUG + DELETE + DELETE-CHAR + DELETE-CURRENT-ROW + DELETE-HEADER-ENTRY + DELETE-LINE + DELETE-NODE + DELETE-RESULT-LIST-ENTRY + DELETE-SELECTED-ROW + DELETE-SELECTED-ROWS + DESELECT-FOCUSED-ROW + DESELECT-ROWS + DESELECT-SELECTED-ROW + DETACH-DATA-SOURCE + DISABLE + DISABLE-CONNECTIONS + DISABLE-DUMP-TRIGGERS + DISABLE-LOAD-TRIGGERS + DISCONNECT + DISPLAY-MESSAGE + DUMP-LOGGING-NOW + EDIT-CLEAR + EDIT-COPY + EDIT-CUT + EDIT-PASTE + EDIT-UNDO + EMPTY-DATASET + EMPTY-TEMP-TABLE + ENABLE + ENABLE-CONNECTIONS + ENABLE-EVENTS + END-FILE-DROP + ENTRY + EXPORT + FETCH-SELECTED-ROW + FILL + FIND-BY-ROWID + FIND-CURRENT + FIND-FIRST + FIND-LAST + FIND-UNIQUE + GET-ATTRIBUTE + GET-ATTRIBUTE-NODE + GET-BLUE-VALUE + GET-BROWSE-COLUMN + GET-BUFFER-HANDLE + GET-BYTES-AVAILABLE + GET-CHANGES + GET-CHILD + GET-CHILD-RELATION + GET-CURRENT + GET-DATASET-BUFFER + GET-DOCUMENT-ELEMENT + GET-DROPPED-FILE + GET-DYNAMIC + GET-FIRST + GET-GREEN-VALUE + GET-HEADER-ENTRY + GET-INDEX-BY-NAMESPACE-NAME + GET-INDEX-BY-QNAME + GET-ITERATION + GET-LAST + GET-LOCALNAME-BY-INDEX + GET-MESSAGE + GET-NEXT + GET-NODE + GET-NUMBER + GET-PARENT + GET-PREV + GET-PRINTERS + GET-QNAME-BY-INDEX + GET-RED-VALUE + GET-RELATION + GET-REPOSITIONED-ROW + GET-RGB-VALUE + GET-SELECTED-WIDGET + GET-SERIALIZED + GET-SIGNATURE + GET-SOCKET-OPTION + GET-SOURCE-BUFFER + GET-TAB-ITEM + GET-TEXT-HEIGHT-CHARS + GET-TEXT-HEIGHT-PIXELS + GET-TEXT-WIDTH-CHARS + GET-TEXT-WIDTH-PIXELS + GET-TOP-BUFFER + GET-TYPE-BY-INDEX + GET-TYPE-BY-NAMESPACE-NAME + GET-TYPE-BY-QNAME + GET-URI-BY-INDEX + GET-VALUE-BY-INDEX + GET-VALUE-BY-NAMESPACE-NAME + GET-VALUE-BY-QNAME + GET-WAIT-STATE + IMPORT-NODE + INDEX-INFORMATION + INITIALIZE-DOCUMENT-TYPE + INITIATE + INSERT + INSERT-BACKTAB + INSERT-BEFORE + INSERT-FILE + INSERT-ROW + INSERT-STRING + INSERT-TAB + INVOKE + IS-ROW-SELECTED + IS-SELECTED + LOAD + LoadControls + LOAD-ICON + LOAD-IMAGE + LOAD-IMAGE-DOWN + LOAD-IMAGE-INSENSITIVE + LOAD-IMAGE-UP + LOAD-MOUSE-POINTER + LOAD-SMALL-ICON + LONGCHAR-TO-NODE-VALUE + LOOKUP + MEMPTR-TO-NODE-VALUE + MERGE-CHANGES + MERGE-ROW-CHANGES + MOVE-AFTER-TAB-ITEM + MOVE-BEFORE-TAB-ITEM + MOVE-COLUMN + MOVE-TO-BOTTOM + MOVE-TO-EOF + MOVE-TO-TOP + NODE-VALUE-TO-LONGCHAR + NODE-VALUE-TO-MEMPTR + NORMALIZE + QUERY-CLOSE + QUERY-OPEN + QUERY-PREPARE + RAW-TRANSFER + READ + READ-FILE + REFRESH + REJECT-CHANGES + REJECT-ROW-CHANGES + REMOVE-ATTRIBUTE + REMOVE-CHILD + REMOVE-EVENTS-PROCEDURE + REMOVE-SUPER-PROCEDURE + REPLACE + REPLACE-CHILD + REPLACE-SELECTION-TEXT + REPOSITION-BACKWARD + REPOSITION-FORWARD + REPOSITION-TO-ROW + REPOSITION-TO-ROWID + SAVE + SAVE-FILE + SAVE-ROW-CHANGES + SAX-PARSE + SAX-PARSE-FIRST + SAX-PARSE-NEXT + SCROLL-TO-CURRENT-ROW + SCROLL-TO-ITEM + SCROLL-TO-SELECTED-ROW + SEARCH + SELECT-ALL + SELECT-FOCUSED-ROW + SELECT-NEXT-ROW + SELECT-PREV-ROW + SELECT-ROW + SET-ACTOR + SET-ATTRIBUTE + SET-ATTRIBUTE-NODE + SET-BLUE-VALUE + SET-BREAK + SET-BUFFERS + SET-CALLBACK-PROCEDURE + SET-COMMIT + SET-CONNECT-PROCEDURE + SET-DYNAMIC + SET-GREEN-VALUE + SET-INPUT-SOURCE + SET-MUST-UNDERSTAND + SET-NODE + SET-NUMERIC-FORMAT + SET-PARAMETER + SET-READ-RESPONSE-PROCEDURE + SET-RED-VALUE + SET-REPOSITIONED-ROW + SET-RGB-VALUE + SET-ROLLBACK + SET-SELECTION + SET-SERIALIZED + SET-SOCKET-OPTION + SET-WAIT-STATE + STOP-PARSING + SYNCHRONIZE + TEMP-TABLE-PREPARE + VALIDATE + WRITE + MAX-HEIGHT + MAX-WIDTH + + + + CLASSPATH + DLC + EVTLEVEL + JDKCP + JDKHOME + JFCCP + JFHOME + JIT + JRECP + JREHOME + JVMEXE + PATH + PROCFG + PROCONV + PROEXE + PROGRESSCP + PROLOAD + PROMSGS + PROPATH + PROSRV + PROSTARTUP + PROTERMCAP + TERM + TERMINAL + GATEWAY_INTERFACE + SERVER_SOFTWARE + SERVER_PROTOCOL + SERVER_NAME + SERVER_PORT + REQUEST_METHOD + SCRIPT_NAME + PATH_INFO + PATH_TRANSLATED + QUERY_STRING + REMOTE_ADDR + REMOTE_IDENT + REMOTE_USER + AUTH_TYPE + REMOTE_HOST + CONTENT_TYPE + CONTENT_LENGTH + HTTP_ACCEPT + HTTP_COOKIE + HTTP_REFERER + HTTP_USER_AGENT + HTTP_REFERER + HTTPS + HTTP_REFERER + HOSTURL + SELFURL + APPPROGRAM + APPURL + APPPROGRAM + OUTPUT-CONTENT-TYPE + WEB_SRC_PATH + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/prolog.xml b/src/data/extra/syntax-highlighting/syntax/prolog.xml new file mode 100644 index 00000000..84aae500 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/prolog.xml @@ -0,0 +1,1031 @@ + + + + + + ?@^~\\]"> + + + + + + + + |\\\+|:-|=|\\=)(?!&gr_char_iso;)"> + + + (?!&gr_char_iso;)"> + + + =|>)(?!&gr_char_iso;)"> + + + + >)(?!&gr_char_iso;)"> + + + =|@>|=\.\.|@|:)(?!&gr_char_iso;)"> + + + + + + + + + + + + + + + + + + + ?@^~\"> + + + + + + + + + + + + +]> + + + + + + + + + error + + + instantiation_error + uninstantiation_error + type_error + domain_error + existence_error + permission_error + representation_error + evaluation_error + resource_error + syntax_error + system_error + + + + + char_conversion + current_char_conversion + include + ensure_loaded + + atan + + xor + + + + initialization + + fail + repeat + call + catch + throw + true + false + once + + + + + dynamic + asserta + assertz + retractall + retract + abolish + clause + + + + + + atom_concat + atom_length + atom_chars + atom_codes + arg + subsumes_term + acyclic_term + char_code + compare + copy_term + functor + number_chars + number_codes + + term_variables + unify_with_occurs_check + + + phrase + + + open + + set_stream_position + get_char + get_code + peek_char + peek_code + get_byte + peek_byte + + put_char + put_code + put_byte + nl + + read_term + read + write_canonical + writeq + write + + + is + + + rem + mod + div + + + + + abs + sign + min + max + + + + + ceiling + floor + round + truncate + + + + pi + + + sqrt + tan + cos + sin + atan2 + acos + asin + exp + log + float + float_fractional_part + float_integer_part + + + + + multifile + discontigous + op + set_prolog_flag + + + var + nonvar + atom + integer + float + number + atomic + compound + callable + ground + + + current_op + current_prolog_flag + current_input + current_output + + + set_input + set_output + + + close + + flush_output + + + at_end_of_stream + + stream_property + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/protobuf.xml b/src/data/extra/syntax-highlighting/syntax/protobuf.xml new file mode 100644 index 00000000..bc05a159 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/protobuf.xml @@ -0,0 +1,120 @@ + + + + + + message + required + optional + repeated + packed + enum + default + import + public + extensions + package + option + deprecated + extend + + + = + ; + + + double + float + int32 + int64 + uint32 + uint64 + sint32 + sint64 + fixed32 + fixed64 + sfixed32 + sfixed64 + bool + string + bytes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/pug.xml b/src/data/extra/syntax-highlighting/syntax/pug.xml new file mode 100644 index 00000000..b960317b --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/pug.xml @@ -0,0 +1,118 @@ + + + + +]> + + + + + case + when + default + if + unless + else + each + while + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/puppet.xml b/src/data/extra/syntax-highlighting/syntax/puppet.xml new file mode 100644 index 00000000..57b6eeac --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/puppet.xml @@ -0,0 +1,711 @@ + + + + +]> + + + + + + + import + false + true + undef + + + + in + and + or + + + + and + or + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/purebasic.xml b/src/data/extra/syntax-highlighting/syntax/purebasic.xml new file mode 100644 index 00000000..be1a33b9 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/purebasic.xml @@ -0,0 +1,1767 @@ + + + + + Break + Continue + For + ForEach + To + Step + Next + Gosub + Return + FakeReturn + If + Else + ElseIf + EndIf + Repeat + Until + Select + Case + Default + EndSelect + While + Wend + End + Structure + EndStructure + Interface + EndInterface + Extends + DefType + Dim + Enumeration + EndEnumeration + Global + Procedure + EndProcedure + ProcedureReturn + Shared + Protected + Static + Declare + DataSection + EndDataSection + Data + Restore + Read + IncludeFile + XIncludeFile + IncludeBinary + IncludePath + ProcedureDLL + NewList + Goto + With + DeclareModule + EndDeclareModule + Module + EndModule + UseModule + UnuseModule + + + CompilerIf + CompilerElse + CompilerEndIf + CompilerSelect + CompilerCase + CompilerDefault + CompilerEndSelect + + + CallDebugger + Debug + + + ACos + ACosH + AESDecoder + AESEncoder + ASin + ASinH + ATan + ATan2 + ATanH + AbortFTPFile + Abs + Add3DArchive + AddBillboard + AddCipherBuffer + AddDate + AddElement + AddEntityAnimationTime + AddGadgetColumn + AddGadgetItem + AddGadgetItem3D + AddJSONElement + AddJSONMember + AddKeyboardShortcut + AddMailAttachment + AddMailAttachmentData + AddMailRecipient + AddMapElement + AddMaterialLayer + AddNodeAnimationTime + AddPackFile + AddPackMemory + AddSplinePoint + AddStaticGeometryEntity + AddStatusBarField + AddSubMesh + AddSysTrayIcon + AddTerrainTexture + AddVertexPoseReference + AddWindowTimer + AffectedDatabaseRows + AllocateMemory + AllocateStructure + Alpha + AlphaBlend + AmbientColor + AntialiasingMode + ApplyEntityForce + ApplyEntityImpulse + ArraySize + Asc + AttachEntityObject + AttachNodeObject + AttachRibbonEffect + AudioCDLength + AudioCDName + AudioCDStatus + AudioCDTrackLength + AudioCDTrackSeconds + AudioCDTracks + AvailableProgramOutput + AvailableScreenMemory + AvailableSerialPortInput + AvailableSerialPortOutput + BackColor + Base64Decoder + Base64Encoder + BillboardGroupCommonDirection + BillboardGroupCommonUpVector + BillboardGroupID + BillboardGroupMaterial + BillboardGroupX + BillboardGroupY + BillboardGroupZ + BillboardHeight + BillboardLocate + BillboardWidth + BillboardX + BillboardY + BillboardZ + Bin + BindEvent + BindGadgetEvent + BindMenuEvent + Blue + Box + BoxedGradient + BuildMeshShadowVolume + BuildMeshTangents + BuildStaticGeometry + BuildTerrain + ButtonGadget + ButtonGadget3D + ButtonImageGadget + CPUName + CRC32FileFingerprint + CRC32Fingerprint + CalendarGadget + CallCFunction + CallCFunctionFast + CallFunction + CallFunctionFast + CameraBackColor + CameraDirection + CameraDirectionX + CameraDirectionY + CameraDirectionZ + CameraFOV + CameraFixedYawAxis + CameraFollow + CameraID + CameraLookAt + CameraPitch + CameraProjectionMode + CameraProjectionX + CameraProjectionY + CameraRange + CameraRenderMode + CameraRoll + CameraViewHeight + CameraViewWidth + CameraViewX + CameraViewY + CameraX + CameraY + CameraYaw + CameraZ + CanvasGadget + CanvasOutput + CatchImage + CatchJSON + CatchMusic + CatchSound + CatchSprite + CatchXML + ChangeCurrentElement + ChangeGamma + ChangeListIconGadgetDisplay + ChangeSysTrayIcon + CheckBoxGadget + CheckBoxGadget3D + CheckDatabaseNull + CheckFTPConnection + CheckFilename + CheckObjectVisibility + ChildXMLNode + Chr + Circle + CircularGradient + ClearBillboards + ClearClipboard + ClearConsole + ClearDebugOutput + ClearGadgetItemList + ClearGadgetItems + ClearGadgetItems3D + ClearJSONElements + ClearJSONMembers + ClearList + ClearMap + ClearScreen + ClearSpline + ClipOutput + ClipSprite + CloseConsole + CloseCryptRandom + CloseDatabase + CloseFTP + CloseFile + CloseGadgetList + CloseGadgetList3D + CloseHelp + CloseLibrary + CloseNetworkConnection + CloseNetworkServer + ClosePack + ClosePreferences + CloseProgram + CloseScreen + CloseSerialPort + CloseSubMenu + CloseWindow + CloseWindow3D + CocoaMessage + ColorRequester + ComboBoxGadget + ComboBoxGadget3D + CompareMemory + CompareMemoryString + ComposeJSON + ComposeXML + CompositorEffectParameter + CompressMemory + ComputeSpline + ComputerName + ConeTwistJoint + ConicalGradient + ConnectionID + ConsoleColor + ConsoleCursor + ConsoleError + ConsoleLocate + ConsoleTitle + ContainerGadget + ContainerGadget3D + ConvertLocalToWorldPosition + ConvertWorldToLocalPosition + CopyArray + CopyDirectory + CopyEntity + CopyFile + CopyImage + CopyLight + CopyList + CopyMap + CopyMaterial + CopyMemory + CopyMemoryString + CopyMesh + CopySprite + CopyTexture + CopyXMLNode + Cos + CosH + CountBillboards + CountCPUs + CountGadgetItems + CountGadgetItems3D + CountLibraryFunctions + CountList + CountMaterialLayers + CountProgramParameters + CountRegularExpressionGroups + CountSplinePoints + CountString + CreateBillboardGroup + CreateCamera + CreateCompositorEffect + CreateCube + CreateCubeMapTexture + CreateCylinder + CreateDialog + CreateDirectory + CreateEntity + CreateFTPDirectory + CreateFile + CreateGadgetList + CreateImage + CreateImageMenu + CreateJSON + CreateLensFlareEffect + CreateLight + CreateLine3D + CreateMail + CreateMaterial + CreateMenu + CreateMesh + CreateMutex + CreateNetworkServer + CreateNode + CreateNodeAnimation + CreateNodeAnimationKeyFrame + CreatePack + CreateParticleEmitter + CreatePlane + CreatePopupImageMenu + CreatePopupMenu + CreatePreferences + CreateRegularExpression + CreateRenderTexture + CreateRibbonEffect + CreateSemaphore + CreateSphere + CreateSpline + CreateSprite + CreateStaticGeometry + CreateStatusBar + CreateTerrain + CreateText3D + CreateTexture + CreateThread + CreateToolBar + CreateVertexAnimation + CreateVertexPoseKeyFrame + CreateVertexTrack + CreateWater + CreateXML + CreateXMLNode + CryptRandom + CryptRandomData + CustomFilterCallback + CustomGradient + DESFingerprint + DatabaseColumnIndex + DatabaseColumnName + DatabaseColumnSize + DatabaseColumnType + DatabaseColumns + DatabaseDriverDescription + DatabaseDriverName + DatabaseError + DatabaseID + DatabaseQuery + DatabaseUpdate + Date + DateGadget + Day + DayOfWeek + DayOfYear + DefaultPrinter + DefineTerrainTile + Degree + Delay + DeleteDirectory + DeleteElement + DeleteFTPDirectory + DeleteFTPFile + DeleteFile + DeleteMapElement + DeleteXMLNode + DesktopDepth + DesktopFrequency + DesktopHeight + DesktopMouseX + DesktopMouseY + DesktopName + DesktopWidth + DesktopX + DesktopY + DetachEntityObject + DetachNodeObject + DetachRibbonEffect + DialogError + DialogGadget + DialogID + DialogWindow + DirectoryEntryAttributes + DirectoryEntryDate + DirectoryEntryName + DirectoryEntrySize + DirectoryEntryType + DisableEntityBody + DisableGadget + DisableGadget3D + DisableLightShadows + DisableMaterialLighting + DisableMenuItem + DisableParticleEmitter + DisableToolBarButton + DisableWindow + DisableWindow3D + DisplayPopupMenu + DisplaySprite + DisplayTransparentSprite + DoubleClickTime + DragFiles + DragImage + DragOSFormats + DragPrivate + DragText + DrawAlphaImage + DrawImage + DrawRotatedText + DrawText + DrawingBuffer + DrawingBufferPitch + DrawingBufferPixelFormat + DrawingFont + DrawingMode + EditorGadget + EditorGadget3D + EjectAudioCD + ElapsedMilliseconds + Ellipse + EllipticalGradient + EnableGadgetDrop + EnableGraphicalConsole + EnableHingeJointAngularMotor + EnableManualEntityBoneControl + EnableWindowDrop + EnableWorldCollisions + EnableWorldPhysics + EncodeImage + Engine3DStatus + EntityAngularFactor + EntityAnimationBlendMode + EntityAnimationStatus + EntityBonePitch + EntityBoneRoll + EntityBoneX + EntityBoneY + EntityBoneYaw + EntityBoneZ + EntityBoundingBox + EntityCollide + EntityCubeMapTexture + EntityCustomParameter + EntityFixedYawAxis + EntityID + EntityLinearFactor + EntityLookAt + EntityParentNode + EntityPhysicBody + EntityPitch + EntityRenderMode + EntityRoll + EntityVelocity + EntityX + EntityY + EntityYaw + EntityZ + EnvironmentVariableName + EnvironmentVariableValue + Eof + ErrorAddress + ErrorCode + ErrorFile + ErrorLine + ErrorMessage + ErrorRegister + ErrorTargetAddress + EventClient + EventData + EventDropAction + EventDropBuffer + EventDropFiles + EventDropImage + EventDropPrivate + EventDropSize + EventDropText + EventDropType + EventDropX + EventDropY + EventGadget + EventGadget3D + EventMenu + EventServer + EventTimer + EventType + EventType3D + EventWindow + EventWindow3D + EventlParam + EventwParam + ExamineAssembly + ExamineDatabaseDrivers + ExamineDesktops + ExamineDirectory + ExamineEnvironmentVariables + ExamineFTPDirectory + ExamineIPAddresses + ExamineJSONMembers + ExamineJoystick + ExamineKeyboard + ExamineLibraryFunctions + ExamineMD5Fingerprint + ExamineMouse + ExaminePack + ExaminePreferenceGroups + ExaminePreferenceKeys + ExamineRegularExpression + ExamineSHA1Fingerprint + ExamineScreenModes + ExamineWorldCollisions + ExamineXMLAttributes + Exp + ExplorerComboGadget + ExplorerListGadget + ExplorerTreeGadget + ExportJSON + ExportJSONSize + ExportXML + ExportXMLSize + ExtractJSONArray + ExtractJSONList + ExtractJSONMap + ExtractJSONStructure + ExtractRegularExpression + ExtractXMLArray + ExtractXMLList + ExtractXMLMap + ExtractXMLStructure + FTPDirectoryEntryAttributes + FTPDirectoryEntryDate + FTPDirectoryEntryName + FTPDirectoryEntryRaw + FTPDirectoryEntrySize + FTPDirectoryEntryType + FTPProgress + FetchEntityMaterial + FetchOrientation + FileBuffersSize + FileID + FileSeek + FileSize + FillArea + FillMemory + FindMapElement + FindString + FinishCipher + FinishDatabaseQuery + FinishDirectory + FinishFTPDirectory + FinishFingerprint + FinishMesh + FirstDatabaseRow + FirstElement + FirstWorldCollisionEntity + FlipBuffers + FlushFileBuffers + Fog + FontID + FontRequester + FormatDate + FormatXML + FrameGadget + FrameGadget3D + FreeArray + FreeBillboardGroup + FreeCamera + FreeDialog + FreeEffect + FreeEntity + FreeEntityJoints + FreeFont + FreeGadget + FreeGadget3D + FreeIP + FreeImage + FreeJSON + FreeJoint + FreeLight + FreeList + FreeMail + FreeMap + FreeMaterial + FreeMemory + FreeMenu + FreeMesh + FreeMovie + FreeMusic + FreeMutex + FreeNode + FreeNodeAnimation + FreeParticleEmitter + FreeRegularExpression + FreeSemaphore + FreeSound + FreeSound3D + FreeSpline + FreeSprite + FreeStaticGeometry + FreeStatusBar + FreeStructure + FreeTerrain + FreeText3D + FreeTexture + FreeToolBar + FreeWater + FreeXML + FrontColor + GadgetHeight + GadgetHeight3D + GadgetID + GadgetID3D + GadgetItemID + GadgetToolTip + GadgetToolTip3D + GadgetType + GadgetType3D + GadgetWidth + GadgetWidth3D + GadgetX + GadgetX3D + GadgetY + GadgetY3D + GetActiveGadget + GetActiveGadget3D + GetActiveWindow + GetActiveWindow3D + GetClientIP + GetClientPort + GetClipboardImage + GetClipboardText + GetCurrentDirectory + GetDatabaseBlob + GetDatabaseDouble + GetDatabaseFloat + GetDatabaseLong + GetDatabaseQuad + GetDatabaseString + GetEntityAnimationLength + GetEntityAnimationTime + GetEntityAnimationWeight + GetEntityAttribute + GetEntityCollisionGroup + GetEntityCollisionMask + GetEnvironmentVariable + GetExtensionPart + GetFTPDirectory + GetFileAttributes + GetFileDate + GetFilePart + GetFunction + GetFunctionEntry + GetGadgetAttribute + GetGadgetAttribute3D + GetGadgetColor + GetGadgetData + GetGadgetData3D + GetGadgetFont + GetGadgetItemAttribute + GetGadgetItemColor + GetGadgetItemData + GetGadgetItemData3D + GetGadgetItemState + GetGadgetItemState3D + GetGadgetItemText + GetGadgetItemText3D + GetGadgetState + GetGadgetState3D + GetGadgetText + GetGadgetText3D + GetHTTPHeader + GetHomeDirectory + GetJSONBoolean + GetJSONDouble + GetJSONElement + GetJSONFloat + GetJSONInteger + GetJSONMember + GetJSONQuad + GetJSONString + GetJointAttribute + GetLightColor + GetMailAttribute + GetMailBody + GetMaterialAttribute + GetMaterialColor + GetMenuItemState + GetMenuItemText + GetMenuTitleText + GetMeshData + GetMusicPosition + GetMusicRow + GetNodeAnimationKeyFrameTime + GetNodeAnimationLength + GetNodeAnimationTime + GetNodeAnimationWeight + GetOriginX + GetOriginY + GetPathPart + GetRuntimeDouble + GetRuntimeInteger + GetRuntimeString + GetScriptMaterial + GetScriptParticleEmitter + GetScriptTexture + GetSerialPortStatus + GetSoundFrequency + GetSoundPosition + GetTemporaryDirectory + GetTerrainTileHeightAtPoint + GetTerrainTileLayerBlend + GetToolBarButtonState + GetURLPart + GetW + GetWindowColor + GetWindowData + GetWindowState + GetWindowTitle + GetWindowTitle3D + GetX + GetXMLAttribute + GetXMLEncoding + GetXMLNodeName + GetXMLNodeOffset + GetXMLNodeText + GetXMLStandalone + GetY + GetZ + GrabDrawingImage + GrabImage + GrabSprite + GradientColor + Green + Hex + HideBillboardGroup + HideEffect + HideEntity + HideGadget + HideGadget3D + HideLight + HideMenu + HideParticleEmitter + HideWindow + HideWindow3D + HingeJoint + HingeJointMotorTarget + HostName + Hour + HyperLinkGadget + IPAddressField + IPAddressGadget + IPString + ImageDepth + ImageFormat + ImageGadget + ImageGadget3D + ImageHeight + ImageID + ImageOutput + ImageWidth + Infinity + InitAudioCD + InitEngine3D + InitJoystick + InitKeyboard + InitMouse + InitMovie + InitNetwork + InitScintilla + InitSound + InitSprite + Inkey + Input + InputEvent3D + InputRequester + InsertElement + InsertJSONArray + InsertJSONList + InsertJSONMap + InsertJSONStructure + InsertString + InsertXMLArray + InsertXMLList + InsertXMLMap + InsertXMLStructure + InstructionAddress + InstructionString + Int + IntQ + IsBillboardGroup + IsCamera + IsDatabase + IsDialog + IsDirectory + IsEffect + IsEntity + IsFile + IsFingerprint + IsFont + IsFtp + IsGadget + IsGadget3D + IsImage + IsInfinity + IsJSON + IsLibrary + IsLight + IsMail + IsMaterial + IsMenu + IsMesh + IsMovie + IsMusic + IsNaN + IsNode + IsParticleEmitter + IsProgram + IsRegularExpression + IsRuntime + IsScreenActive + IsSerialPort + IsSound + IsSound3D + IsSprite + IsStaticGeometry + IsStatusBar + IsSysTrayIcon + IsText3D + IsTexture + IsThread + IsToolBar + IsWindow + IsWindow3D + IsXML + JSONArraySize + JSONErrorLine + JSONErrorMessage + JSONErrorPosition + JSONMemberKey + JSONMemberValue + JSONObjectSize + JSONType + JSONValue + JoystickAxisX + JoystickAxisY + JoystickAxisZ + JoystickButton + JoystickName + KeyboardInkey + KeyboardMode + KeyboardPushed + KeyboardReleased + KillProgram + KillThread + LCase + LSet + LTrim + LastElement + Left + Len + LensFlareEffectColor + LibraryFunctionAddress + LibraryFunctionName + LibraryID + LightAttenuation + LightDirection + LightDirectionX + LightDirectionY + LightDirectionZ + LightID + LightLookAt + LightPitch + LightRoll + LightX + LightY + LightYaw + LightZ + Line + LineXY + LinearGradient + ListIconGadget + ListIndex + ListSize + ListViewGadget + ListViewGadget3D + LoadFont + LoadImage + LoadJSON + LoadMesh + LoadMovie + LoadMusic + LoadSound + LoadSound3D + LoadSprite + LoadTexture + LoadWorld + LoadXML + Loc + LockMutex + Lof + Log + Log10 + MD5FileFingerprint + MD5Fingerprint + MDIGadget + MailProgress + MainXMLNode + MakeIPAddress + MapKey + MapSize + MatchRegularExpression + MaterialBlendingMode + MaterialCullingMode + MaterialFilteringMode + MaterialFog + MaterialID + MaterialShadingMode + MaterialShininess + MemorySize + MemoryStatus + MemoryStringLength + MenuBar + MenuHeight + MenuID + MenuItem + MenuTitle + MergeLists + MeshFace + MeshID + MeshIndex + MeshIndexCount + MeshPoseCount + MeshPoseName + MeshRadius + MeshVertexColor + MeshVertexCount + MeshVertexNormal + MeshVertexPosition + MeshVertexTangent + MeshVertexTextureCoordinate + MessageRequester + Mid + Minute + Mod + Month + MouseButton + MouseDeltaX + MouseDeltaY + MouseLocate + MousePick + MouseRayCast + MouseWheel + MouseX + MouseY + MoveBillboard + MoveBillboardGroup + MoveCamera + MoveElement + MoveEntity + MoveEntityBone + MoveLight + MoveMemory + MoveNode + MoveParticleEmitter + MoveText3D + MoveXMLNode + MovieAudio + MovieHeight + MovieInfo + MovieLength + MovieSeek + MovieStatus + MovieWidth + MusicVolume + NaN + NetworkClientEvent + NetworkServerEvent + NewPrinterPage + NextDatabaseDriver + NextDatabaseRow + NextDirectoryEntry + NextElement + NextEnvironmentVariable + NextFTPDirectoryEntry + NextFingerprint + NextIPAddress + NextInstruction + NextJSONMember + NextLibraryFunction + NextMapElement + NextPackEntry + NextPreferenceGroup + NextPreferenceKey + NextRegularExpressionMatch + NextScreenMode + NextSelectedFilename + NextWorldCollision + NextXMLAttribute + NextXMLNode + NodeAnimationKeyFramePitch + NodeAnimationKeyFrameRoll + NodeAnimationKeyFrameX + NodeAnimationKeyFrameY + NodeAnimationKeyFrameYaw + NodeAnimationKeyFrameZ + NodeAnimationStatus + NodeFixedYawAxis + NodeID + NodeLookAt + NodePitch + NodeRoll + NodeX + NodeY + NodeYaw + NodeZ + NormalX + NormalY + NormalZ + NormalizeMesh + OSVersion + OnErrorCall + OnErrorDefault + OnErrorExit + OnErrorGoto + OpenConsole + OpenCryptRandom + OpenDatabase + OpenDatabaseRequester + OpenFTP + OpenFile + OpenFileRequester + OpenGLGadget + OpenGadgetList + OpenGadgetList3D + OpenHelp + OpenLibrary + OpenNetworkConnection + OpenPack + OpenPreferences + OpenScreen + OpenSerialPort + OpenSubMenu + OpenWindow + OpenWindow3D + OpenWindowedScreen + OpenXMLDialog + OptionGadget + OptionGadget3D + OutputDepth + OutputHeight + OutputWidth + PackEntryName + PackEntrySize + PackEntryType + PanelGadget + PanelGadget3D + ParentXMLNode + Parse3DScripts + ParseDate + ParseJSON + ParseXML + ParticleColorFader + ParticleColorRange + ParticleEmissionRate + ParticleEmitterDirection + ParticleEmitterID + ParticleEmitterX + ParticleEmitterY + ParticleEmitterZ + ParticleMaterial + ParticleSize + ParticleSpeedFactor + ParticleTimeToLive + ParticleVelocity + PathRequester + PauseAudioCD + PauseMovie + PauseSound + PauseThread + PeekA + PeekB + PeekC + PeekD + PeekF + PeekI + PeekL + PeekQ + PeekS + PeekU + PeekW + PickX + PickY + PickZ + Pitch + PlayAudioCD + PlayMovie + PlayMusic + PlaySound + PlaySound3D + Plot + Point + PointJoint + PointPick + PokeA + PokeB + PokeC + PokeD + PokeF + PokeI + PokeL + PokeQ + PokeS + PokeU + PokeW + PopListPosition + PopMapPosition + PostEvent + Pow + PreferenceComment + PreferenceGroup + PreferenceGroupName + PreferenceKeyName + PreferenceKeyValue + PreviousDatabaseRow + PreviousElement + PreviousXMLNode + Print + PrintN + PrintRequester + PrinterOutput + PrinterPageHeight + PrinterPageWidth + ProgramExitCode + ProgramFilename + ProgramID + ProgramParameter + ProgramRunning + ProgressBarGadget + ProgressBarGadget3D + PurifierGranularity + PushListPosition + PushMapPosition + RGB + RGBA + RSet + RTrim + Radian + RaiseError + Random + RandomData + RandomSeed + RandomizeArray + RandomizeList + RawKey + RayCast + RayCollide + RayPick + ReAllocateMemory + ReadAsciiCharacter + ReadByte + ReadCharacter + ReadConsoleData + ReadData + ReadDouble + ReadFile + ReadFloat + ReadInteger + ReadLong + ReadPreferenceDouble + ReadPreferenceFloat + ReadPreferenceInteger + ReadPreferenceLong + ReadPreferenceQuad + ReadPreferenceString + ReadProgramData + ReadProgramError + ReadProgramString + ReadQuad + ReadSerialPortData + ReadString + ReadStringFormat + ReadUnicodeCharacter + ReadWord + ReceiveFTPFile + ReceiveHTTPFile + ReceiveNetworkData + Red + RegularExpressionError + RegularExpressionGroup + RegularExpressionGroupLength + RegularExpressionGroupPosition + RegularExpressionMatchLength + RegularExpressionMatchPosition + RegularExpressionMatchString + RegularExpressionNamedGroup + RegularExpressionNamedGroupLength + RegularExpressionNamedGroupPosition + ReleaseMouse + ReloadMaterial + RemoveBillboard + RemoveEnvironmentVariable + RemoveGadgetColumn + RemoveGadgetItem + RemoveGadgetItem3D + RemoveJSONElement + RemoveJSONMember + RemoveKeyboardShortcut + RemoveMailRecipient + RemoveMaterialLayer + RemovePackFile + RemovePreferenceGroup + RemovePreferenceKey + RemoveString + RemoveSysTrayIcon + RemoveWindowTimer + RemoveXMLAttribute + RenameFTPFile + RenameFile + RenderWorld + ReplaceRegularExpression + ReplaceString + ResetGradientColors + ResetList + ResetMap + ResetMaterial + ResetProfiler + ResizeBillboard + ResizeGadget + ResizeGadget3D + ResizeImage + ResizeJSONElements + ResizeMovie + ResizeParticleEmitter + ResizeWindow + ResizeWindow3D + ResolveXMLAttributeName + ResolveXMLNodeName + ResumeAudioCD + ResumeMovie + ResumeSound + ResumeThread + ReverseString + RibbonEffectColor + RibbonEffectWidth + Right + Roll + RootXMLNode + RotateBillboardGroup + RotateCamera + RotateEntity + RotateEntityBone + RotateLight + RotateMaterial + RotateNode + RotateSprite + Round + RoundBox + RunProgram + SHA1FileFingerprint + SHA1Fingerprint + SaveDebugOutput + SaveFileRequester + SaveImage + SaveJSON + SaveMesh + SaveRenderTexture + SaveSprite + SaveTerrain + SaveXML + ScaleEntity + ScaleMaterial + ScaleNode + ScaleText3D + ScintillaGadget + ScintillaSendMessage + ScreenDepth + ScreenHeight + ScreenID + ScreenModeDepth + ScreenModeHeight + ScreenModeRefreshRate + ScreenModeWidth + ScreenOutput + ScreenWidth + ScrollAreaGadget + ScrollAreaGadget3D + ScrollBarGadget + ScrollBarGadget3D + ScrollMaterial + Second + SecondWorldCollisionEntity + SelectElement + SelectedFilePattern + SelectedFontColor + SelectedFontName + SelectedFontSize + SelectedFontStyle + SendFTPFile + SendMail + SendNetworkData + SendNetworkString + SerialPortError + SerialPortID + SerialPortTimeouts + ServerID + SetActiveGadget + SetActiveGadget3D + SetActiveWindow + SetActiveWindow3D + SetClipboardImage + SetClipboardText + SetCurrentDirectory + SetDatabaseBlob + SetDragCallback + SetDropCallback + SetEntityAnimationLength + SetEntityAnimationTime + SetEntityAnimationWeight + SetEntityAttribute + SetEntityCollisionFilter + SetEntityMaterial + SetEnvironmentVariable + SetFTPDirectory + SetFileAttributes + SetFileDate + SetFrameRate + SetGUITheme3D + SetGadgetAttribute + SetGadgetAttribute3D + SetGadgetColor + SetGadgetData + SetGadgetData3D + SetGadgetFont + SetGadgetItemAttribute + SetGadgetItemColor + SetGadgetItemData + SetGadgetItemData3D + SetGadgetItemImage + SetGadgetItemState + SetGadgetItemState3D + SetGadgetItemText + SetGadgetItemText3D + SetGadgetState + SetGadgetState3D + SetGadgetText + SetGadgetText3D + SetJSONArray + SetJSONBoolean + SetJSONDouble + SetJSONFloat + SetJSONInteger + SetJSONNull + SetJSONObject + SetJSONQuad + SetJSONString + SetJointAttribute + SetLightColor + SetMailAttribute + SetMailBody + SetMaterialAttribute + SetMaterialColor + SetMenuItemState + SetMenuItemText + SetMenuTitleText + SetMeshData + SetMeshMaterial + SetMusicPosition + SetNodeAnimationKeyFramePosition + SetNodeAnimationKeyFrameRotation + SetNodeAnimationKeyFrameScale + SetNodeAnimationLength + SetNodeAnimationTime + SetNodeAnimationWeight + SetOrientation + SetOrigin + SetRenderQueue + SetRuntimeDouble + SetRuntimeInteger + SetRuntimeString + SetSerialPortStatus + SetSoundFrequency + SetSoundPosition + SetTerrainTileHeightAtPoint + SetTerrainTileLayerBlend + SetToolBarButtonState + SetURLPart + SetWindowCallback + SetWindowColor + SetWindowData + SetWindowState + SetWindowTitle + SetWindowTitle3D + SetXMLAttribute + SetXMLEncoding + SetXMLNodeName + SetXMLNodeOffset + SetXMLNodeText + SetXMLStandalone + SetupTerrains + ShortcutGadget + ShowAssemblyViewer + ShowCallstack + ShowDebugOutput + ShowGUI + ShowLibraryViewer + ShowMemoryViewer + ShowProfiler + ShowVariableViewer + ShowWatchlist + Sign + SignalSemaphore + Sin + SinH + SkyBox + SkyDome + SliderJoint + SmartWindowRefresh + SortArray + SortList + SortStructuredArray + SortStructuredList + SoundCone3D + SoundID3D + SoundLength + SoundListenerLocate + SoundPan + SoundRange3D + SoundStatus + SoundVolume + SoundVolume3D + Space + SpinGadget + SpinGadget3D + SplinePointX + SplinePointY + SplinePointZ + SplineX + SplineY + SplineZ + SplitList + SplitterGadget + SpotLightRange + SpriteBlendingMode + SpriteCollision + SpriteDepth + SpriteHeight + SpriteID + SpriteOutput + SpritePixelCollision + SpriteQuality + SpriteWidth + Sqr + StartAESCipher + StartDrawing + StartEntityAnimation + StartNodeAnimation + StartPrinting + StartProfiler + StatusBarHeight + StatusBarID + StatusBarImage + StatusBarProgress + StatusBarText + StickyWindow + StopAudioCD + StopDrawing + StopEntityAnimation + StopMovie + StopMusic + StopNodeAnimation + StopPrinting + StopProfiler + StopSound + StopSound3D + Str + StrD + StrF + StrU + StringByteLength + StringField + StringGadget + StringGadget3D + SubMeshCount + Sun + SwapElements + SwitchCamera + SysTrayIconToolTip + Tan + TanH + TerrainHeight + TerrainLocate + TerrainMousePick + TerrainPhysicBody + TerrainRenderMode + TerrainTileHeightAtPosition + TerrainTileLayerMapSize + TerrainTilePointX + TerrainTilePointY + TerrainTileSize + Text3DAlignment + Text3DCaption + Text3DColor + Text3DID + TextGadget + TextGadget3D + TextHeight + TextWidth + TextureHeight + TextureID + TextureOutput + TextureWidth + ThreadID + ThreadPriority + ToolBarHeight + ToolBarID + ToolBarImageButton + ToolBarSeparator + ToolBarStandardButton + ToolBarToolTip + TrackBarGadget + TransformMesh + TransformSprite + TransparentSpriteColor + TreeGadget + Trim + TruncateFile + TryLockMutex + TrySemaphore + UCase + URLDecoder + URLEncoder + UnbindEvent + UnbindGadgetEvent + UnbindMenuEvent + UnclipOutput + UncompressMemory + UncompressPackFile + UncompressPackMemory + UnlockMutex + UpdateEntityAnimation + UpdateMesh + UpdateMeshBoundingBox + UpdateRenderTexture + UpdateSplinePoint + UpdateTerrain + UpdateTerrainTileLayerBlend + UpdateVertexPoseReference + UseAudioCD + UseBriefLZPacker + UseFLACSoundDecoder + UseGadgetList + UseJCALG1Packer + UseJPEG2000ImageDecoder + UseJPEG2000ImageEncoder + UseJPEGImageDecoder + UseJPEGImageEncoder + UseLZMAPacker + UseODBCDatabase + UseOGGSoundDecoder + UsePNGImageDecoder + UsePNGImageEncoder + UsePostgreSQLDatabase + UseSQLiteDatabase + UseTGAImageDecoder + UseTIFFImageDecoder + UseZipPacker + UserName + Val + ValD + ValF + VertexPoseReferenceCount + WaitProgram + WaitSemaphore + WaitThread + WaitWindowEvent + WaterColor + WaterHeight + WebGadget + WebGadgetPath + WindowBounds + WindowEvent + WindowEvent3D + WindowHeight + WindowHeight3D + WindowID + WindowID3D + WindowMouseX + WindowMouseY + WindowOutput + WindowWidth + WindowWidth3D + WindowX + WindowX3D + WindowY + WindowY3D + WorldCollisionAppliedImpulse + WorldCollisionContact + WorldCollisionNormal + WorldDebug + WorldGravity + WorldShadows + WriteAsciiCharacter + WriteByte + WriteCharacter + WriteConsoleData + WriteData + WriteDouble + WriteFloat + WriteInteger + WriteLong + WritePreferenceDouble + WritePreferenceFloat + WritePreferenceInteger + WritePreferenceLong + WritePreferenceQuad + WritePreferenceString + WriteProgramData + WriteProgramString + WriteProgramStringN + WriteQuad + WriteSerialPortData + WriteSerialPortString + WriteString + WriteStringFormat + WriteStringN + WriteUnicodeCharacter + WriteWord + XMLAttributeName + XMLAttributeValue + XMLChildCount + XMLError + XMLErrorLine + XMLErrorPosition + XMLNodeFromID + XMLNodeFromPath + XMLNodePath + XMLNodeType + XMLStatus + Yaw + Year + ZoomSprite + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/python.xml b/src/data/extra/syntax-highlighting/syntax/python.xml new file mode 100644 index 00000000..33a313a6 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/python.xml @@ -0,0 +1,688 @@ + + + + + + + + + + + + + + + + + + import + from + as + + + class + def + del + global + lambda + nonlocal + + + and + in + is + not + or + + + assert + break + continue + elif + else + except + finally + for + if + pass + raise + return + try + while + with + yield + async + await + + + __import__ + abs + all + any + apply + ascii + basestring + bin + bool + buffer + bytearray + bytes + callable + chr + classmethod + cmp + coerce + compile + complex + delattr + dict + dir + divmod + enumerate + eval + exec + execfile + file + filter + float + format + frozenset + getattr + globals + hasattr + hash + help + hex + id + input + int + intern + isinstance + issubclass + iter + len + list + locals + long + map + max + memoryview + min + next + object + oct + open + ord + pow + print + property + range + raw_input + reduce + reload + repr + reversed + round + set + setattr + slice + sorted + staticmethod + str + sum + super + tuple + type + unichr + unicode + vars + xrange + zip + + + None + self + True + False + NotImplemented + Ellipsis + __debug__ + __file__ + __name__ + + + SIGNAL + SLOT + connect + + + __new__ + __init__ + __del__ + __repr__ + __str__ + __lt__ + __le__ + __eq__ + __ne__ + __gt__ + __ge__ + __cmp__ + __rcmp__ + __hash__ + __nonzero__ + __unicode__ + __getattr__ + __setattr__ + __delattr__ + __getattribute__ + __get__ + __set__ + __delete__ + __call__ + __len__ + __getitem__ + __setitem__ + __delitem__ + __iter__ + __reversed__ + __contains__ + __getslice__ + __setslice__ + __delslice__ + __add__ + __sub__ + __mul__ + __floordiv__ + __mod__ + __divmod__ + __pow__ + __lshift__ + __rshift__ + __and__ + __xor__ + __or__ + __div__ + __truediv__ + __radd__ + __rsub__ + __rmul__ + __rdiv__ + __rtruediv__ + __rfloordiv__ + __rmod__ + __rdivmod__ + __rpow__ + __rlshift__ + __rrshift__ + __rand__ + __rxor__ + __ror__ + __iadd__ + __isub__ + __imul__ + __idiv__ + __itruediv__ + __ifloordiv__ + __imod__ + __ipow__ + __ilshift__ + __irshift__ + __iand__ + __ixor__ + __ior__ + __neg__ + __pos__ + __abs__ + __invert__ + __complex__ + __int__ + __long__ + __float__ + __oct__ + __hex__ + __index__ + __coerce__ + __enter__ + __exit__ + __bytes__ + __format__ + __next__ + __dir__ + __await__ + __aiter__ + __anext__ + __aenter__ + __aexit__ + + + + ArithmeticError + AssertionError + AttributeError + BaseException + BlockingIOError + BrokenPipeError + BufferError + BytesWarning + ChildProcessError + ConnectionAbortedError + ConnectionError + ConnectionRefusedError + ConnectionResetError + DeprecationWarning + EnvironmentError + EOFError + Exception + FileExistsError + FileNotFoundError + FloatingPointError + FutureWarning + GeneratorExit + ImportError + ImportWarning + IndentationError + IndexError + InterruptedError + IOError + IsADirectoryError + KeyboardInterrupt + KeyError + LookupError + MemoryError + NameError + NotADirectoryError + NotImplementedError + OSError + OverflowError + PendingDeprecationWarning + PermissionError + ProcessLookupError + ReferenceError + ResourceWarning + RuntimeError + RuntimeWarning + StandardError + StopIteration + SyntaxError + SyntaxWarning + SystemError + SystemExit + TabError + TimeoutError + TypeError + UnboundLocalError + UnicodeDecodeError + UnicodeEncodeError + UnicodeError + UnicodeTranslateError + UnicodeWarning + UserWarning + ValueError + Warning + WindowsError + ZeroDivisionError + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/q.xml b/src/data/extra/syntax-highlighting/syntax/q.xml new file mode 100644 index 00000000..c8fbc8b2 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/q.xml @@ -0,0 +1,210 @@ + + + + + + .Q.addmonths + .Q.addr + .Q.host + .Q.chk + .Q.cn + .Q.dd + .Q.dpft + .Q.dsftg + .Q.def + .Q.en + .Q.fc + .Q.fk + .Q.fmt + .Q.fs + .Q.ft + .Q.fu + .Q.gc + .Q.hdpf + .Q.ind + .Q.j10 + .Q.x10 + .Q.j12 + .Q.x12 + .Q.k + .Q.l + .Q.opt + .Q.par + .Q.qp + .Q.qt + .Q.s + .Q.ty + .Q.v + .Q.V + .Q.view + .Q.w + .Q.M + .Q.pf + .Q.pt + .Q.PD + .Q.PV + .Q.pd + .Q.pv + .Q.pn + .Q.bv + .Q.vp + .Q.P + .Q.D + .Q.u + + + aj + aj0 + all + and + any + asc + asof + attr + avgs + ceiling + cols + cor + count + cov + cross + csv + cut + deltas + desc + dev + differ + distinct + each + ej + enlist + eval + except + fby + fills + first + fkeys + flip + floor + from + get + group + gtime + hclose + hcount + hdel + hopen + hsym + iasc + idesc + ij + inter + inv + key + keys + lj + load + lower + lsq + ltime + ltrim + mavg + maxs + mcount + md5 + mdev + med + meta + mins + mmax + mmin + mmu + mod + msum + neg + next + not + null + or + over + parse + peach + pj + plist + prds + prev + prior + rand + rank + ratios + raze + read0 + read1 + reciprocal + reverse + rload + rotate + rsave + rtrim + save + scan + set + show + signum + ssr + string + sublist + sums + sv + system + tables + til + trim + txf + type + uj + ungroup + union + update + upper + upsert + value + var + view + views + vs + where + wj + wj1 + xasc + xbar + xcol + xcols + xdesc + xgroup + xkey + xlog + xprev + xrank + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/qdocconf.xml b/src/data/extra/syntax-highlighting/syntax/qdocconf.xml new file mode 100644 index 00000000..0efd6edc --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/qdocconf.xml @@ -0,0 +1,136 @@ + + + + + + alias + buildversion + Cpp + customFilters + defines + depends + description + dita + edition + endheader + exampledirs + examples + excludedirs + excludefiles + falsehoods + file + filterAttributes + headerdirs + headers + HTML + imagedirs + images + indexes + indexRoot + indexTitle + language + macro + manifestmeta + name + namespace + navigation + outputdir + outputformats + outputprefixes + outputsuffixes + project + projects + qhp + selectors + sortPages + sourcedirs + sources + sources.fileextensions + spurious + subprojects + tabsize + tagfile + title + type + url + version + versionsym + virtualFolder + + + include + + + namespace + class + qmltype + qmlclass + module + qmlmodule + doc + fake + group + example + headerfile + page + manual + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/qmake.xml b/src/data/extra/syntax-highlighting/syntax/qmake.xml new file mode 100644 index 00000000..bae7296f --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/qmake.xml @@ -0,0 +1,659 @@ + + + + + + + CONFIG + DEFINES + DEF_FILE + DEPENDPATH + DEPLOYMENT_PLUGIN + DESTDIR + DISTFILES + DLLDESTDIR + FORMS + GUID + HEADERS + ICON + IDLSOURCES + INCLUDEPATH + INSTALLS + LEXIMPLS + LEXOBJECTS + LEXSOURCES + LIBS + LITERAL_HASH + MAKEFILE + MAKEFILE_GENERATOR + MOC_DIR + MSVCPROJ_ + OBJECTS + OBJECTS_DIR + OUT_PWD + POST_TARGETDEPS + PRECOMPILED_HEADER + PRE_TARGETDEPS + PWD + QMAKE + QMAKESPEC + QMAKE_ACTOOL + QMAKE_AIX_SHLIB + QMAKE_ANDROID_PLATFORM_INCDIR + QMAKE_ANDROID_PLATFORM_LIBDIR + QMAKE_APPLE_DEVICE_ARCHS + QMAKE_APPLE_SIMULATOR_ARCHS + QMAKE_APPLE_TARGETED_DEVICE_FAMILY + QMAKE_APPLICATION_BUNDLE_NAME + QMAKE_AR + QMAKE_ARGS + QMAKE_AR_CMD + QMAKE_AR_LTCG + QMAKE_ASSET_CATALOGS + QMAKE_ASSET_CATALOGS_APP_ICON + QMAKE_ASSET_CATALOGS_BUILD_PATH + QMAKE_ASSET_CATALOGS_INSTALL_PATH + QMAKE_BUNDLE_DATA + QMAKE_BUNDLE_EXTENSION + QMAKE_BUNDLE_NAME + QMAKE_BUNDLE_QML + QMAKE_CACHE_ + QMAKE_CC + QMAKE_CC_THREAD + QMAKE_CD + QMAKE_CFLAGS + QMAKE_CFLAGS_ + QMAKE_CFLAGS_APP + QMAKE_CFLAGS_AVX + QMAKE_CFLAGS_AVX2 + QMAKE_CFLAGS_AVX512BW + QMAKE_CFLAGS_AVX512CD + QMAKE_CFLAGS_AVX512DQ + QMAKE_CFLAGS_AVX512ER + QMAKE_CFLAGS_AVX512F + QMAKE_CFLAGS_AVX512IFMA + QMAKE_CFLAGS_AVX512PF + QMAKE_CFLAGS_AVX512VBMI + QMAKE_CFLAGS_AVX512VL + QMAKE_CFLAGS_DEBUG + QMAKE_CFLAGS_DEPS + QMAKE_CFLAGS_DISABLE_LTCG + QMAKE_CFLAGS_EGL + QMAKE_CFLAGS_EXCEPTIONS_OFF + QMAKE_CFLAGS_EXCEPTIONS_ON + QMAKE_CFLAGS_HIDESYMS + QMAKE_CFLAGS_ISYSTEM + QMAKE_CFLAGS_LTCG + QMAKE_CFLAGS_LTCG_FATOBJECTS + QMAKE_CFLAGS_MP + QMAKE_CFLAGS_NEON + QMAKE_CFLAGS_OPTIMIZE + QMAKE_CFLAGS_OPTIMIZE_FULL + QMAKE_CFLAGS_PIC + QMAKE_CFLAGS_PRECOMPILE + QMAKE_CFLAGS_RELEASE + QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO + QMAKE_CFLAGS_RTTI_OFF + QMAKE_CFLAGS_RTTI_ON + QMAKE_CFLAGS_SHLI + QMAKE_CFLAGS_SHLIB + QMAKE_CFLAGS_SPLIT_SECTIONS + QMAKE_CFLAGS_SSE2 + QMAKE_CFLAGS_SSE3 + QMAKE_CFLAGS_SSE4_1 + QMAKE_CFLAGS_SSE4_2 + QMAKE_CFLAGS_SSSE3 + QMAKE_CFLAGS_STATIC_LIB + QMAKE_CFLAGS_STL_OFF + QMAKE_CFLAGS_STL_ON + QMAKE_CFLAGS_THREAD + QMAKE_CFLAGS_USE_PRECOMPILE + QMAKE_CFLAGS_WARN_OFF + QMAKE_CFLAGS_WARN_ON + QMAKE_CFLAGS_X11 + QMAKE_CFLAGS_YACC + QMAKE_CHK_DIR_EXISTS + QMAKE_CHK_EXISTS + QMAKE_CLEAN + QMAKE_CLFAGS_THREAD + QMAKE_COMMON_SANITIZE_CFLAGS + QMAKE_COMMON_SANITIZE_CXXFLAGS + QMAKE_COMPILER + QMAKE_COMPILER_DEFINES + QMAKE_CONFIG_CACHE + QMAKE_CONFIG_CACHE_USE + QMAKE_CONFIG_DEPS + QMAKE_CONFIG_LOG + QMAKE_CONFIG_TESTS_DIR + QMAKE_CONFIG_VERBOSE + QMAKE_CONF_ + QMAKE_COPY + QMAKE_COPY_DIR + QMAKE_COPY_FILE + QMAKE_CPP_MOD_MOC + QMAKE_CXX + QMAKE_CXXFLAGS + QMAKE_CXXFLAGS_ + QMAKE_CXXFLAGS_APP + QMAKE_CXXFLAGS_CXX11 + QMAKE_CXXFLAGS_CXX14 + QMAKE_CXXFLAGS_CXX1Z + QMAKE_CXXFLAGS_DEBUG + QMAKE_CXXFLAGS_DEPS + QMAKE_CXXFLAGS_DISABLE_LTCG + QMAKE_CXXFLAGS_EXCEPTIONS_OFF + QMAKE_CXXFLAGS_EXCEPTIONS_ON + QMAKE_CXXFLAGS_GNU + QMAKE_CXXFLAGS_GNUCXX11 + QMAKE_CXXFLAGS_GNUCXX14 + QMAKE_CXXFLAGS_GNUCXX1Z + QMAKE_CXXFLAGS_HIDESYMS + QMAKE_CXXFLAGS_LTCG + QMAKE_CXXFLAGS_LTCG_FATOBJECTS + QMAKE_CXXFLAGS_MP + QMAKE_CXXFLAGS_PRECOMPILE + QMAKE_CXXFLAGS_RELEASE + QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO + QMAKE_CXXFLAGS_RTTI_OFF + QMAKE_CXXFLAGS_RTTI_ON + QMAKE_CXXFLAGS_SHLIB + QMAKE_CXXFLAGS_SPLIT_SECTIONS + QMAKE_CXXFLAGS_STATIC_LB + QMAKE_CXXFLAGS_STATIC_LIB + QMAKE_CXXFLAGS_STL_OFF + QMAKE_CXXFLAGS_STL_ON + QMAKE_CXXFLAGS_THREAD + QMAKE_CXXFLAGS_USE_PRECOMPILE + QMAKE_CXXFLAGS_WARN_OFF + QMAKE_CXXFLAGS_WARN_ON + QMAKE_CXXFLAGS_YACC + QMAKE_CXX_THREAD + QMAKE_DEFAULT_INCDIRS + QMAKE_DEFAULT_LIBDIRS + QMAKE_DEFINES_ + QMAKE_DEFINES_WAYLAND + QMAKE_DEL_DIR + QMAKE_DEL_FILE + QMAKE_DEL_TREE + QMAKE_DIRLIST_SEP + QMAKE_DIR_REPLACE + QMAKE_DIR_REPLACE_SANE + QMAKE_DIR_SEP + QMAKE_DISTCLEAN + QMAKE_DLL_PATHS + QMAKE_DOCS + QMAKE_DOCS_BASE_OUTDIR + QMAKE_DOCS_OUTPUTDIR + QMAKE_DOCS_TARGET + QMAKE_DOCS_TARGETDIR + QMAKE_DSYMUTIL + QMAKE_DUMPCPP + QMAKE_DUMPCPP_EXE + QMAKE_DYNAMIC_LIST_FILE + QMAKE_EXCLUSIVE_BUILDS + QMAKE_EXPORT_CFLAGS + QMAKE_EXPORT_CXXFLAGS + QMAKE_EXTENSION_PLUGIN + QMAKE_EXTENSION_SHLIB + QMAKE_EXTENSION_STATICLIB + QMAKE_EXTRA_ARGS + QMAKE_EXTRA_COMPILERS + QMAKE_EXTRA_INCLUDES + QMAKE_EXTRA_TARGETS + QMAKE_EXTRA_VARIABLES + QMAKE_EXT_C + QMAKE_EXT_CPP + QMAKE_EXT_CPP_MOC + QMAKE_EXT_H + QMAKE_EXT_H_MOC + QMAKE_EXT_JS + QMAKE_EXT_LEX + QMAKE_EXT_LIBTOOL + QMAKE_EXT_MOC + QMAKE_EXT_OBJ + QMAKE_EXT_OBJC + QMAKE_EXT_OBJCXX + QMAKE_EXT_PKGCONFIG + QMAKE_EXT_PRL + QMAKE_EXT_RES + QMAKE_EXT_REZ + QMAKE_EXT_UI + QMAKE_EXT_YACC + QMAKE_FAILED_REQUIREMENTS + QMAKE_FILE_BASE + QMAKE_FILE_IN + QMAKE_FILE_IN_NAME + QMAKE_FILE_NAME + QMAKE_FILE_OUT + QMAKE_FILE_OUT_BASE + QMAKE_FILE_OUT_PATH + QMAKE_FIX_RPATH + QMAKE_FRAMEWORKPATH + QMAKE_FRAMEWORKPATH_FLAGS + QMAKE_FRAMEWORK_BUNDLE_NAME + QMAKE_FRAMEWORK_VERSION + QMAKE_FUNC_ + QMAKE_FUNC_FILE_IN_ + QMAKE_GCC + QMAKE_GZIP + QMAKE_HOST + QMAKE_HPUX_SHLIB + QMAKE_H_MOD_MOC + QMAKE_IDC + QMAKE_IDL + QMAKE_INCDIR + QMAKE_INCDIR_ + QMAKE_INCDIR_EGL + QMAKE_INCDIR_OPENGL + QMAKE_INCDIR_OPENGL_ES2 + QMAKE_INCDIR_OPENVG + QMAKE_INCDIR_POST + QMAKE_INCDIR_THREAD + QMAKE_INCDIR_WAYLAND + QMAKE_INCDIR_X11 + QMAKE_INCREMENTAL_STYLE + QMAKE_INFO_PLIST + QMAKE_INSTALL_DIR + QMAKE_INSTALL_FILE + QMAKE_INSTALL_PROGRAM + QMAKE_INTERNAL_INCLUDED_FILES + QMAKE_IOS_DEPLOYMENT_TARGET + QMAKE_IOS_TARGETED_DEVICE_FAMILY + QMAKE_LEX + QMAKE_LEXEXTRAFLAGS + QMAKE_LEXFLAGS + QMAKE_LEXFLAGS_MANGLE + QMAKE_LFLAGS + QMAKE_LFLAGS_ + QMAKE_LFLAGS_APP + QMAKE_LFLAGS_BSYMBOLIC_FUNC + QMAKE_LFLAGS_COMPAT_VERSION + QMAKE_LFLAGS_CONSOLE + QMAKE_LFLAGS_CXX11 + QMAKE_LFLAGS_CXX14 + QMAKE_LFLAGS_CXX1Z + QMAKE_LFLAGS_DEBUG + QMAKE_LFLAGS_DLL + QMAKE_LFLAGS_DYNAMIC_LIST + QMAKE_LFLAGS_EGL + QMAKE_LFLAGS_EXCEPTIONS_OFF + QMAKE_LFLAGS_EXCEPTIONS_ON + QMAKE_LFLAGS_EXE + QMAKE_LFLAGS_GCSECTIONS + QMAKE_LFLAGS_HEADERPAD + QMAKE_LFLAGS_HIDESYMS + QMAKE_LFLAGS_INCREMENTAL + QMAKE_LFLAGS_LTCG + QMAKE_LFLAGS_NEW_DTAGS + QMAKE_LFLAGS_NOUNDEF + QMAKE_LFLAGS_OPENGL + QMAKE_LFLAGS_PLUGIN + QMAKE_LFLAGS_RELEASE + QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO + QMAKE_LFLAGS_REL_RPATH + QMAKE_LFLAGS_RPATH + QMAKE_LFLAGS_RPATHLINK + QMAKE_LFLAGS_SHLIB + QMAKE_LFLAGS_SONAME + QMAKE_LFLAGS_STATIC_LIB + QMAKE_LFLAGS_THREAD + QMAKE_LFLAGS_USE_GOLD + QMAKE_LFLAGS_VERSION + QMAKE_LFLAGS_VERSION_SCRIPT + QMAKE_LFLAGS_WINDOWS + QMAKE_LIB + QMAKE_LIBDIR + QMAKE_LIBDIR_ + QMAKE_LIBDIR_EGL + QMAKE_LIBDIR_FLAGS + QMAKE_LIBDIR_OPENGL + QMAKE_LIBDIR_OPENGL_ES2 + QMAKE_LIBDIR_OPENGL_ES2_DEBUG + QMAKE_LIBDIR_OPENGL_ES2_RELEASE + QMAKE_LIBDIR_OPENVG + QMAKE_LIBDIR_POST + QMAKE_LIBDIR_WAYLAND + QMAKE_LIBDIR_X11 + QMAKE_LIBFLAGS + QMAKE_LIBFLAGS_DEBUG + QMAKE_LIBFLAGS_RELEASE + QMAKE_LIBS + QMAKE_LIBS_ + QMAKE_LIBS_COMPAT + QMAKE_LIBS_CORE + QMAKE_LIBS_DYNLOAD + QMAKE_LIBS_EGL + QMAKE_LIBS_EXECINFO + QMAKE_LIBS_GUI + QMAKE_LIBS_NETWORK + QMAKE_LIBS_NIS + QMAKE_LIBS_OPENGL + QMAKE_LIBS_OPENGL_ES1 + QMAKE_LIBS_OPENGL_ES2 + QMAKE_LIBS_OPENGL_ES2_DEBUG + QMAKE_LIBS_OPENGL_QT + QMAKE_LIBS_OPENVG + QMAKE_LIBS_PRIVATE + QMAKE_LIBS_QT_ENTRY + QMAKE_LIBS_THREAD + QMAKE_LIBS_WAYLAND_CLIENT + QMAKE_LIBS_WAYLAND_SERVER + QMAKE_LIBS_X11 + QMAKE_LIBS_YACC + QMAKE_LIBTOOL_INSTALL_REPLACE + QMAKE_LIBTOOL_LIBDIR + QMAKE_LIB_EXTENSIONS + QMAKE_LIB_FLAG + QMAKE_LICHECK_TIMESTAMP + QMAKE_LINK + QMAKE_LINK_C + QMAKE_LINK_C_SHLIB + QMAKE_LINK_OBJECT_MAX + QMAKE_LINK_OBJECT_SCRIPT + QMAKE_LINK_SHLIB + QMAKE_LINK_SHLIB_CMD + QMAKE_LINK_THREAD + QMAKE_LN_SHLIB + QMAKE_LSB + QMAKE_MACOSX_DEPLOYMENT_TARGET + QMAKE_MAC_SDK + QMAKE_MAC_SDK_PATH + QMAKE_MAC_SDK_PLATFORM_PATH + QMAKE_MAC_SDK_VERSION + QMAKE_MAC_XCODE_SETTINGS + QMAKE_MAKE + QMAKE_MAKEFILE + QMAKE_MKDIR + QMAKE_MKDIR_CMD + QMAKE_MKSPECS + QMAKE_MOC + QMAKE_MOC_EXE + QMAKE_MOC_OPTIONS + QMAKE_MODULE_PATH + QMAKE_MOD_LEX + QMAKE_MOD_RCC + QMAKE_MOD_UIC + QMAKE_MOD_YACC + QMAKE_MOVE + QMAKE_NM + QMAKE_NM_LTCG + QMAKE_OBJCFLAGS_PRECOMPILE + QMAKE_OBJCFLAGS_USE_PRECOMPILE + QMAKE_OBJCOPY + QMAKE_OBJCXXFLAGS_PRECOMPILE + QMAKE_OBJCXXFLAGS_USE_PRECOMPILE + QMAKE_OBJC_NAMESPACE_EXCLUDE + QMAKE_OBJC_NAMESPACE_EXCLUDE_REGEX + QMAKE_OBJC_NAMESPACE_SUFFIX + QMAKE_OBJECTIVE_CFLAGS + QMAKE_ORIG_TARGET + QMAKE_OUTDIR + QMAKE_PATH_ENV + QMAKE_PBX_BUNDLE_TYPE + QMAKE_PBX_PRODUCT_TYPE + QMAKE_PCH_ARCH + QMAKE_PCH_ARCHS + QMAKE_PCH_INPUT + QMAKE_PCH_OUTPUT + QMAKE_PCH_OUTPUT_ + QMAKE_PCH_OUTPUT_BASE + QMAKE_PCH_OUTPUT_EXT + QMAKE_PCH_TEMP_OBJECT + QMAKE_PCH_TEMP_SOURCE + QMAKE_PKGCONFIG_CFLAGS + QMAKE_PKGCONFIG_DESCRIPTION + QMAKE_PKGCONFIG_DESTDIR + QMAKE_PKGCONFIG_FILE + QMAKE_PKGCONFIG_INCDIR + QMAKE_PKGCONFIG_INSTALL_REPLACE + QMAKE_PKGCONFIG_LIBDIR + QMAKE_PKGCONFIG_NAME + QMAKE_PKGCONFIG_REQUIRES + QMAKE_PKG_CONFIG + QMAKE_PLATFORM + QMAKE_PLUGIN_BUNDLE_NAME + QMAKE_POST_CONFIGURE + QMAKE_POST_LINK + QMAKE_PREFIX_SHLIB + QMAKE_PREFIX_STATICLIB + QMAKE_PRE_LINK + QMAKE_PRL_INSTALL_REPLACE + QMAKE_PRL_LIBS + QMAKE_PROJECT_NAME + QMAKE_QDBUSXML2CPP + QMAKE_QDBUSXML2CPP_EXE + QMAKE_QGLTF + QMAKE_QGLTF_EXE + QMAKE_QLALR + QMAKE_QLALRFLAGS + QMAKE_QLALR_EXE + QMAKE_QMAKE + QMAKE_QML_BUNDLE_PATH + QMAKE_QTCONF + QMAKE_QTWAYLANDSCANNER + QMAKE_QTWAYLANDSCANNER_EXE + QMAKE_QT_CONFIG + QMAKE_QT_MODULE + QMAKE_RANLIB + QMAKE_RANLIB_LTCG + QMAKE_RC + QMAKE_RCC + QMAKE_RCC_DEP + QMAKE_RCC_EXE + QMAKE_REL_RPATH_BASE + QMAKE_RESOLVED_BUNDLE + QMAKE_RESOLVED_TARGET + QMAKE_RESOURCE + QMAKE_RESOURCE_FLAGS + QMAKE_RESOURCE_ROOT + QMAKE_REZ + QMAKE_RPATHDIR + QMAKE_RPATHLINK + QMAKE_RPATHLINKDIR + QMAKE_RUN_CC + QMAKE_RUN_CC_IMP + QMAKE_RUN_CC_IMP_BATCH + QMAKE_RUN_CXX + QMAKE_RUN_CXX_IMP + QMAKE_RUN_CXX_IMP_BATCH + QMAKE_SANITIZE_ADDRESS_CFLAGS + QMAKE_SANITIZE_ADDRESS_CXXFLAGS + QMAKE_SANITIZE_ADDRESS_LFLAGS + QMAKE_SANITIZE_MEMORY_CFLAGS + QMAKE_SANITIZE_MEMORY_CXXFLAGS + QMAKE_SANITIZE_MEMORY_LFLAGS + QMAKE_SANITIZE_THREAD_CFLAGS + QMAKE_SANITIZE_THREAD_CXXFLAGS + QMAKE_SANITIZE_THREAD_LFLAGS + QMAKE_SANITIZE_UNDEFINED_CFLAGS + QMAKE_SANITIZE_UNDEFINED_CXXFLAGS + QMAKE_SANITIZE_UNDEFINED_LFLAGS + QMAKE_SH + QMAKE_SONAME_PREFIX + QMAKE_SPEC + QMAKE_STREAM_EDITOR + QMAKE_STRIP + QMAKE_STRIPFLAGS_LIB + QMAKE_SUBSTITUTES + QMAKE_SUPER_CACHE_ + QMAKE_SYMBOLIC_LINK + QMAKE_SYNCQT + QMAKE_SYNCQT_OPTIONS + QMAKE_TAR + QMAKE_TARGET + QMAKE_TARGET_BUNDLE_PREFIX + QMAKE_TARGET_COMPANY + QMAKE_TARGET_COPYRIGHT + QMAKE_TARGET_DEBUG_INFO + QMAKE_TARGET_DESCRIPTION + QMAKE_TARGET_PRODUCT + QMAKE_TVOS_DEPLOYMENT_TARGET + QMAKE_UIC + QMAKE_UIC_DEP + QMAKE_UIC_EXE + QMAKE_USE + QMAKE_USE_FOR_PRIVATE + QMAKE_USE_PRIVATE + QMAKE_VAR_OBJECTS_DIR + QMAKE_WATCHOS_DEPLOYMENT_TARGET + QMAKE_WAYLAND_SCANNER + QMAKE_WINDEPLOYQT + QMAKE_XARCH_CFLAGS + QMAKE_XARCH_CFLAGS_ + QMAKE_XARCH_LFLAGS + QMAKE_XARCH_LFLAGS_ + QMAKE_XCODE_ARCHS + QMAKE_XCODE_CODE_SIGN_IDENTITY + QMAKE_XCODE_DEBUG_INFORMATION_FORMAT + QMAKE_XCODE_DEVELOPER_PATH + QMAKE_XCODE_GCC_VERSION + QMAKE_XCODE_LIBRARY_SUFFIX + QMAKE_XCODE_LIBRARY_SUFFIX_SETTING + QMAKE_XCODE_PREFERENCES_FILE + QMAKE_XCODE_SPECDIR + QMAKE_XCODE_VERSION + QMAKE_XSPEC + QMAKE_YACC + QMAKE_YACCDECLFLAGS + QMAKE_YACCFLAGS + QMAKE_YACCFLAGS_MANGLE + QMAKE_YACC_HEADER + QMAKE_YACC_SOURCE + QMAKE_ZIP + QT + QTPLUGIN + QT_MAJOR_VERSION + QT_MINOR_VERSION + QT_PATCH_VERSION + QT_VERSION + RCC_DIR + RC_CODEPAGE + RC_DEFINES + RC_FILE + RC_ICONS + RC_INCLUDEPATH + RC_LANG + REQUIRES + RESOURCES + RES_FILE + SIGNATURE_FILE + SOURCES + SUBDIRS + TARGET + TARGET_ + TARGET_EXT + TEMPLATE + TRANSLATIONS + UI_DIR + VERSION + VERSION_PE_HEADER + VER_MAJ + VER_MIN + VER_PAT + VPATH + WINRT_MANIFEST + YACCSOURCES + _PRO_FILE_ + _PRO_FILE_PWD_ + + + CONFIG + cache + clear + contains + count + debug + defined + discard_from + equals + error + eval + exists + export + greaterThan + if + include + infile + isActiveConfig + isEmpty + isEqual + lessThan + load + log + message + mkpath + parseJson + requires + system + touch + unset + warning + write_file + + + build_pass + debug + debug_and_release + linux + macx + msvc + release + unix + win32 + + + else + for + if + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/qml.xml b/src/data/extra/syntax-highlighting/syntax/qml.xml new file mode 100644 index 00000000..a40baa23 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/qml.xml @@ -0,0 +1,173 @@ + + + + + + + + State + PropertyChanges + StateGroup + ParentChange + StateChangeScript + AnchorChanges + PropertyAnimation + NumberAnimation + ColorAnimation + SequentialAnimation + ParallelAnimation + PauseAnimation + PropertyAction + ParentAction + ScriptAction + Transition + SpringFollow + EaseFollow + Behavior + Binding + ListModel + ListElement + VisualItemModel + XmlListModel + XmlRole + DateTimeFormatter + NumberFormatter + Script + Connections + Component + Timer + QtObject + Item + Rectangle + Image + BorderImage + Text + TextInput + TextEdit + MouseArea + FocusScope + Flickable + Flipable + WebView + Loader + Repeater + SystemPalette + GraphicsObjectContainer + LayoutItem + ListView + GridView + PathView + Path + PathLine + PathQuad + PathCubic + PathAttribute + PathPercent + Column + Row + Grid + Scale + Rotation + Blur + Colorize + DropShadow + Opacity + Particles + ParticleMotionLinear + ParticleMotionGravity + ParticleMotionWander + + Gradient + GradientStop + MouseRegion + + + + readonly + + + + string + int + bool + date + color + url + real + double + var + variant + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/r.xml b/src/data/extra/syntax-highlighting/syntax/r.xml new file mode 100644 index 00000000..144418a0 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/r.xml @@ -0,0 +1,152 @@ + + + + + + + + for + in + next + break + while + repeat + if + else + switch + function + + + TRUE + FALSE + NULL + NA + NA_integer_ + NA_real_ + NA_complex_ + NA_character_ + Inf + NaN + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/rapidq.xml b/src/data/extra/syntax-highlighting/syntax/rapidq.xml new file mode 100644 index 00000000..67a7a8e9 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/rapidq.xml @@ -0,0 +1,432 @@ + + + + + + abs + acos + asc + asin + atn + atan + bin$ + bind + callfunc + chdir + chr$ + cint + clng + const + convbase$ + cos + data + date$ + dec + def + delete$ + dim + dir$ + direxists + doevents + end + environ + environ$ + exp + extractresource + field$ + fileexists + fix + format$ + frac + hex$ + iif + inc + inp + insert$ + instr + int + kill + lcase$ + left$ + len + log + lbound + lflush + lprint + ltrim$ + messagedlg + mid$ + mkdir + out + playwav + postmessage + quicksort + randomize + read + redim + rem + rename + replace$ + replacesubstr$ + resource + resourcecount + restore + reverse$ + rgb + right$ + rinstr + rmdir + rnd + round + rtrim$ + run + sendmessage + sgn + shell + showmessage + sin + sizeof + space$ + sqr + str$ + strf$ + string$ + swap + tally + tan + time$ + timer + ubound + ucase$ + val + varptr + varptr$ + true + false + sound + call + goto + gosub + sub + function + declare + do + doevent + loop + while + wend + until + if + then + elseif + select + case + functioni + subi + create + type + exit + messagebox + as + string + integer + word + long + byte + off + on + else + gui + for + next + with + mask + and + or + constructor + extends + defint + defstr + static + public + private + event + single + double + to + + + clipboard + printer + qbitmap + qbutton + qcanvas + qcheckbox + qcombobox + qcomport + qcoolbtn + qdirtree + qedit + qfilelistbox + qfilestream + qfont + qfontdialog + qform + qgauge + qglassframe + qgroupbox + qheader + qimage + qimagelist + qlabel + qlistbox + qlistview + qmainmenu + qmemorystream + qmenuitem + qmysql + qnotifyicondata + qopendialog + qoutline + qovalbtn + qpanel + qpopupmenu + qradiobutton + qrect + qregistry + qrichedit + qsavedialog + qscrollbar + qsocket + qsplitter + qstatusbar + qstringgrid + qstringlist + qtabcontrol + qtimer + qtrackbar + qdximagelist + qdxscreen + qdxtimer + qd3dface + qd3dframe + qd3dlight + qd3dmesh + qd3dtexture + qd3dvector + qd3dvisual + qd3dwarp + application + screen + command$ + curdir$ + sender + + + $apptype + $typecheck + $include + $resource + $define + $undef + $ifdef + $ifndef + $option + $optimize + $escapechars + $EndIf + + + left + top + width + height + open + close + readstring + readinteger + readudt + writestring + writeinteger + writeudt + rootkey + openkey + closekey + flat + cursor + showhint + hint + transparent + caption + onclick + onkeydown + onkeyup + onmousedown + onmouseup + tag + color + onchange + autosize + borderstyle + wordwrap + align + alignment + font + visible + enabled + readline + writeline + additems + addstrings + addstring + delitems + itemcount + itemindex + item + handle + icon + bmphandle + terminate + wndproc + onclose + ontimer + interval + name + size + addstyles + hidetitlebar + show + showmodal + text + button + labelstyle + center + taborder + position + delbordericons + onshow + addbordericons + onkeypress + key + mousex + mousey + onpaint + parent + icohandle + directory + filter + execute + + + filename + bevelinner + bold + checked + clear + underline + maxlength + inputmask + forecolor + + backcolor + deldrivetypes + adddrivetypes + update + bevelouter + + loadfromfile + subitem + viewstyle + rowselect + readonly + gridlines + + addcolumns + oncolumnclick + ondblclick + addsubitem + scrollbars + + addchilditems + plaintext + selstart + sellength + sorted + ColCount + + onmoved + groupindex + OnResize + RowCount + cell + TabPosition + KeyPreview + AddTabs + DelTabs + HotTrack + TabIndex + SizeGrip + AddPanels + Panel + DefaultColWidth + FixedCols + AddOptions + Separator + Col + Row + Rectangle + FillRect + Draw + Count + Line + Circle + TextWidth + TextHeight + TextOut + BeginDoc + EndDoc + CopyRect + FilterIndex + SaveToStream + LoadFromStream + PrinterIndex + Orientation + PageWidth + PageHeight + Right + Bottom + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/rdoc.xml b/src/data/extra/syntax-highlighting/syntax/rdoc.xml new file mode 100644 index 00000000..e6d73cdd --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/rdoc.xml @@ -0,0 +1,388 @@ + + + + + + unix + windows + + + example + html + latex + text + TRUE + FALSE + + + + \docType + \encoding + \keyword + \name + + + \author + \concept + \description + \details + \format + \note + \references + \seealso + \source + \title + + + \section + + + \newcommand + \renewcommand + + + \examples + \usage + + + \alias + \Rdversion + \synopsis + \RdOpts + + + \arguments + \value + + + + + \acronym + \bold + \cite + \command + \dfn + \dQuote + \emph + \file + \linkS4class + \pkg + \sQuote + \strong + \var + + + \enc + \method + \S3method + \S4method + + + \subsection + + + \newcommand + \renewcommand + + + \enumerate + \itemize + + + \item + + + \describe + + + \if + \ifelse + + + \code + + + \email + \env + \kbd + \option + \out + \preformatted + \samp + \url + \verb + \deqn + \eqn + + + \tabular + \href + \figure + + + \link + + + \Sexpr + + + + \dontrun + \special + \v + \var + + + \method + \S3method + \S4method + + + \l + \link + + + \dontshow + \donttest + \testonly + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/relaxng.xml b/src/data/extra/syntax-highlighting/syntax/relaxng.xml new file mode 100644 index 00000000..28fdb313 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/relaxng.xml @@ -0,0 +1,119 @@ + + + +]> + + + + + + + anyName + attribute + choice + data + define + div + element + empty + except + externalRef + grammar + group + include + interleave + list + mixed + name + notAllowed + nsName + oneOrMore + optional + param + parentRef + ref + start + text + value + zeroOrMore + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/relaxngcompact.xml b/src/data/extra/syntax-highlighting/syntax/relaxngcompact.xml new file mode 100644 index 00000000..6bcc4847 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/relaxngcompact.xml @@ -0,0 +1,108 @@ + + + + + + default + datatypes + div + empty + external + grammar + include + inherit + list + mixed + namespace + notAllowed + parent + start + token + + + attribute + element + + + string + text + xsd:anyURI + xsd:base64Binary + xsd:boolean + xsd:byte + xsd:date + xsd:dateTime + xsd:decimal + xsd:double + xsd:duration + xsd:ENTITIES + xsd:ENTITY + xsd:float + xsd:gDay + xsd:gMonth + xsd:gMonthDay + xsd:gYear + xsd:gYearMonth + xsd:hexBinary + xsd:ID + xsd:IDREF + xsd:IDREFS + xsd:int + xsd:integer + xsd:language + xsd:long + xsd:Name + xsd:NCName + xsd:negativeInteger + xsd:NMTOKEN + xsd:NMTOKENS + xsd:nonNegativeInteger + xsd:nonPositiveInteger + xsd:normalizedString + xsd:NOTATION + xsd:positiveInteger + xsd:QName + xsd:short + xsd:string + xsd:time + xsd:token + xsd:unsignedByte + xsd:unsignedInt + xsd:unsignedLong + xsd:unsignedShort + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/data/extra/syntax-highlighting/syntax/replicode.xml b/src/data/extra/syntax-highlighting/syntax/replicode.xml new file mode 100644 index 00000000..189a0ffc --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/replicode.xml @@ -0,0 +1,196 @@ + + + + + + + _now + equ + neq + gtr + lsr + gte + lse + add + sub + mul + div + dis + ln + exp + log + e10 + syn + red + rnd + fvw + + + view + grp_view + pgm_view + _obj + ptn + |ptn + pgm + |pgm + _grp + grp + _fact + fact + |fact + pred + goal + cst + mdl + icst + icmd + cmd + ent + ont + dev + nod + ipgm + icpp_pgm + perf + + + mk.rdx + mk.grp_pair + mk.low_sln + mk.high_sln + mk.low_act + mk.high_act + mk.low_res + mk.sln_chg + mk.act_chg + mk.new + + + self + + + stdin + stdout + + + _inj + _eje + _mod + _set + _new_class + _del_class + _ldc + _swp + _stop + + + |nb + |bl + true + false + |[] + |nid + |did + |fid + |st + |us + forever + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/rest.xml b/src/data/extra/syntax-highlighting/syntax/rest.xml new file mode 100644 index 00000000..22d3e54c --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/rest.xml @@ -0,0 +1,111 @@ + + + + +]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/rexx.xml b/src/data/extra/syntax-highlighting/syntax/rexx.xml new file mode 100644 index 00000000..a51eb3f8 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/rexx.xml @@ -0,0 +1,199 @@ + + + + + + ADDRESS + ARG + CALL + DROP + EXIT + INTERPRET + NOP + NUMERIC + OPTIONS + PARSE + PROCEDURE + PULL + PUSH + QUEUE + RETURN + SAY + SYNTAX + TRACE + UPPER + RC + RESULT + SIGL + + + VALUE + WITH + RESULT + DIGITS + SCIENTIFIC + ENGINEERING + FORM + FUZZ + ALL + COMMANDS + ERROR + FAILURE + Intermediates + LABELS + NORMAL + OFF + RESULTS + + + do + to + by + for + while + until + leave + iterate + forever + + + select + when + then + otherwise + do + if + else + end + + + ABBREV + ABS + ADDRESS + ARG + B2X + BITAND + BITOR + BITXOR + C2D + C2X + CHARS + CHARIN + CHARSIN + CENTER + CENTRE + COMPARE + CONDITION + COPIES + D2C + D2X + DATATYPE + DATE + DBCS + DELSTR + DELWORD + DIGITS + ERRORTEXT + EXTERNALS + FIND + FORM + FORMAT + FUZZ + GETMSG + INDEX + INSERT + JUSTIFY + LASTPOS + LEFT + LENGTH + LINEIN + LINEOUT + LINESIZE + LISTDSI + MAX + MIN + MSG + MVSVAR + OUTTRAP + OVERLAY + POS + PROMPT + QUEUED + RANDOM + REVERSE + RIGHT + SETLANG + SIGN + SOURCELINE + SPACE + STORAGE + STRIP + STREAM + SUBSTR + SUBWORD + SYMBOL + SYSCPUS + SYSDSN + SYSVAR + TIME + TRACE + TRANSLATE + TRUNC + USERID + VALUE + VERIFY + WORD + WORDINDEX + WORDLENGTH + WORDPOS + WORDS + X2B + X2C + X2D + XRANGE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/rhtml.xml b/src/data/extra/syntax-highlighting/syntax/rhtml.xml new file mode 100644 index 00000000..291cea5a --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/rhtml.xml @@ -0,0 +1,1237 @@ + + + +]> + + + + + + + + + + + + BEGIN + END + and + begin + break + case + defined? + do + else + elsif + end + ensure + for + if + in + include + next + not + or + redo + rescue + retry + return + then + unless + until + when + while + yield + + + + private_class_method + private + protected + public_class_method + public + + + + attr_reader + attr_writer + attr_accessor + + + + alias + module + class + def + undef + + + + self + super + nil + false + true + caller + __FILE__ + __LINE__ + + + + $stdout + $defout + $stderr + $deferr + $stdin + + + + + + abort + at_exit + autoload + autoload? + binding + block_given? + callcc + caller + catch + chomp + chomp! + chop + chop! + eval + exec + exit + exit! + fail + fork + format + getc + gets + global_variables + gsub + gsub! + iterator? + lambda + load + local_variables + loop + method_missing + open + p + print + printf + proc + putc + puts + raise + rand + readline + readlines + require + scan + select + set_trace_func + sleep + split + sprintf + srand + sub + sub! + syscall + system + test + throw + trace_var + trap + untrace_var + warn + + + auto_complete_field + auto_complete_result + auto_discovery_link_tag + auto_link + benchmark + button_to + cache + capture + check_box + check_box_tag + collection_select + concat + content_for + content_tag + country_options_for_select + country_select + current_page? + date_select + datetime_select + debug + define_javascript_functions + distance_of_time_in_words + distance_of_time_in_words_to_now + draggable_element + drop_receiving_element + end_form_tag + error_message_on + error_messages_for + escape_javascript + evaluate_remote_response + excerpt + file_field + file_field_tag + finish_upload_status + form + form_remote_tag + form_tag + form_tag_with_upload_progress + h + hidden_field + hidden_field_tag + highlight + human_size + image_path + image_submit_tag + image_tag + input + javascript_include_tag + javascript_path + javascript_tag + link_image_to + link_to + link_to_function + link_to_if + link_to_image + link_to_remote + link_to_unless + link_to_unless_current + mail_to + markdown + number_to_currency + number_to_human_size + number_to_percentage + number_to_phone + number_with_delimiter + number_with_precision + observe_field + observe_form + option_groups_from_collection_for_select + options_for_select + options_from_collection_for_select + pagination_links + password_field + password_field_tag + periodically_call_remote + pluralize + radio_button + radio_button_tag + register_template_handler + render + render_file + render_template + sanitize + select + select_date + select_datetime + select_day + select_hour + select_minute + select_month + select_second + select_tag + select_time + select_year + simple_format + sortable_element + start_form_tag + strip_links + stylesheet_link_tag + stylesheet_path + submit_tag + submit_to_remote + tag + text_area + text_area_tag + text_field + text_field_tag + text_field_with_auto_complete + textilize + textilize_without_paragraph + time_ago_in_words + time_zone_options_for_select + time_zone_select + truncate + update_element_function + upload_progress_status + upload_progress_text + upload_progress_update_bar_js + upload_status_progress_bar_tag + upload_status_tag + upload_status_text_tag + url_for + visual_effect + word_wrap + + + + TODO + FIXME + NOTE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/rib.xml b/src/data/extra/syntax-highlighting/syntax/rib.xml new file mode 100644 index 00000000..e8ec3da2 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/rib.xml @@ -0,0 +1,143 @@ + + + + + + + + + + + AreaLightSource + Attribute + AttributeBegin + AttributeEnd + Begin + Bound + Clipping + Color + ColorSamples + ConcatTransform + CoordinateSystem + CropWindow + Declare + DepthOfField + Detail + DetailRange + Displacement + Display + End + Exterior + Format + FrameAspectRatio + FrameBegin + FrameEnd + GeometricApproximation + Hider + Identity + Illuminance + Illuminate + Interior + LightSource + Matte + Opacity + Option + Orientation + Perspective + PixelFilter + PixelSamples + PixelVariance + Projection + Quantize + RelativeDetail + Rotate + Scale + ScreenWindow + ShadingInterpolation + ShadingRate + Shutter + Sides + Skew + Surface + TextureCoordinates + Transform + TransformBegin + TransformEnd + TransformPoints + Translate + version + WorldBegin + WorldEnd + + + Basis + Cylinder + Disk + GeneralPolygon + Geometry + Hyperboloid + NuPatch + ObjectBegin + ObjectEnd + ObjectInstance + Patch + Paraboloid + PointsPolygons + PointsGeneralPolygons + Polygon + Procedural + SolidBegin + SolidEnd + Sphere + Torus + + + MotionBegin + MotionEnd + + + MakeBump + MakeCubeFaceEnvironment + MakeLatLongEnvironment + MakeTexture + ArchiveRecord + ErrorHandler + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/rmarkdown.xml b/src/data/extra/syntax-highlighting/syntax/rmarkdown.xml new file mode 100644 index 00000000..b1dffdcd --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/rmarkdown.xml @@ -0,0 +1,175 @@ + + + + + + + +]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/roff.xml b/src/data/extra/syntax-highlighting/syntax/roff.xml new file mode 100644 index 00000000..6b428bef --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/roff.xml @@ -0,0 +1,197 @@ + + + + + + +]> + + + + + + br + sp + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/rpmspec.xml b/src/data/extra/syntax-highlighting/syntax/rpmspec.xml new file mode 100644 index 00000000..3ae4eb9d --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/rpmspec.xml @@ -0,0 +1,505 @@ + + + + + + + + +]> + + + + + + + + Mon + Tue + Wed + Thu + Fri + Sat + Sun + + + + Jan + Feb + Mar + Apr + May + Jun + Jul + Aug + Sep + Oct + Nov + Dec + + + + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 01 + 02 + 03 + 04 + 05 + 06 + 07 + 08 + 09 + 10 + 11 + 12 + 13 + 14 + 15 + 16 + 17 + 18 + 19 + 20 + 21 + 22 + 23 + 24 + 25 + 26 + 27 + 28 + 29 + 30 + 31 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/rsiidl.xml b/src/data/extra/syntax-highlighting/syntax/rsiidl.xml new file mode 100644 index 00000000..11c5c694 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/rsiidl.xml @@ -0,0 +1,440 @@ + + + + + + For + Do + Endfor + Repeat + Endrep + While + Endwhile + Until + Case + Endcase + If + Endif + Else + Endelse + Then + Begin + End + Function + Goto + Pro + Eq + Ge + Gt + Le + Lt + Ne + Mod + Or + Xor + Not + And + Then + Return + Common + Of + On_ioerror + Switch + Endswitch + + + dpi + dtor + map + pi + radeg + values + err + error_state + error + err_string + except + mouse + msg_prefix + syserror + syserr_string + warn + dir + dlm_path + edit_input + help_path + journal + more + path + prompt + quiet + version + c + d + order + p + x + y + z + stime + + + Fix + Long + Long64 + uint + Byte + Float + Double + complex + dcomplex + complexarr + dcomplexarr + String + Intarr + lonarr + lon64arr + uintarr + ulong + ulonarr + ulon64arr + Bytarr + Bytscl + Fltarr + Dblarr + Strarr + Objarr + Indgen + Findgen + Dindgen + Dcindgen + cindgen + lindgen + bindgen + sindgen + uindgen + ul64indgen + l64indgen + ulindgen + Replicate + Ptrarr + + + ABS + ACOS + ADAPT_HIST_EQUAL + ALOG + ALOG10 + ARG_PRESENT + ASIN + ASSOC + ATAN + AXIS + BESELI + BESELJ + BESELY + BLAS_AXPY + BREAKPOINT + BROYDEN + BYTEORDER + CALL_EXTERNAL + CALL_FUNCTION + CALL_METHOD + CALL_PROCEDURE + CATCH + CEIL + CHECK_MATH + CHOLDC + CHOLSOL + COLOR_CONVERT + COLOR_QUAN + COMPILE_OPT + COMPUTE_MESH_NORMALS + CONJ + CONSTRAINED_MIN + CONTOUR + CONVERT_COORD + CONVOL + CORRELATE + COS + COSH + CREATE_STRUCT + CURSOR + DEFINE_KEY + DEFSYSV + DELVAR + DEVICE + DFPMIN + DIALOG_MESSAGE + DIALOG_PICKFILE + DIALOG_PRINTERSETUP + DIALOG_PRINTJOB + DILATE + DLM_LOAD + DRAW_ROI + ELMHES + EMPTY + ENABLE_SYSRTN + ERASE + ERODE + ERRORF + EXECUTE + EXIT + EXP + EXPAND_PATH + EXPINT + FINDFILE + FINITE + FLOOR + FORMAT_AXIS_VALUES + FORWARD_FUNCTION + FSTAT + FULSTR + FZ_ROOTS + GAUSSINT + GET_KBRD + GETENV + GRID_TPS + GRID3 + HEAP_GC + HELP + HISTOGRAM + HQR + IMAGE_STATISTICS + IMAGINARY + INTERPOLATE + INVERT + ISHFT + ISOCONTOUR + ISOSURFACE + JOURNAL + KEYWORD_SET + LABEL_REGION + LINBCG + LINKIMAGE + LMGR + LNGAMMA + LNP_TEST + LOADCT + LOCALE_GET + LSODE + LUDC + LUMPROVE + LUSOL + MACHAR + MAKE_ARRAY + MAP_PROJ_INFO + MAX + MEDIAN + MESH_CLIP + MESH_DECIMATE + MESH_ISSOLID + MESH_MERGE + MESH_NUMTRIANGLES + MESH_SMOOTH + MESH_SURFACEAREA + MESH_VALIDATE + MESH_VOLUME + MESSAGE + MIN + N_ELEMENTS + N_PARAMS + N_TAGS + NEWTON + OBJ_CLASS + OBJ_DESTROY + OBJ_ISA + OBJ_NEW + OBJ_VALID + ON_ERROR + OPLOT + PARTICLE_TRACE + PLOT + PLOTS + POLY_2D + POLYFILL + POLYFILLV + POLYSHADE + POWELL + PROFILER + PTR_FREE + PTR_NEW + PTR_VALID + QROMB + QROMO + QSIMP + RANDOMN + RANDOMU + REBIN + REFORM + RETALL + RETURN + RIEMANN + RK4 + ROBERTS + ROTATE + ROUND + SET_PLOT + SET_SHADING + SETENV + SHADE_SURF + SHADE_VOLUME + SHIFT + SIN + SINH + SIZE + SMOOTH + SOBEL + SORT + SPL_INIT + SPL_INTERP + SPRSAB + SPRSAX + SPRSIN + SQRT + STOP + STRCMP + STRCOMPRESS + STREGEX + STRJOIN + STRLEN + STRLOWCASE + STRMATCH + STRMESSAGE + STRMID + STRPOS + STRPUT + STRTRIM + STRUCT_ASSIGN + STRUCT_HIDE + STRUPCASE + SURFACE + SVDC + SVSOL + SYSTIME + TAG_NAMES + TAN + TANH + TEMPORARY + TETRA_CLIP + TETRA_SURFACE + TETRA_VOLUME + THIN + THREED + TOTAL + TRANSPOSE + TRIANGULATE + TRIGRID + TRIQL + TRIRED + TRISOL + TV + TVCRS + TVLCT + TVRD + TVSCLU + USERSYM + VALUE_LOCATE + VOIGT + VOXEL_PROJ + WAIT + WATERSHED + WDELETE + WHERE + WIDGET_BASE + WIDGET_BUTTON + WIDGET_CONTROL + WIDGET_DRAW + WIDGET_DROPLIST + WIDGET_EVENT + WIDGET_INFO + WIDGET_LABEL + WIDGET_LIST + WIDGET_SLIDER + WIDGET_TABLE + WIDGET_TEXT + WINDOW + WSET + WSHOW + WTN + XYOUTS + + + Open + FLUSH + IOCTL + RESTORE + SAVE + POINT_LUN + Openr + Openw + Openu + Close + Free_lun + get_lun + assoc + catch + cd + spawn + eof + print + printf + prints + read + readf + reads + writu + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/rtf.xml b/src/data/extra/syntax-highlighting/syntax/rtf.xml new file mode 100644 index 00000000..42ce267d --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/rtf.xml @@ -0,0 +1,49 @@ + + ] > + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/ruby.xml b/src/data/extra/syntax-highlighting/syntax/ruby.xml new file mode 100644 index 00000000..a451e144 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/ruby.xml @@ -0,0 +1,933 @@ + + + + + + + + + + + + + + BEGIN + END + and + begin + break + case + defined? + do + else + elsif + end + ensure + for + if + in + next + not + or + redo + rescue + retry + return + then + unless + until + when + yield + + + + private_class_method + private + protected + public_class_method + public + + + + attr_reader + attr_writer + attr_accessor + + + + alias + module + class + def + undef + + + + self + super + nil + false + true + caller + __FILE__ + __LINE__ + + + + $stdout + $defout + $stderr + $deferr + $stdin + + + + + + abort + at_exit + autoload + autoload? + binding + block_given? + callcc + caller + catch + chomp + chomp! + chop + chop! + eval + exec + exit + exit! + fail + fork + format + getc + gets + global_variables + gsub + gsub! + iterator? + lambda + load + local_variables + loop + method_missing + open + p + print + printf + proc + putc + puts + raise + rand + readline + readlines + require + require_relative + scan + select + set_trace_func + sleep + split + sprintf + srand + sub + sub! + syscall + system + test + throw + trace_var + trap + untrace_var + warn + + + + extend + include + prepend + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/rust.xml b/src/data/extra/syntax-highlighting/syntax/rust.xml new file mode 100644 index 00000000..e26ed513 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/rust.xml @@ -0,0 +1,497 @@ + + + + + + +]> + + + + fn + + + type + + + abstract + alignof + as + async + await + become + box + break + const + continue + crate + default + do + dyn + else + enum + extern + final + for + if + impl + in + let + loop + macro + match + mod + move + mut + offsetof + override + priv + proc + pub + pure + ref + return + sizeof + static + struct + super + trait + try + typeof + union + unsafe + unsized + use + virtual + where + while + yield + + + + + Add + AddAssign + Alloc + Any + AsMut + AsRef + Binary + BitAnd + BitAndAssign + BitOr + BitOrAssign + BitXor + BitXorAssign + Borrow + BorrowMut + BuildHasher + Clone + CoerceUnsized + Copy + Debug + Default + Deref + DerefMut + DispatchFromDyn + Display + Div + DivAssign + DoubleEndedIterator + Drop + Eq + ExactSizeIterator + Extend + FixedSizeArray + Fn + FnBox + FnMut + FnOnce + From + FromIterator + FromStr + FusedIterator + Future + Generator + GlobalAlloc + Hash + Hasher + Index + IndexMut + Into + IntoIterator + Iterator + LowerExp + LowerHex + Mul + MulAssign + Neg + Not + Octal + Ord + PartialEq + PartialOrd + Pointer + Product + RangeBounds + Rem + RemAssign + Send + Shl + ShlAssign + Shr + ShrAssign + Sized + SliceIndex + Step + Sub + SubAssign + Sum + Sync + TrustedLen + Try + TryFrom + TryInto + Unpin + Unsize + UpperExp + UpperHex + Write + + AsSlice + BufRead + CharExt + Decodable + Encodable + Error + FromPrimitive + IteratorExt + MultiSpan + MutPtrExt + Pattern + PtrExt + Rand + Read + RefUnwindSafe + Seek + SliceConcatExt + SliceExt + Str + StrExt + TDynBenchFn + Termination + ToOwned + ToSocketAddrs + ToString + UnwindSafe + + + bool + isize + usize + i8 + i16 + i32 + i64 + i128 + u8 + u16 + u32 + u64 + u128 + f32 + f64 + char + str + Option + Result + Self + Box + Vec + String + Path + PathBuf + + + c_float + c_double + c_void + FILE + fpos_t + DIR + dirent + c_char + c_schar + c_uchar + c_short + c_ushort + c_int + c_uint + c_long + c_ulong + size_t + ptrdiff_t + clock_t + time_t + c_longlong + c_ulonglong + intptr_t + uintptr_t + off_t + dev_t + ino_t + pid_t + mode_t + ssize_t + + + self + + + true + false + Some + None + Ok + Err + Success + Failure + Cons + Nil + + + MAX + + REPLACEMENT_CHARACTER + UNICODE_VERSION + + DIGITS + EPSILON + INFINITY + MANTISSA_DIGITS + MAX_10_EXP + MAX_EXP + MIN + MIN_10_EXP + MIN_EXP + MIN_POSITIVE + NAN + NEG_INFINITY + RADIX + + MAIN_SEPARATOR + + ONCE_INIT + + UNIX_EPOCH + + + EXIT_FAILURE + EXIT_SUCCESS + RAND_MAX + EOF + SEEK_SET + SEEK_CUR + SEEK_END + _IOFBF + _IONBF + _IOLBF + BUFSIZ + FOPEN_MAX + FILENAME_MAX + L_tmpnam + TMP_MAX + O_RDONLY + O_WRONLY + O_RDWR + O_APPEND + O_CREAT + O_EXCL + O_TRUNC + S_IFIFO + S_IFCHR + S_IFBLK + S_IFDIR + S_IFREG + S_IFMT + S_IEXEC + S_IWRITE + S_IREAD + S_IRWXU + S_IXUSR + S_IWUSR + S_IRUSR + F_OK + R_OK + W_OK + X_OK + STDIN_FILENO + STDOUT_FILENO + STDERR_FILENO + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/sass.xml b/src/data/extra/syntax-highlighting/syntax/sass.xml new file mode 100644 index 00000000..bd99a718 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/sass.xml @@ -0,0 +1,467 @@ + + + + +]> + + + + + + properties##SCSS + sub-properties##SCSS + + special values##SCSS + value keywords##SCSS + values##SCSS + colors##SCSS + functions##SCSS + medias##SCSS + pseudoelements##SCSS + pseudoclasses##SCSS + pseudoclass-selector##SCSS + pseudoclasses-@page##SCSS + at-rules##SCSS + nested at-rules##SCSS + inline and nested at-rules##SCSS + @extend##SCSS + @if##SCSS + @else##SCSS + @mixin##SCSS + @viewport##SCSS + @page##SCSS + + @font-face##SCSS + @keyframes##SCSS + + media operators##SCSS + operators##SCSS + annotations##SCSS + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/sather.xml b/src/data/extra/syntax-highlighting/syntax/sather.xml new file mode 100644 index 00000000..89819cf2 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/sather.xml @@ -0,0 +1,141 @@ + + + + + + and + assert + attr + break! + case + class + const + else + elsif + end + exception + external + false + if + include + initial + is + ITER + loop + new + or + post + pre + private + protect + quit + raise + readonly + result + return + ROUT + SAME + self + shared + then + true + typecase + type + until! + value + void + when + while! + yield + abstract + any + bind + fork + guard + immutable + inout + in + lock + once + out + parloop + partial + par + spread + stub + + + $OB + ARRAY + AREF + AVAL + BOOL + CHAR + EXT_OB + FLTDX + FLTD + FLTX + FLTI + FLT + INTI + INT + $REHASH + STR + SYS + + + create + invariant + main + aget + aset + div + is_eq + is_geq + is_gt + is_leq + is_lt + is_neq + minus + mod + negate + not + plus + pow + times + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/scala.xml b/src/data/extra/syntax-highlighting/syntax/scala.xml new file mode 100644 index 00000000..284281ef --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/scala.xml @@ -0,0 +1,3505 @@ + + + + + + + Actor + ActorProxy + ActorTask + ActorThread + AllRef + Any + AnyRef + Application + AppliedType + Array + ArrayBuffer + Attribute + BoxedArray + BoxedBooleanArray + BoxedByteArray + BoxedCharArray + Buffer + BufferedIterator + Char + Console + Enumeration + Fluid + Function + IScheduler + ImmutableMapAdaptor + ImmutableSetAdaptor + Int + Iterable + List + ListBuffer + None + Option + Ordered + Pair + PartialFunction + Pid + Predef + PriorityQueue + PriorityQueueProxy + Reaction + Ref + Responder + RichInt + RichString + Rule + RuleTransformer + Script + Seq + SerialVersionUID + Some + Stream + Symbol + TcpService + TcpServiceWorker + Triple + Unit + Value + WorkerThread + serializable + transient + volatile + + + ACTIVE + ACTIVITY_COMPLETED + ACTIVITY_REQUIRED + ARG_IN + ARG_INOUT + ARG_OUT + AWTError + AWTEvent + AWTEventListener + AWTEventListenerProxy + AWTEventMulticaster + AWTException + AWTKeyStroke + AWTPermission + AbstractAction + AbstractBorder + AbstractButton + AbstractCellEditor + AbstractCollection + AbstractColorChooserPanel + AbstractDocument + AbstractDocument.AttributeContext + AbstractDocument.Content + AbstractDocument.ElementEdit + AbstractExecutorService + AbstractInterruptibleChannel + AbstractLayoutCache + AbstractLayoutCache.NodeDimensions + AbstractList + AbstractListModel + AbstractMap + AbstractMethodError + AbstractPreferences + AbstractQueue + AbstractQueuedSynchronizer + AbstractSelectableChannel + AbstractSelectionKey + AbstractSelector + AbstractSequentialList + AbstractSet + AbstractSpinnerModel + AbstractTableModel + AbstractUndoableEdit + AbstractWriter + AccessControlContext + AccessControlException + AccessController + AccessException + Accessible + AccessibleAction + AccessibleAttributeSequence + AccessibleBundle + AccessibleComponent + AccessibleContext + AccessibleEditableText + AccessibleExtendedComponent + AccessibleExtendedTable + AccessibleExtendedText + AccessibleHyperlink + AccessibleHypertext + AccessibleIcon + AccessibleKeyBinding + AccessibleObject + AccessibleRelation + AccessibleRelationSet + AccessibleResourceBundle + AccessibleRole + AccessibleSelection + AccessibleState + AccessibleStateSet + AccessibleStreamable + AccessibleTable + AccessibleTableModelChange + AccessibleText + AccessibleTextSequence + AccessibleValue + AccountException + AccountExpiredException + AccountLockedException + AccountNotFoundException + Acl + AclEntry + AclNotFoundException + Action + ActionEvent + ActionListener + ActionMap + ActionMapUIResource + Activatable + ActivateFailedException + ActivationDesc + ActivationException + ActivationGroup + ActivationGroupDesc + ActivationGroupDesc.CommandEnvironment + ActivationGroupID + ActivationGroup_Stub + ActivationID + ActivationInstantiator + ActivationMonitor + ActivationSystem + Activator + ActiveEvent + ActivityCompletedException + ActivityRequiredException + AdapterActivator + AdapterActivatorOperations + AdapterAlreadyExists + AdapterAlreadyExistsHelper + AdapterInactive + AdapterInactiveHelper + AdapterManagerIdHelper + AdapterNameHelper + AdapterNonExistent + AdapterNonExistentHelper + AdapterStateHelper + AddressHelper + Adjustable + AdjustmentEvent + AdjustmentListener + Adler32 + AffineTransform + AffineTransformOp + AlgorithmParameterGenerator + AlgorithmParameterGeneratorSpi + AlgorithmParameterSpec + AlgorithmParameters + AlgorithmParametersSpi + AllPermission + AlphaComposite + AlreadyBound + AlreadyBoundException + AlreadyBoundHelper + AlreadyBoundHolder + AlreadyConnectedException + AncestorEvent + AncestorListener + AnnotatedElement + Annotation + Annotation + AnnotationFormatError + AnnotationTypeMismatchException + Any + AnyHolder + AnySeqHelper + AnySeqHelper + AnySeqHolder + AppConfigurationEntry + AppConfigurationEntry.LoginModuleControlFlag + Appendable + Applet + AppletContext + AppletInitializer + AppletStub + ApplicationException + Arc2D + Arc2D.Double + Arc2D.Float + Area + AreaAveragingScaleFilter + ArithmeticException + Array + Array + ArrayBlockingQueue + ArrayIndexOutOfBoundsException + ArrayList + ArrayStoreException + ArrayType + Arrays + AssertionError + AsyncBoxView + AsynchronousCloseException + AtomicBoolean + AtomicInteger + AtomicIntegerArray + AtomicIntegerFieldUpdater + AtomicLong + AtomicLongArray + AtomicLongFieldUpdater + AtomicMarkableReference + AtomicReference + AtomicReferenceArray + AtomicReferenceFieldUpdater + AtomicStampedReference + Attr + Attribute + Attribute + Attribute + AttributeChangeNotification + AttributeChangeNotificationFilter + AttributeException + AttributeInUseException + AttributeList + AttributeList + AttributeList + AttributeListImpl + AttributeModificationException + AttributeNotFoundException + AttributeSet + AttributeSet + AttributeSet.CharacterAttribute + AttributeSet.ColorAttribute + AttributeSet.FontAttribute + AttributeSet.ParagraphAttribute + AttributeSetUtilities + AttributeValueExp + AttributedCharacterIterator + AttributedCharacterIterator.Attribute + AttributedString + Attributes + Attributes + Attributes + Attributes.Name + Attributes2 + Attributes2Impl + AttributesImpl + AudioClip + AudioFileFormat + AudioFileFormat.Type + AudioFileReader + AudioFileWriter + AudioFormat + AudioFormat.Encoding + AudioInputStream + AudioPermission + AudioSystem + AuthPermission + AuthProvider + AuthenticationException + AuthenticationException + AuthenticationNotSupportedException + Authenticator + Authenticator.RequestorType + AuthorizeCallback + Autoscroll + BAD_CONTEXT + BAD_INV_ORDER + BAD_OPERATION + BAD_PARAM + BAD_POLICY + BAD_POLICY_TYPE + BAD_POLICY_VALUE + BAD_QOS + BAD_TYPECODE + BMPImageWriteParam + BackingStoreException + BadAttributeValueExpException + BadBinaryOpValueExpException + BadKind + BadLocationException + BadPaddingException + BadStringOperationException + BandCombineOp + BandedSampleModel + BaseRowSet + BasicArrowButton + BasicAttribute + BasicAttributes + BasicBorders + BasicBorders.ButtonBorder + BasicBorders.FieldBorder + BasicBorders.MarginBorder + BasicBorders.MenuBarBorder + BasicBorders.RadioButtonBorder + BasicBorders.RolloverButtonBorder + BasicBorders.SplitPaneBorder + BasicBorders.ToggleButtonBorder + BasicButtonListener + BasicButtonUI + BasicCheckBoxMenuItemUI + BasicCheckBoxUI + BasicColorChooserUI + BasicComboBoxEditor + BasicComboBoxEditor.UIResource + BasicComboBoxRenderer + BasicComboBoxRenderer.UIResource + BasicComboBoxUI + BasicComboPopup + BasicControl + BasicDesktopIconUI + BasicDesktopPaneUI + BasicDirectoryModel + BasicEditorPaneUI + BasicFileChooserUI + BasicFormattedTextFieldUI + BasicGraphicsUtils + BasicHTML + BasicIconFactory + BasicInternalFrameTitlePane + BasicInternalFrameUI + BasicLabelUI + BasicListUI + BasicLookAndFeel + BasicMenuBarUI + BasicMenuItemUI + BasicMenuUI + BasicOptionPaneUI + BasicOptionPaneUI.ButtonAreaLayout + BasicPanelUI + BasicPasswordFieldUI + BasicPermission + BasicPopupMenuSeparatorUI + BasicPopupMenuUI + BasicProgressBarUI + BasicRadioButtonMenuItemUI + BasicRadioButtonUI + BasicRootPaneUI + BasicScrollBarUI + BasicScrollPaneUI + BasicSeparatorUI + BasicSliderUI + BasicSpinnerUI + BasicSplitPaneDivider + BasicSplitPaneUI + BasicStroke + BasicTabbedPaneUI + BasicTableHeaderUI + BasicTableUI + BasicTextAreaUI + BasicTextFieldUI + BasicTextPaneUI + BasicTextUI + BasicTextUI.BasicCaret + BasicTextUI.BasicHighlighter + BasicToggleButtonUI + BasicToolBarSeparatorUI + BasicToolBarUI + BasicToolTipUI + BasicTreeUI + BasicViewportUI + BatchUpdateException + BeanContext + BeanContextChild + BeanContextChildComponentProxy + BeanContextChildSupport + BeanContextContainerProxy + BeanContextEvent + BeanContextMembershipEvent + BeanContextMembershipListener + BeanContextProxy + BeanContextServiceAvailableEvent + BeanContextServiceProvider + BeanContextServiceProviderBeanInfo + BeanContextServiceRevokedEvent + BeanContextServiceRevokedListener + BeanContextServices + BeanContextServicesListener + BeanContextServicesSupport + BeanContextServicesSupport.BCSSServiceProvider + BeanContextSupport + BeanContextSupport.BCSIterator + BeanDescriptor + BeanInfo + Beans + BevelBorder + Bidi + BigDecimal + BigInteger + BinaryRefAddr + BindException + Binding + Binding + BindingHelper + BindingHolder + BindingIterator + BindingIteratorHelper + BindingIteratorHolder + BindingIteratorOperations + BindingIteratorPOA + BindingListHelper + BindingListHolder + BindingType + BindingTypeHelper + BindingTypeHolder + BitSet + Blob + BlockView + BlockingQueue + Book + Boolean + BooleanControl + BooleanControl.Type + BooleanHolder + BooleanSeqHelper + BooleanSeqHolder + Border + BorderFactory + BorderLayout + BorderUIResource + BorderUIResource.BevelBorderUIResource + BorderUIResource.CompoundBorderUIResource + BorderUIResource.EmptyBorderUIResource + BorderUIResource.EtchedBorderUIResource + BorderUIResource.LineBorderUIResource + BorderUIResource.MatteBorderUIResource + BorderUIResource.TitledBorderUIResource + BoundedRangeModel + Bounds + Bounds + Box + Box.Filler + BoxLayout + BoxView + BoxedValueHelper + BreakIterator + BrokenBarrierException + Buffer + BufferCapabilities + BufferCapabilities.FlipContents + BufferOverflowException + BufferStrategy + BufferUnderflowException + BufferedImage + BufferedImageFilter + BufferedImageOp + BufferedInputStream + BufferedOutputStream + BufferedReader + BufferedWriter + Button + ButtonGroup + ButtonModel + ButtonUI + Byte + ByteArrayInputStream + ByteArrayOutputStream + ByteBuffer + ByteChannel + ByteHolder + ByteLookupTable + ByteOrder + CDATASection + CMMException + CODESET_INCOMPATIBLE + COMM_FAILURE + CRC32 + CRL + CRLException + CRLSelector + CSS + CSS.Attribute + CTX_RESTRICT_SCOPE + CacheRequest + CacheResponse + CachedRowSet + Calendar + Callable + CallableStatement + Callback + CallbackHandler + CancelablePrintJob + CancellationException + CancelledKeyException + CannotProceed + CannotProceedException + CannotProceedHelper + CannotProceedHolder + CannotRedoException + CannotUndoException + Canvas + CardLayout + Caret + CaretEvent + CaretListener + CellEditor + CellEditorListener + CellRendererPane + CertPath + CertPath.CertPathRep + CertPathBuilder + CertPathBuilderException + CertPathBuilderResult + CertPathBuilderSpi + CertPathParameters + CertPathTrustManagerParameters + CertPathValidator + CertPathValidatorException + CertPathValidatorResult + CertPathValidatorSpi + CertSelector + CertStore + CertStoreException + CertStoreParameters + CertStoreSpi + Certificate + Certificate + Certificate + Certificate.CertificateRep + CertificateEncodingException + CertificateEncodingException + CertificateException + CertificateException + CertificateExpiredException + CertificateExpiredException + CertificateFactory + CertificateFactorySpi + CertificateNotYetValidException + CertificateNotYetValidException + CertificateParsingException + CertificateParsingException + ChangeEvent + ChangeListener + ChangedCharSetException + Channel + ChannelBinding + Channels + CharArrayReader + CharArrayWriter + CharBuffer + CharConversionException + CharHolder + CharSeqHelper + CharSeqHolder + CharSequence + Character + Character.Subset + Character.UnicodeBlock + CharacterCodingException + CharacterData + CharacterIterator + Charset + CharsetDecoder + CharsetEncoder + CharsetProvider + Checkbox + CheckboxGroup + CheckboxMenuItem + CheckedInputStream + CheckedOutputStream + Checksum + Choice + ChoiceCallback + ChoiceFormat + Chromaticity + Cipher + CipherInputStream + CipherOutputStream + CipherSpi + Class + ClassCastException + ClassCircularityError + ClassDefinition + ClassDesc + ClassFileTransformer + ClassFormatError + ClassLoader + ClassLoaderRepository + ClassLoadingMXBean + ClassNotFoundException + ClientRequestInfo + ClientRequestInfoOperations + ClientRequestInterceptor + ClientRequestInterceptorOperations + Clip + Clipboard + ClipboardOwner + Clob + CloneNotSupportedException + Cloneable + Closeable + ClosedByInterruptException + ClosedChannelException + ClosedSelectorException + CodeSets + CodeSigner + CodeSource + Codec + CodecFactory + CodecFactoryHelper + CodecFactoryOperations + CodecOperations + CoderMalfunctionError + CoderResult + CodingErrorAction + CollationElementIterator + CollationKey + Collator + Collection + CollectionCertStoreParameters + Collections + Color + ColorChooserComponentFactory + ColorChooserUI + ColorConvertOp + ColorModel + ColorSelectionModel + ColorSpace + ColorSupported + ColorType + ColorUIResource + ComboBoxEditor + ComboBoxModel + ComboBoxUI + ComboPopup + Comment + CommunicationException + Comparable + Comparator + CompilationMXBean + Compiler + CompletionService + CompletionStatus + CompletionStatusHelper + Component + ComponentAdapter + ComponentColorModel + ComponentEvent + ComponentIdHelper + ComponentInputMap + ComponentInputMapUIResource + ComponentListener + ComponentOrientation + ComponentSampleModel + ComponentUI + ComponentView + Composite + CompositeContext + CompositeData + CompositeDataSupport + CompositeName + CompositeType + CompositeView + CompoundBorder + CompoundControl + CompoundControl.Type + CompoundEdit + CompoundName + Compression + ConcurrentHashMap + ConcurrentLinkedQueue + ConcurrentMap + ConcurrentModificationException + Condition + Configuration + ConfigurationException + ConfirmationCallback + ConnectException + ConnectException + ConnectIOException + Connection + ConnectionEvent + ConnectionEventListener + ConnectionPendingException + ConnectionPoolDataSource + ConsoleHandler + Constructor + Container + ContainerAdapter + ContainerEvent + ContainerListener + ContainerOrderFocusTraversalPolicy + ContentHandler + ContentHandler + ContentHandlerFactory + ContentModel + Context + Context + ContextList + ContextNotEmptyException + ContextualRenderedImageFactory + Control + Control + Control.Type + ControlFactory + ControllerEventListener + ConvolveOp + CookieHandler + CookieHolder + Copies + CopiesSupported + CopyOnWriteArrayList + CopyOnWriteArraySet + CountDownLatch + CounterMonitor + CounterMonitorMBean + CredentialException + CredentialExpiredException + CredentialNotFoundException + CropImageFilter + CubicCurve2D + CubicCurve2D.Double + CubicCurve2D.Float + Currency + Current + Current + Current + CurrentHelper + CurrentHelper + CurrentHelper + CurrentHolder + CurrentOperations + CurrentOperations + CurrentOperations + Cursor + CustomMarshal + CustomValue + Customizer + CyclicBarrier + DATA_CONVERSION + DESKeySpec + DESedeKeySpec + DGC + DHGenParameterSpec + DHKey + DHParameterSpec + DHPrivateKey + DHPrivateKeySpec + DHPublicKey + DHPublicKeySpec + DISCARDING + DOMConfiguration + DOMError + DOMErrorHandler + DOMException + DOMImplementation + DOMImplementationLS + DOMImplementationList + DOMImplementationRegistry + DOMImplementationSource + DOMLocator + DOMLocator + DOMResult + DOMSource + DOMStringList + DSAKey + DSAKeyPairGenerator + DSAParameterSpec + DSAParams + DSAPrivateKey + DSAPrivateKeySpec + DSAPublicKey + DSAPublicKeySpec + DTD + DTDConstants + DTDHandler + DataBuffer + DataBufferByte + DataBufferDouble + DataBufferFloat + DataBufferInt + DataBufferShort + DataBufferUShort + DataFlavor + DataFormatException + DataInput + DataInputStream + DataInputStream + DataLine + DataLine.Info + DataOutput + DataOutputStream + DataOutputStream + DataSource + DataTruncation + DatabaseMetaData + DatagramChannel + DatagramPacket + DatagramSocket + DatagramSocketImpl + DatagramSocketImplFactory + DatatypeConfigurationException + DatatypeConstants + DatatypeConstants.Field + DatatypeFactory + Date + Date + DateFormat + DateFormat.Field + DateFormatSymbols + DateFormatter + DateTimeAtCompleted + DateTimeAtCreation + DateTimeAtProcessing + DateTimeSyntax + DebugGraphics + DecimalFormat + DecimalFormatSymbols + DeclHandler + DefaultBoundedRangeModel + DefaultButtonModel + DefaultCaret + DefaultCellEditor + DefaultColorSelectionModel + DefaultComboBoxModel + DefaultDesktopManager + DefaultEditorKit + DefaultEditorKit.BeepAction + DefaultEditorKit.CopyAction + DefaultEditorKit.CutAction + DefaultEditorKit.DefaultKeyTypedAction + DefaultEditorKit.InsertBreakAction + DefaultEditorKit.InsertContentAction + DefaultEditorKit.InsertTabAction + DefaultEditorKit.PasteAction + DefaultFocusManager + DefaultFocusTraversalPolicy + DefaultFormatter + DefaultFormatterFactory + DefaultHandler + DefaultHandler2 + DefaultHighlighter + DefaultHighlighter.DefaultHighlightPainter + DefaultKeyboardFocusManager + DefaultListCellRenderer + DefaultListCellRenderer.UIResource + DefaultListModel + DefaultListSelectionModel + DefaultLoaderRepository + DefaultLoaderRepository + DefaultMenuLayout + DefaultMetalTheme + DefaultMutableTreeNode + DefaultPersistenceDelegate + DefaultSingleSelectionModel + DefaultStyledDocument + DefaultStyledDocument.AttributeUndoableEdit + DefaultStyledDocument.ElementSpec + DefaultTableCellRenderer + DefaultTableCellRenderer.UIResource + DefaultTableColumnModel + DefaultTableModel + DefaultTextUI + DefaultTreeCellEditor + DefaultTreeCellRenderer + DefaultTreeModel + DefaultTreeSelectionModel + DefinitionKind + DefinitionKindHelper + Deflater + DeflaterOutputStream + DelayQueue + Delayed + Delegate + Delegate + Delegate + DelegationPermission + Deprecated + Descriptor + DescriptorAccess + DescriptorSupport + DesignMode + DesktopIconUI + DesktopManager + DesktopPaneUI + Destination + DestroyFailedException + Destroyable + Dialog + Dictionary + DigestException + DigestInputStream + DigestOutputStream + Dimension + Dimension2D + DimensionUIResource + DirContext + DirObjectFactory + DirStateFactory + DirStateFactory.Result + DirectColorModel + DirectoryManager + DisplayMode + DnDConstants + Doc + DocAttribute + DocAttributeSet + DocFlavor + DocFlavor.BYTE_ARRAY + DocFlavor.CHAR_ARRAY + DocFlavor.INPUT_STREAM + DocFlavor.READER + DocFlavor.SERVICE_FORMATTED + DocFlavor.STRING + DocFlavor.URL + DocPrintJob + Document + Document + DocumentBuilder + DocumentBuilderFactory + DocumentEvent + DocumentEvent.ElementChange + DocumentEvent.EventType + DocumentFilter + DocumentFilter.FilterBypass + DocumentFragment + DocumentHandler + DocumentListener + DocumentName + DocumentParser + DocumentType + Documented + DomainCombiner + DomainManager + DomainManagerOperations + Double + DoubleBuffer + DoubleHolder + DoubleSeqHelper + DoubleSeqHolder + DragGestureEvent + DragGestureListener + DragGestureRecognizer + DragSource + DragSourceAdapter + DragSourceContext + DragSourceDragEvent + DragSourceDropEvent + DragSourceEvent + DragSourceListener + DragSourceMotionListener + Driver + DriverManager + DriverPropertyInfo + DropTarget + DropTarget.DropTargetAutoScroller + DropTargetAdapter + DropTargetContext + DropTargetDragEvent + DropTargetDropEvent + DropTargetEvent + DropTargetListener + DuplicateFormatFlagsException + DuplicateName + DuplicateNameHelper + Duration + DynAny + DynAny + DynAnyFactory + DynAnyFactoryHelper + DynAnyFactoryOperations + DynAnyHelper + DynAnyOperations + DynAnySeqHelper + DynArray + DynArray + DynArrayHelper + DynArrayOperations + DynEnum + DynEnum + DynEnumHelper + DynEnumOperations + DynFixed + DynFixed + DynFixedHelper + DynFixedOperations + DynSequence + DynSequence + DynSequenceHelper + DynSequenceOperations + DynStruct + DynStruct + DynStructHelper + DynStructOperations + DynUnion + DynUnion + DynUnionHelper + DynUnionOperations + DynValue + DynValue + DynValueBox + DynValueBoxOperations + DynValueCommon + DynValueCommonOperations + DynValueHelper + DynValueOperations + DynamicImplementation + DynamicImplementation + DynamicMBean + ECField + ECFieldF2m + ECFieldFp + ECGenParameterSpec + ECKey + ECParameterSpec + ECPoint + ECPrivateKey + ECPrivateKeySpec + ECPublicKey + ECPublicKeySpec + ENCODING_CDR_ENCAPS + EOFException + EditorKit + Element + Element + Element + ElementIterator + ElementType + Ellipse2D + Ellipse2D.Double + Ellipse2D.Float + EllipticCurve + EmptyBorder + EmptyStackException + EncodedKeySpec + Encoder + Encoding + EncryptedPrivateKeyInfo + Entity + Entity + EntityReference + EntityResolver + EntityResolver2 + Enum + EnumConstantNotPresentException + EnumControl + EnumControl.Type + EnumMap + EnumSet + EnumSyntax + Enumeration + Environment + Error + ErrorHandler + ErrorListener + ErrorManager + EtchedBorder + Event + EventContext + EventDirContext + EventHandler + EventListener + EventListenerList + EventListenerProxy + EventObject + EventQueue + EventSetDescriptor + Exception + ExceptionDetailMessage + ExceptionInInitializerError + ExceptionList + ExceptionListener + Exchanger + ExecutionException + Executor + ExecutorCompletionService + ExecutorService + Executors + ExemptionMechanism + ExemptionMechanismException + ExemptionMechanismSpi + ExpandVetoException + ExportException + Expression + ExtendedRequest + ExtendedResponse + Externalizable + FREE_MEM + FactoryConfigurationError + FailedLoginException + FeatureDescriptor + Fidelity + Field + FieldNameHelper + FieldNameHelper + FieldPosition + FieldView + File + FileCacheImageInputStream + FileCacheImageOutputStream + FileChannel + FileChannel.MapMode + FileChooserUI + FileDescriptor + FileDialog + FileFilter + FileFilter + FileHandler + FileImageInputStream + FileImageOutputStream + FileInputStream + FileLock + FileLockInterruptionException + FileNameMap + FileNotFoundException + FileOutputStream + FilePermission + FileReader + FileSystemView + FileView + FileWriter + FilenameFilter + Filter + FilterInputStream + FilterOutputStream + FilterReader + FilterWriter + FilteredImageSource + FilteredRowSet + Finishings + FixedHeightLayoutCache + FixedHolder + FlatteningPathIterator + FlavorEvent + FlavorException + FlavorListener + FlavorMap + FlavorTable + Float + FloatBuffer + FloatControl + FloatControl.Type + FloatHolder + FloatSeqHelper + FloatSeqHolder + FlowLayout + FlowView + FlowView.FlowStrategy + Flushable + FocusAdapter + FocusEvent + FocusListener + FocusManager + FocusTraversalPolicy + Font + FontFormatException + FontMetrics + FontRenderContext + FontUIResource + FormSubmitEvent + FormSubmitEvent.MethodType + FormView + Format + Format.Field + FormatConversionProvider + FormatFlagsConversionMismatchException + FormatMismatch + FormatMismatchHelper + Formattable + FormattableFlags + Formatter + Formatter + FormatterClosedException + ForwardRequest + ForwardRequest + ForwardRequestHelper + ForwardRequestHelper + Frame + Future + FutureTask + GSSContext + GSSCredential + GSSException + GSSManager + GSSName + GZIPInputStream + GZIPOutputStream + GapContent + GarbageCollectorMXBean + GatheringByteChannel + GaugeMonitor + GaugeMonitorMBean + GeneralPath + GeneralSecurityException + GenericArrayType + GenericDeclaration + GenericSignatureFormatError + GlyphJustificationInfo + GlyphMetrics + GlyphVector + GlyphView + GlyphView.GlyphPainter + GradientPaint + GraphicAttribute + Graphics + Graphics2D + GraphicsConfigTemplate + GraphicsConfiguration + GraphicsDevice + GraphicsEnvironment + GrayFilter + GregorianCalendar + GridBagConstraints + GridBagLayout + GridLayout + Group + Guard + GuardedObject + HOLDING + HTML + HTML.Attribute + HTML.Tag + HTML.UnknownTag + HTMLDocument + HTMLDocument.Iterator + HTMLEditorKit + HTMLEditorKit.HTMLFactory + HTMLEditorKit.HTMLTextAction + HTMLEditorKit.InsertHTMLTextAction + HTMLEditorKit.LinkController + HTMLEditorKit.Parser + HTMLEditorKit.ParserCallback + HTMLFrameHyperlinkEvent + HTMLWriter + Handler + HandlerBase + HandshakeCompletedEvent + HandshakeCompletedListener + HasControls + HashAttributeSet + HashDocAttributeSet + HashMap + HashPrintJobAttributeSet + HashPrintRequestAttributeSet + HashPrintServiceAttributeSet + HashSet + Hashtable + HeadlessException + HierarchyBoundsAdapter + HierarchyBoundsListener + HierarchyEvent + HierarchyListener + Highlighter + Highlighter.Highlight + Highlighter.HighlightPainter + HostnameVerifier + HttpRetryException + HttpURLConnection + HttpsURLConnection + HyperlinkEvent + HyperlinkEvent.EventType + HyperlinkListener + ICC_ColorSpace + ICC_Profile + ICC_ProfileGray + ICC_ProfileRGB + IDLEntity + IDLType + IDLTypeHelper + IDLTypeOperations + ID_ASSIGNMENT_POLICY_ID + ID_UNIQUENESS_POLICY_ID + IIOByteBuffer + IIOException + IIOImage + IIOInvalidTreeException + IIOMetadata + IIOMetadataController + IIOMetadataFormat + IIOMetadataFormatImpl + IIOMetadataNode + IIOParam + IIOParamController + IIOReadProgressListener + IIOReadUpdateListener + IIOReadWarningListener + IIORegistry + IIOServiceProvider + IIOWriteProgressListener + IIOWriteWarningListener + IMPLICIT_ACTIVATION_POLICY_ID + IMP_LIMIT + INACTIVE + INITIALIZE + INTERNAL + INTF_REPOS + INVALID_ACTIVITY + INVALID_TRANSACTION + INV_FLAG + INV_IDENT + INV_OBJREF + INV_POLICY + IOException + IOR + IORHelper + IORHolder + IORInfo + IORInfoOperations + IORInterceptor + IORInterceptorOperations + IORInterceptor_3_0 + IORInterceptor_3_0Helper + IORInterceptor_3_0Holder + IORInterceptor_3_0Operations + IRObject + IRObjectOperations + Icon + IconUIResource + IconView + IdAssignmentPolicy + IdAssignmentPolicyOperations + IdAssignmentPolicyValue + IdUniquenessPolicy + IdUniquenessPolicyOperations + IdUniquenessPolicyValue + IdentifierHelper + Identity + IdentityHashMap + IdentityScope + IllegalAccessError + IllegalAccessException + IllegalArgumentException + IllegalBlockSizeException + IllegalBlockingModeException + IllegalCharsetNameException + IllegalClassFormatException + IllegalComponentStateException + IllegalFormatCodePointException + IllegalFormatConversionException + IllegalFormatException + IllegalFormatFlagsException + IllegalFormatPrecisionException + IllegalFormatWidthException + IllegalMonitorStateException + IllegalPathStateException + IllegalSelectorException + IllegalStateException + IllegalThreadStateException + Image + ImageCapabilities + ImageConsumer + ImageFilter + ImageGraphicAttribute + ImageIO + ImageIcon + ImageInputStream + ImageInputStreamImpl + ImageInputStreamSpi + ImageObserver + ImageOutputStream + ImageOutputStreamImpl + ImageOutputStreamSpi + ImageProducer + ImageReadParam + ImageReader + ImageReaderSpi + ImageReaderWriterSpi + ImageTranscoder + ImageTranscoderSpi + ImageTypeSpecifier + ImageView + ImageWriteParam + ImageWriter + ImageWriterSpi + ImagingOpException + ImplicitActivationPolicy + ImplicitActivationPolicyOperations + ImplicitActivationPolicyValue + IncompatibleClassChangeError + IncompleteAnnotationException + InconsistentTypeCode + InconsistentTypeCode + InconsistentTypeCodeHelper + IndexColorModel + IndexOutOfBoundsException + IndexedPropertyChangeEvent + IndexedPropertyDescriptor + IndirectionException + Inet4Address + Inet6Address + InetAddress + InetSocketAddress + Inflater + InflaterInputStream + InheritableThreadLocal + Inherited + InitialContext + InitialContextFactory + InitialContextFactoryBuilder + InitialDirContext + InitialLdapContext + InlineView + InputContext + InputEvent + InputMap + InputMapUIResource + InputMethod + InputMethodContext + InputMethodDescriptor + InputMethodEvent + InputMethodHighlight + InputMethodListener + InputMethodRequests + InputMismatchException + InputSource + InputStream + InputStream + InputStream + InputStreamReader + InputSubset + InputVerifier + Insets + InsetsUIResource + InstanceAlreadyExistsException + InstanceNotFoundException + InstantiationError + InstantiationException + Instrument + Instrumentation + InsufficientResourcesException + IntBuffer + IntHolder + Integer + IntegerSyntax + Interceptor + InterceptorOperations + InternalError + InternalFrameAdapter + InternalFrameEvent + InternalFrameFocusTraversalPolicy + InternalFrameListener + InternalFrameUI + InternationalFormatter + InterruptedException + InterruptedIOException + InterruptedNamingException + InterruptibleChannel + IntrospectionException + IntrospectionException + Introspector + Invalid + InvalidActivityException + InvalidAddress + InvalidAddressHelper + InvalidAddressHolder + InvalidAlgorithmParameterException + InvalidApplicationException + InvalidAttributeIdentifierException + InvalidAttributeValueException + InvalidAttributeValueException + InvalidAttributesException + InvalidClassException + InvalidDnDOperationException + InvalidKeyException + InvalidKeyException + InvalidKeySpecException + InvalidMarkException + InvalidMidiDataException + InvalidName + InvalidName + InvalidName + InvalidNameException + InvalidNameHelper + InvalidNameHelper + InvalidNameHolder + InvalidObjectException + InvalidOpenTypeException + InvalidParameterException + InvalidParameterSpecException + InvalidPolicy + InvalidPolicyHelper + InvalidPreferencesFormatException + InvalidPropertiesFormatException + InvalidRelationIdException + InvalidRelationServiceException + InvalidRelationTypeException + InvalidRoleInfoException + InvalidRoleValueException + InvalidSearchControlsException + InvalidSearchFilterException + InvalidSeq + InvalidSlot + InvalidSlotHelper + InvalidTargetObjectTypeException + InvalidTransactionException + InvalidTypeForEncoding + InvalidTypeForEncodingHelper + InvalidValue + InvalidValue + InvalidValueHelper + InvocationEvent + InvocationHandler + InvocationTargetException + InvokeHandler + IstringHelper + ItemEvent + ItemListener + ItemSelectable + Iterable + Iterator + IvParameterSpec + JApplet + JButton + JCheckBox + JCheckBoxMenuItem + JColorChooser + JComboBox + JComboBox.KeySelectionManager + JComponent + JDesktopPane + JDialog + JEditorPane + JFileChooser + JFormattedTextField + JFormattedTextField.AbstractFormatter + JFormattedTextField.AbstractFormatterFactory + JFrame + JInternalFrame + JInternalFrame.JDesktopIcon + JLabel + JLayeredPane + JList + JMException + JMRuntimeException + JMXAuthenticator + JMXConnectionNotification + JMXConnector + JMXConnectorFactory + JMXConnectorProvider + JMXConnectorServer + JMXConnectorServerFactory + JMXConnectorServerMBean + JMXConnectorServerProvider + JMXPrincipal + JMXProviderException + JMXServerErrorException + JMXServiceURL + JMenu + JMenuBar + JMenuItem + JOptionPane + JPEGHuffmanTable + JPEGImageReadParam + JPEGImageWriteParam + JPEGQTable + JPanel + JPasswordField + JPopupMenu + JPopupMenu.Separator + JProgressBar + JRadioButton + JRadioButtonMenuItem + JRootPane + JScrollBar + JScrollPane + JSeparator + JSlider + JSpinner + JSpinner.DateEditor + JSpinner.DefaultEditor + JSpinner.ListEditor + JSpinner.NumberEditor + JSplitPane + JTabbedPane + JTable + JTable.PrintMode + JTableHeader + JTextArea + JTextComponent + JTextComponent.KeyBinding + JTextField + JTextPane + JToggleButton + JToggleButton.ToggleButtonModel + JToolBar + JToolBar.Separator + JToolTip + JTree + JTree.DynamicUtilTreeNode + JTree.EmptySelectionModel + JViewport + JWindow + JarEntry + JarException + JarFile + JarInputStream + JarOutputStream + JarURLConnection + JdbcRowSet + JobAttributes + JobAttributes.DefaultSelectionType + JobAttributes.DestinationType + JobAttributes.DialogType + JobAttributes.MultipleDocumentHandlingType + JobAttributes.SidesType + JobHoldUntil + JobImpressions + JobImpressionsCompleted + JobImpressionsSupported + JobKOctets + JobKOctetsProcessed + JobKOctetsSupported + JobMediaSheets + JobMediaSheetsCompleted + JobMediaSheetsSupported + JobMessageFromOperator + JobName + JobOriginatingUserName + JobPriority + JobPrioritySupported + JobSheets + JobState + JobStateReason + JobStateReasons + JoinRowSet + Joinable + KerberosKey + KerberosPrincipal + KerberosTicket + Kernel + Key + KeyAdapter + KeyAgreement + KeyAgreementSpi + KeyAlreadyExistsException + KeyEvent + KeyEventDispatcher + KeyEventPostProcessor + KeyException + KeyFactory + KeyFactorySpi + KeyGenerator + KeyGeneratorSpi + KeyListener + KeyManagementException + KeyManager + KeyManagerFactory + KeyManagerFactorySpi + KeyPair + KeyPairGenerator + KeyPairGeneratorSpi + KeyRep + KeyRep.Type + KeySpec + KeyStore + KeyStore.Builder + KeyStore.CallbackHandlerProtection + KeyStore.Entry + KeyStore.LoadStoreParameter + KeyStore.PasswordProtection + KeyStore.PrivateKeyEntry + KeyStore.ProtectionParameter + KeyStore.SecretKeyEntry + KeyStore.TrustedCertificateEntry + KeyStoreBuilderParameters + KeyStoreException + KeyStoreSpi + KeyStroke + KeyboardFocusManager + Keymap + LDAPCertStoreParameters + LIFESPAN_POLICY_ID + LOCATION_FORWARD + LSException + LSInput + LSLoadEvent + LSOutput + LSParser + LSParserFilter + LSProgressEvent + LSResourceResolver + LSSerializer + LSSerializerFilter + Label + LabelUI + LabelView + LanguageCallback + LastOwnerException + LayeredHighlighter + LayeredHighlighter.LayerPainter + LayoutFocusTraversalPolicy + LayoutManager + LayoutManager2 + LayoutQueue + LdapContext + LdapName + LdapReferralException + Lease + Level + LexicalHandler + LifespanPolicy + LifespanPolicyOperations + LifespanPolicyValue + LimitExceededException + Line + Line.Info + Line2D + Line2D.Double + Line2D.Float + LineBorder + LineBreakMeasurer + LineEvent + LineEvent.Type + LineListener + LineMetrics + LineNumberInputStream + LineNumberReader + LineUnavailableException + LinkException + LinkLoopException + LinkRef + LinkageError + LinkedBlockingQueue + LinkedHashMap + LinkedHashSet + LinkedList + List + List + ListCellRenderer + ListDataEvent + ListDataListener + ListIterator + ListModel + ListResourceBundle + ListSelectionEvent + ListSelectionListener + ListSelectionModel + ListUI + ListView + ListenerNotFoundException + LoaderHandler + LocalObject + Locale + LocateRegistry + Locator + Locator2 + Locator2Impl + LocatorImpl + Lock + LockSupport + LogManager + LogRecord + LogStream + Logger + LoggingMXBean + LoggingPermission + LoginContext + LoginException + LoginModule + Long + LongBuffer + LongHolder + LongLongSeqHelper + LongLongSeqHolder + LongSeqHelper + LongSeqHolder + LookAndFeel + LookupOp + LookupTable + MARSHAL + MBeanAttributeInfo + MBeanConstructorInfo + MBeanException + MBeanFeatureInfo + MBeanInfo + MBeanNotificationInfo + MBeanOperationInfo + MBeanParameterInfo + MBeanPermission + MBeanRegistration + MBeanRegistrationException + MBeanServer + MBeanServerBuilder + MBeanServerConnection + MBeanServerDelegate + MBeanServerDelegateMBean + MBeanServerFactory + MBeanServerForwarder + MBeanServerInvocationHandler + MBeanServerNotification + MBeanServerNotificationFilter + MBeanServerPermission + MBeanTrustPermission + MGF1ParameterSpec + MLet + MLetMBean + Mac + MacSpi + MalformedInputException + MalformedLinkException + MalformedObjectNameException + MalformedParameterizedTypeException + MalformedURLException + ManageReferralControl + ManagementFactory + ManagementPermission + ManagerFactoryParameters + Manifest + Map + Map.Entry + MappedByteBuffer + MarshalException + MarshalledObject + MaskFormatter + MatchResult + Matcher + Math + MathContext + MatteBorder + Media + MediaName + MediaPrintableArea + MediaSize + MediaSize.Engineering + MediaSize.ISO + MediaSize.JIS + MediaSize.NA + MediaSize.Other + MediaSizeName + MediaTracker + MediaTray + Member + MemoryCacheImageInputStream + MemoryCacheImageOutputStream + MemoryHandler + MemoryImageSource + MemoryMXBean + MemoryManagerMXBean + MemoryNotificationInfo + MemoryPoolMXBean + MemoryType + MemoryUsage + Menu + MenuBar + MenuBarUI + MenuComponent + MenuContainer + MenuDragMouseEvent + MenuDragMouseListener + MenuElement + MenuEvent + MenuItem + MenuItemUI + MenuKeyEvent + MenuKeyListener + MenuListener + MenuSelectionManager + MenuShortcut + MessageDigest + MessageDigestSpi + MessageFormat + MessageFormat.Field + MessageProp + MetaEventListener + MetaMessage + MetalBorders + MetalBorders.ButtonBorder + MetalBorders.Flush3DBorder + MetalBorders.InternalFrameBorder + MetalBorders.MenuBarBorder + MetalBorders.MenuItemBorder + MetalBorders.OptionDialogBorder + MetalBorders.PaletteBorder + MetalBorders.PopupMenuBorder + MetalBorders.RolloverButtonBorder + MetalBorders.ScrollPaneBorder + MetalBorders.TableHeaderBorder + MetalBorders.TextFieldBorder + MetalBorders.ToggleButtonBorder + MetalBorders.ToolBarBorder + MetalButtonUI + MetalCheckBoxIcon + MetalCheckBoxUI + MetalComboBoxButton + MetalComboBoxEditor + MetalComboBoxEditor.UIResource + MetalComboBoxIcon + MetalComboBoxUI + MetalDesktopIconUI + MetalFileChooserUI + MetalIconFactory + MetalIconFactory.FileIcon16 + MetalIconFactory.FolderIcon16 + MetalIconFactory.PaletteCloseIcon + MetalIconFactory.TreeControlIcon + MetalIconFactory.TreeFolderIcon + MetalIconFactory.TreeLeafIcon + MetalInternalFrameTitlePane + MetalInternalFrameUI + MetalLabelUI + MetalLookAndFeel + MetalMenuBarUI + MetalPopupMenuSeparatorUI + MetalProgressBarUI + MetalRadioButtonUI + MetalRootPaneUI + MetalScrollBarUI + MetalScrollButton + MetalScrollPaneUI + MetalSeparatorUI + MetalSliderUI + MetalSplitPaneUI + MetalTabbedPaneUI + MetalTextFieldUI + MetalTheme + MetalToggleButtonUI + MetalToolBarUI + MetalToolTipUI + MetalTreeUI + Method + MethodDescriptor + MidiChannel + MidiDevice + MidiDevice.Info + MidiDeviceProvider + MidiEvent + MidiFileFormat + MidiFileReader + MidiFileWriter + MidiMessage + MidiSystem + MidiUnavailableException + MimeTypeParseException + MinimalHTMLWriter + MissingFormatArgumentException + MissingFormatWidthException + MissingResourceException + Mixer + Mixer.Info + MixerProvider + ModelMBean + ModelMBeanAttributeInfo + ModelMBeanConstructorInfo + ModelMBeanInfo + ModelMBeanInfoSupport + ModelMBeanNotificationBroadcaster + ModelMBeanNotificationInfo + ModelMBeanOperationInfo + ModificationItem + Modifier + Monitor + MonitorMBean + MonitorNotification + MonitorSettingException + MouseAdapter + MouseDragGestureRecognizer + MouseEvent + MouseInfo + MouseInputAdapter + MouseInputListener + MouseListener + MouseMotionAdapter + MouseMotionListener + MouseWheelEvent + MouseWheelListener + MultiButtonUI + MultiColorChooserUI + MultiComboBoxUI + MultiDesktopIconUI + MultiDesktopPaneUI + MultiDoc + MultiDocPrintJob + MultiDocPrintService + MultiFileChooserUI + MultiInternalFrameUI + MultiLabelUI + MultiListUI + MultiLookAndFeel + MultiMenuBarUI + MultiMenuItemUI + MultiOptionPaneUI + MultiPanelUI + MultiPixelPackedSampleModel + MultiPopupMenuUI + MultiProgressBarUI + MultiRootPaneUI + MultiScrollBarUI + MultiScrollPaneUI + MultiSeparatorUI + MultiSliderUI + MultiSpinnerUI + MultiSplitPaneUI + MultiTabbedPaneUI + MultiTableHeaderUI + MultiTableUI + MultiTextUI + MultiToolBarUI + MultiToolTipUI + MultiTreeUI + MultiViewportUI + MulticastSocket + MultipleComponentProfileHelper + MultipleComponentProfileHolder + MultipleDocumentHandling + MultipleMaster + MutableAttributeSet + MutableComboBoxModel + MutableTreeNode + NON_EXISTENT + NO_IMPLEMENT + NO_MEMORY + NO_PERMISSION + NO_RESOURCES + NO_RESPONSE + NVList + Name + NameAlreadyBoundException + NameCallback + NameClassPair + NameComponent + NameComponentHelper + NameComponentHolder + NameDynAnyPair + NameDynAnyPairHelper + NameDynAnyPairSeqHelper + NameHelper + NameHolder + NameList + NameNotFoundException + NameParser + NameValuePair + NameValuePair + NameValuePairHelper + NameValuePairHelper + NameValuePairSeqHelper + NamedNodeMap + NamedValue + NamespaceChangeListener + NamespaceContext + NamespaceSupport + Naming + NamingContext + NamingContextExt + NamingContextExtHelper + NamingContextExtHolder + NamingContextExtOperations + NamingContextExtPOA + NamingContextHelper + NamingContextHolder + NamingContextOperations + NamingContextPOA + NamingEnumeration + NamingEvent + NamingException + NamingExceptionEvent + NamingListener + NamingManager + NamingSecurityException + NavigationFilter + NavigationFilter.FilterBypass + NegativeArraySizeException + NetPermission + NetworkInterface + NoClassDefFoundError + NoConnectionPendingException + NoContext + NoContextHelper + NoInitialContextException + NoPermissionException + NoRouteToHostException + NoServant + NoServantHelper + NoSuchAlgorithmException + NoSuchAttributeException + NoSuchElementException + NoSuchFieldError + NoSuchFieldException + NoSuchMethodError + NoSuchMethodException + NoSuchObjectException + NoSuchPaddingException + NoSuchProviderException + Node + NodeChangeEvent + NodeChangeListener + NodeList + NonReadableChannelException + NonWritableChannelException + NoninvertibleTransformException + NotActiveException + NotBoundException + NotCompliantMBeanException + NotContextException + NotEmpty + NotEmptyHelper + NotEmptyHolder + NotFound + NotFoundHelper + NotFoundHolder + NotFoundReason + NotFoundReasonHelper + NotFoundReasonHolder + NotOwnerException + NotSerializableException + NotYetBoundException + NotYetConnectedException + Notation + Notification + NotificationBroadcaster + NotificationBroadcasterSupport + NotificationEmitter + NotificationFilter + NotificationFilterSupport + NotificationListener + NotificationResult + NullCipher + NullPointerException + Number + NumberFormat + NumberFormat.Field + NumberFormatException + NumberFormatter + NumberOfDocuments + NumberOfInterveningJobs + NumberUp + NumberUpSupported + NumericShaper + OAEPParameterSpec + OBJECT_NOT_EXIST + OBJ_ADAPTER + OMGVMCID + ORB + ORB + ORBIdHelper + ORBInitInfo + ORBInitInfoOperations + ORBInitializer + ORBInitializerOperations + ObjID + Object + Object + ObjectAlreadyActive + ObjectAlreadyActiveHelper + ObjectChangeListener + ObjectFactory + ObjectFactoryBuilder + ObjectHelper + ObjectHolder + ObjectIdHelper + ObjectIdHelper + ObjectImpl + ObjectImpl + ObjectInput + ObjectInputStream + ObjectInputStream.GetField + ObjectInputValidation + ObjectInstance + ObjectName + ObjectNotActive + ObjectNotActiveHelper + ObjectOutput + ObjectOutputStream + ObjectOutputStream.PutField + ObjectReferenceFactory + ObjectReferenceFactoryHelper + ObjectReferenceFactoryHolder + ObjectReferenceTemplate + ObjectReferenceTemplateHelper + ObjectReferenceTemplateHolder + ObjectReferenceTemplateSeqHelper + ObjectReferenceTemplateSeqHolder + ObjectStreamClass + ObjectStreamConstants + ObjectStreamException + ObjectStreamField + ObjectView + Observable + Observer + OceanTheme + OctetSeqHelper + OctetSeqHolder + Oid + OpenDataException + OpenMBeanAttributeInfo + OpenMBeanAttributeInfoSupport + OpenMBeanConstructorInfo + OpenMBeanConstructorInfoSupport + OpenMBeanInfo + OpenMBeanInfoSupport + OpenMBeanOperationInfo + OpenMBeanOperationInfoSupport + OpenMBeanParameterInfo + OpenMBeanParameterInfoSupport + OpenType + OpenType + OperatingSystemMXBean + Operation + OperationNotSupportedException + OperationsException + Option + OptionPaneUI + OptionalDataException + OrientationRequested + OutOfMemoryError + OutputDeviceAssigned + OutputKeys + OutputStream + OutputStream + OutputStream + OutputStreamWriter + OverlappingFileLockException + OverlayLayout + Override + Owner + PBEKey + PBEKeySpec + PBEParameterSpec + PDLOverrideSupported + PERSIST_STORE + PKCS8EncodedKeySpec + PKIXBuilderParameters + PKIXCertPathBuilderResult + PKIXCertPathChecker + PKIXCertPathValidatorResult + PKIXParameters + POA + POAHelper + POAManager + POAManagerOperations + POAOperations + PRIVATE_MEMBER + PSSParameterSpec + PSource + PSource.PSpecified + PUBLIC_MEMBER + Pack200 + Pack200.Packer + Pack200.Unpacker + Package + PackedColorModel + PageAttributes + PageAttributes.ColorType + PageAttributes.MediaType + PageAttributes.OrientationRequestedType + PageAttributes.OriginType + PageAttributes.PrintQualityType + PageFormat + PageRanges + Pageable + PagedResultsControl + PagedResultsResponseControl + PagesPerMinute + PagesPerMinuteColor + Paint + PaintContext + PaintEvent + Panel + PanelUI + Paper + ParagraphView + ParagraphView + Parameter + ParameterBlock + ParameterDescriptor + ParameterMetaData + ParameterMode + ParameterModeHelper + ParameterModeHolder + ParameterizedType + ParseException + ParsePosition + Parser + Parser + ParserAdapter + ParserConfigurationException + ParserDelegator + ParserFactory + PartialResultException + PasswordAuthentication + PasswordCallback + PasswordView + Patch + PathIterator + Pattern + PatternSyntaxException + Permission + Permission + PermissionCollection + Permissions + PersistenceDelegate + PersistentMBean + PhantomReference + Pipe + Pipe.SinkChannel + Pipe.SourceChannel + PipedInputStream + PipedOutputStream + PipedReader + PipedWriter + PixelGrabber + PixelInterleavedSampleModel + PlainDocument + PlainView + Point + Point2D + Point2D.Double + Point2D.Float + PointerInfo + Policy + Policy + Policy + PolicyError + PolicyErrorCodeHelper + PolicyErrorHelper + PolicyErrorHolder + PolicyFactory + PolicyFactoryOperations + PolicyHelper + PolicyHolder + PolicyListHelper + PolicyListHolder + PolicyNode + PolicyOperations + PolicyQualifierInfo + PolicyTypeHelper + Polygon + PooledConnection + Popup + PopupFactory + PopupMenu + PopupMenuEvent + PopupMenuListener + PopupMenuUI + Port + Port.Info + PortUnreachableException + PortableRemoteObject + PortableRemoteObjectDelegate + Position + Position.Bias + Predicate + PreferenceChangeEvent + PreferenceChangeListener + Preferences + PreferencesFactory + PreparedStatement + PresentationDirection + Principal + Principal + PrincipalHolder + PrintEvent + PrintException + PrintGraphics + PrintJob + PrintJobAdapter + PrintJobAttribute + PrintJobAttributeEvent + PrintJobAttributeListener + PrintJobAttributeSet + PrintJobEvent + PrintJobListener + PrintQuality + PrintRequestAttribute + PrintRequestAttributeSet + PrintService + PrintServiceAttribute + PrintServiceAttributeEvent + PrintServiceAttributeListener + PrintServiceAttributeSet + PrintServiceLookup + PrintStream + PrintWriter + Printable + PrinterAbortException + PrinterException + PrinterGraphics + PrinterIOException + PrinterInfo + PrinterIsAcceptingJobs + PrinterJob + PrinterLocation + PrinterMakeAndModel + PrinterMessageFromOperator + PrinterMoreInfo + PrinterMoreInfoManufacturer + PrinterName + PrinterResolution + PrinterState + PrinterStateReason + PrinterStateReasons + PrinterURI + PriorityBlockingQueue + PriorityQueue + PrivateClassLoader + PrivateCredentialPermission + PrivateKey + PrivateMLet + PrivilegedAction + PrivilegedActionException + PrivilegedExceptionAction + Process + ProcessBuilder + ProcessingInstruction + ProfileDataException + ProfileIdHelper + ProgressBarUI + ProgressMonitor + ProgressMonitorInputStream + Properties + PropertyChangeEvent + PropertyChangeListener + PropertyChangeListenerProxy + PropertyChangeSupport + PropertyDescriptor + PropertyEditor + PropertyEditorManager + PropertyEditorSupport + PropertyPermission + PropertyResourceBundle + PropertyVetoException + ProtectionDomain + ProtocolException + Provider + Provider.Service + ProviderException + Proxy + Proxy + Proxy.Type + ProxySelector + PublicKey + PushbackInputStream + PushbackReader + QName + QuadCurve2D + QuadCurve2D.Double + QuadCurve2D.Float + Query + QueryEval + QueryExp + Queue + QueuedJobCount + RC2ParameterSpec + RC5ParameterSpec + REBIND + REQUEST_PROCESSING_POLICY_ID + RGBImageFilter + RMIClassLoader + RMIClassLoaderSpi + RMIClientSocketFactory + RMIConnection + RMIConnectionImpl + RMIConnectionImpl_Stub + RMIConnector + RMIConnectorServer + RMICustomMaxStreamFormat + RMIFailureHandler + RMIIIOPServerImpl + RMIJRMPServerImpl + RMISecurityException + RMISecurityManager + RMIServer + RMIServerImpl + RMIServerImpl_Stub + RMIServerSocketFactory + RMISocketFactory + RSAKey + RSAKeyGenParameterSpec + RSAMultiPrimePrivateCrtKey + RSAMultiPrimePrivateCrtKeySpec + RSAOtherPrimeInfo + RSAPrivateCrtKey + RSAPrivateCrtKeySpec + RSAPrivateKey + RSAPrivateKeySpec + RSAPublicKey + RSAPublicKeySpec + RTFEditorKit + Random + RandomAccess + RandomAccessFile + Raster + RasterFormatException + RasterOp + Rdn + ReadOnlyBufferException + ReadWriteLock + Readable + ReadableByteChannel + Reader + RealmCallback + RealmChoiceCallback + Receiver + Rectangle + Rectangle2D + Rectangle2D.Double + Rectangle2D.Float + RectangularShape + ReentrantLock + ReentrantReadWriteLock + ReentrantReadWriteLock.ReadLock + ReentrantReadWriteLock.WriteLock + Ref + RefAddr + Reference + Reference + ReferenceQueue + ReferenceUriSchemesSupported + Referenceable + ReferralException + ReflectPermission + ReflectionException + RefreshFailedException + Refreshable + Region + RegisterableService + Registry + RegistryHandler + RejectedExecutionException + RejectedExecutionHandler + Relation + RelationException + RelationNotFoundException + RelationNotification + RelationService + RelationServiceMBean + RelationServiceNotRegisteredException + RelationSupport + RelationSupportMBean + RelationType + RelationTypeNotFoundException + RelationTypeSupport + RemarshalException + Remote + RemoteCall + RemoteException + RemoteObject + RemoteObjectInvocationHandler + RemoteRef + RemoteServer + RemoteStub + RenderContext + RenderableImage + RenderableImageOp + RenderableImageProducer + RenderedImage + RenderedImageFactory + Renderer + RenderingHints + RenderingHints.Key + RepaintManager + ReplicateScaleFilter + RepositoryIdHelper + Request + RequestInfo + RequestInfoOperations + RequestProcessingPolicy + RequestProcessingPolicyOperations + RequestProcessingPolicyValue + RequestingUserName + RequiredModelMBean + RescaleOp + ResolutionSyntax + ResolveResult + Resolver + ResourceBundle + ResponseCache + ResponseHandler + Result + ResultSet + ResultSetMetaData + Retention + RetentionPolicy + ReverbType + Robot + Role + RoleInfo + RoleInfoNotFoundException + RoleList + RoleNotFoundException + RoleResult + RoleStatus + RoleUnresolved + RoleUnresolvedList + RootPaneContainer + RootPaneUI + RoundRectangle2D + RoundRectangle2D.Double + RoundRectangle2D.Float + RoundingMode + RowMapper + RowSet + RowSetEvent + RowSetInternal + RowSetListener + RowSetMetaData + RowSetMetaDataImpl + RowSetReader + RowSetWarning + RowSetWriter + RuleBasedCollator + RunTime + RunTimeOperations + Runnable + Runtime + RuntimeErrorException + RuntimeException + RuntimeMBeanException + RuntimeMXBean + RuntimeOperationsException + RuntimePermission + SAXException + SAXNotRecognizedException + SAXNotSupportedException + SAXParseException + SAXParser + SAXParserFactory + SAXResult + SAXSource + SAXTransformerFactory + SERVANT_RETENTION_POLICY_ID + SQLData + SQLException + SQLInput + SQLInputImpl + SQLOutput + SQLOutputImpl + SQLPermission + SQLWarning + SSLContext + SSLContextSpi + SSLEngine + SSLEngineResult + SSLEngineResult.HandshakeStatus + SSLEngineResult.Status + SSLException + SSLHandshakeException + SSLKeyException + SSLPeerUnverifiedException + SSLPermission + SSLProtocolException + SSLServerSocket + SSLServerSocketFactory + SSLSession + SSLSessionBindingEvent + SSLSessionBindingListener + SSLSessionContext + SSLSocket + SSLSocketFactory + SUCCESSFUL + SYNC_WITH_TRANSPORT + SYSTEM_EXCEPTION + SampleModel + Sasl + SaslClient + SaslClientFactory + SaslException + SaslServer + SaslServerFactory + Savepoint + Scanner + ScatteringByteChannel + ScheduledExecutorService + ScheduledFuture + ScheduledThreadPoolExecutor + Schema + SchemaFactory + SchemaFactoryLoader + SchemaViolationException + ScrollBarUI + ScrollPane + ScrollPaneAdjustable + ScrollPaneConstants + ScrollPaneLayout + ScrollPaneLayout.UIResource + ScrollPaneUI + Scrollable + Scrollbar + SealedObject + SearchControls + SearchResult + SecretKey + SecretKeyFactory + SecretKeyFactorySpi + SecretKeySpec + SecureCacheResponse + SecureClassLoader + SecureRandom + SecureRandomSpi + Security + SecurityException + SecurityManager + SecurityPermission + Segment + SelectableChannel + SelectionKey + Selector + SelectorProvider + Semaphore + SeparatorUI + Sequence + SequenceInputStream + Sequencer + Sequencer.SyncMode + SerialArray + SerialBlob + SerialClob + SerialDatalink + SerialException + SerialJavaObject + SerialRef + SerialStruct + Serializable + SerializablePermission + Servant + ServantActivator + ServantActivatorHelper + ServantActivatorOperations + ServantActivatorPOA + ServantAlreadyActive + ServantAlreadyActiveHelper + ServantLocator + ServantLocatorHelper + ServantLocatorOperations + ServantLocatorPOA + ServantManager + ServantManagerOperations + ServantNotActive + ServantNotActiveHelper + ServantObject + ServantRetentionPolicy + ServantRetentionPolicyOperations + ServantRetentionPolicyValue + ServerCloneException + ServerError + ServerException + ServerIdHelper + ServerNotActiveException + ServerRef + ServerRequest + ServerRequestInfo + ServerRequestInfoOperations + ServerRequestInterceptor + ServerRequestInterceptorOperations + ServerRuntimeException + ServerSocket + ServerSocketChannel + ServerSocketFactory + ServiceContext + ServiceContextHelper + ServiceContextHolder + ServiceContextListHelper + ServiceContextListHolder + ServiceDetail + ServiceDetailHelper + ServiceIdHelper + ServiceInformation + ServiceInformationHelper + ServiceInformationHolder + ServiceNotFoundException + ServicePermission + ServiceRegistry + ServiceRegistry.Filter + ServiceUI + ServiceUIFactory + ServiceUnavailableException + Set + SetOfIntegerSyntax + SetOverrideType + SetOverrideTypeHelper + Severity + Shape + ShapeGraphicAttribute + SheetCollate + Short + ShortBuffer + ShortBufferException + ShortHolder + ShortLookupTable + ShortMessage + ShortSeqHelper + ShortSeqHolder + Sides + Signature + SignatureException + SignatureSpi + SignedObject + Signer + SimpleAttributeSet + SimpleBeanInfo + SimpleDateFormat + SimpleDoc + SimpleFormatter + SimpleTimeZone + SimpleType + SinglePixelPackedSampleModel + SingleSelectionModel + Size2DSyntax + SizeLimitExceededException + SizeRequirements + SizeSequence + Skeleton + SkeletonMismatchException + SkeletonNotFoundException + SliderUI + Socket + SocketAddress + SocketChannel + SocketException + SocketFactory + SocketHandler + SocketImpl + SocketImplFactory + SocketOptions + SocketPermission + SocketSecurityException + SocketTimeoutException + SoftBevelBorder + SoftReference + SortControl + SortKey + SortResponseControl + SortedMap + SortedSet + SortingFocusTraversalPolicy + Soundbank + SoundbankReader + SoundbankResource + Source + SourceDataLine + SourceLocator + SpinnerDateModel + SpinnerListModel + SpinnerModel + SpinnerNumberModel + SpinnerUI + SplitPaneUI + Spring + SpringLayout + SpringLayout.Constraints + SslRMIClientSocketFactory + SslRMIServerSocketFactory + Stack + StackOverflowError + StackTraceElement + StandardMBean + StartTlsRequest + StartTlsResponse + State + StateEdit + StateEditable + StateFactory + Statement + Statement + StreamCorruptedException + StreamHandler + StreamPrintService + StreamPrintServiceFactory + StreamResult + StreamSource + StreamTokenizer + Streamable + StreamableValue + StrictMath + String + StringBuffer + StringBufferInputStream + StringBuilder + StringCharacterIterator + StringContent + StringHolder + StringIndexOutOfBoundsException + StringMonitor + StringMonitorMBean + StringNameHelper + StringReader + StringRefAddr + StringSelection + StringSeqHelper + StringSeqHolder + StringTokenizer + StringValueExp + StringValueHelper + StringWriter + Stroke + Struct + StructMember + StructMemberHelper + Stub + StubDelegate + StubNotFoundException + Style + StyleConstants + StyleConstants.CharacterConstants + StyleConstants.ColorConstants + StyleConstants.FontConstants + StyleConstants.ParagraphConstants + StyleContext + StyleSheet + StyleSheet.BoxPainter + StyleSheet.ListPainter + StyledDocument + StyledEditorKit + StyledEditorKit.AlignmentAction + StyledEditorKit.BoldAction + StyledEditorKit.FontFamilyAction + StyledEditorKit.FontSizeAction + StyledEditorKit.ForegroundAction + StyledEditorKit.ItalicAction + StyledEditorKit.StyledTextAction + StyledEditorKit.UnderlineAction + Subject + SubjectDelegationPermission + SubjectDomainCombiner + SupportedValuesAttribute + SuppressWarnings + SwingConstants + SwingPropertyChangeSupport + SwingUtilities + SyncFactory + SyncFactoryException + SyncFailedException + SyncProvider + SyncProviderException + SyncResolver + SyncScopeHelper + SynchronousQueue + SynthConstants + SynthContext + SynthGraphicsUtils + SynthLookAndFeel + SynthPainter + SynthStyle + SynthStyleFactory + Synthesizer + SysexMessage + System + SystemColor + SystemException + SystemFlavorMap + TAG_ALTERNATE_IIOP_ADDRESS + TAG_CODE_SETS + TAG_INTERNET_IOP + TAG_JAVA_CODEBASE + TAG_MULTIPLE_COMPONENTS + TAG_ORB_TYPE + TAG_POLICIES + TAG_RMI_CUSTOM_MAX_STREAM_FORMAT + TCKind + THREAD_POLICY_ID + TIMEOUT + TRANSACTION_MODE + TRANSACTION_REQUIRED + TRANSACTION_ROLLEDBACK + TRANSACTION_UNAVAILABLE + TRANSIENT + TRANSPORT_RETRY + TabExpander + TabSet + TabStop + TabableView + TabbedPaneUI + TableCellEditor + TableCellRenderer + TableColumn + TableColumnModel + TableColumnModelEvent + TableColumnModelListener + TableHeaderUI + TableModel + TableModelEvent + TableModelListener + TableUI + TableView + TabularData + TabularDataSupport + TabularType + TagElement + TaggedComponent + TaggedComponentHelper + TaggedComponentHolder + TaggedProfile + TaggedProfileHelper + TaggedProfileHolder + Target + TargetDataLine + TargetedNotification + Templates + TemplatesHandler + Text + TextAction + TextArea + TextAttribute + TextComponent + TextEvent + TextField + TextHitInfo + TextInputCallback + TextLayout + TextLayout.CaretPolicy + TextListener + TextMeasurer + TextOutputCallback + TextSyntax + TextUI + TexturePaint + Thread + Thread.State + Thread.UncaughtExceptionHandler + ThreadDeath + ThreadFactory + ThreadGroup + ThreadInfo + ThreadLocal + ThreadMXBean + ThreadPolicy + ThreadPolicyOperations + ThreadPolicyValue + ThreadPoolExecutor + ThreadPoolExecutor.AbortPolicy + ThreadPoolExecutor.CallerRunsPolicy + ThreadPoolExecutor.DiscardOldestPolicy + ThreadPoolExecutor.DiscardPolicy + Throwable + Tie + TileObserver + Time + TimeLimitExceededException + TimeUnit + TimeZone + TimeoutException + Timer + Timer + Timer + TimerAlarmClockNotification + TimerMBean + TimerNotification + TimerTask + Timestamp + Timestamp + TitledBorder + TooManyListenersException + ToolBarUI + ToolTipManager + ToolTipUI + Toolkit + Track + TransactionRequiredException + TransactionRolledbackException + TransactionService + TransactionalWriter + TransferHandler + Transferable + TransformAttribute + Transformer + TransformerConfigurationException + TransformerException + TransformerFactory + TransformerFactoryConfigurationError + TransformerHandler + Transmitter + Transparency + TreeCellEditor + TreeCellRenderer + TreeExpansionEvent + TreeExpansionListener + TreeMap + TreeModel + TreeModelEvent + TreeModelListener + TreeNode + TreePath + TreeSelectionEvent + TreeSelectionListener + TreeSelectionModel + TreeSet + TreeUI + TreeWillExpandListener + TrustAnchor + TrustManager + TrustManagerFactory + TrustManagerFactorySpi + Type + TypeCode + TypeCodeHolder + TypeInfo + TypeInfoProvider + TypeMismatch + TypeMismatch + TypeMismatch + TypeMismatchHelper + TypeMismatchHelper + TypeNotPresentException + TypeVariable + Types + UID + UIDefaults + UIDefaults.ActiveValue + UIDefaults.LazyInputMap + UIDefaults.LazyValue + UIDefaults.ProxyLazyValue + UIManager + UIManager.LookAndFeelInfo + UIResource + ULongLongSeqHelper + ULongLongSeqHolder + ULongSeqHelper + ULongSeqHolder + UNKNOWN + UNKNOWN + UNSUPPORTED_POLICY + UNSUPPORTED_POLICY_VALUE + URI + URIException + URIResolver + URISyntax + URISyntaxException + URL + URLClassLoader + URLConnection + URLDecoder + URLEncoder + URLStreamHandler + URLStreamHandlerFactory + URLStringHelper + USER_EXCEPTION + UShortSeqHelper + UShortSeqHolder + UTFDataFormatException + UUID + UndeclaredThrowableException + UndoManager + UndoableEdit + UndoableEditEvent + UndoableEditListener + UndoableEditSupport + UnexpectedException + UnicastRemoteObject + UnionMember + UnionMemberHelper + UnknownEncoding + UnknownEncodingHelper + UnknownError + UnknownException + UnknownFormatConversionException + UnknownFormatFlagsException + UnknownGroupException + UnknownHostException + UnknownHostException + UnknownObjectException + UnknownServiceException + UnknownUserException + UnknownUserExceptionHelper + UnknownUserExceptionHolder + UnmappableCharacterException + UnmarshalException + UnmodifiableClassException + UnmodifiableSetException + UnrecoverableEntryException + UnrecoverableKeyException + Unreferenced + UnresolvedAddressException + UnresolvedPermission + UnsatisfiedLinkError + UnsolicitedNotification + UnsolicitedNotificationEvent + UnsolicitedNotificationListener + UnsupportedAddressTypeException + UnsupportedAudioFileException + UnsupportedCallbackException + UnsupportedCharsetException + UnsupportedClassVersionError + UnsupportedEncodingException + UnsupportedFlavorException + UnsupportedLookAndFeelException + UnsupportedOperationException + UserDataHandler + UserException + Util + UtilDelegate + Utilities + VMID + VM_ABSTRACT + VM_CUSTOM + VM_NONE + VM_TRUNCATABLE + Validator + ValidatorHandler + ValueBase + ValueBaseHelper + ValueBaseHolder + ValueExp + ValueFactory + ValueHandler + ValueHandlerMultiFormat + ValueInputStream + ValueMember + ValueMemberHelper + ValueOutputStream + VariableHeightLayoutCache + Vector + VerifyError + VersionSpecHelper + VetoableChangeListener + VetoableChangeListenerProxy + VetoableChangeSupport + View + ViewFactory + ViewportLayout + ViewportUI + VirtualMachineError + Visibility + VisibilityHelper + VoiceStatus + Void + VolatileImage + WCharSeqHelper + WCharSeqHolder + WStringSeqHelper + WStringSeqHolder + WStringValueHelper + WeakHashMap + WeakReference + WebRowSet + WildcardType + Window + WindowAdapter + WindowConstants + WindowEvent + WindowFocusListener + WindowListener + WindowStateListener + WrappedPlainView + WritableByteChannel + WritableRaster + WritableRenderedImage + WriteAbortedException + Writer + WrongAdapter + WrongAdapterHelper + WrongPolicy + WrongPolicyHelper + WrongTransaction + WrongTransactionHelper + WrongTransactionHolder + X500Principal + X500PrivateCredential + X509CRL + X509CRLEntry + X509CRLSelector + X509CertSelector + X509Certificate + X509Certificate + X509EncodedKeySpec + X509ExtendedKeyManager + X509Extension + X509KeyManager + X509TrustManager + XAConnection + XADataSource + XAException + XAResource + XMLConstants + XMLDecoder + XMLEncoder + XMLFilter + XMLFilterImpl + XMLFormatter + XMLGregorianCalendar + XMLParseException + XMLReader + XMLReaderAdapter + XMLReaderFactory + XPath + XPathConstants + XPathException + XPathExpression + XPathExpressionException + XPathFactory + XPathFactoryConfigurationException + XPathFunction + XPathFunctionException + XPathFunctionResolver + XPathVariableResolver + Xid + XmlReader + XmlWriter + ZipEntry + ZipException + ZipFile + ZipInputStream + ZipOutputStream + ZoneView + _BindingIteratorImplBase + _BindingIteratorStub + _DynAnyFactoryStub + _DynAnyStub + _DynArrayStub + _DynEnumStub + _DynFixedStub + _DynSequenceStub + _DynStructStub + _DynUnionStub + _DynValueStub + _IDLTypeStub + _NamingContextExtStub + _NamingContextImplBase + _NamingContextStub + _PolicyStub + _Remote_Stub + _ServantActivatorStub + _ServantLocatorStub + + + abstract + case + catch + class + def + do + else + extends + false + final + finally + for + forSome + if + implicit + import + lazy + match + new + null + object + override + package + private + protected + requires + return + sealed + super + this + throw + trait + true + try + type + val + var + while + with + yield + + + boolean + byte + char + double + float + int + long + short + unit + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/scheme.xml b/src/data/extra/syntax-highlighting/syntax/scheme.xml new file mode 100644 index 00000000..749a9132 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/scheme.xml @@ -0,0 +1,394 @@ + + + + + + <= + < + = + => + >= + > + - + / + *,* + *) + + + + + #\nul + #\soh + #\stx + #\etx + #\eot + #\enq + #\ack + #\bel + #\bs + #\ht + #\nl + #\vt + #\np + #\cr + #\so + #\si + #\dle + #\dc1 + #\dc2 + #\dc3 + #\dc4 + #\nak + #\syn + #\etb + #\can + #\em + #\sub + #\esc + #\fs + #\gs + #\rs + #\us + #\space + #\sp + #\newline + #\nl + #\tab + #\ht + #\backspace + #\bs + #\return + #\cr + #\page + #\np + #\null + #\nul + + + define + define* + define-accessor + define-class + defined? + define-generic + define-macro + define-method + define-module + define-private + define-public + define*-public + define-reader-ctor + define-syntax + define-syntax-macro + defmacro + defmacro* + defmacro*-public + + + abs + acos + and + angle + append + applymap + asin + assoc + assq + assv + atan + begin + boolean? + break + caaaar + caaadr + caaar + caadar + caaddr + caadr + caar + cadaar + cadadr + cadar + caddar + cadddr + caddr + cadr + call/cc + call-with-current-continuation + call-with-input-file + call-with-output-file + call-with-values + car + case + catch + cdaaar + cdaadr + cdaar + cdadar + cdaddr + cdadr + cdar + cddaar + cddadr + cddar + cdddar + cddddr + cdddr + cddr + cdr + ceiling + char-alphabetic? + char-ci>=? + char-ci>? + char-ci=? + char-ci<=? + char-downcase + char->integer + char>=? + char>? + char=? + char? + char-lower-case? + char<?c + char<=? + char-numeric? + char-ready? + char-upcase + char-upper-case? + char-whitespace? + close-input-port + close-output-port + complex? + cond + cons + continue + cos + current-input-port + current-output-port + denominator + display + do + dynamic-wind + else + eof-object? + eq? + equal? + eqv? + eval + even? + exact->inexact + exact? + exp + expt + floor + force + for-each + gcd + har-ci<? + if + imag-part + inexact->exact + inexact? + input-port? + integer->char + integer? + interaction-environment + lambda + lcm + length + let + let* + letrec + letrec-syntax + let-syntax + list->string + list + list? + list-ref + list-tail + load + log + magnitude + make-polar + make-rectangular + make-string + make-vector + max + member + memq + memv + min + modulo + negative? + newline + not + null-environment + null? + number? + number->string + numerator + odd? + open-input-file + open-output-file + or + output-port? + pair? + peek-char + port? + positive? + procedure? + quotient + rational? + rationalize + read-char + read + real? + real-part + remainder + reverse + round + scheme-report-environment + set-car! + set-cdr! + sin + sqrt + string-append + string-ci>=? + string-ci>? + string-ci=? + string-ci<=? + string-ci<? + string-copy + string-fill! + string>=? + string>? + string->list + string->number + string->symbol + string=? + string + string? + string-length + string<=? + string<? + string-ref + string-set! + substring + symbol->string + symbol? + syntax-rules + tan + transcript-off + transcript-on + truncate + values + vector-fill! + vector->listlist->vector + vector + vector? + vector-length + vector-ref + vector-set! + while + with-input-from-file + with-output-to-file + write-char + write + zero? + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/sci.xml b/src/data/extra/syntax-highlighting/syntax/sci.xml new file mode 100644 index 00000000..20af7ac6 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/sci.xml @@ -0,0 +1,1191 @@ + + + + + + do + else + for + if + elseif + end + select + then + while + + + abort + break + quit + return + resume + pause + + + function + endfunction + + + error + warning + + + %F + %f + %T + %t + %e + %pi + %inf + %i + %z + %io + %s + %nan + $ + %eps + MSDOS + + + zpell + zpch2 + zpch1 + zpbutt + zgrid + zeros + zeropen + ZCROSS_f + yulewalk + xtitle + xtape + xstringl + xstringb + xstring + xsetm + xsetech + xset + xselect + xsegs + xsave + xs2fig + xrpoly + xrects + xrect + xpolys + xpoly + xpause + xnumb + xname + x_message_modeless + x_message + x_mdialog + x_matrix + xload + xlfont + xinit + xinfo + xgrid + xgraduate + xgetmouse + xgetfile + xgetech + xget + xfrect + xfpolys + xfpoly + xfarcs + xfarc + xend + x_dialog + xdel + xclip + xclick + xclear + xclea + x_choose + x_choices + xchange + xbasr + xbasimp + xbasc + xaxis + xarrows + xarcs + xarc + WRITEC_f + write4b + write + writb + winsid + window + wigner + wiener + whos + who + whereis + whereami + where + what + wfir + WFILE_f + wavwrite + wavread + warning + WaitMsg + varn + varargout + varargin + user + unsetmenu + unobs + unix_x + unix_w + unix_s + unix_g + unix + unique + union + ulink + ui_observer + uint8 + uint32 + uint16 + uimenu + uicontrol + typeof + typename + type + trzeros + triu + trisolve + tril + trianfml + trfmod + TRASH_f + translatepaths + trans_closure + trans + trace + toeplitz + tlist + TK_SetVar + TK_GetVar + TK_EvalStr + TK_EvalFile + titlepage + timer + time_id + TIME_f + tilda + tf2ss + tf2des + TEXT_f + texprint + testmatrix + tdinit + TCLSS_f + tanm + tanhm + tanh + tangent + TANBLK_f + tan + systmat + systems + system + syssize + syslin + sysfact- + sysdiag + sysconv + symbols + sylv + sylm + svplot + svd + sva + supernode + SUPER_f + sum + successors + subplot + subgraph + subf + strsubst + strong_con_nodes + strong_connex + stripblanks + strings + string + strindex + strcat + str2code + STOP_f + st_ility + st_deviation + startup + star + standard_output + standard_origin + standard_input + standard_draw + standard_define + stacksize + stabil + ssrand + ssprint + sskf + sscanf + ss2tf + ss2ss + ss2des + srkf + srfaur + squarewave + square + sqrtm + sqrt + sqroot + spzeros + sprintf + sprand + spones + SPLIT_f + split_edge + splin + spget + speye + specfact + spec + spcompack + spchol + sparse + spantwo + spanplus + spaninter + sp2adj + sound + sort + SOM_f + solve + %sn + smooth + sm2ss + sm2des + slash + size + sinm + sinhm + sinh + sincd + sinc + SINBLK_f + sin + simp_mode + simp + signm + sign + showprofile + show_nodes + show_graph + show_arcs + shortest_path + sgrid + Sgrayplot + Sfgrayplot + sfact + setscicosvars + setmenu + setfield + setbpt + set + sensi + SendMsg + semidef + semicolumn + semi + SELECT_f + secto3d + sd2sci + SCOPXY_f + SCOPE_f + scilink + ScilabEval + scilab + scifunc_block + scicos_model + scicos_menus + scicos_main + scicos_link + scicosim + scicos_graphics + scicos_cpr + scicos_block + scicos + sciargs + sci2map + sci2for + sci2exp + schur + scanf_conversion + scanf + scaling + SAWTOOTH_f + savewave + save_graph + save + SAT_f + SAMPLEHOLD_f + salesman + rtitr + rref + rpem + rowshuff + rowregul + rowinout + rowcompr + rowcomp + routh_t + round + rotate + roots + rlist + ric_desc + riccati + ricc + RFILE_f + residu + replot + repfreq + remezb + remez + RELAY_f + reglin + REGISTER_f + recur + real + readmps + READC_f + readc_ + readb + read4b + read + rdivf + rcond + rational + rat + rank + range + randpencil + RAND_f + rand + quote + quit + quaskro + quapro + QUANT_f + qr + qassign + pwd + pvm_tidtohost + pvm_start + pvm_spawn_independent + pvm_spawn + pvm_set_timer + pvm_send + pvm_sci2f77 + pvm_reduce + pvm_recv + pvm_probe + pvm_mytid + pvm_lvgroup + pvm_kill + pvm_joingroup + pvm_halt + pvm_gsize + pvm_get_timer + pvm_getinst + pvm_exit + pvm_error + pvm_delhosts + pvmd3 + pvm_config + pvm_bufinfo + pvm_bcast + pvm_addhosts + pvm + pspect + psmall + projspec + projsl + proj + profile + PROD_f + prod + printing + printf_conversion + printf + print + predef + predecessors + prbs_a + ppol + power + POWBLK_f + POSTONEG_f + portrait + portr3d + poly + polfact + polarplot + polar + pol2tex + pol2str + pol2des + pmodulo + p_margin + plzr + plus + plotprofile + plot_graph + plotframe + plot3d3 + plot3d2 + plot3d1 + plot3d + plot2d4 + plot2d3 + plot2d2 + plot2d1 + plot2d + plot + playsnd + pipe_network + pinv + phc + phasemag + pfss + pertrans + perfect_match + percent + penlaur + pencan + pen2ea + pdiv + pbig + path_2_nodes + part + parrot + parents + paramfplot2d + param3d1 + param3d + overloading + OUT_f + orth + or + optim + ones + oldsave + oldload + ode_root + odeoptions + ode_discrete + odedi + odedc + ode + obsvss + obsv_mat + obs_gram + observer + obscont1 + obscont + nyquist + numer + null + not + norm + noisegen + nodes_degrees + nodes_2_path + node_number + nnz + nlev + nf3d + newfun + newest + netwindows + netwindow + netclose + neighbors + nehari + NEGTOPOS_f + narsimul + names + MUX_f + mulf + mu2lin + mtlb_sparse + mtlb_save + mtlb_mode + mtlb_load + mtell + msscanf + msprintf + mseek + mscanf + mrfit + mputstr + mputl + mput + mps2linpro + mprintf + mopen + modulo + mode + mlist + min_weight_tree + minus + minss + minreal + min_qcost_flow + min_lcost_flow2 + min_lcost_flow1 + min_lcost_cflow + mini + MIN_f + mine + min + milk_drop + mgetstr + mgetl + mgeti + mget + mfscanf + mfprintf + mfile2sci + mfft + MFCLCK_f + metanet_sync + metanet + mesh2d + mese + meof + median + mean + mclose + MCLOCK_f + mclearerr + m_circle + maxi + max_flow + MAX_f + max_clique + max_cap_path + max + matrix + matrices + Matplot1 + Matplot + mat_2_graph + markp2ss + mapsound + manedit + man + make_graph + macrovar + macro + macr2lst + macglov + lyap + lusolve + luget + lufact + ludel + lu + ltitr + lstcat + lsslist + lqr + lqg_ltr + lqg2stan + lqg + lqe + lotest + LOOKUP_f + logspace + logm + LOGBLK_f + log2 + log10 + log + locate + loadwave + load_graph + load + lmitool + lmisolver + list + linspace + linsolve + linpro + link + linfn + linf + lines + line_graph + lindquist + lin2mu + lin + lib + lgfft + lft + lex_sort + levin + lev + less + leqr + length + legends + left + leastsq + ldivf + ldiv + lcmdiag + lcm + lcf + lattp + lattn + lasterror + kroneck + kron + krac2 + kpure + knapsack + keyboard + kernel + karmarkar + kalm + %k + jmat + isreal + isoview + isnan + isinf + isglobal + iserror + isdef + is_connex + invsyslin + invr + inv_coeff + INVBLK_f + inv + inttype + inttrap + intsplin + INTRPLBLK_f + INTRP2BLK_f + intppty + intl + intg + intersect + intersci + interpln + interp + integrate + INTEGRAL_f + intdec + intc + int8 + int3d + int32 + int2d + int16 + int + insertion + input + IN_f + imrep2ss + impl + im_inv + imag + ilib_gen_Make + ilib_gen_loader + ilib_gen_gateway + ilib_for_link + ilib_compile + ilib_build + iirlp + iirgroup + iir + IFTHEL_f + ieee + iconvert + hypermatrices + hypermat + htrianr + hrmt + householder + hotcolormap + host + horner + h_norm + histplot + hist3d + h_inf_st + h_inf + hilb + hex2dec + hess + hermit + %helps + help + h_cl + havewindow + hat + hankelsv + hank + hamilton + HALT_f + halt + h2norm + gtild + gstacksize + gspec + gsort + gschur + group + gr_menu + grep + graypolarplot + grayplot + graycolormap + graph_union + graph_sum + graph_simp + graph_power + graph-list + Graphics + graph_diameter + graph_complement + graph_center + graph_2_mat + grand + graduate + gpeche + g_margin + G_make + global + glist + glever + givens + girth + gfrancis + gfare + getversion + getvalue + getsymbol + getscicosvars + getpid + GetMsg + getmark + getlinestyle + getio + get_function_path + getfont + getfield + getf + getenv + getdate + getd + getcwd + getcolor + getblocklabel + get + geom3d + GENSQR_f + GENSIN_f + gen_net + genmarkov + genlib + genfac3d + GENERIC_f + GENERAL_f + gcf + gcd + gcare + gammaln + gamma + gamitg + gainplot + GAIN_f + GAINBLK_f + fusee + funptr + funcprot + fun2string + fullrfk + fullrf + full + fstair + fstabst + fspecg + fsolve + fsfirlin + fscanfMat + fscanf + frmag + frfit + frexp + freson + freq + frep2tf + fprintfMat + fprintf + fplot3d1 + fplot3d + fplot2d + fourplan + fort + formatman + format + flts + floor + fix + fit_dat + find_path + findobj + findm + find_freq + find + filter + fileinfo + file + figure + fgrayplot + fft + ffilt + feval + feedback + fec + fcontour2d + fcontour + fchamp + faurre + factors + fac3d + eye + extraction + external + expm + EXPBLK_f + exp + exit + exists + execstr + ExecScilab + ExeclScilab + ExecAppli + exec + excel2sci + Example + EVTGEN_f + EVTDLY_f + evstr + EVENTSCOPE_f + evans + eval3dp + eval3d + eval + error + errclear + errcatch + errbar + erfcx + erfc + erf + ereduc + equil1 + equil + equal + eqiir + eqfir + emptystr + empty + ell1mag + eigenmarkov + edit_curv + edit + edge_number + dtsi + dt_ility + dsimul + dscr + driver + drawaxis + dragrect + double + dot + DLSS_f + DLR_f + DLRADAPT_f + dlgamma + dispfile + dispbpt + disp + diophant + diary + diag + dhnorm + dft + detr + determ + det + DestroyLink + des2tf + des2ss + derivative- + derivat + denom + DEMUX_f + demos + delmenu + delip + delete_nodes + delete_arcs + delbpt + DELAYV_f + DELAY_f + degree + deff + dec2hex + debug + ddp + dcf + dbphi + date + datafit + dassl + dasrt + czt + cycle_basis + CURV_f + curblock + cumsum + cumprod + ctr_gram + cspect + csim + CreateLink + cothm + coth + cotg + cosm + coshm + cosh + COSBLK_f + cos + corr + copfac + convstr + convol + convex_hull + contrss + contract_edge + contr + contourf + contour2di + contour2d + contour + cont_mat + cont_frm + CONST_f + con_nodes + connex + conj + cond + companion + comp + Communications + colregul + colormap + colon + colnew + colinout + colcompr + colcomp + coffg + coff + coeff + code2str + cmndred + cmb_lin + CLSS_f + cls2dls + CLR_f + close + CLOCK_f + CLKSPLIT_f + CLKSOMV_f + CLKSOM_f + CLKOUTV_f + CLKOUT_f + CLKINV_f + CLKIN_f + c_link + CLINDUMMY_f + clearglobal + clearfun + clear + clean + classmarkov + circuit + chsolve + chol + chfact + chepol + check_graph + cheb2mag + cheb1mag + chdir + chart + champ1 + champ + chaintest + chain_struct + cepstrum + ceil + cdft + cdfpoi + cdfnor + cdfnbn + cdfgam + cdffnc + cdff + cdfchn + cdfchi + cdfbin + cdfbet + ccontrg + casc + canon + call + calfrq + calerf + cainv + bvode + buttmag + bstap + boucle + boolean + bool2s + bode + bloc2ss + bloc2exp + black + binomial + bilin + BIGSOM_f + bifish + bezout + best_match + bessely + besselk + besselj + besseli + bdiag + bandwr + balreal + balanc + backslash + auwrite + auread + augment + atanm + atanhm + atanh + atan + %asn + asinm + asinhm + asinh + asin + ascii + articul + artest + arsimul + armax1 + armax + armac + arma2p + arma + arl2 + arhnk + argn + arc_number + arc_graph + apropos + ans + ANIMXY_f + ANDLOG_f + and + analyze + analpf + amell + alufunctions + AFFICH_f + aff2ab + adj_lists + adj2sp + add_node + addmenu + addinter + addf + add_edge + addcolor + AdCommunications + acosm + acoshm + acosh + acos + ABSBLK_f + abs + abinv + abcd + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/scss.xml b/src/data/extra/syntax-highlighting/syntax/scss.xml new file mode 100644 index 00000000..5fca2757 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/scss.xml @@ -0,0 +1,1038 @@ + + + + +]> + + + + + + + + properties##CSS + + + + adjust + after + align-all + align + align-last + alternates + anchor + area + areas + attachment + auto-columns + auto-flow + auto-rows + baseline + basis + before + bidi + blend-mode + block-color + block-end-color + block-end + block-end-style + block-end-width + block + block-start-color + block-start + block-start-style + block-start-width + block-style + block-width + border-mode + border-outset + border-repeat + border-slice + border-source + bottom-color + bottom-left-radius + bottom-right-radius + bottom-style + bottom-width + boundary + box + break + caps + cells + change + character + chars + collapse + column-end + column + column-start + combine-upright + composite + count + decoration-break + decoration-color + decoration + decoration-line + decoration-skip-ink + decoration-skip + decoration-style + decoration-width + defer + delay + distance + down + duration + during + east-asian + emoji + emphasis-color + emphasis + emphasis-position + emphasis-skip + emphasis-style + end-color + end + end-style + end-width + events + family + feature-settings + fill-mode + filters + fit + flow + fragment + from + function + grow + gutter + header + height-step + image + image-outset + image-repeat + image-slice + image-source + image-threshold + image-transform + image-width + increment + indent + inline-color + inline-end-color + inline-end + inline-end-style + inline-end-width + inline + inline-start-color + inline-start + inline-start-style + inline-start-width + inline-style + inline-width + insert + inside + interpolation-filters + into + items + iteration-count + justify + kerning + knockout-left + knockout-right + label + language-override + last + layout + left-color + left-radius + left-style + left-width + letter-align + letter + letter-wrap + level + ligatures + limit-chars + limit-last + limit-lines + limit-zone + line + lines + loop + max-size + merge + mid + min-size + mode + name + numeral + numeric + optical-sizing + orientation + orientation-vertical + origin + outset + outside + override + palette + path + pattern + play-state + point + policy + property + punctuation + radius + range + rate + reference + rendering + repeat + reset + resolution + right-color + right-radius + right-style + right-width + rotate + round + row-end + row + rows + row-start + rule-color + rule + rule-style + rule-width + segment + select + self + set + settings + shadow + shape + shift + shrink + side + size-adjust + sizing + skip-ink + skip + slice + snap + source + space-collapse + space + space-trim + spacing + span + speed + start-color + start + start-style + start-width + state + step-align + step-insert + step + step-round + step-size + stretch + style-image + style + style-position + style-type + synthesis + template-areas + template-columns + template + template-rows + threshold + through + timing-function + top-color + top-left-radius + top-right-radius + top-style + top-width + trim + type + underline-offset + underline-position + up + upright + variant-alternates + variant-caps + variant-east-asian + variant-emoji + variant + variant-ligatures + variant-numeric + variant-position + variation-settings + vertical + weight + wrap + x + y + zone + + + + true + false + null + + + + value keywords##CSS + + + + values##CSS + + + + colors##CSS + + + + functions##CSS + + + red + green + blue + mix + hue + saturation + lightness + adjust-hue + lighten + darken + saturate + desaturate + grayscale + complement + invert + alpha + opacify + transparentize + adjust-color + scale-color + change-color + ie-hex-str + unquote + quote + str-length + str-insert + str-index + str-slice + to-upper-case + to-lower-case + percentage + round + ceil + floor + abs + min + max + random + length + nth + set-nth + join + append + zip + index + list-separator + is-bracketed + map-get + map-merge + map-remove + map-keys + map-values + map-has-key + keywords + selector-nest + selector-append + selector-extend + selector-replace + selector-unify + is-superselector + simple-selectors + selector-parse + feature-exists + variable-exists + global-variable-exists + function-exists + mixin-exists + content-exists + inspect + type-of + unit + unitless + comparable + call + get-function + if + unique-id + + + + medias##CSS + + + + + pseudoelements##CSS + + + + + pseudoclasses##CSS + + + + pseudoclass-selector##CSS + + + + pseudoclasses-@page##CSS + + + + at-rules##CSS + + + @debug + @warn + @error + @content + @return + + + + nested at-rules##CSS + + + @at-rule + @for + @each + @while + + + + + + @include + + + + @extend + + + + @if + + + + @else + + + + @mixin + @function + + + + @viewport + + + + within-@viewport##CSS + + + + @page + + + + within-@page##CSS + + + + @font-face + + + + within-@font-face##CSS + + + + @keyframes + + + + within-@keyframes##CSS + + + + media operators##CSS + + + + and + or + not + + + + important + default + global + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/sed.xml b/src/data/extra/syntax-highlighting/syntax/sed.xml new file mode 100644 index 00000000..10e4b8c1 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/sed.xml @@ -0,0 +1,267 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/selinux-cil.xml b/src/data/extra/syntax-highlighting/syntax/selinux-cil.xml new file mode 100644 index 00000000..c69ceb42 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/selinux-cil.xml @@ -0,0 +1,685 @@ + + + + + + + +]> + + + + + + + + + and + or + xor + not + all + eq + ne + neq + dom + domby + incomp + range + + + + + allow + auditallow + dontaudit + neverallow + auditdeny + allowx + auditallowx + dontauditx + neverallowx + + + + true + false + + + + file + dir + char + block + socket + pipe + symlink + any + + + task + trans + xattr + + + tcp + udp + dccp + sctp + + + + self + + + unordered + + + allow + deny + reject + + + + block + optional + common + class + classmap + classmapping + sid + user + role + roleattribute + type + classpermission + typeattribute + typealias + tunable + sensitivity + sensitivityalias + category + categoryalias + categoryset + level + levelrange + context + ipaddr + macro + boolean + + + + policycap + mls + handleunknown + + + + blockabstract + blockinherit + in + call + + + defaultuser + defaultrole + defaulttype + defaultrange + + + userrole + userattribute + userattributeset + userlevel + userrange + userbounds + userprefix + selinuxuser + selinuxuserdefault + + + roletype + roleattributeset + roleallow + roletransition + rolebounds + + + typealiasactual + typeattributeset + typebounds + typechange + typemember + typetransition + typepermissive + attributetype + + expandtypeattribute + nametypetransition + + + classcommon + classorder + permission + permissionset + classpermissionset + permissionx + + + booleanif + tunableif + + + constrain + validatetrans + mlsconstrain + mlsvalidatetrans + + + sensitivityaliasactual + sensitivityorder + categoryaliasactual + categoryorder + sensitivitycategory + rangetransition + categoryrange + + + + sidorder + sidcontext + + + filecon + fsuse + genfscon + fscon + fsusexattr + fsusetask + fsusetrans + + + netifcon + nodecon + portcon + + + + iomemcon + ioportcon + pcidevicecon + pirqcon + devicetreecon + + + ibpkeycon + ibendportcon + + + dominance + allowxperm + auditallowxperm + dontauditxperm + neverallowxperm + + + + string + name + ioctl + + + + source + target + low + high + low-high + + perm + object_r + t1 + t2 + t3 + r1 + r2 + r3 + u1 + u2 + u3 + l1 + l2 + h1 + h2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/selinux-fc.xml b/src/data/extra/syntax-highlighting/syntax/selinux-fc.xml new file mode 100644 index 00000000..bfb543fe --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/selinux-fc.xml @@ -0,0 +1,300 @@ + + + + + + + +]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/selinux.xml b/src/data/extra/syntax-highlighting/syntax/selinux.xml new file mode 100644 index 00000000..cb396d13 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/selinux.xml @@ -0,0 +1,1627 @@ + + + + + + + + + + + + + + +]> + + + + + + + + + SELF + self + + + FALSE + false + TRUE + true + + + + + ALLOW + allow + NEVERALLOW + neverallow + AUDITALLOW + auditallow + AUDITDENY + auditdeny + DONTAUDIT + dontaudit + ALLOWXPERM + allowxperm + AUDITALLOWXPERM + auditallowxperm + DONTAUDITXPERM + dontauditxperm + NEVERALLOWXPERM + neverallowxperm + + + ATTRIBUTE + attribute + ATTRIBUTE_ROLE + attribute_role + BOOL + bool + CATEGORY + category + COMMON + common + DOMINANCE + dominance + EXPANDATTRIBUTE + expandattribute + MODULE + module + PERMISSIVE + permissive + ROLE + role + ROLEATTRIBUTE + roleattribute + SENSITIVITY + sensitivity + TUNABLE + tunable + TYPE + type + TYPEALIAS + typealias + TYPEATTRIBUTE + typeattribute + TYPEBOUNDS + typebounds + USER + user + + IF + if + ELSE + else + require + REQUIRE + optional + OPTIONAL + + + DEVICETREECON + devicetreecon + FS_USE_TASK + fs_use_task + FS_USE_TRANS + fs_use_trans + FS_USE_XATTR + fs_use_xattr + FSCON + fscon + GENFSCON + genfscon + IBENDPORTCON + ibendportcon + IBPKEYCON + ibpkeycon + IOMEMCON + iomemcon + IOPORTCON + ioportcon + NETIFCON + netifcon + NODECON + nodecon + PCIDEVICECON + pcidevicecon + PIRQCON + pirqcon + PORTCON + portcon + SID + sid + + + CLASS + class + + + LEVEL + level + + + + POLICYCAP + policycap + + + TYPE_CHANGE + type_change + TYPE_MEMBER + type_member + TYPE_TRANSITION + type_transition + + + ROLE_TRANSITION + role_transition + + + RANGE_TRANSITION + range_transition + + + DEFAULT_USER + default_user + DEFAULT_ROLE + default_role + DEFAULT_TYPE + default_type + + + DEFAULT_RANGE + default_range + + + CONSTRAIN + constrain + VALIDATETRANS + validatetrans + MLSCONSTRAIN + mlsconstrain + MLSVALIDATETRANS + mlsvalidatetrans + + + + + ALIAS + alias + CLONE + clone + INHERITS + inherits + ROLES + roles + TYPES + types + + + RANGE + range + + + + SOURCE + source + TARGET + target + + + SAMEUSER + sameuser + + + low-high + LOW-HIGH + high + HIGH + low + LOW + + + + OR + or + AND + and + NOT + not + xor + XOR + eq + EQ + + + eq + EQ + dom + DOM + domby + DOMBY + INCOMP + incomp + + + r1 + R1 + r2 + R2 + r3 + R3 + u1 + U1 + u2 + U2 + u3 + U3 + t1 + T1 + t2 + T2 + t3 + T3 + l1 + L1 + l2 + L2 + h1 + H1 + h2 + H2 + + + + + always_check_network + always_use_network + cgroup_seclabel + extended_socket_class + network_peer_controls + nnp_nosuid_transition + open_perms + redhat1 + + + + + accept + acceptfrom + access + acquire_svc + add + add_child + add_color + add_glyph + add_name + admin + append + associate + attach_queue + audit_access + audit_control + audit_read + audit_write + bell + bind + blend + block_suspend + call + check_context + chfn + chown + chsh + compute_av + compute_create + compute_member + compute_relabel + compute_user + connect + connectto + contains + copy + create + create_files_as + crontab + dac_override + dac_read_search + dccp_recv + dccp_send + debug + delete + destroy + disable + drop + dyntransition + egress + enable + enforce_dest + enqueue + entrypoint + execheap + execmem + execmod + execstack + execute + execute_no_trans + expand + export + force_cursor + fork + forward_in + forward_out + fowner + freeze + fsetid + get_property + get_value + getattr + getcap + getfocus + getgrp + gethost + getopt + getpgid + getpwd + getrlimit + getsched + getserv + getsession + getstat + grab + halt + hide + hide_cursor + impersonate + implement + import + ingress + insert + install + install_module + ioctl + ipc_info + ipc_lock + ipc_owner + kill + lease + link + linux_immutable + list_child + list_property + listen + load_module + load_policy + lock + mac_admin + mac_override + manage + manage_subnet + map + map_create + map_read + map_write + mknod + mmap_zero + module_load + module_request + mount + mounton + name_bind + name_connect + net_admin + net_bind_service + net_broadcast + net_raw + newconn + next_value + nlmsg_read + nlmsg_readpriv + nlmsg_relay + nlmsg_tty_audit + nlmsg_write + nnp_transition + noatsecure + node_bind + nosuid_transition + open + override + passwd + paste + paste_after_confirm + polmatch + prog_load + prog_run + ptrace + query + quotaget + quotamod + quotaon + rawip_recv + rawip_send + read + read_policy + reboot + receive + record + recv + recv_msg + recvfrom + relabelfrom + relabelto + reload + remount + remove + remove_child + remove_color + remove_glyph + remove_name + rename + reparent + rlimitinh + rmdir + rootok + saver_getattr + saver_hide + saver_setattr + saver_show + search + select + send + send_msg + sendto + set_context_mgr + set_property + set_value + setattr + setbool + setcap + setcheckreqprot + setcontext + setcurrent + setenforce + setexec + setfcap + setfocus + setfscreate + setgid + setkeycreate + setopt + setpcap + setpgid + setrlimit + setsched + setsecparam + setsockcreate + setuid + share + shmemgrp + shmemhost + shmempwd + shmemserv + show + show_cursor + shutdown + sigchld + siginh + sigkill + signal + signull + sigstop + start + status + stop + swapon + sys_admin + sys_boot + sys_chroot + sys_module + sys_nice + sys_pacct + sys_ptrace + sys_rawio + sys_resource + sys_time + sys_tty_config + syslog + syslog_console + syslog_mod + syslog_read + tcp_recv + tcp_send + transfer + transition + translate + udp_recv + udp_send + uninstall + unix_read + unix_write + unlink + unmount + update + use + use_as_override + validate_trans + view + wake_alarm + write + + + + + + add_auth + clear_uid + closeDecryptSession + consumeRights + decrypt + duplicate + exist + finalizeDecryptUnit + find + gen_unique_id + get + get_state + grant + initializeDecryptUnit + is_empty + list + openDecryptSession + password + pread + reset + set + setPlaybackStatus + sign + unlock + user_changed + verify + + + + + + ecryptfs + cryfs + encfs + overlayfs + unionfs + + devtmpfs + ramfs + tmpfs + + adfs + affs + afs + apfs + apparmorfs + autofs + bdev + bfs + bpf + btrfs + cachefs + ceph + cgroup2 + cgroup + cifs + coda + coherent + configfs + cpuset + cramfs + debugfs + devfs + devpts + efs + exfat + ext2 + ext3 + ext4 + f2fs + fatx + fuse + fuseblk + fusectl + futexfs + gfs + hfs + hfsplus + hpfs + hugetlbfs + ifs + iso9660 + jffs2 + jffs + jfs + kernfs + lvm2 + minix + mqueue + msdos + ncpfs + nfs4 + nfs + nilfs2 + nilfs + ntfs-3g + ntfs + ocfs + pipefs + proc + procfs + pstore + pstorefs + qnx4 + qnx6 + reiser4 + reiserfs + romfs + rootfs + sdcardfs + securityfs + selinuxfs + shm + smbfs + sockfs + specfs + squashfs + swap + swapfs + sysfs + sysv + tracefs + ubifs + udf + ufs + umsdos + urefs + usbfs + vfat + xenix + xfs + yaffs2 + yaffs + zfs + + + functionfs + inotifyfs + labeledfs + oemfs + + + + + policy_module + gen_require + template + interface + optional_policy + gen_tunable + tunable_policy + gen_user + gen_context + gen_bool + gen_cats + gen_sens + gen_levels + mls_systemlow + mls_systemhigh + mcs_systemlow + mcs_systemhigh + mcs_allcats + ifndef + + + + + __file__ + __line__ + __program__ + builtin + changecom + changequote + changeword + debugfile + debugmode + decr + define + defn + divert + divnum + dnl + dumpdef + errprint + esyscmd + eval + format + ifdef + ifelse + include + incr + index + indir + len + m4exit + m4wrap + maketemp + mkstemp + popdef + pushdef + shift + sinclude + substr + syscmd + sysval + traceon + traceoff + translit + undefine + undivert + m4___file__ + m4___line__ + m4___program__ + m4_builtin + m4_changecom + m4_changequote + m4_changeword + m4_debugfile + m4_debugmode + m4_decr + m4_define + m4_defn + m4_divert + m4_divnum + m4_dnl + m4_dumpdef + m4_errprint + m4_esyscmd + m4_eval + m4_format + m4_ifdef + m4_ifelse + m4_include + m4_incr + m4_index + m4_indir + m4_len + m4_m4exit + m4_m4wrap + m4_maketemp + m4_mkstemp + m4_popdef + m4_pushdef + m4_shift + m4_sinclude + m4_substr + m4_syscmd + m4_sysval + m4_traceon + m4_traceoff + m4_translit + m4_undefine + m4_undivert + + + regexp + patsubst + m4_regexp + m4_patsubst + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/sgml.xml b/src/data/extra/syntax-highlighting/syntax/sgml.xml new file mode 100644 index 00000000..87f2fe34 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/sgml.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/sieve.xml b/src/data/extra/syntax-highlighting/syntax/sieve.xml new file mode 100644 index 00000000..448766a7 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/sieve.xml @@ -0,0 +1,152 @@ + + + + + + + require + if + elsif + else + foreverypart + global + + + addflag + addheader + break + convert + debug_log + deleteheader + discard + enclose + ereject + error + extracttext + fileinto + include + keep + notify + redirect + reject + removeflag + replace + return + setflag + set + stop + vacation + + + address + allof + anyof + body + currentdate + date + duplicate + envelope + environment + exists + false + hasflag + header + ihave + mailboxexists + metadata + metadataexists + not + notify_method_capability + servermetadata + servermetadataexists + spamtest + size + string + true + valid_notify_method + virustest + + + :contains + :count + :is + :matches + :regex + :value + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/sisu.xml b/src/data/extra/syntax-highlighting/syntax/sisu.xml new file mode 100644 index 00000000..83768555 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/sisu.xml @@ -0,0 +1,154 @@ + + + + + + class + const + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/smali.xml b/src/data/extra/syntax-highlighting/syntax/smali.xml new file mode 100644 index 00000000..189e55f2 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/smali.xml @@ -0,0 +1,456 @@ + + + + + + + +]> + + + + nop + move + move/from16 + move/16 + move-wide + move-wide/from16 + move-wide/16 + move-object + move-object/from16 + move-object/16 + move-result + move-result-wide + move-result-object + move-exception + return-void + return + return-wide + return-object + const/4 + const/16 + const + const/high16 + const-wide/16 + const-wide/32 + const-wide + const-wide/high16 + const-string + const-string/jumbo + const-class + monitor-enter + monitor-exit + check-cast + instance-of + array-length + new-instance + new-array + filled-new-array + filled-new-array/range + fill-array-data + throw + goto + goto/16 + goto/32 + packed-switch + sparse-switch + cmpl-float + cmpg-float + cmpl-double + cmpg-double + cmp-long + if-eq + if-ne + if-lt + if-ge + if-gt + if-le + if-eqz + if-nez + if-ltz + if-gez + if-gtz + if-lez + aget + aget-wide + aget-object + aget-boolean + aget-byte + aget-char + aget-short + aput + aput-wide + aput-object + aput-boolean + aput-byte + aput-char + aput-short + iget + iget-wide + iget-object + iget-boolean + iget-byte + iget-char + iget-short + iput + iput-wide + iput-object + iput-boolean + iput-byte + iput-char + iput-short + sget + sget-wide + sget-object + sget-boolean + sget-byte + sget-char + sget-short + sput + sput-wide + sput-object + sput-boolean + sput-byte + sput-char + sput-short + invoke-virtual + invoke-super + invoke-direct + invoke-static + invoke-interface + invoke-virtual/range + invoke-super/range + invoke-direct/range + invoke-static/range + invoke-interface/range + neg-int + not-int + neg-long + not-long + neg-float + neg-double + int-to-long + int-to-float + int-to-double + long-to-int + long-to-float + long-to-double + float-to-int + float-to-long + float-to-double + double-to-int + double-to-long + double-to-float + int-to-byte + int-to-char + int-to-short + add-int + sub-int + mul-int + div-int + rem-int + and-int + or-int + xor-int + shl-int + shr-int + ushr-int + add-long + sub-long + mul-long + div-long + rem-long + and-long + or-long + xor-long + shl-long + shr-long + ushr-long + add-float + sub-float + mul-float + div-float + rem-float + add-double + sub-double + mul-double + div-double + rem-double + add-int/2addr + sub-int/2addr + mul-int/2addr + div-int/2addr + rem-int/2addr + and-int/2addr + or-int/2addr + xor-int/2addr + shl-int/2addr + shr-int/2addr + ushr-int/2addr + add-long/2addr + sub-long/2addr + mul-long/2addr + div-long/2addr + rem-long/2addr + and-long/2addr + or-long/2addr + xor-long/2addr + shl-long/2addr + shr-long/2addr + ushr-long/2addr + add-float/2addr + sub-float/2addr + mul-float/2addr + div-float/2addr + rem-float/2addr + add-double/2addr + sub-double/2addr + mul-double/2addr + div-double/2addr + rem-double/2addr + add-int/lit16 + rsub-int + mul-int/lit16 + div-int/lit16 + rem-int/lit16 + and-int/lit16 + or-int/lit16 + xor-int/lit16 + add-int/lit8 + rsub-int/lit8 + mul-int/lit8 + div-int/lit8 + rem-int/lit8 + and-int/lit8 + or-int/lit8 + xor-int/lit8 + shl-int/lit8 + shr-int/lit8 + ushr-int/lit8 + iget-volatile + iput-volatile + sget-volatile + sput-volatile + iget-object-volatile + iget-wide-volatile + iput-wide-volatile + sget-wide-volatile + sput-wide-volatile + sget-object-volatile + throw-verification-error + execute-inline + execute-inline/range + invoke-object-init/range + return-void-barrier + iget-quick + invoke-polymorphic + invoke-polymorphic/range + invoke-custom + invoke-custom/range + const-method-handle + const-method-type + + + + public + private + protected + static + final + synchronized + volatile + bridge + transient + varargs + native + interface + abstract + strictfp + synthetic + annotation + enum + constructor + declared-synchronized + + + build + runtime + system + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/sml.xml b/src/data/extra/syntax-highlighting/syntax/sml.xml new file mode 100644 index 00000000..7d63002e --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/sml.xml @@ -0,0 +1,104 @@ + + + + + + abstype + and + andalso + as + case + do + datatype + else + end + eqtype + exception + false + fn + fun + functor + handle + if + in + include + infix + infixr + let + local + nonfix + of + op + open + orelse + raise + rec + sharing + sig + signature + struct + structure + then + true + type + val + where + with + withtype + while + + + unit + int + real + char + string + substring + word + ref + array + vector + bool + list + option + order + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/spice.xml b/src/data/extra/syntax-highlighting/syntax/spice.xml new file mode 100644 index 00000000..b67763cd --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/spice.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/sql-mysql.xml b/src/data/extra/syntax-highlighting/syntax/sql-mysql.xml new file mode 100644 index 00000000..f37b706c --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/sql-mysql.xml @@ -0,0 +1,481 @@ + + + + + + + BEGIN + CASE + DO + ELSE + ELSEIF + END + FOR + IF + LOOP + RETURN + THEN + WHEN + WHILE + + + AND + BETWEEN + IN + IS + LIKE + NOT + OR + + + ACCESS + ADD + ALL + ALTER + ANALYZE + AS + ASC + AUTO_INCREMENT + BDB + BERKELEYDB + BOTH + BY + CASCADE + CHANGE + + CHARSET + COLUMN + COLUMNS + CONSTRAINT + CREATE + CROSS + CURRENT_DATE + CURRENT_TIME + CURRENT_TIMESTAMP + DATABASE + DATABASES + DAY_HOUR + DAY_MINUTE + DAY_SECOND + DEC + DECLARE + DEFAULT + DELAYED + DELETE + DESC + DESCRIBE + DISTINCT + DISTINCTROW + DROP + ENCLOSED + ESCAPED + EXISTS + EXPLAIN + FIELDS + FOREIGN + FROM + FULLTEXT + FUNCTION + GRANT + GROUP + HAVING + HIGH_PRIORITY + IGNORE + INDEX + INFILE + INNER + INNODB + INSERT + INTERVAL + INTO + JOIN + KEY + KEYS + KILL + LEADING + LEFT + LIMIT + LINES + LOAD + LOCK + LOW_PRIORITY + MASTER_SERVER_ID + MATCH + MRG_MYISAM + NATIONAL + NATURAL + NULL + NUMERIC + ON + OPTIMIZE + OPTION + OPTIONALLY + ORDER + OUTER + OUTFILE + PARTIAL + PRECISION + PRIMARY + PRIVILEGES + PROCEDURE + PURGE + READ + REFERENCES + REGEXP + RENAME + REPLACE + REQUIRE + RESTRICT + RETURNS + REVOKE + RIGHT + RLIKE + SELECT + SET + SHOW + SONAME + SQL_BIG_RESULT + SQL_CALC_FOUND_ROWS + SQL_SMALL_RESULT + SSL + STARTING + STRAIGHT_JOIN + STRIPED + TABLE + TABLES + TERMINATED + TO + TRAILING + TRUNCATE + TYPE + UNION + UNIQUE + UNLOCK + UNSIGNED + UPDATE + USAGE + USE + USER_RESOURCES + USING + VALUES + VARYING + WITH + WHERE + WRITE + XOR + YEAR_MONTH + ZEROFILL + + + + ASCII + BIN + BIT_LENGTH + CHAR + CHARACTER_LENGTH + CHAR_LENGTH + COALESCE + CONCAT + CONCAT_WS + CONV + ELT + EXPORT_SET + FIELD + FIND_IN_SET + HEX + INSERT + INSTR + LCASE + LEFT + LENGTH + LOAD_FILE + LOCATE + LOWER + LPAD + LTRIM + MAKE_SET + MID + OCT + OCTET_LENGTH + ORD + POSITION + QUOTE + REPEAT + REPLACE + REVERSE + RIGHT + RPAD + RTRIM + SOUNDEX + SPACE + SUBSTRING + SUBSTRING_INDEX + TRIM + UCASE + UPPER + + ABS + ACOS + ASIN + ATAN + ATAN2 + CEILING + COS + COT + DEGREES + EXP + FLOOR + GREATEST + LEAST + LN + LOG + LOG10 + LOG2 + MOD + PI + POW + POWER + RADIANS + RAND + ROUND + SIGN + SIN + SQRT + TAN + + ADDDATE + CURDATE + CURRENT_DATE + CURRENT_TIME + CURRENT_TIMESTAMP + CURTIME + DATE_ADD + DATE_FORMAT + DATE_SUB + DAYNAME + DAYOFMONTH + DAYOFWEEK + DAYOFYEAR + EXTRACT + FROM_DAYS + FROM_UNIXTIME + HOUR + MINUTE + MONTH + MONTHNAME + NOW + PERIOD_ADD + PERIOD_DIFF + QUARTER + SECOND + SEC_TO_TIME + SUBDATE + SYSDATE + TIME_FORMAT + TIME_TO_SEC + TO_DAYS + UNIX_TIMESTAMP + WEEK + WEEKDAY + YEAR + YEARWEEK + + CAST + CONVERT + + AES_DECRYPT + AES_ENCRYPT + BENCHMARK + BIT_COUNT + CONNECTION_ID + DATABASE + DECODE + DES_DECRYPT + DES_ENCRYPT + ENCODE + ENCRYPT + FORMAT + FOUND_ROWS + GET_LOCK + INET_ATON + INET_NTOA + IS_FREE_LOCK + LAST_INSERT_ID + MASTER_POS_WAIT + MD5 + PASSWORD + RELEASE_LOCK + SESSION_USER + SHA + SHA1 + SYSTEM_USER + USER + VERSION + + AVG + BIT_AND + BIT_OR + COUNT + MAX + MIN + STD + STDDEV + SUM + + + + BINARY + BLOB + CHAR + CHARACTER + ENUM + LONGBLOB + LONGTEXT + MEDIUMBLOB + MEDIUMTEXT + TEXT + TINYBLOB + TINYTEXT + VARBINARY + VARCHAR + + + BIGINT + BIT + BOOL + BOOLEAN + DEC + DECIMAL + DOUBLE + FIXED + FLOAT + INT + INTEGER + LONG + MEDIUMINT + MIDDLEINT + NUMERIC + TINYINT + REAL + SERIAL + SMALLINT + + DATE + DATETIME + TIME + TIMESTAMP + YEAR + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/sql-oracle.xml b/src/data/extra/syntax-highlighting/syntax/sql-oracle.xml new file mode 100644 index 00000000..7bb32fc1 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/sql-oracle.xml @@ -0,0 +1,1954 @@ + + + + + + + BEGIN + CASE + ELSE + ELSIF + END + EXCEPTION + EXIT + LOOP + FOR + IF + RAISE + RETURN + RETURNING + THEN + WHEN + WHILE + + + AND + BETWEEN + IN + IS + LIKE + NOT + OR + + + ABORT + ACCEPT + ACCESS + ACCESSED + ACCOUNT + ACTIVATE + ADD + ADD_COLUMN + ADD_GROUP + ADJ_DATE + ADMIN + ADMINISTER + ADMINISTRATOR + ADVISE + ADVISOR + AFTER + ALIAS + ALL + ALLOCATE + ALLOW + ALL_ROWS + ALTER + ALWAYS + ANALYZE + ANCILLARY + AND_EQUAL + ANTIJOIN + ANY + ANYSCHEMA + APPEND + APPEND_VALUES + APPLY + ARCHIVE + ARCHIVELOG + ARRAY + AS + ASC + ASSEMBLY + ASSOCIATE + ASYNC + ASYNCHRONOUS + AT + ATTRIBUTE + ATTRIBUTES + AUDIT + AUTHENTICATED + AUTHENTICATION + AUTHID + AUTHORIZATION + AUTO + AUTOALLOCATE + AUTOEXTEND + AUTOMATIC + AVAILABILITY + BACKUP + BASIC + BASICFILE + BATCH + BECOME + BEFORE + BEGIN_OUTLINE_DATA + BEHALF + BIGFILE + BIND_AWARE + BINDING + BITAND + BITMAP + BITMAPS + BITMAP_TREE + BITS + BLOCK + BLOCK_RANGE + BLOCKS + BLOCKSIZE + BODY + BOTH + BOUND + BRANCH + BREADTH + BROADCAST + BUFFER + BUFFER_CACHE + BUFFER_POOL + BUILD + BULK + BY + BYPASS_RECURSIVE_CHECK + BYPASS_UJVC + BYTE + CACHE + CACHE_CB + CACHE_INSTANCES + CACHE_TEMP_TABLE + CALL + CANCEL + CASCADE + CATEGORY + CELL_FLASH_CACHE + CERTIFICATE + CFILE + CHAINED + CHANGE + CHANGE_DUPKEY_ERROR_INDEX + CHAR_CS + CHECK + CHECK_ACL_REWRITE + CHECKPOINT + CHILD + CHOOSE + CHUNK + CLASS + CLEAR + CLONE + CLOSE + CLOSE_CACHED_OPEN_CURSORS + CLUSTER + CLUSTERING_FACTOR + COALESCE_SQ + COARSE + CO_AUTH_IND + COLD + COLUMN + COLUMNAR + COLUMN_AUTH_INDICATOR + COLUMNS + COLUMN_STATS + COLUMN_VALUE + COMMENT + COMMIT + COMMITTED + COMPACT + COMPATIBILITY + COMPILE + COMPLETE + COMPLIANCE + COMPOSITE + COMPOSITE_LIMIT + COMPOUND + COMPRESS + COMPUTE + CONFIRM + CONFORMING + CONNECT + CONNECT_BY_CB_WHR_ONLY + CONNECT_BY_COMBINE_SW + CONNECT_BY_COST_BASED + CONNECT_BY_ELIM_DUPS + CONNECT_BY_FILTERING + CONNECT_BY_ISCYCLE + CONNECT_BY_ISLEAF + CONNECT_BY_ROOT + CONNECT_TIME + CONSIDER + CONSISTENT + CONST + CONSTANT + CONSTRAINT + CONSTRAINTS + CONTAINS + CONTAINER + CONTENT + CONTENTS + CONTEXT + CONTINUE + CONTROLFILE + CORRUPTION + CORRUPT_XID + CORRUPT_XID_ALL + COST + COST_XML_QUERY_REWRITE + CPU_COSTING + CPU_PER_CALL + CPU_PER_SESSION + CRASH + CREATE + CREATE_STORED_OUTLINES + CREATION + CROSS + CROSSEDITION + CSCONVERT + CUBE + CUBE_GB + CUME_DISTM + CURRENT + CURRENT_SCHEMA + CURRENT_TIME + CURRENT_USER + CURRENTV + CURSOR + CURSOR_SHARING_EXACT + CURSOR_SPECIFIC_SEGMENT + CYCLE + DANGLING + DATA + DATABASE + DATABASE_DEFAULT + DATAFILE + DATAFILES + DATAOBJNO + DATE + DATE_MODE + DAY + DBA + DBA_RECYCLEBIN + DBMS_STATS + DB_ROLE_CHANGE + DB_VERSION + DDL + DEALLOCATE + DEBUG + DEBUGGER + DEC + DECLARE + DECOMPOSE + DECR + DECREMENT + DECRYPT + DEDUPLICATE + DEFAULT + DEFAULTS + DEFERRABLE + DEFERRED + DEFINE + DEFINED + DEFINER + DEGREE + DELAY + DELETE + DEMAND + DENSE_RANK + DENSE_RANKM + DEPENDENT + DEQUEUE + DEREF_NO_REWRITE + DESC + DETACHED + DETERMINES + DICTIONARY + DIMENSION + DIRECT_LOAD + DIRECTORY + DISABLE + DISABLE_PRESET + DISABLE_RPKE + DISALLOW + DISASSOCIATE + DISCONNECT + DISK + DISKGROUP + DISKS + DISMOUNT + DISTINCT + DISTINGUISHED + DISTRIBUTED + DML + DML_UPDATE + DOCFIDELITY + DOCUMENT + DOMAIN_INDEX_FILTER + DOMAIN_INDEX_NO_SORT + DOMAIN_INDEX_SORT + DOUBLE + DOWNGRADE + DRIVING_SITE + DROP + DROP_COLUMN + DROP_GROUP + DST_UPGRADE_INSERT_CONV + DYNAMIC + DYNAMIC_SAMPLING + DYNAMIC_SAMPLING_EST_CDN + EACH + EDITION + EDITIONING + EDITIONS + ELEMENT + ELIMINATE_JOIN + ELIMINATE_OBY + ELIMINATE_OUTER_JOIN + EMPTY + ENABLE + ENABLE_PRESET + ENCODING + ENCRYPT + ENCRYPTION + END_OUTLINE_DATA + ENFORCE + ENFORCED + ENQUEUE + ENTERPRISE + ENTITYESCAPING + ENTRY + ERROR + ERROR_ARGUMENT + ERROR_ON_OVERLAP_TIME + ERRORS + ESCAPE + ESTIMATE + EVALNAME + EVALUATION + EVENTS + EVERY + EXCEPT + EXCEPTIONS + EXCHANGE + EXCLUDE + EXCLUDING + EXCLUSIVE + EXECUTE + EXEMPT + EXISTS + EXPAND_GSET_TO_UNION + EXPAND_TABLE + EXPIRE + EXPLAIN + EXPLOSION + EXPORT + EXPR_CORR_CHECK + EXTENDS + EXTENT + EXTENTS + EXTERNAL + EXTERNALLY + EXTRA + FACILITY + FACT + FACTORIZE_JOIN + FAILED + FAILED_LOGIN_ATTEMPTS + FAILGROUP + FALSE + FAST + FBTSCAN + FILE + FILESYSTEM_LIKE_LOGGING + FILTER + FINAL + FINE + FINISH + FIRST + FIRSTM + FIRST_ROWS + FLAGGER + FLASHBACK + FLASH_CACHE + FLOAT + FLOB + FLUSH + FOLDER + FOLLOWING + FOLLOWS + FORCE + FORCE_XML_QUERY_REWRITE + FOREIGN + FOREVER + FORWARD + FREELIST + FREELISTS + FREEPOOLS + FRESH + FROM + FULL + FUNCTION + FUNCTIONS + GATHER_PLAN_STATISTICS + GBY_CONC_ROLLUP + GBY_PUSHDOWN + GENERATED + GLOBAL + GLOBALLY + GLOBAL_NAME + GLOBAL_TOPIC_ENABLED + GRANT + GROUP + GROUP_BY + GROUPS + GUARANTEE + GUARANTEED + GUARD + HASH + HASH_AJ + HASHKEYS + HASH_SJ + HAVING + HEADER + HEAP + HELP + HEXTOREF + HIDDEN + HIDE + HIERARCHY + HIGH + HINTSET_BEGIN + HINTSET_END + HOT + HOUR + HWM_BROKERED + HYBRID + ID + IDENTIFIED + IDENTIFIER + IDENTITY + IDGENERATORS + IDLE_TIME + IGNORE + IGNORE_OPTIM_EMBEDDED_HINTS + IGNORE_ROW_ON_DUPKEY_INDEX + IGNORE_WHERE_CLAUSE + IMMEDIATE + IMPACT + IMPORT + INCLUDE + INCLUDE_VERSION + INCLUDING + INCR + INCREMENT + INCREMENTAL + INDENT + INDEX + INDEX_ASC + INDEX_COMBINE + INDEX_DESC + INDEXED + INDEXES + INDEX_FFS + INDEX_FILTER + INDEX_JOIN + INDEX_ROWS + INDEX_RRS + INDEX_RS + INDEX_RS_ASC + INDEX_RS_DESC + INDEX_SCAN + INDEX_SKIP_SCAN + INDEX_SS + INDEX_SS_ASC + INDEX_SS_DESC + INDEX_STATS + INDEXTYPE + INDEXTYPES + INDICATOR + INFINITE + INFORMATIONAL + INITIAL + INITIALIZED + INITIALLY + INITRANS + INLINE + INLINE_XMLTYPE_NT + IN_MEMORY_METADATA + INNER + INSERT + INSTANCE + INSTANCES + INSTANTIABLE + INSTANTLY + INSTEAD + INTERMEDIATE + INTERNAL_CONVERT + INTERNAL_USE + INTERPRETED + INTERSECT + INTO + INVALIDATE + INVISIBLE + IN_XQUERY + ISOLATION + ISOLATION_LEVEL + ITERATE + JAVA + JOB + JOIN + KEEP + KEEP_DUPLICATES + KERBEROS + KEY + KEY_LENGTH + KEYS + KEYSIZE + KILL + LATERAL + LAYER + LDAP_REGISTRATION + LDAP_REGISTRATION_ENABLED + LDAP_REG_SYNC_INTERVAL + LEADING + LEFT + LESS + LEVEL + LEVELS + LIBRARY + LIFE + LIFETIME + LIKEC + LIKE_EXPAND + LIKE2 + LIKE4 + LIMIT + LINK + LIST + LOB + LOBNVL + LOBS + LOCAL + LOCAL_INDEXES + LOCALTIME + LOCATION + LOCATOR + LOCK + LOCKED + LOGFILE + LOGFILES + LOGGING + LOGICAL + LOGICAL_READS_PER_CALL + LOGICAL_READS_PER_SESSION + LOGOFF + LOGON + LONG + LOW + MAIN + MANAGE + MANAGED + MANAGEMENT + MANUAL + MAPPING + MASTER + MATCHED + MATERIALIZE + MATERIALIZED + MAXARCHLOGS + MAXDATAFILES + MAXEXTENTS + MAXIMIZE + MAXINSTANCES + MAXLOGFILES + MAXLOGHISTORY + MAXLOGMEMBERS + MAXSIZE + MAXTRANS + MAXVALUE + MEASURE + MEASURES + MEDIUM + MEMBER + MEMORY + MERGE + MERGE$ACTIONS + MERGE_AJ + MERGE_CONST_ON + MERGE_SJ + METHOD + MIGRATE + MIGRATION + MINEXTENTS + MINIMIZE + MINIMUM + MINING + MINUS + MINUS_NULL + MINUTE + MINVALUE + MIRROR + MIRRORCOLD + MIRRORHOT + MLSLABEL + MODE + MODEL + MODEL_COMPILE_SUBQUERY + MODEL_DONTVERIFY_UNIQUENESS + MODEL_DYNAMIC_SUBQUERY + MODEL_MIN_ANALYSIS + MODEL_NO_ANALYSIS + MODEL_PBY + MODEL_PUSH_REF + MODIFY + MONITOR + MONITORING + MONTH + MOUNT + MOUNTPATH + MOVE + MOVEMENT + MULTISET + MV_MERGE + NAME + NAMED + NAMESPACE + NAN + NATIONAL + NATIVE + NATIVE_FULL_OUTER_JOIN + NATURAL + NAV + NEEDED + NESTED + NESTED_TABLE_FAST_INSERT + NESTED_TABLE_GET_REFS + NESTED_TABLE_ID + NESTED_TABLE_SET_REFS + NESTED_TABLE_SET_SETID + NETWORK + NEVER + NEW + NEW_TIME + NEXT + NEXT_DAY + NL_AJ + NLJ_BATCHING + NLJ_INDEX_FILTER + NLJ_INDEX_SCAN + NLJ_PREFETCH + NLS_CALENDAR + NLS_CHARACTERSET + NLS_COMP + NLS_CURRENCY + NLS_DATE_FORMAT + NLS_DATE_LANGUAGE + NLS_ISO_CURRENCY + NL_SJ + NLS_LANG + NLS_LANGUAGE + NLS_LENGTH_SEMANTICS + NLS_LOWER + NLS_NCHAR_CONV_EXCP + NLS_NUMERIC_CHARACTERS + NLS_SORT + NLS_SPECIAL_CHARS + NLS_TERRITORY + NLS_UPPER + NO + NO_ACCESS + NOAPPEND + NOARCHIVELOG + NOAUDIT + NO_BASETABLE_MULTIMV_REWRITE + NO_BIND_AWARE + NO_BUFFER + NOCACHE + NO_CARTESIAN + NO_CHECK_ACL_REWRITE + NO_COALESCE_SQ + NOCOMPRESS + NO_CONNECT_BY_CB_WHR_ONLY + NO_CONNECT_BY_COMBINE_SW + NO_CONNECT_BY_COST_BASED + NO_CONNECT_BY_ELIM_DUPS + NO_CONNECT_BY_FILTERING + NO_COST_XML_QUERY_REWRITE + NO_CPU_COSTING + NOCPU_COSTING + NOCYCLE + NODELAY + NO_DOMAIN_INDEX_FILTER + NO_DST_UPGRADE_INSERT_CONV + NO_ELIMINATE_JOIN + NO_ELIMINATE_OBY + NO_ELIMINATE_OUTER_JOIN + NOENTITYESCAPING + NO_EXPAND + NO_EXPAND_GSET_TO_UNION + NO_EXPAND_TABLE + NO_FACT + NO_FACTORIZE_JOIN + NO_FILTERING + NOFORCE + NO_GBY_PUSHDOWN + NOGUARANTEE + NO_INDEX + NO_INDEX_FFS + NO_INDEX_SS + NO_LOAD + NOLOCAL + NOLOGGING + NOMAPPING + NOMAXVALUE + NO_MERGE + NOMINIMIZE + NOMINVALUE + NO_MODEL_PUSH_REF + NO_MONITOR + NO_MONITORING + NOMONITORING + NO_MULTIMV_REWRITE + NO_NATIVE_FULL_OUTER_JOIN + NONE + NO_NLJ_BATCHING + NO_NLJ_PREFETCH + NONSCHEMA + NOORDER + NO_ORDER_ROLLUPS + NO_OUTER_JOIN_TO_INNER + NOOVERRIDE + NO_PARALLEL + NOPARALLEL + NO_PARALLEL_INDEX + NOPARALLEL_INDEX + NO_PARTIAL_COMMIT + NO_PLACE_DISTINCT + NO_PLACE_GROUP_BY + NO_PQ_MAP + NO_PRUNE_GSETS + NO_PULL_PRED + NO_PUSH_PRED + NO_PUSH_SUBQ + NO_PX_JOIN_FILTER + NO_QKN_BUFF + NO_QUERY_TRANSFORMATION + NO_REF_CASCADE + NORELY + NOREPAIR + NORESETLOGS + NO_RESULT_CACHE + NOREVERSE + NO_REWRITE + NOREWRITE + NORMAL + NOROWDEPENDENCIES + NOSCHEMACHECK + NOSEGMENT + NO_SEMIJOIN + NO_SET_TO_JOIN + NOSORT + NO_SQL_TUNE + NO_STAR_TRANSFORMATION + NO_STATEMENT_QUEUING + NO_STATS_GSETS + NOSTRICT + NO_SUBQUERY_PRUNING + NO_SUBSTRB_PAD + NO_SWAP_JOIN_INPUTS + NOSWITCH + NO_TEMP_TABLE + NOTHING + NOTIFICATION + NO_TRANSFORM_DISTINCT_AGG + NO_UNNEST + NO_USE_HASH + NO_USE_HASH_AGGREGATION + NO_USE_INVISIBLE_INDEXES + NO_USE_MERGE + NO_USE_NL + NOVALIDATE + NOWAIT + NO_XML_DML_REWRITE + NO_XMLINDEX_REWRITE + NO_XMLINDEX_REWRITE_IN_SELECT + NO_XML_QUERY_REWRITE + NULL + NULLS + NUMBER + NUMERIC + NUM_INDEX_KEYS + OBJECT + OBJECTTOXML + OBJNO + OBJNO_REUSE + OCCURENCES + OF + OFF + OFFLINE + OID + OIDINDEX + OLAP + OLD + OLD_PUSH_PRED + OLTP + ON + ONLINE + ONLY + OPAQUE + OPAQUE_TRANSFORM + OPAQUE_XCANONICAL + OPCODE + OPEN + OPERATIONS + OPERATOR + OPT_ESTIMATE + OPTIMAL + OPTIMIZER_FEATURES_ENABLE + OPTIMIZER_GOAL + OPTION + OPT_PARAM + ORA_BRANCH + ORA_CHECKACL + ORADEBUG + ORA_GET_ACLIDS + ORA_GET_PRIVILEGES + ORA_ROWSCN + ORA_ROWSCN_RAW + ORA_ROWVERSION + ORA_TABVERSION + ORDER + ORDERED + ORDERED_PREDICATES + ORDINALITY + OR_EXPAND + ORGANIZATION + OR_PREDICATES + OTHER + OUTER + OUTER_JOIN_TO_INNER + OUTLINE + OUTLINE_LEAF + OUT_OF_LINE + OVER + OVERFLOW + OVERFLOW_NOMOVE + OVERLAPS + OWN + OWNER + OWNERSHIP + PACKAGE + PACKAGES + PARALLEL + PARALLEL_INDEX + PARAM + PARAMETERS + PARENT + PARITY + PARTIALLY + PARTITION + PARTITION_HASH + PARTITION_LIST + PARTITION_RANGE + PARTITIONS + PART$NUM$INST + PASSING + PASSWORD + PASSWORD_GRACE_TIME + PASSWORD_LIFE_TIME + PASSWORD_LOCK_TIME + PASSWORD_REUSE_MAX + PASSWORD_REUSE_TIME + PASSWORD_VERIFY_FUNCTION + PATHS + PBL_HS_BEGIN + PBL_HS_END + PCTFREE + PCTINCREASE + PCTTHRESHOLD + PCTUSED + PCTVERSION + PENDING + PERCENT + PERCENTILE_CONT + PERCENTILE_DISC + PERCENT_RANKM + PERFORMANCE + PERMANENT + PERMISSION + PFILE + PHYSICAL + PIKEY + PIV_GB + PIVOT + PIV_SSF + PLACE_DISTINCT + PLACE_GROUP_BY + PLAN + PLSCOPE_SETTINGS + PLSQL_CCFLAGS + PLSQL_CODE_TYPE + PLSQL_DEBUG + PLSQL_OPTIMIZE_LEVEL + PLSQL_WARNINGS + POINT + POLICY + POST_TRANSACTION + PQ_DISTRIBUTE + PQ_MAP + PQ_NOMAP + PREBUILT + PRECEDES + PRECEDING + PRECISION + PRECOMPUTE_SUBQUERY + PREDICATE_REORDERS + PREPARE + PRESENT + PRESERVE + PRESERVE_OID + PRIMARY + PRIOR + PRIVATE + PRIVATE_SGA + PRIVILEGE + PRIVILEGES + PROCEDURAL + PROCEDURE + PROCESS + PROFILE + PROGRAM + PROJECT + PROMPT + PROPAGATE + PROTECTED + PROTECTION + PUBLIC + PULL_PRED + PURGE + PUSH_PRED + PUSH_SUBQ + PX_GRANULE + PX_JOIN_FILTER + QB_NAME + QUERY + QUERY_BLOCK + QUEUE + QUEUE_CURR + QUEUE_ROWP + QUIESCE + QUORUM + QUOTA + RANDOM + RANDOM_LOCAL + RANGE + RANKM + RAPIDLY + RAW + RBA + RBO_OUTLINE + RDBA + READ + READS + REAL + REBALANCE + REBUILD + RECORDS_PER_BLOCK + RECOVER + RECOVERABLE + RECOVERY + RECYCLE + RECYCLEBIN + REDO + REDUCED + REDUNDANCY + REF_CASCADE_CURSOR + REFERENCE + REFERENCED + REFERENCES + REFERENCING + REFRESH + REFTOHEX + REGEXP_LIKE + REGISTER + REGULAR + REJECT + REKEY + RELATIONAL + RELY + REMOTE_MAPPED + REMOVE + RENAME + REPAIR + REPEAT + REPLICATION + REQUIRED + RESET + RESETLOGS + RESIZE + RESOLVE + RESOLVER + RESOURCE + RESPECT + RESTORE + RESTORE_AS_INTERVALS + RESTRICT + RESTRICT_ALL_REF_CONS + RESTRICTED + RESULT_CACHE + RESUMABLE + RESUME + RETENTION + RETRY_ON_ROW_CHANGE + REUSE + REVERSE + REVOKE + REWRITE + REWRITE_OR_ERROR + RIGHT + ROLE + ROLES + ROLLBACK + ROLLING + ROLLUP + ROW + ROWDEPENDENCIES + ROWID + ROW_LENGTH + ROWNUM + ROWS + RULE + RULES + SALT + SAMPLE + SAVE_AS_INTERVALS + SAVEPOINT + SB4 + SCALE + SCALE_ROWS + SCAN + SCAN_INSTANCES + SCHEDULER + SCHEMA + SCHEMACHECK + SCN + SCN_ASCENDING + SCOPE + SD_ALL + SD_INHIBIT + SD_SHOW + SEARCH + SECOND + SECUREFILE + SECUREFILE_DBA + SECURITY + SEED + SEG_BLOCK + SEG_FILE + SEGMENT + SELECT + SELECTIVITY + SEMIJOIN + SEMIJOIN_DRIVER + SEQUENCE + SEQUENCED + SEQUENTIAL + SERIALIZABLE + SERVERERROR + SESSION + SESSION_CACHED_CURSORS + SESSIONS_PER_USER + SESSIONTIMEZONE + SESSIONTZNAME + SETS + SETTINGS + SET_TO_JOIN + SEVERE + SHARE + SHARED + SHARED_POOL + SHOW + SHRINK + SHUTDOWN + SIBLINGS + SID + SIGNAL_COMPONENT + SIGNAL_FUNCTION + SIMPLE + SINGLE + SINGLETASK + SIZE + SKIP + SKIP_EXT_OPTIMIZER + SKIP_UNQ_UNUSABLE_IDX + SKIP_UNUSABLE_INDEXES + SMALLFILE + SMALLINT + SNAPSHOT + SOME + SORT + SOURCE + SPACE + SPECIFICATION + SPFILE + SPLIT + SPREADSHEET + SQL + SQLLDR + SQL_TRACE + STALE + STANDALONE + STANDBY + STANDBY_MAX_DATA_DELAY + STAR + START + STAR_TRANSFORMATION + STARTUP + STATEMENT_ID + STATEMENT_QUEUING + STATEMENTS + STATIC + STATISTICS + STOP + STORAGE + STORE + STREAMS + STRICT + STRING + STRIP + STRIPE_COLUMNS + STRIPE_WIDTH + STRUCTURE + SUBMULTISET + SUBPARTITION + SUBPARTITION_REL + SUBPARTITIONS + SUBQUERIES + SUBQUERY_PRUNING + SUBSTITUTABLE + SUCCESSFUL + SUMMARY + SUPPLEMENTAL + SUSPEND + SWAP_JOIN_INPUTS + SWITCH + SWITCHOVER + SYNC + SYNCHRONOUS + SYNONYM + SYSASM + SYS_AUDIT + SYSAUX + SYS_CHECKACL + SYSDBA + SYS_DL_CURSOR + SYS_DM_RXFORM_CHR + SYS_DM_RXFORM_NUM + SYS_DOM_COMPARE + SYS_DST_PRIM2SEC + SYS_DST_SEC2PRIM + SYS_ET_BFILE_TO_RAW + SYS_ET_BLOB_TO_IMAGE + SYS_ET_IMAGE_TO_BLOB + SYS_ET_RAW_TO_BFILE + SYS_EXTPDTXT + SYS_FBT_INSDEL + SYS_FILTER_ACLS + SYS_GET_ACLIDS + SYS_GET_PRIVILEGES + SYS_GETTOKENID + SYS_MAKEXML + SYS_MAKE_XMLNODEID + SYS_MKXMLATTR + SYS_OP_ADTCONS + SYS_OP_ADT2BIN + SYS_OP_ALSCRVAL + SYS_OP_ATG + SYS_OP_BIN2ADT + SYS_OP_BITVEC + SYS_OP_BLOOM_FILTER + SYS_OP_BLOOM_FILTER_LIST + SYS_OP_BL2R + SYS_OP_CAST + SYS_OP_CEG + SYS_OP_CL2C + SYS_OP_COMBINED_HASH + SYS_OP_COMP + SYS_OP_CONVERT + SYS_OP_COUNTCHG + SYS_OP_CSCONV + SYS_OP_CSCONVTEST + SYS_OP_CSR + SYS_OP_CSX_PATCH + SYS_OP_C2C + SYS_OP_DECOMP + SYS_OP_DESCEND + SYS_OP_DISTINCT + SYS_OP_DRA + SYS_OP_DUMP + SYS_OP_ENFORCE_NOT_NULL$ + SYSOPER + SYS_OP_EXTRACT + SYS_OP_GROUPING + SYS_OP_GUID + SYS_OP_IIX + SYS_OP_ITR + SYS_OP_LBID + SYS_OP_LOBLOC2BLOB + SYS_OP_LOBLOC2CLOB + SYS_OP_LOBLOC2ID + SYS_OP_LOBLOC2NCLOB + SYS_OP_LOBLOC2TYP + SYS_OP_LSVI + SYS_OP_LVL + SYS_OP_MAKEOID + SYS_OP_MAP_NONNULL + SYS_OP_MSR + SYS_OP_NICOMBINE + SYS_OP_NIEXTRACT + SYS_OP_NII + SYS_OP_NIX + SYS_OP_NOEXPAND + SYS_OP_NTCIMG$ + SYS_OP_NUMTORAW + SYS_OP_OIDVALUE + SYS_OP_OPNSIZE + SYS_OP_PAR + SYS_OP_PARGID + SYS_OP_PARGID_1 + SYS_OP_PAR_1 + SYS_OP_PIVOT + SYS_OP_RAWTONUM + SYS_OP_RDTM + SYS_OP_REF + SYS_OP_RMTD + SYS_OP_ROWIDTOOBJ + SYS_OP_RPB + SYS_OP_R2O + SYS_OPTLOBPRBSC + SYS_OP_TOSETID + SYS_OP_TPR + SYS_OP_TRTB + SYS_OPTXICMP + SYS_OPTXQCASTASNQ + SYS_OP_UNDESCEND + SYS_OP_VECAND + SYS_OP_VECBIT + SYS_OP_VECOR + SYS_OP_VECXOR + SYS_OP_VERSION + SYS_OP_VREF + SYS_OP_VVD + SYS_OP_XPTHATG + SYS_OP_XPTHIDX + SYS_OP_XPTHOP + SYS_OP_XTXT2SQLT + SYS_ORDERKEY_DEPTH + SYS_ORDERKEY_MAXCHILD + SYS_ORDERKEY_PARENT + SYS_PARALLEL_TXN + SYS_PATHID_IS_ATTR + SYS_PATHID_IS_NMSPC + SYS_PATHID_LASTNAME + SYS_PATHID_LASTNMSPC + SYS_PATH_REVERSE + SYS_PXQEXTRACT + SYS_RID_ORDER + SYS_ROW_DELTA + SYS_SC_2_XMLT + SYS_SYNRCIREDO + SYSTEM + SYSTEM_DEFINED + SYSTIMESTAMP + SYS_TYPEID + SYS_UMAKEXML + SYS_XMLANALYZE + SYS_XMLCONTAINS + SYS_XMLCONV + SYS_XMLEXNSURI + SYS_XMLI_LOC_ISNODE + SYS_XMLI_LOC_ISTEXT + SYS_XMLLOCATOR_GETSVAL + SYS_XMLNODEID + SYS_XMLNODEID_GETCID + SYS_XMLNODEID_GETLOCATOR + SYS_XMLNODEID_GETOKEY + SYS_XMLNODEID_GETPATHID + SYS_XMLNODEID_GETPTRID + SYS_XMLNODEID_GETRID + SYS_XMLNODEID_GETSVAL + SYS_XMLNODEID_GETTID + SYS_XMLTRANSLATE + SYS_XMLTYPE2SQL + SYS_XMLT_2_SC + SYS_XQ_ASQLCNV + SYS_XQ_ATOMCNVCHK + SYS_XQBASEURI + SYS_XQCASTABLEERRH + SYS_XQCODEPEQ + SYS_XQCODEP2STR + SYS_XQCONCAT + SYS_XQCON2SEQ + SYS_XQDELETE + SYS_XQDFLTCOLATION + SYS_XQDOC + SYS_XQDOCURI + SYS_XQED4URI + SYS_XQENDSWITH + SYS_XQERR + SYS_XQERRH + SYS_XQESHTMLURI + SYS_XQEXLOBVAL + SYS_XQEXSTWRP + SYS_XQEXTRACT + SYS_XQEXTRREF + SYS_XQEXVAL + SYS_XQFB2STR + SYS_XQFNBOOL + SYS_XQFNCMP + SYS_XQFNDATIM + SYS_XQFNLNAME + SYS_XQFNNM + SYS_XQFNNSURI + SYS_XQFNPREDTRUTH + SYS_XQFNQNM + SYS_XQFNROOT + SYS_XQFORMATNUM + SYS_XQFTCONTAIN + SYS_XQFUNCR + SYS_XQGETCONTENT + SYS_XQINDXOF + SYS_XQINSERT + SYS_XQINSPFX + SYS_XQIRI2URI + SYS_XQLANG + SYS_XQLLNMFRMQNM + SYS_XQMKNODEREF + SYS_XQNILLED + SYS_XQNODENAME + SYS_XQNORMSPACE + SYS_XQNORMUCODE + SYS_XQ_NRNG + SYS_XQNSPFRMQNM + SYS_XQNSP4PFX + SYS_XQPFXFRMQNM + SYS_XQ_PKSQL2XML + SYS_XQPOLYABS + SYS_XQPOLYADD + SYS_XQPOLYCEL + SYS_XQPOLYCST + SYS_XQPOLYCSTBL + SYS_XQPOLYDIV + SYS_XQPOLYFLR + SYS_XQPOLYMOD + SYS_XQPOLYMUL + SYS_XQPOLYRND + SYS_XQPOLYSQRT + SYS_XQPOLYSUB + SYS_XQPOLYUMUS + SYS_XQPOLYUPLS + SYS_XQPOLYVEQ + SYS_XQPOLYVGE + SYS_XQPOLYVGT + SYS_XQPOLYVLE + SYS_XQPOLYVLT + SYS_XQPOLYVNE + SYS_XQREF2VAL + SYS_XQRENAME + SYS_XQREPLACE + SYS_XQRESVURI + SYS_XQRNDHALF2EVN + SYS_XQRSLVQNM + SYS_XQRYENVPGET + SYS_XQRYVARGET + SYS_XQRYWRP + SYS_XQSEQDEEPEQ + SYS_XQSEQINSB + SYS_XQSEQRM + SYS_XQSEQRVS + SYS_XQSEQSUB + SYS_XQSEQTYPMATCH + SYS_XQSEQ2CON + SYS_XQSEQ2CON4XC + SYS_XQSTARTSWITH + SYS_XQSTATBURI + SYS_XQSTRJOIN + SYS_XQSTR2CODEP + SYS_XQSUBSTRAFT + SYS_XQSUBSTRBEF + SYS_XQTOKENIZE + SYS_XQTREATAS + SYS_XQ_UPKXML2SQL + SYS_XQXFORM + TABLE + TABLES + TABLESPACE + TABLESPACE_NO + TABLE_STATS + TABNO + TBL$OR$IDX$PART$NUM + TEMPFILE + TEMPLATE + TEMPORARY + TEMP_TABLE + TEST + THAN + THE + THREAD + THROUGH + TIME + TIMEOUT + TIMES + TIMESTAMP + TIME_ZONE + TIMEZONE_ABBR + TIMEZONE_HOUR + TIMEZONE_MINUTE + TIMEZONE_OFFSET + TIMEZONE_REGION + TIV_GB + TIV_SSF + TO + TRACE + TRACING + TRACKING + TRAILING + TRANSACTION + TRANSFORM_DISTINCT_AGG + TRANSITION + TRANSITIONAL + TRIGGER + TRIGGERS + TRUE + TRUNCATE + TRUSTED + TUNING + TX + TYPE + TYPES + UBA + UB2 + UNARCHIVED + UNBOUND + UNBOUNDED + UNDEFINE + UNDER + UNDO + UNDROP + UNIFORM + UNION + UNIQUE + UNLIMITED + UNLOCK + UNNEST + UNPACKED + UNPIVOT + UNPROTECTED + UNQUIESCE + UNRECOVERABLE + UNRESTRICTED + UNTIL + UNUSABLE + UNUSED + UPDATABLE + UPDATE + UPDATED + UPD_INDEXES + UPD_JOININDEX + UPGRADE + UPSERT + UROWID + USAGE + USE + USE_ANTI + USE_CONCAT + USE_HASH + USE_HASH_AGGREGATION + USE_INVISIBLE_INDEXES + USE_MERGE + USE_MERGE_CARTESIAN + USE_NL + USE_NL_WITH_INDEX + USE_PRIVATE_OUTLINES + USER_DEFINED + USERGROUP + USER_RECYCLEBIN + USERS + USE_SEMI + USE_STORED_OUTLINES + USE_TTT_FOR_GSETS + USE_WEAK_NAME_RESL + USING + VALIDATE + VALIDATION + VALUES + VARRAYS + VARIABLE + VARYING + VECTOR_READ + VECTOR_READ_TRACE + VERIFY + VERSION + VERSIONING + VERSIONS + VERSIONS_ENDSCN + VERSIONS_ENDTIME + VERSIONS_OPERATION + VERSIONS_STARTSCN + VERSIONS_STARTTIME + VERSIONS_XID + VIEW + VIRTUAL + VISIBLE + VOLUME + WAIT + WALLET + WELLFORMED + WHENEVER + WHERE + WHITESPACE + WITH + WITHIN + WITHOUT + WORK + WRAPPED + WRITE + X_DYN_PRUNE + XID + XML + XMLATTRIBUTES + XMLEXISTS2 + XML_DML_RWT_STMT + XMLINDEX_REWRITE + XMLINDEX_REWRITE_IN_SELECT + XMLINDEX_SEL_IDX_TBL + XMLISNODE + XMLNAMESPACES + XMLSCHEMA + XMLTOOBJECT + XMLTRANSFORMBLOB + XMLTYPE + XPATHTABLE + XS_SYS_CONTEXT + YEAR + YES + ZONE + + + ABS + ACOS + ADD_MONTHS + APPENDCHILDXML + ASCII + ASCIISTR + ASIN + ATAN + ATAN2 + AVG + BFILENAME + BIN_TO_NUM + BITAND + CARDINALITY + CAST + CEIL + CHARTOROWID + CHR + CLUSTER_ID + CLUSTER_PROBABILITY + CLUSTER_SET + COALESCE + COLLECT + COMPOSE + CONCAT + CONVERT + CORR + CORR_K + CORR_S + COS + COSH + COUNT + COVAR_POP + COVAR_SAMP + CUME_DIST + CURRENT_DATE + CURRENT_TIMESTAMP + CV + DATAOBJ_TO_PARTITION + DBTIMEZONE + DECODE + DECOMPOSE + DELETEXML + DENSE_RANK + DEPTH + DEREF + DUMP + EMPTY_BLOB + EMPTY_CLOB + EXISTSNODE + EXP + EXTRACT + EXTRACTVALUE + FEATURE_ID + FEATURE_SET + FEATURE_VALUE + FIRST + FIRST_VALUE + FLOOR + FROM_TZ + GREATEST + GROUP_ID + GROUPING + GROUPING_ID + HEXTORAW + INITCAP + INSERTCHILDXML + INSERTCHILDXMLAFTER + INSERTCHILDXMLBEFORE + INSERTXMLAFTER + INSERTXMLBEFORE + INSTR + INSTRB + INSTRC + INSTR2 + INSTR4 + ITERATION_NUMBER + LAG + LAST + LAST_DAY + LAST_VALUE + LEAD + LEAST + LENGTH + LENGTHB + LENGTHC + LENGTH2 + LENGTH4 + LISTAGG + LN + LNNVL + LOCALTIMESTAMP + LOG + LOWER + LPAD + LTRIM + MAKE_REF + MAX + MEDIAN + MIN + MOD + MONTHS_BETWEEN + NANVL + NCHR + NEW_TIME + NEXT_DAY + NLS_CHARSET_DECL_LEN + NLS_CHARSET_ID + NLS_CHARSET_NAME + NLS_INITCAP + NLS_LOWER + NLS_UPPER + NLSSORT + NTH_VALUE + NTILE + NULLIF + NUMTODSINTERVAL + NUMTOYMINTERVAL + NVL + NVL2 + ORA_DST_AFFECTED + ORA_DST_CONVERT + ORA_DST_ERROR + ORA_HASH + PATH + PERCENT_RANK + PERCENTILE_CONT + PERCENTILE_DISC + POWER + POWERMULTISET + POWERMULTISET_BY_CARDINALITY + PREDICTION + PREDICTION_BOUNDS + PREDICTION_COST + PREDICTION_DETAILS + PREDICTION_PROBABILITY + PREDICTION_SET + PRESENTNNV + PRESENTV + PREVIOUS + RANK + RATIO_TO_REPORT + RAWTOHEX + RAWTONHEX + REF + REFTOHEX + REGEXP_COUNT + REGEXP_INSTR + REGEXP_REPLACE + REGEXP_SUBSTR + REGR_SLOPE + REGR_INTERCEPT + REGR_COUNT + REGR_R2 + REGR_AVGX + REGR_AVGY + REGR_SXX + REGR_SYY + REGR_SXY + REMAINDER + REPLACE + ROUND + ROW_NUMBER + ROWIDTOCHAR + ROWIDTONCHAR + RPAD + RTRIM + SCN_TO_TIMESTAMP + SESSIONTIMEZONE + SET + SIGN + SIN + SINH + SOUNDEX + SQRT + STATS_BINOMIAL_TEST + STATS_CROSSTAB + STATS_F_TEST + STATS_KS_TEST + STATS_MODE + STATS_MW_TEST + STATS_ONE_WAY_ANOVA + STATS_T_TEST_ONE + STATS_T_TEST_PAIRED + STATS_T_TEST_INDEP + STATS_T_TEST_INDEPU + STATS_WSR_TEST + STDDEV + STDDEV_POP + STDDEV_SAMP + SUBSTR + SUBSTRB + SUBSTRC + SUBSTR2 + SUBSTR4 + SUM + SYS_CONNECT_BY_PATH + SYS_CONTEXT + SYS_DBURIGEN + SYS_EXTRACT_UTC + SYS_GUID + SYS_TYPEID + SYS_XMLAGG + SYS_XMLGEN + SYSDATE + SYSTIMESTAMP + TAN + TANH + TIMESTAMP_TO_SCN + TO_BINARY_DOUBLE + TO_BINARY_FLOAT + TO_BLOB + TO_CHAR + TO_CLOB + TO_DATE + TO_DSINTERVAL + TO_LOB + TO_MULTI_BYTE + TO_NCHAR + TO_NCLOB + TO_NUMBER + TO_SINGLE_BYTE + TO_TIMESTAMP + TO_TIMESTAMP_TZ + TO_YMINTERVAL + TRANSLATE + TREAT + TRIM + TRUNC + TZ_OFFSET + UID + UNISTR + UPDATEXML + UPPER + USER + USERENV + VALUE + VAR_POP + VAR_SAMP + VARIANCE + VSIZE + WIDTH_BUCKET + XMLAGG + XMLCAST + XMLCDATA + XMLCOLATTVAL + XMLCOMMENT + XMLCONCAT + XMLDIFF + XMLELEMENT + XMLEXISTS + XMLFOREST + XMLISVALID + XMLPARSE + XMLPATCH + XMLPI + XMLQUERY + XMLROOT + XMLSEQUENCE + XMLSERIALIZE + XMLTABLE + XMLTRANSFORM + + + ANYDATA + ANYDATASET + ANYTYPE + ARRAY + BFILE + BINARY + BINARY_DOUBLE + BINARY_DOUBLE_INFINITY + BINARY_DOUBLE_NAN + BINARY_FLOAT + BINARY_FLOAT_INFINITY + BINARY_FLOAT_NAN + BLOB + BOOLEAN + CFILE + CHAR + CHARACTER + CLOB + DATE + DBURITYPE + DEC + DECIMAL + DOUBLE + FLOAT + HTTPURITYPE + INT + INTEGER + INTERVAL + LOB + LONG + MLSLABEL + NCHAR + NCLOB + NUMBER + NUMERIC + NVARCHAR2 + OBJECT + PLS_INTEGER + PRECISION + RAW + RECORD + REFCURSOR + REAL + ROWID + SECOND + SINGLE + SMALLINT + TIME + TIMESTAMP + URIFACTORYTYPE + URITYPE + UROWID + VARCHAR + VARCHAR2 + VARYING + VARRAY + XMLTYPE + ZONE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/sql-postgresql.xml b/src/data/extra/syntax-highlighting/syntax/sql-postgresql.xml new file mode 100644 index 00000000..6cf5a6ae --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/sql-postgresql.xml @@ -0,0 +1,1074 @@ + + + + + + + BEGIN + CASE + ELSE + ELSIF + END + EXCEPTION + FOR + IF + LOOP + RETURN + THEN + WHEN + + + AND + BETWEEN + IN + IS + LIKE + NOT + OR + + + A + ABORT + ABSENT + ABSOLUTE + ACCESS + ACCORDING + ACTION + ADA + ADD + ADMIN + AFTER + AGGREGATE + ALL + ALLOCATE + ALSO + ALTER + ALWAYS + ANALYZE + ANY + ARE + ARRAY + ARRAY_AGG + ARRAY_MAX_CARDINALITY + AS + ASC + ASENSITIVE + ASSERTION + ASSIGNMENT + ASYMMETRIC + AT + ATOMIC + ATTACH + ATTRIBUTE + ATTRIBUTES + AUTHORIZATION + BACKWARD + BASE64 + BEFORE + BEGIN_FRAME + BEGIN_PARTITION + BERNOULLI + BINARY + BLOB + BLOCKED + BOM + BOTH + BREADTH + BY + C + CACHE + CALL + CALLED + CARDINALITY + CASCADE + CASCADED + CAST + CATALOG + CATALOG_NAME + CHAIN + CHARACTERISTICS + CHARACTERS + CHARACTER_SET_CATALOG + CHARACTER_SET_NAME + CHARACTER_SET_SCHEMA + CHECK + CHECKPOINT + CLASS + CLASS_ORIGIN + CLOB + CLOSE + CLUSTER + COBOL + COLLATE + COLLATION + COLLATION_CATALOG + COLLATION_NAME + COLLATION_SCHEMA + COLLECT + COLUMN + COLUMNS + COLUMN_NAME + COMMAND_FUNCTION + COMMAND_FUNCTION_CODE + COMMENT + COMMENTS + COMMIT + COMMITTED + CONCURRENTLY + CONDITION + CONDITION_NUMBER + CONFIGURATION + CONFLICT + CONNECT + CONNECTION + CONNECTION_NAME + CONSTRAINT + CONSTRAINTS + CONSTRAINT_CATALOG + CONSTRAINT_NAME + CONSTRAINT_SCHEMA + CONSTRUCTOR + CONTAINS + CONTENT + CONTINUE + CONTROL + CONVERSION + COPY + CORR + CORRESPONDING + COST + COVAR_POP + COVAR_SAMP + CREATE + CROSS + CSV + CUBE + CUME_DIST + CURRENT + CURRENT_CATALOG + CURRENT_DATE + CURRENT_DEFAULT_TRANSFORM_GROUP + CURRENT_PATH + CURRENT_ROLE + CURRENT_ROW + CURRENT_TIME + CURRENT_TIMESTAMP + CURRENT_TRANSFORM_GROUP_FOR_TYPE + CURSOR + CURSOR_NAME + CYCLE + DATA + DATABASE + DATALINK + DATETIME_INTERVAL_CODE + DATETIME_INTERVAL_PRECISION + DAY + DB + DEALLOCATE + DEC + DECLARE + DEFAULT + DEFAULTS + DEFERRABLE + DEFERRED + DEFINED + DEFINER + DEGREE + DELETE + DELIMITER + DELIMITERS + DENSE_RANK + DEPENDS + DEPTH + DEREF + DERIVED + DESC + DESCRIBE + DESCRIPTOR + DESTROY + DESTRUCTOR + DETACH + DETERMINISTIC + DIAGNOSTICS + DICTIONARY + DISABLE + DISCARD + DISCONNECT + DISPATCH + DISTINCT + DLNEWCOPY + DLPREVIOUSCOPY + DLURLCOMPLETE + DLURLCOMPLETEONLY + DLURLCOMPLETEWRITE + DLURLPATH + DLURLPATHONLY + DLURLPATHWRITE + DLURLSCHEME + DLURLSERVER + DLVALUE + DO + DOCUMENT + DOMAIN + DROP + DYNAMIC + DYNAMIC_FUNCTION + DYNAMIC_FUNCTION_CODE + EACH + ELEMENT + EMPTY + ENABLE + ENCODING + ENCRYPTED + END-EXEC + END_FRAME + END_PARTITION + ENFORCED + ENUM + EQUALS + ESCAPE + EVENT + EXCEPT + EXCLUDE + EXCLUDING + EXCLUSIVE + EXEC + EXECUTE + EXISTS + EXPLAIN + EXPRESSION + EXTENSION + EXTERNAL + FALSE + FETCH + FILE + FILTER + FINAL + FIRST + FIRST_VALUE + FLAG + FLOAT + FOLLOWING + FORCE + FOREIGN + FORTRAN + FORWARD + FOUND + FRAME_ROW + FREE + FREEZE + FROM + FS + FULL + FUNCTION + FUNCTIONS + FUSION + G + GENERAL + GENERATED + GET + GLOBAL + GO + GOTO + GRANT + GRANTED + GREATEST + GROUP + GROUPING + GROUPS + HANDLER + HAVING + HEADER + HEX + HIERARCHY + HOLD + HOUR + ID + IDENTITY + IGNORE + ILIKE + IMMEDIATE + IMMEDIATELY + IMMUTABLE + IMPLEMENTATION + IMPLICIT + IMPORT + INCLUDING + INCREMENT + INDENT + INDEX + INDEXES + INDICATOR + INHERIT + INHERITS + INITIALLY + INLINE + INNER + INOUT + INPUT + INSENSITIVE + INSERT + INSTANCE + INSTANTIABLE + INSTEAD + INTEGRITY + INTERSECT + INTERSECTION + INTO + INVOKER + ISNULL + ISOLATION + JOIN + K + KEY + KEY_MEMBER + KEY_TYPE + LABEL + LAG + LANGUAGE + LARGE + LAST + LAST_VALUE + LATERAL + LEAD + LEADING + LEAKPROOF + LEAST + LEFT + LEVEL + LIBRARY + LIKE_REGEX + LIMIT + LINK + LISTEN + LOAD + LOCAL + LOCALTIME + LOCALTIMESTAMP + LOCATION + LOCATOR + LOCK + LOCKED + LOGGED + M + MAP + MAPPING + MATCH + MATCHED + MATERIALIZED + MAXVALUE + MAX_CARDINALITY + MEMBER + MERGE + MESSAGE_LENGTH + MESSAGE_OCTET_LENGTH + MESSAGE_TEXT + METHOD + MINUTE + MINVALUE + MODE + MODIFIES + MODULE + MONTH + MORE + MOVE + MULTISET + MUMPS + NAME + NAMES + NAMESPACE + NATIONAL + NATURAL + NCHAR + NCLOB + NESTING + NEW + NEXT + NFC + NFD + NFKC + NFKD + NIL + NO + NONE + NORMALIZE + NORMALIZED + NOTHING + NOTIFY + NOTNULL + NOWAIT + NTH_VALUE + NTILE + NULL + NULLABLE + NULLS + NUMBER + OBJECT + OCCURRENCES_REGEX + OCTETS + OF + OFF + OFFSET + OIDS + OLD + ON + ONLY + OPEN + OPERATOR + OPTION + OPTIONS + ORDER + ORDERING + ORDINALITY + OTHERS + OUT + OUTER + OUTPUT + OVER + OVERLAPS + OVERRIDING + OWNED + OWNER + P + PAD + PARALLEL + PARAMETER + PARAMETER_MODE + PARAMETER_NAME + PARAMETER_ORDINAL_POSITION + PARAMETER_SPECIFIC_CATALOG + PARAMETER_SPECIFIC_NAME + PARAMETER_SPECIFIC_SCHEMA + PARSER + PARTIAL + PARTITION + PASCAL + PASSING + PASSTHROUGH + PASSWORD + PERCENT + PERCENTILE_CONT + PERCENTILE_DISC + PERCENT_RANK + PERIOD + PERMISSION + PLACING + PLANS + PLI + POLICY + PORTION + POSITION_REGEX + PRECEDES + PRECEDING + PRECISION + PREPARE + PREPARED + PRESERVE + PRIMARY + PRIOR + PRIVILEGES + PROCEDURAL + PROCEDURE + PROGRAM + PUBLIC + RANGE + PUBLICATION + QUOTE + RANGE + RANK + READ + READS + REASSIGN + RECHECK + RECOVERY + RECURSIVE + REF + REFERENCES + REFERENCING + REFRESH + REGR_AVGX + REGR_AVGY + REGR_COUNT + REGR_INTERCEPT + REGR_R2 + REGR_SLOPE + REGR_SXX + REGR_SXY + REGR_SYY + REINDEX + RELATIVE + RELEASE + RENAME + REPEATABLE + REPLICA + REQUIRING + RESET + RESPECT + RESTART + RESTORE + RESTRICT + RESULT + RETURNED_CARDINALITY + RETURNED_LENGTH + RETURNED_OCTET_LENGTH + RETURNED_SQLSTATE + RETURNING + RETURNS + REVOKE + RIGHT + ROLE + ROLLBACK + ROLLUP + ROUTINE + ROUTINE_CATALOG + ROUTINE_NAME + ROUTINE_SCHEMA + ROW + ROWS + ROW_COUNT + ROW_NUMBER + RULE + SAVEPOINT + SCALE + SCHEMA + SCHEMAS + SCHEMA_NAME + SCOPE + SCOPE_CATALOG + SCOPE_NAME + SCOPE_SCHEMA + SCROLL + SEARCH + SECOND + SECTION + SECURITY + SELECT + SELECTIVE + SELF + SENSITIVE + SEQUENCE + SEQUENCES + SERIALIZABLE + SERVER + SERVER_NAME + SESSION + SET + SETOF + SETS + SHARE + SHOW + SIMILAR + SIMPLE + SIZE + SKIP + SNAPSHOT + SOME + SOURCE + SPACE + SPECIFIC + SPECIFICTYPE + SPECIFIC_NAME + SQL + SQLCODE + SQLERROR + SQLEXCEPTION + SQLSTATE + SQLWARNING + STABLE + STANDALONE + START + STATE + STATEMENT + STATIC + STATISTICS + STDDEV_POP + STDDEV_SAMP + STDIN + STDOUT + STORAGE + STRICT + STRIP + STRUCTURE + STYLE + SUBCLASS_ORIGIN + SUBMULTISET + SUBSCRIPTION + SUBSTRING_REGEX + SUCCEEDS + SYMMETRIC + SYSID + SYSTEM + SYSTEM_TIME + SYSTEM_USER + T + TABLE + TABLES + TABLESAMPLE + TABLESPACE + TABLE_NAME + TEMP + TEMPLATE + TEMPORARY + TIES + TIMEZONE_HOUR + TIMEZONE_MINUTE + TO + TOKEN + TOP_LEVEL_COUNT + TRAILING + TRANSACTION + TRANSACTIONS_COMMITTED + TRANSACTIONS_ROLLED_BACK + TRANSACTION_ACTIVE + TRANSFORM + TRANSFORMS + TRANSLATE_REGEX + TRANSLATION + TREAT + TRIGGER + TRIGGER_CATALOG + TRIGGER_NAME + TRIGGER_SCHEMA + TRIM_ARRAY + TRUE + TRUNCATE + TRUSTED + TYPE + TYPES + UESCAPE + UNBOUNDED + UNCOMMITTED + UNDER + UNENCRYPTED + UNION + UNIQUE + UNKNOWN + UNLINK + UNLISTEN + UNLOGGED + UNNAMED + UNNEST + UNTIL + UNTYPED + UPDATE + URI + USAGE + USER + USER_DEFINED_TYPE_CATALOG + USER_DEFINED_TYPE_CODE + USER_DEFINED_TYPE_NAME + USER_DEFINED_TYPE_SCHEMA + USING + VACUUM + VALID + VALIDATE + VALIDATOR + VALUE + VALUES + VALUE_OF + VARBINARY + VARIADIC + VARYING + VAR_POP + VAR_SAMP + VERBOSE + VERSIONING + VIEW + VIEWS + VOLATILE + WHENEVER + WHERE + WHITESPACE + WINDOW + WITH + WITHIN + WITHOUT + WORK + WRAPPER + WRITE + XMLAGG + XMLATTRIBUTES + XMLBINARY + XMLCAST + XMLCOMMENT + XMLCONCAT + XMLDECLARATION + XMLDOCUMENT + XMLELEMENT + XMLEXISTS + XMLFOREST + XMLITERATE + XMLNAMESPACES + XMLPARSE + XMLPI + XMLQUERY + XMLROOT + XMLSCHEMA + XMLSERIALIZE + XMLTABLE + XMLTEXT + XMLVALIDATE + YEAR + YES + ZONE + + + + ABS + CBRT + CEIL + CEILING + DEGREES + EXP + FLOOR + LN + LOG + MOD + PI + POW + POWER + RADIANS + RANDOM + ROUND + SETSEED + SIGN + SQRT + TRUNC + WIDTH_BUCKET + + ACOS + ASIN + ATAN + ATAN2 + COS + COT + SIN + TAN + + BIT_LENGTH + CHAR_LENGTH + CHARACTER_LENGTH + CONVERT + GET_BYTE + GET_BIT + LOWER + OCTET_LENGTH + OVERLAY + POSITION + SET_BIT + SUBSTRING + TRIM + UPPER + + ASCII + BTRIM + CHR + DECODE + ENCODE + INITCAP + LENGTH + LPAD + LTRIM + MD5 + PG_CLIENT_ENCODING + QUOTE_IDENT + QUOTE_LITERAL + REGEXP_REPLACE + REPEAT + REPLACE + RPAD + RTRIM + SPLIT_PART + STRPOS + SUBSTR + TO_ASCII + TO_HEX + TRANSLATE + + TO_CHAR + TO_DATE + TO_TIMESTAMP + TO_NUMBER + + AGE + DATE_PART + DATE_TRUNC + EXTRACT + ISFINITE + JUSTIFY_HOURS + JUSTIFY_DAYS + NOW + TIMEOFDAY + TIMESTAMP + + AREA + CENTER + DIAMETER + HEIGHT + ISCLOSED + ISOPEN + NPOINTS + PCLOSE + POPEN + RADIUS + WIDTH + + BOX + CIRCLE + LSEG + PATH + POINT + POLYGON + + ARRAY_CAT + ARRAY_APPEND + ARRAY_PREPEND + ARRAY_DIMS + ARRAY_LOWER + ARRAY_UPPER + ARRAY_TO_STRING + STRING_TO_ARRAY + + BROADCAST + HOST + MASKLEN + SET_MASKLEN + NETMASK + HOSTMASK + NETWORK + TEXT + ABBREV + FAMILY + + NEXTVAL + CURRVAL + LASTVAL + SETVAL + + COALESCE + NULLIF + + AVG + BIT_AND + BIT_OR + BOOL_AND + BOOL_OR + COUNT + EVERY + MAX + MIN + STDDEV + SUM + VARIANCE + + GENERATE_SERIES + + CURRENT_DATABASE + CURRENT_SCHEMA + CURRENT_SCHEMAS + CURRENT_USER + INET_CLIENT_ADDR + INET_CLIENT_PORT + INET_SERVER_ADDR + INET_SERVER_PORT + SESSION_USER + PG_POSTMASTER_START_TIME + VERSION + + HAS_TABLE_PRIVILEGE + HAS_DATABASE_PRIVILEGE + HAS_FUNCTION_PRIVILEGE + HAS_LANGUAGE_PRIVILEGE + PG_HAS_ROLE + HAS_SCHEMA_PRIVILEGE + HAS_TABLESPACE_PRIVILEGE + + PG_TABLE_IS_VISIBLE + PG_TYPE_IS_VISIBLE + PG_FUNCTION_IS_VISIBLE + PG_OPERATOR_IS_VISIBLE + PG_OPCLASS_IS_VISIBLE + PG_CONVERSION_IS_VISIBLE + + FORMAT_TYPE + PG_GET_CONSTRAINTDEF + PG_GET_EXPR + PG_GET_INDEXDEF + PG_GET_RULEDEF + PG_GET_SERIAL_SEQUENCE + PG_TABLESPACE_DATABASES + PG_GET_TRIGGERDEF + PG_GET_USERBYID + PG_GET_VIEWDEF + + OBJ_DESCRIPTION + COL_DESCRIPTION + + CURRENT_SETTING + SET_CONFIG + + PG_CANCEL_BACKEND + PG_RELOAD_CONF + PG_ROTATE_LOGFILE + + PG_START_BACKUP + PG_STOP_BACKUP + + PG_COLUMN_SIZE + PG_TABLESPACE_SIZE + PG_DATABASE_SIZE + PG_RELATION_SIZE + PG_TOTAL_RELATION_SIZE + PG_SIZE_PRETTY + + PG_LS_DIR + PG_READ_FILE + PG_STAT_FILE + + + + BIGINT + BIGSERIAL + BIT + BOOL + BOOLEAN + BOX + BYTEA + CHAR + CHARACTER + CIDR + CIRCLE + DATE + DECIMAL + DOUBLE + FLOAT4 + FLOAT8 + INET + INT + INT2 + INT4 + INT8 + INTEGER + INTERVAL + JSON + JSONB + LINE + LSEG + MACADDR + MACADDR8 + MONEY + NUMERIC + PATH + PG_LSN + POINT + POLYGON + REAL + SERIAL + SERIAL2 + SERIAL4 + SERIAL8 + SMALLINT + SMALLSERIAL + TEXT + TIME + TIMESTAMP + TIMESTAMPTZ + TIMETZ + TSQUERY + TSVECTOR + TXID_SNAPSHOT + UUID + VARBIT + VARCHAR + XML + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/sql.xml b/src/data/extra/syntax-highlighting/syntax/sql.xml new file mode 100644 index 00000000..1e33b86c --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/sql.xml @@ -0,0 +1,955 @@ + + + + + + + + + BEGIN + CASE + ELSE + ELSIF + END + FOR + IF + LOOP + RETURN + THEN + WHEN + WHILE + + + AND + BETWEEN + IN + IS + LIKE + NOT + OR + + + ACCESS + ACCOUNT + ADD + ADMIN + ADMINISTER + ADVISE + AFTER + AGENT + ALL + ALLOCATE + ALL_ROWS + ALTER + ANALYZE + ANCILLARY + ANY + ARCHIVE + ARCHIVELOG + AS + ASC + ASSERTION + ASSOCIATE + AT + ATTRIBUTE + ATTRIBUTES + AUDIT + AUTHENTICATED + AUTHID + AUTHORIZATION + AUTOALLOCATE + AUTOEXTEND + AUTOMATIC + BACKUP + BECOME + BEFORE + BEHALF + BINDING + BITMAP + BLOCK + BLOCK_RANGE + BODY + BOTH + BOUND + BREAK + BROADCAST + BTITLE + BUFFER_POOL + BUILD + BULK + BY + CACHE + CACHE_INSTANCES + CALL + CANCEL + CASCADE + CATEGORY + CHAINED + CHANGE + CHECK + CHECKPOINT + CHILD + CHOOSE + CHUNK + CLASS + CLEAR + CLONE + CLOSE + CLOSE_CACHED_OPEN_CURSORS + CLUSTER + COLUMN + COLUMNS + COLUMN_VALUE + COMMENT + COMMIT + COMMITTED + COMPATIBILITY + COMPILE + COMPLETE + COMPOSITE_LIMIT + COMPRESS + COMPUTE + CONNECT + CONNECT_TIME + CONSIDER + CONSISTENT + CONSTANT + CONSTRAINT + CONSTRAINTS + CONTAINER + CONTAINS + CONTENTS + CONTEXT + CONTINUE + CONTROLFILE + COPY + COST + CPU_PER_CALL + CPU_PER_SESSION + CREATE + CREATE_STORED_OUTLINES + CROSS + CUBE + CURRENT + CURSOR + CYCLE + DANGLING + DATA + DATABASE + DATAFILE + DATAFILES + DBA + DDL + DEALLOCATE + DEBUG + DECLARE + DEFAULT + DEFERRABLE + DEFERRED + DEFINER + DEGREE + DELETE + DEMAND + DESC + DETERMINES + DICTIONARY + DIMENSION + DIRECTORY + DISABLE + DISASSOCIATE + DISCONNECT + DISKGROUP + DISMOUNT + DISTINCT + DISTRIBUTED + DOMAIN + DROP + DYNAMIC + EACH + EMPTY + ENABLE + ENFORCE + ENTRY + ESCAPE + ESTIMATE + EVENTS + EXCEPT + EXCEPTION + EXCEPTIONS + EXCHANGE + EXCLUDING + EXCLUSIVE + EXEC + EXECUTE + EXISTS + EXPIRE + EXPLAIN + EXPLOSION + EXTENDS + EXTENT + EXTENTS + EXTERNALLY + FAILED_LOGIN_ATTEMPTS + FALSE + FAST + FILE + FILTER + FIRST_ROWS + FLAGGER + FLASHBACK + FLUSH + FOLLOWING + FORCE + FOREIGN + FREELIST + FREELISTS + FRESH + FROM + FULL + FUNCTION + FUNCTIONS + GENERATED + GLOBAL + GLOBALLY + GLOBAL_NAME + GRANT + GROUP + GROUPS + HASH + HASHKEYS + HAVING + HEADER + HEAP + HIERARCHY + HOUR + ID + IDENTIFIED + IDENTIFIER + IDGENERATORS + IDLE_TIME + IMMEDIATE + INCLUDING + INCREMENT + INCREMENTAL + INDEX + INDEXED + INDEXES + INDEXTYPE + INDEXTYPES + INDICATOR + INITIAL + INITIALIZED + INITIALLY + INITRANS + INNER + INSERT + INSTANCE + INSTANCES + INSTEAD + INTERMEDIATE + INTERSECT + INTO + INVALIDATE + ISOLATION + ISOLATION_LEVEL + JAVA + JOIN + KEEP + KEY + KILL + LABEL + LAYER + LEADING + LEFT + LESS + LEVEL + LIBRARY + LIMIT + LINK + LIST + LOCAL + LOCATOR + LOCK + LOCKED + LOGFILE + LOGGING + LOGICAL_READS_PER_CALL + LOGICAL_READS_PER_SESSION + LOGOFF + LOGON + MANAGE + MANAGED + MANAGEMENT + MASTER + MATERIALIZED + MAXARCHLOGS + MAXDATAFILES + MAXEXTENTS + MAXINSTANCES + MAXLOGFILES + MAXLOGHISTORY + MAXLOGMEMBERS + MAXSIZE + MAXTRANS + MAXVALUE + MEMBER + MERGE + METHOD + MINEXTENTS + MINIMIZE + MINIMUM + MINUS + MINUTE + MINVALUE + MODE + MODIFY + MONITORING + MOUNT + MOVE + MOVEMENT + MTS_DISPATCHERS + MULTISET + NAMED + NATURAL + NEEDED + NESTED + NESTED_TABLE_ID + NETWORK + NEVER + NEW + NEXT + NLS_CALENDAR + NLS_CHARACTERSET + NLS_COMP + NLS_CURRENCY + NLS_DATE_FORMAT + NLS_DATE_LANGUAGE + NLS_ISO_CURRENCY + NLS_LANG + NLS_LANGUAGE + NLS_NUMERIC_CHARACTERS + NLS_SORT + NLS_SPECIAL_CHARS + NLS_TERRITORY + NO + NOARCHIVELOG + NOAUDIT + NOCACHE + NOCOMPRESS + NOCYCLE + NOFORCE + NOLOGGING + NOMAXVALUE + NOMINIMIZE + NOMINVALUE + NOMONITORING + NONE + NOORDER + NOOVERRIDE + NOPARALLEL + NORELY + NORESETLOGS + NOREVERSE + NORMAL + NOSEGMENT + NOSORT + NOTHING + NOVALIDATE + NOWAIT + NULL + NULLS + OBJNO + OBJNO_REUSE + OF + OFF + OFFLINE + OID + OIDINDEX + OLD + ON + ONLINE + ONLY + OPCODE + OPEN + OPERATOR + OPTIMAL + OPTIMIZER_GOAL + OPTION + ORDER + ORGANIZATION + OUT + OUTER + OUTLINE + OVER + OVERFLOW + OVERLAPS + OWN + PACKAGE + PACKAGES + PARALLEL + PARAMETERS + PARENT + PARTITION + PARTITIONS + PARTITION_HASH + PARTITION_RANGE + PASSWORD + PASSWORD_GRACE_TIME + PASSWORD_LIFE_TIME + PASSWORD_LOCK_TIME + PASSWORD_REUSE_MAX + PASSWORD_REUSE_TIME + PASSWORD_VERIFY_FUNCTION + PCTFREE + PCTINCREASE + PCTTHRESHOLD + PCTUSED + PCTVERSION + PERCENT + PERMANENT + PLAN + PLSQL_DEBUG + POST_TRANSACTION + PREBUILT + PRECEDING + PREPARE + PRESENT + PRESERVE + PREVIOUS + PRIMARY + PRIOR + PRIVATE + PRIVATE_SGA + PRIVILEGE + PRIVILEGES + PROCEDURE + PROFILE + PUBLIC + PURGE + QUERY + QUEUE + QUOTA + RANDOM + RANGE + RBA + READ + READS + REBUILD + RECORDS_PER_BLOCK + RECOVER + RECOVERABLE + RECOVERY + RECYCLE + REDUCED + REFERENCES + REFERENCING + REFRESH + RELY + RENAME + REPLACE + RESET + RESETLOGS + RESIZE + RESOLVE + RESOLVER + RESOURCE + RESTRICT + RESTRICTED + RESUME + RETURN + RETURNING + REUSE + REVERSE + REVOKE + REWRITE + RIGHT + ROLE + ROLES + ROLLBACK + ROLLUP + ROW + ROWNUM + ROWS + RULE + SAMPLE + SAVEPOINT + SCAN + SCAN_INSTANCES + SCHEMA + SCN + SCOPE + SD_ALL + SD_INHIBIT + SD_SHOW + SEGMENT + SEG_BLOCK + SEG_FILE + SELECT + SELECTIVITY + SEQUENCE + SERIALIZABLE + SERVERERROR + SESSION + SESSIONS_PER_USER + SESSION_CACHED_CURSORS + SET + SHARE + SHARED + SHARED_POOL + SHRINK + SHUTDOWN + SINGLETASK + SIZE + SKIP + SKIP_UNUSABLE_INDEXES + SNAPSHOT + SOME + SORT + SOURCE + SPECIFICATION + SPLIT + SQL_TRACE + STANDBY + START + STARTUP + STATEMENT_ID + STATIC + STATISTICS + STOP + STORAGE + STORE + STRUCTURE + SUBMULTISET + SUBPARTITION + SUBPARTITIONS + SUCCESSFUL + SUMMARY + SUPPLEMENTAL + SUSPEND + SWITCH + SYNONYM + SYSDBA + SYSOPER + SYSTEM + SYS_OP_BITVEC + SYS_OP_ENFORCE_NOT_NULL$ + SYS_OP_NOEXPAND + SYS_OP_NTCIMG$ + TABLE + TABLES + TABLESPACE + TABLESPACE_NO + TABNO + TEMPFILE + TEMPORARY + THAN + THE + THREAD + THROUGH + TIMEOUT + TIMEZONE_HOUR + TIMEZONE_MINUTE + TIME_ZONE + TO + TOPLEVEL + TRACE + TRACING + TRAILING + TRANSACTION + TRANSITIONAL + TRIGGER + TRIGGERS + TRUE + TRUNCATE + TYPE + TYPES + UNARCHIVED + UNBOUND + UNBOUNDED + UNDO + UNIFORM + UNION + UNIQUE + UNLIMITED + UNLOCK + UNRECOVERABLE + UNTIL + UNUSABLE + UNUSED + UPDATABLE + UPDATE + UPD_INDEXES + UPPPER + USAGE + USE + USER_DEFINED + USE_STORED_OUTLINES + USING + VALIDATE + VALIDATION + VALUES + VIEW + WHENEVER + WHERE + WITH + WITHOUT + WORK + WRITE + + + ABS + ACOS + ADD_MONTHS + ASCII + ASCIISTR + ASIN + ATAN + ATAN2 + AVG + BFILENAME + BIN_TO_NUM + BITAND + CARDINALITY + CAST + CEIL + CHARTOROWID + CHR + COALESCE + COLLECT + COMPOSE + CONCAT + CONVERT + CORR + CORR_K + CORR_S + COS + COSH + COUNT + COVAR_POP + COVAR_SAMP + CUME_DIST + CURRENT_DATE + CURRENT_TIMESTAMP + CV + DBTIMEZONE + DECODE + DECOMPOSE + DENSE_RANK + DEPTH + DEREF + DUMP + EMPTY_BLOB + EMPTY_CLOB + EXISTSNODE + EXP + EXTRACT + EXTRACTVALUE + FIRST + FIRST_VALUE + FLOOR + FROM_TZ + GREATEST + GROUP_ID + GROUPING + GROUPING_ID + HEXTORAW + INITCAP + INSTR + INSTRB + LAG + LAST + LAST_DAY + LAST_VALUE + LEAD + LEAST + LENGTH + LENGTHB + LN + LNNVL + LOCALTIMESTAMP + LOG + LOWER + LPAD + LTRIM + MAKE_REF + MAX + MEDIAN + MIN + MOD + MONTHS_BETWEEN + NANVL + NCHR + NEW_TIME + NEXT_DAY + NLS_CHARSET_DECL_LEN + NLS_CHARSET_ID + NLS_CHARSET_NAME + NLS_INITCAP + NLS_LOWER + NLS_UPPER + NLSSORT + NTILE + NULLIF + NUMTODSINTERVAL + NUMTOYMINTERVAL + NVL + NVL2 + ORA_HASH + ORA_ROWSCN + PERCENT_RANK + PERCENTILE_CONT + PERCENTILE_DISC + POWER + POWERMULTISET + POWERMULTISET_BY_CARDINALITY + PRESENTNNV + PRESENTV + RANK + RATIO_TO_REPORT + RAWTOHEX + RAWTONHEX + REF + REFTOHEX + REGEXP_INSTR + REGEXP_LIKE + REGEXP_REPLACE + REGEXP_SUBSTR + REGR_SLOPE + REGR_INTERCEPT + REGR_COUNT + REGR_R2 + REGR_AVGX + REGR_AVGY + REGR_SXX + REGR_SYY + REGR_SXY + REMAINDER + ROUND + ROW_NUMBER + ROWIDTOCHAR + ROWIDTONCHAR + RPAD + RTRIM + SCN_TO_TIMESTAMP + SESSIONTIMEZONE + SIGN + SIN + SINH + SOUNDEX + SQRT + STATS_BINOMIAL_TEST + STATS_CROSSTAB + STATS_F_TEST + STATS_KS_TEST + STATS_MODE + STATS_MW_TEST + STATS_ONE_WAY_ANOVA + STATS_T_TEST_ONE + STATS_T_TEST_PAIRED + STATS_T_TEST_INDEP + STATS_T_TEST_INDEPU + STATS_WSR_TEST + STDDEV + STDDEV_POP + STDDEV_SAMP + SUBSTR + SUBSTRB + SUM + SYS_CONNECT_BY_PATH + SYS_CONTEXT + SYS_DBURIGEN + SYS_EXTRACT_UTC + SYS_GUID + SYS_TYPEID + SYS_XMLAGG + SYS_XMLGEN + SYSDATE + SYSTIMESTAMP + TAN + TANH + TIMESTAMP_TO_SCN + TO_BINARY_DOUBLE + TO_BINARY_FLOAT + TO_CHAR + TO_CLOB + TO_DATE + TO_DSINTERVAL + TO_LOB + TO_MULTI_BYTE + TO_NCHAR + TO_NCLOB + TO_NUMBER + TO_SINGLE_BYTE + TO_TIMESTAMP + TO_TIMESTAMP_TZ + TO_YMINTERVAL + TRANSLATE + TREAT + TRIM + TRUNC + TZ_OFFSET + UID + UNISTR + UPDATEXML + UPPER + USER + USERENV + VALUE + VAR_POP + VAR_SAMP + VARIANCE + VSIZE + WIDTH_BUCKET + XMLAGG + XMLCOLATTVAL + XMLCONCAT + XMLELEMENT + XMLFOREST + XMLSEQUENCE + XMLTRANSFORM + + + ANYDATA + ANYDATASET + ANYTYPE + ARRAY + BFILE + BINARY_DOUBLE + BINARY_FLOAT + BINARY_INTEGER + BLOB + BOOLEAN + CFILE + CHAR + CHARACTER + CLOB + DATE + DAY + DBURITYPE + DEC + DECIMAL + DOUBLE + FLOAT + FLOB + HTTPURITYPE + INT + INTEGER + INTERVAL + LOB + LONG + MLSLABEL + MONTH + NATIONAL + NCHAR + NCLOB + NUMBER + NUMERIC + NVARCHAR + OBJECT + PLS_INTEGER + PRECISION + RAW + REAL + RECORD + ROWID + SECOND + SINGLE + SMALLINT + TIME + TIMESTAMP + URIFACTORYTYPE + URITYPE + UROWID + VARCHAR + VARCHAR2 + VARRAY + VARYING + XMLTYPE + YEAR + ZONE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/stan.xml b/src/data/extra/syntax-highlighting/syntax/stan.xml new file mode 100644 index 00000000..10c16966 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/stan.xml @@ -0,0 +1,129 @@ + + + + + + break + continue + else + for + if + in + return + while + + + reject + print + integrate_ode + integrate_ode_bdf + integrate_ode_rk45 + algebra_solver + + + int + real + vector + ordered + positive_ordered + simplex + unit_vector + row_vector + matrix + cholesky_factor_corr + cholesky_factor_cov + corr_matrix + cov_matrix + void + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/stata.xml b/src/data/extra/syntax-highlighting/syntax/stata.xml new file mode 100644 index 00000000..ce3b435b --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/stata.xml @@ -0,0 +1,3223 @@ + + + + + + + + + addlabels + addlabopts + addplot + bar + barwidth + bin + blabel + caption + center + circle + circle_hollow + color + cols + combine + dot + draw + dropline + frequency + grid + hbar + imargin + labsize + legend + margin + medthick + mlabangle + mlabcolor + mlabel + mlabgap + mlabposition + mlabsize + mlabstyle + mlabtextstyle + mlabvposition + msymbol + name + nodraw + nogrid + over + plotregion + position + ring + rows + scale + size + start + subtitle + t1title + t2title + text + textsize + title + xcommon + xlabel + xline + xscale + xsize + xtitle + ycommon + ylabel + yline + yscale + ysize + ytitle + zero + + + + background + bg + black + blue + bluishgray + brown + cranberry + cyan + dimgray + dkgreen + dknavy + dkorange + ebblue + ebg + edkblue + eggshell + eltblue + eltgreen + emerald + emidblue + erose + fg + foreground + forest_green + gold + gray + green + gs + khaki + lavender + lime + ltblue + ltbluishgray + ltkhaki + magenta + maroon + midblue + midgreen + mint + navy + none + olive + olive_teal + orange + orange_red + pink + purple + red + sand + sandb + sienna + stone + teal + white + yellow + + + + accum + as + ascending + BASE + be + begin + bfgs + bhhh + brrweight + clean + close + clpatt + clpattern + clwidth + cole + color + confirm + continue + cov(unstr) + cov(unstructured) + covariance + dash + define + deft + delmacs + detail + dev + deviations + dfp + difficult + dirname + do + effects + eform + else + emdots + emiterate + emlog + emonly + emtolerance + end + error + estmetric + exchangeable + exit + family + fe + fitted + force + foreach + forvalues + fpc + frequency + function + global + gtolerance + hessian + ic + identity + if + in + independent + intpoints + irr + iterate + jkrweight + lincom + linearized + local + long + ltolerance + macro + manage + meff + meft + minimize + mle + mse + multiplier + noclear + nocons + noconstant + nodots + nofetable + nogroup + noheader + nolog + nolrtest + none + nonrtolerance + noobs + noomit + noretable + nostderr + not + nr + of + offset + or + p + parse + patterns + poststrata + postweight + prefix + program + r2_p + reffects + reml + reset + resid + run + scale + shift + showstep + SITE + size + star + stats + STBPLUS + stfmt + store + strata + syntax + tempfile + tempname + tempvar + tokenize + tolerance + unstructured + until + UPDATES + weight + while + wide + window + x2 + xb + + _b[ + _coeff[ + + ereturn + rreturn + sreturn + + e( + r( + s( + + + + all + BASE + coleq + colfullnames + coln + colnames + constraint + data + dir + display + environment + format + l + label + length + list + nobreak + nofail + permname + PERSONAL + piece + PLUS + quoted + row + roweq + rowfullnames + rown + rownames + SITE + sortedby + STATA + strict + sysdir + tempfile + tempvar + tsnorm + UPDATES + value + variable + + + + allstring + append + args + aweight + born + by + bys + bysort + byte + capture + cfreq + clear + Cns + Co + collinear + columns + comma + compress + connect + console + cpercent + cr + d0 + data + datestring + decode + delimit + depnames + desc + describe + di + diparm_options + display + double + drop + eclass + encode + esample + Ev + exec + fam + fdadescribe + fdasave + fdause + filefilter + float + format + fweight + gen + generate + gr + green + gradient + hold + include + insert + insheet + int + iweight + k + keep + label + Ld + link + load + long + longstub + macrolen + markout + marksample + maximize + meanonly + mlmatsbysum + mlout + mode + model + more + N + namelen + noextend + nofootnote + noi + noisily + nolabel + nonotes + nopreserve + norescale + noscvars + nosummary + nototal + nrtolerance + obs + odbc + off + oim + on + oneway + opg + order + outfile + outsheet + percent + permanently + post + postclose + postfile + preserve + Psi + pweight + query + qui + quietly + rawsum + red + ren + rename + replace + Replay + report + repost + restore + robust + save + saving + SD + SE + search + set + shownrtolerance + sort + sqlfile + sqlshow + STATA + statistics + sum + summarize + t1title + t2title + tab + tabulate + technique + timer + total + unhold + unique + uniquemaster + uniqusing + use + using + V + values + variable + varlist + VCE + waldtest + width + xlabel + xmlsave + xmluse + yellow + ylabel + yline + + + + + + abs + acos + asin + atan + atan2 + atanh + ceil + cloglog + comb + cos + digamma + exp + floor + invcloglog + invlogit + ln + lnfact + lnfactorial + lngamma + log + log10 + max + min + mod + reldif + round + sign + sin + sqrt + sum + tan + tanh + trigamma + trunc + + + + betaden + Binomial + binorm + binormal + chi2 + chi2tail + dgammapda + dgammapdada + dgammapdadx + dgammapdx + dgammapdxdx + F + Fden + Ftail + gammaden + gammap + ibeta + invbinomial + invchi2 + invchi2tail + invF + invFtail + invgammap + invibeta + invnchi2 + invnFtail + invnibeta + invnorm + invnormal + invttail + nbetaden + nchi2 + nFden + nFtail + nibeta + norm + normal + normalden + normd + npnchi2 + tden + ttail + uniform() + + + + abbrev + char + index + indexnot + length + lower + ltrim + match + plural + proper + real + regexm + regexr + regexs + reverse + rtrim + string + strlen + strlower + strltrim + strmatch + strofreal + strpos + strproper + strreverse + strrtrim + strtrim + strupper + subinstr + subinword + substr + trim + upper + word + wordcount + + + + _caller + autocode + byteorder + chop + clip + cond + e + epsdouble + epsfloat + group + inlist + inrange + irecode + matrix + maxbyte + maxdouble + maxfloat + maxint + maxlong + mi + minbyte + mindouble + minfloat + minint + minlong + missing + r + recode + replay + return + s + scalar + + + + d + date + day + dow + doy + halfyear + mdy + month + quarter + week + year + + + + d + daily + dofd + dofh + dofm + dofq + dofw + dofy + h + halfyearly + hofd + m + mofd + monthly + q + qofd + quarterly + tin + twithin + w + weekly + wofd + y + yearly + yh + ym + yofd + yq + yw + + + + cholesky + colnumb + colsof + corr + det + diag + diag0cnt + el + get + hadamard + I + inv + invsym + issym + issymmetric + J + matmissing + matuniform + mreldif + nullmat + rownumb + rowsof + sweep + syminv + trace + vec + vecdiag + + + + anycount + anymatch + anyvalue + at + concat + count + cut + diff + ends + field + fill + group + groupicodes + head + iqr + kurt + label + last + lname + mad + max + maxlength + maxmode + mdev + mean + median + min + minmode + missing + mode + mtr + nummodemissing + pc + prop + pctile + punct + rank + rowfirst + rowlast + rowmax + rowmean + rowmin + rowmiss + rownonmiss + rowsd + rowtotal + sd + seq + skew + std + strok + tag + tail + total + track + trim + truncate + + + + _all + _column + _cons + _dta + _dup + _merge + _n + _newline + _pi + _rc + creturn + c(adopath) + c(adosize) + c(ALPHA) + c(born_date) + c(byteorder) + c(changed) + c(checksum) + c(cmdlen) + c(console) + c(copycolor) + c(current_date) + c(current_time) + c(dirsep) + c(dockable) + c(dockingguides) + c(dp) + c(epsdouble) + c(epsfloat) + c(filedate) + c(filename) + c(flavor) + c(graphics) + c(httpproxy) + c(httpproxyauth) + c(httpproxyhost) + c(httpproxyport) + c(httpproxypw) + c(httpproxyuser) + c(k) + c(level) + c(linegap) + c(linesize) + c(locksplitters) + c(logtype) + c(machine_type) + c(macrolen) + c(matacache) + c(matafavor) + c(matalibs) + c(matalnum) + c(matamofirst) + c(mataoptimize) + c(matastrict) + c(matsize) + c(max_cmdlen) + c(max_k_current) + c(max_k_theory) + c(max_macrolen) + c(max_matsize) + c(max_N_current) + c(max_N_theory) + c(max_width_current) + c(max_width_theory) + c(maxbyte) + c(maxdb) + c(maxdouble) + c(maxfloat) + c(maxint) + c(maxiter) + c(maxlong) + c(maxstrvarlen) + c(maxvar) + c(memory) + c(min_matsize) + c(minbyte) + c(mindouble) + c(minfloat) + c(minint) + c(minlong) + c(mode) + c(Mons) + c(Months) + c(more) + c(N) + c(namelen) + c(os) + c(osdtl) + c(pagesize) + c(persistfv) + c(persistvtopic) + c(pi) + c(printcolor) + c(pwd) + c(rc) + c(reventries) + c(rmsg_time) + c(rmsg) + c(scheme) + c(scrollbufsize) + c(SE) + c(searchdefault) + c(seed) + c(stata_version) + c(sysdir_base) + c(sysdir_oldplace) + c(sysdir_personal) + c(sysdir_plus) + c(sysdir_site) + c(sysdir_stata) + c(sysdir_updates) + c(timeout1) + c(timeout2) + c(trace) + c(tracedepth) + c(traceexpand) + c(tracehilite) + c(traceindent) + c(tracenumber) + c(tracesep) + c(type) + c(update_interval) + c(update_prompt) + c(update_query) + c(varabbrev) + c(varlabelpos) + c(version) + c(virtual) + c(Wdays) + c(Weekdays) + c(width) + c(xptheme) + + + + adosize + checksum + copycolor + dockable + dockingguides + dp + graphics + httpproxy + httpproxyauth + httpproxyhost + httpproxyport + httpproxypw + httpproxyuser + level + linegap + linesize + locksplitters + logtype + matacache + matafavor + matalibs + matalnum + matamofirst + mataoptimize + matastrict + matsize + maxdb + maxiter + maxvar + memory + more + pagesize + persistfv + persistvtopic + printcolor + reventries + rmsg + scheme + scrollbufsize + searchdefault + seed + timeout1 + timeout2 + trace + tracedepth + traceexpand + tracehilite + traceindent + tracenumber + tracesep + type + update_interval + update_prompt + update_query + varabbrev + varlabelpos + version + virtual + xptheme + + + + + _a_cls_msg + _addgph + _assert + _assert_mreldif + _assert_mreldifp + _assert_mreldifs + _assert_obs + _assert_streq + _at + _bigtab + _binperfect + _binperfout + _biplotmat + _brr_sum + _bs_display + _bs_sum + _btcmd + _byoptnotallowed + _ca_parse_normalize + _callerr + _cci + _check_eformopt + _check4gropts + _choice_table + _ckirfset + _cknotsvaroi + _ckvec + _clsarr2list + _cmdxel + _coef_table + _coef_table_header + _confirm_date + _confirm_number_or_date + _copy_mat_stripes + _cpmatnm + _crc2use + _crc4fld + _crcacnt + _crcar1 + _crcause + _crcbin + _crcbygr + _crcchi2 + _crcchkw + _crccip + _crceprs + _crcgldv + _crcglil + _crcird + _crcirr + _crcmeq + _crcnuse + _crcor + _crcphdr + _crcra + _crcrd + _crcrr + _crcseq + _crcshdr + _crcslbl + _crcsrvc + _crcswxx + _crcunab + _crcunit + _crcvarl + _crcwsrv + _crczsku + _cvar + _date2elapsed + _diag2mat + _diparm + _diparm_8 + _dots + _e2r + _egennoby + _evlist + _exp_list_expand + _exp_list_parse + _find_tsops + _fr_area_parse_and_log + _fr_aspect_parse_and_log + _fr_draw_rect + _fr_droplines_draw + _fr_erasearr + _fr_legend_parse_and_log + _fr_merged_implicit + _fr_runlog + _fr_sztextbox_parse_and_log + _fr_tbstyle_parse_and_log + _fr_tedits_parse_and_log + _fr_textbox_parse_and_log + _fr_title_parse_and_log + _fr_x_log_cleanup + _fr_x_log_create + _fracpp + _fracxo + _frr_sztextbox_pnl + _gany + _ganycount + _ganymatch + _ganyvalue + _gconcat + _gcount + _gcut + _gdiff + _gends + _geqany + _get_diparmopts + _get_diparmopts_8 + _get_eformopts + _get_eqspec + _get_gropts + _get_irf + _get_offopt + _getbv + _getcovcorr + _getfilename + _getnewlabelname + _getrhs + _getvarcns + _getxel + _getxel2 + _gfill + _ggroup + _giqr + _gkurt + _gm_edit + _gm_log + _gma + _gmad + _gmax + _gmdev + _gmean + _gmedian + _gmin + _gmode + _gmtr + _gneqany + _gpc + _gpctile + _gr_arrowhead + _gr_atomize_styles + _gr_common_axes + _gr_drawrect + _gr_linkstyles + _gr_symbol_of + _grank + _grfirst + _grlast + _grmax + _grmean + _grmin + _grmiss + _grobs + _growfirst + _growlast + _growmax + _growmean + _growmin + _growmiss + _grownonmiss + _growsd + _growtotal + _grsd + _grsum + _gs_addgrname + _gs_bygraph + _gs_clean_graphlist + _gs_default_bands + _gs_islivefile + _gs_parse_and_log_axoptions + _gs_parse_and_log_axtitle + _gs_parse_and_log_lines + _gs_parse_and_log_tickset + _gs_rdfilehdr + _gs_wrfilehdr + _gs_x_create + _gsd + _gseq + _gskew + _gstd + _gsum + _gtag + _gtotal + _hadamard_verify + _hw_comp + _hw_opt_d0 + _hwsa_comp + _hwsa_opt_d0 + _hwsm_comp + _hwsm_opt_d0 + _isfit + _ivreg_project + _jk_nlegend + _jk_pseudo + _jk_sum + _labels2names + _linemax + _loop_brr + _loop_jknife + _loop_jknife_fw + _loop_jknife_iw + _loop_jknife2 + _loop_rw + _lrtest7 + _m2matrix + _m2scalar + _matplot + _matsort + _mdisplay + _mds_classical + _mds_dataheader + _mds_display + _mds_display_classical + _mds_euclidean + _mds_parse_dopts + _mds_parse_method + _mds_parse_s2d + _mds_s2d + _me_der + _me_der2 + _me_derb + _me_derd + _me_l_der + _me_l_der2 + _mfrmvec + _mka2 + _mkg + _mkkmn + _mksigma + _mkvec + _mprobitestimator + _mtest + _mvec + _no_estat + _no_predict + _nobs + _on_colon_parse + _parmlist + _parse_optexp + _parsewt + _pk_p + _plotpos + _pred_me + _pred_se + _prefix_check4esample + _prefix_checkopt + _prefix_clear + _prefix_command + _prefix_display + _prefix_expand + _prefix_explist + _prefix_footnote + _prefix_getchars + _prefix_getmat + _prefix_legend + _prefix_mlogit + _prefix_model_test + _prefix_note + _prefix_reject + _prefix_relabel_eqns + _prefix_run_error + _prefix_saving + _prefix_title + _prefix_vcenotallowed + _qsort_index + _qsur + _r2e + _repost + _resample_warn + _restore_labels + _returnclear + _rmdcoll + _robust2 + _roccom1 + _roccom1_8 + _rocsen + _rotate_clear + _rotate_text + _score_spec + _set_irf_vars + _shortenpath + _sigfm + _small2dotz + _stata_internalerror + _stcurv + _strip_labels + _sttrend + _stubstar2names + _sum_table + _sumaccum + _sunflower_binar + _svar_cnsmac + _svar_eqmac + _svar_newcns + _svar_post + _svard2 + _svariden + _svaridenlr + _svarlrd2 + _svd + _svy_check_cmdopts + _svy_check_fpc + _svy_check_postw + _svy_check_predict + _svy_check_vce + _svy_fpc_note + _svy_ftest + _svy_ivreg_first + _svy_mkdeff + _svy_mkmeff + _svy_mkvmsp + _svy_mkvsrs + _svy_newrule + _svy_setup + _svy_singleton_note + _svy_subpop + _svy_subpop_note + _svy_summarize + _svy_summarize_legend + _svy_tabulate + _svy2 + _svydes_dlg + _svylc + _svyset + _sw_ood + _ts + _ts_dexp + _ts_exp + _ts_hw + _ts_hwsa + _ts_hwsm + _tsheadr + _tsinchk + _tsma + _ttest + _ttest1 + _ttest2 + _tutends + _var_mka + _varbsf + _vardisprmse + _varfcast + _varfcast_clear + _varfcast_fcast + _varfcast_graph + _varirf + _varsim + _vce_parserun + _vec_ckgraph + _vec_dreduced + _vec_grcroots + _vec_opck + _vec_pgparse + _vec_pgridplots + _vec_postvar + _vecauxdisp + _vecfcast_compute + _vecfcast_compute_w + _vecgetacns + _vecgetcv + _vecgtn + _vecmka + _vecmkapvp + _vecmkce + _vecmkgam + _vecmksi + _vecmktrend + _vecortho + _vecpclean + _vectparse + _vecu + _virf_add + _virf_char + _virf_fck + _virf_mknewfile + _virf_nlen + _virf_use + _writenum + _xtreg_chk_cl + + ac + ac_7 + acprplot + acprplot_7 + adjust + adopath + alpha + ameans + anova_estat + anova_terms + aorder + arch + arch_dr + arch_estat + arch_p + archlm + areg + areg_p + arima + arima_dr + arima_estat + arima_p + asmprobit + asmprobit_estat + asmprobit_lf + asmprobit_p + avplot + avplot_7 + avplots + avplots_7 + bcskew0 + bgodfrey + binreg + bip0_lf + biplot + bipp_lf + bipr_lf + bipr_p + biprobit + bitest + bitesti + bitowt + blogit + bmemsize + boot + bootsamp + bootstrap + bootstrap_8 + boxco_l + boxco_p + boxcox + boxcox_6 + boxcox_p + bprobit + brier + brr + brrstat + bs + bs_7 + bsampl_w + bsample + bsample_7 + bsqreg + bstat + bstat_7 + bstat_8 + bstrap + bstrap_7 + ca + ca_estat + ca_p + cabiplot + camat + canon + canon_8 + canon_8_p + canon_estat + canon_p + caprojection + cc + cchart + cchart_7 + cci + censobs_table + centile + cf + checkdlgfiles + checkhlpfiles + ci + cii + classutil + clear + clo + clog + clog_lf + clog_p + clogi + clogi_sw + clogit + clogit_lf + clogit_p + clogitp + clogl_sw + cloglog + clonevar + clslistarray + cluster + cluster_measures + cluster_stop + cluster_tree + cluster_tree_8 + clustermat + cnr + cnre + cnreg + cnreg_p + cnreg_sw + cnsreg + codebook + collaps4 + collapse + colormult_nb + colormult_nw + compare + conren + contract + copyright + copysource + corc + corr_anti + corr_kmo + corr_smc + corr2data + corrgram + cox_p + cox_sw + coxbase + coxhaz + coxvar + cprplot + cprplot_7 + crc + cross + cs + cscript + cscript_log + csi + ct + ct_is + ctset + ctst_5 + ctst_st + cttost + cumsp + cumsp_7 + cumul + cusum + cusum_7 + cutil + + d + datetof + db + dbeta + de + deff + des + desc + descr + descri + describ + describe + destring + dfbeta + dfgls + dfuller + dirstats + disp_res + disp_s + dotplot + dotplot_7 + dprobit + drawnorm + ds + ds_util + dstdize + duplicates + durbina + dwstat + dydx + egen + eivreg + emdef + eq + ereg + ereg_lf + ereg_p + ereg_sw + ereghet + ereghet_glf + ereghet_glf_sh + ereghet_gp + ereghet_ilf + ereghet_ilf_sh + ereghet_ip + est + est_cfexist + est_cfname + est_clickable + est_expand + est_hold + est_table + est_unhold + est_unholdok + estat + estat_default + estat_summ + estat_vce_only + esti + estimates + etodow + etof + etomdy + expandcl + fac + fact + facto + factor + factor_estat + factor_p + factor_pca_rotated + factor_rotate + factormat + fcast + fcast_compute + fcast_graph + fh_st + fillin + find_hlp_file + findfile + findit + findit_7 + fit + for + for5_0 + fpredict + frac_154 + frac_adj + frac_chk + frac_cox + frac_ddp + frac_dis + frac_dv + frac_in + frac_mun + frac_pp + frac_pq + frac_pv + frac_wgt + frac_xo + fracgen + fracplot + fracplot_7 + fracpoly + fracpred + fron_ex + fron_hn + fron_p + fron_tn + fron_tn2 + frontier + ftodate + ftoe + ftomdy + ftowdate + + gamhet_glf + gamhet_gp + gamhet_ilf + gamhet_ip + gamma + gamma_d2 + gamma_p + gamma_sw + gammahet + gdi_hexagon + gdi_spokes + genrank + genstd + genvmean + gladder + gladder_7 + glim_l01 + glim_l02 + glim_l03 + glim_l04 + glim_l05 + glim_l06 + glim_l07 + glim_l08 + glim_l09 + glim_l10 + glim_l11 + glim_l12 + glim_lf + glim_mu + glim_nw1 + glim_nw2 + glim_nw3 + glim_p + glim_v1 + glim_v2 + glim_v3 + glim_v4 + glim_v5 + glim_v6 + glim_v7 + glm + glm_6 + glm_p + glm_sw + glmpred + glogit + glogit_8 + glogit_p + gmeans + gnbre_lf + gnbreg + gnbreg_5 + gnbreg_p + gomp_lf + gompe_sw + gomper_p + gompertz + gompertzhet + gomphet_glf + gomphet_glf_sh + gomphet_gp + gomphet_ilf + gomphet_ilf_sh + gomphet_ip + gphdot + gphpen + gphprint + gprobi_p + gprobit + gprobit_8 + gr + gr_copy + gr_current + gr_db + gr_describe + gr_dir + gr_draw + gr_draw_replay + gr_drop + gr_edit + gr_editviewopts + gr_example + gr_example2 + gr_export + gr_print + gr_qscheme + gr_query + gr_read + gr_rename + gr_replay + gr_save + gr_set + gr_setscheme + gr_table + gr_undo + gr_use + graph + grebar + greigen + greigen_7 + greigen_8 + grmeanby + grmeanby_7 + gs_fileinfo + gs_filetype + gs_graphinfo + gs_stat + gsort + gwood + h + hadimvo + hareg + hausman + he + heck_d2 + heckma_p + heckman + heckp_lf + heckpr_p + heckprob + hel + help + hereg + hetpr_lf + hetpr_p + hetprob + hettest + hilite + hist + hist_7 + histogram + hlogit + hlu + hmeans + hotel + hotelling + hprobit + hreg + icd9 + icd9_ff + icd9p + iis + impute + imtest + inbase + integ + inten + intreg + intreg_7 + intreg_p + intrg_ll + intrg_ll2 + intrg2_ll + ipolate + iqreg + ir + irf + irf_create + irfm + iri + is_svy + is_svysum + isid + istdize + ivprob_1_lf + ivprob_lf + ivprobit + ivprobit_p + ivreg + ivreg_footnote + ivtob_1_lf + ivtob_lf + ivtobit + ivtobit_p + + jackknife + jacknife + jknife + jknife_6 + jknife_8 + jkstat + joinby + kalarma1 + kap + kap_3 + kapmeier + kappa + kapwgt + kdensity + kdensity_7 + ksm + ksmirnov + ktau + kwallis + labelbook + ladder + levels + levelsof + leverage + lfit + lfit_p + lincom + line + linktest + lloghet_glf + lloghet_glf_sh + lloghet_gp + lloghet_ilf + lloghet_ilf_sh + lloghet_ip + llogi_sw + llogis_p + llogist + llogistic + llogistichet + lnorm_lf + lnorm_sw + lnorma_p + lnormal + lnormalhet + lnormhet_glf + lnormhet_glf_sh + lnormhet_gp + lnormhet_ilf + lnormhet_ilf_sh + lnormhet_ip + lnskew0 + loadingplot + logi + logis_lf + logistic + logistic_p + logit + logit_estat + logit_p + loglogs + logrank + loneway + lookfor + lowess + lowess_7 + lpredict + lrecomp + lroc + lroc_7 + lrtest + lsens + lsens_7 + lsens_x + lstat + ltable + ltable_7 + ltriang + lv + lvr2plot + lvr2plot_7 + + makecns + manova_estat + manova_p + mantel + mat_capp + mat_order + mat_rapp + mata_matdescribe + mata_matsave + mata_matuse + matalabel + matcproc + matlist + matname + matstrik + mcc + mcci + md0_ + md1_ + md1debug_ + md2_ + md2debug_ + mds + mds_estat + mds_p + mdsconfig + mdslong + mdsmat + mdsshepard + mdytoe + mdytof + me_derd + mean + means + median + memsize + meqparse + mer + merg + merge + mfp + mfx + mhelp + mhodds + mixed_ll + mixed_ll_reparm + mkassert + mkmat + mkspline + ml + ml_5 + ml_adjs + ml_bhhhs + ml_c_d + ml_check + ml_clear + ml_cnt + ml_debug + ml_defd + ml_e0 + ml_e0_bfgs + ml_e0_cycle + ml_e0_dfp + ml_e0i + ml_e1 + ml_e1_bfgs + ml_e1_bhhh + ml_e1_cycle + ml_e1_dfp + ml_e2 + ml_e2_cycle + ml_ebfg0 + ml_ebfr0 + ml_ebfr1 + ml_ebh0q + ml_ebhh0 + ml_ebhr0 + ml_ebr0i + ml_ecr0i + ml_edfp0 + ml_edfr0 + ml_edfr1 + ml_edr0i + ml_eds + ml_eer0i + ml_egr0i + ml_elf + ml_elf_bfgs + ml_elf_bhhh + ml_elf_cycle + ml_elf_dfp + ml_elfi + ml_elfs + ml_enr0i + ml_enrr0 + ml_erdu0 + ml_erdu0_bfgs + ml_erdu0_bhhh + ml_erdu0_bhhhq + ml_erdu0_cycle + ml_erdu0_dfp + ml_erdu0_nrbfgs + ml_exde + ml_footnote + ml_geqnr + ml_grad0 + ml_graph + ml_hbhhh + ml_hd0 + ml_hold + ml_init + ml_inv + ml_log + ml_max + ml_mlout + ml_model + ml_nb0 + ml_opt + ml_p + ml_plot + ml_query + ml_rdgrd + ml_repor + ml_s_e + ml_score + ml_searc + ml_technique + ml_unhold + mlf_ + mlog + mlogi + mlogit + mlogit_footnote + mlogit_p + mlopts + mnl0_ + mprobit + mprobit_lf + mprobit_p + mrdu0_ + mrdu1_ + mvdecode + mvencode + mvreg + mvreg_estat + nbreg + nbreg_al + nbreg_lf + nbreg_p + nbreg_sw + newey + newey_7 + newey_p + nl + nl_7 + nl_p + nl_p_7 + nlcom + nlcom_p + nlexp2 + nlexp2_7 + nlexp2a + nlexp2a_7 + nlexp3 + nlexp3_7 + nlgom3 + nlgom3_7 + nlgom4 + nlgom4_7 + nlinit + nllog3 + nllog3_7 + nllog4 + nllog4_7 + nlog_rd + nlogit + nlogit_p + nlogitgen + nlogittree + nlpred + note + notes + nptrend + numlabel + old_ver + olo + olog + ologi + ologi_sw + ologit + ologit_p + ologitp + op_colnm + op_comp + op_diff + op_inv + op_str + opr + opro + oprob + oprob_sw + oprobi + oprobi_p + oprobit + oprobitp + opts_exclusive + orthog + orthpoly + ovtest + + pac + pac_7 + palette + parse_dissim + pause + pca + pca_8 + pca_display + pca_estat + pca_p + pca_rotate + pcamat + pchart + pchart_7 + pchi + pchi_7 + pcorr + pctile + pentium + pergram + pergram_7 + permute + permute_8 + personal + peto_st + pkcollapse + pkcross + pkequiv + pkexamine + pkexamine_7 + pkshape + pksumm + pksumm_7 + pnorm + pnorm_7 + poisgof + poiss_lf + poiss_sw + poisso_p + poisson + poisson_estat + pperron + prais + prais_e + prais_e2 + prais_p + predict + predictnl + print + prob + probi + probit + probit_estat + probit_p + proc_time + procoverlay + procrustes + procrustes_estat + procrustes_p + profiler + prop + proportion + prtest + prtesti + pwcorr + qby + qbys + qchi + qchi_7 + qladder + qladder_7 + qnorm + qnorm_7 + qqplot + qqplot_7 + qreg + qreg_c + qreg_p + qreg_sw + quadchk + quantile + quantile_7 + range + ranksum + ratio + rchart + rchart_7 + rcof + recast + recode + reg + reg3 + reg3_p + regdw + regr + regre + regre_p2 + regres + regres_p + regress + regress_estat + regriv_p + remap + renpfix + repeat + reshape + robvar + roccomp + roccomp_7 + roccomp_8 + rocf_lf + rocfit + rocfit_8 + rocgold + rocplot + rocplot_7 + roctab + roctab_7 + rolling + rologit + rologit_p + rot + rota + rotat + rotate + rotatemat + rreg + rreg_p + runtest + rvfplot + rvfplot_7 + rvpplot + rvpplot_7 + + safesum + sample + sampsi + savedresults + saveold + sc + scatter + scm_mine + sco + scob_lf + scob_p + scobi_sw + scobit + scor + score + scoreplot + scoreplot_help + scree + screeplot + screeplot_help + sdtest + sdtesti + separate + seperate + serrbar + serrbar_7 + set_defaults + sfrancia + shewhart + shewhart_7 + signrank + signtest + simul + simul_7 + simulate + simulate_8 + sktest + slogit + slogit_d2 + slogit_p + smooth + snapspan + spearman + spikeplot + spikeplot_7 + spikeplt + spline_x + split + sqreg + sqreg_p + ssc + st + st_ct + st_hc + st_hcd + st_hcd_sh + st_is + st_issys + st_note + st_promo + st_set + st_show + st_smpl + st_subid + stack + statsby + statsby_8 + stbase + stci + stci_7 + stcox + stcox_estat + stcox_fr + stcox_fr_ll + stcox_p + stcox_sw + stcoxkm + stcoxkm_7 + stcstat + stcurv + stcurve + stcurve_7 + stdes + stem + stepwise + stereg + stfill + stgen + stir + stjoin + stmc + stmh + stphplot + stphplot_7 + stphtest + stphtest_7 + stptime + strate + strate_7 + streg + streg_sw + streset + sts + sts_7 + stset + stsplit + stsum + sttocc + sttoct + stvary + stweib + suest + suest_8 + sunflower + sureg + survcurv + survsum + svar + svar_p + svmat + svy + svy_disp + svy_dreg + svy_est + svy_est_7 + svy_estat + svy_get + svy_gnbreg_p + svy_head + svy_header + svy_heckman_p + svy_heckprob_p + svy_intreg_p + svy_ivreg_p + svy_logistic_p + svy_logit_p + svy_mlogit_p + svy_nbreg_p + svy_ologit_p + svy_oprobit_p + svy_poisson_p + svy_probit_p + svy_regress_p + svy_sub + svy_sub_7 + svy_x + svy_x_7 + svy_x_p + svydes + svydes_8 + svygen + svygnbreg + svyheckman + svyheckprob + svyintreg + svyintreg_7 + svyintrg + svyivreg + svylc + svylog_p + svylogit + svymarkout + svymarkout_8 + svymean + svymlog + svymlogit + svynbreg + svyolog + svyologit + svyoprob + svyoprobit + svyopts + svypois + svypois_7 + svypoisson + svyprobit + svyprobt + svyprop + svyprop_7 + svyratio + svyreg + svyreg_p + svyregress + svyset + svyset_7 + svyset_8 + svytab + svytab_7 + svytest + svytotal + sw + sw_8 + swcnreg + swcox + swereg + swilk + swlogis + swlogit + swologit + swoprbt + swpois + swprobit + swqreg + swtobit + swweib + symmetry + symmi + symplot + symplot_7 + sysdescribe + sysuse + szroeter + tab_or + tab1 + tab2 + tabi + table + tabodds + tabodds_7 + tabstat + te + tes + test + testnl + testparm + teststd + tetrachoric + time_it + tis + tob + tobi + tobit + tobit_p + tobit_sw + tostring + total + treat_ll + treatr_p + treatreg + trim + trnb_cons + trnb_mean + trpoiss_d2 + trunc_ll + truncr_p + truncreg + tsappend + tset + tsfill + tsline + tsline_ex + tsreport + tsrline + tsset + tssmooth + tsunab + ttest + ttesti + tut_chk + tut_wait + tutorial + tw + tware_st + two + twoway + twoway__fpfit_serset + twoway__function_gen + twoway__histogram_gen + twoway__ipoint_serset + twoway__ipoints_serset + twoway__kdensity_gen + twoway__lfit_serset + twoway__normgen_gen + twoway__pci_serset + twoway__qfit_serset + twoway__scatteri_serset + twoway__sunflower_gen + twoway_ksm_serset + typeof + unab + unabbrev + uselabel + + var + var_mkcompanion + var_p + varbasic + varfcast + vargranger + varirf + varirf_add + varirf_cgraph + varirf_create + varirf_ctable + varirf_describe + varirf_dir + varirf_drop + varirf_erase + varirf_graph + varirf_ograph + varirf_rename + varirf_set + varirf_table + varlmar + varnorm + varsoc + varstable + varstable_w + varstable_w2 + varwle + vce + vec + vec_fevd + vec_mkphi + vec_p + vec_p_w + vecirf_create + veclmar + veclmar_w + vecnorm + vecnorm_w + vecrank + vecstable + verinst + viewsource + vif + vwls + wdatetof + webdescribe + webseek + webuse + weib_lf + weib_lf0 + weib1_lf + weib2_lf + weibhet_glf + weibhet_glf_sh + weibhet_glfa + weibhet_glfa_sh + weibhet_gp + weibhet_ilf + weibhet_ilf_sh + weibhet_ilfa + weibhet_ilfa_sh + weibhet_ip + weibu_sw + weibul_p + weibull + weibull_c + weibull_s + weibullhet + whelp + wilc_st + wilcoxon + wntestb + wntestb_7 + wntestq + xchart + xchart_7 + xcorr + xcorr_7 + xi + xi_6 + xpose + xt_iis + xt_tis + xtab_p + xtabond + xtbin_p + xtclog + xtcloglog + xtcloglog_8 + xtcloglog_d2 + xtcloglog_re_p + xtcnt_p + xtcorr + xtdata + xtdes + xtfront_p + xtfrontier + xtgee + xtgee_elink + xtgee_estat + xtgee_makeivar + xtgee_p + xtgee_plink + xtgls + xtgls_p + xthaus + xthausman + xtht_p + xthtaylor + xtile + xtint_p + xtintreg + xtintreg_8 + xtintreg_d2 + xtintreg_p + xtivp_1 + xtivp_2 + xtivreg + xtline + xtline_ex + xtlogit + xtlogit_8 + xtlogit_d2 + xtlogit_fe_p + xtlogit_pa_p + xtlogit_re_p + xtmixed + xtmixed_estat + xtmixed_p + xtnb_fe + xtnb_lf + xtnbreg + xtnbreg_pa_p + xtnbreg_refe_p + xtpcse + xtpcse_p + xtpois + xtpoisson + xtpoisson_d2 + xtpoisson_pa_p + xtpoisson_refe_p + xtpred + xtprobit + xtprobit_8 + xtprobit_d2 + xtprobit_re_p + xtps_fe + xtps_lf + xtps_ren + xtps_ren_8 + xtrar_p + xtrc + xtrc_p + xtrchh + xtrefe_p + xtreg + xtreg_be + xtreg_fe + xtreg_ml + xtreg_pa_p + xtreg_re + xtregar + xtrere_p + xtsf_ll + xtsf_llti + xtsum + xttab + xttest0 + xttobit + xttobit_8 + xttobit_p + xttrans + yx + yxview__barlike_draw + yxview_area_draw + yxview_bar_draw + yxview_dot_draw + yxview_dropline_draw + yxview_function_draw + yxview_iarrow_draw + yxview_ilabels_draw + yxview_normal_draw + yxview_pcarrow_draw + yxview_pcbarrow_draw + yxview_pccapsym_draw + yxview_pcscatter_draw + yxview_pcspike_draw + yxview_rarea_draw + yxview_rbar_draw + yxview_rbarm_draw + yxview_rcap_draw + yxview_rcapsym_draw + yxview_rconnected_draw + yxview_rline_draw + yxview_rscatter_draw + yxview_rspike_draw + yxview_spike_draw + yxview_sunflower_draw + zap_s + zinb + zinb_llf + zinb_plf + zip + zip_llf + zip_p + zip_plf + zt_ct_5 + zt_hc_5 + zt_hcd_5 + zt_is_5 + zt_iss_5 + zt_sho_5 + zt_smp_5 + ztbase_5 + ztcox_5 + ztdes_5 + ztereg_5 + ztfill_5 + ztgen_5 + ztir_5 + ztjoin_5 + ztnb + ztnb_p + ztp + ztp_p + zts_5 + ztset_5 + ztspli_5 + ztsum_5 + zttoct_5 + ztvary_5 + ztweib_5 + + + + _cholinv + _cholsolve + _corr + _edittoint + _edittointtol + _edittozero + _edittozerotol + _eigen_work + _eigensystem + _eigenvalues + _equilc + _equilr + _equilrc + _ftell + _fullsvd + _hqrd + _hqrdp + _invlower + _jumble + _lefteigensystem + _lowertriangle + _lud + _lud_la + _luinv + _lusolve + _matexpsym + _matlogsym + _matpowersym + _mprobit_outer_prod + _mprobit_quadrature + _mprobit_quadrature_eval + _mprobit_quadrature_m + _mprobit_select + _mprobit_simulator + _mprobit_simulator_case_g + _mprobit_simulator_lk + _mprobit_simulator_m + _mprobit_simulator_mi + _mprobit_validate_choice + _mprobit_weights_roots_laguerre + _perhapsequilc + _perhapsequilr + _perhapsequilrc + _pinv + _qrinv + _qrsolve + _rowswap + _solvelower + _solveupper + _sort + _svd + _svdsv + _svsolve + _svy_design + _svy_group_sum + _svy_identify + _svy_mean + _svy_mean_post + _svy_mean_std + _svy_mean_stdpost + _svy_over_expand + _svy_over_sizes + _svy_post_sizes + _svy_ratio + _svy_ratio_post + _svy_ratio_std + _svy_ratio_stdpost + _svy_srs_variance + _svy_srssub_variance + _svy_std_sizes + _svy_total + _svy_total_post + _svy_variance + _symeigen_work + _symeigensystem + _symeigenvalues + _symmatfunc_work + _uppertriangle + _xtm_beta + _xtm_blup + _xtm_blup_save + _xtm_blup_save_u + _xtm_blup_u + _xtm_cleanup + _xtm_covtype + _xtm_de_th_u + _xtm_delta_to_theta + _xtm_det_upper + _xtm_em_get_rij + _xtm_em_get_uij + _xtm_em_iter + _xtm_em_iter_u + _xtm_em_solve + _xtm_fact_expand + _xtm_ga_th_u + _xtm_gamma_to_theta + _xtm_get_delta + _xtm_get_delta_u + _xtm_invert_R + _xtm_logdetr00 + _xtm_logdetr00_u + _xtm_matexp + _xtm_matlog + _xtm_mixed_ll + _xtm_mixed_ll_u + _xtm_mixed_ll_uu + _xtm_mk_eqs + _xtm_ml_eqlist + _xtm_ml_eqlist_wrk + _xtm_setup + _xtm_start + _xtm_start_collapse + _xtm_start_u + _xtm_th_de_u + _xtm_th_ga_u + _xtm_theta_to_delta + _xtm_theta_to_gamma + acos + acosh + aggregate + array + asin + asinh + assert + asserteq + atan + atanh + blockdiag + boolean + break + byte + case + cat + catch + chdir + cholesky + cholinv + cholsolve + class + cloglog + collate + colmax + colmin + colscalefactors + colshape + colvector + complex + cond + const + continue + convolve + convolveslowly + Corr + correlation + Corrslowly + corruppercase + cosh + deconvolve + default + delegate + delete + designmatrix + det + dettriangular + diag + diag0cnt + do + double + dsign + e + editmissing + edittoint + edittointtol + edittozero + edittozerotol + editvalue + eigensystem + eigenvalues + else + eltypedef + end + enum + explicit + export + external + fft + fileexists + findfile + float + for + friend + ftell + ftfreqs + ftpad + ftperiodogram + ftretime + ftunwrap + ftwrap + fullsdiag + fullsvd + function + gamma + global + goto + helloworld + Hilbert + hqrd + hqrdmultq + hqrdmultq1t + hqrdp + hqrdq + hqrdq1 + hqrdr + hqrdr1 + if + inline + int + invcloglog + invfft + invHilbert + invlogit + invlower + invorder + invslowfft + invslowft + invvech + isdiagonal + jumble + lefteigensystem + local + log10 + logit + long + lowertriangle + lud + luinv + lusolve + makesymmetric + mat_norm + mata + matexpsym + matlogsym + matpowersym + matrix + max + mean + meanvariance + min + mkdir + mmat_ + mmat_describe + mmat_expandlist + mmat_readerror + mmat_save + mmat_use + mmat_writeerror + namespace + new + norm + NULL + numeric + operator + orgtypedef + panelsetup + panelsetup_u + panelstats + panelsubmatrix + panelsubview + pathlist + pathsubsysdir + pi + pinv + pointer + polyadd + polyadd_expand + polyderiv + polydiv + polyeval + polyinteg + polymorphic + polymult + polyroots + polysolve + polytrim + pragma + private + protected + public + qrd + qrdp + qrinv + qrsolve + quad + quadcorrelation + quadmeanvariance + quadrant + quadvariance + range + rangen + rank + rank_from_singular_values + real + return + revorder + rmdir + rowmax + rowmin + rowscalefactors + rowvector + scalar + scalar_norm + short + sign + signed + sinh + sizeof + slowfft + slowft + solve_tol + solve_tolscale + solvelower + solveupper + sort + spline3 + spline3eval + splineeval + st_islmname + static + string + struct + super + svd + svdsv + svsolve + switch + symeigensystem + symeigenvalues + tanh + template + this + throw + Toeplitz + trace + trace_prod + transmorphic + transposeonly + try + typedef + typename + union + uniqrows + unitcircle + unorder + unsigned + uppertriangle + using + Vandermonde + variance + vec + vec_norm + vech + vector + version + virtual + void + volatile + while + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/stl.xml b/src/data/extra/syntax-highlighting/syntax/stl.xml new file mode 100644 index 00000000..41f48569 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/stl.xml @@ -0,0 +1,31 @@ + + + + + + solid + facet + normal + outer + loop + vertex + endloop + endfacet + endsolid + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/systemc.xml b/src/data/extra/syntax-highlighting/syntax/systemc.xml new file mode 100644 index 00000000..eb43a8e3 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/systemc.xml @@ -0,0 +1,133 @@ + + + + + + + + sensitive + + + dont_initialize + gen_unique_name + name + next_trigger + sc_assert_fail + sc_copyright + sc_cycle + sc_initialize + sc_simulation_time + sc_start + sc_stop + sc_get_default_time_unit + sc_get_default_time_resolution + sc_time_stamp + sc_version + timed_out + wait + sc_trace + sc_create_vcd_trace_file + sc_close_vcd_trace_file + + + + SC_MODULE + SC_CTOR + SC_METHOD + SC_THREAD + + + sc_time_unit + sc_clock + sc_int + sc_uint + sc_bigint + sc_biguint + sc_logic + sc_lv + sc_bit + sc_bv + sc_fixed + sc_ufixed + sc_fixed_fast + sc_ufixed_fast + sc_fix + sc_ufix + sc_buffer + sc_fifo + sc_mutex + sc_semaphore + sc_signal + sc_signal_resolved + sc_signal_rv + sc_fifo_in_if + sc_fifo_out_if + sc_mutex_if + sc_semaphore_if + sc_signal_in_if + sc_signal_inout_if + sc_master + sc_inmaster + sc_outmaster + sc_inout_master + sc_indexed + sc_slave + sc_inslave + sc_outslave + sc_inoutslave + sc_in + sc_out + sc_inout + sc_noHandshake + sc_fullHandshake + sc_memfullHandshake + sc_enable_Handshake + sc_memenHandshake + sc_link_mp + sc_trace_file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/systemverilog.xml b/src/data/extra/syntax-highlighting/syntax/systemverilog.xml new file mode 100644 index 00000000..b0e78aa1 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/systemverilog.xml @@ -0,0 +1,1005 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + defparam + deassign + + + + DPI + DPI-C + import + export + context + + + + assert + assume + cover + expect + disable + iff + binsof + intersect + first_match + throughout + within + + + + coverpoint + cross + wildcard + bins + ignore_bins + illegal_bins + + + + genvar + + + + if + else + unique + priority + matches + + + + default + + + + forever + repeat + while + for + do + foreach + break + continue + return + + + + pulsestyle_onevent + pulsestyle_ondetect + noshowcancelled + showcancelled + ifnone + + + + initial + final + always + always_comb + always_ff + always_latch + + + + alias + assign + force + release + + + + posedge + negedge + edge + wait + wait_order + + + + timeunit + timeprecision + s + ms + ns + us + ns + ps + fs + step + + + + new + extends + this + super + protected + local + rand + randc + bind + + + + constraint + solve + before + dist + inside + with + + + + virtual + pure + extern + forkjoin + + + + design + instance + cell + liblist + use + + + + library + incdir + include + + + + modport + + + + sync_accept_on + reject_on + accept_on + sync_reject_on + restrict + let + until + until_with + unique0 + eventually + s_until + s_always + s_eventually + s_nexttime + s_until_with + global + untyped + implies + weak + strong + nexttime + + + + + parameter + localparam + specparam + + input + output + inout + ref + + byte + shortint + int + integer + longint + time + + bit + logic + reg + + supply0 + supply1 + tri + triand + trior + trireg + tri0 + tri1 + wire + uwire + wand + wor + + signed + unsigned + + shortreal + real + realtime + + type + void + + struct + union + tagged + + const + var + automatic + static + packed + vectored + scalared + + typedef + enum + string + chandle + event + + null + + + + `__FILE__ + `__LINE__ + `begin_keywords + `celldefine + `default_nettype + `define + `else + `elsif + `end_keywords + `endcelldefine + `endif + `ifdef + `ifndef + `include + `line + `nounconnected_drive + `pragma + `resetall + `timescale + `unconnected_drive + `undef + `undefineall + + + + $finish + $stop + $exit + $realtime + $stime + $time + $printtimescale + $timeformat + $bitstoreal + $realtobits + $bitstoshortreal + $shortrealtobits + $itor + $rtoi + $signed + $unsigned + $cast + $bits + $isunbounded + $typename + $unpacked_dimensions + $dimensions + $left + $right + $low + $high + $increment + $size + $clog2 + $asin + $ln + $acos + $log10 + $atan + $exp + $atan2 + $sqrt + $hypot + $pow + $sinh + $floor + $cosh + $ceil + $tanh + $sin + $asinh + $cos + $acosh + $tan + $atanh + $fatal + $error + $warning + $info + $fatal + $error + $warning + $info + $asserton + $assertoff + $assertkill + $assertpasson + $assertpassoff + $assertfailon + $assertfailoff + $assertnonvacuouson + $assertvacuousoff + $onehot + $onehot0 + $isunknown + $sampled + $rose + $fell + $stable + $changed + $past + $countones + $past_gclk + $rose_gclk + $fell_gclk + $stable_gclk + $changed_gclk + $future_gclk + $rising_gclk + $falling_gclk + $steady_gclk + $changing_gclk + $coverage_control + $coverage_get_max + $coverage_get + $coverage_merge + $coverage_save + $get_coverage + $set_coverage_db_name + $load_coverage_db + $random + $dist_chi_square + $dist_erlang + $dist_exponential + $dist_normal + $dist_poisson + $dist_t + $dist_uniform + $q_initialize + $q_add + $q_remove + $q_full + $q_exam + $async$and$array + $async$and$plane + $async$nand$array + $async$nand$plane + $async$or$array + $async$or$plane + $async$nor$array + $async$nor$plane + $sync$and$array + $sync$and$plane + $sync$nand$array + $sync$nand$plane + $sync$or$array + $sync$or$plane + $sync$nor$array + $sync$nor$plane + $system + $display + $write + $displayb + $writeb + $displayh + $writeh + $displayo + $writeo + $strobe + $monitor + $strobeb + $monitorb + $strobeh + $monitorh + $strobeo + $monitoro + $monitoroff + $monitoron + $fclose + $fopen + $fdisplay + $fwrite + $fdisplayb + $fwriteb + $fdisplayh + $fwriteh + $fdisplayo + $fwriteo + $fstrobe + $fmonitor + $fstrobeb + $fmonitorb + $fstrobeh + $fmonitorh + $fstrobeo + $fmonitoro + $swrite + $sformat + $swriteb + $sformatf + $swriteh + $fgetc + $swriteo + $ungetc + $fscanf + $fgets + $fread + $sscanf + $fseek + $rewind + $fflush + $ftell + $feof + $ferror + $readmemb + $readmemh + $writememb + $writememh + $test$plusargs + $value$plusargs + $dumpfile + $dumpvars + $dumpoff + $dumpon + $dumpall + $dumplimit + $dumpflush + $dumpports + $dumpportsoff + $dumpportson + $dumpportsall + $dumpportslimit + $dumpportsflush + + + + pullup + pulldown + cmos + rcmos + nmos + pmos + rnmos + rpmos + and + nand + or + nor + xor + xnor + not + buf + tran + rtran + tranif0 + tranif1 + rtranif0 + rtranif1 + bufif0 + bufif1 + notif0 + notif1 + + + + + strong0 + strong1 + pull0 + pull1 + weak0 + weak1 + highz0 + highz1 + + small + medium + large + + + randomize + mailbox + semaphore + put + get + try_put + try_get + peek + try_peek + process + state + self + status + kill + await + suspend + resume + + size + delete + insert + num + first + last + next + prev + pop_front + pop_back + push_front + push_back + find + find_index + find_first + find_last + find_last_index + min + max + unique_index + reverse + sort + rsort + shuffle + sum + product + + List + List_Iterator + neq + eq + data + empty + front + back + start + finish + insert_range + erase + erase_range + set + swap + clear + purge + + + + begin + + + end + + + package + + + endpackage + + + macromodule + + + module + + + endmodule + + + generate + + + endgenerate + + + program + + + endprogram + + + class + + + endclass + + + function + + + endfunction + + + case + + + casex + + + casez + + + randcase + + + endcase + + + interface + + + endinterface + + + clocking + + + endclocking + + + task + + + endtask + + + primitive + + + endprimitive + + + fork + + + join + + + join_any + + + join_none + + + covergroup + + + endgroup + + + checker + + + endchecker + + + property + + + endproperty + + + randsequence + + + sequence + + + endsequence + + + specify + + + endspecify + + + config + + + endconfig + + + table + + + endtable + + + extern + + + pure + + + typedef + + + import + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/tads3.xml b/src/data/extra/syntax-highlighting/syntax/tads3.xml new file mode 100644 index 00000000..7df8690a --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/tads3.xml @@ -0,0 +1,176 @@ + + + + + + + + + abort + and + argcount + break + case + catch + class + construct + continue + default + definingobj + delegated + dictionary + do + else + enum + exit + export + extern + finalize + finally + for + foreach + function + goto + grammar + if + in + inherited + intrinsic + is + local + modify + new + nil + not + object + or + property + propertyset + replace + replaced + return + self + static + switch + targetobj + targetprop + template + throw + token + transient + true + try + while + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/taskjuggler.xml b/src/data/extra/syntax-highlighting/syntax/taskjuggler.xml new file mode 100644 index 00000000..bb81dfe4 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/taskjuggler.xml @@ -0,0 +1,390 @@ + + + + + + + account + project + task + resource + shift + scenario + + + accountid + accountreport + accumulate + allocate + allowredefinitions + alternative + barlabels + booking + bookings + caption + celltext + cellurl + chart + columns + completed + complete + copyright + cost + credit + criticalness + csvaccountreport + csvresourcereport + csvtaskreport + currencydigits + currencyformat + currency + customer + dailymax + dailyworkinghours + db + depends + disabled + drawemptycontainersastasks + duration + efficiency + effort + empty + enabled + endbuffer + endbufferstart + endcredit + end + endsAfter + endsBefore + export + extend + finished + flags + follows + freeload + gapduration + gaplength + headline + hideaccount + hidecelltext + hidecellurl + hideresource + hidetask + hierarchindex + hierarchlevel + hierarchno + htmlaccountreport + htmlmonthlycalendar + htmlresourcereport + htmlstatusreport + htmltaskreport + htmlweeklycalendar + icalreport + id + include + index + inherit + inprogress + journalentry + label + late + length + limits + load + loadunit + macro + mandatory + maxeffort + maxend + maxstart + milestone + mineffort + minend + minstart + monthlymax + name + no + note + notimestamp + notstarted + now + numberformat + ontime + optimize + order + overtime + pathcriticalness + period + period + persistent + precedes + priority + profit + projectid + projectids + projection + project + rate + rawhead + rawstylesheet + rawtail + reference + resourceid + resourcereport + resources + responsibilities + responsible + revenue + rollupaccount + rollupresource + rolluptask + scenario + scenarios + scheduled + schedule + scheduling + select + separator + seqno + shorttimeformat + showprojectids + sloppy + sortaccounts + sortresources + sorttasks + startbufferend + startbuffer + startcredit + start + startsAfter + startsBefore + status + statusnote + strict + subtitle + subtitleurl + supplement + table + taskattributes + taskid + taskprefix + taskreport + taskroot + text + timeformat + timezone + timingresolution + title + titleurl + total + tree + treeLevel + url + utilization + vacation + version + weekdays + weeklymax + weekstartsmonday + weekstartssunday + workinghours + xml + xmlreport + yearlyworkingdays + + + accountid + alap + all + asap + baseline + completeddown + completedup + containstask + criticalnessdown + criticalnessup + daily + day + days + enddown + endup + fri + fullnamedown + fullnameup + hasAssignments + hours + iddown + idup + indexdown + indexup + inprogressearly + inprogresslate + isAccount + isactualallocated + isAllocated + isAllocatedToProject + isAnAccount + isAResource + isatask + isATask + isChildOf + isDutyOf + isLeaf + isMilestone + isOnCriticalPath + isParentOf + isplanallocated + isResource + issubtaskof + isTask + isTaskOfProject + isTaskStatus + longauto + maxeffortdown + maxeffortup + maxloaded + minallocated + mineffortdown + mineffortup + minloaded + minslackrate + minutes + m + mon + month + monthly + months + namedown + nameup + off + pathcriticalnessdown + pathcriticalnessup + prioritydown + priorityup + properties + quarter + quarterly + random + ratedown + rateup + resourceid + responsibledown + responsibleup + sat + sequencedown + sequenceup + shifts + shortauto + startbufferend + startdown + startup + statusdown + statusup + sun + tasks + thu + tue + undefined + wed + week + weekly + weeks + year + yearly + years + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/tcl.xml b/src/data/extra/syntax-highlighting/syntax/tcl.xml new file mode 100644 index 00000000..3de18761 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/tcl.xml @@ -0,0 +1,565 @@ + + + + + + + + + + + + after + append + AppleScript + argv + argc + array + auto_execk + auto_execok + auto_import + auto_load + auto_mkindex + auto_mkindex_old + auto_path + auto_qualify + auto_reset + beep + bell + binary + bind + bindtags + bgerror + break + button + canvas + case + catch + cd + chan + checkbutton + clipboard + clock + close + combobox + concat + console + continue + dde + destroy + dict + else + elseif + encoding + entry + env + eof + error + errorCode + errorInfo + eval + event + exec + exit + expr + fblocked + fconfigure + fcopy + file + fileevent + flush + focus + font + for + foreach + format + frame + gets + glob + global + grab + grid + history + if + image + incr + info + interp + join + label + labelframe + lappend + lassign + lindex + linsert + list + listbox + llength + load + lower + lrange + lremove + lrepeat + lreplace + lreverse + lsearch + lset + lsort + menu + menubutton + message + namespace + notebook + open + option + OptProc + pack + package + panedwindow + parray + pid + place + pkg_mkIndex + proc + progressbar + puts + pwd + radiobutton + raise + read + regexp + registry + regsub + rename + resource + return + scale + scan + scrollbar + seek + selection + send + separator + set + sizegrip + socket + source + spinbox + split + string + style + subst + switch + tclLog + tcl_endOfWord + tcl_findLibrary + tcl_library + tcl_patchLevel + tcl_platform + tcl_precision + tcl_rcFileName + tcl_rcRsrcName + tcl_startOfNextWord + tcl_startOfPreviousWord + tcl_traceCompile + tcl_traceExec + tcl_version + tcl_wordBreakAfter + tcl_wordBreakBefore + tell + text + time + tk + tkTabToWindow + tkwait + tk_chooseColor + tk_chooseDirectory + tk_focusFollowMouse + tk_focusNext + tk_focusPrev + tk_getOpenFile + tk_getSaveFile + tk_library + tk_menuSetFocus + tk_messageBox + tk_optionMenu + tk_patchLevel + tk_popup + tk_strictMotif + tk_textCopy + tk_textCut + tk_textPaste + tk_version + toplevel + trace + traverseTo + treeview + unknown + unload + unset + update + uplevel + upvar + variable + vwait + while + winfo + wm + + + + add + args + atime + attributes + body + bytelength + cancel + channels + clicks + cmdcount + commands + compare + complete + convertfrom + convertto + copy + default + delete + dirname + equal + executable + exists + extension + first + forget + format + functions + globals + hostname + idle + ifneeded + index + info + is + isdirectory + isfile + join + last + length + level + library + link + loaded + locals + lstat + map + match + mkdir + mtime + nameofexecutable + names + nativename + normalize + number + owned + patchlevel + pathtype + present + procs + provide + range + readable + readlink + remove + rename + repeat + replace + require + rootname + scan + script + seconds + separator + sharedlibextension + size + split + stat + system + tail + tclversion + tolower + totitle + toupper + trim + trimleft + trimright + type + unknown + variable + vars + vcompare + vdelete + versions + vinfo + volumes + vsatisfies + wordend + wordstart + writable + + activate + actual + addtag + append + appname + aspect + atom + atomname + bbox + bind + broadcast + canvasx + canvasy + caret + cells + cget + children + class + clear + client + clone + colormapfull + colormapwindows + command + configure + containing + coords + create + current + curselection + dchars + debug + deiconify + delta + depth + deselect + dlineinfo + dtag + dump + edit + entrycget + entryconfigure + families + find + flash + focus + focusmodel + fpixels + fraction + frame + generate + geometry + get + gettags + grid + group + handle + height + hide + iconbitmap + iconify + iconmask + iconname + iconposition + iconwindow + icursor + id + identify + image + insert + interps + inuse + invoke + ismapped + itemcget + itemconfigure + keys + lower + manager + mark + maxsize + measure + metrics + minsize + move + name + nearest + overrideredirect + own + panecget + paneconfigure + panes + parent + pathname + pixels + pointerx + pointerxy + pointery + positionfrom + post + postcascade + postscript + protocol + proxy + raise + release + reqheight + reqwidth + resizable + rgb + rootx + rooty + scale + scaling + screen + screencells + screendepth + screenheight + screenmmheight + screenmmwidth + screenvisual + screenwidth + search + see + select + selection + server + set + show + sizefrom + stackorder + state + status + tag + title + toplevel + transient + types + unpost + useinputmethods + validate + values + viewable + visual + visualid + visualsavailable + vrootheight + vrootwidth + vrootx + vrooty + width + window + windowingsystem + withdraw + x + xview + y + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/tcsh.xml b/src/data/extra/syntax-highlighting/syntax/tcsh.xml new file mode 100644 index 00000000..1c96f114 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/tcsh.xml @@ -0,0 +1,817 @@ + + + + + + + +]> + + + + + + + function + in + . + + + + : + alias + alloc + bg + bindkey + break + builtins + bye + cd + chdir + complete + continue + dirs + echo + echotc + eval + exec + exit + fg + filetest + glob + hashstat + history + hup + inlib + jobs + kill + limit + log + login + logout + ls-F + migrate + newgrp + nice + nohup + notify + onintr + popd + printenv + pushd + rehash + repeat + sched + settc + setty + shift + source + stop + suspend + telltc + time + umask + unalias + uncomplete + unhash + unlimit + ver + wait + watchlog + where + which + + + + unset + unsetenv + + + + + arch + awk + bash + bunzip2 + bzcat + bzcmp + bzdiff + bzegrep + bzfgrep + bzgrep + bzip2 + bzip2recover + bzless + bzmore + cat + chattr + chgrp + chmod + chown + chvt + cp + date + dd + deallocvt + df + dir + dircolors + dmesg + dnsdomainname + domainname + du + dumpkeys + echo + ed + egrep + false + fgconsole + fgrep + fuser + gawk + getkeycodes + gocr + grep + groff + groups + gunzip + gzexe + gzip + hostname + igawk + install + kbd_mode + kbdrate + killall + last + lastb + link + ln + loadkeys + loadunimap + login + ls + lsattr + lsmod + lsmod.old + mapscrn + mesg + mkdir + mkfifo + mknod + mktemp + more + mount + mv + nano + netstat + nisdomainname + nroff + openvt + pgawk + pidof + ping + ps + pstree + pwd + rbash + readlink + red + resizecons + rm + rmdir + run-parts + sash + sed + setfont + setkeycodes + setleds + setmetamode + setserial + sh + showkey + shred + sleep + ssed + stat + stty + su + sync + tar + tempfile + touch + troff + true + umount + uname + unicode_start + unicode_stop + unlink + utmpdump + uuidgen + vdir + wall + wc + ypdomainname + zcat + zcmp + zdiff + zegrep + zfgrep + zforce + zgrep + zless + zmore + znew + zsh + + + aclocal + aconnect + aplay + apm + apmsleep + apropos + ar + arecord + as + as86 + autoconf + autoheader + automake + awk + basename + bc + bison + c++ + cal + cat + cc + cdda2wav + cdparanoia + cdrdao + cd-read + cdrecord + chfn + chgrp + chmod + chown + chroot + chsh + clear + cmp + co + col + comm + cp + cpio + cpp + cut + dc + dd + df + diff + diff3 + dir + dircolors + directomatic + dirname + du + env + expr + fbset + file + find + flex + flex++ + fmt + free + ftp + funzip + fuser + g++ + gawk + gc + gcc + gdb + getent + getopt + gettext + gettextize + gimp + gimp-remote + gimptool + gmake + gs + head + hexdump + id + install + join + kill + killall + ld + ld86 + ldd + less + lex + ln + locate + lockfile + logname + lp + lpr + ls + lynx + m4 + make + man + mkdir + mknod + msgfmt + mv + namei + nasm + nawk + nice + nl + nm + nm86 + nmap + nohup + nop + od + passwd + patch + pcregrep + pcretest + perl + perror + pidof + pr + printf + procmail + prune + ps2ascii + ps2epsi + ps2frag + ps2pdf + ps2ps + psbook + psmerge + psnup + psresize + psselect + pstops + rcs + rev + rm + scp + sed + seq + setterm + shred + size + size86 + skill + slogin + snice + sort + sox + split + ssh + ssh-add + ssh-agent + ssh-keygen + ssh-keyscan + stat + strings + strip + sudo + suidperl + sum + tac + tail + tee + test + tr + uniq + unlink + unzip + updatedb + updmap + uptime + users + vmstat + w + wc + wget + whatis + whereis + which + who + whoami + write + xargs + yacc + yes + zip + zsoelim + + + dcop + kdialog + kfile + xhost + xmodmap + xset + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/template-toolkit.xml b/src/data/extra/syntax-highlighting/syntax/template-toolkit.xml new file mode 100644 index 00000000..b004cb5c --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/template-toolkit.xml @@ -0,0 +1,321 @@ + + + +]> + + + + + + + SET + GET + CALL + DEFAULT + IF + ELSIF + ELSE + UNLESS + LAST + NEXT + FOR + FOREACH + WHILE + SWITCH + CASE + PROCESS + INCLUDE + INSERT + WRAPPER + BLOCK + MACRO + END + USE + IN + FILTER + TRY + THROW + CATCH + FINAL + META + TAGS + DEBUG + PERL + + + + constants + + template + component + loop + error + content + + + + + defined + length + repeat + replace + match + search + split + chunk + list + hash + size + + keys + values + each + sort + nsort + import + defined + exists + item + + first + last + max + reverse + join + grep + + unshift + push + shift + pop + unique + merge + slice + splice + count + + format + upper + lower + ucfirst + lcfirst + trim + collapse + html + html_entity + html_para + html_break + html_para_break + html_line_break + uri + url + indent + truncate + repeat + remove + replace + redirect + eval + evaltt + perl + evalperl + stdout + stderr + null + latex + + + = + != + ~= + += + -= + *= + /= + **= + |= + ||= + &= + &&= + ?= + + + - + * + + % + || + && + | + & + < + << + > + >> + ^ + -> + => + . + , + ; + :: + \ + and + or + not + eq + ne + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/texinfo.xml b/src/data/extra/syntax-highlighting/syntax/texinfo.xml new file mode 100644 index 00000000..a43394a4 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/texinfo.xml @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/textile.xml b/src/data/extra/syntax-highlighting/syntax/textile.xml new file mode 100644 index 00000000..b0e82506 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/textile.xml @@ -0,0 +1,100 @@ + + + + + + + + +]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/tibasic.xml b/src/data/extra/syntax-highlighting/syntax/tibasic.xml new file mode 100644 index 00000000..d1a0fca0 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/tibasic.xml @@ -0,0 +1,71 @@ + + + + + + If + Then + Else + For + While + Repeat + End + Pause + Lbl + Goto + IS> + DS< + Menu + prgm + Return + DelVar + GraphStyle + Input + Prompt + Disp + DispGraph + DispTable + Output + getKey + ClrHome + ClrTable + GetCalc + Get + Send + prgm + + + net + eogt + eolt + sqrt + %THETA + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/tiger.xml b/src/data/extra/syntax-highlighting/syntax/tiger.xml new file mode 100644 index 00000000..482fdc49 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/tiger.xml @@ -0,0 +1,96 @@ + + + + + + + if + then + else + while + do + for + to + break + + + let + in + end + array + of + type + function + var + nil + + + void + int + string + + + print + print_int + flush + getchar + ord + chr + size + concat + substring + not + exit + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/toml.xml b/src/data/extra/syntax-highlighting/syntax/toml.xml new file mode 100644 index 00000000..2369854c --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/toml.xml @@ -0,0 +1,135 @@ + + + + + + + + + +]> + + + + + true + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/txt2tags.xml b/src/data/extra/syntax-highlighting/syntax/txt2tags.xml new file mode 100644 index 00000000..1635f99b --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/txt2tags.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/typescript-react.xml b/src/data/extra/syntax-highlighting/syntax/typescript-react.xml new file mode 100644 index 00000000..3fb559de --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/typescript-react.xml @@ -0,0 +1,489 @@ + + + + + + + + + + + + + + +]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/typescript.xml b/src/data/extra/syntax-highlighting/syntax/typescript.xml new file mode 100644 index 00000000..b0daefdb --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/typescript.xml @@ -0,0 +1,2092 @@ + + + + + +]> + + + + + + + + + + controlflow##JavaScript + goto + + + keywords##JavaScript + declare + + + reserved##JavaScript + type + arguments + + + readonly + abstract + constructor + get + set + + + + module##JavaScript + + + primitives##JavaScript + + object + + + + + + namespace + module + + + keyof + infer + + + + + string + number + boolean + symbol + any + void + never + unknown + undefined + null + object + + + + + + Array + ArrayBuffer + Atomics + Boolean + DataView + Date + Float32Array + Float64Array + Function + Generator + GeneratorFunction + Int8Array + Int16Array + Int32Array + Intl + Map + Number + Object + Proxy + Reflect + RegExp + Set + SharedArrayBuffer + SIMD + String + Symbol + TypedArray + Uint8Array + Uint16Array + Uint32Array + Uint8ClampedArray + WeakMap + WeakSet + + Error + EvalError + InternalError + RangeError + ReferenceError + SyntaxError + TypeError + URIError + + Math + + Promise + + JSON + console + process + + + + AnalyserNode + ArrayBufferView + Attr + AudioBuffer + AudioBufferSourceNode + AudioContext + AudioDestinationNode + AudioListener + AudioNode + AudioParam + BatteryManager + BeforeUnloadEvent + BiquadFilterNode + Blob + BufferSource + ByteString + CSS + CSSConditionRule + CSSCounterStyleRule + CSSGroupingRule + CSSMatrix + CSSMediaRule + CSSPageRule + CSSPrimitiveValue + CSSRule + CSSRuleList + CSSStyleDeclaration + CSSStyleRule + CSSStyleSheet + CSSSupportsRule + CSSValue + CSSValueList + CanvasGradient + CanvasImageSource + CanvasPattern + CanvasRenderingContext2D + ChannelMergerNode + ChannelSplitterNode + CharacterData + ChromeWorker + CloseEvent + Comment + CompositionEvent + Console + ConvolverNode + Coordinates + Credential + CredentialsContainer + Crypto + CryptoKey + CustomEvent + DOMError + DOMException + DOMHighResTimeStamp + DOMImplementation + DOMString + DOMStringList + DOMStringMap + DOMTimeStamp + DOMTokenList + DataTransfer + DataTransferItem + DataTransferItemList + DedicatedWorkerGlobalScope + DelayNode + DeviceProximityEvent + DirectoryEntry + DirectoryEntrySync + DirectoryReader + DirectoryReaderSync + Document + DocumentFragment + DocumentTouch + DocumentType + DragEvent + DynamicsCompressorNode + Element + Entry + EntrySync + ErrorEvent + Event + EventListener + EventSource + EventTarget + FederatedCredential + FetchEvent + File + FileEntry + FileEntrySync + FileException + FileList + FileReader + FileReaderSync + FileSystem + FileSystemSync + FontFace + FormData + GainNode + Gamepad + GamepadButton + GamepadEvent + Geolocation + GlobalEventHandlers + HTMLAnchorElement + HTMLAreaElement + HTMLAudioElement + HTMLBRElement + HTMLBaseElement + HTMLBodyElement + HTMLButtonElement + HTMLCanvasElement + HTMLCollection + HTMLContentElement + HTMLDListElement + HTMLDataElement + HTMLDataListElement + HTMLDialogElement + HTMLDivElement + HTMLDocument + HTMLElement + HTMLEmbedElement + HTMLFieldSetElement + HTMLFontElement + HTMLFormControlsCollection + HTMLFormElement + HTMLHRElement + HTMLHeadElement + HTMLHeadingElement + HTMLHtmlElement + HTMLIFrameElement + HTMLImageElement + HTMLInputElement + HTMLKeygenElement + HTMLLIElement + HTMLLabelElement + HTMLLegendElement + HTMLLinkElement + HTMLMapElement + HTMLMediaElement + HTMLMetaElement + HTMLMeterElement + HTMLModElement + HTMLOListElement + HTMLObjectElement + HTMLOptGroupElement + HTMLOptionElement + HTMLOptionsCollection + HTMLOutputElement + HTMLParagraphElement + HTMLParamElement + HTMLPreElement + HTMLProgressElement + HTMLQuoteElement + HTMLScriptElement + HTMLSelectElement + HTMLShadowElement + HTMLSourceElement + HTMLSpanElement + HTMLStyleElement + HTMLTableCaptionElement + HTMLTableCellElement + HTMLTableColElement + HTMLTableDataCellElement + HTMLTableElement + HTMLTableHeaderCellElement + HTMLTableRowElement + HTMLTableSectionElement + HTMLTextAreaElement + HTMLTimeElement + HTMLTitleElement + HTMLTrackElement + HTMLUListElement + HTMLUnknownElement + HTMLVideoElement + HashChangeEvent + History + IDBCursor + IDBCursorWithValue + IDBDatabase + IDBEnvironment + IDBFactory + IDBIndex + IDBKeyRange + IDBMutableFile + IDBObjectStore + IDBOpenDBRequest + IDBRequest + IDBTransaction + IDBVersionChangeEvent + IIRFilterNode + IdentityManager + ImageBitmap + ImageBitmapFactories + ImageData + Index + InputDeviceCapabilities + InputEvent + InstallEvent + InstallTrigger + KeyboardEvent + LinkStyle + LocalFileSystem + LocalFileSystemSync + Location + MIDIAccess + MIDIConnectionEvent + MIDIInput + MIDIInputMap + MIDIOutputMap + MediaElementAudioSourceNode + MediaError + MediaKeyMessageEvent + MediaKeySession + MediaKeyStatusMap + MediaKeySystemAccess + MediaKeySystemConfiguration + MediaKeys + MediaRecorder + MediaStream + MediaStreamAudioDestinationNode + MediaStreamAudioSourceNode + MessageChannel + MessageEvent + MessagePort + MouseEvent + MutationObserver + MutationRecord + NamedNodeMap + Navigator + NavigatorConcurrentHardware + NavigatorGeolocation + NavigatorID + NavigatorLanguage + NavigatorOnLine + Node + NodeFilter + NodeIterator + NodeList + NonDocumentTypeChildNode + Notification + OfflineAudioCompletionEvent + OfflineAudioContext + OscillatorNode + PageTransitionEvent + PannerNode + ParentNode + PasswordCredential + Path2D + PaymentAddress + PaymentRequest + PaymentResponse + Performance + PerformanceEntry + PerformanceFrameTiming + PerformanceMark + PerformanceMeasure + PerformanceNavigation + PerformanceNavigationTiming + PerformanceObserver + PerformanceObserverEntryList + PerformanceResourceTiming + PerformanceTiming + PeriodicSyncEvent + PeriodicWave + Plugin + Point + PointerEvent + PopStateEvent + PortCollection + Position + PositionError + PositionOptions + PresentationConnectionClosedEvent + PresentationConnectionList + PresentationReceiver + ProcessingInstruction + ProgressEvent + PromiseRejectionEvent + PushEvent + PushRegistrationManager + RTCCertificate + RTCConfiguration + RTCPeerConnection + RTCSessionDescriptionCallback + RTCStatsReport + RadioNodeList + RandomSource + Range + ReadableByteStream + RenderingContext + SVGAElement + SVGAngle + SVGAnimateColorElement + SVGAnimateElement + SVGAnimateMotionElement + SVGAnimateTransformElement + SVGAnimatedAngle + SVGAnimatedBoolean + SVGAnimatedEnumeration + SVGAnimatedInteger + SVGAnimatedLength + SVGAnimatedLengthList + SVGAnimatedNumber + SVGAnimatedNumberList + SVGAnimatedPoints + SVGAnimatedPreserveAspectRatio + SVGAnimatedRect + SVGAnimatedString + SVGAnimatedTransformList + SVGAnimationElement + SVGCircleElement + SVGClipPathElement + SVGCursorElement + SVGDefsElement + SVGDescElement + SVGElement + SVGEllipseElement + SVGEvent + SVGFilterElement + SVGFontElement + SVGFontFaceElement + SVGFontFaceFormatElement + SVGFontFaceNameElement + SVGFontFaceSrcElement + SVGFontFaceUriElement + SVGForeignObjectElement + SVGGElement + SVGGlyphElement + SVGGradientElement + SVGHKernElement + SVGImageElement + SVGLength + SVGLengthList + SVGLineElement + SVGLinearGradientElement + SVGMPathElement + SVGMaskElement + SVGMatrix + SVGMissingGlyphElement + SVGNumber + SVGNumberList + SVGPathElement + SVGPatternElement + SVGPoint + SVGPolygonElement + SVGPolylineElement + SVGPreserveAspectRatio + SVGRadialGradientElement + SVGRect + SVGRectElement + SVGSVGElement + SVGScriptElement + SVGSetElement + SVGStopElement + SVGStringList + SVGStylable + SVGStyleElement + SVGSwitchElement + SVGSymbolElement + SVGTRefElement + SVGTSpanElement + SVGTests + SVGTextElement + SVGTextPositioningElement + SVGTitleElement + SVGTransform + SVGTransformList + SVGTransformable + SVGUseElement + SVGVKernElement + SVGViewElement + ServiceWorker + ServiceWorkerContainer + ServiceWorkerGlobalScope + ServiceWorkerRegistration + ServiceWorkerState + ShadowRoot + SharedWorker + SharedWorkerGlobalScope + SourceBufferList + StereoPannerNode + Storage + StorageEvent + StyleSheet + StyleSheetList + SubtleCrypto + SyncEvent + Text + TextMetrics + TimeEvent + TimeRanges + Touch + TouchEvent + TouchList + Transferable + TreeWalker + UIEvent + USVString + VRDisplayCapabilities + ValidityState + WaveShaperNode + WebGL + WebGLActiveInfo + WebGLBuffer + WebGLContextEvent + WebGLFramebuffer + WebGLProgram + WebGLRenderbuffer + WebGLRenderingContext + WebGLShader + WebGLShaderPrecisionFormat + WebGLTexture + WebGLTimerQueryEXT + WebGLTransformFeedback + WebGLUniformLocation + WebGLVertexArrayObject + WebGLVertexArrayObjectOES + WebSocket + WebSockets + WebVTT + WheelEvent + Window + WindowBase64 + WindowEventHandlers + WindowTimers + Worker + WorkerGlobalScope + WorkerLocation + WorkerNavigator + XMLHttpRequest + XMLHttpRequestEventTarget + XMLSerializer + XPathExpression + XPathResult + XSLTProcessor + + + + Buffer + EventEmitter + Server + Pipe + Socket + REPLServer + ReadStream + WriteStream + Stream + Inflate + Deflate + InflateRaw + DeflateRaw + GZip + GUnzip + Unzip + Zip + + + + constructor + length + prototype + __proto__ + EPSILON + MAX_SAFE_INTEGER + MAX_VALUE + MIN_SAFE_INTEGER + MIN_VALUE + NEGATIVE_INFINITY + POSITIVE_INFINITY + + + + clearInterval + clearTimeout + decodeURI + decodeURIComponent + encodeURI + encodeURIComponent + escape + eval + isFinite + isNaN + parseFloat + parseInt + require + setTimeout + setInterval + super + unescape + uneval + + + + abs + acos + acosh + asin + asinh + atan + atan2 + atanh + cbrt + ceil + clz32 + cos + cosh + exp + expm1 + floor + fround + hypot + imul + log + log10 + log1p + log2 + max + min + pow + random + round + sign + sin + sinh + sqrt + tan + tanh + trunc + + + + E + LN10 + LN2 + LOG10E + LOG2E + PI + SQRT1_2 + SQRT2 + + + + assert + clear + count + debug + dir + error + group + groupCollapsed + groupEnd + info + log + profile + profileEnd + table + time + timeEnd + timeStamp + trace + warn + + + + parse + stringify + + + + global + GLOBAL + root + __dirname + __filename + + + + arch + argv + config + connected + env + execArgv + execPath + exitCode + mainModule + pid + platform + release + stderr + stdin + stdout + title + version + versions + + + + abort + chdir + cwd + disconnect + exit + setegid + seteuid + getegid + geteuid + setgid + setuid + getgid + getuid + send + setgroups + getgroups + initgroups + kill + memoryUsage + nextTick + umask + uptime + hrtime + + + + all + catch + finally + race + reject + resolve + then + + + + document + event + navigator + performance + screen + window + + + + ATTRIBUTE_NODE + CDATA_SECTION_NODE + COMMENT_NODE + DOCUMENT_FRAGMENT_NODE + DOCUMENT_NODE + DOCUMENT_TYPE_NODE + DOMSTRING_SIZE_ERR + ELEMENT_NODE + ENTITY_NODE + ENTITY_REFERENCE_NODE + HIERARCHY_REQUEST_ERR + INDEX_SIZE_ERR + INUSE_ATTRIBUTE_ERR + INVALID_CHARACTER_ERR + NO_DATA_ALLOWED_ERR + NO_MODIFICATION_ALLOWED_ERR + NOT_FOUND_ERR + NOT_SUPPORTED_ERR + NOTATION_NODE + PROCESSING_INSTRUCTION_NODE + TEXT_NODE + WRONG_DOCUMENT_ERR + + + + _content + x + y + z + abbr + above + accept + acceptCharset + accessKey + action + align + aLink + vLink + aLinkcolor + vLinkcolor + all + alt + anchors + appCodeName + appCore + applets + appMinorVersion + appName + appVersion + archive + areas + arguments + attributes + availHeight + availLeft + availTop + availWidth + axis + background + backgroundColor + backgroundImage + below + bgColor + body + border + borderBottomWidth + borderColor + borderLeftWidth + borderRightWidth + borderStyle + borderTopWidth + borderWidth + bottom + bufferDepth + callee + caller + caption + cellPadding + cells + cellSpacing + ch + characterSet + charset + checked + childNodes + chOff + cite + classes + className + clear + clientInformation + clip + clipBoardData + closed + code + codeBase + codeType + color + colorDepth + cols + colSpan + compact + complete + components + content + controllers + cookie + cookieEnabled + cords + cpuClass + crypto + current + data + dateTime + declare + defaultCharset + defaultChecked + defaultSelected + defaultStatus + defaultValue + defaultView + defer + description + dialogArguments + dialogHeight + dialogLeft + dialogTop + dialogWidth + dir + directories + disabled + display + docmain + doctype + documentElement + elements + embeds + enabledPlugin + encoding + enctype + entities + event + expando + external + face + fgColor + filename + firstChild + fontFamily + fontSize + fontWeight + form + formName + forms + frame + frameBorder + frameElement + frames + hasFocus + hash + headers + height + history + host + hostname + href + hreflang + hspace + htmlFor + httpEquiv + id + ids + ignoreCase + images + implementation + index + innerHeight + innerWidth + input + isMap + label + lang + language + lastChild + lastIndex + lastMatch + lastModified + lastParen + layers + layerX + layerY + left + leftContext + lineHeight + link + linkColor + links + listStyleType + localName + location + locationbar + longDesc + lowsrc + lowSrc + marginBottom + marginHeight + marginLeft + marginRight + marginTop + marginWidth + maxLength + media + menubar + method + mimeTypes + multiline + multiple + name + nameProp + namespaces + namespaceURI + next + nextSibling + nodeName + nodeType + nodeValue + noHref + noResize + noShade + notationName + notations + noWrap + object + offscreenBuffering + onLine + onreadystatechange + opener + opsProfile + options + oscpu + outerHeight + outerWidth + ownerDocument + paddingBottom + paddingLeft + paddingRight + paddingTop + pageX + pageY + pageXOffset + pageYOffset + parent + parentLayer + parentNode + parentWindow + pathname + personalbar + pixelDepth + pkcs11 + platform + plugins + port + prefix + previous + previousDibling + product + productSub + profile + profileend + prompt + prompter + protocol + publicId + readOnly + readyState + referrer + rel + responseText + responseXML + rev + right + rightContext + rowIndex + rows + rowSpan + rules + scheme + scope + screenX + screenY + screenLeft + screenTop + scripts + scrollbars + scrolling + sectionRowIndex + security + securityPolicy + selected + selectedIndex + selection + self + shape + siblingAbove + siblingBelow + size + source + specified + standby + start + status + statusbar + statusText + style + styleSheets + suffixes + summary + systemId + systemLanguage + tagName + tags + target + tBodies + text + textAlign + textDecoration + textIndent + textTransform + tFoot + tHead + title + toolbar + top + type + undefined + uniqueID + updateInterval + URL + URLUnencoded + useMap + userAgent + userLanguage + userProfile + vAlign + value + valueType + vendor + vendorSub + version + visibility + vspace + whiteSpace + width + XMLDocument + XSLDocument + zIndex + + + + acceptNode + add + addEventListener + addTextTrack + adoptNode + after + animate + append + appendChild + appendData + before + blur + canPlayType + captureStream + caretPositionFromPoint + caretRangeFromPoint + checkValidity + clear + click + cloneContents + cloneNode + cloneRange + close + closest + collapse + compareBoundaryPoints + compareDocumentPosition + comparePoint + contains + convertPointFromNode + convertQuadFromNode + convertRectFromNode + createAttribute + createAttributeNS + createCaption + createCDATASection + createComment + createContextualFragment + createDocument + createDocumentFragment + createDocumentType + createElement + createElementNS + createEntityReference + createEvent + createExpression + createHTMLDocument + createNodeIterator + createNSResolver + createProcessingInstruction + createRange + createShadowRoot + createTBody + createTextNode + createTFoot + createTHead + createTreeWalker + delete + deleteCaption + deleteCell + deleteContents + deleteData + deleteRow + deleteTFoot + deleteTHead + detach + disconnect + dispatchEvent + elementFromPoint + elementsFromPoint + enableStyleSheetsForSet + entries + evaluate + execCommand + exitFullscreen + exitPointerLock + expand + extractContents + fastSeek + firstChild + focus + forEach + get + getAll + getAnimations + getAttribute + getAttributeNames + getAttributeNode + getAttributeNodeNS + getAttributeNS + getBoundingClientRect + getBoxQuads + getClientRects + getContext + getDestinationInsertionPoints + getElementById + getElementsByClassName + getElementsByName + getElementsByTagName + getElementsByTagNameNS + getItem + getNamedItem + getSelection + getStartDate + getVideoPlaybackQuality + has + hasAttribute + hasAttributeNS + hasAttributes + hasChildNodes + hasFeature + hasFocus + importNode + initEvent + insertAdjacentElement + insertAdjacentHTML + insertAdjacentText + insertBefore + insertCell + insertData + insertNode + insertRow + intersectsNode + isDefaultNamespace + isEqualNode + isPointInRange + isSameNode + item + key + keys + lastChild + load + lookupNamespaceURI + lookupPrefix + matches + move + moveAttribute + moveAttributeNode + moveChild + moveNamedItem + namedItem + nextNode + nextSibling + normalize + observe + open + parentNode + pause + play + postMessage + prepend + preventDefault + previousNode + previousSibling + probablySupportsContext + queryCommandEnabled + queryCommandIndeterm + queryCommandState + queryCommandSupported + queryCommandValue + querySelector + querySelectorAll + registerContentHandler + registerElement + registerProtocolHandler + releaseCapture + releaseEvents + remove + removeAttribute + removeAttributeNode + removeAttributeNS + removeChild + removeEventListener + removeItem + replace + replaceChild + replaceData + replaceWith + reportValidity + requestFullscreen + requestPointerLock + reset + scroll + scrollBy + scrollIntoView + scrollTo + seekToNextFrame + select + selectNode + selectNodeContents + set + setAttribute + setAttributeNode + setAttributeNodeNS + setAttributeNS + setCapture + setCustomValidity + setEnd + setEndAfter + setEndBefore + setItem + setNamedItem + setRangeText + setSelectionRange + setSinkId + setStart + setStartAfter + setStartBefore + slice + splitText + stepDown + stepUp + stopImmediatePropagation + stopPropagation + submit + substringData + supports + surroundContents + takeRecords + terminate + toBlob + toDataURL + toggle + toString + values + write + writeln + + + + + onRowsinserted + onRowsdelete + onRowenter + onRowexit + onResize + onResizestart + onResizeend + onReset + onReadystatechange + onMouseout + onMouseover + onMousedown + onMouseup + onMousemove + onBeforecut + onBeforedeactivate + onBeforeunload + onBeforeupdate + onBeforepaste + onBeforeprint + onBeforeeditfocus + onBeforeactivate + onBlur + onScrolltop + onSubmit + onSelect + onSelectstart + onSelectionchange + onHover + onHelp + onChange + onContextmenu + onControlselect + onCut + onCellchange + onClock + onClose + onDeactivate + onDatasetchanged + onDatasetcomplete + onDataavailable + onDrop + onDrag + onDragstart + onDragover + onDragdrop + onDragenter + onDragend + onDragleave + onDblclick + onUnload + onPaste + onPropertychange + onError + onErrorupdate + onKeydown + onKeyup + onKeypress + onFocus + onLoad + onActivate + onAfterupdate + onAfterprint + onAbort + + + + shift + showModelessDialog + showModalDialog + showHelp + scroll + scrollX + scrollByPages + scrollByLines + scrollY + scrollTo + stop + strike + sizeToContent + sidebar + signText + sort + sup + sub + substr + substring + splice + split + send + setMilliseconds + setSeconds + setMinutes + setHours + setMonth + setYear + setFullYear + setDate + setUTCMilliseconds + setUTCSeconds + setUTCMinutes + setUTCHours + setUTCMonth + setUTCFullYear + setUTCDate + setTime + setHotkeys + setCursor + setZOptions + setActive + setResizable + setRequestHeader + search + slice + savePreferences + small + home + handleEvent + navigate + char + charCodeAt + charAt + concat + contextual + confirm + compile + clear + captureEvents + call + createStyleSheet + createPopup + createEventObject + toGMTString + toUTCString + toString + toSource + toUpperCase + toLowerCase + toLocaleString + test + taint + taintEnabled + indexOf + italics + disableExternalCapture + dump + detachEvent + unshift + untaint + unwatch + updateCommands + join + javaEnabled + pop + push + plugins.refresh + paddings + parse + print + prompt + preference + enableExternalCapture + exec + execScript + valueOf + UTC + find + file + fileModifiedDate + fileSize + fileCreatedDate + fileUpdatedDate + fixed + fontsize + fontcolor + forward + fromCharCode + watch + link + load + lastIndexOf + anchor + attachEvent + atob + apply + alert + abort + routeEvents + resize + resizeBy + resizeTo + recalc + returnValue + replace + reverse + reload + releaseCapture + releaseEvents + go + getMilliseconds + getSeconds + getMinutes + getHours + getMonth + getDay + getYear + getFullYear + getTime + getDate + getTimezoneOffset + getUTCMilliseconds + getUTCSeconds + getUTCMinutes + getUTCHours + getUTCDay + getUTCMonth + getUTCFullYear + getUTCDate + getAttention + getSelection + getResponseHeader + getAllResponseHeaders + moveBy + moveBelow + moveTo + moveToAbsolute + moveAbove + mergeAttributes + match + margins + btoa + big + bold + borderWidths + blink + back + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/uscript.xml b/src/data/extra/syntax-highlighting/syntax/uscript.xml new file mode 100644 index 00000000..13d32627 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/uscript.xml @@ -0,0 +1,188 @@ + + + + + + break + continue + if + else + switch + while + for + do + foreach + true + false + null + new + instanceof + state + auto + exec + function + defaultproperties + native + noexport + var + out + local + event + return + static + Static + synchronized + transient + volatile + final + throws + extends + expands + public + protected + private + abstract + case + default + final + simulated + Dot + nativereplication + replication + unreliable + reliable + ignores + localized + latent + singular + Cross + config + enum + struct + operator + preoperator + postoperator + iterator + coerce + optional + const + editconst + array + export + editinline + editinlinenew + editinlineuse + cpptext + placeable + virtual + hidecategories + super + global + none + self + + + + boolean + char + byte + short + int + long + float + double + void + Pawn + sound + ipaddr + ELightType + actor + ammo + bool + vector + rotator + name + string + object + plane + staticmesh + package + color + coords + material + class + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/vala.xml b/src/data/extra/syntax-highlighting/syntax/vala.xml new file mode 100644 index 00000000..8f9aab79 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/vala.xml @@ -0,0 +1,288 @@ + + + + + + + abstract + as + async + base + break + case + catch + class + const + construct + continue + default + delegate + delete + do + dynamic + else + enum + ensures + errordomain + extern + false + finally + for + foreach + get + global + if + in + inline + interface + internal + is + lock + namespace + new + null + out + override + owned + private + protected + public + ref + requires + result + return + set + signal + sizeof + static + struct + switch + this + throw + throws + true + try + typeof + unowned + using + value + virtual + weak + while + yield + + + connect + connect_after + disconnect + emit + + + bool + char + double + float + int + int8 + int16 + int32 + int64 + long + short + size_t + ssize_t + string + uchar + uint + uint8 + uint16 + uint32 + uint64 + ulong + unichar + ushort + var + void + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/valgrind-suppression.xml b/src/data/extra/syntax-highlighting/syntax/valgrind-suppression.xml new file mode 100644 index 00000000..7fe3dd47 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/valgrind-suppression.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/varnish.xml b/src/data/extra/syntax-highlighting/syntax/varnish.xml new file mode 100644 index 00000000..59168723 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/varnish.xml @@ -0,0 +1,349 @@ + + + + + + vcl_recv + vcl_pipe + vcl_pass + vcl_hash + vcl_hit + vcl_miss + vcl_fetch + vcl_deliver + vcl_init + vcl_fini + vcl_error + + + if + else + elsif + elseif + + + set + call + error + esi + include + remove + unset + panic + rollback + purge + synthetic + + + hash_data + regsub + regsuball + ban + ban_url + + + deliver + error + fetch + hash + hit_for_pass + lookup + ok + pass + pipe + restart + + + random + client + hash + round-robin + dns + fallback + + + + std + example + abtest + threescale + authentication + boltsort + crashhandler + curl + digest + dns + header + memcached + null + querystring + shield + softpurge + statsd + throttle + timeutils + urlcode + var + timers + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/varnish4.xml b/src/data/extra/syntax-highlighting/syntax/varnish4.xml new file mode 100644 index 00000000..03ad8524 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/varnish4.xml @@ -0,0 +1,372 @@ + + + + + + vcl_recv + vcl_pipe + vcl_pass + vcl_hash + vcl_purge + vcl_miss + vcl_hit + vcl_deliver + vcl_synth + vcl_backend_fetch + vcl_backend_response + vcl_backend_error + vcl_init + vcl_fini + + + if + else + elif + elsif + elseif + + + call + set + unset + new + rollback + synthetic + esi + include + panic + + + hash_data + regsub + regsuball + ban + + + abandon + deliver + error + fetch + hash + hit_for_pass + lookup + ok + pass + pipe + purge + restart + retry + synth + + + random + client + hash + round-robin + dns + fallback + + + + std + example + abtest + threescale + authentication + boltsort + crashhandler + curl + digest + dns + header + memcached + null + querystring + shield + softpurge + statsd + throttle + timeutils + urlcode + var + timers + directors + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/varnishcc.xml b/src/data/extra/syntax-highlighting/syntax/varnishcc.xml new file mode 100644 index 00000000..0a0052bf --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/varnishcc.xml @@ -0,0 +1,101 @@ + + + + + + + BACKEND + BOOL + DURATION + HEADER + INT + IP + PRIV_CALL + PRIV_VCL + REAL + STRING + STRING_LIST + TIME + VOID + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/varnishcc4.xml b/src/data/extra/syntax-highlighting/syntax/varnishcc4.xml new file mode 100644 index 00000000..481ad939 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/varnishcc4.xml @@ -0,0 +1,128 @@ + + + + + + + BACKEND + BLOB + BOOL + BYTES + DURATION + HEADER + HTTP + INT + IP + PRIV_CALL + PRIV_VCL + REAL + STRING + STRING_LIST + TIME + VOID + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/varnishtest.xml b/src/data/extra/syntax-highlighting/syntax/varnishtest.xml new file mode 100644 index 00000000..ceb94d2c --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/varnishtest.xml @@ -0,0 +1,547 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/varnishtest4.xml b/src/data/extra/syntax-highlighting/syntax/varnishtest4.xml new file mode 100644 index 00000000..ec0d96f2 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/varnishtest4.xml @@ -0,0 +1,706 @@ + + + + + + + raw + vxid + request + session + + + + Backend + BackendClose + BackendOpen + BackendReuse + Backend_health + Begin + BereqAcct + BereqHeader + BereqMethod + BereqProtocol + BereqURL + BerespHeader + BerespProtocol + BerespReason + BerespStatus + BogoHeader + CLI + Debug + ESI_BodyBytes + ESI_xmlerror + End + Error + ExpBan + ExpKill + FetchError + Fetch_Body + Gzip + Hash + Hit + HitPass + HttpGarbage + Length + Link + LostHeader + ObjHeader + ObjProtocol + ObjReason + ObjStatus + PipeAcct + ReqAcct + ReqHeader + ReqMethod + ReqProtocol + ReqStart + ReqURL + RespHeader + RespProtocol + RespReason + RespStatus + SessClose + SessOpen + Storage + TTL + Timestamp + VCL_Error + VCL_Log + VCL_acl + VCL_call + VCL_return + VCL_trace + VSL + WorkThread + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/vcard.xml b/src/data/extra/syntax-highlighting/syntax/vcard.xml new file mode 100644 index 00000000..5eafaa08 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/vcard.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/velocity.xml b/src/data/extra/syntax-highlighting/syntax/velocity.xml new file mode 100644 index 00000000..cf901d89 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/velocity.xml @@ -0,0 +1,51 @@ + + + + + + #set + #foreach + #end + #if + #else + #elseif + #parse + #macro + #stop + #include + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/vera.xml b/src/data/extra/syntax-highlighting/syntax/vera.xml new file mode 100644 index 00000000..c3802c84 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/vera.xml @@ -0,0 +1,648 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + after + all + any + around + assoc_index + assoc_size + async + bad_state + bad_trans + before + begin + big_endian + bind + bin_activation + bit_normal + bit_reverse + break + breakpoint + case + casex + casez + class + constraint + continue + coverage + coverage_block + coverage_def + coverage_depth + coverage_goal + coverage_group + coverage_option + coverage_val + cross_num_print_missing + cross_auto_bin_max + cov_comment + default + depth + dist + do + else + end + enum + exhaustive + export + extends + extern + for + foreach + fork + function + hdl_task + hdl_node + hide + if + illegal_self_transition + illegal_state + illegal_transition + in + interface + invisible + join + little_endian + local + m_bad_state + m_bad_trans + m_state + m_trans + negedge + new + newcov + non_rand + none + not + null + or + ordered + packed + port + posedge + proceed + prod + prodget + prodset + program + protected + public + rand + randc + randcase + randseq + repeat + return + rules + sample + sample_event + shadow + soft + state + static + super + task + terminate + this + trans + typedef + unpacked + var + vca + vector + verilog_node + verilog_task + vhdl_node + vhdl_task + virtual + virtuals + visible + void + while + wildcard + with + + + integer + bit + reg + string + bind_var + event + inout + input + output + ASYNC + CLOCK + NDRIVE + NHOLD + NRX + NRZ + NR0 + NR1 + NSAMPLE + PDRIVE + PHOLD + PRX + PRZ + PR0 + PR1 + PSAMPLE + + + gnr + grx + grz + gr0 + gr1 + nr + rx + rz + r0 + r1 + snr + srx + srz + sr0 + sr1 + + + + alloc + call_func + call_task + cast_assign + close_conn + cm_coverage + cm_get_coverage + cm_get_limit + coverage_backup_database_file + coverage_save_database + delay + error + error_mode + error_wait + exit + fclose + feof + ferror + fflush + flag + fopen + fprintf + freadb + freadb + freadh + freadstr + get_bind + get_bind_id + get_conn_err + get_cycle + get_env + get_memsize + get_plus_arg + get_systime + get_time + get_time_unit + getstate + initstate + lock_file + mailbox_get + mailbox_put + mailbox_receive + mailbox_send + make_client + make_server + os_command + printf + psprintf + query + query_str + query_x + rand48 + random + region_enter + region_exit + rewind + semaphore_get + semaphore_put + setstate + signal_connect + simwave_plot + srandom + sprintf + sscanf + stop + suspend_thread + sync + timeout + trace + trigger + unit_delay + unlock_file + up_connections + urand48 + urandom + urandom_range + vera_bit_reverse + vera_crc + vera_pack + vera_pack_big_endian + vera_plot + vera_report_profile + vera_unpack + vera_unpack_big_endian + vsv_call_func + vsv_call_task + vsv_close_conn + vsv_get_conn_err + vsv_make_client + vsv_make_server + vsv_up_connections + vsv_wait_for_done + vsv_wait_for_input + wait_child + wait_var + + Configure + DisableTrigger + DoAction + EnableCount + EnableTrigger + Event + GetAssert + GetCount + GetFirstAssert + GetName + GetNextAssert + Wait + atobin + atohex + atoi + atooct + backref + bittostr + capacity + compare + constraint_mode + delete + empty + find + find_index + first + first_index + get_at_least + get_auto_bin + get_cov_weight + get_coverage_goal + get_cross_bin_max + get_status + get_status_msg + getc + hash + icompare + insert + inst_get_at_least + inst_get_auto_bin_max + inst_get_collect + inst_get_cov_weight + inst_get_coverage_goal + inst_getcross_bin_max + inst_query + inst_set_at_least + inst_set_auto_bin_max + inst_set_bin_activiation + inst_set_collect + inst_set_cov_weight + inst_set_coverage_goal + inst_set_cross_bin_max + itoa + last + last_index + len + load + match + max + max_index + min + min_index + object_compare + object_copy + object_print + pack + pick_index + pop_back + pop_front + post_pack + post_randomize + post_unpack + postmatch + pre_pack + pre_randomize + prematch + push_back + push_front + putc + query + query_str + rand_mode + randomize + reserve + reverse + rsort + search + set_at_least + set_auto_bin_max + set_bin_activiation + set_cov_weight + set_coverage_goal + set_cross_bin_max + set_name + size + sort + substr + sum + thismatch + tolower + toupper + unique_index + unpack + + new + object_compare + post_boundary + post_pack + post_randomize + post_unpack + pre-randomize + pre_boundary + pre_pack + pre_unpack + + ALL + ANY + BAD_STATE + BAD_TRANS + CALL + CHECK + CHGEDGE + CLEAR + COPY_NO_WAIT + COPY_WAIT + CROSS + CROSS_TRANS + DEBUG + DELETE + EC_ARRAYX + EC_CODE_END + EC_CONFLICT + EC_EVNTIMOUT + EC_EXPECT + EC_FULLEXPECT + EC_MBXTMOUT + EC_NEXPECT + EC_RETURN + EC_RGNTMOUT + EC_SCONFLICT + EC_SEMTMOUT + EC_SEXPECT + EC_SFULLEXPECT + EC_SNEXTPECT + EC_USERSET + EQ + EVENT + FAIL + FIRST + FORK + GE + GOAL + GT + HAND_SHAKE + HI + HIGH + HNUM + LE + LIC_EXIT + LIC_PRERR + LIC_PRWARN + LIC_WAIT + LO + LOAD + LOW + LT + MAILBOX + MAX_COM + NAME + NE + NEGEDGE + NEXT + NO_OVERLAP + NO_OVERLAP_STATE + NO_OVERLAP_TRANS + NO_VARS + NO_WAIT + NUM + NUM_BIN + NUM_DET + OFF + OK + OK_LAST + ON + ONE_BLAST + ONE_SHOT + ORDER + PAST_IT + PERCENT + POSEDGE + PROGRAM + RAWIN + REGION + REPORT + SAMPLE + SAVE + SEMAPHORE + SET + SILENT + STATE + STR + STR_ERR_OUT_OF_RANGE + STR_ERR_REGEXP_SYNTAX + SUM + TRANS + VERBOSE + WAIT + stderr + stdin + stdout + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/verilog.xml b/src/data/extra/syntax-highlighting/syntax/verilog.xml new file mode 100644 index 00000000..9f113b43 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/verilog.xml @@ -0,0 +1,252 @@ + + + + + + macromodule + table + endtable + specify + specparam + endspecify + + defparam + default + if + ifnone + else + forever + while + for + wait + repeat + disable + + assign + deassign + force + release + + always + initial + edge + posedge + negedge + + + config + endconfig + library + design + liblist + cell + use + instance + + + + begin + fork + module + case + casex + casez + task + function + generate + + + + end + join + endmodule + endcase + endtask + endfunction + endgenerate + + + + + strong0 + strong1 + pull0 + pull1 + weak0 + weak1 + highz0 + highz1 + + small + medium + large + + + + pullup + pulldown + cmos + rcmos + nmos + pmos + rnmos + rpmos + and + nand + or + nor + xor + xnor + not + buf + tran + rtran + tranif0 + tranif1 + rtranif0 + rtranif1 + bufif0 + bufif1 + notif0 + notif1 + + + + + input + output + inout + + wire + tri + tri0 + tri1 + wand + wor + triand + trior + supply0 + supply1 + + reg + integer + real + realtime + time + + vectored + scalared + trireg + + parameter + event + + signed + automatic + genvar + localparam + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/vhdl.xml b/src/data/extra/syntax-highlighting/syntax/vhdl.xml new file mode 100644 index 00000000..6a599114 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/vhdl.xml @@ -0,0 +1,654 @@ + + + + + + + + +]> + + + + file + library + use + + + + access + after + alias + all + array + assert + assume + assume_guarantee + attribute + begin + block + body + bus + component + constant + context + cover + default + disconnect + downto + end + exit + fairness + falling_edge + file + for + force + function + generate + generic + group + guarded + impure + inertial + is + label + linkage + literal + map + new + next + null + of + on + open + others + parameter + port + postponed + procedure + process + property + protected + pure + range + record + register + reject + release + report + return + rising_edge + select + sequence + severity + signal + shared + strong + subtype + to + transport + type + unaffected + units + until + variable + vmode + vprop + vunit + wait + when + with + note + warning + error + failure + in + inout + out + buffer + and + abs + or + xor + xnor + not + mod + nand + nor + rem + rol + ror + sla + sra + sll + srl + + + + if + else + elsif + then + + + + signal + variable + constant + type + attribute + + + + to + downto + others + + + + case + when + + + + fs + ps + ns + us + ms + sec + min + hr + + + + + bit + bit_vector + character + boolean + boolean_vector + integer + integer_vector + real + real_vector + time + time_vector + delay_length + string + severity_level + positive + natural + file_open_kind + file_open_status + signed + unsigned + unresolved_unsigned + unresolved_signed + line + text + side + width + std_logic + std_logic_vector + std_ulogic + std_ulogic_vector + x01 + x01z + ux01 + ux01z + qsim_state + qsim_state_vector + qsim_12state + qsim_12state_vector + qsim_strength + mux_bit + mux_vector + reg_bit + reg_vector + wor_bit + wor_vector + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/vrml.xml b/src/data/extra/syntax-highlighting/syntax/vrml.xml new file mode 100644 index 00000000..25839fd2 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/vrml.xml @@ -0,0 +1,139 @@ + + + + + + DEF + EXTERNPROTO + FALSE + IS + NULL + PROTO + ROUTE + TO + TRUE + USE + eventIn + eventOut + exposedField + field + + + MFColor + MFFloat + MFInt32 + MFNode + MFRotation + MFString + MFTime + MFVec2f + MFVec3f + SFBool + SFColor + SFFloat + SFImage + SFInt32 + SFNode + SFRotation + SFString + SFTime + SFVec2f + SFVec3f + + + Anchor + AudioClip + Appearance + Background + Billboard + Box + Collision + Color + ColorInterpolator + Cone + Coordinate + CoordinateInterpolator + Cylinder + CylinderSensor + DirectionalLight + ElevationGrid + Extrusion + Fog + FontStyle + Group + ImageTexture + IndexedFaceSet + IndexedLineSet + Inline + LOD + Material + MovieTexture + NavigationInfo + Normal + NormalInterpolator + OrientationInterpolator + PixelTexture + Plane + PlaneSensor + PointLight + PointSet + PositionInterpolator + ProximitySensor + ScalarInterpolator + Script + Shape + Sensor + Sound + Sphere + SphereSensor + SpotLight + Switch + Text + TextureCoordinate + TextureTransform + TimeSensor + TouchSensor + Transform + Viewpoint + VisibilitySensor + WorldInfo + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/wavefront-obj.xml b/src/data/extra/syntax-highlighting/syntax/wavefront-obj.xml new file mode 100644 index 00000000..46d6ea76 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/wavefront-obj.xml @@ -0,0 +1,69 @@ + + + + + + v + vt + vn + vp + cstype + deg + bmat + step + p + l + f + curv + curv2 + surf + parm + trim + hole + scrv + sp + end + con + g + s + mg + o + bevel + c_interp + d_interp + lod + usemtl + mtllib + usemap + maplib + shadow_obj + trace_obj + ctech + stech + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/wayland-trace.xml b/src/data/extra/syntax-highlighting/syntax/wayland-trace.xml new file mode 100644 index 00000000..a80e658c --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/wayland-trace.xml @@ -0,0 +1,61 @@ + + + + + + + + array + fd + id + new + nil + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/winehq.xml b/src/data/extra/syntax-highlighting/syntax/winehq.xml new file mode 100644 index 00000000..112f67d9 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/winehq.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/wml.xml b/src/data/extra/syntax-highlighting/syntax/wml.xml new file mode 100644 index 00000000..f4f47149 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/wml.xml @@ -0,0 +1,214 @@ + + + + + + + + wmllint + wmlindent + wmlscope + po + + + #textdomain + #else + #undef + #error + #warning + + + #define + #ifdef + #ifndef + #ifhave + #ifnhave + #ifver + #ifnver + + + #enddef + #endif + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/xharbour.xml b/src/data/extra/syntax-highlighting/syntax/xharbour.xml new file mode 100644 index 00000000..43336fd1 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/xharbour.xml @@ -0,0 +1,539 @@ + + + + + + + local + global + extern + field + each + as + set + clear + screen + databases + all + close + color + date + else + elseif + in + to + do + loop + catch + exit + box + say + case + switch + self + super + say + get + read + use + select + otherwise + index + alias + like + has + return + static + on + off + nil + ? + class + external + + + + FOR + IF + SWITCH + WHILE + TRY + BEGIN + PROCEDURE + FUNCTION + METHOD + + + + NEXT + END + ENDIF + ENDDO + ENDCASE + + + + data + inline + method + classdata + init + from + hidden + + + + INVALID + EXACT + FIXED + DECIMALS + DATEFORMAT + EPOCH + PATH + DEFAULT + EXCLUSIVE + SOFTSEEK + UNIQUE + DELETED + CANCEL + DEBUG + TYPEAHEAD + COLOR + CURSOR + CONSOLE + ALTERNATE + ALTFILE + DEVICE + EXTRA + EXTRAFILE + PRINTER + PRINTFILE + MARGIN + BELL + CONFIRM + ESCAPE + INSERT + EXIT + INTENSITY + SCOREBOARD + DELIMITERS + DELIMCHARS + WRAP + MESSAGE + MCENTER + SCROLLBREAK + EVENTMASK + VIDEOMODE + MBLOCKSIZE + MFILEEXT + STRICTREAD + OPTIMIZE + AUTOPEN + AUTORDER + AUTOSHARE + LANGUAGE + IDLEREPEAT + TRACE + TRACEFILE + TRACESTACK + FILECASE + DIRCASE + DIRSEPARATOR + + + + aadd + adel + achoice + aclone + aeval + ains + ascan + asize + adir + afill + atail + asort + array + TAssociativeArray + + bin21 + bin2l + bin2u + bin2w + i2bin + l2bin + u2bin + w2bin + + eval + fieldblock + fieldwblock + + inkey + lastkey + mcol + mrow + nextkey + + empty + word + descend + __dbdelim + __dbsdf + + os + __run + + alert + browse + dbedit + outerr + outstd + readkey + readvar + __atprompt + __input + __menuto + __nonoallert + __typefile + __xrestscreen + __xsavescreen + + DBAPPEND + DBCLEARFILTER + DBCLOSEALL + DBCLOSEAREA + DBCOMMIT + DBCOMMITALL + DBCREATE + DBDELETE + DBEVAL + DBF + DBFILTER + DBGOBOTTOM + DBGOTO + DBGOTOP + DBRECALL + DBRLOCK + DBRLOCKLIST + DBRUNLOCK + DBSEEK + DBSELECTAREA + DBSETDRIVER + DBSETFILTER + DBSKIP + DBSTRUCT + DBUNLOCK + DBUNLOCKALL + DBUSEAREA + INDEXEXT + INDEXKEY + INDEXORD + ORDBAGEXT + ORDBAGNAME + ORDCONDSET + ORDCREATE + ORDDESTROY + ORDFOR + ORDKEY + ORDLISTADD + ORDLISTCLEAR + ORDLISTREBUILD + ORDNAME + ORDNUMBER + ORDSETFOCUS + RDDLIST + RDDNAME + RDDSETDEFAULT + __DBCONTINUE + __DBZAP + __FLEDIT + __RDDSETDEFAULT + __dbCopyStruct + __dbCopyXStruct + __dbCreate + __dbStructFilter + dbSkipper + CDOW + CMONTH + CTOD + DATE + DAY + DAYS + DOW + DTOC + DTOS + MONTH + YEAR + + GETENV + SET + SETMODE + SETTYPEAHEAD + VERSION + __SETCENTURY + __SetFunction + + break + errorsys + throw + errornew + + HB_SETKEYSAVE + HB_SetKeyCheck + HB_SetKeyGet + SETKEY + __QUIT + __WAIT + + file + frename + __dir + + col + maxcol + maxrow + row + hb_colorindex + + CURDIR + DIRCHANGE + DIRREMOVE + DISKSPACE + FCLOSE + FCREATE + FERASE + FERROR + FOPEN + FREAD + FREADSTR + FSEEK + FWRITE + HB_DISKSPACE + HB_FEOF + ISDISK + MAKEDIR + + ABS + EXP + INT + LOG + MAX + MIN + MOD + ROUND + SQRT + + HB_ISBYREF + PROCFILE + PROCLINE + PROCNAME + TYPE + VALTYPE + valtoprg + tone + + HB_LANGNAME + HB_LANGSELECT + ISAFFIRM + ISNEGATIVE + NATIONMSG + + pcount + HB_pvalue + + ALLTRIM + ASC + AT + CHR + HARDCR + HB_ANSITOOEM + HB_OEMTOANSI + HB_VALTOSTR + ISALPHA + ISDIGIT + ISLOWER + ISUPPER + LEFT + LEN + LOWER + LTRIM + MEMOTRAN + PADC + PADL + PADR + RAT + REPLICATE + RIGHT + RTRIM + SPACE + STR + STRTRAN + STRZERO + SUBSTR + TRANSFORM + TRIM + UPPER + VAL + + devoutpict + + elaptime + seconds + secs + time + + do + + ThreadStart + ThreadStop + ThreadSleep + ThreadKill + ThreadJoin + CreateMutex + DestroyMutex + MutexLock + MutexUnlock + Subscribe + SubscribeNow + Notify + NotifyAll + WaitForThreads + KillAllThreads + + InetInit + InetCleanup + InetCreate + InetDestroy + InetConnect + InetServer + InetAccept + InetSetTimeout + InetGetTimeout + InetClearTimeout + InetRecv + InetRecvAll + InetSend + InetSendAll + InetDGram + InetDGramRecv + InetDGramSend + InetAddress + InetPort + InetError + InetErrorDesc + InetGetHosts + InetConnectIP + + hb_regex + hb_regexmatch + hb_regexsplit + hb_regexcomp + hb_readini + hb_writeini + hb_random + hb_chechsum + hb_crypt + hb_decrypt + hb_hextonum + hb_numtohex + hb_exec + hb_execfromarray + + hb_class + hb_keyput + hb_osnewline + + + + + #include + #if + #ifdef + #ifndef + #endif + #else + #define + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/xml.xml b/src/data/extra/syntax-highlighting/syntax/xml.xml new file mode 100644 index 00000000..ad34a450 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/xml.xml @@ -0,0 +1,149 @@ + + + + +]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/xmldebug.xml b/src/data/extra/syntax-highlighting/syntax/xmldebug.xml new file mode 100644 index 00000000..68a1e8de --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/xmldebug.xml @@ -0,0 +1,592 @@ + + + + + + CDATA + ID + IDREF + IDREFS + ENTITY + ENTITIES + NMTOKEN + NMTOKENS + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/xonotic-console.xml b/src/data/extra/syntax-highlighting/syntax/xonotic-console.xml new file mode 100644 index 00000000..13ef083c --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/xonotic-console.xml @@ -0,0 +1,5660 @@ + + + + + + + alias + apropos + begin + bestweapon + bf + bind + bindlist + bottomcolor + cd + centerview + changelevel + changing + cl_areastats + cl_begindownloads + cl_cmd + cl_downloadbegin + cl_downloadfinished + cl_modelindexlist + cl_particles_reloadeffects + cl_soundindexlist + clear + cmd + cmdlist + color + commandmode + condump + connect + cprint + curl + cvar_lockdefaults + cvar_resettodefaults_all + cvar_resettodefaults_nosaveonly + cvar_resettodefaults_saveonly + cvarlist + defer + demos + dir + disconnect + download + echo + entities + envmap + exec + fixtrans + fly + fog + fog_heighttexture + force_centerview + fs_rescan + fullinfo + fullserverinfo + gamedir + give + gl_texturemode + gl_vbostats + god + heartbeat + history + impulse + in_bind + in_bindlist + in_bindmap + in_unbind + infobar + iplog_list + kick + kill + kickban + load + loadconfig + loadfont + loadsky + locs_add + locs_clear + locs_reload + locs_removenearest + locs_save + ls + map + maps + maxplayers + memlist + memstats + menu_cmd + menu_restart + messagemode + messagemode2 + mod_generatelightmaps + modeldecompile + modellist + modelprecache + name + net_refresh + net_slist + net_slistqw + net_stats + nextul + noclip + notarget + packet + path + pause + pausedemo + ping + pingplreport + pings + play + play2 + playdemo + playermodel + playerskin + playvideo + playvol + pmodel + pointfile + pqrcon + prespawn + prvm_breakpoint + prvm_callprofile + prvm_childprofile + prvm_edict + prvm_edictcount + prvm_edictget + prvm_edicts + prvm_edictset + prvm_edictwatchpoint + prvm_fields + prvm_global + prvm_globalget + prvm_globals + prvm_globalset + prvm_globalwatchpoint + prvm_printfunction + prvm_profile + r_editlights_clear + r_editlights_copyinfo + r_editlights_edit + r_editlights_editall + r_editlights_help + r_editlights_importlightentitiesfrommap + r_editlights_importlightsfile + r_editlights_lock + r_editlights_pasteinfo + r_editlights_reload + r_editlights_remove + r_editlights_save + r_editlights_spawn + r_editlights_togglecorona + r_editlights_toggleshadow + r_glsl_dumpshader + r_glsl_restart + r_listmaptextures + r_replacemaptexture + r_restart + r_texturestats + rate + rcon + reconnect + record + register_bestweapon + restart + save + saveconfig + say + say_team + screenshot + sendcvar + set + seta + setinfo + sizedown + sizeup + skins + snd_restart + snd_unloadallsounds + soundinfo + soundlist + spawn + srcon + startdemos + status + stop + stopdemo + stopdownload + stopsound + stopul + stopvideo + stuffcmds + sv_areastats + sv_cmd + sv_saveentfile + sv_startdownload + tell + timedemo + timerefresh + toggle + toggleconsole + togglemenu + topcolor + unalias + unbind + unbindall + unset + user + users + v_cshift + version + vid_restart + viewframe + viewmodel + viewnext + viewprev + wait + which + + + + accuracy_color0 + accuracy_color1 + accuracy_color2 + accuracy_color_levels + ambient_fade + ambient_level + bgmvolume + bot_ai_aimskill_blendrate + bot_ai_aimskill_firetolerance_distdegrees + bot_ai_aimskill_firetolerance_maxdegrees + bot_ai_aimskill_firetolerance_mindegrees + bot_ai_aimskill_fixedrate + bot_ai_aimskill_mouse + bot_ai_aimskill_offset + bot_ai_aimskill_order_filter_1st + bot_ai_aimskill_order_filter_2nd + bot_ai_aimskill_order_filter_3th + bot_ai_aimskill_order_filter_4th + bot_ai_aimskill_order_filter_5th + bot_ai_aimskill_order_mix_1st + bot_ai_aimskill_order_mix_2nd + bot_ai_aimskill_order_mix_3th + bot_ai_aimskill_order_mix_4th + bot_ai_aimskill_order_mix_5th + bot_ai_aimskill_think + bot_ai_bunnyhop_firstjumpdelay + bot_ai_bunnyhop_skilloffset + bot_ai_bunnyhop_startdistance + bot_ai_bunnyhop_stopdistance + bot_ai_chooseweaponinterval + bot_ai_custom_weapon_priority_close + bot_ai_custom_weapon_priority_distances + bot_ai_custom_weapon_priority_far + bot_ai_custom_weapon_priority_mid + bot_ai_dangerdetectioninterval + bot_ai_dangerdetectionupdates + bot_ai_dodgeupdateinterval + bot_ai_enemydetectioninterval + bot_ai_enemydetectionradius + bot_ai_friends_aware_pickup_radius + bot_ai_ignoregoal_timeout + bot_ai_keyboard_distance + bot_ai_keyboard_threshold + bot_ai_navigation_jetpack + bot_ai_navigation_jetpack_mindistance + bot_ai_strategyinterval + bot_ai_thinkinterval + bot_ai_weapon_combo + bot_ai_weapon_combo_threshold + bot_config_file + bot_debug_goalstack + bot_debug_tracewalk + bot_god + bot_ignore_bots + bot_join_empty + bot_navigation_ignoreplayers + bot_nofire + bot_number + bot_prefix + bot_sound_monopoly + bot_suffix + bot_usemodelnames + bot_vs_human + bot_wander_enable + camera_chase_smoothly + camera_enable + camera_forward_follows + camera_free + camera_look_attenuation + camera_look_player + camera_mouse_threshold + camera_reset + camera_speed_attenuation + camera_speed_chase + camera_speed_free + camera_speed_roll + captureleadlimit_override + capturelimit_override + cdaudio + cdaudioinitialized + chase_active + chase_back + chase_overhead + chase_pitchangle + chase_stevie + chase_up + cl_accuracy_data_receive + cl_accuracy_data_share + cl_allow_uid2name + cl_allow_uidtracking + cl_anglespeedkey + cl_announcer + cl_announcer_antispam + cl_announcer_maptime + cl_autodemo + cl_autodemo_delete + cl_autodemo_delete_keeprecords + cl_autodemo_nameformat + cl_autoscreenshot + cl_autoswitch + cl_autotaunt + cl_backspeed + cl_beams_instantaimhack + cl_beams_lightatend + cl_beams_polygons + cl_beams_quakepositionhack + cl_bob + cl_bob2 + cl_bob2cycle + cl_bob2smooth + cl_bobcycle + cl_bobfall + cl_bobfallcycle + cl_bobfallminspeed + cl_bobmodel + cl_bobmodel_side + cl_bobmodel_speed + cl_bobmodel_up + cl_bobup + cl_capturevideo + cl_capturevideo_demo_stop + cl_capturevideo_fps + cl_capturevideo_framestep + cl_capturevideo_height + cl_capturevideo_nameformat + cl_capturevideo_number + cl_capturevideo_ogg + cl_capturevideo_ogg_theora_bitrate + cl_capturevideo_ogg_theora_keyframe_auto_threshold + cl_capturevideo_ogg_theora_keyframe_bitrate_multiplier + cl_capturevideo_ogg_theora_keyframe_maxinterval + cl_capturevideo_ogg_theora_keyframe_mininterval + cl_capturevideo_ogg_theora_noise_sensitivity + cl_capturevideo_ogg_theora_quality + cl_capturevideo_ogg_theora_vp3compat + cl_capturevideo_ogg_vorbis_quality + cl_capturevideo_printfps + cl_capturevideo_realtime + cl_capturevideo_width + cl_casings + cl_casings_bronze_time + cl_casings_maxcount + cl_casings_shell_time + cl_casings_sloppy + cl_casings_ticrate + cl_clippedspectating + cl_csqc_generatemousemoveevents + cl_curl_enabled + cl_curl_maxdownloads + cl_curl_maxspeed + cl_curl_useragent + cl_curl_useragent_append + cl_damageeffect + cl_damageeffect_bones + cl_damageeffect_distribute + cl_damageeffect_lifetime + cl_damageeffect_lifetime_max + cl_damageeffect_lifetime_min + cl_damageeffect_ticrate + cl_db_saveasdump + cl_deathfade + cl_deathglow + cl_deathnoviewmodel + cl_deathscoreboard + cl_decals + cl_decals_bias + cl_decals_fadetime + cl_decals_max + cl_decals_models + cl_decals_newsystem + cl_decals_newsystem_bloodsmears + cl_decals_newsystem_immediatebloodstain + cl_decals_newsystem_intensitymultiplier + cl_decals_time + cl_decals_visculling + cl_demo_mousegrab + cl_dlights_decaybrightness + cl_dlights_decayradius + cl_dodging_timeout + cl_effects_lightningarc_branchfactor_add + cl_effects_lightningarc_branchfactor_start + cl_effects_lightningarc_drift_end + cl_effects_lightningarc_drift_start + cl_effects_lightningarc_segmentlength + cl_effects_lightningarc_simple + cl_eventchase_death + cl_eventchase_distance + cl_eventchase_maxs + cl_eventchase_mins + cl_eventchase_speed + cl_eventchase_viewoffset + cl_explosions_alpha_end + cl_explosions_alpha_start + cl_explosions_lifetime + cl_explosions_size_end + cl_explosions_size_start + cl_firststart + cl_followmodel + cl_followmodel_side_highpass + cl_followmodel_side_highpass1 + cl_followmodel_side_limit + cl_followmodel_side_lowpass + cl_followmodel_side_speed + cl_followmodel_up_highpass + cl_followmodel_up_highpass1 + cl_followmodel_up_limit + cl_followmodel_up_lowpass + cl_followmodel_up_speed + cl_forcemyplayercolors + cl_forcemyplayermodel + cl_forcemyplayerskin + cl_forceplayercolors + cl_forceplayermodels + cl_forwardspeed + cl_fullbright_items + cl_gameplayfix_soundsmovewithentities + cl_gentle + cl_gentle_damage + cl_gentle_gibs + cl_gentle_messages + cl_ghost_items + cl_ghost_items_color + cl_gibs_avelocity_scale + cl_gibs_damageforcescale + cl_gibs_lifetime + cl_gibs_maxcount + cl_gibs_sloppy + cl_gibs_ticrate + cl_gibs_velocity_random + cl_gibs_velocity_scale + cl_gibs_velocity_up + cl_gravity + cl_gunalign + cl_handicap + cl_hidewaypoints + cl_hitsound + cl_hitsound_antispam_time + cl_iplog_name + cl_itembobheight + cl_itembobspeed + cl_joinbeforedownloadsfinish + cl_leanmodel + cl_leanmodel_side_highpass + cl_leanmodel_side_highpass1 + cl_leanmodel_side_limit + cl_leanmodel_side_lowpass + cl_leanmodel_side_speed + cl_leanmodel_up_highpass + cl_leanmodel_up_highpass1 + cl_leanmodel_up_limit + cl_leanmodel_up_lowpass + cl_leanmodel_up_speed + cl_lerpanim_maxdelta_framegroups + cl_lerpanim_maxdelta_server + cl_lerpexcess + cl_lockview + cl_loddistance1 + cl_loddistance2 + cl_maxfps + cl_maxfps_alwayssleep + cl_maxidlefps + cl_maxphysicsframesperserverframe + cl_minfps + cl_minfps_fade + cl_minfps_force + cl_minfps_qualityhysteresis + cl_minfps_qualitymax + cl_minfps_qualitymin + cl_minfps_qualitymultiply + cl_minfps_qualitystepmax + cl_modeldetailreduction + cl_movecliptokeyboard + cl_movement + cl_movement_accelerate + cl_movement_airaccel_qw + cl_movement_airaccel_sideways_friction + cl_movement_airaccelerate + cl_movement_edgefriction + cl_movement_errorcompensation + cl_movement_friction + cl_movement_jumpvelocity + cl_movement_maxairspeed + cl_movement_maxspeed + cl_movement_minping + cl_movement_nettimeout + cl_movement_replay + cl_movement_stepheight + cl_movement_stopspeed + cl_movement_track_canjump + cl_movement_wallfriction + cl_movement_wateraccelerate + cl_movement_waterfriction + cl_movespeedkey + cl_netfps + cl_netimmediatebuttons + cl_netlocalping + cl_netpacketloss_receive + cl_netpacketloss_send + cl_netrepeatinput + cl_nettimesyncboundmode + cl_nettimesyncboundtolerance + cl_nettimesyncfactor + cl_noantilag + cl_nodelta + cl_nogibs + cl_nolerp + cl_noplayershadow + cl_particlegibs + cl_particles + cl_particles_alpha + cl_particles_blood + cl_particles_blood_alpha + cl_particles_blood_bloodhack + cl_particles_blood_decal_alpha + cl_particles_blood_decal_scalemax + cl_particles_blood_decal_scalemin + cl_particles_bubbles + cl_particles_bulletimpacts + cl_particles_collisions + cl_particles_explosions_shell + cl_particles_explosions_sparks + cl_particles_oldnexbeam + cl_particles_quake + cl_particles_quality + cl_particles_rain + cl_particles_size + cl_particles_smoke + cl_particles_smoke_alpha + cl_particles_smoke_alphafade + cl_particles_snow + cl_particles_sparks + cl_particles_visculling + cl_pitchspeed + cl_playerdetailreduction + cl_port + cl_precacheplayermodels + cl_projectiles_sloppy + cl_prydoncursor + cl_prydoncursor_notrace + cl_readpicture_force + cl_reticle + cl_reticle_item_nex + cl_reticle_item_normal + cl_reticle_stretch + cl_rollangle + cl_rollspeed + cl_sandbox_clipboard + cl_serverextension_download + cl_shownet + cl_sidespeed + cl_simple_items + cl_simpleitems_postfix + cl_smoothviewheight + cl_sound_hknighthit + cl_sound_r_exp3 + cl_sound_ric1 + cl_sound_ric2 + cl_sound_ric3 + cl_sound_ric_gunshot + cl_sound_tink1 + cl_sound_wizardhit + cl_spawn_event_particles + cl_spawn_event_sound + cl_spawn_point_particles + cl_spawnzoom + cl_spawnzoom_factor + cl_spawnzoom_speed + cl_stainmaps + cl_stainmaps_clearonload + cl_stairsmoothspeed + cl_startcount + cl_stripcolorcodes + cl_unpress_attack_on_weapon_switch + cl_unpress_zoom_on_death + cl_unpress_zoom_on_spawn + cl_unpress_zoom_on_weapon_switch + cl_upspeed + cl_vehicle_spiderbot_cross_alpha + cl_vehicle_spiderbot_cross_size + cl_vehicles_hud_tactical + cl_vehicles_hudalpha + cl_vehicles_hudscale + cl_velocityzoom + cl_velocityzoom_speed + cl_velocityzoom_time + cl_velocityzoom_type + cl_video_brightness + cl_video_fadein + cl_video_fadeout + cl_video_keepaspectratio + cl_video_scale + cl_video_scale_vpos + cl_video_stipple + cl_video_subtitles + cl_video_subtitles_lines + cl_video_subtitles_textsize + cl_viewmodel_scale + cl_voice_directional + cl_voice_directional_taunt_attenuation + cl_warpzone_usetrace + cl_weapon_stay_alpha + cl_weapon_stay_color + cl_weaponimpulsemode + cl_weaponpriority + cl_weaponpriority0 + cl_weaponpriority1 + cl_weaponpriority2 + cl_weaponpriority3 + cl_weaponpriority4 + cl_weaponpriority5 + cl_weaponpriority6 + cl_weaponpriority7 + cl_weaponpriority8 + cl_weaponpriority9 + cl_weaponpriority_useforcycling + cl_worldbasename + cl_worldmessage + cl_worldname + cl_worldnamenoextension + cl_yawspeed + cl_zoomfactor + cl_zoomsensitivity + cl_zoomspeed + cmdline + collision_cache + collision_debug_tracelineasbox + collision_endnudge + collision_endposnudge + collision_enternudge + collision_impactnudge + collision_leavenudge + collision_prefernudgedfraction + collision_startnudge + collision_triangle_axialsides + collision_triangle_bevelsides + con_chat + con_chatpos + con_chatrect + con_chatrect_x + con_chatrect_y + con_chatsize + con_chatsound + con_chattime + con_chatwidth + con_closeontoggleconsole + con_completion_chmap + con_completion_devmap + con_completion_exec + con_completion_gotomap + con_completion_playdemo + con_completion_playermodel + con_completion_ply + con_completion_tdem + con_completion_timedemo + con_completion_vdomap + con_completion_vmap + con_completion_vnextmap + con_nickcompletion + con_nickcompletion_flags + con_notify + con_notifyalign + con_notifysize + con_notifytime + con_textsize + coop + crosshair + crosshair_alpha + crosshair_color + crosshair_color_alpha + crosshair_color_blue + crosshair_color_green + crosshair_color_red + crosshair_color_special + crosshair_color_special_rainbow_brightness + crosshair_color_special_rainbow_delay + crosshair_crylink + crosshair_crylink_alpha + crosshair_crylink_color + crosshair_crylink_size + crosshair_dot + crosshair_dot_alpha + crosshair_dot_color + crosshair_dot_color_custom + crosshair_dot_size + crosshair_effect_scalefade + crosshair_effect_time + crosshair_electro + crosshair_electro_alpha + crosshair_electro_color + crosshair_electro_size + crosshair_enabled + crosshair_fireball + crosshair_fireball_alpha + crosshair_fireball_color + crosshair_fireball_size + crosshair_grenadelauncher + crosshair_grenadelauncher_alpha + crosshair_grenadelauncher_color + crosshair_grenadelauncher_size + crosshair_hagar + crosshair_hagar_alpha + crosshair_hagar_color + crosshair_hagar_size + crosshair_hitindication + crosshair_hitindication_color + crosshair_hitindication_per_weapon_color + crosshair_hitindication_speed + crosshair_hittest + crosshair_hittest_blur + crosshair_hittest_showimpact + crosshair_hlac + crosshair_hlac_alpha + crosshair_hlac_color + crosshair_hlac_size + crosshair_hook + crosshair_hook_alpha + crosshair_hook_color + crosshair_hook_size + crosshair_laser + crosshair_laser_alpha + crosshair_laser_color + crosshair_laser_size + crosshair_minelayer + crosshair_minelayer_alpha + crosshair_minelayer_color + crosshair_minelayer_size + crosshair_minstanex + crosshair_minstanex_alpha + crosshair_minstanex_color + crosshair_minstanex_size + crosshair_nex + crosshair_nex_alpha + crosshair_nex_color + crosshair_nex_size + crosshair_per_weapon + crosshair_pickup + crosshair_pickup_speed + crosshair_porto + crosshair_porto_alpha + crosshair_porto_color + crosshair_porto_size + crosshair_rifle + crosshair_rifle_alpha + crosshair_rifle_color + crosshair_rifle_size + crosshair_ring + crosshair_ring_alpha + crosshair_ring_hagar + crosshair_ring_hagar_alpha + crosshair_ring_inner + crosshair_ring_minelayer + crosshair_ring_minelayer_alpha + crosshair_ring_nex + crosshair_ring_nex_alpha + crosshair_ring_nex_currentcharge_movingavg_rate + crosshair_ring_nex_currentcharge_scale + crosshair_ring_nex_inner_alpha + crosshair_ring_nex_inner_color_blue + crosshair_ring_nex_inner_color_green + crosshair_ring_nex_inner_color_red + crosshair_ring_reload + crosshair_ring_reload_alpha + crosshair_ring_reload_size + crosshair_ring_size + crosshair_rocketlauncher + crosshair_rocketlauncher_alpha + crosshair_rocketlauncher_color + crosshair_rocketlauncher_size + crosshair_seeker + crosshair_seeker_alpha + crosshair_seeker_color + crosshair_seeker_size + crosshair_shotgun + crosshair_shotgun_alpha + crosshair_shotgun_color + crosshair_shotgun_size + crosshair_size + crosshair_tuba + crosshair_tuba_alpha + crosshair_tuba_color + crosshair_tuba_size + crosshair_uzi + crosshair_uzi_alpha + crosshair_uzi_color + crosshair_uzi_size + csqc_progcrc + csqc_progname + csqc_progsize + csqc_usedemoprogs + cutscene + deathmatch + developer + developer_csqcentities + developer_entityparsing + developer_extra + developer_font + developer_fteqccbugs + developer_insane + developer_loadfile + developer_loading + developer_memory + developer_memorydebug + developer_networkentities + developer_networking + developer_texturelogging + edgefriction + ekg + forceqmenu + fov + fraglimit + fraglimit_override + freelook + fs_empty_files_in_pack_mark_deletions + fs_gamedir + find + g_allow_oldnexbeam + g_antilag + g_antilag_bullets + g_antilag_nudge + g_arena + g_arena_maxspawned + g_arena_point_leadlimit + g_arena_point_limit + g_arena_respawn_delay + g_arena_respawn_waves + g_arena_round_timelimit + g_arena_roundbased + g_arena_warmup + g_arena_weapon_stay + g_as_respawn_delay + g_as_respawn_waves + g_as_weapon_stay + g_assault + g_balance_armor_blockpercent + g_balance_armor_limit + g_balance_armor_regen + g_balance_armor_regenlinear + g_balance_armor_regenstable + g_balance_armor_rot + g_balance_armor_rotlinear + g_balance_armor_rotstable + g_balance_armor_start + g_balance_cloaked_alpha + g_balance_contents_damagerate + g_balance_contents_drowndelay + g_balance_contents_playerdamage_drowning + g_balance_contents_playerdamage_lava + g_balance_contents_playerdamage_slime + g_balance_contents_projectiledamage + g_balance_crylink_primary_ammo + g_balance_crylink_primary_animtime + g_balance_crylink_primary_bouncedamagefactor + g_balance_crylink_primary_bounces + g_balance_crylink_primary_damage + g_balance_crylink_primary_edgedamage + g_balance_crylink_primary_force + g_balance_crylink_primary_joindelay + g_balance_crylink_primary_joinexplode + g_balance_crylink_primary_joinexplode_damage + g_balance_crylink_primary_joinexplode_edgedamage + g_balance_crylink_primary_joinexplode_force + g_balance_crylink_primary_joinexplode_radius + g_balance_crylink_primary_joinspread + g_balance_crylink_primary_jointime + g_balance_crylink_primary_linkexplode + g_balance_crylink_primary_middle_fadetime + g_balance_crylink_primary_middle_lifetime + g_balance_crylink_primary_other_fadetime + g_balance_crylink_primary_other_lifetime + g_balance_crylink_primary_radius + g_balance_crylink_primary_refire + g_balance_crylink_primary_shots + g_balance_crylink_primary_speed + g_balance_crylink_primary_spread + g_balance_crylink_reload_ammo + g_balance_crylink_reload_time + g_balance_crylink_secondary + g_balance_crylink_secondary_ammo + g_balance_crylink_secondary_animtime + g_balance_crylink_secondary_bouncedamagefactor + g_balance_crylink_secondary_bounces + g_balance_crylink_secondary_damage + g_balance_crylink_secondary_edgedamage + g_balance_crylink_secondary_force + g_balance_crylink_secondary_joindelay + g_balance_crylink_secondary_joinexplode + g_balance_crylink_secondary_joinexplode_damage + g_balance_crylink_secondary_joinexplode_edgedamage + g_balance_crylink_secondary_joinexplode_force + g_balance_crylink_secondary_joinexplode_radius + g_balance_crylink_secondary_joinspread + g_balance_crylink_secondary_jointime + g_balance_crylink_secondary_line_fadetime + g_balance_crylink_secondary_line_lifetime + g_balance_crylink_secondary_linkexplode + g_balance_crylink_secondary_middle_fadetime + g_balance_crylink_secondary_middle_lifetime + g_balance_crylink_secondary_radius + g_balance_crylink_secondary_refire + g_balance_crylink_secondary_shots + g_balance_crylink_secondary_speed + g_balance_crylink_secondary_spread + g_balance_crylink_secondary_spreadtype + g_balance_crylink_switchdelay_drop + g_balance_crylink_switchdelay_raise + g_balance_damagepush_speedfactor + g_balance_electro_combo_comboradius + g_balance_electro_combo_damage + g_balance_electro_combo_edgedamage + g_balance_electro_combo_force + g_balance_electro_combo_radius + g_balance_electro_combo_safeammocheck + g_balance_electro_combo_speed + g_balance_electro_lightning + g_balance_electro_primary_ammo + g_balance_electro_primary_animtime + g_balance_electro_primary_comboradius + g_balance_electro_primary_damage + g_balance_electro_primary_edgedamage + g_balance_electro_primary_falloff_halflifedist + g_balance_electro_primary_falloff_maxdist + g_balance_electro_primary_falloff_mindist + g_balance_electro_primary_force + g_balance_electro_primary_force_up + g_balance_electro_primary_lifetime + g_balance_electro_primary_radius + g_balance_electro_primary_range + g_balance_electro_primary_refire + g_balance_electro_primary_speed + g_balance_electro_primary_spread + g_balance_electro_reload_ammo + g_balance_electro_reload_time + g_balance_electro_secondary_ammo + g_balance_electro_secondary_animtime + g_balance_electro_secondary_bouncefactor + g_balance_electro_secondary_bouncestop + g_balance_electro_secondary_count + g_balance_electro_secondary_damage + g_balance_electro_secondary_damagedbycontents + g_balance_electro_secondary_damageforcescale + g_balance_electro_secondary_edgedamage + g_balance_electro_secondary_force + g_balance_electro_secondary_health + g_balance_electro_secondary_lifetime + g_balance_electro_secondary_radius + g_balance_electro_secondary_refire + g_balance_electro_secondary_refire2 + g_balance_electro_secondary_speed + g_balance_electro_secondary_speed_up + g_balance_electro_secondary_speed_z + g_balance_electro_secondary_spread + g_balance_electro_switchdelay_drop + g_balance_electro_switchdelay_raise + g_balance_falldamage_deadminspeed + g_balance_falldamage_factor + g_balance_falldamage_maxdamage + g_balance_falldamage_minspeed + g_balance_fireball_primary_animtime + g_balance_fireball_primary_bfgdamage + g_balance_fireball_primary_bfgforce + g_balance_fireball_primary_bfgradius + g_balance_fireball_primary_damage + g_balance_fireball_primary_damageforcescale + g_balance_fireball_primary_edgedamage + g_balance_fireball_primary_force + g_balance_fireball_primary_health + g_balance_fireball_primary_laserburntime + g_balance_fireball_primary_laserdamage + g_balance_fireball_primary_laseredgedamage + g_balance_fireball_primary_laserradius + g_balance_fireball_primary_lifetime + g_balance_fireball_primary_radius + g_balance_fireball_primary_refire + g_balance_fireball_primary_refire2 + g_balance_fireball_primary_speed + g_balance_fireball_primary_spread + g_balance_fireball_secondary_animtime + g_balance_fireball_secondary_damage + g_balance_fireball_secondary_damageforcescale + g_balance_fireball_secondary_damagetime + g_balance_fireball_secondary_force + g_balance_fireball_secondary_laserburntime + g_balance_fireball_secondary_laserdamage + g_balance_fireball_secondary_laseredgedamage + g_balance_fireball_secondary_laserradius + g_balance_fireball_secondary_lifetime + g_balance_fireball_secondary_refire + g_balance_fireball_secondary_speed + g_balance_fireball_secondary_speed_up + g_balance_fireball_secondary_speed_z + g_balance_fireball_secondary_spread + g_balance_fireball_switchdelay_drop + g_balance_fireball_switchdelay_raise + g_balance_firetransfer_damage + g_balance_firetransfer_time + g_balance_fuel_limit + g_balance_fuel_regen + g_balance_fuel_regenlinear + g_balance_fuel_regenstable + g_balance_fuel_rot + g_balance_fuel_rotlinear + g_balance_fuel_rotstable + g_balance_grapplehook_airfriction + g_balance_grapplehook_damagedbycontents + g_balance_grapplehook_force_rubber + g_balance_grapplehook_force_rubber_overstretch + g_balance_grapplehook_health + g_balance_grapplehook_length_min + g_balance_grapplehook_speed_fly + g_balance_grapplehook_speed_pull + g_balance_grapplehook_stretch + g_balance_grenadelauncher_bouncefactor + g_balance_grenadelauncher_bouncestop + g_balance_grenadelauncher_primary_ammo + g_balance_grenadelauncher_primary_animtime + g_balance_grenadelauncher_primary_damage + g_balance_grenadelauncher_primary_damageforcescale + g_balance_grenadelauncher_primary_edgedamage + g_balance_grenadelauncher_primary_force + g_balance_grenadelauncher_primary_health + g_balance_grenadelauncher_primary_lifetime + g_balance_grenadelauncher_primary_lifetime2 + g_balance_grenadelauncher_primary_radius + g_balance_grenadelauncher_primary_refire + g_balance_grenadelauncher_primary_remote_minbouncecnt + g_balance_grenadelauncher_primary_speed + g_balance_grenadelauncher_primary_speed_up + g_balance_grenadelauncher_primary_speed_z + g_balance_grenadelauncher_primary_spread + g_balance_grenadelauncher_primary_type + g_balance_grenadelauncher_reload_ammo + g_balance_grenadelauncher_reload_time + g_balance_grenadelauncher_secondary_ammo + g_balance_grenadelauncher_secondary_animtime + g_balance_grenadelauncher_secondary_damage + g_balance_grenadelauncher_secondary_damageforcescale + g_balance_grenadelauncher_secondary_edgedamage + g_balance_grenadelauncher_secondary_force + g_balance_grenadelauncher_secondary_health + g_balance_grenadelauncher_secondary_lifetime + g_balance_grenadelauncher_secondary_lifetime_bounce + g_balance_grenadelauncher_secondary_lifetime_stick + g_balance_grenadelauncher_secondary_radius + g_balance_grenadelauncher_secondary_refire + g_balance_grenadelauncher_secondary_remote_detonateprimary + g_balance_grenadelauncher_secondary_speed + g_balance_grenadelauncher_secondary_speed_up + g_balance_grenadelauncher_secondary_speed_z + g_balance_grenadelauncher_secondary_spread + g_balance_grenadelauncher_secondary_type + g_balance_grenadelauncher_switchdelay_drop + g_balance_grenadelauncher_switchdelay_raise + g_balance_hagar_primary_ammo + g_balance_hagar_primary_damage + g_balance_hagar_primary_damageforcescale + g_balance_hagar_primary_edgedamage + g_balance_hagar_primary_force + g_balance_hagar_primary_health + g_balance_hagar_primary_lifetime + g_balance_hagar_primary_radius + g_balance_hagar_primary_refire + g_balance_hagar_primary_speed + g_balance_hagar_primary_spread + g_balance_hagar_reload_ammo + g_balance_hagar_reload_time + g_balance_hagar_secondary + g_balance_hagar_secondary_ammo + g_balance_hagar_secondary_damage + g_balance_hagar_secondary_damageforcescale + g_balance_hagar_secondary_edgedamage + g_balance_hagar_secondary_force + g_balance_hagar_secondary_health + g_balance_hagar_secondary_lifetime_min + g_balance_hagar_secondary_lifetime_rand + g_balance_hagar_secondary_load + g_balance_hagar_secondary_load_abort + g_balance_hagar_secondary_load_animtime + g_balance_hagar_secondary_load_hold + g_balance_hagar_secondary_load_linkexplode + g_balance_hagar_secondary_load_max + g_balance_hagar_secondary_load_releasedeath + g_balance_hagar_secondary_load_speed + g_balance_hagar_secondary_load_spread + g_balance_hagar_secondary_load_spread_bias + g_balance_hagar_secondary_radius + g_balance_hagar_secondary_refire + g_balance_hagar_secondary_speed + g_balance_hagar_secondary_spread + g_balance_hagar_switchdelay_drop + g_balance_hagar_switchdelay_raise + g_balance_health_limit + g_balance_health_regen + g_balance_health_regenlinear + g_balance_health_regenstable + g_balance_health_rot + g_balance_health_rotlinear + g_balance_health_rotstable + g_balance_health_start + g_balance_hlac_primary_ammo + g_balance_hlac_primary_animtime + g_balance_hlac_primary_damage + g_balance_hlac_primary_edgedamage + g_balance_hlac_primary_force + g_balance_hlac_primary_lifetime + g_balance_hlac_primary_radius + g_balance_hlac_primary_refire + g_balance_hlac_primary_speed + g_balance_hlac_primary_spread_add + g_balance_hlac_primary_spread_crouchmod + g_balance_hlac_primary_spread_max + g_balance_hlac_primary_spread_min + g_balance_hlac_reload_ammo + g_balance_hlac_reload_time + g_balance_hlac_secondary + g_balance_hlac_secondary_ammo + g_balance_hlac_secondary_animtime + g_balance_hlac_secondary_damage + g_balance_hlac_secondary_edgedamage + g_balance_hlac_secondary_force + g_balance_hlac_secondary_lifetime + g_balance_hlac_secondary_radius + g_balance_hlac_secondary_refire + g_balance_hlac_secondary_shots + g_balance_hlac_secondary_speed + g_balance_hlac_secondary_spread + g_balance_hlac_secondary_spread_crouchmod + g_balance_hlac_switchdelay_drop + g_balance_hlac_switchdelay_raise + g_balance_hook_primary_animtime + g_balance_hook_primary_fuel + g_balance_hook_primary_hooked_fuel + g_balance_hook_primary_hooked_time_free + g_balance_hook_primary_hooked_time_max + g_balance_hook_primary_refire + g_balance_hook_secondary_ammo + g_balance_hook_secondary_animtime + g_balance_hook_secondary_damage + g_balance_hook_secondary_damageforcescale + g_balance_hook_secondary_duration + g_balance_hook_secondary_edgedamage + g_balance_hook_secondary_force + g_balance_hook_secondary_gravity + g_balance_hook_secondary_health + g_balance_hook_secondary_lifetime + g_balance_hook_secondary_power + g_balance_hook_secondary_radius + g_balance_hook_secondary_refire + g_balance_hook_secondary_speed + g_balance_hook_switchdelay_drop + g_balance_hook_switchdelay_raise + g_balance_keyhunt_damageforcescale + g_balance_keyhunt_delay_collect + g_balance_keyhunt_delay_fadeout + g_balance_keyhunt_delay_return + g_balance_keyhunt_delay_round + g_balance_keyhunt_delay_tracking + g_balance_keyhunt_dropvelocity + g_balance_keyhunt_maxdist + g_balance_keyhunt_protecttime + g_balance_keyhunt_score_capture + g_balance_keyhunt_score_carrierfrag + g_balance_keyhunt_score_collect + g_balance_keyhunt_score_destroyed + g_balance_keyhunt_score_destroyed_ownfactor + g_balance_keyhunt_score_push + g_balance_keyhunt_throwvelocity + g_balance_kill_antispam + g_balance_kill_delay + g_balance_laser_primary_animtime + g_balance_laser_primary_damage + g_balance_laser_primary_delay + g_balance_laser_primary_edgedamage + g_balance_laser_primary_force + g_balance_laser_primary_force_other_scale + g_balance_laser_primary_force_velocitybias + g_balance_laser_primary_force_zscale + g_balance_laser_primary_gauntlet + g_balance_laser_primary_lifetime + g_balance_laser_primary_radius + g_balance_laser_primary_refire + g_balance_laser_primary_shotangle + g_balance_laser_primary_speed + g_balance_laser_primary_spread + g_balance_laser_reload_ammo + g_balance_laser_reload_time + g_balance_laser_secondary + g_balance_laser_secondary_animtime + g_balance_laser_secondary_damage + g_balance_laser_secondary_delay + g_balance_laser_secondary_edgedamage + g_balance_laser_secondary_force + g_balance_laser_secondary_force_other_scale + g_balance_laser_secondary_force_velocitybias + g_balance_laser_secondary_force_zscale + g_balance_laser_secondary_gauntlet + g_balance_laser_secondary_lifetime + g_balance_laser_secondary_radius + g_balance_laser_secondary_refire + g_balance_laser_secondary_shotangle + g_balance_laser_secondary_speed + g_balance_laser_secondary_spread + g_balance_laser_switchdelay_drop + g_balance_laser_switchdelay_raise + g_balance_minelayer_ammo + g_balance_minelayer_animtime + g_balance_minelayer_damage + g_balance_minelayer_damageforcescale + g_balance_minelayer_detonatedelay + g_balance_minelayer_edgedamage + g_balance_minelayer_force + g_balance_minelayer_health + g_balance_minelayer_lifetime + g_balance_minelayer_lifetime_countdown + g_balance_minelayer_limit + g_balance_minelayer_protection + g_balance_minelayer_proximityradius + g_balance_minelayer_radius + g_balance_minelayer_refire + g_balance_minelayer_reload_ammo + g_balance_minelayer_reload_time + g_balance_minelayer_remote_damage + g_balance_minelayer_remote_edgedamage + g_balance_minelayer_remote_force + g_balance_minelayer_remote_radius + g_balance_minelayer_speed + g_balance_minelayer_switchdelay_drop + g_balance_minelayer_switchdelay_raise + g_balance_minelayer_time + g_balance_minstanex_ammo + g_balance_minstanex_animtime + g_balance_minstanex_laser_ammo + g_balance_minstanex_laser_animtime + g_balance_minstanex_laser_refire + g_balance_minstanex_refire + g_balance_minstanex_reload_ammo + g_balance_minstanex_reload_time + g_balance_minstanex_switchdelay_drop + g_balance_minstanex_switchdelay_raise + g_balance_nex_charge + g_balance_nex_charge_animlimit + g_balance_nex_charge_limit + g_balance_nex_charge_maxspeed + g_balance_nex_charge_mindmg + g_balance_nex_charge_minspeed + g_balance_nex_charge_rate + g_balance_nex_charge_rot_pause + g_balance_nex_charge_rot_rate + g_balance_nex_charge_shot_multiplier + g_balance_nex_charge_start + g_balance_nex_charge_velocity_rate + g_balance_nex_primary_ammo + g_balance_nex_primary_animtime + g_balance_nex_primary_damage + g_balance_nex_primary_damagefalloff_forcehalflife + g_balance_nex_primary_damagefalloff_halflife + g_balance_nex_primary_damagefalloff_maxdist + g_balance_nex_primary_damagefalloff_mindist + g_balance_nex_primary_force + g_balance_nex_primary_refire + g_balance_nex_reload_ammo + g_balance_nex_reload_time + g_balance_nex_secondary + g_balance_nex_secondary_ammo + g_balance_nex_secondary_animtime + g_balance_nex_secondary_charge + g_balance_nex_secondary_charge_rate + g_balance_nex_secondary_chargepool + g_balance_nex_secondary_chargepool_pause_health_regen + g_balance_nex_secondary_chargepool_pause_regen + g_balance_nex_secondary_chargepool_regen + g_balance_nex_secondary_damage + g_balance_nex_secondary_damagefalloff_forcehalflife + g_balance_nex_secondary_damagefalloff_halflife + g_balance_nex_secondary_damagefalloff_maxdist + g_balance_nex_secondary_damagefalloff_mindist + g_balance_nex_secondary_force + g_balance_nex_secondary_refire + g_balance_nex_switchdelay_drop + g_balance_nex_switchdelay_raise + g_balance_nexball_primary_animtime + g_balance_nexball_primary_refire + g_balance_nexball_primary_speed + g_balance_nexball_secondary_animtime + g_balance_nexball_secondary_force + g_balance_nexball_secondary_lifetime + g_balance_nexball_secondary_refire + g_balance_nexball_secondary_speed + g_balance_nix_ammo_cells + g_balance_nix_ammo_fuel + g_balance_nix_ammo_nails + g_balance_nix_ammo_rockets + g_balance_nix_ammo_shells + g_balance_nix_ammoincr_cells + g_balance_nix_ammoincr_fuel + g_balance_nix_ammoincr_nails + g_balance_nix_ammoincr_rockets + g_balance_nix_ammoincr_shells + g_balance_nix_incrtime + g_balance_nix_roundtime + g_balance_pause_armor_rot + g_balance_pause_armor_rot_spawn + g_balance_pause_fuel_regen + g_balance_pause_fuel_rot + g_balance_pause_fuel_rot_spawn + g_balance_pause_health_regen + g_balance_pause_health_regen_spawn + g_balance_pause_health_rot + g_balance_pause_health_rot_spawn + g_balance_portal_health + g_balance_portal_lifetime + g_balance_porto_primary_animtime + g_balance_porto_primary_lifetime + g_balance_porto_primary_refire + g_balance_porto_primary_speed + g_balance_porto_secondary + g_balance_porto_secondary_animtime + g_balance_porto_secondary_lifetime + g_balance_porto_secondary_refire + g_balance_porto_secondary_speed + g_balance_porto_switchdelay_drop + g_balance_porto_switchdelay_raise + g_balance_powerup_invincible_takedamage + g_balance_powerup_invincible_time + g_balance_powerup_strength_damage + g_balance_powerup_strength_force + g_balance_powerup_strength_selfdamage + g_balance_powerup_strength_selfforce + g_balance_powerup_strength_time + g_balance_rifle_bursttime + g_balance_rifle_primary_ammo + g_balance_rifle_primary_animtime + g_balance_rifle_primary_bulletconstant + g_balance_rifle_primary_bullethail + g_balance_rifle_primary_burstcost + g_balance_rifle_primary_damage + g_balance_rifle_primary_force + g_balance_rifle_primary_lifetime + g_balance_rifle_primary_refire + g_balance_rifle_primary_shots + g_balance_rifle_primary_speed + g_balance_rifle_primary_spread + g_balance_rifle_primary_tracer + g_balance_rifle_reload_ammo + g_balance_rifle_reload_time + g_balance_rifle_secondary + g_balance_rifle_secondary_ammo + g_balance_rifle_secondary_animtime + g_balance_rifle_secondary_bulletconstant + g_balance_rifle_secondary_bullethail + g_balance_rifle_secondary_burstcost + g_balance_rifle_secondary_damage + g_balance_rifle_secondary_force + g_balance_rifle_secondary_lifetime + g_balance_rifle_secondary_refire + g_balance_rifle_secondary_reload + g_balance_rifle_secondary_shots + g_balance_rifle_secondary_speed + g_balance_rifle_secondary_spread + g_balance_rifle_secondary_tracer + g_balance_rifle_switchdelay_drop + g_balance_rifle_switchdelay_raise + g_balance_rocketlauncher_ammo + g_balance_rocketlauncher_animtime + g_balance_rocketlauncher_damage + g_balance_rocketlauncher_damageforcescale + g_balance_rocketlauncher_detonatedelay + g_balance_rocketlauncher_edgedamage + g_balance_rocketlauncher_force + g_balance_rocketlauncher_guidedelay + g_balance_rocketlauncher_guidegoal + g_balance_rocketlauncher_guiderate + g_balance_rocketlauncher_guideratedelay + g_balance_rocketlauncher_guidestop + g_balance_rocketlauncher_health + g_balance_rocketlauncher_lifetime + g_balance_rocketlauncher_radius + g_balance_rocketlauncher_refire + g_balance_rocketlauncher_reload_ammo + g_balance_rocketlauncher_reload_time + g_balance_rocketlauncher_remote_damage + g_balance_rocketlauncher_remote_edgedamage + g_balance_rocketlauncher_remote_force + g_balance_rocketlauncher_remote_radius + g_balance_rocketlauncher_speed + g_balance_rocketlauncher_speedaccel + g_balance_rocketlauncher_speedstart + g_balance_rocketlauncher_switchdelay_drop + g_balance_rocketlauncher_switchdelay_raise + g_balance_seeker_flac_ammo + g_balance_seeker_flac_animtime + g_balance_seeker_flac_damage + g_balance_seeker_flac_edgedamage + g_balance_seeker_flac_force + g_balance_seeker_flac_lifetime + g_balance_seeker_flac_lifetime_rand + g_balance_seeker_flac_radius + g_balance_seeker_flac_refire + g_balance_seeker_flac_speed + g_balance_seeker_flac_speed_up + g_balance_seeker_flac_speed_z + g_balance_seeker_flac_spread + g_balance_seeker_missile_accel + g_balance_seeker_missile_ammo + g_balance_seeker_missile_animtime + g_balance_seeker_missile_count + g_balance_seeker_missile_damage + g_balance_seeker_missile_damageforcescale + g_balance_seeker_missile_decel + g_balance_seeker_missile_delay + g_balance_seeker_missile_edgedamage + g_balance_seeker_missile_force + g_balance_seeker_missile_health + g_balance_seeker_missile_lifetime + g_balance_seeker_missile_proxy + g_balance_seeker_missile_proxy_delay + g_balance_seeker_missile_proxy_maxrange + g_balance_seeker_missile_radius + g_balance_seeker_missile_refire + g_balance_seeker_missile_smart + g_balance_seeker_missile_smart_mindist + g_balance_seeker_missile_smart_trace_max + g_balance_seeker_missile_smart_trace_min + g_balance_seeker_missile_speed + g_balance_seeker_missile_speed_max + g_balance_seeker_missile_speed_up + g_balance_seeker_missile_speed_z + g_balance_seeker_missile_spread + g_balance_seeker_missile_turnrate + g_balance_seeker_reload_ammo + g_balance_seeker_reload_time + g_balance_seeker_switchdelay_drop + g_balance_seeker_switchdelay_raise + g_balance_seeker_tag_ammo + g_balance_seeker_tag_animtime + g_balance_seeker_tag_damageforcescale + g_balance_seeker_tag_health + g_balance_seeker_tag_lifetime + g_balance_seeker_tag_refire + g_balance_seeker_tag_speed + g_balance_seeker_tag_spread + g_balance_seeker_tag_tracker_lifetime + g_balance_seeker_type + g_balance_selfdamagepercent + g_balance_shotgun_primary_ammo + g_balance_shotgun_primary_animtime + g_balance_shotgun_primary_bulletconstant + g_balance_shotgun_primary_bullets + g_balance_shotgun_primary_damage + g_balance_shotgun_primary_force + g_balance_shotgun_primary_refire + g_balance_shotgun_primary_speed + g_balance_shotgun_primary_spread + g_balance_shotgun_reload_ammo + g_balance_shotgun_reload_time + g_balance_shotgun_secondary + g_balance_shotgun_secondary_animtime + g_balance_shotgun_secondary_damage + g_balance_shotgun_secondary_force + g_balance_shotgun_secondary_melee_delay + g_balance_shotgun_secondary_melee_multihit + g_balance_shotgun_secondary_melee_no_doubleslap + g_balance_shotgun_secondary_melee_nonplayerdamage + g_balance_shotgun_secondary_melee_range + g_balance_shotgun_secondary_melee_swing_side + g_balance_shotgun_secondary_melee_swing_up + g_balance_shotgun_secondary_melee_time + g_balance_shotgun_secondary_melee_traces + g_balance_shotgun_secondary_refire + g_balance_shotgun_switchdelay_drop + g_balance_shotgun_switchdelay_raise + g_balance_superweapons_time + g_balance_teams + g_balance_teams_prevent_imbalance + g_balance_teams_scorefactor + g_balance_tuba_animtime + g_balance_tuba_attenuation + g_balance_tuba_damage + g_balance_tuba_edgedamage + g_balance_tuba_fadetime + g_balance_tuba_force + g_balance_tuba_pitchstep + g_balance_tuba_radius + g_balance_tuba_refire + g_balance_tuba_switchdelay_drop + g_balance_tuba_switchdelay_raise + g_balance_tuba_volume + g_balance_uzi_bulletconstant + g_balance_uzi_burst + g_balance_uzi_burst_ammo + g_balance_uzi_burst_animtime + g_balance_uzi_burst_damage + g_balance_uzi_burst_force + g_balance_uzi_burst_refire + g_balance_uzi_burst_refire2 + g_balance_uzi_burst_spread + g_balance_uzi_first + g_balance_uzi_first_ammo + g_balance_uzi_first_damage + g_balance_uzi_first_force + g_balance_uzi_first_refire + g_balance_uzi_first_spread + g_balance_uzi_mode + g_balance_uzi_reload_ammo + g_balance_uzi_reload_time + g_balance_uzi_speed + g_balance_uzi_spread_add + g_balance_uzi_spread_max + g_balance_uzi_spread_min + g_balance_uzi_sustained_ammo + g_balance_uzi_sustained_damage + g_balance_uzi_sustained_force + g_balance_uzi_sustained_refire + g_balance_uzi_sustained_spread + g_balance_uzi_switchdelay_drop + g_balance_uzi_switchdelay_raise + g_ballistics_density_corpse + g_ballistics_density_player + g_ballistics_materialconstant + g_ballistics_mindistance + g_ban_default_bantime + g_ban_default_masksize + g_ban_sync_interval + g_ban_sync_timeout + g_ban_sync_trusted_servers + g_ban_sync_trusted_servers_verify + g_ban_sync_uri + g_banned_list + g_banned_list_idmode + g_bastet + g_bloodloss + g_botclip_collisions + g_bugrigs + g_bugrigs_accel + g_bugrigs_air_steering + g_bugrigs_angle_smoothing + g_bugrigs_friction_air + g_bugrigs_friction_brake + g_bugrigs_friction_floor + g_bugrigs_planar_movement + g_bugrigs_planar_movement_car_jumping + g_bugrigs_reverse_speeding + g_bugrigs_reverse_spinning + g_bugrigs_reverse_stopping + g_bugrigs_speed_pow + g_bugrigs_speed_ref + g_bugrigs_steer + g_ca + g_ca_damage2score_multiplier + g_ca_point_leadlimit + g_ca_point_limit + g_ca_respawn_delay + g_ca_respawn_waves + g_ca_round_timelimit + g_ca_spectate_enemies + g_ca_teams + g_ca_teams_override + g_ca_warmup + g_ca_weapon_stay + g_campaign + g_campaign_forceteam + g_campaign_name + g_campaign_skill + g_campaignxonoticbeta_index + g_campaignxonoticbeta_won + g_casings + g_cdtracks_dontusebydefault + g_cdtracks_remaplist + g_changeteam_banned + g_changeteam_fragtransfer + g_chat_flood_burst + g_chat_flood_burst_team + g_chat_flood_burst_tell + g_chat_flood_lmax + g_chat_flood_lmax_team + g_chat_flood_lmax_tell + g_chat_flood_notify_flooder + g_chat_flood_spl + g_chat_flood_spl_team + g_chat_flood_spl_tell + g_chat_nospectators + g_chat_teamcolors + g_chat_tellprivacy + g_cloaked + g_configversion + g_ctf + g_ctf_allow_vehicle_carry + g_ctf_allow_vehicle_touch + g_ctf_captimerecord_always + g_ctf_drop_velocity_side + g_ctf_drop_velocity_up + g_ctf_dropped_capture_delay + g_ctf_dropped_capture_radius + g_ctf_dynamiclights + g_ctf_flag_blue_model + g_ctf_flag_blue_skin + g_ctf_flag_collect_delay + g_ctf_flag_damageforcescale + g_ctf_flag_dropped_floatinwater + g_ctf_flag_dropped_waypoint + g_ctf_flag_glowtrails + g_ctf_flag_health + g_ctf_flag_red_model + g_ctf_flag_red_skin + g_ctf_flag_return_damage + g_ctf_flag_return_dropped + g_ctf_flag_return_time + g_ctf_flag_return_when_unreachable + g_ctf_flagcarrier_auto_helpme_damage + g_ctf_flagcarrier_auto_helpme_time + g_ctf_flagcarrier_damagefactor + g_ctf_flagcarrier_forcefactor + g_ctf_flagcarrier_selfdamagefactor + g_ctf_flagcarrier_selfforcefactor + g_ctf_flagcarrier_waypointforenemy_spotting + g_ctf_fullbrightflags + g_ctf_ignore_frags + g_ctf_pass + g_ctf_pass_arc + g_ctf_pass_arc_max + g_ctf_pass_directional_max + g_ctf_pass_directional_min + g_ctf_pass_radius + g_ctf_pass_request + g_ctf_pass_timelimit + g_ctf_pass_turnrate + g_ctf_pass_velocity + g_ctf_pass_wait + g_ctf_portalteleport + g_ctf_respawn_delay + g_ctf_respawn_waves + g_ctf_reverse + g_ctf_score_capture + g_ctf_score_capture_assist + g_ctf_score_kill + g_ctf_score_penalty_drop + g_ctf_score_penalty_returned + g_ctf_score_penalty_suicidedrop + g_ctf_score_pickup_base + g_ctf_score_pickup_dropped_early + g_ctf_score_pickup_dropped_late + g_ctf_score_return + g_ctf_shield_force + g_ctf_shield_max_ratio + g_ctf_shield_min_negscore + g_ctf_stalemate + g_ctf_stalemate_endcondition + g_ctf_stalemate_time + g_ctf_throw + g_ctf_throw_angle_max + g_ctf_throw_angle_min + g_ctf_throw_punish_count + g_ctf_throw_punish_delay + g_ctf_throw_punish_time + g_ctf_throw_strengthmultiplier + g_ctf_throw_velocity_forward + g_ctf_throw_velocity_up + g_ctf_weapon_stay + g_cts + g_cts_finish_kill_delay + g_cts_respawn_delay + g_cts_respawn_waves + g_cts_selfdamage + g_cts_weapon_stay + g_deathglow + g_debug_bot_commands + g_debug_defaultsounds + g_dm + g_dm_respawn_delay + g_dm_respawn_waves + g_dm_weapon_stay + g_dodging + g_dom_respawn_delay + g_dom_respawn_waves + g_dom_weapon_stay + g_domination + g_domination_default_teams + g_domination_disable_frags + g_domination_point_amt + g_domination_point_capturetime + g_domination_point_fullbright + g_domination_point_glow + g_domination_point_leadlimit + g_domination_point_limit + g_domination_point_rate + g_domination_teams_override + g_footsteps + g_forced_respawn + g_forced_team_blue + g_forced_team_otherwise + g_forced_team_pink + g_forced_team_red + g_forced_team_yellow + g_freezetag + g_freezetag_frozen_force + g_freezetag_frozen_maxtime + g_freezetag_point_leadlimit + g_freezetag_point_limit + g_freezetag_revive_clearspeed + g_freezetag_revive_extra_size + g_freezetag_revive_speed + g_freezetag_round_timelimit + g_freezetag_teams + g_freezetag_teams_override + g_freezetag_warmup + g_friendlyfire + g_friendlyfire_virtual + g_friendlyfire_virtual_force + g_ft_respawn_delay + g_ft_respawn_waves + g_ft_weapon_stay + g_full_getstatus_responses + g_fullbrightitems + g_fullbrightplayers + g_grab_range + g_grappling_hook + g_grappling_hook_tarzan + g_hitplots + g_hitplots_individuals + g_invincible_projectiles + g_jetpack + g_jetpack_acceleration_side + g_jetpack_acceleration_up + g_jetpack_antigravity + g_jetpack_attenuation + g_jetpack_fuel + g_jetpack_maxspeed_side + g_jetpack_maxspeed_up + g_jump_grunt + g_ka_respawn_delay + g_ka_respawn_waves + g_ka_weapon_stay + g_keepaway + g_keepaway_ballcarrier_damage + g_keepaway_ballcarrier_effects + g_keepaway_ballcarrier_force + g_keepaway_ballcarrier_highspeed + g_keepaway_ballcarrier_selfdamage + g_keepaway_ballcarrier_selfforce + g_keepaway_noncarrier_damage + g_keepaway_noncarrier_force + g_keepaway_noncarrier_selfdamage + g_keepaway_noncarrier_selfforce + g_keepaway_noncarrier_warn + g_keepaway_score_bckill + g_keepaway_score_killac + g_keepaway_score_timeinterval + g_keepaway_score_timepoints + g_keepaway_teams + g_keepaway_teams_override + g_keepawayball_damageforcescale + g_keepawayball_effects + g_keepawayball_respawntime + g_keepawayball_trail_color + g_keyhunt + g_keyhunt_point_leadlimit + g_keyhunt_point_limit + g_keyhunt_teams + g_keyhunt_teams_override + g_kh_respawn_delay + g_kh_respawn_waves + g_kh_weapon_stay + g_lms + g_lms_campcheck_damage + g_lms_campcheck_distance + g_lms_campcheck_interval + g_lms_extra_lives + g_lms_join_anytime + g_lms_last_join + g_lms_lives_override + g_lms_regenerate + g_lms_respawn_delay + g_lms_respawn_waves + g_lms_start_ammo_cells + g_lms_start_ammo_fuel + g_lms_start_ammo_nails + g_lms_start_ammo_rockets + g_lms_start_ammo_shells + g_lms_start_armor + g_lms_start_health + g_lms_weapon_stay + g_mapinfo_allow_unsupported_modes_and_let_stuff_break + g_mapinfo_settemp_acl + g_maplist + g_maplist_allow_frustrating + g_maplist_allow_hidden + g_maplist_check_waypoints + g_maplist_index + g_maplist_mostrecent + g_maplist_mostrecent_count + g_maplist_selectrandom + g_maplist_shuffle + g_maplist_votable + g_maplist_votable_abstain + g_maplist_votable_keeptwotime + g_maplist_votable_nodetail + g_maplist_votable_screenshot_dir + g_maplist_votable_suggestions + g_maplist_votable_suggestions_override_mostrecent + g_maplist_votable_timeout + g_max_info_autoscreenshot + g_maxplayers + g_maxplayers_spectator_blocktime + g_maxpushtime + g_maxspeed + g_midair + g_midair_shieldtime + g_minstagib + g_minstagib_ammo_drop + g_minstagib_ammo_start + g_minstagib_extralives + g_minstagib_invis_alpha + g_minstagib_speed_highspeed + g_mirrordamage + g_mirrordamage_virtual + g_mod_balance + g_mod_config + g_mod_physics + g_movement_highspeed + g_multijump + g_multijump_add + g_multijump_speed + g_mutatormsg + g_nb_respawn_delay + g_nb_respawn_waves + g_nb_weapon_stay + g_new_toys + g_new_toys_autoreplace + g_nexball + g_nexball_basketball_bouncefactor + g_nexball_basketball_bouncestop + g_nexball_basketball_carrier_highspeed + g_nexball_basketball_delay_hold + g_nexball_basketball_delay_hold_forteam + g_nexball_basketball_effects_default + g_nexball_basketball_meter + g_nexball_basketball_meter_maxpower + g_nexball_basketball_meter_minpower + g_nexball_basketball_teamsteal + g_nexball_basketball_trail + g_nexball_delay_collect + g_nexball_delay_goal + g_nexball_delay_idle + g_nexball_delay_start + g_nexball_football_boost_forward + g_nexball_football_boost_up + g_nexball_football_bouncefactor + g_nexball_football_bouncestop + g_nexball_football_physics + g_nexball_football_trail + g_nexball_goalleadlimit + g_nexball_goallimit + g_nexball_meter_period + g_nexball_radar_showallplayers + g_nexball_safepass_holdtime + g_nexball_safepass_maxdist + g_nexball_safepass_turnrate + g_nexball_sound_bounce + g_nexball_tackling + g_nexball_trail_color + g_nexball_viewmodel_offset + g_nexball_viewmodel_scale + g_nick_flood_penalty + g_nick_flood_penalty_red + g_nick_flood_penalty_yellow + g_nick_flood_timeout + g_nix + g_nix_with_healtharmor + g_nix_with_laser + g_nix_with_powerups + g_nodepthtestitems + g_nodepthtestplayers + g_norecoil + g_ons_respawn_delay + g_ons_respawn_waves + g_ons_weapon_stay + g_onslaught + g_onslaught_cp_buildhealth + g_onslaught_cp_buildtime + g_onslaught_cp_health + g_onslaught_cp_proxydecap + g_onslaught_cp_proxydecap_distance + g_onslaught_cp_proxydecap_dps + g_onslaught_cp_regen + g_onslaught_gen_health + g_onslaught_spawn_at_controlpoints + g_onslaught_spawn_at_generator + g_physical_items + g_physical_items_damageforcescale + g_physical_items_reset + g_pickup_ammo_anyway + g_pickup_armorbig + g_pickup_armorbig_anyway + g_pickup_armorbig_max + g_pickup_armorlarge + g_pickup_armorlarge_anyway + g_pickup_armorlarge_max + g_pickup_armormedium + g_pickup_armormedium_anyway + g_pickup_armormedium_max + g_pickup_armorsmall + g_pickup_armorsmall_anyway + g_pickup_armorsmall_max + g_pickup_cells + g_pickup_cells_max + g_pickup_cells_weapon + g_pickup_fuel + g_pickup_fuel_jetpack + g_pickup_fuel_max + g_pickup_fuel_weapon + g_pickup_healthlarge + g_pickup_healthlarge_anyway + g_pickup_healthlarge_max + g_pickup_healthmedium + g_pickup_healthmedium_anyway + g_pickup_healthmedium_max + g_pickup_healthmega + g_pickup_healthmega_anyway + g_pickup_healthmega_max + g_pickup_healthsmall + g_pickup_healthsmall_anyway + g_pickup_healthsmall_max + g_pickup_items + g_pickup_nails + g_pickup_nails_max + g_pickup_nails_weapon + g_pickup_respawntime_ammo + g_pickup_respawntime_long + g_pickup_respawntime_medium + g_pickup_respawntime_powerup + g_pickup_respawntime_short + g_pickup_respawntime_superweapon + g_pickup_respawntime_weapon + g_pickup_respawntimejitter_ammo + g_pickup_respawntimejitter_long + g_pickup_respawntimejitter_medium + g_pickup_respawntimejitter_powerup + g_pickup_respawntimejitter_short + g_pickup_respawntimejitter_superweapon + g_pickup_respawntimejitter_weapon + g_pickup_rockets + g_pickup_rockets_max + g_pickup_rockets_weapon + g_pickup_shells + g_pickup_shells_max + g_pickup_shells_weapon + g_pickup_weapons_anyway + g_pinata + g_player_alpha + g_player_brightness + g_playerclip_collisions + g_playerstats_uri + g_powerups + g_projectiles_damage + g_projectiles_keep_owner + g_projectiles_newton_style + g_projectiles_newton_style_2_maxfactor + g_projectiles_newton_style_2_minfactor + g_projectiles_spread_style + g_race + g_race_laps_limit + g_race_qualifying_timelimit + g_race_qualifying_timelimit_override + g_race_teams + g_rc_respawn_delay + g_rc_respawn_waves + g_rc_weapon_stay + g_respawn_delay + g_respawn_ghosts + g_respawn_ghosts_maxtime + g_respawn_ghosts_speed + g_respawn_waves + g_rocket_flying + g_running_guns + g_sandbox + g_sandbox_editor_distance_edit + g_sandbox_editor_distance_spawn + g_sandbox_editor_flood + g_sandbox_editor_free + g_sandbox_editor_maxobjects + g_sandbox_info + g_sandbox_object_material_velocity_factor + g_sandbox_object_material_velocity_min + g_sandbox_object_scale_max + g_sandbox_object_scale_min + g_sandbox_readonly + g_sandbox_storage_autoload + g_sandbox_storage_autosave + g_sandbox_storage_name + g_shootfromcenter + g_shootfromclient + g_shootfromeye + g_shootfromfixedorigin + g_showweaponspawns + g_spawn_alloweffects + g_spawn_furthest + g_spawn_near_teammate + g_spawn_near_teammate_distance + g_spawn_useallspawns + g_spawnpoints_auto_move_out_of_solid + g_spawnshieldtime + g_start_ammo_cells + g_start_ammo_fuel + g_start_ammo_nails + g_start_ammo_rockets + g_start_ammo_shells + g_start_delay + g_start_weapon_crylink + g_start_weapon_electro + g_start_weapon_fireball + g_start_weapon_grenadelauncher + g_start_weapon_hagar + g_start_weapon_hlac + g_start_weapon_hook + g_start_weapon_laser + g_start_weapon_minelayer + g_start_weapon_minstanex + g_start_weapon_nex + g_start_weapon_porto + g_start_weapon_rifle + g_start_weapon_rocketlauncher + g_start_weapon_seeker + g_start_weapon_shotgun + g_start_weapon_tuba + g_start_weapon_uzi + g_superspectate + g_tdm + g_tdm_on_dm_maps + g_tdm_respawn_delay + g_tdm_respawn_waves + g_tdm_team_spawns + g_tdm_teams + g_tdm_teams_override + g_tdm_weapon_stay + g_teamdamage_resetspeed + g_teamdamage_threshold + g_telefrags + g_telefrags_avoid + g_telefrags_teamplay + g_teleport_maxspeed + g_throughfloor_damage + g_throughfloor_damage_max_stddev + g_throughfloor_debug + g_throughfloor_force + g_throughfloor_force_max_stddev + g_throughfloor_max_steps_other + g_throughfloor_max_steps_player + g_throughfloor_min_steps_other + g_throughfloor_min_steps_player + g_touchexplode + g_touchexplode_damage + g_touchexplode_edgedamage + g_touchexplode_force + g_touchexplode_radius + g_triggerimpulse_accel_multiplier + g_triggerimpulse_accel_power + g_triggerimpulse_directional_multiplier + g_triggerimpulse_radial_multiplier + g_trueaim_minrange + g_turrets + g_turrets_aimidle_delay + g_turrets_nofire + g_turrets_reloadcvars + g_turrets_targetscan_maxdelay + g_turrets_targetscan_mindelay + g_turrets_unit_ewheel_speed_fast + g_turrets_unit_ewheel_speed_slow + g_turrets_unit_ewheel_speed_slower + g_turrets_unit_ewheel_speed_stop + g_turrets_unit_ewheel_std_aim_firetolerance_dist + g_turrets_unit_ewheel_std_aim_maxpitch + g_turrets_unit_ewheel_std_aim_maxrot + g_turrets_unit_ewheel_std_aim_speed + g_turrets_unit_ewheel_std_ammo + g_turrets_unit_ewheel_std_ammo_max + g_turrets_unit_ewheel_std_ammo_recharge + g_turrets_unit_ewheel_std_health + g_turrets_unit_ewheel_std_respawntime + g_turrets_unit_ewheel_std_shot_dmg + g_turrets_unit_ewheel_std_shot_force + g_turrets_unit_ewheel_std_shot_radius + g_turrets_unit_ewheel_std_shot_refire + g_turrets_unit_ewheel_std_shot_speed + g_turrets_unit_ewheel_std_shot_spread + g_turrets_unit_ewheel_std_shot_volly + g_turrets_unit_ewheel_std_shot_volly_refire + g_turrets_unit_ewheel_std_target_range + g_turrets_unit_ewheel_std_target_range_min + g_turrets_unit_ewheel_std_target_range_optimal + g_turrets_unit_ewheel_std_target_select_anglebias + g_turrets_unit_ewheel_std_target_select_missilebias + g_turrets_unit_ewheel_std_target_select_playerbias + g_turrets_unit_ewheel_std_target_select_rangebias + g_turrets_unit_ewheel_std_target_select_samebias + g_turrets_unit_ewheel_std_track_accel_pitch + g_turrets_unit_ewheel_std_track_accel_rot + g_turrets_unit_ewheel_std_track_type + g_turrets_unit_ewheel_turnrate + g_turrets_unit_flac_std_aim_firetolerance_dist + g_turrets_unit_flac_std_aim_maxpitch + g_turrets_unit_flac_std_aim_maxrot + g_turrets_unit_flac_std_aim_speed + g_turrets_unit_flac_std_ammo + g_turrets_unit_flac_std_ammo_max + g_turrets_unit_flac_std_ammo_recharge + g_turrets_unit_flac_std_health + g_turrets_unit_flac_std_respawntime + g_turrets_unit_flac_std_shot_dmg + g_turrets_unit_flac_std_shot_force + g_turrets_unit_flac_std_shot_radius + g_turrets_unit_flac_std_shot_refire + g_turrets_unit_flac_std_shot_speed + g_turrets_unit_flac_std_shot_spread + g_turrets_unit_flac_std_shot_volly + g_turrets_unit_flac_std_shot_volly_refire + g_turrets_unit_flac_std_target_range + g_turrets_unit_flac_std_target_range_min + g_turrets_unit_flac_std_target_range_optimal + g_turrets_unit_flac_std_target_select_anglebias + g_turrets_unit_flac_std_target_select_missilebias + g_turrets_unit_flac_std_target_select_playerbias + g_turrets_unit_flac_std_target_select_rangebias + g_turrets_unit_flac_std_target_select_samebias + g_turrets_unit_flac_std_track_accel_pitch + g_turrets_unit_flac_std_track_accel_rot + g_turrets_unit_flac_std_track_blendrate + g_turrets_unit_flac_std_track_type + g_turrets_unit_fusreac_std_aim_firetolerance_dist + g_turrets_unit_fusreac_std_aim_maxpitch + g_turrets_unit_fusreac_std_aim_maxrot + g_turrets_unit_fusreac_std_aim_speed + g_turrets_unit_fusreac_std_ammo + g_turrets_unit_fusreac_std_ammo_max + g_turrets_unit_fusreac_std_ammo_recharge + g_turrets_unit_fusreac_std_health + g_turrets_unit_fusreac_std_respawntime + g_turrets_unit_fusreac_std_shot_dmg + g_turrets_unit_fusreac_std_shot_force + g_turrets_unit_fusreac_std_shot_radius + g_turrets_unit_fusreac_std_shot_refire + g_turrets_unit_fusreac_std_shot_speed + g_turrets_unit_fusreac_std_shot_spread + g_turrets_unit_fusreac_std_shot_volly + g_turrets_unit_fusreac_std_shot_volly_refire + g_turrets_unit_fusreac_std_target_range + g_turrets_unit_fusreac_std_target_range_min + g_turrets_unit_fusreac_std_target_range_optimal + g_turrets_unit_fusreac_std_target_select_anglebias + g_turrets_unit_fusreac_std_target_select_playerbias + g_turrets_unit_fusreac_std_target_select_rangebias + g_turrets_unit_fusreac_std_target_select_samebias + g_turrets_unit_fusreac_std_track_accel_pitch + g_turrets_unit_fusreac_std_track_accel_rot + g_turrets_unit_fusreac_std_track_blendrate + g_turrets_unit_fusreac_std_track_type + g_turrets_unit_hellion_std_aim_firetolerance_dist + g_turrets_unit_hellion_std_aim_maxpitch + g_turrets_unit_hellion_std_aim_maxrot + g_turrets_unit_hellion_std_aim_speed + g_turrets_unit_hellion_std_ammo + g_turrets_unit_hellion_std_ammo_max + g_turrets_unit_hellion_std_ammo_recharge + g_turrets_unit_hellion_std_health + g_turrets_unit_hellion_std_respawntime + g_turrets_unit_hellion_std_shot_dmg + g_turrets_unit_hellion_std_shot_force + g_turrets_unit_hellion_std_shot_radius + g_turrets_unit_hellion_std_shot_refire + g_turrets_unit_hellion_std_shot_speed + g_turrets_unit_hellion_std_shot_speed_gain + g_turrets_unit_hellion_std_shot_speed_max + g_turrets_unit_hellion_std_shot_spread + g_turrets_unit_hellion_std_shot_volly + g_turrets_unit_hellion_std_shot_volly_refire + g_turrets_unit_hellion_std_target_range + g_turrets_unit_hellion_std_target_range_min + g_turrets_unit_hellion_std_target_range_optimal + g_turrets_unit_hellion_std_target_select_anglebias + g_turrets_unit_hellion_std_target_select_missilebias + g_turrets_unit_hellion_std_target_select_playerbias + g_turrets_unit_hellion_std_target_select_rangebias + g_turrets_unit_hellion_std_target_select_samebias + g_turrets_unit_hellion_std_track_accel_pitch + g_turrets_unit_hellion_std_track_accel_rot + g_turrets_unit_hellion_std_track_blendrate + g_turrets_unit_hellion_std_track_type + g_turrets_unit_hk_std_aim_firetolerance_dist + g_turrets_unit_hk_std_aim_maxpitch + g_turrets_unit_hk_std_aim_maxrot + g_turrets_unit_hk_std_aim_speed + g_turrets_unit_hk_std_ammo + g_turrets_unit_hk_std_ammo_max + g_turrets_unit_hk_std_ammo_recharge + g_turrets_unit_hk_std_health + g_turrets_unit_hk_std_respawntime + g_turrets_unit_hk_std_shot_dmg + g_turrets_unit_hk_std_shot_force + g_turrets_unit_hk_std_shot_radius + g_turrets_unit_hk_std_shot_refire + g_turrets_unit_hk_std_shot_speed + g_turrets_unit_hk_std_shot_speed_accel + g_turrets_unit_hk_std_shot_speed_accel2 + g_turrets_unit_hk_std_shot_speed_decel + g_turrets_unit_hk_std_shot_speed_max + g_turrets_unit_hk_std_shot_speed_turnrate + g_turrets_unit_hk_std_shot_spread + g_turrets_unit_hk_std_shot_volly + g_turrets_unit_hk_std_shot_volly_refire + g_turrets_unit_hk_std_target_range + g_turrets_unit_hk_std_target_range_min + g_turrets_unit_hk_std_target_range_optimal + g_turrets_unit_hk_std_target_select_anglebias + g_turrets_unit_hk_std_target_select_missilebias + g_turrets_unit_hk_std_target_select_playerbias + g_turrets_unit_hk_std_target_select_rangebias + g_turrets_unit_hk_std_target_select_samebias + g_turrets_unit_hk_std_track_accel_pitch + g_turrets_unit_hk_std_track_accel_rot + g_turrets_unit_hk_std_track_blendrate + g_turrets_unit_hk_std_track_type + g_turrets_unit_machinegun_std_aim_firetolerance_dist + g_turrets_unit_machinegun_std_aim_maxpitch + g_turrets_unit_machinegun_std_aim_maxrot + g_turrets_unit_machinegun_std_aim_speed + g_turrets_unit_machinegun_std_ammo + g_turrets_unit_machinegun_std_ammo_max + g_turrets_unit_machinegun_std_ammo_recharge + g_turrets_unit_machinegun_std_health + g_turrets_unit_machinegun_std_respawntime + g_turrets_unit_machinegun_std_shot_dmg + g_turrets_unit_machinegun_std_shot_force + g_turrets_unit_machinegun_std_shot_radius + g_turrets_unit_machinegun_std_shot_refire + g_turrets_unit_machinegun_std_shot_speed + g_turrets_unit_machinegun_std_shot_spread + g_turrets_unit_machinegun_std_shot_volly + g_turrets_unit_machinegun_std_shot_volly_refire + g_turrets_unit_machinegun_std_target_range + g_turrets_unit_machinegun_std_target_range_min + g_turrets_unit_machinegun_std_target_range_optimal + g_turrets_unit_machinegun_std_target_select_anglebias + g_turrets_unit_machinegun_std_target_select_missilebias + g_turrets_unit_machinegun_std_target_select_playerbias + g_turrets_unit_machinegun_std_target_select_rangebias + g_turrets_unit_machinegun_std_target_select_samebias + g_turrets_unit_machinegun_std_track_accel_pitch + g_turrets_unit_machinegun_std_track_accel_rot + g_turrets_unit_machinegun_std_track_blendrate + g_turrets_unit_machinegun_std_track_type + g_turrets_unit_mlrs_std_aim_firetolerance_dist + g_turrets_unit_mlrs_std_aim_maxpitch + g_turrets_unit_mlrs_std_aim_maxrot + g_turrets_unit_mlrs_std_aim_speed + g_turrets_unit_mlrs_std_ammo + g_turrets_unit_mlrs_std_ammo_max + g_turrets_unit_mlrs_std_ammo_recharge + g_turrets_unit_mlrs_std_health + g_turrets_unit_mlrs_std_respawntime + g_turrets_unit_mlrs_std_shot_dmg + g_turrets_unit_mlrs_std_shot_force + g_turrets_unit_mlrs_std_shot_radius + g_turrets_unit_mlrs_std_shot_refire + g_turrets_unit_mlrs_std_shot_speed + g_turrets_unit_mlrs_std_shot_spread + g_turrets_unit_mlrs_std_shot_volly + g_turrets_unit_mlrs_std_shot_volly_refire + g_turrets_unit_mlrs_std_target_range + g_turrets_unit_mlrs_std_target_range_min + g_turrets_unit_mlrs_std_target_range_optimal + g_turrets_unit_mlrs_std_target_select_anglebias + g_turrets_unit_mlrs_std_target_select_missilebias + g_turrets_unit_mlrs_std_target_select_playerbias + g_turrets_unit_mlrs_std_target_select_rangebias + g_turrets_unit_mlrs_std_target_select_samebias + g_turrets_unit_mlrs_std_track_accel_pitch + g_turrets_unit_mlrs_std_track_accel_rot + g_turrets_unit_mlrs_std_track_blendrate + g_turrets_unit_mlrs_std_track_type + g_turrets_unit_phaser_std_aim_firetolerance_dist + g_turrets_unit_phaser_std_aim_maxpitch + g_turrets_unit_phaser_std_aim_maxrot + g_turrets_unit_phaser_std_aim_speed + g_turrets_unit_phaser_std_ammo + g_turrets_unit_phaser_std_ammo_max + g_turrets_unit_phaser_std_ammo_recharge + g_turrets_unit_phaser_std_health + g_turrets_unit_phaser_std_respawntime + g_turrets_unit_phaser_std_shot_dmg + g_turrets_unit_phaser_std_shot_force + g_turrets_unit_phaser_std_shot_radius + g_turrets_unit_phaser_std_shot_refire + g_turrets_unit_phaser_std_shot_speed + g_turrets_unit_phaser_std_shot_spread + g_turrets_unit_phaser_std_shot_volly + g_turrets_unit_phaser_std_shot_volly_refire + g_turrets_unit_phaser_std_target_range + g_turrets_unit_phaser_std_target_range_min + g_turrets_unit_phaser_std_target_range_optimal + g_turrets_unit_phaser_std_target_select_anglebias + g_turrets_unit_phaser_std_target_select_missilebias + g_turrets_unit_phaser_std_target_select_playerbias + g_turrets_unit_phaser_std_target_select_rangebias + g_turrets_unit_phaser_std_target_select_samebias + g_turrets_unit_phaser_std_track_accel_pitch + g_turrets_unit_phaser_std_track_accel_rot + g_turrets_unit_phaser_std_track_blendrate + g_turrets_unit_phaser_std_track_type + g_turrets_unit_plasma_dual_aim_firetolerance_dist + g_turrets_unit_plasma_dual_aim_maxpitch + g_turrets_unit_plasma_dual_aim_maxrot + g_turrets_unit_plasma_dual_aim_speed + g_turrets_unit_plasma_dual_ammo + g_turrets_unit_plasma_dual_ammo_max + g_turrets_unit_plasma_dual_ammo_recharge + g_turrets_unit_plasma_dual_health + g_turrets_unit_plasma_dual_respawntime + g_turrets_unit_plasma_dual_shot_dmg + g_turrets_unit_plasma_dual_shot_force + g_turrets_unit_plasma_dual_shot_radius + g_turrets_unit_plasma_dual_shot_refire + g_turrets_unit_plasma_dual_shot_speed + g_turrets_unit_plasma_dual_shot_spread + g_turrets_unit_plasma_dual_shot_volly + g_turrets_unit_plasma_dual_shot_volly_refire + g_turrets_unit_plasma_dual_target_range + g_turrets_unit_plasma_dual_target_range_min + g_turrets_unit_plasma_dual_target_range_optimal + g_turrets_unit_plasma_dual_target_select_anglebias + g_turrets_unit_plasma_dual_target_select_missilebias + g_turrets_unit_plasma_dual_target_select_playerbias + g_turrets_unit_plasma_dual_target_select_rangebias + g_turrets_unit_plasma_dual_target_select_samebias + g_turrets_unit_plasma_dual_track_accel_pitch + g_turrets_unit_plasma_dual_track_accel_rot + g_turrets_unit_plasma_dual_track_blendrate + g_turrets_unit_plasma_dual_track_type + g_turrets_unit_plasma_std_aim_firetolerance_dist + g_turrets_unit_plasma_std_aim_maxpitch + g_turrets_unit_plasma_std_aim_maxrot + g_turrets_unit_plasma_std_aim_speed + g_turrets_unit_plasma_std_ammo + g_turrets_unit_plasma_std_ammo_max + g_turrets_unit_plasma_std_ammo_recharge + g_turrets_unit_plasma_std_health + g_turrets_unit_plasma_std_respawntime + g_turrets_unit_plasma_std_shot_dmg + g_turrets_unit_plasma_std_shot_force + g_turrets_unit_plasma_std_shot_radius + g_turrets_unit_plasma_std_shot_refire + g_turrets_unit_plasma_std_shot_speed + g_turrets_unit_plasma_std_shot_spread + g_turrets_unit_plasma_std_shot_volly + g_turrets_unit_plasma_std_shot_volly_refire + g_turrets_unit_plasma_std_target_range + g_turrets_unit_plasma_std_target_range_min + g_turrets_unit_plasma_std_target_range_optimal + g_turrets_unit_plasma_std_target_select_anglebias + g_turrets_unit_plasma_std_target_select_missilebias + g_turrets_unit_plasma_std_target_select_playerbias + g_turrets_unit_plasma_std_target_select_rangebias + g_turrets_unit_plasma_std_target_select_samebias + g_turrets_unit_plasma_std_track_accel_pitch + g_turrets_unit_plasma_std_track_accel_rot + g_turrets_unit_plasma_std_track_blendrate + g_turrets_unit_plasma_std_track_type + g_turrets_unit_tesla_std_ammo + g_turrets_unit_tesla_std_ammo_max + g_turrets_unit_tesla_std_ammo_recharge + g_turrets_unit_tesla_std_health + g_turrets_unit_tesla_std_respawntime + g_turrets_unit_tesla_std_shot_dmg + g_turrets_unit_tesla_std_shot_force + g_turrets_unit_tesla_std_shot_refire + g_turrets_unit_tesla_std_shot_volly + g_turrets_unit_tesla_std_shot_volly_refire + g_turrets_unit_tesla_std_target_range + g_turrets_unit_tesla_std_target_range_min + g_turrets_unit_tesla_std_target_select_missilebias + g_turrets_unit_tesla_std_target_select_playerbias + g_turrets_unit_walker_speed_jump + g_turrets_unit_walker_speed_roam + g_turrets_unit_walker_speed_run + g_turrets_unit_walker_speed_stop + g_turrets_unit_walker_speed_swim + g_turrets_unit_walker_speed_walk + g_turrets_unit_walker_std_aim_firetolerance_dist + g_turrets_unit_walker_std_aim_maxpitch + g_turrets_unit_walker_std_aim_maxrot + g_turrets_unit_walker_std_aim_speed + g_turrets_unit_walker_std_ammo + g_turrets_unit_walker_std_ammo_max + g_turrets_unit_walker_std_ammo_recharge + g_turrets_unit_walker_std_health + g_turrets_unit_walker_std_meele_dmg + g_turrets_unit_walker_std_meele_force + g_turrets_unit_walker_std_meele_range + g_turrets_unit_walker_std_respawntime + g_turrets_unit_walker_std_rocket_dmg + g_turrets_unit_walker_std_rocket_force + g_turrets_unit_walker_std_rocket_radius + g_turrets_unit_walker_std_rocket_refire + g_turrets_unit_walker_std_rocket_speed + g_turrets_unit_walker_std_rocket_turnrate + g_turrets_unit_walker_std_rockets_range + g_turrets_unit_walker_std_rockets_range_min + g_turrets_unit_walker_std_shot_dmg + g_turrets_unit_walker_std_shot_force + g_turrets_unit_walker_std_shot_radius + g_turrets_unit_walker_std_shot_refire + g_turrets_unit_walker_std_shot_speed + g_turrets_unit_walker_std_shot_spread + g_turrets_unit_walker_std_shot_volly + g_turrets_unit_walker_std_shot_volly_refire + g_turrets_unit_walker_std_target_range + g_turrets_unit_walker_std_target_range_min + g_turrets_unit_walker_std_target_range_optimal + g_turrets_unit_walker_std_target_select_anglebias + g_turrets_unit_walker_std_target_select_missilebias + g_turrets_unit_walker_std_target_select_playerbias + g_turrets_unit_walker_std_target_select_rangebias + g_turrets_unit_walker_std_target_select_samebias + g_turrets_unit_walker_std_track_accel_pitch + g_turrets_unit_walker_std_track_accel_rot + g_turrets_unit_walker_std_track_blendrate + g_turrets_unit_walker_std_track_type + g_turrets_unit_walker_turn + g_turrets_unit_walker_turn_run + g_turrets_unit_walker_turn_strafe + g_turrets_unit_walker_turn_swim + g_turrets_unit_walker_turn_walk + g_use_ammunition + g_vampire + g_vehicle_bumblebee + g_vehicle_bumblebee_blowup_coredamage + g_vehicle_bumblebee_blowup_edgedamage + g_vehicle_bumblebee_blowup_forceintensity + g_vehicle_bumblebee_blowup_radius + g_vehicle_bumblebee_bouncepain + g_vehicle_bumblebee_cannon_ammo + g_vehicle_bumblebee_cannon_ammo_regen + g_vehicle_bumblebee_cannon_ammo_regen_pause + g_vehicle_bumblebee_cannon_cost + g_vehicle_bumblebee_cannon_damage + g_vehicle_bumblebee_cannon_force + g_vehicle_bumblebee_cannon_lock + g_vehicle_bumblebee_cannon_pitchlimit_down + g_vehicle_bumblebee_cannon_pitchlimit_up + g_vehicle_bumblebee_cannon_radius + g_vehicle_bumblebee_cannon_refire + g_vehicle_bumblebee_cannon_speed + g_vehicle_bumblebee_cannon_spread + g_vehicle_bumblebee_cannon_turnlimit_in + g_vehicle_bumblebee_cannon_turnlimit_out + g_vehicle_bumblebee_cannon_turnspeed + g_vehicle_bumblebee_energy + g_vehicle_bumblebee_energy_regen + g_vehicle_bumblebee_energy_regen_pause + g_vehicle_bumblebee_friction + g_vehicle_bumblebee_healgun_amax + g_vehicle_bumblebee_healgun_aps + g_vehicle_bumblebee_healgun_hmax + g_vehicle_bumblebee_healgun_hps + g_vehicle_bumblebee_healgun_locktime + g_vehicle_bumblebee_healgun_smax + g_vehicle_bumblebee_healgun_sps + g_vehicle_bumblebee_health + g_vehicle_bumblebee_health_regen + g_vehicle_bumblebee_health_regen_pause + g_vehicle_bumblebee_pitchlimit + g_vehicle_bumblebee_pitchspeed + g_vehicle_bumblebee_raygun + g_vehicle_bumblebee_raygun_aps + g_vehicle_bumblebee_raygun_dps + g_vehicle_bumblebee_raygun_fps + g_vehicle_bumblebee_raygun_pitchlimit_down + g_vehicle_bumblebee_raygun_pitchlimit_up + g_vehicle_bumblebee_raygun_range + g_vehicle_bumblebee_raygun_turnlimit_sides + g_vehicle_bumblebee_raygun_turnspeed + g_vehicle_bumblebee_respawntime + g_vehicle_bumblebee_shield + g_vehicle_bumblebee_shield_regen + g_vehicle_bumblebee_shield_regen_pause + g_vehicle_bumblebee_speed_down + g_vehicle_bumblebee_speed_forward + g_vehicle_bumblebee_speed_strafe + g_vehicle_bumblebee_speed_up + g_vehicle_bumblebee_turnspeed + g_vehicle_racer + g_vehicle_racer_afterburn_cost + g_vehicle_racer_anglestabilizer + g_vehicle_racer_blowup_coredamage + g_vehicle_racer_blowup_edgedamage + g_vehicle_racer_blowup_forceintensity + g_vehicle_racer_blowup_radius + g_vehicle_racer_bouncefactor + g_vehicle_racer_bouncepain + g_vehicle_racer_bouncestop + g_vehicle_racer_cannon_cost + g_vehicle_racer_cannon_damage + g_vehicle_racer_cannon_force + g_vehicle_racer_cannon_radius + g_vehicle_racer_cannon_refire + g_vehicle_racer_cannon_speed + g_vehicle_racer_cannon_spread + g_vehicle_racer_collision_multiplier + g_vehicle_racer_downforce + g_vehicle_racer_energy + g_vehicle_racer_energy_regen + g_vehicle_racer_energy_regen_pause + g_vehicle_racer_friction + g_vehicle_racer_health + g_vehicle_racer_health_regen + g_vehicle_racer_health_regen_pause + g_vehicle_racer_hoverpower + g_vehicle_racer_hovertype + g_vehicle_racer_mass + g_vehicle_racer_maxpitch + g_vehicle_racer_pitchspeed + g_vehicle_racer_respawntime + g_vehicle_racer_rocket_accel + g_vehicle_racer_rocket_climbspeed + g_vehicle_racer_rocket_cost + g_vehicle_racer_rocket_damage + g_vehicle_racer_rocket_force + g_vehicle_racer_rocket_locked_maxangle + g_vehicle_racer_rocket_locked_time + g_vehicle_racer_rocket_locking_releasetime + g_vehicle_racer_rocket_locking_time + g_vehicle_racer_rocket_locktarget + g_vehicle_racer_rocket_radius + g_vehicle_racer_rocket_refire + g_vehicle_racer_rocket_speed + g_vehicle_racer_rocket_turnrate + g_vehicle_racer_shield + g_vehicle_racer_shield_regen + g_vehicle_racer_shield_regen_pause + g_vehicle_racer_speed_afterburn + g_vehicle_racer_speed_forward + g_vehicle_racer_speed_stop + g_vehicle_racer_speed_strafe + g_vehicle_racer_springlength + g_vehicle_racer_turnroll + g_vehicle_racer_turnspeed + g_vehicle_racer_upforcedamper + g_vehicle_raptor + g_vehicle_raptor_bomblet_alt + g_vehicle_raptor_bomblet_damage + g_vehicle_raptor_bomblet_edgedamage + g_vehicle_raptor_bomblet_explode_delay + g_vehicle_raptor_bomblet_force + g_vehicle_raptor_bomblet_radius + g_vehicle_raptor_bomblet_spread + g_vehicle_raptor_bomblet_time + g_vehicle_raptor_bomblets + g_vehicle_raptor_bombs_refire + g_vehicle_raptor_bouncefactor + g_vehicle_raptor_bouncepain + g_vehicle_raptor_bouncestop + g_vehicle_raptor_cannon_cost + g_vehicle_raptor_cannon_damage + g_vehicle_raptor_cannon_force + g_vehicle_raptor_cannon_locked_time + g_vehicle_raptor_cannon_locking_releasetime + g_vehicle_raptor_cannon_locking_time + g_vehicle_raptor_cannon_locktarget + g_vehicle_raptor_cannon_pitchlimit_down + g_vehicle_raptor_cannon_pitchlimit_up + g_vehicle_raptor_cannon_predicttarget + g_vehicle_raptor_cannon_radius + g_vehicle_raptor_cannon_refire + g_vehicle_raptor_cannon_speed + g_vehicle_raptor_cannon_spread + g_vehicle_raptor_cannon_turnlimit + g_vehicle_raptor_cannon_turnspeed + g_vehicle_raptor_energy + g_vehicle_raptor_energy_regen + g_vehicle_raptor_energy_regen_pause + g_vehicle_raptor_flare_chase + g_vehicle_raptor_flare_lifetime + g_vehicle_raptor_flare_range + g_vehicle_raptor_flare_refire + g_vehicle_raptor_friction + g_vehicle_raptor_health + g_vehicle_raptor_health_regen + g_vehicle_raptor_health_regen_pause + g_vehicle_raptor_mass + g_vehicle_raptor_movestyle + g_vehicle_raptor_pitchlimit + g_vehicle_raptor_pitchspeed + g_vehicle_raptor_respawntime + g_vehicle_raptor_shield + g_vehicle_raptor_shield_regen + g_vehicle_raptor_shield_regen_pause + g_vehicle_raptor_speed_down + g_vehicle_raptor_speed_forward + g_vehicle_raptor_speed_strafe + g_vehicle_raptor_speed_up + g_vehicle_raptor_takeofftime + g_vehicle_raptor_turnroll + g_vehicle_raptor_turnspeed + g_vehicle_spiderbot + g_vehicle_spiderbot_bouncefactor + g_vehicle_spiderbot_bouncepain + g_vehicle_spiderbot_bouncestop + g_vehicle_spiderbot_energy + g_vehicle_spiderbot_energy_regen + g_vehicle_spiderbot_energy_regen_pause + g_vehicle_spiderbot_head_pitchlimit_down + g_vehicle_spiderbot_head_pitchlimit_up + g_vehicle_spiderbot_head_turnlimit + g_vehicle_spiderbot_head_turnspeed + g_vehicle_spiderbot_health + g_vehicle_spiderbot_health_regen + g_vehicle_spiderbot_health_regen_pause + g_vehicle_spiderbot_minigun_ammo_cost + g_vehicle_spiderbot_minigun_ammo_max + g_vehicle_spiderbot_minigun_ammo_regen + g_vehicle_spiderbot_minigun_ammo_regen_pause + g_vehicle_spiderbot_minigun_bulletconstant + g_vehicle_spiderbot_minigun_damage + g_vehicle_spiderbot_minigun_force + g_vehicle_spiderbot_minigun_refire + g_vehicle_spiderbot_minigun_speed + g_vehicle_spiderbot_minigun_spread + g_vehicle_spiderbot_movement_inertia + g_vehicle_spiderbot_respawntime + g_vehicle_spiderbot_rocket_damage + g_vehicle_spiderbot_rocket_edgedamage + g_vehicle_spiderbot_rocket_force + g_vehicle_spiderbot_rocket_health + g_vehicle_spiderbot_rocket_lifetime + g_vehicle_spiderbot_rocket_noise + g_vehicle_spiderbot_rocket_radius + g_vehicle_spiderbot_rocket_refire + g_vehicle_spiderbot_rocket_refire2 + g_vehicle_spiderbot_rocket_reload + g_vehicle_spiderbot_rocket_speed + g_vehicle_spiderbot_rocket_spread + g_vehicle_spiderbot_rocket_turnrate + g_vehicle_spiderbot_shield + g_vehicle_spiderbot_shield_block + g_vehicle_spiderbot_shield_regen + g_vehicle_spiderbot_shield_regen_pause + g_vehicle_spiderbot_speed_stop + g_vehicle_spiderbot_speed_strafe + g_vehicle_spiderbot_speed_walk + g_vehicle_spiderbot_springblend + g_vehicle_spiderbot_springlength + g_vehicle_spiderbot_springup + g_vehicle_spiderbot_tiltlimit + g_vehicle_spiderbot_turnspeed + g_vehicle_spiderbot_turnspeed_strafe + g_vehicles + g_vehicles_crush_dmg + g_vehicles_crush_force + g_vehicles_delayspawn + g_vehicles_delayspawn_jitter + g_vehicles_minstanex_damagerate + g_vehicles_nex_damagerate + g_vehicles_rifle_damagerate + g_vehicles_tag_damagerate + g_vehicles_uzi_damagerate + g_warmup + g_warmup_allguns + g_warmup_allow_timeout + g_warmup_limit + g_warmup_majority_factor + g_warmup_start_ammo_cells + g_warmup_start_ammo_fuel + g_warmup_start_ammo_nails + g_warmup_start_ammo_rockets + g_warmup_start_ammo_shells + g_warmup_start_armor + g_warmup_start_health + g_waypointeditor + g_waypointeditor_auto + g_waypoints_for_items + g_waypointsprite_alpha + g_waypointsprite_crosshairfadealpha + g_waypointsprite_crosshairfadedistance + g_waypointsprite_crosshairfadescale + g_waypointsprite_distancealphaexponent + g_waypointsprite_distancefadealpha + g_waypointsprite_distancefadedistancemultiplier + g_waypointsprite_distancefadescale + g_waypointsprite_edgefadealpha + g_waypointsprite_edgefadedistance + g_waypointsprite_edgefadescale + g_waypointsprite_edgeoffset_bottom + g_waypointsprite_edgeoffset_left + g_waypointsprite_edgeoffset_right + g_waypointsprite_edgeoffset_top + g_waypointsprite_fontsize + g_waypointsprite_minalpha + g_waypointsprite_minscale + g_waypointsprite_normdistance + g_waypointsprite_scale + g_waypointsprite_spam + g_waypointsprite_stuffbinds + g_waypointsprite_tactical + g_waypointsprite_timealphaexponent + g_waypointsprite_turrets + g_waypointsprite_turrets_maxdist + g_waypointsprite_uppercase + g_weapon_charge_colormod_blue_full + g_weapon_charge_colormod_blue_half + g_weapon_charge_colormod_green_full + g_weapon_charge_colormod_green_half + g_weapon_charge_colormod_hdrmultiplier + g_weapon_charge_colormod_red_full + g_weapon_charge_colormod_red_half + g_weapon_stay + g_weapon_throwable + g_weaponarena + g_weaponarena_random + g_weaponarena_random_with_laser + g_weapondamagefactor + g_weaponforcefactor + g_weaponratefactor + g_weaponreplace_crylink + g_weaponreplace_electro + g_weaponreplace_fireball + g_weaponreplace_grenadelauncher + g_weaponreplace_hagar + g_weaponreplace_hlac + g_weaponreplace_hook + g_weaponreplace_laser + g_weaponreplace_minelayer + g_weaponreplace_minstanex + g_weaponreplace_nex + g_weaponreplace_porto + g_weaponreplace_rifle + g_weaponreplace_rocketlauncher + g_weaponreplace_seeker + g_weaponreplace_shotgun + g_weaponreplace_tuba + g_weaponreplace_uzi + g_weaponspeedfactor + g_weaponspreadfactor + g_xonoticversion + gamecfg + gameversion + gameversion_max + gameversion_min + gl_combine + gl_dither + gl_ext_separatestencil + gl_ext_stenciltwoside + gl_finish + gl_flashblend + gl_info_driver + gl_info_extensions + gl_info_platform + gl_info_renderer + gl_info_vendor + gl_info_version + gl_lightmaps + gl_max_lightmapsize + gl_max_size + gl_mesh_drawrangeelements + gl_mesh_prefer_short_elements + gl_mesh_testmanualfeeding + gl_nopartialtextureupdates + gl_paranoid + gl_picmip + gl_picmip_other + gl_picmip_sprites + gl_picmip_world + gl_polyblend + gl_printcheckerror + gl_texture_anisotropy + gl_texturecompression + gl_texturecompression_2d + gl_texturecompression_color + gl_texturecompression_gloss + gl_texturecompression_glow + gl_texturecompression_lightcubemaps + gl_texturecompression_normal + gl_texturecompression_q3bspdeluxemaps + gl_texturecompression_q3bsplightmaps + gl_texturecompression_reflectmask + gl_texturecompression_sky + gl_texturecompression_sprites + gl_vbo + gl_vbo_dynamicindex + gl_vbo_dynamicvertex + halflifebsp + host_framerate + host_maxwait + host_speeds + hostname + hud_colorflash_alpha + hud_colorset_background + hud_colorset_foreground_1 + hud_colorset_foreground_2 + hud_colorset_foreground_3 + hud_colorset_foreground_4 + hud_colorset_kill_1 + hud_colorset_kill_2 + hud_colorset_kill_3 + hud_configure_bg_minalpha + hud_configure_checkcollisions + hud_configure_grid + hud_configure_grid_alpha + hud_configure_grid_xsize + hud_configure_grid_ysize + hud_configure_teamcolorforced + hud_contents + hud_contents_blur + hud_contents_blur_alpha + hud_contents_factor + hud_contents_fadeintime + hud_contents_fadeouttime + hud_contents_lava_alpha + hud_contents_lava_color + hud_contents_slime_alpha + hud_contents_slime_color + hud_contents_water_alpha + hud_contents_water_color + hud_cursormode + hud_damage + hud_damage_blur + hud_damage_blur_alpha + hud_damage_color + hud_damage_factor + hud_damage_fade_rate + hud_damage_gentle_alpha_multiplier + hud_damage_gentle_color + hud_damage_maxalpha + hud_damage_pain_threshold + hud_damage_pain_threshold_lower + hud_damage_pain_threshold_lower_health + hud_damage_pain_threshold_pulsating_min + hud_damage_pain_threshold_pulsating_period + hud_dock + hud_dock_alpha + hud_dock_color + hud_dock_color_team + hud_fontsize + hud_panel_ammo + hud_panel_ammo_bg + hud_panel_ammo_bg_alpha + hud_panel_ammo_bg_border + hud_panel_ammo_bg_color + hud_panel_ammo_bg_color_team + hud_panel_ammo_bg_padding + hud_panel_ammo_iconalign + hud_panel_ammo_maxammo + hud_panel_ammo_onlycurrent + hud_panel_ammo_pos + hud_panel_ammo_progressbar + hud_panel_ammo_progressbar_name + hud_panel_ammo_progressbar_xoffset + hud_panel_ammo_size + hud_panel_ammo_text + hud_panel_bg + hud_panel_bg_alpha + hud_panel_bg_border + hud_panel_bg_color + hud_panel_bg_color_team + hud_panel_bg_padding + hud_panel_centerprint + hud_panel_centerprint_align + hud_panel_centerprint_bg + hud_panel_centerprint_bg_alpha + hud_panel_centerprint_bg_border + hud_panel_centerprint_bg_color + hud_panel_centerprint_bg_color_team + hud_panel_centerprint_bg_padding + hud_panel_centerprint_fade_in + hud_panel_centerprint_fade_minfontsize + hud_panel_centerprint_fade_out + hud_panel_centerprint_fade_subsequent + hud_panel_centerprint_fade_subsequent_minfontsize + hud_panel_centerprint_fade_subsequent_passone + hud_panel_centerprint_fade_subsequent_passone_minalpha + hud_panel_centerprint_fade_subsequent_passtwo + hud_panel_centerprint_fade_subsequent_passtwo_minalpha + hud_panel_centerprint_flip + hud_panel_centerprint_fontscale + hud_panel_centerprint_pos + hud_panel_centerprint_size + hud_panel_centerprint_time + hud_panel_chat + hud_panel_chat_bg + hud_panel_chat_bg_alpha + hud_panel_chat_bg_border + hud_panel_chat_bg_color + hud_panel_chat_bg_color_team + hud_panel_chat_bg_padding + hud_panel_chat_pos + hud_panel_chat_size + hud_panel_engineinfo + hud_panel_engineinfo_bg + hud_panel_engineinfo_bg_alpha + hud_panel_engineinfo_bg_border + hud_panel_engineinfo_bg_color + hud_panel_engineinfo_bg_color_team + hud_panel_engineinfo_bg_padding + hud_panel_engineinfo_framecounter_decimals + hud_panel_engineinfo_framecounter_exponentialmovingaverage + hud_panel_engineinfo_framecounter_exponentialmovingaverage_instantupdate_change_threshold + hud_panel_engineinfo_framecounter_exponentialmovingaverage_new_weight + hud_panel_engineinfo_framecounter_time + hud_panel_engineinfo_pos + hud_panel_engineinfo_size + hud_panel_fg_alpha + hud_panel_healtharmor + hud_panel_healtharmor_baralign + hud_panel_healtharmor_bg + hud_panel_healtharmor_bg_alpha + hud_panel_healtharmor_bg_border + hud_panel_healtharmor_bg_color + hud_panel_healtharmor_bg_color_team + hud_panel_healtharmor_bg_padding + hud_panel_healtharmor_flip + hud_panel_healtharmor_iconalign + hud_panel_healtharmor_maxarmor + hud_panel_healtharmor_maxhealth + hud_panel_healtharmor_pos + hud_panel_healtharmor_progressbar + hud_panel_healtharmor_progressbar_armor + hud_panel_healtharmor_progressbar_gfx + hud_panel_healtharmor_progressbar_gfx_damage + hud_panel_healtharmor_progressbar_gfx_lowhealth + hud_panel_healtharmor_progressbar_gfx_smooth + hud_panel_healtharmor_progressbar_health + hud_panel_healtharmor_size + hud_panel_healtharmor_text + hud_panel_infomessages + hud_panel_infomessages_bg + hud_panel_infomessages_bg_alpha + hud_panel_infomessages_bg_border + hud_panel_infomessages_bg_color + hud_panel_infomessages_bg_color_team + hud_panel_infomessages_bg_padding + hud_panel_infomessages_flip + hud_panel_infomessages_pos + hud_panel_infomessages_size + hud_panel_modicons + hud_panel_modicons_bg + hud_panel_modicons_bg_alpha + hud_panel_modicons_bg_border + hud_panel_modicons_bg_color + hud_panel_modicons_bg_color_team + hud_panel_modicons_bg_padding + hud_panel_modicons_ca_layout + hud_panel_modicons_dom_layout + hud_panel_modicons_freezetag_layout + hud_panel_modicons_pos + hud_panel_modicons_size + hud_panel_notify + hud_panel_notify_bg + hud_panel_notify_bg_alpha + hud_panel_notify_bg_border + hud_panel_notify_bg_color + hud_panel_notify_bg_color_team + hud_panel_notify_bg_padding + hud_panel_notify_fadetime + hud_panel_notify_flip + hud_panel_notify_fontsize + hud_panel_notify_pos + hud_panel_notify_size + hud_panel_notify_time + hud_panel_physics + hud_panel_physics_acceleration_max + hud_panel_physics_acceleration_progressbar_mode + hud_panel_physics_acceleration_progressbar_nonlinear + hud_panel_physics_acceleration_progressbar_scale + hud_panel_physics_acceleration_vertical + hud_panel_physics_baralign + hud_panel_physics_bg + hud_panel_physics_bg_alpha + hud_panel_physics_bg_border + hud_panel_physics_bg_color + hud_panel_physics_bg_color_team + hud_panel_physics_bg_padding + hud_panel_physics_flip + hud_panel_physics_pos + hud_panel_physics_progressbar + hud_panel_physics_size + hud_panel_physics_speed_max + hud_panel_physics_speed_unit + hud_panel_physics_speed_unit_show + hud_panel_physics_speed_vertical + hud_panel_physics_text + hud_panel_physics_text_scale + hud_panel_physics_topspeed + hud_panel_physics_topspeed_time + hud_panel_powerups + hud_panel_powerups_baralign + hud_panel_powerups_bg + hud_panel_powerups_bg_alpha + hud_panel_powerups_bg_border + hud_panel_powerups_bg_color + hud_panel_powerups_bg_color_team + hud_panel_powerups_bg_padding + hud_panel_powerups_flip + hud_panel_powerups_iconalign + hud_panel_powerups_pos + hud_panel_powerups_progressbar + hud_panel_powerups_progressbar_shield + hud_panel_powerups_progressbar_strength + hud_panel_powerups_progressbar_superweapons + hud_panel_powerups_size + hud_panel_powerups_text + hud_panel_pressedkeys + hud_panel_pressedkeys_aspect + hud_panel_pressedkeys_attack + hud_panel_pressedkeys_bg + hud_panel_pressedkeys_bg_alpha + hud_panel_pressedkeys_bg_border + hud_panel_pressedkeys_bg_color + hud_panel_pressedkeys_bg_color_team + hud_panel_pressedkeys_bg_padding + hud_panel_pressedkeys_pos + hud_panel_pressedkeys_size + hud_panel_racetimer + hud_panel_racetimer_bg + hud_panel_racetimer_bg_alpha + hud_panel_racetimer_bg_border + hud_panel_racetimer_bg_color + hud_panel_racetimer_bg_color_team + hud_panel_racetimer_bg_padding + hud_panel_racetimer_pos + hud_panel_racetimer_size + hud_panel_radar + hud_panel_radar_bg + hud_panel_radar_bg_alpha + hud_panel_radar_bg_border + hud_panel_radar_bg_color + hud_panel_radar_bg_color_team + hud_panel_radar_bg_padding + hud_panel_radar_foreground_alpha + hud_panel_radar_maximized_rotation + hud_panel_radar_maximized_scale + hud_panel_radar_maximized_size + hud_panel_radar_maximized_zoommode + hud_panel_radar_pos + hud_panel_radar_rotation + hud_panel_radar_scale + hud_panel_radar_size + hud_panel_radar_zoommode + hud_panel_score + hud_panel_score_bg + hud_panel_score_bg_alpha + hud_panel_score_bg_border + hud_panel_score_bg_color + hud_panel_score_bg_color_team + hud_panel_score_bg_padding + hud_panel_score_pos + hud_panel_score_rankings + hud_panel_score_size + hud_panel_timer + hud_panel_timer_bg + hud_panel_timer_bg_alpha + hud_panel_timer_bg_border + hud_panel_timer_bg_color + hud_panel_timer_bg_color_team + hud_panel_timer_bg_padding + hud_panel_timer_increment + hud_panel_timer_pos + hud_panel_timer_size + hud_panel_update_interval + hud_panel_vote + hud_panel_vote_alreadyvoted_alpha + hud_panel_vote_bg + hud_panel_vote_bg_alpha + hud_panel_vote_bg_border + hud_panel_vote_bg_color + hud_panel_vote_bg_color_team + hud_panel_vote_bg_padding + hud_panel_vote_pos + hud_panel_vote_size + hud_panel_weapons + hud_panel_weapons_accuracy + hud_panel_weapons_ammo + hud_panel_weapons_ammo_alpha + hud_panel_weapons_ammo_color + hud_panel_weapons_ammo_full_cells + hud_panel_weapons_ammo_full_fuel + hud_panel_weapons_ammo_full_nails + hud_panel_weapons_ammo_full_rockets + hud_panel_weapons_ammo_full_shells + hud_panel_weapons_aspect + hud_panel_weapons_bg + hud_panel_weapons_bg_alpha + hud_panel_weapons_bg_border + hud_panel_weapons_bg_color + hud_panel_weapons_bg_color_team + hud_panel_weapons_bg_padding + hud_panel_weapons_complainbubble + hud_panel_weapons_complainbubble_color_donthave + hud_panel_weapons_complainbubble_color_outofammo + hud_panel_weapons_complainbubble_color_unavailable + hud_panel_weapons_complainbubble_fadetime + hud_panel_weapons_complainbubble_padding + hud_panel_weapons_complainbubble_time + hud_panel_weapons_label + hud_panel_weapons_onlyowned + hud_panel_weapons_pos + hud_panel_weapons_size + hud_panel_weapons_timeout + hud_panel_weapons_timeout_effect + hud_panel_weapons_timeout_fadebgmin + hud_panel_weapons_timeout_fadefgmin + hud_panel_weapons_timeout_speed_in + hud_panel_weapons_timeout_speed_out + hud_postprocessing + hud_postprocessing_maxbluralpha + hud_postprocessing_maxblurradius + hud_powerup + hud_progressbar_acceleration_color + hud_progressbar_acceleration_neg_color + hud_progressbar_alpha + hud_progressbar_armor_color + hud_progressbar_fuel_color + hud_progressbar_health_color + hud_progressbar_nexball_color + hud_progressbar_shield_color + hud_progressbar_speed_color + hud_progressbar_strength_color + hud_progressbar_superweapons_color + hud_showbinds + hud_showbinds_limit + hud_shownames + hud_shownames_alpha + hud_shownames_antioverlap + hud_shownames_antioverlap_distance + hud_shownames_aspect + hud_shownames_crosshairdistance + hud_shownames_crosshairdistance_antioverlap + hud_shownames_crosshairdistance_time + hud_shownames_decolorize + hud_shownames_enemies + hud_shownames_fontsize + hud_shownames_maxdistance + hud_shownames_mindistance + hud_shownames_offset + hud_shownames_resize + hud_shownames_self + hud_shownames_status + hud_shownames_statusbar_height + hud_skin + hud_width + in_pitch_max + in_pitch_min + is_dedicated + joy_active + joy_axisforward + joy_axiskeyevents + joy_axiskeyevents_deadzone + joy_axispitch + joy_axisside + joy_axisup + joy_axisyaw + joy_deadzoneforward + joy_deadzonepitch + joy_deadzoneside + joy_deadzoneup + joy_deadzoneyaw + joy_detected + joy_enable + joy_index + joy_sensitivityforward + joy_sensitivitypitch + joy_sensitivityside + joy_sensitivityup + joy_sensitivityyaw + joy_x360_axisforward + joy_x360_axispitch + joy_x360_axisside + joy_x360_axisup + joy_x360_axisyaw + joy_x360_deadzoneforward + joy_x360_deadzonepitch + joy_x360_deadzoneside + joy_x360_deadzoneup + joy_x360_deadzoneyaw + joy_x360_sensitivityforward + joy_x360_sensitivitypitch + joy_x360_sensitivityside + joy_x360_sensitivityup + joy_x360_sensitivityyaw + joyadvanced + joyadvaxisr + joyadvaxisx + joyadvaxisy + joyadvaxisz + joypitchsensitivity + joysidesensitivity + joyyawsensitivity + join + lastlevel + leadlimit + leadlimit_and_fraglimit + leadlimit_override + locksession + locs_enable + locs_show + loddebug + log_dest_udp + log_file + lookspring + lookstrafe + m_accelerate + m_accelerate_filter + m_accelerate_maxspeed + m_accelerate_minspeed + m_filter + m_forward + m_pitch + m_side + m_yaw + mastervolume + menu_cdtrack + menu_cl_gunalign + menu_maxplayers + menu_mouse_absolute + menu_mouse_speed + menu_options_colorcontrol_correctionvalue + menu_picmip_bypass + menu_progs + menu_sandbox_attach_bone + menu_sandbox_edit_alpha + menu_sandbox_edit_color_glow + menu_sandbox_edit_color_main + menu_sandbox_edit_force + menu_sandbox_edit_frame + menu_sandbox_edit_material + menu_sandbox_edit_physics + menu_sandbox_edit_scale + menu_sandbox_edit_skin + menu_sandbox_edit_solidity + menu_sandbox_spawn_model + menu_showboxes + menu_skin + menu_slist_modfilter + menu_slist_showempty + menu_slist_showfull + menu_slowmo + menu_snd_attenuation_method + menu_sounds + menu_tooltips + menu_updatecheck + menu_updatecheck_getpacks + menu_use_default_hostname + menu_vid_scale + menu_video_played + menu_watermark + menu_weaponarena + minplayers + mod_alias_force_animated + mod_alias_supporttagscale + mod_bsp_portalize + mod_collision_bih + mod_generatelightmaps_borderpixels + mod_generatelightmaps_gridradius + mod_generatelightmaps_gridsamples + mod_generatelightmaps_lightmapradius + mod_generatelightmaps_lightmapsamples + mod_generatelightmaps_texturesize + mod_generatelightmaps_unitspersample + mod_generatelightmaps_vertexradius + mod_generatelightmaps_vertexsamples + mod_noshader_default_offsetmapping + mod_obj_orientation + mod_q1bsp_polygoncollisions + mod_q3bsp_curves_collisions + mod_q3bsp_curves_collisions_stride + mod_q3bsp_curves_stride + mod_q3bsp_debugtracebrush + mod_q3bsp_lightmapmergepower + mod_q3bsp_nolightmaps + mod_q3bsp_optimizedtraceline + mod_q3bsp_sRGBlightmaps + mod_q3bsp_tracelineofsight_brushes + mod_q3shader_default_offsetmapping + mod_q3shader_default_offsetmapping_bias + mod_q3shader_default_offsetmapping_scale + mod_q3shader_default_polygonfactor + mod_q3shader_default_polygonoffset + mod_q3shader_force_addalpha + mod_q3shader_force_terrain_alphaflag + mod_recalculatenodeboxes + music_playlist_current0 + music_playlist_current1 + music_playlist_current2 + music_playlist_current3 + music_playlist_current4 + music_playlist_current5 + music_playlist_current6 + music_playlist_current7 + music_playlist_current8 + music_playlist_current9 + music_playlist_index + music_playlist_list0 + music_playlist_list1 + music_playlist_list2 + music_playlist_list3 + music_playlist_list4 + music_playlist_list5 + music_playlist_list6 + music_playlist_list7 + music_playlist_list8 + music_playlist_list9 + music_playlist_random0 + music_playlist_random1 + music_playlist_random2 + music_playlist_random3 + music_playlist_random4 + music_playlist_random5 + music_playlist_random6 + music_playlist_random7 + music_playlist_random8 + music_playlist_random9 + music_playlist_sampleposition0 + music_playlist_sampleposition1 + music_playlist_sampleposition2 + music_playlist_sampleposition3 + music_playlist_sampleposition4 + music_playlist_sampleposition5 + music_playlist_sampleposition6 + music_playlist_sampleposition7 + music_playlist_sampleposition8 + music_playlist_sampleposition9 + nehx00 + nehx01 + nehx02 + nehx03 + nehx04 + nehx05 + nehx06 + nehx07 + nehx08 + nehx09 + nehx10 + nehx11 + nehx12 + nehx13 + nehx14 + nehx15 + nehx16 + nehx17 + nehx18 + nehx19 + net_address + net_address_ipv6 + net_challengefloodblockingtimeout + net_connectfloodblockingtimeout + net_connecttimeout + net_getstatusfloodblockingtimeout + net_messagetimeout + net_slist_favorites + net_slist_maxtries + net_slist_pause + net_slist_queriesperframe + net_slist_queriespersecond + net_slist_timeout + net_tos_dscp + nextmap + noaim + noexit + nomonsters + nosound + notification_ANNCE_ACHIEVEMENT_AIRSHOT + notification_ANNCE_ACHIEVEMENT_AMAZING + notification_ANNCE_ACHIEVEMENT_AWESOME + notification_ANNCE_ACHIEVEMENT_BOTLIKE + notification_ANNCE_ACHIEVEMENT_ELECTROBITCH + notification_ANNCE_ACHIEVEMENT_IMPRESSIVE + notification_ANNCE_ACHIEVEMENT_YODA + notification_ANNCE_BEGIN + notification_ANNCE_KILLSTREAK_03 + notification_ANNCE_KILLSTREAK_05 + notification_ANNCE_KILLSTREAK_10 + notification_ANNCE_KILLSTREAK_15 + notification_ANNCE_KILLSTREAK_20 + notification_ANNCE_KILLSTREAK_25 + notification_ANNCE_KILLSTREAK_30 + notification_ANNCE_MINSTAGIB_LASTSECOND + notification_ANNCE_MINSTAGIB_NARROWLY + notification_ANNCE_MINSTAGIB_TERMINATED + notification_ANNCE_MULTIFRAG + notification_ANNCE_NUM_1 + notification_ANNCE_NUM_10 + notification_ANNCE_NUM_2 + notification_ANNCE_NUM_3 + notification_ANNCE_NUM_4 + notification_ANNCE_NUM_5 + notification_ANNCE_NUM_6 + notification_ANNCE_NUM_7 + notification_ANNCE_NUM_8 + notification_ANNCE_NUM_9 + notification_ANNCE_PREPARE + notification_ANNCE_REMAINING_FRAG_1 + notification_ANNCE_REMAINING_FRAG_2 + notification_ANNCE_REMAINING_FRAG_3 + notification_ANNCE_REMAINING_MIN_1 + notification_ANNCE_REMAINING_MIN_5 + notification_ANNCE_TIMEOUT + notification_ANNCE_VOTE_ACCEPT + notification_ANNCE_VOTE_CALL + notification_ANNCE_VOTE_FAIL + notification_CENTER_ARENA_BEGIN + notification_CENTER_ARENA_NEEDPLAYER + notification_CENTER_ARENA_ROUNDSTART + notification_CENTER_ASSAULT_ATTACKING + notification_CENTER_ASSAULT_DEFENDING + notification_CENTER_COUNTDOWN_BEGIN + notification_CENTER_COUNTDOWN_GAMESTART + notification_CENTER_CTF_CAPTURESHIELD_FREE + notification_CENTER_CTF_CAPTURESHIELD_SHIELDED + notification_CENTER_CTF_CAPTURE_BLUE + notification_CENTER_CTF_CAPTURE_RED + notification_CENTER_CTF_FLAG_THROW_PUNISH + notification_CENTER_CTF_PASS_OTHER_BLUE + notification_CENTER_CTF_PASS_OTHER_RED + notification_CENTER_CTF_PASS_RECEIVED_BLUE + notification_CENTER_CTF_PASS_RECEIVED_RED + notification_CENTER_CTF_PASS_REQUESTED + notification_CENTER_CTF_PASS_REQUESTING + notification_CENTER_CTF_PASS_SENT_BLUE + notification_CENTER_CTF_PASS_SENT_RED + notification_CENTER_CTF_PICKUP_BLUE + notification_CENTER_CTF_PICKUP_ENEMY + notification_CENTER_CTF_PICKUP_ENEMY_VERBOSE + notification_CENTER_CTF_PICKUP_RED + notification_CENTER_CTF_PICKUP_TEAM + notification_CENTER_CTF_PICKUP_TEAM_VERBOSE + notification_CENTER_CTF_RETURN_BLUE + notification_CENTER_CTF_RETURN_RED + notification_CENTER_CTF_STALEMATE_CARRIER + notification_CENTER_CTF_STALEMATE_OTHER + notification_CENTER_DEATH_MURDER_FRAG + notification_CENTER_DEATH_MURDER_FRAGGED + notification_CENTER_DEATH_MURDER_FRAGGED_VERBOSE + notification_CENTER_DEATH_MURDER_FRAG_VERBOSE + notification_CENTER_DEATH_MURDER_TYPEFRAG + notification_CENTER_DEATH_MURDER_TYPEFRAGGED + notification_CENTER_DEATH_MURDER_TYPEFRAGGED_VERBOSE + notification_CENTER_DEATH_MURDER_TYPEFRAG_VERBOSE + notification_CENTER_DEATH_SELF_AUTOTEAMCHANGE + notification_CENTER_DEATH_SELF_BETRAYAL + notification_CENTER_DEATH_SELF_CAMP + notification_CENTER_DEATH_SELF_CHEAT + notification_CENTER_DEATH_SELF_CUSTOM + notification_CENTER_DEATH_SELF_DROWN + notification_CENTER_DEATH_SELF_FALL + notification_CENTER_DEATH_SELF_FIRE + notification_CENTER_DEATH_SELF_GENERIC + notification_CENTER_DEATH_SELF_LAVA + notification_CENTER_DEATH_SELF_NOAMMO + notification_CENTER_DEATH_SELF_ROT + notification_CENTER_DEATH_SELF_SHOOTING_STAR + notification_CENTER_DEATH_SELF_SLIME + notification_CENTER_DEATH_SELF_SUICIDE + notification_CENTER_DEATH_SELF_SWAMP + notification_CENTER_DEATH_SELF_TEAMCHANGE + notification_CENTER_DEATH_SELF_TOUCHEXPLODE + notification_CENTER_DEATH_SELF_TURRET + notification_CENTER_DEATH_SELF_TURRET_EWHEEL + notification_CENTER_DEATH_SELF_TURRET_WALK + notification_CENTER_DEATH_SELF_VH_BUMB_DEATH + notification_CENTER_DEATH_SELF_VH_CRUSH + notification_CENTER_DEATH_SELF_VH_RAPT_BOMB + notification_CENTER_DEATH_SELF_VH_RAPT_DEATH + notification_CENTER_DEATH_SELF_VH_SPID_DEATH + notification_CENTER_DEATH_SELF_VH_SPID_ROCKET + notification_CENTER_DEATH_SELF_VH_WAKI_DEATH + notification_CENTER_DEATH_SELF_VH_WAKI_ROCKET + notification_CENTER_DEATH_SELF_VOID + notification_CENTER_DEATH_TEAMKILL_FRAG + notification_CENTER_DEATH_TEAMKILL_FRAGGED + notification_CENTER_DISCONNECT_IDLING + notification_CENTER_FREEZETAG_FREEZE + notification_CENTER_FREEZETAG_FROZEN + notification_CENTER_FREEZETAG_REVIVE + notification_CENTER_FREEZETAG_REVIVED + notification_CENTER_FREEZETAG_ROUND_WIN_BLUE + notification_CENTER_FREEZETAG_ROUND_WIN_PINK + notification_CENTER_FREEZETAG_ROUND_WIN_RED + notification_CENTER_FREEZETAG_ROUND_WIN_YELLOW + notification_CENTER_FREEZETAG_SELF + notification_CENTER_FREEZETAG_SPAWN_LATE + notification_CENTER_ITEM_WEAPON_DONTHAVE + notification_CENTER_ITEM_WEAPON_DROP + notification_CENTER_ITEM_WEAPON_GOT + notification_CENTER_ITEM_WEAPON_NOAMMO + notification_CENTER_ITEM_WEAPON_PRIMORSEC + notification_CENTER_ITEM_WEAPON_UNAVAILABLE + notification_CENTER_JOIN_NOSPAWNS + notification_CENTER_JOIN_PREVENT + notification_CENTER_KEEPAWAY_DROPPED + notification_CENTER_KEEPAWAY_PICKUP + notification_CENTER_KEEPAWAY_WARN + notification_CENTER_KEYHUNT_HELP + notification_CENTER_KEYHUNT_INTERFERE_BLUE + notification_CENTER_KEYHUNT_INTERFERE_PINK + notification_CENTER_KEYHUNT_INTERFERE_RED + notification_CENTER_KEYHUNT_INTERFERE_YELLOW + notification_CENTER_KEYHUNT_MEET + notification_CENTER_KEYHUNT_SCAN + notification_CENTER_KEYHUNT_START_BLUE + notification_CENTER_KEYHUNT_START_PINK + notification_CENTER_KEYHUNT_START_RED + notification_CENTER_KEYHUNT_START_YELLOW + notification_CENTER_KEYHUNT_WAIT + notification_CENTER_LMS_CAMPCHECK + notification_CENTER_MINSTA_FINDAMMO + notification_CENTER_MINSTA_FINDAMMO_FIRST + notification_CENTER_MOTD + notification_CENTER_NIX_COUNTDOWN + notification_CENTER_NIX_NEWWEAPON + notification_CENTER_OVERTIME_FRAG + notification_CENTER_OVERTIME_TIME + notification_CENTER_POWERDOWN_INVISIBILITY + notification_CENTER_POWERDOWN_SHIELD + notification_CENTER_POWERDOWN_SPEED + notification_CENTER_POWERDOWN_STRENGTH + notification_CENTER_POWERUP_INVISIBILITY + notification_CENTER_POWERUP_SHIELD + notification_CENTER_POWERUP_SPEED + notification_CENTER_POWERUP_STRENGTH + notification_CENTER_RACE_FINISHLAP + notification_CENTER_SUPERWEAPON_BROKEN + notification_CENTER_SUPERWEAPON_LOST + notification_CENTER_SUPERWEAPON_PICKUP + notification_CENTER_TEAMCHANGE_AUTO + notification_CENTER_TEAMCHANGE_BLUE + notification_CENTER_TEAMCHANGE_PINK + notification_CENTER_TEAMCHANGE_RED + notification_CENTER_TEAMCHANGE_SPECTATE + notification_CENTER_TEAMCHANGE_SUICIDE + notification_CENTER_TEAMCHANGE_YELLOW + notification_CENTER_TIMEOUT_BEGINNING + notification_CENTER_TIMEOUT_ENDING + notification_DEATH_MURDER_CHEAT + notification_DEATH_MURDER_DROWN + notification_DEATH_MURDER_FALL + notification_DEATH_MURDER_FIRE + notification_DEATH_MURDER_LAVA + notification_DEATH_MURDER_SHOOTING_STAR + notification_DEATH_MURDER_SLIME + notification_DEATH_MURDER_SWAMP + notification_DEATH_MURDER_TELEFRAG + notification_DEATH_MURDER_TOUCHEXPLODE + notification_DEATH_MURDER_VH_BUMB_DEATH + notification_DEATH_MURDER_VH_BUMB_GUN + notification_DEATH_MURDER_VH_CRUSH + notification_DEATH_MURDER_VH_RAPT_BOMB + notification_DEATH_MURDER_VH_RAPT_CANNON + notification_DEATH_MURDER_VH_RAPT_DEATH + notification_DEATH_MURDER_VH_SPID_DEATH + notification_DEATH_MURDER_VH_SPID_MINIGUN + notification_DEATH_MURDER_VH_SPID_ROCKET + notification_DEATH_MURDER_VH_WAKI_DEATH + notification_DEATH_MURDER_VH_WAKI_GUN + notification_DEATH_MURDER_VH_WAKI_ROCKET + notification_DEATH_MURDER_VOID + notification_DEATH_SELF_AUTOTEAMCHANGE + notification_DEATH_SELF_BETRAYAL + notification_DEATH_SELF_CAMP + notification_DEATH_SELF_CHEAT + notification_DEATH_SELF_CUSTOM + notification_DEATH_SELF_DROWN + notification_DEATH_SELF_FALL + notification_DEATH_SELF_FIRE + notification_DEATH_SELF_GENERIC + notification_DEATH_SELF_LAVA + notification_DEATH_SELF_NOAMMO + notification_DEATH_SELF_ROT + notification_DEATH_SELF_SHOOTING_STAR + notification_DEATH_SELF_SLIME + notification_DEATH_SELF_SUICIDE + notification_DEATH_SELF_SWAMP + notification_DEATH_SELF_TEAMCHANGE + notification_DEATH_SELF_TOUCHEXPLODE + notification_DEATH_SELF_TURRET + notification_DEATH_SELF_TURRET_EWHEEL + notification_DEATH_SELF_TURRET_FLAC + notification_DEATH_SELF_TURRET_HELLION + notification_DEATH_SELF_TURRET_HK + notification_DEATH_SELF_TURRET_MACHINEGUN + notification_DEATH_SELF_TURRET_MLRS + notification_DEATH_SELF_TURRET_PHASER + notification_DEATH_SELF_TURRET_PLASMA + notification_DEATH_SELF_TURRET_TESLA + notification_DEATH_SELF_TURRET_WALK_GUN + notification_DEATH_SELF_TURRET_WALK_MEELE + notification_DEATH_SELF_TURRET_WALK_ROCKET + notification_DEATH_SELF_VH_BUMB_DEATH + notification_DEATH_SELF_VH_CRUSH + notification_DEATH_SELF_VH_RAPT_BOMB + notification_DEATH_SELF_VH_RAPT_DEATH + notification_DEATH_SELF_VH_SPID_DEATH + notification_DEATH_SELF_VH_SPID_ROCKET + notification_DEATH_SELF_VH_WAKI_DEATH + notification_DEATH_SELF_VH_WAKI_ROCKET + notification_DEATH_SELF_VOID + notification_INFO_CTF_CAPTURE_BLUE + notification_INFO_CTF_CAPTURE_BROKEN_BLUE + notification_INFO_CTF_CAPTURE_BROKEN_RED + notification_INFO_CTF_CAPTURE_RED + notification_INFO_CTF_CAPTURE_TIME_BLUE + notification_INFO_CTF_CAPTURE_TIME_RED + notification_INFO_CTF_CAPTURE_UNBROKEN_BLUE + notification_INFO_CTF_CAPTURE_UNBROKEN_RED + notification_INFO_CTF_FLAGRETURN_ABORTRUN_BLUE + notification_INFO_CTF_FLAGRETURN_ABORTRUN_RED + notification_INFO_CTF_FLAGRETURN_DAMAGED_BLUE + notification_INFO_CTF_FLAGRETURN_DAMAGED_RED + notification_INFO_CTF_FLAGRETURN_DROPPED_BLUE + notification_INFO_CTF_FLAGRETURN_DROPPED_RED + notification_INFO_CTF_FLAGRETURN_NEEDKILL_BLUE + notification_INFO_CTF_FLAGRETURN_NEEDKILL_RED + notification_INFO_CTF_FLAGRETURN_SPEEDRUN_BLUE + notification_INFO_CTF_FLAGRETURN_SPEEDRUN_RED + notification_INFO_CTF_FLAGRETURN_TIMEOUT_BLUE + notification_INFO_CTF_FLAGRETURN_TIMEOUT_RED + notification_INFO_CTF_LOST_BLUE + notification_INFO_CTF_LOST_RED + notification_INFO_CTF_PICKUP_BLUE + notification_INFO_CTF_PICKUP_RED + notification_INFO_CTF_RETURN_BLUE + notification_INFO_CTF_RETURN_RED + notification_INFO_DEATH_MURDER_CHEAT + notification_INFO_DEATH_MURDER_DROWN + notification_INFO_DEATH_MURDER_FALL + notification_INFO_DEATH_MURDER_FIRE + notification_INFO_DEATH_MURDER_LAVA + notification_INFO_DEATH_MURDER_SHOOTING_STAR + notification_INFO_DEATH_MURDER_SLIME + notification_INFO_DEATH_MURDER_SWAMP + notification_INFO_DEATH_MURDER_TELEFRAG + notification_INFO_DEATH_MURDER_TOUCHEXPLODE + notification_INFO_DEATH_MURDER_VH_BUMB_DEATH + notification_INFO_DEATH_MURDER_VH_BUMB_GUN + notification_INFO_DEATH_MURDER_VH_CRUSH + notification_INFO_DEATH_MURDER_VH_RAPT_BOMB + notification_INFO_DEATH_MURDER_VH_RAPT_CANNON + notification_INFO_DEATH_MURDER_VH_RAPT_DEATH + notification_INFO_DEATH_MURDER_VH_SPID_DEATH + notification_INFO_DEATH_MURDER_VH_SPID_MINIGUN + notification_INFO_DEATH_MURDER_VH_SPID_ROCKET + notification_INFO_DEATH_MURDER_VH_WAKI_DEATH + notification_INFO_DEATH_MURDER_VH_WAKI_GUN + notification_INFO_DEATH_MURDER_VH_WAKI_ROCKET + notification_INFO_DEATH_MURDER_VOID + notification_INFO_DEATH_SELF_AUTOTEAMCHANGE + notification_INFO_DEATH_SELF_BETRAYAL + notification_INFO_DEATH_SELF_CAMP + notification_INFO_DEATH_SELF_CHEAT + notification_INFO_DEATH_SELF_CUSTOM + notification_INFO_DEATH_SELF_DROWN + notification_INFO_DEATH_SELF_FALL + notification_INFO_DEATH_SELF_FIRE + notification_INFO_DEATH_SELF_GENERIC + notification_INFO_DEATH_SELF_LAVA + notification_INFO_DEATH_SELF_NOAMMO + notification_INFO_DEATH_SELF_ROT + notification_INFO_DEATH_SELF_SHOOTING_STAR + notification_INFO_DEATH_SELF_SLIME + notification_INFO_DEATH_SELF_SUICIDE + notification_INFO_DEATH_SELF_SWAMP + notification_INFO_DEATH_SELF_TEAMCHANGE + notification_INFO_DEATH_SELF_TOUCHEXPLODE + notification_INFO_DEATH_SELF_TURRET + notification_INFO_DEATH_SELF_TURRET_EWHEEL + notification_INFO_DEATH_SELF_TURRET_FLAC + notification_INFO_DEATH_SELF_TURRET_HELLION + notification_INFO_DEATH_SELF_TURRET_HK + notification_INFO_DEATH_SELF_TURRET_MACHINEGUN + notification_INFO_DEATH_SELF_TURRET_MLRS + notification_INFO_DEATH_SELF_TURRET_PHASER + notification_INFO_DEATH_SELF_TURRET_PLASMA + notification_INFO_DEATH_SELF_TURRET_TESLA + notification_INFO_DEATH_SELF_TURRET_WALK_GUN + notification_INFO_DEATH_SELF_TURRET_WALK_MEELE + notification_INFO_DEATH_SELF_TURRET_WALK_ROCKET + notification_INFO_DEATH_SELF_VH_BUMB_DEATH + notification_INFO_DEATH_SELF_VH_CRUSH + notification_INFO_DEATH_SELF_VH_RAPT_BOMB + notification_INFO_DEATH_SELF_VH_RAPT_DEATH + notification_INFO_DEATH_SELF_VH_SPID_DEATH + notification_INFO_DEATH_SELF_VH_SPID_ROCKET + notification_INFO_DEATH_SELF_VH_WAKI_DEATH + notification_INFO_DEATH_SELF_VH_WAKI_ROCKET + notification_INFO_DEATH_SELF_VOID + notification_INFO_DEATH_TEAMKILL_BLUE + notification_INFO_DEATH_TEAMKILL_PINK + notification_INFO_DEATH_TEAMKILL_RED + notification_INFO_DEATH_TEAMKILL_YELLOW + notification_INFO_FREEZETAG_FREEZE + notification_INFO_FREEZETAG_REVIVE + notification_INFO_FREEZETAG_ROUND_WIN_BLUE + notification_INFO_FREEZETAG_ROUND_WIN_PINK + notification_INFO_FREEZETAG_ROUND_WIN_RED + notification_INFO_FREEZETAG_ROUND_WIN_YELLOW + notification_INFO_FREEZETAG_SELF + notification_INFO_GODMODE_OFF + notification_INFO_ITEM_WEAPON_DONTHAVE + notification_INFO_ITEM_WEAPON_DROP + notification_INFO_ITEM_WEAPON_GOT + notification_INFO_ITEM_WEAPON_NOAMMO + notification_INFO_ITEM_WEAPON_PRIMORSEC + notification_INFO_ITEM_WEAPON_UNAVAILABLE + notification_INFO_JOIN_CONNECT + notification_INFO_JOIN_CONNECT_TEAM_BLUE + notification_INFO_JOIN_CONNECT_TEAM_PINK + notification_INFO_JOIN_CONNECT_TEAM_RED + notification_INFO_JOIN_CONNECT_TEAM_YELLOW + notification_INFO_JOIN_PLAY + notification_INFO_KEEPAWAY_DROPPED + notification_INFO_KEEPAWAY_PICKUP + notification_INFO_KEYHUNT_CAPTURE_BLUE + notification_INFO_KEYHUNT_CAPTURE_PINK + notification_INFO_KEYHUNT_CAPTURE_RED + notification_INFO_KEYHUNT_CAPTURE_YELLOW + notification_INFO_KEYHUNT_DROP_BLUE + notification_INFO_KEYHUNT_DROP_PINK + notification_INFO_KEYHUNT_DROP_RED + notification_INFO_KEYHUNT_DROP_YELLOW + notification_INFO_KEYHUNT_LOST_BLUE + notification_INFO_KEYHUNT_LOST_PINK + notification_INFO_KEYHUNT_LOST_RED + notification_INFO_KEYHUNT_LOST_YELLOW + notification_INFO_KEYHUNT_PICKUP_BLUE + notification_INFO_KEYHUNT_PICKUP_PINK + notification_INFO_KEYHUNT_PICKUP_RED + notification_INFO_KEYHUNT_PICKUP_YELLOW + notification_INFO_LMS_FORFEIT + notification_INFO_LMS_NOLIVES + notification_INFO_POWERUP_INVISIBILITY + notification_INFO_POWERUP_SHIELD + notification_INFO_POWERUP_SPEED + notification_INFO_POWERUP_STRENGTH + notification_INFO_QUIT_DISCONNECT + notification_INFO_QUIT_KICK_IDLING + notification_INFO_QUIT_KICK_SPECTATING + notification_INFO_QUIT_SPECTATE + notification_INFO_RACE_ABANDONED + notification_INFO_RACE_FAIL_RANKED + notification_INFO_RACE_FAIL_UNRANKED + notification_INFO_RACE_FINISHED + notification_INFO_RACE_NEW_BROKEN + notification_INFO_RACE_NEW_IMPROVED + notification_INFO_RACE_NEW_MISSING_UID + notification_INFO_RACE_NEW_SET + notification_INFO_SCORES_BLUE + notification_INFO_SCORES_PINK + notification_INFO_SCORES_RED + notification_INFO_SCORES_YELLOW + notification_INFO_SPECTATE_WARNING + notification_INFO_SUPERWEAPON_PICKUP + notification_INFO_VERSION_BETA + notification_INFO_VERSION_OLD + notification_INFO_VERSION_OUTDATED + notification_INFO_WATERMARK + notification_INFO_WEAPON_ACCORDEON_MURDER + notification_INFO_WEAPON_ACCORDEON_SUICIDE + notification_INFO_WEAPON_CRYLINK_MURDER + notification_INFO_WEAPON_CRYLINK_SUICIDE + notification_INFO_WEAPON_ELECTRO_MURDER_BOLT + notification_INFO_WEAPON_ELECTRO_MURDER_COMBO + notification_INFO_WEAPON_ELECTRO_MURDER_ORBS + notification_INFO_WEAPON_ELECTRO_SUICIDE_BOLT + notification_INFO_WEAPON_ELECTRO_SUICIDE_ORBS + notification_INFO_WEAPON_FIREBALL_MURDER_BLAST + notification_INFO_WEAPON_FIREBALL_MURDER_FIREMINE + notification_INFO_WEAPON_FIREBALL_SUICIDE_BLAST + notification_INFO_WEAPON_FIREBALL_SUICIDE_FIREMINE + notification_INFO_WEAPON_HAGAR_MURDER_BURST + notification_INFO_WEAPON_HAGAR_MURDER_SPRAY + notification_INFO_WEAPON_HAGAR_SUICIDE + notification_INFO_WEAPON_HLAC_MURDER + notification_INFO_WEAPON_HLAC_SUICIDE + notification_INFO_WEAPON_HOOK_MURDER + notification_INFO_WEAPON_KLEINBOTTLE_MURDER + notification_INFO_WEAPON_KLEINBOTTLE_SUICIDE + notification_INFO_WEAPON_LASER_MURDER + notification_INFO_WEAPON_LASER_SUICIDE + notification_INFO_WEAPON_MINELAYER_MURDER + notification_INFO_WEAPON_MINELAYER_SUICIDE + notification_INFO_WEAPON_MINSTANEX_MURDER + notification_INFO_WEAPON_MORTAR_MURDER_BOUNCE + notification_INFO_WEAPON_MORTAR_MURDER_EXPLODE + notification_INFO_WEAPON_MORTAR_SUICIDE_BOUNCE + notification_INFO_WEAPON_MORTAR_SUICIDE_EXPLODE + notification_INFO_WEAPON_NEX_MURDER + notification_INFO_WEAPON_RIFLE_MURDER + notification_INFO_WEAPON_RIFLE_MURDER_HAIL + notification_INFO_WEAPON_RIFLE_MURDER_HAIL_PIERCING + notification_INFO_WEAPON_RIFLE_MURDER_PIERCING + notification_INFO_WEAPON_ROCKETLAUNCHER_MURDER_DIRECT + notification_INFO_WEAPON_ROCKETLAUNCHER_MURDER_SPLASH + notification_INFO_WEAPON_ROCKETLAUNCHER_SUICIDE + notification_INFO_WEAPON_SEEKER_MURDER_SPRAY + notification_INFO_WEAPON_SEEKER_MURDER_TAG + notification_INFO_WEAPON_SEEKER_SUICIDE + notification_INFO_WEAPON_SHOTGUN_MURDER + notification_INFO_WEAPON_SHOTGUN_MURDER_SLAP + notification_INFO_WEAPON_THINKING_WITH_PORTALS + notification_INFO_WEAPON_TUBA_MURDER + notification_INFO_WEAPON_TUBA_SUICIDE + notification_INFO_WEAPON_UZI_MURDER_SNIPE + notification_INFO_WEAPON_UZI_MURDER_SPRAY + notification_ITEM_WEAPON_DONTHAVE + notification_ITEM_WEAPON_DROP + notification_ITEM_WEAPON_GOT + notification_ITEM_WEAPON_NOAMMO + notification_ITEM_WEAPON_PRIMORSEC + notification_ITEM_WEAPON_UNAVAILABLE + notification_MULTI_ARENA_BEGIN + notification_MULTI_COUNTDOWN_BEGIN + notification_MULTI_MINSTA_FINDAMMO + notification_WEAPON_ACCORDEON_MURDER + notification_WEAPON_ACCORDEON_SUICIDE + notification_WEAPON_CRYLINK_MURDER + notification_WEAPON_CRYLINK_SUICIDE + notification_WEAPON_ELECTRO_MURDER_BOLT + notification_WEAPON_ELECTRO_MURDER_COMBO + notification_WEAPON_ELECTRO_MURDER_ORBS + notification_WEAPON_ELECTRO_SUICIDE_BOLT + notification_WEAPON_ELECTRO_SUICIDE_ORBS + notification_WEAPON_FIREBALL_MURDER_BLAST + notification_WEAPON_FIREBALL_MURDER_FIREMINE + notification_WEAPON_FIREBALL_SUICIDE_BLAST + notification_WEAPON_FIREBALL_SUICIDE_FIREMINE + notification_WEAPON_HAGAR_MURDER_BURST + notification_WEAPON_HAGAR_MURDER_SPRAY + notification_WEAPON_HAGAR_SUICIDE + notification_WEAPON_HLAC_MURDER + notification_WEAPON_HLAC_SUICIDE + notification_WEAPON_HOOK_MURDER + notification_WEAPON_KLEINBOTTLE_MURDER + notification_WEAPON_KLEINBOTTLE_SUICIDE + notification_WEAPON_LASER_MURDER + notification_WEAPON_LASER_SUICIDE + notification_WEAPON_MINELAYER_MURDER + notification_WEAPON_MINELAYER_SUICIDE + notification_WEAPON_MINSTANEX_MURDER + notification_WEAPON_MORTAR_MURDER_BOUNCE + notification_WEAPON_MORTAR_MURDER_EXPLODE + notification_WEAPON_MORTAR_SUICIDE_BOUNCE + notification_WEAPON_MORTAR_SUICIDE_EXPLODE + notification_WEAPON_NEX_MURDER + notification_WEAPON_RIFLE_MURDER + notification_WEAPON_RIFLE_MURDER_HAIL + notification_WEAPON_RIFLE_MURDER_HAIL_PIERCING + notification_WEAPON_RIFLE_MURDER_PIERCING + notification_WEAPON_ROCKETLAUNCHER_MURDER_DIRECT + notification_WEAPON_ROCKETLAUNCHER_MURDER_SPLASH + notification_WEAPON_ROCKETLAUNCHER_SUICIDE + notification_WEAPON_SEEKER_MURDER_SPRAY + notification_WEAPON_SEEKER_MURDER_TAG + notification_WEAPON_SEEKER_SUICIDE + notification_WEAPON_SHOTGUN_MURDER + notification_WEAPON_SHOTGUN_MURDER_SLAP + notification_WEAPON_THINKING_WITH_PORTALS + notification_WEAPON_TUBA_MURDER + notification_WEAPON_TUBA_SUICIDE + notification_WEAPON_UZI_MURDER_SNIPE + notification_WEAPON_UZI_MURDER_SPRAY + notification_allow_chatboxprint + notification_ctf_capture_verbose + notification_ctf_pickup_enemy_verbose + notification_ctf_pickup_team_verbose + notification_debug + notification_errors_are_fatal + notification_frag_verbose + notification_item_centerprinttime + notification_lifetime_mapload + notification_lifetime_runtime + notification_server_allows_frag_verbose + notification_server_allows_location + notification_show_location + notification_show_location_string + notification_show_sprees + notification_show_sprees_center + notification_show_sprees_center_specialonly + notification_show_sprees_info + notification_show_sprees_info_newline + notification_show_sprees_info_specialonly + pausable + physics_ode + physics_ode_allowconvex + physics_ode_autodisable + physics_ode_autodisable_steps + physics_ode_autodisable_threshold_angular + physics_ode_autodisable_threshold_linear + physics_ode_autodisable_threshold_samples + physics_ode_autodisable_time + physics_ode_constantstep + physics_ode_contact_cfm + physics_ode_contact_erp + physics_ode_contact_maxpoints + physics_ode_contact_mu + physics_ode_contactsurfacelayer + physics_ode_iterationsperframe + physics_ode_movelimit + physics_ode_printstats + physics_ode_quadtree_depth + physics_ode_spinlimit + physics_ode_trick_fixnan + physics_ode_world_cfm + physics_ode_world_damping + physics_ode_world_damping_angular + physics_ode_world_damping_angular_threshold + physics_ode_world_damping_linear + physics_ode_world_damping_linear_threshold + physics_ode_world_erp + physics_ode_world_gravitymod + physics_ode_worldstep_iterations + port + pr_checkextension + prvm_backtraceforwarnings + prvm_breakpointdump + prvm_errordump + prvm_language + prvm_leaktest + prvm_leaktest_ignore_classnames + prvm_reuseedicts_neverinsameframe + prvm_reuseedicts_startuptime + prvm_statementprofiling + prvm_timeprofiling + prvm_traceqc + qport + quit_and_redirect + quit_and_redirect_timer + quit_when_empty + r_ambient + r_batch_debugdynamicvertexpath + r_batch_dynamicbuffer + r_batch_multidraw + r_batch_multidraw_mintriangles + r_bloom + r_bloom_blur + r_bloom_brighten + r_bloom_colorexponent + r_bloom_colorscale + r_bloom_colorsubtract + r_bloom_resolution + r_bloom_scenebrightness + r_bufferdatasize_index16 + r_bufferdatasize_index32 + r_bufferdatasize_uniform + r_bufferdatasize_vertex + r_celoutlines + r_celshading + r_colormap_palette + r_coronas + r_coronas_occlusionquery + r_coronas_occlusionsizescale + r_cullentities_trace + r_cullentities_trace_delay + r_cullentities_trace_enlarge + r_cullentities_trace_samples + r_cullentities_trace_tempentitysamples + r_damageblur + r_deformvertexes + r_depthfirst + r_draw2d + r_drawdecals + r_drawdecals_drawdistance + r_draweffects + r_drawentities + r_drawexplosions + r_drawexteriormodel + r_drawfog + r_drawparticles + r_drawparticles_drawdistance + r_drawparticles_nearclip_max + r_drawparticles_nearclip_min + r_drawportals + r_drawviewmodel + r_drawworld + r_dynamic + r_editlights + r_editlights_current_ambient + r_editlights_current_angles + r_editlights_current_color + r_editlights_current_corona + r_editlights_current_coronasize + r_editlights_current_cubemap + r_editlights_current_diffuse + r_editlights_current_normalmode + r_editlights_current_origin + r_editlights_current_radius + r_editlights_current_realtimemode + r_editlights_current_shadows + r_editlights_current_specular + r_editlights_current_style + r_editlights_cursordistance + r_editlights_cursorgrid + r_editlights_cursorpushback + r_editlights_cursorpushoff + r_editlights_drawproperties + r_editlights_quakelightsizescale + r_enableshadowvolumes + r_equalize_entities_by + r_equalize_entities_fullbright + r_equalize_entities_minambient + r_equalize_entities_to + r_explosionclip + r_fakelight + r_fakelight_intensity + r_farclip_base + r_farclip_world + r_fixtrans_auto + r_fog_clear + r_fog_exp2 + r_font_antialias + r_font_compress + r_font_disable_freetype + r_font_diskcache + r_font_hinting + r_font_kerning + r_font_nonpoweroftwo + r_font_postprocess_blur + r_font_postprocess_outline + r_font_postprocess_shadow_x + r_font_postprocess_shadow_y + r_font_postprocess_shadow_z + r_font_size_snapping + r_font_use_alpha_textures + r_framedatasize + r_fullbright + r_fullbrights + r_glsl + r_glsl_deluxemapping + r_glsl_offsetmapping + r_glsl_offsetmapping_lod + r_glsl_offsetmapping_lod_distance + r_glsl_offsetmapping_reliefmapping + r_glsl_offsetmapping_reliefmapping_refinesteps + r_glsl_offsetmapping_reliefmapping_steps + r_glsl_offsetmapping_scale + r_glsl_offsetmapping_steps + r_glsl_postprocess + r_glsl_postprocess_uservec1 + r_glsl_postprocess_uservec1_enable + r_glsl_postprocess_uservec2 + r_glsl_postprocess_uservec2_enable + r_glsl_postprocess_uservec3 + r_glsl_postprocess_uservec3_enable + r_glsl_postprocess_uservec4 + r_glsl_postprocess_uservec4_enable + r_glsl_saturation + r_glsl_saturation_redcompensate + r_glsl_skeletal + r_glsl_vertextextureblend_usebothalphas + r_hdr_glowintensity + r_hdr_irisadaptation + r_hdr_irisadaptation_fade_down + r_hdr_irisadaptation_fade_up + r_hdr_irisadaptation_maxvalue + r_hdr_irisadaptation_minvalue + r_hdr_irisadaptation_multiplier + r_hdr_irisadaptation_radius + r_hdr_irisadaptation_value + r_hdr_scenebrightness + r_labelsprites_roundtopixels + r_labelsprites_scale + r_lerpimages + r_lerplightstyles + r_lerpmodels + r_lerpsprites + r_letterbox + r_lightningbeam_color_blue + r_lightningbeam_color_green + r_lightningbeam_color_red + r_lightningbeam_qmbtexture + r_lightningbeam_repeatdistance + r_lightningbeam_scroll + r_lightningbeam_thickness + r_lockpvs + r_lockvisibility + r_mipnormalmaps + r_mipskins + r_mipsprites + r_motionblur + r_motionblur_averaging + r_motionblur_maxblur + r_motionblur_minblur + r_motionblur_mousefactor + r_motionblur_mousefactor_maxspeed + r_motionblur_mousefactor_minspeed + r_motionblur_randomize + r_motionblur_velocityfactor + r_motionblur_velocityfactor_maxspeed + r_motionblur_velocityfactor_minspeed + r_nearclip + r_nearest_2d + r_nearest_conchars + r_nosurftextures + r_novis + r_overheadsprites_perspective + r_overheadsprites_pushback + r_overheadsprites_scalex + r_overheadsprites_scaley + r_picmipsprites + r_picmipworld + r_polygonoffset_decals_factor + r_polygonoffset_decals_offset + r_polygonoffset_submodel_factor + r_polygonoffset_submodel_offset + r_q1bsp_skymasking + r_q3bsp_renderskydepth + r_render + r_renderview + r_shadow_bouncegrid + r_shadow_bouncegrid_bounceanglediffuse + r_shadow_bouncegrid_directionalshading + r_shadow_bouncegrid_dlightparticlemultiplier + r_shadow_bouncegrid_hitmodels + r_shadow_bouncegrid_includedirectlighting + r_shadow_bouncegrid_intensity + r_shadow_bouncegrid_lightradiusscale + r_shadow_bouncegrid_maxbounce + r_shadow_bouncegrid_particlebounceintensity + r_shadow_bouncegrid_particleintensity + r_shadow_bouncegrid_photons + r_shadow_bouncegrid_spacing + r_shadow_bouncegrid_stablerandom + r_shadow_bouncegrid_static + r_shadow_bouncegrid_static_directionalshading + r_shadow_bouncegrid_static_lightradiusscale + r_shadow_bouncegrid_static_maxbounce + r_shadow_bouncegrid_static_photons + r_shadow_bouncegrid_updateinterval + r_shadow_bouncegrid_x + r_shadow_bouncegrid_y + r_shadow_bouncegrid_z + r_shadow_bumpscale_basetexture + r_shadow_bumpscale_bumpmap + r_shadow_debuglight + r_shadow_deferred + r_shadow_frontsidecasting + r_shadow_gloss + r_shadow_gloss2exponent + r_shadow_gloss2intensity + r_shadow_glossexact + r_shadow_glossexponent + r_shadow_glossintensity + r_shadow_lightattenuationdividebias + r_shadow_lightattenuationlinearscale + r_shadow_lightintensityscale + r_shadow_lightradiusscale + r_shadow_polygonfactor + r_shadow_polygonoffset + r_shadow_projectdistance + r_shadow_realtime_dlight + r_shadow_realtime_dlight_portalculling + r_shadow_realtime_dlight_shadows + r_shadow_realtime_dlight_svbspculling + r_shadow_realtime_world + r_shadow_realtime_world_compile + r_shadow_realtime_world_compileportalculling + r_shadow_realtime_world_compileshadow + r_shadow_realtime_world_compilesvbsp + r_shadow_realtime_world_lightmaps + r_shadow_realtime_world_shadows + r_shadow_scissor + r_shadow_shadowmapping + r_shadow_shadowmapping_bias + r_shadow_shadowmapping_bordersize + r_shadow_shadowmapping_depthbits + r_shadow_shadowmapping_filterquality + r_shadow_shadowmapping_maxsize + r_shadow_shadowmapping_minsize + r_shadow_shadowmapping_nearclip + r_shadow_shadowmapping_polygonfactor + r_shadow_shadowmapping_polygonoffset + r_shadow_shadowmapping_precision + r_shadow_shadowmapping_useshadowsampler + r_shadow_shadowmapping_vsdct + r_shadow_sortsurfaces + r_shadow_texture3d + r_shadow_usebihculling + r_shadow_usenormalmap + r_shadows + r_shadows_castfrombmodels + r_shadows_darken + r_shadows_drawafterrtlighting + r_shadows_focus + r_shadows_shadowmapbias + r_shadows_shadowmapscale + r_shadows_throwdirection + r_shadows_throwdistance + r_showbboxes + r_showcollisionbrushes + r_showcollisionbrushes_polygonfactor + r_showcollisionbrushes_polygonoffset + r_showdisabledepthtest + r_showlighting + r_shownormals + r_showoverdraw + r_showshadowvolumes + r_showsurfaces + r_showtris + r_skeletal_debugbone + r_skeletal_debugbonecomponent + r_skeletal_debugbonevalue + r_skeletal_debugtranslatex + r_skeletal_debugtranslatey + r_skeletal_debugtranslatez + r_skeletal_use_sse + r_sky + r_skyscroll1 + r_skyscroll2 + r_smoothnormals_areaweighting + r_sortentities + r_speeds + r_speeds_graph + r_speeds_graph_filter_b + r_speeds_graph_filter_c + r_speeds_graph_filter_g + r_speeds_graph_filter_m + r_speeds_graph_filter_o + r_speeds_graph_filter_r + r_speeds_graph_filter_w + r_speeds_graph_filter_y + r_speeds_graph_height + r_speeds_graph_length + r_speeds_graph_seconds + r_speeds_graph_width + r_speeds_graph_x + r_speeds_graph_y + r_stereo_angle + r_stereo_horizontal + r_stereo_redblue + r_stereo_redcyan + r_stereo_redgreen + r_stereo_separation + r_stereo_sidebyside + r_stereo_vertical + r_subdivisions_collision_maxtess + r_subdivisions_collision_maxvertices + r_subdivisions_collision_mintess + r_subdivisions_collision_tolerance + r_subdivisions_maxtess + r_subdivisions_maxvertices + r_subdivisions_mintess + r_subdivisions_tolerance + r_test + r_textbrightness + r_textcontrast + r_textshadow + r_texture_dds_load + r_texture_dds_load_alphamode + r_texture_dds_load_logfailure + r_texture_dds_save + r_texture_dds_swdecode + r_texture_jpeg_fastpicmip + r_textureunits + r_track_sprites + r_track_sprites_flags + r_track_sprites_scaleh + r_track_sprites_scalew + r_transparent + r_transparent_alphatocoverage + r_transparent_sortarraysize + r_transparent_sortmaxdist + r_transparent_sortmindist + r_transparent_sortsurfacesbynearest + r_transparent_useplanardistance + r_transparentdepthmasking + r_trippy + r_usedepthtextures + r_useinfinitefarclip + r_useportalculling + r_usesurfaceculling + r_viewfbo + r_viewscale + r_viewscale_fpsscaling + r_viewscale_fpsscaling_min + r_viewscale_fpsscaling_multiply + r_viewscale_fpsscaling_stepmax + r_viewscale_fpsscaling_stepsize + r_viewscale_fpsscaling_target + r_water + r_water_clippingplanebias + r_water_fbo + r_water_hideplayer + r_water_lowquality + r_water_reflectdistort + r_water_refractdistort + r_water_resolutionmultiplier + r_water_scissormode + r_wateralpha + r_waterscroll + r_waterwarp + rcon_address + rcon_password + rcon_restricted_commands + rcon_restricted_password + rcon_secure + rcon_secure_challengetimeout + rcon_secure_maxdiff + registered + rescan_pending + samelevel + saved1 + saved2 + saved3 + saved4 + savedgamecfg + sbar_alpha_bg + sbar_alpha_fg + sbar_flagstatus_pos + sbar_flagstatus_right + sbar_gametime + sbar_hudselector + sbar_info_pos + sbar_miniscoreboard_size + sbar_scorerank + scoreboard_accuracy + scoreboard_accuracy_border_thickness + scoreboard_accuracy_doublerows + scoreboard_accuracy_nocolors + scoreboard_alpha_bg + scoreboard_alpha_fg + scoreboard_alpha_name + scoreboard_alpha_name_self + scoreboard_bg_scale + scoreboard_border_thickness + scoreboard_color_bg_b + scoreboard_color_bg_g + scoreboard_color_bg_r + scoreboard_color_bg_team + scoreboard_columns + scoreboard_fadeinspeed + scoreboard_fadeoutspeed + scoreboard_highlight + scoreboard_highlight_alpha + scoreboard_highlight_alpha_self + scoreboard_offset_left + scoreboard_offset_right + scoreboard_offset_vertical + scoreboard_respawntime_decimals + scr_centertime + scr_conalpha + scr_conalpha2factor + scr_conalpha3factor + scr_conalphafactor + scr_conbrightness + scr_conforcewhiledisconnected + scr_conscroll2_x + scr_conscroll2_y + scr_conscroll3_x + scr_conscroll3_y + scr_conscroll_x + scr_conscroll_y + scr_infobar_height + scr_loadingscreen_background + scr_loadingscreen_barcolor + scr_loadingscreen_barheight + scr_loadingscreen_count + scr_loadingscreen_firstforstartup + scr_loadingscreen_maxfps + scr_loadingscreen_picture + scr_loadingscreen_scale + scr_loadingscreen_scale_base + scr_loadingscreen_scale_limit + scr_menuforcewhiledisconnected + scr_printspeed + scr_refresh + scr_screenshot_alpha + scr_screenshot_gammaboost + scr_screenshot_hwgamma + scr_screenshot_jpeg + scr_screenshot_jpeg_quality + scr_screenshot_name + scr_screenshot_name_in_mapdir + scr_screenshot_png + scr_screenshot_timestamp + scr_stipple + scratch1 + scratch2 + scratch3 + scratch4 + sensitivity + serverconfig + sessionid + showblur + showbrand + showdate + showdate_format + showfps + shownetgraph + showpause + showram + showsound + showspeed + showtex + showtime + showtime_format + showtopspeed + showturtle + skill + skill_auto + skin + slowmo + snd_attenuation_decibel + snd_attenuation_exponent + snd_channel0volume + snd_channel1volume + snd_channel2volume + snd_channel3volume + snd_channel4volume + snd_channel5volume + snd_channel6volume + snd_channel7volume + snd_channel8volume + snd_channel9volume + snd_channellayout + snd_channels + snd_csqcchannel0volume + snd_csqcchannel1volume + snd_csqcchannel2volume + snd_csqcchannel3volume + snd_csqcchannel4volume + snd_csqcchannel5volume + snd_csqcchannel6volume + snd_csqcchannel7volume + snd_entchannel0volume + snd_entchannel1volume + snd_entchannel2volume + snd_entchannel3volume + snd_entchannel4volume + snd_entchannel5volume + snd_entchannel6volume + snd_entchannel7volume + snd_identicalsoundrandomization_tics + snd_identicalsoundrandomization_time + snd_initialized + snd_maxchannelvolume + snd_mutewhenidle + snd_noextraupdate + snd_playerchannel0volume + snd_playerchannel1volume + snd_playerchannel2volume + snd_playerchannel3volume + snd_playerchannel4volume + snd_playerchannel5volume + snd_playerchannel6volume + snd_playerchannel7volume + snd_precache + snd_show + snd_softclip + snd_soundradius + snd_spatialization_control + snd_spatialization_max + snd_spatialization_max_radius + snd_spatialization_min + snd_spatialization_min_radius + snd_spatialization_occlusion + snd_spatialization_power + snd_spatialization_prologic + snd_spatialization_prologic_frontangle + snd_speed + snd_startloopingsounds + snd_startnonloopingsounds + snd_staticvolume + snd_streaming + snd_streaming_length + snd_swapstereo + snd_width + snd_worldchannel0volume + snd_worldchannel1volume + snd_worldchannel2volume + snd_worldchannel3volume + snd_worldchannel4volume + snd_worldchannel5volume + snd_worldchannel6volume + snd_worldchannel7volume + spawn_debug + spawn_debugview + speedmeter + sv_accelerate + sv_accuracy_data_send + sv_accuracy_data_share + sv_adminnick + sv_aim + sv_airaccel_qw + sv_airaccel_qw_stretchfactor + sv_airaccel_sideways_friction + sv_airaccelerate + sv_aircontrol + sv_aircontrol_penalty + sv_aircontrol_power + sv_airspeedlimit_nonqw + sv_airstopaccelerate + sv_airstrafeaccel_qw + sv_airstrafeaccelerate + sv_allow_fullbright + sv_allowdownloads + sv_allowdownloads_archive + sv_allowdownloads_config + sv_allowdownloads_dlcache + sv_allowdownloads_inarchive + sv_areadebug + sv_areagrid_mingridsize + sv_autodemo_perclient + sv_autodemo_perclient_discardable + sv_autodemo_perclient_nameformat + sv_autoscreenshot + sv_autotaunt + sv_cheats + sv_checkforpacketsduringsleep + sv_clientcommand_antispam_count + sv_clientcommand_antispam_time + sv_clmovement_enable + sv_clmovement_inputtimeout + sv_clmovement_minping + sv_clmovement_minping_disabletime + sv_clones + sv_cullentities_nevercullbmodels + sv_cullentities_pvs + sv_cullentities_stats + sv_cullentities_trace + sv_cullentities_trace_delay + sv_cullentities_trace_delay_players + sv_cullentities_trace_enlarge + sv_cullentities_trace_entityocclusion + sv_cullentities_trace_prediction + sv_cullentities_trace_prediction_time + sv_cullentities_trace_samples + sv_cullentities_trace_samples_extra + sv_cullentities_trace_samples_players + sv_curl_defaulturl + sv_curl_maxspeed + sv_curl_serverpackages + sv_curl_serverpackages_auto + sv_db_saveasdump + sv_debugmove + sv_defaultcharacter + sv_defaultplayercolors + sv_defaultplayermodel + sv_defaultplayermodel_blue + sv_defaultplayermodel_pink + sv_defaultplayermodel_red + sv_defaultplayermodel_yellow + sv_defaultplayerskin + sv_defaultplayerskin_blue + sv_defaultplayerskin_pink + sv_defaultplayerskin_red + sv_defaultplayerskin_yellow + sv_disablenotify + sv_dodging_delay + sv_dodging_height_threshold + sv_dodging_horiz_speed + sv_dodging_ramp_time + sv_dodging_sound + sv_dodging_up_speed + sv_dodging_wall_distance_threshold + sv_dodging_wall_dodging + sv_doublejump + sv_echobprint + sv_entpatch + sv_eventlog + sv_eventlog_console + sv_eventlog_files + sv_eventlog_files_counter + sv_eventlog_files_nameprefix + sv_eventlog_files_namesuffix + sv_eventlog_files_timestamps + sv_fixedframeratesingleplayer + sv_foginterval + sv_fraginfo + sv_fraginfo_handicap + sv_fraginfo_ping + sv_fraginfo_stats + sv_freezenonclients + sv_friction + sv_friction_on_land + sv_gameplayfix_blowupfallenzombies + sv_gameplayfix_consistentplayerprethink + sv_gameplayfix_delayprojectiles + sv_gameplayfix_downtracesupportsongroundflag + sv_gameplayfix_droptofloorstartsolid + sv_gameplayfix_droptofloorstartsolid_nudgetocorrect + sv_gameplayfix_easierwaterjump + sv_gameplayfix_findradiusdistancetobox + sv_gameplayfix_fixedcheckwatertransition + sv_gameplayfix_gravityunaffectedbyticrate + sv_gameplayfix_grenadebouncedownslopes + sv_gameplayfix_multiplethinksperframe + sv_gameplayfix_noairborncorpse + sv_gameplayfix_noairborncorpse_allowsuspendeditems + sv_gameplayfix_nogravityonground + sv_gameplayfix_nostepmoveonsteepslopes + sv_gameplayfix_nudgeoutofsolid + sv_gameplayfix_nudgeoutofsolid_separation + sv_gameplayfix_q1bsptracelinereportstexture + sv_gameplayfix_q2airaccelerate + sv_gameplayfix_setmodelrealbox + sv_gameplayfix_slidemoveprojectiles + sv_gameplayfix_stepdown + sv_gameplayfix_stepmultipletimes + sv_gameplayfix_swiminbmodels + sv_gameplayfix_unstickentities + sv_gameplayfix_unstickplayers + sv_gameplayfix_upwardvelocityclearsongroundflag + sv_gentle + sv_gibhealth + sv_gravity + sv_heartbeatperiod + sv_idealpitchscale + sv_intermission_cdtrack + sv_join_notices + sv_join_notices_time + sv_jumpspeedcap_max + sv_jumpspeedcap_max_disable_on_ramps + sv_jumpspeedcap_min + sv_jumpstep + sv_jumpvelocity + sv_logscores_bots + sv_logscores_console + sv_logscores_file + sv_logscores_filename + sv_mapchange_delay + sv_master1 + sv_master2 + sv_master3 + sv_master4 + sv_masterextra1 + sv_masterextra2 + sv_masterextra3 + sv_maxairspeed + sv_maxairstrafespeed + sv_maxidle + sv_maxidle_spectatorsareidle + sv_maxrate + sv_maxspeed + sv_maxvelocity + sv_motd + sv_namechangetimer + sv_nostep + sv_onlycsqcnetworking + sv_player_crouch_maxs + sv_player_crouch_mins + sv_player_crouch_viewoffset + sv_player_headsize + sv_player_maxs + sv_player_mins + sv_player_viewoffset + sv_playerphysicsqc + sv_precacheitems + sv_precacheplayermodels + sv_precacheweapons + sv_progs + sv_protocolname + sv_public + sv_public_rejectreason + sv_q3acompat_machineshotgunswap + sv_random_seed + sv_ratelimitlocalplayer + sv_ready_restart + sv_ready_restart_after_countdown + sv_ready_restart_repeatable + sv_servermodelsonly + sv_shownames_cull_distance + sv_simple_items + sv_sound_land + sv_sound_watersplash + sv_spectate + sv_spectator_speed_multiplier + sv_status_privacy + sv_status_show_qcstatus + sv_stepheight + sv_stopspeed + sv_strengthsound_antispam_refire_threshold + sv_strengthsound_antispam_time + sv_taunt + sv_teamnagger + sv_threaded + sv_timeout + sv_timeout_leadtime + sv_timeout_length + sv_timeout_number + sv_timeout_resumetime + sv_vote_call + sv_vote_change + sv_vote_command_restriction_allready + sv_vote_command_restriction_chmap + sv_vote_command_restriction_cointoss + sv_vote_command_restriction_endmatch + sv_vote_command_restriction_extendmatchtime + sv_vote_command_restriction_fraglimit + sv_vote_command_restriction_gotomap + sv_vote_command_restriction_kick + sv_vote_command_restriction_kickban + sv_vote_command_restriction_movetoauto + sv_vote_command_restriction_movetoblue + sv_vote_command_restriction_movetopink + sv_vote_command_restriction_movetored + sv_vote_command_restriction_movetoyellow + sv_vote_command_restriction_nextmap + sv_vote_command_restriction_reducematchtime + sv_vote_command_restriction_restart + sv_vote_commands + sv_vote_gamestart + sv_vote_limit + sv_vote_majority_factor + sv_vote_majority_factor_of_voted + sv_vote_master + sv_vote_master_callable + sv_vote_master_commands + sv_vote_master_password + sv_vote_master_playerlimit + sv_vote_no_stops_vote + sv_vote_nospectators + sv_vote_only_commands + sv_vote_override_mostrecent + sv_vote_singlecount + sv_vote_stop + sv_vote_timeout + sv_vote_wait + sv_wallfriction + sv_warsowbunny_accel + sv_warsowbunny_airforwardaccel + sv_warsowbunny_backtosideratio + sv_warsowbunny_topspeed + sv_warsowbunny_turnaccel + sv_wateraccelerate + sv_waterfriction + sv_waypointsprite_deadlifetime + sv_waypointsprite_deployed_lifetime + sv_waypointsprite_limitedrange + sv_weaponstats_file + sv_worldbasename + sv_worldmessage + sv_worldname + sv_worldnamenoextension + sv_writepicture_quality + sys_colortranslation + sys_debugsleep + sys_memsize_physical + sys_memsize_virtual + sys_specialcharactertranslation + sys_ticrate + sys_useclockgettime + sys_usenoclockbutbenchmark + team + teamplay + teamplay_lockonrestart + teamplay_mode + temp1 + the_goggles + timedemo_screenshotframelist + timeformat + timelimit + timelimit_decrement + timelimit_increment + timelimit_max + timelimit_min + timelimit_override + timelimit_overtime + timelimit_overtimes + timelimit_suddendeath + timestamps + userbind10_description + userbind10_press + userbind10_release + userbind11_description + userbind11_press + userbind11_release + userbind12_description + userbind12_press + userbind12_release + userbind13_description + userbind13_press + userbind13_release + userbind14_description + userbind14_press + userbind14_release + userbind15_description + userbind15_press + userbind15_release + userbind16_description + userbind16_press + userbind16_release + userbind17_description + userbind17_press + userbind17_release + userbind18_description + userbind18_press + userbind18_release + userbind19_description + userbind19_press + userbind19_release + userbind1_description + userbind1_press + userbind1_release + userbind20_description + userbind20_press + userbind20_release + userbind21_description + userbind21_press + userbind21_release + userbind22_description + userbind22_press + userbind22_release + userbind23_description + userbind23_press + userbind23_release + userbind24_description + userbind24_press + userbind24_release + userbind25_description + userbind25_press + userbind25_release + userbind26_description + userbind26_press + userbind26_release + userbind27_description + userbind27_press + userbind27_release + userbind28_description + userbind28_press + userbind28_release + userbind29_description + userbind29_press + userbind29_release + userbind2_description + userbind2_press + userbind2_release + userbind30_description + userbind30_press + userbind30_release + userbind31_description + userbind31_press + userbind31_release + userbind32_description + userbind32_press + userbind32_release + userbind3_description + userbind3_press + userbind3_release + userbind4_description + userbind4_press + userbind4_release + userbind5_description + userbind5_press + userbind5_release + userbind6_description + userbind6_press + userbind6_release + userbind7_description + userbind7_press + userbind7_release + userbind8_description + userbind8_press + userbind8_release + userbind9_description + userbind9_press + userbind9_release + utf8_enable + v_brightness + v_centermove + v_centerspeed + v_color_black_b + v_color_black_g + v_color_black_r + v_color_enable + v_color_grey_b + v_color_grey_g + v_color_grey_r + v_color_white_b + v_color_white_g + v_color_white_r + v_contrast + v_contrastboost + v_deathtilt + v_deathtiltangle + v_flipped + v_gamma + v_glslgamma + v_glslgamma_2d + v_glslgamma_video + v_hwgamma + v_idlescale + v_ipitch_cycle + v_ipitch_level + v_iroll_cycle + v_iroll_level + v_iyaw_cycle + v_iyaw_level + v_kickpitch + v_kickroll + v_kicktime + v_psycho + vid_bitsperpixel + vid_conheight + vid_conwidth + vid_fullscreen + vid_gl13 + vid_gl20 + vid_grabkeyboard + vid_hardwaregammasupported + vid_height + vid_minheight + vid_minwidth + vid_mouse + vid_netwmfullscreen + vid_pixelheight + vid_refreshrate + vid_resizable + vid_sRGB + vid_sRGB_fallback + vid_samples + vid_soft + vid_soft_interlace + vid_soft_threads + vid_stereobuffer + vid_stick_mouse + vid_touchscreen + vid_touchscreen_outlinealpha + vid_touchscreen_overlayalpha + vid_userefreshrate + vid_vsync + vid_width + vid_x11_display + viewsize + volume + waypoint_benchmark + welcome_message_time + _allow_unacceptable_compiler_bugs + _angles + _backup_con_chatvars_set + _campaign_index + _campaign_name + _campaign_testrun + _cl_color + _cl_name + _cl_playermodel + _cl_playerskin + _cl_pmodel + _cl_rate + _con_chat_maximized + _hud_configure + _hud_panelorder + _hud_showbinds_reload + _independent_players + _isalnum + _isalpha + _isascii + _isblank + _iscntrl + _isdigit + _isgraph + _islower + _isprint + _ispunct + _isspace + _isupper + _isxdigit + _menu_alpha + _menu_initialized + _menu_prvm_language + _menu_vid_height + _menu_vid_pixelheight + _menu_vid_width + _notarget + _origin + _snd_mixahead + _sv_init + _togglezoom + _urllib_nextslot + + + + +attack2 + +con_chat_maximize + +crouch + +fire + +fire2 + +hook + +hud_panel_radar_maximized + +show_info + +userbind + +zoom + -attack2 + -con_chat_maximize + -crouch + -fire + -fire2 + -hook + -hud_panel_radar_maximized + -show_info + -userbind + -zoom + addfav + addtolist + addvote + adminmsg + allready + allspec + anticheat + asay_ctf_flagcarrier + asay_ctf_haveflag + asay_drop + asay_killed + asay_noammo + asay_support + asay_willgo + autoswitch + ban + banlist + bans + bbox + blurtest + bot_cmd + bsp + checkfail + chmap + cl_hook_activeweapon + cl_hook_gameend + cl_hook_gamestart_all + cl_hook_gamestart_arena + cl_hook_gamestart_as + cl_hook_gamestart_ca + cl_hook_gamestart_ctf + cl_hook_gamestart_cts + cl_hook_gamestart_dm + cl_hook_gamestart_dom + cl_hook_gamestart_ft + cl_hook_gamestart_ka + cl_hook_gamestart_kh + cl_hook_gamestart_lms + cl_hook_gamestart_nb + cl_hook_gamestart_nop + cl_hook_gamestart_ons + cl_hook_gamestart_rc + cl_hook_gamestart_tdm + clearmap + clientversion + cointoss + create_scrshot_ent + cvar_changes + cvar_purechanges + database + debugmodel + defer_clear + defer_clear_all + delrec + devmap + dropweapon + dumpcommands + dumpdb + dumpnotifs + effectindexdump + endmatch + extendmatchtime + g_forced_team_matchsetup + g_hitplots_add + g_hitplots_remove + g_maplist_add + g_maplist_cleanup + g_maplist_putfirst + g_maplist_remove + g_maplist_shufflenow + g_tourney + g_tourney_0 + g_tourney_1 + g_turrets_reload + g_waypointeditor_relinkall + g_waypointeditor_remove + g_waypointeditor_saveall + g_waypointeditor_spawn + g_waypointeditor_unreachable + g_waypointsprite_clear + g_waypointsprite_clear_personal + g_waypointsprite_personal + g_waypointsprite_personal_d + g_waypointsprite_personal_p + g_waypointsprite_team_danger + g_waypointsprite_team_danger_d + g_waypointsprite_team_danger_p + g_waypointsprite_team_helpme + g_waypointsprite_team_here + g_waypointsprite_team_here_d + g_waypointsprite_team_here_p + g_waypointsprite_toggle + gametype + gettaginfo + gl_flashblend_update + gotomap + help + hud + hud_configure + hud_panel_radar_maximized + hud_panel_radar_rotate + hud_save + if_client + if_dedicated + info + ladder + loadconfig + loaddb + localprint + lockteams + lsmaps + lsnewmaps + make_mapinfo + maplist + menu_loadmap_prepare + menu_showhudexit + menu_showhudoptions + menu_showquitdialog + menu_showsandboxtools + menu_showteamselect + menu_sync + moveplayer + movetoauto + movetoblue + movetopink + movetored + movetoyellow + mute + nextframe + nospectators + playerdemo + ply + printmaplist + printstats + qc_cmd_cl + qc_cmd_cmd + qc_cmd_sv + qc_cmd_svcl + qc_cmd_svcmd + qc_cmd_svmenu + qc_curl + radar + radarmap + rankings + ready + rec + records + reducematchtime + reload + removefromlist + reportcvar + restartnotifs + rpn + sandbox + savedb + scoreboard_columns_help + scoreboard_columns_set + search + selectteam + selfstuff + sendcvar + sentcvar + setbots + sethostname + setreport + settemp + settemp_restore + shuffleteams + singleplayer_continue + singleplayer_levellist + singleplayer_start + snd_attenuation_method_0 + snd_attenuation_method_1 + snd_attenuation_method_2 + spec + spectate + startmap_dm + startmap_sp + stuffto + suggestmap + sv_fbskin_green + sv_fbskin_off + sv_fbskin_orange + sv_fbskin_rainbow + sv_fbskin_red + sv_fbskin_unique + sv_hook_gameend + sv_hook_gamerestart + sv_hook_gamestart_all + sv_hook_gamestart_arena + sv_hook_gamestart_as + sv_hook_gamestart_ca + sv_hook_gamestart_ctf + sv_hook_gamestart_cts + sv_hook_gamestart_dm + sv_hook_gamestart_dom + sv_hook_gamestart_ft + sv_hook_gamestart_ka + sv_hook_gamestart_kh + sv_hook_gamestart_lms + sv_hook_gamestart_nb + sv_hook_gamestart_ons + sv_hook_gamestart_rc + sv_hook_gamestart_tdm + sv_loadconfig + sv_restart + tdem + team_auto + team_blue + team_pink + team_red + team_yellow + teamstatus + time + timein + timeout + togglezoom + trace + unban + unlockteams + unmute + use + vabstain + vcall + vdo + vdoend + vdokick + vdokickban + vdomap + vdontcare + vend + vhelp + vkick + vkickban + vlogin + vmap + vmaster + vnextmap + vno + voice + vote + vstatus + vstop + vyes + warp + weapbest + weaplast + weapnext + weapon_crylink + weapon_electro + weapon_fireball + weapon_grenadelauncher + weapon_group_0 + weapon_group_1 + weapon_group_2 + weapon_group_3 + weapon_group_4 + weapon_group_5 + weapon_group_6 + weapon_group_7 + weapon_group_8 + weapon_group_9 + weapon_hagar + weapon_hlac + weapon_hook + weapon_laser + weapon_minelayer + weapon_minstanex + weapon_nex + weapon_porto + weapon_rifle + weapon_rocketlauncher + weapon_seeker + weapon_shotgun + weapon_tuba + weapon_uzi + weapprev + who + _backup_con_chatvars + _backup_con_chatvars_0 + _backup_con_chatvars_1 + _cl_hook_gamestart + _cl_hook_gamestart_stage2 + _detect_dedicated_$qport + _detect_dedicated_0 + _gl_flashblend_update_00 + _gl_flashblend_update_01 + _gl_flashblend_update_10 + _gl_flashblend_update_11 + _gunalign_01 + _gunalign_02 + _gunalign_03 + _gunalign_04 + _gunalign_11 + _gunalign_12 + _gunalign_13 + _gunalign_14 + _gunalign_update + _if_dedicated + _menu_loadmap_prepare_maxpl + _restore_con_chatvars + _restore_con_chatvars_0 + _restore_con_chatvars_1 + _sv_hook_gamestart + _sv_hook_gamestart_stage2 + _update_configversion_0 + _update_configversion_1 + _update_configversion_2 + _update_configversion_3 + _update_configversion_4 + _update_configversion_5 + _update_configversion_6 + _update_configversion_7 + _userbind_call + _weapnext_0 + _weapnext_1 + _weapnext_2 + _weapprev_0 + _weapprev_1 + _weapprev_2 + + + + +attack + +back + +button10 + +button11 + +button12 + +button13 + +button14 + +button15 + +button16 + +button3 + +button4 + +button5 + +button6 + +button7 + +button8 + +button9 + +forward + +jump + +klook + +left + +lookdown + +lookup + +mlook + +movedown + +moveleft + +moveright + +moveup + +right + +showscores + +speed + +strafe + +use + -attack + -back + -button10 + -button11 + -button12 + -button13 + -button14 + -button15 + -button16 + -button3 + -button4 + -button5 + -button6 + -button7 + -button8 + -button9 + -forward + -jump + -klook + -left + -lookdown + -lookup + -mlook + -movedown + -moveleft + -moveright + -moveup + -right + -showscores + -speed + -strafe + -use + + + + * + [ + ] + \ + / + ' + = + - + + + , + . + ` + ~ + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 0 + a + b + c + d + e + f + g + h + i + j + k + l + m + n + o + p + q + r + s + t + u + v + x + w + y + z + ALT + AUX1 + AUX10 + AUX11 + AUX12 + AUX13 + AUX14 + AUX15 + AUX16 + AUX17 + AUX18 + AUX2 + AUX20 + AUX21 + AUX22 + AUX23 + AUX24 + AUX25 + AUX26 + AUX27 + AUX28 + AUX29 + AUX3 + AUX30 + AUX31 + AUX32 + AUX4 + AUX5 + AUX6 + AUX7 + AUX8 + AUX9 + BACKSPACE + CTRL + DEL + DOWNARROW + END + ENTER + ESCAPE + F1 + F10 + F11 + F12 + F2 + F3 + F4 + F5 + F6 + F7 + F8 + F9 + HOME + INS + JOY1 + JOY2 + JOY3 + JOY4 + KP_SLASH + KP_5 + KP_UPARROW + KP_LEFTARROW + KP_RIGHTARROW + KP_DOWNARROW + KP_HOME + KP_END + KP_PGUP + KP_PGDN + KP_INS + KP_DEL + LEFTARROW + MOUSE1 + MOUSE2 + MOUSE3 + MWHEELDOWN + MWHEELUP + PAUSE + PGDN + PGUP + RIGHTARROW + SEMICOLON + CAPSLOCK + SHIFT + SPACE + TAB + UPARROW + + + + ; + $ + + + + bind + unbind + + + + set + seta + setu + sets + + + + echo + say_team + say + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/xorg.xml b/src/data/extra/syntax-highlighting/syntax/xorg.xml new file mode 100644 index 00000000..8ea88556 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/xorg.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/xslt.xml b/src/data/extra/syntax-highlighting/syntax/xslt.xml new file mode 100644 index 00000000..37b85778 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/xslt.xml @@ -0,0 +1,440 @@ + + + + +]> + + + + + + + xsl:value-of + xsl:output + xsl:decimal-format + xsl:apply-templates + xsl:param + xsl:transform + xsl:namespace-alias + xsl:comment + xsl:element + xsl:attribute + xsl:apply-imports + xsl:text + xsl:when + xsl:template + xsl:processing-instruction + xsl:include + xsl:copy-of + xsl:copy + xsl:with-param + xsl:stylesheet + xsl:for-each + xsl:choose + xsl:sort + xsl:otherwise + xsl:key + xsl:variable + xsl:number + xsl:message + xsl:fallback + xsl:strip-space + xsl:import + xsl:preserve-space + xsl:if + xsl:call-template + xsl:attribute-set + + + + xsl:perform-sort + xsl:import-schema + xsl:for-each-group + xsl:sequence + xsl:non-matching-substring + xsl:namespace + xsl:next-match + xsl:function + xsl:analyze-string + xsl:output-character + xsl:matching-substring + xsl:result-document + xsl:character-map + xsl:document + + + + format-number + position + lang + substring-before + substring + normalize-space + round + translate + starts-with + concat + local-name + key + count + document + system-property + current + boolean + number + contains + name + last + unparsed-entity-uri + sum + generate-id + function-available + element-available + false + substring-after + not + string-length + id + floor + ceiling + namespace-uri + true + string + text + + + + zero-or-one + replace + namespace-uri-for-prefix + current-grouping-key + seconds-from-duration + resolve-uri + node-kind + minutes-from-dateTime + implicit-timezone + exactly-one + current-time + current-dateTime + unordered + subtract-dates-yielding-dayTimeDuration + string-join + static-base-uri + months-from-duration + input + exists + default-collation + dateTime + current-group + current-date + collection + timezone-from-time + matches + local-name-from-QName + day-from-date + timezone-from-date + round-half-to-even + month-from-dateTime + month-from-date + hours-from-duration + escape-uri + distinct-values + avg + years-from-duration + unparsed-text + unparsed-entity-public-id + subtract-dateTimes-yielding-dayTimeDuration + subtract-dates-yielding-yearMonthDuration + string-to-codepoints + sequence-node-identical + hours-from-time + hours-from-dateTime + format-time + codepoints-to-string + trace + tokenize + subtract-dateTimes-yielding-yearMonthDuration + subsequence + seconds-from-dateTime + regex-group + one-or-more + node-name + namespace-uri-from-QName + min + idref + format-dateTime + format-date + days-from-duration + compare + base-uri + seconds-from-time + in-scope-prefixes + expanded-QName + adjust-date-to-timezone + year-from-date + resolve-QName + remove + QName + minutes-from-time + max + lower-case + index-of + doc + deep-equal + data + minutes-from-duration + adjust-dateTime-to-timezone + abs + timezone-from-dateTime + reverse + error + ends-with + day-from-dateTime + year-from-dateTime + upper-case + root + normalize-unicode + empty + insert-before + document-uri + adjust-time-to-timezone + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/xul.xml b/src/data/extra/syntax-highlighting/syntax/xul.xml new file mode 100644 index 00000000..8dc6b65a --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/xul.xml @@ -0,0 +1,624 @@ + + + +]> + + + + + if + else + for + in + while + do + continue + break + with + try + catch + finally + switch + case + new + var + function + return + delete + true + false + void + throw + typeof + const + default + + + escape + isFinite + isNaN + Number + parseFloat + parseInt + reload + taint + unescape + untaint + write + + + Anchor + Applet + Area + Array + Boolean + Button + Checkbox + Date + document + window + Image + FileUpload + Form + Frame + Function + Hidden + Link + MimeType + Math + Max + Min + Layer + navigator + Object + Password + Plugin + Radio + RegExp + Reset + Screen + Select + String + Text + Textarea + this + Window + + + abs + acos + asin + atan + atan2 + ceil + cos + ctg + E + exp + floor + LN2 + LN10 + log + LOG2E + LOG10E + PI + pow + round + sin + sqrt + SQRT1_2 + SQRT2 + tan + + + onAbort + onBlur + onChange + onClick + onError + onFocus + onLoad + onMouseOut + onMouseOver + onReset + onSelect + onSubmit + onUnload + + + above + action + alinkColor + alert + anchor + anchors + appCodeName + applets + apply + appName + appVersion + argument + arguments + arity + availHeight + availWidth + back + background + below + bgColor + border + big + blink + blur + bold + border + call + caller + charAt + charCodeAt + checked + clearInterval + clearTimeout + click + clip + close + closed + colorDepth + complete + compile + constructor + confirm + cookie + current + cursor + data + defaultChecked + defaultSelected + defaultStatus + defaultValue + description + disableExternalCapture + domain + elements + embeds + enabledPlugin + enableExternalCapture + encoding + eval + exec + fgColor + filename + find + fixed + focus + fontcolor + fontsize + form + forms + formName + forward + frames + fromCharCode + getDate + getDay + getHours + getMiliseconds + getMinutes + getMonth + getSeconds + getSelection + getTime + getTimezoneOffset + getUTCDate + getUTCDay + getUTCFullYear + getUTCHours + getUTCMilliseconds + getUTCMinutes + getUTCMonth + getUTCSeconds + getYear + global + go + hash + height + history + home + host + hostname + href + hspace + ignoreCase + images + index + indexOf + innerHeight + innerWidth + input + italics + javaEnabled + join + language + lastIndex + lastIndexOf + lastModified + lastParen + layers + layerX + layerY + left + leftContext + length + link + linkColor + links + location + locationbar + load + lowsrc + match + MAX_VALUE + menubar + method + mimeTypes + MIN_VALUE + modifiers + moveAbove + moveBelow + moveBy + moveTo + moveToAbsolute + multiline + name + NaN + NEGATIVE_INFINITY + negative_infinity + next + open + opener + options + outerHeight + outerWidth + pageX + pageY + pageXoffset + pageYoffset + parent + parse + pathname + personalbar + pixelDepth + platform + plugins + pop + port + POSITIVE_INFINITY + positive_infinity + preference + previous + print + prompt + protocol + prototype + push + referrer + refresh + releaseEvents + reload + replace + reset + resizeBy + resizeTo + reverse + rightContext + screenX + screenY + scroll + scrollbar + scrollBy + scrollTo + search + select + selected + selectedIndex + self + setDate + setHours + setMinutes + setMonth + setSeconds + setTime + setTimeout + setUTCDate + setUTCDay + setUTCFullYear + setUTCHours + setUTCMilliseconds + setUTCMinutes + setUTCMonth + setUTCSeconds + setYear + shift + siblingAbove + siblingBelow + small + sort + source + splice + split + src + status + statusbar + strike + sub + submit + substr + substring + suffixes + sup + taintEnabled + target + test + text + title + toGMTString + toLocaleString + toLowerCase + toolbar + toSource + toString + top + toUpperCase + toUTCString + type + URL + unshift + unwatch + userAgent + UTC + value + valueOf + visibility + vlinkColor + vspace + width + watch + which + width + write + writeln + x + y + zIndex + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/yacas.xml b/src/data/extra/syntax-highlighting/syntax/yacas.xml new file mode 100644 index 00000000..12dd0787 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/yacas.xml @@ -0,0 +1,236 @@ + + + + + + And + ApplyPure + ArrayCreate + ArrayGet + ArraySet + ArraySize + Atom + Berlekamp + BitAnd + BitOr + BitXor + Bodied + CTokenizer + Check + Clear + CommonLispTokenizer + Concat + ConcatStrings + CurrentFile + CurrentLine + CustomEval + CustomEval'Expression + CustomEval'Locals + CustomEval'Result + CustomEval'Stop + DefLoad + DefLoadFunction + DefMacroRuleBase + DefMacroRuleBaseListed + DefaultDirectory + DefaultTokenizer + Delete + DestructiveDelete + DestructiveInsert + DestructiveReplace + DestructiveReverse + DllEnumerate + DllLoad + DllUnload + Equals + Eval + FastArcCos + FastArcSin + FastArcTan + FastAssoc + FastCos + FastExp + FastIsPrime + FastLog + FastPower + FastSin + FastTan + FindFile + FindFunction + FlatCopy + FromBase + FromFile + FromString + FullForm + GarbageCollect + GenericTypeName + GetExtraInfo + GetPrecision + GreaterThan + Head + Hold + HoldArg + If + Infix + Insert + IsAtom + IsBodied + IsBound + IsFunction + IsGeneric + IsInfix + IsInteger + IsList + IsNumber + IsPostfix + IsPrefix + IsString + LazyGlobal + LeftPrecedence + Length + LessThan + LispRead + LispReadListed + List + Listify + Load + Local + LocalSymbols + MacroClear + MacroLocal + MacroRule + MacroRuleBase + MacroRuleBaseListed + MacroRulePattern + MacroSet + MathAbs + MathAdd + MathAnd + MathArcCos + MathArcSin + MathArcTan + MathCeil + MathCos + MathDiv + MathDivide + MathExp + MathFac + MathFloor + MathGcd + MathGetExactBits + MathLibrary + MathLog + MathMod + MathMultiply + MathNot + MathNth + MathOr + MathPi + MathPower + MathSetExactBits + MathSin + MathSqrt + MathSubtract + MathTan + MaxEvalDepth + Not + OpLeftPrecedence + OpPrecedence + OpRightPrecedence + Or + PatchLoad + PatchString + PatternCreate + PatternMatches + Postfix + Precision + Prefix + PrettyPrinter + Prog + Read + ReadToken + Replace + Retract + RightAssociative + RightPrecedence + Rule + RuleBase + RuleBaseArgList + RuleBaseDefined + RuleBaseListed + RulePattern + Secure + Set + SetExtraInfo + SetStringMid + ShiftLeft + ShiftRight + String + StringMid + Subst + SystemCall + Tail + ToBase + ToFile + ToString + TraceRule + TraceStack + Type + UnFence + UnList + Use + Version + While + Write + WriteString + XmlExplodeTag + XmlTokenizer + ` + = + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/yacc.xml b/src/data/extra/syntax-highlighting/syntax/yacc.xml new file mode 100644 index 00000000..06d6492f --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/yacc.xml @@ -0,0 +1,267 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/yaml.xml b/src/data/extra/syntax-highlighting/syntax/yaml.xml new file mode 100644 index 00000000..2c8b2d98 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/yaml.xml @@ -0,0 +1,635 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/yang.xml b/src/data/extra/syntax-highlighting/syntax/yang.xml new file mode 100644 index 00000000..051be6a6 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/yang.xml @@ -0,0 +1,155 @@ + + + + + + decimal64 + int8 + int16 + int32 + int64 + uint8 + uint16 + uint32 + uint64 + string + boolean + enumeration + bits + binary + leafref + identityref + empty + instance-identifier + + + anyxml + argument + augment + base + belongs-to + bit + case + choice + config + contact + container + default + description + enum + error-app-tag + error-message + extension + deviation + deviate + feature + fraction-digits + grouping + identity + import + include + input + key + leaf + leaf-list + length + list + mandatory + max-elements + min-elements + module + must + namespace + notification + ordered-by + organization + output + path + pattern + position + prefix + presence + range + reference + refine + require-instance + revision + revision-date + rpc + status + submodule + type + typedef + unique + units + uses + value + when + yang-version + yin-element + + + add + current + delete + deprecated + max + min + not-supported + obsolete + replace + system + unbounded + user + + + true + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/zonnon.xml b/src/data/extra/syntax-highlighting/syntax/zonnon.xml new file mode 100644 index 00000000..ebe51e11 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/zonnon.xml @@ -0,0 +1,144 @@ + + + + + + accept + activity + array + as + await + begin + by + case + const + definition + div + do + else + elsif + end + exception + exit + for + if + implementation + implements + import + in + is + loop + mod + module + new + nil + object + of + on + operator + or + procedure + protocol + record + refines + repeat + return + self + termination + then + to + type + until + var + while + + + barrier + immutable + locked + private + protected + public + ref + sealed + shared + value + + + abs + assert + cap + copy + copyvalue + dec + excl + false + halt + inc + len + low + max + min + odd + pred + read + readln + reason + size + succ + true + write + writeln + + + boolean + cardinal + char + fixed + integer + real + set + string + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/syntax/zsh.xml b/src/data/extra/syntax-highlighting/syntax/zsh.xml new file mode 100644 index 00000000..be401444 --- /dev/null +++ b/src/data/extra/syntax-highlighting/syntax/zsh.xml @@ -0,0 +1,959 @@ + + + + + + + +]> + + + + + + + + else + for + function + in + select + until + while + elif + then + set + + + + - + . + : + alias + autoload + bg + bindkey + break + builtin + bye + cap + cd + chdir + clone + command + comparguments + compcall + compctl + compdescribe + compfiles + compgroups + compquote + comptags + comptry + compvalues + continue + dirs + disable + disown + echo + echotc + echoti + emulate + enable + eval + exec + exit + false + fc + fg + functions + getcap + getopts + hash + history + jobs + kill + let + limit + log + logout + noglob + popd + print + printf + pushd + pushln + pwd + r + rehash + return + sched + set + setcap + setopt + shift + source + stat + suspend + test + times + trap + true + ttyctl + type + ulimit + umask + unalias + unfunction + unhash + unlimit + unset + unsetopt + vared + wait + whence + where + which + zcompile + zformat + zftp + zle + zmodload + zparseopts + zprof + zpty + zregexparse + zsocket + zstyle + ztcp + + + + declare + export + float + getln + integer + unset + declare + typeset + local + read + readonly + + + + + arch + awk + bash + bunzip2 + bzcat + bzcmp + bzdiff + bzegrep + bzfgrep + bzgrep + bzip2 + bzip2recover + bzless + bzmore + cat + chattr + chgrp + chmod + chown + chvt + cp + date + dd + deallocvt + df + dir + dircolors + dmesg + dnsdomainname + domainname + du + dumpkeys + echo + ed + egrep + false + fgconsole + fgrep + fuser + gawk + getkeycodes + gocr + grep + groff + groups + gunzip + gzexe + gzip + hostname + igawk + install + kbd_mode + kbdrate + killall + last + lastb + link + ln + loadkeys + loadunimap + login + ls + lsattr + lsmod + lsmod.old + lzcat + lzcmp + lzdiff + lzegrep + lzfgrep + lzgrep + lzless + lzcat + lzma + lzmainfo + lzmore + mapscrn + mesg + mkdir + mkfifo + mknod + mktemp + more + mount + mv + nano + netstat + nisdomainname + nroff + openvt + pgawk + pidof + ping + ps + pstree + pwd + rbash + readlink + red + resizecons + rm + rmdir + run-parts + sash + sed + setfont + setkeycodes + setleds + setmetamode + setserial + sh + showkey + shred + sleep + ssed + stat + stty + su + sync + tar + tempfile + touch + troff + true + umount + uname + unicode_start + unicode_stop + unlink + unlzma + unxz + utmpdump + uuidgen + vdir + wall + wc + xz + xzcat + ypdomainname + zcat + zcmp + zdiff + zegrep + zfgrep + zforce + zgrep + zless + zmore + znew + zsh + + + aclocal + aconnect + aplay + apm + apmsleep + apropos + ar + arecord + as + as86 + autoconf + autoheader + automake + awk + basename + bc + bison + c++ + cal + cat + cc + cdda2wav + cdparanoia + cdrdao + cd-read + cdrecord + chfn + chgrp + chmod + chown + chroot + chsh + clear + cmp + co + col + comm + cp + cpio + cpp + cut + dc + dd + df + diff + diff3 + dir + dircolors + directomatic + dirname + du + env + expr + fbset + file + find + flex + flex++ + fmt + free + ftp + funzip + fuser + g++ + gawk + gc + gcc + gdb + getent + getopt + gettext + gettextize + gimp + gimp-remote + gimptool + gmake + gs + head + hexdump + id + install + join + kill + killall + ld + ld86 + ldd + less + lex + ln + locate + lockfile + logname + lp + lpr + ls + lynx + m4 + make + man + mkdir + mknod + msgfmt + mv + namei + nasm + nawk + nice + nl + nm + nm86 + nmap + nohup + nop + od + passwd + patch + pcregrep + pcretest + perl + perror + pidof + pr + printf + procmail + prune + ps2ascii + ps2epsi + ps2frag + ps2pdf + ps2ps + psbook + psmerge + psnup + psresize + psselect + pstops + rcs + rev + rm + scp + sed + seq + setterm + shred + size + size86 + skill + slogin + snice + sort + sox + split + ssh + ssh-add + ssh-agent + ssh-keygen + ssh-keyscan + stat + strings + strip + sudo + suidperl + sum + tac + tail + tee + test + tr + uniq + unlink + unzip + updatedb + updmap + uptime + users + vmstat + w + wc + wget + whatis + whereis + which + who + whoami + write + xargs + yacc + yes + zip + zsoelim + + + dcop + kdialog + kfile + xhost + xmodmap + xset + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/extra/syntax-highlighting/themes/breeze-dark.theme b/src/data/extra/syntax-highlighting/themes/breeze-dark.theme new file mode 100644 index 00000000..8147948e --- /dev/null +++ b/src/data/extra/syntax-highlighting/themes/breeze-dark.theme @@ -0,0 +1,174 @@ +{ + "metadata" : { + "revision" : 2, + "name" : "Breeze Dark" + }, + "text-styles": { + "Normal" : { + "text-color" : "#cfcfc2", + "selected-text-color" : "#cfcfc2", + "bold" : false, + "italic" : false, + "underline" : false, + "strike-through" : false + }, + "Keyword" : { + "text-color" : "#cfcfc2", + "selected-text-color" : "#cfcfc2", + "bold" : true + }, + "Function" : { + "text-color" : "#8e44ad", + "selected-text-color" : "#af81ff" + }, + "Variable" : { + "text-color" : "#27aeae", + "selected-text-color" : "#27aeae" + }, + "ControlFlow" : { + "text-color" : "#fdbc4b", + "selected-text-color" : "#fdbc4b", + "bold" : true + }, + "Operator" : { + "text-color" : "#cfcfc2", + "selected-text-color" : "#cfcfc2" + }, + "BuiltIn" : { + "text-color" : "#7f8c8d", + "selected-text-color" : "#bdc3c7" + }, + "Extension" : { + "text-color" : "#0099ff", + "selected-text-color" : "#bdc3c7", + "bold" : true + }, + "Preprocessor" : { + "text-color" : "#27ae60", + "selected-text-color" : "#27ae60" + }, + "Attribute" : { + "text-color" : "#2980b9", + "selected-text-color" : "#fdbc4b" + }, + "Char" : { + "text-color" : "#3daee9", + "selected-text-color" : "#3daee9" + }, + "SpecialChar" : { + "text-color" : "#3daee9", + "selected-text-color" : "#3daee9" + }, + "String" : { + "text-color" : "#f44f4f", + "selected-text-color" : "#f44f4f" + }, + "VerbatimString" : { + "text-color" : "#da4453", + "selected-text-color" : "#da4453" + }, + "SpecialString" : { + "text-color" : "#da4453", + "selected-text-color" : "#da4453" + }, + "Import" : { + "text-color" : "#27ae60", + "selected-text-color" : "#27ae60" + }, + "DataType" : { + "text-color" : "#2980b9", + "selected-text-color" : "#fdbc4b" + }, + "DecVal" : { + "text-color" : "#f67400", + "selected-text-color" : "#f67400" + }, + "BaseN" : { + "text-color" : "#f67400", + "selected-text-color" : "#f67400" + }, + "Float" : { + "text-color" : "#f67400", + "selected-text-color" : "#f67400" + }, + "Constant" : { + "text-color" : "#27aeae", + "selected-text-color" : "#27aeae", + "bold" : true + }, + "Comment" : { + "text-color" : "#7a7c7d", + "selected-text-color" : "#808080" + }, + "Documentation" : { + "text-color" : "#a43340", + "selected-text-color" : "#da4453" + }, + "Annotation" : { + "text-color" : "#3f8058", + "selected-text-color" : "#54aa75" + }, + "CommentVar" : { + "text-color" : "#7f8c8d", + "selected-text-color" : "#94a3a4" + }, + "RegionMarker" : { + "text-color" : "#2980b9", + "selected-text-color" : "#3daee9", + "background-color" : "#153042" + }, + "Information" : { + "text-color" : "#c45b00", + "selected-text-color" : "#e46700" + }, + "Warning" : { + "text-color" : "#da4453", + "selected-text-color" : "#da4453" + }, + "Alert" : { + "text-color" : "#95da4c", + "selected-text-color" : "#95da4c", + "background-color" : "#4d1f24", + "bold" : true + }, + "Error" : { + "text-color" : "#da4453", + "selected-text-color" : "#da4453", + "underline" : true + }, + "Others" : { + "text-color" : "#27ae60", + "selected-text-color" : "#27ae60" + } + }, + "editor-colors": { + "background-color" : "#232629", + "code-folding" : "#224e65", + "bracket-matching" : "#8e44ad", + "current-line" : "#2A2E32", + "icon-border" : "#31363b", + "indentation-line" : "#3a3f44", + "line-numbers" : "#7a7c7d", + "current-line-number" : "#a5a6a8", + "mark-bookmark" : "#0404bf", + "mark-breakpoint-active" : "#8b0607", + "mark-breakpoint-reached" : "#6d6e07", + "mark-breakpoint-disabled" : "#820683", + "mark-execution" : "#4d4e50", + "mark-warning" : "#f67400", + "mark-error" : "#da4453", + "modified-lines" : "#c04900", + "replace-highlight" : "#808021", + "saved-lines" : "#1c8042", + "search-highlight" : "#218058", + "selection" : "#2d5c76", + "separator" : "#7a7c7d", + "spell-checking" : "#c0392b", + "tab-marker" : "#4d4d4d", + "template-background" : "#31363b", + "template-placeholder" : "#123723", + "template-focused-placeholder" : "#123723", + "template-read-only-placeholder" : "#4d1f24", + "word-wrap-marker" : "#3a3f44" + } +} diff --git a/src/data/extra/syntax-highlighting/themes/default.theme b/src/data/extra/syntax-highlighting/themes/default.theme new file mode 100644 index 00000000..e9c5c838 --- /dev/null +++ b/src/data/extra/syntax-highlighting/themes/default.theme @@ -0,0 +1,174 @@ +{ + "metadata" : { + "revision" : 3, + "name" : "Default" + }, + "text-styles": { + "Normal" : { + "text-color" : "#1f1c1b", + "selected-text-color" : "#ffffff", + "bold" : false, + "italic" : false, + "underline" : false, + "strike-through" : false + }, + "Keyword" : { + "text-color" : "#1f1c1b", + "selected-text-color" : "#ffffff", + "bold" : true + }, + "Function" : { + "text-color" : "#644a9b", + "selected-text-color" : "#452886" + }, + "Variable" : { + "text-color" : "#0057ae", + "selected-text-color" : "#00316e" + }, + "ControlFlow" : { + "text-color" : "#1f1c1b", + "selected-text-color" : "#ffffff", + "bold" : true + }, + "Operator" : { + "text-color" : "#1f1c1b", + "selected-text-color" : "#ffffff" + }, + "BuiltIn" : { + "text-color" : "#644a9b", + "selected-text-color" : "#452886", + "bold" : true + }, + "Extension" : { + "text-color" : "#0095ff", + "selected-text-color" : "#ffffff", + "bold" : true + }, + "Preprocessor" : { + "text-color" : "#006e28", + "selected-text-color" : "#006e28" + }, + "Attribute" : { + "text-color" : "#0057ae", + "selected-text-color" : "#00316e" + }, + "Char" : { + "text-color" : "#924c9d", + "selected-text-color" : "#6c2477" + }, + "SpecialChar" : { + "text-color" : "#3daee9", + "selected-text-color" : "#fcfcfc" + }, + "String" : { + "text-color" : "#bf0303", + "selected-text-color" : "#9c0e0e" + }, + "VerbatimString" : { + "text-color" : "#bf0303", + "selected-text-color" : "#9c0e0e" + }, + "SpecialString" : { + "text-color" : "#ff5500", + "selected-text-color" : "#ff5500" + }, + "Import" : { + "text-color" : "#ff5500", + "selected-text-color" : "#ff5500" + }, + "DataType" : { + "text-color" : "#0057ae", + "selected-text-color" : "#00316e" + }, + "DecVal" : { + "text-color" : "#b08000", + "selected-text-color" : "#805c00" + }, + "BaseN" : { + "text-color" : "#b08000", + "selected-text-color" : "#805c00" + }, + "Float" : { + "text-color" : "#b08000", + "selected-text-color" : "#805c00" + }, + "Constant" : { + "text-color" : "#aa5500", + "selected-text-color" : "#5e2f00" + }, + "Comment" : { + "text-color" : "#898887", + "selected-text-color" : "#5e5d5d" + }, + "Documentation" : { + "text-color" : "#607880", + "selected-text-color" : "#46585e" + }, + "Annotation" : { + "text-color" : "#ca60ca", + "selected-text-color" : "#a44ea4" + }, + "CommentVar" : { + "text-color" : "#0095ff", + "selected-text-color" : "#ffffff" + }, + "RegionMarker" : { + "text-color" : "#0057ae", + "selected-text-color" : "#00316e", + "background-color" : "#e0e9f8" + }, + "Information" : { + "text-color" : "#b08000", + "selected-text-color" : "#805c00" + }, + "Warning" : { + "text-color" : "#bf0303", + "selected-text-color" : "#9c0e0e" + }, + "Alert" : { + "text-color" : "#bf0303", + "selected-text-color" : "#9c0e0e", + "background-color" : "#f7e6e6", + "bold" : true + }, + "Error" : { + "text-color" : "#bf0303", + "selected-text-color" : "#9c0e0e", + "underline" : true + }, + "Others" : { + "text-color" : "#006e28", + "selected-text-color" : "#006e28" + } + }, + "editor-colors": { + "background-color" : "#ffffff", + "code-folding" : "#94caef", + "bracket-matching" : "#ffff00", + "current-line" : "#f8f7f6", + "icon-border" : "#f0f0f0", + "indentation-line" : "#d2d2d2", + "line-numbers" : "#a0a0a0", + "current-line-number" : "#1e1e1e", + "mark-bookmark" : "#0000ff", + "mark-breakpoint-active" : "#ff0000", + "mark-breakpoint-reached" : "#ffff00", + "mark-breakpoint-disabled" : "#ff00ff", + "mark-execution" : "#a0a0a4", + "mark-warning" : "#00ff00", + "mark-error" : "#ff0000", + "modified-lines" : "#fdbc4b", + "replace-highlight" : "#00ff00", + "saved-lines" : "#2ecc71", + "search-highlight" : "#ffff00", + "selection" : "#94caef", + "separator" : "#898887", + "spell-checking" : "#bf0303", + "tab-marker" : "#d2d2d2", + "template-background" : "#d6d2d0", + "template-placeholder" : "#baf8ce", + "template-focused-placeholder" : "#76da98", + "template-read-only-placeholder" : "#f6e6e6", + "word-wrap-marker" : "#ededed" + } +} diff --git a/src/data/extra/syntax-highlighting/themes/markdown-default.theme b/src/data/extra/syntax-highlighting/themes/markdown-default.theme new file mode 100644 index 00000000..245724d2 --- /dev/null +++ b/src/data/extra/syntax-highlighting/themes/markdown-default.theme @@ -0,0 +1,174 @@ +{ + "metadata" : { + "revision" : 1, + "name" : "Markdown Default" + }, + "text-styles": { + "Normal" : { + "text-color" : "#673ab7", + "selected-text-color" : "#ffffff", + "bold" : false, + "italic" : false, + "underline" : false, + "strike-through" : false + }, + "Keyword" : { + "text-color" : "#1f1c1b", + "selected-text-color" : "#ffffff", + "bold" : true + }, + "Function" : { + "text-color" : "#644a9b", + "selected-text-color" : "#452886" + }, + "Variable" : { + "text-color" : "#0057ae", + "selected-text-color" : "#00316e" + }, + "ControlFlow" : { + "text-color" : "#1f1c1b", + "selected-text-color" : "#ffffff", + "bold" : true + }, + "Operator" : { + "text-color" : "#1f1c1b", + "selected-text-color" : "#ffffff" + }, + "BuiltIn" : { + "text-color" : "#644a9b", + "selected-text-color" : "#452886", + "bold" : true + }, + "Extension" : { + "text-color" : "#0095ff", + "selected-text-color" : "#ffffff", + "bold" : true + }, + "Preprocessor" : { + "text-color" : "#006e28", + "selected-text-color" : "#006e28" + }, + "Attribute" : { + "text-color" : "#0057ae", + "selected-text-color" : "#00316e" + }, + "Char" : { + "text-color" : "#924c9d", + "selected-text-color" : "#6c2477" + }, + "SpecialChar" : { + "text-color" : "#3daee9", + "selected-text-color" : "#fcfcfc" + }, + "String" : { + "text-color" : "#bf0303", + "selected-text-color" : "#9c0e0e" + }, + "VerbatimString" : { + "text-color" : "#bf0303", + "selected-text-color" : "#9c0e0e" + }, + "SpecialString" : { + "text-color" : "#ff5500", + "selected-text-color" : "#ff5500" + }, + "Import" : { + "text-color" : "#ff5500", + "selected-text-color" : "#ff5500" + }, + "DataType" : { + "text-color" : "#0057ae", + "selected-text-color" : "#00316e" + }, + "DecVal" : { + "text-color" : "#b08000", + "selected-text-color" : "#805c00" + }, + "BaseN" : { + "text-color" : "#b08000", + "selected-text-color" : "#805c00" + }, + "Float" : { + "text-color" : "#b08000", + "selected-text-color" : "#805c00" + }, + "Constant" : { + "text-color" : "#aa5500", + "selected-text-color" : "#5e2f00" + }, + "Comment" : { + "text-color" : "#898887", + "selected-text-color" : "#5e5d5d" + }, + "Documentation" : { + "text-color" : "#607880", + "selected-text-color" : "#46585e" + }, + "Annotation" : { + "text-color" : "#ca60ca", + "selected-text-color" : "#a44ea4" + }, + "CommentVar" : { + "text-color" : "#0095ff", + "selected-text-color" : "#ffffff" + }, + "RegionMarker" : { + "text-color" : "#0057ae", + "selected-text-color" : "#00316e", + "background-color" : "#e0e9f8" + }, + "Information" : { + "text-color" : "#b08000", + "selected-text-color" : "#805c00" + }, + "Warning" : { + "text-color" : "#bf0303", + "selected-text-color" : "#9c0e0e" + }, + "Alert" : { + "text-color" : "#bf0303", + "selected-text-color" : "#9c0e0e", + "background-color" : "#f7e6e6", + "bold" : true + }, + "Error" : { + "text-color" : "#bf0303", + "selected-text-color" : "#9c0e0e", + "underline" : true + }, + "Others" : { + "text-color" : "#006e28", + "selected-text-color" : "#006e28" + } + }, + "editor-colors": { + "background-color" : "#ffffff", + "code-folding" : "#94caef", + "bracket-matching" : "#ffff00", + "current-line" : "#f8f7f6", + "icon-border" : "#f0f0f0", + "indentation-line" : "#d2d2d2", + "line-numbers" : "#a0a0a0", + "current-line-number" : "#1e1e1e", + "mark-bookmark" : "#0000ff", + "mark-breakpoint-active" : "#ff0000", + "mark-breakpoint-reached" : "#ffff00", + "mark-breakpoint-disabled" : "#ff00ff", + "mark-execution" : "#a0a0a4", + "mark-warning" : "#00ff00", + "mark-error" : "#ff0000", + "modified-lines" : "#fdbc4b", + "replace-highlight" : "#00ff00", + "saved-lines" : "#2ecc71", + "search-highlight" : "#ffff00", + "selection" : "#94caef", + "separator" : "#898887", + "spell-checking" : "#bf0303", + "tab-marker" : "#d2d2d2", + "template-background" : "#d6d2d0", + "template-placeholder" : "#baf8ce", + "template-focused-placeholder" : "#76da98", + "template-read-only-placeholder" : "#f6e6e6", + "word-wrap-marker" : "#ededed" + } +} diff --git a/src/data/extra/syntax-highlighting/themes/printing.theme b/src/data/extra/syntax-highlighting/themes/printing.theme new file mode 100644 index 00000000..a6048ed0 --- /dev/null +++ b/src/data/extra/syntax-highlighting/themes/printing.theme @@ -0,0 +1,173 @@ +{ + "metadata" : { + "revision" : 3, + "name" : "Printing" + }, + "text-styles": { + "Normal" : { + "text-color" : "#000000", + "selected-text-color" : "#ffffff", + "bold" : false, + "italic" : false, + "underline" : false, + "strike-through" : false + }, + "Keyword" : { + "text-color" : "#000000", + "selected-text-color" : "#ffffff", + "bold" : true + }, + "Function" : { + "text-color" : "#644a9b", + "selected-text-color" : "#452886" + }, + "Variable" : { + "text-color" : "#0057ae", + "selected-text-color" : "#00316e" + }, + "ControlFlow" : { + "text-color" : "#000000", + "selected-text-color" : "#ffffff", + "bold" : true + }, + "Operator" : { + "text-color" : "#000000", + "selected-text-color" : "#ffffff" + }, + "BuiltIn" : { + "text-color" : "#644a9b", + "selected-text-color" : "#452886" + }, + "Extension" : { + "text-color" : "#0095ff", + "selected-text-color" : "#ffffff", + "bold" : true + }, + "Preprocessor" : { + "text-color" : "#006e28", + "selected-text-color" : "#006e28" + }, + "Attribute" : { + "text-color" : "#0057ae", + "selected-text-color" : "#00316e" + }, + "Char" : { + "text-color" : "#924c9d", + "selected-text-color" : "#6c2477" + }, + "SpecialChar" : { + "text-color" : "#ff5500", + "selected-text-color" : "#ff5500" + }, + "String" : { + "text-color" : "#bf0303", + "selected-text-color" : "#9c0e0e" + }, + "VerbatimString" : { + "text-color" : "#bf0303", + "selected-text-color" : "#9c0e0e" + }, + "SpecialString" : { + "text-color" : "#ff5500", + "selected-text-color" : "#ff5500" + }, + "Import" : { + "text-color" : "#644a9b", + "selected-text-color" : "#452886" + }, + "DataType" : { + "text-color" : "#0057ae", + "selected-text-color" : "#00316e" + }, + "DecVal" : { + "text-color" : "#b08000", + "selected-text-color" : "#805c00" + }, + "BaseN" : { + "text-color" : "#b08000", + "selected-text-color" : "#805c00" + }, + "Float" : { + "text-color" : "#b08000", + "selected-text-color" : "#805c00" + }, + "Constant" : { + "text-color" : "#aa5500", + "selected-text-color" : "#5e2f00" + }, + "Comment" : { + "text-color" : "#898887", + "selected-text-color" : "#5e5d5d" + }, + "Documentation" : { + "text-color" : "#607880", + "selected-text-color" : "#46585e" + }, + "Annotation" : { + "text-color" : "#ca60ca", + "selected-text-color" : "#a44ea4" + }, + "CommentVar" : { + "text-color" : "#0095ff", + "selected-text-color" : "#ffffff" + }, + "RegionMarker" : { + "text-color" : "#0057ae", + "selected-text-color" : "#00316e", + "background-color" : "#e0e9f8" + }, + "Information" : { + "text-color" : "#b08000", + "selected-text-color" : "#805c00" + }, + "Warning" : { + "text-color" : "#bf0303", + "selected-text-color" : "#9c0e0e" + }, + "Alert" : { + "text-color" : "#bf0303", + "selected-text-color" : "#9c0e0e", + "background-color" : "#f7e6e6", + "bold" : true + }, + "Error" : { + "text-color" : "#bf0303", + "selected-text-color" : "#9c0e0e", + "underline" : true + }, + "Others" : { + "text-color" : "#006e28", + "selected-text-color" : "#006e28" + } + }, + "editor-colors": { + "background-color" : "#ffffff", + "code-folding" : "#94caef", + "bracket-matching" : "#edf9ff", + "current-line" : "#f8f7f6", + "icon-border" : "#d6d2d0", + "indentation-line" : "#d2d2d2", + "line-numbers" : "#221f1e", + "current-line-number" : "#221f1e", + "mark-bookmark" : "#0000ff", + "mark-breakpoint-active" : "#ff0000", + "mark-breakpoint-reached" : "#ffff00", + "mark-breakpoint-disabled" : "#ff00ff", + "mark-execution" : "#a0a0a4", + "mark-warning" : "#00ff00", + "mark-error" : "#ff0000", + "modified-lines" : "#f6e6e6", + "replace-highlight" : "#00ff00", + "saved-lines" : "#baf8ce", + "search-highlight" : "#ffff00", + "selection" : "#94caef", + "separator" : "#898887", + "spell-checking" : "#bf0303", + "tab-marker" : "#d2d2d2", + "template-background" : "#d6d2d0", + "template-placeholder" : "#baf8ce", + "template-focused-placeholder" : "#76da98", + "template-read-only-placeholder" : "#f6e6e6", + "word-wrap-marker" : "#ededed" + } +} diff --git a/src/data/extra/syntax-highlighting/themes/solarized-dark.theme b/src/data/extra/syntax-highlighting/themes/solarized-dark.theme new file mode 100644 index 00000000..42a6eacb --- /dev/null +++ b/src/data/extra/syntax-highlighting/themes/solarized-dark.theme @@ -0,0 +1,175 @@ +{ + "metadata" : { + "revision" : 1, + "name" : "Solarized Dark" + }, + "text-styles": { + "Normal" : { + "text-color" : "#839496", + "selected-text-color" : "#586e75", + "bold" : false, + "italic" : false, + "underline" : false, + "strike-through" : false + }, + "Keyword" : { + "text-color" : "#859900", + "selected-text-color" : "#859900", + "bold" : true + }, + "Function" : { + "text-color" : "#268bd2", + "selected-text-color" : "#268bd2" + }, + "Variable" : { + "text-color" : "#268bd2", + "selected-text-color" : "#268bd2" + }, + "ControlFlow" : { + "text-color" : "#859900", + "selected-text-color" : "#859900", + "bold" : true + }, + "Operator" : { + "text-color" : "#859900", + "selected-text-color" : "#859900" + }, + "BuiltIn" : { + "text-color" : "#cb4b16", + "selected-text-color" : "#cb4b16" + }, + "Extension" : { + "text-color" : "#268bd2", + "selected-text-color" : "#268bd2", + "bold" : true + }, + "Preprocessor" : { + "text-color" : "#cb4b16", + "selected-text-color" : "#cb4b16" + }, + "Attribute" : { + "text-color" : "#268bd2", + "selected-text-color" : "#268bd2" + }, + "Char" : { + "text-color" : "#2aa198", + "selected-text-color" : "#2aa198" + }, + "SpecialChar" : { + "text-color" : "#dc322f", + "selected-text-color" : "#dc322f" + }, + "String" : { + "text-color" : "#2aa198", + "selected-text-color" : "#2aa198" + }, + "VerbatimString" : { + "text-color" : "#2aa198", + "selected-text-color" : "#2aa198" + }, + "SpecialString" : { + "text-color" : "#dc322f", + "selected-text-color" : "#dc322f" + }, + "Import" : { + "text-color" : "#2aa198", + "selected-text-color" : "#2aa198" + }, + "DataType" : { + "text-color" : "#b58900", + "selected-text-color" : "#b58900", + "bold" : true + }, + "DecVal" : { + "text-color" : "#2aa198", + "selected-text-color" : "#2aa198" + }, + "BaseN" : { + "text-color" : "#2aa198", + "selected-text-color" : "#2aa198" + }, + "Float" : { + "text-color" : "#2aa198", + "selected-text-color" : "#2aa198" + }, + "Constant" : { + "text-color" : "#2aa198", + "selected-text-color" : "#2aa198", + "bold" : true + }, + "Comment" : { + "text-color" : "#586e75", + "selected-text-color" : "#93a1a1", + "italic" : true + }, + "Documentation" : { + "text-color" : "#dc322f", + "selected-text-color" : "#dc322f" + }, + "Annotation" : { + "text-color" : "#268bd2", + "selected-text-color" : "#268bd2" + }, + "CommentVar" : { + "text-color" : "#2aa198", + "selected-text-color" : "#2aa198" + }, + "RegionMarker" : { + "text-color" : "#268bd2", + "selected-text-color" : "#268bd2", + "background-color" : "#073642" + }, + "Information" : { + "text-color" : "#b58900", + "selected-text-color" : "#b58900" + }, + "Warning" : { + "text-color" : "#cb4b16", + "selected-text-color" : "#cb4b16" + }, + "Alert" : { + "text-color" : "#d33682", + "selected-text-color" : "#d33682", + "bold" : true + }, + "Error" : { + "text-color" : "#dc322f", + "selected-text-color" : "#dc322f", + "underline" : true + }, + "Others" : { + "text-color" : "#859900", + "selected-text-color" : "#859900" + } + }, + "editor-colors": { + "background-color" : "#002b36", + "code-folding" : "#6c71c4", + "bracket-matching" : "#073642", + "current-line" : "#073642", + "icon-border" : "#073642", + "indentation-line" : "#073642", + "line-numbers" : "#586e75", + "current-line-number" : "#586e75", + "mark-bookmark" : "#268bd2", + "mark-breakpoint-active" : "#dc322f", + "mark-breakpoint-reached" : "#b58900", + "mark-breakpoint-disabled" : "#d33682", + "mark-execution" : "#586e75", + "mark-warning" : "#cb4b16", + "mark-error" : "#dc322f", + "modified-lines" : "#cb4b16", + "replace-highlight" : "#859900", + "saved-lines" : "#2aa198", + "search-highlight" : "#b58900", + "selection" : "#eee8d5", + "separator" : "#586e75", + "spell-checking" : "#dc322f", + "tab-marker" : "#586e75", + "template-background" : "#073642", + "template-placeholder" : "#073642", + "template-focused-placeholder" : "#073642", + "template-read-only-placeholder" : "#073642", + "word-wrap-marker" : "#586e75" + } +} diff --git a/src/data/extra/syntax-highlighting/themes/solarized-light.theme b/src/data/extra/syntax-highlighting/themes/solarized-light.theme new file mode 100644 index 00000000..473f98ad --- /dev/null +++ b/src/data/extra/syntax-highlighting/themes/solarized-light.theme @@ -0,0 +1,175 @@ +{ + "metadata" : { + "revision" : 1, + "name" : "Solarized Light" + }, + "text-styles": { + "Normal" : { + "text-color" : "#657b83", + "selected-text-color" : "#839496", + "bold" : false, + "italic" : false, + "underline" : false, + "strike-through" : false + }, + "Keyword" : { + "text-color" : "#859900", + "selected-text-color" : "#859900", + "bold" : true + }, + "Function" : { + "text-color" : "#268bd2", + "selected-text-color" : "#268bd2" + }, + "Variable" : { + "text-color" : "#268bd2", + "selected-text-color" : "#268bd2" + }, + "ControlFlow" : { + "text-color" : "#859900", + "selected-text-color" : "#859900", + "bold" : true + }, + "Operator" : { + "text-color" : "#859900", + "selected-text-color" : "#859900" + }, + "BuiltIn" : { + "text-color" : "#cb4b16", + "selected-text-color" : "#cb4b16" + }, + "Extension" : { + "text-color" : "#268bd2", + "selected-text-color" : "#268bd2", + "bold" : true + }, + "Preprocessor" : { + "text-color" : "#cb4b16", + "selected-text-color" : "#cb4b16" + }, + "Attribute" : { + "text-color" : "#268bd2", + "selected-text-color" : "#268bd2" + }, + "Char" : { + "text-color" : "#2aa198", + "selected-text-color" : "#2aa198" + }, + "SpecialChar" : { + "text-color" : "#dc322f", + "selected-text-color" : "#dc322f" + }, + "String" : { + "text-color" : "#2aa198", + "selected-text-color" : "#2aa198" + }, + "VerbatimString" : { + "text-color" : "#2aa198", + "selected-text-color" : "#2aa198" + }, + "SpecialString" : { + "text-color" : "#dc322f", + "selected-text-color" : "#dc322f" + }, + "Import" : { + "text-color" : "#2aa198", + "selected-text-color" : "#2aa198" + }, + "DataType" : { + "text-color" : "#b58900", + "selected-text-color" : "#b58900", + "bold" : true + }, + "DecVal" : { + "text-color" : "#2aa198", + "selected-text-color" : "#2aa198" + }, + "BaseN" : { + "text-color" : "#2aa198", + "selected-text-color" : "#2aa198" + }, + "Float" : { + "text-color" : "#2aa198", + "selected-text-color" : "#2aa198" + }, + "Constant" : { + "text-color" : "#2aa198", + "selected-text-color" : "#2aa198", + "bold" : true + }, + "Comment" : { + "text-color" : "#93a1a1", + "selected-text-color" : "#586e75", + "italic" : true + }, + "Documentation" : { + "text-color" : "#dc322f", + "selected-text-color" : "#dc322f" + }, + "Annotation" : { + "text-color" : "#268bd2", + "selected-text-color" : "#268bd2" + }, + "CommentVar" : { + "text-color" : "#2aa198", + "selected-text-color" : "#2aa198" + }, + "RegionMarker" : { + "text-color" : "#268bd2", + "selected-text-color" : "#268bd2", + "background-color" : "#eee8d5" + }, + "Information" : { + "text-color" : "#b58900", + "selected-text-color" : "#b58900" + }, + "Warning" : { + "text-color" : "#cb4b16", + "selected-text-color" : "#cb4b16" + }, + "Alert" : { + "text-color" : "#d33682", + "selected-text-color" : "#d33682", + "bold" : true + }, + "Error" : { + "text-color" : "#dc322f", + "selected-text-color" : "#dc322f", + "underline" : true + }, + "Others" : { + "text-color" : "#859900", + "selected-text-color" : "#859900" + } + }, + "editor-colors": { + "background-color" : "#fdf6e3", + "code-folding" : "#6c71c4", + "bracket-matching" : "#eee8d5", + "current-line" : "#eee8d5", + "icon-border" : "#eee8d5", + "indentation-line" : "#eee8d5", + "line-numbers" : "#93a1a1", + "current-line-number" : "#93a1a1", + "mark-bookmark" : "#268bd2", + "mark-breakpoint-active" : "#dc322f", + "mark-breakpoint-reached" : "#b58900", + "mark-breakpoint-disabled" : "#d33682", + "mark-execution" : "#93a1a1", + "mark-warning" : "#cb4b16", + "mark-error" : "#dc322f", + "modified-lines" : "#cb4b16", + "replace-highlight" : "#859900", + "saved-lines" : "#2aa198", + "search-highlight" : "#b58900", + "selection" : "#073642", + "separator" : "#93a1a1", + "spell-checking" : "#dc322f", + "tab-marker" : "#93a1a1", + "template-background" : "#eee8d5", + "template-placeholder" : "#eee8d5", + "template-focused-placeholder" : "#eee8d5", + "template-read-only-placeholder" : "#eee8d5", + "word-wrap-marker" : "#93a1a1" + } +} diff --git a/src/data/extra/themes/native/editor-highlight.theme b/src/data/extra/themes/native/editor-highlight.theme new file mode 100644 index 00000000..3fcf3d35 --- /dev/null +++ b/src/data/extra/themes/native/editor-highlight.theme @@ -0,0 +1,174 @@ +{ + "metadata" : { + "revision" : 3, + "name" : "Default" + }, + "text-styles": { + "Normal" : { + "text-color" : "#1f1c1b", + "selected-text-color" : "#ffffff", + "bold" : true, + "italic" : false, + "underline" : false, + "strike-through" : false + }, + "Keyword" : { + "text-color" : "#1f1c1b", + "selected-text-color" : "#ffffff", + "bold" : true + }, + "Function" : { + "text-color" : "#644a9b", + "selected-text-color" : "#452886" + }, + "Variable" : { + "text-color" : "#0057ae", + "selected-text-color" : "#00316e" + }, + "ControlFlow" : { + "text-color" : "#1f1c1b", + "selected-text-color" : "#ffffff", + "bold" : true + }, + "Operator" : { + "text-color" : "#1f1c1b", + "selected-text-color" : "#ffffff" + }, + "BuiltIn" : { + "text-color" : "#644a9b", + "selected-text-color" : "#452886", + "bold" : true + }, + "Extension" : { + "text-color" : "#0095ff", + "selected-text-color" : "#ffffff", + "bold" : true + }, + "Preprocessor" : { + "text-color" : "#006e28", + "selected-text-color" : "#006e28" + }, + "Attribute" : { + "text-color" : "#0057ae", + "selected-text-color" : "#00316e" + }, + "Char" : { + "text-color" : "#924c9d", + "selected-text-color" : "#6c2477" + }, + "SpecialChar" : { + "text-color" : "#3daee9", + "selected-text-color" : "#fcfcfc" + }, + "String" : { + "text-color" : "#bf0303", + "selected-text-color" : "#9c0e0e" + }, + "VerbatimString" : { + "text-color" : "#bf0303", + "selected-text-color" : "#9c0e0e" + }, + "SpecialString" : { + "text-color" : "#ff5500", + "selected-text-color" : "#ff5500" + }, + "Import" : { + "text-color" : "#ff5500", + "selected-text-color" : "#ff5500" + }, + "DataType" : { + "text-color" : "#0057ae", + "selected-text-color" : "#00316e" + }, + "DecVal" : { + "text-color" : "#b08000", + "selected-text-color" : "#805c00" + }, + "BaseN" : { + "text-color" : "#b08000", + "selected-text-color" : "#805c00" + }, + "Float" : { + "text-color" : "#b08000", + "selected-text-color" : "#805c00" + }, + "Constant" : { + "text-color" : "#aa5500", + "selected-text-color" : "#5e2f00" + }, + "Comment" : { + "text-color" : "#898887", + "selected-text-color" : "#5e5d5d" + }, + "Documentation" : { + "text-color" : "#607880", + "selected-text-color" : "#46585e" + }, + "Annotation" : { + "text-color" : "#ca60ca", + "selected-text-color" : "#a44ea4" + }, + "CommentVar" : { + "text-color" : "#0095ff", + "selected-text-color" : "#ffffff" + }, + "RegionMarker" : { + "text-color" : "#0057ae", + "selected-text-color" : "#00316e", + "background-color" : "#e0e9f8" + }, + "Information" : { + "text-color" : "#b08000", + "selected-text-color" : "#805c00" + }, + "Warning" : { + "text-color" : "#bf0303", + "selected-text-color" : "#9c0e0e" + }, + "Alert" : { + "text-color" : "#bf0303", + "selected-text-color" : "#9c0e0e", + "background-color" : "#f7e6e6", + "bold" : true + }, + "Error" : { + "text-color" : "#bf0303", + "selected-text-color" : "#9c0e0e", + "underline" : true + }, + "Others" : { + "text-color" : "#006e28", + "selected-text-color" : "#006e28" + } + }, + "editor-colors": { + "background-color" : "#ffffff", + "code-folding" : "#94caef", + "bracket-matching" : "#ffff00", + "current-line" : "#f8f7f6", + "icon-border" : "#f0f0f0", + "indentation-line" : "#d2d2d2", + "line-numbers" : "#a0a0a0", + "current-line-number" : "#1e1e1e", + "mark-bookmark" : "#0000ff", + "mark-breakpoint-active" : "#ff0000", + "mark-breakpoint-reached" : "#ffff00", + "mark-breakpoint-disabled" : "#ff00ff", + "mark-execution" : "#a0a0a4", + "mark-warning" : "#00ff00", + "mark-error" : "#ff0000", + "modified-lines" : "#fdbc4b", + "replace-highlight" : "#00ff00", + "saved-lines" : "#2ecc71", + "search-highlight" : "#ffff00", + "selection" : "#94caef", + "separator" : "#898887", + "spell-checking" : "#bf0303", + "tab-marker" : "#d2d2d2", + "template-background" : "#d6d2d0", + "template-placeholder" : "#baf8ce", + "template-focused-placeholder" : "#76da98", + "template-read-only-placeholder" : "#f6e6e6", + "word-wrap-marker" : "#ededed" + } +} diff --git a/src/data/extra/themes/native/highlight.css b/src/data/extra/themes/native/highlight.css new file mode 100644 index 00000000..1ab14afd --- /dev/null +++ b/src/data/extra/themes/native/highlight.css @@ -0,0 +1,249 @@ +/* PrismJS 1.21.0 +https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript+abap+abnf+actionscript+ada+agda+al+antlr4+apacheconf+apl+applescript+aql+arduino+arff+asciidoc+aspnet+asm6502+autohotkey+autoit+bash+basic+batch+bbcode+bison+bnf+brainfuck+brightscript+bro+bsl+c+csharp+cpp+cil+clojure+cmake+coffeescript+concurnas+csp+crystal+css-extras+cypher+d+dart+dax+dhall+diff+django+dns-zone-file+docker+ebnf+editorconfig+eiffel+ejs+elixir+elm+etlua+erb+erlang+excel-formula+fsharp+factor+firestore-security-rules+flow+fortran+ftl+gml+gcode+gdscript+gedcom+gherkin+git+glsl+go+graphql+groovy+haml+handlebars+haskell+haxe+hcl+hlsl+http+hpkp+hsts+ichigojam+icon+ignore+inform7+ini+io+j+java+javadoc+javadoclike+javastacktrace+jolie+jq+jsdoc+js-extras+json+json5+jsonp+jsstacktrace+js-templates+julia+keyman+kotlin+latex+latte+less+lilypond+liquid+lisp+livescript+llvm+lolcode+lua+makefile+markdown+markup-templating+matlab+mel+mizar+mongodb+monkey+moonscript+n1ql+n4js+nand2tetris-hdl+naniscript+nasm+neon+nginx+nim+nix+nsis+objectivec+ocaml+opencl+oz+parigp+parser+pascal+pascaligo+pcaxis+peoplecode+perl+php+phpdoc+php-extras+plsql+powerquery+powershell+processing+prolog+properties+protobuf+pug+puppet+pure+purebasic+python+q+qml+qore+r+racket+jsx+tsx+reason+regex+renpy+rest+rip+roboconf+robotframework+ruby+rust+sas+sass+scss+scala+scheme+shell-session+smali+smalltalk+smarty+solidity+solution-file+soy+sparql+splunk-spl+sqf+sql+stan+iecst+stylus+swift+t4-templating+t4-cs+t4-vb+tap+tcl+tt2+textile+toml+turtle+twig+typescript+typoscript+unrealscript+vala+vbnet+velocity+verilog+vhdl+vim+visual-basic+warpscript+wasm+wiki+xeora+xml-doc+xojo+xquery+yaml+yang+zig&plugins=line-numbers+toolbar+copy-to-clipboard+filter-highlight-all */ +/** + * prism.js default theme for JavaScript, CSS and HTML + * Based on dabblet (http://dabblet.com) + * @author Lea Verou + */ + +code[class*="language-"], +pre[class*="language-"] { + color: black; + background: none; + text-shadow: 0 1px white; + font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; + font-size: 1em; + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + word-wrap: normal; + line-height: 1.5; + + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4; + + -webkit-hyphens: none; + -moz-hyphens: none; + -ms-hyphens: none; + hyphens: none; +} + +pre[class*="language-"]::-moz-selection, pre[class*="language-"] ::-moz-selection, +code[class*="language-"]::-moz-selection, code[class*="language-"] ::-moz-selection { + text-shadow: none; + background: #b3d4fc; +} + +pre[class*="language-"]::selection, pre[class*="language-"] ::selection, +code[class*="language-"]::selection, code[class*="language-"] ::selection { + text-shadow: none; + background: #b3d4fc; +} + +@media print { + code[class*="language-"], + pre[class*="language-"] { + text-shadow: none; + } +} + +/* Code blocks */ +pre[class*="language-"] { + padding: 1em; + margin: .5em 0; + overflow: auto; +} + +:not(pre) > code[class*="language-"], +pre[class*="language-"] { + background: #f5f2f0; +} + +/* Inline code */ +:not(pre) > code[class*="language-"] { + padding: .1em; + border-radius: .3em; + white-space: normal; +} + +.token.comment, +.token.prolog, +.token.doctype, +.token.cdata { + color: slategray; +} + +.token.punctuation { + color: #999; +} + +.token.namespace { + opacity: .7; +} + +.token.property, +.token.tag, +.token.boolean, +.token.number, +.token.constant, +.token.symbol, +.token.deleted { + color: #905; +} + +.token.selector, +.token.attr-name, +.token.string, +.token.char, +.token.builtin, +.token.inserted { + color: #690; +} + +.token.operator, +.token.entity, +.token.url, +.language-css .token.string, +.style .token.string { + color: #9a6e3a; + /* This background color was intended by the author of this theme. */ + background: hsla(0, 0%, 100%, .5); +} + +.token.atrule, +.token.attr-value, +.token.keyword { + color: #07a; +} + +.token.function, +.token.class-name { + color: #DD4A68; +} + +.token.regex, +.token.important, +.token.variable { + color: #e90; +} + +.token.important, +.token.bold { + font-weight: bold; +} +.token.italic { + font-style: italic; +} + +.token.entity { + cursor: help; +} + +pre[class*="language-"].line-numbers { + position: relative; + padding-left: 3.8em; + counter-reset: linenumber; +} + +pre[class*="language-"].line-numbers > code { + position: relative; + white-space: inherit; +} + +.line-numbers .line-numbers-rows { + position: absolute; + pointer-events: none; + top: 0; + font-size: 100%; + left: -3.8em; + width: 3em; /* works for line-numbers below 1000 lines */ + letter-spacing: -1px; + border-right: 1px solid #999; + + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + +} + + .line-numbers-rows > span { + display: block; + counter-increment: linenumber; + } + + .line-numbers-rows > span:before { + content: counter(linenumber); + color: #999; + display: block; + padding-right: 0.8em; + text-align: right; + } + +div.code-toolbar { + position: relative; +} + +div.code-toolbar > .toolbar { + position: absolute; + top: .3em; + right: .2em; + transition: opacity 0.3s ease-in-out; + opacity: 0; +} + +div.code-toolbar:hover > .toolbar { + opacity: 1; +} + +/* Separate line b/c rules are thrown out if selector is invalid. + IE11 and old Edge versions don't support :focus-within. */ +div.code-toolbar:focus-within > .toolbar { + opacity: 1; +} + +div.code-toolbar > .toolbar .toolbar-item { + display: inline-block; +} + +div.code-toolbar > .toolbar a { + cursor: pointer; +} + +div.code-toolbar > .toolbar button { + background: none; + border: 0; + color: inherit; + font: inherit; + line-height: normal; + overflow: visible; + padding: 0; + -webkit-user-select: none; /* for button */ + -moz-user-select: none; + -ms-user-select: none; +} + +div.code-toolbar > .toolbar a, +div.code-toolbar > .toolbar button, +div.code-toolbar > .toolbar span { + color: #bbb; + font-size: .8em; + padding: 0 .5em; + background: #f5f2f0; + background: rgba(224, 224, 224, 0.2); + box-shadow: 0 2px 0 0 rgba(0,0,0,0.2); + border-radius: .5em; +} + +div.code-toolbar > .toolbar a:hover, +div.code-toolbar > .toolbar a:focus, +div.code-toolbar > .toolbar button:hover, +div.code-toolbar > .toolbar button:focus, +div.code-toolbar > .toolbar span:hover, +div.code-toolbar > .toolbar span:focus { + color: inherit; + text-decoration: none; +} + diff --git a/src/data/extra/themes/native/interface.qss b/src/data/extra/themes/native/interface.qss new file mode 100644 index 00000000..2c470455 --- /dev/null +++ b/src/data/extra/themes/native/interface.qss @@ -0,0 +1,118 @@ +/* Qt Style Sheets file + * Please refer to https://doc.qt.io/qt-5.12/stylesheet-reference.html + * for detail inforamtion. + * VNote specific syntax: + * - @widgets#toolbox#title#border: reference to a color defined in palette.ini; + * - $2px: 2 will be scaled by multiplying current display scaled factor. + */ + +/* ToolBox */ +vnotex--ToolBox QWidget[ToolBoxTitle="true"] { + border-bottom: 2px solid @widgets#toolbox#title#border; + margin: 0px; + padding: 0px; +} + +vnotex--ToolBox QToolButton[ToolBoxTitleButton="true"] { + padding: 4px 10px 4px 4px; + margin: 0px; + border: none; +} + +vnotex--ToolBox QToolButton[ToolBoxTitleButton="true"]:checked { + font-weight: bold; + /* Reverse */ + color: @widgets#toolbox#title#button#active_fg; + background-color: @widgets#toolbox#title#button#active_bg; +} + +/* TitleBar */ +/* The height should be large enough regarding to the action buttons. */ +vnotex--TitleBar QLabel[TitleBarTitle="true"] { + padding: 5px 1px; + margin: 0px; +} + +/* QDockWidget */ +QDockWidget::Title { + background-color: transparent; + text-align: center left; +} + +/* NotebookSelector */ +vnotex--NotebookSelector { + icon-size: 20px; +} + +vnotex--NotebookSelector QAbstractItemView::item { + padding: 5px, 2px, 5px, 2px; +} + +/* QMainWindow */ +QMainWindow::separator { + /* For vertical */ + width: 1px; + /* For horizontal */ + height: 1px; + background-color: @widgets#qmainwindow#separator#bg; +} + +/* NotebookExplorer */ +vnotex--NotebookNodeExplorer QTreeView::item { + padding-top: 3px; + padding-bottom: 3px; +} + +/* OutlineViewer */ +vnotex--OutlineViewer QTreeView::item { + padding-top: 3px; + padding-bottom: 3px; +} + +/* QToolButton used for action */ +QToolButton[ActionToolButton="true"]:!hover { + padding: 1px; + margin: 0px; + border: none; +} + +QToolButton[ActionToolButton="true"]::menu-indicator { + image: none; +} + +QToolButton[NoMenuIndicator="true"]::menu-indicator { + image: none; +} + +/* QPushButton, QToolButton */ +QPushButton[DangerousButton="true"]:hover, QToolButton[DangerousButton="true"]:hover { + color: @base#dangerous_fg; + background-color: @base#dangerous_bg; + border: none; +} + +/* DrapDropAreaIndicator */ +vnotex--DragDropAreaIndicator { + border: 2px dashed @widgets#dragdropareaindicator#border; + margin: 2px; + max-height: 200px; +} + +vnotex--DragDropAreaIndicator QLabel { + color: @widgets#dragdropareaindicator#fg; + font-size: 12pt; + font-weight: bold; +} + +/* All widgets */ +*[State="info"] { + border: 2px solid @base#info_fg; +} + +*[State="warning"] { + border: 2px solid @base#warning_fg; +} + +*[State="error"] { + border: 2px solid @base#error_fg; +} diff --git a/src/data/extra/themes/native/palette.json b/src/data/extra/themes/native/palette.json new file mode 100644 index 00000000..3c851b32 --- /dev/null +++ b/src/data/extra/themes/native/palette.json @@ -0,0 +1,80 @@ +{ + "metadata" : { + "revision" : 0, + "//comment" : "If there is a file named 'editor-highlight.theme' under theme folder, this value will be ignored.", + "//comment" : "Otherwise, this value specify the theme name to use.", + "editor-highlight-theme" : "Default", + "//comment" : "If there is a file named 'markdown-editor-highlight.theme' under theme folder, this value will be ignored.", + "//comment" : "Otherwise, this value specify the theme name to use.", + "//comment" : "If empty, editor-highlight-theme will be used.", + "markdown-editor-highlight-theme" : "Markdown Default" + }, + "base" : { + "fg1" : "#31373c", + "fg2" : "#babdc1", + "error_fg" : "#b71c1c", + "warning_fg" : "#880e4f", + "info_fg" : "#283593", + "border" : "@base#fg2", + "dangerous_fg": "#f5f5f5", + "dangerous_bg": "#c9302c", + "icon" : { + "fg" : "#434b52", + "disabled_fg" : "@base#fg2", + "warning_fg" : "@base#warning_fg", + "dangerous_fg": "@base#dangerous_fg" + } + }, + "widgets" : { + "toolbox" : { + "title" : { + "border" : "@widgets#toolbox#title#button#active_bg", + "button": { + "fg" : "@base#fg1", + "active_fg" : "#fbffff", + "active_bg" : "#535c65" + } + } + }, + "titlebar" : { + "button" : { + "fg" : "@base#icon#fg" + }, + "menu_icon" : { + "fg" : "@base#icon#fg", + "disabled_fg" : "@base#icon#disabled_fg" + } + }, + "toolbar" : { + "icon" : { + "fg" : "@base#icon#fg", + "disabled_fg" : "@base#icon#disabled_fg", + "dangerous_fg" : "@base#icon#dangerous_fg" + } + }, + "notebookexplorer" : { + "node_icon" : { + "fg" : "@base#icon#fg" + } + }, + "viewsplit" : { + "action_button" : { + "fg" : "#808080", + "active_fg" : "@base#icon#fg" + } + }, + "qmainwindow" : { + "separator" : { + "bg" : "@base#border" + } + }, + "dragdropareaindicator" : { + "fg" : "@base#fg1", + "border" : "@widgets#dragdropareaindicator#fg" + }, + "navigationlabel" : { + "fg" : "@widgets#toolbox#title#button#active_fg", + "bg" : "@widgets#toolbox#title#button#active_bg" + } + } +} diff --git a/src/data/extra/themes/native/text-editor.theme b/src/data/extra/themes/native/text-editor.theme new file mode 100644 index 00000000..6b304bb5 --- /dev/null +++ b/src/data/extra/themes/native/text-editor.theme @@ -0,0 +1,173 @@ +{ + "metadata" : { + "revision" : 0, + "name" : "Default", + "type" : "vtextedit" + }, + "editor-styles" : { + "Text" : { + "//comment" : "Support a list of fonts separated by ,", + "font-family" : "YaHei Consolas Hybrid, Consolas, Monaco, Andale Mono, Monospace, Courier New", + "font-size" : 12 + }, + "CursorLine" : { + "background-color" : "#c5cae9" + }, + "TrailingSpace" : { + "background-color" : "#a8a8a8" + }, + "Tab" : { + "background-color" : "#cfcfcf" + }, + "SelectedText" : { + "//comment" : "Selected text highlight", + "text-color" : "#222222", + "background-color" : "#dfdf00" + }, + "IndicatorsBorder" : { + "text-color" : "#aaaaaa", + "background-color" : "#eeeeee" + }, + "CurrentLineNumber" : { + "text-color" : "#222222" + }, + "Folding" : { + "text-color" : "#6495ed" + }, + "FoldedFolding" : { + "text-color" : "#4169e1" + }, + "FoldingHighlight" : { + "text-color" : "#ffa9c4f5" + } + }, + "//comment" : "Override the Text style in editor-styles", + "markdown-editor-styles" : { + "Text" : { + "//comment" : "Support a list of fonts separated by ,", + "font-family" : "Hiragino Sans GB, 冬青黑体, YaHei Consolas Hybrid, Microsoft YaHei, 微软雅黑, Microsoft YaHei UI, WenQuanYi Micro Hei, 文泉驿雅黑, Dengxian, 等线体, STXihei, 华文细黑, Liberation Sans, Droid Sans, NSimSun, 新宋体, SimSun, 宋体, Verdana, Helvetica, sans-serif, Tahoma, Arial, Geneva, Georgia, Times New Roman", + "font-size" : 12 + } + }, + "markdown-syntax-styles" : { + "H1" : { + "text-color" : "#222222", + "bold" : true, + "font-size" : 17 + }, + "H2" : { + "text-color" : "#222222", + "bold" : true, + "font-size" : 16 + }, + "H3" : { + "text-color" : "#222222", + "bold" : true, + "font-size" : 15 + }, + "H4" : { + "text-color" : "#222222", + "bold" : true, + "font-size" : 14 + }, + "H5" : { + "text-color" : "#222222", + "bold" : true, + "font-size" : 13 + }, + "H6" : { + "text-color" : "#222222", + "bold" : true, + "font-size" : 12 + }, + "HRULE" : { + "text-color" : "#222222", + "background-color" : "#dac7c9" + }, + "LIST_BULLET" : { + "text-color" : "#d33682", + "bold" : true + }, + "LIST_ENUMERATOR" : { + "text-color" : "#0000ff" + }, + "LINK" : { + "text-color" : "#005fff" + }, + "AUTO_LINK_URL" : { + "text-color" : "#005fff" + }, + "AUTO_LINK_EMAIL" : { + "text-color" : "#005fff" + }, + "IMAGE" : { + "text-color" : "#616161" + }, + "REFERENCE" : { + "text-color" : "#826200" + }, + "CODE" : { + "text-color" : "#8e24aa", + "font-family" : "YaHei Consolas Hybrid, Consolas, Monaco, Andale Mono, Monospace, Courier New" + }, + "EMPH" : { + "italic" : true + }, + "STRONG" : { + "bold" : true + }, + "HTML_ENTITY" : { + "text-color" : "#8900b5" + }, + "HTML" : { + "text-color" : "#8900b5" + }, + "HTMLBLOCK" : { + "text-color" : "#8900b5" + }, + "COMMENT" : { + "text-color" : "#93a1a1" + }, + "VERBATIM" : { + "text-color" : "#673ab7", + "font-family" : "YaHei Consolas Hybrid, Consolas, Monaco, Andale Mono, Monospace, Courier New" + }, + "//comment" : "Please modify the syntax highlight theme as well if you change this", + "FENCEDCODEBLOCK" : { + "text-color" : "#673ab7", + "font-family" : "YaHei Consolas Hybrid, Consolas, Monaco, Andale Mono, Monospace, Courier New" + }, + "BLOCKQUOTE" : { + "text-color" : "#00af00" + }, + "NOTE" : { + "text-color" : "#0087b5" + }, + "STRIKE" : { + "text-color" : "#b71c1c", + "strike-through" : true + }, + "FRONTMATTER" : { + "text-color" : "#6c6c6c" + }, + "INLINEEQUATION" : { + "text-color" : "#00897b", + "font-family" : "YaHei Consolas Hybrid, Consolas, Monaco, Andale Mono, Monospace, Courier New" + }, + "DISPLAYFORMULA" : { + "text-color" : "#00897b", + "font-family" : "YaHei Consolas Hybrid, Consolas, Monaco, Andale Mono, Monospace, Courier New" + }, + "MARK" : { + "text-color" : "#222222", + "background-color" : "#ffff76" + }, + "TABLE" : { + "font-family" : "YaHei Consolas Hybrid, Consolas, Monaco, Andale Mono, Monospace, Courier New" + }, + "TABLEBORDER" : { + "text-color" : "#d33682", + "background-color" : "#e0e0e0" + } + } +} diff --git a/src/data/extra/themes/native/web.css b/src/data/extra/themes/native/web.css new file mode 100644 index 00000000..52259656 --- /dev/null +++ b/src/data/extra/themes/native/web.css @@ -0,0 +1,292 @@ +body { + margin: 0 auto; + font-family: "Segoe UI", Helvetica, sans-serif, Tahoma, Arial, Geneva, Georgia, Palatino, "Times New Roman", "Hiragino Sans GB", "冬青黑体", "YaHei Consolas Hybrid", "Microsoft YaHei", "微软雅黑", "Microsoft YaHei UI", "WenQuanYi Micro Hei", "文泉驿雅黑", Dengxian, "等线体", STXihei, "华文细黑", "Liberation Sans", "Droid Sans", NSimSun, "新宋体", SimSun, "宋体"; + color: #222222; + line-height: 1.5; + padding: 15px; + font-size: 16px; +} + +h1, h2, h3, h4, h5, h6 { + color: #222222; + font-weight: bold; + margin-top: 20px; + margin-bottom: 10px; + padding: 0; +} + +p { + padding: 0; + margin-top: 16px; + margin-bottom: 16px; +} + +h1 { + font-size: 26px; +} + +h2 { + font-size: 24px; +} + +h3 { + font-size: 22px; +} + +h4 { + font-size: 20px; +} + +h5 { + font-size: 19px; +} + +h6 { + font-size: 18px; +} + +a { + color: #0099ff; + margin: 0; + padding: 0; + vertical-align: baseline; + text-decoration: none; + word-break: break-word; +} + +a:hover { + text-decoration: underline; + color: #ff6600; +} + +a:visited { + color: purple; +} + +ul, ol { + padding: 0; + padding-left: 24px; +} + +li { + line-height: 24px; +} + +li ul, li ol { + margin-left: 16px; +} + +p, ul, ol { + font-size: 16px; + line-height: 24px; +} + +pre { + display: block; + overflow-y: hidden; + overflow-x: auto; + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4; +} + +code { + font-family: "YaHei Consolas Hybrid", Consolas, Monaco, Monospace, Courier; + color: #8E24AA; + word-break: break-word; +} + +pre code { + display: block; + padding-left: 0.5em; + padding-right: 0.5em; + color: #222222; + background-color: #E0E0E0; + line-height: 1.5; + font-family: "YaHei Consolas Hybrid", Consolas, Monaco, Monospace, Courier; + white-space: pre; + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4; +} + +pre code.markdown-metadata { + border-left: .5em solid #00897B; +} + +aside { + display: block; + float: right; + width: 390px; +} + +blockquote { + color: #666; + border-left: .5em solid #7A7A7A; + padding: 0 1em; + margin-left: 0; +} + +blockquote p { + color: #666; +} + +hr { + display: block; + text-align: left; + margin: 1em 0; + border: none; + height: 2px; + background: #999; +} + +table { + padding: 0; + margin: 1rem 0.5rem; + border-collapse: collapse; +} + +table tr { + border-top: 1px solid #cccccc; + background-color: white; + margin: 0; + padding: 0; +} + +table tr:hover { + background-color: #f8f8f8; +} + +table tr th { + font-weight: bold; + border: 1px solid #cccccc; + margin: 0; + padding: 6px 13px; +} + +table tr td { + border: 1px solid #cccccc; + margin: 0; + padding: 6px 13px; +} + +table tr th :first-child, table tr td :first-child { + margin-top: 0; +} + +table tr th :last-child, table tr td :last-child { + margin-bottom: 0; +} + +div.mermaid-diagram { + margin: 16px 0px 16px 0px; + overflow-y: hidden; +} + +div.flowchart-diagram { + padding: 0px 5px 0px 5px; + margin: 16px 0px 16px 0px; + width: fit-content; + overflow: hidden; +} + +div.wavedrom-diagram { + padding: 0px 5px 0px 5px; + margin: 16px 0px 16px 0px; + width: fit-content; + overflow: hidden; +} + +div.plantuml-diagram { + padding: 5px 5px 0px 5px; + margin: 16px 0px 16px 0px; + width: fit-content; + overflow: hidden; +} + +.img-package { + text-align: center; +} + +img.img-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +span.img-caption { + min-width: 20%; + max-width: 80%; + display: inline-block; + padding: 10px; + margin: 0 auto; + border-bottom: 1px solid #c0c0c0; + color: #6c6c6c; + text-align: center; + line-height: 1.5; +} + +.emoji_zero,.emoji_one,.emoji_two,.emoji_three,.emoji_four,.emoji_five,.emoji_six,.emoji_seven,.emoji_eight,.emoji_nine { + margin-left: 5px; + margin-right: 8px; +} + +div.preview-hint { + opacity: 0.5; + margin-top: 30%; + margin-bottom: 30%; + align-items: center; + display: flex; + flex-direction: column; + justify-content: center; +} + +/* For Highlight.js Line Number */ +table.hljs-ln tr { + border: none; + background-color: transparent; +} + +table.hljs-ln tr td { + border: none; + background-color: transparent; +} + +table.hljs-ln tr td.hljs-ln-numbers { + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + + text-align: center; + color: #AAA; + border-right: 1px solid #CCC; + vertical-align: top; + padding-right: 5px; + white-space: nowrap; +} + +table.hljs-ln tr td.hljs-ln-code { + padding-left: 10px; +} + +::selection { + background: #1976D2; + color: white; +} + +.modal-box { + background-color: rgb(245, 245, 245); + background-color: rgba(245, 245, 245, 0.95); +} + +span.modal-close { + color: #666666; +} + +span.modal-close:hover, +span.modal-close:focus { + color: #222222; +} diff --git a/src/data/extra/web/css/globalstyles.css b/src/data/extra/web/css/globalstyles.css new file mode 100644 index 00000000..088b507e --- /dev/null +++ b/src/data/extra/web/css/globalstyles.css @@ -0,0 +1,51 @@ +/* Styles here will be placed in the header of the HTML template as global embedded styles. */ +/* Section numbering */ +#vx-content.vx-section-number, #vx-content.vx-section-number h1 { + counter-reset: section1 section2 section3 section4 section5; +} + +#vx-content.vx-section-number h2 { + counter-reset: section2 section3 section4 seciton5; +} + +#vx-content.vx-section-number h3 { + counter-reset: section3 section4 section5; +} + +#vx-content.vx-section-number h4 { + counter-reset: section4 section5; +} + +#vx-content.vx-section-number h5 { + counter-reset: section5; +} + +#vx-content.vx-section-number h2::before { + counter-increment: section1; + content: counter(section1) ". "; +} + +#vx-content.vx-section-number h3::before { + counter-increment: section2; + content: counter(section1) "." counter(section2) ". "; +} + +#vx-content.vx-section-number h4::before { + counter-increment: section3; + content: counter(section1) "." counter(section2) "." counter(section3) ". "; +} + +#vx-content.vx-section-number h5::before { + counter-increment: section4; + content: counter(section1) "." counter(section2) "." counter(section3) "." counter(section4) ". "; +} + +#vx-content.vx-section-number h6::before { + counter-increment: section5; + content: counter(section1) "." counter(section2) "." counter(section3) "." counter(section4) "." counter(section5) ". "; +} + +#vx-content.vx-constrain-image-width img { + max-width: 100%; + height: auto; +} diff --git a/src/data/extra/web/css/imageviewer.css b/src/data/extra/web/css/imageviewer.css new file mode 100644 index 00000000..3757b660 --- /dev/null +++ b/src/data/extra/web/css/imageviewer.css @@ -0,0 +1,62 @@ +.vx-image-view-image { + transition: 0.3s; +} + +.vx-modal-box { + display: none; + position: fixed; + z-index: 1000; + padding-top: 50px; + left: 0; + top: 0; + width: 100%; + height: 100%; + overflow: hidden; + background-color: rgb(68, 68, 68); + background-color: rgba(68, 68, 68, 0.95); +} + +.vx-modal-content { + margin: auto; + display: block; + width: auto; + height: auto; + cursor: move; +} + +/* Add Animation */ +.vx-modal-content { + -webkit-animation-name: zoom; + -webkit-animation-duration: 0.6s; + animation-name: zoom; + animation-duration: 0.6s; +} + +@-webkit-keyframes zoom { + from {-webkit-transform:scale(0)} + to {-webkit-transform:scale(1)} +} + +@keyframes zoom { + from {transform:scale(0)} + to {transform:scale(1)} +} + +/* The Close Button */ +span.vx-modal-close { + position: absolute; + z-index: 1000; + top: 15px; + right: 35px; + color: #DADADA; + font-size: 40px; + font-weight: bold; + transition: 0.3s; +} + +span.vx-modal-close:hover, +span.vx-modal-close:focus { + color: #EEEEEE; + text-decoration: none; + cursor: pointer; +} diff --git a/src/data/extra/web/css/markdownit.css b/src/data/extra/web/css/markdownit.css new file mode 100644 index 00000000..b347e71b --- /dev/null +++ b/src/data/extra/web/css/markdownit.css @@ -0,0 +1,61 @@ +ul.contains-task-list { + list-style-type: none; +} + +/* Alert */ +.vx-alert { + position: relative; + padding: .75rem 1.25rem; + margin-bottom: 1rem; + border: 1px solid transparent; + border-radius: .25rem; +} + +.alert-primary { + color: #004085; + background-color: #cce5ff; + border-color: #b8daff; +} + +.alert-secondary { + color: #383d41; + background-color: #e2e3e5; + border-color: #d6d8db; +} + +.alert-success { + color: #155724; + background-color: #d4edda; + border-color: #c3e6cb; +} + +.alert-info { + color: #0c5460; + background-color: #d1ecf1; + border-color: #bee5eb; +} + +.alert-warning { + color: #856404; + background-color: #fff3cd; + border-color: #ffeeba; +} + +.alert-danger { + color: #721c24; + background-color: #f8d7da; + border-color: #f5c6cb; +} + +.alert-light { + color: #818182; + background-color: #fefefe; + border-color: #fdfdfe; +} + +.alert-dark { + color: #1b1e21; + background-color: #d6d8d9; + border-color: #c6c8ca; +} +/* Alert */ diff --git a/src/data/extra/web/js/computed-style-to-inline-style.js b/src/data/extra/web/js/computed-style-to-inline-style.js new file mode 100644 index 00000000..fae3d8c8 --- /dev/null +++ b/src/data/extra/web/js/computed-style-to-inline-style.js @@ -0,0 +1,43 @@ +(function (global, factory) { + if (typeof define === "function" && define.amd) { + define(["module"], factory); + } else if (typeof exports !== "undefined") { + factory(module); + } else { + var mod = { + exports: {} + }; + factory(mod); + global.computedStyleToInlineStyle = mod.exports; + } +})(this, function (module) { + "use strict"; + + var each = Array.prototype.forEach; + + + function computedStyleToInlineStyle(element) { + var _context2; + + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + + if (!element) { + throw new Error("No element specified."); + } + + if (options.recursive) { + var _context; + + (_context = element.children, each).call(_context, function (child) { + computedStyleToInlineStyle(child, options); + }); + } + + var computedStyle = getComputedStyle(element); + (_context2 = options.properties || computedStyle, each).call(_context2, function (property) { + element.style[property] = computedStyle.getPropertyValue(property); + }); + } + + module.exports = computedStyleToInlineStyle; +}); \ No newline at end of file diff --git a/src/data/extra/web/js/crosscopy.js b/src/data/extra/web/js/crosscopy.js new file mode 100644 index 00000000..cadab757 --- /dev/null +++ b/src/data/extra/web/js/crosscopy.js @@ -0,0 +1,321 @@ +// Class to cross copy contents to different targets. +class CrossCopy { + constructor(p_adapter) { + this.adapter = p_adapter; + + // Target name -> {rules}. + this.targets = {}; + + // Add targets here. + this.addTargetNoBackground(); + + this.addTargetEvernote(); + + this.addTargetOneNote(); + + this.addTargetMicrosoftWord(); + + this.addTargetWeChatPublicAccountEditor(); + + this.addTargetRawHtml(); + + this.updateTargets(); + + // Mark styles used to transform to span. + this.markStyle = null; + } + + updateTargets() { + let targets = []; + for (let key in this.targets) { + targets.push(key); + } + + this.adapter.setCrossCopyTargets(targets); + } + + addTarget(p_name, p_callback) { + this.targets[p_name] = p_callback; + } + + addTargetNoBackground() { + let rules = [ + CrossCopy.rule_removeBackground.bind(undefined, ['mark', 'svg']), + CrossCopy.rule_fixRelativeImage + ]; + + this.addTarget('No Background', { + rules: rules + }); + } + + addTargetEvernote() { + let rules = [ + CrossCopy.rule_addFragment, + CrossCopy.rule_removeBackground.bind(undefined, ['mark', 'pre', 'svg']), + CrossCopy.rule_replaceLocalImageWithLabel + ]; + + this.addTarget('Evernote', { + rules: rules + }); + } + + addTargetOneNote() { + let rules = [ + CrossCopy.rule_addFragment, + CrossCopy.rule_removeBackground.bind(undefined, ['mark', 'svg']), + CrossCopy.rule_replaceSvgWithLabel, + CrossCopy.rule_fixRelativeImage, + CrossCopy.rule_removeMarginPadding.bind(undefined, []), + CrossCopy.rule_transformMarkToSpan + ]; + + this.addTarget('OneNote', { + rules: rules + }); + } + + addTargetMicrosoftWord() { + let rules = [ + CrossCopy.rule_removeBackground.bind(undefined, ['mark', 'pre', 'svg']), + CrossCopy.rule_replaceSvgWithLabel, + CrossCopy.rule_fixRelativeImage, + CrossCopy.rule_removeMarginPadding.bind(undefined, []), + CrossCopy.rule_transformMarkToSpan, + ]; + + this.addTarget('Microsoft Word', { + rules: rules + }); + } + + addTargetWeChatPublicAccountEditor() { + let rules = [ + CrossCopy.rule_removeBackground.bind(undefined, ['mark', 'pre', 'svg']), + CrossCopy.rule_replaceLocalImageWithLabel, + CrossCopy.rule_removeMarginPadding.bind(undefined, []) + ]; + + this.addTarget('WeChat Public Account Editor', { + rules: rules + }); + } + + addTargetRawHtml() { + let rules = [ + CrossCopy.rule_removeAllStyles.bind(undefined, []) + ]; + + this.addTarget('Raw HTML', { + rules: rules + }); + } + + crossCopy(p_id, p_timeStamp, p_target, p_baseUrl, p_html) { + let target = this.targets[p_target]; + if (!target) { + console.error("no matching cross-copy target", p_target); + this.adapter.setCrossCopyResult(p_id, p_timeStamp, p_html); + } + + let info = { + inst: this, + baseUrl: p_baseUrl + }; + + let result = this.executeRules(target.rules, info, p_html); + this.adapter.setCrossCopyResult(p_id, p_timeStamp, result); + } + + executeRules(p_rules, p_info, p_html) { + if (!p_rules || p_rules.length == 0) { + return p_html; + } + + let doc = new DOMParser().parseFromString(p_html, "text/html"); + + // Remove . + let htmlNode = doc.firstElementChild; + htmlNode.removeChild(htmlNode.firstElementChild); + + // Remove the copy button in code blocks. + let codeToolBars = doc.querySelectorAll('div.code-toolbar div.toolbar'); + for (let i = 0; i < codeToolBars.length; ++i) { + let paNode = codeToolBars[i].parentNode; + paNode.removeChild(codeToolBars[i]); + } + + // Go through each rule. + for (let i = 0; i < p_rules.length; ++i) { + p_rules[i](p_info, doc); + } + + return doc.documentElement.outerHTML; + } + + getMarkStyle() { + if (this.markStyle) { + return this.markStyle; + } + + let marks = this.adapter.contentContainer.getElementsByTagName('mark'); + if (marks.length > 0) { + let style = window.getComputedStyle(marks[0], null); + this.markStyle = { + color: style.color, + backgroundColor: style.backgroundColor + } + } + return this.markStyle; + } + + // Add and inside . + static rule_addFragment(p_info, p_doc) { + let bodyNode = p_doc.getElementsByTagName('body')[0]; + let startNode = p_doc.createComment('StartFragment'); + let endNode = p_doc.createComment('EndFragment'); + if (bodyNode.firstChild) { + bodyNode.insertBefore(startNode, bodyNode.firstChild); + bodyNode.appendChild(endNode); + } else { + bodyNode.appendChild(startNode); + bodyNode.appendChild(endNode); + } + } + + // Remove background color of all tags except @p_tagsToExclude. + static rule_removeBackground(p_tagsToExclude, p_info, p_doc) { + CrossCopy.removeStyles(p_tagsToExclude, ['background', 'backgroundColor'], p_doc); + } + + static rule_fixRelativeImage(p_info, p_doc) { + let imgs = p_doc.getElementsByTagName('img'); + for (let i = 0; i < imgs.length; ++i) { + let img = imgs[i]; + let src = img.getAttribute('src'); + let httpRegExp = new RegExp('^http[s]://'); + if (httpRegExp.test(src)) { + continue; + } + + let dataRegExp = new RegExp('^data:image/'); + if (dataRegExp.test(src)) { + continue; + } + + let fileRegExp = new RegExp('^file://'); + if (!fileRegExp.test(src)) { + // img.src will automatically resolve the absolute url from relative one. + img.setAttribute('src', img.src); + } + + // Check if we need to fix the encoding. + // Win needs only space-encoded. + if (window.vnotex.os === "Windows") { + let decodedUrl = decodeURI(img.src); + if (decodedUrl.length != img.src.length) { + // May need other encoding. + img.src = decodedUrl.replace(/ /g, '%20'); + } + } + } + } + + static rule_removeMarginPadding(p_tagsToExclude, p_info, p_doc) { + CrossCopy.removeStyles(p_tagsToExclude, + ['margin-left', 'margin-right', 'padding-left', 'padding-right'], + p_doc); + } + + static removeStyles(p_tagsToExclude, p_styles, p_doc) { + let allElements = p_doc.getElementsByTagName('*'); + for (let i = 0; i < allElements.length; ++i) { + let ele = allElements[i]; + if (p_tagsToExclude.indexOf(ele.tagName.toLowerCase()) > -1) { + continue; + } + + for (let j = 0; j < p_styles.length; ++j) { + ele.style.removeProperty(p_styles[j]); + } + } + } + + static rule_transformMarkToSpan(p_info, p_doc) { + let marks = p_doc.getElementsByTagName('mark'); + while (marks.length > 0) { + let mark = marks[0]; + let spanNode = p_doc.createElement('span'); + spanNode.innerHTML = mark.innerHTML; + + let markStyle = p_info.inst.getMarkStyle(); + if (markStyle) { + spanNode.style.color = markStyle.color; + spanNode.style.backgroundColor = markStyle.backgroundColor; + } + + mark.parentNode.replaceChild(spanNode, mark); + } + } + + // Seems not needed with Prism highlight. + static rule_useCodeBackgroundForPre(p_info, p_doc) { + let preCodes = p_doc.querySelectorAll('pre code'); + for (let i = 0; i < preCodes.length; ++i) { + let preNode = preCodes[i].parentNode; + preNode.style.background = preCodes[i].style.background; + preNode.style.backgroundColor = preCodes[i].style.backgroundColor; + } + } + + // TODO: if we deploy a http server, can we eliminate this tricky rule? + static rule_replaceLocalImageWithLabel(p_info, p_doc) { + let imgs = p_doc.getElementsByTagName('img'); + for (let i = 0; i < imgs.length; ++i) { + let img = imgs[i]; + let httpRegExp = new RegExp('^http[s]://'); + if (httpRegExp.test(img.src)) { + continue; + } + + let dataRegExp = new RegExp('^data:image/'); + if (dataRegExp.test(img.src)) { + continue; + } + + let spanNode = p_doc.createElement('span'); + spanNode.style = 'font-weight: bold; color: white; background-color: red;' + spanNode.textContent = 'INSERT_IMAGE_HERE'; + img.parentNode.replaceChild(spanNode, img); + --i; + } + } + + static rule_removeAllStyles(p_tagsToExclude, p_info, p_doc) { + let allElements = p_doc.getElementsByTagName('*'); + for (let i = 0; i < allElements.length; ++i) { + let ele = allElements[i]; + if (p_tagsToExclude.indexOf(ele.tagName.toLowerCase()) > -1) { + continue; + } + + ele.style = ''; + } + } + + static rule_replaceSvgWithLabel(p_info, p_doc) { + let allSvgs = p_doc.getElementsByTagName('svg'); + while (allSvgs.length > 0) { + let spanNode = p_doc.createElement('span'); + spanNode.style = 'font-weight: bold; color: white; background-color: red;' + spanNode.textContent = 'INSERT_SVG_HERE'; + + let node = allSvgs[0]; + if (node.parentNode.childElementCount == 1 && node.parentNode.tagName.toLowerCase() === 'div') { + node = node.parentNode; + } + node.parentNode.replaceChild(spanNode, node); + } + } +} diff --git a/src/data/extra/web/js/easyaccess.js b/src/data/extra/web/js/easyaccess.js new file mode 100644 index 00000000..f4843cfa --- /dev/null +++ b/src/data/extra/web/js/easyaccess.js @@ -0,0 +1,435 @@ +class EasyAccess { + constructor() { + // Implement mouse drag with Ctrl and left button pressed to scroll. + this.lastMouseClientX = 0; + this.lastMouseClientY = 0; + this.readyToScroll = false; + this.scrolled = false; + + // Vi-like navigation. + // Pending keys for keydown. + this.pendingKeys = []; + // The repeat token from user input. + this.repeatToken = 0; + + window.vnotex.on('ready', () => { + this.setupMouseMove(); + this.setupViNavigation(); + this.setupZoomOnWheel(); + }); + } + + setupMouseMove() { + window.addEventListener('mousedown', (e) => { + e = e || window.event; + let isCtrl = window.vnotex.os === 'Mac' ? e.metaKey : e.ctrlKey; + // Left button and Ctrl key. + if (e.buttons == 1 + && isCtrl + && window.getSelection().type != 'Range' + && !window.vxImageViewer.isViewingImage()) { + this.lastMouseClientX = e.clientX; + this.lastMouseClientY = e.clientY; + this.readyToScroll = true; + this.scrolled = false; + e.preventDefault(); + } else { + this.readyToScroll = false; + this.scrolled = false; + } + }); + + window.addEventListener('mouseup', (e) => { + e = e || window.event; + if (this.scrolled || this.readyToScroll) { + // Have been scrolled, restore the cursor style. + document.body.style.cursor = "auto"; + e.preventDefault(); + } + + this.readyToScroll = false; + this.scrolled = false; + }); + + window.addEventListener('mousemove', (e) => { + e = e || window.event; + if (this.readyToScroll) { + let deltaX = e.clientX - this.lastMouseClientX; + let deltaY = e.clientY - this.lastMouseClientY; + + let threshold = 5; + if (Math.abs(deltaX) >= threshold || Math.abs(deltaY) >= threshold) { + this.lastMouseClientX = e.clientX; + this.lastMouseClientY = e.clientY; + + if (!this.scrolled) { + this.scrolled = true; + document.body.style.cursor = "all-scroll"; + } + + let scrollX = -deltaX; + let scrollY = -deltaY; + window.scrollBy(scrollX, scrollY); + } + + e.preventDefault(); + } + }); + } + + setupViNavigation() { + document.addEventListener('keydown', (e) => { + // Need to clear pending kyes. + let needClear = true; + + // This event has been handled completely. No need to call the default handler. + let accepted = true; + + e = e || window.event; + let key = null; + let shift = null; + let ctrl = null; + let meta = null; + if (e.which) { + key = e.which; + } else { + key = e.keyCode; + } + + shift = !!e.shiftKey; + ctrl = !!e.ctrlKey; + meta = !!e.metaKey; + let isCtrl = window.vnotex.os === 'Mac' ? e.metaKey : e.ctrlKey; + switch (key) { + // Skip Ctrl, Shift, Alt, Supper. + case 16: + case 17: + case 18: + case 91: + case 92: + needClear = false; + break; + + // 0 - 9. + case 48: + case 49: + case 50: + case 51: + case 52: + case 53: + case 54: + case 55: + case 56: + case 57: + case 96: + case 97: + case 98: + case 99: + case 100: + case 101: + case 102: + case 103: + case 104: + case 105: + { + if (this.pendingKeys.length != 0 || ctrl || shift || meta) { + accepted = false; + break; + } + + let num = key >= 96 ? key - 96 : key - 48; + this.repeatToken = this.repeatToken * 10 + num; + needClear = false; + break; + } + + case 74: // J + if (!shift && (!ctrl || isCtrl) && (!meta || isCtrl)) { + EasyAccess.scroll(true); + break; + } + + accepted = false; + break; + + case 75: // K + if (!shift && (!ctrl || isCtrl) && (!meta || isCtrl)) { + EasyAccess.scroll(false); + break; + } + + accepted = false; + break; + + case 72: // H + if (!ctrl && !shift && !meta) { + window.scrollBy(-100, 0); + break; + } + + accepted = false; + break; + + case 76: // L + if (!ctrl && !shift && !meta) { + window.scrollBy(100, 0); + break; + } + + accepted = false; + break; + + case 71: // G + if (shift) { + if (this.pendingKeys.length == 0) { + let scrollLeft = document.documentElement.scrollLeft || document.body.scrollLeft || window.pageXOffset; + let scrollHeight = document.documentElement.scrollHeight || document.body.scrollHeight; + window.scrollTo(scrollLeft, scrollHeight); + break; + } + } else if (!ctrl && !meta) { + if (this.pendingKeys.length == 0) { + // First g, pend it. + this.pendingKeys.push({ + key: key, + ctrl: ctrl, + shift: shift + }); + + needClear = false; + break; + } else if (this.pendingKeys.length == 1) { + let pendKey = this.pendingKeys[0]; + if (pendKey.key == key && !pendKey.shift && !pendKey.ctrl) { + let scrollLeft = document.documentElement.scrollLeft + || document.body.scrollLeft + || window.pageXOffset; + window.scrollTo(scrollLeft, 0); + break; + } + } + } + + accepted = false; + break; + + case 85: // U + if (ctrl) { + let clientHeight = document.documentElement.clientHeight; + window.scrollBy(0, -clientHeight / 2); + break; + } + + accepted = false; + break; + + case 68: // D + if (ctrl) { + let clientHeight = document.documentElement.clientHeight; + window.scrollBy(0, clientHeight / 2); + break; + } + + accepted = false; + break; + + case 219: // [ or { + { + let repeat = this.repeatToken < 1 ? 1 : this.repeatToken; + if (shift) { + // { + if (this.pendingKeys.length == 1) { + let pendKey = this.pendingKeys[0]; + if (pendKey.key == key && !pendKey.shift && !pendKey.ctrl) { + // [{, jump to previous title at a higher level. + this.jumpTitle(false, -1, repeat); + break; + } + } + } else if (!ctrl && !meta) { + // [ + if (this.pendingKeys.length == 0) { + // First [, pend it. + this.pendingKeys.push({ + key: key, + ctrl: ctrl, + shift: shift + }); + + needClear = false; + break; + } else if (this.pendingKeys.length == 1) { + let pendKey = this.pendingKeys[0]; + if (pendKey.key == key && !pendKey.shift && !pendKey.ctrl) { + // [[, jump to previous title. + this.jumpTitle(false, 1, repeat); + break; + } else if (pendKey.key == 221 && !pendKey.shift && !pendKey.ctrl) { + // ][, jump to next title at the same level. + this.jumpTitle(true, 0, repeat); + break; + } + } + } + + accepted = false; + break; + } + + case 221: // ] or } + { + let repeat = this.repeatToken < 1 ? 1 : this.repeatToken; + if (shift) { + // } + if (this.pendingKeys.length == 1) { + let pendKey = this.pendingKeys[0]; + if (pendKey.key == key && !pendKey.shift && !pendKey.ctrl) { + // ]}, jump to next title at a higher level. + this.jumpTitle(true, -1, repeat); + break; + } + } + } else if (!ctrl && !meta) { + // ] + if (this.pendingKeys.length == 0) { + // First ], pend it. + this.pendingKeys.push({ + key: key, + ctrl: ctrl, + shift: shift + }); + + needClear = false; + break; + } else if (this.pendingKeys.length == 1) { + let pendKey = this.pendingKeys[0]; + if (pendKey.key == key && !pendKey.shift && !pendKey.ctrl) { + // ]], jump to next title. + this.jumpTitle(true, 1, repeat); + break; + } else if (pendKey.key == 219 && !pendKey.shift && !pendKey.ctrl) { + // [], jump to previous title at the same level. + this.jumpTitle(false, 0, repeat); + break; + } + } + } + + accepted = false; + break; + } + + default: + accepted = false; + break; + } + + if (needClear) { + this.repeatToken = 0; + this.pendingKeys = []; + } + + if (accepted) { + e.preventDefault(); + } else { + window.vnotex.setKeyPress(key, ctrl, shift, meta); + } + }); + } + + // @forward: jump forward or backward. + // @relativeLevel: 0 for the same level as current header; + // negative value for upper level; + // positive value is ignored. + jumpTitle(forward, relativeLevel, repeat) { + let headings = window.vnotex.nodeLineMapper.headingNodes; + if (headings.length == 0) { + return; + } + + let currentHeadingIdx = window.vnotex.nodeLineMapper.currentHeadingIndex(); + if (currentHeadingIdx == -1) { + // At the beginning, before any headings. + if (relativeLevel < 0 || !forward) { + return; + } + } + + let targetIdx = -1; + // -1: skip level check. + let targetLevel = 0; + + let delta = 1; + if (!forward) { + delta = -1; + } + + let scrollTop = document.documentElement.scrollTop || document.body.scrollTop || window.pageYOffset; + for (targetIdx = (currentHeadingIdx == -1 ? 0 : currentHeadingIdx); + targetIdx >= 0 && targetIdx < headings.length; + targetIdx += delta) { + let level = parseInt(headings[targetIdx].tagName.substr(1)); + if (targetLevel == 0) { + targetLevel = level; + if (relativeLevel < 0) { + targetLevel += relativeLevel; + if (targetLevel < 1) { + // Invalid level. + return; + } + } else if (relativeLevel > 0) { + targetLevel = -1; + } + } + + if (targetLevel == -1 || level == targetLevel) { + if (targetIdx == currentHeadingIdx) { + // If current heading is visible, skip it. + // Minus 2 to tolerate some margin. + if (forward || scrollTop - 2 <= headings[targetIdx].offsetTop) { + continue; + } + } + + if (--repeat == 0) { + break; + } + } else if (level < targetLevel) { + return; + } + } + + if (targetIdx < 0 || targetIdx >= headings.length) { + return; + } + + window.vnotex.nodeLineMapper.scrollToNode(headings[targetIdx], false, false); + window.setTimeout(function() { + window.vnotex.nodeLineMapper.updateCurrentHeading(); + }, 1000); + }; + + setupZoomOnWheel() { + window.addEventListener('wheel', (e) => { + e = e || window.event; + let isCtrl = window.vnotex.os === 'Mac' ? e.metaKey : e.ctrlKey; + if (isCtrl) { + if (e.deltaY != 0) { + window.vnotex.zoom(e.deltaY < 0); + } + e.preventDefault(); + } + }); + } + + static scroll(p_up) { + let delta = 100; + if (p_up) { + window.scrollBy(0, delta); + } else { + window.scrollBy(0, -delta); + } + } +} + +window.vxEasyAccess = new EasyAccess; diff --git a/src/data/extra/web/js/eventemitter.js b/src/data/extra/web/js/eventemitter.js new file mode 100644 index 00000000..792e64fa --- /dev/null +++ b/src/data/extra/web/js/eventemitter.js @@ -0,0 +1,37 @@ +/* An EventEmitter implementation. */ +class EventEmitter { + constructor() { + this.events = {}; + } + + on(event, listener) { + if (typeof this.events[event] !== 'object') { + this.events[event] = []; + } + this.events[event].push(listener); + return () => this.removeListener(event, listener); + } + + removeListener(event, listener) { + if (typeof this.events[event] === 'object') { + const idx = this.events[event].indexOf(listener); + if (idx > -1) { + this.events[event].splice(idx, 1); + } + } + } + + emit(event, ...args) { + if (typeof this.events[event] === 'object') { + console.log('emit event ' + event); + this.events[event].forEach(listener => listener.apply(this, args)); + } + } + + once(event, listener) { + const remove = this.on(event, (...args) => { + remove(); + listener.apply(this, args); + }); + } +}; diff --git a/src/data/extra/web/js/flowchart.js/README.md b/src/data/extra/web/js/flowchart.js/README.md new file mode 100644 index 00000000..e47a5b3b --- /dev/null +++ b/src/data/extra/web/js/flowchart.js/README.md @@ -0,0 +1,5 @@ +# [flowchart.js](https://github.com/adrai/flowchart.js) +v1.14.0 + +# [Raphael](https://github.com/DmitryBaranovskiy/raphael) +v2.3.0 diff --git a/src/data/extra/web/js/flowchart.js/flowchart.min.js b/src/data/extra/web/js/flowchart.js/flowchart.min.js new file mode 100644 index 00000000..114ba2d9 --- /dev/null +++ b/src/data/extra/web/js/flowchart.js/flowchart.min.js @@ -0,0 +1,8 @@ +// flowchart.js, v1.13.0 +// Copyright (c)2020 Adriano Raiano (adrai). +// Distributed under MIT license +// http://adrai.github.io/flowchart.js + +!function(t,i){if("object"==typeof exports&&"object"==typeof module)module.exports=i(require("Raphael"));else if("function"==typeof define&&define.amd)define(["Raphael"],i);else{var e=i("object"==typeof exports?require("Raphael"):t.Raphael);for(var s in e)("object"==typeof exports?exports:t)[s]=e[s]}}(this,function(t){return function(t){function i(s){if(e[s])return e[s].exports;var n=e[s]={exports:{},id:s,loaded:!1};return t[s].call(n.exports,n,n.exports,i),n.loaded=!0,n.exports}var e={};return i.m=t,i.c=e,i.p="",i(0)}([function(t,i,e){e(9);var s=e(4);e(15);var n={parse:s};"undefined"!=typeof window&&(window.flowchart=n),t.exports=n},function(t,i){function e(t,i){if(!t||"function"==typeof t)return i;var s={};for(var n in i)s[n]=i[n];for(n in t)t[n]&&("object"==typeof s[n]?s[n]=e(s[n],t[n]):s[n]=t[n]);return s}function s(t,i){if("function"==typeof Object.create)t.super_=i,t.prototype=Object.create(i.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}});else{t.super_=i;var e=function(){};e.prototype=i.prototype,t.prototype=new e,t.prototype.constructor=t}}t.exports={defaults:e,inherits:s}},function(t,i,e){function s(t,i,e){this.chart=t,this.group=this.chart.paper.set(),this.symbol=e,this.connectedTo=[],this.symbolType=i.symbolType,this.flowstate=i.flowstate||"future",this.lineStyle=i.lineStyle||{},this.key=i.key||"",this.leftLines=[],this.rightLines=[],this.topLines=[],this.bottomLines=[],this.next_direction=i.next&&i.direction_next?i.direction_next:void 0,this.text=this.chart.paper.text(0,0,i.text),i.key&&(this.text.node.id=i.key+"t"),this.text.node.setAttribute("class",this.getAttr("class")+"t"),this.text.attr({"text-anchor":"start",x:this.getAttr("text-margin"),fill:this.getAttr("font-color"),"font-size":this.getAttr("font-size")});var s=this.getAttr("font"),n=this.getAttr("font-family"),o=this.getAttr("font-weight");s&&this.text.attr({font:s}),n&&this.text.attr({"font-family":n}),o&&this.text.attr({"font-weight":o}),i.link&&this.text.attr("href",i.link),i.function&&(this.text.attr({cursor:"pointer"}),this.text.node.addEventListener("click",function(t){window[i.function](t,i)},!1)),i.target&&this.text.attr("target",i.target);var h=this.getAttr("maxWidth");if(h){for(var r=i.text.split(" "),a="",l=0,p=r.length;lh?"\n"+y:" "+y}this.text.attr("text",a.substring(1))}if(this.group.push(this.text),e){var x=this.getAttr("text-margin");e.attr({fill:this.getAttr("fill"),stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),width:this.text.getBBox().width+2*x,height:this.text.getBBox().height+2*x}),e.node.setAttribute("class",this.getAttr("class")),i.link&&e.attr("href",i.link),i.target&&e.attr("target",i.target),i.function&&(e.node.addEventListener("click",function(t){window[i.function](t,i)},!1),e.attr({cursor:"pointer"})),i.key&&(e.node.id=i.key),this.group.push(e),e.insertBefore(this.text),this.text.attr({y:e.getBBox().height/2}),this.initialize()}}var n=e(3),o=n.drawLine,h=n.checkLineIntersection;s.prototype.getAttr=function(t){if(this.chart){var i,e=this.chart.options?this.chart.options[t]:void 0,s=this.chart.options.symbols?this.chart.options.symbols[this.symbolType][t]:void 0;return this.chart.options.flowstate&&this.chart.options.flowstate[this.flowstate]&&(i=this.chart.options.flowstate[this.flowstate][t]),i||s||e}},s.prototype.initialize=function(){this.group.transform("t"+this.getAttr("line-width")+","+this.getAttr("line-width")),this.width=this.group.getBBox().width,this.height=this.group.getBBox().height},s.prototype.getCenter=function(){return{x:this.getX()+this.width/2,y:this.getY()+this.height/2}},s.prototype.getX=function(){return this.group.getBBox().x},s.prototype.getY=function(){return this.group.getBBox().y},s.prototype.shiftX=function(t){this.group.transform("t"+(this.getX()+t)+","+this.getY())},s.prototype.setX=function(t){this.group.transform("t"+t+","+this.getY())},s.prototype.shiftY=function(t){this.group.transform("t"+this.getX()+","+(this.getY()+t))},s.prototype.setY=function(t){this.group.transform("t"+this.getX()+","+t)},s.prototype.getTop=function(){var t=this.getY(),i=this.getX()+this.width/2;return{x:i,y:t}},s.prototype.getBottom=function(){var t=this.getY()+this.height,i=this.getX()+this.width/2;return{x:i,y:t}},s.prototype.getLeft=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX();return{x:i,y:t}},s.prototype.getRight=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.group.getBBox().width;return{x:i,y:t}},s.prototype.render=function(){if(this.next){var t=this,i=this.getAttr("line-length");if("right"===this.next_direction){var e=this.getRight();this.next.isPositioned||(this.next.setY(e.y-this.next.height/2),this.next.shiftX(this.group.getBBox().x+this.width+i),function e(){for(var s,n=!1,o=0,h=t.chart.symbols.length;ot.next.getCenter().y&&r<=t.next.width/2){n=!0;break}}if(n){if("end"===t.next.symbolType)return;t.next.setX(s.getX()+s.width+i),e()}}(),this.next.isPositioned=!0,this.next.render())}else if("left"===this.next_direction){var s=this.getLeft();this.next.isPositioned||(this.next.setY(s.y-this.next.height/2),this.next.shiftX(-(this.group.getBBox().x+this.width+i)),function e(){for(var s,n=!1,o=0,h=t.chart.symbols.length;ot.next.getCenter().y&&r<=t.next.width/2){n=!0;break}}if(n){if("end"===t.next.symbolType)return;t.next.setX(s.getX()+s.width+i),e()}}(),this.next.isPositioned=!0,this.next.render())}else{var n=this.getBottom();this.next.isPositioned||(this.next.shiftY(this.getY()+this.height+i),this.next.setX(n.x-this.next.width/2),this.next.isPositioned=!0,this.next.render())}}},s.prototype.renderLines=function(){this.next&&(this.next_direction?this.drawLineTo(this.next,this.getAttr("arrow-text")||"",this.next_direction):this.drawLineTo(this.next,this.getAttr("arrow-text")||""))},s.prototype.drawLineTo=function(t,i,e){this.connectedTo.indexOf(t)<0&&this.connectedTo.push(t);var s,n,r=this.getCenter().x,a=this.getCenter().y,l=this.getRight(),p=this.getBottom(),y=this.getTop(),x=this.getLeft(),g=t.getCenter().x,f=t.getCenter().y,c=t.getTop(),d=t.getRight(),m=t.getLeft(),u=r===g,b=a===f,_=af||this===t,w=r>g,L=rk&&(k=c.x);else n=10*Math.max(t.topLines.length,this.bottomLines.length),s=this.leftEnd&&v?o(this.chart,p,[{x:p.x,y:p.y+B/2-n},{x:p.x+(p.x-c.x)/2,y:p.y+B/2-n},{x:p.x+(p.x-c.x)/2,y:c.y-B/2-n},{x:c.x,y:c.y-B/2-n},{x:c.x,y:c.y}],i):o(this.chart,p,[{x:p.x,y:c.y-B/2-n},{x:c.x,y:c.y-B/2-n},{x:c.x,y:c.y}],i),this.bottomLines.push(s),t.topLines.push(s),this.bottomStart=!0,t.topEnd=!0,k=p.x+(p.x-c.x)/2;else n=10*Math.max(t.topLines.length,this.rightLines.length),s=o(this.chart,l,[{x:l.x+B/2,y:l.y-n},{x:l.x+B/2,y:c.y-B/2-n},{x:c.x,y:c.y-B/2-n},{x:c.x,y:c.y}],i),this.rightLines.push(s),t.topLines.push(s),this.rightStart=!0,t.topEnd=!0,k=l.x+B/2;else n=10*Math.max(t.topLines.length,this.rightLines.length),s=o(this.chart,l,[{x:l.x+B/2,y:l.y-n},{x:l.x+B/2,y:c.y-B/2-n},{x:c.x,y:c.y-B/2-n},{x:c.x,y:c.y}],i),this.rightLines.push(s),t.topLines.push(s),this.rightStart=!0,t.topEnd=!0,k=l.x+B/2;else 0===t.rightLines.length&&0===this.leftLines.length?s=o(this.chart,x,d,i):(n=10*Math.max(t.rightLines.length,this.leftLines.length),s=o(this.chart,l,[{x:l.x,y:l.y-n},{x:l.x,y:d.y-n},{x:d.x,y:d.y-n},{x:d.x,y:d.y}],i)),this.leftLines.push(s),t.rightLines.push(s),this.leftStart=!0,t.rightEnd=!0,k=d.x;else 0===t.leftLines.length&&0===this.rightLines.length?s=o(this.chart,l,m,i):(n=10*Math.max(t.leftLines.length,this.rightLines.length),s=o(this.chart,l,[{x:l.x,y:l.y-n},{x:l.x,y:m.y-n},{x:m.x,y:m.y-n},{x:m.x,y:m.y}],i)),this.rightLines.push(s),t.leftLines.push(s),this.rightStart=!0,t.leftEnd=!0,k=m.x;else 0===t.topLines.length&&0===this.bottomLines.length?s=o(this.chart,p,c,i):(n=10*Math.max(t.topLines.length,this.bottomLines.length),s=o(this.chart,p,[{x:c.x,y:c.y-n},{x:c.x,y:c.y}],i)),this.bottomLines.push(s),t.topLines.push(s),this.bottomStart=!0,t.topEnd=!0,k=p.x;if(this.lineStyle[t.key]&&s&&s.attr(this.lineStyle[t.key]),s){for(var O=0,X=this.chart.lines.length;OW?(J=["L",q.x+2*A,I],C.splice($+1,0,J),J=["C",q.x+2*A,I,q.x,I-4*A,q.x-2*A,I],C.splice($+2,0,J),s.attr("path",C)):(J=["L",q.x-2*A,I],C.splice($+1,0,J),J=["C",q.x-2*A,I,q.x,I-4*A,q.x+2*A,I],C.splice($+2,0,J),s.attr("path",C)):I>Q?(J=["L",G,q.y+2*A],C.splice($+1,0,J),J=["C",G,q.y+2*A,G+4*A,q.y,G,q.y-2*A],C.splice($+2,0,J),s.attr("path",C)):(J=["L",G,q.y-2*A],C.splice($+1,0,J),J=["C",G,q.y-2*A,G+4*A,q.y,G,q.y+2*A],C.splice($+2,0,J),s.attr("path",C)),$+=2}}}this.chart.lines.push(s),(void 0===this.chart.minXFromSymbols||this.chart.minXFromSymbols>x.x)&&(this.chart.minXFromSymbols=x.x)}(!this.chart.maxXFromLine||this.chart.maxXFromLine&&k>this.chart.maxXFromLine)&&(this.chart.maxXFromLine=k)},t.exports=s},function(t,i){function e(t,i,e){var s,n,o="M{0},{1}";for(s=2,n=2*e.length+2;sc.x?i.x-(i.x-c.x)/2:c.x-(c.x-i.x)/2,m=i.y>c.y?i.y-(i.y-c.y)/2:c.y-(c.y-i.y)/2,f?(d-=g.getBBox().width/2,m-=t.options["text-margin"]):(d+=t.options["text-margin"],m-=g.getBBox().height/2)):(d=i.x,m=i.y,f?(d+=t.options["text-margin"]/2,m-=t.options["text-margin"]):(d+=t.options["text-margin"]/2,m+=t.options["text-margin"],i.y>c.y&&(m-=2*t.options["text-margin"]))),g.attr({"text-anchor":"start","font-size":t.options["font-size"],fill:t.options["font-color"],x:d,y:m}),l&&g.attr({font:l}),p&&g.attr({"font-family":p}),y&&g.attr({"font-weight":y})}return a}function n(t,i,e,s,n,o,h,r){var a,l,p,y,x,g={x:null,y:null,onLine1:!1,onLine2:!1};return a=(r-o)*(e-t)-(h-n)*(s-i),0===a?g:(l=i-o,p=t-n,y=(h-n)*l-(r-o)*p,x=(e-t)*l-(s-i)*p,l=y/a,p=x/a,g.x=t+l*(e-t),g.y=i+l*(s-i),l>0&&l<1&&(g.onLine1=!0),p>0&&p<1&&(g.onLine2=!0),g)}t.exports={drawPath:e,drawLine:s,checkLineIntersection:n}},function(t,i,e){function s(t){function i(t){var i=t.indexOf("(")+1,e=t.indexOf(")");return i>=0&&e>=0?t.substring(i,e):"{}"}function e(t){var i=t.indexOf("(")+1,e=t.indexOf(")");return i>=0&&e>=0?t.substring(i,e):""}function s(t){var i=t.indexOf("(")+1,e=t.indexOf(")");return i>=0&&e>=0?f.symbols[t.substring(0,i-1)]:f.symbols[t]}function x(t){var i="next",e=t.indexOf("(")+1,s=t.indexOf(")");return e>=0&&s>=0&&(i=F.substring(e,s),i.indexOf(",")<0&&"yes"!==i&&"no"!==i&&(i="next, "+i)),i}function g(t){var i=t.indexOf("(")+1,e=t.indexOf(")"),s=t.substring(i,e);s.indexOf(",")>0&&(s=s.substring(0,s.indexOf(",")));var n=s.split("@");if(n.length>1)return i>=0&&e>=0?n[1]:""}t=t||"",t=t.trim();for(var f={symbols:{},start:null,drawSVG:function(t,i){function e(t){if(g[t.key])return g[t.key];switch(t.symbolType){case"start":g[t.key]=new o(x,t);break;case"end":g[t.key]=new h(x,t);break;case"operation":g[t.key]=new r(x,t);break;case"inputoutput":g[t.key]=new a(x,t);break;case"subroutine":g[t.key]=new l(x,t);break;case"condition":g[t.key]=new p(x,t);break;case"parallel":g[t.key]=new y(x,t);break;default:return new Error("Wrong symbol type!")}return g[t.key]}var s=this;this.diagram&&this.diagram.clean();var x=new n(t,i);this.diagram=x;var g={};!function t(i,n,o){var h=e(i);return s.start===i?x.startWith(h):n&&o&&!n.pathOk&&(n instanceof p?(o.yes===i&&n.yes(h),o.no===i&&n.no(h)):n instanceof y?(o.path1===i&&n.path1(h),o.path2===i&&n.path2(h),o.path3===i&&n.path3(h)):n.then(h)),h.pathOk?h:(h instanceof p?(i.yes&&t(i.yes,h,i),i.no&&t(i.no,h,i)):h instanceof y?(i.path1&&t(i.path1,h,i),i.path2&&t(i.path2,h,i),i.path3&&t(i.path3,h,i)):i.next&&t(i.next,h,i),h)}(this.start),x.render()},clean:function(){this.diagram.clean()},options:function(){return this.diagram.options}},c=[],d=0,m=1,u=t.length;m")<0&&w.indexOf("=>")<0&&w.indexOf("@>")<0?(c[_-1]+="\n"+w,c.splice(_,1),v--):_++}for(;c.length>0;){var L=c.splice(0,1)[0].trim();if(L.indexOf("=>")>=0){var k=L.split("=>"),B={key:k[0].replace(/\(.*\)/,""),symbolType:k[1],text:null,link:null,target:null,flowstate:null,function:null,lineStyle:{},params:{}},A=k[0].match(/\((.*)\)/);if(A&&A.length>1)for(var M=A[1].split(","),O=0;O=0&&(T=B.symbolType.split(": "),B.symbolType=T.shift(),B.text=T.join(": ")),B.text&&B.text.indexOf(":$")>=0?(T=B.text.split(":$"),B.text=T.shift(),B.function=T.join(":$")):B.symbolType.indexOf(":$")>=0?(T=B.symbolType.split(":$"),B.symbolType=T.shift(),B.function=T.join(":$")):B.text&&B.text.indexOf(":>")>=0?(T=B.text.split(":>"),B.text=T.shift(),B.link=T.join(":>")):B.symbolType.indexOf(":>")>=0&&(T=B.symbolType.split(":>"),B.symbolType=T.shift(),B.link=T.join(":>")),B.symbolType.indexOf("\n")>=0&&(B.symbolType=B.symbolType.split("\n")[0]),B.link){var S=B.link.indexOf("[")+1,C=B.link.indexOf("]");S>=0&&C>=0&&(B.target=B.link.substring(S,C),B.link=B.link.substring(0,S-1))}if(B.text&&B.text.indexOf("|")>=0){var Y=B.text.split("|");B.flowstate=Y.pop().trim(),B.text=Y.join("|")}f.symbols[B.key]=B}else if(L.indexOf("->")>=0){var P=g(L);P&&(L=L.replace("@"+P,""));for(var j=L.split("->"),E=0,z=j.length;E=0){var G=N.split(",");N=G[0],V=G[1].trim()}if(f.start||(f.start=$),E+1")>=0)for(var W=L.split("@>"),Q=0,q=W.length;Qs.right_symbol.getCenter().y&&r<=s.right_symbol.width/2){n=!0;break}}if(n){if("end"===s.right_symbol.symbolType)return;s.right_symbol.setX(e.getX()+e.width+t),i()}}(),this.right_symbol.isPositioned=!0,this.right_symbol.render()}}},s.prototype.renderLines=function(){this.yes_symbol&&this.drawLineTo(this.yes_symbol,this.yes_annotation?this.yes_annotation:this.getAttr("yes-text"),this.yes_direction),this.no_symbol&&this.drawLineTo(this.no_symbol,this.no_annotation?this.no_annotation:this.getAttr("no-text"),this.no_direction)},t.exports=s},function(t,i,e){function s(t,i){var e=t.paper.rect(0,0,0,0);i=i||{},n.call(this,t,i,e),this.textMargin=this.getAttr("text-margin"),this.path1_direction="bottom",this.path2_direction="right",this.path3_direction="top",this.params=i.params,"path1"===i.direction_next&&!i[i.direction_next]&&i.next&&(i[i.direction_next]=i.next),"path2"===i.direction_next&&!i[i.direction_next]&&i.next&&(i[i.direction_next]=i.next),"path3"===i.direction_next&&!i[i.direction_next]&&i.next&&(i[i.direction_next]=i.next),i.path1&&i.direction_path1&&i.path2&&!i.direction_path2&&i.path3&&!i.direction_path3?"right"===i.direction_path1?(this.path2_direction="bottom",this.path1_direction="right",this.path3_direction="top"):"top"===i.direction_path1?(this.path2_direction="right",this.path1_direction="top",this.path3_direction="bottom"):"left"===i.direction_path1?(this.path2_direction="right",this.path1_direction="left",this.path3_direction="bottom"):(this.path2_direction="right",this.path1_direction="bottom",this.path3_direction="top"):i.path1&&!i.direction_path1&&i.path2&&i.direction_path2&&i.path3&&!i.direction_path3?"right"===i.direction_path2?(this.path1_direction="bottom",this.path2_direction="right",this.path3_direction="top"):"left"===i.direction_path2?(this.path1_direction="bottom",this.path2_direction="left",this.path3_direction="right"):(this.path1_direction="right",this.path2_direction="bottom",this.path3_direction="top"):i.path1&&!i.direction_path1&&i.path2&&!i.direction_path2&&i.path3&&i.direction_path3?"right"===i.direction_path2?(this.path1_direction="bottom",this.path2_direction="top",this.path3_direction="right"):"left"===i.direction_path2?(this.path1_direction="bottom",this.path2_direction="right",this.path3_direction="left"):(this.path1_direction="right",this.path2_direction="bottom",this.path3_direction="top"):(this.path1_direction=i.direction_path1,this.path2_direction=i.direction_path2,this.path3_direction=i.direction_path3),this.path1_direction=this.path1_direction||"bottom",this.path2_direction=this.path2_direction||"right",this.path3_direction=this.path3_direction||"top",this.initialize()}var n=e(2),o=e(1).inherits;o(s,n),s.prototype.render=function(){this.path1_direction&&(this[this.path1_direction+"_symbol"]=this.path1_symbol),this.path2_direction&&(this[this.path2_direction+"_symbol"]=this.path2_symbol),this.path3_direction&&(this[this.path3_direction+"_symbol"]=this.path3_symbol);var t=this.getAttr("line-length");if(this.bottom_symbol){var i=this.getBottom();this.bottom_symbol.isPositioned||(this.bottom_symbol.shiftY(this.getY()+this.height+t),this.bottom_symbol.setX(i.x-this.bottom_symbol.width/2),this.bottom_symbol.isPositioned=!0,this.bottom_symbol.render())}if(this.top_symbol){var e=this.getTop();this.top_symbol.isPositioned||(this.top_symbol.shiftY(this.getY()-this.top_symbol.height-t),this.top_symbol.setX(e.x+this.top_symbol.width),this.top_symbol.isPositioned=!0,this.top_symbol.render())}var s=this;if(this.left_symbol){var n=this.getLeft();this.left_symbol.isPositioned||(this.left_symbol.setY(n.y-this.left_symbol.height/2),this.left_symbol.shiftX(-(this.group.getBBox().x+this.width+t)),function i(){for(var e,n=!1,o=0,h=s.chart.symbols.length;os.left_symbol.getCenter().y&&r<=s.left_symbol.width/2){n=!0;break}}if(n){if("end"===s.left_symbol.symbolType)return;s.left_symbol.setX(e.getX()+e.width+t),i()}}(),this.left_symbol.isPositioned=!0,this.left_symbol.render())}if(this.right_symbol){var o=this.getRight();this.right_symbol.isPositioned||(this.right_symbol.setY(o.y-this.right_symbol.height/2),this.right_symbol.shiftX(this.group.getBBox().x+this.width+t),function i(){for(var e,n=!1,o=0,h=s.chart.symbols.length;os.right_symbol.getCenter().y&&r<=s.right_symbol.width/2){n=!0;break}}if(n){if("end"===s.right_symbol.symbolType)return;s.right_symbol.setX(e.getX()+e.width+t),i()}}(),this.right_symbol.isPositioned=!0,this.right_symbol.render())}},s.prototype.renderLines=function(){this.path1_symbol&&this.drawLineTo(this.path1_symbol,"",this.path1_direction),this.path2_symbol&&this.drawLineTo(this.path2_symbol,"",this.path2_direction),this.path3_symbol&&this.drawLineTo(this.path3_symbol,"",this.path3_direction)},t.exports=s},function(t,i,e){function s(t,i){i=i||{},this.paper=new n(t),this.options=o(i,h),this.symbols=[],this.lines=[],this.start=null}var n=e(16),o=e(1).defaults,h=e(8),r=e(5),a=e(6);s.prototype.handle=function(t){this.symbols.indexOf(t)<=-1&&this.symbols.push(t);var i=this;return t instanceof r?(t.yes=function(e){return t.yes_symbol=e,t.no_symbol&&(t.pathOk=!0),i.handle(e)},t.no=function(e){return t.no_symbol=e,t.yes_symbol&&(t.pathOk=!0),i.handle(e)}):t instanceof a?(t.path1=function(e){return t.path1_symbol=e,t.path2_symbol&&(t.pathOk=!0),i.handle(e)},t.path2=function(e){return t.path2_symbol=e,t.path3_symbol&&(t.pathOk=!0),i.handle(e)},t.path3=function(e){return t.path3_symbol=e,t.path1_symbol&&(t.pathOk=!0),i.handle(e)}):t.then=function(e){return t.next=e,t.pathOk=!0,i.handle(e)},t},s.prototype.startWith=function(t){return this.start=t,this.handle(t)},s.prototype.render=function(){var t,i,e=0,s=0,n=0,o=0,h=0,r=0,a=0,l=0;for(n=0,o=this.symbols.length;ne&&(e=t.width),t.height>s&&(s=t.height);for(n=0,o=this.symbols.length;nh&&(h=p),y>r&&(r=y);for(n=0,o=this.lines.length;nh&&(h=x),g>r&&(r=g)}var f=this.options.scale,c=this.options["line-width"];this.minXFromSymbols>>0;if(0===e)return-1;var s=0;if(arguments.length>0&&(s=Number(arguments[1]),s!=s?s=0:0!==s&&s!=1/0&&s!=-(1/0)&&(s=(s>0||-1)*Math.floor(Math.abs(s)))),s>=e)return-1;for(var n=s>=0?s:Math.max(e-Math.abs(s),0);n>>0;if(0===e)return-1;var s=e;arguments.length>1&&(s=Number(arguments[1]),s!=s?s=0:0!==s&&s!=1/0&&s!=-(1/0)&&(s=(s>0||-1)*Math.floor(Math.abs(s))));for(var n=s>=0?Math.min(s,e-1):e-Math.abs(s);n>=0;n--)if(n in i&&i[n]===t)return n;return-1}),String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g,"")})},function(t,i,e){function s(t,i){var e=t.paper.rect(0,0,0,0,20);i=i||{},i.text=i.text||"End",n.call(this,t,i,e)}var n=e(2),o=e(1).inherits;o(s,n),t.exports=s},function(t,i,e){function s(t,i){i=i||{},n.call(this,t,i),this.textMargin=this.getAttr("text-margin"),this.text.attr({x:3*this.textMargin});var e=this.text.getBBox().width+4*this.textMargin,s=this.text.getBBox().height+2*this.textMargin,o=this.textMargin,h=s/2,a={x:o,y:h},l=[{x:o-this.textMargin,y:s},{x:o-this.textMargin+e,y:s},{x:o-this.textMargin+e+2*this.textMargin,y:0},{x:o-this.textMargin+2*this.textMargin,y:0},{x:o,y:h}],p=r(t,a,l);p.attr({stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),fill:this.getAttr("fill")}),i.link&&p.attr("href",i.link),i.target&&p.attr("target",i.target),i.key&&(p.node.id=i.key),p.node.setAttribute("class",this.getAttr("class")),this.text.attr({y:p.getBBox().height/2}),this.group.push(p),p.insertBefore(this.text),this.initialize()}var n=e(2),o=e(1).inherits,h=e(3),r=h.drawPath;o(s,n),s.prototype.getLeft=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.textMargin;return{x:i,y:t}},s.prototype.getRight=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.group.getBBox().width-this.textMargin;return{x:i,y:t}},t.exports=s},function(t,i,e){function s(t,i){var e=t.paper.rect(0,0,0,0);i=i||{},n.call(this,t,i,e)}var n=e(2),o=e(1).inherits;o(s,n),t.exports=s},function(t,i,e){function s(t,i){var e=t.paper.rect(0,0,0,0,20);i=i||{},i.text=i.text||"Start",n.call(this,t,i,e)}var n=e(2),o=e(1).inherits;o(s,n),t.exports=s},function(t,i,e){function s(t,i){var e=t.paper.rect(0,0,0,0);i=i||{},n.call(this,t,i,e),e.attr({width:this.text.getBBox().width+4*this.getAttr("text-margin")}),this.text.attr({x:2*this.getAttr("text-margin")});var s=t.paper.rect(0,0,0,0);s.attr({x:this.getAttr("text-margin"),stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),width:this.text.getBBox().width+2*this.getAttr("text-margin"),height:this.text.getBBox().height+2*this.getAttr("text-margin"),fill:this.getAttr("fill")}),i.key&&(s.node.id=i.key+"i");var o=this.getAttr("font"),h=this.getAttr("font-family"),r=this.getAttr("font-weight");o&&s.attr({font:o}),h&&s.attr({"font-family":h}),r&&s.attr({"font-weight":r}),i.link&&s.attr("href",i.link),i.target&&s.attr("target",i.target),this.group.push(s),s.insertBefore(this.text),this.initialize()}var n=e(2),o=e(1).inherits;o(s,n),t.exports=s},function(t,i,e){if("undefined"!=typeof jQuery){var s=e(4);!function(t){function i(t,i){return t==i||Array.isArray(i)&&(i.includes(t)||i.includes(Number(t)))}var e={init:function(i){return this.each(function(){var e=t(this);this.chart=s(e.text()),e.html(""),this.chart.drawSVG(this,i)})},setFlowStateByParam:function(t,e,s){return this.each(function(){var n=this.chart,o=["next","yes","no","path1","path2","path3"];for(var h in n.symbols)if(n.symbols.hasOwnProperty(h)){var r=n.symbols[h],a=r.params[t];if(i(a,e)){r.flowstate=s;for(var l=0;l',(J=K.firstChild).style.behavior="url(#default#VML)",!J||"object"!=typeof J.adj)return e.type=d;K=null}function tt(t){if("function"==typeof t||Object(t)!==t)return t;var e=new t.constructor;for(var r in t)t[o](r)&&(e[r]=tt(t[r]));return e}e.svg=!(e.vml="VML"==e.type),e._Paper=u,e.fn=i=u.prototype=e.prototype,e._id=0,e.is=function(t,e){return"finite"==(e=b.call(e))?!N[o](+t):"array"==e?t instanceof Array:"null"==e&&null===t||e==typeof t&&null!==t||"object"==e&&t===Object(t)||"array"==e&&Array.isArray&&Array.isArray(t)||M.call(t).slice(8,-1).toLowerCase()==e},e.angle=function(t,r,i,n,a,s){if(null==a){var o=t-i,l=r-n;return o||l?(180+180*_.atan2(-l,-o)/S+360)%360:0}return e.angle(t,r,a,s)-e.angle(i,n,a,s)},e.rad=function(t){return t%360*S/180},e.deg=function(t){return Math.round(180*t/S%360*1e3)/1e3},e.snapTo=function(t,r,i){if(i=e.is(i,"finite")?i:10,e.is(t,A)){for(var n=t.length;n--;)if(B(t[n]-r)<=i)return t[n]}else{var a=r%(t=+t);if(at-i)return r-a+t}return r};var et,rt;e.createUUID=(et=/[xy]/g,rt=function(t){var e=16*_.random()|0;return("x"==t?e:3&e|8).toString(16)},function(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(et,rt).toUpperCase()});e.setWindow=function(r){t("raphael.setWindow",e,l.win,r),l.win=r,l.doc=l.win.document,e._engine.initWin&&e._engine.initWin(l.win)};var it=function(t){if(e.vml){var r,i=/^\s+|\s+$/g;try{var n=new ActiveXObject("htmlfile");n.write(""),n.close(),r=n.body}catch(t){r=createPopup().document.body}var a=r.createTextRange();it=ht(function(t){try{r.style.color=x(t).replace(i,d);var e=a.queryCommandValue("ForeColor");return"#"+("000000"+(e=(255&e)<<16|65280&e|(16711680&e)>>>16).toString(16)).slice(-6)}catch(t){return"none"}})}else{var s=l.doc.createElement("i");s.title="Raphaël Colour Picker",s.style.display="none",l.doc.body.appendChild(s),it=ht(function(t){return s.style.color=t,l.doc.defaultView.getComputedStyle(s,d).getPropertyValue("color")})}return it(t)},nt=function(){return"hsb("+[this.h,this.s,this.b]+")"},at=function(){return"hsl("+[this.h,this.s,this.l]+")"},st=function(){return this.hex},ot=function(t,r,i){if(null==r&&e.is(t,"object")&&"r"in t&&"g"in t&&"b"in t&&(i=t.b,r=t.g,t=t.r),null==r&&e.is(t,"string")){var n=e.getRGB(t);t=n.r,r=n.g,i=n.b}return(t>1||r>1||i>1)&&(t/=255,r/=255,i/=255),[t,r,i]},lt=function(t,r,i,n){var a={r:t*=255,g:r*=255,b:i*=255,hex:e.rgb(t,r,i),toString:st};return e.is(n,"finite")&&(a.opacity=n),a};function ht(t,e,r){return function i(){var n=Array.prototype.slice.call(arguments,0),a=n.join("␀"),s=i.cache=i.cache||{},l=i.count=i.count||[];return s[o](a)?(function(t,e){for(var r=0,i=t.length;r=1e3&&delete s[l.shift()],l.push(a),s[a]=t[c](e,n),r?r(s[a]):s[a])}}e.color=function(t){var r;return e.is(t,"object")&&"h"in t&&"s"in t&&"b"in t?(r=e.hsb2rgb(t),t.r=r.r,t.g=r.g,t.b=r.b,t.hex=r.hex):e.is(t,"object")&&"h"in t&&"s"in t&&"l"in t?(r=e.hsl2rgb(t),t.r=r.r,t.g=r.g,t.b=r.b,t.hex=r.hex):(e.is(t,"string")&&(t=e.getRGB(t)),e.is(t,"object")&&"r"in t&&"g"in t&&"b"in t?(r=e.rgb2hsl(t),t.h=r.h,t.s=r.s,t.l=r.l,r=e.rgb2hsb(t),t.v=r.b):(t={hex:"none"}).r=t.g=t.b=t.h=t.s=t.v=t.l=-1),t.toString=st,t},e.hsb2rgb=function(t,e,r,i){var n,a,s,o,l;return this.is(t,"object")&&"h"in t&&"s"in t&&"b"in t&&(r=t.b,e=t.s,i=t.o,t=t.h),o=(l=r*e)*(1-B((t=(t*=360)%360/60)%2-1)),n=a=s=r-l,lt(n+=[l,o,0,0,o,l][t=~~t],a+=[o,l,l,o,0,0][t],s+=[0,0,o,l,l,o][t],i)},e.hsl2rgb=function(t,e,r,i){var n,a,s,o,l;return this.is(t,"object")&&"h"in t&&"s"in t&&"l"in t&&(r=t.l,e=t.s,t=t.h),(t>1||e>1||r>1)&&(t/=360,e/=100,r/=100),o=(l=2*e*(r<.5?r:1-r))*(1-B((t=(t*=360)%360/60)%2-1)),n=a=s=r-l/2,lt(n+=[l,o,0,0,o,l][t=~~t],a+=[o,l,l,o,0,0][t],s+=[0,0,o,l,l,o][t],i)},e.rgb2hsb=function(t,e,r){var i,n;return t=(r=ot(t,e,r))[0],e=r[1],r=r[2],{h:((0==(n=(i=w(t,e,r))-k(t,e,r))?null:i==t?(e-r)/n:i==e?(r-t)/n+2:(t-e)/n+4)+360)%6*60/360,s:0==n?0:n/i,b:i,toString:nt}},e.rgb2hsl=function(t,e,r){var i,n,a,s;return t=(r=ot(t,e,r))[0],e=r[1],r=r[2],i=((n=w(t,e,r))+(a=k(t,e,r)))/2,{h:((0==(s=n-a)?null:n==t?(e-r)/s:n==e?(r-t)/s+2:(t-e)/s+4)+360)%6*60/360,s:0==s?0:i<.5?s/(2*i):s/(2-2*i),l:i,toString:at}},e._path2string=function(){return this.join(",").replace(O,"$1")};e._preload=function(t,e){var r=l.doc.createElement("img");r.style.cssText="position:absolute;left:-9999em;top:-9999em",r.onload=function(){e.call(this),this.onload=null,l.doc.body.removeChild(this)},r.onerror=function(){l.doc.body.removeChild(this)},l.doc.body.appendChild(r),r.src=t};function ut(){return this.hex}function ct(t,e){for(var r=[],i=0,n=t.length;n-2*!e>i;i+=2){var a=[{x:+t[i-2],y:+t[i-1]},{x:+t[i],y:+t[i+1]},{x:+t[i+2],y:+t[i+3]},{x:+t[i+4],y:+t[i+5]}];e?i?n-4==i?a[3]={x:+t[0],y:+t[1]}:n-2==i&&(a[2]={x:+t[0],y:+t[1]},a[3]={x:+t[2],y:+t[3]}):a[0]={x:+t[n-2],y:+t[n-1]}:n-4==i?a[3]=a[2]:i||(a[0]={x:+t[i],y:+t[i+1]}),r.push(["C",(-a[0].x+6*a[1].x+a[2].x)/6,(-a[0].y+6*a[1].y+a[2].y)/6,(a[1].x+6*a[2].x-a[3].x)/6,(a[1].y+6*a[2].y-a[3].y)/6,a[2].x,a[2].y])}return r}e.getRGB=ht(function(t){if(!t||(t=x(t)).indexOf("-")+1)return{r:-1,g:-1,b:-1,hex:"none",error:1,toString:ut};if("none"==t)return{r:-1,g:-1,b:-1,hex:"none",toString:ut};!q[o](t.toLowerCase().substring(0,2))&&"#"!=t.charAt()&&(t=it(t));var r,i,n,a,s,l,h=t.match(E);return h?(h[2]&&(n=F(h[2].substring(5),16),i=F(h[2].substring(3,5),16),r=F(h[2].substring(1,3),16)),h[3]&&(n=F((s=h[3].charAt(3))+s,16),i=F((s=h[3].charAt(2))+s,16),r=F((s=h[3].charAt(1))+s,16)),h[4]&&(l=h[4][v](D),r=z(l[0]),"%"==l[0].slice(-1)&&(r*=2.55),i=z(l[1]),"%"==l[1].slice(-1)&&(i*=2.55),n=z(l[2]),"%"==l[2].slice(-1)&&(n*=2.55),"rgba"==h[1].toLowerCase().slice(0,4)&&(a=z(l[3])),l[3]&&"%"==l[3].slice(-1)&&(a/=100)),h[5]?(l=h[5][v](D),r=z(l[0]),"%"==l[0].slice(-1)&&(r*=2.55),i=z(l[1]),"%"==l[1].slice(-1)&&(i*=2.55),n=z(l[2]),"%"==l[2].slice(-1)&&(n*=2.55),("deg"==l[0].slice(-3)||"°"==l[0].slice(-1))&&(r/=360),"hsba"==h[1].toLowerCase().slice(0,4)&&(a=z(l[3])),l[3]&&"%"==l[3].slice(-1)&&(a/=100),e.hsb2rgb(r,i,n,a)):h[6]?(l=h[6][v](D),r=z(l[0]),"%"==l[0].slice(-1)&&(r*=2.55),i=z(l[1]),"%"==l[1].slice(-1)&&(i*=2.55),n=z(l[2]),"%"==l[2].slice(-1)&&(n*=2.55),("deg"==l[0].slice(-3)||"°"==l[0].slice(-1))&&(r/=360),"hsla"==h[1].toLowerCase().slice(0,4)&&(a=z(l[3])),l[3]&&"%"==l[3].slice(-1)&&(a/=100),e.hsl2rgb(r,i,n,a)):((h={r:r,g:i,b:n,toString:ut}).hex="#"+(16777216|n|i<<8|r<<16).toString(16).slice(1),e.is(a,"finite")&&(h.opacity=a),h)):{r:-1,g:-1,b:-1,hex:"none",error:1,toString:ut}},e),e.hsb=ht(function(t,r,i){return e.hsb2rgb(t,r,i).hex}),e.hsl=ht(function(t,r,i){return e.hsl2rgb(t,r,i).hex}),e.rgb=ht(function(t,e,r){function i(t){return t+.5|0}return"#"+(16777216|i(r)|i(e)<<8|i(t)<<16).toString(16).slice(1)}),e.getColor=function(t){var e=this.getColor.start=this.getColor.start||{h:0,s:1,b:t||.75},r=this.hsb2rgb(e.h,e.s,e.b);return e.h+=.075,e.h>1&&(e.h=0,e.s-=.2,e.s<=0&&(this.getColor.start={h:0,s:1,b:e.b})),r.hex},e.getColor.reset=function(){delete this.start},e.parsePathString=function(t){if(!t)return null;var r=ft(t);if(r.arr)return mt(r.arr);var i={a:7,c:6,h:1,l:2,m:2,r:4,q:4,s:4,t:2,v:1,z:0},n=[];return e.is(t,A)&&e.is(t[0],A)&&(n=mt(t)),n.length||x(t).replace(V,function(t,e,r){var a=[],s=e.toLowerCase();if(r.replace(Y,function(t,e){e&&a.push(+e)}),"m"==s&&a.length>2&&(n.push([e][f](a.splice(0,2))),s="l",e="m"==e?"l":"L"),"r"==s)n.push([e][f](a));else for(;a.length>=i[s]&&(n.push([e][f](a.splice(0,i[s]))),i[s]););}),n.toString=e._path2string,r.arr=mt(n),n},e.parseTransformString=ht(function(t){if(!t)return null;var r=[];return e.is(t,A)&&e.is(t[0],A)&&(r=mt(t)),r.length||x(t).replace(W,function(t,e,i){var n=[];b.call(e);i.replace(Y,function(t,e){e&&n.push(+e)}),r.push([e][f](n))}),r.toString=e._path2string,r},this,function(t){if(!t)return t;for(var e=[],r=0;r1?1:l<0?0:l)/2,u=[-.1252,.1252,-.3678,.3678,-.5873,.5873,-.7699,.7699,-.9041,.9041,-.9816,.9816],c=[.2491,.2491,.2335,.2335,.2032,.2032,.1601,.1601,.1069,.1069,.0472,.0472],f=0,p=0;p<12;p++){var d=h*u[p]+h,g=pt(d,t,r,n,s),x=pt(d,e,i,a,o),v=g*g+x*x;f+=c[p]*_.sqrt(v)}return h*f}function gt(t,e,r,i,n,a,s,o){if(!(w(t,r)w(n,s)||w(e,i)w(a,o))){var l=(t-r)*(a-o)-(e-i)*(n-s);if(l){var h=((t*i-e*r)*(n-s)-(t-r)*(n*o-a*s))/l,u=((t*i-e*r)*(a-o)-(e-i)*(n*o-a*s))/l,c=+h.toFixed(2),f=+u.toFixed(2);if(!(c<+k(t,r).toFixed(2)||c>+w(t,r).toFixed(2)||c<+k(n,s).toFixed(2)||c>+w(n,s).toFixed(2)||f<+k(e,i).toFixed(2)||f>+w(e,i).toFixed(2)||f<+k(a,o).toFixed(2)||f>+w(a,o).toFixed(2)))return{x:h,y:u}}}}function xt(t,r,i){var n=e.bezierBBox(t),a=e.bezierBBox(r);if(!e.isBBoxIntersect(n,a))return i?0:[];for(var s=dt.apply(0,t),o=dt.apply(0,r),l=w(~~(s/5),1),h=w(~~(o/5),1),u=[],c=[],f={},p=i?0:[],d=0;d=0&&T<=1.001&&A>=0&&A<=1.001&&(i?p++:p.push({x:S.x,y:S.y,t1:k(T,1),t2:k(A,1)}))}}return p}function vt(t,r,i){t=e._path2curve(t),r=e._path2curve(r);for(var n,a,s,o,l,h,u,c,f,p,d=i?0:[],g=0,x=t.length;gy||v=t.x&&e<=t.x2&&r>=t.y&&r<=t.y2},e.isBBoxIntersect=function(t,r){var i=e.isPointInsideBBox;return i(r,t.x,t.y)||i(r,t.x2,t.y)||i(r,t.x,t.y2)||i(r,t.x2,t.y2)||i(t,r.x,r.y)||i(t,r.x2,r.y)||i(t,r.x,r.y2)||i(t,r.x2,r.y2)||(t.xr.x||r.xt.x)&&(t.yr.y||r.yt.y)},e.pathIntersection=function(t,e){return vt(t,e)},e.pathIntersectionNumber=function(t,e){return vt(t,e,1)},e.isPointInsidePath=function(t,r,i){var n=e.pathBBox(t);return e.isPointInsideBBox(n,r,i)&&vt(t,[["M",r,i],["H",n.x2+10]],1)%2==1},e._removedFactory=function(e){return function(){t("raphael.log",null,"Raphaël: you are calling to method “"+e+"” of removed object",e)}};var yt=e.pathBBox=function(t){var e=ft(t);if(e.bbox)return tt(e.bbox);if(!t)return{x:0,y:0,width:0,height:0,x2:0,y2:0};for(var r,i=0,n=0,a=[],s=[],o=0,l=(t=Tt(t)).length;o1&&(r*=m=_.sqrt(m),i*=m);var b=r*r,w=i*i,k=(a==s?-1:1)*_.sqrt(B((b*w-b*y*y-w*x*x)/(b*y*y+w*x*x))),C=k*r*y/i+(t+o)/2,T=k*-i*x/r+(e+l)/2,A=_.asin(((e-T)/i).toFixed(9)),M=_.asin(((l-T)/i).toFixed(9));(A=tM&&(A-=2*S),!s&&M>A&&(M-=2*S)}var E=M-A;if(B(E)>c){var N=M,L=o,P=l;M=A+c*(s&&M>A?1:-1),o=C+r*_.cos(M),l=T+i*_.sin(M),d=Bt(o,l,r,i,n,0,s,L,P,[M,N,C,T])}E=M-A;var z=_.cos(A),F=_.sin(A),R=_.cos(M),j=_.sin(M),I=_.tan(E/4),D=4/3*r*I,q=4/3*i*I,O=[t,e],V=[t+D*F,e-q*z],W=[o+D*j,l-q*R],Y=[o,l];if(V[0]=2*O[0]-V[0],V[1]=2*O[1]-V[1],h)return[V,W,Y][f](d);for(var G=[],H=0,X=(d=[V,W,Y][f](d).join()[v](",")).length;H"1e12"&&(p=.5),B(d)>"1e12"&&(d=.5),p>0&&p<1&&(l=Ct(t,e,r,i,n,a,s,o,p),x.push(l.x),g.push(l.y)),d>0&&d<1&&(l=Ct(t,e,r,i,n,a,s,o,d),x.push(l.x),g.push(l.y)),h=a-2*i+e-(o-2*a+i),f=e-i,p=(-(u=2*(i-e)-2*(a-i))+_.sqrt(u*u-4*h*f))/2/h,d=(-u-_.sqrt(u*u-4*h*f))/2/h,B(p)>"1e12"&&(p=.5),B(d)>"1e12"&&(d=.5),p>0&&p<1&&(l=Ct(t,e,r,i,n,a,s,o,p),x.push(l.x),g.push(l.y)),d>0&&d<1&&(l=Ct(t,e,r,i,n,a,s,o,d),x.push(l.x),g.push(l.y)),{min:{x:k[c](0,x),y:k[c](0,g)},max:{x:w[c](0,x),y:w[c](0,g)}}}),Tt=e._path2curve=ht(function(t,e){var r=!e&&ft(t);if(!e&&r.curve)return mt(r.curve);for(var i=_t(t),n=e&&_t(e),a={x:0,y:0,bx:0,by:0,X:0,Y:0,qx:null,qy:null},s={x:0,y:0,bx:0,by:0,X:0,Y:0,qx:null,qy:null},o=function(t,e,r){var i,n;if(!t)return["C",e.x,e.y,e.x,e.y,e.x,e.y];switch(!(t[0]in{T:1,Q:1})&&(e.qx=e.qy=null),t[0]){case"M":e.X=t[1],e.Y=t[2];break;case"A":t=["C"][f](Bt[c](0,[e.x,e.y][f](t.slice(1))));break;case"S":"C"==r||"S"==r?(i=2*e.x-e.bx,n=2*e.y-e.by):(i=e.x,n=e.y),t=["C",i,n][f](t.slice(1));break;case"T":"Q"==r||"T"==r?(e.qx=2*e.x-e.qx,e.qy=2*e.y-e.qy):(e.qx=e.x,e.qy=e.y),t=["C"][f](kt(e.x,e.y,e.qx,e.qy,t[1],t[2]));break;case"Q":e.qx=t[1],e.qy=t[2],t=["C"][f](kt(e.x,e.y,t[1],t[2],t[3],t[4]));break;case"L":t=["C"][f](wt(e.x,e.y,t[1],t[2]));break;case"H":t=["C"][f](wt(e.x,e.y,t[1],e.y));break;case"V":t=["C"][f](wt(e.x,e.y,e.x,t[1]));break;case"Z":t=["C"][f](wt(e.x,e.y,e.X,e.Y))}return t},l=function(t,e){if(t[e].length>7){t[e].shift();for(var r=t[e];r.length;)u[e]="A",n&&(p[e]="A"),t.splice(e++,0,["C"][f](r.splice(0,6)));t.splice(e,1),v=w(i.length,n&&n.length||0)}},h=function(t,e,r,a,s){t&&e&&"M"==t[s][0]&&"M"!=e[s][0]&&(e.splice(s,0,["M",a.x,a.y]),r.bx=0,r.by=0,r.x=t[s][1],r.y=t[s][2],v=w(i.length,n&&n.length||0))},u=[],p=[],d="",g="",x=0,v=w(i.length,n&&n.length||0);x.01;)h=dt(t,e,r,i,n,a,s,o,c+=(hn){if(r&&!f.start){if(c+=["C"+(u=Xt(s,o,l[1],l[2],l[3],l[4],l[5],l[6],n-p)).start.x,u.start.y,u.m.x,u.m.y,u.x,u.y],a)return c;f.start=c,c=["M"+u.x,u.y+"C"+u.n.x,u.n.y,u.end.x,u.end.y,l[5],l[6]].join(),p+=h,s=+l[5],o=+l[6];continue}if(!t&&!r)return{x:(u=Xt(s,o,l[1],l[2],l[3],l[4],l[5],l[6],n-p)).x,y:u.y,alpha:u.alpha}}p+=h,s=+l[5],o=+l[6]}c+=l.shift()+l}return f.end=c,(u=t?p:r?f:e.findDotsAtSegment(s,o,l[0],l[1],l[2],l[3],l[4],l[5],1)).alpha&&(u={x:u.x,y:u.y,alpha:u.alpha}),u}},$t=Ut(1),Zt=Ut(),Qt=Ut(0,1);e.getTotalLength=$t,e.getPointAtLength=Zt,e.getSubpath=function(t,e,r){if(this.getTotalLength(t)-r<1e-6)return Qt(t,e).end;var i=Qt(t,r,1);return e?Qt(i,e).end:i},Wt.getTotalLength=function(){var t=this.getPath();if(t)return this.node.getTotalLength?this.node.getTotalLength():$t(t)},Wt.getPointAtLength=function(t){var e=this.getPath();if(e)return Zt(e,t)},Wt.getPath=function(){var t,r=e._getPath[this.type];if("text"!=this.type&&"set"!=this.type)return r&&(t=r(this)),t},Wt.getSubpath=function(t,r){var i=this.getPath();if(i)return e.getSubpath(i,t,r)};var Jt=e.easing_formulas={linear:function(t){return t},"<":function(t){return C(t,1.7)},">":function(t){return C(t,.48)},"<>":function(t){var e=.48-t/1.04,r=_.sqrt(.1734+e*e),i=r-e,n=-r-e,a=C(B(i),1/3)*(i<0?-1:1)+C(B(n),1/3)*(n<0?-1:1)+.5;return 3*(1-a)*a*a+a*a*a},backIn:function(t){var e=1.70158;return t*t*((e+1)*t-e)},backOut:function(t){var e=1.70158;return(t-=1)*t*((e+1)*t+e)+1},elastic:function(t){return t==!!t?t:C(2,-10*t)*_.sin(2*S*(t-.075)/.3)+1},bounce:function(t){var e=7.5625,r=2.75;return t<1/r?e*t*t:t<2/r?e*(t-=1.5/r)*t+.75:t<2.5/r?e*(t-=2.25/r)*t+.9375:e*(t-=2.625/r)*t+.984375}};Jt.easeIn=Jt["ease-in"]=Jt["<"],Jt.easeOut=Jt["ease-out"]=Jt[">"],Jt.easeInOut=Jt["ease-in-out"]=Jt["<>"],Jt["back-in"]=Jt.backIn,Jt["back-out"]=Jt.backOut;var Kt=[],te=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){setTimeout(t,16)},ee=function(){for(var r=+new Date,i=0;i1&&!n.next){for(s in d)d[o](s)&&(y[s]=n.totalOrigin[s]);n.el.attr(y),ae(n.anim,n.el,n.anim.percents[0],null,n.totalOrigin,n.repeat-1)}n.next&&!n.stop&&ae(n.anim,n.el,n.next,null,n.totalOrigin,n.repeat)}}}Kt.length&&te(ee)},re=function(t){return t>255?255:t<0?0:t};function ie(t,e,r,i,n,a){var s=3*e,o=3*(i-e)-s,l=1-s-o,h=3*r,u=3*(n-r)-h,c=1-h-u;function f(t){return((l*t+o)*t+s)*t}return function(t,e){var r=function(t,e){var r,i,n,a,h,u;for(n=t,u=0;u<8;u++){if(a=f(n)-t,B(a)i)return i;for(;ra?r=n:i=n,n=(i-r)/2+r}return n}(t,e);return((c*r+u)*r+h)*r}(t,1/(200*a))}function ne(t,e){var r=[],i={};if(this.ms=e,this.times=1,t){for(var n in t)t[o](n)&&(i[z(n)]=t[n],r.push(z(n)));r.sort(H)}this.anim=i,this.top=r[r.length-1],this.percents=r}function ae(r,i,a,s,l,h){a=z(a);var u,c,p,d,g,y,m=r.ms,b={},_={},w={};if(s)for(B=0,C=Kt.length;Bs*r.top){a=r.percents[B],g=r.percents[B-1]||0,m=m/r.top*(a-g),d=r.percents[B+1],u=r.anim[a];break}s&&i.attr(r.anim[r.percents[B]])}if(u){if(c)c.initstatus=s,c.start=new Date-c.ms*s;else{for(var S in u)if(u[o](S)&&(I[o](S)||i.paper.customAttributes[o](S)))switch(b[S]=i.attr(S),null==b[S]&&(b[S]=j[S]),_[S]=u[S],I[S]){case T:w[S]=(_[S]-b[S])/m;break;case"colour":b[S]=e.getRGB(b[S]);var A=e.getRGB(_[S]);w[S]={r:(A.r-b[S].r)/m,g:(A.g-b[S].g)/m,b:(A.b-b[S].b)/m};break;case"path":var M=Tt(b[S],_[S]),E=M[1];for(b[S]=M[0],w[S]=[],B=0,C=b[S].length;Bh&&(h=c)}!t[h+="%"].callback&&(t[h].callback=n)}return new ne(t,r)},Wt.animate=function(t,r,i,n){if(this.removed)return n&&n.call(this),this;var a=t instanceof ne?t:e.animation(t,r,i,n);return ae(a,this,a.percents[0],null,this.attr()),this},Wt.setTime=function(t,e){return t&&null!=e&&this.status(t,k(e,t.ms)/t.ms),this},Wt.status=function(t,e){var r,i,n=[],a=0;if(null!=e)return ae(t,this,-1,k(e,1)),this;for(r=Kt.length;a1)for(var i=0,n=r.length;i.5)-1;l(f-.5,2)+l(p-.5,2)>.25&&(p=a.sqrt(.25-l(f-.5,2))*n+.5)&&.5!=p&&(p=p.toFixed(5)-1e-5*n)}return c})).split(/\s*\-\s*/),"linear"==h){var b=n.shift();if(b=-i(b),isNaN(b))return null;var _=[0,0,a.cos(t.rad(b)),a.sin(t.rad(b))],w=1/(s(o(_[2]),o(_[3]))||1);_[2]*=w,_[3]*=w,_[2]<0&&(_[0]=-_[2],_[2]=0),_[3]<0&&(_[1]=-_[3],_[3]=0)}var k=t._parseDots(n);if(!k)return null;if(u=u.replace(/[\(\)\s,\xb0#]/g,"_"),e.gradient&&u!=e.gradient.id&&(g.defs.removeChild(e.gradient),delete e.gradient),!e.gradient){m=x(h+"Gradient",{id:u}),e.gradient=m,x(m,"radial"==h?{fx:f,fy:p}:{x1:_[0],y1:_[1],x2:_[2],y2:_[3],gradientTransform:e.matrix.invert()}),g.defs.appendChild(m);for(var B=0,C=k.length;B1?P.opacity/100:P.opacity});case"stroke":P=t.getRGB(g),l.setAttribute(d,P.hex),"stroke"==d&&P[e]("opacity")&&x(l,{"stroke-opacity":P.opacity>1?P.opacity/100:P.opacity}),"stroke"==d&&i._.arrows&&("startString"in i._.arrows&&b(i,i._.arrows.startString),"endString"in i._.arrows&&b(i,i._.arrows.endString,1));break;case"gradient":("circle"==i.type||"ellipse"==i.type||"r"!=r(g).charAt())&&v(i,g);break;case"opacity":u.gradient&&!u[e]("stroke-opacity")&&x(l,{"stroke-opacity":g>1?g/100:g});case"fill-opacity":if(u.gradient){(z=t._g.doc.getElementById(l.getAttribute("fill").replace(/^url\(#|\)$/g,c)))&&(F=z.getElementsByTagName("stop"),x(F[F.length-1],{"stop-opacity":g}));break}default:"font-size"==d&&(g=n(g,10)+"px");var R=d.replace(/(\-.)/g,function(t){return t.substring(1).toUpperCase()});l.style[R]=g,i._.dirty=1,l.setAttribute(d,g)}}B(i,a),l.style.visibility=f},B=function(i,a){if("text"==i.type&&(a[e]("text")||a[e]("font")||a[e]("font-size")||a[e]("x")||a[e]("y"))){var s=i.attrs,o=i.node,l=o.firstChild?n(t._g.doc.defaultView.getComputedStyle(o.firstChild,c).getPropertyValue("font-size"),10):10;if(a[e]("text")){for(s.text=a.text;o.firstChild;)o.removeChild(o.firstChild);for(var h,u=r(a.text).split("\n"),f=[],p=0,d=u.length;p"));var U=H.getBoundingClientRect();T.W=g.w=(U.right-U.left)/100,T.H=g.h=(U.bottom-U.top)/100,T.X=g.x,T.Y=g.y+T.H/2,("x"in l||"y"in l)&&(T.path.v=t.format("m{0},{1}l{2},{1}",a(g.x*y),a(g.y*y),a(g.x*y)+1));for(var $=["x","y","text","font","font-family","font-weight","font-style","font-size"],Z=0,Q=$.length;Z.25&&(r=n.sqrt(.25-o(e-.5,2))*(2*(r>.5)-1)+.5),h=e+c+r),f})).split(/\s*\-\s*/),"linear"==l){var u=a.shift();if(u=-i(u),isNaN(u))return null}var p=t._parseDots(a);if(!p)return null;if(e=e.shape||e.node,p.length){e.removeChild(s),s.on=!0,s.method="none",s.color=p[0].color,s.color2=p[p.length-1].color;for(var d=[],g=0,x=p.length;g')}}catch(t){k=function(t){return e.createElement("<"+t+' xmlns="urn:schemas-microsoft.com:vml" class="rvml">')}}},t._engine.initWin(t._g.win),t._engine.create=function(){var e=t._getContainer.apply(0,arguments),r=e.container,i=e.height,n=e.width,a=e.x,s=e.y;if(!r)throw new Error("VML container not found.");var o=new t._Paper,l=o.canvas=t._g.doc.createElement("div"),h=l.style;return a=a||0,s=s||0,n=n||512,i=i||342,o.width=n,o.height=i,n==+n&&(n+="px"),i==+i&&(i+="px"),o.coordsize=216e5+c+216e5,o.coordorigin="0 0",o.span=t._g.doc.createElement("span"),o.span.style.cssText="position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;",l.appendChild(o.span),h.cssText=t.format("top:0;left:0;width:{0};height:{1};display:inline-block;position:relative;clip:rect(0 {0} {1} 0);overflow:hidden",n,i),1==r?(t._g.doc.body.appendChild(l),h.left=a+"px",h.top=s+"px",h.position="absolute"):r.firstChild?r.insertBefore(l,r.firstChild):r.appendChild(l),o.renderfix=function(){},o},t.prototype.clear=function(){t.eve("raphael.clear",this),this.canvas.innerHTML=f,this.span=t._g.doc.createElement("span"),this.span.style.cssText="position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;display:inline;",this.canvas.appendChild(this.span),this.bottom=this.top=null},t.prototype.remove=function(){for(var e in t.eve("raphael.remove",this),this.canvas.parentNode.removeChild(this.canvas),this)this[e]="function"==typeof this[e]?t._removedFactory(e):null;return!0};var M=t.st;for(var E in A)A[e](E)&&!M[e](E)&&(M[E]=function(t){return function(){var e=arguments;return this.forEach(function(r){r[t].apply(r,e)})}}(E))}}.apply(e,i))||(t.exports=n)}])}); \ No newline at end of file diff --git a/src/data/extra/web/js/flowchartjs.js b/src/data/extra/web/js/flowchartjs.js new file mode 100644 index 00000000..1218be25 --- /dev/null +++ b/src/data/extra/web/js/flowchartjs.js @@ -0,0 +1,113 @@ +// Does not support dynamically libraries loading. +class FlowchartJs extends GraphRenderer { + constructor() { + super(); + + this.name = 'flowchartjs'; + + this.graphDivClass = 'vx-flowchartjs-graph'; + + this.langs = ['flow', 'flowchart']; + } + + // Render @p_node as Flowchart.js graph. + // Return true on success. + renderOne(p_node, p_idx) { + let graph = null; + try { + graph = flowchart.parse(p_node.textContent); + } catch (p_err) { + console.error('failed to render Flowchart.js', p_err); + this.finishRenderingOne(); + return false; + } + + if (!graph) { + this.finishRenderingOne(); + return false; + } + + // Create a div container. + let graphDiv = document.createElement('div'); + graphDiv.id = 'vx-flowchartjs-graph-' + p_idx; + graphDiv.classList.add(this.graphDivClass); + + Utils.checkSourceLine(p_node, graphDiv); + + let childNode = p_node; + let parentNode = p_node.parentNode; + if (parentNode.tagName.toLowerCase() == 'pre') { + childNode = parentNode; + parentNode = parentNode.parentNode; + } + parentNode.replaceChild(graphDiv, childNode); + + // Draw on it after adding div to page. + try { + graph.drawSVG(graphDiv.id); + window.vxImageViewer.setupSVGToView(graphDiv.children[0], true); + } catch (p_err) { + console.error('failed to draw Flowchart.js SVG', p_err); + parentNode.replaceChild(childNode, graphDiv); + this.finishRenderingOne(); + return false; + } + + this.finishRenderingOne(); + return true; + } + + // Render a graph from @p_text. + // Will append a div to @p_container and return the div. + // p_callback(graphDiv). + renderText(p_container, p_text, p_idx, p_callback) { + let graph = null; + + try { + graph = flowchart.parse(p_text); + } catch (p_err) { + console.error('failed to render Flowchart.js', p_err); + graph = null; + } + + if (!graph) { + p_callback(null); + return; + } + + // Create a div container. + let graphDiv = document.createElement('div'); + graphDiv.id = 'vx-flowchartjs-graph-stand-alone-' + p_idx; + + p_container.appendChild(graphDiv); + + // Draw on it after adding div to page. + try { + graph.drawSVG(graphDiv.id); + } catch (p_err) { + console.error('failed to draw Flowchart.js SVG', p_err); + p_container.removeChild(graphDiv); + return null; + } + + this.fixStandAloneGraph(graphDiv.firstElementChild); + + p_callback(graphDiv); + } + + // Raphael will reuse some global unique marker. + // We need to insert it into the graph to make it stand-alone. + // @p_graph: the node. + fixStandAloneGraph(p_graph) { + let markerBlock = document.getElementById('raphael-marker-block'); + if (!p_graph.contains(markerBlock)) { + let clonedMarkerBlock = markerBlock.cloneNode(true); + let defs = p_graph.getElementsByTagName('defs'); + if (defs.length > 0) { + defs[0].insertAdjacentElement('afterbegin', clonedMarkerBlock); + } + } + } +} + +window.vnotex.registerWorker(new FlowchartJs()); diff --git a/src/data/extra/web/js/graphcache.js b/src/data/extra/web/js/graphcache.js new file mode 100644 index 00000000..1925743a --- /dev/null +++ b/src/data/extra/web/js/graphcache.js @@ -0,0 +1,19 @@ +// Cache all rendered graph. +// {type, format, text} -> data. +class GraphCache { + constructor() { + this.cache = new LruCache(); + } + + generateKey(p_type, p_format, p_text) { + return p_type + p_format + p_text; + } + + set(p_type, p_format, p_text, p_graph) { + this.cache.set(generateKey(p_type, p_format, p_text), p_graph); + } + + get(p_type, p_format, p_text, p_graph) { + return this.cache.get(generateKey(p_type, p_format, p_text)); + } +} diff --git a/src/data/extra/web/js/graphpreviewer.js b/src/data/extra/web/js/graphpreviewer.js new file mode 100644 index 00000000..593a9457 --- /dev/null +++ b/src/data/extra/web/js/graphpreviewer.js @@ -0,0 +1,207 @@ +class GraphPreviewer { + constructor(p_vnotex, p_container) { + this.vnotex = p_vnotex; + + // Preview will take place here. + this.container = p_container; + + this.flowchartJsIdx = 0; + this.waveDromIdx = 0; + this.mermaidIdx = 0; + + // Used to decide the width with 100% relative value. + this.windowWidth = 800; + + window.addEventListener( + 'resize', + () => { + if (window.innerWidth > 0) { + this.windowWidth = window.innerWidth; + } + }, + { passive: true }); + } + + previewGraph(p_id, p_timeStamp, p_lang, p_text) { + if (p_text.length == 0) { + this.setGraphPreviewData(p_id, p_timeStamp); + return; + } + + if (p_lang === 'flow' || p_lang === 'flowchart') { + this.vnotex.getWorker('flowchartjs').renderText(this.container, + p_text, + this.flowchartJsIdx++, + (graphDiv) => { + this.processGraph(p_id, p_timeStamp, graphDiv); + }); + } else if (p_lang === 'wavedrom') { + this.vnotex.getWorker('wavedrom').renderText(this.container, + p_text, + this.waveDromIdx++, + (graphDiv) => { + this.processGraph(p_id, p_timeStamp, graphDiv); + }); + } else if (p_lang === 'mermaid') { + this.vnotex.getWorker('mermaid').renderText(this.container, + p_text, + this.mermaidIdx++, + (graphDiv) => { + this.fixSvgRelativeWidth(graphDiv.firstElementChild); + this.processGraph(p_id, p_timeStamp, graphDiv); + }); + } else if (p_lang === 'puml' || p_lang === 'plantuml') { + let func = function(p_previewer, p_id, p_timeStamp) { + let previewer = p_previewer; + let id = p_id; + let timeStamp = p_timeStamp; + return function(p_format, p_data) { + previewer.setGraphPreviewData(id, timeStamp, p_format, p_data, false, true); + }; + }; + this.vnotex.getWorker('plantuml').renderText(p_text, func(this, p_id, p_timeStamp)); + return; + } else if (p_lang === 'dot') { + let func = function(p_previewer, p_id, p_timeStamp) { + let previewer = p_previewer; + let id = p_id; + let timeStamp = p_timeStamp; + return function(p_svgNode) { + previewer.setGraphPreviewData(id, timeStamp, 'svg', p_svgNode.outerHTML, false, true); + }; + }; + this.vnotex.getWorker('graphviz').renderText(p_text, func(this, p_id, p_timeStamp)); + return; + } else if (p_lang === 'mathjax') { + this.renderMath(p_id, p_timeStamp, p_text, null); + return; + } else { + this.setGraphPreviewData(p_id, p_timeStamp); + } + } + + renderMath(p_id, p_timeStamp, p_text, p_dataSetter) { + let func = function(p_previewer, p_id, p_timeStamp) { + let previewer = p_previewer; + let id = p_id; + let timeStamp = p_timeStamp; + return function(p_svgNode) { + previewer.fixSvgRelativeWidth(p_svgNode); + previewer.processSvgAsPng(id, timeStamp, p_svgNode, p_dataSetter); + }; + }; + this.vnotex.getWorker('mathjax').renderText(this.container, + p_text, + func(this, p_id, p_timeStamp)); + } + + processGraph(p_id, p_timeStamp, p_graphDiv) { + if (!p_graphDiv) { + console.error('failed to preview graph', p_id, p_timeStamp); + this.setGraphPreviewData(p_id, p_timeStamp); + return; + } + + this.container.removeChild(p_graphDiv); + + this.processSvgAsPng(p_id, p_timeStamp, p_graphDiv.firstElementChild); + } + + processSvgAsPng(p_id, p_timeStamp, p_svgNode, p_dataSetter = null) { + if (!p_dataSetter) { + p_dataSetter = this.setGraphPreviewData.bind(this); + } + if (!p_svgNode) { + console.error('failed to preview graph', p_id, p_timeStamp); + p_dataSetter(p_id, p_timeStamp); + return; + } + + this.scaleSvg(p_svgNode); + + SvgToImage.svgToImage(p_svgNode.outerHTML, + { crossOrigin: 'Anonymous' }, + (p_err, p_image) => { + if (p_err) { + p_dataSetter(p_id, p_timeStamp); + return; + } + + let canvas = document.createElement('canvas'); + let ctx = canvas.getContext('2d'); + canvas.height = p_image.height; + canvas.width = p_image.width; + ctx.drawImage(p_image, 0, 0); + let dataUrl = null; + try { + dataUrl = canvas.toDataURL(); + } catch (err) { + // Tainted canvas may be caused by the in SVG. + console.error('failed to draw image on canvas', err); + + // Try simply using the SVG. + p_dataSetter(p_id, p_timeStamp, 'svg', p_svgNode.outerHTML, false, false); + return; + } + + let png = dataUrl ? dataUrl.substring(dataUrl.indexOf(',') + 1) : ''; + p_dataSetter(p_id, p_timeStamp, 'png', png, true, false); + }); + } + + previewMath(p_id, p_timeStamp, p_text) { + // Do we need to go through TexMath plugin? I don't think so. + this.renderMath(p_id, p_timeStamp, p_text, this.setMathPreviewData.bind(this)); + } + + // Fix SVG with width and height being '100%'. + fixSvgRelativeWidth(p_svgNode) { + if (p_svgNode.getAttribute('width').indexOf('%') != -1) { + // Try maxWidth. + if (p_svgNode.style.maxWidth && p_svgNode.style.maxWidth.endsWith('px')) { + p_svgNode.setAttribute('width', p_svgNode.style.maxWidth); + } else { + // Set as window width. + p_svgNode.setAttribute('width', Math.max(this.windowWidth - 100, 100) + 'px'); + } + } + } + + scaleSvg(p_svgNode) { + let scaleFactor = window.devicePixelRatio; + if (scaleFactor == 1) { + return; + } + + if (p_svgNode.getAttribute('width').indexOf('%') == -1) { + p_svgNode.width.baseVal.valueInSpecifiedUnits *= scaleFactor; + } + if (p_svgNode.getAttribute('height').indexOf('%') == -1) { + p_svgNode.height.baseVal.valueInSpecifiedUnits *= scaleFactor; + } + } + + setGraphPreviewData(p_id, p_timeStamp, p_format = '', p_data = '', p_base64 = false, p_needScale = false) { + let previewData = { + id: p_id, + timeStamp: p_timeStamp, + format: p_format, + data: p_data, + base64: p_base64, + needScale: p_needScale + }; + this.vnotex.setGraphPreviewData(previewData); + } + + setMathPreviewData(p_id, p_timeStamp, p_format = '', p_data = '', p_base64 = false, p_needScale = false) { + let previewData = { + id: p_id, + timeStamp: p_timeStamp, + format: p_format, + data: p_data, + base64: p_base64, + needScale: p_needScale + }; + this.vnotex.setMathPreviewData(previewData); + } +} diff --git a/src/data/extra/web/js/graphrenderer.js b/src/data/extra/web/js/graphrenderer.js new file mode 100644 index 00000000..9712192a --- /dev/null +++ b/src/data/extra/web/js/graphrenderer.js @@ -0,0 +1,119 @@ +// Should be singleton for each renderer. +class GraphRenderer extends VxWorker { + constructor() { + super(); + + this.initialized = false; + this.graphIdx = 0; + this.graphDivClass = ''; + + // Nodes need to render. + this.nodesToRender = []; + this.numOfRenderedNodes = 0; + + // Used for loading scripts dynamically. + this.scriptFolderPath = Utils.parentFolder(document.currentScript.src); + + // Extra scripts that need to load dynamically. + this.extraScripts = []; + + // Langs for this graph render to render. + this.langs = []; + } + + reset() { + this.graphIdx = 0; + this.nodesToRender = []; + this.numOfRenderedNodes = 0; + } + + registerInternal() { + this.vnotex.on('basicMarkdownRendered', () => { + this.reset(); + this.renderCodeNodes(this.vnotex.contentContainer); + }); + + this.vnotex.getWorker('markdownit').addLangsToSkipHighlight(this.langs); + } + + // Return ture if we could continue. + // Initialize may load additional libraries dynamically, in which case we need + // to suspend our execution for now and call p_callback() later. + initialize(p_callback) { + if (this.initialized) { + return true; + } + + console.info('render initialized:', this.name); + + this.initialized = true; + if (this.extraScripts.length > 0) { + Utils.loadScripts(this.extraScripts, p_callback); + return false; + } + + return true; + } + + // Interface 1. + // Fetch nodes with class @p_classList in @p_node and render as graph. + render(p_node, p_classList) { + // Collect nodes to render. + this.nodesToRender = []; + this.numOfRenderedNodes = 0; + p_classList.forEach((p_class) => { + let nodes = p_node.getElementsByClassName(p_class); + if (nodes.length == 0) { + return; + } + + for (let i = 0; i < nodes.length; ++i) { + // Do we need to de-duplicate nodes? + this.nodesToRender.push(nodes[i]); + } + }); + + this.doRender(this.nodesToRender); + } + + // Interface 2. + // Get code nodes from markdownIt directly. + renderCodeNodes(p_node) { + this.nodesToRender = this.vnotex.getWorker('markdownit').getCodeNodes(this.langs); + this.doRender(); + } + + doRender() { + if (this.nodesToRender.length == 0) { + this.finishWork(); + return; + } + + if (!this.initialize(() => { this.renderNodes(); })) { + return; + } + + this.renderNodes(); + } + + renderNodes() { + this.nodesToRender.forEach((p_nodeToRender) => { + this.renderOne(p_nodeToRender, this.graphIdx++); + }); + } + + // Render @p_node as a graph. + // Return true on success. + renderOne(p_node, p_idx) { + return false; + } + + // Called when finishing rendering one node. + finishRenderingOne() { + if (++this.numOfRenderedNodes == this.nodesToRender.length) { + this.nodesToRender = []; + this.numOfRenderedNodes = 0; + this.finishWork(); + } + } +} diff --git a/src/data/extra/web/js/graphviz.js b/src/data/extra/web/js/graphviz.js new file mode 100644 index 00000000..6b1cbf10 --- /dev/null +++ b/src/data/extra/web/js/graphviz.js @@ -0,0 +1,110 @@ +class Graphviz extends GraphRenderer { + constructor() { + super(); + + this.name = 'graphviz'; + + this.graphDivClass = 'vx-graphviz-graph'; + + this.extraScripts = [this.scriptFolderPath + '/viz.js/viz.js', + this.scriptFolderPath + '/viz.js/lite.render.js']; + + this.viz = null; + + this.format = 'svg'; + + this.langs = ['dot']; + } + + registerInternal() { + this.vnotex.on('basicMarkdownRendered', () => { + this.reset(); + this.renderCodeNodes(this.vnotex.contentContainer, 'svg'); + }); + + this.vnotex.getWorker('markdownit').addLangsToSkipHighlight(this.langs); + } + + initialize(p_callback) { + return super.initialize(() => { + this.viz = new Viz(); + p_callback(); + }); + } + + // Interface 1. + render(p_node, p_classList, p_format) { + this.format = p_format; + + super.render(p_node, p_classList); + } + + // Interface 2. + renderCodeNodes(p_node, p_format) { + this.format = p_format; + + super.renderCodeNodes(p_node); + } + + renderOne(p_node, p_idx) { + let func = function(p_graphviz, p_renderNode) { + let graphviz = p_graphviz; + let node = p_renderNode; + return function(p_element) { + if (node) { + let wrapperDiv = document.createElement('div'); + wrapperDiv.classList.add(graphviz.graphDivClass); + wrapperDiv.appendChild(p_element); + + Utils.checkSourceLine(p_node, wrapperDiv); + + Utils.replaceNodeWithPreCheck(p_node, wrapperDiv); + + if (graphviz.format === 'svg') { + window.vxImageViewer.setupSVGToView(p_element, false); + } else { + window.vxImageViewer.setupIMGToView(p_element); + } + } + graphviz.finishRenderingOne(); + }; + }; + + if (this.format === 'svg') { + this.viz.renderSVGElement(p_node.textContent) + .then(func(this, p_node)) + .catch(function(p_err) { + console.error('failed to render Graphviz', p_err); + }); + } else { + this.viz.renderImageElement(p_node.textContent) + .then(func(this, p_node)) + .catch(function(p_err) { + console.error('failed to render Graphviz', p_err); + }); + + } + return true; + } + + // Render a graph from @p_text in SVG format. + // p_callback(svgNode). + renderText(p_text, p_callback) { + let func = () => { + this.viz.renderSVGElement(p_text) + .then(p_callback) + .catch(function(err) { + console.error('failed to render Graphviz', err); + p_callback(null); + }); + }; + + if (!this.initialize(func)) { + return; + } + + func(); + } +} + +window.vnotex.registerWorker(new Graphviz()); diff --git a/src/data/extra/web/js/imageviewer.js b/src/data/extra/web/js/imageviewer.js new file mode 100644 index 00000000..4428dd6c --- /dev/null +++ b/src/data/extra/web/js/imageviewer.js @@ -0,0 +1,229 @@ +class ImageViewer { + constructor() { + this.viewBoxMouseDown = false; + this.viewBoxOffsetToMouse = { x: 0, y: 0 } + this.viewImageClass = 'vx-image-view-image'; + + window.vnotex.on('ready', () => { + this.viewBoxContainer = document.getElementById('vx-image-view-box'); + this.viewBox = document.getElementById('vx-image-view'); + this.closeButton = document.getElementById('vx-image-view-close'); + + this.setupImageViewBox(); + }); + } + + setupImageViewBox() { + // Left and top in pixel. + let moveImage = (img, left, top) => { + if (img.style.position != 'absolute') { + img.style.position = 'absolute'; + img.style.zIndex = parseInt(this.closeButton.style.zIndex) - 1; + } + + img.style.left = left + 'px'; + img.style.top = top + 'px'; + }; + + // View box. + this.viewBoxContainer.onclick = (e) => { + e = e || window.event; + if (e.target.id != this.viewBox.id) { + // Click outside the image to close the box. + this.closeImageViewBox(); + } + + e.preventDefault(); + }; + + this.viewBoxContainer.onwheel = (e) => { + e = e || window.event; + let ctrl = !!e.ctrlKey; + if (ctrl) { + return; + } + + let target = e.target; + if (target != this.viewBox) { + return; + } + + let rect = target.getBoundingClientRect(); + let centerX = e.clientX - rect.left; + let centerY = e.clientY - rect.top; + + let oriWidth = target.getAttribute('oriWidth'); + let oriHeight = target.getAttribute('oriWidth'); + if (!oriWidth) { + oriWidth = rect.width; + oriHeight = rect.height; + + target.setAttribute('oriWidth', oriWidth); + target.setAttribute('oriHeight', oriHeight); + } + + let step = Math.floor(oriWidth / 4); + + let value = e.wheelDelta || -e.detail; + // delta >= 0 is up, which will trigger zoom in. + let delta = Math.max(-1, Math.min(1, value)); + + let newWidth = rect.width + (delta < 0 ? -step : step); + if (newWidth < 200) { + e.preventDefault(); + return; + } + + let factor = newWidth / rect.width; + + target.style.width = newWidth + 'px'; + + // Adjust the image around the center point. + moveImage(target, e.clientX - centerX * factor, e.clientY - centerY * factor); + + e.preventDefault(); + }; + + // Content image. + this.viewBox.onmousedown = (e) => { + e = e || window.event; + let target = e.target; + this.viewBoxMouseDown = true; + this.viewBoxOffsetToMouse = { + x: target.offsetLeft - e.clientX, + y: target.offsetTop - e.clientY + }; + e.preventDefault(); + }; + + this.viewBox.onmouseup = (e) => { + e = e || window.event; + this.viewBoxMouseDown = false; + e.preventDefault(); + }; + + this.viewBox.onmousemove = (e) => { + e = e || window.event; + let target = e.target; + if (this.viewBoxMouseDown) { + moveImage(target, + e.clientX + this.viewBoxOffsetToMouse.x, + e.clientY + this.viewBoxOffsetToMouse.y); + } + + e.preventDefault(); + }; + + // Close button. + this.closeButton.onclick = () => { + this.closeImageViewBox(); + }; + }; + + closeImageViewBox() { + this.viewBoxContainer.style.display = "none"; + }; + + setupForAllImages(p_container) { + this.closeImageViewBox(); + + let images = p_container.getElementsByTagName('img'); + for (let i = 0; i < images.length; ++i) { + if (images[i] === this.viewBox) { + continue; + } + + this.setupIMGToView(images[i]); + } + }; + + setupIMGToView(p_node) { + if (!p_node || p_node.nodeName.toLowerCase() != 'img') { + return; + } + + p_node.classList.add(this.viewImageClass); + let func = function(p_imageViewer, p_node) { + let imageViewer = p_imageViewer; + let node = p_node; + return function() { + imageViewer.viewIMG(node); + }; + }; + p_node.ondblclick = func(this, p_node); + }; + + viewImage(p_imgSrc, p_background = 'transparent') { + this.viewBoxMouseDown = false; + this.viewBoxContainer.style.display = 'block'; + + this.viewBox.src = p_imgSrc; + this.viewBox.style.backgroundColor = p_background; + + // Restore view box. + this.viewBox.style.width = ''; + this.viewBox.style.position = ''; + this.viewBox.style.zIndex = ''; + }; + + viewIMG(p_imgNode) { + this.viewImage(p_imgNode.src); + }; + + isViewingImage() { + return this.viewBoxContainer.style.display === 'block'; + }; + + setupSVGToView(p_node, p_forceBackground = false) { + if (!p_node || p_node.nodeName.toLowerCase() != 'svg') { + return; + } + + let onSVGDoubleClick = function(imageViewer, node, forceBackground, e) { + e = e || window.event; + let name = e.target.nodeName.toLowerCase(); + if (name != 'text' && name != 'tspan') { + if (forceBackground) { + // Use 's parent's background color. + let svgNode = e.target; + while (svgNode && svgNode.nodeName.toLowerCase() != 'svg') { + svgNode = svgNode.parentNode; + } + + if (svgNode) { + let style = window.getComputedStyle(svgNode.parentNode, null); + if (style.backgroundColor === 'rgba(0, 0, 0, 0)') { + imageViewer.viewSVG(node, '#ffffff'); + } else { + imageViewer.viewSVG(node, style.backgroundColor); + } + } + } else { + imageViewer.viewSVG(node); + } + + e.preventDefault(); + } + }; + + p_node.classList.add(this.viewImageClass); + let func = function(p_imageViewer, p_node, p_forceBackground) { + let imageViewer = p_imageViewer; + let node = p_node; + let forceBackground = p_forceBackground; + return function(e) { + onSVGDoubleClick(imageViewer, node, forceBackground, e); + }; + }; + p_node.ondblclick = func(this, p_node, p_forceBackground); + }; + + viewSVG(p_svgNode, p_background = 'transparent') { + var svg = p_svgNode.outerHTML.replace(/#/g, '%23').replace(/[\r\n]/g, ''); + var src = 'data:image/svg+xml;utf8,' + svg; + + this.viewImage(src, p_background); + }; +} + +window.vxImageViewer = new ImageViewer; diff --git a/src/data/extra/web/js/lrucache.js b/src/data/extra/web/js/lrucache.js new file mode 100644 index 00000000..c30856b8 --- /dev/null +++ b/src/data/extra/web/js/lrucache.js @@ -0,0 +1,29 @@ +class LruCache { + constructor(p_capacity = 100) { + this.capacity = p_capacity; + this.cache = new Map(); + } + + get(p_key) { + let item = this.cache.get(p_key); + if (item) { + this.cache.delete(p_key); + this.cache.set(p_key, item); + } + return item; + } + + set(p_key, p_val) { + if (this.cache.has(p_key)) { + this.cache.delete(p_key); + } + else if (this.cache.size == this.capacity) { + this.cache.delete(this.first()); + } + this.cache.set(p_key, p_val); + } + + first() { + return this.cache.keys().next().value; + } +} diff --git a/src/data/extra/web/js/markdown-it/README.md b/src/data/extra/web/js/markdown-it/README.md new file mode 100644 index 00000000..21f05a42 --- /dev/null +++ b/src/data/extra/web/js/markdown-it/README.md @@ -0,0 +1,54 @@ +# [markdown-it](https://github.com/markdown-it/markdown-it) +v11.0.0 +Alex Kocharin +Vitaly Puzrin + +# [markdown-it-headinganchor](https://github.com/adam-p/markdown-it-headinganchor) +v1.3.0 +Adam Pritchard +Modified by Le Tan + +# [markdown-it-task-lists](https://github.com/revin/markdown-it-task-lists) +v2.1.0 +Revin Guillen + +# [markdown-it-footnote](https://github.com/markdown-it/markdown-it-footnote) +v3.0.2 +Vitaly Puzrin + +# [markdown-it-sub](https://github.com/markdown-it/markdown-it-sub) +v1.0.0 +Vitaly Puzrin + +# [markdown-it-sup](https://github.com/markdown-it/markdown-it-sup) +v1.0.0 +Vitaly Puzrin + +# [markddown-it-front-matter](https://github.com/craigdmckenna/markdown-it-front-matter) +v0.2.1 +Craig McKenna +Wrapped by Le Tan + +# [markdown-it-imsize](https://github.com/tatsy/markdown-it-imsize) +v2.0.1 +Tatsuya Yatagawa + +# [markdown-it-emoji](https://github.com/markdown-it/markdown-it-emoji) +v1.4.0 +Vitaly Puzrin + +# [markdown-it-texmath](https://github.com/vnotex/markdown-it-texmath) +83e3fd3cd0799593d825298466053793a5461e42 +Stefan Goessner +Le Tan + +# [markdown-it-container](https://github.com/markdown-it/markdown-it-container) +v3.0.0 +Vitaly Puzrin + +# [markdown-it-inject-linenumbers](https://github.com/digitalmoksha/markdown-it-inject-linenumbers) +v0.0.0 +Modified by Le Tan + +# [markdown-it-xss](https://github.com/yzyeengang/markdown-it-xss) +v1.0.0 diff --git a/src/data/extra/web/js/markdown-it/markdown-it-container.min.js b/src/data/extra/web/js/markdown-it/markdown-it-container.min.js new file mode 100644 index 00000000..16f611e8 --- /dev/null +++ b/src/data/extra/web/js/markdown-it/markdown-it-container.min.js @@ -0,0 +1 @@ +/*! markdown-it-container 3.0.0 https://github.com//markdown-it/markdown-it-container @license MIT */!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).markdownitContainer=e()}}((function(){return function e(r,n,t){function o(f,a){if(!n[f]){if(!r[f]){var u="function"==typeof require&&require;if(!a&&u)return u(f,!0);if(i)return i(f,!0);var c=new Error("Cannot find module '"+f+"'");throw c.code="MODULE_NOT_FOUND",c}var s=n[f]={exports:{}};r[f][0].call(s.exports,(function(e){return o(r[f][1][e]||e)}),s,s.exports,e,r,n,t)}return n[f].exports}for(var i="function"==typeof require&&require,f=0;f=a)&&!((y=e.bMarks[s]+e.tShift[s])<(_=e.eMarks[s])&&e.sCount[s]=4)){for(c=y+1;c<=_&&t[(c-y)%i]===e.src[c];c++);if(!(Math.floor((c-y)/i):(",">:-("],blush:[':")',':-")'],broken_heart:["=0&&(e[o]=n[o]),e},{})),e=Object.keys(a.shortcuts).reduce(function(e,o){return n[o]?Array.isArray(a.shortcuts[o])?(a.shortcuts[o].forEach(function(a){e[a]=o}),e):(e[a.shortcuts[o]]=o,e):e},{});var i=Object.keys(n).map(function(a){return":"+a+":"}).concat(Object.keys(e)).sort().reverse().map(function(a){return o(a)}).join("|"),r=RegExp(i),_=RegExp(i,"g");return{defs:n,shortcuts:e,scanRE:r,replaceRE:_}}},{}],4:[function(a,e,n){"use strict";e.exports=function(a,e){return a[e].content}},{}],5:[function(a,e,n){"use strict";e.exports=function(a,e,n,o,i){function r(a,o,r){var _,t=0,l=[];return a.replace(i,function(o,i,c){var m;if(n.hasOwnProperty(o)){if(m=n[o],i>0&&!s.test(c[i-1]))return;if(i+o.lengtht&&(_=new r("text","",0),_.content=a.slice(t,i),l.push(_)),_=new r("emoji","",0),_.markup=m,_.content=e[m],l.push(_),t=i+o.length}),t=0;e--)s=t[e],"link_open"!==s.type&&"link_close"!==s.type||"auto"===s.info&&(c-=s.nesting),"text"===s.type&&0===c&&o.test(s.content)&&(l[n].children=t=_(t,e,r(s.content,s.level,a.Token)))}}},{}],6:[function(a,e,n){"use strict";var o=a("./lib/data/full.json"),i=a("./lib/data/shortcuts"),r=a("./lib/render"),_=a("./lib/replace"),t=a("./lib/normalize_opts");e.exports=function(a,e){var n={defs:o,shortcuts:i,enabled:[]},s=t(a.utils.assign({},n,e||{}));a.renderer.rules.emoji=r,a.core.ruler.push("emoji",_(a,s.defs,s.shortcuts,s.scanRE,s.replaceRE))}},{"./lib/data/full.json":1,"./lib/data/shortcuts":2,"./lib/normalize_opts":3,"./lib/render":4,"./lib/replace":5}]},{},[6])(6)}); diff --git a/src/data/extra/web/js/markdown-it/markdown-it-footnote.min.js b/src/data/extra/web/js/markdown-it/markdown-it-footnote.min.js new file mode 100644 index 00000000..06636d60 --- /dev/null +++ b/src/data/extra/web/js/markdown-it/markdown-it-footnote.min.js @@ -0,0 +1 @@ +!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).markdownitFootnote=e()}}(function(){return function(){return function e(o,t,n){function r(f,l){if(!t[f]){if(!o[f]){var i="function"==typeof require&&require;if(!l&&i)return i(f,!0);if(s)return s(f,!0);var u=new Error("Cannot find module '"+f+"'");throw u.code="MODULE_NOT_FOUND",u}var a=t[f]={exports:{}};o[f][0].call(a.exports,function(e){return r(o[f][1][e]||e)},a,a.exports,e,o,t,n)}return t[f].exports}for(var s="function"==typeof require&&require,f=0;f0&&(t+=":"+e[o].meta.subId),"["+t+"]"}function s(e,o,t,n,r){var s=r.rules.footnote_anchor_name(e,o,t,n,r),f=r.rules.footnote_caption(e,o,t,n,r),l=s;return e[o].meta.subId>0&&(l+=":"+e[o].meta.subId),''+f+""}function f(e,o,t){return(t.xhtmlOut?'
\n':'
\n')+'
\n
    \n'}function l(){return"
\n
\n"}function i(e,o,t,n,r){var s=r.rules.footnote_anchor_name(e,o,t,n,r);return e[o].meta.subId>0&&(s+=":"+e[o].meta.subId),'
  • '}function u(){return"
  • \n"}function a(e,o,t,n,r){var s=r.rules.footnote_anchor_name(e,o,t,n,r);return e[o].meta.subId>0&&(s+=":"+e[o].meta.subId),' \u21a9\ufe0e'}o.exports=function(e){var o=e.helpers.parseLinkLabel,t=e.utils.isSpace;e.renderer.rules.footnote_ref=s,e.renderer.rules.footnote_block_open=f,e.renderer.rules.footnote_block_close=l,e.renderer.rules.footnote_open=i,e.renderer.rules.footnote_close=u,e.renderer.rules.footnote_anchor=a,e.renderer.rules.footnote_caption=r,e.renderer.rules.footnote_anchor_name=n,e.block.ruler.before("reference","footnote_def",function(e,o,n,r){var s,f,l,i,u,a,c,p,d,h,k,b=e.bMarks[o]+e.tShift[o],v=e.eMarks[o];if(b+4>v)return!1;if(91!==e.src.charCodeAt(b))return!1;if(94!==e.src.charCodeAt(b+1))return!1;for(u=b+2;u=v||58!==e.src.charCodeAt(++u))return!1;if(r)return!0;for(u++,e.env.footnotes||(e.env.footnotes={}),e.env.footnotes.refs||(e.env.footnotes.refs={}),a=e.src.slice(b+2,u-2),e.env.footnotes.refs[":"+a]=-1,(c=new e.Token("footnote_reference_open","",1)).meta={label:a},c.level=e.level++,e.tokens.push(c),s=e.bMarks[o],f=e.tShift[o],l=e.sCount[o],i=e.parentType,k=u,p=d=e.sCount[o]+u-(e.bMarks[o]+e.tShift[o]);u=l||94!==e.src.charCodeAt(i)||91!==e.src.charCodeAt(i+1)||(n=i+2,(r=o(e,i+1))<0||(t||(e.env.footnotes||(e.env.footnotes={}),e.env.footnotes.list||(e.env.footnotes.list=[]),s=e.env.footnotes.list.length,e.md.inline.parse(e.src.slice(n,r),e.md,e.env,f=[]),e.push("footnote_ref","",0).meta={id:s},e.env.footnotes.list[s]={content:e.src.slice(n,r),tokens:f}),e.pos=r+1,e.posMax=l,0)))}),e.inline.ruler.after("footnote_inline","footnote_ref",function(e,o){var t,n,r,s,f=e.posMax,l=e.pos;if(l+3>f)return!1;if(!e.env.footnotes||!e.env.footnotes.refs)return!1;if(91!==e.src.charCodeAt(l))return!1;if(94!==e.src.charCodeAt(l+1))return!1;for(n=l+2;n=f||(n++,t=e.src.slice(l+2,n-1),void 0===e.env.footnotes.refs[":"+t]||(o||(e.env.footnotes.list||(e.env.footnotes.list=[]),e.env.footnotes.refs[":"+t]<0?(r=e.env.footnotes.list.length,e.env.footnotes.list[r]={label:t,count:0},e.env.footnotes.refs[":"+t]=r):r=e.env.footnotes.refs[":"+t],s=e.env.footnotes.list[r].count,e.env.footnotes.list[r].count++,e.push("footnote_ref","",0).meta={id:r,subId:s,label:t}),e.pos=n,e.posMax=f,0)))}),e.core.ruler.after("inline","footnote_tail",function(e){var o,t,n,r,s,f,l,i,u,a,c=!1,p={};if(e.env.footnotes&&(e.tokens=e.tokens.filter(function(e){return"footnote_reference_open"===e.type?(c=!0,u=[],a=e.meta.label,!1):"footnote_reference_close"===e.type?(c=!1,p[":"+a]=u,!1):(c&&u.push(e),!c)}),e.env.footnotes.list)){for(f=e.env.footnotes.list,l=new e.Token("footnote_block_open","",1),e.tokens.push(l),o=0,t=f.length;o0?f[o].count:1,n=0;n= endLine) { + // unclosed block should be autoclosed by end of document. + // also block seems to be autoclosed by end of parent + break; + } + + if (state.src.slice(start, max) === '...') { + break; + } + + start = state.bMarks[nextLine] + state.tShift[nextLine]; + max = state.eMarks[nextLine]; + + if (start < max && state.sCount[nextLine] < state.blkIndent) { + // non-empty line with negative indent should stop the list: + // - ``` + // test + break; + } + + if (marker_char !== state.src.charCodeAt(start)) { + continue; + } + + if (state.sCount[nextLine] - state.blkIndent >= 4) { + // closing fence should be indented less than 4 spaces + continue; + } + + for (pos = start + 1; pos <= max; pos++) { + if (marker_str[(pos - start) % marker_len] !== state.src[pos]) { + break; + } + } + + // closing code fence must be at least as long as the opening one + if (Math.floor((pos - start) / marker_len) < marker_count) { + continue; + } + + // make sure tail has spaces only + pos -= (pos - start) % marker_len; + pos = state.skipSpaces(pos); + + if (pos < max) { + continue; + } + + // found! + auto_closed = true; + break; + } + + old_parent = state.parentType; + old_line_max = state.lineMax; + state.parentType = 'container'; + + // this will prevent lazy continuations from ever going past our end marker + state.lineMax = nextLine; + + token = state.push('front_matter', null, 0); + token.hidden = true; + token.markup = state.src.slice(startLine, pos); + token.block = true; + token.map = [ startLine, pos ]; + token.meta = state.src.slice(start_content, start - 1); + + state.parentType = old_parent; + state.lineMax = old_line_max; + state.line = nextLine + (auto_closed ? 1 : 0); + + cb(token.meta); + + return true; + } + + md.block.ruler.before( + 'table', + 'front_matter', + frontMatter, + { + alt: [ + 'paragraph', + 'reference', + 'blockquote', + 'list' + ] + } + ); +}; + +},{}]},{},[1])(1) +}); diff --git a/src/data/extra/web/js/markdown-it/markdown-it-headinganchor.js b/src/data/extra/web/js/markdown-it/markdown-it-headinganchor.js new file mode 100644 index 00000000..93c872d6 --- /dev/null +++ b/src/data/extra/web/js/markdown-it/markdown-it-headinganchor.js @@ -0,0 +1,80 @@ +/*! markdown-it-headinganchor 1.2.1 https://github.com//adam-p/markdown-it-headinganchor @license MIT */(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.markdownitHeadingAnchor = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o'; + } else { + anchorToken.content = ''; + } + + headingInlineToken.children.push(anchorToken); + } + + // Advance past the inline and heading_close tokens. + i += 2; + } + }; +} + +module.exports = function headinganchor_plugin(md, opts) { + var defaults = { + anchorClass: 'markdown-it-headinganchor', + addHeadingID: true, + addHeadingAnchor: true, + // Added by Le Tan (github.com/tamlok) + anchorIcon: '#', + slugify: slugify, + headingHook: function(openToken, inlineToken, anchor) {} + }; + var options = md.utils.assign(defaults, opts); + md.core.ruler.push('heading_anchors', makeRule(md, options)); +}; + +},{}]},{},[1])(1) +}); diff --git a/src/data/extra/web/js/markdown-it/markdown-it-imsize.min.js b/src/data/extra/web/js/markdown-it/markdown-it-imsize.min.js new file mode 100644 index 00000000..7ec10e81 --- /dev/null +++ b/src/data/extra/web/js/markdown-it/markdown-it-imsize.min.js @@ -0,0 +1,2 @@ +(function webpackUniversalModuleDefinition(root,factory){if(typeof exports==="object"&&typeof module==="object")module.exports=factory();else if(typeof define==="function"&&define.amd)define(factory);else if(typeof exports==="object")exports["markdown-it-imsize.js"]=factory();else root["markdown-it-imsize.js"]=factory()})(this,function(){return function(modules){var installedModules={};function __webpack_require__(moduleId){if(installedModules[moduleId])return installedModules[moduleId].exports;var module=installedModules[moduleId]={exports:{},id:moduleId,loaded:false};modules[moduleId].call(module.exports,module,module.exports,__webpack_require__);module.loaded=true;return module.exports}__webpack_require__.m=modules;__webpack_require__.c=installedModules;__webpack_require__.p="";return __webpack_require__(0)}([function(module,exports,__webpack_require__){"use strict";var sizeOf=__webpack_require__(2);var parseImageSize=__webpack_require__(1);function image_with_size(md,options){return function(state,silent){var attrs,code,label,labelEnd,labelStart,pos,ref,res,title,width="",height="",token,tokens,start,href="",oldPos=state.pos,max=state.posMax;if(state.src.charCodeAt(state.pos)!==33){return false}if(state.src.charCodeAt(state.pos+1)!==91){return false}labelStart=state.pos+2;labelEnd=md.helpers.parseLinkLabel(state,state.pos+1,false);if(labelEnd<0){return false}pos=labelEnd+1;if(pos=max){return false}start=pos;res=md.helpers.parseLinkDestination(state.src,pos,state.posMax);if(res.ok){href=state.md.normalizeLink(res.str);if(state.md.validateLink(href)){pos=res.pos}else{href=""}}start=pos;for(;pos=0){code=state.src.charCodeAt(pos-1);if(code===32){res=parseImageSize(state.src,pos,state.posMax);if(res.ok){width=res.width;height=res.height;pos=res.pos;for(;pos=max||state.src.charCodeAt(pos)!==41){state.pos=oldPos;return false}pos++}else{if(typeof state.env.references==="undefined"){return false}for(;pos=0){label=state.src.slice(start,pos++)}else{pos=labelEnd+1}}else{pos=labelEnd+1}if(!label){label=state.src.slice(labelStart,labelEnd)}ref=state.env.references[md.utils.normalizeReference(label)];if(!ref){state.pos=oldPos;return false}href=ref.href;title=ref.title}if(!silent){state.pos=labelStart;state.posMax=labelEnd;var newState=new state.md.inline.State(state.src.slice(labelStart,labelEnd),state.md,state.env,tokens=[]);newState.md.inline.tokenize(newState);if(options){if(options.autofill&&width===""&&height===""){try{var dimensions=sizeOf(href);width=dimensions.width;height=dimensions.height}catch(e){}}}token=state.push("image","img",0);token.attrs=attrs=[["src",href],["alt",""]];token.children=tokens;if(title){attrs.push(["title",title])}if(width!==""){attrs.push(["width",width])}if(height!==""){attrs.push(["height",height])}}state.pos=pos;state.posMax=max;return true}}module.exports=function imsize_plugin(md,options){md.inline.ruler.before("emphasis","image",image_with_size(md,options))}},function(module,exports,__webpack_require__){"use strict";function parseNextNumber(str,pos,max){var code,start=pos,result={ok:false,pos:pos,value:""};code=str.charCodeAt(pos);while(pos=48&&code<=57)||code===37){code=str.charCodeAt(++pos)}result.ok=true;result.pos=pos;result.value=str.slice(start,pos);return result}module.exports=function parseImageSize(str,pos,max){var code,result={ok:false,pos:0,width:"",height:""};if(pos>=max){return result}code=str.charCodeAt(pos);if(code!==61){return result}pos++;code=str.charCodeAt(pos);if(code!==120&&(code<48||code>57)){return result}var resultW=parseNextNumber(str,pos,max);pos=resultW.pos;code=str.charCodeAt(pos);if(code!==120){return result}pos++;var resultH=parseNextNumber(str,pos,max);pos=resultH.pos;result.width=resultW.value;result.height=resultH.value;result.pos=pos;result.ok=true;return result}},function(module,exports,__webpack_require__){(function(Buffer){"use strict";var fs=__webpack_require__(16);var path=__webpack_require__(6);var detector=__webpack_require__(3);var handlers={};var types=__webpack_require__(5);types.forEach(function(type){handlers[type]=__webpack_require__(4)("./"+type)});var MaxBufferSize=128*1024;function lookup(buffer,filepath){var type=detector(buffer,filepath);if(type in handlers){var size=handlers[type].calculate(buffer,filepath);if(size!==false){size.type=type;return size}}throw new TypeError("Unsupported file type")}function asyncFileToBuffer(filepath,callback){fs.open(filepath,"r",function(err0,descriptor){if(err0){return callback(err0)}var size=fs.fstatSync(descriptor).size;var bufferSize=Math.min(size,MaxBufferSize);var buffer=new Buffer(bufferSize);fs.read(descriptor,buffer,0,bufferSize,0,function(err1){if(err1){return callback(err1)}fs.close(descriptor,function(err2){callback(err2,buffer)})})})}function syncFileToBuffer(filepath){var descriptor=fs.openSync(filepath,"r");var size=fs.fstatSync(descriptor).size;var bufferSize=Math.min(size,MaxBufferSize);var buffer=new Buffer(bufferSize);fs.readSync(descriptor,buffer,0,bufferSize,0);fs.closeSync(descriptor);return buffer}module.exports=function(input,callback){if(typeof input!=="string"){throw new TypeError("Input must be file name")}var filepath=path.resolve(input);if(typeof callback==="function"){asyncFileToBuffer(filepath,function(err,buffer){if(err){return callback(err)}var dimensions;try{dimensions=lookup(buffer,filepath)}catch(e){err=e}callback(err,dimensions)})}else{var buffer=syncFileToBuffer(filepath);return lookup(buffer,filepath)}}}).call(exports,__webpack_require__(7).Buffer)},function(module,exports,__webpack_require__){"use strict";var typeMap={};var types=__webpack_require__(5);types.forEach(function(type){typeMap[type]=__webpack_require__(4)("./"+type).detect});module.exports=function(buffer,filepath){var type,result;for(type in typeMap){if(type in typeMap){result=typeMap[type](buffer,filepath);if(result){return type}}}throw new TypeError("Unsupported type")}},function(module,exports,__webpack_require__){var map={"./bmp":8,"./bmp.js":8,"./gif":9,"./gif.js":9,"./jpg":10,"./jpg.js":10,"./png":11,"./png.js":11,"./psd":12,"./psd.js":12,"./svg":13,"./svg.js":13,"./tiff":14,"./tiff.js":14,"./webp":15,"./webp.js":15};function webpackContext(req){return __webpack_require__(webpackContextResolve(req))}function webpackContextResolve(req){return map[req]||function(){throw new Error("Cannot find module '"+req+"'.")}()}webpackContext.keys=function webpackContextKeys(){return Object.keys(map)};webpackContext.resolve=webpackContextResolve;module.exports=webpackContext;webpackContext.id=4},function(module,exports,__webpack_require__){"use strict";module.exports=["bmp","gif","jpg","png","tiff"]},function(module,exports,__webpack_require__){(function(process){function normalizeArray(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up--;up){parts.unshift("..")}}return parts}var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;var splitPath=function(filename){return splitPathRe.exec(filename).slice(1)};exports.resolve=function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:process.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){continue}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=normalizeArray(filter(resolvedPath.split("/"),function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."};exports.normalize=function(path){var isAbsolute=exports.isAbsolute(path),trailingSlash=substr(path,-1)==="/";path=normalizeArray(filter(path.split("/"),function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path};exports.isAbsolute=function(path){return path.charAt(0)==="/"};exports.join=function(){var paths=Array.prototype.slice.call(arguments,0);return exports.normalize(filter(paths,function(p,index){if(typeof p!=="string"){throw new TypeError("Arguments to path.join must be strings")}return p}).join("/"))};exports.relative=function(from,to){from=exports.resolve(from).substr(1);to=exports.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;ikMaxLength){throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+kMaxLength.toString(16)+" bytes")}if(length<0)length=0;else length>>>=0;if(Buffer.TYPED_ARRAY_SUPPORT){self=Buffer._augment(new Uint8Array(length))}else{self.length=length;self._isBuffer=true}var i;if(Buffer.TYPED_ARRAY_SUPPORT&&typeof subject.byteLength==="number"){self._set(subject)}else if(isArrayish(subject)){if(Buffer.isBuffer(subject)){for(i=0;i0&&length<=Buffer.poolSize)self.parent=rootParent;return self}function SlowBuffer(subject,encoding){if(!(this instanceof SlowBuffer))return new SlowBuffer(subject,encoding);var buf=new Buffer(subject,encoding);delete buf.parent;return buf}Buffer.isBuffer=function isBuffer(b){return!!(b!=null&&b._isBuffer)};Buffer.compare=function compare(a,b){if(!Buffer.isBuffer(a)||!Buffer.isBuffer(b)){throw new TypeError("Arguments must be Buffers")}if(a===b)return 0;var x=a.length;var y=b.length;for(var i=0,len=Math.min(x,y);i>>1;break;case"utf8":case"utf-8":ret=utf8ToBytes(str).length;break;case"base64":ret=base64ToBytes(str).length;break;default:ret=str.length}return ret};Buffer.prototype.length=undefined;Buffer.prototype.parent=undefined;Buffer.prototype.toString=function toString(encoding,start,end){var loweredCase=false;start=start>>>0;end=end===undefined||end===Infinity?this.length:end>>>0;if(!encoding)encoding="utf8";if(start<0)start=0;if(end>this.length)end=this.length;if(end<=start)return"";while(true){switch(encoding){case"hex":return hexSlice(this,start,end);case"utf8":case"utf-8":return utf8Slice(this,start,end);case"ascii":return asciiSlice(this,start,end);case"binary":return binarySlice(this,start,end);case"base64":return base64Slice(this,start,end);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return utf16leSlice(this,start,end);default:if(loweredCase)throw new TypeError("Unknown encoding: "+encoding);encoding=(encoding+"").toLowerCase();loweredCase=true}}};Buffer.prototype.equals=function equals(b){if(!Buffer.isBuffer(b))throw new TypeError("Argument must be a Buffer");if(this===b)return true;return Buffer.compare(this,b)===0};Buffer.prototype.inspect=function inspect(){var str="";var max=exports.INSPECT_MAX_BYTES;if(this.length>0){str=this.toString("hex",0,max).match(/.{2}/g).join(" ");if(this.length>max)str+=" ... "}return""};Buffer.prototype.compare=function compare(b){if(!Buffer.isBuffer(b))throw new TypeError("Argument must be a Buffer");if(this===b)return 0;return Buffer.compare(this,b)};Buffer.prototype.indexOf=function indexOf(val,byteOffset){if(byteOffset>2147483647)byteOffset=2147483647;else if(byteOffset<-2147483648)byteOffset=-2147483648;byteOffset>>=0;if(this.length===0)return-1;if(byteOffset>=this.length)return-1;if(byteOffset<0)byteOffset=Math.max(this.length+byteOffset,0);if(typeof val==="string"){if(val.length===0)return-1;return String.prototype.indexOf.call(this,val,byteOffset)}if(Buffer.isBuffer(val)){return arrayIndexOf(this,val,byteOffset)}if(typeof val==="number"){if(Buffer.TYPED_ARRAY_SUPPORT&&Uint8Array.prototype.indexOf==="function"){return Uint8Array.prototype.indexOf.call(this,val,byteOffset)}return arrayIndexOf(this,[val],byteOffset)}function arrayIndexOf(arr,val,byteOffset){var foundIndex=-1;for(var i=0;byteOffset+iremaining){length=remaining}}var strLen=string.length;if(strLen%2!==0)throw new Error("Invalid hex string");if(length>strLen/2){length=strLen/2}for(var i=0;ithis.length){throw new RangeError("attempt to write outside buffer bounds")}var remaining=this.length-offset;if(!length){length=remaining}else{length=Number(length);if(length>remaining){length=remaining}}encoding=String(encoding||"utf8").toLowerCase();var ret;switch(encoding){case"hex":ret=hexWrite(this,string,offset,length);break;case"utf8":case"utf-8":ret=utf8Write(this,string,offset,length);break;case"ascii":ret=asciiWrite(this,string,offset,length);break;case"binary":ret=binaryWrite(this,string,offset,length);break;case"base64":ret=base64Write(this,string,offset,length);break;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":ret=utf16leWrite(this,string,offset,length);break;default:throw new TypeError("Unknown encoding: "+encoding)}return ret};Buffer.prototype.toJSON=function toJSON(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function base64Slice(buf,start,end){if(start===0&&end===buf.length){return base64.fromByteArray(buf)}else{return base64.fromByteArray(buf.slice(start,end))}}function utf8Slice(buf,start,end){var res="";var tmp="";end=Math.min(buf.length,end);for(var i=start;ilen)end=len;var out="";for(var i=start;ilen){start=len}if(end<0){end+=len;if(end<0)end=0}else if(end>len){end=len}if(endlength)throw new RangeError("Trying to access beyond buffer length")}Buffer.prototype.readUIntLE=function readUIntLE(offset,byteLength,noAssert){offset=offset>>>0;byteLength=byteLength>>>0;if(!noAssert)checkOffset(offset,byteLength,this.length);var val=this[offset];var mul=1;var i=0;while(++i>>0;byteLength=byteLength>>>0;if(!noAssert){checkOffset(offset,byteLength,this.length)}var val=this[offset+--byteLength];var mul=1;while(byteLength>0&&(mul*=256)){val+=this[offset+--byteLength]*mul}return val};Buffer.prototype.readUInt8=function readUInt8(offset,noAssert){if(!noAssert)checkOffset(offset,1,this.length);return this[offset]};Buffer.prototype.readUInt16LE=function readUInt16LE(offset,noAssert){if(!noAssert)checkOffset(offset,2,this.length);return this[offset]|this[offset+1]<<8};Buffer.prototype.readUInt16BE=function readUInt16BE(offset,noAssert){if(!noAssert)checkOffset(offset,2,this.length);return this[offset]<<8|this[offset+1]};Buffer.prototype.readUInt32LE=function readUInt32LE(offset,noAssert){if(!noAssert)checkOffset(offset,4,this.length);return(this[offset]|this[offset+1]<<8|this[offset+2]<<16)+this[offset+3]*16777216};Buffer.prototype.readUInt32BE=function readUInt32BE(offset,noAssert){if(!noAssert)checkOffset(offset,4,this.length);return this[offset]*16777216+(this[offset+1]<<16|this[offset+2]<<8|this[offset+3])};Buffer.prototype.readIntLE=function readIntLE(offset,byteLength,noAssert){offset=offset>>>0;byteLength=byteLength>>>0;if(!noAssert)checkOffset(offset,byteLength,this.length);var val=this[offset];var mul=1;var i=0;while(++i=mul)val-=Math.pow(2,8*byteLength);return val};Buffer.prototype.readIntBE=function readIntBE(offset,byteLength,noAssert){offset=offset>>>0;byteLength=byteLength>>>0;if(!noAssert)checkOffset(offset,byteLength,this.length);var i=byteLength;var mul=1;var val=this[offset+--i];while(i>0&&(mul*=256)){val+=this[offset+--i]*mul}mul*=128;if(val>=mul)val-=Math.pow(2,8*byteLength);return val};Buffer.prototype.readInt8=function readInt8(offset,noAssert){if(!noAssert)checkOffset(offset,1,this.length);if(!(this[offset]&128))return this[offset];return(255-this[offset]+1)*-1};Buffer.prototype.readInt16LE=function readInt16LE(offset,noAssert){if(!noAssert)checkOffset(offset,2,this.length);var val=this[offset]|this[offset+1]<<8;return val&32768?val|4294901760:val};Buffer.prototype.readInt16BE=function readInt16BE(offset,noAssert){if(!noAssert)checkOffset(offset,2,this.length);var val=this[offset+1]|this[offset]<<8;return val&32768?val|4294901760:val};Buffer.prototype.readInt32LE=function readInt32LE(offset,noAssert){if(!noAssert)checkOffset(offset,4,this.length);return this[offset]|this[offset+1]<<8|this[offset+2]<<16|this[offset+3]<<24};Buffer.prototype.readInt32BE=function readInt32BE(offset,noAssert){if(!noAssert)checkOffset(offset,4,this.length);return this[offset]<<24|this[offset+1]<<16|this[offset+2]<<8|this[offset+3]};Buffer.prototype.readFloatLE=function readFloatLE(offset,noAssert){if(!noAssert)checkOffset(offset,4,this.length);return ieee754.read(this,offset,true,23,4)};Buffer.prototype.readFloatBE=function readFloatBE(offset,noAssert){if(!noAssert)checkOffset(offset,4,this.length);return ieee754.read(this,offset,false,23,4)};Buffer.prototype.readDoubleLE=function readDoubleLE(offset,noAssert){if(!noAssert)checkOffset(offset,8,this.length);return ieee754.read(this,offset,true,52,8)};Buffer.prototype.readDoubleBE=function readDoubleBE(offset,noAssert){if(!noAssert)checkOffset(offset,8,this.length);return ieee754.read(this,offset,false,52,8)};function checkInt(buf,value,offset,ext,max,min){if(!Buffer.isBuffer(buf))throw new TypeError("buffer must be a Buffer instance");if(value>max||valuebuf.length)throw new RangeError("index out of range")}Buffer.prototype.writeUIntLE=function writeUIntLE(value,offset,byteLength,noAssert){value=+value;offset=offset>>>0;byteLength=byteLength>>>0;if(!noAssert)checkInt(this,value,offset,byteLength,Math.pow(2,8*byteLength),0);var mul=1;var i=0;this[offset]=value&255;while(++i>>0&255}return offset+byteLength};Buffer.prototype.writeUIntBE=function writeUIntBE(value,offset,byteLength,noAssert){value=+value;offset=offset>>>0;byteLength=byteLength>>>0;if(!noAssert)checkInt(this,value,offset,byteLength,Math.pow(2,8*byteLength),0);var i=byteLength-1;var mul=1;this[offset+i]=value&255;while(--i>=0&&(mul*=256)){this[offset+i]=value/mul>>>0&255}return offset+byteLength};Buffer.prototype.writeUInt8=function writeUInt8(value,offset,noAssert){value=+value;offset=offset>>>0;if(!noAssert)checkInt(this,value,offset,1,255,0);if(!Buffer.TYPED_ARRAY_SUPPORT)value=Math.floor(value);this[offset]=value;return offset+1};function objectWriteUInt16(buf,value,offset,littleEndian){if(value<0)value=65535+value+1;for(var i=0,j=Math.min(buf.length-offset,2);i>>(littleEndian?i:1-i)*8}}Buffer.prototype.writeUInt16LE=function writeUInt16LE(value,offset,noAssert){value=+value;offset=offset>>>0;if(!noAssert)checkInt(this,value,offset,2,65535,0);if(Buffer.TYPED_ARRAY_SUPPORT){this[offset]=value;this[offset+1]=value>>>8}else{objectWriteUInt16(this,value,offset,true)}return offset+2};Buffer.prototype.writeUInt16BE=function writeUInt16BE(value,offset,noAssert){value=+value;offset=offset>>>0;if(!noAssert)checkInt(this,value,offset,2,65535,0);if(Buffer.TYPED_ARRAY_SUPPORT){this[offset]=value>>>8;this[offset+1]=value}else{objectWriteUInt16(this,value,offset,false)}return offset+2};function objectWriteUInt32(buf,value,offset,littleEndian){if(value<0)value=4294967295+value+1;for(var i=0,j=Math.min(buf.length-offset,4);i>>(littleEndian?i:3-i)*8&255}}Buffer.prototype.writeUInt32LE=function writeUInt32LE(value,offset,noAssert){value=+value;offset=offset>>>0;if(!noAssert)checkInt(this,value,offset,4,4294967295,0);if(Buffer.TYPED_ARRAY_SUPPORT){this[offset+3]=value>>>24;this[offset+2]=value>>>16;this[offset+1]=value>>>8;this[offset]=value}else{objectWriteUInt32(this,value,offset,true)}return offset+4};Buffer.prototype.writeUInt32BE=function writeUInt32BE(value,offset,noAssert){value=+value;offset=offset>>>0;if(!noAssert)checkInt(this,value,offset,4,4294967295,0);if(Buffer.TYPED_ARRAY_SUPPORT){this[offset]=value>>>24;this[offset+1]=value>>>16;this[offset+2]=value>>>8;this[offset+3]=value}else{objectWriteUInt32(this,value,offset,false)}return offset+4};Buffer.prototype.writeIntLE=function writeIntLE(value,offset,byteLength,noAssert){value=+value;offset=offset>>>0;if(!noAssert){checkInt(this,value,offset,byteLength,Math.pow(2,8*byteLength-1)-1,-Math.pow(2,8*byteLength-1))}var i=0;var mul=1;var sub=value<0?1:0;this[offset]=value&255;while(++i>0)-sub&255}return offset+byteLength};Buffer.prototype.writeIntBE=function writeIntBE(value,offset,byteLength,noAssert){value=+value;offset=offset>>>0;if(!noAssert){checkInt(this,value,offset,byteLength,Math.pow(2,8*byteLength-1)-1,-Math.pow(2,8*byteLength-1))}var i=byteLength-1;var mul=1;var sub=value<0?1:0;this[offset+i]=value&255;while(--i>=0&&(mul*=256)){this[offset+i]=(value/mul>>0)-sub&255}return offset+byteLength};Buffer.prototype.writeInt8=function writeInt8(value,offset,noAssert){value=+value;offset=offset>>>0;if(!noAssert)checkInt(this,value,offset,1,127,-128);if(!Buffer.TYPED_ARRAY_SUPPORT)value=Math.floor(value);if(value<0)value=255+value+1;this[offset]=value;return offset+1};Buffer.prototype.writeInt16LE=function writeInt16LE(value,offset,noAssert){value=+value;offset=offset>>>0;if(!noAssert)checkInt(this,value,offset,2,32767,-32768);if(Buffer.TYPED_ARRAY_SUPPORT){this[offset]=value;this[offset+1]=value>>>8}else{objectWriteUInt16(this,value,offset,true)}return offset+2};Buffer.prototype.writeInt16BE=function writeInt16BE(value,offset,noAssert){value=+value;offset=offset>>>0;if(!noAssert)checkInt(this,value,offset,2,32767,-32768);if(Buffer.TYPED_ARRAY_SUPPORT){this[offset]=value>>>8;this[offset+1]=value}else{objectWriteUInt16(this,value,offset,false)}return offset+2};Buffer.prototype.writeInt32LE=function writeInt32LE(value,offset,noAssert){value=+value;offset=offset>>>0;if(!noAssert)checkInt(this,value,offset,4,2147483647,-2147483648);if(Buffer.TYPED_ARRAY_SUPPORT){this[offset]=value;this[offset+1]=value>>>8;this[offset+2]=value>>>16;this[offset+3]=value>>>24}else{objectWriteUInt32(this,value,offset,true)}return offset+4};Buffer.prototype.writeInt32BE=function writeInt32BE(value,offset,noAssert){value=+value;offset=offset>>>0;if(!noAssert)checkInt(this,value,offset,4,2147483647,-2147483648);if(value<0)value=4294967295+value+1;if(Buffer.TYPED_ARRAY_SUPPORT){this[offset]=value>>>24;this[offset+1]=value>>>16;this[offset+2]=value>>>8;this[offset+3]=value}else{objectWriteUInt32(this,value,offset,false)}return offset+4};function checkIEEE754(buf,value,offset,ext,max,min){if(value>max||valuebuf.length)throw new RangeError("index out of range");if(offset<0)throw new RangeError("index out of range")}function writeFloat(buf,value,offset,littleEndian,noAssert){if(!noAssert){checkIEEE754(buf,value,offset,4,3.4028234663852886e38,-3.4028234663852886e38)}ieee754.write(buf,value,offset,littleEndian,23,4);return offset+4}Buffer.prototype.writeFloatLE=function writeFloatLE(value,offset,noAssert){return writeFloat(this,value,offset,true,noAssert)};Buffer.prototype.writeFloatBE=function writeFloatBE(value,offset,noAssert){return writeFloat(this,value,offset,false,noAssert)};function writeDouble(buf,value,offset,littleEndian,noAssert){if(!noAssert){checkIEEE754(buf,value,offset,8,1.7976931348623157e308,-1.7976931348623157e308)}ieee754.write(buf,value,offset,littleEndian,52,8);return offset+8}Buffer.prototype.writeDoubleLE=function writeDoubleLE(value,offset,noAssert){return writeDouble(this,value,offset,true,noAssert)};Buffer.prototype.writeDoubleBE=function writeDoubleBE(value,offset,noAssert){return writeDouble(this,value,offset,false,noAssert)};Buffer.prototype.copy=function copy(target,target_start,start,end){if(!start)start=0;if(!end&&end!==0)end=this.length;if(target_start>=target.length)target_start=target.length;if(!target_start)target_start=0;if(end>0&&end=this.length)throw new RangeError("sourceStart out of bounds");if(end<0)throw new RangeError("sourceEnd out of bounds");if(end>this.length)end=this.length;if(target.length-target_start=this.length)throw new RangeError("start out of bounds"); +if(end<0||end>this.length)throw new RangeError("end out of bounds");var i;if(typeof value==="number"){for(i=start;i55295&&codePoint<57344){if(leadSurrogate){if(codePoint<56320){if((units-=3)>-1)bytes.push(239,191,189);leadSurrogate=codePoint;continue}else{codePoint=leadSurrogate-55296<<10|codePoint-56320|65536;leadSurrogate=null}}else{if(codePoint>56319){if((units-=3)>-1)bytes.push(239,191,189);continue}else if(i+1===length){if((units-=3)>-1)bytes.push(239,191,189);continue}else{leadSurrogate=codePoint;continue}}}else if(leadSurrogate){if((units-=3)>-1)bytes.push(239,191,189);leadSurrogate=null}if(codePoint<128){if((units-=1)<0)break;bytes.push(codePoint)}else if(codePoint<2048){if((units-=2)<0)break;bytes.push(codePoint>>6|192,codePoint&63|128)}else if(codePoint<65536){if((units-=3)<0)break;bytes.push(codePoint>>12|224,codePoint>>6&63|128,codePoint&63|128)}else if(codePoint<2097152){if((units-=4)<0)break;bytes.push(codePoint>>18|240,codePoint>>12&63|128,codePoint>>6&63|128,codePoint&63|128)}else{throw new Error("Invalid code point")}}return bytes}function asciiToBytes(str){var byteArray=[];for(var i=0;i>8;lo=c%256;byteArray.push(lo);byteArray.push(hi)}return byteArray}function base64ToBytes(str){return base64.toByteArray(base64clean(str))}function blitBuffer(src,dst,offset,length){for(var i=0;i=dst.length||i>=src.length)break;dst[i+offset]=src[i]}return i}function decodeUtf8Char(str){try{return decodeURIComponent(str)}catch(err){return String.fromCharCode(65533)}}}).call(exports,__webpack_require__(7).Buffer)},function(module,exports,__webpack_require__){"use strict";function isBMP(buffer){return"BM"===buffer.toString("ascii",0,2)}function calculate(buffer){return{width:buffer.readUInt32LE(18),height:buffer.readUInt32LE(22)}}module.exports={detect:isBMP,calculate:calculate}},function(module,exports,__webpack_require__){"use strict";var gifRegexp=/^GIF8[7,9]a/;function isGIF(buffer){var signature=buffer.toString("ascii",0,6);return gifRegexp.test(signature)}function calculate(buffer){return{width:buffer.readUInt16LE(6),height:buffer.readUInt16LE(8)}}module.exports={detect:isGIF,calculate:calculate}},function(module,exports,__webpack_require__){"use strict";var validJFIFMarkers={ffdb:"0001010101",ffe0:"4a46494600",ffe1:"4578696600",ffe2:"4943435f50",ffe3:"",ffe8:"5350494646",ffec:"4475636b79",ffed:"50686f746f",ffee:"41646f6265"};var red=["",""];function isJPG(buffer){var SOIMarker=buffer.toString("hex",0,2);var JFIFMarker=buffer.toString("hex",2,4);if("ffd8"!==SOIMarker){return false}var got=buffer.toString("hex",6,11);var expected=JFIFMarker&&validJFIFMarkers[JFIFMarker];if(expected===""){console.warn(red[0]+"this looks like a unrecognised jpeg\n"+"please report the issue here\n"+red[1]," https://github.com/netroy/image-size/issues/new\n");return false}return got===expected||JFIFMarker==="ffdb"}function extractSize(buffer,i){return{height:buffer.readUInt16BE(i),width:buffer.readUInt16BE(i+2)}}function validateBuffer(buffer,i){if(i>buffer.length){throw new TypeError("Corrupt JPG, exceeded buffer limits")}if(buffer[i]!==255){throw new TypeError("Invalid JPG, marker table corrupted")}}function calculate(buffer){buffer=buffer.slice(4);var i,next;while(buffer.length){i=buffer.readUInt16BE(0);validateBuffer(buffer,i);next=buffer[i+1];if(next===192||next===194){return extractSize(buffer,i+5)}buffer=buffer.slice(i+2)}throw new TypeError("Invalid JPG, no size found")}module.exports={detect:isJPG,calculate:calculate}},function(module,exports,__webpack_require__){"use strict";var pngSignature="PNG\r\n\n";function isPNG(buffer){if(pngSignature===buffer.toString("ascii",1,8)){if("IHDR"!==buffer.toString("ascii",12,16)){throw new TypeError("invalid png")}return true}}function calculate(buffer){return{width:buffer.readUInt32BE(16),height:buffer.readUInt32BE(20)}}module.exports={detect:isPNG,calculate:calculate}},function(module,exports,__webpack_require__){"use strict";function isPSD(buffer){return"8BPS"===buffer.toString("ascii",0,4)}function calculate(buffer){return{width:buffer.readUInt32BE(18),height:buffer.readUInt32BE(14)}}module.exports={detect:isPSD,calculate:calculate}},function(module,exports,__webpack_require__){"use strict";var svgReg=/]+[^>]*>/;function isSVG(buffer){return svgReg.test(buffer)}var extractorRegExps={root:/]+>/,width:/(^|\s)width\s*=\s*"(.+?)"/i,height:/(^|\s)height\s*=\s*"(.+?)"/i,viewbox:/(^|\s)viewbox\s*=\s*"(.+?)"/i};function getRatio(viewbox){var ratio=1;if(viewbox&&viewbox[2]){var dim=viewbox[2].split(/\s/g);if(dim.length===4){dim=dim.map(function(i){return parseInt(i,10)});ratio=(dim[2]-dim[0])/(dim[3]-dim[1])}}return ratio}function parse(buffer){var body=buffer.toString().replace(/[\r\n\s]+/g," ");var section=body.match(extractorRegExps.root);var root=section&§ion[0];if(root){var width=root.match(extractorRegExps.width);var height=root.match(extractorRegExps.height);var viewbox=root.match(extractorRegExps.viewbox);var ratio=getRatio(viewbox);return{width:parseInt(width&&width[2],10)||0,height:parseInt(height&&height[2],10)||0,ratio:ratio}}}function calculate(buffer){var parsed=parse(buffer);var width=parsed.width;var height=parsed.height;var ratio=parsed.ratio;if(width&&height){return{width:width,height:height}}else{if(width){return{width:width,height:Math.floor(width/ratio)}}else if(height){return{width:Math.floor(height*ratio),height:height}}else{throw new TypeError("invalid svg")}}}module.exports={detect:isSVG,calculate:calculate}},function(module,exports,__webpack_require__){(function(Buffer){"use strict";var fs=__webpack_require__(16);var readUInt=__webpack_require__(17);function isTIFF(buffer){var hex4=buffer.toString("hex",0,4);return"49492a00"===hex4||"4d4d002a"===hex4}function readIFD(buffer,filepath,isBigEndian){var ifdOffset=readUInt(buffer,32,4,isBigEndian);var bufferSize=1024;var fileSize=fs.statSync(filepath).size;if(ifdOffset+bufferSize>fileSize){bufferSize=fileSize-ifdOffset-10}var endBuffer=new Buffer(bufferSize);var descriptor=fs.openSync(filepath,"r");fs.readSync(descriptor,endBuffer,0,bufferSize,ifdOffset);var ifdBuffer=endBuffer.slice(2);return ifdBuffer}function readValue(buffer,isBigEndian){var low=readUInt(buffer,16,8,isBigEndian);var high=readUInt(buffer,16,10,isBigEndian);return(high<<16)+low}function nextTag(buffer){if(buffer.length>24){return buffer.slice(12)}}function extractTags(buffer,isBigEndian){var tags={};var code,type,length;while(buffer&&buffer.length){code=readUInt(buffer,16,0,isBigEndian);type=readUInt(buffer,16,2,isBigEndian);length=readUInt(buffer,32,4,isBigEndian);if(code===0){break}else{if(length===1&&type===3){tags[code]=readValue(buffer,isBigEndian)}buffer=nextTag(buffer)}}return tags}function determineEndianness(buffer){var signature=buffer.toString("ascii",0,2);if("II"===signature){return"LE"}else if("MM"===signature){return"BE"}}function calculate(buffer,filepath){if(!filepath){throw new TypeError("Tiff doesn't support buffer")}var isBigEndian=determineEndianness(buffer)==="BE";var ifdBuffer=readIFD(buffer,filepath,isBigEndian);var tags=extractTags(ifdBuffer,isBigEndian);var width=tags[256];var height=tags[257];if(!width||!height){throw new TypeError("Invalid Tiff, missing tags")}return{width:width,height:height}}module.exports={detect:isTIFF,calculate:calculate}}).call(exports,__webpack_require__(7).Buffer)},function(module,exports,__webpack_require__){"use strict";function isWebP(buffer){var riffHeader="RIFF"===buffer.toString("ascii",0,4);var webpHeader="WEBP"===buffer.toString("ascii",8,12);var vp8Header="VP8"===buffer.toString("ascii",12,15);return riffHeader&&webpHeader&&vp8Header}function calculate(buffer){var chunkHeader=buffer.toString("ascii",12,16);buffer=buffer.slice(20,30);if(chunkHeader==="VP8 "&&buffer[0]!==47){return calculateLossy(buffer)}var signature=buffer.toString("hex",3,6);if(chunkHeader==="VP8L"&&signature!=="9d012a"){return calculateLossless(buffer)}return false}function calculateLossless(buffer){return{width:1+((buffer[2]&63)<<8|buffer[1]),height:1+((buffer[4]&15)<<10|buffer[3]<<2|(buffer[2]&192)>>6)}}function calculateLossy(buffer){return{width:buffer.readInt16LE(6)&16383,height:buffer.readInt16LE(8)&16383}}module.exports={detect:isWebP,calculate:calculate}},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){"use strict";module.exports=function(buffer,bits,offset,isBigEndian){offset=offset||0;var endian=!!isBigEndian?"BE":"LE";var method=buffer["readUInt"+bits+endian];return method.call(buffer,offset)}},function(module,exports,__webpack_require__){var process=module.exports={};var queue=[];var draining=false;function drainQueue(){if(draining){return}draining=true;var currentQueue;var len=queue.length;while(len){currentQueue=queue;queue=[];var i=-1;while(++i>1,nBits=-7,i=isLE?nBytes-1:0,d=isLE?-1:1,s=buffer[offset+i];i+=d;e=s&(1<<-nBits)-1;s>>=-nBits;nBits+=eLen;for(;nBits>0;e=e*256+buffer[offset+i],i+=d,nBits-=8);m=e&(1<<-nBits)-1;e>>=-nBits;nBits+=mLen;for(;nBits>0;m=m*256+buffer[offset+i],i+=d,nBits-=8);if(e===0){e=1-eBias}else if(e===eMax){return m?NaN:(s?-1:1)*Infinity}else{m=m+Math.pow(2,mLen);e=e-eBias}return(s?-1:1)*m*Math.pow(2,e-mLen)};exports.write=function(buffer,value,offset,isLE,mLen,nBytes){var e,m,c,eLen=nBytes*8-mLen-1,eMax=(1<>1,rt=mLen===23?Math.pow(2,-24)-Math.pow(2,-77):0,i=isLE?0:nBytes-1,d=isLE?1:-1,s=value<0||value===0&&1/value<0?1:0;value=Math.abs(value);if(isNaN(value)||value===Infinity){m=isNaN(value)?1:0;e=eMax}else{e=Math.floor(Math.log(value)/Math.LN2);if(value*(c=Math.pow(2,-e))<1){e--;c*=2}if(e+eBias>=1){value+=rt/c}else{value+=rt*Math.pow(2,1-eBias)}if(value*c>=2){e++;c/=2}if(e+eBias>=eMax){m=0;e=eMax}else if(e+eBias>=1){m=(value*c-1)*Math.pow(2,mLen);e=e+eBias}else{m=value*Math.pow(2,eBias-1)*Math.pow(2,mLen);e=0}}for(;mLen>=8;buffer[offset+i]=m&255,i+=d,m/=256,mLen-=8);e=e<0;buffer[offset+i]=e&255,i+=d,e/=256,eLen-=8);buffer[offset+i-d]|=s*128}},function(module,exports,__webpack_require__){var isArray=Array.isArray;var str=Object.prototype.toString;module.exports=isArray||function(val){return!!val&&"[object Array]"==str.call(val)}},function(module,exports,__webpack_require__){var lookup="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";(function(exports){"use strict";var Arr=typeof Uint8Array!=="undefined"?Uint8Array:Array;var PLUS="+".charCodeAt(0);var SLASH="/".charCodeAt(0);var NUMBER="0".charCodeAt(0);var LOWER="a".charCodeAt(0);var UPPER="A".charCodeAt(0);var PLUS_URL_SAFE="-".charCodeAt(0);var SLASH_URL_SAFE="_".charCodeAt(0);function decode(elt){var code=elt.charCodeAt(0);if(code===PLUS||code===PLUS_URL_SAFE)return 62;if(code===SLASH||code===SLASH_URL_SAFE)return 63;if(code0){throw new Error("Invalid string. Length must be a multiple of 4")}var len=b64.length;placeHolders="="===b64.charAt(len-2)?2:"="===b64.charAt(len-1)?1:0;arr=new Arr(b64.length*3/4-placeHolders);l=placeHolders>0?b64.length-4:b64.length;var L=0;function push(v){arr[L++]=v}for(i=0,j=0;i>16);push((tmp&65280)>>8);push(tmp&255)}if(placeHolders===2){tmp=decode(b64.charAt(i))<<2|decode(b64.charAt(i+1))>>4;push(tmp&255)}else if(placeHolders===1){tmp=decode(b64.charAt(i))<<10|decode(b64.charAt(i+1))<<4|decode(b64.charAt(i+2))>>2;push(tmp>>8&255);push(tmp&255)}return arr}function uint8ToBase64(uint8){var i,extraBytes=uint8.length%3,output="",temp,length;function encode(num){return lookup.charAt(num)}function tripletToBase64(num){return encode(num>>18&63)+encode(num>>12&63)+encode(num>>6&63)+encode(num&63)}for(i=0,length=uint8.length-extraBytes;i>2);output+=encode(temp<<4&63);output+="==";break;case 2:temp=(uint8[uint8.length-2]<<8)+uint8[uint8.length-1];output+=encode(temp>>10);output+=encode(temp>>4&63);output+=encode(temp<<2&63);output+="=";break}return output}exports.toByteArray=b64ToByteArray;exports.fromByteArray=uint8ToBase64})(false?this.base64js={}:exports)}])}); \ No newline at end of file diff --git a/src/data/extra/web/js/markdown-it/markdown-it-inject-linenumbers.js b/src/data/extra/web/js/markdown-it/markdown-it-inject-linenumbers.js new file mode 100644 index 00000000..c9cd8c7c --- /dev/null +++ b/src/data/extra/web/js/markdown-it/markdown-it-inject-linenumbers.js @@ -0,0 +1,55 @@ +/*! markdown-it-inject-linenumbers 0.2.0 https://github.com//digitalmoksha/markdown-it-inject-linenumbers @license MIT */(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.markdownitInjectLinenumbers = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o=i)return!1;for(e.pos=u+1;e.pos?@[\]^_`{|}~-])/g;r.exports=function(e){e.inline.ruler.after("emphasis","sub",o)}},{}]},{},[1])(1)}); \ No newline at end of file diff --git a/src/data/extra/web/js/markdown-it/markdown-it-sup.min.js b/src/data/extra/web/js/markdown-it/markdown-it-sup.min.js new file mode 100644 index 00000000..67da65cd --- /dev/null +++ b/src/data/extra/web/js/markdown-it/markdown-it-sup.min.js @@ -0,0 +1,2 @@ +/*! markdown-it-sup 1.0.0 https://github.com//markdown-it/markdown-it-sup @license MIT */ +!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var r;r="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,r.markdownitSup=e()}}(function(){return function e(r,o,n){function t(i,p){if(!o[i]){if(!r[i]){var u="function"==typeof require&&require;if(!p&&u)return u(i,!0);if(s)return s(i,!0);var f=new Error("Cannot find module '"+i+"'");throw f.code="MODULE_NOT_FOUND",f}var a=o[i]={exports:{}};r[i][0].call(a.exports,function(e){var o=r[i][1][e];return t(o?o:e)},a,a.exports,e,r,o,n)}return o[i].exports}for(var s="function"==typeof require&&require,i=0;i=i)return!1;for(e.pos=p+1;e.pos?@[\]^_`{|}~-])/g;r.exports=function(e){e.inline.ruler.after("emphasis","sup",o)}},{}]},{},[1])(1)}); \ No newline at end of file diff --git a/src/data/extra/web/js/markdown-it/markdown-it-task-lists.js b/src/data/extra/web/js/markdown-it/markdown-it-task-lists.js new file mode 100644 index 00000000..da4b2321 --- /dev/null +++ b/src/data/extra/web/js/markdown-it/markdown-it-task-lists.js @@ -0,0 +1,121 @@ +/*! markdown-it-task-lists 2.1.0 https://github.com/revin/markdown-it-task-lists#readme by @license ISC */ +(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.markdownitTaskLists = f()}})(function(){var define,module,exports;return (function(){function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o= 0; i--) { + if (tokens[i].level === targetLevel) { + return i; + } + } + return -1; +} + +function isTodoItem(tokens, index) { + return isInline(tokens[index]) && + isParagraph(tokens[index - 1]) && + isListItem(tokens[index - 2]) && + startsWithTodoMarkdown(tokens[index]); +} + +function todoify(token, TokenConstructor) { + token.children.unshift(makeCheckbox(token, TokenConstructor)); + token.children[1].content = token.children[1].content.slice(3); + token.content = token.content.slice(3); + + if (useLabelWrapper) { + if (useLabelAfter) { + token.children.pop(); + + // Use large random number as id property of the checkbox. + var id = 'task-item-' + Math.ceil(Math.random() * (10000 * 1000) - 1000); + token.children[0].content = token.children[0].content.slice(0, -1) + ' id="' + id + '">'; + token.children.push(afterLabel(token.content, id, TokenConstructor)); + } else { + token.children.unshift(beginLabel(TokenConstructor)); + token.children.push(endLabel(TokenConstructor)); + } + } +} + +function makeCheckbox(token, TokenConstructor) { + var checkbox = new TokenConstructor('html_inline', '', 0); + var disabledAttr = disableCheckboxes ? ' disabled="" ' : ''; + if (token.content.indexOf('[ ] ') === 0) { + checkbox.content = '($2)', + tag: '\\[' + }, + { name: 'math_block', + rex: /\\\[([\s\S]+?)\\\]\s*$/gmy, + tmpl: '
    $1
    ', + tag: '\\[' + } + ] + }, + gitlab: { + inline: [ + { name: 'math_inline', + rex: /\$`(.+?)`\$/gy, + tmpl: '$1', + tag: '$`' + } + ], + block: [ + { name: 'math_block_eqno', + rex: /`{3}math\s*([^`]+?)\s*?`{3}\s*\(([^)\r\n]+?)\)/gm, + tmpl: '
    $1($2)
    ', + tag: '```math' + }, + { name: 'math_block', + rex: /`{3}math\s*([^`]*?)\s*`{3}/gm, + tmpl: '
    $1
    ', + tag: '```math' + } + ] + }, + julia: { + inline: [ + { name: 'math_inline', + rex: /`{2}([^`]+?)`{2}/gy, + tmpl: '$1', + tag: '``' + }, + { name: 'math_inline', + rex: /\$((?:\S?)|(?:\S.*?\S))\$/gy, + tmpl: '$1', + tag: '$', + pre: texmath.$_pre, + post: texmath.$_post + } + ], + block: [ + { name: 'math_block_eqno', + rex: /`{3}math\s+?([^`]+?)\s+?`{3}\s*?\(([^)$\r\n]+?)\)\s*$/gmy, + tmpl: '
    $1($2)
    ', + tag: '```math' + }, + { name: 'math_block', + rex: /`{3}math\s+?([^`]+?)\s+?`{3}\s*$/gmy, + tmpl: '
    $1
    ', + tag: '```math' + } + ] + }, + kramdown: { + inline: [ + { name: 'math_inline', + rex: /\${2}(.+?)\${2}/gy, + tmpl: '$1', + tag: '$$' + } + ], + block: [ + { name: 'math_block_eqno', + rex: /\${2}([^$]+?)\${2}\s*?\(([^)\s]+?)\)\s*$/gmy, + tmpl: '
    $1($2)
    ', + tag: '$$' + }, + { name: 'math_block', + rex: /\${2}([^$]+?)\${2}\s*$/gmy, + tmpl: '
    $1
    ', + tag: '$$' + } + ] + }, + dollars: { + inline: [ + { name: 'math_inline_double', + rex: /\${2}((?:\S)|(?:\S.*?\S))\${2}/gy, + tmpl: '
    $1
    ', + tag: '$$', + displayMode: true, + pre: texmath.$_pre, + post: texmath.$_post + }, + { name: 'math_inline', + rex: /\$((?:\S)|(?:\S.*?\S))\$/gy, + tmpl: '$1', + tag: '$', + pre: texmath.$_pre, + post: texmath.$_post + } + ], + block: [ + { name: 'math_block_eqno', + rex: /\${2}([^$]+?)\${2}\s*?\(([^)\s]+?)\)\s*$/gmy, + tmpl: '
    $1($2)
    ', + tag: '$$' + }, + { name: 'math_block', + rex: /\${2}([^$]+?)\${2}\s*$/gmy, + tmpl: '
    $1
    ', + tag: '$$' + } + ] + }, + raw: { + inline: [], + block: [ + { + name: 'math_block', + rex: /(\\begin\s*\{([^{}\s\r\n]+)\}(?:[^\\]|\\(?!end\s*\{\2\}))*\\end\s*\{\2\})\s*$/gmy, + tmpl: '
    $1
    ', + tag: '\\begin' + } + ] + } +}; + +if (typeof module === "object" && module.exports) + module.exports = texmath; diff --git a/src/data/extra/web/js/markdown-it/markdown-it-xss.min.js b/src/data/extra/web/js/markdown-it/markdown-it-xss.min.js new file mode 100644 index 00000000..233398a7 --- /dev/null +++ b/src/data/extra/web/js/markdown-it/markdown-it-xss.min.js @@ -0,0 +1 @@ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define("markdown-it-xss",[],e):"object"==typeof exports?exports["markdown-it-xss"]=e():t["markdown-it-xss"]=e()}(window,(function(){return function(t){var e={};function r(n){if(e[n])return e[n].exports;var i=e[n]={i:n,l:!1,exports:{}};return t[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return r.m=t,r.c=e,r.d=function(t,e,n){r.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:n})},r.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},r.t=function(t,e){if(1&e&&(t=r(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var i in t)r.d(n,i,function(e){return t[e]}.bind(null,i));return n},r.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return r.d(e,"a",e),e},r.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r.p="",r(r.s=6)}([function(t,e,r){var n=r(3),i=r(8);for(var o in(e=t.exports=function(t,e){return new i(e).process(t)}).FilterCSS=i,n)e[o]=n[o];"undefined"!=typeof window&&(window.filterCSS=t.exports)},function(t,e){t.exports={indexOf:function(t,e){var r,n;if(Array.prototype.indexOf)return t.indexOf(e);for(r=0,n=t.length;r/g,f=/"/g,g=/"/g,p=/&#([a-zA-Z0-9]*);?/gim,d=/:?/gim,h=/&newline;?/gim,m=/((j\s*a\s*v\s*a|v\s*b|l\s*i\s*v\s*e)\s*s\s*c\s*r\s*i\s*p\s*t\s*|m\s*o\s*c\s*h\s*a)\:/gi,b=/e\s*x\s*p\s*r\s*e\s*s\s*s\s*i\s*o\s*n\s*\(.*/gi,v=/u\s*r\s*l\s*\(.*/gi;function y(t){return t.replace(f,""")}function w(t){return t.replace(g,'"')}function x(t){return t.replace(p,(function(t,e){return"x"===e[0]||"X"===e[0]?String.fromCharCode(parseInt(e.substr(1),16)):String.fromCharCode(parseInt(e,10))}))}function k(t){return t.replace(d,":").replace(h," ")}function A(t){for(var e="",r=0,n=t.length;r/g;e.whiteList={a:["target","href","title"],abbr:["title"],address:[],area:["shape","coords","href","alt"],article:[],aside:[],audio:["autoplay","controls","loop","preload","src"],b:[],bdi:["dir"],bdo:["dir"],big:[],blockquote:["cite"],br:[],caption:[],center:[],cite:[],code:[],col:["align","valign","span","width"],colgroup:["align","valign","span","width"],dd:[],del:["datetime"],details:["open"],div:[],dl:[],dt:[],em:[],font:["color","size","face"],footer:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],header:[],hr:[],i:[],img:["src","alt","title","width","height"],ins:["datetime"],li:[],mark:[],nav:[],ol:[],p:[],pre:[],s:[],section:[],small:[],span:[],sub:[],sup:[],strong:[],table:["width","border","align","valign"],tbody:["align","valign"],td:["width","rowspan","colspan","align","valign"],tfoot:["align","valign"],th:["width","rowspan","colspan","align","valign"],thead:["align","valign"],tr:["rowspan","align","valign"],tt:[],u:[],ul:[],video:["autoplay","controls","loop","preload","src","height","width"]},e.getDefaultWhiteList=a,e.onTag=function(t,e,r){},e.onIgnoreTag=function(t,e,r){},e.onTagAttr=function(t,e,r){},e.onIgnoreTagAttr=function(t,e,r){},e.safeAttrValue=function(t,e,r,n){if(r=T(r),"href"===e||"src"===e){if("#"===(r=o.trim(r)))return"#";if("http://"!==r.substr(0,7)&&"https://"!==r.substr(0,8)&&"mailto:"!==r.substr(0,7)&&"tel:"!==r.substr(0,4)&&"#"!==r[0]&&"/"!==r[0])return""}else if("background"===e){if(m.lastIndex=0,m.test(r))return""}else if("style"===e){if(b.lastIndex=0,b.test(r))return"";if(v.lastIndex=0,v.test(r)&&(m.lastIndex=0,m.test(r)))return"";!1!==n&&(r=(n=n||s).process(r))}return r=S(r)},e.escapeHtml=l,e.escapeQuote=y,e.unescapeQuote=w,e.escapeHtmlEntities=x,e.escapeDangerHtml5Entities=k,e.clearNonPrintableCharacter=A,e.friendlyAttrValue=T,e.escapeAttrValue=S,e.onIgnoreTagStripAll=function(){return""},e.StripTagBody=function(t,e){"function"!=typeof e&&(e=function(){});var r=!Array.isArray(t),n=[],i=!1;return{onIgnoreTag:function(a,s,l){if(function(e){return!!r||-1!==o.indexOf(t,e)}(a)){if(l.isClosing){var c="[/removed]",u=l.position+c.length;return n.push([!1!==i?i:l.position,u]),i=!1,c}return i||(i=l.position),"[removed]"}return e(a,s,l)},remove:function(t){var e="",r=0;return o.forEach(n,(function(n){e+=t.slice(r,n[0]),r=n[1]})),e+=t.slice(r)}}},e.stripCommentTag=function(t){return t.replace(I,"")},e.stripBlankChar=function(t){var e=t.split("");return(e=e.filter((function(t){var e=t.charCodeAt(0);return 127!==e&&(!(e<=31)||(10===e||13===e))}))).join("")},e.cssFilter=s,e.getDefaultCSSWhiteList=i},function(t,e){function r(){var t={"align-content":!1,"align-items":!1,"align-self":!1,"alignment-adjust":!1,"alignment-baseline":!1,all:!1,"anchor-point":!1,animation:!1,"animation-delay":!1,"animation-direction":!1,"animation-duration":!1,"animation-fill-mode":!1,"animation-iteration-count":!1,"animation-name":!1,"animation-play-state":!1,"animation-timing-function":!1,azimuth:!1,"backface-visibility":!1,background:!0,"background-attachment":!0,"background-clip":!0,"background-color":!0,"background-image":!0,"background-origin":!0,"background-position":!0,"background-repeat":!0,"background-size":!0,"baseline-shift":!1,binding:!1,bleed:!1,"bookmark-label":!1,"bookmark-level":!1,"bookmark-state":!1,border:!0,"border-bottom":!0,"border-bottom-color":!0,"border-bottom-left-radius":!0,"border-bottom-right-radius":!0,"border-bottom-style":!0,"border-bottom-width":!0,"border-collapse":!0,"border-color":!0,"border-image":!0,"border-image-outset":!0,"border-image-repeat":!0,"border-image-slice":!0,"border-image-source":!0,"border-image-width":!0,"border-left":!0,"border-left-color":!0,"border-left-style":!0,"border-left-width":!0,"border-radius":!0,"border-right":!0,"border-right-color":!0,"border-right-style":!0,"border-right-width":!0,"border-spacing":!0,"border-style":!0,"border-top":!0,"border-top-color":!0,"border-top-left-radius":!0,"border-top-right-radius":!0,"border-top-style":!0,"border-top-width":!0,"border-width":!0,bottom:!1,"box-decoration-break":!0,"box-shadow":!0,"box-sizing":!0,"box-snap":!0,"box-suppress":!0,"break-after":!0,"break-before":!0,"break-inside":!0,"caption-side":!1,chains:!1,clear:!0,clip:!1,"clip-path":!1,"clip-rule":!1,color:!0,"color-interpolation-filters":!0,"column-count":!1,"column-fill":!1,"column-gap":!1,"column-rule":!1,"column-rule-color":!1,"column-rule-style":!1,"column-rule-width":!1,"column-span":!1,"column-width":!1,columns:!1,contain:!1,content:!1,"counter-increment":!1,"counter-reset":!1,"counter-set":!1,crop:!1,cue:!1,"cue-after":!1,"cue-before":!1,cursor:!1,direction:!1,display:!0,"display-inside":!0,"display-list":!0,"display-outside":!0,"dominant-baseline":!1,elevation:!1,"empty-cells":!1,filter:!1,flex:!1,"flex-basis":!1,"flex-direction":!1,"flex-flow":!1,"flex-grow":!1,"flex-shrink":!1,"flex-wrap":!1,float:!1,"float-offset":!1,"flood-color":!1,"flood-opacity":!1,"flow-from":!1,"flow-into":!1,font:!0,"font-family":!0,"font-feature-settings":!0,"font-kerning":!0,"font-language-override":!0,"font-size":!0,"font-size-adjust":!0,"font-stretch":!0,"font-style":!0,"font-synthesis":!0,"font-variant":!0,"font-variant-alternates":!0,"font-variant-caps":!0,"font-variant-east-asian":!0,"font-variant-ligatures":!0,"font-variant-numeric":!0,"font-variant-position":!0,"font-weight":!0,grid:!1,"grid-area":!1,"grid-auto-columns":!1,"grid-auto-flow":!1,"grid-auto-rows":!1,"grid-column":!1,"grid-column-end":!1,"grid-column-start":!1,"grid-row":!1,"grid-row-end":!1,"grid-row-start":!1,"grid-template":!1,"grid-template-areas":!1,"grid-template-columns":!1,"grid-template-rows":!1,"hanging-punctuation":!1,height:!0,hyphens:!1,icon:!1,"image-orientation":!1,"image-resolution":!1,"ime-mode":!1,"initial-letters":!1,"inline-box-align":!1,"justify-content":!1,"justify-items":!1,"justify-self":!1,left:!1,"letter-spacing":!0,"lighting-color":!0,"line-box-contain":!1,"line-break":!1,"line-grid":!1,"line-height":!1,"line-snap":!1,"line-stacking":!1,"line-stacking-ruby":!1,"line-stacking-shift":!1,"line-stacking-strategy":!1,"list-style":!0,"list-style-image":!0,"list-style-position":!0,"list-style-type":!0,margin:!0,"margin-bottom":!0,"margin-left":!0,"margin-right":!0,"margin-top":!0,"marker-offset":!1,"marker-side":!1,marks:!1,mask:!1,"mask-box":!1,"mask-box-outset":!1,"mask-box-repeat":!1,"mask-box-slice":!1,"mask-box-source":!1,"mask-box-width":!1,"mask-clip":!1,"mask-image":!1,"mask-origin":!1,"mask-position":!1,"mask-repeat":!1,"mask-size":!1,"mask-source-type":!1,"mask-type":!1,"max-height":!0,"max-lines":!1,"max-width":!0,"min-height":!0,"min-width":!0,"move-to":!1,"nav-down":!1,"nav-index":!1,"nav-left":!1,"nav-right":!1,"nav-up":!1,"object-fit":!1,"object-position":!1,opacity:!1,order:!1,orphans:!1,outline:!1,"outline-color":!1,"outline-offset":!1,"outline-style":!1,"outline-width":!1,overflow:!1,"overflow-wrap":!1,"overflow-x":!1,"overflow-y":!1,padding:!0,"padding-bottom":!0,"padding-left":!0,"padding-right":!0,"padding-top":!0,page:!1,"page-break-after":!1,"page-break-before":!1,"page-break-inside":!1,"page-policy":!1,pause:!1,"pause-after":!1,"pause-before":!1,perspective:!1,"perspective-origin":!1,pitch:!1,"pitch-range":!1,"play-during":!1,position:!1,"presentation-level":!1,quotes:!1,"region-fragment":!1,resize:!1,rest:!1,"rest-after":!1,"rest-before":!1,richness:!1,right:!1,rotation:!1,"rotation-point":!1,"ruby-align":!1,"ruby-merge":!1,"ruby-position":!1,"shape-image-threshold":!1,"shape-outside":!1,"shape-margin":!1,size:!1,speak:!1,"speak-as":!1,"speak-header":!1,"speak-numeral":!1,"speak-punctuation":!1,"speech-rate":!1,stress:!1,"string-set":!1,"tab-size":!1,"table-layout":!1,"text-align":!0,"text-align-last":!0,"text-combine-upright":!0,"text-decoration":!0,"text-decoration-color":!0,"text-decoration-line":!0,"text-decoration-skip":!0,"text-decoration-style":!0,"text-emphasis":!0,"text-emphasis-color":!0,"text-emphasis-position":!0,"text-emphasis-style":!0,"text-height":!0,"text-indent":!0,"text-justify":!0,"text-orientation":!0,"text-overflow":!0,"text-shadow":!0,"text-space-collapse":!0,"text-transform":!0,"text-underline-position":!0,"text-wrap":!0,top:!1,transform:!1,"transform-origin":!1,"transform-style":!1,transition:!1,"transition-delay":!1,"transition-duration":!1,"transition-property":!1,"transition-timing-function":!1,"unicode-bidi":!1,"vertical-align":!1,visibility:!1,"voice-balance":!1,"voice-duration":!1,"voice-family":!1,"voice-pitch":!1,"voice-range":!1,"voice-rate":!1,"voice-stress":!1,"voice-volume":!1,volume:!1,"white-space":!1,widows:!1,width:!0,"will-change":!1,"word-break":!0,"word-spacing":!0,"word-wrap":!0,"wrap-flow":!1,"wrap-through":!1,"writing-mode":!1,"z-index":!1};return t}var n=/javascript\s*\:/gim;e.whiteList=r(),e.getDefaultWhiteList=r,e.onAttr=function(t,e,r){},e.onIgnoreAttr=function(t,e,r){},e.safeAttrValue=function(t,e){return n.test(e)?"":e}},function(t,e){t.exports={indexOf:function(t,e){var r,n;if(Array.prototype.indexOf)return t.indexOf(e);for(r=0,n=t.length;r0;e--){var r=t[e];if(" "!==r)return"="===r?e:-1}}function c(t){return function(t){return'"'===t[0]&&'"'===t[t.length-1]||"'"===t[0]&&"'"===t[t.length-1]}(t)?t.substr(1,t.length-2):t}e.parseTag=function(t,e,r){var n="",a=0,s=!1,l=!1,c=0,u=t.length,f="",g="";for(c=0;c"===p){n+=r(t.slice(a,s)),f=i(g=t.slice(s,c+1)),n+=e(s,n.length,f,g,o(g)),a=c+1,s=!1;continue}if(('"'===p||"'"===p)&&"="===t.charAt(c-1)){l=p;continue}}else if(p===l){l=!1;continue}}return a1&&void 0!==arguments[1]?arguments[1]:{},r=e.xss,i=new n.FilterXSS("function"==typeof r?r(n):r);function o(t){return t=i.process(t)}function a(t){for(var e=0;e";var v=function(t){var e=l.spaceIndex(t);if(-1===e)return{html:"",closing:"/"===t[t.length-2]};var r="/"===(t=l.trim(t.slice(e+1,-1)))[t.length-1];return r&&(t=l.trim(t.slice(0,-1))),{html:t,closing:r}}(a),y=r[i],w=s(v.html,(function(t,e){var r,n=-1!==l.indexOf(y,t);return c(r=u(i,t,e,n))?n?(e=g(i,t,e,d))?t+'="'+e+'"':t:c(r=f(i,t,e,n))?void 0:r:r}));a="<"+i;return w&&(a+=" "+w),v.closing&&(a+=" /"),a+=">"}return c(m=o(i,a,b))?p(a):m}),p);return h&&(m=h.remove(m)),m},t.exports=u}])})); \ No newline at end of file diff --git a/src/data/extra/web/js/markdown-it/markdown-it.min.js b/src/data/extra/web/js/markdown-it/markdown-it.min.js new file mode 100644 index 00000000..8d34170b --- /dev/null +++ b/src/data/extra/web/js/markdown-it/markdown-it.min.js @@ -0,0 +1 @@ +/*! markdown-it 11.0.0 https://github.com//markdown-it/markdown-it @license MIT */!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).markdownit=e()}}((function(){return function e(r,t,n){function s(i,a){if(!t[i]){if(!r[i]){var c="function"==typeof require&&require;if(!a&&c)return c(i,!0);if(o)return o(i,!0);var l=new Error("Cannot find module '"+i+"'");throw l.code="MODULE_NOT_FOUND",l}var u=t[i]={exports:{}};r[i][0].call(u.exports,(function(e){return s(r[i][1][e]||e)}),u,u.exports,e,r,t,n)}return t[i].exports}for(var o="function"==typeof require&&require,i=0;i`\\x00-\\x20]+|'[^']*'|\"[^\"]*\"))?)*\\s*\\/?>",s="<\\/[A-Za-z][A-Za-z0-9\\-]*\\s*>",o=new RegExp("^(?:"+n+"|"+s+"|\x3c!----\x3e|\x3c!--(?:-?[^>-])(?:-?[^-])*--\x3e|<[?].*?[?]>|]*>|)"),i=new RegExp("^(?:"+n+"|"+s+")");r.exports.HTML_TAG_RE=o,r.exports.HTML_OPEN_CLOSE_TAG_RE=i},{}],4:[function(e,r,t){"use strict";var n=Object.prototype.hasOwnProperty;function s(e,r){return n.call(e,r)}function o(e){return!(e>=55296&&e<=57343)&&(!(e>=64976&&e<=65007)&&(65535!=(65535&e)&&65534!=(65535&e)&&(!(e>=0&&e<=8)&&(11!==e&&(!(e>=14&&e<=31)&&(!(e>=127&&e<=159)&&!(e>1114111)))))))}function i(e){if(e>65535){var r=55296+((e-=65536)>>10),t=56320+(1023&e);return String.fromCharCode(r,t)}return String.fromCharCode(e)}var a=/\\([!"#$%&'()*+,\-.\/:;<=>?@[\\\]^_`{|}~])/g,c=new RegExp(a.source+"|"+/&([a-z#][a-z0-9]{1,31});/gi.source,"gi"),l=/^#((?:x[a-f0-9]{1,8}|[0-9]{1,8}))/i,u=e("./entities");var p=/[&<>"]/,h=/[&<>"]/g,f={"&":"&","<":"<",">":">",'"':"""};function d(e){return f[e]}var m=/[.?*+^$[\]\\(){}|-]/g;var _=e("uc.micro/categories/P/regex");t.lib={},t.lib.mdurl=e("mdurl"),t.lib.ucmicro=e("uc.micro"),t.assign=function(e){var r=Array.prototype.slice.call(arguments,1);return r.forEach((function(r){if(r){if("object"!=typeof r)throw new TypeError(r+"must be object");Object.keys(r).forEach((function(t){e[t]=r[t]}))}})),e},t.isString=function(e){return"[object String]"===function(e){return Object.prototype.toString.call(e)}(e)},t.has=s,t.unescapeMd=function(e){return e.indexOf("\\")<0?e:e.replace(a,"$1")},t.unescapeAll=function(e){return e.indexOf("\\")<0&&e.indexOf("&")<0?e:e.replace(c,(function(e,r,t){return r||function(e,r){var t=0;return s(u,r)?u[r]:35===r.charCodeAt(0)&&l.test(r)&&o(t="x"===r[1].toLowerCase()?parseInt(r.slice(2),16):parseInt(r.slice(1),10))?i(t):e}(e,t)}))},t.isValidEntityCode=o,t.fromCodePoint=i,t.escapeHtml=function(e){return p.test(e)?e.replace(h,d):e},t.arrayReplaceAt=function(e,r,t){return[].concat(e.slice(0,r),t,e.slice(r+1))},t.isSpace=function(e){switch(e){case 9:case 32:return!0}return!1},t.isWhiteSpace=function(e){if(e>=8192&&e<=8202)return!0;switch(e){case 9:case 10:case 11:case 12:case 13:case 32:case 160:case 5760:case 8239:case 8287:case 12288:return!0}return!1},t.isMdAsciiPunct=function(e){switch(e){case 33:case 34:case 35:case 36:case 37:case 38:case 39:case 40:case 41:case 42:case 43:case 44:case 45:case 46:case 47:case 58:case 59:case 60:case 61:case 62:case 63:case 64:case 91:case 92:case 93:case 94:case 95:case 96:case 123:case 124:case 125:case 126:return!0;default:return!1}},t.isPunctChar=function(e){return _.test(e)},t.escapeRE=function(e){return e.replace(m,"\\$&")},t.normalizeReference=function(e){return e=e.trim().replace(/\s+/g," "),"\u1e7e"==="\u1e9e".toLowerCase()&&(e=e.replace(/\u1e9e/g,"\xdf")),e.toLowerCase().toUpperCase()}},{"./entities":1,mdurl:58,"uc.micro":65,"uc.micro/categories/P/regex":63}],5:[function(e,r,t){"use strict";t.parseLinkLabel=e("./parse_link_label"),t.parseLinkDestination=e("./parse_link_destination"),t.parseLinkTitle=e("./parse_link_title")},{"./parse_link_destination":6,"./parse_link_label":7,"./parse_link_title":8}],6:[function(e,r,t){"use strict";var n=e("../common/utils").unescapeAll;r.exports=function(e,r,t){var s,o,i=r,a={ok:!1,pos:0,lines:0,str:""};if(60===e.charCodeAt(r)){for(r++;r=t)return c;if(34!==(o=e.charCodeAt(r))&&39!==o&&40!==o)return c;for(r++,40===o&&(o=41);r=0))try{r.hostname=p.toASCII(r.hostname)}catch(e){}return u.encode(u.format(r))}function k(e){var r=u.parse(e,!0);if(r.hostname&&(!r.protocol||_.indexOf(r.protocol)>=0))try{r.hostname=p.toUnicode(r.hostname)}catch(e){}return u.decode(u.format(r))}function b(e,r){if(!(this instanceof b))return new b(e,r);r||n.isString(e)||(r=e||{},e="default"),this.inline=new c,this.block=new a,this.core=new i,this.renderer=new o,this.linkify=new l,this.validateLink=m,this.normalizeLink=g,this.normalizeLinkText=k,this.utils=n,this.helpers=n.assign({},s),this.options={},this.configure(e),r&&this.set(r)}b.prototype.set=function(e){return n.assign(this.options,e),this},b.prototype.configure=function(e){var r,t=this;if(n.isString(e)&&!(e=h[r=e]))throw new Error('Wrong `markdown-it` preset "'+r+'", check name');if(!e)throw new Error("Wrong `markdown-it` preset, can't be empty");return e.options&&t.set(e.options),e.components&&Object.keys(e.components).forEach((function(r){e.components[r].rules&&t[r].ruler.enableOnly(e.components[r].rules),e.components[r].rules2&&t[r].ruler2.enableOnly(e.components[r].rules2)})),this},b.prototype.enable=function(e,r){var t=[];Array.isArray(e)||(e=[e]),["core","block","inline"].forEach((function(r){t=t.concat(this[r].ruler.enable(e,!0))}),this),t=t.concat(this.inline.ruler2.enable(e,!0));var n=e.filter((function(e){return t.indexOf(e)<0}));if(n.length&&!r)throw new Error("MarkdownIt. Failed to enable unknown rule(s): "+n);return this},b.prototype.disable=function(e,r){var t=[];Array.isArray(e)||(e=[e]),["core","block","inline"].forEach((function(r){t=t.concat(this[r].ruler.disable(e,!0))}),this),t=t.concat(this.inline.ruler2.disable(e,!0));var n=e.filter((function(e){return t.indexOf(e)<0}));if(n.length&&!r)throw new Error("MarkdownIt. Failed to disable unknown rule(s): "+n);return this},b.prototype.use=function(e){var r=[this].concat(Array.prototype.slice.call(arguments,1));return e.apply(e,r),this},b.prototype.parse=function(e,r){if("string"!=typeof e)throw new Error("Input data should be a String");var t=new this.core.State(e,this,r);return this.core.process(t),t.tokens},b.prototype.render=function(e,r){return r=r||{},this.renderer.render(this.parse(e,r),this.options,r)},b.prototype.parseInline=function(e,r){var t=new this.core.State(e,this,r);return t.inlineMode=!0,this.core.process(t),t.tokens},b.prototype.renderInline=function(e,r){return r=r||{},this.renderer.render(this.parseInline(e,r),this.options,r)},r.exports=b},{"./common/utils":4,"./helpers":5,"./parser_block":10,"./parser_core":11,"./parser_inline":12,"./presets/commonmark":13,"./presets/default":14,"./presets/zero":15,"./renderer":16,"linkify-it":53,mdurl:58,punycode:60}],10:[function(e,r,t){"use strict";var n=e("./ruler"),s=[["table",e("./rules_block/table"),["paragraph","reference"]],["code",e("./rules_block/code")],["fence",e("./rules_block/fence"),["paragraph","reference","blockquote","list"]],["blockquote",e("./rules_block/blockquote"),["paragraph","reference","blockquote","list"]],["hr",e("./rules_block/hr"),["paragraph","reference","blockquote","list"]],["list",e("./rules_block/list"),["paragraph","reference","blockquote"]],["reference",e("./rules_block/reference")],["heading",e("./rules_block/heading"),["paragraph","reference","blockquote"]],["lheading",e("./rules_block/lheading")],["html_block",e("./rules_block/html_block"),["paragraph","reference","blockquote"]],["paragraph",e("./rules_block/paragraph")]];function o(){this.ruler=new n;for(var e=0;e=t))&&!(e.sCount[i]=c){e.line=t;break}for(n=0;n=o)break}else e.pending+=e.src[e.pos++]}e.pending&&e.pushPending()},i.prototype.parse=function(e,r,t,n){var s,o,i,a=new this.State(e,r,t,n);for(this.tokenize(a),i=(o=this.ruler2.getRules("")).length,s=0;s"+o(e[r].content)+""},i.code_block=function(e,r,t,n,s){var i=e[r];return""+o(e[r].content)+"\n"},i.fence=function(e,r,t,n,i){var a,c,l,u,p=e[r],h=p.info?s(p.info).trim():"",f="";return h&&(f=h.split(/\s+/g)[0]),0===(a=t.highlight&&t.highlight(p.content,f)||o(p.content)).indexOf(""+a+"\n"):"
    "+a+"
    \n"},i.image=function(e,r,t,n,s){var o=e[r];return o.attrs[o.attrIndex("alt")][1]=s.renderInlineAsText(o.children,t,n),s.renderToken(e,r,t)},i.hardbreak=function(e,r,t){return t.xhtmlOut?"
    \n":"
    \n"},i.softbreak=function(e,r,t){return t.breaks?t.xhtmlOut?"
    \n":"
    \n":"\n"},i.text=function(e,r){return o(e[r].content)},i.html_block=function(e,r){return e[r].content},i.html_inline=function(e,r){return e[r].content},a.prototype.renderAttrs=function(e){var r,t,n;if(!e.attrs)return"";for(n="",r=0,t=e.attrs.length;r\n":">")},a.prototype.renderInline=function(e,r,t){for(var n,s="",o=this.rules,i=0,a=e.length;i=4)return!1;if(62!==e.src.charCodeAt(D++))return!1;if(s)return!0;for(c=f=e.sCount[r]+D-(e.bMarks[r]+e.tShift[r]),32===e.src.charCodeAt(D)?(D++,c++,f++,o=!1,v=!0):9===e.src.charCodeAt(D)?(v=!0,(e.bsCount[r]+f)%4==3?(D++,c++,f++,o=!1):o=!0):v=!1,d=[e.bMarks[r]],e.bMarks[r]=D;D=E,k=[e.sCount[r]],e.sCount[r]=f-c,b=[e.tShift[r]],e.tShift[r]=D-e.bMarks[r],C=e.md.block.ruler.getRules("blockquote"),g=e.parentType,e.parentType="blockquote",A=!1,h=r+1;h=(E=e.eMarks[h])));h++)if(62!==e.src.charCodeAt(D++)||A){if(u)break;for(y=!1,a=0,l=C.length;a=E,m.push(e.bsCount[h]),e.bsCount[h]=e.sCount[h]+1+(v?1:0),k.push(e.sCount[h]),e.sCount[h]=f-c,b.push(e.tShift[h]),e.tShift[h]=D-e.bMarks[h]}for(_=e.blkIndent,e.blkIndent=0,(x=e.push("blockquote_open","blockquote",1)).markup=">",x.map=p=[r,0],e.md.block.tokenize(e,r,h),(x=e.push("blockquote_close","blockquote",-1)).markup=">",e.lineMax=w,e.parentType=g,p[1]=e.line,a=0;a=4))break;s=++n}return e.line=s,(o=e.push("code_block","code",0)).content=e.getLines(r,s,4+e.blkIndent,!0),o.map=[r,e.line],!0}},{}],20:[function(e,r,t){"use strict";r.exports=function(e,r,t,n){var s,o,i,a,c,l,u,p=!1,h=e.bMarks[r]+e.tShift[r],f=e.eMarks[r];if(e.sCount[r]-e.blkIndent>=4)return!1;if(h+3>f)return!1;if(126!==(s=e.src.charCodeAt(h))&&96!==s)return!1;if(c=h,(o=(h=e.skipChars(h,s))-c)<3)return!1;if(u=e.src.slice(c,h),i=e.src.slice(h,f),96===s&&i.indexOf(String.fromCharCode(s))>=0)return!1;if(n)return!0;for(a=r;!(++a>=t)&&!((h=c=e.bMarks[a]+e.tShift[a])<(f=e.eMarks[a])&&e.sCount[a]=4||(h=e.skipChars(h,s))-c=4)return!1;if(35!==(o=e.src.charCodeAt(l))||l>=u)return!1;for(i=1,o=e.src.charCodeAt(++l);35===o&&l6||ll&&n(e.src.charCodeAt(a-1))&&(u=a),e.line=r+1,(c=e.push("heading_open","h"+String(i),1)).markup="########".slice(0,i),c.map=[r,e.line],(c=e.push("inline","",0)).content=e.src.slice(l,u).trim(),c.map=[r,e.line],c.children=[],(c=e.push("heading_close","h"+String(i),-1)).markup="########".slice(0,i)),!0)}},{"../common/utils":4}],22:[function(e,r,t){"use strict";var n=e("../common/utils").isSpace;r.exports=function(e,r,t,s){var o,i,a,c,l=e.bMarks[r]+e.tShift[r],u=e.eMarks[r];if(e.sCount[r]-e.blkIndent>=4)return!1;if(42!==(o=e.src.charCodeAt(l++))&&45!==o&&95!==o)return!1;for(i=1;l|$))/i,/<\/(script|pre|style)>/i,!0],[/^/,!0],[/^<\?/,/\?>/,!0],[/^/,!0],[/^/,!0],[new RegExp("^|$))","i"),/^$/,!0],[new RegExp(s.source+"\\s*$"),/^$/,!1]];r.exports=function(e,r,t,n){var s,i,a,c,l=e.bMarks[r]+e.tShift[r],u=e.eMarks[r];if(e.sCount[r]-e.blkIndent>=4)return!1;if(!e.md.options.html)return!1;if(60!==e.src.charCodeAt(l))return!1;for(c=e.src.slice(l,u),s=0;s=4)return!1;for(h=e.parentType,e.parentType="paragraph";f3)){if(e.sCount[f]>=e.blkIndent&&(c=e.bMarks[f]+e.tShift[f])<(l=e.eMarks[f])&&(45===(p=e.src.charCodeAt(c))||61===p)&&(c=e.skipChars(c,p),(c=e.skipSpaces(c))>=l)){u=61===p?1:2;break}if(!(e.sCount[f]<0)){for(s=!1,o=0,i=d.length;o=i)return-1;if((t=e.src.charCodeAt(o++))<48||t>57)return-1;for(;;){if(o>=i)return-1;if(!((t=e.src.charCodeAt(o++))>=48&&t<=57)){if(41===t||46===t)break;return-1}if(o-s>=10)return-1}return o=4)return!1;if(e.listIndent>=0&&e.sCount[r]-e.listIndent>=4&&e.sCount[r]=e.blkIndent&&(I=!0),(q=o(e,r))>=0){if(h=!0,S=e.bMarks[r]+e.tShift[r],k=Number(e.src.substr(S,q-S-1)),I&&1!==k)return!1}else{if(!((q=s(e,r))>=0))return!1;h=!1}if(I&&e.skipSpaces(q)>=e.eMarks[r])return!1;if(g=e.src.charCodeAt(q-1),n)return!0;for(_=e.tokens.length,h?(T=e.push("ordered_list_open","ol",1),1!==k&&(T.attrs=[["start",k]])):T=e.push("bullet_list_open","ul",1),T.map=m=[r,0],T.markup=String.fromCharCode(g),v=r,F=!1,z=e.md.block.ruler.getRules("list"),x=e.parentType,e.parentType="list";v=b?1:y-p)>4&&(u=1),l=p+u,(T=e.push("list_item_open","li",1)).markup=String.fromCharCode(g),T.map=f=[r,0],D=e.tight,w=e.tShift[r],A=e.sCount[r],C=e.listIndent,e.listIndent=e.blkIndent,e.blkIndent=l,e.tight=!0,e.tShift[r]=a-e.bMarks[r],e.sCount[r]=y,a>=b&&e.isEmpty(r+1)?e.line=Math.min(e.line+2,t):e.md.block.tokenize(e,r,t,!0),e.tight&&!F||(R=!1),F=e.line-r>1&&e.isEmpty(e.line-1),e.blkIndent=e.listIndent,e.listIndent=C,e.tShift[r]=w,e.sCount[r]=A,e.tight=D,(T=e.push("list_item_close","li",-1)).markup=String.fromCharCode(g),v=r=e.line,f[1]=v,a=e.bMarks[r],v>=t)break;if(e.sCount[v]=4)break;for(L=!1,c=0,d=z.length;c3||e.sCount[c]<0)){for(n=!1,s=0,o=l.length;s=4)return!1;if(91!==e.src.charCodeAt(x))return!1;for(;++x3||e.sCount[w]<0)){for(b=!1,p=0,h=v.length;p0&&this.level++,this.tokens.push(s),s},o.prototype.isEmpty=function(e){return this.bMarks[e]+this.tShift[e]>=this.eMarks[e]},o.prototype.skipEmptyLines=function(e){for(var r=this.lineMax;er;)if(!s(this.src.charCodeAt(--e)))return e+1;return e},o.prototype.skipChars=function(e,r){for(var t=this.src.length;et;)if(r!==this.src.charCodeAt(--e))return e+1;return e},o.prototype.getLines=function(e,r,t,n){var o,i,a,c,l,u,p,h=e;if(e>=r)return"";for(u=new Array(r-e),o=0;ht?new Array(i-t+1).join(" ")+this.src.slice(c,l):this.src.slice(c,l)}return u.join("")},o.prototype.Token=n,r.exports=o},{"../common/utils":4,"../token":51}],29:[function(e,r,t){"use strict";var n=e("../common/utils").isSpace;function s(e,r){var t=e.bMarks[r]+e.blkIndent,n=e.eMarks[r];return e.src.substr(t,n-t)}function o(e){var r,t=[],n=0,s=e.length,o=0,i=0,a=!1,c=0;for(r=e.charCodeAt(n);nt)return!1;if(p=r+1,e.sCount[p]=4)return!1;if((l=e.bMarks[p]+e.tShift[p])>=e.eMarks[p])return!1;if(124!==(a=e.src.charCodeAt(l++))&&45!==a&&58!==a)return!1;for(;l=4)return!1;if((f=(h=o(c.replace(/^\||\|$/g,""))).length)>m.length)return!1;if(i)return!0;for((d=e.push("table_open","table",1)).map=g=[r,0],(d=e.push("thead_open","thead",1)).map=[r,r+1],(d=e.push("tr_open","tr",1)).map=[r,r+1],u=0;u=4);p++){for(h=o(c.replace(/^\||\|$/g,"")),d=e.push("tr_open","tr",1),u=0;u/i.test(e)}r.exports=function(e){var r,t,o,i,a,c,l,u,p,h,f,d,m,_,g,k,b,v,y=e.tokens;if(e.md.options.linkify)for(t=0,o=y.length;t=0;r--)if("link_close"!==(c=i[r]).type){if("html_inline"===c.type&&(v=c.content,/^\s]/i.test(v)&&m>0&&m--,s(c.content)&&m++),!(m>0)&&"text"===c.type&&e.md.linkify.test(c.content)){for(p=c.content,b=e.md.linkify.match(p),l=[],d=c.level,f=0,u=0;uf&&((a=new e.Token("text","",0)).content=p.slice(f,h),a.level=d,l.push(a)),(a=new e.Token("link_open","a",1)).attrs=[["href",g]],a.level=d++,a.markup="linkify",a.info="auto",l.push(a),(a=new e.Token("text","",0)).content=k,a.level=d,l.push(a),(a=new e.Token("link_close","a",-1)).level=--d,a.markup="linkify",a.info="auto",l.push(a),f=b[u].lastIndex);f=0;r--)"text"!==(t=e[r]).type||n||(t.content=t.content.replace(o,a)),"link_open"===t.type&&"auto"===t.info&&n--,"link_close"===t.type&&"auto"===t.info&&n++}function l(e){var r,t,s=0;for(r=e.length-1;r>=0;r--)"text"!==(t=e[r]).type||s||n.test(t.content)&&(t.content=t.content.replace(/\+-/g,"\xb1").replace(/\.{2,}/g,"\u2026").replace(/([?!])\u2026/g,"$1..").replace(/([?!]){4,}/g,"$1$1$1").replace(/,{2,}/g,",").replace(/(^|[^-])---(?=[^-]|$)/gm,"$1\u2014").replace(/(^|\s)--(?=\s|$)/gm,"$1\u2013").replace(/(^|[^-\s])--(?=[^-\s]|$)/gm,"$1\u2013")),"link_open"===t.type&&"auto"===t.info&&s--,"link_close"===t.type&&"auto"===t.info&&s++}r.exports=function(e){var r;if(e.md.options.typographer)for(r=e.tokens.length-1;r>=0;r--)"inline"===e.tokens[r].type&&(s.test(e.tokens[r].content)&&c(e.tokens[r].children),n.test(e.tokens[r].content)&&l(e.tokens[r].children))}},{}],35:[function(e,r,t){"use strict";var n=e("../common/utils").isWhiteSpace,s=e("../common/utils").isPunctChar,o=e("../common/utils").isMdAsciiPunct,i=/['"]/,a=/['"]/g;function c(e,r,t){return e.substr(0,r)+t+e.substr(r+1)}function l(e,r){var t,i,l,u,p,h,f,d,m,_,g,k,b,v,y,C,x,A,w,D,E;for(w=[],t=0;t=0&&!(w[x].level<=f);x--);if(w.length=x+1,"text"===i.type){p=0,h=(l=i.content).length;e:for(;p=0)m=l.charCodeAt(u.index-1);else for(x=t-1;x>=0&&("softbreak"!==e[x].type&&"hardbreak"!==e[x].type);x--)if("text"===e[x].type){m=e[x].content.charCodeAt(e[x].content.length-1);break}if(_=32,p=48&&m<=57&&(C=y=!1),y&&C&&(y=g,C=k),y||C){if(C)for(x=w.length-1;x>=0&&(d=w[x],!(w[x].level=0;r--)"inline"===e.tokens[r].type&&i.test(e.tokens[r].content)&&l(e.tokens[r].children,e)}},{"../common/utils":4}],36:[function(e,r,t){"use strict";var n=e("../token");function s(e,r,t){this.src=e,this.env=t,this.tokens=[],this.inlineMode=!1,this.md=r}s.prototype.Token=n,r.exports=s},{"../token":51}],37:[function(e,r,t){"use strict";var n=/^<([a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)>/,s=/^<([a-zA-Z][a-zA-Z0-9+.\-]{1,31}):([^<>\x00-\x20]*)>/;r.exports=function(e,r){var t,o,i,a,c,l,u=e.pos;return 60===e.src.charCodeAt(u)&&(!((t=e.src.slice(u)).indexOf(">")<0)&&(s.test(t)?(a=(o=t.match(s))[0].slice(1,-1),c=e.md.normalizeLink(a),!!e.md.validateLink(c)&&(r||((l=e.push("link_open","a",1)).attrs=[["href",c]],l.markup="autolink",l.info="auto",(l=e.push("text","",0)).content=e.md.normalizeLinkText(a),(l=e.push("link_close","a",-1)).markup="autolink",l.info="auto"),e.pos+=o[0].length,!0)):!!n.test(t)&&(a=(i=t.match(n))[0].slice(1,-1),c=e.md.normalizeLink("mailto:"+a),!!e.md.validateLink(c)&&(r||((l=e.push("link_open","a",1)).attrs=[["href",c]],l.markup="autolink",l.info="auto",(l=e.push("text","",0)).content=e.md.normalizeLinkText(a),(l=e.push("link_close","a",-1)).markup="autolink",l.info="auto"),e.pos+=i[0].length,!0))))}},{}],38:[function(e,r,t){"use strict";r.exports=function(e,r){var t,n,s,o,i,a,c=e.pos;if(96!==e.src.charCodeAt(c))return!1;for(t=c,c++,n=e.posMax;ci;n-=o.jump+1)if((o=r[n]).marker===s.marker&&(-1===a&&(a=n),o.open&&o.end<0&&o.level===s.level&&(c=!1,(o.close||s.open)&&(o.length+s.length)%3==0&&(o.length%3==0&&s.length%3==0||(c=!0)),!c))){l=n>0&&!r[n-1].open?r[n-1].jump+1:0,s.jump=t-n+l,s.open=!1,o.end=t,o.jump=l,o.close=!1,a=-1;break}-1!==a&&(u[s.marker][(s.length||0)%3]=a)}}r.exports=function(e){var r,t=e.tokens_meta,s=e.tokens_meta.length;for(n(0,e.delimiters),r=0;r=0;t--)95!==(n=r[t]).marker&&42!==n.marker||-1!==n.end&&(s=r[n.end],a=t>0&&r[t-1].end===n.end+1&&r[t-1].token===n.token-1&&r[n.end+1].token===s.token+1&&r[t-1].marker===n.marker,i=String.fromCharCode(n.marker),(o=e.tokens[n.token]).type=a?"strong_open":"em_open",o.tag=a?"strong":"em",o.nesting=1,o.markup=a?i+i:i,o.content="",(o=e.tokens[s.token]).type=a?"strong_close":"em_close",o.tag=a?"strong":"em",o.nesting=-1,o.markup=a?i+i:i,o.content="",a&&(e.tokens[r[t-1].token].content="",e.tokens[r[n.end+1].token].content="",t--))}r.exports.tokenize=function(e,r){var t,n,s=e.pos,o=e.src.charCodeAt(s);if(r)return!1;if(95!==o&&42!==o)return!1;for(n=e.scanDelims(e.pos,42===o),t=0;t?@[]^_`{|}~-".split("").forEach((function(e){s[e.charCodeAt(0)]=1})),r.exports=function(e,r){var t,o=e.pos,i=e.posMax;if(92!==e.src.charCodeAt(o))return!1;if(++o=o)&&(!(33!==(t=e.src.charCodeAt(i+1))&&63!==t&&47!==t&&!function(e){var r=32|e;return r>=97&&r<=122}(t))&&(!!(s=e.src.slice(i).match(n))&&(r||(e.push("html_inline","",0).content=e.src.slice(i,i+s[0].length)),e.pos+=s[0].length,!0))))}},{"../common/html_re":3}],44:[function(e,r,t){"use strict";var n=e("../common/utils").normalizeReference,s=e("../common/utils").isSpace;r.exports=function(e,r){var t,o,i,a,c,l,u,p,h,f,d,m,_,g="",k=e.pos,b=e.posMax;if(33!==e.src.charCodeAt(e.pos))return!1;if(91!==e.src.charCodeAt(e.pos+1))return!1;if(l=e.pos+2,(c=e.md.helpers.parseLinkLabel(e,e.pos+1,!1))<0)return!1;if((u=c+1)=b)return!1;for(_=u,(h=e.md.helpers.parseLinkDestination(e.src,u,e.posMax)).ok&&(g=e.md.normalizeLink(h.str),e.md.validateLink(g)?u=h.pos:g=""),_=u;u=b||41!==e.src.charCodeAt(u))return e.pos=k,!1;u++}else{if(void 0===e.env.references)return!1;if(u=0?a=e.src.slice(_,u++):u=c+1):u=c+1,a||(a=e.src.slice(l,c)),!(p=e.env.references[n(a)]))return e.pos=k,!1;g=p.href,f=p.title}return r||(i=e.src.slice(l,c),e.md.inline.parse(i,e.md,e.env,m=[]),(d=e.push("image","img",0)).attrs=t=[["src",g],["alt",""]],d.children=m,d.content=i,f&&t.push(["title",f])),e.pos=u,e.posMax=b,!0}},{"../common/utils":4}],45:[function(e,r,t){"use strict";var n=e("../common/utils").normalizeReference,s=e("../common/utils").isSpace;r.exports=function(e,r){var t,o,i,a,c,l,u,p,h,f="",d=e.pos,m=e.posMax,_=e.pos,g=!0;if(91!==e.src.charCodeAt(e.pos))return!1;if(c=e.pos+1,(a=e.md.helpers.parseLinkLabel(e,e.pos,!0))<0)return!1;if((l=a+1)=m)return!1;for(_=l,(u=e.md.helpers.parseLinkDestination(e.src,l,e.posMax)).ok&&(f=e.md.normalizeLink(u.str),e.md.validateLink(f)?l=u.pos:f=""),_=l;l=m||41!==e.src.charCodeAt(l))&&(g=!0),l++}if(g){if(void 0===e.env.references)return!1;if(l=0?i=e.src.slice(_,l++):l=a+1):l=a+1,i||(i=e.src.slice(c,a)),!(p=e.env.references[n(i)]))return e.pos=d,!1;f=p.href,h=p.title}return r||(e.pos=c,e.posMax=a,e.push("link_open","a",1).attrs=t=[["href",f]],h&&t.push(["title",h]),e.md.inline.tokenize(e),e.push("link_close","a",-1)),e.pos=l,e.posMax=m,!0}},{"../common/utils":4}],46:[function(e,r,t){"use strict";var n=e("../common/utils").isSpace;r.exports=function(e,r){var t,s,o=e.pos;if(10!==e.src.charCodeAt(o))return!1;for(t=e.pending.length-1,s=e.posMax,r||(t>=0&&32===e.pending.charCodeAt(t)?t>=1&&32===e.pending.charCodeAt(t-1)?(e.pending=e.pending.replace(/ +$/,""),e.push("hardbreak","br",0)):(e.pending=e.pending.slice(0,-1),e.push("softbreak","br",0)):e.push("softbreak","br",0)),o++;o0&&(this.level++,this._prev_delimiters.push(this.delimiters),this.delimiters=[],o={delimiters:this.delimiters}),this.pendingLevel=this.level,this.tokens.push(s),this.tokens_meta.push(o),s},a.prototype.scanDelims=function(e,r){var t,n,a,c,l,u,p,h,f,d=e,m=!0,_=!0,g=this.posMax,k=this.src.charCodeAt(e);for(t=e>0?this.src.charCodeAt(e-1):32;d0&&n++,"text"===s[r].type&&r+1=0&&(t=this.attrs[r][1]),t},n.prototype.attrJoin=function(e,r){var t=this.attrIndex(e);t<0?this.attrPush([e,r]):this.attrs[t][1]=this.attrs[t][1]+" "+r},r.exports=n},{}],52:[function(e,r,t){r.exports={Aacute:"\xc1",aacute:"\xe1",Abreve:"\u0102",abreve:"\u0103",ac:"\u223e",acd:"\u223f",acE:"\u223e\u0333",Acirc:"\xc2",acirc:"\xe2",acute:"\xb4",Acy:"\u0410",acy:"\u0430",AElig:"\xc6",aelig:"\xe6",af:"\u2061",Afr:"\ud835\udd04",afr:"\ud835\udd1e",Agrave:"\xc0",agrave:"\xe0",alefsym:"\u2135",aleph:"\u2135",Alpha:"\u0391",alpha:"\u03b1",Amacr:"\u0100",amacr:"\u0101",amalg:"\u2a3f",amp:"&",AMP:"&",andand:"\u2a55",And:"\u2a53",and:"\u2227",andd:"\u2a5c",andslope:"\u2a58",andv:"\u2a5a",ang:"\u2220",ange:"\u29a4",angle:"\u2220",angmsdaa:"\u29a8",angmsdab:"\u29a9",angmsdac:"\u29aa",angmsdad:"\u29ab",angmsdae:"\u29ac",angmsdaf:"\u29ad",angmsdag:"\u29ae",angmsdah:"\u29af",angmsd:"\u2221",angrt:"\u221f",angrtvb:"\u22be",angrtvbd:"\u299d",angsph:"\u2222",angst:"\xc5",angzarr:"\u237c",Aogon:"\u0104",aogon:"\u0105",Aopf:"\ud835\udd38",aopf:"\ud835\udd52",apacir:"\u2a6f",ap:"\u2248",apE:"\u2a70",ape:"\u224a",apid:"\u224b",apos:"'",ApplyFunction:"\u2061",approx:"\u2248",approxeq:"\u224a",Aring:"\xc5",aring:"\xe5",Ascr:"\ud835\udc9c",ascr:"\ud835\udcb6",Assign:"\u2254",ast:"*",asymp:"\u2248",asympeq:"\u224d",Atilde:"\xc3",atilde:"\xe3",Auml:"\xc4",auml:"\xe4",awconint:"\u2233",awint:"\u2a11",backcong:"\u224c",backepsilon:"\u03f6",backprime:"\u2035",backsim:"\u223d",backsimeq:"\u22cd",Backslash:"\u2216",Barv:"\u2ae7",barvee:"\u22bd",barwed:"\u2305",Barwed:"\u2306",barwedge:"\u2305",bbrk:"\u23b5",bbrktbrk:"\u23b6",bcong:"\u224c",Bcy:"\u0411",bcy:"\u0431",bdquo:"\u201e",becaus:"\u2235",because:"\u2235",Because:"\u2235",bemptyv:"\u29b0",bepsi:"\u03f6",bernou:"\u212c",Bernoullis:"\u212c",Beta:"\u0392",beta:"\u03b2",beth:"\u2136",between:"\u226c",Bfr:"\ud835\udd05",bfr:"\ud835\udd1f",bigcap:"\u22c2",bigcirc:"\u25ef",bigcup:"\u22c3",bigodot:"\u2a00",bigoplus:"\u2a01",bigotimes:"\u2a02",bigsqcup:"\u2a06",bigstar:"\u2605",bigtriangledown:"\u25bd",bigtriangleup:"\u25b3",biguplus:"\u2a04",bigvee:"\u22c1",bigwedge:"\u22c0",bkarow:"\u290d",blacklozenge:"\u29eb",blacksquare:"\u25aa",blacktriangle:"\u25b4",blacktriangledown:"\u25be",blacktriangleleft:"\u25c2",blacktriangleright:"\u25b8",blank:"\u2423",blk12:"\u2592",blk14:"\u2591",blk34:"\u2593",block:"\u2588",bne:"=\u20e5",bnequiv:"\u2261\u20e5",bNot:"\u2aed",bnot:"\u2310",Bopf:"\ud835\udd39",bopf:"\ud835\udd53",bot:"\u22a5",bottom:"\u22a5",bowtie:"\u22c8",boxbox:"\u29c9",boxdl:"\u2510",boxdL:"\u2555",boxDl:"\u2556",boxDL:"\u2557",boxdr:"\u250c",boxdR:"\u2552",boxDr:"\u2553",boxDR:"\u2554",boxh:"\u2500",boxH:"\u2550",boxhd:"\u252c",boxHd:"\u2564",boxhD:"\u2565",boxHD:"\u2566",boxhu:"\u2534",boxHu:"\u2567",boxhU:"\u2568",boxHU:"\u2569",boxminus:"\u229f",boxplus:"\u229e",boxtimes:"\u22a0",boxul:"\u2518",boxuL:"\u255b",boxUl:"\u255c",boxUL:"\u255d",boxur:"\u2514",boxuR:"\u2558",boxUr:"\u2559",boxUR:"\u255a",boxv:"\u2502",boxV:"\u2551",boxvh:"\u253c",boxvH:"\u256a",boxVh:"\u256b",boxVH:"\u256c",boxvl:"\u2524",boxvL:"\u2561",boxVl:"\u2562",boxVL:"\u2563",boxvr:"\u251c",boxvR:"\u255e",boxVr:"\u255f",boxVR:"\u2560",bprime:"\u2035",breve:"\u02d8",Breve:"\u02d8",brvbar:"\xa6",bscr:"\ud835\udcb7",Bscr:"\u212c",bsemi:"\u204f",bsim:"\u223d",bsime:"\u22cd",bsolb:"\u29c5",bsol:"\\",bsolhsub:"\u27c8",bull:"\u2022",bullet:"\u2022",bump:"\u224e",bumpE:"\u2aae",bumpe:"\u224f",Bumpeq:"\u224e",bumpeq:"\u224f",Cacute:"\u0106",cacute:"\u0107",capand:"\u2a44",capbrcup:"\u2a49",capcap:"\u2a4b",cap:"\u2229",Cap:"\u22d2",capcup:"\u2a47",capdot:"\u2a40",CapitalDifferentialD:"\u2145",caps:"\u2229\ufe00",caret:"\u2041",caron:"\u02c7",Cayleys:"\u212d",ccaps:"\u2a4d",Ccaron:"\u010c",ccaron:"\u010d",Ccedil:"\xc7",ccedil:"\xe7",Ccirc:"\u0108",ccirc:"\u0109",Cconint:"\u2230",ccups:"\u2a4c",ccupssm:"\u2a50",Cdot:"\u010a",cdot:"\u010b",cedil:"\xb8",Cedilla:"\xb8",cemptyv:"\u29b2",cent:"\xa2",centerdot:"\xb7",CenterDot:"\xb7",cfr:"\ud835\udd20",Cfr:"\u212d",CHcy:"\u0427",chcy:"\u0447",check:"\u2713",checkmark:"\u2713",Chi:"\u03a7",chi:"\u03c7",circ:"\u02c6",circeq:"\u2257",circlearrowleft:"\u21ba",circlearrowright:"\u21bb",circledast:"\u229b",circledcirc:"\u229a",circleddash:"\u229d",CircleDot:"\u2299",circledR:"\xae",circledS:"\u24c8",CircleMinus:"\u2296",CirclePlus:"\u2295",CircleTimes:"\u2297",cir:"\u25cb",cirE:"\u29c3",cire:"\u2257",cirfnint:"\u2a10",cirmid:"\u2aef",cirscir:"\u29c2",ClockwiseContourIntegral:"\u2232",CloseCurlyDoubleQuote:"\u201d",CloseCurlyQuote:"\u2019",clubs:"\u2663",clubsuit:"\u2663",colon:":",Colon:"\u2237",Colone:"\u2a74",colone:"\u2254",coloneq:"\u2254",comma:",",commat:"@",comp:"\u2201",compfn:"\u2218",complement:"\u2201",complexes:"\u2102",cong:"\u2245",congdot:"\u2a6d",Congruent:"\u2261",conint:"\u222e",Conint:"\u222f",ContourIntegral:"\u222e",copf:"\ud835\udd54",Copf:"\u2102",coprod:"\u2210",Coproduct:"\u2210",copy:"\xa9",COPY:"\xa9",copysr:"\u2117",CounterClockwiseContourIntegral:"\u2233",crarr:"\u21b5",cross:"\u2717",Cross:"\u2a2f",Cscr:"\ud835\udc9e",cscr:"\ud835\udcb8",csub:"\u2acf",csube:"\u2ad1",csup:"\u2ad0",csupe:"\u2ad2",ctdot:"\u22ef",cudarrl:"\u2938",cudarrr:"\u2935",cuepr:"\u22de",cuesc:"\u22df",cularr:"\u21b6",cularrp:"\u293d",cupbrcap:"\u2a48",cupcap:"\u2a46",CupCap:"\u224d",cup:"\u222a",Cup:"\u22d3",cupcup:"\u2a4a",cupdot:"\u228d",cupor:"\u2a45",cups:"\u222a\ufe00",curarr:"\u21b7",curarrm:"\u293c",curlyeqprec:"\u22de",curlyeqsucc:"\u22df",curlyvee:"\u22ce",curlywedge:"\u22cf",curren:"\xa4",curvearrowleft:"\u21b6",curvearrowright:"\u21b7",cuvee:"\u22ce",cuwed:"\u22cf",cwconint:"\u2232",cwint:"\u2231",cylcty:"\u232d",dagger:"\u2020",Dagger:"\u2021",daleth:"\u2138",darr:"\u2193",Darr:"\u21a1",dArr:"\u21d3",dash:"\u2010",Dashv:"\u2ae4",dashv:"\u22a3",dbkarow:"\u290f",dblac:"\u02dd",Dcaron:"\u010e",dcaron:"\u010f",Dcy:"\u0414",dcy:"\u0434",ddagger:"\u2021",ddarr:"\u21ca",DD:"\u2145",dd:"\u2146",DDotrahd:"\u2911",ddotseq:"\u2a77",deg:"\xb0",Del:"\u2207",Delta:"\u0394",delta:"\u03b4",demptyv:"\u29b1",dfisht:"\u297f",Dfr:"\ud835\udd07",dfr:"\ud835\udd21",dHar:"\u2965",dharl:"\u21c3",dharr:"\u21c2",DiacriticalAcute:"\xb4",DiacriticalDot:"\u02d9",DiacriticalDoubleAcute:"\u02dd",DiacriticalGrave:"`",DiacriticalTilde:"\u02dc",diam:"\u22c4",diamond:"\u22c4",Diamond:"\u22c4",diamondsuit:"\u2666",diams:"\u2666",die:"\xa8",DifferentialD:"\u2146",digamma:"\u03dd",disin:"\u22f2",div:"\xf7",divide:"\xf7",divideontimes:"\u22c7",divonx:"\u22c7",DJcy:"\u0402",djcy:"\u0452",dlcorn:"\u231e",dlcrop:"\u230d",dollar:"$",Dopf:"\ud835\udd3b",dopf:"\ud835\udd55",Dot:"\xa8",dot:"\u02d9",DotDot:"\u20dc",doteq:"\u2250",doteqdot:"\u2251",DotEqual:"\u2250",dotminus:"\u2238",dotplus:"\u2214",dotsquare:"\u22a1",doublebarwedge:"\u2306",DoubleContourIntegral:"\u222f",DoubleDot:"\xa8",DoubleDownArrow:"\u21d3",DoubleLeftArrow:"\u21d0",DoubleLeftRightArrow:"\u21d4",DoubleLeftTee:"\u2ae4",DoubleLongLeftArrow:"\u27f8",DoubleLongLeftRightArrow:"\u27fa",DoubleLongRightArrow:"\u27f9",DoubleRightArrow:"\u21d2",DoubleRightTee:"\u22a8",DoubleUpArrow:"\u21d1",DoubleUpDownArrow:"\u21d5",DoubleVerticalBar:"\u2225",DownArrowBar:"\u2913",downarrow:"\u2193",DownArrow:"\u2193",Downarrow:"\u21d3",DownArrowUpArrow:"\u21f5",DownBreve:"\u0311",downdownarrows:"\u21ca",downharpoonleft:"\u21c3",downharpoonright:"\u21c2",DownLeftRightVector:"\u2950",DownLeftTeeVector:"\u295e",DownLeftVectorBar:"\u2956",DownLeftVector:"\u21bd",DownRightTeeVector:"\u295f",DownRightVectorBar:"\u2957",DownRightVector:"\u21c1",DownTeeArrow:"\u21a7",DownTee:"\u22a4",drbkarow:"\u2910",drcorn:"\u231f",drcrop:"\u230c",Dscr:"\ud835\udc9f",dscr:"\ud835\udcb9",DScy:"\u0405",dscy:"\u0455",dsol:"\u29f6",Dstrok:"\u0110",dstrok:"\u0111",dtdot:"\u22f1",dtri:"\u25bf",dtrif:"\u25be",duarr:"\u21f5",duhar:"\u296f",dwangle:"\u29a6",DZcy:"\u040f",dzcy:"\u045f",dzigrarr:"\u27ff",Eacute:"\xc9",eacute:"\xe9",easter:"\u2a6e",Ecaron:"\u011a",ecaron:"\u011b",Ecirc:"\xca",ecirc:"\xea",ecir:"\u2256",ecolon:"\u2255",Ecy:"\u042d",ecy:"\u044d",eDDot:"\u2a77",Edot:"\u0116",edot:"\u0117",eDot:"\u2251",ee:"\u2147",efDot:"\u2252",Efr:"\ud835\udd08",efr:"\ud835\udd22",eg:"\u2a9a",Egrave:"\xc8",egrave:"\xe8",egs:"\u2a96",egsdot:"\u2a98",el:"\u2a99",Element:"\u2208",elinters:"\u23e7",ell:"\u2113",els:"\u2a95",elsdot:"\u2a97",Emacr:"\u0112",emacr:"\u0113",empty:"\u2205",emptyset:"\u2205",EmptySmallSquare:"\u25fb",emptyv:"\u2205",EmptyVerySmallSquare:"\u25ab",emsp13:"\u2004",emsp14:"\u2005",emsp:"\u2003",ENG:"\u014a",eng:"\u014b",ensp:"\u2002",Eogon:"\u0118",eogon:"\u0119",Eopf:"\ud835\udd3c",eopf:"\ud835\udd56",epar:"\u22d5",eparsl:"\u29e3",eplus:"\u2a71",epsi:"\u03b5",Epsilon:"\u0395",epsilon:"\u03b5",epsiv:"\u03f5",eqcirc:"\u2256",eqcolon:"\u2255",eqsim:"\u2242",eqslantgtr:"\u2a96",eqslantless:"\u2a95",Equal:"\u2a75",equals:"=",EqualTilde:"\u2242",equest:"\u225f",Equilibrium:"\u21cc",equiv:"\u2261",equivDD:"\u2a78",eqvparsl:"\u29e5",erarr:"\u2971",erDot:"\u2253",escr:"\u212f",Escr:"\u2130",esdot:"\u2250",Esim:"\u2a73",esim:"\u2242",Eta:"\u0397",eta:"\u03b7",ETH:"\xd0",eth:"\xf0",Euml:"\xcb",euml:"\xeb",euro:"\u20ac",excl:"!",exist:"\u2203",Exists:"\u2203",expectation:"\u2130",exponentiale:"\u2147",ExponentialE:"\u2147",fallingdotseq:"\u2252",Fcy:"\u0424",fcy:"\u0444",female:"\u2640",ffilig:"\ufb03",fflig:"\ufb00",ffllig:"\ufb04",Ffr:"\ud835\udd09",ffr:"\ud835\udd23",filig:"\ufb01",FilledSmallSquare:"\u25fc",FilledVerySmallSquare:"\u25aa",fjlig:"fj",flat:"\u266d",fllig:"\ufb02",fltns:"\u25b1",fnof:"\u0192",Fopf:"\ud835\udd3d",fopf:"\ud835\udd57",forall:"\u2200",ForAll:"\u2200",fork:"\u22d4",forkv:"\u2ad9",Fouriertrf:"\u2131",fpartint:"\u2a0d",frac12:"\xbd",frac13:"\u2153",frac14:"\xbc",frac15:"\u2155",frac16:"\u2159",frac18:"\u215b",frac23:"\u2154",frac25:"\u2156",frac34:"\xbe",frac35:"\u2157",frac38:"\u215c",frac45:"\u2158",frac56:"\u215a",frac58:"\u215d",frac78:"\u215e",frasl:"\u2044",frown:"\u2322",fscr:"\ud835\udcbb",Fscr:"\u2131",gacute:"\u01f5",Gamma:"\u0393",gamma:"\u03b3",Gammad:"\u03dc",gammad:"\u03dd",gap:"\u2a86",Gbreve:"\u011e",gbreve:"\u011f",Gcedil:"\u0122",Gcirc:"\u011c",gcirc:"\u011d",Gcy:"\u0413",gcy:"\u0433",Gdot:"\u0120",gdot:"\u0121",ge:"\u2265",gE:"\u2267",gEl:"\u2a8c",gel:"\u22db",geq:"\u2265",geqq:"\u2267",geqslant:"\u2a7e",gescc:"\u2aa9",ges:"\u2a7e",gesdot:"\u2a80",gesdoto:"\u2a82",gesdotol:"\u2a84",gesl:"\u22db\ufe00",gesles:"\u2a94",Gfr:"\ud835\udd0a",gfr:"\ud835\udd24",gg:"\u226b",Gg:"\u22d9",ggg:"\u22d9",gimel:"\u2137",GJcy:"\u0403",gjcy:"\u0453",gla:"\u2aa5",gl:"\u2277",glE:"\u2a92",glj:"\u2aa4",gnap:"\u2a8a",gnapprox:"\u2a8a",gne:"\u2a88",gnE:"\u2269",gneq:"\u2a88",gneqq:"\u2269",gnsim:"\u22e7",Gopf:"\ud835\udd3e",gopf:"\ud835\udd58",grave:"`",GreaterEqual:"\u2265",GreaterEqualLess:"\u22db",GreaterFullEqual:"\u2267",GreaterGreater:"\u2aa2",GreaterLess:"\u2277",GreaterSlantEqual:"\u2a7e",GreaterTilde:"\u2273",Gscr:"\ud835\udca2",gscr:"\u210a",gsim:"\u2273",gsime:"\u2a8e",gsiml:"\u2a90",gtcc:"\u2aa7",gtcir:"\u2a7a",gt:">",GT:">",Gt:"\u226b",gtdot:"\u22d7",gtlPar:"\u2995",gtquest:"\u2a7c",gtrapprox:"\u2a86",gtrarr:"\u2978",gtrdot:"\u22d7",gtreqless:"\u22db",gtreqqless:"\u2a8c",gtrless:"\u2277",gtrsim:"\u2273",gvertneqq:"\u2269\ufe00",gvnE:"\u2269\ufe00",Hacek:"\u02c7",hairsp:"\u200a",half:"\xbd",hamilt:"\u210b",HARDcy:"\u042a",hardcy:"\u044a",harrcir:"\u2948",harr:"\u2194",hArr:"\u21d4",harrw:"\u21ad",Hat:"^",hbar:"\u210f",Hcirc:"\u0124",hcirc:"\u0125",hearts:"\u2665",heartsuit:"\u2665",hellip:"\u2026",hercon:"\u22b9",hfr:"\ud835\udd25",Hfr:"\u210c",HilbertSpace:"\u210b",hksearow:"\u2925",hkswarow:"\u2926",hoarr:"\u21ff",homtht:"\u223b",hookleftarrow:"\u21a9",hookrightarrow:"\u21aa",hopf:"\ud835\udd59",Hopf:"\u210d",horbar:"\u2015",HorizontalLine:"\u2500",hscr:"\ud835\udcbd",Hscr:"\u210b",hslash:"\u210f",Hstrok:"\u0126",hstrok:"\u0127",HumpDownHump:"\u224e",HumpEqual:"\u224f",hybull:"\u2043",hyphen:"\u2010",Iacute:"\xcd",iacute:"\xed",ic:"\u2063",Icirc:"\xce",icirc:"\xee",Icy:"\u0418",icy:"\u0438",Idot:"\u0130",IEcy:"\u0415",iecy:"\u0435",iexcl:"\xa1",iff:"\u21d4",ifr:"\ud835\udd26",Ifr:"\u2111",Igrave:"\xcc",igrave:"\xec",ii:"\u2148",iiiint:"\u2a0c",iiint:"\u222d",iinfin:"\u29dc",iiota:"\u2129",IJlig:"\u0132",ijlig:"\u0133",Imacr:"\u012a",imacr:"\u012b",image:"\u2111",ImaginaryI:"\u2148",imagline:"\u2110",imagpart:"\u2111",imath:"\u0131",Im:"\u2111",imof:"\u22b7",imped:"\u01b5",Implies:"\u21d2",incare:"\u2105",in:"\u2208",infin:"\u221e",infintie:"\u29dd",inodot:"\u0131",intcal:"\u22ba",int:"\u222b",Int:"\u222c",integers:"\u2124",Integral:"\u222b",intercal:"\u22ba",Intersection:"\u22c2",intlarhk:"\u2a17",intprod:"\u2a3c",InvisibleComma:"\u2063",InvisibleTimes:"\u2062",IOcy:"\u0401",iocy:"\u0451",Iogon:"\u012e",iogon:"\u012f",Iopf:"\ud835\udd40",iopf:"\ud835\udd5a",Iota:"\u0399",iota:"\u03b9",iprod:"\u2a3c",iquest:"\xbf",iscr:"\ud835\udcbe",Iscr:"\u2110",isin:"\u2208",isindot:"\u22f5",isinE:"\u22f9",isins:"\u22f4",isinsv:"\u22f3",isinv:"\u2208",it:"\u2062",Itilde:"\u0128",itilde:"\u0129",Iukcy:"\u0406",iukcy:"\u0456",Iuml:"\xcf",iuml:"\xef",Jcirc:"\u0134",jcirc:"\u0135",Jcy:"\u0419",jcy:"\u0439",Jfr:"\ud835\udd0d",jfr:"\ud835\udd27",jmath:"\u0237",Jopf:"\ud835\udd41",jopf:"\ud835\udd5b",Jscr:"\ud835\udca5",jscr:"\ud835\udcbf",Jsercy:"\u0408",jsercy:"\u0458",Jukcy:"\u0404",jukcy:"\u0454",Kappa:"\u039a",kappa:"\u03ba",kappav:"\u03f0",Kcedil:"\u0136",kcedil:"\u0137",Kcy:"\u041a",kcy:"\u043a",Kfr:"\ud835\udd0e",kfr:"\ud835\udd28",kgreen:"\u0138",KHcy:"\u0425",khcy:"\u0445",KJcy:"\u040c",kjcy:"\u045c",Kopf:"\ud835\udd42",kopf:"\ud835\udd5c",Kscr:"\ud835\udca6",kscr:"\ud835\udcc0",lAarr:"\u21da",Lacute:"\u0139",lacute:"\u013a",laemptyv:"\u29b4",lagran:"\u2112",Lambda:"\u039b",lambda:"\u03bb",lang:"\u27e8",Lang:"\u27ea",langd:"\u2991",langle:"\u27e8",lap:"\u2a85",Laplacetrf:"\u2112",laquo:"\xab",larrb:"\u21e4",larrbfs:"\u291f",larr:"\u2190",Larr:"\u219e",lArr:"\u21d0",larrfs:"\u291d",larrhk:"\u21a9",larrlp:"\u21ab",larrpl:"\u2939",larrsim:"\u2973",larrtl:"\u21a2",latail:"\u2919",lAtail:"\u291b",lat:"\u2aab",late:"\u2aad",lates:"\u2aad\ufe00",lbarr:"\u290c",lBarr:"\u290e",lbbrk:"\u2772",lbrace:"{",lbrack:"[",lbrke:"\u298b",lbrksld:"\u298f",lbrkslu:"\u298d",Lcaron:"\u013d",lcaron:"\u013e",Lcedil:"\u013b",lcedil:"\u013c",lceil:"\u2308",lcub:"{",Lcy:"\u041b",lcy:"\u043b",ldca:"\u2936",ldquo:"\u201c",ldquor:"\u201e",ldrdhar:"\u2967",ldrushar:"\u294b",ldsh:"\u21b2",le:"\u2264",lE:"\u2266",LeftAngleBracket:"\u27e8",LeftArrowBar:"\u21e4",leftarrow:"\u2190",LeftArrow:"\u2190",Leftarrow:"\u21d0",LeftArrowRightArrow:"\u21c6",leftarrowtail:"\u21a2",LeftCeiling:"\u2308",LeftDoubleBracket:"\u27e6",LeftDownTeeVector:"\u2961",LeftDownVectorBar:"\u2959",LeftDownVector:"\u21c3",LeftFloor:"\u230a",leftharpoondown:"\u21bd",leftharpoonup:"\u21bc",leftleftarrows:"\u21c7",leftrightarrow:"\u2194",LeftRightArrow:"\u2194",Leftrightarrow:"\u21d4",leftrightarrows:"\u21c6",leftrightharpoons:"\u21cb",leftrightsquigarrow:"\u21ad",LeftRightVector:"\u294e",LeftTeeArrow:"\u21a4",LeftTee:"\u22a3",LeftTeeVector:"\u295a",leftthreetimes:"\u22cb",LeftTriangleBar:"\u29cf",LeftTriangle:"\u22b2",LeftTriangleEqual:"\u22b4",LeftUpDownVector:"\u2951",LeftUpTeeVector:"\u2960",LeftUpVectorBar:"\u2958",LeftUpVector:"\u21bf",LeftVectorBar:"\u2952",LeftVector:"\u21bc",lEg:"\u2a8b",leg:"\u22da",leq:"\u2264",leqq:"\u2266",leqslant:"\u2a7d",lescc:"\u2aa8",les:"\u2a7d",lesdot:"\u2a7f",lesdoto:"\u2a81",lesdotor:"\u2a83",lesg:"\u22da\ufe00",lesges:"\u2a93",lessapprox:"\u2a85",lessdot:"\u22d6",lesseqgtr:"\u22da",lesseqqgtr:"\u2a8b",LessEqualGreater:"\u22da",LessFullEqual:"\u2266",LessGreater:"\u2276",lessgtr:"\u2276",LessLess:"\u2aa1",lesssim:"\u2272",LessSlantEqual:"\u2a7d",LessTilde:"\u2272",lfisht:"\u297c",lfloor:"\u230a",Lfr:"\ud835\udd0f",lfr:"\ud835\udd29",lg:"\u2276",lgE:"\u2a91",lHar:"\u2962",lhard:"\u21bd",lharu:"\u21bc",lharul:"\u296a",lhblk:"\u2584",LJcy:"\u0409",ljcy:"\u0459",llarr:"\u21c7",ll:"\u226a",Ll:"\u22d8",llcorner:"\u231e",Lleftarrow:"\u21da",llhard:"\u296b",lltri:"\u25fa",Lmidot:"\u013f",lmidot:"\u0140",lmoustache:"\u23b0",lmoust:"\u23b0",lnap:"\u2a89",lnapprox:"\u2a89",lne:"\u2a87",lnE:"\u2268",lneq:"\u2a87",lneqq:"\u2268",lnsim:"\u22e6",loang:"\u27ec",loarr:"\u21fd",lobrk:"\u27e6",longleftarrow:"\u27f5",LongLeftArrow:"\u27f5",Longleftarrow:"\u27f8",longleftrightarrow:"\u27f7",LongLeftRightArrow:"\u27f7",Longleftrightarrow:"\u27fa",longmapsto:"\u27fc",longrightarrow:"\u27f6",LongRightArrow:"\u27f6",Longrightarrow:"\u27f9",looparrowleft:"\u21ab",looparrowright:"\u21ac",lopar:"\u2985",Lopf:"\ud835\udd43",lopf:"\ud835\udd5d",loplus:"\u2a2d",lotimes:"\u2a34",lowast:"\u2217",lowbar:"_",LowerLeftArrow:"\u2199",LowerRightArrow:"\u2198",loz:"\u25ca",lozenge:"\u25ca",lozf:"\u29eb",lpar:"(",lparlt:"\u2993",lrarr:"\u21c6",lrcorner:"\u231f",lrhar:"\u21cb",lrhard:"\u296d",lrm:"\u200e",lrtri:"\u22bf",lsaquo:"\u2039",lscr:"\ud835\udcc1",Lscr:"\u2112",lsh:"\u21b0",Lsh:"\u21b0",lsim:"\u2272",lsime:"\u2a8d",lsimg:"\u2a8f",lsqb:"[",lsquo:"\u2018",lsquor:"\u201a",Lstrok:"\u0141",lstrok:"\u0142",ltcc:"\u2aa6",ltcir:"\u2a79",lt:"<",LT:"<",Lt:"\u226a",ltdot:"\u22d6",lthree:"\u22cb",ltimes:"\u22c9",ltlarr:"\u2976",ltquest:"\u2a7b",ltri:"\u25c3",ltrie:"\u22b4",ltrif:"\u25c2",ltrPar:"\u2996",lurdshar:"\u294a",luruhar:"\u2966",lvertneqq:"\u2268\ufe00",lvnE:"\u2268\ufe00",macr:"\xaf",male:"\u2642",malt:"\u2720",maltese:"\u2720",Map:"\u2905",map:"\u21a6",mapsto:"\u21a6",mapstodown:"\u21a7",mapstoleft:"\u21a4",mapstoup:"\u21a5",marker:"\u25ae",mcomma:"\u2a29",Mcy:"\u041c",mcy:"\u043c",mdash:"\u2014",mDDot:"\u223a",measuredangle:"\u2221",MediumSpace:"\u205f",Mellintrf:"\u2133",Mfr:"\ud835\udd10",mfr:"\ud835\udd2a",mho:"\u2127",micro:"\xb5",midast:"*",midcir:"\u2af0",mid:"\u2223",middot:"\xb7",minusb:"\u229f",minus:"\u2212",minusd:"\u2238",minusdu:"\u2a2a",MinusPlus:"\u2213",mlcp:"\u2adb",mldr:"\u2026",mnplus:"\u2213",models:"\u22a7",Mopf:"\ud835\udd44",mopf:"\ud835\udd5e",mp:"\u2213",mscr:"\ud835\udcc2",Mscr:"\u2133",mstpos:"\u223e",Mu:"\u039c",mu:"\u03bc",multimap:"\u22b8",mumap:"\u22b8",nabla:"\u2207",Nacute:"\u0143",nacute:"\u0144",nang:"\u2220\u20d2",nap:"\u2249",napE:"\u2a70\u0338",napid:"\u224b\u0338",napos:"\u0149",napprox:"\u2249",natural:"\u266e",naturals:"\u2115",natur:"\u266e",nbsp:"\xa0",nbump:"\u224e\u0338",nbumpe:"\u224f\u0338",ncap:"\u2a43",Ncaron:"\u0147",ncaron:"\u0148",Ncedil:"\u0145",ncedil:"\u0146",ncong:"\u2247",ncongdot:"\u2a6d\u0338",ncup:"\u2a42",Ncy:"\u041d",ncy:"\u043d",ndash:"\u2013",nearhk:"\u2924",nearr:"\u2197",neArr:"\u21d7",nearrow:"\u2197",ne:"\u2260",nedot:"\u2250\u0338",NegativeMediumSpace:"\u200b",NegativeThickSpace:"\u200b",NegativeThinSpace:"\u200b",NegativeVeryThinSpace:"\u200b",nequiv:"\u2262",nesear:"\u2928",nesim:"\u2242\u0338",NestedGreaterGreater:"\u226b",NestedLessLess:"\u226a",NewLine:"\n",nexist:"\u2204",nexists:"\u2204",Nfr:"\ud835\udd11",nfr:"\ud835\udd2b",ngE:"\u2267\u0338",nge:"\u2271",ngeq:"\u2271",ngeqq:"\u2267\u0338",ngeqslant:"\u2a7e\u0338",nges:"\u2a7e\u0338",nGg:"\u22d9\u0338",ngsim:"\u2275",nGt:"\u226b\u20d2",ngt:"\u226f",ngtr:"\u226f",nGtv:"\u226b\u0338",nharr:"\u21ae",nhArr:"\u21ce",nhpar:"\u2af2",ni:"\u220b",nis:"\u22fc",nisd:"\u22fa",niv:"\u220b",NJcy:"\u040a",njcy:"\u045a",nlarr:"\u219a",nlArr:"\u21cd",nldr:"\u2025",nlE:"\u2266\u0338",nle:"\u2270",nleftarrow:"\u219a",nLeftarrow:"\u21cd",nleftrightarrow:"\u21ae",nLeftrightarrow:"\u21ce",nleq:"\u2270",nleqq:"\u2266\u0338",nleqslant:"\u2a7d\u0338",nles:"\u2a7d\u0338",nless:"\u226e",nLl:"\u22d8\u0338",nlsim:"\u2274",nLt:"\u226a\u20d2",nlt:"\u226e",nltri:"\u22ea",nltrie:"\u22ec",nLtv:"\u226a\u0338",nmid:"\u2224",NoBreak:"\u2060",NonBreakingSpace:"\xa0",nopf:"\ud835\udd5f",Nopf:"\u2115",Not:"\u2aec",not:"\xac",NotCongruent:"\u2262",NotCupCap:"\u226d",NotDoubleVerticalBar:"\u2226",NotElement:"\u2209",NotEqual:"\u2260",NotEqualTilde:"\u2242\u0338",NotExists:"\u2204",NotGreater:"\u226f",NotGreaterEqual:"\u2271",NotGreaterFullEqual:"\u2267\u0338",NotGreaterGreater:"\u226b\u0338",NotGreaterLess:"\u2279",NotGreaterSlantEqual:"\u2a7e\u0338",NotGreaterTilde:"\u2275",NotHumpDownHump:"\u224e\u0338",NotHumpEqual:"\u224f\u0338",notin:"\u2209",notindot:"\u22f5\u0338",notinE:"\u22f9\u0338",notinva:"\u2209",notinvb:"\u22f7",notinvc:"\u22f6",NotLeftTriangleBar:"\u29cf\u0338",NotLeftTriangle:"\u22ea",NotLeftTriangleEqual:"\u22ec",NotLess:"\u226e",NotLessEqual:"\u2270",NotLessGreater:"\u2278",NotLessLess:"\u226a\u0338",NotLessSlantEqual:"\u2a7d\u0338",NotLessTilde:"\u2274",NotNestedGreaterGreater:"\u2aa2\u0338",NotNestedLessLess:"\u2aa1\u0338",notni:"\u220c",notniva:"\u220c",notnivb:"\u22fe",notnivc:"\u22fd",NotPrecedes:"\u2280",NotPrecedesEqual:"\u2aaf\u0338",NotPrecedesSlantEqual:"\u22e0",NotReverseElement:"\u220c",NotRightTriangleBar:"\u29d0\u0338",NotRightTriangle:"\u22eb",NotRightTriangleEqual:"\u22ed",NotSquareSubset:"\u228f\u0338",NotSquareSubsetEqual:"\u22e2",NotSquareSuperset:"\u2290\u0338",NotSquareSupersetEqual:"\u22e3",NotSubset:"\u2282\u20d2",NotSubsetEqual:"\u2288",NotSucceeds:"\u2281",NotSucceedsEqual:"\u2ab0\u0338",NotSucceedsSlantEqual:"\u22e1",NotSucceedsTilde:"\u227f\u0338",NotSuperset:"\u2283\u20d2",NotSupersetEqual:"\u2289",NotTilde:"\u2241",NotTildeEqual:"\u2244",NotTildeFullEqual:"\u2247",NotTildeTilde:"\u2249",NotVerticalBar:"\u2224",nparallel:"\u2226",npar:"\u2226",nparsl:"\u2afd\u20e5",npart:"\u2202\u0338",npolint:"\u2a14",npr:"\u2280",nprcue:"\u22e0",nprec:"\u2280",npreceq:"\u2aaf\u0338",npre:"\u2aaf\u0338",nrarrc:"\u2933\u0338",nrarr:"\u219b",nrArr:"\u21cf",nrarrw:"\u219d\u0338",nrightarrow:"\u219b",nRightarrow:"\u21cf",nrtri:"\u22eb",nrtrie:"\u22ed",nsc:"\u2281",nsccue:"\u22e1",nsce:"\u2ab0\u0338",Nscr:"\ud835\udca9",nscr:"\ud835\udcc3",nshortmid:"\u2224",nshortparallel:"\u2226",nsim:"\u2241",nsime:"\u2244",nsimeq:"\u2244",nsmid:"\u2224",nspar:"\u2226",nsqsube:"\u22e2",nsqsupe:"\u22e3",nsub:"\u2284",nsubE:"\u2ac5\u0338",nsube:"\u2288",nsubset:"\u2282\u20d2",nsubseteq:"\u2288",nsubseteqq:"\u2ac5\u0338",nsucc:"\u2281",nsucceq:"\u2ab0\u0338",nsup:"\u2285",nsupE:"\u2ac6\u0338",nsupe:"\u2289",nsupset:"\u2283\u20d2",nsupseteq:"\u2289",nsupseteqq:"\u2ac6\u0338",ntgl:"\u2279",Ntilde:"\xd1",ntilde:"\xf1",ntlg:"\u2278",ntriangleleft:"\u22ea",ntrianglelefteq:"\u22ec",ntriangleright:"\u22eb",ntrianglerighteq:"\u22ed",Nu:"\u039d",nu:"\u03bd",num:"#",numero:"\u2116",numsp:"\u2007",nvap:"\u224d\u20d2",nvdash:"\u22ac",nvDash:"\u22ad",nVdash:"\u22ae",nVDash:"\u22af",nvge:"\u2265\u20d2",nvgt:">\u20d2",nvHarr:"\u2904",nvinfin:"\u29de",nvlArr:"\u2902",nvle:"\u2264\u20d2",nvlt:"<\u20d2",nvltrie:"\u22b4\u20d2",nvrArr:"\u2903",nvrtrie:"\u22b5\u20d2",nvsim:"\u223c\u20d2",nwarhk:"\u2923",nwarr:"\u2196",nwArr:"\u21d6",nwarrow:"\u2196",nwnear:"\u2927",Oacute:"\xd3",oacute:"\xf3",oast:"\u229b",Ocirc:"\xd4",ocirc:"\xf4",ocir:"\u229a",Ocy:"\u041e",ocy:"\u043e",odash:"\u229d",Odblac:"\u0150",odblac:"\u0151",odiv:"\u2a38",odot:"\u2299",odsold:"\u29bc",OElig:"\u0152",oelig:"\u0153",ofcir:"\u29bf",Ofr:"\ud835\udd12",ofr:"\ud835\udd2c",ogon:"\u02db",Ograve:"\xd2",ograve:"\xf2",ogt:"\u29c1",ohbar:"\u29b5",ohm:"\u03a9",oint:"\u222e",olarr:"\u21ba",olcir:"\u29be",olcross:"\u29bb",oline:"\u203e",olt:"\u29c0",Omacr:"\u014c",omacr:"\u014d",Omega:"\u03a9",omega:"\u03c9",Omicron:"\u039f",omicron:"\u03bf",omid:"\u29b6",ominus:"\u2296",Oopf:"\ud835\udd46",oopf:"\ud835\udd60",opar:"\u29b7",OpenCurlyDoubleQuote:"\u201c",OpenCurlyQuote:"\u2018",operp:"\u29b9",oplus:"\u2295",orarr:"\u21bb",Or:"\u2a54",or:"\u2228",ord:"\u2a5d",order:"\u2134",orderof:"\u2134",ordf:"\xaa",ordm:"\xba",origof:"\u22b6",oror:"\u2a56",orslope:"\u2a57",orv:"\u2a5b",oS:"\u24c8",Oscr:"\ud835\udcaa",oscr:"\u2134",Oslash:"\xd8",oslash:"\xf8",osol:"\u2298",Otilde:"\xd5",otilde:"\xf5",otimesas:"\u2a36",Otimes:"\u2a37",otimes:"\u2297",Ouml:"\xd6",ouml:"\xf6",ovbar:"\u233d",OverBar:"\u203e",OverBrace:"\u23de",OverBracket:"\u23b4",OverParenthesis:"\u23dc",para:"\xb6",parallel:"\u2225",par:"\u2225",parsim:"\u2af3",parsl:"\u2afd",part:"\u2202",PartialD:"\u2202",Pcy:"\u041f",pcy:"\u043f",percnt:"%",period:".",permil:"\u2030",perp:"\u22a5",pertenk:"\u2031",Pfr:"\ud835\udd13",pfr:"\ud835\udd2d",Phi:"\u03a6",phi:"\u03c6",phiv:"\u03d5",phmmat:"\u2133",phone:"\u260e",Pi:"\u03a0",pi:"\u03c0",pitchfork:"\u22d4",piv:"\u03d6",planck:"\u210f",planckh:"\u210e",plankv:"\u210f",plusacir:"\u2a23",plusb:"\u229e",pluscir:"\u2a22",plus:"+",plusdo:"\u2214",plusdu:"\u2a25",pluse:"\u2a72",PlusMinus:"\xb1",plusmn:"\xb1",plussim:"\u2a26",plustwo:"\u2a27",pm:"\xb1",Poincareplane:"\u210c",pointint:"\u2a15",popf:"\ud835\udd61",Popf:"\u2119",pound:"\xa3",prap:"\u2ab7",Pr:"\u2abb",pr:"\u227a",prcue:"\u227c",precapprox:"\u2ab7",prec:"\u227a",preccurlyeq:"\u227c",Precedes:"\u227a",PrecedesEqual:"\u2aaf",PrecedesSlantEqual:"\u227c",PrecedesTilde:"\u227e",preceq:"\u2aaf",precnapprox:"\u2ab9",precneqq:"\u2ab5",precnsim:"\u22e8",pre:"\u2aaf",prE:"\u2ab3",precsim:"\u227e",prime:"\u2032",Prime:"\u2033",primes:"\u2119",prnap:"\u2ab9",prnE:"\u2ab5",prnsim:"\u22e8",prod:"\u220f",Product:"\u220f",profalar:"\u232e",profline:"\u2312",profsurf:"\u2313",prop:"\u221d",Proportional:"\u221d",Proportion:"\u2237",propto:"\u221d",prsim:"\u227e",prurel:"\u22b0",Pscr:"\ud835\udcab",pscr:"\ud835\udcc5",Psi:"\u03a8",psi:"\u03c8",puncsp:"\u2008",Qfr:"\ud835\udd14",qfr:"\ud835\udd2e",qint:"\u2a0c",qopf:"\ud835\udd62",Qopf:"\u211a",qprime:"\u2057",Qscr:"\ud835\udcac",qscr:"\ud835\udcc6",quaternions:"\u210d",quatint:"\u2a16",quest:"?",questeq:"\u225f",quot:'"',QUOT:'"',rAarr:"\u21db",race:"\u223d\u0331",Racute:"\u0154",racute:"\u0155",radic:"\u221a",raemptyv:"\u29b3",rang:"\u27e9",Rang:"\u27eb",rangd:"\u2992",range:"\u29a5",rangle:"\u27e9",raquo:"\xbb",rarrap:"\u2975",rarrb:"\u21e5",rarrbfs:"\u2920",rarrc:"\u2933",rarr:"\u2192",Rarr:"\u21a0",rArr:"\u21d2",rarrfs:"\u291e",rarrhk:"\u21aa",rarrlp:"\u21ac",rarrpl:"\u2945",rarrsim:"\u2974",Rarrtl:"\u2916",rarrtl:"\u21a3",rarrw:"\u219d",ratail:"\u291a",rAtail:"\u291c",ratio:"\u2236",rationals:"\u211a",rbarr:"\u290d",rBarr:"\u290f",RBarr:"\u2910",rbbrk:"\u2773",rbrace:"}",rbrack:"]",rbrke:"\u298c",rbrksld:"\u298e",rbrkslu:"\u2990",Rcaron:"\u0158",rcaron:"\u0159",Rcedil:"\u0156",rcedil:"\u0157",rceil:"\u2309",rcub:"}",Rcy:"\u0420",rcy:"\u0440",rdca:"\u2937",rdldhar:"\u2969",rdquo:"\u201d",rdquor:"\u201d",rdsh:"\u21b3",real:"\u211c",realine:"\u211b",realpart:"\u211c",reals:"\u211d",Re:"\u211c",rect:"\u25ad",reg:"\xae",REG:"\xae",ReverseElement:"\u220b",ReverseEquilibrium:"\u21cb",ReverseUpEquilibrium:"\u296f",rfisht:"\u297d",rfloor:"\u230b",rfr:"\ud835\udd2f",Rfr:"\u211c",rHar:"\u2964",rhard:"\u21c1",rharu:"\u21c0",rharul:"\u296c",Rho:"\u03a1",rho:"\u03c1",rhov:"\u03f1",RightAngleBracket:"\u27e9",RightArrowBar:"\u21e5",rightarrow:"\u2192",RightArrow:"\u2192",Rightarrow:"\u21d2",RightArrowLeftArrow:"\u21c4",rightarrowtail:"\u21a3",RightCeiling:"\u2309",RightDoubleBracket:"\u27e7",RightDownTeeVector:"\u295d",RightDownVectorBar:"\u2955",RightDownVector:"\u21c2",RightFloor:"\u230b",rightharpoondown:"\u21c1",rightharpoonup:"\u21c0",rightleftarrows:"\u21c4",rightleftharpoons:"\u21cc",rightrightarrows:"\u21c9",rightsquigarrow:"\u219d",RightTeeArrow:"\u21a6",RightTee:"\u22a2",RightTeeVector:"\u295b",rightthreetimes:"\u22cc",RightTriangleBar:"\u29d0",RightTriangle:"\u22b3",RightTriangleEqual:"\u22b5",RightUpDownVector:"\u294f",RightUpTeeVector:"\u295c",RightUpVectorBar:"\u2954",RightUpVector:"\u21be",RightVectorBar:"\u2953",RightVector:"\u21c0",ring:"\u02da",risingdotseq:"\u2253",rlarr:"\u21c4",rlhar:"\u21cc",rlm:"\u200f",rmoustache:"\u23b1",rmoust:"\u23b1",rnmid:"\u2aee",roang:"\u27ed",roarr:"\u21fe",robrk:"\u27e7",ropar:"\u2986",ropf:"\ud835\udd63",Ropf:"\u211d",roplus:"\u2a2e",rotimes:"\u2a35",RoundImplies:"\u2970",rpar:")",rpargt:"\u2994",rppolint:"\u2a12",rrarr:"\u21c9",Rrightarrow:"\u21db",rsaquo:"\u203a",rscr:"\ud835\udcc7",Rscr:"\u211b",rsh:"\u21b1",Rsh:"\u21b1",rsqb:"]",rsquo:"\u2019",rsquor:"\u2019",rthree:"\u22cc",rtimes:"\u22ca",rtri:"\u25b9",rtrie:"\u22b5",rtrif:"\u25b8",rtriltri:"\u29ce",RuleDelayed:"\u29f4",ruluhar:"\u2968",rx:"\u211e",Sacute:"\u015a",sacute:"\u015b",sbquo:"\u201a",scap:"\u2ab8",Scaron:"\u0160",scaron:"\u0161",Sc:"\u2abc",sc:"\u227b",sccue:"\u227d",sce:"\u2ab0",scE:"\u2ab4",Scedil:"\u015e",scedil:"\u015f",Scirc:"\u015c",scirc:"\u015d",scnap:"\u2aba",scnE:"\u2ab6",scnsim:"\u22e9",scpolint:"\u2a13",scsim:"\u227f",Scy:"\u0421",scy:"\u0441",sdotb:"\u22a1",sdot:"\u22c5",sdote:"\u2a66",searhk:"\u2925",searr:"\u2198",seArr:"\u21d8",searrow:"\u2198",sect:"\xa7",semi:";",seswar:"\u2929",setminus:"\u2216",setmn:"\u2216",sext:"\u2736",Sfr:"\ud835\udd16",sfr:"\ud835\udd30",sfrown:"\u2322",sharp:"\u266f",SHCHcy:"\u0429",shchcy:"\u0449",SHcy:"\u0428",shcy:"\u0448",ShortDownArrow:"\u2193",ShortLeftArrow:"\u2190",shortmid:"\u2223",shortparallel:"\u2225",ShortRightArrow:"\u2192",ShortUpArrow:"\u2191",shy:"\xad",Sigma:"\u03a3",sigma:"\u03c3",sigmaf:"\u03c2",sigmav:"\u03c2",sim:"\u223c",simdot:"\u2a6a",sime:"\u2243",simeq:"\u2243",simg:"\u2a9e",simgE:"\u2aa0",siml:"\u2a9d",simlE:"\u2a9f",simne:"\u2246",simplus:"\u2a24",simrarr:"\u2972",slarr:"\u2190",SmallCircle:"\u2218",smallsetminus:"\u2216",smashp:"\u2a33",smeparsl:"\u29e4",smid:"\u2223",smile:"\u2323",smt:"\u2aaa",smte:"\u2aac",smtes:"\u2aac\ufe00",SOFTcy:"\u042c",softcy:"\u044c",solbar:"\u233f",solb:"\u29c4",sol:"/",Sopf:"\ud835\udd4a",sopf:"\ud835\udd64",spades:"\u2660",spadesuit:"\u2660",spar:"\u2225",sqcap:"\u2293",sqcaps:"\u2293\ufe00",sqcup:"\u2294",sqcups:"\u2294\ufe00",Sqrt:"\u221a",sqsub:"\u228f",sqsube:"\u2291",sqsubset:"\u228f",sqsubseteq:"\u2291",sqsup:"\u2290",sqsupe:"\u2292",sqsupset:"\u2290",sqsupseteq:"\u2292",square:"\u25a1",Square:"\u25a1",SquareIntersection:"\u2293",SquareSubset:"\u228f",SquareSubsetEqual:"\u2291",SquareSuperset:"\u2290",SquareSupersetEqual:"\u2292",SquareUnion:"\u2294",squarf:"\u25aa",squ:"\u25a1",squf:"\u25aa",srarr:"\u2192",Sscr:"\ud835\udcae",sscr:"\ud835\udcc8",ssetmn:"\u2216",ssmile:"\u2323",sstarf:"\u22c6",Star:"\u22c6",star:"\u2606",starf:"\u2605",straightepsilon:"\u03f5",straightphi:"\u03d5",strns:"\xaf",sub:"\u2282",Sub:"\u22d0",subdot:"\u2abd",subE:"\u2ac5",sube:"\u2286",subedot:"\u2ac3",submult:"\u2ac1",subnE:"\u2acb",subne:"\u228a",subplus:"\u2abf",subrarr:"\u2979",subset:"\u2282",Subset:"\u22d0",subseteq:"\u2286",subseteqq:"\u2ac5",SubsetEqual:"\u2286",subsetneq:"\u228a",subsetneqq:"\u2acb",subsim:"\u2ac7",subsub:"\u2ad5",subsup:"\u2ad3",succapprox:"\u2ab8",succ:"\u227b",succcurlyeq:"\u227d",Succeeds:"\u227b",SucceedsEqual:"\u2ab0",SucceedsSlantEqual:"\u227d",SucceedsTilde:"\u227f",succeq:"\u2ab0",succnapprox:"\u2aba",succneqq:"\u2ab6",succnsim:"\u22e9",succsim:"\u227f",SuchThat:"\u220b",sum:"\u2211",Sum:"\u2211",sung:"\u266a",sup1:"\xb9",sup2:"\xb2",sup3:"\xb3",sup:"\u2283",Sup:"\u22d1",supdot:"\u2abe",supdsub:"\u2ad8",supE:"\u2ac6",supe:"\u2287",supedot:"\u2ac4",Superset:"\u2283",SupersetEqual:"\u2287",suphsol:"\u27c9",suphsub:"\u2ad7",suplarr:"\u297b",supmult:"\u2ac2",supnE:"\u2acc",supne:"\u228b",supplus:"\u2ac0",supset:"\u2283",Supset:"\u22d1",supseteq:"\u2287",supseteqq:"\u2ac6",supsetneq:"\u228b",supsetneqq:"\u2acc",supsim:"\u2ac8",supsub:"\u2ad4",supsup:"\u2ad6",swarhk:"\u2926",swarr:"\u2199",swArr:"\u21d9",swarrow:"\u2199",swnwar:"\u292a",szlig:"\xdf",Tab:"\t",target:"\u2316",Tau:"\u03a4",tau:"\u03c4",tbrk:"\u23b4",Tcaron:"\u0164",tcaron:"\u0165",Tcedil:"\u0162",tcedil:"\u0163",Tcy:"\u0422",tcy:"\u0442",tdot:"\u20db",telrec:"\u2315",Tfr:"\ud835\udd17",tfr:"\ud835\udd31",there4:"\u2234",therefore:"\u2234",Therefore:"\u2234",Theta:"\u0398",theta:"\u03b8",thetasym:"\u03d1",thetav:"\u03d1",thickapprox:"\u2248",thicksim:"\u223c",ThickSpace:"\u205f\u200a",ThinSpace:"\u2009",thinsp:"\u2009",thkap:"\u2248",thksim:"\u223c",THORN:"\xde",thorn:"\xfe",tilde:"\u02dc",Tilde:"\u223c",TildeEqual:"\u2243",TildeFullEqual:"\u2245",TildeTilde:"\u2248",timesbar:"\u2a31",timesb:"\u22a0",times:"\xd7",timesd:"\u2a30",tint:"\u222d",toea:"\u2928",topbot:"\u2336",topcir:"\u2af1",top:"\u22a4",Topf:"\ud835\udd4b",topf:"\ud835\udd65",topfork:"\u2ada",tosa:"\u2929",tprime:"\u2034",trade:"\u2122",TRADE:"\u2122",triangle:"\u25b5",triangledown:"\u25bf",triangleleft:"\u25c3",trianglelefteq:"\u22b4",triangleq:"\u225c",triangleright:"\u25b9",trianglerighteq:"\u22b5",tridot:"\u25ec",trie:"\u225c",triminus:"\u2a3a",TripleDot:"\u20db",triplus:"\u2a39",trisb:"\u29cd",tritime:"\u2a3b",trpezium:"\u23e2",Tscr:"\ud835\udcaf",tscr:"\ud835\udcc9",TScy:"\u0426",tscy:"\u0446",TSHcy:"\u040b",tshcy:"\u045b",Tstrok:"\u0166",tstrok:"\u0167",twixt:"\u226c",twoheadleftarrow:"\u219e",twoheadrightarrow:"\u21a0",Uacute:"\xda",uacute:"\xfa",uarr:"\u2191",Uarr:"\u219f",uArr:"\u21d1",Uarrocir:"\u2949",Ubrcy:"\u040e",ubrcy:"\u045e",Ubreve:"\u016c",ubreve:"\u016d",Ucirc:"\xdb",ucirc:"\xfb",Ucy:"\u0423",ucy:"\u0443",udarr:"\u21c5",Udblac:"\u0170",udblac:"\u0171",udhar:"\u296e",ufisht:"\u297e",Ufr:"\ud835\udd18",ufr:"\ud835\udd32",Ugrave:"\xd9",ugrave:"\xf9",uHar:"\u2963",uharl:"\u21bf",uharr:"\u21be",uhblk:"\u2580",ulcorn:"\u231c",ulcorner:"\u231c",ulcrop:"\u230f",ultri:"\u25f8",Umacr:"\u016a",umacr:"\u016b",uml:"\xa8",UnderBar:"_",UnderBrace:"\u23df",UnderBracket:"\u23b5",UnderParenthesis:"\u23dd",Union:"\u22c3",UnionPlus:"\u228e",Uogon:"\u0172",uogon:"\u0173",Uopf:"\ud835\udd4c",uopf:"\ud835\udd66",UpArrowBar:"\u2912",uparrow:"\u2191",UpArrow:"\u2191",Uparrow:"\u21d1",UpArrowDownArrow:"\u21c5",updownarrow:"\u2195",UpDownArrow:"\u2195",Updownarrow:"\u21d5",UpEquilibrium:"\u296e",upharpoonleft:"\u21bf",upharpoonright:"\u21be",uplus:"\u228e",UpperLeftArrow:"\u2196",UpperRightArrow:"\u2197",upsi:"\u03c5",Upsi:"\u03d2",upsih:"\u03d2",Upsilon:"\u03a5",upsilon:"\u03c5",UpTeeArrow:"\u21a5",UpTee:"\u22a5",upuparrows:"\u21c8",urcorn:"\u231d",urcorner:"\u231d",urcrop:"\u230e",Uring:"\u016e",uring:"\u016f",urtri:"\u25f9",Uscr:"\ud835\udcb0",uscr:"\ud835\udcca",utdot:"\u22f0",Utilde:"\u0168",utilde:"\u0169",utri:"\u25b5",utrif:"\u25b4",uuarr:"\u21c8",Uuml:"\xdc",uuml:"\xfc",uwangle:"\u29a7",vangrt:"\u299c",varepsilon:"\u03f5",varkappa:"\u03f0",varnothing:"\u2205",varphi:"\u03d5",varpi:"\u03d6",varpropto:"\u221d",varr:"\u2195",vArr:"\u21d5",varrho:"\u03f1",varsigma:"\u03c2",varsubsetneq:"\u228a\ufe00",varsubsetneqq:"\u2acb\ufe00",varsupsetneq:"\u228b\ufe00",varsupsetneqq:"\u2acc\ufe00",vartheta:"\u03d1",vartriangleleft:"\u22b2",vartriangleright:"\u22b3",vBar:"\u2ae8",Vbar:"\u2aeb",vBarv:"\u2ae9",Vcy:"\u0412",vcy:"\u0432",vdash:"\u22a2",vDash:"\u22a8",Vdash:"\u22a9",VDash:"\u22ab",Vdashl:"\u2ae6",veebar:"\u22bb",vee:"\u2228",Vee:"\u22c1",veeeq:"\u225a",vellip:"\u22ee",verbar:"|",Verbar:"\u2016",vert:"|",Vert:"\u2016",VerticalBar:"\u2223",VerticalLine:"|",VerticalSeparator:"\u2758",VerticalTilde:"\u2240",VeryThinSpace:"\u200a",Vfr:"\ud835\udd19",vfr:"\ud835\udd33",vltri:"\u22b2",vnsub:"\u2282\u20d2",vnsup:"\u2283\u20d2",Vopf:"\ud835\udd4d",vopf:"\ud835\udd67",vprop:"\u221d",vrtri:"\u22b3",Vscr:"\ud835\udcb1",vscr:"\ud835\udccb",vsubnE:"\u2acb\ufe00",vsubne:"\u228a\ufe00",vsupnE:"\u2acc\ufe00",vsupne:"\u228b\ufe00",Vvdash:"\u22aa",vzigzag:"\u299a",Wcirc:"\u0174",wcirc:"\u0175",wedbar:"\u2a5f",wedge:"\u2227",Wedge:"\u22c0",wedgeq:"\u2259",weierp:"\u2118",Wfr:"\ud835\udd1a",wfr:"\ud835\udd34",Wopf:"\ud835\udd4e",wopf:"\ud835\udd68",wp:"\u2118",wr:"\u2240",wreath:"\u2240",Wscr:"\ud835\udcb2",wscr:"\ud835\udccc",xcap:"\u22c2",xcirc:"\u25ef",xcup:"\u22c3",xdtri:"\u25bd",Xfr:"\ud835\udd1b",xfr:"\ud835\udd35",xharr:"\u27f7",xhArr:"\u27fa",Xi:"\u039e",xi:"\u03be",xlarr:"\u27f5",xlArr:"\u27f8",xmap:"\u27fc",xnis:"\u22fb",xodot:"\u2a00",Xopf:"\ud835\udd4f",xopf:"\ud835\udd69",xoplus:"\u2a01",xotime:"\u2a02",xrarr:"\u27f6",xrArr:"\u27f9",Xscr:"\ud835\udcb3",xscr:"\ud835\udccd",xsqcup:"\u2a06",xuplus:"\u2a04",xutri:"\u25b3",xvee:"\u22c1",xwedge:"\u22c0",Yacute:"\xdd",yacute:"\xfd",YAcy:"\u042f",yacy:"\u044f",Ycirc:"\u0176",ycirc:"\u0177",Ycy:"\u042b",ycy:"\u044b",yen:"\xa5",Yfr:"\ud835\udd1c",yfr:"\ud835\udd36",YIcy:"\u0407",yicy:"\u0457",Yopf:"\ud835\udd50",yopf:"\ud835\udd6a",Yscr:"\ud835\udcb4",yscr:"\ud835\udcce",YUcy:"\u042e",yucy:"\u044e",yuml:"\xff",Yuml:"\u0178",Zacute:"\u0179",zacute:"\u017a",Zcaron:"\u017d",zcaron:"\u017e",Zcy:"\u0417",zcy:"\u0437",Zdot:"\u017b",zdot:"\u017c",zeetrf:"\u2128",ZeroWidthSpace:"\u200b",Zeta:"\u0396",zeta:"\u03b6",zfr:"\ud835\udd37",Zfr:"\u2128",ZHcy:"\u0416",zhcy:"\u0436",zigrarr:"\u21dd",zopf:"\ud835\udd6b",Zopf:"\u2124",Zscr:"\ud835\udcb5",zscr:"\ud835\udccf",zwj:"\u200d",zwnj:"\u200c"}},{}],53:[function(e,r,t){"use strict";function n(e){var r=Array.prototype.slice.call(arguments,1);return r.forEach((function(r){r&&Object.keys(r).forEach((function(t){e[t]=r[t]}))})),e}function s(e){return Object.prototype.toString.call(e)}function o(e){return"[object Function]"===s(e)}function i(e){return e.replace(/[.?*+^$[\]\\(){}|-]/g,"\\$&")}var a={fuzzyLink:!0,fuzzyEmail:!0,fuzzyIP:!1};var c={"http:":{validate:function(e,r,t){var n=e.slice(r);return t.re.http||(t.re.http=new RegExp("^\\/\\/"+t.re.src_auth+t.re.src_host_port_strict+t.re.src_path,"i")),t.re.http.test(n)?n.match(t.re.http)[0].length:0}},"https:":"http:","ftp:":"http:","//":{validate:function(e,r,t){var n=e.slice(r);return t.re.no_http||(t.re.no_http=new RegExp("^"+t.re.src_auth+"(?:localhost|(?:(?:"+t.re.src_domain+")\\.)+"+t.re.src_domain_root+")"+t.re.src_port+t.re.src_host_terminator+t.re.src_path,"i")),t.re.no_http.test(n)?r>=3&&":"===e[r-3]||r>=3&&"/"===e[r-3]?0:n.match(t.re.no_http)[0].length:0}},"mailto:":{validate:function(e,r,t){var n=e.slice(r);return t.re.mailto||(t.re.mailto=new RegExp("^"+t.re.src_email_name+"@"+t.re.src_host_strict,"i")),t.re.mailto.test(n)?n.match(t.re.mailto)[0].length:0}}},l="biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|\u0440\u0444".split("|");function u(r){var t=r.re=e("./lib/re")(r.__opts__),n=r.__tlds__.slice();function a(e){return e.replace("%TLDS%",t.src_tlds)}r.onCompile(),r.__tlds_replaced__||n.push("a[cdefgilmnoqrstuwxz]|b[abdefghijmnorstvwyz]|c[acdfghiklmnoruvwxyz]|d[ejkmoz]|e[cegrstu]|f[ijkmor]|g[abdefghilmnpqrstuwy]|h[kmnrtu]|i[delmnoqrst]|j[emop]|k[eghimnprwyz]|l[abcikrstuvy]|m[acdeghklmnopqrstuvwxyz]|n[acefgilopruz]|om|p[aefghklmnrstwy]|qa|r[eosuw]|s[abcdeghijklmnortuvxyz]|t[cdfghjklmnortvwz]|u[agksyz]|v[aceginu]|w[fs]|y[et]|z[amw]"),n.push(t.src_xn),t.src_tlds=n.join("|"),t.email_fuzzy=RegExp(a(t.tpl_email_fuzzy),"i"),t.link_fuzzy=RegExp(a(t.tpl_link_fuzzy),"i"),t.link_no_ip_fuzzy=RegExp(a(t.tpl_link_no_ip_fuzzy),"i"),t.host_fuzzy_test=RegExp(a(t.tpl_host_fuzzy_test),"i");var c=[];function l(e,r){throw new Error('(LinkifyIt) Invalid schema "'+e+'": '+r)}r.__compiled__={},Object.keys(r.__schemas__).forEach((function(e){var t=r.__schemas__[e];if(null!==t){var n={validate:null,link:null};if(r.__compiled__[e]=n,"[object Object]"===s(t))return!function(e){return"[object RegExp]"===s(e)}(t.validate)?o(t.validate)?n.validate=t.validate:l(e,t):n.validate=function(e){return function(r,t){var n=r.slice(t);return e.test(n)?n.match(e)[0].length:0}}(t.validate),void(o(t.normalize)?n.normalize=t.normalize:t.normalize?l(e,t):n.normalize=function(e,r){r.normalize(e)});!function(e){return"[object String]"===s(e)}(t)?l(e,t):c.push(e)}})),c.forEach((function(e){r.__compiled__[r.__schemas__[e]]&&(r.__compiled__[e].validate=r.__compiled__[r.__schemas__[e]].validate,r.__compiled__[e].normalize=r.__compiled__[r.__schemas__[e]].normalize)})),r.__compiled__[""]={validate:null,normalize:function(e,r){r.normalize(e)}};var u=Object.keys(r.__compiled__).filter((function(e){return e.length>0&&r.__compiled__[e]})).map(i).join("|");r.re.schema_test=RegExp("(^|(?!_)(?:[><\uff5c]|"+t.src_ZPCc+"))("+u+")","i"),r.re.schema_search=RegExp("(^|(?!_)(?:[><\uff5c]|"+t.src_ZPCc+"))("+u+")","ig"),r.re.pretest=RegExp("("+r.re.schema_test.source+")|("+r.re.host_fuzzy_test.source+")|@","i"),function(e){e.__index__=-1,e.__text_cache__=""}(r)}function p(e,r){var t=e.__index__,n=e.__last_index__,s=e.__text_cache__.slice(t,n);this.schema=e.__schema__.toLowerCase(),this.index=t+r,this.lastIndex=n+r,this.raw=s,this.text=s,this.url=s}function h(e,r){var t=new p(e,r);return e.__compiled__[t.schema].normalize(t,e),t}function f(e,r){if(!(this instanceof f))return new f(e,r);var t;r||(t=e,Object.keys(t||{}).reduce((function(e,r){return e||a.hasOwnProperty(r)}),!1)&&(r=e,e={})),this.__opts__=n({},a,r),this.__index__=-1,this.__last_index__=-1,this.__schema__="",this.__text_cache__="",this.__schemas__=n({},c,e),this.__compiled__={},this.__tlds__=l,this.__tlds_replaced__=!1,this.re={},u(this)}f.prototype.add=function(e,r){return this.__schemas__[e]=r,u(this),this},f.prototype.set=function(e){return this.__opts__=n(this.__opts__,e),this},f.prototype.test=function(e){if(this.__text_cache__=e,this.__index__=-1,!e.length)return!1;var r,t,n,s,o,i,a,c;if(this.re.schema_test.test(e))for((a=this.re.schema_search).lastIndex=0;null!==(r=a.exec(e));)if(s=this.testSchemaAt(e,r[2],a.lastIndex)){this.__schema__=r[2],this.__index__=r.index+r[1].length,this.__last_index__=r.index+r[0].length+s;break}return this.__opts__.fuzzyLink&&this.__compiled__["http:"]&&(c=e.search(this.re.host_fuzzy_test))>=0&&(this.__index__<0||c=0&&null!==(n=e.match(this.re.email_fuzzy))&&(o=n.index+n[1].length,i=n.index+n[0].length,(this.__index__<0||othis.__last_index__)&&(this.__schema__="mailto:",this.__index__=o,this.__last_index__=i)),this.__index__>=0},f.prototype.pretest=function(e){return this.re.pretest.test(e)},f.prototype.testSchemaAt=function(e,r,t){return this.__compiled__[r.toLowerCase()]?this.__compiled__[r.toLowerCase()].validate(e,t,this):0},f.prototype.match=function(e){var r=0,t=[];this.__index__>=0&&this.__text_cache__===e&&(t.push(h(this,r)),r=this.__last_index__);for(var n=r?e.slice(r):e;this.test(n);)t.push(h(this,r)),n=n.slice(this.__last_index__),r+=this.__last_index__;return t.length?t:null},f.prototype.tlds=function(e,r){return e=Array.isArray(e)?e:[e],r?(this.__tlds__=this.__tlds__.concat(e).sort().filter((function(e,r,t){return e!==t[r-1]})).reverse(),u(this),this):(this.__tlds__=e.slice(),this.__tlds_replaced__=!0,u(this),this)},f.prototype.normalize=function(e){e.schema||(e.url="http://"+e.url),"mailto:"!==e.schema||/^mailto:/i.test(e.url)||(e.url="mailto:"+e.url)},f.prototype.onCompile=function(){},r.exports=f},{"./lib/re":54}],54:[function(e,r,t){"use strict";r.exports=function(r){var t={};t.src_Any=e("uc.micro/properties/Any/regex").source,t.src_Cc=e("uc.micro/categories/Cc/regex").source,t.src_Z=e("uc.micro/categories/Z/regex").source,t.src_P=e("uc.micro/categories/P/regex").source,t.src_ZPCc=[t.src_Z,t.src_P,t.src_Cc].join("|"),t.src_ZCc=[t.src_Z,t.src_Cc].join("|");return t.src_pseudo_letter="(?:(?![><\uff5c]|"+t.src_ZPCc+")"+t.src_Any+")",t.src_ip4="(?:(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)",t.src_auth="(?:(?:(?!"+t.src_ZCc+"|[@/\\[\\]()]).)+@)?",t.src_port="(?::(?:6(?:[0-4]\\d{3}|5(?:[0-4]\\d{2}|5(?:[0-2]\\d|3[0-5])))|[1-5]?\\d{1,4}))?",t.src_host_terminator="(?=$|[><\uff5c]|"+t.src_ZPCc+")(?!-|_|:\\d|\\.-|\\.(?!$|"+t.src_ZPCc+"))",t.src_path="(?:[/?#](?:(?!"+t.src_ZCc+"|[><\uff5c]|[()[\\]{}.,\"'?!\\-]).|\\[(?:(?!"+t.src_ZCc+"|\\]).)*\\]|\\((?:(?!"+t.src_ZCc+"|[)]).)*\\)|\\{(?:(?!"+t.src_ZCc+'|[}]).)*\\}|\\"(?:(?!'+t.src_ZCc+'|["]).)+\\"|\\\'(?:(?!'+t.src_ZCc+"|[']).)+\\'|\\'(?="+t.src_pseudo_letter+"|[-]).|\\.{2,}[a-zA-Z0-9%/&]|\\.(?!"+t.src_ZCc+"|[.]).|"+(r&&r["---"]?"\\-(?!--(?:[^-]|$))(?:-*)|":"\\-+|")+"\\,(?!"+t.src_ZCc+").|\\!(?!"+t.src_ZCc+").|\\?(?!"+t.src_ZCc+"|[?]).)+|\\/)?",t.src_email_name='[\\-;:&=\\+\\$,\\.a-zA-Z0-9_][\\-;:&=\\+\\$,\\"\\.a-zA-Z0-9_]*',t.src_xn="xn--[a-z0-9\\-]{1,59}",t.src_domain_root="(?:"+t.src_xn+"|"+t.src_pseudo_letter+"{1,63})",t.src_domain="(?:"+t.src_xn+"|(?:"+t.src_pseudo_letter+")|(?:"+t.src_pseudo_letter+"(?:-|"+t.src_pseudo_letter+"){0,61}"+t.src_pseudo_letter+"))",t.src_host="(?:(?:(?:(?:"+t.src_domain+")\\.)*"+t.src_domain+"))",t.tpl_host_fuzzy="(?:"+t.src_ip4+"|(?:(?:(?:"+t.src_domain+")\\.)+(?:%TLDS%)))",t.tpl_host_no_ip_fuzzy="(?:(?:(?:"+t.src_domain+")\\.)+(?:%TLDS%))",t.src_host_strict=t.src_host+t.src_host_terminator,t.tpl_host_fuzzy_strict=t.tpl_host_fuzzy+t.src_host_terminator,t.src_host_port_strict=t.src_host+t.src_port+t.src_host_terminator,t.tpl_host_port_fuzzy_strict=t.tpl_host_fuzzy+t.src_port+t.src_host_terminator,t.tpl_host_port_no_ip_fuzzy_strict=t.tpl_host_no_ip_fuzzy+t.src_port+t.src_host_terminator,t.tpl_host_fuzzy_test="localhost|www\\.|\\.\\d{1,3}\\.|(?:\\.(?:%TLDS%)(?:"+t.src_ZPCc+"|>|$))",t.tpl_email_fuzzy='(^|[><\uff5c]|"|\\(|'+t.src_ZCc+")("+t.src_email_name+"@"+t.tpl_host_fuzzy_strict+")",t.tpl_link_fuzzy="(^|(?![.:/\\-_@])(?:[$+<=>^`|\uff5c]|"+t.src_ZPCc+"))((?![$+<=>^`|\uff5c])"+t.tpl_host_port_fuzzy_strict+t.src_path+")",t.tpl_link_no_ip_fuzzy="(^|(?![.:/\\-_@])(?:[$+<=>^`|\uff5c]|"+t.src_ZPCc+"))((?![$+<=>^`|\uff5c])"+t.tpl_host_port_no_ip_fuzzy_strict+t.src_path+")",t}},{"uc.micro/categories/Cc/regex":61,"uc.micro/categories/P/regex":63,"uc.micro/categories/Z/regex":64,"uc.micro/properties/Any/regex":66}],55:[function(e,r,t){"use strict";var n={};function s(e,r){var t;return"string"!=typeof r&&(r=s.defaultChars),t=function(e){var r,t,s=n[e];if(s)return s;for(s=n[e]=[],r=0;r<128;r++)t=String.fromCharCode(r),s.push(t);for(r=0;r=55296&&c<=57343?"\ufffd\ufffd\ufffd":String.fromCharCode(c),r+=6):240==(248&s)&&r+91114111?l+="\ufffd\ufffd\ufffd\ufffd":(c-=65536,l+=String.fromCharCode(55296+(c>>10),56320+(1023&c))),r+=9):l+="\ufffd";return l}))}s.defaultChars=";/?:@&=+$,#",s.componentChars="",r.exports=s},{}],56:[function(e,r,t){"use strict";var n={};function s(e,r,t){var o,i,a,c,l,u="";for("string"!=typeof r&&(t=r,r=s.defaultChars),void 0===t&&(t=!0),l=function(e){var r,t,s=n[e];if(s)return s;for(s=n[e]=[],r=0;r<128;r++)t=String.fromCharCode(r),/^[0-9a-z]$/i.test(t)?s.push(t):s.push("%"+("0"+r.toString(16).toUpperCase()).slice(-2));for(r=0;r=55296&&a<=57343){if(a>=55296&&a<=56319&&o+1=56320&&c<=57343){u+=encodeURIComponent(e[o]+e[o+1]),o++;continue}u+="%EF%BF%BD"}else u+=encodeURIComponent(e[o]);return u}s.defaultChars=";/?:@&=+$,-_.!~*'()#",s.componentChars="-_.!~*'()",r.exports=s},{}],57:[function(e,r,t){"use strict";r.exports=function(e){var r="";return r+=e.protocol||"",r+=e.slashes?"//":"",r+=e.auth?e.auth+"@":"",e.hostname&&-1!==e.hostname.indexOf(":")?r+="["+e.hostname+"]":r+=e.hostname||"",r+=e.port?":"+e.port:"",r+=e.pathname||"",r+=e.search||"",r+=e.hash||""}},{}],58:[function(e,r,t){"use strict";r.exports.encode=e("./encode"),r.exports.decode=e("./decode"),r.exports.format=e("./format"),r.exports.parse=e("./parse")},{"./decode":55,"./encode":56,"./format":57,"./parse":59}],59:[function(e,r,t){"use strict";function n(){this.protocol=null,this.slashes=null,this.auth=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.pathname=null}var s=/^([a-z0-9.+-]+:)/i,o=/:[0-9]*$/,i=/^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,a=["{","}","|","\\","^","`"].concat(["<",">",'"',"`"," ","\r","\n","\t"]),c=["'"].concat(a),l=["%","/","?",";","#"].concat(c),u=["/","?","#"],p=/^[+a-z0-9A-Z_-]{0,63}$/,h=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,f={javascript:!0,"javascript:":!0},d={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0};n.prototype.parse=function(e,r){var t,n,o,a,c,m=e;if(m=m.trim(),!r&&1===e.split("#").length){var _=i.exec(m);if(_)return this.pathname=_[1],_[2]&&(this.search=_[2]),this}var g=s.exec(m);if(g&&(o=(g=g[0]).toLowerCase(),this.protocol=g,m=m.substr(g.length)),(r||g||m.match(/^\/\/[^@\/]+@[^@\/]+/))&&(!(c="//"===m.substr(0,2))||g&&f[g]||(m=m.substr(2),this.slashes=!0)),!f[g]&&(c||g&&!d[g])){var k,b,v=-1;for(t=0;t127?w+="x":w+=A[D];if(!w.match(p)){var q=x.slice(0,t),F=x.slice(t+1),S=A.match(h);S&&(q.push(S[1]),F.unshift(S[2])),F.length&&(m=F.join(".")+m),this.hostname=q.join(".");break}}}}this.hostname.length>255&&(this.hostname=""),C&&(this.hostname=this.hostname.substr(1,this.hostname.length-2))}var L=m.indexOf("#");-1!==L&&(this.hash=m.substr(L),m=m.slice(0,L));var z=m.indexOf("?");return-1!==z&&(this.search=m.substr(z),m=m.slice(0,z)),m&&(this.pathname=m),d[o]&&this.hostname&&!this.pathname&&(this.pathname=""),this},n.prototype.parseHost=function(e){var r=o.exec(e);r&&(":"!==(r=r[0])&&(this.port=r.substr(1)),e=e.substr(0,e.length-r.length)),e&&(this.hostname=e)},r.exports=function(e,r){if(e&&e instanceof n)return e;var t=new n;return t.parse(e,r),t}},{}],60:[function(e,r,t){(function(e){!function(n){var s="object"==typeof t&&t&&!t.nodeType&&t,o="object"==typeof r&&r&&!r.nodeType&&r,i="object"==typeof e&&e;i.global!==i&&i.window!==i&&i.self!==i||(n=i);var a,c,l=2147483647,u=/^xn--/,p=/[^\x20-\x7E]/,h=/[\x2E\u3002\uFF0E\uFF61]/g,f={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},d=Math.floor,m=String.fromCharCode;function _(e){throw new RangeError(f[e])}function g(e,r){for(var t=e.length,n=[];t--;)n[t]=r(e[t]);return n}function k(e,r){var t=e.split("@"),n="";return t.length>1&&(n=t[0]+"@",e=t[1]),n+g((e=e.replace(h,".")).split("."),r).join(".")}function b(e){for(var r,t,n=[],s=0,o=e.length;s=55296&&r<=56319&&s65535&&(r+=m((e-=65536)>>>10&1023|55296),e=56320|1023&e),r+=m(e)})).join("")}function y(e,r){return e+22+75*(e<26)-((0!=r)<<5)}function C(e,r,t){var n=0;for(e=t?d(e/700):e>>1,e+=d(e/r);e>455;n+=36)e=d(e/35);return d(n+36*e/(e+38))}function x(e){var r,t,n,s,o,i,a,c,u,p,h,f=[],m=e.length,g=0,k=128,b=72;for((t=e.lastIndexOf("-"))<0&&(t=0),n=0;n=128&&_("not-basic"),f.push(e.charCodeAt(n));for(s=t>0?t+1:0;s=m&&_("invalid-input"),((c=(h=e.charCodeAt(s++))-48<10?h-22:h-65<26?h-65:h-97<26?h-97:36)>=36||c>d((l-g)/i))&&_("overflow"),g+=c*i,!(c<(u=a<=b?1:a>=b+26?26:a-b));a+=36)i>d(l/(p=36-u))&&_("overflow"),i*=p;b=C(g-o,r=f.length+1,0==o),d(g/r)>l-k&&_("overflow"),k+=d(g/r),g%=r,f.splice(g++,0,k)}return v(f)}function A(e){var r,t,n,s,o,i,a,c,u,p,h,f,g,k,v,x=[];for(f=(e=b(e)).length,r=128,t=0,o=72,i=0;i=r&&hd((l-t)/(g=n+1))&&_("overflow"),t+=(a-r)*g,r=a,i=0;il&&_("overflow"),h==r){for(c=t,u=36;!(c<(p=u<=o?1:u>=o+26?26:u-o));u+=36)v=c-p,k=36-p,x.push(m(y(p+v%k,0))),c=d(v/k);x.push(m(y(c,0))),o=C(t,g,n==s),t=0,++n}++t,++r}return x.join("")}if(a={version:"1.4.1",ucs2:{decode:b,encode:v},decode:x,encode:A,toASCII:function(e){return k(e,(function(e){return p.test(e)?"xn--"+A(e):e}))},toUnicode:function(e){return k(e,(function(e){return u.test(e)?x(e.slice(4).toLowerCase()):e}))}},s&&o)if(r.exports==s)o.exports=a;else for(c in a)a.hasOwnProperty(c)&&(s[c]=a[c]);else n.punycode=a}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],61:[function(e,r,t){r.exports=/[\0-\x1F\x7F-\x9F]/},{}],62:[function(e,r,t){r.exports=/[\xAD\u0600-\u0605\u061C\u06DD\u070F\u08E2\u180E\u200B-\u200F\u202A-\u202E\u2060-\u2064\u2066-\u206F\uFEFF\uFFF9-\uFFFB]|\uD804[\uDCBD\uDCCD]|\uD82F[\uDCA0-\uDCA3]|\uD834[\uDD73-\uDD7A]|\uDB40[\uDC01\uDC20-\uDC7F]/},{}],63:[function(e,r,t){r.exports=/[!-#%-\*,-\/:;\?@\[-\]_\{\}\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166D\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4E\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]|\uD800[\uDD00-\uDD02\uDF9F\uDFD0]|\uD801\uDD6F|\uD802[\uDC57\uDD1F\uDD3F\uDE50-\uDE58\uDE7F\uDEF0-\uDEF6\uDF39-\uDF3F\uDF99-\uDF9C]|\uD803[\uDF55-\uDF59]|\uD804[\uDC47-\uDC4D\uDCBB\uDCBC\uDCBE-\uDCC1\uDD40-\uDD43\uDD74\uDD75\uDDC5-\uDDC8\uDDCD\uDDDB\uDDDD-\uDDDF\uDE38-\uDE3D\uDEA9]|\uD805[\uDC4B-\uDC4F\uDC5B\uDC5D\uDCC6\uDDC1-\uDDD7\uDE41-\uDE43\uDE60-\uDE6C\uDF3C-\uDF3E]|\uD806[\uDC3B\uDE3F-\uDE46\uDE9A-\uDE9C\uDE9E-\uDEA2]|\uD807[\uDC41-\uDC45\uDC70\uDC71\uDEF7\uDEF8]|\uD809[\uDC70-\uDC74]|\uD81A[\uDE6E\uDE6F\uDEF5\uDF37-\uDF3B\uDF44]|\uD81B[\uDE97-\uDE9A]|\uD82F\uDC9F|\uD836[\uDE87-\uDE8B]|\uD83A[\uDD5E\uDD5F]/},{}],64:[function(e,r,t){r.exports=/[ \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]/},{}],65:[function(e,r,t){"use strict";t.Any=e("./properties/Any/regex"),t.Cc=e("./categories/Cc/regex"),t.Cf=e("./categories/Cf/regex"),t.P=e("./categories/P/regex"),t.Z=e("./categories/Z/regex")},{"./categories/Cc/regex":61,"./categories/Cf/regex":62,"./categories/P/regex":63,"./categories/Z/regex":64,"./properties/Any/regex":66}],66:[function(e,r,t){r.exports=/[\0-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/},{}],67:[function(e,r,t){"use strict";r.exports=e("./lib/")},{"./lib/":9}]},{},[67])(67)})); diff --git a/src/data/extra/web/js/markdownit.js b/src/data/extra/web/js/markdownit.js new file mode 100644 index 00000000..101e1960 --- /dev/null +++ b/src/data/extra/web/js/markdownit.js @@ -0,0 +1,316 @@ +class MarkdownItOptions { + constructor() { + // Enable HTML tags in source. + this.enableHtmlTag = true; + // Convert '\n' in paragraphs into
    . + this.enableAutoBreaks = false; + // CSS language prefix for fenced code blocks. + this.languagePrefix = 'lang-'; + // Convert URL-like text to links. + this.enableLinkify = true; + // Enable some language-neural replacement and quotes beautification. + this.enableTypographer = false; + // Double and single quotes replacement pairs. + this.quotes = ''; + } +} + +// Classify code nodes by lang. +class CodeNodeStoreByLang { + constructor() { + this.prefix = 'lang-'; + + // [class] -> NodeList. + this.knownNodes = new Map(); + + // Nodes without lang specified or unknown langs. + this.unknownNodes = []; + } + + // Register @p_langs as known langs. + registerLangs(p_langs) { + p_langs.forEach((p_lang) => { + this.knownNodes.set(this.prefix + p_lang, []); + }); + } + + // Add one node to store. + addNode(p_node) { + if (!p_node || p_node.tagName.toLowerCase() != 'code') { + return; + } + + for (let i = 0; i < p_node.classList.length; ++i) { + let key = p_node.classList[i]; + if (key.startsWith(this.prefix)) { + if (this.knownNodes.has(key)) { + let val = this.knownNodes.get(key); + val.push(p_node); + this.knownNodes.set(key, val); + return; + } + // We assume that there is only one lang- class. + break; + } + } + + this.unknownNodes.push(p_node); + } + + // Clear all nodes. + clearNodes() { + for (let key of this.knownNodes.keys()) { + this.knownNodes.set(key, []); + } + + this.unknownNodes = []; + } + + getNodes(p_langs) { + if (!p_langs || p_langs.length == 0) { + return this.unknownNodes; + } + + let nodes = []; + p_langs.forEach((p_lang) => { + let c = this.prefix + p_lang; + if (this.knownNodes.has(c)) { + if (nodes.length == 0) { + nodes = this.knownNodes.get(c); + } else { + nodes = nodes.concat(this.knownNodes.get(c)); + } + } + }); + + return nodes; + } +} + +class MarkdownIt extends VxWorker { + constructor(p_options) { + super(); + + this.name = 'markdownit'; + + this.options = p_options; + + // Languages of code blocks that need to skip highlight. + this.langsToSkipHighlight = new Set(); + + // Node to prepend for FrontMatter metadata. + this.frontMatterNode = null; + + this.lastContainerNode = null; + + // Pre nodes collection. + this.preNodes = null; + + this.codeNodesStore = new CodeNodeStoreByLang(); + + this.codeNodesCollected = false; + + // Used to deduplicate header Ids. + this.headerIds = new Set(); + + this.mdit = window.markdownit({ + html: this.options.enableHtmlTag, + breaks: this.options.enableAutoBreaks, + linkify: this.options.enableLinkify, + typographer: this.options.enableTypographer, + langPrefix: this.options.languagePrefix, + quotes: this.options.quotes, + highlight: (p_str, p_lang) => { + /* We will use asynchronous higlight. + if (p_lang && !this.langsToSkipHighlight.has(p_lang)) { + if (Prism.languages[p_lang]) { + return Prism.highlight(p_str, Prism.languages[p_lang], p_lang); + } + } + */ + // Use external default escaping. + return ''; + } + }); + + // Enable file: schema of markdownIt. + this.defaultValidateLink = this.mdit.validateLink; + this.mdit.validateLink = (p_url) => { + let str = p_url.trim().toLowerCase(); + return /^file:/.test(str) ? true : this.defaultValidateLink(p_url); + }; + + this.mdit.use(window.markdownitHeadingAnchor, { + anchorClass: 'vx-anchor', + addHeadingID: true, + addHeadingAnchor: false, + anchorIcon: '#', + slugify: (md, str) => { + return this.generateHeaderId(str); + }, + }); + + this.mdit.use(window.markdownitTaskLists); + + this.mdit.use(window.markdownitSub); + + this.mdit.use(window.markdownitSup); + + this.mdit.use(window.markdownitEmoji); + this.mdit.renderer.rules.emoji = function(p_tokens, p_idx) { + return '' + + p_tokens[p_idx].content + + ''; + }; + + this.mdit.use(window.markdownitFootnote); + + this.mdit.use(window['markdown-it-imsize.js']); + + this.mdit.use(texmath, { delimiters: ['dollars', 'raw'] }); + + // Support '::: alert-xxx \n contents \n :::\n'. + this.mdit.use(window.markdownitContainer, 'alert', { + validate: function(p_params) { + return p_params.trim().match(/^alert-\S+$/); + }, + + render: function (p_tokens, p_idx) { + let type = p_tokens[p_idx].info.trim().match(/^(alert-\S+)$/); + if (p_tokens[p_idx].nesting === 1) { + // opening tag + let alertClass = type[1]; + return '\n'; + } + } + }); + + this.mdit.use(window.markdownitFrontMatter, (p_metaData) => { + if (p_metaData) { + let detailsNode = document.createElement('details'); + detailsNode.classList.add('vx-frontmatter'); + + let summaryNode = document.createElement('summary'); + summaryNode.textContent = 'Metadata'; + detailsNode.appendChild(summaryNode); + + let preNode = document.createElement('pre'); + preNode.innerHTML = p_metaData; + detailsNode.appendChild(preNode); + + this.frontMatterNode = detailsNode; + } else { + this.frontMatterNode = null; + } + }); + + this.mdit.use(window.markdownitInjectLinenumbers); + + if (window.vxOptions.protectFromXss) { + let scriptFolderPath = Utils.parentFolder(document.currentScript.src); + Utils.loadScripts([scriptFolderPath + '/markdown-it/markdown-it-xss.min.js'], + () => { + this.mdit.use(window['markdown-it-xss']); + }); + } + } + + registerInternal() { + this.vnotex.on('markdownTextUpdated', (p_text) => { + this.render(this.vnotex.contentContainer, + p_text, + 'window.vnotex.getWorker(\'markdownit\').markdownRenderFinished();'); + }); + } + + // Render Markdown @p_text to HTML in @p_node. + // @p_finishCbStr will be called after finishing loading new content nodes. + // This could prevent Mermaid Gantt from negative width error. + render(p_node, p_text, p_finishCbStr) { + this.frontMatterNode = null; + this.codeNodesStore.clearNodes(); + this.codeNodesCollected = false; + this.headerIds.clear(); + + if (p_node != this.lastContainerNode) { + this.lastContainerNode = p_node; + this.preNodes = null; + } + + if (!p_text) { + p_node.innerHTML = ''; + this.finishWork(); + this.markdownRenderFinished(); + return; + } + + let html = this.mdit.render(p_text); + p_node.innerHTML = html + this.loadedGuard(p_finishCbStr); + + if (this.preNodes == null) { + this.preNodes = p_node.getElementsByTagName('pre'); + } + + if (this.frontMatterNode) { + p_node.insertAdjacentElement('afterbegin', this.frontMatterNode); + } + + this.finishWork(); + } + + loadedGuard(p_cbStr) { + if (!p_cbStr) { + return ''; + } + // Add 1x1 transparent GIF image at the end to monitor the load process. + return ''; + } + + addLangsToSkipHighlight(p_langs) { + p_langs.forEach((p_lang) => { + this.langsToSkipHighlight.add(p_lang); + }); + + this.codeNodesStore.registerLangs(p_langs); + } + + // Will be called when basic markdown is rendered. + markdownRenderFinished() { + window.vxImageViewer.setupForAllImages(this.lastContainerNode); + this.vnotex.setBasicMarkdownRendered(); + } + + getCodeNodes(p_langs) { + if (!this.preNodes) { + return []; + } + + if (!this.codeNodesCollected) { + // Collect code nodes. + this.codeNodesCollected = true; + for (let i = 0; i < this.preNodes.length; ++i) { + this.codeNodesStore.addNode(this.preNodes[i].firstElementChild); + } + } + + return this.codeNodesStore.getNodes(p_langs); + } + + generateHeaderId(p_str) { + let idBase = p_str.replace(/\s/g, '-').toLowerCase(); + let id = idBase; + let idx = 1; + while (this.headerIds.has(id)) { + id = idBase + '-' + idx; + ++idx; + } + this.headerIds.add(id); + return id; + } +} + +window.vnotex.registerWorker(new MarkdownIt(new MarkdownItOptions())); diff --git a/src/data/extra/web/js/markdownviewer.js b/src/data/extra/web/js/markdownviewer.js new file mode 100644 index 00000000..40855bd7 --- /dev/null +++ b/src/data/extra/web/js/markdownviewer.js @@ -0,0 +1,52 @@ +/* Main script file for MarkdownViewer. */ + +new QWebChannel(qt.webChannelTransport, + function(p_channel) { + let adapter = p_channel.objects.vxAdapter; + // Export the adapter globally. + window.vxMarkdownAdapter = adapter; + + // Connect signals from CPP side. + adapter.textUpdated.connect(function(p_text) { + window.vnotex.setMarkdownText(p_text); + }); + + adapter.editLineNumberUpdated.connect(function(p_lineNumber) { + window.vnotex.scrollToLine(p_lineNumber); + }); + + adapter.anchorScrollRequested.connect(function(p_anchor) { + window.vnotex.scrollToAnchor(p_anchor); + }); + + adapter.graphPreviewRequested.connect(function(p_id, p_timeStamp, p_lang, p_text) { + window.vnotex.previewGraph(p_id, p_timeStamp, p_lang, p_text); + }); + + adapter.mathPreviewRequested.connect(function(p_id, p_timeStamp, p_text) { + window.vnotex.previewMath(p_id, p_timeStamp, p_text); + }); + + adapter.scrollRequested.connect(function(p_up) { + window.vnotex.scroll(p_up); + }); + + adapter.htmlToMarkdownRequested.connect(function(p_id, p_timeStamp, p_html) { + window.vnotex.htmlToMarkdown(p_id, p_timeStamp, p_html); + }); + + adapter.crossCopyRequested.connect(function(p_id, p_timeStamp, p_target, p_baseUrl, p_html) { + window.vnotex.crossCopy(p_id, p_timeStamp, p_target, p_baseUrl, p_html); + }); + + console.log('QWebChannel has been set up'); + if (window.vnotex.initialized) { + window.vnotex.kickOffMarkdown(); + } + }); + +window.vnotex.on('ready', function() { + if (window.vxMarkdownAdapter) { + window.vnotex.kickOffMarkdown(); + } +}); diff --git a/src/data/extra/web/js/mathjax.js b/src/data/extra/web/js/mathjax.js new file mode 100644 index 00000000..6701423a --- /dev/null +++ b/src/data/extra/web/js/mathjax.js @@ -0,0 +1,188 @@ +window.MathJax = { + tex: { + inlineMath: [['$', '$'], ['\\(', '\\)']], + processEscapes: true, + tags: 'ams' + }, + options: { + processHtmlClass: 'tex2jax_process|language-mathjax|lang-mathjax' + }, + startup: { + typeset: false, + ready: function() { + MathJax.startup.defaultReady(); + MathJax.startup.promise.then(() => { + window.vnotex.getWorker('mathjax').setMathJaxReady(); + }); + } + }, + svg: { + // Make SVG self-contained. + fontCache: 'local' + } +}; + +class MathJaxRenderer extends VxWorker { + constructor() { + super(); + + this.name = 'mathjax'; + + this.initialized = false; + + this.nodesToRender = []; + + this.mathJaxScript = 'https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-svg.js'; + + this.langs = ['mathjax']; + + // Will be called when MathJax is ready. + this.readyCallback = function() {}; + } + + registerInternal() { + this.vnotex.on('basicMarkdownRendered', () => { + this.render(this.vnotex.contentContainer, 'tex-to-render'); + }); + + this.vnotex.getWorker('markdownit').addLangsToSkipHighlight(this.langs); + } + + initialize(p_callback) { + if (this.initialized) { + return true; + } + + this.initialized = true; + this.readyCallback = p_callback; + Utils.loadScript(this.mathJaxScript, null); + return false; + } + + setMathJaxReady() { + this.readyCallback(); + } + + // Fetch all nodes of @p_className to render. + // Will fetch extra code nodes, too. + render(p_node, p_className) { + this.nodesToRender = []; + + // Transform extra class nodes. + let extraNodes = this.vnotex.getWorker('markdownit').getCodeNodes(this.langs); + this.transformExtraNodes(p_node, p_className, extraNodes); + + // Collect nodes to render. + let nodes = p_node.getElementsByClassName(p_className); + if (nodes.length == 0) { + this.finishWork(); + return; + } + + this.nodesToRender = Array.from(nodes); + + if (!this.initialize(() => { + this.renderNodes(); + })) { + return; + } + + this.renderNodes(); + } + + // p_callback(svgNode). + renderText(p_container, p_text, p_callback) { + let func = () => { + // Check text and remove the guards. + let check = this.removeTextGuard(p_text); + if (!check) { + p_callback(null); + return; + } + let options = null; + try { + options = MathJax.getMetricsFor(p_container, check.display); + } catch (err) { + console.error('failed to render MathJax', err); + p_callback(null); + return; + } + + let mathNode = null; + try { + mathNode = MathJax.tex2svg(check.text, options); + } catch (err) { + console.error('failed to render MathJax', err); + } + p_callback(mathNode ? mathNode.firstElementChild : null); + }; + + if (!this.initialize(func)) { + return; + } + + func(); + } + + transformExtraNodes(p_node, p_className, p_extraNodes) { + p_extraNodes.forEach((node) => { + MathJaxRenderer.transformNode(node, p_className); + }); + } + + static transformNode(p_node, p_className) { + // Replace it with
    . + let eqn = document.createElement('eqn'); + eqn.classList.add(p_className); + eqn.textContent = p_node.textContent; + + let section = document.createElement('section'); + section.appendChild(eqn); + + Utils.replaceNodeWithPreCheck(p_node, section); + } + + renderNodes() { + if (this.nodesToRender.length > 0) { + try { + MathJax.texReset(); + } catch (err) { + console.error('MathJax is not ready', err); + this.postProcessMathJax(); + return; + } + + MathJax.typesetPromise(this.nodesToRender) + .then(() => { + this.postProcessMathJax(); + }) + .catch((err) => { + console.error('failed to render MathJax', err); + this.postProcessMathJax(); + }); + } + } + + postProcessMathJax() { + this.finishWork(); + } + + // Return { text, display }. + removeTextGuard(p_text) { + let text = p_text.trim(); + let display = false; + + if (text.startsWith('$$') && text.endsWith('$$')) { + text = text.substring(2, text.length - 2); + display = true; + } else if (text.startsWith('$') && text.endsWith('$')) { + text = text.substring(1, text.length - 1); + } else { + return null; + } + + return { text: text, display: display }; + } +} + +window.vnotex.registerWorker(new MathJaxRenderer()); diff --git a/src/data/extra/web/js/mermaid.js b/src/data/extra/web/js/mermaid.js new file mode 100644 index 00000000..becdd137 --- /dev/null +++ b/src/data/extra/web/js/mermaid.js @@ -0,0 +1,125 @@ +class Mermaid extends GraphRenderer { + constructor() { + super(); + + this.name = 'mermaid'; + + this.graphDivClass = 'vx-mermaid-graph'; + + this.extraScripts = [this.scriptFolderPath + '/mermaid/mermaid.min.js']; + + // default/dark/forest/neutral. + this.theme = 'default'; + + this.langs = ['mermaid']; + } + + initialize(p_callback) { + return super.initialize(() => { + mermaid.mermaidAPI.initialize({ + startOnLoad: false, + theme: this.theme + }); + p_callback(); + }); + } + + // Render @p_node as Mermaid graph. + // Return true on success. + renderOne(p_node, p_idx) { + let graphSvg = null; + try { + graphSvg = mermaid.mermaidAPI.render('vx-mermaid-graph-' + p_idx, + p_node.textContent, + function() {}); + } catch (p_err) { + console.error('failed to render Mermaid', p_err); + // Clean the container element, or Mermaid won't render the graph with + // the same id. + let graphNode = document.getElementById('vx-mermaid-graph-' + p_idx); + if (graphNode) { + let parentNode = graphNode.parentElement; + parentNode.outerHTML = ''; + delete graphNode.parentElement; + } + this.finishRenderingOne(); + return false; + } + + if (!graphSvg) { + this.finishRenderingOne(); + return false; + } + + let graphDiv = document.createElement('div'); + graphDiv.classList.add(this.graphDivClass); + try { + graphDiv.innerHTML = graphSvg; + window.vxImageViewer.setupSVGToView(graphDiv.children[0], true); + } catch (p_err) { + console.error('incorrect graph SVG definition', p_err); + this.finishRenderingOne(); + return false; + } + + Utils.checkSourceLine(p_node, graphDiv); + + Utils.replaceNodeWithPreCheck(p_node, graphDiv); + + this.finishRenderingOne(); + return true; + } + + // Render a graph from @p_text. + // Will append a div to @p_container and return the div. + renderTextInternal(p_container, p_text, p_idx) { + let graphSvg = null; + try { + graphSvg = mermaid.mermaidAPI.render('vx-mermaid-graph-stand-alone-' + p_idx, + p_text, + function() {}); + } catch (p_err) { + console.error('failed to render Mermaid', p_err); + // Clean the container element, or Mermaid won't render the graph with + // the same id. + let graphNode = document.getElementById('vx-mermaid-graph-stand-alone-' + p_idx); + if (graphNode) { + let parentNode = graphNode.parentElement; + parentNode.outerHTML = ''; + delete graphNode.parentElement; + } + return null; + } + + if (!graphSvg) { + return null; + } + + let graphDiv = document.createElement('div'); + try { + graphDiv.innerHTML = graphSvg; + } catch (p_err) { + console.error('incorrect graph SVG definition', p_err); + return null; + } + + p_container.appendChild(graphDiv); + + return graphDiv; + } + + // p_callback(graphDiv). + renderText(p_container, p_text, p_idx, p_callback) { + if (!this.initialize(() => { + let graphDiv = this.renderTextInternal(p_container, p_text, p_idx); + p_callback(graphDiv); + })) { + return; + } + + let graphDiv = this.renderTextInternal(p_container, p_text, p_idx); + p_callback(graphDiv); + } +} + +window.vnotex.registerWorker(new Mermaid()); diff --git a/src/data/extra/web/js/mermaid/README.md b/src/data/extra/web/js/mermaid/README.md new file mode 100644 index 00000000..00a2eb39 --- /dev/null +++ b/src/data/extra/web/js/mermaid/README.md @@ -0,0 +1,2 @@ +# [mermaid](https://github.com/mermaid-js/mermaid) +v8.7.0 diff --git a/src/data/extra/web/js/mermaid/mermaid.min.js b/src/data/extra/web/js/mermaid/mermaid.min.js new file mode 100644 index 00000000..f746f856 --- /dev/null +++ b/src/data/extra/web/js/mermaid/mermaid.min.js @@ -0,0 +1,32 @@ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.mermaid=e():t.mermaid=e()}("undefined"!=typeof self?self:this,(function(){return function(t){var e={};function n(r){if(e[r])return e[r].exports;var i=e[r]={i:r,l:!1,exports:{}};return t[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var i in t)n.d(r,i,function(e){return t[e]}.bind(null,i));return r},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=383)}([function(t,e,n){"use strict";n.r(e);var r=function(t,e){return te?1:t>=e?0:NaN},i=function(t){var e;return 1===t.length&&(e=t,t=function(t,n){return r(e(t),n)}),{left:function(e,n,r,i){for(null==r&&(r=0),null==i&&(i=e.length);r>>1;t(e[a],n)<0?r=a+1:i=a}return r},right:function(e,n,r,i){for(null==r&&(r=0),null==i&&(i=e.length);r>>1;t(e[a],n)>0?i=a:r=a+1}return r}}};var a=i(r),o=a.right,s=a.left,c=o,u=function(t,e){null==e&&(e=l);for(var n=0,r=t.length-1,i=t[0],a=new Array(r<0?0:r);nt?1:e>=t?0:NaN},d=function(t){return null===t?NaN:+t},p=function(t,e){var n,r,i=t.length,a=0,o=-1,s=0,c=0;if(null==e)for(;++o1)return c/(a-1)},y=function(t,e){var n=p(t,e);return n?Math.sqrt(n):n},g=function(t,e){var n,r,i,a=t.length,o=-1;if(null==e){for(;++o=n)for(r=i=n;++on&&(r=n),i=n)for(r=i=n;++on&&(r=n),i0)return[t];if((r=e0)for(t=Math.ceil(t/o),e=Math.floor(e/o),a=new Array(i=Math.ceil(e-t+1));++s=0?(a>=w?10:a>=E?5:a>=T?2:1)*Math.pow(10,i):-Math.pow(10,-i)/(a>=w?10:a>=E?5:a>=T?2:1)}function S(t,e,n){var r=Math.abs(e-t)/Math.max(0,n),i=Math.pow(10,Math.floor(Math.log(r)/Math.LN10)),a=r/i;return a>=w?i*=10:a>=E?i*=5:a>=T&&(i*=2),eh;)f.pop(),--d;var p,y=new Array(d+1);for(i=0;i<=d;++i)(p=y[i]=[]).x0=i>0?f[i-1]:l,p.x1=i=1)return+n(t[r-1],r-1,t);var r,i=(r-1)*e,a=Math.floor(i),o=+n(t[a],a,t);return o+(+n(t[a+1],a+1,t)-o)*(i-a)}},N=function(t,e,n){return t=b.call(t,d).sort(r),Math.ceil((n-e)/(2*(D(t,.75)-D(t,.25))*Math.pow(t.length,-1/3)))},B=function(t,e,n){return Math.ceil((n-e)/(3.5*y(t)*Math.pow(t.length,-1/3)))},L=function(t,e){var n,r,i=t.length,a=-1;if(null==e){for(;++a=n)for(r=n;++ar&&(r=n)}else for(;++a=n)for(r=n;++ar&&(r=n);return r},F=function(t,e){var n,r=t.length,i=r,a=-1,o=0;if(null==e)for(;++a=0;)for(e=(r=t[i]).length;--e>=0;)n[--o]=r[e];return n},j=function(t,e){var n,r,i=t.length,a=-1;if(null==e){for(;++a=n)for(r=n;++an&&(r=n)}else for(;++a=n)for(r=n;++an&&(r=n);return r},R=function(t,e){for(var n=e.length,r=new Array(n);n--;)r[n]=t[e[n]];return r},Y=function(t,e){if(n=t.length){var n,i,a=0,o=0,s=t[o];for(null==e&&(e=r);++a=0&&(n=t.slice(r+1),t=t.slice(0,r)),t&&!e.hasOwnProperty(t))throw new Error("unknown type: "+t);return{type:t,name:n}}))}function ct(t,e){for(var n,r=0,i=t.length;r0)for(var n,r,i=new Array(n),a=0;ae?1:t>=e?0:NaN}var xt="http://www.w3.org/1999/xhtml",kt={svg:"http://www.w3.org/2000/svg",xhtml:xt,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"},wt=function(t){var e=t+="",n=e.indexOf(":");return n>=0&&"xmlns"!==(e=t.slice(0,n))&&(t=t.slice(n+1)),kt.hasOwnProperty(e)?{space:kt[e],local:t}:t};function Et(t){return function(){this.removeAttribute(t)}}function Tt(t){return function(){this.removeAttributeNS(t.space,t.local)}}function Ct(t,e){return function(){this.setAttribute(t,e)}}function At(t,e){return function(){this.setAttributeNS(t.space,t.local,e)}}function St(t,e){return function(){var n=e.apply(this,arguments);null==n?this.removeAttribute(t):this.setAttribute(t,n)}}function Mt(t,e){return function(){var n=e.apply(this,arguments);null==n?this.removeAttributeNS(t.space,t.local):this.setAttributeNS(t.space,t.local,n)}}var Ot=function(t){return t.ownerDocument&&t.ownerDocument.defaultView||t.document&&t||t.defaultView};function Dt(t){return function(){this.style.removeProperty(t)}}function Nt(t,e,n){return function(){this.style.setProperty(t,e,n)}}function Bt(t,e,n){return function(){var r=e.apply(this,arguments);null==r?this.style.removeProperty(t):this.style.setProperty(t,r,n)}}function Lt(t,e){return t.style.getPropertyValue(e)||Ot(t).getComputedStyle(t,null).getPropertyValue(e)}function Ft(t){return function(){delete this[t]}}function Pt(t,e){return function(){this[t]=e}}function It(t,e){return function(){var n=e.apply(this,arguments);null==n?delete this[t]:this[t]=n}}function jt(t){return t.trim().split(/^|\s+/)}function Rt(t){return t.classList||new Yt(t)}function Yt(t){this._node=t,this._names=jt(t.getAttribute("class")||"")}function zt(t,e){for(var n=Rt(t),r=-1,i=e.length;++r=0&&(this._names.splice(e,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(t){return this._names.indexOf(t)>=0}};function Vt(){this.textContent=""}function Gt(t){return function(){this.textContent=t}}function qt(t){return function(){var e=t.apply(this,arguments);this.textContent=null==e?"":e}}function Xt(){this.innerHTML=""}function Zt(t){return function(){this.innerHTML=t}}function Jt(t){return function(){var e=t.apply(this,arguments);this.innerHTML=null==e?"":e}}function Qt(){this.nextSibling&&this.parentNode.appendChild(this)}function Kt(){this.previousSibling&&this.parentNode.insertBefore(this,this.parentNode.firstChild)}function te(t){return function(){var e=this.ownerDocument,n=this.namespaceURI;return n===xt&&e.documentElement.namespaceURI===xt?e.createElement(t):e.createElementNS(n,t)}}function ee(t){return function(){return this.ownerDocument.createElementNS(t.space,t.local)}}var ne=function(t){var e=wt(t);return(e.local?ee:te)(e)};function re(){return null}function ie(){var t=this.parentNode;t&&t.removeChild(this)}function ae(){var t=this.cloneNode(!1),e=this.parentNode;return e?e.insertBefore(t,this.nextSibling):t}function oe(){var t=this.cloneNode(!0),e=this.parentNode;return e?e.insertBefore(t,this.nextSibling):t}var se={},ce=null;"undefined"!=typeof document&&("onmouseenter"in document.documentElement||(se={mouseenter:"mouseover",mouseleave:"mouseout"}));function ue(t,e,n){return t=le(t,e,n),function(e){var n=e.relatedTarget;n&&(n===this||8&n.compareDocumentPosition(this))||t.call(this,e)}}function le(t,e,n){return function(r){var i=ce;ce=r;try{t.call(this,this.__data__,e,n)}finally{ce=i}}}function he(t){return t.trim().split(/^|\s+/).map((function(t){var e="",n=t.indexOf(".");return n>=0&&(e=t.slice(n+1),t=t.slice(0,n)),{type:t,name:e}}))}function fe(t){return function(){var e=this.__on;if(e){for(var n,r=0,i=-1,a=e.length;r=x&&(x=_+1);!(b=v[x])&&++x=0;)(r=i[a])&&(o&&4^r.compareDocumentPosition(o)&&o.parentNode.insertBefore(r,o),o=r);return this},sort:function(t){function e(e,n){return e&&n?t(e.__data__,n.__data__):!e-!n}t||(t=_t);for(var n=this._groups,r=n.length,i=new Array(r),a=0;a1?this.each((null==e?Dt:"function"==typeof e?Bt:Nt)(t,e,null==n?"":n)):Lt(this.node(),t)},property:function(t,e){return arguments.length>1?this.each((null==e?Ft:"function"==typeof e?It:Pt)(t,e)):this.node()[t]},classed:function(t,e){var n=jt(t+"");if(arguments.length<2){for(var r=Rt(this.node()),i=-1,a=n.length;++i>8&15|e>>4&240,e>>4&15|240&e,(15&e)<<4|15&e,1):8===n?new qe(e>>24&255,e>>16&255,e>>8&255,(255&e)/255):4===n?new qe(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|240&e,((15&e)<<4|15&e)/255):null):(e=Le.exec(t))?new qe(e[1],e[2],e[3],1):(e=Fe.exec(t))?new qe(255*e[1]/100,255*e[2]/100,255*e[3]/100,1):(e=Pe.exec(t))?He(e[1],e[2],e[3],e[4]):(e=Ie.exec(t))?He(255*e[1]/100,255*e[2]/100,255*e[3]/100,e[4]):(e=je.exec(t))?Qe(e[1],e[2]/100,e[3]/100,1):(e=Re.exec(t))?Qe(e[1],e[2]/100,e[3]/100,e[4]):Ye.hasOwnProperty(t)?We(Ye[t]):"transparent"===t?new qe(NaN,NaN,NaN,0):null}function We(t){return new qe(t>>16&255,t>>8&255,255&t,1)}function He(t,e,n,r){return r<=0&&(t=e=n=NaN),new qe(t,e,n,r)}function Ve(t){return t instanceof Me||(t=$e(t)),t?new qe((t=t.rgb()).r,t.g,t.b,t.opacity):new qe}function Ge(t,e,n,r){return 1===arguments.length?Ve(t):new qe(t,e,n,null==r?1:r)}function qe(t,e,n,r){this.r=+t,this.g=+e,this.b=+n,this.opacity=+r}function Xe(){return"#"+Je(this.r)+Je(this.g)+Je(this.b)}function Ze(){var t=this.opacity;return(1===(t=isNaN(t)?1:Math.max(0,Math.min(1,t)))?"rgb(":"rgba(")+Math.max(0,Math.min(255,Math.round(this.r)||0))+", "+Math.max(0,Math.min(255,Math.round(this.g)||0))+", "+Math.max(0,Math.min(255,Math.round(this.b)||0))+(1===t?")":", "+t+")")}function Je(t){return((t=Math.max(0,Math.min(255,Math.round(t)||0)))<16?"0":"")+t.toString(16)}function Qe(t,e,n,r){return r<=0?t=e=n=NaN:n<=0||n>=1?t=e=NaN:e<=0&&(t=NaN),new en(t,e,n,r)}function Ke(t){if(t instanceof en)return new en(t.h,t.s,t.l,t.opacity);if(t instanceof Me||(t=$e(t)),!t)return new en;if(t instanceof en)return t;var e=(t=t.rgb()).r/255,n=t.g/255,r=t.b/255,i=Math.min(e,n,r),a=Math.max(e,n,r),o=NaN,s=a-i,c=(a+i)/2;return s?(o=e===a?(n-r)/s+6*(n0&&c<1?0:o,new en(o,s,c,t.opacity)}function tn(t,e,n,r){return 1===arguments.length?Ke(t):new en(t,e,n,null==r?1:r)}function en(t,e,n,r){this.h=+t,this.s=+e,this.l=+n,this.opacity=+r}function nn(t,e,n){return 255*(t<60?e+(n-e)*t/60:t<180?n:t<240?e+(n-e)*(240-t)/60:e)}function rn(t,e,n,r,i){var a=t*t,o=a*t;return((1-3*t+3*a-o)*e+(4-6*a+3*o)*n+(1+3*t+3*a-3*o)*r+o*i)/6}Ae(Me,$e,{copy:function(t){return Object.assign(new this.constructor,this,t)},displayable:function(){return this.rgb().displayable()},hex:ze,formatHex:ze,formatHsl:function(){return Ke(this).formatHsl()},formatRgb:Ue,toString:Ue}),Ae(qe,Ge,Se(Me,{brighter:function(t){return t=null==t?1/.7:Math.pow(1/.7,t),new qe(this.r*t,this.g*t,this.b*t,this.opacity)},darker:function(t){return t=null==t?.7:Math.pow(.7,t),new qe(this.r*t,this.g*t,this.b*t,this.opacity)},rgb:function(){return this},displayable:function(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:Xe,formatHex:Xe,formatRgb:Ze,toString:Ze})),Ae(en,tn,Se(Me,{brighter:function(t){return t=null==t?1/.7:Math.pow(1/.7,t),new en(this.h,this.s,this.l*t,this.opacity)},darker:function(t){return t=null==t?.7:Math.pow(.7,t),new en(this.h,this.s,this.l*t,this.opacity)},rgb:function(){var t=this.h%360+360*(this.h<0),e=isNaN(t)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*e,i=2*n-r;return new qe(nn(t>=240?t-240:t+120,i,r),nn(t,i,r),nn(t<120?t+240:t-120,i,r),this.opacity)},displayable:function(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl:function(){var t=this.opacity;return(1===(t=isNaN(t)?1:Math.max(0,Math.min(1,t)))?"hsl(":"hsla(")+(this.h||0)+", "+100*(this.s||0)+"%, "+100*(this.l||0)+"%"+(1===t?")":", "+t+")")}}));var an=function(t){var e=t.length-1;return function(n){var r=n<=0?n=0:n>=1?(n=1,e-1):Math.floor(n*e),i=t[r],a=t[r+1],o=r>0?t[r-1]:2*i-a,s=r180||n<-180?n-360*Math.round(n/360):n):sn(isNaN(t)?e:t)}function ln(t){return 1==(t=+t)?hn:function(e,n){return n-e?function(t,e,n){return t=Math.pow(t,n),e=Math.pow(e,n)-t,n=1/n,function(r){return Math.pow(t+r*e,n)}}(e,n,t):sn(isNaN(e)?n:e)}}function hn(t,e){var n=e-t;return n?cn(t,n):sn(isNaN(t)?e:t)}var fn=function t(e){var n=ln(e);function r(t,e){var r=n((t=Ge(t)).r,(e=Ge(e)).r),i=n(t.g,e.g),a=n(t.b,e.b),o=hn(t.opacity,e.opacity);return function(e){return t.r=r(e),t.g=i(e),t.b=a(e),t.opacity=o(e),t+""}}return r.gamma=t,r}(1);function dn(t){return function(e){var n,r,i=e.length,a=new Array(i),o=new Array(i),s=new Array(i);for(n=0;na&&(i=e.slice(a,i),s[o]?s[o]+=i:s[++o]=i),(n=n[0])===(r=r[0])?s[o]?s[o]+=r:s[++o]=r:(s[++o]=null,c.push({i:o,x:xn(n,r)})),a=En.lastIndex;return a=0&&e._call.call(null,t),e=e._next;--Bn}function Vn(){In=(Pn=Rn.now())+jn,Bn=Ln=0;try{Hn()}finally{Bn=0,function(){var t,e,n=Tn,r=1/0;for(;n;)n._call?(r>n._time&&(r=n._time),t=n,n=n._next):(e=n._next,n._next=null,n=t?t._next=e:Tn=e);Cn=t,qn(r)}(),In=0}}function Gn(){var t=Rn.now(),e=t-Pn;e>1e3&&(jn-=e,Pn=t)}function qn(t){Bn||(Ln&&(Ln=clearTimeout(Ln)),t-In>24?(t<1/0&&(Ln=setTimeout(Vn,t-Rn.now()-jn)),Fn&&(Fn=clearInterval(Fn))):(Fn||(Pn=Rn.now(),Fn=setInterval(Gn,1e3)),Bn=1,Yn(Vn)))}$n.prototype=Wn.prototype={constructor:$n,restart:function(t,e,n){if("function"!=typeof t)throw new TypeError("callback is not a function");n=(null==n?zn():+n)+(null==e?0:+e),this._next||Cn===this||(Cn?Cn._next=this:Tn=this,Cn=this),this._call=t,this._time=n,qn()},stop:function(){this._call&&(this._call=null,this._time=1/0,qn())}};var Xn=function(t,e,n){var r=new $n;return e=null==e?0:+e,r.restart((function(n){r.stop(),t(n+e)}),e,n),r},Zn=lt("start","end","cancel","interrupt"),Jn=[],Qn=function(t,e,n,r,i,a){var o=t.__transition;if(o){if(n in o)return}else t.__transition={};!function(t,e,n){var r,i=t.__transition;function a(c){var u,l,h,f;if(1!==n.state)return s();for(u in i)if((f=i[u]).name===n.name){if(3===f.state)return Xn(a);4===f.state?(f.state=6,f.timer.stop(),f.on.call("interrupt",t,t.__data__,f.index,f.group),delete i[u]):+u0)throw new Error("too late; already scheduled");return n}function tr(t,e){var n=er(t,e);if(n.state>3)throw new Error("too late; already running");return n}function er(t,e){var n=t.__transition;if(!n||!(n=n[e]))throw new Error("transition not found");return n}var nr,rr,ir,ar,or=function(t,e){var n,r,i,a=t.__transition,o=!0;if(a){for(i in e=null==e?null:e+"",a)(n=a[i]).name===e?(r=n.state>2&&n.state<5,n.state=6,n.timer.stop(),n.on.call(r?"interrupt":"cancel",t,t.__data__,n.index,n.group),delete a[i]):o=!1;o&&delete t.__transition}},sr=180/Math.PI,cr={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1},ur=function(t,e,n,r,i,a){var o,s,c;return(o=Math.sqrt(t*t+e*e))&&(t/=o,e/=o),(c=t*n+e*r)&&(n-=t*c,r-=e*c),(s=Math.sqrt(n*n+r*r))&&(n/=s,r/=s,c/=s),t*r180?e+=360:e-t>180&&(t+=360),a.push({i:n.push(i(n)+"rotate(",null,r)-2,x:xn(t,e)})):e&&n.push(i(n)+"rotate("+e+r)}(a.rotate,o.rotate,s,c),function(t,e,n,a){t!==e?a.push({i:n.push(i(n)+"skewX(",null,r)-2,x:xn(t,e)}):e&&n.push(i(n)+"skewX("+e+r)}(a.skewX,o.skewX,s,c),function(t,e,n,r,a,o){if(t!==n||e!==r){var s=a.push(i(a)+"scale(",null,",",null,")");o.push({i:s-4,x:xn(t,n)},{i:s-2,x:xn(e,r)})}else 1===n&&1===r||a.push(i(a)+"scale("+n+","+r+")")}(a.scaleX,a.scaleY,o.scaleX,o.scaleY,s,c),a=o=null,function(t){for(var e,n=-1,r=c.length;++n=0&&(t=t.slice(0,e)),!t||"start"===t}))}(e)?Kn:tr;return function(){var o=a(this,t),s=o.on;s!==r&&(i=(r=s).copy()).on(e,n),o.on=i}}var Br=xe.prototype.constructor;function Lr(t){return function(){this.style.removeProperty(t)}}function Fr(t,e,n){return function(r){this.style.setProperty(t,e.call(this,r),n)}}function Pr(t,e,n){var r,i;function a(){var a=e.apply(this,arguments);return a!==i&&(r=(i=a)&&Fr(t,a,n)),r}return a._value=e,a}function Ir(t){return function(e){this.textContent=t.call(this,e)}}function jr(t){var e,n;function r(){var r=t.apply(this,arguments);return r!==n&&(e=(n=r)&&Ir(r)),e}return r._value=t,r}var Rr=0;function Yr(t,e,n,r){this._groups=t,this._parents=e,this._name=n,this._id=r}function zr(t){return xe().transition(t)}function Ur(){return++Rr}var $r=xe.prototype;function Wr(t){return t*t*t}function Hr(t){return--t*t*t+1}function Vr(t){return((t*=2)<=1?t*t*t:(t-=2)*t*t+2)/2}Yr.prototype=zr.prototype={constructor:Yr,select:function(t){var e=this._name,n=this._id;"function"!=typeof t&&(t=ft(t));for(var r=this._groups,i=r.length,a=new Array(i),o=0;o1&&n.name===e)return new Yr([[t]],Xr,e,+r);return null},Jr=function(t){return function(){return t}},Qr=function(t,e,n){this.target=t,this.type=e,this.selection=n};function Kr(){ce.stopImmediatePropagation()}var ti=function(){ce.preventDefault(),ce.stopImmediatePropagation()},ei={name:"drag"},ni={name:"space"},ri={name:"handle"},ii={name:"center"};function ai(t){return[+t[0],+t[1]]}function oi(t){return[ai(t[0]),ai(t[1])]}function si(t){return function(e){return Dn(e,ce.touches,t)}}var ci={name:"x",handles:["w","e"].map(gi),input:function(t,e){return null==t?null:[[+t[0],e[0][1]],[+t[1],e[1][1]]]},output:function(t){return t&&[t[0][0],t[1][0]]}},ui={name:"y",handles:["n","s"].map(gi),input:function(t,e){return null==t?null:[[e[0][0],+t[0]],[e[1][0],+t[1]]]},output:function(t){return t&&[t[0][1],t[1][1]]}},li={name:"xy",handles:["n","w","e","s","nw","ne","sw","se"].map(gi),input:function(t){return null==t?null:oi(t)},output:function(t){return t}},hi={overlay:"crosshair",selection:"move",n:"ns-resize",e:"ew-resize",s:"ns-resize",w:"ew-resize",nw:"nwse-resize",ne:"nesw-resize",se:"nwse-resize",sw:"nesw-resize"},fi={e:"w",w:"e",nw:"ne",ne:"nw",se:"sw",sw:"se"},di={n:"s",s:"n",nw:"sw",ne:"se",se:"ne",sw:"nw"},pi={overlay:1,selection:1,n:null,e:1,s:null,w:-1,nw:-1,ne:1,se:1,sw:-1},yi={overlay:1,selection:1,n:-1,e:null,s:1,w:null,nw:-1,ne:-1,se:1,sw:1};function gi(t){return{type:t}}function vi(){return!ce.ctrlKey&&!ce.button}function mi(){var t=this.ownerSVGElement||this;return t.hasAttribute("viewBox")?[[(t=t.viewBox.baseVal).x,t.y],[t.x+t.width,t.y+t.height]]:[[0,0],[t.width.baseVal.value,t.height.baseVal.value]]}function bi(){return navigator.maxTouchPoints||"ontouchstart"in this}function _i(t){for(;!t.__brush;)if(!(t=t.parentNode))return;return t.__brush}function xi(t){return t[0][0]===t[1][0]||t[0][1]===t[1][1]}function ki(t){var e=t.__brush;return e?e.dim.output(e.selection):null}function wi(){return Ci(ci)}function Ei(){return Ci(ui)}var Ti=function(){return Ci(li)};function Ci(t){var e,n=mi,r=vi,i=bi,a=!0,o=lt("start","brush","end"),s=6;function c(e){var n=e.property("__brush",y).selectAll(".overlay").data([gi("overlay")]);n.enter().append("rect").attr("class","overlay").attr("pointer-events","all").attr("cursor",hi.overlay).merge(n).each((function(){var t=_i(this).extent;ke(this).attr("x",t[0][0]).attr("y",t[0][1]).attr("width",t[1][0]-t[0][0]).attr("height",t[1][1]-t[0][1])})),e.selectAll(".selection").data([gi("selection")]).enter().append("rect").attr("class","selection").attr("cursor",hi.selection).attr("fill","#777").attr("fill-opacity",.3).attr("stroke","#fff").attr("shape-rendering","crispEdges");var r=e.selectAll(".handle").data(t.handles,(function(t){return t.type}));r.exit().remove(),r.enter().append("rect").attr("class",(function(t){return"handle handle--"+t.type})).attr("cursor",(function(t){return hi[t.type]})),e.each(u).attr("fill","none").attr("pointer-events","all").on("mousedown.brush",f).filter(i).on("touchstart.brush",f).on("touchmove.brush",d).on("touchend.brush touchcancel.brush",p).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function u(){var t=ke(this),e=_i(this).selection;e?(t.selectAll(".selection").style("display",null).attr("x",e[0][0]).attr("y",e[0][1]).attr("width",e[1][0]-e[0][0]).attr("height",e[1][1]-e[0][1]),t.selectAll(".handle").style("display",null).attr("x",(function(t){return"e"===t.type[t.type.length-1]?e[1][0]-s/2:e[0][0]-s/2})).attr("y",(function(t){return"s"===t.type[0]?e[1][1]-s/2:e[0][1]-s/2})).attr("width",(function(t){return"n"===t.type||"s"===t.type?e[1][0]-e[0][0]+s:s})).attr("height",(function(t){return"e"===t.type||"w"===t.type?e[1][1]-e[0][1]+s:s}))):t.selectAll(".selection,.handle").style("display","none").attr("x",null).attr("y",null).attr("width",null).attr("height",null)}function l(t,e,n){return!n&&t.__brush.emitter||new h(t,e)}function h(t,e){this.that=t,this.args=e,this.state=t.__brush,this.active=0}function f(){if((!e||ce.touches)&&r.apply(this,arguments)){var n,i,o,s,c,h,f,d,p,y,g,v=this,m=ce.target.__data__.type,b="selection"===(a&&ce.metaKey?m="overlay":m)?ei:a&&ce.altKey?ii:ri,_=t===ui?null:pi[m],x=t===ci?null:yi[m],k=_i(v),w=k.extent,E=k.selection,T=w[0][0],C=w[0][1],A=w[1][0],S=w[1][1],M=0,O=0,D=_&&x&&a&&ce.shiftKey,N=ce.touches?si(ce.changedTouches[0].identifier):Nn,B=N(v),L=B,F=l(v,arguments,!0).beforestart();"overlay"===m?(E&&(p=!0),k.selection=E=[[n=t===ui?T:B[0],o=t===ci?C:B[1]],[c=t===ui?A:n,f=t===ci?S:o]]):(n=E[0][0],o=E[0][1],c=E[1][0],f=E[1][1]),i=n,s=o,h=c,d=f;var P=ke(v).attr("pointer-events","none"),I=P.selectAll(".overlay").attr("cursor",hi[m]);if(ce.touches)F.moved=R,F.ended=z;else{var j=ke(ce.view).on("mousemove.brush",R,!0).on("mouseup.brush",z,!0);a&&j.on("keydown.brush",U,!0).on("keyup.brush",$,!0),Te(ce.view)}Kr(),or(v),u.call(v),F.start()}function R(){var t=N(v);!D||y||g||(Math.abs(t[0]-L[0])>Math.abs(t[1]-L[1])?g=!0:y=!0),L=t,p=!0,ti(),Y()}function Y(){var t;switch(M=L[0]-B[0],O=L[1]-B[1],b){case ni:case ei:_&&(M=Math.max(T-n,Math.min(A-c,M)),i=n+M,h=c+M),x&&(O=Math.max(C-o,Math.min(S-f,O)),s=o+O,d=f+O);break;case ri:_<0?(M=Math.max(T-n,Math.min(A-n,M)),i=n+M,h=c):_>0&&(M=Math.max(T-c,Math.min(A-c,M)),i=n,h=c+M),x<0?(O=Math.max(C-o,Math.min(S-o,O)),s=o+O,d=f):x>0&&(O=Math.max(C-f,Math.min(S-f,O)),s=o,d=f+O);break;case ii:_&&(i=Math.max(T,Math.min(A,n-M*_)),h=Math.max(T,Math.min(A,c+M*_))),x&&(s=Math.max(C,Math.min(S,o-O*x)),d=Math.max(C,Math.min(S,f+O*x)))}h0&&(n=i-M),x<0?f=d-O:x>0&&(o=s-O),b=ni,I.attr("cursor",hi.selection),Y());break;default:return}ti()}function $(){switch(ce.keyCode){case 16:D&&(y=g=D=!1,Y());break;case 18:b===ii&&(_<0?c=h:_>0&&(n=i),x<0?f=d:x>0&&(o=s),b=ri,Y());break;case 32:b===ni&&(ce.altKey?(_&&(c=h-M*_,n=i+M*_),x&&(f=d-O*x,o=s+O*x),b=ii):(_<0?c=h:_>0&&(n=i),x<0?f=d:x>0&&(o=s),b=ri),I.attr("cursor",hi[m]),Y());break;default:return}ti()}}function d(){l(this,arguments).moved()}function p(){l(this,arguments).ended()}function y(){var e=this.__brush||{selection:null};return e.extent=oi(n.apply(this,arguments)),e.dim=t,e}return c.move=function(e,n){e.selection?e.on("start.brush",(function(){l(this,arguments).beforestart().start()})).on("interrupt.brush end.brush",(function(){l(this,arguments).end()})).tween("brush",(function(){var e=this,r=e.__brush,i=l(e,arguments),a=r.selection,o=t.input("function"==typeof n?n.apply(this,arguments):n,r.extent),s=Sn(a,o);function c(t){r.selection=1===t&&null===o?null:s(t),u.call(e),i.brush()}return null!==a&&null!==o?c:c(1)})):e.each((function(){var e=this,r=arguments,i=e.__brush,a=t.input("function"==typeof n?n.apply(e,r):n,i.extent),o=l(e,r).beforestart();or(e),i.selection=null===a?null:a,u.call(e),o.start().brush().end()}))},c.clear=function(t){c.move(t,null)},h.prototype={beforestart:function(){return 1==++this.active&&(this.state.emitter=this,this.starting=!0),this},start:function(){return this.starting?(this.starting=!1,this.emit("start")):this.emit("brush"),this},brush:function(){return this.emit("brush"),this},end:function(){return 0==--this.active&&(delete this.state.emitter,this.emit("end")),this},emit:function(e){pe(new Qr(c,e,t.output(this.state.selection)),o.apply,o,[e,this.that,this.args])}},c.extent=function(t){return arguments.length?(n="function"==typeof t?t:Jr(oi(t)),c):n},c.filter=function(t){return arguments.length?(r="function"==typeof t?t:Jr(!!t),c):r},c.touchable=function(t){return arguments.length?(i="function"==typeof t?t:Jr(!!t),c):i},c.handleSize=function(t){return arguments.length?(s=+t,c):s},c.keyModifiers=function(t){return arguments.length?(a=!!t,c):a},c.on=function(){var t=o.on.apply(o,arguments);return t===o?c:t},c}var Ai=Math.cos,Si=Math.sin,Mi=Math.PI,Oi=Mi/2,Di=2*Mi,Ni=Math.max;function Bi(t){return function(e,n){return t(e.source.value+e.target.value,n.source.value+n.target.value)}}var Li=function(){var t=0,e=null,n=null,r=null;function i(i){var a,o,s,c,u,l,h=i.length,f=[],d=k(h),p=[],y=[],g=y.groups=new Array(h),v=new Array(h*h);for(a=0,u=-1;++u1e-6)if(Math.abs(l*s-c*u)>1e-6&&i){var f=n-a,d=r-o,p=s*s+c*c,y=f*f+d*d,g=Math.sqrt(p),v=Math.sqrt(h),m=i*Math.tan((Ii-Math.acos((p+h-y)/(2*g*v)))/2),b=m/v,_=m/g;Math.abs(b-1)>1e-6&&(this._+="L"+(t+b*u)+","+(e+b*l)),this._+="A"+i+","+i+",0,0,"+ +(l*f>u*d)+","+(this._x1=t+_*s)+","+(this._y1=e+_*c)}else this._+="L"+(this._x1=t)+","+(this._y1=e);else;},arc:function(t,e,n,r,i,a){t=+t,e=+e,a=!!a;var o=(n=+n)*Math.cos(r),s=n*Math.sin(r),c=t+o,u=e+s,l=1^a,h=a?r-i:i-r;if(n<0)throw new Error("negative radius: "+n);null===this._x1?this._+="M"+c+","+u:(Math.abs(this._x1-c)>1e-6||Math.abs(this._y1-u)>1e-6)&&(this._+="L"+c+","+u),n&&(h<0&&(h=h%ji+ji),h>Ri?this._+="A"+n+","+n+",0,1,"+l+","+(t-o)+","+(e-s)+"A"+n+","+n+",0,1,"+l+","+(this._x1=c)+","+(this._y1=u):h>1e-6&&(this._+="A"+n+","+n+",0,"+ +(h>=Ii)+","+l+","+(this._x1=t+n*Math.cos(i))+","+(this._y1=e+n*Math.sin(i))))},rect:function(t,e,n,r){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+e)+"h"+ +n+"v"+ +r+"h"+-n+"Z"},toString:function(){return this._}};var Ui=zi;function $i(t){return t.source}function Wi(t){return t.target}function Hi(t){return t.radius}function Vi(t){return t.startAngle}function Gi(t){return t.endAngle}var qi=function(){var t=$i,e=Wi,n=Hi,r=Vi,i=Gi,a=null;function o(){var o,s=Fi.call(arguments),c=t.apply(this,s),u=e.apply(this,s),l=+n.apply(this,(s[0]=c,s)),h=r.apply(this,s)-Oi,f=i.apply(this,s)-Oi,d=l*Ai(h),p=l*Si(h),y=+n.apply(this,(s[0]=u,s)),g=r.apply(this,s)-Oi,v=i.apply(this,s)-Oi;if(a||(a=o=Ui()),a.moveTo(d,p),a.arc(0,0,l,h,f),h===g&&f===v||(a.quadraticCurveTo(0,0,y*Ai(g),y*Si(g)),a.arc(0,0,y,g,v)),a.quadraticCurveTo(0,0,d,p),a.closePath(),o)return a=null,o+""||null}return o.radius=function(t){return arguments.length?(n="function"==typeof t?t:Pi(+t),o):n},o.startAngle=function(t){return arguments.length?(r="function"==typeof t?t:Pi(+t),o):r},o.endAngle=function(t){return arguments.length?(i="function"==typeof t?t:Pi(+t),o):i},o.source=function(e){return arguments.length?(t=e,o):t},o.target=function(t){return arguments.length?(e=t,o):e},o.context=function(t){return arguments.length?(a=null==t?null:t,o):a},o};function Xi(){}function Zi(t,e){var n=new Xi;if(t instanceof Xi)t.each((function(t,e){n.set(e,t)}));else if(Array.isArray(t)){var r,i=-1,a=t.length;if(null==e)for(;++i=r.length)return null!=t&&n.sort(t),null!=e?e(n):n;for(var c,u,l,h=-1,f=n.length,d=r[i++],p=Ji(),y=o();++hr.length)return n;var o,s=i[a-1];return null!=e&&a>=r.length?o=n.entries():(o=[],n.each((function(e,n){o.push({key:n,values:t(e,a)})}))),null!=s?o.sort((function(t,e){return s(t.key,e.key)})):o}(a(t,0,ea,na),0)},key:function(t){return r.push(t),n},sortKeys:function(t){return i[r.length-1]=t,n},sortValues:function(e){return t=e,n},rollup:function(t){return e=t,n}}};function Ki(){return{}}function ta(t,e,n){t[e]=n}function ea(){return Ji()}function na(t,e,n){t.set(e,n)}function ra(){}var ia=Ji.prototype;function aa(t,e){var n=new ra;if(t instanceof ra)t.each((function(t){n.add(t)}));else if(t){var r=-1,i=t.length;if(null==e)for(;++r6/29*(6/29)*(6/29)?Math.pow(t,1/3):t/(6/29*3*(6/29))+4/29}function va(t){return t>6/29?t*t*t:6/29*3*(6/29)*(t-4/29)}function ma(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function ba(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function _a(t){if(t instanceof wa)return new wa(t.h,t.c,t.l,t.opacity);if(t instanceof ya||(t=fa(t)),0===t.a&&0===t.b)return new wa(NaN,0r!=d>r&&n<(f-u)*(r-l)/(d-l)+u&&(i=-i)}return i}function Ia(t,e,n){var r,i,a,o;return function(t,e,n){return(e[0]-t[0])*(n[1]-t[1])==(n[0]-t[0])*(e[1]-t[1])}(t,e,n)&&(i=t[r=+(t[0]===e[0])],a=n[r],o=e[r],i<=a&&a<=o||o<=a&&a<=i)}var ja=function(){},Ra=[[],[[[1,1.5],[.5,1]]],[[[1.5,1],[1,1.5]]],[[[1.5,1],[.5,1]]],[[[1,.5],[1.5,1]]],[[[1,1.5],[.5,1]],[[1,.5],[1.5,1]]],[[[1,.5],[1,1.5]]],[[[1,.5],[.5,1]]],[[[.5,1],[1,.5]]],[[[1,1.5],[1,.5]]],[[[.5,1],[1,.5]],[[1.5,1],[1,1.5]]],[[[1.5,1],[1,.5]]],[[[.5,1],[1.5,1]]],[[[1,1.5],[1.5,1]]],[[[.5,1],[1,1.5]]],[]],Ya=function(){var t=1,e=1,n=M,r=s;function i(t){var e=n(t);if(Array.isArray(e))e=e.slice().sort(Ba);else{var r=g(t),i=r[0],o=r[1];e=S(i,o,e),e=k(Math.floor(i/e)*e,Math.floor(o/e)*e,e)}return e.map((function(e){return a(t,e)}))}function a(n,i){var a=[],s=[];return function(n,r,i){var a,s,c,u,l,h,f=new Array,d=new Array;a=s=-1,u=n[0]>=r,Ra[u<<1].forEach(p);for(;++a=r,Ra[c|u<<1].forEach(p);Ra[u<<0].forEach(p);for(;++s=r,l=n[s*t]>=r,Ra[u<<1|l<<2].forEach(p);++a=r,h=l,l=n[s*t+a+1]>=r,Ra[c|u<<1|l<<2|h<<3].forEach(p);Ra[u|l<<3].forEach(p)}a=-1,l=n[s*t]>=r,Ra[l<<2].forEach(p);for(;++a=r,Ra[l<<2|h<<3].forEach(p);function p(t){var e,n,r=[t[0][0]+a,t[0][1]+s],c=[t[1][0]+a,t[1][1]+s],u=o(r),l=o(c);(e=d[u])?(n=f[l])?(delete d[e.end],delete f[n.start],e===n?(e.ring.push(c),i(e.ring)):f[e.start]=d[n.end]={start:e.start,end:n.end,ring:e.ring.concat(n.ring)}):(delete d[e.end],e.ring.push(c),d[e.end=l]=e):(e=f[l])?(n=d[u])?(delete f[e.start],delete d[n.end],e===n?(e.ring.push(c),i(e.ring)):f[n.start]=d[e.end]={start:n.start,end:e.end,ring:n.ring.concat(e.ring)}):(delete f[e.start],e.ring.unshift(r),f[e.start=u]=e):f[u]=d[l]={start:u,end:l,ring:[r,c]}}Ra[l<<3].forEach(p)}(n,i,(function(t){r(t,n,i),function(t){for(var e=0,n=t.length,r=t[n-1][1]*t[0][0]-t[n-1][0]*t[0][1];++e0?a.push([t]):s.push(t)})),s.forEach((function(t){for(var e,n=0,r=a.length;n0&&o0&&s0&&a>0))throw new Error("invalid size");return t=r,e=a,i},i.thresholds=function(t){return arguments.length?(n="function"==typeof t?t:Array.isArray(t)?La(Na.call(t)):La(t),i):n},i.smooth=function(t){return arguments.length?(r=t?s:ja,i):r===s},i};function za(t,e,n){for(var r=t.width,i=t.height,a=1+(n<<1),o=0;o=n&&(s>=a&&(c-=t.data[s-a+o*r]),e.data[s-n+o*r]=c/Math.min(s+1,r-1+a-s,a))}function Ua(t,e,n){for(var r=t.width,i=t.height,a=1+(n<<1),o=0;o=n&&(s>=a&&(c-=t.data[o+(s-a)*r]),e.data[o+(s-n)*r]=c/Math.min(s+1,i-1+a-s,a))}function $a(t){return t[0]}function Wa(t){return t[1]}function Ha(){return 1}var Va=function(){var t=$a,e=Wa,n=Ha,r=960,i=500,a=20,o=2,s=3*a,c=r+2*s>>o,u=i+2*s>>o,l=La(20);function h(r){var i=new Float32Array(c*u),h=new Float32Array(c*u);r.forEach((function(r,a,l){var h=+t(r,a,l)+s>>o,f=+e(r,a,l)+s>>o,d=+n(r,a,l);h>=0&&h=0&&f>o),Ua({width:c,height:u,data:h},{width:c,height:u,data:i},a>>o),za({width:c,height:u,data:i},{width:c,height:u,data:h},a>>o),Ua({width:c,height:u,data:h},{width:c,height:u,data:i},a>>o),za({width:c,height:u,data:i},{width:c,height:u,data:h},a>>o),Ua({width:c,height:u,data:h},{width:c,height:u,data:i},a>>o);var d=l(i);if(!Array.isArray(d)){var p=L(i);d=S(0,p,d),(d=k(0,Math.floor(p/d)*d,d)).shift()}return Ya().thresholds(d).size([c,u])(i).map(f)}function f(t){return t.value*=Math.pow(2,-2*o),t.coordinates.forEach(d),t}function d(t){t.forEach(p)}function p(t){t.forEach(y)}function y(t){t[0]=t[0]*Math.pow(2,o)-s,t[1]=t[1]*Math.pow(2,o)-s}function g(){return c=r+2*(s=3*a)>>o,u=i+2*s>>o,h}return h.x=function(e){return arguments.length?(t="function"==typeof e?e:La(+e),h):t},h.y=function(t){return arguments.length?(e="function"==typeof t?t:La(+t),h):e},h.weight=function(t){return arguments.length?(n="function"==typeof t?t:La(+t),h):n},h.size=function(t){if(!arguments.length)return[r,i];var e=Math.ceil(t[0]),n=Math.ceil(t[1]);if(!(e>=0||e>=0))throw new Error("invalid size");return r=e,i=n,g()},h.cellSize=function(t){if(!arguments.length)return 1<=1))throw new Error("invalid cell size");return o=Math.floor(Math.log(t)/Math.LN2),g()},h.thresholds=function(t){return arguments.length?(l="function"==typeof t?t:Array.isArray(t)?La(Na.call(t)):La(t),h):l},h.bandwidth=function(t){if(!arguments.length)return Math.sqrt(a*(a+1));if(!((t=+t)>=0))throw new Error("invalid bandwidth");return a=Math.round((Math.sqrt(4*t*t+1)-1)/2),g()},h},Ga=function(t){return function(){return t}};function qa(t,e,n,r,i,a,o,s,c,u){this.target=t,this.type=e,this.subject=n,this.identifier=r,this.active=i,this.x=a,this.y=o,this.dx=s,this.dy=c,this._=u}function Xa(){return!ce.ctrlKey&&!ce.button}function Za(){return this.parentNode}function Ja(t){return null==t?{x:ce.x,y:ce.y}:t}function Qa(){return navigator.maxTouchPoints||"ontouchstart"in this}qa.prototype.on=function(){var t=this._.on.apply(this._,arguments);return t===this._?this:t};var Ka=function(){var t,e,n,r,i=Xa,a=Za,o=Ja,s=Qa,c={},u=lt("start","drag","end"),l=0,h=0;function f(t){t.on("mousedown.drag",d).filter(s).on("touchstart.drag",g).on("touchmove.drag",v).on("touchend.drag touchcancel.drag",m).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function d(){if(!r&&i.apply(this,arguments)){var o=b("mouse",a.apply(this,arguments),Nn,this,arguments);o&&(ke(ce.view).on("mousemove.drag",p,!0).on("mouseup.drag",y,!0),Te(ce.view),we(),n=!1,t=ce.clientX,e=ce.clientY,o("start"))}}function p(){if(Ee(),!n){var r=ce.clientX-t,i=ce.clientY-e;n=r*r+i*i>h}c.mouse("drag")}function y(){ke(ce.view).on("mousemove.drag mouseup.drag",null),Ce(ce.view,n),Ee(),c.mouse("end")}function g(){if(i.apply(this,arguments)){var t,e,n=ce.changedTouches,r=a.apply(this,arguments),o=n.length;for(t=0;t9999?"+"+io(e,6):io(e,4))+"-"+io(t.getUTCMonth()+1,2)+"-"+io(t.getUTCDate(),2)+(a?"T"+io(n,2)+":"+io(r,2)+":"+io(i,2)+"."+io(a,3)+"Z":i?"T"+io(n,2)+":"+io(r,2)+":"+io(i,2)+"Z":r||n?"T"+io(n,2)+":"+io(r,2)+"Z":"")}var oo=function(t){var e=new RegExp('["'+t+"\n\r]"),n=t.charCodeAt(0);function r(t,e){var r,i=[],a=t.length,o=0,s=0,c=a<=0,u=!1;function l(){if(c)return eo;if(u)return u=!1,to;var e,r,i=o;if(34===t.charCodeAt(i)){for(;o++=a?c=!0:10===(r=t.charCodeAt(o++))?u=!0:13===r&&(u=!0,10===t.charCodeAt(o)&&++o),t.slice(i+1,e-1).replace(/""/g,'"')}for(;o=(a=(y+v)/2))?y=a:v=a,(l=n>=(o=(g+m)/2))?g=o:m=o,i=d,!(d=d[h=l<<1|u]))return i[h]=p,t;if(s=+t._x.call(null,d.data),c=+t._y.call(null,d.data),e===s&&n===c)return p.next=d,i?i[h]=p:t._root=p,t;do{i=i?i[h]=new Array(4):t._root=new Array(4),(u=e>=(a=(y+v)/2))?y=a:v=a,(l=n>=(o=(g+m)/2))?g=o:m=o}while((h=l<<1|u)==(f=(c>=o)<<1|s>=a));return i[f]=d,i[h]=p,t}var xs=function(t,e,n,r,i){this.node=t,this.x0=e,this.y0=n,this.x1=r,this.y1=i};function ks(t){return t[0]}function ws(t){return t[1]}function Es(t,e,n){var r=new Ts(null==e?ks:e,null==n?ws:n,NaN,NaN,NaN,NaN);return null==t?r:r.addAll(t)}function Ts(t,e,n,r,i,a){this._x=t,this._y=e,this._x0=n,this._y0=r,this._x1=i,this._y1=a,this._root=void 0}function Cs(t){for(var e={data:t.data},n=e;t=t.next;)n=n.next={data:t.data};return e}var As=Es.prototype=Ts.prototype;function Ss(t){return t.x+t.vx}function Ms(t){return t.y+t.vy}As.copy=function(){var t,e,n=new Ts(this._x,this._y,this._x0,this._y0,this._x1,this._y1),r=this._root;if(!r)return n;if(!r.length)return n._root=Cs(r),n;for(t=[{source:r,target:n._root=new Array(4)}];r=t.pop();)for(var i=0;i<4;++i)(e=r.source[i])&&(e.length?t.push({source:e,target:r.target[i]=new Array(4)}):r.target[i]=Cs(e));return n},As.add=function(t){var e=+this._x.call(null,t),n=+this._y.call(null,t);return _s(this.cover(e,n),e,n,t)},As.addAll=function(t){var e,n,r,i,a=t.length,o=new Array(a),s=new Array(a),c=1/0,u=1/0,l=-1/0,h=-1/0;for(n=0;nl&&(l=r),ih&&(h=i));if(c>l||u>h)return this;for(this.cover(c,u).cover(l,h),n=0;nt||t>=i||r>e||e>=a;)switch(s=(ef||(a=c.y0)>d||(o=c.x1)=v)<<1|t>=g)&&(c=p[p.length-1],p[p.length-1]=p[p.length-1-u],p[p.length-1-u]=c)}else{var m=t-+this._x.call(null,y.data),b=e-+this._y.call(null,y.data),_=m*m+b*b;if(_=(s=(p+g)/2))?p=s:g=s,(l=o>=(c=(y+v)/2))?y=c:v=c,e=d,!(d=d[h=l<<1|u]))return this;if(!d.length)break;(e[h+1&3]||e[h+2&3]||e[h+3&3])&&(n=e,f=h)}for(;d.data!==t;)if(r=d,!(d=d.next))return this;return(i=d.next)&&delete d.next,r?(i?r.next=i:delete r.next,this):e?(i?e[h]=i:delete e[h],(d=e[0]||e[1]||e[2]||e[3])&&d===(e[3]||e[2]||e[1]||e[0])&&!d.length&&(n?n[f]=d:this._root=d),this):(this._root=i,this)},As.removeAll=function(t){for(var e=0,n=t.length;ec+d||iu+d||as.index){var p=c-o.x-o.vx,y=u-o.y-o.vy,g=p*p+y*y;gt.r&&(t.r=t[e].r)}function s(){if(e){var r,i,a=e.length;for(n=new Array(a),r=0;r1?(null==n?s.remove(t):s.set(t,d(n)),e):s.get(t)},find:function(e,n,r){var i,a,o,s,c,u=0,l=t.length;for(null==r?r=1/0:r*=r,u=0;u1?(u.on(t,n),e):u.on(t)}}},js=function(){var t,e,n,r,i=ms(-30),a=1,o=1/0,s=.81;function c(r){var i,a=t.length,o=Es(t,Ls,Fs).visitAfter(l);for(n=r,i=0;i=o)){(t.data!==e||t.next)&&(0===l&&(d+=(l=bs())*l),0===h&&(d+=(h=bs())*h),d1?r[0]+r.slice(2):r,+t.slice(n+1)]},$s=function(t){return(t=Us(Math.abs(t)))?t[1]:NaN},Ws=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function Hs(t){if(!(e=Ws.exec(t)))throw new Error("invalid format: "+t);var e;return new Vs({fill:e[1],align:e[2],sign:e[3],symbol:e[4],zero:e[5],width:e[6],comma:e[7],precision:e[8]&&e[8].slice(1),trim:e[9],type:e[10]})}function Vs(t){this.fill=void 0===t.fill?" ":t.fill+"",this.align=void 0===t.align?">":t.align+"",this.sign=void 0===t.sign?"-":t.sign+"",this.symbol=void 0===t.symbol?"":t.symbol+"",this.zero=!!t.zero,this.width=void 0===t.width?void 0:+t.width,this.comma=!!t.comma,this.precision=void 0===t.precision?void 0:+t.precision,this.trim=!!t.trim,this.type=void 0===t.type?"":t.type+""}Hs.prototype=Vs.prototype,Vs.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(void 0===this.width?"":Math.max(1,0|this.width))+(this.comma?",":"")+(void 0===this.precision?"":"."+Math.max(0,0|this.precision))+(this.trim?"~":"")+this.type};var Gs,qs,Xs,Zs,Js=function(t,e){var n=Us(t,e);if(!n)return t+"";var r=n[0],i=n[1];return i<0?"0."+new Array(-i).join("0")+r:r.length>i+1?r.slice(0,i+1)+"."+r.slice(i+1):r+new Array(i-r.length+2).join("0")},Qs={"%":function(t,e){return(100*t).toFixed(e)},b:function(t){return Math.round(t).toString(2)},c:function(t){return t+""},d:function(t){return Math.round(t).toString(10)},e:function(t,e){return t.toExponential(e)},f:function(t,e){return t.toFixed(e)},g:function(t,e){return t.toPrecision(e)},o:function(t){return Math.round(t).toString(8)},p:function(t,e){return Js(100*t,e)},r:Js,s:function(t,e){var n=Us(t,e);if(!n)return t+"";var r=n[0],i=n[1],a=i-(Gs=3*Math.max(-8,Math.min(8,Math.floor(i/3))))+1,o=r.length;return a===o?r:a>o?r+new Array(a-o+1).join("0"):a>0?r.slice(0,a)+"."+r.slice(a):"0."+new Array(1-a).join("0")+Us(t,Math.max(0,e+a-1))[0]},X:function(t){return Math.round(t).toString(16).toUpperCase()},x:function(t){return Math.round(t).toString(16)}},Ks=function(t){return t},tc=Array.prototype.map,ec=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"],nc=function(t){var e,n,r=void 0===t.grouping||void 0===t.thousands?Ks:(e=tc.call(t.grouping,Number),n=t.thousands+"",function(t,r){for(var i=t.length,a=[],o=0,s=e[0],c=0;i>0&&s>0&&(c+s+1>r&&(s=Math.max(1,r-c)),a.push(t.substring(i-=s,i+s)),!((c+=s+1)>r));)s=e[o=(o+1)%e.length];return a.reverse().join(n)}),i=void 0===t.currency?"":t.currency[0]+"",a=void 0===t.currency?"":t.currency[1]+"",o=void 0===t.decimal?".":t.decimal+"",s=void 0===t.numerals?Ks:function(t){return function(e){return e.replace(/[0-9]/g,(function(e){return t[+e]}))}}(tc.call(t.numerals,String)),c=void 0===t.percent?"%":t.percent+"",u=void 0===t.minus?"-":t.minus+"",l=void 0===t.nan?"NaN":t.nan+"";function h(t){var e=(t=Hs(t)).fill,n=t.align,h=t.sign,f=t.symbol,d=t.zero,p=t.width,y=t.comma,g=t.precision,v=t.trim,m=t.type;"n"===m?(y=!0,m="g"):Qs[m]||(void 0===g&&(g=12),v=!0,m="g"),(d||"0"===e&&"="===n)&&(d=!0,e="0",n="=");var b="$"===f?i:"#"===f&&/[boxX]/.test(m)?"0"+m.toLowerCase():"",_="$"===f?a:/[%p]/.test(m)?c:"",x=Qs[m],k=/[defgprs%]/.test(m);function w(t){var i,a,c,f=b,w=_;if("c"===m)w=x(t)+w,t="";else{var E=(t=+t)<0;if(t=isNaN(t)?l:x(Math.abs(t),g),v&&(t=function(t){t:for(var e,n=t.length,r=1,i=-1;r0&&(i=0)}return i>0?t.slice(0,i)+t.slice(e+1):t}(t)),E&&0==+t&&(E=!1),f=(E?"("===h?h:u:"-"===h||"("===h?"":h)+f,w=("s"===m?ec[8+Gs/3]:"")+w+(E&&"("===h?")":""),k)for(i=-1,a=t.length;++i(c=t.charCodeAt(i))||c>57){w=(46===c?o+t.slice(i+1):t.slice(i))+w,t=t.slice(0,i);break}}y&&!d&&(t=r(t,1/0));var T=f.length+t.length+w.length,C=T>1)+f+t+w+C.slice(T);break;default:t=C+f+t+w}return s(t)}return g=void 0===g?6:/[gprs]/.test(m)?Math.max(1,Math.min(21,g)):Math.max(0,Math.min(20,g)),w.toString=function(){return t+""},w}return{format:h,formatPrefix:function(t,e){var n=h(((t=Hs(t)).type="f",t)),r=3*Math.max(-8,Math.min(8,Math.floor($s(e)/3))),i=Math.pow(10,-r),a=ec[8+r/3];return function(t){return n(i*t)+a}}}};function rc(t){return qs=nc(t),Xs=qs.format,Zs=qs.formatPrefix,qs}rc({decimal:".",thousands:",",grouping:[3],currency:["$",""],minus:"-"});var ic=function(t){return Math.max(0,-$s(Math.abs(t)))},ac=function(t,e){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor($s(e)/3)))-$s(Math.abs(t)))},oc=function(t,e){return t=Math.abs(t),e=Math.abs(e)-t,Math.max(0,$s(e)-$s(t))+1},sc=function(){return new cc};function cc(){this.reset()}cc.prototype={constructor:cc,reset:function(){this.s=this.t=0},add:function(t){lc(uc,t,this.t),lc(this,uc.s,this.s),this.s?this.t+=uc.t:this.s=uc.t},valueOf:function(){return this.s}};var uc=new cc;function lc(t,e,n){var r=t.s=e+n,i=r-e,a=r-i;t.t=e-a+(n-i)}var hc=Math.PI,fc=hc/2,dc=hc/4,pc=2*hc,yc=180/hc,gc=hc/180,vc=Math.abs,mc=Math.atan,bc=Math.atan2,_c=Math.cos,xc=Math.ceil,kc=Math.exp,wc=(Math.floor,Math.log),Ec=Math.pow,Tc=Math.sin,Cc=Math.sign||function(t){return t>0?1:t<0?-1:0},Ac=Math.sqrt,Sc=Math.tan;function Mc(t){return t>1?0:t<-1?hc:Math.acos(t)}function Oc(t){return t>1?fc:t<-1?-fc:Math.asin(t)}function Dc(t){return(t=Tc(t/2))*t}function Nc(){}function Bc(t,e){t&&Fc.hasOwnProperty(t.type)&&Fc[t.type](t,e)}var Lc={Feature:function(t,e){Bc(t.geometry,e)},FeatureCollection:function(t,e){for(var n=t.features,r=-1,i=n.length;++r=0?1:-1,i=r*n,a=_c(e=(e*=gc)/2+dc),o=Tc(e),s=Uc*o,c=zc*a+s*_c(i),u=s*r*Tc(i);Wc.add(bc(u,c)),Yc=t,zc=a,Uc=o}var Jc=function(t){return Hc.reset(),$c(t,Vc),2*Hc};function Qc(t){return[bc(t[1],t[0]),Oc(t[2])]}function Kc(t){var e=t[0],n=t[1],r=_c(n);return[r*_c(e),r*Tc(e),Tc(n)]}function tu(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]}function eu(t,e){return[t[1]*e[2]-t[2]*e[1],t[2]*e[0]-t[0]*e[2],t[0]*e[1]-t[1]*e[0]]}function nu(t,e){t[0]+=e[0],t[1]+=e[1],t[2]+=e[2]}function ru(t,e){return[t[0]*e,t[1]*e,t[2]*e]}function iu(t){var e=Ac(t[0]*t[0]+t[1]*t[1]+t[2]*t[2]);t[0]/=e,t[1]/=e,t[2]/=e}var au,ou,su,cu,uu,lu,hu,fu,du,pu,yu=sc(),gu={point:vu,lineStart:bu,lineEnd:_u,polygonStart:function(){gu.point=xu,gu.lineStart=ku,gu.lineEnd=wu,yu.reset(),Vc.polygonStart()},polygonEnd:function(){Vc.polygonEnd(),gu.point=vu,gu.lineStart=bu,gu.lineEnd=_u,Wc<0?(au=-(su=180),ou=-(cu=90)):yu>1e-6?cu=90:yu<-1e-6&&(ou=-90),pu[0]=au,pu[1]=su},sphere:function(){au=-(su=180),ou=-(cu=90)}};function vu(t,e){du.push(pu=[au=t,su=t]),ecu&&(cu=e)}function mu(t,e){var n=Kc([t*gc,e*gc]);if(fu){var r=eu(fu,n),i=eu([r[1],-r[0],0],r);iu(i),i=Qc(i);var a,o=t-uu,s=o>0?1:-1,c=i[0]*yc*s,u=vc(o)>180;u^(s*uucu&&(cu=a):u^(s*uu<(c=(c+360)%360-180)&&ccu&&(cu=e)),u?tEu(au,su)&&(su=t):Eu(t,su)>Eu(au,su)&&(au=t):su>=au?(tsu&&(su=t)):t>uu?Eu(au,t)>Eu(au,su)&&(su=t):Eu(t,su)>Eu(au,su)&&(au=t)}else du.push(pu=[au=t,su=t]);ecu&&(cu=e),fu=n,uu=t}function bu(){gu.point=mu}function _u(){pu[0]=au,pu[1]=su,gu.point=vu,fu=null}function xu(t,e){if(fu){var n=t-uu;yu.add(vc(n)>180?n+(n>0?360:-360):n)}else lu=t,hu=e;Vc.point(t,e),mu(t,e)}function ku(){Vc.lineStart()}function wu(){xu(lu,hu),Vc.lineEnd(),vc(yu)>1e-6&&(au=-(su=180)),pu[0]=au,pu[1]=su,fu=null}function Eu(t,e){return(e-=t)<0?e+360:e}function Tu(t,e){return t[0]-e[0]}function Cu(t,e){return t[0]<=t[1]?t[0]<=e&&e<=t[1]:eEu(r[0],r[1])&&(r[1]=i[1]),Eu(i[0],r[1])>Eu(r[0],r[1])&&(r[0]=i[0])):a.push(r=i);for(o=-1/0,e=0,r=a[n=a.length-1];e<=n;r=i,++e)i=a[e],(s=Eu(r[1],i[0]))>o&&(o=s,au=i[0],su=r[1])}return du=pu=null,au===1/0||ou===1/0?[[NaN,NaN],[NaN,NaN]]:[[au,ou],[su,cu]]},Wu={sphere:Nc,point:Hu,lineStart:Gu,lineEnd:Zu,polygonStart:function(){Wu.lineStart=Ju,Wu.lineEnd=Qu},polygonEnd:function(){Wu.lineStart=Gu,Wu.lineEnd=Zu}};function Hu(t,e){t*=gc;var n=_c(e*=gc);Vu(n*_c(t),n*Tc(t),Tc(e))}function Vu(t,e,n){++Au,Mu+=(t-Mu)/Au,Ou+=(e-Ou)/Au,Du+=(n-Du)/Au}function Gu(){Wu.point=qu}function qu(t,e){t*=gc;var n=_c(e*=gc);Yu=n*_c(t),zu=n*Tc(t),Uu=Tc(e),Wu.point=Xu,Vu(Yu,zu,Uu)}function Xu(t,e){t*=gc;var n=_c(e*=gc),r=n*_c(t),i=n*Tc(t),a=Tc(e),o=bc(Ac((o=zu*a-Uu*i)*o+(o=Uu*r-Yu*a)*o+(o=Yu*i-zu*r)*o),Yu*r+zu*i+Uu*a);Su+=o,Nu+=o*(Yu+(Yu=r)),Bu+=o*(zu+(zu=i)),Lu+=o*(Uu+(Uu=a)),Vu(Yu,zu,Uu)}function Zu(){Wu.point=Hu}function Ju(){Wu.point=Ku}function Qu(){tl(ju,Ru),Wu.point=Hu}function Ku(t,e){ju=t,Ru=e,t*=gc,e*=gc,Wu.point=tl;var n=_c(e);Yu=n*_c(t),zu=n*Tc(t),Uu=Tc(e),Vu(Yu,zu,Uu)}function tl(t,e){t*=gc;var n=_c(e*=gc),r=n*_c(t),i=n*Tc(t),a=Tc(e),o=zu*a-Uu*i,s=Uu*r-Yu*a,c=Yu*i-zu*r,u=Ac(o*o+s*s+c*c),l=Oc(u),h=u&&-l/u;Fu+=h*o,Pu+=h*s,Iu+=h*c,Su+=l,Nu+=l*(Yu+(Yu=r)),Bu+=l*(zu+(zu=i)),Lu+=l*(Uu+(Uu=a)),Vu(Yu,zu,Uu)}var el=function(t){Au=Su=Mu=Ou=Du=Nu=Bu=Lu=Fu=Pu=Iu=0,$c(t,Wu);var e=Fu,n=Pu,r=Iu,i=e*e+n*n+r*r;return i<1e-12&&(e=Nu,n=Bu,r=Lu,Su<1e-6&&(e=Mu,n=Ou,r=Du),(i=e*e+n*n+r*r)<1e-12)?[NaN,NaN]:[bc(n,e)*yc,Oc(r/Ac(i))*yc]},nl=function(t){return function(){return t}},rl=function(t,e){function n(n,r){return n=t(n,r),e(n[0],n[1])}return t.invert&&e.invert&&(n.invert=function(n,r){return(n=e.invert(n,r))&&t.invert(n[0],n[1])}),n};function il(t,e){return[vc(t)>hc?t+Math.round(-t/pc)*pc:t,e]}function al(t,e,n){return(t%=pc)?e||n?rl(sl(t),cl(e,n)):sl(t):e||n?cl(e,n):il}function ol(t){return function(e,n){return[(e+=t)>hc?e-pc:e<-hc?e+pc:e,n]}}function sl(t){var e=ol(t);return e.invert=ol(-t),e}function cl(t,e){var n=_c(t),r=Tc(t),i=_c(e),a=Tc(e);function o(t,e){var o=_c(e),s=_c(t)*o,c=Tc(t)*o,u=Tc(e),l=u*n+s*r;return[bc(c*i-l*a,s*n-u*r),Oc(l*i+c*a)]}return o.invert=function(t,e){var o=_c(e),s=_c(t)*o,c=Tc(t)*o,u=Tc(e),l=u*i-c*a;return[bc(c*i+u*a,s*n+l*r),Oc(l*n-s*r)]},o}il.invert=il;var ul=function(t){function e(e){return(e=t(e[0]*gc,e[1]*gc))[0]*=yc,e[1]*=yc,e}return t=al(t[0]*gc,t[1]*gc,t.length>2?t[2]*gc:0),e.invert=function(e){return(e=t.invert(e[0]*gc,e[1]*gc))[0]*=yc,e[1]*=yc,e},e};function ll(t,e,n,r,i,a){if(n){var o=_c(e),s=Tc(e),c=r*n;null==i?(i=e+r*pc,a=e-c/2):(i=hl(o,i),a=hl(o,a),(r>0?ia)&&(i+=r*pc));for(var u,l=i;r>0?l>a:l1&&e.push(e.pop().concat(e.shift()))},result:function(){var n=e;return e=[],t=null,n}}},pl=function(t,e){return vc(t[0]-e[0])<1e-6&&vc(t[1]-e[1])<1e-6};function yl(t,e,n,r){this.x=t,this.z=e,this.o=n,this.e=r,this.v=!1,this.n=this.p=null}var gl=function(t,e,n,r,i){var a,o,s=[],c=[];if(t.forEach((function(t){if(!((e=t.length-1)<=0)){var e,n,r=t[0],o=t[e];if(pl(r,o)){for(i.lineStart(),a=0;a=0;--a)i.point((l=u[a])[0],l[1]);else r(f.x,f.p.x,-1,i);f=f.p}u=(f=f.o).z,d=!d}while(!f.v);i.lineEnd()}}};function vl(t){if(e=t.length){for(var e,n,r=0,i=t[0];++r=0?1:-1,T=E*w,C=T>hc,A=y*x;if(ml.add(bc(A*E*Tc(T),g*k+A*_c(T))),o+=C?w+E*pc:w,C^d>=n^b>=n){var S=eu(Kc(f),Kc(m));iu(S);var M=eu(a,S);iu(M);var O=(C^w>=0?-1:1)*Oc(M[2]);(r>O||r===O&&(S[0]||S[1]))&&(s+=C^w>=0?1:-1)}}return(o<-1e-6||o<1e-6&&ml<-1e-6)^1&s},xl=function(t,e,n,r){return function(i){var a,o,s,c=e(i),u=dl(),l=e(u),h=!1,f={point:d,lineStart:y,lineEnd:g,polygonStart:function(){f.point=v,f.lineStart=m,f.lineEnd=b,o=[],a=[]},polygonEnd:function(){f.point=d,f.lineStart=y,f.lineEnd=g,o=I(o);var t=_l(a,r);o.length?(h||(i.polygonStart(),h=!0),gl(o,wl,t,n,i)):t&&(h||(i.polygonStart(),h=!0),i.lineStart(),n(null,null,1,i),i.lineEnd()),h&&(i.polygonEnd(),h=!1),o=a=null},sphere:function(){i.polygonStart(),i.lineStart(),n(null,null,1,i),i.lineEnd(),i.polygonEnd()}};function d(e,n){t(e,n)&&i.point(e,n)}function p(t,e){c.point(t,e)}function y(){f.point=p,c.lineStart()}function g(){f.point=d,c.lineEnd()}function v(t,e){s.push([t,e]),l.point(t,e)}function m(){l.lineStart(),s=[]}function b(){v(s[0][0],s[0][1]),l.lineEnd();var t,e,n,r,c=l.clean(),f=u.result(),d=f.length;if(s.pop(),a.push(s),s=null,d)if(1&c){if((e=(n=f[0]).length-1)>0){for(h||(i.polygonStart(),h=!0),i.lineStart(),t=0;t1&&2&c&&f.push(f.pop().concat(f.shift())),o.push(f.filter(kl))}return f}};function kl(t){return t.length>1}function wl(t,e){return((t=t.x)[0]<0?t[1]-fc-1e-6:fc-t[1])-((e=e.x)[0]<0?e[1]-fc-1e-6:fc-e[1])}var El=xl((function(){return!0}),(function(t){var e,n=NaN,r=NaN,i=NaN;return{lineStart:function(){t.lineStart(),e=1},point:function(a,o){var s=a>0?hc:-hc,c=vc(a-n);vc(c-hc)<1e-6?(t.point(n,r=(r+o)/2>0?fc:-fc),t.point(i,r),t.lineEnd(),t.lineStart(),t.point(s,r),t.point(a,r),e=0):i!==s&&c>=hc&&(vc(n-i)<1e-6&&(n-=1e-6*i),vc(a-s)<1e-6&&(a-=1e-6*s),r=function(t,e,n,r){var i,a,o=Tc(t-n);return vc(o)>1e-6?mc((Tc(e)*(a=_c(r))*Tc(n)-Tc(r)*(i=_c(e))*Tc(t))/(i*a*o)):(e+r)/2}(n,r,a,o),t.point(i,r),t.lineEnd(),t.lineStart(),t.point(s,r),e=0),t.point(n=a,r=o),i=s},lineEnd:function(){t.lineEnd(),n=r=NaN},clean:function(){return 2-e}}}),(function(t,e,n,r){var i;if(null==t)i=n*fc,r.point(-hc,i),r.point(0,i),r.point(hc,i),r.point(hc,0),r.point(hc,-i),r.point(0,-i),r.point(-hc,-i),r.point(-hc,0),r.point(-hc,i);else if(vc(t[0]-e[0])>1e-6){var a=t[0]0,i=vc(e)>1e-6;function a(t,n){return _c(t)*_c(n)>e}function o(t,n,r){var i=[1,0,0],a=eu(Kc(t),Kc(n)),o=tu(a,a),s=a[0],c=o-s*s;if(!c)return!r&&t;var u=e*o/c,l=-e*s/c,h=eu(i,a),f=ru(i,u);nu(f,ru(a,l));var d=h,p=tu(f,d),y=tu(d,d),g=p*p-y*(tu(f,f)-1);if(!(g<0)){var v=Ac(g),m=ru(d,(-p-v)/y);if(nu(m,f),m=Qc(m),!r)return m;var b,_=t[0],x=n[0],k=t[1],w=n[1];x<_&&(b=_,_=x,x=b);var E=x-_,T=vc(E-hc)<1e-6;if(!T&&w0^m[1]<(vc(m[0]-_)<1e-6?k:w):k<=m[1]&&m[1]<=w:E>hc^(_<=m[0]&&m[0]<=x)){var C=ru(d,(-p+v)/y);return nu(C,f),[m,Qc(C)]}}}function s(e,n){var i=r?t:hc-t,a=0;return e<-i?a|=1:e>i&&(a|=2),n<-i?a|=4:n>i&&(a|=8),a}return xl(a,(function(t){var e,n,c,u,l;return{lineStart:function(){u=c=!1,l=1},point:function(h,f){var d,p=[h,f],y=a(h,f),g=r?y?0:s(h,f):y?s(h+(h<0?hc:-hc),f):0;if(!e&&(u=c=y)&&t.lineStart(),y!==c&&(!(d=o(e,p))||pl(e,d)||pl(p,d))&&(p[0]+=1e-6,p[1]+=1e-6,y=a(p[0],p[1])),y!==c)l=0,y?(t.lineStart(),d=o(p,e),t.point(d[0],d[1])):(d=o(e,p),t.point(d[0],d[1]),t.lineEnd()),e=d;else if(i&&e&&r^y){var v;g&n||!(v=o(p,e,!0))||(l=0,r?(t.lineStart(),t.point(v[0][0],v[0][1]),t.point(v[1][0],v[1][1]),t.lineEnd()):(t.point(v[1][0],v[1][1]),t.lineEnd(),t.lineStart(),t.point(v[0][0],v[0][1])))}!y||e&&pl(e,p)||t.point(p[0],p[1]),e=p,c=y,n=g},lineEnd:function(){c&&t.lineEnd(),e=null},clean:function(){return l|(u&&c)<<1}}}),(function(e,r,i,a){ll(a,t,n,i,e,r)}),r?[0,-t]:[-hc,t-hc])};function Cl(t,e,n,r){function i(i,a){return t<=i&&i<=n&&e<=a&&a<=r}function a(i,a,s,u){var l=0,h=0;if(null==i||(l=o(i,s))!==(h=o(a,s))||c(i,a)<0^s>0)do{u.point(0===l||3===l?t:n,l>1?r:e)}while((l=(l+s+4)%4)!==h);else u.point(a[0],a[1])}function o(r,i){return vc(r[0]-t)<1e-6?i>0?0:3:vc(r[0]-n)<1e-6?i>0?2:1:vc(r[1]-e)<1e-6?i>0?1:0:i>0?3:2}function s(t,e){return c(t.x,e.x)}function c(t,e){var n=o(t,1),r=o(e,1);return n!==r?n-r:0===n?e[1]-t[1]:1===n?t[0]-e[0]:2===n?t[1]-e[1]:e[0]-t[0]}return function(o){var c,u,l,h,f,d,p,y,g,v,m,b=o,_=dl(),x={point:k,lineStart:function(){x.point=w,u&&u.push(l=[]);v=!0,g=!1,p=y=NaN},lineEnd:function(){c&&(w(h,f),d&&g&&_.rejoin(),c.push(_.result()));x.point=k,g&&b.lineEnd()},polygonStart:function(){b=_,c=[],u=[],m=!0},polygonEnd:function(){var e=function(){for(var e=0,n=0,i=u.length;nr&&(f-a)*(r-o)>(d-o)*(t-a)&&++e:d<=r&&(f-a)*(r-o)<(d-o)*(t-a)&&--e;return e}(),n=m&&e,i=(c=I(c)).length;(n||i)&&(o.polygonStart(),n&&(o.lineStart(),a(null,null,1,o),o.lineEnd()),i&&gl(c,s,e,a,o),o.polygonEnd());b=o,c=u=l=null}};function k(t,e){i(t,e)&&b.point(t,e)}function w(a,o){var s=i(a,o);if(u&&l.push([a,o]),v)h=a,f=o,d=s,v=!1,s&&(b.lineStart(),b.point(a,o));else if(s&&g)b.point(a,o);else{var c=[p=Math.max(-1e9,Math.min(1e9,p)),y=Math.max(-1e9,Math.min(1e9,y))],_=[a=Math.max(-1e9,Math.min(1e9,a)),o=Math.max(-1e9,Math.min(1e9,o))];!function(t,e,n,r,i,a){var o,s=t[0],c=t[1],u=0,l=1,h=e[0]-s,f=e[1]-c;if(o=n-s,h||!(o>0)){if(o/=h,h<0){if(o0){if(o>l)return;o>u&&(u=o)}if(o=i-s,h||!(o<0)){if(o/=h,h<0){if(o>l)return;o>u&&(u=o)}else if(h>0){if(o0)){if(o/=f,f<0){if(o0){if(o>l)return;o>u&&(u=o)}if(o=a-c,f||!(o<0)){if(o/=f,f<0){if(o>l)return;o>u&&(u=o)}else if(f>0){if(o0&&(t[0]=s+u*h,t[1]=c+u*f),l<1&&(e[0]=s+l*h,e[1]=c+l*f),!0}}}}}(c,_,t,e,n,r)?s&&(b.lineStart(),b.point(a,o),m=!1):(g||(b.lineStart(),b.point(c[0],c[1])),b.point(_[0],_[1]),s||b.lineEnd(),m=!1)}p=a,y=o,g=s}return x}}var Al,Sl,Ml,Ol=function(){var t,e,n,r=0,i=0,a=960,o=500;return n={stream:function(n){return t&&e===n?t:t=Cl(r,i,a,o)(e=n)},extent:function(s){return arguments.length?(r=+s[0][0],i=+s[0][1],a=+s[1][0],o=+s[1][1],t=e=null,n):[[r,i],[a,o]]}}},Dl=sc(),Nl={sphere:Nc,point:Nc,lineStart:function(){Nl.point=Ll,Nl.lineEnd=Bl},lineEnd:Nc,polygonStart:Nc,polygonEnd:Nc};function Bl(){Nl.point=Nl.lineEnd=Nc}function Ll(t,e){Al=t*=gc,Sl=Tc(e*=gc),Ml=_c(e),Nl.point=Fl}function Fl(t,e){t*=gc;var n=Tc(e*=gc),r=_c(e),i=vc(t-Al),a=_c(i),o=r*Tc(i),s=Ml*n-Sl*r*a,c=Sl*n+Ml*r*a;Dl.add(bc(Ac(o*o+s*s),c)),Al=t,Sl=n,Ml=r}var Pl=function(t){return Dl.reset(),$c(t,Nl),+Dl},Il=[null,null],jl={type:"LineString",coordinates:Il},Rl=function(t,e){return Il[0]=t,Il[1]=e,Pl(jl)},Yl={Feature:function(t,e){return Ul(t.geometry,e)},FeatureCollection:function(t,e){for(var n=t.features,r=-1,i=n.length;++r0&&(i=Rl(t[a],t[a-1]))>0&&n<=i&&r<=i&&(n+r-i)*(1-Math.pow((n-r)/i,2))<1e-12*i)return!0;n=r}return!1}function Hl(t,e){return!!_l(t.map(Vl),Gl(e))}function Vl(t){return(t=t.map(Gl)).pop(),t}function Gl(t){return[t[0]*gc,t[1]*gc]}var ql=function(t,e){return(t&&Yl.hasOwnProperty(t.type)?Yl[t.type]:Ul)(t,e)};function Xl(t,e,n){var r=k(t,e-1e-6,n).concat(e);return function(t){return r.map((function(e){return[t,e]}))}}function Zl(t,e,n){var r=k(t,e-1e-6,n).concat(e);return function(t){return r.map((function(e){return[e,t]}))}}function Jl(){var t,e,n,r,i,a,o,s,c,u,l,h,f=10,d=f,p=90,y=360,g=2.5;function v(){return{type:"MultiLineString",coordinates:m()}}function m(){return k(xc(r/p)*p,n,p).map(l).concat(k(xc(s/y)*y,o,y).map(h)).concat(k(xc(e/f)*f,t,f).filter((function(t){return vc(t%p)>1e-6})).map(c)).concat(k(xc(a/d)*d,i,d).filter((function(t){return vc(t%y)>1e-6})).map(u))}return v.lines=function(){return m().map((function(t){return{type:"LineString",coordinates:t}}))},v.outline=function(){return{type:"Polygon",coordinates:[l(r).concat(h(o).slice(1),l(n).reverse().slice(1),h(s).reverse().slice(1))]}},v.extent=function(t){return arguments.length?v.extentMajor(t).extentMinor(t):v.extentMinor()},v.extentMajor=function(t){return arguments.length?(r=+t[0][0],n=+t[1][0],s=+t[0][1],o=+t[1][1],r>n&&(t=r,r=n,n=t),s>o&&(t=s,s=o,o=t),v.precision(g)):[[r,s],[n,o]]},v.extentMinor=function(n){return arguments.length?(e=+n[0][0],t=+n[1][0],a=+n[0][1],i=+n[1][1],e>t&&(n=e,e=t,t=n),a>i&&(n=a,a=i,i=n),v.precision(g)):[[e,a],[t,i]]},v.step=function(t){return arguments.length?v.stepMajor(t).stepMinor(t):v.stepMinor()},v.stepMajor=function(t){return arguments.length?(p=+t[0],y=+t[1],v):[p,y]},v.stepMinor=function(t){return arguments.length?(f=+t[0],d=+t[1],v):[f,d]},v.precision=function(f){return arguments.length?(g=+f,c=Xl(a,i,90),u=Zl(e,t,g),l=Xl(s,o,90),h=Zl(r,n,g),v):g},v.extentMajor([[-180,1e-6-90],[180,90-1e-6]]).extentMinor([[-180,-80-1e-6],[180,80+1e-6]])}function Ql(){return Jl()()}var Kl,th,eh,nh,rh=function(t,e){var n=t[0]*gc,r=t[1]*gc,i=e[0]*gc,a=e[1]*gc,o=_c(r),s=Tc(r),c=_c(a),u=Tc(a),l=o*_c(n),h=o*Tc(n),f=c*_c(i),d=c*Tc(i),p=2*Oc(Ac(Dc(a-r)+o*c*Dc(i-n))),y=Tc(p),g=p?function(t){var e=Tc(t*=p)/y,n=Tc(p-t)/y,r=n*l+e*f,i=n*h+e*d,a=n*s+e*u;return[bc(i,r)*yc,bc(a,Ac(r*r+i*i))*yc]}:function(){return[n*yc,r*yc]};return g.distance=p,g},ih=function(t){return t},ah=sc(),oh=sc(),sh={point:Nc,lineStart:Nc,lineEnd:Nc,polygonStart:function(){sh.lineStart=ch,sh.lineEnd=hh},polygonEnd:function(){sh.lineStart=sh.lineEnd=sh.point=Nc,ah.add(vc(oh)),oh.reset()},result:function(){var t=ah/2;return ah.reset(),t}};function ch(){sh.point=uh}function uh(t,e){sh.point=lh,Kl=eh=t,th=nh=e}function lh(t,e){oh.add(nh*t-eh*e),eh=t,nh=e}function hh(){lh(Kl,th)}var fh=sh,dh=1/0,ph=dh,yh=-dh,gh=yh;var vh,mh,bh,_h,xh={point:function(t,e){tyh&&(yh=t);egh&&(gh=e)},lineStart:Nc,lineEnd:Nc,polygonStart:Nc,polygonEnd:Nc,result:function(){var t=[[dh,ph],[yh,gh]];return yh=gh=-(ph=dh=1/0),t}},kh=0,wh=0,Eh=0,Th=0,Ch=0,Ah=0,Sh=0,Mh=0,Oh=0,Dh={point:Nh,lineStart:Bh,lineEnd:Ph,polygonStart:function(){Dh.lineStart=Ih,Dh.lineEnd=jh},polygonEnd:function(){Dh.point=Nh,Dh.lineStart=Bh,Dh.lineEnd=Ph},result:function(){var t=Oh?[Sh/Oh,Mh/Oh]:Ah?[Th/Ah,Ch/Ah]:Eh?[kh/Eh,wh/Eh]:[NaN,NaN];return kh=wh=Eh=Th=Ch=Ah=Sh=Mh=Oh=0,t}};function Nh(t,e){kh+=t,wh+=e,++Eh}function Bh(){Dh.point=Lh}function Lh(t,e){Dh.point=Fh,Nh(bh=t,_h=e)}function Fh(t,e){var n=t-bh,r=e-_h,i=Ac(n*n+r*r);Th+=i*(bh+t)/2,Ch+=i*(_h+e)/2,Ah+=i,Nh(bh=t,_h=e)}function Ph(){Dh.point=Nh}function Ih(){Dh.point=Rh}function jh(){Yh(vh,mh)}function Rh(t,e){Dh.point=Yh,Nh(vh=bh=t,mh=_h=e)}function Yh(t,e){var n=t-bh,r=e-_h,i=Ac(n*n+r*r);Th+=i*(bh+t)/2,Ch+=i*(_h+e)/2,Ah+=i,Sh+=(i=_h*t-bh*e)*(bh+t),Mh+=i*(_h+e),Oh+=3*i,Nh(bh=t,_h=e)}var zh=Dh;function Uh(t){this._context=t}Uh.prototype={_radius:4.5,pointRadius:function(t){return this._radius=t,this},polygonStart:function(){this._line=0},polygonEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){0===this._line&&this._context.closePath(),this._point=NaN},point:function(t,e){switch(this._point){case 0:this._context.moveTo(t,e),this._point=1;break;case 1:this._context.lineTo(t,e);break;default:this._context.moveTo(t+this._radius,e),this._context.arc(t,e,this._radius,0,pc)}},result:Nc};var $h,Wh,Hh,Vh,Gh,qh=sc(),Xh={point:Nc,lineStart:function(){Xh.point=Zh},lineEnd:function(){$h&&Jh(Wh,Hh),Xh.point=Nc},polygonStart:function(){$h=!0},polygonEnd:function(){$h=null},result:function(){var t=+qh;return qh.reset(),t}};function Zh(t,e){Xh.point=Jh,Wh=Vh=t,Hh=Gh=e}function Jh(t,e){Vh-=t,Gh-=e,qh.add(Ac(Vh*Vh+Gh*Gh)),Vh=t,Gh=e}var Qh=Xh;function Kh(){this._string=[]}function tf(t){return"m0,"+t+"a"+t+","+t+" 0 1,1 0,"+-2*t+"a"+t+","+t+" 0 1,1 0,"+2*t+"z"}Kh.prototype={_radius:4.5,_circle:tf(4.5),pointRadius:function(t){return(t=+t)!==this._radius&&(this._radius=t,this._circle=null),this},polygonStart:function(){this._line=0},polygonEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){0===this._line&&this._string.push("Z"),this._point=NaN},point:function(t,e){switch(this._point){case 0:this._string.push("M",t,",",e),this._point=1;break;case 1:this._string.push("L",t,",",e);break;default:null==this._circle&&(this._circle=tf(this._radius)),this._string.push("M",t,",",e,this._circle)}},result:function(){if(this._string.length){var t=this._string.join("");return this._string=[],t}return null}};var ef=function(t,e){var n,r,i=4.5;function a(t){return t&&("function"==typeof i&&r.pointRadius(+i.apply(this,arguments)),$c(t,n(r))),r.result()}return a.area=function(t){return $c(t,n(fh)),fh.result()},a.measure=function(t){return $c(t,n(Qh)),Qh.result()},a.bounds=function(t){return $c(t,n(xh)),xh.result()},a.centroid=function(t){return $c(t,n(zh)),zh.result()},a.projection=function(e){return arguments.length?(n=null==e?(t=null,ih):(t=e).stream,a):t},a.context=function(t){return arguments.length?(r=null==t?(e=null,new Kh):new Uh(e=t),"function"!=typeof i&&r.pointRadius(i),a):e},a.pointRadius=function(t){return arguments.length?(i="function"==typeof t?t:(r.pointRadius(+t),+t),a):i},a.projection(t).context(e)},nf=function(t){return{stream:rf(t)}};function rf(t){return function(e){var n=new af;for(var r in t)n[r]=t[r];return n.stream=e,n}}function af(){}function of(t,e,n){var r=t.clipExtent&&t.clipExtent();return t.scale(150).translate([0,0]),null!=r&&t.clipExtent(null),$c(n,t.stream(xh)),e(xh.result()),null!=r&&t.clipExtent(r),t}function sf(t,e,n){return of(t,(function(n){var r=e[1][0]-e[0][0],i=e[1][1]-e[0][1],a=Math.min(r/(n[1][0]-n[0][0]),i/(n[1][1]-n[0][1])),o=+e[0][0]+(r-a*(n[1][0]+n[0][0]))/2,s=+e[0][1]+(i-a*(n[1][1]+n[0][1]))/2;t.scale(150*a).translate([o,s])}),n)}function cf(t,e,n){return sf(t,[[0,0],e],n)}function uf(t,e,n){return of(t,(function(n){var r=+e,i=r/(n[1][0]-n[0][0]),a=(r-i*(n[1][0]+n[0][0]))/2,o=-i*n[0][1];t.scale(150*i).translate([a,o])}),n)}function lf(t,e,n){return of(t,(function(n){var r=+e,i=r/(n[1][1]-n[0][1]),a=-i*n[0][0],o=(r-i*(n[1][1]+n[0][1]))/2;t.scale(150*i).translate([a,o])}),n)}af.prototype={constructor:af,point:function(t,e){this.stream.point(t,e)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}};var hf=_c(30*gc),ff=function(t,e){return+e?function(t,e){function n(r,i,a,o,s,c,u,l,h,f,d,p,y,g){var v=u-r,m=l-i,b=v*v+m*m;if(b>4*e&&y--){var _=o+f,x=s+d,k=c+p,w=Ac(_*_+x*x+k*k),E=Oc(k/=w),T=vc(vc(k)-1)<1e-6||vc(a-h)<1e-6?(a+h)/2:bc(x,_),C=t(T,E),A=C[0],S=C[1],M=A-r,O=S-i,D=m*M-v*O;(D*D/b>e||vc((v*M+m*O)/b-.5)>.3||o*f+s*d+c*p2?t[2]%360*gc:0,A()):[g*yc,v*yc,m*yc]},T.angle=function(t){return arguments.length?(b=t%360*gc,A()):b*yc},T.precision=function(t){return arguments.length?(o=ff(s,E=t*t),S()):Ac(E)},T.fitExtent=function(t,e){return sf(T,t,e)},T.fitSize=function(t,e){return cf(T,t,e)},T.fitWidth=function(t,e){return uf(T,t,e)},T.fitHeight=function(t,e){return lf(T,t,e)},function(){return e=t.apply(this,arguments),T.invert=e.invert&&C,A()}}function mf(t){var e=0,n=hc/3,r=vf(t),i=r(e,n);return i.parallels=function(t){return arguments.length?r(e=t[0]*gc,n=t[1]*gc):[e*yc,n*yc]},i}function bf(t,e){var n=Tc(t),r=(n+Tc(e))/2;if(vc(r)<1e-6)return function(t){var e=_c(t);function n(t,n){return[t*e,Tc(n)/e]}return n.invert=function(t,n){return[t/e,Oc(n*e)]},n}(t);var i=1+n*(2*r-n),a=Ac(i)/r;function o(t,e){var n=Ac(i-2*r*Tc(e))/r;return[n*Tc(t*=r),a-n*_c(t)]}return o.invert=function(t,e){var n=a-e;return[bc(t,vc(n))/r*Cc(n),Oc((i-(t*t+n*n)*r*r)/(2*r))]},o}var _f=function(){return mf(bf).scale(155.424).center([0,33.6442])},xf=function(){return _f().parallels([29.5,45.5]).scale(1070).translate([480,250]).rotate([96,0]).center([-.6,38.7])};var kf=function(){var t,e,n,r,i,a,o=xf(),s=_f().rotate([154,0]).center([-2,58.5]).parallels([55,65]),c=_f().rotate([157,0]).center([-3,19.9]).parallels([8,18]),u={point:function(t,e){a=[t,e]}};function l(t){var e=t[0],o=t[1];return a=null,n.point(e,o),a||(r.point(e,o),a)||(i.point(e,o),a)}function h(){return t=e=null,l}return l.invert=function(t){var e=o.scale(),n=o.translate(),r=(t[0]-n[0])/e,i=(t[1]-n[1])/e;return(i>=.12&&i<.234&&r>=-.425&&r<-.214?s:i>=.166&&i<.234&&r>=-.214&&r<-.115?c:o).invert(t)},l.stream=function(n){return t&&e===n?t:(r=[o.stream(e=n),s.stream(n),c.stream(n)],i=r.length,t={point:function(t,e){for(var n=-1;++n0?e<1e-6-fc&&(e=1e-6-fc):e>fc-1e-6&&(e=fc-1e-6);var n=i/Ec(Nf(e),r);return[n*Tc(r*t),i-n*_c(r*t)]}return a.invert=function(t,e){var n=i-e,a=Cc(r)*Ac(t*t+n*n);return[bc(t,vc(n))/r*Cc(n),2*mc(Ec(i/a,1/r))-fc]},a}var Lf=function(){return mf(Bf).scale(109.5).parallels([30,30])};function Ff(t,e){return[t,e]}Ff.invert=Ff;var Pf=function(){return gf(Ff).scale(152.63)};function If(t,e){var n=_c(t),r=t===e?Tc(t):(n-_c(e))/(e-t),i=n/r+t;if(vc(r)<1e-6)return Ff;function a(t,e){var n=i-e,a=r*t;return[n*Tc(a),i-n*_c(a)]}return a.invert=function(t,e){var n=i-e;return[bc(t,vc(n))/r*Cc(n),i-Cc(r)*Ac(t*t+n*n)]},a}var jf=function(){return mf(If).scale(131.154).center([0,13.9389])},Rf=1.340264,Yf=-.081106,zf=893e-6,Uf=.003796,$f=Ac(3)/2;function Wf(t,e){var n=Oc($f*Tc(e)),r=n*n,i=r*r*r;return[t*_c(n)/($f*(Rf+3*Yf*r+i*(7*zf+9*Uf*r))),n*(Rf+Yf*r+i*(zf+Uf*r))]}Wf.invert=function(t,e){for(var n,r=e,i=r*r,a=i*i*i,o=0;o<12&&(a=(i=(r-=n=(r*(Rf+Yf*i+a*(zf+Uf*i))-e)/(Rf+3*Yf*i+a*(7*zf+9*Uf*i)))*r)*i*i,!(vc(n)<1e-12));++o);return[$f*t*(Rf+3*Yf*i+a*(7*zf+9*Uf*i))/_c(r),Oc(Tc(r)/$f)]};var Hf=function(){return gf(Wf).scale(177.158)};function Vf(t,e){var n=_c(e),r=_c(t)*n;return[n*Tc(t)/r,Tc(e)/r]}Vf.invert=Ef(mc);var Gf=function(){return gf(Vf).scale(144.049).clipAngle(60)};function qf(t,e,n,r){return 1===t&&1===e&&0===n&&0===r?ih:rf({point:function(i,a){this.stream.point(i*t+n,a*e+r)}})}var Xf=function(){var t,e,n,r,i,a,o=1,s=0,c=0,u=1,l=1,h=ih,f=null,d=ih;function p(){return r=i=null,a}return a={stream:function(t){return r&&i===t?r:r=h(d(i=t))},postclip:function(r){return arguments.length?(d=r,f=t=e=n=null,p()):d},clipExtent:function(r){return arguments.length?(d=null==r?(f=t=e=n=null,ih):Cl(f=+r[0][0],t=+r[0][1],e=+r[1][0],n=+r[1][1]),p()):null==f?null:[[f,t],[e,n]]},scale:function(t){return arguments.length?(h=qf((o=+t)*u,o*l,s,c),p()):o},translate:function(t){return arguments.length?(h=qf(o*u,o*l,s=+t[0],c=+t[1]),p()):[s,c]},reflectX:function(t){return arguments.length?(h=qf(o*(u=t?-1:1),o*l,s,c),p()):u<0},reflectY:function(t){return arguments.length?(h=qf(o*u,o*(l=t?-1:1),s,c),p()):l<0},fitExtent:function(t,e){return sf(a,t,e)},fitSize:function(t,e){return cf(a,t,e)},fitWidth:function(t,e){return uf(a,t,e)},fitHeight:function(t,e){return lf(a,t,e)}}};function Zf(t,e){var n=e*e,r=n*n;return[t*(.8707-.131979*n+r*(r*(.003971*n-.001529*r)-.013791)),e*(1.007226+n*(.015085+r*(.028874*n-.044475-.005916*r)))]}Zf.invert=function(t,e){var n,r=e,i=25;do{var a=r*r,o=a*a;r-=n=(r*(1.007226+a*(.015085+o*(.028874*a-.044475-.005916*o)))-e)/(1.007226+a*(.045255+o*(.259866*a-.311325-.005916*11*o)))}while(vc(n)>1e-6&&--i>0);return[t/(.8707+(a=r*r)*(a*(a*a*a*(.003971-.001529*a)-.013791)-.131979)),r]};var Jf=function(){return gf(Zf).scale(175.295)};function Qf(t,e){return[_c(e)*Tc(t),Tc(e)]}Qf.invert=Ef(Oc);var Kf=function(){return gf(Qf).scale(249.5).clipAngle(90+1e-6)};function td(t,e){var n=_c(e),r=1+_c(t)*n;return[n*Tc(t)/r,Tc(e)/r]}td.invert=Ef((function(t){return 2*mc(t)}));var ed=function(){return gf(td).scale(250).clipAngle(142)};function nd(t,e){return[wc(Sc((fc+e)/2)),-t]}nd.invert=function(t,e){return[-e,2*mc(kc(t))-fc]};var rd=function(){var t=Df(nd),e=t.center,n=t.rotate;return t.center=function(t){return arguments.length?e([-t[1],t[0]]):[(t=e())[1],-t[0]]},t.rotate=function(t){return arguments.length?n([t[0],t[1],t.length>2?t[2]+90:90]):[(t=n())[0],t[1],t[2]-90]},n([0,0,90]).scale(159.155)};function id(t,e){return t.parent===e.parent?1:2}function ad(t,e){return t+e.x}function od(t,e){return Math.max(t,e.y)}var sd=function(){var t=id,e=1,n=1,r=!1;function i(i){var a,o=0;i.eachAfter((function(e){var n=e.children;n?(e.x=function(t){return t.reduce(ad,0)/t.length}(n),e.y=function(t){return 1+t.reduce(od,0)}(n)):(e.x=a?o+=t(e,a):0,e.y=0,a=e)}));var s=function(t){for(var e;e=t.children;)t=e[0];return t}(i),c=function(t){for(var e;e=t.children;)t=e[e.length-1];return t}(i),u=s.x-t(s,c)/2,l=c.x+t(c,s)/2;return i.eachAfter(r?function(t){t.x=(t.x-i.x)*e,t.y=(i.y-t.y)*n}:function(t){t.x=(t.x-u)/(l-u)*e,t.y=(1-(i.y?t.y/i.y:1))*n})}return i.separation=function(e){return arguments.length?(t=e,i):t},i.size=function(t){return arguments.length?(r=!1,e=+t[0],n=+t[1],i):r?null:[e,n]},i.nodeSize=function(t){return arguments.length?(r=!0,e=+t[0],n=+t[1],i):r?[e,n]:null},i};function cd(t){var e=0,n=t.children,r=n&&n.length;if(r)for(;--r>=0;)e+=n[r].value;else e=1;t.value=e}function ud(t,e){var n,r,i,a,o,s=new dd(t),c=+t.value&&(s.value=t.value),u=[s];for(null==e&&(e=ld);n=u.pop();)if(c&&(n.value=+n.data.value),(i=e(n.data))&&(o=i.length))for(n.children=new Array(o),a=o-1;a>=0;--a)u.push(r=n.children[a]=new dd(i[a])),r.parent=n,r.depth=n.depth+1;return s.eachBefore(fd)}function ld(t){return t.children}function hd(t){t.data=t.data.data}function fd(t){var e=0;do{t.height=e}while((t=t.parent)&&t.height<++e)}function dd(t){this.data=t,this.depth=this.height=0,this.parent=null}dd.prototype=ud.prototype={constructor:dd,count:function(){return this.eachAfter(cd)},each:function(t){var e,n,r,i,a=this,o=[a];do{for(e=o.reverse(),o=[];a=e.pop();)if(t(a),n=a.children)for(r=0,i=n.length;r=0;--n)i.push(e[n]);return this},sum:function(t){return this.eachAfter((function(e){for(var n=+t(e.data)||0,r=e.children,i=r&&r.length;--i>=0;)n+=r[i].value;e.value=n}))},sort:function(t){return this.eachBefore((function(e){e.children&&e.children.sort(t)}))},path:function(t){for(var e=this,n=function(t,e){if(t===e)return t;var n=t.ancestors(),r=e.ancestors(),i=null;t=n.pop(),e=r.pop();for(;t===e;)i=t,t=n.pop(),e=r.pop();return i}(e,t),r=[e];e!==n;)e=e.parent,r.push(e);for(var i=r.length;t!==n;)r.splice(i,0,t),t=t.parent;return r},ancestors:function(){for(var t=this,e=[t];t=t.parent;)e.push(t);return e},descendants:function(){var t=[];return this.each((function(e){t.push(e)})),t},leaves:function(){var t=[];return this.eachBefore((function(e){e.children||t.push(e)})),t},links:function(){var t=this,e=[];return t.each((function(n){n!==t&&e.push({source:n.parent,target:n})})),e},copy:function(){return ud(this).eachBefore(hd)}};var pd=Array.prototype.slice;var yd=function(t){for(var e,n,r=0,i=(t=function(t){for(var e,n,r=t.length;r;)n=Math.random()*r--|0,e=t[r],t[r]=t[n],t[n]=e;return t}(pd.call(t))).length,a=[];r0&&n*n>r*r+i*i}function bd(t,e){for(var n=0;n(o*=o)?(r=(u+o-i)/(2*u),a=Math.sqrt(Math.max(0,o/u-r*r)),n.x=t.x-r*s-a*c,n.y=t.y-r*c+a*s):(r=(u+i-o)/(2*u),a=Math.sqrt(Math.max(0,i/u-r*r)),n.x=e.x+r*s-a*c,n.y=e.y+r*c+a*s)):(n.x=e.x+n.r,n.y=e.y)}function Ed(t,e){var n=t.r+e.r-1e-6,r=e.x-t.x,i=e.y-t.y;return n>0&&n*n>r*r+i*i}function Td(t){var e=t._,n=t.next._,r=e.r+n.r,i=(e.x*n.r+n.x*e.r)/r,a=(e.y*n.r+n.y*e.r)/r;return i*i+a*a}function Cd(t){this._=t,this.next=null,this.previous=null}function Ad(t){if(!(i=t.length))return 0;var e,n,r,i,a,o,s,c,u,l,h;if((e=t[0]).x=0,e.y=0,!(i>1))return e.r;if(n=t[1],e.x=-n.r,n.x=e.r,n.y=0,!(i>2))return e.r+n.r;wd(n,e,r=t[2]),e=new Cd(e),n=new Cd(n),r=new Cd(r),e.next=r.previous=n,n.next=e.previous=r,r.next=n.previous=e;t:for(s=3;s0)throw new Error("cycle");return a}return n.id=function(e){return arguments.length?(t=Od(e),n):t},n.parentId=function(t){return arguments.length?(e=Od(t),n):e},n};function Vd(t,e){return t.parent===e.parent?1:2}function Gd(t){var e=t.children;return e?e[0]:t.t}function qd(t){var e=t.children;return e?e[e.length-1]:t.t}function Xd(t,e,n){var r=n/(e.i-t.i);e.c-=r,e.s+=n,t.c+=r,e.z+=n,e.m+=n}function Zd(t,e,n){return t.a.parent===e.parent?t.a:n}function Jd(t,e){this._=t,this.parent=null,this.children=null,this.A=null,this.a=this,this.z=0,this.m=0,this.c=0,this.s=0,this.t=null,this.i=e}Jd.prototype=Object.create(dd.prototype);var Qd=function(){var t=Vd,e=1,n=1,r=null;function i(i){var c=function(t){for(var e,n,r,i,a,o=new Jd(t,0),s=[o];e=s.pop();)if(r=e._.children)for(e.children=new Array(a=r.length),i=a-1;i>=0;--i)s.push(n=e.children[i]=new Jd(r[i],i)),n.parent=e;return(o.parent=new Jd(null,0)).children=[o],o}(i);if(c.eachAfter(a),c.parent.m=-c.z,c.eachBefore(o),r)i.eachBefore(s);else{var u=i,l=i,h=i;i.eachBefore((function(t){t.xl.x&&(l=t),t.depth>h.depth&&(h=t)}));var f=u===l?1:t(u,l)/2,d=f-u.x,p=e/(l.x+f+d),y=n/(h.depth||1);i.eachBefore((function(t){t.x=(t.x+d)*p,t.y=t.depth*y}))}return i}function a(e){var n=e.children,r=e.parent.children,i=e.i?r[e.i-1]:null;if(n){!function(t){for(var e,n=0,r=0,i=t.children,a=i.length;--a>=0;)(e=i[a]).z+=n,e.m+=n,n+=e.s+(r+=e.c)}(e);var a=(n[0].z+n[n.length-1].z)/2;i?(e.z=i.z+t(e._,i._),e.m=e.z-a):e.z=a}else i&&(e.z=i.z+t(e._,i._));e.parent.A=function(e,n,r){if(n){for(var i,a=e,o=e,s=n,c=a.parent.children[0],u=a.m,l=o.m,h=s.m,f=c.m;s=qd(s),a=Gd(a),s&&a;)c=Gd(c),(o=qd(o)).a=e,(i=s.z+h-a.z-u+t(s._,a._))>0&&(Xd(Zd(s,e,r),e,i),u+=i,l+=i),h+=s.m,u+=a.m,f+=c.m,l+=o.m;s&&!qd(o)&&(o.t=s,o.m+=h-l),a&&!Gd(c)&&(c.t=a,c.m+=u-f,r=e)}return r}(e,i,e.parent.A||r[0])}function o(t){t._.x=t.z+t.parent.m,t.m+=t.parent.m}function s(t){t.x*=e,t.y=t.depth*n}return i.separation=function(e){return arguments.length?(t=e,i):t},i.size=function(t){return arguments.length?(r=!1,e=+t[0],n=+t[1],i):r?null:[e,n]},i.nodeSize=function(t){return arguments.length?(r=!0,e=+t[0],n=+t[1],i):r?[e,n]:null},i},Kd=function(t,e,n,r,i){for(var a,o=t.children,s=-1,c=o.length,u=t.value&&(i-n)/t.value;++sf&&(f=s),g=l*l*y,(d=Math.max(f/g,g/h))>p){l-=s;break}p=d}v.push(o={value:l,dice:c1?e:1)},n}(tp),rp=function(){var t=np,e=!1,n=1,r=1,i=[0],a=Dd,o=Dd,s=Dd,c=Dd,u=Dd;function l(t){return t.x0=t.y0=0,t.x1=n,t.y1=r,t.eachBefore(h),i=[0],e&&t.eachBefore(jd),t}function h(e){var n=i[e.depth],r=e.x0+n,l=e.y0+n,h=e.x1-n,f=e.y1-n;h=n-1){var l=s[e];return l.x0=i,l.y0=a,l.x1=o,void(l.y1=c)}var h=u[e],f=r/2+h,d=e+1,p=n-1;for(;d>>1;u[y]c-a){var m=(i*v+o*g)/r;t(e,d,g,i,a,m,c),t(d,n,v,m,a,o,c)}else{var b=(a*v+c*g)/r;t(e,d,g,i,a,o,b),t(d,n,v,i,b,o,c)}}(0,c,t.value,e,n,r,i)},ap=function(t,e,n,r,i){(1&t.depth?Kd:Rd)(t,e,n,r,i)},op=function t(e){function n(t,n,r,i,a){if((o=t._squarify)&&o.ratio===e)for(var o,s,c,u,l,h=-1,f=o.length,d=t.value;++h1?e:1)},n}(tp),sp=function(t){var e=t.length;return function(n){return t[Math.max(0,Math.min(e-1,Math.floor(n*e)))]}},cp=function(t,e){var n=un(+t,+e);return function(t){var e=n(t);return e-360*Math.floor(e/360)}},up=function(t,e){return t=+t,e=+e,function(n){return Math.round(t*(1-n)+e*n)}},lp=Math.SQRT2;function hp(t){return((t=Math.exp(t))+1/t)/2}var fp=function(t,e){var n,r,i=t[0],a=t[1],o=t[2],s=e[0],c=e[1],u=e[2],l=s-i,h=c-a,f=l*l+h*h;if(f<1e-12)r=Math.log(u/o)/lp,n=function(t){return[i+t*l,a+t*h,o*Math.exp(lp*t*r)]};else{var d=Math.sqrt(f),p=(u*u-o*o+4*f)/(2*o*2*d),y=(u*u-o*o-4*f)/(2*u*2*d),g=Math.log(Math.sqrt(p*p+1)-p),v=Math.log(Math.sqrt(y*y+1)-y);r=(v-g)/lp,n=function(t){var e,n=t*r,s=hp(g),c=o/(2*d)*(s*(e=lp*n+g,((e=Math.exp(2*e))-1)/(e+1))-function(t){return((t=Math.exp(t))-1/t)/2}(g));return[i+c*l,a+c*h,o*s/hp(lp*n+g)]}}return n.duration=1e3*r,n};function dp(t){return function(e,n){var r=t((e=tn(e)).h,(n=tn(n)).h),i=hn(e.s,n.s),a=hn(e.l,n.l),o=hn(e.opacity,n.opacity);return function(t){return e.h=r(t),e.s=i(t),e.l=a(t),e.opacity=o(t),e+""}}}var pp=dp(un),yp=dp(hn);function gp(t,e){var n=hn((t=pa(t)).l,(e=pa(e)).l),r=hn(t.a,e.a),i=hn(t.b,e.b),a=hn(t.opacity,e.opacity);return function(e){return t.l=n(e),t.a=r(e),t.b=i(e),t.opacity=a(e),t+""}}function vp(t){return function(e,n){var r=t((e=ka(e)).h,(n=ka(n)).h),i=hn(e.c,n.c),a=hn(e.l,n.l),o=hn(e.opacity,n.opacity);return function(t){return e.h=r(t),e.c=i(t),e.l=a(t),e.opacity=o(t),e+""}}}var mp=vp(un),bp=vp(hn);function _p(t){return function e(n){function r(e,r){var i=t((e=Oa(e)).h,(r=Oa(r)).h),a=hn(e.s,r.s),o=hn(e.l,r.l),s=hn(e.opacity,r.opacity);return function(t){return e.h=i(t),e.s=a(t),e.l=o(Math.pow(t,n)),e.opacity=s(t),e+""}}return n=+n,r.gamma=e,r}(1)}var xp=_p(un),kp=_p(hn);function wp(t,e){for(var n=0,r=e.length-1,i=e[0],a=new Array(r<0?0:r);n1&&(e=t[a[o-2]],n=t[a[o-1]],r=t[s],(n[0]-e[0])*(r[1]-e[1])-(n[1]-e[1])*(r[0]-e[0])<=0);)--o;a[o++]=s}return a.slice(0,o)}var Mp=function(t){if((n=t.length)<3)return null;var e,n,r=new Array(n),i=new Array(n);for(e=0;e=0;--e)u.push(t[r[a[e]][2]]);for(e=+s;es!=u>s&&o<(c-n)*(s-r)/(u-r)+n&&(l=!l),c=n,u=r;return l},Dp=function(t){for(var e,n,r=-1,i=t.length,a=t[i-1],o=a[0],s=a[1],c=0;++r1);return t+n*a*Math.sqrt(-2*Math.log(i)/i)}}return n.source=t,n}(Np),Fp=function t(e){function n(){var t=Lp.source(e).apply(this,arguments);return function(){return Math.exp(t())}}return n.source=t,n}(Np),Pp=function t(e){function n(t){return function(){for(var n=0,r=0;rr&&(e=n,n=r,r=e),function(t){return Math.max(n,Math.min(r,t))}}function ty(t,e,n){var r=t[0],i=t[1],a=e[0],o=e[1];return i2?ey:ty,i=a=null,h}function h(e){return isNaN(e=+e)?n:(i||(i=r(o.map(t),s,c)))(t(u(e)))}return h.invert=function(n){return u(e((a||(a=r(s,o.map(t),xn)))(n)))},h.domain=function(t){return arguments.length?(o=Up.call(t,Xp),u===Jp||(u=Kp(o)),l()):o.slice()},h.range=function(t){return arguments.length?(s=$p.call(t),l()):s.slice()},h.rangeRound=function(t){return s=$p.call(t),c=up,l()},h.clamp=function(t){return arguments.length?(u=t?Kp(o):Jp,h):u!==Jp},h.interpolate=function(t){return arguments.length?(c=t,l()):c},h.unknown=function(t){return arguments.length?(n=t,h):n},function(n,r){return t=n,e=r,l()}}function iy(t,e){return ry()(t,e)}var ay=function(t,e,n,r){var i,a=S(t,e,n);switch((r=Hs(null==r?",f":r)).type){case"s":var o=Math.max(Math.abs(t),Math.abs(e));return null!=r.precision||isNaN(i=ac(a,o))||(r.precision=i),Zs(r,o);case"":case"e":case"g":case"p":case"r":null!=r.precision||isNaN(i=oc(a,Math.max(Math.abs(t),Math.abs(e))))||(r.precision=i-("e"===r.type));break;case"f":case"%":null!=r.precision||isNaN(i=ic(a))||(r.precision=i-2*("%"===r.type))}return Xs(r)};function oy(t){var e=t.domain;return t.ticks=function(t){var n=e();return C(n[0],n[n.length-1],null==t?10:t)},t.tickFormat=function(t,n){var r=e();return ay(r[0],r[r.length-1],null==t?10:t,n)},t.nice=function(n){null==n&&(n=10);var r,i=e(),a=0,o=i.length-1,s=i[a],c=i[o];return c0?r=A(s=Math.floor(s/r)*r,c=Math.ceil(c/r)*r,n):r<0&&(r=A(s=Math.ceil(s*r)/r,c=Math.floor(c*r)/r,n)),r>0?(i[a]=Math.floor(s/r)*r,i[o]=Math.ceil(c/r)*r,e(i)):r<0&&(i[a]=Math.ceil(s*r)/r,i[o]=Math.floor(c*r)/r,e(i)),t},t}function sy(){var t=iy(Jp,Jp);return t.copy=function(){return ny(t,sy())},Rp.apply(t,arguments),oy(t)}function cy(t){var e;function n(t){return isNaN(t=+t)?e:t}return n.invert=n,n.domain=n.range=function(e){return arguments.length?(t=Up.call(e,Xp),n):t.slice()},n.unknown=function(t){return arguments.length?(e=t,n):e},n.copy=function(){return cy(t).unknown(e)},t=arguments.length?Up.call(t,Xp):[0,1],oy(n)}var uy=function(t,e){var n,r=0,i=(t=t.slice()).length-1,a=t[r],o=t[i];return o0){for(;fc)break;y.push(h)}}else for(;f=1;--l)if(!((h=u*l)c)break;y.push(h)}}else y=C(f,d,Math.min(d-f,p)).map(n);return r?y.reverse():y},r.tickFormat=function(t,i){if(null==i&&(i=10===a?".0e":","),"function"!=typeof i&&(i=Xs(i)),t===1/0)return i;null==t&&(t=10);var o=Math.max(1,a*t/r.ticks().length);return function(t){var r=t/n(Math.round(e(t)));return r*a0?i[r-1]:e[0],r=r?[i[r-1],n]:[i[o-1],i[o]]},o.unknown=function(e){return arguments.length?(t=e,o):o},o.thresholds=function(){return i.slice()},o.copy=function(){return My().domain([e,n]).range(a).unknown(t)},Rp.apply(oy(o),arguments)}function Oy(){var t,e=[.5],n=[0,1],r=1;function i(i){return i<=i?n[c(e,i,0,r)]:t}return i.domain=function(t){return arguments.length?(e=$p.call(t),r=Math.min(e.length,n.length-1),i):e.slice()},i.range=function(t){return arguments.length?(n=$p.call(t),r=Math.min(e.length,n.length-1),i):n.slice()},i.invertExtent=function(t){var r=n.indexOf(t);return[e[r-1],e[r]]},i.unknown=function(e){return arguments.length?(t=e,i):t},i.copy=function(){return Oy().domain(e).range(n).unknown(t)},Rp.apply(i,arguments)}var Dy=new Date,Ny=new Date;function By(t,e,n,r){function i(e){return t(e=0===arguments.length?new Date:new Date(+e)),e}return i.floor=function(e){return t(e=new Date(+e)),e},i.ceil=function(n){return t(n=new Date(n-1)),e(n,1),t(n),n},i.round=function(t){var e=i(t),n=i.ceil(t);return t-e0))return s;do{s.push(o=new Date(+n)),e(n,a),t(n)}while(o=e)for(;t(e),!n(e);)e.setTime(e-1)}),(function(t,r){if(t>=t)if(r<0)for(;++r<=0;)for(;e(t,-1),!n(t););else for(;--r>=0;)for(;e(t,1),!n(t););}))},n&&(i.count=function(e,r){return Dy.setTime(+e),Ny.setTime(+r),t(Dy),t(Ny),Math.floor(n(Dy,Ny))},i.every=function(t){return t=Math.floor(t),isFinite(t)&&t>0?t>1?i.filter(r?function(e){return r(e)%t==0}:function(e){return i.count(0,e)%t==0}):i:null}),i}var Ly=By((function(t){t.setMonth(0,1),t.setHours(0,0,0,0)}),(function(t,e){t.setFullYear(t.getFullYear()+e)}),(function(t,e){return e.getFullYear()-t.getFullYear()}),(function(t){return t.getFullYear()}));Ly.every=function(t){return isFinite(t=Math.floor(t))&&t>0?By((function(e){e.setFullYear(Math.floor(e.getFullYear()/t)*t),e.setMonth(0,1),e.setHours(0,0,0,0)}),(function(e,n){e.setFullYear(e.getFullYear()+n*t)})):null};var Fy=Ly,Py=Ly.range,Iy=By((function(t){t.setDate(1),t.setHours(0,0,0,0)}),(function(t,e){t.setMonth(t.getMonth()+e)}),(function(t,e){return e.getMonth()-t.getMonth()+12*(e.getFullYear()-t.getFullYear())}),(function(t){return t.getMonth()})),jy=Iy,Ry=Iy.range;function Yy(t){return By((function(e){e.setDate(e.getDate()-(e.getDay()+7-t)%7),e.setHours(0,0,0,0)}),(function(t,e){t.setDate(t.getDate()+7*e)}),(function(t,e){return(e-t-6e4*(e.getTimezoneOffset()-t.getTimezoneOffset()))/6048e5}))}var zy=Yy(0),Uy=Yy(1),$y=Yy(2),Wy=Yy(3),Hy=Yy(4),Vy=Yy(5),Gy=Yy(6),qy=zy.range,Xy=Uy.range,Zy=$y.range,Jy=Wy.range,Qy=Hy.range,Ky=Vy.range,tg=Gy.range,eg=By((function(t){t.setHours(0,0,0,0)}),(function(t,e){t.setDate(t.getDate()+e)}),(function(t,e){return(e-t-6e4*(e.getTimezoneOffset()-t.getTimezoneOffset()))/864e5}),(function(t){return t.getDate()-1})),ng=eg,rg=eg.range,ig=By((function(t){t.setTime(t-t.getMilliseconds()-1e3*t.getSeconds()-6e4*t.getMinutes())}),(function(t,e){t.setTime(+t+36e5*e)}),(function(t,e){return(e-t)/36e5}),(function(t){return t.getHours()})),ag=ig,og=ig.range,sg=By((function(t){t.setTime(t-t.getMilliseconds()-1e3*t.getSeconds())}),(function(t,e){t.setTime(+t+6e4*e)}),(function(t,e){return(e-t)/6e4}),(function(t){return t.getMinutes()})),cg=sg,ug=sg.range,lg=By((function(t){t.setTime(t-t.getMilliseconds())}),(function(t,e){t.setTime(+t+1e3*e)}),(function(t,e){return(e-t)/1e3}),(function(t){return t.getUTCSeconds()})),hg=lg,fg=lg.range,dg=By((function(){}),(function(t,e){t.setTime(+t+e)}),(function(t,e){return e-t}));dg.every=function(t){return t=Math.floor(t),isFinite(t)&&t>0?t>1?By((function(e){e.setTime(Math.floor(e/t)*t)}),(function(e,n){e.setTime(+e+n*t)}),(function(e,n){return(n-e)/t})):dg:null};var pg=dg,yg=dg.range;function gg(t){return By((function(e){e.setUTCDate(e.getUTCDate()-(e.getUTCDay()+7-t)%7),e.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCDate(t.getUTCDate()+7*e)}),(function(t,e){return(e-t)/6048e5}))}var vg=gg(0),mg=gg(1),bg=gg(2),_g=gg(3),xg=gg(4),kg=gg(5),wg=gg(6),Eg=vg.range,Tg=mg.range,Cg=bg.range,Ag=_g.range,Sg=xg.range,Mg=kg.range,Og=wg.range,Dg=By((function(t){t.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCDate(t.getUTCDate()+e)}),(function(t,e){return(e-t)/864e5}),(function(t){return t.getUTCDate()-1})),Ng=Dg,Bg=Dg.range,Lg=By((function(t){t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCFullYear(t.getUTCFullYear()+e)}),(function(t,e){return e.getUTCFullYear()-t.getUTCFullYear()}),(function(t){return t.getUTCFullYear()}));Lg.every=function(t){return isFinite(t=Math.floor(t))&&t>0?By((function(e){e.setUTCFullYear(Math.floor(e.getUTCFullYear()/t)*t),e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)}),(function(e,n){e.setUTCFullYear(e.getUTCFullYear()+n*t)})):null};var Fg=Lg,Pg=Lg.range;function Ig(t){if(0<=t.y&&t.y<100){var e=new Date(-1,t.m,t.d,t.H,t.M,t.S,t.L);return e.setFullYear(t.y),e}return new Date(t.y,t.m,t.d,t.H,t.M,t.S,t.L)}function jg(t){if(0<=t.y&&t.y<100){var e=new Date(Date.UTC(-1,t.m,t.d,t.H,t.M,t.S,t.L));return e.setUTCFullYear(t.y),e}return new Date(Date.UTC(t.y,t.m,t.d,t.H,t.M,t.S,t.L))}function Rg(t,e,n){return{y:t,m:e,d:n,H:0,M:0,S:0,L:0}}function Yg(t){var e=t.dateTime,n=t.date,r=t.time,i=t.periods,a=t.days,o=t.shortDays,s=t.months,c=t.shortMonths,u=Qg(i),l=Kg(i),h=Qg(a),f=Kg(a),d=Qg(o),p=Kg(o),y=Qg(s),g=Kg(s),v=Qg(c),m=Kg(c),b={a:function(t){return o[t.getDay()]},A:function(t){return a[t.getDay()]},b:function(t){return c[t.getMonth()]},B:function(t){return s[t.getMonth()]},c:null,d:_v,e:_v,f:Tv,H:xv,I:kv,j:wv,L:Ev,m:Cv,M:Av,p:function(t){return i[+(t.getHours()>=12)]},q:function(t){return 1+~~(t.getMonth()/3)},Q:em,s:nm,S:Sv,u:Mv,U:Ov,V:Dv,w:Nv,W:Bv,x:null,X:null,y:Lv,Y:Fv,Z:Pv,"%":tm},_={a:function(t){return o[t.getUTCDay()]},A:function(t){return a[t.getUTCDay()]},b:function(t){return c[t.getUTCMonth()]},B:function(t){return s[t.getUTCMonth()]},c:null,d:Iv,e:Iv,f:Uv,H:jv,I:Rv,j:Yv,L:zv,m:$v,M:Wv,p:function(t){return i[+(t.getUTCHours()>=12)]},q:function(t){return 1+~~(t.getUTCMonth()/3)},Q:em,s:nm,S:Hv,u:Vv,U:Gv,V:qv,w:Xv,W:Zv,x:null,X:null,y:Jv,Y:Qv,Z:Kv,"%":tm},x={a:function(t,e,n){var r=d.exec(e.slice(n));return r?(t.w=p[r[0].toLowerCase()],n+r[0].length):-1},A:function(t,e,n){var r=h.exec(e.slice(n));return r?(t.w=f[r[0].toLowerCase()],n+r[0].length):-1},b:function(t,e,n){var r=v.exec(e.slice(n));return r?(t.m=m[r[0].toLowerCase()],n+r[0].length):-1},B:function(t,e,n){var r=y.exec(e.slice(n));return r?(t.m=g[r[0].toLowerCase()],n+r[0].length):-1},c:function(t,n,r){return E(t,e,n,r)},d:lv,e:lv,f:gv,H:fv,I:fv,j:hv,L:yv,m:uv,M:dv,p:function(t,e,n){var r=u.exec(e.slice(n));return r?(t.p=l[r[0].toLowerCase()],n+r[0].length):-1},q:cv,Q:mv,s:bv,S:pv,u:ev,U:nv,V:rv,w:tv,W:iv,x:function(t,e,r){return E(t,n,e,r)},X:function(t,e,n){return E(t,r,e,n)},y:ov,Y:av,Z:sv,"%":vv};function k(t,e){return function(n){var r,i,a,o=[],s=-1,c=0,u=t.length;for(n instanceof Date||(n=new Date(+n));++s53)return null;"w"in a||(a.w=1),"Z"in a?(i=(r=jg(Rg(a.y,0,1))).getUTCDay(),r=i>4||0===i?mg.ceil(r):mg(r),r=Ng.offset(r,7*(a.V-1)),a.y=r.getUTCFullYear(),a.m=r.getUTCMonth(),a.d=r.getUTCDate()+(a.w+6)%7):(i=(r=Ig(Rg(a.y,0,1))).getDay(),r=i>4||0===i?Uy.ceil(r):Uy(r),r=ng.offset(r,7*(a.V-1)),a.y=r.getFullYear(),a.m=r.getMonth(),a.d=r.getDate()+(a.w+6)%7)}else("W"in a||"U"in a)&&("w"in a||(a.w="u"in a?a.u%7:"W"in a?1:0),i="Z"in a?jg(Rg(a.y,0,1)).getUTCDay():Ig(Rg(a.y,0,1)).getDay(),a.m=0,a.d="W"in a?(a.w+6)%7+7*a.W-(i+5)%7:a.w+7*a.U-(i+6)%7);return"Z"in a?(a.H+=a.Z/100|0,a.M+=a.Z%100,jg(a)):Ig(a)}}function E(t,e,n,r){for(var i,a,o=0,s=e.length,c=n.length;o=c)return-1;if(37===(i=e.charCodeAt(o++))){if(i=e.charAt(o++),!(a=x[i in Vg?e.charAt(o++):i])||(r=a(t,n,r))<0)return-1}else if(i!=n.charCodeAt(r++))return-1}return r}return(b.x=k(n,b),b.X=k(r,b),b.c=k(e,b),_.x=k(n,_),_.X=k(r,_),_.c=k(e,_),{format:function(t){var e=k(t+="",b);return e.toString=function(){return t},e},parse:function(t){var e=w(t+="",!1);return e.toString=function(){return t},e},utcFormat:function(t){var e=k(t+="",_);return e.toString=function(){return t},e},utcParse:function(t){var e=w(t+="",!0);return e.toString=function(){return t},e}})}var zg,Ug,$g,Wg,Hg,Vg={"-":"",_:" ",0:"0"},Gg=/^\s*\d+/,qg=/^%/,Xg=/[\\^$*+?|[\]().{}]/g;function Zg(t,e,n){var r=t<0?"-":"",i=(r?-t:t)+"",a=i.length;return r+(a68?1900:2e3),n+r[0].length):-1}function sv(t,e,n){var r=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(e.slice(n,n+6));return r?(t.Z=r[1]?0:-(r[2]+(r[3]||"00")),n+r[0].length):-1}function cv(t,e,n){var r=Gg.exec(e.slice(n,n+1));return r?(t.q=3*r[0]-3,n+r[0].length):-1}function uv(t,e,n){var r=Gg.exec(e.slice(n,n+2));return r?(t.m=r[0]-1,n+r[0].length):-1}function lv(t,e,n){var r=Gg.exec(e.slice(n,n+2));return r?(t.d=+r[0],n+r[0].length):-1}function hv(t,e,n){var r=Gg.exec(e.slice(n,n+3));return r?(t.m=0,t.d=+r[0],n+r[0].length):-1}function fv(t,e,n){var r=Gg.exec(e.slice(n,n+2));return r?(t.H=+r[0],n+r[0].length):-1}function dv(t,e,n){var r=Gg.exec(e.slice(n,n+2));return r?(t.M=+r[0],n+r[0].length):-1}function pv(t,e,n){var r=Gg.exec(e.slice(n,n+2));return r?(t.S=+r[0],n+r[0].length):-1}function yv(t,e,n){var r=Gg.exec(e.slice(n,n+3));return r?(t.L=+r[0],n+r[0].length):-1}function gv(t,e,n){var r=Gg.exec(e.slice(n,n+6));return r?(t.L=Math.floor(r[0]/1e3),n+r[0].length):-1}function vv(t,e,n){var r=qg.exec(e.slice(n,n+1));return r?n+r[0].length:-1}function mv(t,e,n){var r=Gg.exec(e.slice(n));return r?(t.Q=+r[0],n+r[0].length):-1}function bv(t,e,n){var r=Gg.exec(e.slice(n));return r?(t.s=+r[0],n+r[0].length):-1}function _v(t,e){return Zg(t.getDate(),e,2)}function xv(t,e){return Zg(t.getHours(),e,2)}function kv(t,e){return Zg(t.getHours()%12||12,e,2)}function wv(t,e){return Zg(1+ng.count(Fy(t),t),e,3)}function Ev(t,e){return Zg(t.getMilliseconds(),e,3)}function Tv(t,e){return Ev(t,e)+"000"}function Cv(t,e){return Zg(t.getMonth()+1,e,2)}function Av(t,e){return Zg(t.getMinutes(),e,2)}function Sv(t,e){return Zg(t.getSeconds(),e,2)}function Mv(t){var e=t.getDay();return 0===e?7:e}function Ov(t,e){return Zg(zy.count(Fy(t)-1,t),e,2)}function Dv(t,e){var n=t.getDay();return t=n>=4||0===n?Hy(t):Hy.ceil(t),Zg(Hy.count(Fy(t),t)+(4===Fy(t).getDay()),e,2)}function Nv(t){return t.getDay()}function Bv(t,e){return Zg(Uy.count(Fy(t)-1,t),e,2)}function Lv(t,e){return Zg(t.getFullYear()%100,e,2)}function Fv(t,e){return Zg(t.getFullYear()%1e4,e,4)}function Pv(t){var e=t.getTimezoneOffset();return(e>0?"-":(e*=-1,"+"))+Zg(e/60|0,"0",2)+Zg(e%60,"0",2)}function Iv(t,e){return Zg(t.getUTCDate(),e,2)}function jv(t,e){return Zg(t.getUTCHours(),e,2)}function Rv(t,e){return Zg(t.getUTCHours()%12||12,e,2)}function Yv(t,e){return Zg(1+Ng.count(Fg(t),t),e,3)}function zv(t,e){return Zg(t.getUTCMilliseconds(),e,3)}function Uv(t,e){return zv(t,e)+"000"}function $v(t,e){return Zg(t.getUTCMonth()+1,e,2)}function Wv(t,e){return Zg(t.getUTCMinutes(),e,2)}function Hv(t,e){return Zg(t.getUTCSeconds(),e,2)}function Vv(t){var e=t.getUTCDay();return 0===e?7:e}function Gv(t,e){return Zg(vg.count(Fg(t)-1,t),e,2)}function qv(t,e){var n=t.getUTCDay();return t=n>=4||0===n?xg(t):xg.ceil(t),Zg(xg.count(Fg(t),t)+(4===Fg(t).getUTCDay()),e,2)}function Xv(t){return t.getUTCDay()}function Zv(t,e){return Zg(mg.count(Fg(t)-1,t),e,2)}function Jv(t,e){return Zg(t.getUTCFullYear()%100,e,2)}function Qv(t,e){return Zg(t.getUTCFullYear()%1e4,e,4)}function Kv(){return"+0000"}function tm(){return"%"}function em(t){return+t}function nm(t){return Math.floor(+t/1e3)}function rm(t){return zg=Yg(t),Ug=zg.format,$g=zg.parse,Wg=zg.utcFormat,Hg=zg.utcParse,zg}rm({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});function im(t){return new Date(t)}function am(t){return t instanceof Date?+t:+new Date(+t)}function om(t,e,n,r,a,o,s,c,u){var l=iy(Jp,Jp),h=l.invert,f=l.domain,d=u(".%L"),p=u(":%S"),y=u("%I:%M"),g=u("%I %p"),v=u("%a %d"),m=u("%b %d"),b=u("%B"),_=u("%Y"),x=[[s,1,1e3],[s,5,5e3],[s,15,15e3],[s,30,3e4],[o,1,6e4],[o,5,3e5],[o,15,9e5],[o,30,18e5],[a,1,36e5],[a,3,108e5],[a,6,216e5],[a,12,432e5],[r,1,864e5],[r,2,1728e5],[n,1,6048e5],[e,1,2592e6],[e,3,7776e6],[t,1,31536e6]];function k(i){return(s(i)1)&&(t-=Math.floor(t));var e=Math.abs(t-.5);return qb.h=360*t-100,qb.s=1.5-1.5*e,qb.l=.8-.9*e,qb+""},Zb=Ge(),Jb=Math.PI/3,Qb=2*Math.PI/3,Kb=function(t){var e;return t=(.5-t)*Math.PI,Zb.r=255*(e=Math.sin(t))*e,Zb.g=255*(e=Math.sin(t+Jb))*e,Zb.b=255*(e=Math.sin(t+Qb))*e,Zb+""},t_=function(t){return t=Math.max(0,Math.min(1,t)),"rgb("+Math.max(0,Math.min(255,Math.round(34.61+t*(1172.33-t*(10793.56-t*(33300.12-t*(38394.49-14825.05*t)))))))+", "+Math.max(0,Math.min(255,Math.round(23.31+t*(557.33+t*(1225.33-t*(3574.96-t*(1073.77+707.56*t)))))))+", "+Math.max(0,Math.min(255,Math.round(27.2+t*(3211.1-t*(15327.97-t*(27814-t*(22569.18-6838.66*t)))))))+")"};function e_(t){var e=t.length;return function(n){return t[Math.max(0,Math.min(e-1,Math.floor(n*e)))]}}var n_=e_(Nm("44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725")),r_=e_(Nm("00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf")),i_=e_(Nm("00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4")),a_=e_(Nm("0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921")),o_=function(t){return ke(ne(t).call(document.documentElement))},s_=0;function c_(){return new u_}function u_(){this._="@"+(++s_).toString(36)}u_.prototype=c_.prototype={constructor:u_,get:function(t){for(var e=this._;!(e in t);)if(!(t=t.parentNode))return;return t[e]},set:function(t,e){return t[this._]=e},remove:function(t){return this._ in t&&delete t[this._]},toString:function(){return this._}};var l_=function(t){return"string"==typeof t?new be([document.querySelectorAll(t)],[document.documentElement]):new be([null==t?[]:t],me)},h_=function(t,e){null==e&&(e=Mn().touches);for(var n=0,r=e?e.length:0,i=new Array(r);n1?0:t<-1?__:Math.acos(t)}function E_(t){return t>=1?x_:t<=-1?-x_:Math.asin(t)}function T_(t){return t.innerRadius}function C_(t){return t.outerRadius}function A_(t){return t.startAngle}function S_(t){return t.endAngle}function M_(t){return t&&t.padAngle}function O_(t,e,n,r,i,a,o,s){var c=n-t,u=r-e,l=o-i,h=s-a,f=h*c-l*u;if(!(f*f<1e-12))return[t+(f=(l*(e-a)-h*(t-i))/f)*c,e+f*u]}function D_(t,e,n,r,i,a,o){var s=t-n,c=e-r,u=(o?a:-a)/b_(s*s+c*c),l=u*c,h=-u*s,f=t+l,d=e+h,p=n+l,y=r+h,g=(f+p)/2,v=(d+y)/2,m=p-f,b=y-d,_=m*m+b*b,x=i-a,k=f*y-p*d,w=(b<0?-1:1)*b_(g_(0,x*x*_-k*k)),E=(k*b-m*w)/_,T=(-k*m-b*w)/_,C=(k*b+m*w)/_,A=(-k*m+b*w)/_,S=E-g,M=T-v,O=C-g,D=A-v;return S*S+M*M>O*O+D*D&&(E=C,T=A),{cx:E,cy:T,x01:-l,y01:-h,x11:E*(i/x-1),y11:T*(i/x-1)}}var N_=function(){var t=T_,e=C_,n=f_(0),r=null,i=A_,a=S_,o=M_,s=null;function c(){var c,u,l=+t.apply(this,arguments),h=+e.apply(this,arguments),f=i.apply(this,arguments)-x_,d=a.apply(this,arguments)-x_,p=d_(d-f),y=d>f;if(s||(s=c=Ui()),h1e-12)if(p>k_-1e-12)s.moveTo(h*y_(f),h*m_(f)),s.arc(0,0,h,f,d,!y),l>1e-12&&(s.moveTo(l*y_(d),l*m_(d)),s.arc(0,0,l,d,f,y));else{var g,v,m=f,b=d,_=f,x=d,k=p,w=p,E=o.apply(this,arguments)/2,T=E>1e-12&&(r?+r.apply(this,arguments):b_(l*l+h*h)),C=v_(d_(h-l)/2,+n.apply(this,arguments)),A=C,S=C;if(T>1e-12){var M=E_(T/l*m_(E)),O=E_(T/h*m_(E));(k-=2*M)>1e-12?(_+=M*=y?1:-1,x-=M):(k=0,_=x=(f+d)/2),(w-=2*O)>1e-12?(m+=O*=y?1:-1,b-=O):(w=0,m=b=(f+d)/2)}var D=h*y_(m),N=h*m_(m),B=l*y_(x),L=l*m_(x);if(C>1e-12){var F,P=h*y_(b),I=h*m_(b),j=l*y_(_),R=l*m_(_);if(p<__&&(F=O_(D,N,j,R,P,I,B,L))){var Y=D-F[0],z=N-F[1],U=P-F[0],$=I-F[1],W=1/m_(w_((Y*U+z*$)/(b_(Y*Y+z*z)*b_(U*U+$*$)))/2),H=b_(F[0]*F[0]+F[1]*F[1]);A=v_(C,(l-H)/(W-1)),S=v_(C,(h-H)/(W+1))}}w>1e-12?S>1e-12?(g=D_(j,R,D,N,h,S,y),v=D_(P,I,B,L,h,S,y),s.moveTo(g.cx+g.x01,g.cy+g.y01),S1e-12&&k>1e-12?A>1e-12?(g=D_(B,L,P,I,l,-A,y),v=D_(D,N,j,R,l,-A,y),s.lineTo(g.cx+g.x01,g.cy+g.y01),A=l;--h)s.point(g[h],v[h]);s.lineEnd(),s.areaEnd()}y&&(g[u]=+t(f,u,c),v[u]=+n(f,u,c),s.point(e?+e(f,u,c):g[u],r?+r(f,u,c):v[u]))}if(d)return s=null,d+""||null}function u(){return I_().defined(i).curve(o).context(a)}return c.x=function(n){return arguments.length?(t="function"==typeof n?n:f_(+n),e=null,c):t},c.x0=function(e){return arguments.length?(t="function"==typeof e?e:f_(+e),c):t},c.x1=function(t){return arguments.length?(e=null==t?null:"function"==typeof t?t:f_(+t),c):e},c.y=function(t){return arguments.length?(n="function"==typeof t?t:f_(+t),r=null,c):n},c.y0=function(t){return arguments.length?(n="function"==typeof t?t:f_(+t),c):n},c.y1=function(t){return arguments.length?(r=null==t?null:"function"==typeof t?t:f_(+t),c):r},c.lineX0=c.lineY0=function(){return u().x(t).y(n)},c.lineY1=function(){return u().x(t).y(r)},c.lineX1=function(){return u().x(e).y(n)},c.defined=function(t){return arguments.length?(i="function"==typeof t?t:f_(!!t),c):i},c.curve=function(t){return arguments.length?(o=t,null!=a&&(s=o(a)),c):o},c.context=function(t){return arguments.length?(null==t?a=s=null:s=o(a=t),c):a},c},R_=function(t,e){return et?1:e>=t?0:NaN},Y_=function(t){return t},z_=function(){var t=Y_,e=R_,n=null,r=f_(0),i=f_(k_),a=f_(0);function o(o){var s,c,u,l,h,f=o.length,d=0,p=new Array(f),y=new Array(f),g=+r.apply(this,arguments),v=Math.min(k_,Math.max(-k_,i.apply(this,arguments)-g)),m=Math.min(Math.abs(v)/f,a.apply(this,arguments)),b=m*(v<0?-1:1);for(s=0;s0&&(d+=h);for(null!=e?p.sort((function(t,n){return e(y[t],y[n])})):null!=n&&p.sort((function(t,e){return n(o[t],o[e])})),s=0,u=d?(v-f*b)/d:0;s0?h*u:0)+b,y[c]={data:o[c],index:s,value:h,startAngle:g,endAngle:l,padAngle:m};return y}return o.value=function(e){return arguments.length?(t="function"==typeof e?e:f_(+e),o):t},o.sortValues=function(t){return arguments.length?(e=t,n=null,o):e},o.sort=function(t){return arguments.length?(n=t,e=null,o):n},o.startAngle=function(t){return arguments.length?(r="function"==typeof t?t:f_(+t),o):r},o.endAngle=function(t){return arguments.length?(i="function"==typeof t?t:f_(+t),o):i},o.padAngle=function(t){return arguments.length?(a="function"==typeof t?t:f_(+t),o):a},o},U_=W_(L_);function $_(t){this._curve=t}function W_(t){function e(e){return new $_(t(e))}return e._curve=t,e}function H_(t){var e=t.curve;return t.angle=t.x,delete t.x,t.radius=t.y,delete t.y,t.curve=function(t){return arguments.length?e(W_(t)):e()._curve},t}$_.prototype={areaStart:function(){this._curve.areaStart()},areaEnd:function(){this._curve.areaEnd()},lineStart:function(){this._curve.lineStart()},lineEnd:function(){this._curve.lineEnd()},point:function(t,e){this._curve.point(e*Math.sin(t),e*-Math.cos(t))}};var V_=function(){return H_(I_().curve(U_))},G_=function(){var t=j_().curve(U_),e=t.curve,n=t.lineX0,r=t.lineX1,i=t.lineY0,a=t.lineY1;return t.angle=t.x,delete t.x,t.startAngle=t.x0,delete t.x0,t.endAngle=t.x1,delete t.x1,t.radius=t.y,delete t.y,t.innerRadius=t.y0,delete t.y0,t.outerRadius=t.y1,delete t.y1,t.lineStartAngle=function(){return H_(n())},delete t.lineX0,t.lineEndAngle=function(){return H_(r())},delete t.lineX1,t.lineInnerRadius=function(){return H_(i())},delete t.lineY0,t.lineOuterRadius=function(){return H_(a())},delete t.lineY1,t.curve=function(t){return arguments.length?e(W_(t)):e()._curve},t},q_=function(t,e){return[(e=+e)*Math.cos(t-=Math.PI/2),e*Math.sin(t)]},X_=Array.prototype.slice;function Z_(t){return t.source}function J_(t){return t.target}function Q_(t){var e=Z_,n=J_,r=F_,i=P_,a=null;function o(){var o,s=X_.call(arguments),c=e.apply(this,s),u=n.apply(this,s);if(a||(a=o=Ui()),t(a,+r.apply(this,(s[0]=c,s)),+i.apply(this,s),+r.apply(this,(s[0]=u,s)),+i.apply(this,s)),o)return a=null,o+""||null}return o.source=function(t){return arguments.length?(e=t,o):e},o.target=function(t){return arguments.length?(n=t,o):n},o.x=function(t){return arguments.length?(r="function"==typeof t?t:f_(+t),o):r},o.y=function(t){return arguments.length?(i="function"==typeof t?t:f_(+t),o):i},o.context=function(t){return arguments.length?(a=null==t?null:t,o):a},o}function K_(t,e,n,r,i){t.moveTo(e,n),t.bezierCurveTo(e=(e+r)/2,n,e,i,r,i)}function tx(t,e,n,r,i){t.moveTo(e,n),t.bezierCurveTo(e,n=(n+i)/2,r,n,r,i)}function ex(t,e,n,r,i){var a=q_(e,n),o=q_(e,n=(n+i)/2),s=q_(r,n),c=q_(r,i);t.moveTo(a[0],a[1]),t.bezierCurveTo(o[0],o[1],s[0],s[1],c[0],c[1])}function nx(){return Q_(K_)}function rx(){return Q_(tx)}function ix(){var t=Q_(ex);return t.angle=t.x,delete t.x,t.radius=t.y,delete t.y,t}var ax={draw:function(t,e){var n=Math.sqrt(e/__);t.moveTo(n,0),t.arc(0,0,n,0,k_)}},ox={draw:function(t,e){var n=Math.sqrt(e/5)/2;t.moveTo(-3*n,-n),t.lineTo(-n,-n),t.lineTo(-n,-3*n),t.lineTo(n,-3*n),t.lineTo(n,-n),t.lineTo(3*n,-n),t.lineTo(3*n,n),t.lineTo(n,n),t.lineTo(n,3*n),t.lineTo(-n,3*n),t.lineTo(-n,n),t.lineTo(-3*n,n),t.closePath()}},sx=Math.sqrt(1/3),cx=2*sx,ux={draw:function(t,e){var n=Math.sqrt(e/cx),r=n*sx;t.moveTo(0,-n),t.lineTo(r,0),t.lineTo(0,n),t.lineTo(-r,0),t.closePath()}},lx=Math.sin(__/10)/Math.sin(7*__/10),hx=Math.sin(k_/10)*lx,fx=-Math.cos(k_/10)*lx,dx={draw:function(t,e){var n=Math.sqrt(.8908130915292852*e),r=hx*n,i=fx*n;t.moveTo(0,-n),t.lineTo(r,i);for(var a=1;a<5;++a){var o=k_*a/5,s=Math.cos(o),c=Math.sin(o);t.lineTo(c*n,-s*n),t.lineTo(s*r-c*i,c*r+s*i)}t.closePath()}},px={draw:function(t,e){var n=Math.sqrt(e),r=-n/2;t.rect(r,r,n,n)}},yx=Math.sqrt(3),gx={draw:function(t,e){var n=-Math.sqrt(e/(3*yx));t.moveTo(0,2*n),t.lineTo(-yx*n,-n),t.lineTo(yx*n,-n),t.closePath()}},vx=Math.sqrt(3)/2,mx=1/Math.sqrt(12),bx=3*(mx/2+1),_x={draw:function(t,e){var n=Math.sqrt(e/bx),r=n/2,i=n*mx,a=r,o=n*mx+n,s=-a,c=o;t.moveTo(r,i),t.lineTo(a,o),t.lineTo(s,c),t.lineTo(-.5*r-vx*i,vx*r+-.5*i),t.lineTo(-.5*a-vx*o,vx*a+-.5*o),t.lineTo(-.5*s-vx*c,vx*s+-.5*c),t.lineTo(-.5*r+vx*i,-.5*i-vx*r),t.lineTo(-.5*a+vx*o,-.5*o-vx*a),t.lineTo(-.5*s+vx*c,-.5*c-vx*s),t.closePath()}},xx=[ax,ox,ux,px,dx,gx,_x],kx=function(){var t=f_(ax),e=f_(64),n=null;function r(){var r;if(n||(n=r=Ui()),t.apply(this,arguments).draw(n,+e.apply(this,arguments)),r)return n=null,r+""||null}return r.type=function(e){return arguments.length?(t="function"==typeof e?e:f_(e),r):t},r.size=function(t){return arguments.length?(e="function"==typeof t?t:f_(+t),r):e},r.context=function(t){return arguments.length?(n=null==t?null:t,r):n},r},wx=function(){};function Ex(t,e,n){t._context.bezierCurveTo((2*t._x0+t._x1)/3,(2*t._y0+t._y1)/3,(t._x0+2*t._x1)/3,(t._y0+2*t._y1)/3,(t._x0+4*t._x1+e)/6,(t._y0+4*t._y1+n)/6)}function Tx(t){this._context=t}Tx.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:Ex(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:Ex(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}};var Cx=function(t){return new Tx(t)};function Ax(t){this._context=t}Ax.prototype={areaStart:wx,areaEnd:wx,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x2,this._y2),this._context.closePath();break;case 2:this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break;case 3:this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4)}},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x2=t,this._y2=e;break;case 1:this._point=2,this._x3=t,this._y3=e;break;case 2:this._point=3,this._x4=t,this._y4=e,this._context.moveTo((this._x0+4*this._x1+t)/6,(this._y0+4*this._y1+e)/6);break;default:Ex(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}};var Sx=function(t){return new Ax(t)};function Mx(t){this._context=t}Mx.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var n=(this._x0+4*this._x1+t)/6,r=(this._y0+4*this._y1+e)/6;this._line?this._context.lineTo(n,r):this._context.moveTo(n,r);break;case 3:this._point=4;default:Ex(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}};var Ox=function(t){return new Mx(t)};function Dx(t,e){this._basis=new Tx(t),this._beta=e}Dx.prototype={lineStart:function(){this._x=[],this._y=[],this._basis.lineStart()},lineEnd:function(){var t=this._x,e=this._y,n=t.length-1;if(n>0)for(var r,i=t[0],a=e[0],o=t[n]-i,s=e[n]-a,c=-1;++c<=n;)r=c/n,this._basis.point(this._beta*t[c]+(1-this._beta)*(i+r*o),this._beta*e[c]+(1-this._beta)*(a+r*s));this._x=this._y=null,this._basis.lineEnd()},point:function(t,e){this._x.push(+t),this._y.push(+e)}};var Nx=function t(e){function n(t){return 1===e?new Tx(t):new Dx(t,e)}return n.beta=function(e){return t(+e)},n}(.85);function Bx(t,e,n){t._context.bezierCurveTo(t._x1+t._k*(t._x2-t._x0),t._y1+t._k*(t._y2-t._y0),t._x2+t._k*(t._x1-e),t._y2+t._k*(t._y1-n),t._x2,t._y2)}function Lx(t,e){this._context=t,this._k=(1-e)/6}Lx.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:Bx(this,this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2,this._x1=t,this._y1=e;break;case 2:this._point=3;default:Bx(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var Fx=function t(e){function n(t){return new Lx(t,e)}return n.tension=function(e){return t(+e)},n}(0);function Px(t,e){this._context=t,this._k=(1-e)/6}Px.prototype={areaStart:wx,areaEnd:wx,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:Bx(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var Ix=function t(e){function n(t){return new Px(t,e)}return n.tension=function(e){return t(+e)},n}(0);function jx(t,e){this._context=t,this._k=(1-e)/6}jx.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:Bx(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var Rx=function t(e){function n(t){return new jx(t,e)}return n.tension=function(e){return t(+e)},n}(0);function Yx(t,e,n){var r=t._x1,i=t._y1,a=t._x2,o=t._y2;if(t._l01_a>1e-12){var s=2*t._l01_2a+3*t._l01_a*t._l12_a+t._l12_2a,c=3*t._l01_a*(t._l01_a+t._l12_a);r=(r*s-t._x0*t._l12_2a+t._x2*t._l01_2a)/c,i=(i*s-t._y0*t._l12_2a+t._y2*t._l01_2a)/c}if(t._l23_a>1e-12){var u=2*t._l23_2a+3*t._l23_a*t._l12_a+t._l12_2a,l=3*t._l23_a*(t._l23_a+t._l12_a);a=(a*u+t._x1*t._l23_2a-e*t._l12_2a)/l,o=(o*u+t._y1*t._l23_2a-n*t._l12_2a)/l}t._context.bezierCurveTo(r,i,a,o,t._x2,t._y2)}function zx(t,e){this._context=t,this._alpha=e}zx.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){if(t=+t,e=+e,this._point){var n=this._x2-t,r=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3;default:Yx(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var Ux=function t(e){function n(t){return e?new zx(t,e):new Lx(t,0)}return n.alpha=function(e){return t(+e)},n}(.5);function $x(t,e){this._context=t,this._alpha=e}$x.prototype={areaStart:wx,areaEnd:wx,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,e){if(t=+t,e=+e,this._point){var n=this._x2-t,r=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:Yx(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var Wx=function t(e){function n(t){return e?new $x(t,e):new Px(t,0)}return n.alpha=function(e){return t(+e)},n}(.5);function Hx(t,e){this._context=t,this._alpha=e}Hx.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){if(t=+t,e=+e,this._point){var n=this._x2-t,r=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:Yx(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var Vx=function t(e){function n(t){return e?new Hx(t,e):new jx(t,0)}return n.alpha=function(e){return t(+e)},n}(.5);function Gx(t){this._context=t}Gx.prototype={areaStart:wx,areaEnd:wx,lineStart:function(){this._point=0},lineEnd:function(){this._point&&this._context.closePath()},point:function(t,e){t=+t,e=+e,this._point?this._context.lineTo(t,e):(this._point=1,this._context.moveTo(t,e))}};var qx=function(t){return new Gx(t)};function Xx(t){return t<0?-1:1}function Zx(t,e,n){var r=t._x1-t._x0,i=e-t._x1,a=(t._y1-t._y0)/(r||i<0&&-0),o=(n-t._y1)/(i||r<0&&-0),s=(a*i+o*r)/(r+i);return(Xx(a)+Xx(o))*Math.min(Math.abs(a),Math.abs(o),.5*Math.abs(s))||0}function Jx(t,e){var n=t._x1-t._x0;return n?(3*(t._y1-t._y0)/n-e)/2:e}function Qx(t,e,n){var r=t._x0,i=t._y0,a=t._x1,o=t._y1,s=(a-r)/3;t._context.bezierCurveTo(r+s,i+s*e,a-s,o-s*n,a,o)}function Kx(t){this._context=t}function tk(t){this._context=new ek(t)}function ek(t){this._context=t}function nk(t){return new Kx(t)}function rk(t){return new tk(t)}function ik(t){this._context=t}function ak(t){var e,n,r=t.length-1,i=new Array(r),a=new Array(r),o=new Array(r);for(i[0]=0,a[0]=2,o[0]=t[0]+2*t[1],e=1;e=0;--e)i[e]=(o[e]-i[e+1])/a[e];for(a[r-1]=(t[r]+i[r-1])/2,e=0;e=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:if(this._t<=0)this._context.lineTo(this._x,e),this._context.lineTo(t,e);else{var n=this._x*(1-this._t)+t*this._t;this._context.lineTo(n,this._y),this._context.lineTo(n,e)}}this._x=t,this._y=e}};var ck=function(t){return new sk(t,.5)};function uk(t){return new sk(t,0)}function lk(t){return new sk(t,1)}var hk=function(t,e){if((i=t.length)>1)for(var n,r,i,a=1,o=t[e[0]],s=o.length;a=0;)n[e]=e;return n};function dk(t,e){return t[e]}var pk=function(){var t=f_([]),e=fk,n=hk,r=dk;function i(i){var a,o,s=t.apply(this,arguments),c=i.length,u=s.length,l=new Array(u);for(a=0;a0){for(var n,r,i,a=0,o=t[0].length;a0)for(var n,r,i,a,o,s,c=0,u=t[e[0]].length;c0?(r[0]=a,r[1]=a+=i):i<0?(r[1]=o,r[0]=o+=i):(r[0]=0,r[1]=i)},vk=function(t,e){if((n=t.length)>0){for(var n,r=0,i=t[e[0]],a=i.length;r0&&(r=(n=t[e[0]]).length)>0){for(var n,r,i,a=0,o=1;oa&&(a=e,r=n);return r}var xk=function(t){var e=t.map(kk);return fk(t).sort((function(t,n){return e[t]-e[n]}))};function kk(t){for(var e,n=0,r=-1,i=t.length;++r0)){if(a/=f,f<0){if(a0){if(a>h)return;a>l&&(l=a)}if(a=r-c,f||!(a<0)){if(a/=f,f<0){if(a>h)return;a>l&&(l=a)}else if(f>0){if(a0)){if(a/=d,d<0){if(a0){if(a>h)return;a>l&&(l=a)}if(a=i-u,d||!(a<0)){if(a/=d,d<0){if(a>h)return;a>l&&(l=a)}else if(d>0){if(a0||h<1)||(l>0&&(t[0]=[c+l*f,u+l*d]),h<1&&(t[1]=[c+h*f,u+h*d]),!0)}}}}}function Uk(t,e,n,r,i){var a=t[1];if(a)return!0;var o,s,c=t[0],u=t.left,l=t.right,h=u[0],f=u[1],d=l[0],p=l[1],y=(h+d)/2,g=(f+p)/2;if(p===f){if(y=r)return;if(h>d){if(c){if(c[1]>=i)return}else c=[y,n];a=[y,i]}else{if(c){if(c[1]1)if(h>d){if(c){if(c[1]>=i)return}else c=[(n-s)/o,n];a=[(i-s)/o,i]}else{if(c){if(c[1]=r)return}else c=[e,o*e+s];a=[r,o*r+s]}else{if(c){if(c[0]=-lw)){var d=c*c+u*u,p=l*l+h*h,y=(h*d-u*p)/f,g=(c*p-l*d)/f,v=Gk.pop()||new qk;v.arc=t,v.site=i,v.x=y+o,v.y=(v.cy=g+s)+Math.sqrt(y*y+g*g),t.circle=v;for(var m=null,b=sw._;b;)if(v.yuw)s=s.L;else{if(!((i=a-iw(s,o))>uw)){r>-uw?(e=s.P,n=s):i>-uw?(e=s,n=s.N):e=n=s;break}if(!s.R){e=s;break}s=s.R}!function(t){ow[t.index]={site:t,halfedges:[]}}(t);var c=Kk(t);if(aw.insert(e,c),e||n){if(e===n)return Zk(e),n=Kk(e.site),aw.insert(c,n),c.edge=n.edge=jk(e.site,c.site),Xk(e),void Xk(n);if(n){Zk(e),Zk(n);var u=e.site,l=u[0],h=u[1],f=t[0]-l,d=t[1]-h,p=n.site,y=p[0]-l,g=p[1]-h,v=2*(f*g-d*y),m=f*f+d*d,b=y*y+g*g,_=[(g*m-d*b)/v+l,(f*b-y*m)/v+h];Yk(n.edge,u,p,_),c.edge=jk(u,t,null,_),n.edge=jk(t,p,null,_),Xk(e),Xk(n)}else c.edge=jk(e.site,c.site)}}function rw(t,e){var n=t.site,r=n[0],i=n[1],a=i-e;if(!a)return r;var o=t.P;if(!o)return-1/0;var s=(n=o.site)[0],c=n[1],u=c-e;if(!u)return s;var l=s-r,h=1/a-1/u,f=l/u;return h?(-f+Math.sqrt(f*f-2*h*(l*l/(-2*u)-c+u/2+i-a/2)))/h+r:(r+s)/2}function iw(t,e){var n=t.N;if(n)return rw(n,e);var r=t.site;return r[1]===e?r[0]:1/0}var aw,ow,sw,cw,uw=1e-6,lw=1e-12;function hw(t,e){return e[1]-t[1]||e[0]-t[0]}function fw(t,e){var n,r,i,a=t.sort(hw).pop();for(cw=[],ow=new Array(t.length),aw=new Ik,sw=new Ik;;)if(i=Vk,a&&(!i||a[1]uw||Math.abs(i[0][1]-i[1][1])>uw)||delete cw[a]}(o,s,c,u),function(t,e,n,r){var i,a,o,s,c,u,l,h,f,d,p,y,g=ow.length,v=!0;for(i=0;iuw||Math.abs(y-f)>uw)&&(c.splice(s,0,cw.push(Rk(o,d,Math.abs(p-t)uw?[t,Math.abs(h-t)uw?[Math.abs(f-r)uw?[n,Math.abs(h-n)uw?[Math.abs(f-e)=s)return null;var c=t-i.site[0],u=e-i.site[1],l=c*c+u*u;do{i=a.cells[r=o],o=null,i.halfedges.forEach((function(n){var r=a.edges[n],s=r.left;if(s!==i.site&&s||(s=r.right)){var c=t-s[0],u=e-s[1],h=c*c+u*u;hr?(r+i)/2:Math.min(0,r)||Math.max(0,i),o>a?(a+o)/2:Math.min(0,a)||Math.max(0,o))}var Aw=function(){var t,e,n=xw,r=kw,i=Cw,a=Ew,o=Tw,s=[0,1/0],c=[[-1/0,-1/0],[1/0,1/0]],u=250,l=fp,h=lt("start","zoom","end"),f=0;function d(t){t.property("__zoom",ww).on("wheel.zoom",_).on("mousedown.zoom",x).on("dblclick.zoom",k).filter(o).on("touchstart.zoom",w).on("touchmove.zoom",E).on("touchend.zoom touchcancel.zoom",T).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function p(t,e){return(e=Math.max(s[0],Math.min(s[1],e)))===t.k?t:new gw(e,t.x,t.y)}function y(t,e,n){var r=e[0]-n[0]*t.k,i=e[1]-n[1]*t.k;return r===t.x&&i===t.y?t:new gw(t.k,r,i)}function g(t){return[(+t[0][0]+ +t[1][0])/2,(+t[0][1]+ +t[1][1])/2]}function v(t,e,n){t.on("start.zoom",(function(){m(this,arguments).start()})).on("interrupt.zoom end.zoom",(function(){m(this,arguments).end()})).tween("zoom",(function(){var t=this,i=arguments,a=m(t,i),o=r.apply(t,i),s=null==n?g(o):"function"==typeof n?n.apply(t,i):n,c=Math.max(o[1][0]-o[0][0],o[1][1]-o[0][1]),u=t.__zoom,h="function"==typeof e?e.apply(t,i):e,f=l(u.invert(s).concat(c/u.k),h.invert(s).concat(c/h.k));return function(t){if(1===t)t=h;else{var e=f(t),n=c/e[2];t=new gw(n,s[0]-e[0]*n,s[1]-e[1]*n)}a.zoom(null,t)}}))}function m(t,e,n){return!n&&t.__zooming||new b(t,e)}function b(t,e){this.that=t,this.args=e,this.active=0,this.extent=r.apply(t,e),this.taps=0}function _(){if(n.apply(this,arguments)){var t=m(this,arguments),e=this.__zoom,r=Math.max(s[0],Math.min(s[1],e.k*Math.pow(2,a.apply(this,arguments)))),o=Nn(this);if(t.wheel)t.mouse[0][0]===o[0]&&t.mouse[0][1]===o[1]||(t.mouse[1]=e.invert(t.mouse[0]=o)),clearTimeout(t.wheel);else{if(e.k===r)return;t.mouse=[o,e.invert(o)],or(this),t.start()}_w(),t.wheel=setTimeout(u,150),t.zoom("mouse",i(y(p(e,r),t.mouse[0],t.mouse[1]),t.extent,c))}function u(){t.wheel=null,t.end()}}function x(){if(!e&&n.apply(this,arguments)){var t=m(this,arguments,!0),r=ke(ce.view).on("mousemove.zoom",u,!0).on("mouseup.zoom",l,!0),a=Nn(this),o=ce.clientX,s=ce.clientY;Te(ce.view),bw(),t.mouse=[a,this.__zoom.invert(a)],or(this),t.start()}function u(){if(_w(),!t.moved){var e=ce.clientX-o,n=ce.clientY-s;t.moved=e*e+n*n>f}t.zoom("mouse",i(y(t.that.__zoom,t.mouse[0]=Nn(t.that),t.mouse[1]),t.extent,c))}function l(){r.on("mousemove.zoom mouseup.zoom",null),Ce(ce.view,t.moved),_w(),t.end()}}function k(){if(n.apply(this,arguments)){var t=this.__zoom,e=Nn(this),a=t.invert(e),o=t.k*(ce.shiftKey?.5:2),s=i(y(p(t,o),e,a),r.apply(this,arguments),c);_w(),u>0?ke(this).transition().duration(u).call(v,s,e):ke(this).call(d.transform,s)}}function w(){if(n.apply(this,arguments)){var e,r,i,a,o=ce.touches,s=o.length,c=m(this,arguments,ce.changedTouches.length===s);for(bw(),r=0;rh&&S.push("'"+this.terminals_[T]+"'");O=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+S.join(", ")+", got '"+(this.terminals_[_]||_)+"'":"Parse error on line "+(c+1)+": Unexpected "+(_==f?"end of input":"'"+(this.terminals_[_]||_)+"'"),this.parseError(O,{text:p.match,token:this.terminals_[_]||_,line:p.yylineno,loc:v,expected:S})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+_);switch(w[0]){case 1:n.push(_),i.push(p.yytext),a.push(p.yylloc),n.push(w[1]),_=null,x?(_=x,x=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,v=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[w[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},m&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(E=this.performAction.apply(M,[s,u,c,y.yy,w[1],i,a].concat(d))))return E;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[w[1]][0]),i.push(M.$),a.push(M._$),A=o[n[n.length-2]][n[n.length-1]],n.push(A);break;case 3:return!0}}return!0}},M={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),56;case 1:return this.begin("type_directive"),57;case 2:return this.popState(),this.begin("arg_directive"),14;case 3:return this.popState(),this.popState(),59;case 4:return 58;case 5:return 5;case 6:case 7:case 8:case 9:case 10:break;case 11:return this.begin("ID"),16;case 12:return e.yytext=e.yytext.trim(),this.begin("ALIAS"),48;case 13:return this.popState(),this.popState(),this.begin("LINE"),18;case 14:return this.popState(),this.popState(),5;case 15:return this.begin("LINE"),27;case 16:return this.begin("LINE"),29;case 17:return this.begin("LINE"),30;case 18:return this.begin("LINE"),31;case 19:return this.begin("LINE"),36;case 20:return this.begin("LINE"),33;case 21:return this.begin("LINE"),35;case 22:return this.popState(),19;case 23:return 28;case 24:return 43;case 25:return 44;case 26:return 39;case 27:return 37;case 28:return this.begin("ID"),22;case 29:return this.begin("ID"),23;case 30:return 25;case 31:return 7;case 32:return 21;case 33:return 42;case 34:return 5;case 35:return e.yytext=e.yytext.trim(),48;case 36:return 51;case 37:return 52;case 38:return 49;case 39:return 50;case 40:return 53;case 41:return 54;case 42:return 55;case 43:return 46;case 44:return 47;case 45:return 5;case 46:return"INVALID"}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:participant\b)/i,/^(?:[^\->:\n,;]+?(?=((?!\n)\s)+as(?!\n)\s|[#\n;]|$))/i,/^(?:as\b)/i,/^(?:(?:))/i,/^(?:loop\b)/i,/^(?:rect\b)/i,/^(?:opt\b)/i,/^(?:alt\b)/i,/^(?:else\b)/i,/^(?:par\b)/i,/^(?:and\b)/i,/^(?:(?:[:]?(?:no)?wrap)?[^#\n;]*)/i,/^(?:end\b)/i,/^(?:left of\b)/i,/^(?:right of\b)/i,/^(?:over\b)/i,/^(?:note\b)/i,/^(?:activate\b)/i,/^(?:deactivate\b)/i,/^(?:title\b)/i,/^(?:sequenceDiagram\b)/i,/^(?:autonumber\b)/i,/^(?:,)/i,/^(?:;)/i,/^(?:[^\+\->:\n,;]+((?!(-x|--x))[\-]*[^\+\->:\n,;]+)*)/i,/^(?:->>)/i,/^(?:-->>)/i,/^(?:->)/i,/^(?:-->)/i,/^(?:-[x])/i,/^(?:--[x])/i,/^(?::(?:(?:no)?wrap)?[^#\n;]+)/i,/^(?:\+)/i,/^(?:-)/i,/^(?:$)/i,/^(?:.)/i],conditions:{open_directive:{rules:[1,8],inclusive:!1},type_directive:{rules:[2,3,8],inclusive:!1},arg_directive:{rules:[3,4,8],inclusive:!1},ID:{rules:[7,8,12],inclusive:!1},ALIAS:{rules:[7,8,13,14],inclusive:!1},LINE:{rules:[7,8,22],inclusive:!1},INITIAL:{rules:[0,5,6,8,9,10,11,15,16,17,18,19,20,21,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46],inclusive:!0}}};function O(){this.yy={}}return S.lexer=M,O.prototype=S,S.Parser=O,new O}();e.parser=i,e.Parser=i.Parser,e.parse=function(){return i.parse.apply(i,arguments)},e.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),t.exit(1));var i=n(19).readFileSync(n(20).normalize(r[1]),"utf8");return e.parser.parse(i)},n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(this,n(14),n(7)(t))},function(t,e,n){var r=n(198);t.exports={Graph:r.Graph,json:n(301),alg:n(302),version:r.version}},function(t,e,n){var r;try{r={cloneDeep:n(313),constant:n(86),defaults:n(154),each:n(87),filter:n(128),find:n(314),flatten:n(156),forEach:n(126),forIn:n(319),has:n(93),isUndefined:n(139),last:n(320),map:n(140),mapValues:n(321),max:n(322),merge:n(324),min:n(329),minBy:n(330),now:n(331),pick:n(161),range:n(162),reduce:n(142),sortBy:n(338),uniqueId:n(163),values:n(147),zipObject:n(343)}}catch(t){}r||(r=window._),t.exports=r},function(t,e){var n=Array.isArray;t.exports=n},function(t,e,n){ +/** + * @license + * Copyright (c) 2012-2013 Chris Pettitt + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +t.exports={graphlib:n(311),dagre:n(153),intersect:n(368),render:n(370),util:n(12),version:n(382)}},function(t,e){t.exports=function(t){return t.webpackPolyfill||(t.deprecate=function(){},t.paths=[],t.children||(t.children=[]),Object.defineProperty(t,"loaded",{enumerable:!0,get:function(){return t.l}}),Object.defineProperty(t,"id",{enumerable:!0,get:function(){return t.i}}),t.webpackPolyfill=1),t}},function(t,e,n){"use strict";var r=n(4),i=n(17).Graph;function a(t,e,n,i){var a;do{a=r.uniqueId(i)}while(t.hasNode(a));return n.dummy=e,t.setNode(a,n),a}function o(t){return r.max(r.map(t.nodes(),(function(e){var n=t.node(e).rank;if(!r.isUndefined(n))return n})))}t.exports={addDummyNode:a,simplify:function(t){var e=(new i).setGraph(t.graph());return r.forEach(t.nodes(),(function(n){e.setNode(n,t.node(n))})),r.forEach(t.edges(),(function(n){var r=e.edge(n.v,n.w)||{weight:0,minlen:1},i=t.edge(n);e.setEdge(n.v,n.w,{weight:r.weight+i.weight,minlen:Math.max(r.minlen,i.minlen)})})),e},asNonCompoundGraph:function(t){var e=new i({multigraph:t.isMultigraph()}).setGraph(t.graph());return r.forEach(t.nodes(),(function(n){t.children(n).length||e.setNode(n,t.node(n))})),r.forEach(t.edges(),(function(n){e.setEdge(n,t.edge(n))})),e},successorWeights:function(t){var e=r.map(t.nodes(),(function(e){var n={};return r.forEach(t.outEdges(e),(function(e){n[e.w]=(n[e.w]||0)+t.edge(e).weight})),n}));return r.zipObject(t.nodes(),e)},predecessorWeights:function(t){var e=r.map(t.nodes(),(function(e){var n={};return r.forEach(t.inEdges(e),(function(e){n[e.v]=(n[e.v]||0)+t.edge(e).weight})),n}));return r.zipObject(t.nodes(),e)},intersectRect:function(t,e){var n,r,i=t.x,a=t.y,o=e.x-i,s=e.y-a,c=t.width/2,u=t.height/2;if(!o&&!s)throw new Error("Not possible to find intersection inside of the rectangle");Math.abs(s)*c>Math.abs(o)*u?(s<0&&(u=-u),n=u*o/s,r=u):(o<0&&(c=-c),n=c,r=c*s/o);return{x:i+n,y:a+r}},buildLayerMatrix:function(t){var e=r.map(r.range(o(t)+1),(function(){return[]}));return r.forEach(t.nodes(),(function(n){var i=t.node(n),a=i.rank;r.isUndefined(a)||(e[a][i.order]=n)})),e},normalizeRanks:function(t){var e=r.min(r.map(t.nodes(),(function(e){return t.node(e).rank})));r.forEach(t.nodes(),(function(n){var i=t.node(n);r.has(i,"rank")&&(i.rank-=e)}))},removeEmptyRanks:function(t){var e=r.min(r.map(t.nodes(),(function(e){return t.node(e).rank}))),n=[];r.forEach(t.nodes(),(function(r){var i=t.node(r).rank-e;n[i]||(n[i]=[]),n[i].push(r)}));var i=0,a=t.graph().nodeRankFactor;r.forEach(n,(function(e,n){r.isUndefined(e)&&n%a!=0?--i:i&&r.forEach(e,(function(e){t.node(e).rank+=i}))}))},addBorderNode:function(t,e,n,r){var i={width:0,height:0};arguments.length>=4&&(i.rank=n,i.order=r);return a(t,"border",i,e)},maxRank:o,partition:function(t,e){var n={lhs:[],rhs:[]};return r.forEach(t,(function(t){e(t)?n.lhs.push(t):n.rhs.push(t)})),n},time:function(t,e){var n=r.now();try{return e()}finally{console.log(t+" time: "+(r.now()-n)+"ms")}},notime:function(t,e){return e()}}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(173),i=n(174),a=n(175),o={channel:r.default,lang:i.default,unit:a.default};e.default=o},function(t,e,n){var r;try{r={clone:n(199),constant:n(86),each:n(87),filter:n(128),has:n(93),isArray:n(5),isEmpty:n(276),isFunction:n(38),isUndefined:n(139),keys:n(30),map:n(140),reduce:n(142),size:n(279),transform:n(285),union:n(286),values:n(147)}}catch(t){}r||(r=window._),t.exports=r},function(t,e){t.exports=function(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}},function(t,e,n){var r=n(44);t.exports={isSubgraph:function(t,e){return!!t.children(e).length},edgeToId:function(t){return a(t.v)+":"+a(t.w)+":"+a(t.name)},applyStyle:function(t,e){e&&t.attr("style",e)},applyClass:function(t,e,n){e&&t.attr("class",e).attr("class",n+" "+t.attr("class"))},applyTransition:function(t,e){var n=e.graph();if(r.isPlainObject(n)){var i=n.transition;if(r.isFunction(i))return i(t)}return t}};var i=/:/g;function a(t){return t?String(t).replace(i,"\\:"):""}},function(t,e,n){(function(t,r){var i=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[1,7],n=[1,6],r=[1,14],i=[1,25],a=[1,28],o=[1,26],s=[1,27],c=[1,29],u=[1,30],l=[1,31],h=[1,33],f=[1,34],d=[1,35],p=[10,19],y=[1,47],g=[1,48],v=[1,49],m=[1,50],b=[1,51],_=[1,52],x=[10,19,25,32,33,41,44,45,46,47,48,49],k=[10,19,23,25,32,33,37,41,44,45,46,47,48,49,66,67,68],w=[10,13,17,19],E=[41,66,67,68],T=[41,48,49,66,67,68],C=[41,44,45,46,47,66,67,68],A=[10,19,25],S=[1,81],M={trace:function(){},yy:{},symbols_:{error:2,start:3,mermaidDoc:4,directive:5,graphConfig:6,openDirective:7,typeDirective:8,closeDirective:9,NEWLINE:10,":":11,argDirective:12,open_directive:13,type_directive:14,arg_directive:15,close_directive:16,CLASS_DIAGRAM:17,statements:18,EOF:19,statement:20,className:21,alphaNumToken:22,GENERICTYPE:23,relationStatement:24,LABEL:25,classStatement:26,methodStatement:27,annotationStatement:28,clickStatement:29,cssClassStatement:30,CLASS:31,STYLE_SEPARATOR:32,STRUCT_START:33,members:34,STRUCT_STOP:35,ANNOTATION_START:36,ANNOTATION_END:37,MEMBER:38,SEPARATOR:39,relation:40,STR:41,relationType:42,lineType:43,AGGREGATION:44,EXTENSION:45,COMPOSITION:46,DEPENDENCY:47,LINE:48,DOTTED_LINE:49,CALLBACK:50,LINK:51,CSSCLASS:52,commentToken:53,textToken:54,graphCodeTokens:55,textNoTagsToken:56,TAGSTART:57,TAGEND:58,"==":59,"--":60,PCT:61,DEFAULT:62,SPACE:63,MINUS:64,keywords:65,UNICODE_TEXT:66,NUM:67,ALPHA:68,$accept:0,$end:1},terminals_:{2:"error",10:"NEWLINE",11:":",13:"open_directive",14:"type_directive",15:"arg_directive",16:"close_directive",17:"CLASS_DIAGRAM",19:"EOF",23:"GENERICTYPE",25:"LABEL",31:"CLASS",32:"STYLE_SEPARATOR",33:"STRUCT_START",35:"STRUCT_STOP",36:"ANNOTATION_START",37:"ANNOTATION_END",38:"MEMBER",39:"SEPARATOR",41:"STR",44:"AGGREGATION",45:"EXTENSION",46:"COMPOSITION",47:"DEPENDENCY",48:"LINE",49:"DOTTED_LINE",50:"CALLBACK",51:"LINK",52:"CSSCLASS",55:"graphCodeTokens",57:"TAGSTART",58:"TAGEND",59:"==",60:"--",61:"PCT",62:"DEFAULT",63:"SPACE",64:"MINUS",65:"keywords",66:"UNICODE_TEXT",67:"NUM",68:"ALPHA"},productions_:[0,[3,1],[3,2],[4,1],[5,4],[5,6],[7,1],[8,1],[12,1],[9,1],[6,4],[18,1],[18,2],[18,3],[21,1],[21,2],[21,3],[21,2],[20,1],[20,2],[20,1],[20,1],[20,1],[20,1],[20,1],[20,1],[26,2],[26,4],[26,5],[26,7],[28,4],[34,1],[34,2],[27,1],[27,2],[27,1],[27,1],[24,3],[24,4],[24,4],[24,5],[40,3],[40,2],[40,2],[40,1],[42,1],[42,1],[42,1],[42,1],[43,1],[43,1],[29,3],[29,4],[29,3],[29,4],[30,3],[53,1],[53,1],[54,1],[54,1],[54,1],[54,1],[54,1],[54,1],[54,1],[56,1],[56,1],[56,1],[56,1],[22,1],[22,1],[22,1]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 6:r.parseDirective("%%{","open_directive");break;case 7:r.parseDirective(a[s],"type_directive");break;case 8:a[s]=a[s].trim().replace(/'/g,'"'),r.parseDirective(a[s],"arg_directive");break;case 9:r.parseDirective("}%%","close_directive","class");break;case 14:this.$=a[s];break;case 15:this.$=a[s-1]+a[s];break;case 16:this.$=a[s-2]+"~"+a[s-1]+a[s];break;case 17:this.$=a[s-1]+"~"+a[s];break;case 18:r.addRelation(a[s]);break;case 19:a[s-1].title=r.cleanupLabel(a[s]),r.addRelation(a[s-1]);break;case 26:r.addClass(a[s]);break;case 27:r.addClass(a[s-2]),r.setCssClass(a[s-2],a[s]);break;case 28:r.addClass(a[s-3]),r.addMembers(a[s-3],a[s-1]);break;case 29:r.addClass(a[s-5]),r.setCssClass(a[s-5],a[s-3]),r.addMembers(a[s-5],a[s-1]);break;case 30:r.addAnnotation(a[s],a[s-2]);break;case 31:this.$=[a[s]];break;case 32:a[s].push(a[s-1]),this.$=a[s];break;case 33:break;case 34:r.addMember(a[s-1],r.cleanupLabel(a[s]));break;case 35:case 36:break;case 37:this.$={id1:a[s-2],id2:a[s],relation:a[s-1],relationTitle1:"none",relationTitle2:"none"};break;case 38:this.$={id1:a[s-3],id2:a[s],relation:a[s-1],relationTitle1:a[s-2],relationTitle2:"none"};break;case 39:this.$={id1:a[s-3],id2:a[s],relation:a[s-2],relationTitle1:"none",relationTitle2:a[s-1]};break;case 40:this.$={id1:a[s-4],id2:a[s],relation:a[s-2],relationTitle1:a[s-3],relationTitle2:a[s-1]};break;case 41:this.$={type1:a[s-2],type2:a[s],lineType:a[s-1]};break;case 42:this.$={type1:"none",type2:a[s],lineType:a[s-1]};break;case 43:this.$={type1:a[s-1],type2:"none",lineType:a[s]};break;case 44:this.$={type1:"none",type2:"none",lineType:a[s]};break;case 45:this.$=r.relationType.AGGREGATION;break;case 46:this.$=r.relationType.EXTENSION;break;case 47:this.$=r.relationType.COMPOSITION;break;case 48:this.$=r.relationType.DEPENDENCY;break;case 49:this.$=r.lineType.LINE;break;case 50:this.$=r.lineType.DOTTED_LINE;break;case 51:this.$=a[s-2],r.setClickEvent(a[s-1],a[s],void 0);break;case 52:this.$=a[s-3],r.setClickEvent(a[s-2],a[s-1],a[s]);break;case 53:this.$=a[s-2],r.setLink(a[s-1],a[s],void 0);break;case 54:this.$=a[s-3],r.setLink(a[s-2],a[s-1],a[s]);break;case 55:r.setCssClass(a[s-1],a[s])}},table:[{3:1,4:2,5:3,6:4,7:5,13:e,17:n},{1:[3]},{1:[2,1]},{3:8,4:2,5:3,6:4,7:5,13:e,17:n},{1:[2,3]},{8:9,14:[1,10]},{10:[1,11]},{14:[2,6]},{1:[2,2]},{9:12,11:[1,13],16:r},t([11,16],[2,7]),{5:23,7:5,13:e,18:15,20:16,21:24,22:32,24:17,26:18,27:19,28:20,29:21,30:22,31:i,36:a,38:o,39:s,50:c,51:u,52:l,66:h,67:f,68:d},{10:[1,36]},{12:37,15:[1,38]},{10:[2,9]},{19:[1,39]},{10:[1,40],19:[2,11]},t(p,[2,18],{25:[1,41]}),t(p,[2,20]),t(p,[2,21]),t(p,[2,22]),t(p,[2,23]),t(p,[2,24]),t(p,[2,25]),t(p,[2,33],{40:42,42:45,43:46,25:[1,44],41:[1,43],44:y,45:g,46:v,47:m,48:b,49:_}),{21:53,22:32,66:h,67:f,68:d},t(p,[2,35]),t(p,[2,36]),{22:54,66:h,67:f,68:d},{21:55,22:32,66:h,67:f,68:d},{21:56,22:32,66:h,67:f,68:d},{41:[1,57]},t(x,[2,14],{22:32,21:58,23:[1,59],66:h,67:f,68:d}),t(k,[2,69]),t(k,[2,70]),t(k,[2,71]),t(w,[2,4]),{9:60,16:r},{16:[2,8]},{1:[2,10]},{5:23,7:5,13:e,18:61,19:[2,12],20:16,21:24,22:32,24:17,26:18,27:19,28:20,29:21,30:22,31:i,36:a,38:o,39:s,50:c,51:u,52:l,66:h,67:f,68:d},t(p,[2,19]),{21:62,22:32,41:[1,63],66:h,67:f,68:d},{40:64,42:45,43:46,44:y,45:g,46:v,47:m,48:b,49:_},t(p,[2,34]),{43:65,48:b,49:_},t(E,[2,44],{42:66,44:y,45:g,46:v,47:m}),t(T,[2,45]),t(T,[2,46]),t(T,[2,47]),t(T,[2,48]),t(C,[2,49]),t(C,[2,50]),t(p,[2,26],{32:[1,67],33:[1,68]}),{37:[1,69]},{41:[1,70]},{41:[1,71]},{22:72,66:h,67:f,68:d},t(x,[2,15]),t(x,[2,17],{22:32,21:73,66:h,67:f,68:d}),{10:[1,74]},{19:[2,13]},t(A,[2,37]),{21:75,22:32,66:h,67:f,68:d},{21:76,22:32,41:[1,77],66:h,67:f,68:d},t(E,[2,43],{42:78,44:y,45:g,46:v,47:m}),t(E,[2,42]),{22:79,66:h,67:f,68:d},{34:80,38:S},{21:82,22:32,66:h,67:f,68:d},t(p,[2,51],{41:[1,83]}),t(p,[2,53],{41:[1,84]}),t(p,[2,55]),t(x,[2,16]),t(w,[2,5]),t(A,[2,39]),t(A,[2,38]),{21:85,22:32,66:h,67:f,68:d},t(E,[2,41]),t(p,[2,27],{33:[1,86]}),{35:[1,87]},{34:88,35:[2,31],38:S},t(p,[2,30]),t(p,[2,52]),t(p,[2,54]),t(A,[2,40]),{34:89,38:S},t(p,[2,28]),{35:[2,32]},{35:[1,90]},t(p,[2,29])],defaultActions:{2:[2,1],4:[2,3],7:[2,6],8:[2,2],14:[2,9],38:[2,8],39:[2,10],61:[2,13],88:[2,32]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,u=0,l=0,h=2,f=1,d=a.slice.call(arguments,1),p=Object.create(this.lexer),y={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(y.yy[g]=this.yy[g]);p.setInput(t,y.yy),y.yy.lexer=p,y.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var v=p.yylloc;a.push(v);var m=p.options&&p.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||p.lex()||f)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var _,x,k,w,E,T,C,A,S,M={};;){if(k=n[n.length-1],this.defaultActions[k]?w=this.defaultActions[k]:(null==_&&(_=b()),w=o[k]&&o[k][_]),void 0===w||!w.length||!w[0]){var O="";for(T in S=[],o[k])this.terminals_[T]&&T>h&&S.push("'"+this.terminals_[T]+"'");O=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+S.join(", ")+", got '"+(this.terminals_[_]||_)+"'":"Parse error on line "+(c+1)+": Unexpected "+(_==f?"end of input":"'"+(this.terminals_[_]||_)+"'"),this.parseError(O,{text:p.match,token:this.terminals_[_]||_,line:p.yylineno,loc:v,expected:S})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+_);switch(w[0]){case 1:n.push(_),i.push(p.yytext),a.push(p.yylloc),n.push(w[1]),_=null,x?(_=x,x=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,v=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[w[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},m&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(E=this.performAction.apply(M,[s,u,c,y.yy,w[1],i,a].concat(d))))return E;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[w[1]][0]),i.push(M.$),a.push(M._$),A=o[n[n.length-2]][n[n.length-1]],n.push(A);break;case 3:return!0}}return!0}},O={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),13;case 1:return this.begin("type_directive"),14;case 2:return this.popState(),this.begin("arg_directive"),11;case 3:return this.popState(),this.popState(),16;case 4:return 15;case 5:case 6:break;case 7:return 10;case 8:break;case 9:case 10:return 17;case 11:return this.begin("struct"),33;case 12:return"EOF_IN_STRUCT";case 13:return"OPEN_IN_STRUCT";case 14:return this.popState(),35;case 15:break;case 16:return"MEMBER";case 17:return 31;case 18:return 52;case 19:return 50;case 20:return 51;case 21:return 36;case 22:return 37;case 23:this.begin("generic");break;case 24:this.popState();break;case 25:return"GENERICTYPE";case 26:this.begin("string");break;case 27:this.popState();break;case 28:return"STR";case 29:case 30:return 45;case 31:case 32:return 47;case 33:return 46;case 34:return 44;case 35:return 48;case 36:return 49;case 37:return 25;case 38:return 32;case 39:return 64;case 40:return"DOT";case 41:return"PLUS";case 42:return 61;case 43:case 44:return"EQUALS";case 45:return 68;case 46:return"PUNCTUATION";case 47:return 67;case 48:return 66;case 49:return 63;case 50:return 19}},rules:[/^(?:%%\{)/,/^(?:((?:(?!\}%%)[^:.])*))/,/^(?::)/,/^(?:\}%%)/,/^(?:((?:(?!\}%%).|\n)*))/,/^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/,/^(?:%%[^\n]*(\r?\n)*)/,/^(?:(\r?\n)+)/,/^(?:\s+)/,/^(?:classDiagram-v2\b)/,/^(?:classDiagram\b)/,/^(?:[{])/,/^(?:$)/,/^(?:[{])/,/^(?:[}])/,/^(?:[\n])/,/^(?:[^{}\n]*)/,/^(?:class\b)/,/^(?:cssClass\b)/,/^(?:callback\b)/,/^(?:link\b)/,/^(?:<<)/,/^(?:>>)/,/^(?:[~])/,/^(?:[~])/,/^(?:[^~]*)/,/^(?:["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:\s*<\|)/,/^(?:\s*\|>)/,/^(?:\s*>)/,/^(?:\s*<)/,/^(?:\s*\*)/,/^(?:\s*o\b)/,/^(?:--)/,/^(?:\.\.)/,/^(?::{1}[^:\n;]+)/,/^(?::{3})/,/^(?:-)/,/^(?:\.)/,/^(?:\+)/,/^(?:%)/,/^(?:=)/,/^(?:=)/,/^(?:\w+)/,/^(?:[!"#$%&'*+,-.`?\\/])/,/^(?:[0-9]+)/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/,/^(?:\s)/,/^(?:$)/],conditions:{string:{rules:[27,28],inclusive:!1},generic:{rules:[24,25],inclusive:!1},struct:{rules:[12,13,14,15,16],inclusive:!1},open_directive:{rules:[1],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},INITIAL:{rules:[0,5,6,7,8,9,10,11,17,18,19,20,21,22,23,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50],inclusive:!0}}};function D(){this.yy={}}return M.lexer=O,D.prototype=M,M.Parser=D,new D}();e.parser=i,e.Parser=i.Parser,e.parse=function(){return i.parse.apply(i,arguments)},e.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),t.exit(1));var i=n(19).readFileSync(n(20).normalize(r[1]),"utf8");return e.parser.parse(i)},n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(this,n(14),n(7)(t))},function(t,e){var n,r,i=t.exports={};function a(){throw new Error("setTimeout has not been defined")}function o(){throw new Error("clearTimeout has not been defined")}function s(t){if(n===setTimeout)return setTimeout(t,0);if((n===a||!n)&&setTimeout)return n=setTimeout,setTimeout(t,0);try{return n(t,0)}catch(e){try{return n.call(null,t,0)}catch(e){return n.call(this,t,0)}}}!function(){try{n="function"==typeof setTimeout?setTimeout:a}catch(t){n=a}try{r="function"==typeof clearTimeout?clearTimeout:o}catch(t){r=o}}();var c,u=[],l=!1,h=-1;function f(){l&&c&&(l=!1,c.length?u=c.concat(u):h=-1,u.length&&d())}function d(){if(!l){var t=s(f);l=!0;for(var e=u.length;e;){for(c=u,u=[];++h1)for(var n=1;n=0;r--){var i=t[r];"."===i?t.splice(r,1):".."===i?(t.splice(r,1),n++):n&&(t.splice(r,1),n--)}if(e)for(;n--;n)t.unshift("..");return t}function r(t,e){if(t.filter)return t.filter(e);for(var n=[],r=0;r=-1&&!i;a--){var o=a>=0?arguments[a]:t.cwd();if("string"!=typeof o)throw new TypeError("Arguments to path.resolve must be strings");o&&(e=o+"/"+e,i="/"===o.charAt(0))}return(i?"/":"")+(e=n(r(e.split("/"),(function(t){return!!t})),!i).join("/"))||"."},e.normalize=function(t){var a=e.isAbsolute(t),o="/"===i(t,-1);return(t=n(r(t.split("/"),(function(t){return!!t})),!a).join("/"))||a||(t="."),t&&o&&(t+="/"),(a?"/":"")+t},e.isAbsolute=function(t){return"/"===t.charAt(0)},e.join=function(){var t=Array.prototype.slice.call(arguments,0);return e.normalize(r(t,(function(t,e){if("string"!=typeof t)throw new TypeError("Arguments to path.join must be strings");return t})).join("/"))},e.relative=function(t,n){function r(t){for(var e=0;e=0&&""===t[n];n--);return e>n?[]:t.slice(e,n-e+1)}t=e.resolve(t).substr(1),n=e.resolve(n).substr(1);for(var i=r(t.split("/")),a=r(n.split("/")),o=Math.min(i.length,a.length),s=o,c=0;c=1;--a)if(47===(e=t.charCodeAt(a))){if(!i){r=a;break}}else i=!1;return-1===r?n?"/":".":n&&1===r?"/":t.slice(0,r)},e.basename=function(t,e){var n=function(t){"string"!=typeof t&&(t+="");var e,n=0,r=-1,i=!0;for(e=t.length-1;e>=0;--e)if(47===t.charCodeAt(e)){if(!i){n=e+1;break}}else-1===r&&(i=!1,r=e+1);return-1===r?"":t.slice(n,r)}(t);return e&&n.substr(-1*e.length)===e&&(n=n.substr(0,n.length-e.length)),n},e.extname=function(t){"string"!=typeof t&&(t+="");for(var e=-1,n=0,r=-1,i=!0,a=0,o=t.length-1;o>=0;--o){var s=t.charCodeAt(o);if(47!==s)-1===r&&(i=!1,r=o+1),46===s?-1===e?e=o:1!==a&&(a=1):-1!==e&&(a=-1);else if(!i){n=o+1;break}}return-1===e||-1===r||0===a||1===a&&e===r-1&&e===n+1?"":t.slice(e,r)};var i="b"==="ab".substr(-1)?function(t,e,n){return t.substr(e,n)}:function(t,e,n){return e<0&&(e=t.length+e),t.substr(e,n)}}).call(this,n(14))},function(t,e){t.exports=function(t){return null!=t&&"object"==typeof t}},function(t,e,n){(function(t,r){var i=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[1,2],n=[1,3],r=[1,5],i=[1,7],a=[2,5],o=[1,15],s=[1,17],c=[1,19],u=[1,20],l=[1,21],h=[1,22],f=[1,28],d=[1,23],p=[1,24],y=[1,25],g=[1,26],v=[1,29],m=[1,32],b=[1,4,5,14,15,17,19,20,22,23,24,25,26,36,39],_=[1,4,5,12,13,14,15,17,19,20,22,23,24,25,26,36,39],x=[1,4,5,7,14,15,17,19,20,22,23,24,25,26,36,39],k=[4,5,14,15,17,19,20,22,23,24,25,26,36,39],w={trace:function(){},yy:{},symbols_:{error:2,start:3,SPACE:4,NL:5,directive:6,SD:7,document:8,line:9,statement:10,idStatement:11,DESCR:12,"--\x3e":13,HIDE_EMPTY:14,scale:15,WIDTH:16,COMPOSIT_STATE:17,STRUCT_START:18,STRUCT_STOP:19,STATE_DESCR:20,AS:21,ID:22,FORK:23,JOIN:24,CONCURRENT:25,note:26,notePosition:27,NOTE_TEXT:28,openDirective:29,typeDirective:30,closeDirective:31,":":32,argDirective:33,eol:34,";":35,EDGE_STATE:36,left_of:37,right_of:38,open_directive:39,type_directive:40,arg_directive:41,close_directive:42,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NL",7:"SD",12:"DESCR",13:"--\x3e",14:"HIDE_EMPTY",15:"scale",16:"WIDTH",17:"COMPOSIT_STATE",18:"STRUCT_START",19:"STRUCT_STOP",20:"STATE_DESCR",21:"AS",22:"ID",23:"FORK",24:"JOIN",25:"CONCURRENT",26:"note",28:"NOTE_TEXT",32:":",35:";",36:"EDGE_STATE",37:"left_of",38:"right_of",39:"open_directive",40:"type_directive",41:"arg_directive",42:"close_directive"},productions_:[0,[3,2],[3,2],[3,2],[3,2],[8,0],[8,2],[9,2],[9,1],[9,1],[10,1],[10,2],[10,3],[10,4],[10,1],[10,2],[10,1],[10,4],[10,3],[10,6],[10,1],[10,1],[10,1],[10,4],[10,4],[10,1],[6,3],[6,5],[34,1],[34,1],[11,1],[11,1],[27,1],[27,1],[29,1],[30,1],[33,1],[31,1]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 4:return r.setRootDoc(a[s]),a[s];case 5:this.$=[];break;case 6:"nl"!=a[s]&&(a[s-1].push(a[s]),this.$=a[s-1]);break;case 7:case 8:this.$=a[s];break;case 9:this.$="nl";break;case 10:this.$={stmt:"state",id:a[s],type:"default",description:""};break;case 11:this.$={stmt:"state",id:a[s-1],type:"default",description:r.trimColon(a[s])};break;case 12:this.$={stmt:"relation",state1:{stmt:"state",id:a[s-2],type:"default",description:""},state2:{stmt:"state",id:a[s],type:"default",description:""}};break;case 13:this.$={stmt:"relation",state1:{stmt:"state",id:a[s-3],type:"default",description:""},state2:{stmt:"state",id:a[s-1],type:"default",description:""},description:a[s].substr(1).trim()};break;case 17:this.$={stmt:"state",id:a[s-3],type:"default",description:"",doc:a[s-1]};break;case 18:var c=a[s],u=a[s-2].trim();if(a[s].match(":")){var l=a[s].split(":");c=l[0],u=[u,l[1]]}this.$={stmt:"state",id:c,type:"default",description:u};break;case 19:this.$={stmt:"state",id:a[s-3],type:"default",description:a[s-5],doc:a[s-1]};break;case 20:this.$={stmt:"state",id:a[s],type:"fork"};break;case 21:this.$={stmt:"state",id:a[s],type:"join"};break;case 22:this.$={stmt:"state",id:r.getDividerId(),type:"divider"};break;case 23:this.$={stmt:"state",id:a[s-1].trim(),note:{position:a[s-2].trim(),text:a[s].trim()}};break;case 30:case 31:this.$=a[s];break;case 34:r.parseDirective("%%{","open_directive");break;case 35:r.parseDirective(a[s],"type_directive");break;case 36:a[s]=a[s].trim().replace(/'/g,'"'),r.parseDirective(a[s],"arg_directive");break;case 37:r.parseDirective("}%%","close_directive","state")}},table:[{3:1,4:e,5:n,6:4,7:r,29:6,39:i},{1:[3]},{3:8,4:e,5:n,6:4,7:r,29:6,39:i},{3:9,4:e,5:n,6:4,7:r,29:6,39:i},{3:10,4:e,5:n,6:4,7:r,29:6,39:i},t([1,4,5,14,15,17,20,22,23,24,25,26,36,39],a,{8:11}),{30:12,40:[1,13]},{40:[2,34]},{1:[2,1]},{1:[2,2]},{1:[2,3]},{1:[2,4],4:o,5:s,6:27,9:14,10:16,11:18,14:c,15:u,17:l,20:h,22:f,23:d,24:p,25:y,26:g,29:6,36:v,39:i},{31:30,32:[1,31],42:m},t([32,42],[2,35]),t(b,[2,6]),{6:27,10:33,11:18,14:c,15:u,17:l,20:h,22:f,23:d,24:p,25:y,26:g,29:6,36:v,39:i},t(b,[2,8]),t(b,[2,9]),t(b,[2,10],{12:[1,34],13:[1,35]}),t(b,[2,14]),{16:[1,36]},t(b,[2,16],{18:[1,37]}),{21:[1,38]},t(b,[2,20]),t(b,[2,21]),t(b,[2,22]),{27:39,28:[1,40],37:[1,41],38:[1,42]},t(b,[2,25]),t(_,[2,30]),t(_,[2,31]),t(x,[2,26]),{33:43,41:[1,44]},t(x,[2,37]),t(b,[2,7]),t(b,[2,11]),{11:45,22:f,36:v},t(b,[2,15]),t(k,a,{8:46}),{22:[1,47]},{22:[1,48]},{21:[1,49]},{22:[2,32]},{22:[2,33]},{31:50,42:m},{42:[2,36]},t(b,[2,12],{12:[1,51]}),{4:o,5:s,6:27,9:14,10:16,11:18,14:c,15:u,17:l,19:[1,52],20:h,22:f,23:d,24:p,25:y,26:g,29:6,36:v,39:i},t(b,[2,18],{18:[1,53]}),{28:[1,54]},{22:[1,55]},t(x,[2,27]),t(b,[2,13]),t(b,[2,17]),t(k,a,{8:56}),t(b,[2,23]),t(b,[2,24]),{4:o,5:s,6:27,9:14,10:16,11:18,14:c,15:u,17:l,19:[1,57],20:h,22:f,23:d,24:p,25:y,26:g,29:6,36:v,39:i},t(b,[2,19])],defaultActions:{7:[2,34],8:[2,1],9:[2,2],10:[2,3],41:[2,32],42:[2,33],44:[2,36]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,u=0,l=0,h=2,f=1,d=a.slice.call(arguments,1),p=Object.create(this.lexer),y={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(y.yy[g]=this.yy[g]);p.setInput(t,y.yy),y.yy.lexer=p,y.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var v=p.yylloc;a.push(v);var m=p.options&&p.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||p.lex()||f)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var _,x,k,w,E,T,C,A,S,M={};;){if(k=n[n.length-1],this.defaultActions[k]?w=this.defaultActions[k]:(null==_&&(_=b()),w=o[k]&&o[k][_]),void 0===w||!w.length||!w[0]){var O="";for(T in S=[],o[k])this.terminals_[T]&&T>h&&S.push("'"+this.terminals_[T]+"'");O=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+S.join(", ")+", got '"+(this.terminals_[_]||_)+"'":"Parse error on line "+(c+1)+": Unexpected "+(_==f?"end of input":"'"+(this.terminals_[_]||_)+"'"),this.parseError(O,{text:p.match,token:this.terminals_[_]||_,line:p.yylineno,loc:v,expected:S})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+_);switch(w[0]){case 1:n.push(_),i.push(p.yytext),a.push(p.yylloc),n.push(w[1]),_=null,x?(_=x,x=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,v=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[w[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},m&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(E=this.performAction.apply(M,[s,u,c,y.yy,w[1],i,a].concat(d))))return E;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[w[1]][0]),i.push(M.$),a.push(M._$),A=o[n[n.length-2]][n[n.length-1]],n.push(A);break;case 3:return!0}}return!0}},E={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),39;case 1:return this.begin("type_directive"),40;case 2:return this.popState(),this.begin("arg_directive"),32;case 3:return this.popState(),this.popState(),42;case 4:return 41;case 5:break;case 6:console.log("Crap after close");break;case 7:return 5;case 8:case 9:case 10:case 11:break;case 12:return this.pushState("SCALE"),15;case 13:return 16;case 14:this.popState();break;case 15:this.pushState("STATE");break;case 16:return this.popState(),e.yytext=e.yytext.slice(0,-8).trim(),23;case 17:return this.popState(),e.yytext=e.yytext.slice(0,-8).trim(),24;case 18:return this.popState(),e.yytext=e.yytext.slice(0,-8).trim(),23;case 19:return this.popState(),e.yytext=e.yytext.slice(0,-8).trim(),24;case 20:this.begin("STATE_STRING");break;case 21:return this.popState(),this.pushState("STATE_ID"),"AS";case 22:return this.popState(),"ID";case 23:this.popState();break;case 24:return"STATE_DESCR";case 25:return 17;case 26:this.popState();break;case 27:return this.popState(),this.pushState("struct"),18;case 28:return this.popState(),19;case 29:break;case 30:return this.begin("NOTE"),26;case 31:return this.popState(),this.pushState("NOTE_ID"),37;case 32:return this.popState(),this.pushState("NOTE_ID"),38;case 33:this.popState(),this.pushState("FLOATING_NOTE");break;case 34:return this.popState(),this.pushState("FLOATING_NOTE_ID"),"AS";case 35:break;case 36:return"NOTE_TEXT";case 37:return this.popState(),"ID";case 38:return this.popState(),this.pushState("NOTE_TEXT"),22;case 39:return this.popState(),e.yytext=e.yytext.substr(2).trim(),28;case 40:return this.popState(),e.yytext=e.yytext.slice(0,-8).trim(),28;case 41:case 42:return 7;case 43:return 14;case 44:return 36;case 45:return 22;case 46:return e.yytext=e.yytext.trim(),12;case 47:return 13;case 48:return 25;case 49:return 5;case 50:return"INVALID"}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:[\s]+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:scale\s+)/i,/^(?:\d+)/i,/^(?:\s+width\b)/i,/^(?:state\s+)/i,/^(?:.*<>)/i,/^(?:.*<>)/i,/^(?:.*\[\[fork\]\])/i,/^(?:.*\[\[join\]\])/i,/^(?:["])/i,/^(?:\s*as\s+)/i,/^(?:[^\n\{]*)/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[^\n\s\{]+)/i,/^(?:\n)/i,/^(?:\{)/i,/^(?:\})/i,/^(?:[\n])/i,/^(?:note\s+)/i,/^(?:left of\b)/i,/^(?:right of\b)/i,/^(?:")/i,/^(?:\s*as\s*)/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[^\n]*)/i,/^(?:\s*[^:\n\s\-]+)/i,/^(?:\s*:[^:\n;]+)/i,/^(?:\s*[^:;]+end note\b)/i,/^(?:stateDiagram\s+)/i,/^(?:stateDiagram-v2\s+)/i,/^(?:hide empty description\b)/i,/^(?:\[\*\])/i,/^(?:[^:\n\s\-\{]+)/i,/^(?:\s*:[^:\n;]+)/i,/^(?:-->)/i,/^(?:--)/i,/^(?:$)/i,/^(?:.)/i],conditions:{LINE:{rules:[9,10],inclusive:!1},close_directive:{rules:[9,10],inclusive:!1},arg_directive:{rules:[3,4,9,10],inclusive:!1},type_directive:{rules:[2,3,9,10],inclusive:!1},open_directive:{rules:[1,9,10],inclusive:!1},struct:{rules:[9,10,15,28,29,30,44,45,46,47,48],inclusive:!1},FLOATING_NOTE_ID:{rules:[37],inclusive:!1},FLOATING_NOTE:{rules:[34,35,36],inclusive:!1},NOTE_TEXT:{rules:[39,40],inclusive:!1},NOTE_ID:{rules:[38],inclusive:!1},NOTE:{rules:[31,32,33],inclusive:!1},SCALE:{rules:[13,14],inclusive:!1},ALIAS:{rules:[],inclusive:!1},STATE_ID:{rules:[22],inclusive:!1},STATE_STRING:{rules:[23,24],inclusive:!1},FORK_STATE:{rules:[],inclusive:!1},STATE:{rules:[9,10,16,17,18,19,20,21,25,26,27],inclusive:!1},ID:{rules:[9,10],inclusive:!1},INITIAL:{rules:[0,5,6,7,8,10,11,12,15,27,30,41,42,43,44,45,46,47,49,50],inclusive:!0}}};function T(){this.yy={}}return w.lexer=E,T.prototype=w,w.Parser=T,new T}();e.parser=i,e.Parser=i.Parser,e.parse=function(){return i.parse.apply(i,arguments)},e.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),t.exit(1));var i=n(19).readFileSync(n(20).normalize(r[1]),"utf8");return e.parser.parse(i)},n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(this,n(14),n(7)(t))},function(t,e,n){(function(t){t.exports=function(){"use strict";var e,r;function i(){return e.apply(null,arguments)}function a(t){return t instanceof Array||"[object Array]"===Object.prototype.toString.call(t)}function o(t){return null!=t&&"[object Object]"===Object.prototype.toString.call(t)}function s(t){return void 0===t}function c(t){return"number"==typeof t||"[object Number]"===Object.prototype.toString.call(t)}function u(t){return t instanceof Date||"[object Date]"===Object.prototype.toString.call(t)}function l(t,e){var n,r=[];for(n=0;n>>0,r=0;rgt(t)?(a=t+1,s-gt(t)):(a=t,s),{year:a,dayOfYear:o}}function Ft(t,e,n){var r,i,a=Bt(t.year(),e,n),o=Math.floor((t.dayOfYear()-a-1)/7)+1;return o<1?r=o+Pt(i=t.year()-1,e,n):o>Pt(t.year(),e,n)?(r=o-Pt(t.year(),e,n),i=t.year()+1):(i=t.year(),r=o),{week:r,year:i}}function Pt(t,e,n){var r=Bt(t,e,n),i=Bt(t+1,e,n);return(gt(t)-r+i)/7}function It(t,e){return t.slice(e,7).concat(t.slice(0,e))}W("w",["ww",2],"wo","week"),W("W",["WW",2],"Wo","isoWeek"),L("week","w"),L("isoWeek","W"),j("week",5),j("isoWeek",5),lt("w",Q),lt("ww",Q,q),lt("W",Q),lt("WW",Q,q),yt(["w","ww","W","WW"],(function(t,e,n,r){e[r.substr(0,1)]=w(t)})),W("d",0,"do","day"),W("dd",0,0,(function(t){return this.localeData().weekdaysMin(this,t)})),W("ddd",0,0,(function(t){return this.localeData().weekdaysShort(this,t)})),W("dddd",0,0,(function(t){return this.localeData().weekdays(this,t)})),W("e",0,0,"weekday"),W("E",0,0,"isoWeekday"),L("day","d"),L("weekday","e"),L("isoWeekday","E"),j("day",11),j("weekday",11),j("isoWeekday",11),lt("d",Q),lt("e",Q),lt("E",Q),lt("dd",(function(t,e){return e.weekdaysMinRegex(t)})),lt("ddd",(function(t,e){return e.weekdaysShortRegex(t)})),lt("dddd",(function(t,e){return e.weekdaysRegex(t)})),yt(["dd","ddd","dddd"],(function(t,e,n,r){var i=n._locale.weekdaysParse(t,r,n._strict);null!=i?e.d=i:p(n).invalidWeekday=t})),yt(["d","e","E"],(function(t,e,n,r){e[r]=w(t)}));var jt="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),Rt="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),Yt="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),zt=ct,Ut=ct,$t=ct;function Wt(){function t(t,e){return e.length-t.length}var e,n,r,i,a,o=[],s=[],c=[],u=[];for(e=0;e<7;e++)n=d([2e3,1]).day(e),r=this.weekdaysMin(n,""),i=this.weekdaysShort(n,""),a=this.weekdays(n,""),o.push(r),s.push(i),c.push(a),u.push(r),u.push(i),u.push(a);for(o.sort(t),s.sort(t),c.sort(t),u.sort(t),e=0;e<7;e++)s[e]=ft(s[e]),c[e]=ft(c[e]),u[e]=ft(u[e]);this._weekdaysRegex=new RegExp("^("+u.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+c.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+s.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+o.join("|")+")","i")}function Ht(){return this.hours()%12||12}function Vt(t,e){W(t,0,0,(function(){return this.localeData().meridiem(this.hours(),this.minutes(),e)}))}function Gt(t,e){return e._meridiemParse}W("H",["HH",2],0,"hour"),W("h",["hh",2],0,Ht),W("k",["kk",2],0,(function(){return this.hours()||24})),W("hmm",0,0,(function(){return""+Ht.apply(this)+R(this.minutes(),2)})),W("hmmss",0,0,(function(){return""+Ht.apply(this)+R(this.minutes(),2)+R(this.seconds(),2)})),W("Hmm",0,0,(function(){return""+this.hours()+R(this.minutes(),2)})),W("Hmmss",0,0,(function(){return""+this.hours()+R(this.minutes(),2)+R(this.seconds(),2)})),Vt("a",!0),Vt("A",!1),L("hour","h"),j("hour",13),lt("a",Gt),lt("A",Gt),lt("H",Q),lt("h",Q),lt("k",Q),lt("HH",Q,q),lt("hh",Q,q),lt("kk",Q,q),lt("hmm",K),lt("hmmss",tt),lt("Hmm",K),lt("Hmmss",tt),pt(["H","HH"],3),pt(["k","kk"],(function(t,e,n){var r=w(t);e[3]=24===r?0:r})),pt(["a","A"],(function(t,e,n){n._isPm=n._locale.isPM(t),n._meridiem=t})),pt(["h","hh"],(function(t,e,n){e[3]=w(t),p(n).bigHour=!0})),pt("hmm",(function(t,e,n){var r=t.length-2;e[3]=w(t.substr(0,r)),e[4]=w(t.substr(r)),p(n).bigHour=!0})),pt("hmmss",(function(t,e,n){var r=t.length-4,i=t.length-2;e[3]=w(t.substr(0,r)),e[4]=w(t.substr(r,2)),e[5]=w(t.substr(i)),p(n).bigHour=!0})),pt("Hmm",(function(t,e,n){var r=t.length-2;e[3]=w(t.substr(0,r)),e[4]=w(t.substr(r))})),pt("Hmmss",(function(t,e,n){var r=t.length-4,i=t.length-2;e[3]=w(t.substr(0,r)),e[4]=w(t.substr(r,2)),e[5]=w(t.substr(i))}));var qt,Xt=_t("Hours",!0),Zt={calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},longDateFormat:{LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},invalidDate:"Invalid date",ordinal:"%d",dayOfMonthOrdinalParse:/\d{1,2}/,relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},months:Tt,monthsShort:Ct,week:{dow:0,doy:6},weekdays:jt,weekdaysMin:Yt,weekdaysShort:Rt,meridiemParse:/[ap]\.?m?\.?/i},Jt={},Qt={};function Kt(t){return t?t.toLowerCase().replace("_","-"):t}function te(e){var r=null;if(!Jt[e]&&void 0!==t&&t&&t.exports)try{r=qt._abbr,n(171)("./"+e),ee(r)}catch(e){}return Jt[e]}function ee(t,e){var n;return t&&((n=s(e)?re(t):ne(t,e))?qt=n:"undefined"!=typeof console&&console.warn&&console.warn("Locale "+t+" not found. Did you forget to load it?")),qt._abbr}function ne(t,e){if(null===e)return delete Jt[t],null;var n,r=Zt;if(e.abbr=t,null!=Jt[t])M("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),r=Jt[t]._config;else if(null!=e.parentLocale)if(null!=Jt[e.parentLocale])r=Jt[e.parentLocale]._config;else{if(null==(n=te(e.parentLocale)))return Qt[e.parentLocale]||(Qt[e.parentLocale]=[]),Qt[e.parentLocale].push({name:t,config:e}),null;r=n._config}return Jt[t]=new N(D(r,e)),Qt[t]&&Qt[t].forEach((function(t){ne(t.name,t.config)})),ee(t),Jt[t]}function re(t){var e;if(t&&t._locale&&t._locale._abbr&&(t=t._locale._abbr),!t)return qt;if(!a(t)){if(e=te(t))return e;t=[t]}return function(t){for(var e,n,r,i,a=0;a=e&&E(i,n,!0)>=e-1)break;e--}a++}return qt}(t)}function ie(t){var e,n=t._a;return n&&-2===p(t).overflow&&(e=n[1]<0||11wt(n[0],n[1])?2:n[3]<0||24Pt(n,a,o)?p(t)._overflowWeeks=!0:null!=c?p(t)._overflowWeekday=!0:(s=Lt(n,r,i,a,o),t._a[0]=s.year,t._dayOfYear=s.dayOfYear)}(t),null!=t._dayOfYear&&(o=ae(t._a[0],r[0]),(t._dayOfYear>gt(o)||0===t._dayOfYear)&&(p(t)._overflowDayOfYear=!0),n=Nt(o,0,t._dayOfYear),t._a[1]=n.getUTCMonth(),t._a[2]=n.getUTCDate()),e=0;e<3&&null==t._a[e];++e)t._a[e]=s[e]=r[e];for(;e<7;e++)t._a[e]=s[e]=null==t._a[e]?2===e?1:0:t._a[e];24===t._a[3]&&0===t._a[4]&&0===t._a[5]&&0===t._a[6]&&(t._nextDay=!0,t._a[3]=0),t._d=(t._useUTC?Nt:function(t,e,n,r,i,a,o){var s;return t<100&&0<=t?(s=new Date(t+400,e,n,r,i,a,o),isFinite(s.getFullYear())&&s.setFullYear(t)):s=new Date(t,e,n,r,i,a,o),s}).apply(null,s),a=t._useUTC?t._d.getUTCDay():t._d.getDay(),null!=t._tzm&&t._d.setUTCMinutes(t._d.getUTCMinutes()-t._tzm),t._nextDay&&(t._a[3]=24),t._w&&void 0!==t._w.d&&t._w.d!==a&&(p(t).weekdayMismatch=!0)}}var se=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,ce=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,ue=/Z|[+-]\d\d(?::?\d\d)?/,le=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/]],he=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],fe=/^\/?Date\((\-?\d+)/i;function de(t){var e,n,r,i,a,o,s=t._i,c=se.exec(s)||ce.exec(s);if(c){for(p(t).iso=!0,e=0,n=le.length;en.valueOf():n.valueOf()this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()},on.isLocal=function(){return!!this.isValid()&&!this._isUTC},on.isUtcOffset=function(){return!!this.isValid()&&this._isUTC},on.isUtc=Be,on.isUTC=Be,on.zoneAbbr=function(){return this._isUTC?"UTC":""},on.zoneName=function(){return this._isUTC?"Coordinated Universal Time":""},on.dates=C("dates accessor is deprecated. Use date instead.",Ke),on.months=C("months accessor is deprecated. Use month instead",St),on.years=C("years accessor is deprecated. Use year instead",bt),on.zone=C("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",(function(t,e){return null!=t?("string"!=typeof t&&(t=-t),this.utcOffset(t,e),this):-this.utcOffset()})),on.isDSTShifted=C("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",(function(){if(!s(this._isDSTShifted))return this._isDSTShifted;var t={};if(m(t,this),(t=me(t))._a){var e=t._isUTC?d(t._a):_e(t._a);this._isDSTShifted=this.isValid()&&0h&&S.push("'"+this.terminals_[T]+"'");O=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+S.join(", ")+", got '"+(this.terminals_[_]||_)+"'":"Parse error on line "+(c+1)+": Unexpected "+(_==f?"end of input":"'"+(this.terminals_[_]||_)+"'"),this.parseError(O,{text:p.match,token:this.terminals_[_]||_,line:p.yylineno,loc:v,expected:S})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+_);switch(w[0]){case 1:n.push(_),i.push(p.yytext),a.push(p.yylloc),n.push(w[1]),_=null,x?(_=x,x=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,v=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[w[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},m&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(E=this.performAction.apply(M,[s,u,c,y.yy,w[1],i,a].concat(d))))return E;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[w[1]][0]),i.push(M.$),a.push(M._$),A=o[n[n.length-2]][n[n.length-1]],n.push(A);break;case 3:return!0}}return!0}},qt={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),12;case 1:return this.begin("type_directive"),13;case 2:return this.popState(),this.begin("arg_directive"),10;case 3:return this.popState(),this.popState(),15;case 4:return 14;case 5:case 6:break;case 7:this.begin("string");break;case 8:this.popState();break;case 9:return"STR";case 10:return 75;case 11:return 84;case 12:return 76;case 13:return 90;case 14:return 77;case 15:return 78;case 16:return 79;case 17:case 18:return t.lex.firstGraph()&&this.begin("dir"),24;case 19:return 38;case 20:return 42;case 21:case 22:case 23:case 24:return 87;case 25:return this.popState(),25;case 26:case 27:case 28:case 29:case 30:case 31:case 32:case 33:case 34:case 35:return this.popState(),26;case 36:return 91;case 37:return 99;case 38:return 47;case 39:return 96;case 40:return 46;case 41:return 20;case 42:return 92;case 43:return 110;case 44:case 45:case 46:case 47:case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:case 58:case 59:case 60:case 61:case 62:case 63:case 64:case 65:case 66:case 67:case 68:case 69:case 70:case 71:return 70;case 72:case 73:case 74:case 75:case 76:case 77:case 78:case 79:case 80:case 81:case 82:case 83:return 69;case 84:return 51;case 85:return 52;case 86:return 53;case 87:return 54;case 88:return 55;case 89:return 56;case 90:return 57;case 91:return 58;case 92:return 97;case 93:return 100;case 94:return 111;case 95:return 108;case 96:return 101;case 97:case 98:return 109;case 99:return 102;case 100:return 61;case 101:return 81;case 102:return"SEP";case 103:return 80;case 104:return 95;case 105:return 63;case 106:return 62;case 107:return 65;case 108:return 64;case 109:return 106;case 110:return 107;case 111:return 71;case 112:return 49;case 113:return 50;case 114:return 40;case 115:return 41;case 116:return 59;case 117:return 60;case 118:return 117;case 119:return 21;case 120:return 22;case 121:return 23}},rules:[/^(?:%%\{)/,/^(?:((?:(?!\}%%)[^:.])*))/,/^(?::)/,/^(?:\}%%)/,/^(?:((?:(?!\}%%).|\n)*))/,/^(?:%%(?!\{)[^\n]*)/,/^(?:[^\}]%%[^\n]*)/,/^(?:["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:style\b)/,/^(?:default\b)/,/^(?:linkStyle\b)/,/^(?:interpolate\b)/,/^(?:classDef\b)/,/^(?:class\b)/,/^(?:click\b)/,/^(?:graph\b)/,/^(?:flowchart\b)/,/^(?:subgraph\b)/,/^(?:end\b\s*)/,/^(?:_self\b)/,/^(?:_blank\b)/,/^(?:_parent\b)/,/^(?:_top\b)/,/^(?:(\r?\n)*\s*\n)/,/^(?:\s*LR\b)/,/^(?:\s*RL\b)/,/^(?:\s*TB\b)/,/^(?:\s*BT\b)/,/^(?:\s*TD\b)/,/^(?:\s*BR\b)/,/^(?:\s*<)/,/^(?:\s*>)/,/^(?:\s*\^)/,/^(?:\s*v\b)/,/^(?:[0-9]+)/,/^(?:#)/,/^(?::::)/,/^(?::)/,/^(?:&)/,/^(?:;)/,/^(?:,)/,/^(?:\*)/,/^(?:\s*--[x]\s*)/,/^(?:\s*-->\s*)/,/^(?:\s*<-->\s*)/,/^(?:\s*[x]--[x]\s*)/,/^(?:\s*[o]--[o]\s*)/,/^(?:\s*[o]\.-[o]\s*)/,/^(?:\s*<==>\s*)/,/^(?:\s*[o]==[o]\s*)/,/^(?:\s*[x]==[x]\s*)/,/^(?:\s*[x].-[x]\s*)/,/^(?:\s*[x]-\.-[x]\s*)/,/^(?:\s*<\.->\s*)/,/^(?:\s*<-\.->\s*)/,/^(?:\s*[o]-\.-[o]\s*)/,/^(?:\s*--[o]\s*)/,/^(?:\s*---\s*)/,/^(?:\s*-\.-[x]\s*)/,/^(?:\s*-\.->\s*)/,/^(?:\s*-\.-[o]\s*)/,/^(?:\s*-\.-\s*)/,/^(?:\s*.-[x]\s*)/,/^(?:\s*\.->\s*)/,/^(?:\s*\.-[o]\s*)/,/^(?:\s*\.-\s*)/,/^(?:\s*==[x]\s*)/,/^(?:\s*==>\s*)/,/^(?:\s*==[o]\s*)/,/^(?:\s*==[\=]\s*)/,/^(?:\s*<--\s*)/,/^(?:\s*[x]--\s*)/,/^(?:\s*[o]--\s*)/,/^(?:\s*<-\.\s*)/,/^(?:\s*[x]-\.\s*)/,/^(?:\s*[o]-\.\s*)/,/^(?:\s*<==\s*)/,/^(?:\s*[x]==\s*)/,/^(?:\s*[o]==\s*)/,/^(?:\s*--\s*)/,/^(?:\s*-\.\s*)/,/^(?:\s*==\s*)/,/^(?:\(-)/,/^(?:-\))/,/^(?:\(\[)/,/^(?:\]\))/,/^(?:\[\[)/,/^(?:\]\])/,/^(?:\[\()/,/^(?:\)\])/,/^(?:-)/,/^(?:\.)/,/^(?:[\_])/,/^(?:\+)/,/^(?:%)/,/^(?:=)/,/^(?:=)/,/^(?:<)/,/^(?:>)/,/^(?:\^)/,/^(?:\\\|)/,/^(?:v\b)/,/^(?:[A-Za-z]+)/,/^(?:\\\])/,/^(?:\[\/)/,/^(?:\/\])/,/^(?:\[\\)/,/^(?:[!"#$%&'*+,-.`?\\_/])/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/,/^(?:\|)/,/^(?:\()/,/^(?:\))/,/^(?:\[)/,/^(?:\])/,/^(?:\{)/,/^(?:\})/,/^(?:")/,/^(?:(\r?\n)+)/,/^(?:\s)/,/^(?:$)/],conditions:{close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},vertex:{rules:[],inclusive:!1},dir:{rules:[25,26,27,28,29,30,31,32,33,34,35],inclusive:!1},string:{rules:[8,9],inclusive:!1},INITIAL:{rules:[0,5,6,7,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121],inclusive:!0}}};function Xt(){this.yy={}}return Gt.lexer=qt,Xt.prototype=Gt,Gt.Parser=Xt,new Xt}();e.parser=i,e.Parser=i.Parser,e.parse=function(){return i.parse.apply(i,arguments)},e.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),t.exit(1));var i=n(19).readFileSync(n(20).normalize(r[1]),"utf8");return e.parser.parse(i)},n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(this,n(14),n(7)(t))},function(t,e,n){(function(t,r){var i=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[1,3],n=[1,5],r=[7,9,11,12,13,14,15,16,17,18,20,27,32],i=[1,15],a=[1,16],o=[1,17],s=[1,18],c=[1,19],u=[1,20],l=[1,21],h=[1,23],f=[1,25],d=[1,28],p=[5,7,9,11,12,13,14,15,16,17,18,20,27,32],y={trace:function(){},yy:{},symbols_:{error:2,start:3,directive:4,gantt:5,document:6,EOF:7,line:8,SPACE:9,statement:10,NL:11,dateFormat:12,inclusiveEndDates:13,axisFormat:14,excludes:15,todayMarker:16,title:17,section:18,clickStatement:19,taskTxt:20,taskData:21,openDirective:22,typeDirective:23,closeDirective:24,":":25,argDirective:26,click:27,callbackname:28,callbackargs:29,href:30,clickStatementDebug:31,open_directive:32,type_directive:33,arg_directive:34,close_directive:35,$accept:0,$end:1},terminals_:{2:"error",5:"gantt",7:"EOF",9:"SPACE",11:"NL",12:"dateFormat",13:"inclusiveEndDates",14:"axisFormat",15:"excludes",16:"todayMarker",17:"title",18:"section",20:"taskTxt",21:"taskData",25:":",27:"click",28:"callbackname",29:"callbackargs",30:"href",32:"open_directive",33:"type_directive",34:"arg_directive",35:"close_directive"},productions_:[0,[3,2],[3,3],[6,0],[6,2],[8,2],[8,1],[8,1],[8,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,2],[10,1],[4,4],[4,6],[19,2],[19,3],[19,3],[19,4],[19,3],[19,4],[19,2],[31,2],[31,3],[31,3],[31,4],[31,3],[31,4],[31,2],[22,1],[23,1],[26,1],[24,1]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 2:return a[s-1];case 3:this.$=[];break;case 4:a[s-1].push(a[s]),this.$=a[s-1];break;case 5:case 6:this.$=a[s];break;case 7:case 8:this.$=[];break;case 9:r.setDateFormat(a[s].substr(11)),this.$=a[s].substr(11);break;case 10:r.enableInclusiveEndDates(),this.$=a[s].substr(18);break;case 11:r.setAxisFormat(a[s].substr(11)),this.$=a[s].substr(11);break;case 12:r.setExcludes(a[s].substr(9)),this.$=a[s].substr(9);break;case 13:r.setTodayMarker(a[s].substr(12)),this.$=a[s].substr(12);break;case 14:r.setTitle(a[s].substr(6)),this.$=a[s].substr(6);break;case 15:r.addSection(a[s].substr(8)),this.$=a[s].substr(8);break;case 17:r.addTask(a[s-1],a[s]),this.$="task";break;case 21:this.$=a[s-1],r.setClickEvent(a[s-1],a[s],null);break;case 22:this.$=a[s-2],r.setClickEvent(a[s-2],a[s-1],a[s]);break;case 23:this.$=a[s-2],r.setClickEvent(a[s-2],a[s-1],null),r.setLink(a[s-2],a[s]);break;case 24:this.$=a[s-3],r.setClickEvent(a[s-3],a[s-2],a[s-1]),r.setLink(a[s-3],a[s]);break;case 25:this.$=a[s-2],r.setClickEvent(a[s-2],a[s],null),r.setLink(a[s-2],a[s-1]);break;case 26:this.$=a[s-3],r.setClickEvent(a[s-3],a[s-1],a[s]),r.setLink(a[s-3],a[s-2]);break;case 27:this.$=a[s-1],r.setLink(a[s-1],a[s]);break;case 28:case 34:this.$=a[s-1]+" "+a[s];break;case 29:case 30:case 32:this.$=a[s-2]+" "+a[s-1]+" "+a[s];break;case 31:case 33:this.$=a[s-3]+" "+a[s-2]+" "+a[s-1]+" "+a[s];break;case 35:r.parseDirective("%%{","open_directive");break;case 36:r.parseDirective(a[s],"type_directive");break;case 37:a[s]=a[s].trim().replace(/'/g,'"'),r.parseDirective(a[s],"arg_directive");break;case 38:r.parseDirective("}%%","close_directive","gantt")}},table:[{3:1,4:2,5:e,22:4,32:n},{1:[3]},{3:6,4:2,5:e,22:4,32:n},t(r,[2,3],{6:7}),{23:8,33:[1,9]},{33:[2,35]},{1:[2,1]},{4:24,7:[1,10],8:11,9:[1,12],10:13,11:[1,14],12:i,13:a,14:o,15:s,16:c,17:u,18:l,19:22,20:h,22:4,27:f,32:n},{24:26,25:[1,27],35:d},t([25,35],[2,36]),t(r,[2,8],{1:[2,2]}),t(r,[2,4]),{4:24,10:29,12:i,13:a,14:o,15:s,16:c,17:u,18:l,19:22,20:h,22:4,27:f,32:n},t(r,[2,6]),t(r,[2,7]),t(r,[2,9]),t(r,[2,10]),t(r,[2,11]),t(r,[2,12]),t(r,[2,13]),t(r,[2,14]),t(r,[2,15]),t(r,[2,16]),{21:[1,30]},t(r,[2,18]),{28:[1,31],30:[1,32]},{11:[1,33]},{26:34,34:[1,35]},{11:[2,38]},t(r,[2,5]),t(r,[2,17]),t(r,[2,21],{29:[1,36],30:[1,37]}),t(r,[2,27],{28:[1,38]}),t(p,[2,19]),{24:39,35:d},{35:[2,37]},t(r,[2,22],{30:[1,40]}),t(r,[2,23]),t(r,[2,25],{29:[1,41]}),{11:[1,42]},t(r,[2,24]),t(r,[2,26]),t(p,[2,20])],defaultActions:{5:[2,35],6:[2,1],28:[2,38],35:[2,37]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,u=0,l=0,h=2,f=1,d=a.slice.call(arguments,1),p=Object.create(this.lexer),y={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(y.yy[g]=this.yy[g]);p.setInput(t,y.yy),y.yy.lexer=p,y.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var v=p.yylloc;a.push(v);var m=p.options&&p.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||p.lex()||f)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var _,x,k,w,E,T,C,A,S,M={};;){if(k=n[n.length-1],this.defaultActions[k]?w=this.defaultActions[k]:(null==_&&(_=b()),w=o[k]&&o[k][_]),void 0===w||!w.length||!w[0]){var O="";for(T in S=[],o[k])this.terminals_[T]&&T>h&&S.push("'"+this.terminals_[T]+"'");O=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+S.join(", ")+", got '"+(this.terminals_[_]||_)+"'":"Parse error on line "+(c+1)+": Unexpected "+(_==f?"end of input":"'"+(this.terminals_[_]||_)+"'"),this.parseError(O,{text:p.match,token:this.terminals_[_]||_,line:p.yylineno,loc:v,expected:S})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+_);switch(w[0]){case 1:n.push(_),i.push(p.yytext),a.push(p.yylloc),n.push(w[1]),_=null,x?(_=x,x=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,v=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[w[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},m&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(E=this.performAction.apply(M,[s,u,c,y.yy,w[1],i,a].concat(d))))return E;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[w[1]][0]),i.push(M.$),a.push(M._$),A=o[n[n.length-2]][n[n.length-1]],n.push(A);break;case 3:return!0}}return!0}},g={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),32;case 1:return this.begin("type_directive"),33;case 2:return this.popState(),this.begin("arg_directive"),25;case 3:return this.popState(),this.popState(),35;case 4:return 34;case 5:case 6:case 7:break;case 8:return 11;case 9:case 10:case 11:break;case 12:this.begin("href");break;case 13:this.popState();break;case 14:return 30;case 15:this.begin("callbackname");break;case 16:this.popState();break;case 17:this.popState(),this.begin("callbackargs");break;case 18:return 28;case 19:this.popState();break;case 20:return 29;case 21:this.begin("click");break;case 22:this.popState();break;case 23:return 27;case 24:return 5;case 25:return 12;case 26:return 13;case 27:return 14;case 28:return 15;case 29:return 16;case 30:return"date";case 31:return 17;case 32:return 18;case 33:return 20;case 34:return 21;case 35:return 25;case 36:return 7;case 37:return"INVALID"}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%%(?!\{)*[^\n]*)/i,/^(?:[^\}]%%*[^\n]*)/i,/^(?:%%*[^\n]*[\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:href[\s]+["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:call[\s]+)/i,/^(?:\([\s]*\))/i,/^(?:\()/i,/^(?:[^(]*)/i,/^(?:\))/i,/^(?:[^)]*)/i,/^(?:click[\s]+)/i,/^(?:[\s\n])/i,/^(?:[^\s\n]*)/i,/^(?:gantt\b)/i,/^(?:dateFormat\s[^#\n;]+)/i,/^(?:inclusiveEndDates\b)/i,/^(?:axisFormat\s[^#\n;]+)/i,/^(?:excludes\s[^#\n;]+)/i,/^(?:todayMarker\s[^\n;]+)/i,/^(?:\d\d\d\d-\d\d-\d\d\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:section\s[^#:\n;]+)/i,/^(?:[^#:\n;]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},callbackargs:{rules:[19,20],inclusive:!1},callbackname:{rules:[16,17,18],inclusive:!1},href:{rules:[13,14],inclusive:!1},click:{rules:[22,23],inclusive:!1},INITIAL:{rules:[0,5,6,7,8,9,10,11,12,15,21,24,25,26,27,28,29,30,31,32,33,34,35,36,37],inclusive:!0}}};function v(){this.yy={}}return y.lexer=g,v.prototype=y,y.Parser=v,new v}();e.parser=i,e.Parser=i.Parser,e.parse=function(){return i.parse.apply(i,arguments)},e.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),t.exit(1));var i=n(19).readFileSync(n(20).normalize(r[1]),"utf8");return e.parser.parse(i)},n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(this,n(14),n(7)(t))},function(t,e,n){(function(t,r){var i=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[1,2],n=[1,5],r=[6,9,11,17,18,19,21],i=[1,15],a=[1,16],o=[1,17],s=[1,21],c=[4,6,9,11,17,18,19,21],u={trace:function(){},yy:{},symbols_:{error:2,start:3,journey:4,document:5,EOF:6,directive:7,line:8,SPACE:9,statement:10,NEWLINE:11,openDirective:12,typeDirective:13,closeDirective:14,":":15,argDirective:16,title:17,section:18,taskName:19,taskData:20,open_directive:21,type_directive:22,arg_directive:23,close_directive:24,$accept:0,$end:1},terminals_:{2:"error",4:"journey",6:"EOF",9:"SPACE",11:"NEWLINE",15:":",17:"title",18:"section",19:"taskName",20:"taskData",21:"open_directive",22:"type_directive",23:"arg_directive",24:"close_directive"},productions_:[0,[3,3],[3,2],[5,0],[5,2],[8,2],[8,1],[8,1],[8,1],[7,4],[7,6],[10,1],[10,1],[10,2],[10,1],[12,1],[13,1],[16,1],[14,1]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 1:return a[s-1];case 3:this.$=[];break;case 4:a[s-1].push(a[s]),this.$=a[s-1];break;case 5:case 6:this.$=a[s];break;case 7:case 8:this.$=[];break;case 11:r.setTitle(a[s].substr(6)),this.$=a[s].substr(6);break;case 12:r.addSection(a[s].substr(8)),this.$=a[s].substr(8);break;case 13:r.addTask(a[s-1],a[s]),this.$="task";break;case 15:r.parseDirective("%%{","open_directive");break;case 16:r.parseDirective(a[s],"type_directive");break;case 17:a[s]=a[s].trim().replace(/'/g,'"'),r.parseDirective(a[s],"arg_directive");break;case 18:r.parseDirective("}%%","close_directive","journey")}},table:[{3:1,4:e,7:3,12:4,21:n},{1:[3]},t(r,[2,3],{5:6}),{3:7,4:e,7:3,12:4,21:n},{13:8,22:[1,9]},{22:[2,15]},{6:[1,10],7:18,8:11,9:[1,12],10:13,11:[1,14],12:4,17:i,18:a,19:o,21:n},{1:[2,2]},{14:19,15:[1,20],24:s},t([15,24],[2,16]),t(r,[2,8],{1:[2,1]}),t(r,[2,4]),{7:18,10:22,12:4,17:i,18:a,19:o,21:n},t(r,[2,6]),t(r,[2,7]),t(r,[2,11]),t(r,[2,12]),{20:[1,23]},t(r,[2,14]),{11:[1,24]},{16:25,23:[1,26]},{11:[2,18]},t(r,[2,5]),t(r,[2,13]),t(c,[2,9]),{14:27,24:s},{24:[2,17]},{11:[1,28]},t(c,[2,10])],defaultActions:{5:[2,15],7:[2,2],21:[2,18],26:[2,17]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,u=0,l=0,h=2,f=1,d=a.slice.call(arguments,1),p=Object.create(this.lexer),y={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(y.yy[g]=this.yy[g]);p.setInput(t,y.yy),y.yy.lexer=p,y.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var v=p.yylloc;a.push(v);var m=p.options&&p.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||p.lex()||f)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var _,x,k,w,E,T,C,A,S,M={};;){if(k=n[n.length-1],this.defaultActions[k]?w=this.defaultActions[k]:(null==_&&(_=b()),w=o[k]&&o[k][_]),void 0===w||!w.length||!w[0]){var O="";for(T in S=[],o[k])this.terminals_[T]&&T>h&&S.push("'"+this.terminals_[T]+"'");O=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+S.join(", ")+", got '"+(this.terminals_[_]||_)+"'":"Parse error on line "+(c+1)+": Unexpected "+(_==f?"end of input":"'"+(this.terminals_[_]||_)+"'"),this.parseError(O,{text:p.match,token:this.terminals_[_]||_,line:p.yylineno,loc:v,expected:S})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+_);switch(w[0]){case 1:n.push(_),i.push(p.yytext),a.push(p.yylloc),n.push(w[1]),_=null,x?(_=x,x=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,v=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[w[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},m&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(E=this.performAction.apply(M,[s,u,c,y.yy,w[1],i,a].concat(d))))return E;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[w[1]][0]),i.push(M.$),a.push(M._$),A=o[n[n.length-2]][n[n.length-1]],n.push(A);break;case 3:return!0}}return!0}},l={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),21;case 1:return this.begin("type_directive"),22;case 2:return this.popState(),this.begin("arg_directive"),15;case 3:return this.popState(),this.popState(),24;case 4:return 23;case 5:case 6:break;case 7:return 11;case 8:case 9:break;case 10:return 4;case 11:return 17;case 12:return 18;case 13:return 19;case 14:return 20;case 15:return 15;case 16:return 6;case 17:return"INVALID"}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:journey\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:section\s[^#:\n;]+)/i,/^(?:[^#:\n;]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{open_directive:{rules:[1],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},INITIAL:{rules:[0,5,6,7,8,9,10,11,12,13,14,15,16,17],inclusive:!0}}};function h(){this.yy={}}return u.lexer=l,h.prototype=u,u.Parser=h,new h}();e.parser=i,e.Parser=i.Parser,e.parse=function(){return i.parse.apply(i,arguments)},e.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),t.exit(1));var i=n(19).readFileSync(n(20).normalize(r[1]),"utf8");return e.parser.parse(i)},n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(this,n(14),n(7)(t))},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(9),i=n(15);e.default=function(t,e){return r.default.lang.round(i.default.parse(t)[e])}},function(t,e,n){var r=n(112),i=n(82),a=n(24);t.exports=function(t){return a(t)?r(t):i(t)}},function(t,e,n){var r;if(!r)try{r=n(0)}catch(t){}r||(r=window.d3),t.exports=r},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(9),i=n(15);e.default=function(t,e,n){var a=i.default.parse(t),o=a[e],s=r.default.channel.clamp[e](o+n);return o!==s&&(a[e]=s),i.default.stringify(a)}},function(t,e,n){var r=n(210),i=n(216);t.exports=function(t,e){var n=i(t,e);return r(n)?n:void 0}},function(t,e,n){var r=n(39),i=n(212),a=n(213),o=r?r.toStringTag:void 0;t.exports=function(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":o&&o in Object(t)?i(t):a(t)}},function(t,e){t.exports=function(t){return t}},function(t){t.exports=JSON.parse('{"name":"mermaid","version":"8.7.0","description":"Markdownish syntax for generating flowcharts, sequence diagrams, class diagrams, gantt charts and git graphs.","main":"dist/mermaid.core.js","keywords":["diagram","markdown","flowchart","sequence diagram","gantt","class diagram","git graph"],"scripts":{"build:development":"webpack --progress --colors","build:production":"yarn build:development -p --config webpack.config.prod.babel.js","build":"yarn build:development && yarn build:production","postbuild":"documentation build src/mermaidAPI.js src/config.js --shallow -f md --markdown-toc false -o docs/Setup.md","build:watch":"yarn build --watch","minify":"minify ./dist/mermaid.js > ./dist/mermaid.min.js","release":"yarn build","lint":"eslint src","e2e:depr":"yarn lint && jest e2e --config e2e/jest.config.js","cypress":"percy exec -- cypress run","e2e":"start-server-and-test dev http://localhost:9000/ cypress","e2e-upd":"yarn lint && jest e2e -u --config e2e/jest.config.js","dev":"webpack-dev-server --config webpack.config.e2e.js","test":"yarn lint && jest src/.*","test:watch":"jest --watch src","prepublishOnly":"yarn build && yarn test && yarn e2e","prepare":"yarn build"},"repository":{"type":"git","url":"https://github.com/knsv/mermaid"},"author":"Knut Sveidqvist","license":"MIT","standard":{"ignore":["**/parser/*.js","dist/**/*.js","cypress/**/*.js"],"globals":["page"]},"dependencies":{"@braintree/sanitize-url":"^3.1.0","babel-eslint":"^10.1.0","d3":"^5.7.0","dagre":"^0.8.4","dagre-d3":"^0.6.4","entity-decode":"^2.0.2","graphlib":"^2.1.7","he":"^1.2.0","khroma":"^1.1.0","minify":"^4.1.1","moment-mini":"^2.22.1","stylis":"^3.5.2"},"devDependencies":{"@babel/core":"^7.2.2","@babel/preset-env":"^7.8.4","@babel/register":"^7.0.0","@percy/cypress":"*","babel-core":"7.0.0-bridge.0","babel-jest":"^24.9.0","babel-loader":"^8.0.4","coveralls":"^3.0.2","css-loader":"^2.0.1","css-to-string-loader":"^0.1.3","cypress":"4.0.1","documentation":"^12.0.1","eslint":"^6.3.0","eslint-config-prettier":"^6.3.0","eslint-plugin-prettier":"^3.1.0","husky":"^1.2.1","identity-obj-proxy":"^3.0.0","jest":"^24.9.0","jison":"^0.4.18","moment":"^2.23.0","node-sass":"^4.12.0","prettier":"^1.18.2","puppeteer":"^1.17.0","sass-loader":"^7.1.0","start-server-and-test":"^1.10.6","terser-webpack-plugin":"^2.2.2","webpack":"^4.41.2","webpack-bundle-analyzer":"^3.7.0","webpack-cli":"^3.1.2","webpack-dev-server":"^3.4.1","webpack-node-externals":"^1.7.2","yarn-upgrade-all":"^0.5.0"},"files":["dist"],"yarn-upgrade-all":{"ignore":["babel-core"]},"sideEffects":["**/*.css","**/*.scss"],"husky":{"hooks":{"pre-push":"yarn test"}}}')},function(t,e){t.exports=function(t,e){return t===e||t!=t&&e!=e}},function(t,e,n){var r=n(34),i=n(11);t.exports=function(t){if(!i(t))return!1;var e=r(t);return"[object Function]"==e||"[object GeneratorFunction]"==e||"[object AsyncFunction]"==e||"[object Proxy]"==e}},function(t,e,n){var r=n(16).Symbol;t.exports=r},function(t,e,n){(function(t){var r=n(16),i=n(232),a=e&&!e.nodeType&&e,o=a&&"object"==typeof t&&t&&!t.nodeType&&t,s=o&&o.exports===a?r.Buffer:void 0,c=(s?s.isBuffer:void 0)||i;t.exports=c}).call(this,n(7)(t))},function(t,e,n){var r=n(112),i=n(236),a=n(24);t.exports=function(t){return a(t)?r(t,!0):i(t)}},function(t,e,n){var r=n(241),i=n(77),a=n(242),o=n(121),s=n(243),c=n(34),u=n(110),l=u(r),h=u(i),f=u(a),d=u(o),p=u(s),y=c;(r&&"[object DataView]"!=y(new r(new ArrayBuffer(1)))||i&&"[object Map]"!=y(new i)||a&&"[object Promise]"!=y(a.resolve())||o&&"[object Set]"!=y(new o)||s&&"[object WeakMap]"!=y(new s))&&(y=function(t){var e=c(t),n="[object Object]"==e?t.constructor:void 0,r=n?u(n):"";if(r)switch(r){case l:return"[object DataView]";case h:return"[object Map]";case f:return"[object Promise]";case d:return"[object Set]";case p:return"[object WeakMap]"}return e}),t.exports=y},function(t,e,n){var r=n(34),i=n(21);t.exports=function(t){return"symbol"==typeof t||i(t)&&"[object Symbol]"==r(t)}},function(t,e,n){var r;try{r={defaults:n(154),each:n(87),isFunction:n(38),isPlainObject:n(158),pick:n(161),has:n(93),range:n(162),uniqueId:n(163)}}catch(t){}r||(r=window._),t.exports=r},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=new(n(176).default)({r:0,g:0,b:0,a:0},"transparent");e.default=r},function(t,e,n){var r=n(58),i=n(59);t.exports=function(t,e,n,a){var o=!n;n||(n={});for(var s=-1,c=e.length;++s-1&&t%1==0&&t-1}(s)?s:(n=s.match(a))?(e=n[0],r.test(e)?"about:blank":s):"about:blank"}}},function(t,e,n){(function(t,r){var i=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[2,3],n=[1,7],r=[7,12,15,17,19,20,21],i=[7,11,12,15,17,19,20,21],a=[2,20],o=[1,32],s={trace:function(){},yy:{},symbols_:{error:2,start:3,GG:4,":":5,document:6,EOF:7,DIR:8,options:9,body:10,OPT:11,NL:12,line:13,statement:14,COMMIT:15,commit_arg:16,BRANCH:17,ID:18,CHECKOUT:19,MERGE:20,RESET:21,reset_arg:22,STR:23,HEAD:24,reset_parents:25,CARET:26,$accept:0,$end:1},terminals_:{2:"error",4:"GG",5:":",7:"EOF",8:"DIR",11:"OPT",12:"NL",15:"COMMIT",17:"BRANCH",18:"ID",19:"CHECKOUT",20:"MERGE",21:"RESET",23:"STR",24:"HEAD",26:"CARET"},productions_:[0,[3,4],[3,5],[6,0],[6,2],[9,2],[9,1],[10,0],[10,2],[13,2],[13,1],[14,2],[14,2],[14,2],[14,2],[14,2],[16,0],[16,1],[22,2],[22,2],[25,0],[25,2]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 1:return a[s-1];case 2:return r.setDirection(a[s-3]),a[s-1];case 4:r.setOptions(a[s-1]),this.$=a[s];break;case 5:a[s-1]+=a[s],this.$=a[s-1];break;case 7:this.$=[];break;case 8:a[s-1].push(a[s]),this.$=a[s-1];break;case 9:this.$=a[s-1];break;case 11:r.commit(a[s]);break;case 12:r.branch(a[s]);break;case 13:r.checkout(a[s]);break;case 14:r.merge(a[s]);break;case 15:r.reset(a[s]);break;case 16:this.$="";break;case 17:this.$=a[s];break;case 18:this.$=a[s-1]+":"+a[s];break;case 19:this.$=a[s-1]+":"+r.count,r.count=0;break;case 20:r.count=0;break;case 21:r.count+=1}},table:[{3:1,4:[1,2]},{1:[3]},{5:[1,3],8:[1,4]},{6:5,7:e,9:6,12:n},{5:[1,8]},{7:[1,9]},t(r,[2,7],{10:10,11:[1,11]}),t(i,[2,6]),{6:12,7:e,9:6,12:n},{1:[2,1]},{7:[2,4],12:[1,15],13:13,14:14,15:[1,16],17:[1,17],19:[1,18],20:[1,19],21:[1,20]},t(i,[2,5]),{7:[1,21]},t(r,[2,8]),{12:[1,22]},t(r,[2,10]),{12:[2,16],16:23,23:[1,24]},{18:[1,25]},{18:[1,26]},{18:[1,27]},{18:[1,30],22:28,24:[1,29]},{1:[2,2]},t(r,[2,9]),{12:[2,11]},{12:[2,17]},{12:[2,12]},{12:[2,13]},{12:[2,14]},{12:[2,15]},{12:a,25:31,26:o},{12:a,25:33,26:o},{12:[2,18]},{12:a,25:34,26:o},{12:[2,19]},{12:[2,21]}],defaultActions:{9:[2,1],21:[2,2],23:[2,11],24:[2,17],25:[2,12],26:[2,13],27:[2,14],28:[2,15],31:[2,18],33:[2,19],34:[2,21]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,u=0,l=0,h=2,f=1,d=a.slice.call(arguments,1),p=Object.create(this.lexer),y={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(y.yy[g]=this.yy[g]);p.setInput(t,y.yy),y.yy.lexer=p,y.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var v=p.yylloc;a.push(v);var m=p.options&&p.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||p.lex()||f)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var _,x,k,w,E,T,C,A,S,M={};;){if(k=n[n.length-1],this.defaultActions[k]?w=this.defaultActions[k]:(null==_&&(_=b()),w=o[k]&&o[k][_]),void 0===w||!w.length||!w[0]){var O="";for(T in S=[],o[k])this.terminals_[T]&&T>h&&S.push("'"+this.terminals_[T]+"'");O=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+S.join(", ")+", got '"+(this.terminals_[_]||_)+"'":"Parse error on line "+(c+1)+": Unexpected "+(_==f?"end of input":"'"+(this.terminals_[_]||_)+"'"),this.parseError(O,{text:p.match,token:this.terminals_[_]||_,line:p.yylineno,loc:v,expected:S})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+_);switch(w[0]){case 1:n.push(_),i.push(p.yytext),a.push(p.yylloc),n.push(w[1]),_=null,x?(_=x,x=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,v=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[w[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},m&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(E=this.performAction.apply(M,[s,u,c,y.yy,w[1],i,a].concat(d))))return E;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[w[1]][0]),i.push(M.$),a.push(M._$),A=o[n[n.length-2]][n[n.length-1]],n.push(A);break;case 3:return!0}}return!0}},c={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return 12;case 1:case 2:case 3:break;case 4:return 4;case 5:return 15;case 6:return 17;case 7:return 20;case 8:return 21;case 9:return 19;case 10:case 11:return 8;case 12:return 5;case 13:return 26;case 14:this.begin("options");break;case 15:this.popState();break;case 16:return 11;case 17:this.begin("string");break;case 18:this.popState();break;case 19:return 23;case 20:return 18;case 21:return 7}},rules:[/^(?:(\r?\n)+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:gitGraph\b)/i,/^(?:commit\b)/i,/^(?:branch\b)/i,/^(?:merge\b)/i,/^(?:reset\b)/i,/^(?:checkout\b)/i,/^(?:LR\b)/i,/^(?:BT\b)/i,/^(?::)/i,/^(?:\^)/i,/^(?:options\r?\n)/i,/^(?:end\r?\n)/i,/^(?:[^\n]+\r?\n)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[a-zA-Z][-_\.a-zA-Z0-9]*[-_a-zA-Z0-9])/i,/^(?:$)/i],conditions:{options:{rules:[15,16],inclusive:!1},string:{rules:[18,19],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,17,20,21],inclusive:!0}}};function u(){this.yy={}}return s.lexer=c,u.prototype=s,s.Parser=u,new u}();e.parser=i,e.Parser=i.Parser,e.parse=function(){return i.parse.apply(i,arguments)},e.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),t.exit(1));var i=n(19).readFileSync(n(20).normalize(r[1]),"utf8");return e.parser.parse(i)},n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(this,n(14),n(7)(t))},function(t,e,n){(function(t,r){var i=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[6,9,10],n={trace:function(){},yy:{},symbols_:{error:2,start:3,info:4,document:5,EOF:6,line:7,statement:8,NL:9,showInfo:10,$accept:0,$end:1},terminals_:{2:"error",4:"info",6:"EOF",9:"NL",10:"showInfo"},productions_:[0,[3,3],[5,0],[5,2],[7,1],[7,1],[8,1]],performAction:function(t,e,n,r,i,a,o){a.length;switch(i){case 1:return r;case 4:break;case 6:r.setInfo(!0)}},table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:6,9:[1,7],10:[1,8]},{1:[2,1]},t(e,[2,3]),t(e,[2,4]),t(e,[2,5]),t(e,[2,6])],defaultActions:{4:[2,1]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,u=0,l=0,h=2,f=1,d=a.slice.call(arguments,1),p=Object.create(this.lexer),y={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(y.yy[g]=this.yy[g]);p.setInput(t,y.yy),y.yy.lexer=p,y.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var v=p.yylloc;a.push(v);var m=p.options&&p.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||p.lex()||f)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var _,x,k,w,E,T,C,A,S,M={};;){if(k=n[n.length-1],this.defaultActions[k]?w=this.defaultActions[k]:(null==_&&(_=b()),w=o[k]&&o[k][_]),void 0===w||!w.length||!w[0]){var O="";for(T in S=[],o[k])this.terminals_[T]&&T>h&&S.push("'"+this.terminals_[T]+"'");O=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+S.join(", ")+", got '"+(this.terminals_[_]||_)+"'":"Parse error on line "+(c+1)+": Unexpected "+(_==f?"end of input":"'"+(this.terminals_[_]||_)+"'"),this.parseError(O,{text:p.match,token:this.terminals_[_]||_,line:p.yylineno,loc:v,expected:S})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+_);switch(w[0]){case 1:n.push(_),i.push(p.yytext),a.push(p.yylloc),n.push(w[1]),_=null,x?(_=x,x=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,v=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[w[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},m&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(E=this.performAction.apply(M,[s,u,c,y.yy,w[1],i,a].concat(d))))return E;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[w[1]][0]),i.push(M.$),a.push(M._$),A=o[n[n.length-2]][n[n.length-1]],n.push(A);break;case 3:return!0}}return!0}},r={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return 4;case 1:return 9;case 2:return"space";case 3:return 10;case 4:return 6;case 5:return"TXT"}},rules:[/^(?:info\b)/i,/^(?:[\s\n\r]+)/i,/^(?:[\s]+)/i,/^(?:showInfo\b)/i,/^(?:$)/i,/^(?:.)/i],conditions:{INITIAL:{rules:[0,1,2,3,4,5],inclusive:!0}}};function i(){this.yy={}}return n.lexer=r,i.prototype=n,n.Parser=i,new i}();e.parser=i,e.Parser=i.Parser,e.parse=function(){return i.parse.apply(i,arguments)},e.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),t.exit(1));var i=n(19).readFileSync(n(20).normalize(r[1]),"utf8");return e.parser.parse(i)},n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(this,n(14),n(7)(t))},function(t,e,n){(function(t,r){var i=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[1,4],n=[1,5],r=[1,6],i=[1,7],a=[1,9],o=[1,10,12,19,20,21,22],s=[1,6,10,12,19,20,21,22],c=[19,20,21],u=[1,22],l=[6,19,20,21,22],h={trace:function(){},yy:{},symbols_:{error:2,start:3,eol:4,directive:5,PIE:6,document:7,line:8,statement:9,txt:10,value:11,title:12,title_value:13,openDirective:14,typeDirective:15,closeDirective:16,":":17,argDirective:18,NEWLINE:19,";":20,EOF:21,open_directive:22,type_directive:23,arg_directive:24,close_directive:25,$accept:0,$end:1},terminals_:{2:"error",6:"PIE",10:"txt",11:"value",12:"title",13:"title_value",17:":",19:"NEWLINE",20:";",21:"EOF",22:"open_directive",23:"type_directive",24:"arg_directive",25:"close_directive"},productions_:[0,[3,2],[3,2],[3,2],[7,0],[7,2],[8,2],[9,0],[9,2],[9,2],[9,1],[5,3],[5,5],[4,1],[4,1],[4,1],[14,1],[15,1],[18,1],[16,1]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 6:this.$=a[s-1];break;case 8:r.addSection(a[s-1],r.cleanupValue(a[s]));break;case 9:this.$=a[s].trim(),r.setTitle(this.$);break;case 16:r.parseDirective("%%{","open_directive");break;case 17:r.parseDirective(a[s],"type_directive");break;case 18:a[s]=a[s].trim().replace(/'/g,'"'),r.parseDirective(a[s],"arg_directive");break;case 19:r.parseDirective("}%%","close_directive","pie")}},table:[{3:1,4:2,5:3,6:e,14:8,19:n,20:r,21:i,22:a},{1:[3]},{3:10,4:2,5:3,6:e,14:8,19:n,20:r,21:i,22:a},{3:11,4:2,5:3,6:e,14:8,19:n,20:r,21:i,22:a},t(o,[2,4],{7:12}),t(s,[2,13]),t(s,[2,14]),t(s,[2,15]),{15:13,23:[1,14]},{23:[2,16]},{1:[2,1]},{1:[2,2]},t(c,[2,7],{14:8,8:15,9:16,5:19,1:[2,3],10:[1,17],12:[1,18],22:a}),{16:20,17:[1,21],25:u},t([17,25],[2,17]),t(o,[2,5]),{4:23,19:n,20:r,21:i},{11:[1,24]},{13:[1,25]},t(c,[2,10]),t(l,[2,11]),{18:26,24:[1,27]},t(l,[2,19]),t(o,[2,6]),t(c,[2,8]),t(c,[2,9]),{16:28,25:u},{25:[2,18]},t(l,[2,12])],defaultActions:{9:[2,16],10:[2,1],11:[2,2],27:[2,18]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,u=0,l=0,h=2,f=1,d=a.slice.call(arguments,1),p=Object.create(this.lexer),y={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(y.yy[g]=this.yy[g]);p.setInput(t,y.yy),y.yy.lexer=p,y.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var v=p.yylloc;a.push(v);var m=p.options&&p.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||p.lex()||f)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var _,x,k,w,E,T,C,A,S,M={};;){if(k=n[n.length-1],this.defaultActions[k]?w=this.defaultActions[k]:(null==_&&(_=b()),w=o[k]&&o[k][_]),void 0===w||!w.length||!w[0]){var O="";for(T in S=[],o[k])this.terminals_[T]&&T>h&&S.push("'"+this.terminals_[T]+"'");O=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+S.join(", ")+", got '"+(this.terminals_[_]||_)+"'":"Parse error on line "+(c+1)+": Unexpected "+(_==f?"end of input":"'"+(this.terminals_[_]||_)+"'"),this.parseError(O,{text:p.match,token:this.terminals_[_]||_,line:p.yylineno,loc:v,expected:S})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+_);switch(w[0]){case 1:n.push(_),i.push(p.yytext),a.push(p.yylloc),n.push(w[1]),_=null,x?(_=x,x=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,v=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[w[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},m&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(E=this.performAction.apply(M,[s,u,c,y.yy,w[1],i,a].concat(d))))return E;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[w[1]][0]),i.push(M.$),a.push(M._$),A=o[n[n.length-2]][n[n.length-1]],n.push(A);break;case 3:return!0}}return!0}},f={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),22;case 1:return this.begin("type_directive"),23;case 2:return this.popState(),this.begin("arg_directive"),17;case 3:return this.popState(),this.popState(),25;case 4:return 24;case 5:break;case 6:console.log("Crap after close");break;case 7:return 19;case 8:case 9:break;case 10:return this.begin("title"),12;case 11:return this.popState(),"title_value";case 12:this.begin("string");break;case 13:this.popState();break;case 14:return"txt";case 15:return 6;case 16:return"value";case 17:return 21}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n\r]+)/i,/^(?:%%[^\n]*)/i,/^(?:[\s]+)/i,/^(?:title\b)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:pie\b)/i,/^(?::[\s]*[\d]+(?:\.[\d]+)?)/i,/^(?:$)/i],conditions:{close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},title:{rules:[11],inclusive:!1},string:{rules:[13,14],inclusive:!1},INITIAL:{rules:[0,5,6,7,8,9,10,12,15,16,17],inclusive:!0}}};function d(){this.yy={}}return h.lexer=f,d.prototype=h,h.Parser=d,new d}();e.parser=i,e.Parser=i.Parser,e.parse=function(){return i.parse.apply(i,arguments)},e.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),t.exit(1));var i=n(19).readFileSync(n(20).normalize(r[1]),"utf8");return e.parser.parse(i)},n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(this,n(14),n(7)(t))},function(t,e,n){(function(t,r){var i=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[1,2],n=[1,5],r=[6,9,11,20,30],i=[1,17],a=[1,20],o=[1,24],s=[1,25],c=[1,26],u=[1,27],l=[20,27,28],h=[4,6,9,11,20,30],f=[23,24,25,26],d={trace:function(){},yy:{},symbols_:{error:2,start:3,ER_DIAGRAM:4,document:5,EOF:6,directive:7,line:8,SPACE:9,statement:10,NEWLINE:11,openDirective:12,typeDirective:13,closeDirective:14,":":15,argDirective:16,entityName:17,relSpec:18,role:19,ALPHANUM:20,cardinality:21,relType:22,ZERO_OR_ONE:23,ZERO_OR_MORE:24,ONE_OR_MORE:25,ONLY_ONE:26,NON_IDENTIFYING:27,IDENTIFYING:28,WORD:29,open_directive:30,type_directive:31,arg_directive:32,close_directive:33,$accept:0,$end:1},terminals_:{2:"error",4:"ER_DIAGRAM",6:"EOF",9:"SPACE",11:"NEWLINE",15:":",20:"ALPHANUM",23:"ZERO_OR_ONE",24:"ZERO_OR_MORE",25:"ONE_OR_MORE",26:"ONLY_ONE",27:"NON_IDENTIFYING",28:"IDENTIFYING",29:"WORD",30:"open_directive",31:"type_directive",32:"arg_directive",33:"close_directive"},productions_:[0,[3,3],[3,2],[5,0],[5,2],[8,2],[8,1],[8,1],[8,1],[7,4],[7,6],[10,1],[10,5],[17,1],[18,3],[21,1],[21,1],[21,1],[21,1],[22,1],[22,1],[19,1],[19,1],[12,1],[13,1],[16,1],[14,1]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 1:break;case 3:this.$=[];break;case 4:a[s-1].push(a[s]),this.$=a[s-1];break;case 5:case 6:this.$=a[s];break;case 7:case 8:this.$=[];break;case 12:r.addEntity(a[s-4]),r.addEntity(a[s-2]),r.addRelationship(a[s-4],a[s],a[s-2],a[s-3]);break;case 13:this.$=a[s];break;case 14:this.$={cardA:a[s],relType:a[s-1],cardB:a[s-2]};break;case 15:this.$=r.Cardinality.ZERO_OR_ONE;break;case 16:this.$=r.Cardinality.ZERO_OR_MORE;break;case 17:this.$=r.Cardinality.ONE_OR_MORE;break;case 18:this.$=r.Cardinality.ONLY_ONE;break;case 19:this.$=r.Identification.NON_IDENTIFYING;break;case 20:this.$=r.Identification.IDENTIFYING;break;case 21:this.$=a[s].replace(/"/g,"");break;case 22:this.$=a[s];break;case 23:r.parseDirective("%%{","open_directive");break;case 24:r.parseDirective(a[s],"type_directive");break;case 25:a[s]=a[s].trim().replace(/'/g,'"'),r.parseDirective(a[s],"arg_directive");break;case 26:r.parseDirective("}%%","close_directive","er")}},table:[{3:1,4:e,7:3,12:4,30:n},{1:[3]},t(r,[2,3],{5:6}),{3:7,4:e,7:3,12:4,30:n},{13:8,31:[1,9]},{31:[2,23]},{6:[1,10],7:15,8:11,9:[1,12],10:13,11:[1,14],12:4,17:16,20:i,30:n},{1:[2,2]},{14:18,15:[1,19],33:a},t([15,33],[2,24]),t(r,[2,8],{1:[2,1]}),t(r,[2,4]),{7:15,10:21,12:4,17:16,20:i,30:n},t(r,[2,6]),t(r,[2,7]),t(r,[2,11]),{18:22,21:23,23:o,24:s,25:c,26:u},t([15,23,24,25,26],[2,13]),{11:[1,28]},{16:29,32:[1,30]},{11:[2,26]},t(r,[2,5]),{17:31,20:i},{22:32,27:[1,33],28:[1,34]},t(l,[2,15]),t(l,[2,16]),t(l,[2,17]),t(l,[2,18]),t(h,[2,9]),{14:35,33:a},{33:[2,25]},{15:[1,36]},{21:37,23:o,24:s,25:c,26:u},t(f,[2,19]),t(f,[2,20]),{11:[1,38]},{19:39,20:[1,41],29:[1,40]},{20:[2,14]},t(h,[2,10]),t(r,[2,12]),t(r,[2,21]),t(r,[2,22])],defaultActions:{5:[2,23],7:[2,2],20:[2,26],30:[2,25],37:[2,14]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,u=0,l=0,h=2,f=1,d=a.slice.call(arguments,1),p=Object.create(this.lexer),y={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(y.yy[g]=this.yy[g]);p.setInput(t,y.yy),y.yy.lexer=p,y.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var v=p.yylloc;a.push(v);var m=p.options&&p.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||p.lex()||f)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var _,x,k,w,E,T,C,A,S,M={};;){if(k=n[n.length-1],this.defaultActions[k]?w=this.defaultActions[k]:(null==_&&(_=b()),w=o[k]&&o[k][_]),void 0===w||!w.length||!w[0]){var O="";for(T in S=[],o[k])this.terminals_[T]&&T>h&&S.push("'"+this.terminals_[T]+"'");O=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+S.join(", ")+", got '"+(this.terminals_[_]||_)+"'":"Parse error on line "+(c+1)+": Unexpected "+(_==f?"end of input":"'"+(this.terminals_[_]||_)+"'"),this.parseError(O,{text:p.match,token:this.terminals_[_]||_,line:p.yylineno,loc:v,expected:S})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+_);switch(w[0]){case 1:n.push(_),i.push(p.yytext),a.push(p.yylloc),n.push(w[1]),_=null,x?(_=x,x=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,v=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[w[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},m&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(E=this.performAction.apply(M,[s,u,c,y.yy,w[1],i,a].concat(d))))return E;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[w[1]][0]),i.push(M.$),a.push(M._$),A=o[n[n.length-2]][n[n.length-1]],n.push(A);break;case 3:return!0}}return!0}},p={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),30;case 1:return this.begin("type_directive"),31;case 2:return this.popState(),this.begin("arg_directive"),15;case 3:return this.popState(),this.popState(),33;case 4:return 32;case 5:case 6:break;case 7:return 11;case 8:break;case 9:return 9;case 10:return 29;case 11:return 4;case 12:return 23;case 13:return 24;case 14:return 25;case 15:return 26;case 16:return 23;case 17:return 24;case 18:return 25;case 19:return 27;case 20:return 28;case 21:case 22:return 27;case 23:return 20;case 24:return e.yytext[0];case 25:return 6}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:[\s]+)/i,/^(?:"[^"]*")/i,/^(?:erDiagram\b)/i,/^(?:\|o\b)/i,/^(?:\}o\b)/i,/^(?:\}\|)/i,/^(?:\|\|)/i,/^(?:o\|)/i,/^(?:o\{)/i,/^(?:\|\{)/i,/^(?:\.\.)/i,/^(?:--)/i,/^(?:\.-)/i,/^(?:-\.)/i,/^(?:[A-Za-z][A-Za-z0-9\-]*)/i,/^(?:.)/i,/^(?:$)/i],conditions:{open_directive:{rules:[1],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},INITIAL:{rules:[0,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25],inclusive:!0}}};function y(){this.yy={}}return d.lexer=p,y.prototype=d,d.Parser=y,new y}();e.parser=i,e.Parser=i.Parser,e.parse=function(){return i.parse.apply(i,arguments)},e.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),t.exit(1));var i=n(19).readFileSync(n(20).normalize(r[1]),"utf8");return e.parser.parse(i)},n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(this,n(14),n(7)(t))},function(t,e,n){"use strict";var r;Object.defineProperty(e,"__esModule",{value:!0}),function(t){t[t.ALL=0]="ALL",t[t.RGB=1]="RGB",t[t.HSL=2]="HSL"}(r||(r={})),e.TYPE=r},function(t,e,n){"use strict";var r=n(10);t.exports=i;function i(t){this._isDirected=!r.has(t,"directed")||t.directed,this._isMultigraph=!!r.has(t,"multigraph")&&t.multigraph,this._isCompound=!!r.has(t,"compound")&&t.compound,this._label=void 0,this._defaultNodeLabelFn=r.constant(void 0),this._defaultEdgeLabelFn=r.constant(void 0),this._nodes={},this._isCompound&&(this._parent={},this._children={},this._children["\0"]={}),this._in={},this._preds={},this._out={},this._sucs={},this._edgeObjs={},this._edgeLabels={}}function a(t,e){t[e]?t[e]++:t[e]=1}function o(t,e){--t[e]||delete t[e]}function s(t,e,n,i){var a=""+e,o=""+n;if(!t&&a>o){var s=a;a=o,o=s}return a+""+o+""+(r.isUndefined(i)?"\0":i)}function c(t,e,n,r){var i=""+e,a=""+n;if(!t&&i>a){var o=i;i=a,a=o}var s={v:i,w:a};return r&&(s.name=r),s}function u(t,e){return s(t,e.v,e.w,e.name)}i.prototype._nodeCount=0,i.prototype._edgeCount=0,i.prototype.isDirected=function(){return this._isDirected},i.prototype.isMultigraph=function(){return this._isMultigraph},i.prototype.isCompound=function(){return this._isCompound},i.prototype.setGraph=function(t){return this._label=t,this},i.prototype.graph=function(){return this._label},i.prototype.setDefaultNodeLabel=function(t){return r.isFunction(t)||(t=r.constant(t)),this._defaultNodeLabelFn=t,this},i.prototype.nodeCount=function(){return this._nodeCount},i.prototype.nodes=function(){return r.keys(this._nodes)},i.prototype.sources=function(){var t=this;return r.filter(this.nodes(),(function(e){return r.isEmpty(t._in[e])}))},i.prototype.sinks=function(){var t=this;return r.filter(this.nodes(),(function(e){return r.isEmpty(t._out[e])}))},i.prototype.setNodes=function(t,e){var n=arguments,i=this;return r.each(t,(function(t){n.length>1?i.setNode(t,e):i.setNode(t)})),this},i.prototype.setNode=function(t,e){return r.has(this._nodes,t)?(arguments.length>1&&(this._nodes[t]=e),this):(this._nodes[t]=arguments.length>1?e:this._defaultNodeLabelFn(t),this._isCompound&&(this._parent[t]="\0",this._children[t]={},this._children["\0"][t]=!0),this._in[t]={},this._preds[t]={},this._out[t]={},this._sucs[t]={},++this._nodeCount,this)},i.prototype.node=function(t){return this._nodes[t]},i.prototype.hasNode=function(t){return r.has(this._nodes,t)},i.prototype.removeNode=function(t){var e=this;if(r.has(this._nodes,t)){var n=function(t){e.removeEdge(e._edgeObjs[t])};delete this._nodes[t],this._isCompound&&(this._removeFromParentsChildList(t),delete this._parent[t],r.each(this.children(t),(function(t){e.setParent(t)})),delete this._children[t]),r.each(r.keys(this._in[t]),n),delete this._in[t],delete this._preds[t],r.each(r.keys(this._out[t]),n),delete this._out[t],delete this._sucs[t],--this._nodeCount}return this},i.prototype.setParent=function(t,e){if(!this._isCompound)throw new Error("Cannot set parent in a non-compound graph");if(r.isUndefined(e))e="\0";else{for(var n=e+="";!r.isUndefined(n);n=this.parent(n))if(n===t)throw new Error("Setting "+e+" as parent of "+t+" would create a cycle");this.setNode(e)}return this.setNode(t),this._removeFromParentsChildList(t),this._parent[t]=e,this._children[e][t]=!0,this},i.prototype._removeFromParentsChildList=function(t){delete this._children[this._parent[t]][t]},i.prototype.parent=function(t){if(this._isCompound){var e=this._parent[t];if("\0"!==e)return e}},i.prototype.children=function(t){if(r.isUndefined(t)&&(t="\0"),this._isCompound){var e=this._children[t];if(e)return r.keys(e)}else{if("\0"===t)return this.nodes();if(this.hasNode(t))return[]}},i.prototype.predecessors=function(t){var e=this._preds[t];if(e)return r.keys(e)},i.prototype.successors=function(t){var e=this._sucs[t];if(e)return r.keys(e)},i.prototype.neighbors=function(t){var e=this.predecessors(t);if(e)return r.union(e,this.successors(t))},i.prototype.isLeaf=function(t){return 0===(this.isDirected()?this.successors(t):this.neighbors(t)).length},i.prototype.filterNodes=function(t){var e=new this.constructor({directed:this._isDirected,multigraph:this._isMultigraph,compound:this._isCompound});e.setGraph(this.graph());var n=this;r.each(this._nodes,(function(n,r){t(r)&&e.setNode(r,n)})),r.each(this._edgeObjs,(function(t){e.hasNode(t.v)&&e.hasNode(t.w)&&e.setEdge(t,n.edge(t))}));var i={};return this._isCompound&&r.each(e.nodes(),(function(t){e.setParent(t,function t(r){var a=n.parent(r);return void 0===a||e.hasNode(a)?(i[r]=a,a):a in i?i[a]:t(a)}(t))})),e},i.prototype.setDefaultEdgeLabel=function(t){return r.isFunction(t)||(t=r.constant(t)),this._defaultEdgeLabelFn=t,this},i.prototype.edgeCount=function(){return this._edgeCount},i.prototype.edges=function(){return r.values(this._edgeObjs)},i.prototype.setPath=function(t,e){var n=this,i=arguments;return r.reduce(t,(function(t,r){return i.length>1?n.setEdge(t,r,e):n.setEdge(t,r),r})),this},i.prototype.setEdge=function(){var t,e,n,i,o=!1,u=arguments[0];"object"==typeof u&&null!==u&&"v"in u?(t=u.v,e=u.w,n=u.name,2===arguments.length&&(i=arguments[1],o=!0)):(t=u,e=arguments[1],n=arguments[3],arguments.length>2&&(i=arguments[2],o=!0)),t=""+t,e=""+e,r.isUndefined(n)||(n=""+n);var l=s(this._isDirected,t,e,n);if(r.has(this._edgeLabels,l))return o&&(this._edgeLabels[l]=i),this;if(!r.isUndefined(n)&&!this._isMultigraph)throw new Error("Cannot set a named edge when isMultigraph = false");this.setNode(t),this.setNode(e),this._edgeLabels[l]=o?i:this._defaultEdgeLabelFn(t,e,n);var h=c(this._isDirected,t,e,n);return t=h.v,e=h.w,Object.freeze(h),this._edgeObjs[l]=h,a(this._preds[e],t),a(this._sucs[t],e),this._in[e][l]=h,this._out[t][l]=h,this._edgeCount++,this},i.prototype.edge=function(t,e,n){var r=1===arguments.length?u(this._isDirected,arguments[0]):s(this._isDirected,t,e,n);return this._edgeLabels[r]},i.prototype.hasEdge=function(t,e,n){var i=1===arguments.length?u(this._isDirected,arguments[0]):s(this._isDirected,t,e,n);return r.has(this._edgeLabels,i)},i.prototype.removeEdge=function(t,e,n){var r=1===arguments.length?u(this._isDirected,arguments[0]):s(this._isDirected,t,e,n),i=this._edgeObjs[r];return i&&(t=i.v,e=i.w,delete this._edgeLabels[r],delete this._edgeObjs[r],o(this._preds[e],t),o(this._sucs[t],e),delete this._in[e][r],delete this._out[t][r],this._edgeCount--),this},i.prototype.inEdges=function(t,e){var n=this._in[t];if(n){var i=r.values(n);return e?r.filter(i,(function(t){return t.v===e})):i}},i.prototype.outEdges=function(t,e){var n=this._out[t];if(n){var i=r.values(n);return e?r.filter(i,(function(t){return t.w===e})):i}},i.prototype.nodeEdges=function(t,e){var n=this.inEdges(t,e);if(n)return n.concat(this.outEdges(t,e))}},function(t,e,n){var r=n(33)(n(16),"Map");t.exports=r},function(t,e,n){var r=n(217),i=n(224),a=n(226),o=n(227),s=n(228);function c(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e-1&&t%1==0&&t<=9007199254740991}},function(t,e,n){(function(t){var r=n(109),i=e&&!e.nodeType&&e,a=i&&"object"==typeof t&&t&&!t.nodeType&&t,o=a&&a.exports===i&&r.process,s=function(){try{var t=a&&a.require&&a.require("util").types;return t||o&&o.binding&&o.binding("util")}catch(t){}}();t.exports=s}).call(this,n(7)(t))},function(t,e,n){var r=n(62),i=n(234),a=Object.prototype.hasOwnProperty;t.exports=function(t){if(!r(t))return i(t);var e=[];for(var n in Object(t))a.call(t,n)&&"constructor"!=n&&e.push(n);return e}},function(t,e,n){var r=n(116),i=n(117),a=Object.prototype.propertyIsEnumerable,o=Object.getOwnPropertySymbols,s=o?function(t){return null==t?[]:(t=Object(t),r(o(t),(function(e){return a.call(t,e)})))}:i;t.exports=s},function(t,e){t.exports=function(t,e){for(var n=-1,r=e.length,i=t.length;++n0&&a(l)?n>1?t(l,n-1,a,o,s):r(s,l):o||(s[s.length]=l)}return s}},function(t,e,n){var r=n(43);t.exports=function(t,e,n){for(var i=-1,a=t.length;++i4,u=c?1:17,l=c?8:4,h=s?0:-1,f=c?255:15;return i.default.set({r:(r>>l*(h+3)&f)*u,g:(r>>l*(h+2)&f)*u,b:(r>>l*(h+1)&f)*u,a:s?(r&f)*u/255:1},t)}}},stringify:function(t){return t.a<1?"#"+a.DEC2HEX[Math.round(t.r)]+a.DEC2HEX[Math.round(t.g)]+a.DEC2HEX[Math.round(t.b)]+r.default.unit.frac2hex(t.a):"#"+a.DEC2HEX[Math.round(t.r)]+a.DEC2HEX[Math.round(t.g)]+a.DEC2HEX[Math.round(t.b)]}};e.default=o},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(9),i=n(45),a=n(15);e.default=function(t,e,n,o){void 0===o&&(o=1);var s=i.default.set({h:r.default.channel.clamp.h(t),s:r.default.channel.clamp.s(e),l:r.default.channel.clamp.l(n),a:r.default.channel.clamp.a(o)});return a.default.stringify(s)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(29);e.default=function(t){return r.default(t,"a")}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(9),i=n(15);e.default=function(t){var e=i.default.parse(t),n=e.r,a=e.g,o=e.b,s=.2126*r.default.channel.toLinear(n)+.7152*r.default.channel.toLinear(a)+.0722*r.default.channel.toLinear(o);return r.default.lang.round(s)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(102);e.default=function(t){return r.default(t)>=.5}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(32);e.default=function(t,e){return r.default(t,"a",e)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(32);e.default=function(t,e){return r.default(t,"a",-e)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(15),i=n(52);e.default=function(t,e){var n=r.default.parse(t),a={};for(var o in e)e[o]&&(a[o]=n[o]+e[o]);return i.default(t,a)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(15),i=n(51);e.default=function(t,e,n){void 0===n&&(n=50);var a=r.default.parse(t),o=a.r,s=a.g,c=a.b,u=a.a,l=r.default.parse(e),h=l.r,f=l.g,d=l.b,p=l.a,y=n/100,g=2*y-1,v=u-p,m=((g*v==-1?g:(g+v)/(1+g*v))+1)/2,b=1-m,_=o*m+h*b,x=s*m+f*b,k=c*m+d*b,w=u*y+p*(1-y);return i.default(_,x,k,w)}},function(t,e,n){var r=n(53),i=n(79),a=n(58),o=n(229),s=n(235),c=n(114),u=n(115),l=n(238),h=n(239),f=n(119),d=n(240),p=n(42),y=n(244),g=n(245),v=n(124),m=n(5),b=n(40),_=n(249),x=n(11),k=n(251),w=n(30),E={};E["[object Arguments]"]=E["[object Array]"]=E["[object ArrayBuffer]"]=E["[object DataView]"]=E["[object Boolean]"]=E["[object Date]"]=E["[object Float32Array]"]=E["[object Float64Array]"]=E["[object Int8Array]"]=E["[object Int16Array]"]=E["[object Int32Array]"]=E["[object Map]"]=E["[object Number]"]=E["[object Object]"]=E["[object RegExp]"]=E["[object Set]"]=E["[object String]"]=E["[object Symbol]"]=E["[object Uint8Array]"]=E["[object Uint8ClampedArray]"]=E["[object Uint16Array]"]=E["[object Uint32Array]"]=!0,E["[object Error]"]=E["[object Function]"]=E["[object WeakMap]"]=!1,t.exports=function t(e,n,T,C,A,S){var M,O=1&n,D=2&n,N=4&n;if(T&&(M=A?T(e,C,A,S):T(e)),void 0!==M)return M;if(!x(e))return e;var B=m(e);if(B){if(M=y(e),!O)return u(e,M)}else{var L=p(e),F="[object Function]"==L||"[object GeneratorFunction]"==L;if(b(e))return c(e,O);if("[object Object]"==L||"[object Arguments]"==L||F&&!A){if(M=D||F?{}:v(e),!O)return D?h(e,s(M,e)):l(e,o(M,e))}else{if(!E[L])return A?e:{};M=g(e,L,O)}}S||(S=new r);var P=S.get(e);if(P)return P;S.set(e,M),k(e)?e.forEach((function(r){M.add(t(r,n,T,r,e,S))})):_(e)&&e.forEach((function(r,i){M.set(i,t(r,n,T,i,e,S))}));var I=N?D?d:f:D?keysIn:w,j=B?void 0:I(e);return i(j||e,(function(r,i){j&&(r=e[i=r]),a(M,i,t(r,n,T,i,e,S))})),M}},function(t,e,n){(function(e){var n="object"==typeof e&&e&&e.Object===Object&&e;t.exports=n}).call(this,n(211))},function(t,e){var n=Function.prototype.toString;t.exports=function(t){if(null!=t){try{return n.call(t)}catch(t){}try{return t+""}catch(t){}}return""}},function(t,e,n){var r=n(33),i=function(){try{var t=r(Object,"defineProperty");return t({},"",{}),t}catch(t){}}();t.exports=i},function(t,e,n){var r=n(230),i=n(47),a=n(5),o=n(40),s=n(60),c=n(48),u=Object.prototype.hasOwnProperty;t.exports=function(t,e){var n=a(t),l=!n&&i(t),h=!n&&!l&&o(t),f=!n&&!l&&!h&&c(t),d=n||l||h||f,p=d?r(t.length,String):[],y=p.length;for(var g in t)!e&&!u.call(t,g)||d&&("length"==g||h&&("offset"==g||"parent"==g)||f&&("buffer"==g||"byteLength"==g||"byteOffset"==g)||s(g,y))||p.push(g);return p}},function(t,e){t.exports=function(t,e){return function(n){return t(e(n))}}},function(t,e,n){(function(t){var r=n(16),i=e&&!e.nodeType&&e,a=i&&"object"==typeof t&&t&&!t.nodeType&&t,o=a&&a.exports===i?r.Buffer:void 0,s=o?o.allocUnsafe:void 0;t.exports=function(t,e){if(e)return t.slice();var n=t.length,r=s?s(n):new t.constructor(n);return t.copy(r),r}}).call(this,n(7)(t))},function(t,e){t.exports=function(t,e){var n=-1,r=t.length;for(e||(e=Array(r));++nl))return!1;var f=c.get(t);if(f&&c.get(e))return f==e;var d=-1,p=!0,y=2&n?new r:void 0;for(c.set(t,e),c.set(e,t);++d0&&(a=c.removeMin(),(o=s[a]).distance!==Number.POSITIVE_INFINITY);)r(a).forEach(u);return s}(t,String(e),n||a,r||function(e){return t.outEdges(e)})};var a=r.constant(1)},function(t,e,n){var r=n(10);function i(){this._arr=[],this._keyIndices={}}t.exports=i,i.prototype.size=function(){return this._arr.length},i.prototype.keys=function(){return this._arr.map((function(t){return t.key}))},i.prototype.has=function(t){return r.has(this._keyIndices,t)},i.prototype.priority=function(t){var e=this._keyIndices[t];if(void 0!==e)return this._arr[e].priority},i.prototype.min=function(){if(0===this.size())throw new Error("Queue underflow");return this._arr[0].key},i.prototype.add=function(t,e){var n=this._keyIndices;if(t=String(t),!r.has(n,t)){var i=this._arr,a=i.length;return n[t]=a,i.push({key:t,priority:e}),this._decrease(a),!0}return!1},i.prototype.removeMin=function(){this._swap(0,this._arr.length-1);var t=this._arr.pop();return delete this._keyIndices[t.key],this._heapify(0),t.key},i.prototype.decrease=function(t,e){var n=this._keyIndices[t];if(e>this._arr[n].priority)throw new Error("New priority is greater than current priority. Key: "+t+" Old: "+this._arr[n].priority+" New: "+e);this._arr[n].priority=e,this._decrease(n)},i.prototype._heapify=function(t){var e=this._arr,n=2*t,r=n+1,i=t;n>1].priority2?e[2]:void 0;for(u&&a(e[0],e[1],u)&&(r=1);++n1&&o.sort((function(t,e){var r=t.x-n.x,i=t.y-n.y,a=Math.sqrt(r*r+i*i),o=e.x-n.x,s=e.y-n.y,c=Math.sqrt(o*o+s*s);return aMath.abs(o)*u?(s<0&&(u=-u),n=0===s?0:u*o/s,r=u):(o<0&&(c=-c),n=c,r=0===o?0:c*s/o);return{x:i+n,y:a+r}}},function(t,e,n){t.exports=function t(e){"use strict";var n=/^\0+/g,r=/[\0\r\f]/g,i=/: */g,a=/zoo|gra/,o=/([,: ])(transform)/g,s=/,+\s*(?![^(]*[)])/g,c=/ +\s*(?![^(]*[)])/g,u=/ *[\0] */g,l=/,\r+?/g,h=/([\t\r\n ])*\f?&/g,f=/:global\(((?:[^\(\)\[\]]*|\[.*\]|\([^\(\)]*\))*)\)/g,d=/\W+/g,p=/@(k\w+)\s*(\S*)\s*/,y=/::(place)/g,g=/:(read-only)/g,v=/\s+(?=[{\];=:>])/g,m=/([[}=:>])\s+/g,b=/(\{[^{]+?);(?=\})/g,_=/\s{2,}/g,x=/([^\(])(:+) */g,k=/[svh]\w+-[tblr]{2}/,w=/\(\s*(.*)\s*\)/g,E=/([\s\S]*?);/g,T=/-self|flex-/g,C=/[^]*?(:[rp][el]a[\w-]+)[^]*/,A=/stretch|:\s*\w+\-(?:conte|avail)/,S=/([^-])(image-set\()/,M="-webkit-",O="-moz-",D="-ms-",N=1,B=1,L=0,F=1,P=1,I=1,j=0,R=0,Y=0,z=[],U=[],$=0,W=null,H=0,V=1,G="",q="",X="";function Z(t,e,i,a,o){for(var s,c,l=0,h=0,f=0,d=0,v=0,m=0,b=0,_=0,k=0,E=0,T=0,C=0,A=0,S=0,O=0,D=0,j=0,U=0,W=0,Q=i.length,it=Q-1,at="",ot="",st="",ct="",ut="",lt="";O0&&(ot=ot.replace(r,"")),ot.trim().length>0)){switch(b){case 32:case 9:case 59:case 13:case 10:break;default:ot+=i.charAt(O)}b=59}if(1===j)switch(b){case 123:case 125:case 59:case 34:case 39:case 40:case 41:case 44:j=0;case 9:case 13:case 10:case 32:break;default:for(j=0,W=O,v=b,O--,b=59;W0&&(++O,b=v);case 123:W=Q}}switch(b){case 123:for(v=(ot=ot.trim()).charCodeAt(0),T=1,W=++O;O0&&(ot=ot.replace(r,"")),m=ot.charCodeAt(1)){case 100:case 109:case 115:case 45:s=e;break;default:s=z}if(W=(st=Z(e,s,st,m,o+1)).length,Y>0&&0===W&&(W=ot.length),$>0&&(c=nt(3,st,s=J(z,ot,U),e,B,N,W,m,o,a),ot=s.join(""),void 0!==c&&0===(W=(st=c.trim()).length)&&(m=0,st="")),W>0)switch(m){case 115:ot=ot.replace(w,et);case 100:case 109:case 45:st=ot+"{"+st+"}";break;case 107:st=(ot=ot.replace(p,"$1 $2"+(V>0?G:"")))+"{"+st+"}",st=1===P||2===P&&tt("@"+st,3)?"@"+M+st+"@"+st:"@"+st;break;default:st=ot+st,112===a&&(ct+=st,st="")}else st="";break;default:st=Z(e,J(e,ot,U),st,a,o+1)}ut+=st,C=0,j=0,S=0,D=0,U=0,A=0,ot="",st="",b=i.charCodeAt(++O);break;case 125:case 59:if((W=(ot=(D>0?ot.replace(r,""):ot).trim()).length)>1)switch(0===S&&(45===(v=ot.charCodeAt(0))||v>96&&v<123)&&(W=(ot=ot.replace(" ",":")).length),$>0&&void 0!==(c=nt(1,ot,e,t,B,N,ct.length,a,o,a))&&0===(W=(ot=c.trim()).length)&&(ot="\0\0"),v=ot.charCodeAt(0),m=ot.charCodeAt(1),v){case 0:break;case 64:if(105===m||99===m){lt+=ot+i.charAt(O);break}default:if(58===ot.charCodeAt(W-1))break;ct+=K(ot,v,m,ot.charCodeAt(2))}C=0,j=0,S=0,D=0,U=0,ot="",b=i.charCodeAt(++O)}}switch(b){case 13:case 10:if(h+d+f+l+R===0)switch(E){case 41:case 39:case 34:case 64:case 126:case 62:case 42:case 43:case 47:case 45:case 58:case 44:case 59:case 123:case 125:break;default:S>0&&(j=1)}47===h?h=0:F+C===0&&107!==a&&ot.length>0&&(D=1,ot+="\0"),$*H>0&&nt(0,ot,e,t,B,N,ct.length,a,o,a),N=1,B++;break;case 59:case 125:if(h+d+f+l===0){N++;break}default:switch(N++,at=i.charAt(O),b){case 9:case 32:if(d+l+h===0)switch(_){case 44:case 58:case 9:case 32:at="";break;default:32!==b&&(at=" ")}break;case 0:at="\\0";break;case 12:at="\\f";break;case 11:at="\\v";break;case 38:d+h+l===0&&F>0&&(U=1,D=1,at="\f"+at);break;case 108:if(d+h+l+L===0&&S>0)switch(O-S){case 2:112===_&&58===i.charCodeAt(O-3)&&(L=_);case 8:111===k&&(L=k)}break;case 58:d+h+l===0&&(S=O);break;case 44:h+f+d+l===0&&(D=1,at+="\r");break;case 34:case 39:0===h&&(d=d===b?0:0===d?b:d);break;case 91:d+h+f===0&&l++;break;case 93:d+h+f===0&&l--;break;case 41:d+h+l===0&&f--;break;case 40:if(d+h+l===0){if(0===C)switch(2*_+3*k){case 533:break;default:T=0,C=1}f++}break;case 64:h+f+d+l+S+A===0&&(A=1);break;case 42:case 47:if(d+l+f>0)break;switch(h){case 0:switch(2*b+3*i.charCodeAt(O+1)){case 235:h=47;break;case 220:W=O,h=42}break;case 42:47===b&&42===_&&W+2!==O&&(33===i.charCodeAt(W+2)&&(ct+=i.substring(W,O+1)),at="",h=0)}}if(0===h){if(F+d+l+A===0&&107!==a&&59!==b)switch(b){case 44:case 126:case 62:case 43:case 41:case 40:if(0===C){switch(_){case 9:case 32:case 10:case 13:at+="\0";break;default:at="\0"+at+(44===b?"":"\0")}D=1}else switch(b){case 40:S+7===O&&108===_&&(S=0),C=++T;break;case 41:0==(C=--T)&&(D=1,at+="\0")}break;case 9:case 32:switch(_){case 0:case 123:case 125:case 59:case 44:case 12:case 9:case 32:case 10:case 13:break;default:0===C&&(D=1,at+="\0")}}ot+=at,32!==b&&9!==b&&(E=b)}}k=_,_=b,O++}if(W=ct.length,Y>0&&0===W&&0===ut.length&&0===e[0].length==0&&(109!==a||1===e.length&&(F>0?q:X)===e[0])&&(W=e.join(",").length+2),W>0){if(s=0===F&&107!==a?function(t){for(var e,n,i=0,a=t.length,o=Array(a);i1)){if(f=c.charCodeAt(c.length-1),d=n.charCodeAt(0),e="",0!==l)switch(f){case 42:case 126:case 62:case 43:case 32:case 40:break;default:e=" "}switch(d){case 38:n=e+q;case 126:case 62:case 43:case 32:case 41:case 40:break;case 91:n=e+n+q;break;case 58:switch(2*n.charCodeAt(1)+3*n.charCodeAt(2)){case 530:if(I>0){n=e+n.substring(8,h-1);break}default:(l<1||s[l-1].length<1)&&(n=e+q+n)}break;case 44:e="";default:n=h>1&&n.indexOf(":")>0?e+n.replace(x,"$1"+q+"$2"):e+n+q}c+=n}o[i]=c.replace(r,"").trim()}return o}(e):e,$>0&&void 0!==(c=nt(2,ct,s,t,B,N,W,a,o,a))&&0===(ct=c).length)return lt+ct+ut;if(ct=s.join(",")+"{"+ct+"}",P*L!=0){switch(2!==P||tt(ct,2)||(L=0),L){case 111:ct=ct.replace(g,":-moz-$1")+ct;break;case 112:ct=ct.replace(y,"::-webkit-input-$1")+ct.replace(y,"::-moz-$1")+ct.replace(y,":-ms-input-$1")+ct}L=0}}return lt+ct+ut}function J(t,e,n){var r=e.trim().split(l),i=r,a=r.length,o=t.length;switch(o){case 0:case 1:for(var s=0,c=0===o?"":t[0]+" ";s0&&F>0)return i.replace(f,"$1").replace(h,"$1"+X);break;default:return t.trim()+i.replace(h,"$1"+t.trim())}default:if(n*F>0&&i.indexOf("\f")>0)return i.replace(h,(58===t.charCodeAt(0)?"":"$1")+t.trim())}return t+i}function K(t,e,n,r){var u,l=0,h=t+";",f=2*e+3*n+4*r;if(944===f)return function(t){var e=t.length,n=t.indexOf(":",9)+1,r=t.substring(0,n).trim(),i=t.substring(n,e-1).trim();switch(t.charCodeAt(9)*V){case 0:break;case 45:if(110!==t.charCodeAt(10))break;default:var a=i.split((i="",s)),o=0;for(n=0,e=a.length;o64&&h<90||h>96&&h<123||95===h||45===h&&45!==u.charCodeAt(1)))switch(isNaN(parseFloat(u))+(-1!==u.indexOf("("))){case 1:switch(u){case"infinite":case"alternate":case"backwards":case"running":case"normal":case"forwards":case"both":case"none":case"linear":case"ease":case"ease-in":case"ease-out":case"ease-in-out":case"paused":case"reverse":case"alternate-reverse":case"inherit":case"initial":case"unset":case"step-start":case"step-end":break;default:u+=G}}l[n++]=u}i+=(0===o?"":",")+l.join(" ")}}return i=r+i+";",1===P||2===P&&tt(i,1)?M+i+i:i}(h);if(0===P||2===P&&!tt(h,1))return h;switch(f){case 1015:return 97===h.charCodeAt(10)?M+h+h:h;case 951:return 116===h.charCodeAt(3)?M+h+h:h;case 963:return 110===h.charCodeAt(5)?M+h+h:h;case 1009:if(100!==h.charCodeAt(4))break;case 969:case 942:return M+h+h;case 978:return M+h+O+h+h;case 1019:case 983:return M+h+O+h+D+h+h;case 883:return 45===h.charCodeAt(8)?M+h+h:h.indexOf("image-set(",11)>0?h.replace(S,"$1-webkit-$2")+h:h;case 932:if(45===h.charCodeAt(4))switch(h.charCodeAt(5)){case 103:return M+"box-"+h.replace("-grow","")+M+h+D+h.replace("grow","positive")+h;case 115:return M+h+D+h.replace("shrink","negative")+h;case 98:return M+h+D+h.replace("basis","preferred-size")+h}return M+h+D+h+h;case 964:return M+h+D+"flex-"+h+h;case 1023:if(99!==h.charCodeAt(8))break;return u=h.substring(h.indexOf(":",15)).replace("flex-","").replace("space-between","justify"),M+"box-pack"+u+M+h+D+"flex-pack"+u+h;case 1005:return a.test(h)?h.replace(i,":"+M)+h.replace(i,":"+O)+h:h;case 1e3:switch(l=(u=h.substring(13).trim()).indexOf("-")+1,u.charCodeAt(0)+u.charCodeAt(l)){case 226:u=h.replace(k,"tb");break;case 232:u=h.replace(k,"tb-rl");break;case 220:u=h.replace(k,"lr");break;default:return h}return M+h+D+u+h;case 1017:if(-1===h.indexOf("sticky",9))return h;case 975:switch(l=(h=t).length-10,f=(u=(33===h.charCodeAt(l)?h.substring(0,l):h).substring(t.indexOf(":",7)+1).trim()).charCodeAt(0)+(0|u.charCodeAt(7))){case 203:if(u.charCodeAt(8)<111)break;case 115:h=h.replace(u,M+u)+";"+h;break;case 207:case 102:h=h.replace(u,M+(f>102?"inline-":"")+"box")+";"+h.replace(u,M+u)+";"+h.replace(u,D+u+"box")+";"+h}return h+";";case 938:if(45===h.charCodeAt(5))switch(h.charCodeAt(6)){case 105:return u=h.replace("-items",""),M+h+M+"box-"+u+D+"flex-"+u+h;case 115:return M+h+D+"flex-item-"+h.replace(T,"")+h;default:return M+h+D+"flex-line-pack"+h.replace("align-content","").replace(T,"")+h}break;case 973:case 989:if(45!==h.charCodeAt(3)||122===h.charCodeAt(4))break;case 931:case 953:if(!0===A.test(t))return 115===(u=t.substring(t.indexOf(":")+1)).charCodeAt(0)?K(t.replace("stretch","fill-available"),e,n,r).replace(":fill-available",":stretch"):h.replace(u,M+u)+h.replace(u,O+u.replace("fill-",""))+h;break;case 962:if(h=M+h+(102===h.charCodeAt(5)?D+h:"")+h,n+r===211&&105===h.charCodeAt(13)&&h.indexOf("transform",10)>0)return h.substring(0,h.indexOf(";",27)+1).replace(o,"$1-webkit-$2")+h}return h}function tt(t,e){var n=t.indexOf(1===e?":":"{"),r=t.substring(0,3!==e?n:10),i=t.substring(n+1,t.length-1);return W(2!==e?r:r.replace(C,"$1"),i,e)}function et(t,e){var n=K(e,e.charCodeAt(0),e.charCodeAt(1),e.charCodeAt(2));return n!==e+";"?n.replace(E," or ($1)").substring(4):"("+e+")"}function nt(t,e,n,r,i,a,o,s,c,u){for(var l,h=0,f=e;h<$;++h)switch(l=U[h].call(at,t,f,n,r,i,a,o,s,c,u)){case void 0:case!1:case!0:case null:break;default:f=l}if(f!==e)return f}function rt(t,e,n,r){for(var i=e+1;i0&&(G=i.replace(d,91===a?"":"-")),a=1,1===F?X=i:q=i;var o,s=[X];$>0&&void 0!==(o=nt(-1,n,s,s,B,N,0,0,0,0))&&"string"==typeof o&&(n=o);var c=Z(z,s,n,0,0);return $>0&&void 0!==(o=nt(-2,c,s,s,B,N,c.length,0,0,0))&&"string"!=typeof(c=o)&&(a=0),G="",X="",q="",L=0,B=1,N=1,j*a==0?c:function(t){return t.replace(r,"").replace(v,"").replace(m,"$1").replace(b,"$1").replace(_," ")}(c)}return at.use=function t(e){switch(e){case void 0:case null:$=U.length=0;break;default:if("function"==typeof e)U[$++]=e;else if("object"==typeof e)for(var n=0,r=e.length;n=255?255:t<0?0:t},g:function(t){return t>=255?255:t<0?0:t},b:function(t){return t>=255?255:t<0?0:t},h:function(t){return t%360},s:function(t){return t>=100?100:t<0?0:t},l:function(t){return t>=100?100:t<0?0:t},a:function(t){return t>=1?1:t<0?0:t}},toLinear:function(t){var e=t/255;return t>.03928?Math.pow((e+.055)/1.055,2.4):e/12.92},hue2rgb:function(t,e,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?t+6*(e-t)*n:n<.5?e:n<2/3?t+(e-t)*(2/3-n)*6:t},hsl2rgb:function(t,e){var n=t.h,i=t.s,a=t.l;if(100===i)return 2.55*a;n/=360,i/=100;var o=(a/=100)<.5?a*(1+i):a+i-a*i,s=2*a-o;switch(e){case"r":return 255*r.hue2rgb(s,o,n+1/3);case"g":return 255*r.hue2rgb(s,o,n);case"b":return 255*r.hue2rgb(s,o,n-1/3)}},rgb2hsl:function(t,e){var n=t.r,r=t.g,i=t.b;n/=255,r/=255,i/=255;var a=Math.max(n,r,i),o=Math.min(n,r,i),s=(a+o)/2;if("l"===e)return 100*s;if(a===o)return 0;var c=a-o;if("s"===e)return 100*(s>.5?c/(2-a-o):c/(a+o));switch(a){case n:return 60*((r-i)/c+(r1?e:"0"+e},dec2hex:function(t){var e=Math.round(t).toString(16);return e.length>1?e:"0"+e}};e.default=r},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(9),i=n(75),a=n(177),o=function(){function t(t,e){this.color=e,this.changed=!1,this.data=t,this.type=new a.default}return t.prototype.set=function(t,e){return this.color=e,this.changed=!1,this.data=t,this.type.type=i.TYPE.ALL,this},t.prototype._ensureHSL=function(){void 0===this.data.h&&(this.data.h=r.default.channel.rgb2hsl(this.data,"h")),void 0===this.data.s&&(this.data.s=r.default.channel.rgb2hsl(this.data,"s")),void 0===this.data.l&&(this.data.l=r.default.channel.rgb2hsl(this.data,"l"))},t.prototype._ensureRGB=function(){void 0===this.data.r&&(this.data.r=r.default.channel.hsl2rgb(this.data,"r")),void 0===this.data.g&&(this.data.g=r.default.channel.hsl2rgb(this.data,"g")),void 0===this.data.b&&(this.data.b=r.default.channel.hsl2rgb(this.data,"b"))},Object.defineProperty(t.prototype,"r",{get:function(){return this.type.is(i.TYPE.HSL)||void 0===this.data.r?(this._ensureHSL(),r.default.channel.hsl2rgb(this.data,"r")):this.data.r},set:function(t){this.type.set(i.TYPE.RGB),this.changed=!0,this.data.r=t},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"g",{get:function(){return this.type.is(i.TYPE.HSL)||void 0===this.data.g?(this._ensureHSL(),r.default.channel.hsl2rgb(this.data,"g")):this.data.g},set:function(t){this.type.set(i.TYPE.RGB),this.changed=!0,this.data.g=t},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"b",{get:function(){return this.type.is(i.TYPE.HSL)||void 0===this.data.b?(this._ensureHSL(),r.default.channel.hsl2rgb(this.data,"b")):this.data.b},set:function(t){this.type.set(i.TYPE.RGB),this.changed=!0,this.data.b=t},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"h",{get:function(){return this.type.is(i.TYPE.RGB)||void 0===this.data.h?(this._ensureRGB(),r.default.channel.rgb2hsl(this.data,"h")):this.data.h},set:function(t){this.type.set(i.TYPE.HSL),this.changed=!0,this.data.h=t},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"s",{get:function(){return this.type.is(i.TYPE.RGB)||void 0===this.data.s?(this._ensureRGB(),r.default.channel.rgb2hsl(this.data,"s")):this.data.s},set:function(t){this.type.set(i.TYPE.HSL),this.changed=!0,this.data.s=t},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"l",{get:function(){return this.type.is(i.TYPE.RGB)||void 0===this.data.l?(this._ensureRGB(),r.default.channel.rgb2hsl(this.data,"l")):this.data.l},set:function(t){this.type.set(i.TYPE.HSL),this.changed=!0,this.data.l=t},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"a",{get:function(){return this.data.a},set:function(t){this.changed=!0,this.data.a=t},enumerable:!0,configurable:!0}),t}();e.default=o},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(75),i=function(){function t(){this.type=r.TYPE.ALL}return t.prototype.get=function(){return this.type},t.prototype.set=function(t){if(this.type&&this.type!==t)throw new Error("Cannot change both RGB and HSL channels at the same time");this.type=t},t.prototype.reset=function(){this.type=r.TYPE.ALL},t.prototype.is=function(t){return this.type===t},t}();e.default=i},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(9),i={};e.DEC2HEX=i;for(var a=0;a<=255;a++)i[a]=r.default.unit.dec2hex(a)},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(99),i={colors:{aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyanaqua:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",transparent:"#00000000",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},parse:function(t){t=t.toLowerCase();var e=i.colors[t];if(e)return r.default.parse(e)},stringify:function(t){var e=r.default.stringify(t);for(var n in i.colors)if(i.colors[n]===e)return n}};e.default=i},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(9),i=n(45),a={re:/^rgba?\(\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))(?:\s*?(?:,|\/)\s*?\+?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?)))?\s*?\)$/i,parse:function(t){var e=t.charCodeAt(0);if(114===e||82===e){var n=t.match(a.re);if(n){var o=n[1],s=n[2],c=n[3],u=n[4],l=n[5],h=n[6],f=n[7],d=n[8];return i.default.set({r:r.default.channel.clamp.r(s?2.55*parseFloat(o):parseFloat(o)),g:r.default.channel.clamp.g(u?2.55*parseFloat(c):parseFloat(c)),b:r.default.channel.clamp.b(h?2.55*parseFloat(l):parseFloat(l)),a:f?r.default.channel.clamp.a(d?parseFloat(f)/100:parseFloat(f)):1},t)}}},stringify:function(t){return t.a<1?"rgba("+r.default.lang.round(t.r)+", "+r.default.lang.round(t.g)+", "+r.default.lang.round(t.b)+", "+r.default.lang.round(t.a)+")":"rgb("+r.default.lang.round(t.r)+", "+r.default.lang.round(t.g)+", "+r.default.lang.round(t.b)+")"}};e.default=a},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(9),i=n(45),a={re:/^hsla?\(\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?(?:deg|grad|rad|turn)?)\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?%)\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?%)(?:\s*?(?:,|\/)\s*?\+?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?(%)?))?\s*?\)$/i,hueRe:/^(.+?)(deg|grad|rad|turn)$/i,_hue2deg:function(t){var e=t.match(a.hueRe);if(e){var n=e[1];switch(e[2]){case"grad":return r.default.channel.clamp.h(.9*parseFloat(n));case"rad":return r.default.channel.clamp.h(180*parseFloat(n)/Math.PI);case"turn":return r.default.channel.clamp.h(360*parseFloat(n))}}return r.default.channel.clamp.h(parseFloat(t))},parse:function(t){var e=t.charCodeAt(0);if(104===e||72===e){var n=t.match(a.re);if(n){var o=n[1],s=n[2],c=n[3],u=n[4],l=n[5];return i.default.set({h:a._hue2deg(o),s:r.default.channel.clamp.s(parseFloat(s)),l:r.default.channel.clamp.l(parseFloat(c)),a:u?r.default.channel.clamp.a(l?parseFloat(u)/100:parseFloat(u)):1},t)}}},stringify:function(t){return t.a<1?"hsla("+r.default.lang.round(t.h)+", "+r.default.lang.round(t.s)+"%, "+r.default.lang.round(t.l)+"%, "+t.a+")":"hsl("+r.default.lang.round(t.h)+", "+r.default.lang.round(t.s)+"%, "+r.default.lang.round(t.l)+"%)"}};e.default=a},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(29);e.default=function(t){return r.default(t,"r")}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(29);e.default=function(t){return r.default(t,"g")}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(29);e.default=function(t){return r.default(t,"b")}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(29);e.default=function(t){return r.default(t,"h")}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(29);e.default=function(t){return r.default(t,"s")}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(29);e.default=function(t){return r.default(t,"l")}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(103);e.default=function(t){return!r.default(t)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(15);e.default=function(t){try{return r.default.parse(t),!0}catch(t){return!1}}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(32);e.default=function(t,e){return r.default(t,"s",e)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(32);e.default=function(t,e){return r.default(t,"s",-e)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(32);e.default=function(t,e){return r.default(t,"l",e)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(32);e.default=function(t,e){return r.default(t,"l",-e)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(32);e.default=function(t){return r.default(t,"h",180)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(52);e.default=function(t){return r.default(t,{s:0})}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(15),i=n(107);e.default=function(t,e){void 0===e&&(e=100);var n=r.default.parse(t);return n.r=255-n.r,n.g=255-n.g,n.b=255-n.b,i.default(n,t,e)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(9),i=n(15),a=n(106);e.default=function(t,e){var n,o,s,c=i.default.parse(t),u={};for(var l in e)u[l]=(n=c[l],o=e[l],s=r.default.channel.max[l],o>0?(s-n)*o/100:n*o/100);return a.default(t,u)}},function(t,e,n){t.exports={Graph:n(76),version:n(300)}},function(t,e,n){var r=n(108);t.exports=function(t){return r(t,4)}},function(t,e){t.exports=function(){this.__data__=[],this.size=0}},function(t,e,n){var r=n(55),i=Array.prototype.splice;t.exports=function(t){var e=this.__data__,n=r(e,t);return!(n<0)&&(n==e.length-1?e.pop():i.call(e,n,1),--this.size,!0)}},function(t,e,n){var r=n(55);t.exports=function(t){var e=this.__data__,n=r(e,t);return n<0?void 0:e[n][1]}},function(t,e,n){var r=n(55);t.exports=function(t){return r(this.__data__,t)>-1}},function(t,e,n){var r=n(55);t.exports=function(t,e){var n=this.__data__,i=r(n,t);return i<0?(++this.size,n.push([t,e])):n[i][1]=e,this}},function(t,e,n){var r=n(54);t.exports=function(){this.__data__=new r,this.size=0}},function(t,e){t.exports=function(t){var e=this.__data__,n=e.delete(t);return this.size=e.size,n}},function(t,e){t.exports=function(t){return this.__data__.get(t)}},function(t,e){t.exports=function(t){return this.__data__.has(t)}},function(t,e,n){var r=n(54),i=n(77),a=n(78);t.exports=function(t,e){var n=this.__data__;if(n instanceof r){var o=n.__data__;if(!i||o.length<199)return o.push([t,e]),this.size=++n.size,this;n=this.__data__=new a(o)}return n.set(t,e),this.size=n.size,this}},function(t,e,n){var r=n(38),i=n(214),a=n(11),o=n(110),s=/^\[object .+?Constructor\]$/,c=Function.prototype,u=Object.prototype,l=c.toString,h=u.hasOwnProperty,f=RegExp("^"+l.call(h).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");t.exports=function(t){return!(!a(t)||i(t))&&(r(t)?f:s).test(o(t))}},function(t,e){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(t){"object"==typeof window&&(n=window)}t.exports=n},function(t,e,n){var r=n(39),i=Object.prototype,a=i.hasOwnProperty,o=i.toString,s=r?r.toStringTag:void 0;t.exports=function(t){var e=a.call(t,s),n=t[s];try{t[s]=void 0;var r=!0}catch(t){}var i=o.call(t);return r&&(e?t[s]=n:delete t[s]),i}},function(t,e){var n=Object.prototype.toString;t.exports=function(t){return n.call(t)}},function(t,e,n){var r,i=n(215),a=(r=/[^.]+$/.exec(i&&i.keys&&i.keys.IE_PROTO||""))?"Symbol(src)_1."+r:"";t.exports=function(t){return!!a&&a in t}},function(t,e,n){var r=n(16)["__core-js_shared__"];t.exports=r},function(t,e){t.exports=function(t,e){return null==t?void 0:t[e]}},function(t,e,n){var r=n(218),i=n(54),a=n(77);t.exports=function(){this.size=0,this.__data__={hash:new r,map:new(a||i),string:new r}}},function(t,e,n){var r=n(219),i=n(220),a=n(221),o=n(222),s=n(223);function c(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e0){if(++e>=800)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}},function(t,e,n){var r=n(131),i=n(292),a=n(296),o=n(132),s=n(297),c=n(90);t.exports=function(t,e,n){var u=-1,l=i,h=t.length,f=!0,d=[],p=d;if(n)f=!1,l=a;else if(h>=200){var y=e?null:s(t);if(y)return c(y);f=!1,l=o,p=new r}else p=e?[]:d;t:for(;++u-1}},function(t,e,n){var r=n(145),i=n(294),a=n(295);t.exports=function(t,e,n){return e==e?a(t,e,n):r(t,i,n)}},function(t,e){t.exports=function(t){return t!=t}},function(t,e){t.exports=function(t,e,n){for(var r=n-1,i=t.length;++r1||1===e.length&&t.hasEdge(e[0],e[0])}))}},function(t,e,n){var r=n(10);t.exports=function(t,e,n){return function(t,e,n){var r={},i=t.nodes();return i.forEach((function(t){r[t]={},r[t][t]={distance:0},i.forEach((function(e){t!==e&&(r[t][e]={distance:Number.POSITIVE_INFINITY})})),n(t).forEach((function(n){var i=n.v===t?n.w:n.v,a=e(n);r[t][i]={distance:a,predecessor:t}}))})),i.forEach((function(t){var e=r[t];i.forEach((function(n){var a=r[n];i.forEach((function(n){var r=a[t],i=e[n],o=a[n],s=r.distance+i.distance;s0;){if(n=c.removeMin(),r.has(s,n))o.setEdge(n,s[n]);else{if(l)throw new Error("Input graph is not connected: "+t);l=!0}t.nodeEdges(n).forEach(u)}return o}},function(t,e,n){var r;try{r=n(3)}catch(t){}r||(r=window.graphlib),t.exports=r},function(t,e,n){"use strict";var r=n(4),i=n(345),a=n(348),o=n(349),s=n(8).normalizeRanks,c=n(351),u=n(8).removeEmptyRanks,l=n(352),h=n(353),f=n(354),d=n(355),p=n(364),y=n(8),g=n(17).Graph;t.exports=function(t,e){var n=e&&e.debugTiming?y.time:y.notime;n("layout",(function(){var e=n(" buildLayoutGraph",(function(){return function(t){var e=new g({multigraph:!0,compound:!0}),n=C(t.graph());return e.setGraph(r.merge({},m,T(n,v),r.pick(n,b))),r.forEach(t.nodes(),(function(n){var i=C(t.node(n));e.setNode(n,r.defaults(T(i,_),x)),e.setParent(n,t.parent(n))})),r.forEach(t.edges(),(function(n){var i=C(t.edge(n));e.setEdge(n,r.merge({},w,T(i,k),r.pick(i,E)))})),e}(t)}));n(" runLayout",(function(){!function(t,e){e(" makeSpaceForEdgeLabels",(function(){!function(t){var e=t.graph();e.ranksep/=2,r.forEach(t.edges(),(function(n){var r=t.edge(n);r.minlen*=2,"c"!==r.labelpos.toLowerCase()&&("TB"===e.rankdir||"BT"===e.rankdir?r.width+=r.labeloffset:r.height+=r.labeloffset)}))}(t)})),e(" removeSelfEdges",(function(){!function(t){r.forEach(t.edges(),(function(e){if(e.v===e.w){var n=t.node(e.v);n.selfEdges||(n.selfEdges=[]),n.selfEdges.push({e:e,label:t.edge(e)}),t.removeEdge(e)}}))}(t)})),e(" acyclic",(function(){i.run(t)})),e(" nestingGraph.run",(function(){l.run(t)})),e(" rank",(function(){o(y.asNonCompoundGraph(t))})),e(" injectEdgeLabelProxies",(function(){!function(t){r.forEach(t.edges(),(function(e){var n=t.edge(e);if(n.width&&n.height){var r=t.node(e.v),i={rank:(t.node(e.w).rank-r.rank)/2+r.rank,e:e};y.addDummyNode(t,"edge-proxy",i,"_ep")}}))}(t)})),e(" removeEmptyRanks",(function(){u(t)})),e(" nestingGraph.cleanup",(function(){l.cleanup(t)})),e(" normalizeRanks",(function(){s(t)})),e(" assignRankMinMax",(function(){!function(t){var e=0;r.forEach(t.nodes(),(function(n){var i=t.node(n);i.borderTop&&(i.minRank=t.node(i.borderTop).rank,i.maxRank=t.node(i.borderBottom).rank,e=r.max(e,i.maxRank))})),t.graph().maxRank=e}(t)})),e(" removeEdgeLabelProxies",(function(){!function(t){r.forEach(t.nodes(),(function(e){var n=t.node(e);"edge-proxy"===n.dummy&&(t.edge(n.e).labelRank=n.rank,t.removeNode(e))}))}(t)})),e(" normalize.run",(function(){a.run(t)})),e(" parentDummyChains",(function(){c(t)})),e(" addBorderSegments",(function(){h(t)})),e(" order",(function(){d(t)})),e(" insertSelfEdges",(function(){!function(t){var e=y.buildLayerMatrix(t);r.forEach(e,(function(e){var n=0;r.forEach(e,(function(e,i){var a=t.node(e);a.order=i+n,r.forEach(a.selfEdges,(function(e){y.addDummyNode(t,"selfedge",{width:e.label.width,height:e.label.height,rank:a.rank,order:i+ ++n,e:e.e,label:e.label},"_se")})),delete a.selfEdges}))}))}(t)})),e(" adjustCoordinateSystem",(function(){f.adjust(t)})),e(" position",(function(){p(t)})),e(" positionSelfEdges",(function(){!function(t){r.forEach(t.nodes(),(function(e){var n=t.node(e);if("selfedge"===n.dummy){var r=t.node(n.e.v),i=r.x+r.width/2,a=r.y,o=n.x-i,s=r.height/2;t.setEdge(n.e,n.label),t.removeNode(e),n.label.points=[{x:i+2*o/3,y:a-s},{x:i+5*o/6,y:a-s},{x:i+o,y:a},{x:i+5*o/6,y:a+s},{x:i+2*o/3,y:a+s}],n.label.x=n.x,n.label.y=n.y}}))}(t)})),e(" removeBorderNodes",(function(){!function(t){r.forEach(t.nodes(),(function(e){if(t.children(e).length){var n=t.node(e),i=t.node(n.borderTop),a=t.node(n.borderBottom),o=t.node(r.last(n.borderLeft)),s=t.node(r.last(n.borderRight));n.width=Math.abs(s.x-o.x),n.height=Math.abs(a.y-i.y),n.x=o.x+n.width/2,n.y=i.y+n.height/2}})),r.forEach(t.nodes(),(function(e){"border"===t.node(e).dummy&&t.removeNode(e)}))}(t)})),e(" normalize.undo",(function(){a.undo(t)})),e(" fixupEdgeLabelCoords",(function(){!function(t){r.forEach(t.edges(),(function(e){var n=t.edge(e);if(r.has(n,"x"))switch("l"!==n.labelpos&&"r"!==n.labelpos||(n.width-=n.labeloffset),n.labelpos){case"l":n.x-=n.width/2+n.labeloffset;break;case"r":n.x+=n.width/2+n.labeloffset}}))}(t)})),e(" undoCoordinateSystem",(function(){f.undo(t)})),e(" translateGraph",(function(){!function(t){var e=Number.POSITIVE_INFINITY,n=0,i=Number.POSITIVE_INFINITY,a=0,o=t.graph(),s=o.marginx||0,c=o.marginy||0;function u(t){var r=t.x,o=t.y,s=t.width,c=t.height;e=Math.min(e,r-s/2),n=Math.max(n,r+s/2),i=Math.min(i,o-c/2),a=Math.max(a,o+c/2)}r.forEach(t.nodes(),(function(e){u(t.node(e))})),r.forEach(t.edges(),(function(e){var n=t.edge(e);r.has(n,"x")&&u(n)})),e-=s,i-=c,r.forEach(t.nodes(),(function(n){var r=t.node(n);r.x-=e,r.y-=i})),r.forEach(t.edges(),(function(n){var a=t.edge(n);r.forEach(a.points,(function(t){t.x-=e,t.y-=i})),r.has(a,"x")&&(a.x-=e),r.has(a,"y")&&(a.y-=i)})),o.width=n-e+s,o.height=a-i+c}(t)})),e(" assignNodeIntersects",(function(){!function(t){r.forEach(t.edges(),(function(e){var n,r,i=t.edge(e),a=t.node(e.v),o=t.node(e.w);i.points?(n=i.points[0],r=i.points[i.points.length-1]):(i.points=[],n=o,r=a),i.points.unshift(y.intersectRect(a,n)),i.points.push(y.intersectRect(o,r))}))}(t)})),e(" reversePoints",(function(){!function(t){r.forEach(t.edges(),(function(e){var n=t.edge(e);n.reversed&&n.points.reverse()}))}(t)})),e(" acyclic.undo",(function(){i.undo(t)}))}(e,n)})),n(" updateInputGraph",(function(){!function(t,e){r.forEach(t.nodes(),(function(n){var r=t.node(n),i=e.node(n);r&&(r.x=i.x,r.y=i.y,e.children(n).length&&(r.width=i.width,r.height=i.height))})),r.forEach(t.edges(),(function(n){var i=t.edge(n),a=e.edge(n);i.points=a.points,r.has(a,"x")&&(i.x=a.x,i.y=a.y)})),t.graph().width=e.graph().width,t.graph().height=e.graph().height}(t,e)}))}))};var v=["nodesep","edgesep","ranksep","marginx","marginy"],m={ranksep:50,edgesep:20,nodesep:50,rankdir:"tb"},b=["acyclicer","ranker","rankdir","align"],_=["width","height"],x={width:0,height:0},k=["minlen","weight","width","height","labeloffset"],w={minlen:1,weight:1,width:0,height:0,labeloffset:10,labelpos:"r"},E=["labelpos"];function T(t,e){return r.mapValues(r.pick(t,e),Number)}function C(t){var e={};return r.forEach(t,(function(t,n){e[n.toLowerCase()]=t})),e}},function(t,e,n){var r=n(108);t.exports=function(t){return r(t,5)}},function(t,e,n){var r=n(315)(n(316));t.exports=r},function(t,e,n){var r=n(25),i=n(24),a=n(30);t.exports=function(t){return function(e,n,o){var s=Object(e);if(!i(e)){var c=r(n,3);e=a(e),n=function(t){return c(s[t],t,s)}}var u=t(e,n,o);return u>-1?s[c?e[u]:u]:void 0}}},function(t,e,n){var r=n(145),i=n(25),a=n(317),o=Math.max;t.exports=function(t,e,n){var s=null==t?0:t.length;if(!s)return-1;var c=null==n?0:a(n);return c<0&&(c=o(s+c,0)),r(t,i(e,3),c)}},function(t,e,n){var r=n(155);t.exports=function(t){var e=r(t),n=e%1;return e==e?n?e-n:e:0}},function(t,e,n){var r=n(11),i=n(43),a=/^\s+|\s+$/g,o=/^[-+]0x[0-9a-f]+$/i,s=/^0b[01]+$/i,c=/^0o[0-7]+$/i,u=parseInt;t.exports=function(t){if("number"==typeof t)return t;if(i(t))return NaN;if(r(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=r(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=t.replace(a,"");var n=s.test(t);return n||c.test(t)?u(t.slice(2),n?2:8):o.test(t)?NaN:+t}},function(t,e,n){var r=n(89),i=n(127),a=n(41);t.exports=function(t,e){return null==t?t:r(t,i(e),a)}},function(t,e){t.exports=function(t){var e=null==t?0:t.length;return e?t[e-1]:void 0}},function(t,e,n){var r=n(59),i=n(88),a=n(25);t.exports=function(t,e){var n={};return e=a(e,3),i(t,(function(t,i,a){r(n,i,e(t,i,a))})),n}},function(t,e,n){var r=n(95),i=n(323),a=n(35);t.exports=function(t){return t&&t.length?r(t,a,i):void 0}},function(t,e){t.exports=function(t,e){return t>e}},function(t,e,n){var r=n(325),i=n(328)((function(t,e,n){r(t,e,n)}));t.exports=i},function(t,e,n){var r=n(53),i=n(157),a=n(89),o=n(326),s=n(11),c=n(41),u=n(159);t.exports=function t(e,n,l,h,f){e!==n&&a(n,(function(a,c){if(f||(f=new r),s(a))o(e,n,c,l,t,h,f);else{var d=h?h(u(e,c),a,c+"",e,n,f):void 0;void 0===d&&(d=a),i(e,c,d)}}),c)}},function(t,e,n){var r=n(157),i=n(114),a=n(123),o=n(115),s=n(124),c=n(47),u=n(5),l=n(146),h=n(40),f=n(38),d=n(11),p=n(158),y=n(48),g=n(159),v=n(327);t.exports=function(t,e,n,m,b,_,x){var k=g(t,n),w=g(e,n),E=x.get(w);if(E)r(t,n,E);else{var T=_?_(k,w,n+"",t,e,x):void 0,C=void 0===T;if(C){var A=u(w),S=!A&&h(w),M=!A&&!S&&y(w);T=w,A||S||M?u(k)?T=k:l(k)?T=o(k):S?(C=!1,T=i(w,!0)):M?(C=!1,T=a(w,!0)):T=[]:p(w)||c(w)?(T=k,c(k)?T=v(k):d(k)&&!f(k)||(T=s(w))):C=!1}C&&(x.set(w,T),b(T,w,m,_,x),x.delete(w)),r(t,n,T)}}},function(t,e,n){var r=n(46),i=n(41);t.exports=function(t){return r(t,i(t))}},function(t,e,n){var r=n(67),i=n(68);t.exports=function(t){return r((function(e,n){var r=-1,a=n.length,o=a>1?n[a-1]:void 0,s=a>2?n[2]:void 0;for(o=t.length>3&&"function"==typeof o?(a--,o):void 0,s&&i(n[0],n[1],s)&&(o=a<3?void 0:o,a=1),e=Object(e);++r1&&o(t,e[0],e[1])?e=[]:n>2&&o(e[0],e[1],e[2])&&(e=[e[0]]),i(t,r(e,1),[])}));t.exports=s},function(t,e,n){var r=n(66),i=n(25),a=n(141),o=n(340),s=n(61),c=n(341),u=n(35);t.exports=function(t,e,n){var l=-1;e=r(e.length?e:[u],s(i));var h=a(t,(function(t,n,i){return{criteria:r(e,(function(e){return e(t)})),index:++l,value:t}}));return o(h,(function(t,e){return c(t,e,n)}))}},function(t,e){t.exports=function(t,e){var n=t.length;for(t.sort(e);n--;)t[n]=t[n].value;return t}},function(t,e,n){var r=n(342);t.exports=function(t,e,n){for(var i=-1,a=t.criteria,o=e.criteria,s=a.length,c=n.length;++i=c?u:u*("desc"==n[i]?-1:1)}return t.index-e.index}},function(t,e,n){var r=n(43);t.exports=function(t,e){if(t!==e){var n=void 0!==t,i=null===t,a=t==t,o=r(t),s=void 0!==e,c=null===e,u=e==e,l=r(e);if(!c&&!l&&!o&&t>e||o&&s&&u&&!c&&!l||i&&s&&u||!n&&u||!a)return 1;if(!i&&!o&&!l&&t0;--c)if(r=e[c].dequeue()){i=i.concat(s(t,e,n,r,!0));break}}return i}(n.graph,n.buckets,n.zeroIdx);return r.flatten(r.map(u,(function(e){return t.outEdges(e.v,e.w)})),!0)};var o=r.constant(1);function s(t,e,n,i,a){var o=a?[]:void 0;return r.forEach(t.inEdges(i.v),(function(r){var i=t.edge(r),s=t.node(r.v);a&&o.push({v:r.v,w:r.w}),s.out-=i,c(e,n,s)})),r.forEach(t.outEdges(i.v),(function(r){var i=t.edge(r),a=r.w,o=t.node(a);o.in-=i,c(e,n,o)})),t.removeNode(i.v),o}function c(t,e,n){n.out?n.in?t[n.out-n.in+e].enqueue(n):t[t.length-1].enqueue(n):t[0].enqueue(n)}},function(t,e){function n(){var t={};t._next=t._prev=t,this._sentinel=t}function r(t){t._prev._next=t._next,t._next._prev=t._prev,delete t._next,delete t._prev}function i(t,e){if("_next"!==t&&"_prev"!==t)return e}t.exports=n,n.prototype.dequeue=function(){var t=this._sentinel,e=t._prev;if(e!==t)return r(e),e},n.prototype.enqueue=function(t){var e=this._sentinel;t._prev&&t._next&&r(t),t._next=e._next,e._next._prev=t,e._next=t,t._prev=e},n.prototype.toString=function(){for(var t=[],e=this._sentinel,n=e._prev;n!==e;)t.push(JSON.stringify(n,i)),n=n._prev;return"["+t.join(", ")+"]"}},function(t,e,n){"use strict";var r=n(4),i=n(8);t.exports={run:function(t){t.graph().dummyChains=[],r.forEach(t.edges(),(function(e){!function(t,e){var n,r,a,o=e.v,s=t.node(o).rank,c=e.w,u=t.node(c).rank,l=e.name,h=t.edge(e),f=h.labelRank;if(u===s+1)return;for(t.removeEdge(e),a=0,++s;sc.lim&&(u=c,l=!0);var h=r.filter(e.edges(),(function(e){return l===m(t,t.node(e.v),u)&&l!==m(t,t.node(e.w),u)}));return r.minBy(h,(function(t){return a(e,t)}))}function v(t,e,n,i){var a=n.v,o=n.w;t.removeEdge(a,o),t.setEdge(i.v,i.w,{}),d(t),h(t,e),function(t,e){var n=r.find(t.nodes(),(function(t){return!e.node(t).parent})),i=s(t,n);i=i.slice(1),r.forEach(i,(function(n){var r=t.node(n).parent,i=e.edge(n,r),a=!1;i||(i=e.edge(r,n),a=!0),e.node(n).rank=e.node(r).rank+(a?i.minlen:-i.minlen)}))}(t,e)}function m(t,e,n){return n.low<=e.lim&&e.lim<=n.lim}t.exports=l,l.initLowLimValues=d,l.initCutValues=h,l.calcCutValue=f,l.leaveEdge=y,l.enterEdge=g,l.exchangeEdges=v},function(t,e,n){var r=n(4);t.exports=function(t){var e=function(t){var e={},n=0;function i(a){var o=n;r.forEach(t.children(a),i),e[a]={low:o,lim:n++}}return r.forEach(t.children(),i),e}(t);r.forEach(t.graph().dummyChains,(function(n){for(var r=t.node(n),i=r.edgeObj,a=function(t,e,n,r){var i,a,o=[],s=[],c=Math.min(e[n].low,e[r].low),u=Math.max(e[n].lim,e[r].lim);i=n;do{i=t.parent(i),o.push(i)}while(i&&(e[i].low>c||u>e[i].lim));a=i,i=r;for(;(i=t.parent(i))!==a;)s.push(i);return{path:o.concat(s.reverse()),lca:a}}(t,e,i.v,i.w),o=a.path,s=a.lca,c=0,u=o[c],l=!0;n!==i.w;){if(r=t.node(n),l){for(;(u=o[c])!==s&&t.node(u).maxRank=2),s=l.buildLayerMatrix(t);var g=a(t,s);g0;)e%2&&(n+=c[e+1]),c[e=e-1>>1]+=t.weight;u+=t.weight*n}))),u}t.exports=function(t,e){for(var n=0,r=1;r=t.barycenter)&&function(t,e){var n=0,r=0;t.weight&&(n+=t.barycenter*t.weight,r+=t.weight);e.weight&&(n+=e.barycenter*e.weight,r+=e.weight);t.vs=e.vs.concat(t.vs),t.barycenter=n/r,t.weight=r,t.i=Math.min(e.i,t.i),e.merged=!0}(t,e)}}function i(e){return function(n){n.in.push(e),0==--n.indegree&&t.push(n)}}for(;t.length;){var a=t.pop();e.push(a),r.forEach(a.in.reverse(),n(a)),r.forEach(a.out,i(a))}return r.map(r.filter(e,(function(t){return!t.merged})),(function(t){return r.pick(t,["vs","i","barycenter","weight"])}))}(r.filter(n,(function(t){return!t.indegree})))}},function(t,e,n){var r=n(4),i=n(8);function a(t,e,n){for(var i;e.length&&(i=r.last(e)).i<=n;)e.pop(),t.push(i.vs),n++;return n}t.exports=function(t,e){var n=i.partition(t,(function(t){return r.has(t,"barycenter")})),o=n.lhs,s=r.sortBy(n.rhs,(function(t){return-t.i})),c=[],u=0,l=0,h=0;o.sort((f=!!e,function(t,e){return t.barycentere.barycenter?1:f?e.i-t.i:t.i-e.i})),h=a(c,s,h),r.forEach(o,(function(t){h+=t.vs.length,c.push(t.vs),u+=t.barycenter*t.weight,l+=t.weight,h=a(c,s,h)}));var f;var d={vs:r.flatten(c,!0)};l&&(d.barycenter=u/l,d.weight=l);return d}},function(t,e,n){var r=n(4),i=n(17).Graph;t.exports=function(t,e,n){var a=function(t){var e;for(;t.hasNode(e=r.uniqueId("_root")););return e}(t),o=new i({compound:!0}).setGraph({root:a}).setDefaultNodeLabel((function(e){return t.node(e)}));return r.forEach(t.nodes(),(function(i){var s=t.node(i),c=t.parent(i);(s.rank===e||s.minRank<=e&&e<=s.maxRank)&&(o.setNode(i),o.setParent(i,c||a),r.forEach(t[n](i),(function(e){var n=e.v===i?e.w:e.v,a=o.edge(n,i),s=r.isUndefined(a)?0:a.weight;o.setEdge(n,i,{weight:t.edge(e).weight+s})})),r.has(s,"minRank")&&o.setNode(i,{borderLeft:s.borderLeft[e],borderRight:s.borderRight[e]}))})),o}},function(t,e,n){var r=n(4);t.exports=function(t,e,n){var i,a={};r.forEach(n,(function(n){for(var r,o,s=t.parent(n);s;){if((r=t.parent(s))?(o=a[r],a[r]=s):(o=i,i=s),o&&o!==s)return void e.setEdge(o,s);s=r}}))}},function(t,e,n){"use strict";var r=n(4),i=n(8),a=n(365).positionX;t.exports=function(t){(function(t){var e=i.buildLayerMatrix(t),n=t.graph().ranksep,a=0;r.forEach(e,(function(e){var i=r.max(r.map(e,(function(e){return t.node(e).height})));r.forEach(e,(function(e){t.node(e).y=a+i/2})),a+=i+n}))})(t=i.asNonCompoundGraph(t)),r.forEach(a(t),(function(e,n){t.node(n).x=e}))}},function(t,e,n){"use strict";var r=n(4),i=n(17).Graph,a=n(8);function o(t,e){var n={};return r.reduce(e,(function(e,i){var a=0,o=0,s=e.length,u=r.last(i);return r.forEach(i,(function(e,l){var h=function(t,e){if(t.node(e).dummy)return r.find(t.predecessors(e),(function(e){return t.node(e).dummy}))}(t,e),f=h?t.node(h).order:s;(h||e===u)&&(r.forEach(i.slice(o,l+1),(function(e){r.forEach(t.predecessors(e),(function(r){var i=t.node(r),o=i.order;!(os)&&c(n,e,u)}))}))}return r.reduce(e,(function(e,n){var a,o=-1,s=0;return r.forEach(n,(function(r,c){if("border"===t.node(r).dummy){var u=t.predecessors(r);u.length&&(a=t.node(u[0]).order,i(n,s,c,o,a),s=c,o=a)}i(n,s,n.length,a,e.length)})),n})),n}function c(t,e,n){if(e>n){var r=e;e=n,n=r}var i=t[e];i||(t[e]=i={}),i[n]=!0}function u(t,e,n){if(e>n){var i=e;e=n,n=i}return r.has(t[e],n)}function l(t,e,n,i){var a={},o={},s={};return r.forEach(e,(function(t){r.forEach(t,(function(t,e){a[t]=t,o[t]=t,s[t]=e}))})),r.forEach(e,(function(t){var e=-1;r.forEach(t,(function(t){var c=i(t);if(c.length)for(var l=((c=r.sortBy(c,(function(t){return s[t]}))).length-1)/2,h=Math.floor(l),f=Math.ceil(l);h<=f;++h){var d=c[h];o[t]===t&&e0}t.exports=function(t,e,r,i){var a,o,s,c,u,l,h,f,d,p,y,g,v;if(a=e.y-t.y,s=t.x-e.x,u=e.x*t.y-t.x*e.y,d=a*r.x+s*r.y+u,p=a*i.x+s*i.y+u,0!==d&&0!==p&&n(d,p))return;if(o=i.y-r.y,c=r.x-i.x,l=i.x*r.y-r.x*i.y,h=o*t.x+c*t.y+l,f=o*e.x+c*e.y+l,0!==h&&0!==f&&n(h,f))return;if(0===(y=a*c-o*s))return;return g=Math.abs(y/2),{x:(v=s*l-c*u)<0?(v-g)/y:(v+g)/y,y:(v=o*u-a*l)<0?(v-g)/y:(v+g)/y}}},function(t,e,n){var r=n(44),i=n(31),a=n(153).layout;t.exports=function(){var t=n(371),e=n(374),i=n(375),u=n(376),l=n(377),h=n(378),f=n(379),d=n(380),p=n(381),y=function(n,y){!function(t){t.nodes().forEach((function(e){var n=t.node(e);r.has(n,"label")||t.children(e).length||(n.label=e),r.has(n,"paddingX")&&r.defaults(n,{paddingLeft:n.paddingX,paddingRight:n.paddingX}),r.has(n,"paddingY")&&r.defaults(n,{paddingTop:n.paddingY,paddingBottom:n.paddingY}),r.has(n,"padding")&&r.defaults(n,{paddingLeft:n.padding,paddingRight:n.padding,paddingTop:n.padding,paddingBottom:n.padding}),r.defaults(n,o),r.each(["paddingLeft","paddingRight","paddingTop","paddingBottom"],(function(t){n[t]=Number(n[t])})),r.has(n,"width")&&(n._prevWidth=n.width),r.has(n,"height")&&(n._prevHeight=n.height)})),t.edges().forEach((function(e){var n=t.edge(e);r.has(n,"label")||(n.label=""),r.defaults(n,s)}))}(y);var g=c(n,"output"),v=c(g,"clusters"),m=c(g,"edgePaths"),b=i(c(g,"edgeLabels"),y),_=t(c(g,"nodes"),y,d);a(y),l(_,y),h(b,y),u(m,y,p);var x=e(v,y);f(x,y),function(t){r.each(t.nodes(),(function(e){var n=t.node(e);r.has(n,"_prevWidth")?n.width=n._prevWidth:delete n.width,r.has(n,"_prevHeight")?n.height=n._prevHeight:delete n.height,delete n._prevWidth,delete n._prevHeight}))}(y)};return y.createNodes=function(e){return arguments.length?(t=e,y):t},y.createClusters=function(t){return arguments.length?(e=t,y):e},y.createEdgeLabels=function(t){return arguments.length?(i=t,y):i},y.createEdgePaths=function(t){return arguments.length?(u=t,y):u},y.shapes=function(t){return arguments.length?(d=t,y):d},y.arrows=function(t){return arguments.length?(p=t,y):p},y};var o={paddingLeft:10,paddingRight:10,paddingTop:10,paddingBottom:10,rx:0,ry:0,shape:"rect"},s={arrowhead:"normal",curve:i.curveLinear};function c(t,e){var n=t.select("g."+e);return n.empty()&&(n=t.append("g").attr("class",e)),n}},function(t,e,n){"use strict";var r=n(44),i=n(97),a=n(12),o=n(31);t.exports=function(t,e,n){var s,c=e.nodes().filter((function(t){return!a.isSubgraph(e,t)})),u=t.selectAll("g.node").data(c,(function(t){return t})).classed("update",!0);u.exit().remove(),u.enter().append("g").attr("class","node").style("opacity",0),(u=t.selectAll("g.node")).each((function(t){var s=e.node(t),c=o.select(this);a.applyClass(c,s.class,(c.classed("update")?"update ":"")+"node"),c.select("g.label").remove();var u=c.append("g").attr("class","label"),l=i(u,s),h=n[s.shape],f=r.pick(l.node().getBBox(),"width","height");s.elem=this,s.id&&c.attr("id",s.id),s.labelId&&u.attr("id",s.labelId),r.has(s,"width")&&(f.width=s.width),r.has(s,"height")&&(f.height=s.height),f.width+=s.paddingLeft+s.paddingRight,f.height+=s.paddingTop+s.paddingBottom,u.attr("transform","translate("+(s.paddingLeft-s.paddingRight)/2+","+(s.paddingTop-s.paddingBottom)/2+")");var d=o.select(this);d.select(".label-container").remove();var p=h(d,f,s).classed("label-container",!0);a.applyStyle(p,s.style);var y=p.node().getBBox();s.width=y.width,s.height=y.height})),s=u.exit?u.exit():u.selectAll(null);return a.applyTransition(s,e).style("opacity",0).remove(),u}},function(t,e,n){var r=n(12);t.exports=function(t,e){for(var n=t.append("text"),i=function(t){for(var e,n="",r=!1,i=0;i0&&void 0!==arguments[0]?arguments[0]:"fatal";isNaN(t)&&(t=t.toLowerCase(),void 0!==h[t]&&(t=h[t])),f.trace=function(){},f.debug=function(){},f.info=function(){},f.warn=function(){},f.error=function(){},f.fatal=function(){},t<=h.fatal&&(f.fatal=console.error?console.error.bind(console,p("FATAL"),"color: orange"):console.log.bind(console,"",p("FATAL"))),t<=h.error&&(f.error=console.error?console.error.bind(console,p("ERROR"),"color: orange"):console.log.bind(console,"",p("ERROR"))),t<=h.warn&&(f.warn=console.warn?console.warn.bind(console,p("WARN"),"color: orange"):console.log.bind(console,"",p("WARN"))),t<=h.info&&(f.info=console.info?console.info.bind(console,p("INFO"),"color: lightblue"):console.log.bind(console,"",p("INFO"))),t<=h.debug&&(f.debug=console.debug?console.debug.bind(console,p("DEBUG"),"color: lightgreen"):console.log.bind(console,"",p("DEBUG")))},p=function(t){var e=l()().format("ss.SSS");return"%c".concat(e," : ").concat(t," : ")},y=n(70),g=function(t){for(var e="",n=0;n>=0;){if(!((n=t.indexOf("=0)){e+=t,n=-1;break}e+=t.substr(0,n),(n=(t=t.substr(n+1)).indexOf("<\/script>"))>=0&&(n+=9,t=t.substr(n))}return e},v=//gi,m=function(t){return t.replace(v,"#br#")},b=function(t){return t.replace(/#br#/g,"
    ")},_={getRows:function(t){if(!t)return 1;var e=m(t);return(e=e.replace(/\\n/g,"#br#")).split("#br#")},sanitizeText:function(t,e){var n=t,r=!0;if(!e.flowchart||!1!==e.flowchart.htmlLabels&&"false"!==e.flowchart.htmlLabels||(r=!1),r){var i=e.securityLevel;"antiscript"===i?n=g(n):"loose"!==i&&(n=(n=(n=m(n)).replace(//g,">")).replace(/=/g,"="),n=b(n))}return n},hasBreaks:function(t){return//gi.test(t)},splitBreaks:function(t){return t.split(//gi)},lineBreakRegex:v,removeScript:g};function x(t){return(x="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function k(t){return function(t){if(Array.isArray(t)){for(var e=0,n=new Array(t.length);e1&&void 0!==arguments[1]?arguments[1]:null;try{var n=new RegExp("[%]{2}(?![{]".concat(T.source,")(?=[}][%]{2}).*\n"),"ig");t=t.trim().replace(n,"").replace(/'/gm,'"'),f.debug("Detecting diagram directive".concat(null!==e?" type:"+e:""," based on the text:").concat(t));for(var r,i=[];null!==(r=E.exec(t));)if(r.index===E.lastIndex&&E.lastIndex++,r&&!e||e&&r[1]&&r[1].match(e)||e&&r[2]&&r[2].match(e)){var a=r[1]?r[1]:r[2],o=r[3]?r[3].trim():r[4]?JSON.parse(r[4].trim()):null;i.push({type:a,args:o})}return 0===i.length&&i.push({type:t,args:null}),1===i.length?i[0]:i}catch(n){return f.error("ERROR: ".concat(n.message," - Unable to parse directive").concat(null!==e?" type:"+e:""," based on the text:").concat(t)),{type:null,args:null}}},S=function(t){return t=t.replace(E,"").replace(C,"\n"),f.debug("Detecting diagram type based on the text "+t),t.match(/^\s*sequenceDiagram/)?"sequence":t.match(/^\s*gantt/)?"gantt":t.match(/^\s*classDiagram-v2/)?"classDiagram":t.match(/^\s*classDiagram/)?"class":t.match(/^\s*stateDiagram-v2/)?"stateDiagram":t.match(/^\s*stateDiagram/)?"state":t.match(/^\s*gitGraph/)?"git":t.match(/^\s*flowchart/)?"flowchart-v2":t.match(/^\s*info/)?"info":t.match(/^\s*pie/)?"pie":t.match(/^\s*erDiagram/)?"er":t.match(/^\s*journey/)?"journey":"flowchart"},M=function(t,e){var n={};return function(){for(var r=arguments.length,i=new Array(r),a=0;a"},n),_.lineBreakRegex.test(t))return t;var r=t.split(" "),i=[],a="";return r.forEach((function(t,o){var s=Y("".concat(t," "),n),c=Y(a,n);if(s>e){var u=R(t,e,"-",n),l=u.hyphenatedStrings,h=u.remainingWord;i.push.apply(i,[a].concat(k(l))),a=h}else c+s>=e?(i.push(a),a=t):a=[a,t].filter(Boolean).join(" ");o+1===r.length&&i.push(a)})),i.filter((function(t){return""!==t})).join(n.joinWith)}),(function(t,e,n){return"".concat(t,"-").concat(e,"-").concat(n.fontSize,"-").concat(n.fontWeight,"-").concat(n.fontFamily,"-").concat(n.joinWith)})),R=M((function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"-",r=arguments.length>3?arguments[3]:void 0;r=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",margin:0},r);var i=t.split(""),a=[],o="";return i.forEach((function(t,s){var c="".concat(o).concat(t);if(Y(c,r)>=e){var u=s+1,l=i.length===u,h="".concat(c).concat(n);a.push(l?c:h),o=""}else o=c})),{hyphenatedStrings:a,remainingWord:o}}),(function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"-",r=arguments.length>3?arguments[3]:void 0;return"".concat(t,"-").concat(e,"-").concat(n,"-").concat(r.fontSize,"-").concat(r.fontWeight,"-").concat(r.fontFamily)})),Y=function(t,e){return e=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial"},e),z(t,e).width},z=M((function(t,e){var n=e=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial"},e),r=n.fontSize,i=n.fontFamily,a=n.fontWeight;if(!t)return{width:0,height:0};var o=["sans-serif",i],c=t.split(_.lineBreakRegex),u=[],l=Object(s.select)("body");if(!l.remove)return{width:0,height:0,lineHeight:0};for(var h=l.append("svg"),f=0,d=o;fu[1].height&&u[0].width>u[1].width&&u[0].lineHeight>u[1].lineHeight?0:1]}),(function(t,e){return"".concat(t,"-").concat(e.fontSize,"-").concat(e.fontWeight,"-").concat(e.fontFamily)})),U={assignWithDepth:P,wrapLabel:j,calculateTextHeight:function(t,e){return e=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",margin:15},e),z(t,e).height},calculateTextWidth:Y,calculateTextDimensions:z,detectInit:function(t){var e=A(t,/(?:init\b)|(?:initialize\b)/),n={};if(Array.isArray(e)){var r=e.map((function(t){return t.args}));n=P(n,k(r))}else n=e.args;if(n){var i=S(t);["config"].forEach((function(t){void 0!==n[t]&&("flowchart-v2"===i&&(i="flowchart"),n[i]=n[t],delete n[t])}))}return n},detectDirective:A,detectType:S,isSubstringInArray:function(t,e){for(var n=0;n=1&&(i={x:t.x,y:t.y}),a>0&&a<1&&(i={x:(1-a)*e.x+a*t.x,y:(1-a)*e.y+a*t.y})}}e=t})),i}(t)},calcCardinalityPosition:function(t,e,n){var r;e[0]!==n&&(e=e.reverse()),e.forEach((function(t){D(t,r),r=t}));var i,a=25;r=void 0,e.forEach((function(t){if(r&&!i){var e=D(t,r);if(e=1&&(i={x:t.x,y:t.y}),n>0&&n<1&&(i={x:(1-n)*r.x+n*t.x,y:(1-n)*r.y+n*t.y})}}r=t}));var o=t?10:5,s=Math.atan2(e[0].y-i.y,e[0].x-i.x),c={x:0,y:0};return c.x=Math.sin(s)*o+(e[0].x+i.x)/2,c.y=-Math.cos(s)*o+(e[0].y+i.y)/2,c},formatUrl:function(t,e){var n=t.trim();if(n)return"loose"!==e.securityLevel?Object(y.sanitizeUrl)(n):n},getStylesFromArray:N,generateId:L,random:F,memoize:M,runFunc:function(t){for(var e,n=t.split("."),r=n.length-1,i=n[r],a=window,o=0;o1?s-1:0),u=1;u/)&&(kt="LR"),kt.match(/.*v/)&&(kt="TB")},setClass:Lt,getTooltip:function(t){return Mt[t]},setClickEvent:function(t,e,n){t.split(",").forEach((function(t){!function(t,e){var n=t;t[0].match(/\d/)&&(n=""+n),"loose"===vt().securityLevel&&void 0!==e&&void 0!==Et[n]&&Nt.push((function(){var t=document.querySelector('[id="'.concat(n,'"]'));null!==t&&t.addEventListener("click",(function(){U.runFunc(e,n)}),!1)}))}(t,e)})),Ft(t,n),Lt(t,"clickable")},setLink:function(t,e,n,r){t.split(",").forEach((function(t){var n=t;t[0].match(/\d/)&&(n=""+n),void 0!==Et[n]&&(Et[n].link=U.formatUrl(e,wt),Et[n].linkTarget=r)})),Ft(t,n),Lt(t,"clickable")},bindFunctions:function(t){Nt.forEach((function(e){e(t)}))},getDirection:function(){return kt.trim()},getVertices:function(){return Et},getEdges:function(){return Tt},getClasses:function(){return Ct},clear:function(){Et={},Ct={},Tt=[],(Nt=[]).push(Pt),At=[],St={},Ot=0,Mt=[],Dt=!0},defaultStyle:function(){return"fill:#ffa;stroke: #f66; stroke-width: 3px; stroke-dasharray: 5, 5;fill:#ffa;stroke: #666;"},addSubGraph:function(t,e,n){var r=t.trim(),i=n;t===n&&n.match(/\s/)&&(r=void 0);var a,o,s,c=[];a=c.concat.apply(c,e),o={boolean:{},number:{},string:{}},s=[],c=a.filter((function(t){var e=xt(t);return""!==t.trim()&&(e in o?!o[e].hasOwnProperty(t)&&(o[e][t]=!0):!(s.indexOf(t)>=0)&&s.push(t))}));for(var u=0;u0&&function t(e,n){var r=At[n].nodes;if(!((jt+=1)>2e3)){if(Rt[jt]=n,At[n].id===e)return{result:!0,count:0};for(var i=0,a=1;i=0){var s=t(e,o);if(s.result)return{result:!0,count:a+s.count};a+=s.count}i+=1}return{result:!1,count:a}}}("none",At.length-1)},getSubGraphs:function(){return At},destructLink:function(t,e){var n,r=function(t){switch(t.trim()){case"--x":return{type:"arrow_cross",stroke:"normal"};case"--\x3e":return{type:"arrow_point",stroke:"normal"};case"<--\x3e":return{type:"double_arrow_point",stroke:"normal"};case"x--x":return{type:"double_arrow_cross",stroke:"normal"};case"o--o":return{type:"double_arrow_circle",stroke:"normal"};case"o.-o":return{type:"double_arrow_circle",stroke:"dotted"};case"<==>":return{type:"double_arrow_point",stroke:"thick"};case"o==o":return{type:"double_arrow_circle",stroke:"thick"};case"x==x":return{type:"double_arrow_cross",stroke:"thick"};case"x.-x":case"x-.-x":return{type:"double_arrow_cross",stroke:"dotted"};case"<.->":case"<-.->":return{type:"double_arrow_point",stroke:"dotted"};case"o-.-o":return{type:"double_arrow_circle",stroke:"dotted"};case"--o":return{type:"arrow_circle",stroke:"normal"};case"---":return{type:"arrow_open",stroke:"normal"};case"-.-x":return{type:"arrow_cross",stroke:"dotted"};case"-.->":return{type:"arrow_point",stroke:"dotted"};case"-.-o":return{type:"arrow_circle",stroke:"dotted"};case"-.-":return{type:"arrow_open",stroke:"dotted"};case".-x":return{type:"arrow_cross",stroke:"dotted"};case".->":return{type:"arrow_point",stroke:"dotted"};case".-o":return{type:"arrow_circle",stroke:"dotted"};case".-":return{type:"arrow_open",stroke:"dotted"};case"==x":return{type:"arrow_cross",stroke:"thick"};case"==>":return{type:"arrow_point",stroke:"thick"};case"==o":return{type:"arrow_circle",stroke:"thick"};case"===":return{type:"arrow_open",stroke:"thick"}}}(t);if(e){if((n=function(t){switch(t.trim()){case"<--":return{type:"arrow_point",stroke:"normal"};case"x--":return{type:"arrow_cross",stroke:"normal"};case"o--":return{type:"arrow_circle",stroke:"normal"};case"<-.":return{type:"arrow_point",stroke:"dotted"};case"x-.":return{type:"arrow_cross",stroke:"dotted"};case"o-.":return{type:"arrow_circle",stroke:"dotted"};case"<==":return{type:"arrow_point",stroke:"thick"};case"x==":return{type:"arrow_cross",stroke:"thick"};case"o==":return{type:"arrow_circle",stroke:"thick"};case"--":return{type:"arrow_open",stroke:"normal"};case"==":return{type:"arrow_open",stroke:"thick"};case"-.":return{type:"arrow_open",stroke:"dotted"}}}(e)).stroke!==r.stroke)return{type:"INVALID",stroke:"INVALID"};if("arrow_open"===n.type)n.type=r.type;else{if(n.type!==r.type)return{type:"INVALID",stroke:"INVALID"};n.type="double_"+n.type}return"double_arrow"===n.type&&(n.type="double_arrow_point"),n}return r},lex:{firstGraph:function(){return!!Dt&&(Dt=!1,!0)}}},zt=n(26),Ut=n.n(zt),$t=n(6),Wt=n.n($t),Ht=n(50),Vt=n.n(Ht);function Gt(t,e,n){var r=.9*(e.width+e.height),i=[{x:r/2,y:0},{x:r,y:-r/2},{x:r/2,y:-r},{x:0,y:-r/2}],a=ie(t,r,r,i);return n.intersect=function(t){return Wt.a.intersect.polygon(n,i,t)},a}function qt(t,e,n){var r=e.height,i=r/4,a=e.width+2*i,o=[{x:i,y:0},{x:a-i,y:0},{x:a,y:-r/2},{x:a-i,y:-r},{x:i,y:-r},{x:0,y:-r/2}],s=ie(t,a,r,o);return n.intersect=function(t){return Wt.a.intersect.polygon(n,o,t)},s}function Xt(t,e,n){var r=e.width,i=e.height,a=[{x:-i/2,y:0},{x:r,y:0},{x:r,y:-i},{x:-i/2,y:-i},{x:0,y:-i/2}],o=ie(t,r,i,a);return n.intersect=function(t){return Wt.a.intersect.polygon(n,a,t)},o}function Zt(t,e,n){var r=e.width,i=e.height,a=[{x:-2*i/6,y:0},{x:r-i/6,y:0},{x:r+2*i/6,y:-i},{x:i/6,y:-i}],o=ie(t,r,i,a);return n.intersect=function(t){return Wt.a.intersect.polygon(n,a,t)},o}function Jt(t,e,n){var r=e.width,i=e.height,a=[{x:2*i/6,y:0},{x:r+i/6,y:0},{x:r-2*i/6,y:-i},{x:-i/6,y:-i}],o=ie(t,r,i,a);return n.intersect=function(t){return Wt.a.intersect.polygon(n,a,t)},o}function Qt(t,e,n){var r=e.width,i=e.height,a=[{x:-2*i/6,y:0},{x:r+2*i/6,y:0},{x:r-i/6,y:-i},{x:i/6,y:-i}],o=ie(t,r,i,a);return n.intersect=function(t){return Wt.a.intersect.polygon(n,a,t)},o}function Kt(t,e,n){var r=e.width,i=e.height,a=[{x:i/6,y:0},{x:r-i/6,y:0},{x:r+2*i/6,y:-i},{x:-2*i/6,y:-i}],o=ie(t,r,i,a);return n.intersect=function(t){return Wt.a.intersect.polygon(n,a,t)},o}function te(t,e,n){var r=e.width,i=e.height,a=[{x:0,y:0},{x:r+i/2,y:0},{x:r,y:-i/2},{x:r+i/2,y:-i},{x:0,y:-i}],o=ie(t,r,i,a);return n.intersect=function(t){return Wt.a.intersect.polygon(n,a,t)},o}function ee(t,e,n){var r=e.height,i=e.width+r/4,a=t.insert("rect",":first-child").attr("rx",r/2).attr("ry",r/2).attr("x",-i/2).attr("y",-r/2).attr("width",i).attr("height",r);return n.intersect=function(t){return Wt.a.intersect.rect(n,t)},a}function ne(t,e,n){var r=e.width,i=e.height,a=[{x:0,y:0},{x:r,y:0},{x:r,y:-i},{x:0,y:-i},{x:0,y:0},{x:-8,y:0},{x:r+8,y:0},{x:r+8,y:-i},{x:-8,y:-i},{x:-8,y:0}],o=ie(t,r,i,a);return n.intersect=function(t){return Wt.a.intersect.polygon(n,a,t)},o}function re(t,e,n){var r=e.width,i=r/2,a=i/(2.5+r/50),o=e.height+a,s="M 0,"+a+" a "+i+","+a+" 0,0,0 "+r+" 0 a "+i+","+a+" 0,0,0 "+-r+" 0 l 0,"+o+" a "+i+","+a+" 0,0,0 "+r+" 0 l 0,"+-o,c=t.attr("label-offset-y",a).insert("path",":first-child").attr("d",s).attr("transform","translate("+-r/2+","+-(o/2+a)+")");return n.intersect=function(t){var e=Wt.a.intersect.rect(n,t),r=e.x-n.x;if(0!=i&&(Math.abs(r)n.height/2-a)){var o=a*a*(1-r*r/(i*i));0!=o&&(o=Math.sqrt(o)),o=a-o,t.y-n.y>0&&(o=-o),e.y+=o}return e},c}function ie(t,e,n,r){return t.insert("polygon",":first-child").attr("points",r.map((function(t){return t.x+","+t.y})).join(" ")).attr("transform","translate("+-e/2+","+n/2+")")}var ae={addToRender:function(t){t.shapes().question=Gt,t.shapes().hexagon=qt,t.shapes().stadium=ee,t.shapes().subroutine=ne,t.shapes().cylinder=re,t.shapes().rect_left_inv_arrow=Xt,t.shapes().lean_right=Zt,t.shapes().lean_left=Jt,t.shapes().trapezoid=Qt,t.shapes().inv_trapezoid=Kt,t.shapes().rect_right_inv_arrow=te},addToRenderV2:function(t){t({question:Gt}),t({hexagon:qt}),t({stadium:ee}),t({subroutine:ne}),t({cylinder:re}),t({rect_left_inv_arrow:Xt}),t({lean_right:Zt}),t({lean_left:Jt}),t({trapezoid:Qt}),t({inv_trapezoid:Kt}),t({rect_right_inv_arrow:te})}},oe={},se=function(t,e,n){var r=Object(s.select)('[id="'.concat(n,'"]'));Object.keys(t).forEach((function(n){var i=t[n],a="default";i.classes.length>0&&(a=i.classes.join(" "));var o,s=N(i.styles),c=void 0!==i.text?i.text:i.id;if(vt().flowchart.htmlLabels){var u={label:c.replace(/fa[lrsb]?:fa-[\w-]+/g,(function(t){return"")}))};(o=Vt()(r,u).node()).parentNode.removeChild(o)}else{var l=document.createElementNS("http://www.w3.org/2000/svg","text");l.setAttribute("style",s.labelStyle.replace("color:","fill:"));for(var h=c.split(_.lineBreakRegex),f=0;f').concat(a.text,"")):(l.labelType="text",l.label=a.text.replace(_.lineBreakRegex,"\n"),void 0===a.style&&(l.style=l.style||"stroke: #333; stroke-width: 1.5px;fill:none"),l.labelStyle=l.labelStyle.replace("color:","fill:"))),l.id=o,l.class=c+" "+u,e.setEdge(a.start,a.end,l,i)}))},ue=function(t){for(var e=Object.keys(t),n=0;n=0;h--)i=l[h],Yt.addVertex(i.id,i.title,"group",void 0,i.classes);var d=Yt.getVertices(),p=Yt.getEdges(),y=0;for(y=l.length-1;y>=0;y--){i=l[y],Object(s.selectAll)("cluster").append("text");for(var g=0;g"),f.info("vertexText"+i),function(t){var e,n,r=Object(s.select)(document.createElementNS("http://www.w3.org/2000/svg","foreignObject")),i=r.append("xhtml:div"),a=t.label,o=t.isNode?"nodeLabel":"edgeLabel";return i.html(''+a+""),e=i,(n=t.labelStyle)&&e.attr("style",n),i.style("display","inline-block"),i.style("white-space","nowrap"),i.attr("xmlns","http://www.w3.org/1999/xhtml"),r.node()}({isNode:r,label:i.replace(/fa[lrsb]?:fa-[\w-]+/g,(function(t){return"")}))});var a=document.createElementNS("http://www.w3.org/2000/svg","text");a.setAttribute("style",e.replace("color:","fill:"));var o=[];o="string"==typeof i?i.split(/\\n|\n|/gi):Array.isArray(i)?i:[];for(var c=0;c0)t(a,n,r,i);else{var o=n.node(a);f.info("cp ",a," to ",i," with parent ",e),r.setNode(a,o),f.debug("Setting parent",a,n.parent(a)),i!==n.parent(a)&&r.setParent(a,n.parent(a)),e!==i&&a!==e?(f.debug("Setting parent",a,e),r.setParent(a,e)):(f.info("In copy ",e,"root",i,"data",n.node(e),i),f.debug("Not Setting parent for node=",a,"cluster!==rootId",e!==i,"node!==clusterId",a!==e));var s=n.edges(a);f.debug("Copying Edges",s),s.forEach((function(t){f.info("Edge",t);var a=n.edge(t.v,t.w,t.name);f.info("Edge data",a,i);try{!function(t,e){return f.info("Decendants of ",e," is ",xe[e]),f.info("Edge is ",t),t.v!==e&&(t.w!==e&&(xe[e]?(f.info("Here "),xe[e].indexOf(t.v)>=0||(!!we(t.v,e)||(!!we(t.w,e)||xe[e].indexOf(t.w)>=0))):(f.debug("Tilt, ",e,",not in decendants"),!1)))}(t,i)?f.info("Skipping copy of edge ",t.v,"--\x3e",t.w," rootId: ",i," clusterId:",e):(f.info("Copying as ",t.v,t.w,a,t.name),r.setEdge(t.v,t.w,a,t.name),f.info("newGraph edges ",r.edges(),r.edge(r.edges()[0])))}catch(t){f.error(t)}}))}f.debug("Removing node",a),n.removeNode(a)}))},Te=function t(e,n){f.trace("Searching",e);var r=n.children(e);if(f.trace("Searching children of id ",e,r),r.length<1)return f.trace("This is a valid node",e),e;for(var i=0;i ",a),a}},Ce=function(t){return _e[t]&&_e[t].externalConnections&&_e[t]?_e[t].id:t},Ae=function(t,e){!t||e>10?f.debug("Opting out, no graph "):(f.debug("Opting in, graph "),t.nodes().forEach((function(e){t.children(e).length>0&&(f.warn("Cluster identified",e," Replacement id in edges: ",Te(e,t)),xe[e]=function t(e,n){for(var r=n.children(e),i=[].concat(r),a=0;a0&&(f.debug("Cluster identified",e,xe),r.forEach((function(t){t.v!==e&&t.w!==e&&(we(t.v,e)^we(t.w,e)&&(f.debug("Edge: ",t," leaves cluster ",e),f.debug("Decendants of ",e,": ",xe[e]),_e[e].externalConnections=!0))})))})),Se(t,0),t.edges().forEach((function(e){var n=t.edge(e);f.trace("Edge "+e.v+" -> "+e.w+": "+JSON.stringify(e)),f.trace("Edge "+e.v+" -> "+e.w+": "+JSON.stringify(t.edge(e)));var r=e.v,i=e.w;f.trace("Fix",_e,"ids:",e.v,e.w,"Translateing: ",_e[e.v],_e[e.w]),(_e[e.v]||_e[e.w])&&(f.warn("Fixing and trixing - removing",e.v,e.w,e.name),r=Ce(e.v),i=Ce(e.w),t.removeEdge(e.v,e.w,e.name),r!==e.v&&(n.fromCluster=e.v),i!==e.w&&(n.toCluster=e.w),f.warn("Replacing with",r,i,e.name),t.setEdge(r,i,n,e.name))})),f.warn("Adjusted Graph",W.a.json.write(t)),f.trace(_e))},Se=function t(e,n){if(f.debug("extractor - ",n,W.a.json.write(e),e.children("D")),n>10)f.error("Bailing out");else{for(var r=e.nodes(),i=!1,a=0;a0}if(i){f.debug("Nodes = ",r,n);for(var c=0;c0){f.debug("Cluster without external connections, without a parent and with children",u,n);var l=e.graph(),h=new W.a.Graph({multigraph:!0,compound:!0}).setGraph({rankdir:"TB"===l.rankdir?"LR":"TB",nodesep:50,ranksep:50,marginx:8,marginy:8}).setDefaultEdgeLabel((function(){return{}}));f.debug("Old graph before copy",W.a.json.write(e)),Ee(u,e,h,u),e.setNode(u,{clusterNode:!0,id:u,clusterData:_e[u].clusterData,labelText:_e[u].labelText,graph:h}),f.debug("New graph after copy",W.a.json.write(h)),f.debug("Old graph after copy",W.a.json.write(e))}else f.debug("Cluster ** ",u," **not meeting the criteria !externalConnections:",!_e[u].externalConnections," no parent: ",!e.parent(u)," children ",e.children(u)&&e.children(u).length>0,e.children("D"),n),f.debug(_e);else f.debug("Not a cluster",u,n)}r=e.nodes(),f.debug("New list of nodes",r);for(var d=0;d0}var Be=function(t,e,n,r){var i,a,o,s,c,u,l,h,f,d,p,y,g;if(i=e.y-t.y,o=t.x-e.x,c=e.x*t.y-t.x*e.y,f=i*n.x+o*n.y+c,d=i*r.x+o*r.y+c,!(0!==f&&0!==d&&Ne(f,d)||(a=r.y-n.y,s=n.x-r.x,u=r.x*n.y-n.x*r.y,l=a*t.x+s*t.y+u,h=a*e.x+s*e.y+u,0!==l&&0!==h&&Ne(l,h)||0==(p=i*s-a*o))))return y=Math.abs(p/2),{x:(g=o*u-s*c)<0?(g-y)/p:(g+y)/p,y:(g=a*c-i*u)<0?(g-y)/p:(g+y)/p}},Le=function(t,e,n){var r=t.x,i=t.y,a=[],o=Number.POSITIVE_INFINITY,s=Number.POSITIVE_INFINITY;"function"==typeof e.forEach?e.forEach((function(t){o=Math.min(o,t.x),s=Math.min(s,t.y)})):(o=Math.min(o,e.x),s=Math.min(s,e.y));for(var c=r-t.width/2-o,u=i-t.height/2-s,l=0;l1&&a.sort((function(t,e){var r=t.x-n.x,i=t.y-n.y,a=Math.sqrt(r*r+i*i),o=e.x-n.x,s=e.y-n.y,c=Math.sqrt(o*o+s*s);return aMath.abs(o)*u?(s<0&&(u=-u),n=0===s?0:u*o/s,r=u):(o<0&&(c=-c),n=c,r=0===o?0:c*s/o),{x:i+n,y:a+r}},Pe={node:n.n(Me).a,circle:De,ellipse:Oe,polygon:Le,rect:Fe},Ie=function(t,e,n){var r=t.insert("g").attr("class","node default").attr("id",e.id),i=70,a=10;"LR"===n&&(i=10,a=70);var o=r.append("rect").style("stroke","black").style("fill","black").attr("x",-1*i/2).attr("y",-1*a/2).attr("width",i).attr("height",a).attr("class","fork-join");return me(e,o),e.height=e.height+e.padding/2,e.width=e.width+e.padding/2,e.intersect=function(t){return Pe.rect(e,t)},r},je={question:function(t,e){var n=ve(t,e,void 0,!0),r=n.shapeSvg,i=n.bbox,a=i.width+e.padding+(i.height+e.padding),o=[{x:a/2,y:0},{x:a,y:-a/2},{x:a/2,y:-a},{x:0,y:-a/2}];f.info("Question main (Circle)");var s=be(r,a,a,o);return me(e,s),e.intersect=function(t){return f.warn("Intersect called"),Pe.polygon(e,o,t)},r},rect:function(t,e){var n=ve(t,e,"node "+e.classes,!0),r=n.shapeSvg,i=n.bbox,a=n.halfPadding;f.trace("Classes = ",e.classes);var o=r.insert("rect",":first-child");return o.attr("class","basic label-container").attr("rx",e.rx).attr("ry",e.ry).attr("x",-i.width/2-a).attr("y",-i.height/2-a).attr("width",i.width+e.padding).attr("height",i.height+e.padding),me(e,o),e.intersect=function(t){return Pe.rect(e,t)},r},rectWithTitle:function(t,e){var n;n=e.classes?"node "+e.classes:"node default";var r=t.insert("g").attr("class",n).attr("id",e.id),i=r.insert("rect",":first-child"),a=r.insert("line"),o=r.insert("g").attr("class","label"),c=e.labelText.flat();f.info("Label text",c[0]);var u,l=o.node().appendChild(ge(c[0],e.labelStyle,!0,!0));if(vt().flowchart.htmlLabels){var h=l.children[0],d=Object(s.select)(l);u=h.getBoundingClientRect(),d.attr("width",u.width),d.attr("height",u.height)}f.info("Text 2",c);var p=c.slice(1,c.length),y=l.getBBox(),g=o.node().appendChild(ge(p.join("
    "),e.labelStyle,!0,!0));if(vt().flowchart.htmlLabels){var v=g.children[0],m=Object(s.select)(g);u=v.getBoundingClientRect(),m.attr("width",u.width),m.attr("height",u.height)}var b=e.padding/2;return Object(s.select)(g).attr("transform","translate( "+(u.width>y.width?0:(y.width-u.width)/2)+", "+(y.height+b+5)+")"),Object(s.select)(l).attr("transform","translate( "+(u.widthe.height/2-s)){var i=s*s*(1-r*r/(o*o));0!=i&&(i=Math.sqrt(i)),i=s-i,t.y-e.y>0&&(i=-i),n.y+=i}return n},r},start:function(t,e){var n=t.insert("g").attr("class","node default").attr("id",e.id),r=n.insert("circle",":first-child");return r.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),me(e,r),e.intersect=function(t){return Pe.circle(e,7,t)},n},end:function(t,e){var n=t.insert("g").attr("class","node default").attr("id",e.id),r=n.insert("circle",":first-child"),i=n.insert("circle",":first-child");return i.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),r.attr("class","state-end").attr("r",5).attr("width",10).attr("height",10),me(e,i),e.intersect=function(t){return Pe.circle(e,7,t)},n},note:function(t,e){var n=ve(t,e,"node "+e.classes,!0),r=n.shapeSvg,i=n.bbox,a=n.halfPadding;f.info("Classes = ",e.classes);var o=r.insert("rect",":first-child");return o.attr("rx",e.rx).attr("ry",e.ry).attr("x",-i.width/2-a).attr("y",-i.height/2-a).attr("width",i.width+e.padding).attr("height",i.height+e.padding),me(e,o),e.intersect=function(t){return Pe.rect(e,t)},r},subroutine:function(t,e){var n=ve(t,e,void 0,!0),r=n.shapeSvg,i=n.bbox,a=i.width+e.padding,o=i.height+e.padding,s=be(r,a,o,[{x:0,y:0},{x:a,y:0},{x:a,y:-o},{x:0,y:-o},{x:0,y:0},{x:-8,y:0},{x:a+8,y:0},{x:a+8,y:-o},{x:-8,y:-o},{x:-8,y:0}]);return me(e,s),e.intersect=function(t){return Pe.polygon(e,t)},r},fork:Ie,join:Ie,class_box:function(t,e){var n,r=e.padding/2;n=e.classes?"node "+e.classes:"node default";var i=t.insert("g").attr("class",n).attr("id",e.id),a=i.insert("rect",":first-child"),o=i.insert("line"),c=i.insert("line"),u=0,l=4,h=i.insert("g").attr("class","label"),f=0,d=e.classData.annotations&&e.classData.annotations[0],p=h.node().appendChild(ge(e.classData.annotations[0],e.labelStyle,!0,!0)),y=p.getBBox();e.classData.annotations[0]&&(l+=y.height+4,u+=y.width);var g=h.node().appendChild(ge(e.labelText,e.labelStyle,!0,!0)),v=g.getBBox();l+=v.height+4,v.width>u&&(u=v.width);var m=[];e.classData.members.forEach((function(t){var n=h.node().appendChild(ge(t,e.labelStyle,!0,!0)),r=n.getBBox();r.width>u&&(u=r.width),l+=r.height+4,m.push(n)}));var b=[];e.classData.methods.forEach((function(t){var n=h.node().appendChild(ge(t,e.labelStyle,!0,!0)),r=n.getBBox();r.width>u&&(u=r.width),l+=r.height+4,b.push(n)})),l+=8,d&&(Object(s.select)(p).attr("transform","translate( "+-(u+e.padding-y.width/2)/2+", "+-1*l/2+")"),f=y.height+4);var _,x=(u-v.width)/2;if(Object(s.select)(g).attr("transform","translate( "+(-1*u/2+x)+", "+(-1*l/2+f)+")"),f+=v.height+4,o.attr("class","divider").attr("x1",-u/2-r).attr("x2",u/2+r).attr("y1",-l/2-r+8+f).attr("y2",-l/2-r+8+f),f+=8,m.forEach((function(t){Object(s.select)(t).attr("transform","translate( "+-u/2+", "+(-1*l/2+f+4)+")"),f+=v.height+4})),c.attr("class","divider").attr("x1",-u/2-r).attr("x2",u/2+r).attr("y1",-l/2-r+8+f).attr("y2",-l/2-r+8+f),f+=8,b.forEach((function(t){Object(s.select)(t).attr("transform","translate( "+-u/2+", "+(-1*l/2+f)+")"),f+=v.height+4})),vt().flowchart.htmlLabels){var k=p.children[0],w=Object(s.select)(p);_=k.getBoundingClientRect(),w.attr("width",_.width),w.attr("height",_.height)}return a.attr("class","outer title-state").attr("x",-u/2-r).attr("y",-l/2-r).attr("width",u+e.padding).attr("height",l+e.padding),me(e,a),e.intersect=function(t){return Pe.rect(e,t)},i}},Re={},Ye=function(t){var e=Re[t.id];f.trace("Transforming node",t,"translate("+(t.x-t.width/2-5)+", "+(t.y-t.height/2-5)+")");t.clusterNode?e.attr("transform","translate("+(t.x-t.width/2-8)+", "+(t.y-t.height/2-8)+")"):e.attr("transform","translate("+t.x+", "+t.y+")")},ze={rect:function(t,e){f.trace("Creating subgraph rect for ",e.id,e);var n=t.insert("g").attr("class","cluster").attr("id",e.id),r=n.insert("rect",":first-child"),i=n.insert("g").attr("class","cluster-label"),a=i.node().appendChild(ge(e.labelText,e.labelStyle,void 0,!0)),o=a.getBBox();if(vt().flowchart.htmlLabels){var c=a.children[0],u=Object(s.select)(a);o=c.getBoundingClientRect(),u.attr("width",o.width),u.attr("height",o.height)}var l=0*e.padding,h=l/2;f.trace("Data ",e,JSON.stringify(e)),r.attr("rx",e.rx).attr("ry",e.ry).attr("x",e.x-e.width/2-h).attr("y",e.y-e.height/2-h).attr("width",e.width+l).attr("height",e.height+l),i.attr("transform","translate("+(e.x-o.width/2)+", "+(e.y-e.height/2-e.padding/3+3)+")");var d=r.node().getBBox();return e.width=d.width,e.height=d.height,e.intersect=function(t){return Fe(e,t)},n},roundedWithTitle:function(t,e){var n=t.insert("g").attr("class",e.classes).attr("id",e.id),r=n.insert("rect",":first-child"),i=n.insert("g").attr("class","cluster-label"),a=n.append("rect"),o=i.node().appendChild(ge(e.labelText,e.labelStyle,void 0,!0)),c=o.getBBox();if(vt().flowchart.htmlLabels){var u=o.children[0],l=Object(s.select)(o);c=u.getBoundingClientRect(),l.attr("width",c.width),l.attr("height",c.height)}c=o.getBBox();var h=0*e.padding,f=h/2;r.attr("class","outer").attr("x",e.x-e.width/2-f).attr("y",e.y-e.height/2-f).attr("width",e.width+h).attr("height",e.height+h),a.attr("class","inner").attr("x",e.x-e.width/2-f).attr("y",e.y-e.height/2-f+c.height-1).attr("width",e.width+h).attr("height",e.height+h-c.height-3),i.attr("transform","translate("+(e.x-c.width/2)+", "+(e.y-e.height/2-e.padding/3+(vt().flowchart.htmlLabels?5:3))+")");var d=r.node().getBBox();return e.width=d.width,e.height=d.height,e.intersect=function(t){return Fe(e,t)},n},noteGroup:function(t,e){var n=t.insert("g").attr("class","note-cluster").attr("id",e.id),r=n.insert("rect",":first-child"),i=0*e.padding,a=i/2;r.attr("rx",e.rx).attr("ry",e.ry).attr("x",e.x-e.width/2-a).attr("y",e.y-e.height/2-a).attr("width",e.width+i).attr("height",e.height+i).attr("fill","none");var o=r.node().getBBox();return e.width=o.width,e.height=o.height,e.intersect=function(t){return Fe(e,t)},n},divider:function(t,e){var n=t.insert("g").attr("class",e.classes).attr("id",e.id),r=n.insert("rect",":first-child"),i=0*e.padding,a=i/2;r.attr("class","divider").attr("x",e.x-e.width/2-a).attr("y",e.y-e.height/2).attr("width",e.width+i).attr("height",e.height+i);var o=r.node().getBBox();return e.width=o.width,e.height=o.height,e.intersect=function(t){return Fe(e,t)},n}},Ue={},$e={},We=function(t,e){var n=t.x,r=t.y,i=Math.abs(e.x-n),a=Math.abs(e.y-r),o=t.width/2,s=t.height/2;return i>=o||a>=s},He=function(t,e,n){f.warn("intersection calc o:",e," i:",n,t);var r=t.x,i=t.y,a=Math.abs(r-n.x),o=t.width/2,s=n.xMath.abs(r-e.x)*c){var g=n.y0&&f.info("Recursive edges",n.edge(n.edges()[0]));var c=o.insert("g").attr("class","clusters"),u=o.insert("g").attr("class","edgePaths"),l=o.insert("g").attr("class","edgeLabels"),h=o.insert("g").attr("class","nodes");return n.nodes().forEach((function(e){var o=n.node(e);if(void 0!==i){var s=JSON.parse(JSON.stringify(i.clusterData));f.info("Setting data for cluster",s),n.setNode(i.id,s),n.setParent(e,i.id,s)}if(f.info("(Insert) Node "+e+": "+JSON.stringify(n.node(e))),o&&o.clusterNode){f.info("Cluster identified",e,o,n.node(e));var c=t(h,o.graph,r,n.node(e));me(o,c),function(t,e){Re[e.id]=t}(c,o),f.warn("Recursive render complete",c,o)}else n.children(e).length>0?(f.info("Cluster - the non recursive path",e,o.id,o,n),f.info(Te(o.id,n)),_e[o.id]={id:Te(o.id,n),node:o}):(f.info("Node - the non recursive path",e,o.id,o),function(t,e,n){Re[e.id]=je[e.shape](t,e,n)}(h,n.node(e),a))})),n.edges().forEach((function(t){var e=n.edge(t.v,t.w,t.name);f.info("Edge "+t.v+" -> "+t.w+": "+JSON.stringify(t)),f.info("Edge "+t.v+" -> "+t.w+": ",t," ",JSON.stringify(n.edge(t))),f.info("Fix",_e,"ids:",t.v,t.w,"Translateing: ",_e[t.v],_e[t.w]),function(t,e){var n=ge(e.label,e.labelStyle),r=t.insert("g").attr("class","edgeLabel"),i=r.insert("g").attr("class","label");i.node().appendChild(n);var a=n.getBBox();if(vt().flowchart.htmlLabels){var o=n.children[0],c=Object(s.select)(n);a=o.getBoundingClientRect(),c.attr("width",a.width),c.attr("height",a.height)}i.attr("transform","translate("+-a.width/2+", "+-a.height/2+")"),$e[e.id]=r,e.width=a.width,e.height=a.height}(l,e)})),n.edges().forEach((function(t){f.info("Edge "+t.v+" -> "+t.w+": "+JSON.stringify(t))})),f.info("#############################################"),f.info("### Layout ###"),f.info("#############################################"),f.info(n),de.a.layout(n),f.info("Graph after layout:",W.a.json.write(n)),n.nodes().forEach((function(t){var e=n.node(t);f.info("Position "+t+": "+JSON.stringify(n.node(t))),f.info("Position "+t+": ("+e.x,","+e.y,") width: ",e.width," height: ",e.height),e&&e.clusterNode?Ye(e):n.children(t).length>0?(!function(t,e){f.trace("Inserting cluster");var n=e.shape||"rect";Ue[e.id]=ze[n](t,e)}(c,e),_e[e.id].node=e):Ye(e)})),n.edges().forEach((function(t){var e=n.edge(t);f.info("Edge "+t.v+" -> "+t.w+": "+JSON.stringify(e),e);var i=function(t,e,n,r,i,a){var o=n.points,c=!1,u=a.node(e.v),l=a.node(e.w);if(l.intersect&&u.intersect&&((o=o.slice(1,n.points.length-1)).unshift(u.intersect(o[0])),f.info("Last point",o[o.length-1],l,l.intersect(o[o.length-1])),o.push(l.intersect(o[o.length-1]))),n.toCluster){var h;f.trace("edge",n),f.trace("to cluster",r[n.toCluster]),o=[];var d=!1;n.points.forEach((function(t){var e=r[n.toCluster].node;if(We(e,t)||d)d||o.push(t);else{f.trace("inside",n.toCluster,t,h);var i=He(e,h,t),a=!1;o.forEach((function(t){a=a||t.x===i.x&&t.y===i.y})),o.find((function(t){return t.x===i.x&&t.y===i.y}))?f.warn("no intersect",i,o):o.push(i),d=!0}h=t})),c=!0}if(n.fromCluster){f.trace("edge",n),f.warn("from cluster",r[n.fromCluster]);for(var p,y=[],g=!1,v=o.length-1;v>=0;v--){var m=o[v],b=r[n.fromCluster].node;if(We(b,m)||g)f.trace("Outside point",m),g||y.unshift(m);else{f.warn("inside",n.fromCluster,m,b);var _=He(b,p,m);y.unshift(_),g=!0}p=m}o=y,c=!0}var x,k=o.filter((function(t){return!Number.isNaN(t.y)})),w=Object(s.line)().x((function(t){return t.x})).y((function(t){return t.y})).curve(s.curveBasis);switch(n.thickness){case"normal":x="edge-thickness-normal";break;case"thick":x="edge-thickness-thick";break;default:x=""}switch(n.pattern){case"solid":x+=" edge-pattern-solid";break;case"dotted":x+=" edge-pattern-dotted";break;case"dashed":x+=" edge-pattern-dashed"}var E=t.append("path").attr("d",w(k)).attr("id",n.id).attr("class"," "+x+(n.classes?" "+n.classes:"")),T="";switch(vt().state.arrowMarkerAbsolute&&(T=(T=(T=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search).replace(/\(/g,"\\(")).replace(/\)/g,"\\)")),f.info("arrowTypeStart",n.arrowTypeStart),f.info("arrowTypeEnd",n.arrowTypeEnd),n.arrowTypeStart){case"arrow_cross":E.attr("marker-start","url("+T+"#"+i+"-crossStart)");break;case"arrow_point":E.attr("marker-start","url("+T+"#"+i+"-pointStart)");break;case"arrow_barb":E.attr("marker-start","url("+T+"#"+i+"-barbStart)");break;case"arrow_circle":E.attr("marker-start","url("+T+"#"+i+"-circleStart)");break;case"aggregation":E.attr("marker-start","url("+T+"#"+i+"-aggregationStart)");break;case"extension":E.attr("marker-start","url("+T+"#"+i+"-extensionStart)");break;case"composition":E.attr("marker-start","url("+T+"#"+i+"-compositionStart)");break;case"dependency":E.attr("marker-start","url("+T+"#"+i+"-dependencyStart)")}switch(n.arrowTypeEnd){case"arrow_cross":E.attr("marker-end","url("+T+"#"+i+"-crossEnd)");break;case"arrow_point":E.attr("marker-end","url("+T+"#"+i+"-pointEnd)");break;case"arrow_barb":E.attr("marker-end","url("+T+"#"+i+"-barbEnd)");break;case"arrow_circle":E.attr("marker-end","url("+T+"#"+i+"-circleEnd)");break;case"aggregation":E.attr("marker-end","url("+T+"#"+i+"-aggregationEnd)");break;case"extension":E.attr("marker-end","url("+T+"#"+i+"-extensionEnd)");break;case"composition":E.attr("marker-end","url("+T+"#"+i+"-compositionEnd)");break;case"dependency":E.attr("marker-end","url("+T+"#"+i+"-dependencyEnd)")}if(c)return o}(u,t,e,_e,r,n);!function(t,e){if(f.info("Moving label",t.id,t.label,$e[t.id]),t.label){var n=$e[t.id],r=t.x,i=t.y;if(e){var a=U.calcLabelPosition(e);r=a.x,i=a.y}n.attr("transform","translate("+r+", "+i+")")}}(e,i)})),o},Ge=function(t,e,n,r,i){ye(t,n,r,i),Re={},$e={},Ue={},xe={},ke={},_e={},f.warn("Graph before:",W.a.json.write(e)),Ae(e),f.warn("Graph after:",W.a.json.write(e)),f.warn("Graph ever after:",e.graph()),Ve(t,e,r)},qe={},Xe=function(t,e,n){var r=Object(s.select)('[id="'.concat(n,'"]'));Object.keys(t).forEach((function(n){var i=t[n],a="default";i.classes.length>0&&(a=i.classes.join(" "));var o,s=N(i.styles),c=void 0!==i.text?i.text:i.id;if(vt().flowchart.htmlLabels){var u={label:c.replace(/fa[lrsb]?:fa-[\w-]+/g,(function(t){return"")}))};(o=Vt()(r,u).node()).parentNode.removeChild(o)}else{var l=document.createElementNS("http://www.w3.org/2000/svg","text");l.setAttribute("style",s.labelStyle.replace("color:","fill:"));for(var h=c.split(_.lineBreakRegex),d=0;d=0;h--)i=l[h],f.info("Subgraph - ",i),Yt.addVertex(i.id,i.title,"group",void 0,i.classes);var d=Yt.getVertices(),p=Yt.getEdges();f.info(p);var y=0;for(y=l.length-1;y>=0;y--){i=l[y],Object(s.selectAll)("cluster").append("text");for(var g=0;g0)switch(e.valign){case"top":case"start":s=function(){return Math.round(e.y+e.textMargin)};break;case"middle":case"center":s=function(){return Math.round(e.y+(n+r+e.textMargin)/2)};break;case"bottom":case"end":s=function(){return Math.round(e.y+(n+r+2*e.textMargin)-e.textMargin)}}if(void 0!==e.anchor&&void 0!==e.textMargin&&void 0!==e.width)switch(e.anchor){case"left":case"start":e.x=Math.round(e.x+e.textMargin),e.anchor="start",e.dominantBaseline="text-after-edge",e.alignmentBaseline="middle";break;case"middle":case"center":e.x=Math.round(e.x+e.width/2),e.anchor="middle",e.dominantBaseline="middle",e.alignmentBaseline="middle";break;case"right":case"end":e.x=Math.round(e.x+e.width-e.textMargin),e.anchor="end",e.dominantBaseline="text-before-edge",e.alignmentBaseline="middle"}for(var c=0;c0&&(r+=(l._groups||l)[0][0].getBBox().height,n=r),a.push(l)}return a},en=function(t,e){var n,r,i,a,o,s=t.append("polygon");return s.attr("points",(n=e.x,r=e.y,i=e.width,a=e.height,n+","+r+" "+(n+i)+","+r+" "+(n+i)+","+(r+a-(o=7))+" "+(n+i-1.2*o)+","+(r+a)+" "+n+","+(r+a))),s.attr("class","labelBox"),e.y=e.y+e.height/2,tn(t,e),s},nn=-1,rn=function(){return{x:0,y:0,fill:void 0,anchor:void 0,style:"#666",width:void 0,height:void 0,textMargin:0,rx:0,ry:0,tspan:!0,valign:void 0}},an=function(){return{x:0,y:0,fill:"#EDF2AE",stroke:"#666",width:100,anchor:"start",height:100,rx:0,ry:0}},on=function(){function t(t,e,n,i,a,o,s){r(e.append("text").attr("x",n+a/2).attr("y",i+o/2+5).style("text-anchor","middle").text(t),s)}function e(t,e,n,i,a,o,s,c){for(var u=c.actorFontSize,l=c.actorFontFamily,h=c.actorFontWeight,f=t.split(_.lineBreakRegex),d=0;d2&&void 0!==arguments[2]?arguments[2]:{text:void 0,wrap:void 0},r=arguments.length>3?arguments[3]:void 0;if(r===kn.ACTIVE_END){var i=bn(t.actor);if(i<1){var a=new Error("Trying to inactivate an inactive participant ("+t.actor+")");throw a.hash={text:"->>-",token:"->>-",line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["'ACTIVE_PARTICIPANT'"]},a}}return fn.push({from:t,to:e,message:n.text,wrap:void 0===n.wrap&&xn()||!!n.wrap,type:r}),!0},xn=function(){return vn},kn={SOLID:0,DOTTED:1,NOTE:2,SOLID_CROSS:3,DOTTED_CROSS:4,SOLID_OPEN:5,DOTTED_OPEN:6,LOOP_START:10,LOOP_END:11,ALT_START:12,ALT_ELSE:13,ALT_END:14,OPT_START:15,OPT_END:16,ACTIVE_START:17,ACTIVE_END:18,PAR_START:19,PAR_AND:20,PAR_END:21,RECT_START:22,RECT_END:23},wn=function(t,e,n){var r={actor:t,placement:e,message:n.text,wrap:void 0===n.wrap&&xn()||!!n.wrap},i=[].concat(t,t);dn.push(r),fn.push({from:i[0],to:i[1],message:n.text,wrap:void 0===n.wrap&&xn()||!!n.wrap,type:kn.NOTE,placement:e})},En=function(t){pn=t.text,yn=void 0===t.wrap&&xn()||!!t.wrap},Tn={addActor:mn,addMessage:function(t,e,n,r){fn.push({from:t,to:e,message:n.text,wrap:void 0===n.wrap&&xn()||!!n.wrap,answer:r})},addSignal:_n,autoWrap:xn,setWrap:function(t){vn=t},enableSequenceNumbers:function(){gn=!0},showSequenceNumbers:function(){return gn},getMessages:function(){return fn},getActors:function(){return hn},getActor:function(t){return hn[t]},getActorKeys:function(){return Object.keys(hn)},getTitle:function(){return pn},parseDirective:function(t,e,n){Bo.parseDirective(this,t,e,n)},getConfig:function(){return vt().sequence},getTitleWrapped:function(){return yn},clear:function(){hn={},fn=[]},parseMessage:function(t){var e=t.trim(),n={text:e.replace(/^[:]?(?:no)?wrap:/,"").trim(),wrap:null===e.match(/^[:]?(?:no)?wrap:/)?_.hasBreaks(e)||void 0:null!==e.match(/^[:]?wrap:/)||null===e.match(/^[:]?nowrap:/)&&void 0};return f.debug("parseMessage:",n),n},LINETYPE:kn,ARROWTYPE:{FILLED:0,OPEN:1},PLACEMENT:{LEFTOF:0,RIGHTOF:1,OVER:2},addNote:wn,setTitle:En,apply:function t(e){if(e instanceof Array)e.forEach((function(e){t(e)}));else switch(e.type){case"addActor":mn(e.actor,e.actor,e.description);break;case"activeStart":case"activeEnd":_n(e.actor,void 0,void 0,e.signalType);break;case"addNote":wn(e.actor,e.placement,e.text);break;case"addMessage":_n(e.from,e.to,e.msg,e.signalType);break;case"loopStart":_n(void 0,void 0,e.loopText,e.signalType);break;case"loopEnd":_n(void 0,void 0,void 0,e.signalType);break;case"rectStart":_n(void 0,void 0,e.color,e.signalType);break;case"rectEnd":_n(void 0,void 0,void 0,e.signalType);break;case"optStart":_n(void 0,void 0,e.optText,e.signalType);break;case"optEnd":_n(void 0,void 0,void 0,e.signalType);break;case"altStart":case"else":_n(void 0,void 0,e.altText,e.signalType);break;case"altEnd":_n(void 0,void 0,void 0,e.signalType);break;case"setTitle":En(e.text);break;case"parStart":case"and":_n(void 0,void 0,e.parText,e.signalType);break;case"parEnd":_n(void 0,void 0,void 0,e.signalType)}}};cn.parser.yy=Tn;var Cn={},An={data:{startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},verticalPos:0,sequenceItems:[],activations:[],models:{getHeight:function(){return Math.max.apply(null,0===this.actors.length?[0]:this.actors.map((function(t){return t.height||0})))+(0===this.loops.length?0:this.loops.map((function(t){return t.height||0})).reduce((function(t,e){return t+e})))+(0===this.messages.length?0:this.messages.map((function(t){return t.height||0})).reduce((function(t,e){return t+e})))+(0===this.notes.length?0:this.notes.map((function(t){return t.height||0})).reduce((function(t,e){return t+e})))},clear:function(){this.actors=[],this.loops=[],this.messages=[],this.notes=[]},addActor:function(t){this.actors.push(t)},addLoop:function(t){this.loops.push(t)},addMessage:function(t){this.messages.push(t)},addNote:function(t){this.notes.push(t)},lastActor:function(){return this.actors[this.actors.length-1]},lastLoop:function(){return this.loops[this.loops.length-1]},lastMessage:function(){return this.messages[this.messages.length-1]},lastNote:function(){return this.notes[this.notes.length-1]},actors:[],loops:[],messages:[],notes:[]},init:function(){this.sequenceItems=[],this.activations=[],this.models.clear(),this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},this.verticalPos=0,Nn(cn.parser.yy.getConfig())},updateVal:function(t,e,n,r){void 0===t[e]?t[e]=n:t[e]=r(n,t[e])},updateBounds:function(t,e,n,r){var i=this,a=0;function o(o){return function(s){a++;var c=i.sequenceItems.length-a+1;i.updateVal(s,"starty",e-c*Cn.boxMargin,Math.min),i.updateVal(s,"stopy",r+c*Cn.boxMargin,Math.max),i.updateVal(An.data,"startx",t-c*Cn.boxMargin,Math.min),i.updateVal(An.data,"stopx",n+c*Cn.boxMargin,Math.max),"activation"!==o&&(i.updateVal(s,"startx",t-c*Cn.boxMargin,Math.min),i.updateVal(s,"stopx",n+c*Cn.boxMargin,Math.max),i.updateVal(An.data,"starty",e-c*Cn.boxMargin,Math.min),i.updateVal(An.data,"stopy",r+c*Cn.boxMargin,Math.max))}}this.sequenceItems.forEach(o()),this.activations.forEach(o("activation"))},insert:function(t,e,n,r){var i=Math.min(t,n),a=Math.max(t,n),o=Math.min(e,r),s=Math.max(e,r);this.updateVal(An.data,"startx",i,Math.min),this.updateVal(An.data,"starty",o,Math.min),this.updateVal(An.data,"stopx",a,Math.max),this.updateVal(An.data,"stopy",s,Math.max),this.updateBounds(i,o,a,s)},newActivation:function(t,e,n){var r=n[t.from.actor],i=Bn(t.from.actor).length||0,a=r.x+r.width/2+(i-1)*Cn.activationWidth/2;this.activations.push({startx:a,starty:this.verticalPos+2,stopx:a+Cn.activationWidth,stopy:void 0,actor:t.from.actor,anchored:sn.anchorElement(e)})},endActivation:function(t){var e=this.activations.map((function(t){return t.actor})).lastIndexOf(t.from.actor);return this.activations.splice(e,1)[0]},createLoop:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{message:void 0,wrap:!1,width:void 0},e=arguments.length>1?arguments[1]:void 0;return{startx:void 0,starty:this.verticalPos,stopx:void 0,stopy:void 0,title:t.message,wrap:t.wrap,width:t.width,height:0,fill:e}},newLoop:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{message:void 0,wrap:!1,width:void 0},e=arguments.length>1?arguments[1]:void 0;this.sequenceItems.push(this.createLoop(t,e))},endLoop:function(){return this.sequenceItems.pop()},addSectionToLoop:function(t){var e=this.sequenceItems.pop();e.sections=e.sections||[],e.sectionTitles=e.sectionTitles||[],e.sections.push({y:An.getVerticalPos(),height:0}),e.sectionTitles.push(t),this.sequenceItems.push(e)},bumpVerticalPos:function(t){this.verticalPos=this.verticalPos+t,this.data.stopy=this.verticalPos},getVerticalPos:function(){return this.verticalPos},getBounds:function(){return console.log("here",this.data),{bounds:this.data,models:this.models}}},Sn=function(t){return{fontFamily:t.messageFontFamily,fontSize:t.messageFontSize,fontWeight:t.messageFontWeight}},Mn=function(t){return{fontFamily:t.noteFontFamily,fontSize:t.noteFontSize,fontWeight:t.noteFontWeight}},On=function(t){return{fontFamily:t.actorFontFamily,fontSize:t.actorFontSize,fontWeight:t.actorFontWeight}},Dn=function(t,e,n,r){for(var i=0,a=0,o=0;o0&&o.forEach((function(r){if(n=r,i.startx===i.stopx){var a=e[t.from],o=e[t.to];n.from=Math.min(a.x-i.width/2,a.x-a.width/2,n.from),n.to=Math.max(o.x+i.width/2,o.x+a.width/2,n.to),n.width=Math.max(n.width,Math.abs(n.to-n.from))-Cn.labelBoxWidth}else n.from=Math.min(i.startx,n.from),n.to=Math.max(i.stopx,n.to),n.width=Math.max(n.width,i.width)-Cn.labelBoxWidth})))})),An.activations=[],f.debug("Loop type widths:",a),a},Rn={bounds:An,drawActors:Dn,setConf:Nn,draw:function(t,e){Cn=vt().sequence,console.log("there ",Cn),cn.parser.yy.clear(),cn.parser.yy.setWrap(Cn.wrap),cn.parser.parse(t+"\n"),An.init(),f.debug("C:".concat(JSON.stringify(Cn,null,2)));var n=Object(s.select)('[id="'.concat(e,'"]')),r=cn.parser.yy.getActors(),i=cn.parser.yy.getActorKeys(),a=cn.parser.yy.getMessages(),o=cn.parser.yy.getTitle(),c=Pn(r,a);Cn.height=In(r,c),Dn(n,r,i,0);var u=jn(a,r,c);sn.insertArrowHead(n),sn.insertArrowCrossHead(n),sn.insertSequenceNumber(n);var l=1;a.forEach((function(t){var e,i,a;switch(t.type){case cn.parser.yy.LINETYPE.NOTE:i=t.noteModel,function(t,e){An.bumpVerticalPos(Cn.boxMargin),e.height=Cn.boxMargin,e.starty=An.getVerticalPos();var n=sn.getNoteRect();n.x=e.startx,n.y=e.starty,n.width=e.width||Cn.width,n.class="note";var r=t.append("g"),i=sn.drawRect(r,n),a=sn.getTextObj();a.x=e.startx,a.y=e.starty,a.width=n.width,a.dy="1em",a.text=e.message,a.class="noteText",a.fontFamily=Cn.noteFontFamily,a.fontSize=Cn.noteFontSize,a.fontWeight=Cn.noteFontWeight,a.anchor=Cn.noteAlign,a.textMargin=Cn.noteMargin,a.valign=Cn.noteAlign,a.wrap=!0;var o=tn(r,a),s=Math.round(o.map((function(t){return(t._groups||t)[0][0].getBBox().height})).reduce((function(t,e){return t+e})));i.attr("height",s+2*Cn.noteMargin),e.height+=s+2*Cn.noteMargin,An.bumpVerticalPos(s+2*Cn.noteMargin),e.stopy=e.starty+s+2*Cn.noteMargin,e.stopx=e.startx+n.width,An.insert(e.startx,e.starty,e.stopx,e.stopy),An.models.addNote(e)}(n,i);break;case cn.parser.yy.LINETYPE.ACTIVE_START:An.newActivation(t,n,r);break;case cn.parser.yy.LINETYPE.ACTIVE_END:!function(t,e){var r=An.endActivation(t);r.starty+18>e&&(r.starty=e-6,e+=12),sn.drawActivation(n,r,e,Cn,Bn(t.from.actor).length),An.insert(r.startx,e-10,r.stopx,e)}(t,An.getVerticalPos());break;case cn.parser.yy.LINETYPE.LOOP_START:Fn(u,t,Cn.boxMargin,Cn.boxMargin+Cn.boxTextMargin,(function(t){return An.newLoop(t)}));break;case cn.parser.yy.LINETYPE.LOOP_END:e=An.endLoop(),sn.drawLoop(n,e,"loop",Cn),An.bumpVerticalPos(e.stopy-An.getVerticalPos()),An.models.addLoop(e);break;case cn.parser.yy.LINETYPE.RECT_START:Fn(u,t,Cn.boxMargin,Cn.boxMargin,(function(t){return An.newLoop(void 0,t.message)}));break;case cn.parser.yy.LINETYPE.RECT_END:e=An.endLoop(),sn.drawBackgroundRect(n,e),An.models.addLoop(e),An.bumpVerticalPos(e.stopy-An.getVerticalPos());break;case cn.parser.yy.LINETYPE.OPT_START:Fn(u,t,Cn.boxMargin,Cn.boxMargin+Cn.boxTextMargin,(function(t){return An.newLoop(t)}));break;case cn.parser.yy.LINETYPE.OPT_END:e=An.endLoop(),sn.drawLoop(n,e,"opt",Cn),An.bumpVerticalPos(e.stopy-An.getVerticalPos()),An.models.addLoop(e);break;case cn.parser.yy.LINETYPE.ALT_START:Fn(u,t,Cn.boxMargin,Cn.boxMargin+Cn.boxTextMargin,(function(t){return An.newLoop(t)}));break;case cn.parser.yy.LINETYPE.ALT_ELSE:Fn(u,t,Cn.boxMargin+Cn.boxTextMargin,Cn.boxMargin,(function(t){return An.addSectionToLoop(t)}));break;case cn.parser.yy.LINETYPE.ALT_END:e=An.endLoop(),sn.drawLoop(n,e,"alt",Cn),An.bumpVerticalPos(e.stopy-An.getVerticalPos()),An.models.addLoop(e);break;case cn.parser.yy.LINETYPE.PAR_START:Fn(u,t,Cn.boxMargin,Cn.boxMargin+Cn.boxTextMargin,(function(t){return An.newLoop(t)}));break;case cn.parser.yy.LINETYPE.PAR_AND:Fn(u,t,Cn.boxMargin+Cn.boxTextMargin,Cn.boxMargin,(function(t){return An.addSectionToLoop(t)}));break;case cn.parser.yy.LINETYPE.PAR_END:e=An.endLoop(),sn.drawLoop(n,e,"par",Cn),An.bumpVerticalPos(e.stopy-An.getVerticalPos()),An.models.addLoop(e);break;default:try{(a=t.msgModel).starty=An.getVerticalPos(),a.sequenceIndex=l,function(t,e){An.bumpVerticalPos(10);var n=e.startx,r=e.stopx,i=e.starty,a=e.message,o=e.type,s=e.sequenceIndex,c=e.wrap,u=_.splitBreaks(a).length,l=U.calculateTextDimensions(a,Sn(Cn)),h=l.height/u;e.height+=h,An.bumpVerticalPos(h);var f=sn.getTextObj();f.x=n,f.y=i+10,f.width=r-n,f.class="messageText",f.dy="1em",f.text=a,f.fontFamily=Cn.messageFontFamily,f.fontSize=Cn.messageFontSize,f.fontWeight=Cn.messageFontWeight,f.anchor=Cn.messageAlign,f.valign=Cn.messageAlign,f.textMargin=Cn.wrapPadding,f.tspan=!1,f.wrap=c,tn(t,f);var d,p,y=l.height-10,g=l.width;if(n===r){p=An.getVerticalPos()+y,Cn.rightAngles?d=t.append("path").attr("d","M ".concat(n,",").concat(p," H ").concat(n+Math.max(Cn.width/2,g/2)," V ").concat(p+25," H ").concat(n)):(y+=Cn.boxMargin,p=An.getVerticalPos()+y,d=t.append("path").attr("d","M "+n+","+p+" C "+(n+60)+","+(p-10)+" "+(n+60)+","+(p+30)+" "+n+","+(p+20))),y+=30;var v=Math.max(g/2,Cn.width/2);An.insert(n-v,An.getVerticalPos()-10+y,r+v,An.getVerticalPos()+30+y)}else y+=Cn.boxMargin,p=An.getVerticalPos()+y,(d=t.append("line")).attr("x1",n),d.attr("y1",p),d.attr("x2",r),d.attr("y2",p),An.insert(n,p-10,r,p);o===cn.parser.yy.LINETYPE.DOTTED||o===cn.parser.yy.LINETYPE.DOTTED_CROSS||o===cn.parser.yy.LINETYPE.DOTTED_OPEN?(d.style("stroke-dasharray","3, 3"),d.attr("class","messageLine1")):d.attr("class","messageLine0");var m="";Cn.arrowMarkerAbsolute&&(m=(m=(m=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search).replace(/\(/g,"\\(")).replace(/\)/g,"\\)")),d.attr("stroke-width",2),d.attr("stroke","none"),d.style("fill","none"),o!==cn.parser.yy.LINETYPE.SOLID&&o!==cn.parser.yy.LINETYPE.DOTTED||d.attr("marker-end","url("+m+"#arrowhead)"),o!==cn.parser.yy.LINETYPE.SOLID_CROSS&&o!==cn.parser.yy.LINETYPE.DOTTED_CROSS||d.attr("marker-end","url("+m+"#crosshead)"),(Tn.showSequenceNumbers()||Cn.showSequenceNumbers)&&(d.attr("marker-start","url("+m+"#sequencenumber)"),t.append("text").attr("x",n).attr("y",p+4).attr("font-family","sans-serif").attr("font-size","12px").attr("text-anchor","middle").attr("textLength","16px").attr("class","sequenceNumber").text(s)),An.bumpVerticalPos(y),e.height+=y,e.stopy=e.starty+e.height,An.insert(e.fromBounds,e.starty,e.toBounds,e.stopy)}(n,a),An.models.addMessage(a)}catch(t){f.error("error while drawing message",t)}}[cn.parser.yy.LINETYPE.SOLID_OPEN,cn.parser.yy.LINETYPE.DOTTED_OPEN,cn.parser.yy.LINETYPE.SOLID,cn.parser.yy.LINETYPE.DOTTED,cn.parser.yy.LINETYPE.SOLID_CROSS,cn.parser.yy.LINETYPE.DOTTED_CROSS].includes(t.type)&&l++})),Cn.mirrorActors&&(An.bumpVerticalPos(2*Cn.boxMargin),Dn(n,r,i,An.getVerticalPos()));var h=An.getBounds().bounds;f.debug("For line height fix Querying: #"+e+" .actor-line"),Object(s.selectAll)("#"+e+" .actor-line").attr("y2",h.stopy);var d=h.stopy-h.starty+2*Cn.diagramMarginY;Cn.mirrorActors&&(d=d-Cn.boxMargin+Cn.bottomMarginAdj);var p=h.stopx-h.startx+2*Cn.diagramMarginX;o&&n.append("text").text(o).attr("x",(h.stopx-h.startx)/2-2*Cn.diagramMarginX).attr("y",-25),Cn.useMaxWidth?(n.attr("height","100%"),n.attr("width","100%"),n.attr("style","max-width:"+p+"px;")):(n.attr("height",d),n.attr("width",p));var y=o?40:0;n.attr("viewBox",h.startx-Cn.diagramMarginX+" -"+(Cn.diagramMarginY+y)+" "+p+" "+(d+y)),f.debug("models:",An.models)}},Yn=n(27),zn=n.n(Yn);function Un(t){return function(t){if(Array.isArray(t)){for(var e=0,n=new Array(t.length);e=6&&n.indexOf("weekends")>=0||(n.indexOf(t.format("dddd").toLowerCase())>=0||n.indexOf(t.format(e.trim()))>=0)},ir=function(t,e,n){if(n.length&&!t.manualEndTime){var r=l()(t.startTime,e,!0);r.add(1,"d");var i=l()(t.endTime,e,!0),a=ar(r,i,e,n);t.endTime=i.toDate(),t.renderEndTime=a}},ar=function(t,e,n,r){for(var i=!1,a=null;t<=e;)i||(a=e.toDate()),(i=rr(t,n,r))&&e.add(1,"d"),t.add(1,"d");return a},or=function(t,e,n){n=n.trim();var r=/^after\s+([\d\w- ]+)/.exec(n.trim());if(null!==r){var i=null;if(r[1].split(" ").forEach((function(t){var e=dr(t);void 0!==e&&(i?e.endTime>i.endTime&&(i=e):i=e)})),i)return i.endTime;var a=new Date;return a.setHours(0,0,0,0),a}var o=l()(n,e.trim(),!0);return o.isValid()?o.toDate():(f.debug("Invalid date:"+n),f.debug("With date format:"+e.trim()),new Date)},sr=function(t,e){if(null!==t)switch(t[2]){case"s":e.add(t[1],"seconds");break;case"m":e.add(t[1],"minutes");break;case"h":e.add(t[1],"hours");break;case"d":e.add(t[1],"days");break;case"w":e.add(t[1],"weeks")}return e.toDate()},cr=function(t,e,n,r){r=r||!1,n=n.trim();var i=l()(n,e.trim(),!0);return i.isValid()?(r&&i.add(1,"d"),i.toDate()):sr(/^([\d]+)([wdhms])/.exec(n.trim()),l()(t))},ur=0,lr=function(t){return void 0===t?"task"+(ur+=1):t},hr=[],fr={},dr=function(t){var e=fr[t];return hr[e]},pr=function(){for(var t=function(t){var e=hr[t],n="";switch(hr[t].raw.startTime.type){case"prevTaskEnd":var r=dr(e.prevTaskId);e.startTime=r.endTime;break;case"getStartDate":(n=or(0,Hn,hr[t].raw.startTime.startData))&&(hr[t].startTime=n)}return hr[t].startTime&&(hr[t].endTime=cr(hr[t].startTime,Hn,hr[t].raw.endTime.data,er),hr[t].endTime&&(hr[t].processed=!0,hr[t].manualEndTime=l()(hr[t].raw.endTime.data,"YYYY-MM-DD",!0).isValid(),ir(hr[t],Hn,qn))),hr[t].processed},e=!0,n=0;nr?i=1:n0&&(e=t.classes.join(" "));for(var n=0,r=0;rn-e?n+a+1.5*_r.leftPadding>u?e+r-5:n+r+5:(n-e)/2+e+r})).attr("y",(function(t,r){return t.order*e+_r.barHeight/2+(_r.fontSize/2-2)+n})).attr("text-height",i).attr("class",(function(t){var e=o(t.startTime),n=o(t.endTime);t.milestone&&(n=e+i);var r=this.getBBox().width,a="";t.classes.length>0&&(a=t.classes.join(" "));var s=0;console.log(_r);for(var l=0;ln-e?n+r+1.5*_r.leftPadding>u?a+" taskTextOutsideLeft taskTextOutside"+s+" "+h:a+" taskTextOutsideRight taskTextOutside"+s+" "+h+" width-"+r:a+" taskText taskText"+s+" "+h+" width-"+r}))}(t,i,u,f,r,0,e),function(t,e){for(var n=[],r=0,i=0;i0&&a.setAttribute("dy","1em"),a.textContent=e[i],r.appendChild(a)}return r})).attr("x",10).attr("y",(function(i,a){if(!(a>0))return i[1]*t/2+e;for(var o=0;o0){var r=t.split("~");n=r[0],e=r[1]}return{className:n,type:e}},Mr=function(t){var e=Sr(t);void 0===Tr[e.className]&&(Tr[e.className]={id:e.className,type:e.type,cssClasses:[],methods:[],members:[],annotations:[],domId:"classid-"+e.className+"-"+Cr},Cr++)},Or=function(t){for(var e=Object.keys(Tr),n=0;n>")?r.annotations.push(i.substring(2,i.length-2)):i.indexOf(")")>0?r.methods.push(i):i&&r.members.push(i)}},Nr=function(t,e){t.split(",").forEach((function(t){var n=t;t[0].match(/\d/)&&(n="classid-"+n),void 0!==Tr[n]&&Tr[n].cssClasses.push(e)}))},Br=function(t,e,n){var r=t,i=Or(r);"loose"===wr.securityLevel&&void 0!==e&&void 0!==Tr[r]&&(n&&(Tr[r].tooltip=_.sanitizeText(n,wr)),Ar.push((function(){var t=document.querySelector('[id="'.concat(i,'"]'));null!==t&&t.addEventListener("click",(function(){U.runFunc(e,i)}),!1)})))},Lr={AGGREGATION:0,EXTENSION:1,COMPOSITION:2,DEPENDENCY:3},Fr=function(t){var e=Object(s.select)(".mermaidTooltip");null===(e._groups||e)[0][0]&&(e=Object(s.select)("body").append("div").attr("class","mermaidTooltip").style("opacity",0)),Object(s.select)(t).select("svg").selectAll("g.node").on("mouseover",(function(){var t=Object(s.select)(this);if(null!==t.attr("title")){var n=this.getBoundingClientRect();e.transition().duration(200).style("opacity",".9"),e.html(t.attr("title")).style("left",window.scrollX+n.left+(n.right-n.left)/2+"px").style("top",window.scrollY+n.top-14+document.body.scrollTop+"px"),t.classed("hover",!0)}})).on("mouseout",(function(){e.transition().duration(500).style("opacity",0),Object(s.select)(this).classed("hover",!1)}))};Ar.push(Fr);var Pr={parseDirective:function(t,e,n){Bo.parseDirective(this,t,e,n)},getConfig:function(){return vt().class},addClass:Mr,bindFunctions:function(t){Ar.forEach((function(e){e(t)}))},clear:function(){Er=[],Tr={},(Ar=[]).push(Fr)},getClass:function(t){return Tr[t]},getClasses:function(){return Tr},addAnnotation:function(t,e){var n=Sr(t).className;Tr[n].annotations.push(e)},getRelations:function(){return Er},addRelation:function(t){f.debug("Adding relation: "+JSON.stringify(t)),Mr(t.id1),Mr(t.id2),t.id1=Sr(t.id1).className,t.id2=Sr(t.id2).className,Er.push(t)},addMember:Dr,addMembers:function(t,e){Array.isArray(e)&&(e.reverse(),e.forEach((function(e){return Dr(t,e)})))},cleanupLabel:function(t){return":"===t.substring(0,1)?t.substr(1).trim():t.trim()},lineType:{LINE:0,DOTTED_LINE:1},relationType:Lr,setClickEvent:function(t,e,n){t.split(",").forEach((function(t){Br(t,e,n)})),Nr(t,"clickable")},setCssClass:Nr,setLink:function(t,e,n){t.split(",").forEach((function(t){var r=t;t[0].match(/\d/)&&(r="classid-"+r),void 0!==Tr[r]&&(Tr[r].link=U.formatUrl(e,wr),n&&(Tr[r].tooltip=_.sanitizeText(n,wr)))})),Nr(t,"clickable")},lookUpDomId:Or},Ir=n(13),jr=n.n(Ir),Rr=0,Yr=function(t){var e=t.match(/(\+|-|~|#)?(\w+)(~\w+~|\[\])?\s+(\w+)/),n=t.match(/^([+|\-|~|#])?(\w+) *\( *(.*)\) *(\*|\$)? *(\w*[~|[\]]*\s*\w*~?)$/);return e&&!n?zr(e):n?Ur(n):$r(t)},zr=function(t){var e="";try{e=(t[1]?t[1].trim():"")+(t[2]?t[2].trim():"")+(t[3]?Hr(t[3].trim()):"")+" "+(t[4]?t[4].trim():"")}catch(n){e=t}return{displayText:e,cssStyle:""}},Ur=function(t){var e="",n="";try{var r=t[1]?t[1].trim():"",i=t[2]?t[2].trim():"",a=t[3]?Hr(t[3].trim()):"",o=t[4]?t[4].trim():"";n=r+i+"("+a+")"+(t[5]?" : "+Hr(t[5]).trim():""),e=Vr(o)}catch(e){n=t}return{displayText:n,cssStyle:e}},$r=function(t){var e="",n="",r="",i=t.indexOf("("),a=t.indexOf(")");if(i>1&&a>i&&a<=t.length){var o="",s="",c=t.substring(0,1);c.match(/\w/)?s=t.substring(0,i).trim():(c.match(/\+|-|~|#/)&&(o=c),s=t.substring(1,i).trim());var u=t.substring(i+1,a),l=t.substring(a+1,1);n=Vr(l),e=o+s+"("+Hr(u.trim())+")",a<"".length&&""!==(r=t.substring(a+2).trim())&&(r=" : "+Hr(r))}else e=Hr(t);return{displayText:e,cssStyle:n}},Wr=function(t,e,n,r){var i=Yr(e),a=t.append("tspan").attr("x",r.padding).text(i.displayText);""!==i.cssStyle&&a.attr("style",i.cssStyle),n||a.attr("dy",r.textHeight)},Hr=function t(e){var n=e;return-1!=e.indexOf("~")?t(n=(n=n.replace("~","<")).replace("~",">")):n},Vr=function(t){switch(t){case"*":return"font-style:italic;";case"$":return"text-decoration:underline;";default:return""}},Gr=function(t,e,n){f.info("Rendering class "+e);var r,i=e.id,a={id:i,label:e.id,width:0,height:0},o=t.append("g").attr("id",Or(i)).attr("class","classGroup");r=e.link?o.append("svg:a").attr("xlink:href",e.link).attr("target","_blank").append("text").attr("y",n.textHeight+n.padding).attr("x",0):o.append("text").attr("y",n.textHeight+n.padding).attr("x",0);var s=!0;e.annotations.forEach((function(t){var e=r.append("tspan").text("«"+t+"»");s||e.attr("dy",n.textHeight),s=!1}));var c=e.id;void 0!==e.type&&""!==e.type&&(c+="<"+e.type+">");var u=r.append("tspan").text(c).attr("class","title");s||u.attr("dy",n.textHeight);var l=r.node().getBBox().height,h=o.append("line").attr("x1",0).attr("y1",n.padding+l+n.dividerMargin/2).attr("y2",n.padding+l+n.dividerMargin/2),d=o.append("text").attr("x",n.padding).attr("y",l+n.dividerMargin+n.textHeight).attr("fill","white").attr("class","classText");s=!0,e.members.forEach((function(t){Wr(d,t,s,n),s=!1}));var p=d.node().getBBox(),y=o.append("line").attr("x1",0).attr("y1",n.padding+l+n.dividerMargin+p.height).attr("y2",n.padding+l+n.dividerMargin+p.height),g=o.append("text").attr("x",n.padding).attr("y",l+2*n.dividerMargin+p.height+n.textHeight).attr("fill","white").attr("class","classText");s=!0,e.methods.forEach((function(t){Wr(g,t,s,n),s=!1}));var v=o.node().getBBox(),m=" ";e.cssClasses.length>0&&(m+=e.cssClasses.join(" "));var b=o.insert("rect",":first-child").attr("x",0).attr("y",0).attr("width",v.width+2*n.padding).attr("height",v.height+n.padding+.5*n.dividerMargin).attr("class",m).node().getBBox().width;return r.node().childNodes.forEach((function(t){t.setAttribute("x",(b-t.getBBox().width)/2)})),e.tooltip&&r.insert("title").text(e.tooltip),h.attr("x2",b),y.attr("x2",b),a.width=b,a.height=v.height+n.padding+.5*n.dividerMargin,a},qr=function(t,e,n,r){var i=function(t){switch(t){case Lr.AGGREGATION:return"aggregation";case Lr.EXTENSION:return"extension";case Lr.COMPOSITION:return"composition";case Lr.DEPENDENCY:return"dependency"}};e.points=e.points.filter((function(t){return!Number.isNaN(t.y)}));var a,o,c=e.points,u=Object(s.line)().x((function(t){return t.x})).y((function(t){return t.y})).curve(s.curveBasis),l=t.append("path").attr("d",u(c)).attr("id","edge"+Rr).attr("class","relation"),h="";r.arrowMarkerAbsolute&&(h=(h=(h=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search).replace(/\(/g,"\\(")).replace(/\)/g,"\\)")),1==n.relation.lineType&&l.attr("class","relation dashed-line"),"none"!==n.relation.type1&&l.attr("marker-start","url("+h+"#"+i(n.relation.type1)+"Start)"),"none"!==n.relation.type2&&l.attr("marker-end","url("+h+"#"+i(n.relation.type2)+"End)");var d,p,y,g,v=e.points.length,m=U.calcLabelPosition(e.points);if(a=m.x,o=m.y,v%2!=0&&v>1){var b=U.calcCardinalityPosition("none"!==n.relation.type1,e.points,e.points[0]),_=U.calcCardinalityPosition("none"!==n.relation.type2,e.points,e.points[v-1]);f.debug("cardinality_1_point "+JSON.stringify(b)),f.debug("cardinality_2_point "+JSON.stringify(_)),d=b.x,p=b.y,y=_.x,g=_.y}if(void 0!==n.title){var x=t.append("g").attr("class","classLabel"),k=x.append("text").attr("class","label").attr("x",a).attr("y",o).attr("fill","red").attr("text-anchor","middle").text(n.title);window.label=k;var w=k.node().getBBox();x.insert("rect",":first-child").attr("class","box").attr("x",w.x-r.padding/2).attr("y",w.y-r.padding/2).attr("width",w.width+r.padding).attr("height",w.height+r.padding)}(f.info("Rendering relation "+JSON.stringify(n)),void 0!==n.relationTitle1&&"none"!==n.relationTitle1)&&t.append("g").attr("class","cardinality").append("text").attr("class","type1").attr("x",d).attr("y",p).attr("fill","black").attr("font-size","6").text(n.relationTitle1);void 0!==n.relationTitle2&&"none"!==n.relationTitle2&&t.append("g").attr("class","cardinality").append("text").attr("class","type2").attr("x",y).attr("y",g).attr("fill","black").attr("font-size","6").text(n.relationTitle2);Rr++};Ir.parser.yy=Pr;var Xr={},Zr={dividerMargin:10,padding:5,textHeight:10},Jr=function(t){for(var e=Object.keys(Xr),n=0;n "+t.w+": "+JSON.stringify(i.edge(t))),qr(r,i.edge(t),i.edge(t).relation,Zr))}));var h=r.node().getBBox(),d=h.width+40,p=h.height+40;Zr.useMaxWidth?(r.attr("width","100%"),r.attr("style","max-width: ".concat(d,"px;"))):(r.attr("height",p),r.attr("width",d));var y="".concat(h.x-20," ").concat(h.y-20," ").concat(d," ").concat(p);f.debug("viewBox ".concat(y)),r.attr("viewBox",y)};Ir.parser.yy=Pr;var ti={dividerMargin:10,padding:5,textHeight:10},ei=function(t){Object.keys(t).forEach((function(e){ti[e]=t[e]}))},ni=function(t,e){f.info("Drawing class"),Pr.clear(),Ir.parser.parse(t);var n=vt().flowchart;f.info("config:",n);var r=n.nodeSpacing||50,i=n.rankSpacing||50,a=new W.a.Graph({multigraph:!0,compound:!0}).setGraph({rankdir:"TD",nodesep:r,ranksep:i,marginx:8,marginy:8}).setDefaultEdgeLabel((function(){return{}})),o=Pr.getClasses(),c=Pr.getRelations();f.info(c),function(t,e){var n=Object.keys(t);f.info("keys:",n),f.info(t),n.forEach((function(n){var r=t[n],i={labelStyle:""},a=void 0!==r.text?r.text:r.id,o="";switch(r.type){case"class":o="class_box";break;default:o="class_box"}e.setNode(r.id,{labelStyle:i.labelStyle,shape:o,labelText:a,classData:r,rx:0,ry:0,class:"default",style:i.style,id:r.id,width:"group"===r.type?500:void 0,type:r.type,padding:vt().flowchart.padding}),f.info("setNode",{labelStyle:i.labelStyle,shape:o,labelText:a,rx:0,ry:0,class:"default",style:i.style,id:r.id,width:"group"===r.type?500:void 0,type:r.type,padding:vt().flowchart.padding})}))}(o,a),function(t,e){var n=0;t.forEach((function(r){n++;var i={classes:"relation"};i.pattern=1==r.relation.lineType?"dashed":"solid",i.id="id"+n,"arrow_open"===r.type?i.arrowhead="none":i.arrowhead="normal",f.info(i,r),i.arrowTypeStart=ri(r.relation.type1),i.arrowTypeEnd=ri(r.relation.type2);var a="",o="";if(void 0!==r.style){var c=N(r.style);a=c.style,o=c.labelStyle}else a="fill:none";i.style=a,i.labelStyle=o,void 0!==r.interpolate?i.curve=O(r.interpolate,s.curveLinear):void 0!==t.defaultInterpolate?i.curve=O(t.defaultInterpolate,s.curveLinear):i.curve=O(ti.curve,s.curveLinear),r.text=r.title,void 0===r.text?void 0!==r.style&&(i.arrowheadStyle="fill: #333"):(i.arrowheadStyle="fill: #333",i.labelpos="c",vt().flowchart.htmlLabels,i.labelType="text",i.label=r.text.replace(_.lineBreakRegex,"\n"),void 0===r.style&&(i.style=i.style||"stroke: #333; stroke-width: 1.5px;fill:none"),i.labelStyle=i.labelStyle.replace("color:","fill:")),e.setEdge(r.id1,r.id2,i,n)}))}(c,a);var u=Object(s.select)('[id="'.concat(e,'"]')),l=Object(s.select)("#"+e+" g");Ge(l,a,["aggregation","extension","composition","dependency"],"classDiagram",e);var h=u.node().getBBox(),d=h.width+16,p=h.height+16;if(f.debug("new ViewBox 0 0 ".concat(d," ").concat(p),"translate(".concat(8-a._label.marginx,", ").concat(8-a._label.marginy,")")),n.useMaxWidth?(u.attr("width","100%"),u.attr("style","max-width: ".concat(d,"px;"))):(u.attr("height",p),u.attr("width",d)),u.attr("viewBox","0 0 ".concat(d," ").concat(p)),u.select("g").attr("transform","translate(".concat(8-a._label.marginx,", ").concat(8-h.y,")")),!n.htmlLabels)for(var y=document.querySelectorAll('[id="'+e+'"] .edgeLabel .label'),g=0;g0&&o.length>0){var c={stmt:"state",id:L(),type:"divider",doc:oi(o)};i.push(oi(c)),n.doc=i}n.doc.forEach((function(e){return t(n,e,!0)}))}}({id:"root"},{id:"root",doc:si},!0),{id:"root",doc:si}},extract:function(t){var e;e=t.doc?t.doc:t,f.info(e),fi(),f.info("Extract",e),e.forEach((function(t){"state"===t.stmt&&hi(t.id,t.type,t.doc,t.description,t.note),"relation"===t.stmt&&di(t.state1.id,t.state2.id,t.description)}))},trimColon:function(t){return t&&":"===t[0]?t.substr(1).trim():t.trim()}},mi=n(22),bi=n.n(mi),_i={},xi=function(t,e){_i[t]=e},ki=function(t,e){var n=t.append("text").attr("x",2*vt().state.padding).attr("y",vt().state.textHeight+1.3*vt().state.padding).attr("font-size",vt().state.fontSize).attr("class","state-title").text(e.descriptions[0]).node().getBBox(),r=n.height,i=t.append("text").attr("x",vt().state.padding).attr("y",r+.4*vt().state.padding+vt().state.dividerMargin+vt().state.textHeight).attr("class","state-description"),a=!0,o=!0;e.descriptions.forEach((function(t){a||(!function(t,e,n){var r=t.append("tspan").attr("x",2*vt().state.padding).text(e);n||r.attr("dy",vt().state.textHeight)}(i,t,o),o=!1),a=!1}));var s=t.append("line").attr("x1",vt().state.padding).attr("y1",vt().state.padding+r+vt().state.dividerMargin/2).attr("y2",vt().state.padding+r+vt().state.dividerMargin/2).attr("class","descr-divider"),c=i.node().getBBox(),u=Math.max(c.width,n.width);return s.attr("x2",u+3*vt().state.padding),t.insert("rect",":first-child").attr("x",vt().state.padding).attr("y",vt().state.padding).attr("width",u+2*vt().state.padding).attr("height",c.height+r+2*vt().state.padding).attr("rx",vt().state.radius),t},wi=function(t,e,n){var r,i=vt().state.padding,a=2*vt().state.padding,o=t.node().getBBox(),s=o.width,c=o.x,u=t.append("text").attr("x",0).attr("y",vt().state.titleShift).attr("font-size",vt().state.fontSize).attr("class","state-title").text(e.id),l=u.node().getBBox().width+a,h=Math.max(l,s);h===s&&(h+=a);var f=t.node().getBBox();e.doc,r=c-i,l>s&&(r=(s-h)/2+i),Math.abs(c-f.x)s&&(r=c-(l-s)/2);var d=1-vt().state.textHeight;return t.insert("rect",":first-child").attr("x",r).attr("y",d).attr("class",n?"alt-composit":"composit").attr("width",h).attr("height",f.height+vt().state.textHeight+vt().state.titleShift+1).attr("rx","0"),u.attr("x",r+i),l<=s&&u.attr("x",c+(h-a)/2-l/2+i),t.insert("rect",":first-child").attr("x",r).attr("y",vt().state.titleShift-vt().state.textHeight-vt().state.padding).attr("width",h).attr("height",3*vt().state.textHeight).attr("rx",vt().state.radius),t.insert("rect",":first-child").attr("x",r).attr("y",vt().state.titleShift-vt().state.textHeight-vt().state.padding).attr("width",h).attr("height",f.height+3+2*vt().state.textHeight).attr("rx",vt().state.radius),t},Ei=function(t,e){e.attr("class","state-note");var n=e.append("rect").attr("x",0).attr("y",vt().state.padding),r=function(t,e,n,r){var i=0,a=r.append("text");a.style("text-anchor","start"),a.attr("class","noteText");var o=t.replace(/\r\n/g,"
    "),s=(o=o.replace(/\n/g,"
    ")).split(_.lineBreakRegex),c=1.25*vt().state.noteMargin,u=!0,l=!1,h=void 0;try{for(var f,d=s[Symbol.iterator]();!(u=(f=d.next()).done);u=!0){var p=f.value.trim();if(p.length>0){var y=a.append("tspan");if(y.text(p),0===c)c+=y.node().getBBox().height;i+=c,y.attr("x",e+vt().state.noteMargin),y.attr("y",n+i+1.25*vt().state.noteMargin)}}}catch(t){l=!0,h=t}finally{try{u||null==d.return||d.return()}finally{if(l)throw h}}return{textWidth:a.node().getBBox().width,textHeight:i}}(t,0,0,e.append("g")),i=r.textWidth,a=r.textHeight;return n.attr("height",a+2*vt().state.noteMargin),n.attr("width",i+2*vt().state.noteMargin),n},Ti=function(t,e){var n=e.id,r={id:n,label:e.id,width:0,height:0},i=t.append("g").attr("id",n).attr("class","stateGroup");"start"===e.type&&function(t){t.append("circle").attr("class","start-state").attr("r",vt().state.sizeUnit).attr("cx",vt().state.padding+vt().state.sizeUnit).attr("cy",vt().state.padding+vt().state.sizeUnit)}(i),"end"===e.type&&function(t){t.append("circle").attr("class","end-state-outer").attr("r",vt().state.sizeUnit+vt().state.miniPadding).attr("cx",vt().state.padding+vt().state.sizeUnit+vt().state.miniPadding).attr("cy",vt().state.padding+vt().state.sizeUnit+vt().state.miniPadding),t.append("circle").attr("class","end-state-inner").attr("r",vt().state.sizeUnit).attr("cx",vt().state.padding+vt().state.sizeUnit+2).attr("cy",vt().state.padding+vt().state.sizeUnit+2)}(i),"fork"!==e.type&&"join"!==e.type||function(t,e){var n=vt().state.forkWidth,r=vt().state.forkHeight;if(e.parentId){var i=n;n=r,r=i}t.append("rect").style("stroke","black").style("fill","black").attr("width",n).attr("height",r).attr("x",vt().state.padding).attr("y",vt().state.padding)}(i,e),"note"===e.type&&Ei(e.note.text,i),"divider"===e.type&&function(t){t.append("line").style("stroke","grey").style("stroke-dasharray","3").attr("x1",vt().state.textHeight).attr("class","divider").attr("x2",2*vt().state.textHeight).attr("y1",0).attr("y2",0)}(i),"default"===e.type&&0===e.descriptions.length&&function(t,e){var n=t.append("text").attr("x",2*vt().state.padding).attr("y",vt().state.textHeight+2*vt().state.padding).attr("font-size",vt().state.fontSize).attr("class","state-title").text(e.id),r=n.node().getBBox();t.insert("rect",":first-child").attr("x",vt().state.padding).attr("y",vt().state.padding).attr("width",r.width+2*vt().state.padding).attr("height",r.height+2*vt().state.padding).attr("rx",vt().state.radius)}(i,e),"default"===e.type&&e.descriptions.length>0&&ki(i,e);var a=i.node().getBBox();return r.width=a.width+2*vt().state.padding,r.height=a.height+2*vt().state.padding,xi(n,r),r},Ci=0;mi.parser.yy=vi;var Ai={},Si=function t(e,n,r,i){var a,o=new W.a.Graph({compound:!0,multigraph:!0}),c=!0;for(a=0;a "+t.w+": "+JSON.stringify(o.edge(t))),function(t,e,n){e.points=e.points.filter((function(t){return!Number.isNaN(t.y)}));var r=e.points,i=Object(s.line)().x((function(t){return t.x})).y((function(t){return t.y})).curve(s.curveBasis),a=t.append("path").attr("d",i(r)).attr("id","edge"+Ci).attr("class","transition"),o="";if(vt().state.arrowMarkerAbsolute&&(o=(o=(o=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search).replace(/\(/g,"\\(")).replace(/\)/g,"\\)")),a.attr("marker-end","url("+o+"#"+function(t){switch(t){case vi.relationType.AGGREGATION:return"aggregation";case vi.relationType.EXTENSION:return"extension";case vi.relationType.COMPOSITION:return"composition";case vi.relationType.DEPENDENCY:return"dependency"}}(vi.relationType.DEPENDENCY)+"End)"),void 0!==n.title){for(var c=t.append("g").attr("class","stateLabel"),u=U.calcLabelPosition(e.points),l=u.x,h=u.y,d=_.getRows(n.title),p=0,y=[],g=0,v=0,m=0;m<=d.length;m++){var b=c.append("text").attr("text-anchor","middle").text(d[m]).attr("x",l).attr("y",h+p),x=b.node().getBBox();if(g=Math.max(g,x.width),v=Math.min(v,x.x),f.info(x.x,l,h+p),0===p){var k=b.node().getBBox();p=k.height,f.info("Title height",p,h)}y.push(b)}var w=p*d.length;if(d.length>1){var E=(d.length-1)*p*.5;y.forEach((function(t,e){return t.attr("y",h+e*p-E)})),w=p*d.length}var T=c.node().getBBox();c.insert("rect",":first-child").attr("class","box").attr("x",l-g/2-vt().state.padding/2).attr("y",h-w/2-vt().state.padding/2-3.5).attr("width",g+vt().state.padding).attr("height",w+vt().state.padding),f.info(T)}Ci++}(n,o.edge(t),o.edge(t).relation))})),w=k.getBBox();var E={id:r||"root",label:r||"root",width:0,height:0};return E.width=w.width+2*ai.padding,E.height=w.height+2*ai.padding,f.debug("Doc rendered",E,o),E},Mi=function(){},Oi=function(t,e){ai=vt().state,mi.parser.yy.clear(),mi.parser.parse(t),f.debug("Rendering diagram "+t);var n=Object(s.select)("[id='".concat(e,"']"));n.append("defs").append("marker").attr("id","dependencyEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z"),new W.a.Graph({multigraph:!0,compound:!0,rankdir:"RL"}).setDefaultEdgeLabel((function(){return{}}));var r=vi.getRootDoc();Si(r,n,void 0,!1);var i=ai.padding,a=n.node().getBBox(),o=a.width+2*i,c=a.height+2*i;ai.useMaxWidth?(n.attr("width","100%"),n.attr("style","max-width: ".concat(1.75*o,"px;"))):n.attr("width",1.75*o),n.attr("viewBox","".concat(a.x-ai.padding," ").concat(a.y-ai.padding," ")+o+" "+c)},Di={},Ni={},Bi=function(t,e,n,r){if("root"!==n.id){var i="rect";!0===n.start&&(i="start"),!1===n.start&&(i="end"),"default"!==n.type&&(i=n.type),Ni[n.id]||(Ni[n.id]={id:n.id,shape:i,description:n.id,classes:"statediagram-state"}),n.description&&(Array.isArray(Ni[n.id].description)?(Ni[n.id].shape="rectWithTitle",Ni[n.id].description.push(n.description)):Ni[n.id].description.length>0?(Ni[n.id].shape="rectWithTitle",Ni[n.id].description===n.id?Ni[n.id].description=[n.description]:Ni[n.id].description=[Ni[n.id].description,n.description]):(Ni[n.id].shape="rect",Ni[n.id].description=n.description)),!Ni[n.id].type&&n.doc&&(f.info("Setting cluser for ",n.id),Ni[n.id].type="group",Ni[n.id].shape="divider"===n.type?"divider":"roundedWithTitle",Ni[n.id].classes=Ni[n.id].classes+" "+(r?"statediagram-cluster statediagram-cluster-alt":"statediagram-cluster"));var a={labelStyle:"",shape:Ni[n.id].shape,labelText:Ni[n.id].description,classes:Ni[n.id].classes,style:"",id:n.id,type:Ni[n.id].type,padding:15};if(n.note){var o={labelStyle:"",shape:"note",labelText:n.note.text,classes:"statediagram-note",style:"",id:n.id+"----note",type:Ni[n.id].type,padding:15},s={labelStyle:"",shape:"noteGroup",labelText:n.note.text,classes:Ni[n.id].classes,style:"",id:n.id+"----parent",type:"group",padding:0};t.setNode(n.id+"----parent",s),t.setNode(o.id,o),t.setNode(n.id,a),t.setParent(n.id,n.id+"----parent"),t.setParent(o.id,n.id+"----parent");var c=n.id,u=o.id;"left of"===n.note.position&&(c=o.id,u=n.id),t.setEdge(c,u,{arrowhead:"none",arrowType:"",style:"fill:none",labelStyle:"",classes:"transition note-edge",arrowheadStyle:"fill: #333",labelpos:"c",labelType:"text",thickness:"normal"})}else t.setNode(n.id,a)}e&&"root"!==e.id&&(f.info("Setting node ",n.id," to be child of its parent ",e.id),t.setParent(n.id,e.id)),n.doc&&(f.info("Adding nodes children "),Fi(t,n,n.doc,!r))},Li=0,Fi=function(t,e,n,r){f.trace("items",n),n.forEach((function(n){if("state"===n.stmt||"default"===n.stmt)Bi(t,e,n,r);else if("relation"===n.stmt){Bi(t,e,n.state1,r),Bi(t,e,n.state2,r);var i={id:"edge"+Li,arrowhead:"normal",arrowTypeEnd:"arrow_barb",style:"fill:none",labelStyle:"",label:n.description,arrowheadStyle:"fill: #333",labelpos:"c",labelType:"text",thickness:"normal",classes:"transition"},a=n.state1.id,o=n.state2.id;t.setEdge(a,o,i,Li),Li++}}))},Pi=function(t){for(var e=Object.keys(t),n=0;ne.seq?t:e}),t[0]),n="";t.forEach((function(t){n+=t===e?"\t*":"\t|"}));var r,i,a,o=[n,e.id,e.seq];for(var s in Yi)Yi[s]===e.id&&o.push(s);if(f.debug(o.join(" ")),Array.isArray(e.parent)){var c=ji[e.parent[0]];Gi(t,e,c),t.push(ji[e.parent[1]])}else{if(null==e.parent)return;var u=ji[e.parent];Gi(t,e,u)}r=t,i=function(t){return t.id},a=Object.create(null),qi(t=r.reduce((function(t,e){var n=i(e);return a[n]||(a[n]=!0,t.push(e)),t}),[]))}var Xi,Zi=function(){var t=Object.keys(ji).map((function(t){return ji[t]}));return t.forEach((function(t){f.debug(t.id)})),t.sort((function(t,e){return e.seq-t.seq})),t},Ji={setDirection:function(t){Ui=t},setOptions:function(t){f.debug("options str",t),t=(t=t&&t.trim())||"{}";try{Vi=JSON.parse(t)}catch(t){f.error("error while parsing gitGraph options",t.message)}},getOptions:function(){return Vi},commit:function(t){var e={id:Wi(),message:t,seq:$i++,parent:null==Ri?null:Ri.id};Ri=e,ji[e.id]=e,Yi[zi]=e.id,f.debug("in pushCommit "+e.id)},branch:function(t){Yi[t]=null!=Ri?Ri.id:null,f.debug("in createBranch")},merge:function(t){var e=ji[Yi[zi]],n=ji[Yi[t]];if(function(t,e){return t.seq>e.seq&&Hi(e,t)}(e,n))f.debug("Already merged");else{if(Hi(e,n))Yi[zi]=Yi[t],Ri=ji[Yi[zi]];else{var r={id:Wi(),message:"merged branch "+t+" into "+zi,seq:$i++,parent:[null==Ri?null:Ri.id,Yi[t]]};Ri=r,ji[r.id]=r,Yi[zi]=r.id}f.debug(Yi),f.debug("in mergeBranch")}},checkout:function(t){f.debug("in checkout");var e=Yi[zi=t];Ri=ji[e]},reset:function(t){f.debug("in reset",t);var e=t.split(":")[0],n=parseInt(t.split(":")[1]),r="HEAD"===e?Ri:ji[Yi[e]];for(f.debug(r,n);n>0;)if(n--,!(r=ji[r.parent])){var i="Critical error - unique parent commit not found during reset";throw f.error(i),i}Ri=r,Yi[zi]=r.id},prettyPrint:function(){f.debug(ji),qi([Zi()[0]])},clear:function(){ji={},Yi={master:Ri=null},zi="master",$i=0},getBranchesAsObjArray:function(){var t=[];for(var e in Yi)t.push({name:e,commit:ji[Yi[e]]});return t},getBranches:function(){return Yi},getCommits:function(){return ji},getCommitsArray:Zi,getCurrentBranch:function(){return zi},getDirection:function(){return Ui},getHead:function(){return Ri}},Qi=n(71),Ki=n.n(Qi),ta={},ea={nodeSpacing:150,nodeFillColor:"yellow",nodeStrokeWidth:2,nodeStrokeColor:"grey",lineStrokeWidth:4,branchOffset:50,lineColor:"grey",leftMargin:50,branchColors:["#442f74","#983351","#609732","#AA9A39"],nodeRadius:10,nodeLabel:{width:75,height:100,x:-25,y:0}},na={};function ra(t,e,n,r){var i=O(r,s.curveBasis),a=ea.branchColors[n%ea.branchColors.length],o=Object(s.line)().x((function(t){return Math.round(t.x)})).y((function(t){return Math.round(t.y)})).curve(i);t.append("svg:path").attr("d",o(e)).style("stroke",a).style("stroke-width",ea.lineStrokeWidth).style("fill","none")}function ia(t,e){e=e||t.node().getBBox();var n=t.node().getCTM();return{left:n.e+e.x*n.a,top:n.f+e.y*n.d,width:e.width,height:e.height}}function aa(t,e,n,r,i){f.debug("svgDrawLineForCommits: ",e,n);var a=ia(t.select("#node-"+e+" circle")),o=ia(t.select("#node-"+n+" circle"));switch(r){case"LR":if(a.left-o.left>ea.nodeSpacing){var s={x:a.left-ea.nodeSpacing,y:o.top+o.height/2};ra(t,[s,{x:o.left+o.width,y:o.top+o.height/2}],i,"linear"),ra(t,[{x:a.left,y:a.top+a.height/2},{x:a.left-ea.nodeSpacing/2,y:a.top+a.height/2},{x:a.left-ea.nodeSpacing/2,y:s.y},s],i)}else ra(t,[{x:a.left,y:a.top+a.height/2},{x:a.left-ea.nodeSpacing/2,y:a.top+a.height/2},{x:a.left-ea.nodeSpacing/2,y:o.top+o.height/2},{x:o.left+o.width,y:o.top+o.height/2}],i);break;case"BT":if(o.top-a.top>ea.nodeSpacing){var c={x:o.left+o.width/2,y:a.top+a.height+ea.nodeSpacing};ra(t,[c,{x:o.left+o.width/2,y:o.top}],i,"linear"),ra(t,[{x:a.left+a.width/2,y:a.top+a.height},{x:a.left+a.width/2,y:a.top+a.height+ea.nodeSpacing/2},{x:o.left+o.width/2,y:c.y-ea.nodeSpacing/2},c],i)}else ra(t,[{x:a.left+a.width/2,y:a.top+a.height},{x:a.left+a.width/2,y:a.top+ea.nodeSpacing/2},{x:o.left+o.width/2,y:o.top-ea.nodeSpacing/2},{x:o.left+o.width/2,y:o.top}],i)}}function oa(t,e){return t.select(e).node().cloneNode(!0)}function sa(t,e,n,r){var i,a=Object.keys(ta).length;if("string"==typeof e)do{if(i=ta[e],f.debug("in renderCommitHistory",i.id,i.seq),t.select("#node-"+e).size()>0)return;t.append((function(){return oa(t,"#def-commit")})).attr("class","commit").attr("id",(function(){return"node-"+i.id})).attr("transform",(function(){switch(r){case"LR":return"translate("+(i.seq*ea.nodeSpacing+ea.leftMargin)+", "+Xi*ea.branchOffset+")";case"BT":return"translate("+(Xi*ea.branchOffset+ea.leftMargin)+", "+(a-i.seq)*ea.nodeSpacing+")"}})).attr("fill",ea.nodeFillColor).attr("stroke",ea.nodeStrokeColor).attr("stroke-width",ea.nodeStrokeWidth);var o=void 0;for(var s in n)if(n[s].commit===i){o=n[s];break}o&&(f.debug("found branch ",o.name),t.select("#node-"+i.id+" p").append("xhtml:span").attr("class","branch-label").text(o.name+", ")),t.select("#node-"+i.id+" p").append("xhtml:span").attr("class","commit-id").text(i.id),""!==i.message&&"BT"===r&&t.select("#node-"+i.id+" p").append("xhtml:span").attr("class","commit-msg").text(", "+i.message),e=i.parent}while(e&&ta[e]);Array.isArray(e)&&(f.debug("found merge commmit",e),sa(t,e[0],n,r),Xi++,sa(t,e[1],n,r),Xi--)}function ca(t,e,n,r){for(r=r||0;e.seq>0&&!e.lineDrawn;)"string"==typeof e.parent?(aa(t,e.id,e.parent,n,r),e.lineDrawn=!0,e=ta[e.parent]):Array.isArray(e.parent)&&(aa(t,e.id,e.parent[0],n,r),aa(t,e.id,e.parent[1],n,r+1),ca(t,ta[e.parent[1]],n,r+1),e.lineDrawn=!0,e=ta[e.parent[0]])}var ua,la=function(t){na=t},ha=function(t,e,n){try{var r=Ki.a.parser;r.yy=Ji,r.yy.clear(),f.debug("in gitgraph renderer",t+"\n","id:",e,n),r.parse(t+"\n"),ea=Object.assign(ea,na,Ji.getOptions()),f.debug("effective options",ea);var i=Ji.getDirection();ta=Ji.getCommits();var a=Ji.getBranchesAsObjArray();"BT"===i&&(ea.nodeLabel.x=a.length*ea.branchOffset,ea.nodeLabel.width="100%",ea.nodeLabel.y=-2*ea.nodeRadius);var o=Object(s.select)('[id="'.concat(e,'"]'));for(var c in function(t){t.append("defs").append("g").attr("id","def-commit").append("circle").attr("r",ea.nodeRadius).attr("cx",0).attr("cy",0),t.select("#def-commit").append("foreignObject").attr("width",ea.nodeLabel.width).attr("height",ea.nodeLabel.height).attr("x",ea.nodeLabel.x).attr("y",ea.nodeLabel.y).attr("class","node-label").attr("requiredFeatures","http://www.w3.org/TR/SVG11/feature#Extensibility").append("p").html("")}(o),Xi=1,a){var u=a[c];sa(o,u.commit.id,a,i),ca(o,u.commit,i),Xi++}o.attr("height",(function(){return"BT"===i?Object.keys(ta).length*ea.nodeSpacing:(a.length+1)*ea.branchOffset}))}catch(t){f.error("Error while rendering gitgraph"),f.error(t.message)}},fa="",da=!1,pa={setMessage:function(t){f.debug("Setting message to: "+t),fa=t},getMessage:function(){return fa},setInfo:function(t){da=t},getInfo:function(){return da}},ya=n(72),ga=n.n(ya),va={},ma=function(t){Object.keys(t).forEach((function(e){va[e]=t[e]}))},ba=function(t,e,n){try{var r=ga.a.parser;r.yy=pa,f.debug("Renering info diagram\n"+t),r.parse(t),f.debug("Parsed info diagram");var i=Object(s.select)("#"+e);i.append("g").append("text").attr("x",100).attr("y",40).attr("class","version").attr("font-size","32px").style("text-anchor","middle").text("v "+n),i.attr("height",100),i.attr("width",400)}catch(t){f.error("Error while rendering info diagram"),f.error(t.message)}},_a={},xa=function(t){Object.keys(t).forEach((function(e){_a[e]=t[e]}))},ka=function(t,e){try{f.debug("Renering svg for syntax error\n");var n=Object(s.select)("#"+t),r=n.append("g");r.append("path").attr("class","error-icon").attr("d","m411.313,123.313c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32-9.375,9.375-20.688-20.688c-12.484-12.5-32.766-12.5-45.25,0l-16,16c-1.261,1.261-2.304,2.648-3.31,4.051-21.739-8.561-45.324-13.426-70.065-13.426-105.867,0-192,86.133-192,192s86.133,192 192,192 192-86.133 192-192c0-24.741-4.864-48.327-13.426-70.065 1.402-1.007 2.79-2.049 4.051-3.31l16-16c12.5-12.492 12.5-32.758 0-45.25l-20.688-20.688 9.375-9.375 32.001-31.999zm-219.313,100.687c-52.938,0-96,43.063-96,96 0,8.836-7.164,16-16,16s-16-7.164-16-16c0-70.578 57.422-128 128-128 8.836,0 16,7.164 16,16s-7.164,16-16,16z"),r.append("path").attr("class","error-icon").attr("d","m459.02,148.98c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l16,16c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16.001-16z"),r.append("path").attr("class","error-icon").attr("d","m340.395,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16-16c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l15.999,16z"),r.append("path").attr("class","error-icon").attr("d","m400,64c8.844,0 16-7.164 16-16v-32c0-8.836-7.156-16-16-16-8.844,0-16,7.164-16,16v32c0,8.836 7.156,16 16,16z"),r.append("path").attr("class","error-icon").attr("d","m496,96.586h-32c-8.844,0-16,7.164-16,16 0,8.836 7.156,16 16,16h32c8.844,0 16-7.164 16-16 0-8.836-7.156-16-16-16z"),r.append("path").attr("class","error-icon").attr("d","m436.98,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688l32-32c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32c-6.251,6.25-6.251,16.375-0.001,22.625z"),r.append("text").attr("class","error-text").attr("x",1240).attr("y",250).attr("font-size","150px").style("text-anchor","middle").text("Syntax error in graph"),r.append("text").attr("class","error-text").attr("x",1050).attr("y",400).attr("font-size","100px").style("text-anchor","middle").text("mermaid version "+e),n.attr("height",100),n.attr("width",400),n.attr("viewBox","768 0 512 512")}catch(t){f.error("Error while rendering info diagram"),f.error(t.message)}},wa={},Ea="",Ta={parseDirective:function(t,e,n){Bo.parseDirective(this,t,e,n)},getConfig:function(){return vt().pie},addSection:function(t,e){void 0===wa[t]&&(wa[t]=e,f.debug("Added new section :",t))},getSections:function(){return wa},cleanupValue:function(t){return":"===t.substring(0,1)?(t=t.substring(1).trim(),Number(t.trim())):Number(t.trim())},clear:function(){wa={},Ea=""},setTitle:function(t){Ea=t},getTitle:function(){return Ea}},Ca=n(73),Aa=n.n(Ca),Sa={},Ma=function(t){Object.keys(t).forEach((function(e){Sa[e]=t[e]}))},Oa=function(t,e){try{var n=Aa.a.parser;n.yy=Ta,f.debug("Rendering info diagram\n"+t),n.yy.clear(),n.parse(t),f.debug("Parsed info diagram");var r=document.getElementById(e);void 0===(ua=r.parentElement.offsetWidth)&&(ua=1200),void 0!==Sa.useWidth&&(ua=Sa.useWidth);r.setAttribute("height","100%"),r.setAttribute("viewBox","0 0 "+ua+" 450");var i=ua,a=Math.min(i,450)/2-40,o=Object(s.select)("#"+e).append("svg").attr("width",i).attr("height",450).append("g").attr("transform","translate("+i/2+",225)"),c=Ta.getSections(),u=0;Object.keys(c).forEach((function(t){u+=c[t]})),f.info(c);var l=Object(s.scaleOrdinal)().domain(c).range(s.schemeSet2),h=Object(s.pie)().value((function(t){return t.value}))(Object(s.entries)(c)),d=Object(s.arc)().innerRadius(0).outerRadius(a);o.selectAll("mySlices").data(h).enter().append("path").attr("d",d).attr("fill",(function(t){return l(t.data.key)})).attr("stroke","black").style("stroke-width","2px").style("opacity",.7),o.selectAll("mySlices").data(h).enter().append("text").text((function(t){return(t.data.value/u*100).toFixed(0)+"%"})).attr("transform",(function(t){return"translate("+d.centroid(t)+")"})).style("text-anchor","middle").attr("class","slice").style("font-size",17),o.append("text").text(n.yy.getTitle()).attr("x",0).attr("y",-200).attr("class","pieTitleText");var p=o.selectAll(".legend").data(l.domain()).enter().append("g").attr("class","legend").attr("transform",(function(t,e){return"translate(216,"+(22*e-22*l.domain().length/2)+")"}));p.append("rect").attr("width",18).attr("height",18).style("fill",l).style("stroke",l),p.append("text").attr("x",22).attr("y",14).text((function(t){return t}))}catch(t){f.error("Error while rendering info diagram"),f.error(t)}},Da={},Na=[],Ba="",La={Cardinality:{ZERO_OR_ONE:"ZERO_OR_ONE",ZERO_OR_MORE:"ZERO_OR_MORE",ONE_OR_MORE:"ONE_OR_MORE",ONLY_ONE:"ONLY_ONE"},Identification:{NON_IDENTIFYING:"NON_IDENTIFYING",IDENTIFYING:"IDENTIFYING"},parseDirective:function(t,e,n){Bo.parseDirective(this,t,e,n)},getConfig:function(){return vt().er},addEntity:function(t){void 0===Da[t]&&(Da[t]=t,f.debug("Added new entity :",t))},getEntities:function(){return Da},addRelationship:function(t,e,n,r){var i={entityA:t,roleA:e,entityB:n,relSpec:r};Na.push(i),f.debug("Added new relationship :",i)},getRelationships:function(){return Na},clear:function(){Da={},Na=[],Ba=""},setTitle:function(t){Ba=t},getTitle:function(){return Ba}},Fa=n(74),Pa=n.n(Fa),Ia={ONLY_ONE_START:"ONLY_ONE_START",ONLY_ONE_END:"ONLY_ONE_END",ZERO_OR_ONE_START:"ZERO_OR_ONE_START",ZERO_OR_ONE_END:"ZERO_OR_ONE_END",ONE_OR_MORE_START:"ONE_OR_MORE_START",ONE_OR_MORE_END:"ONE_OR_MORE_END",ZERO_OR_MORE_START:"ZERO_OR_MORE_START",ZERO_OR_MORE_END:"ZERO_OR_MORE_END"},ja=Ia,Ra=function(t,e){var n;t.append("defs").append("marker").attr("id",Ia.ONLY_ONE_START).attr("refX",0).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M9,0 L9,18 M15,0 L15,18"),t.append("defs").append("marker").attr("id",Ia.ONLY_ONE_END).attr("refX",18).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M3,0 L3,18 M9,0 L9,18"),(n=t.append("defs").append("marker").attr("id",Ia.ZERO_OR_ONE_START).attr("refX",0).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto")).append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",21).attr("cy",9).attr("r",6),n.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M9,0 L9,18"),(n=t.append("defs").append("marker").attr("id",Ia.ZERO_OR_ONE_END).attr("refX",30).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto")).append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",9).attr("cy",9).attr("r",6),n.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M21,0 L21,18"),t.append("defs").append("marker").attr("id",Ia.ONE_OR_MORE_START).attr("refX",18).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("orient","auto").append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M0,18 Q 18,0 36,18 Q 18,36 0,18 M42,9 L42,27"),t.append("defs").append("marker").attr("id",Ia.ONE_OR_MORE_END).attr("refX",27).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("orient","auto").append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M3,9 L3,27 M9,18 Q27,0 45,18 Q27,36 9,18"),(n=t.append("defs").append("marker").attr("id",Ia.ZERO_OR_MORE_START).attr("refX",18).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto")).append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",48).attr("cy",18).attr("r",6),n.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M0,18 Q18,0 36,18 Q18,36 0,18"),(n=t.append("defs").append("marker").attr("id",Ia.ZERO_OR_MORE_END).attr("refX",39).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto")).append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",9).attr("cy",18).attr("r",6),n.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M21,18 Q39,0 57,18 Q39,36 21,18")},Ya={},za=function(t){return(t.entityA+t.roleA+t.entityB).replace(/\s/g,"")},Ua=0,$a=function(t){for(var e=Object.keys(t),n=0;n/gi," "),r=t.append("text");r.attr("x",e.x),r.attr("y",e.y),r.attr("class","legend"),r.style("text-anchor",e.anchor),void 0!==e.class&&r.attr("class",e.class);var i=r.append("tspan");return i.attr("x",e.x+2*e.textMargin),i.text(n),r},io=-1,ao=function(){return{x:0,y:0,width:100,anchor:"start",height:100,rx:0,ry:0}},oo=function(){function t(t,e,n,i,a,o,s,c){r(e.append("text").attr("x",n+a/2).attr("y",i+o/2+5).style("font-color",c).style("text-anchor","middle").text(t),s)}function e(t,e,n,i,a,o,s,c,u){for(var l=c.taskFontSize,h=c.taskFontFamily,f=t.split(//gi),d=0;d3?function(t){var e=Object(s.arc)().startAngle(Math.PI/2).endAngle(Math.PI/2*3).innerRadius(7.5).outerRadius(15/2.2);t.append("path").attr("class","mouth").attr("d",e).attr("transform","translate("+o.cx+","+(o.cy+2)+")")}(c):o.score<3?function(t){var e=Object(s.arc)().startAngle(3*Math.PI/2).endAngle(Math.PI/2*5).innerRadius(7.5).outerRadius(15/2.2);t.append("path").attr("class","mouth").attr("d",e).attr("transform","translate("+o.cx+","+(o.cy+7)+")")}(c):function(t){t.append("line").attr("class","mouth").attr("stroke",2).attr("x1",o.cx-5).attr("y1",o.cy+7).attr("x2",o.cx+5).attr("y2",o.cy+7).attr("class","mouth").attr("stroke-width","1px").attr("stroke","#666")}(c);var u=ao();u.x=e.x,u.y=e.y,u.fill=e.fill,u.width=n.width,u.height=n.height,u.class="task task-type-"+e.num,u.rx=3,u.ry=3,eo(i,u);var l=e.x+14;e.people.forEach((function(t){var n=e.actors[t],r={cx:l,cy:e.y,r:7,fill:n,stroke:"#000",title:t};no(i,r),l+=10})),oo(n)(e.task,i,u.x,u.y,u.width,u.height,{class:"task"},n,e.colour)},ho=function(t){t.append("defs").append("marker").attr("id","arrowhead").attr("refX",5).attr("refY",2).attr("markerWidth",6).attr("markerHeight",4).attr("orient","auto").append("path").attr("d","M 0,0 V 4 L6,2 Z")};Ha.parser.yy=to;var fo={leftMargin:150,diagramMarginX:50,diagramMarginY:20,taskMargin:50,width:150,height:50,taskFontSize:14,taskFontFamily:'"Open-Sans", "sans-serif"',boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",bottomMarginAdj:1,activationWidth:10,textPlacement:"fo",actorColours:["#8FBC8F","#7CFC00","#00FFFF","#20B2AA","#B0E0E6","#FFFFE0"],sectionFills:["#191970","#8B008B","#4B0082","#2F4F4F","#800000","#8B4513","#00008B"],sectionColours:["#fff"]},po={};var yo=fo.leftMargin,go={data:{startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},verticalPos:0,sequenceItems:[],init:function(){this.sequenceItems=[],this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},this.verticalPos=0},updateVal:function(t,e,n,r){void 0===t[e]?t[e]=n:t[e]=r(n,t[e])},updateBounds:function(t,e,n,r){var i,a=this,o=0;this.sequenceItems.forEach((function(s){o++;var c=a.sequenceItems.length-o+1;a.updateVal(s,"starty",e-c*fo.boxMargin,Math.min),a.updateVal(s,"stopy",r+c*fo.boxMargin,Math.max),a.updateVal(go.data,"startx",t-c*fo.boxMargin,Math.min),a.updateVal(go.data,"stopx",n+c*fo.boxMargin,Math.max),"activation"!==i&&(a.updateVal(s,"startx",t-c*fo.boxMargin,Math.min),a.updateVal(s,"stopx",n+c*fo.boxMargin,Math.max),a.updateVal(go.data,"starty",e-c*fo.boxMargin,Math.min),a.updateVal(go.data,"stopy",r+c*fo.boxMargin,Math.max))}))},insert:function(t,e,n,r){var i=Math.min(t,n),a=Math.max(t,n),o=Math.min(e,r),s=Math.max(e,r);this.updateVal(go.data,"startx",i,Math.min),this.updateVal(go.data,"starty",o,Math.min),this.updateVal(go.data,"stopx",a,Math.max),this.updateVal(go.data,"stopy",s,Math.max),this.updateBounds(i,o,a,s)},bumpVerticalPos:function(t){this.verticalPos=this.verticalPos+t,this.data.stopy=this.verticalPos},getVerticalPos:function(){return this.verticalPos},getBounds:function(){return this.data}},vo=fo.sectionFills,mo=fo.sectionColours,bo=function(t,e,n){for(var r="",i=n+(2*fo.height+fo.diagramMarginY),a=0,o="#CCC",s="black",c=0,u=0;u tspan {\n fill: ").concat(t.actorTextColor,";\n stroke: none;\n }\n\n .actor-line {\n stroke: ").concat(t.actorLineColor,";\n }\n\n .messageLine0 {\n stroke-width: 1.5;\n stroke-dasharray: none;\n stroke: ").concat(t.signalColor,";\n }\n\n .messageLine1 {\n stroke-width: 1.5;\n stroke-dasharray: 2, 2;\n stroke: ").concat(t.signalColor,";\n }\n\n #arrowhead path {\n fill: ").concat(t.signalColor,";\n stroke: ").concat(t.signalColor,";\n }\n\n .sequenceNumber {\n fill: ").concat(t.sequenceNumberColor,";\n }\n\n #sequencenumber {\n fill: ").concat(t.signalColor,";\n }\n\n #crosshead path {\n fill: ").concat(t.signalColor,";\n stroke: ").concat(t.signalColor,";\n }\n\n .messageText {\n fill: ").concat(t.signalTextColor,";\n stroke: ").concat(t.signalTextColor,";\n }\n\n .labelBox {\n stroke: ").concat(t.labelBoxBorderColor,";\n fill: ").concat(t.labelBoxBkgColor,";\n }\n\n .labelText, .labelText > tspan {\n fill: ").concat(t.labelTextColor,";\n stroke: none;\n }\n\n .loopText, .loopText > tspan {\n fill: ").concat(t.loopTextColor,";\n stroke: none;\n }\n\n .loopLine {\n stroke-width: 2px;\n stroke-dasharray: 2, 2;\n stroke: ").concat(t.labelBoxBorderColor,";\n fill: ").concat(t.labelBoxBorderColor,";\n }\n\n .note {\n //stroke: #decc93;\n stroke: ").concat(t.noteBorderColor,";\n fill: ").concat(t.noteBkgColor,";\n }\n\n .noteText, .noteText > tspan {\n fill: ").concat(t.noteTextColor,";\n stroke: none;\n }\n\n .activation0 {\n fill: ").concat(t.activationBkgColor,";\n stroke: ").concat(t.activationBorderColor,";\n }\n\n .activation1 {\n fill: ").concat(t.activationBkgColor,";\n stroke: ").concat(t.activationBorderColor,";\n }\n\n .activation2 {\n fill: ").concat(t.activationBkgColor,";\n stroke: ").concat(t.activationBorderColor,";\n }\n")},gantt:function(t){return'\n .mermaid-main-font {\n font-family: "trebuchet ms", verdana, arial;\n font-family: var(--mermaid-font-family);\n }\n\n .section {\n stroke: none;\n opacity: 0.2;\n }\n\n .section0 {\n fill: '.concat(t.sectionBkgColor,";\n }\n\n .section2 {\n fill: ").concat(t.sectionBkgColor2,";\n }\n\n .section1,\n .section3 {\n fill: ").concat(t.altSectionBkgColor,";\n opacity: 0.2;\n }\n\n .sectionTitle0 {\n fill: ").concat(t.titleColor,";\n }\n\n .sectionTitle1 {\n fill: ").concat(t.titleColor,";\n }\n\n .sectionTitle2 {\n fill: ").concat(t.titleColor,";\n }\n\n .sectionTitle3 {\n fill: ").concat(t.titleColor,";\n }\n\n .sectionTitle {\n text-anchor: start;\n font-size: 11px;\n text-height: 14px;\n font-family: 'trebuchet ms', verdana, arial;\n font-family: var(--mermaid-font-family);\n\n }\n\n\n /* Grid and axis */\n\n .grid .tick {\n stroke: ").concat(t.gridColor,";\n opacity: 0.8;\n shape-rendering: crispEdges;\n text {\n font-family: ").concat(t.fontFamily,";\n fill: ").concat(t.textColor,";\n }\n }\n\n .grid path {\n stroke-width: 0;\n }\n\n\n /* Today line */\n\n .today {\n fill: none;\n stroke: ").concat(t.todayLineColor,";\n stroke-width: 2px;\n }\n\n\n /* Task styling */\n\n /* Default task */\n\n .task {\n stroke-width: 2;\n }\n\n .taskText {\n text-anchor: middle;\n font-family: 'trebuchet ms', verdana, arial;\n font-family: var(--mermaid-font-family);\n }\n\n .taskText:not([font-size]) {\n font-size: 11px;\n }\n\n .taskTextOutsideRight {\n fill: ").concat(t.taskTextDarkColor,";\n text-anchor: start;\n font-size: 11px;\n font-family: 'trebuchet ms', verdana, arial;\n font-family: var(--mermaid-font-family);\n\n }\n\n .taskTextOutsideLeft {\n fill: ").concat(t.taskTextDarkColor,";\n text-anchor: end;\n font-size: 11px;\n }\n\n /* Special case clickable */\n .task.clickable {\n cursor: pointer;\n }\n .taskText.clickable {\n cursor: pointer;\n fill: ").concat(t.taskTextClickableColor," !important;\n font-weight: bold;\n }\n\n .taskTextOutsideLeft.clickable {\n cursor: pointer;\n fill: ").concat(t.taskTextClickableColor," !important;\n font-weight: bold;\n }\n\n .taskTextOutsideRight.clickable {\n cursor: pointer;\n fill: ").concat(t.taskTextClickableColor," !important;\n font-weight: bold;\n }\n\n /* Specific task settings for the sections*/\n\n .taskText0,\n .taskText1,\n .taskText2,\n .taskText3 {\n fill: ").concat(t.taskTextColor,";\n }\n\n .task0,\n .task1,\n .task2,\n .task3 {\n fill: ").concat(t.taskBkgColor,";\n stroke: ").concat(t.taskBorderColor,";\n }\n\n .taskTextOutside0,\n .taskTextOutside2\n {\n fill: ").concat(t.taskTextOutsideColor,";\n }\n\n .taskTextOutside1,\n .taskTextOutside3 {\n fill: ").concat(t.taskTextOutsideColor,";\n }\n\n\n /* Active task */\n\n .active0,\n .active1,\n .active2,\n .active3 {\n fill: ").concat(t.activeTaskBkgColor,";\n stroke: ").concat(t.activeTaskBorderColor,";\n }\n\n .activeText0,\n .activeText1,\n .activeText2,\n .activeText3 {\n fill: ").concat(t.taskTextDarkColor," !important;\n }\n\n\n /* Completed task */\n\n .done0,\n .done1,\n .done2,\n .done3 {\n stroke: ").concat(t.doneTaskBorderColor,";\n fill: ").concat(t.doneTaskBkgColor,";\n stroke-width: 2;\n }\n\n .doneText0,\n .doneText1,\n .doneText2,\n .doneText3 {\n fill: ").concat(t.taskTextDarkColor," !important;\n }\n\n\n /* Tasks on the critical line */\n\n .crit0,\n .crit1,\n .crit2,\n .crit3 {\n stroke: ").concat(t.critBorderColor,";\n fill: ").concat(t.critBkgColor,";\n stroke-width: 2;\n }\n\n .activeCrit0,\n .activeCrit1,\n .activeCrit2,\n .activeCrit3 {\n stroke: ").concat(t.critBorderColor,";\n fill: ").concat(t.activeTaskBkgColor,";\n stroke-width: 2;\n }\n\n .doneCrit0,\n .doneCrit1,\n .doneCrit2,\n .doneCrit3 {\n stroke: ").concat(t.critBorderColor,";\n fill: ").concat(t.doneTaskBkgColor,";\n stroke-width: 2;\n cursor: pointer;\n shape-rendering: crispEdges;\n }\n\n .milestone {\n transform: rotate(45deg) scale(0.8,0.8);\n }\n\n .milestoneText {\n font-style: italic;\n }\n .doneCritText0,\n .doneCritText1,\n .doneCritText2,\n .doneCritText3 {\n fill: ").concat(t.taskTextDarkColor," !important;\n }\n\n .activeCritText0,\n .activeCritText1,\n .activeCritText2,\n .activeCritText3 {\n fill: ").concat(t.taskTextDarkColor," !important;\n }\n\n .titleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ").concat(t.textColor," ;\n font-family: 'trebuchet ms', verdana, arial;\n font-family: var(--mermaid-font-family);\n }\n")},classDiagram:ko,"classDiagram-v2":ko,class:ko,stateDiagram:Eo,state:Eo,git:function(){return"\n .commit-id,\n .commit-msg,\n .branch-label {\n fill: lightgrey;\n color: lightgrey;\n font-family: 'trebuchet ms', verdana, arial;\n font-family: var(--mermaid-font-family);\n }\n"},info:function(){return""},pie:function(t){return".pieTitleText {\n text-anchor: middle;\n font-size: 25px;\n fill: ".concat(t.taskTextDarkColor,";\n font-family: ").concat(t.fontFamily,";\n }\n .slice {\n font-family: ").concat(t.fontFamily,";\n fill: ").concat(t.textColor,";\n // fill: white;\n }\n .legend text {\n fill: ").concat(t.taskTextDarkColor,";\n font-family: ").concat(t.fontFamily,";\n font-size: 17px;\n }\n")},er:function(t){return"\n .entityBox {\n fill: ".concat(t.mainBkg,";\n stroke: ").concat(t.nodeBorder,";\n }\n\n .relationshipLabelBox {\n fill: ").concat(t.tertiaryColor,";\n opacity: 0.7;\n background-color: ").concat(t.tertiaryColor,";\n rect {\n opacity: 0.5;\n }\n }\n\n .relationshipLine {\n stroke: ").concat(t.lineColor,";\n }\n")},journey:function(t){return".label {\n font-family: 'trebuchet ms', verdana, arial;\n font-family: var(--mermaid-font-family);\n color: ".concat(t.textColor,";\n }\n .mouth {\n stroke: #666;\n }\n\n line {\n stroke: ").concat(t.textColor,"\n }\n\n .legend {\n fill: ").concat(t.textColor,";\n }\n\n .label text {\n fill: #333;\n }\n .label {\n color: ").concat(t.textColor,"\n }\n\n .face {\n fill: #FFF8DC;\n stroke: #999;\n }\n\n .node rect,\n .node circle,\n .node ellipse,\n .node polygon,\n .node path {\n fill: ").concat(t.mainBkg,";\n stroke: ").concat(t.nodeBorder,";\n stroke-width: 1px;\n }\n\n .node .label {\n text-align: center;\n }\n .node.clickable {\n cursor: pointer;\n }\n\n .arrowheadPath {\n fill: ").concat(t.arrowheadColor,";\n }\n\n .edgePath .path {\n stroke: ").concat(t.lineColor,";\n stroke-width: 1.5px;\n }\n\n .flowchart-link {\n stroke: ").concat(t.lineColor,";\n fill: none;\n }\n\n .edgeLabel {\n background-color: ").concat(t.edgeLabelBackground,";\n rect {\n opacity: 0.5;\n }\n text-align: center;\n }\n\n .cluster rect {\n }\n\n .cluster text {\n fill: ").concat(t.titleColor,";\n }\n\n div.mermaidTooltip {\n position: absolute;\n text-align: center;\n max-width: 200px;\n padding: 2px;\n font-family: 'trebuchet ms', verdana, arial;\n font-family: var(--mermaid-font-family);\n font-size: 12px;\n background: ").concat(t.tertiaryColor,";\n border: 1px solid ").concat(t.border2,";\n border-radius: 2px;\n pointer-events: none;\n z-index: 100;\n }\n\n .task-type-0, .section-type-0 {\n ").concat(t.fillType0?"fill: ".concat(t.fillType0):"",";\n }\n .task-type-1, .section-type-1 {\n ").concat(t.fillType0?"fill: ".concat(t.fillType1):"",";\n }\n .task-type-2, .section-type-2 {\n ").concat(t.fillType0?"fill: ".concat(t.fillType2):"",";\n }\n .task-type-3, .section-type-3 {\n ").concat(t.fillType0?"fill: ".concat(t.fillType3):"",";\n }\n .task-type-4, .section-type-4 {\n ").concat(t.fillType0?"fill: ".concat(t.fillType4):"",";\n }\n .task-type-5, .section-type-5 {\n ").concat(t.fillType0?"fill: ".concat(t.fillType5):"",";\n }\n .task-type-6, .section-type-6 {\n ").concat(t.fillType0?"fill: ".concat(t.fillType6):"",";\n }\n .task-type-7, .section-type-7 {\n ").concat(t.fillType0?"fill: ".concat(t.fillType7):"",";\n }\n")}},Co=function(t,e,n){return" {\n font-family: ".concat(n.fontFamily,";\n font-size: ").concat(n.fontSize,";\n fill: ").concat(n.textColor,"\n }\n\n /* Classes common for multiple diagrams */\n\n .error-icon {\n fill: ").concat(n.errorBkgColor,";\n }\n .error-text {\n fill: ").concat(n.errorTextColor,";\n stroke: ").concat(n.errorTextColor,";\n }\n\n .edge-thickness-normal {\n stroke-width: 2px;\n }\n .edge-thickness-thick {\n stroke-width: 3.5px\n }\n .edge-pattern-solid {\n stroke-dasharray: 0;\n }\n\n .edge-pattern-dashed{\n stroke-dasharray: 3;\n }\n .edge-pattern-dotted {\n stroke-dasharray: 2;\n }\n\n .marker {\n fill: ").concat(n.lineColor,";\n }\n .marker.cross {\n stroke: ").concat(n.lineColor,";\n }\n\n svg {\n font-family: ").concat(n.fontFamily,";\n font-size: ").concat(n.fontSize,";\n }\n\n ").concat(To[t](n),"\n\n ").concat(e,"\n\n ").concat(t," { fill: apa;}\n")};function Ao(t){return(Ao="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var So={},Mo=function(t,e,n){switch(f.debug("Directive type=".concat(e.type," with args:"),e.args),e.type){case"init":case"initialize":["config"].forEach((function(t){void 0!==e.args[t]&&("flowchart-v2"===n&&(n="flowchart"),e.args[n]=e.args[t],delete e.args[t])})),e.args,bt(e.args);break;case"wrap":case"nowrap":t&&t.setWrap&&t.setWrap("wrap"===e.type);break;default:f.warn("Unhandled directive: source: '%%{".concat(e.type,": ").concat(JSON.stringify(e.args?e.args:{}),"}%%"),e)}};function Oo(t){la(t.git),ue(t.flowchart),Je(t.flowchart),void 0!==t.sequenceDiagram&&Rn.setConf(P(t.sequence,t.sequenceDiagram)),Rn.setConf(t.sequence),xr(t.gantt),Qr(t.class),Mi(t.state),Pi(t.state),ma(t.class),Ma(t.class),$a(t.er),_o(t.journey),xa(t.class)}function Do(){}var No=Object.freeze({render:function(t,e,n,r){_t();var i=e,a=U.detectInit(i);a&&bt(a);var u=vt();if(console.warn("Render with config after adding new directives",u.themeVariables.primaryColor),e.length>u.maxTextSize&&(i="graph TB;a[Maximum text size in diagram exceeded];style a fill:#faa"),void 0!==r)r.innerHTML="",Object(s.select)(r).append("div").attr("id","d"+t).attr("style","font-family: "+u.fontFamily).append("svg").attr("id",t).attr("width","100%").attr("xmlns","http://www.w3.org/2000/svg").append("g");else{var l=document.getElementById(t);l&&l.remove();var h=document.querySelector("#d"+t);h&&h.remove(),Object(s.select)("body").append("div").attr("id","d"+t).append("svg").attr("id",t).attr("width","100%").attr("xmlns","http://www.w3.org/2000/svg").append("g")}window.txt=i,i=function(t){var e=t;return e=(e=(e=e.replace(/style.*:\S*#.*;/g,(function(t){return t.substring(0,t.length-1)}))).replace(/classDef.*:\S*#.*;/g,(function(t){return t.substring(0,t.length-1)}))).replace(/#\w+;/g,(function(t){var e=t.substring(1,t.length-1);return/^\+?\d+$/.test(e)?"fl°°"+e+"¶ß":"fl°"+e+"¶ß"}))}(i);var d=Object(s.select)("#d"+t).node(),p=U.detectType(i),y=d.firstChild,g=y.firstChild,v="";if(void 0!==u.themeCSS&&(v+="\n".concat(u.themeCSS)),void 0!==u.fontFamily&&(v+="\n:root { --mermaid-font-family: ".concat(u.fontFamily,"}")),void 0!==u.altFontFamily&&(v+="\n:root { --mermaid-alt-font-family: ".concat(u.altFontFamily,"}")),"flowchart"===p||"flowchart-v2"===p||"graph"===p){var m=le(i);for(var b in m)v+="\n.".concat(b," > * { ").concat(m[b].styles.join(" !important; ")," !important; }"),m[b].textStyles&&(v+="\n.".concat(b," tspan { ").concat(m[b].textStyles.join(" !important; ")," !important; }"))}var _=(new o.a)("#".concat(t),Co(p,v,u.themeVariables)),x=document.createElement("style");x.innerHTML=_,y.insertBefore(x,g);try{switch(p){case"git":u.flowchart.arrowMarkerAbsolute=u.arrowMarkerAbsolute,la(u.git),ha(i,t,!1);break;case"flowchart":u.flowchart.arrowMarkerAbsolute=u.arrowMarkerAbsolute,ue(u.flowchart),he(i,t,!1);break;case"flowchart-v2":u.flowchart.arrowMarkerAbsolute=u.arrowMarkerAbsolute,Je(u.flowchart),Qe(i,t,!1);break;case"sequence":u.sequence.arrowMarkerAbsolute=u.arrowMarkerAbsolute,u.sequenceDiagram?(Rn.setConf(Object.assign(u.sequence,u.sequenceDiagram)),console.error("`mermaid config.sequenceDiagram` has been renamed to `config.sequence`. Please update your mermaid config.")):Rn.setConf(u.sequence),Rn.draw(i,t);break;case"gantt":u.gantt.arrowMarkerAbsolute=u.arrowMarkerAbsolute,xr(u.gantt),kr(i,t);break;case"class":u.class.arrowMarkerAbsolute=u.arrowMarkerAbsolute,Qr(u.class),Kr(i,t);break;case"classDiagram":u.class.arrowMarkerAbsolute=u.arrowMarkerAbsolute,ei(u.class),ni(i,t);break;case"state":u.class.arrowMarkerAbsolute=u.arrowMarkerAbsolute,Mi(u.state),Oi(i,t);break;case"stateDiagram":u.class.arrowMarkerAbsolute=u.arrowMarkerAbsolute,Pi(u.state),Ii(i,t);break;case"info":u.class.arrowMarkerAbsolute=u.arrowMarkerAbsolute,ma(u.class),ba(i,t,c.version);break;case"pie":u.class.arrowMarkerAbsolute=u.arrowMarkerAbsolute,Ma(u.class),Oa(i,t,c.version);break;case"er":$a(u.er),Wa(i,t,c.version);break;case"journey":_o(u.journey),xo(i,t,c.version)}}catch(e){throw ka(t,c.version),e}Object(s.select)('[id="'.concat(t,'"]')).selectAll("foreignobject > *").attr("xmlns","http://www.w3.org/1999/xhtml");var k=Object(s.select)("#d"+t).node().innerHTML;if(f.debug("cnf.arrowMarkerAbsolute",u.arrowMarkerAbsolute),u.arrowMarkerAbsolute&&"false"!==u.arrowMarkerAbsolute||(k=k.replace(/marker-end="url\(.*?#/g,'marker-end="url(#',"g")),k=function(t){var e=t;return e=(e=(e=e.replace(/fl°°/g,(function(){return"&#"}))).replace(/fl°/g,(function(){return"&"}))).replace(/¶ß/g,(function(){return";"}))}(k),void 0!==n)switch(p){case"flowchart":case"flowchart-v2":n(k,Yt.bindFunctions);break;case"gantt":n(k,vr.bindFunctions);break;case"class":n(k,Pr.bindFunctions);break;default:n(k)}else f.debug("CB = undefined!");var w=Object(s.select)("#d"+t).node();return null!==w&&"function"==typeof w.remove&&Object(s.select)("#d"+t).node().remove(),k},parse:function(t){var e=U.detectInit(t);e&&f.debug("reinit ",e);var n,r=U.detectType(t);switch(f.debug("Type "+r),r){case"git":(n=Ki.a).parser.yy=Ji;break;case"flowchart":case"flowchart-v2":Yt.clear(),(n=Ut.a).parser.yy=Yt;break;case"sequence":(n=un.a).parser.yy=Tn;break;case"gantt":(n=zn.a).parser.yy=vr;break;case"class":case"classDiagram":(n=jr.a).parser.yy=Pr;break;case"state":case"stateDiagram":(n=bi.a).parser.yy=vi;break;case"info":f.debug("info info info"),(n=ga.a).parser.yy=pa;break;case"pie":f.debug("pie"),(n=Aa.a).parser.yy=Ta;break;case"er":f.debug("er"),(n=Pa.a).parser.yy=La;break;case"journey":f.debug("Journey"),(n=Va.a).parser.yy=to}return n.parser.yy.graphType=r,n.parser.yy.parseError=function(t,e){throw{str:t,hash:e}},n.parse(t),n},parseDirective:function(t,e,n,r){try{if(void 0!==e)switch(e=e.trim(),n){case"open_directive":So={};break;case"type_directive":So.type=e.toLowerCase();break;case"arg_directive":So.args=JSON.parse(e);break;case"close_directive":Mo(t,So,r),So=null}}catch(t){f.error("Error while rendering sequenceDiagram directive: ".concat(e," jison context: ").concat(n)),f.error(t.message)}},initialize:function(t){console.warn("mermaidAPI.initialize: v".concat(c.version," "),t),t&&t.theme&&ct[t.theme]?t.themeVariables=ct[t.theme].getThemeVariables(t.themeVariables):t&&(t.themeVariables=ct.default.getThemeVariables());var e,n="object"===Ao(t)?(e=t,console.warn("Setting site config"),ft=P({},ht),ft=P(ft,e),e.theme&&(ft.themeVariables=ct[e.theme].getThemeVariables(e.themeVariables)),pt=yt(ft,dt),ft):gt();Oo(n),d(n.logLevel)},reinitialize:Do,getConfig:vt,setConfig:function(t){return P(pt,t),vt()},getSiteConfig:gt,updateSiteConfig:function(t){return ft=P(ft,t),yt(ft,dt),ft},reset:function(){_t()},globalReset:function(){_t(),Oo(vt())},defaultConfig:ht});d(vt().logLevel),_t(vt());var Bo=No,Lo=function(){Fo.startOnLoad?Bo.getConfig().startOnLoad&&Fo.init():void 0===Fo.startOnLoad&&(f.debug("In start, no config"),Bo.getConfig().startOnLoad&&Fo.init())};"undefined"!=typeof document&& +/*! + * Wait for document loaded before starting the execution + */ +window.addEventListener("load",(function(){Lo()}),!1);var Fo={startOnLoad:!0,htmlLabels:!0,mermaidAPI:Bo,parse:Bo.parse,render:Bo.render,init:function(){var t,e,n,r=this,a=Bo.getConfig();arguments.length>=2?( +/*! sequence config was passed as #1 */ +void 0!==arguments[0]&&(Fo.sequenceConfig=arguments[0]),t=arguments[1]):t=arguments[0],"function"==typeof arguments[arguments.length-1]?(e=arguments[arguments.length-1],f.debug("Callback function found")):void 0!==a.mermaid&&("function"==typeof a.mermaid.callback?(e=a.mermaid.callback,f.debug("Callback function found")):f.debug("No Callback function found")),t=void 0===t?document.querySelectorAll(".mermaid"):"string"==typeof t?document.querySelectorAll(t):t instanceof window.Node?[t]:t,f.debug("Start On Load before: "+Fo.startOnLoad),void 0!==Fo.startOnLoad&&(f.debug("Start On Load inner: "+Fo.startOnLoad),Bo.updateSiteConfig({startOnLoad:Fo.startOnLoad})),void 0!==Fo.ganttConfig&&Bo.updateSiteConfig({gantt:Fo.ganttConfig});for(var o=function(a){var o=t[a]; +/*! Check if previously processed */if(o.getAttribute("data-processed"))return"continue";o.setAttribute("data-processed",!0);var s="mermaid-".concat(Date.now());n=i(n=o.innerHTML).trim().replace(//gi,"
    ");var c=U.detectInit(n);c&&f.debug("Detected early reinit: ",c);try{Bo.render(s,n,(function(t,n){o.innerHTML=t,void 0!==e&&e(s),n&&n(o)}),o)}catch(t){f.warn("Syntax Error rendering"),f.warn(t),r.parseError&&r.parseError(t)}},s=0;s { + if (this.adapter.isScrollMuted()) { + return; + } + + this.updateAfterScrollUnmuted(); + }, + { passive: true }); + + this.adapter.on('basicMarkdownRendered', () => { + this.updateHeadingNodes(); + }); + } + + fetchAllNodesWithLineNumber() { + if (!this.nodesWithSourceLine) { + this.nodesWithSourceLine = this.container.getElementsByClassName(this.sourceLineClassName); + } + } + + updateHeadingNodes() { + this.headingNodes = this.container.querySelectorAll("h1, h2, h3, h4, h5, h6"); + let headings = []; + let needSectionNumber = window.vxOptions.sectionNumberEnabled; + let regExp = /^(?:\d\.)+ /; + for (let i = 0; i < this.headingNodes.length; ++i) { + let node = this.headingNodes[i]; + headings.push({ + name: node.textContent, + level: parseInt(node.tagName.substr(1)), + anchor: node.id + }); + if (needSectionNumber && regExp.test(node.textContent)) { + needSectionNumber = false; + } + } + + this.adapter.setSectionNumberEnabled(needSectionNumber); + + this.adapter.setHeadings(headings); + } + + scrollToLine(p_lineNumber) { + if (p_lineNumber == 0) { + this.scrollToY(0, false, true); + return; + } + + this.fetchAllNodesWithLineNumber(); + + // Binary search the last node with line number not larger than @p_lineNumber. + let targetNode = this.binarySearchNodeForLineNumber(this.nodesWithSourceLine, p_lineNumber); + if (targetNode) { + this.scrollToNode(targetNode, false, true); + } else { + this.scrollToY(0, false, true); + } + } + + scrollToAnchor(p_anchor) { + let node = document.getElementById(p_anchor); + if (node) { + // No need to defer since it is driven by user interaction. + this.scrollToNode(node, this.smoothAnchorScroll, false); + } + } + + isValidY(p_pos) { + let maxm = document.documentElement.scrollHeight - document.documentElement.clientHeight; + return p_pos >= 0 && p_pos <= maxm; + } + + scrollToY(p_pos, p_smooth, p_deferred) { + if (!this.isValidY(p_pos)) { + return; + } + + if (p_deferred) { + window.setTimeout(() => { + this.scrollToY(p_pos, p_smooth, false); + }, 300); + } else { + this.adapter.muteScroll(); + window.scrollTo({ top: p_pos, + behavior: p_smooth ? 'smooth' : 'auto' }); + this.adapter.unmuteScroll(); + } + } + + scrollToNode(p_node, p_smooth, p_deferred) { + if (p_deferred) { + window.setTimeout(() => { + this.scrollToNode(p_node, p_smooth, false); + }, 300); + } else { + this.adapter.muteScroll(); + p_node.scrollIntoView({ behavior: p_smooth ? 'smooth' : 'auto', + block: 'start', + inline: 'nearest' }); + this.adapter.unmuteScroll(); + } + } + + binarySearchNodeForLineNumber(p_nodes, p_lineNumber) { + let left = 0; + let right = p_nodes.length - 1; + let lastIdx = -1; + while (left <= right) { + let mid = Math.floor((left + right) / 2); + let lineNumber = parseInt(p_nodes[mid].getAttribute(this.sourceLineAttributeName)); + if (lineNumber > p_lineNumber) { + right = mid - 1; + } else if (lineNumber == p_lineNumber) { + return p_nodes[mid]; + } else { + lastIdx = mid; + left = mid + 1; + } + } + + if (lastIdx != -1) { + return p_nodes[lastIdx]; + } else { + return null; + } + } + + // Return the index, -1 if not found. + binarySearchTopNode(p_nodes) { + if (p_nodes.length == 0) { + return -1; + } + + let threshold = 30; + let left = 0; + let right = p_nodes.length - 1; + while (left < right) { + let mid = Math.ceil((left + right) / 2); + let rect = p_nodes[mid].getBoundingClientRect(); + if (rect.y > threshold) { + right = mid - 1; + } else if (rect.bottom > 0) { + return mid; + } else { + left = mid; + } + } + + let rect = p_nodes[left].getBoundingClientRect(); + if (rect.y <= threshold) { + return left; + } + return -1; + } + + updateTopLineNumber() { + this.fetchAllNodesWithLineNumber(); + + let idx = this.binarySearchTopNode(this.nodesWithSourceLine); + let lineNumber = -1; + if (idx > -1) { + lineNumber = parseInt(this.nodesWithSourceLine[idx].getAttribute(this.sourceLineAttributeName)); + } + + this.adapter.setTopLineNumber(lineNumber); + } + + updateCurrentHeading() { + let idx = this.currentHeadingIndex(); + let anchor = ''; + if (idx > -1) { + anchor = this.headingNodes[idx].id; + } + + this.adapter.setCurrentHeadingAnchor(idx, anchor); + } + + currentHeadingIndex() { + return this.binarySearchTopNode(this.headingNodes); + } + + updateAfterScrollUnmuted() { + this.updateCurrentHeading(); + this.updateTopLineNumber(); + } +} diff --git a/src/data/extra/web/js/plantuml.js b/src/data/extra/web/js/plantuml.js new file mode 100644 index 00000000..a5954380 --- /dev/null +++ b/src/data/extra/web/js/plantuml.js @@ -0,0 +1,135 @@ +class PlantUml extends GraphRenderer { + constructor() { + super(); + + this.name = 'plantuml'; + + this.graphDivClass = 'vx-plantuml-graph'; + + this.extraScripts = [this.scriptFolderPath + '/plantuml/synchro2.js', + this.scriptFolderPath + '/plantuml/zopfli.raw.min.js']; + + this.serverUrl = 'http://www.plantuml.com/plantuml'; + + this.format = 'svg'; + + this.langs = ['plantuml', 'puml']; + } + + registerInternal() { + this.vnotex.on('basicMarkdownRendered', () => { + this.reset(); + this.renderCodeNodes(this.vnotex.contentContainer, 'svg'); + }); + + this.vnotex.getWorker('markdownit').addLangsToSkipHighlight(this.langs); + } + + + // Interface 1. + render(p_node, p_format) { + this.format = p_format; + + super.render(p_node, p_classList); + } + + // Interface 2. + renderCodeNodes(p_node, p_format) { + this.format = p_format; + + super.renderCodeNodes(p_node); + } + + renderOne(p_node, p_idx) { + let func = function(p_plantUml, p_node) { + let plantUml = p_plantUml; + let node = p_node; + return function(p_format, p_data) { + plantUml.handlePlantUmlResult(node, 0, p_format, p_data); + }; + }; + + this.renderOnline(this.serverUrl, + this.format, + p_node.textContent, + func(this, p_node)); + return true; + } + + // Render a graph from @p_text in SVG format. + // p_callback(format, data). + renderText(p_text, p_callback) { + let func = () => { + this.renderOnline(this.serverUrl, + 'svg', + p_text, + p_callback); + } + + if (!this.initialize(func)) { + return; + } + + func(); + } + + // A helper function to render PlantUml online. + // Send request to @p_serverUrl to render @p_text as format @p_format. + renderOnline(p_serverUrl, p_format, p_text, p_callback) { + let url = this.getPlantUMLOnlineUrl(p_serverUrl, p_format, p_text); + + if (p_format == 'png') { + Utils.httpGet(url, 'blob', function(p_resp) { + let blob = p_resp; + let reader = new FileReader(); + reader.onload = function () { + let dataUrl = reader.result; + let png = dataUrl.substring(dataUrl.indexOf(',') + 1); + p_callback(p_format, png); + }; + + reader.readAsDataURL(blob); + }); + } else if (p_format == 'svg') { + Utils.httpGet(url, 'text', function(p_resp) { + p_callback(p_format, p_resp); + }); + } + } + + getPlantUMLOnlineUrl(p_serverUrl, p_format, p_text) { + let s = unescape(encodeURIComponent(p_text)); + let arr = []; + for (let i = 0; i < s.length; i++) { + arr.push(s.charCodeAt(i)); + } + + let compressor = new Zopfli.RawDeflate(arr); + let compressed = compressor.compress(); + let url = p_serverUrl + "/" + p_format + "/" + encode64_(compressed); + return url; + } + + handlePlantUmlResult(p_node, p_timeStamp, p_format, p_result) { + if (p_node && p_result.length > 0) { + let obj = null; + if (p_format == 'svg') { + obj = document.createElement('div'); + obj.classList.add(this.graphDivClass); + obj.innerHTML = p_result; + window.vxImageViewer.setupSVGToView(obj.children[0], false); + } else { + obj = document.createElement('img'); + obj.src = "data:image/" + p_format + ";base64, " + p_result; + window.vxImageViewer.setupIMGToView(obj); + } + + Utils.checkSourceLine(p_node, obj); + + Utils.replaceNodeWithPreCheck(p_node, obj); + } + this.finishRenderingOne(); + } +} + +window.vnotex.registerWorker(new PlantUml()); diff --git a/src/data/extra/web/js/plantuml/README.md b/src/data/extra/web/js/plantuml/README.md new file mode 100644 index 00000000..ac04b86e --- /dev/null +++ b/src/data/extra/web/js/plantuml/README.md @@ -0,0 +1,3 @@ +# [synchro2](http://s.plantuml.com/synchro2.js) + +# [zopfli](https://github.com/imaya/zopfli.js) diff --git a/src/data/extra/web/js/plantuml/synchro2.js b/src/data/extra/web/js/plantuml/synchro2.js new file mode 100644 index 00000000..3cedf80d --- /dev/null +++ b/src/data/extra/web/js/plantuml/synchro2.js @@ -0,0 +1,50 @@ +GID = function(id){ return document.getElementById(id) }; + +function encode64_(data) { + r = ""; + for (i=0; i> 2; +c2 = ((b1 & 0x3) << 4) | (b2 >> 4); +c3 = ((b2 & 0xF) << 2) | (b3 >> 6); +c4 = b3 & 0x3F; +r = ""; +r += encode6bit(c1 & 0x3F); +r += encode6bit(c2 & 0x3F); +r += encode6bit(c3 & 0x3F); +r += encode6bit(c4 & 0x3F); +return r; +} + +function encode6bit(b) { +if (b < 10) { + return String.fromCharCode(48 + b); +} +b -= 10; +if (b < 26) { + return String.fromCharCode(65 + b); +} +b -= 26; +if (b < 26) { + return String.fromCharCode(97 + b); +} +b -= 26; +if (b == 0) { + return '-'; +} +if (b == 1) { + return '_'; +} +return '?'; +} \ No newline at end of file diff --git a/src/data/extra/web/js/plantuml/zopfli.raw.min.js b/src/data/extra/web/js/plantuml/zopfli.raw.min.js new file mode 100644 index 00000000..e80d6147 --- /dev/null +++ b/src/data/extra/web/js/plantuml/zopfli.raw.min.js @@ -0,0 +1,238 @@ +/** + * @license zopfli.js 2013 - imaya [ https://github.com/imaya/zopfli.js ] The Apache License 2.0 + * Original C implementation: Google Inc. [ https://code.google.com/p/zopfli/ ] The Apache License 2.0 + */ +(function() {function da(b){throw b;}var a=void 0,E=!0,F=null,G=!1,fa=this;function ha(b,c){var d=b.split("."),e=fa;!(d[0]in e)&&e.execScript&&e.execScript("var "+d[0]);for(var f;d.length&&(f=d.shift());)!d.length&&c!==a?e[f]=c:e=e[f]?e[f]:e[f]={}};try{this.Module=Module}catch(ka){this.Module=Module={}}var la="object"===typeof process&&"function"===typeof require,ma="object"===typeof window,na="function"===typeof importScripts,oa=!ma&&!la&&!na; +if(la){Module.print=function(b){process.stdout.write(b+"\n")};Module.printErr=function(b){process.stderr.write(b+"\n")};var pa=require("fs"),qa=require("path");Module.read=function(b){var b=qa.normalize(b),c=pa.readFileSync(b).toString();!c&&b!=qa.resolve(b)&&(b=path.join(__dirname,"..","src",b),c=pa.readFileSync(b).toString());return c};Module.load=function(b){ra(read(b))};Module.arguments||(Module.arguments=process.argv.slice(2))} +oa&&(Module.print=print,"undefined"!=typeof printErr&&(Module.printErr=printErr),Module.read="undefined"!=typeof read?read:function(b){snarf(b)},Module.arguments||("undefined"!=typeof scriptArgs?Module.arguments=scriptArgs:"undefined"!=typeof arguments&&(Module.arguments=arguments)));ma&&!na&&(Module.print||(Module.print=function(b){console.log(b)}),Module.printErr||(Module.printErr=function(b){console.log(b)})); +if(ma||na)Module.read=function(b){var c=new XMLHttpRequest;c.open("GET",b,G);c.send(F);return c.responseText},Module.arguments||"undefined"!=typeof arguments&&(Module.arguments=arguments);na&&(Module.print||(Module.print=function(){}),Module.load=importScripts);!na&&(!ma&&!la&&!oa)&&da("Unknown runtime environment. Where are we?");function ra(b){eval.call(F,b)}"undefined"==!Module.load&&Module.read&&(Module.load=function(b){ra(Module.read(b))});Module.print||(Module.print=function(){}); +Module.printErr||(Module.printErr=Module.print);Module.arguments||(Module.arguments=[]);Module.print=Module.print;Module.c=Module.printErr;Module.preRun||(Module.preRun=[]);Module.postRun||(Module.postRun=[]);function sa(b){if(1==va)return 1;var c={"%i1":1,"%i8":1,"%i16":2,"%i32":4,"%i64":8,"%float":4,"%double":8}["%"+b];c||("*"==b.charAt(b.length-1)?c=va:"i"==b[0]&&(b=parseInt(b.substr(1)),wa(0==b%8),c=b/8));return c}function ya(b,c){return c&&c.length?za[b].apply(F,c):za[b]()}var Aa; +function Ba(){var b=[],c=0;this.v=function(d){d&=255;c&&(b.push(d),c--);if(0==b.length){if(128>d)return String.fromCharCode(d);b.push(d);c=191d?1:2;return""}if(0d?String.fromCharCode((d&31)<<6|e&63):String.fromCharCode((d&15)<<12|(e&63)<<6|f&63);b.length=0;return d};this.G=function(b){for(var b=unescape(encodeURIComponent(b)),c=[],f=0;f>2<<2;return c} +function Ea(b){var c=Fa;Fa=Fa+b|0;Fa=Fa+3>>2<<2;if(Fa>=Ga){for(;Ga<=Fa;)Ga=2*Ga+4095>>12<<12;wa(Ga<=Math.pow(2,30));var b=J,d=new ArrayBuffer(Ga);Module.HEAP8=J=new Int8Array(d);Module.HEAP16=K=new Int16Array(d);Module.HEAP32=L=new Int32Array(d);Module.HEAPU8=Ha=new Uint8Array(d);Module.HEAPU16=Ia=new Uint16Array(d);Module.HEAPU32=Ja=new Uint32Array(d);Module.HEAPF32=Ka=new Float32Array(d);Module.HEAPF64=La=new Float64Array(d);J.set(b)}return c}var va=4,Ma={},Na,Oa; +function Qa(b){Module.print(b+":\n"+Error().stack);da("Assertion: "+b)}function wa(b,c){b||Qa("Assertion failed: "+c)}var Ra=this;Module.ccall=function(b,c,d,e){return Sa(Ta(b),c,d,e)};function Ta(b){try{var c=Ra.Module["_"+b];c||(c=eval("_"+b))}catch(d){}wa(c,"Cannot call unknown function "+b+" (perhaps LLVM optimizations or closure removed it?)");return c} +function Sa(b,c,d,e){function f(b,d){if("string"==d){if(b===F||b===a||0===b)return 0;h||(h=I);var c=Da(b.length+1);Ua(b,c);return c}return"array"==d?(h||(h=I),c=Da(b.length),Va(b,c),c):b}var h=0,j=0,e=e?e.map(function(b){return f(b,d[j++])}):[];b=b.apply(F,e);"string"==c?c=Wa(b):(wa("array"!=c),c=b);h&&(I=h);return c}Module.cwrap=function(b,c,d){var e=Ta(b);return function(){return Sa(e,c,d,Array.prototype.slice.call(arguments))}}; +function Xa(b,c,d){d=d||"i8";"*"===d.charAt(d.length-1)&&(d="i32");switch(d){case "i1":J[b]=c;break;case "i8":J[b]=c;break;case "i16":K[b>>1]=c;break;case "i32":L[b>>2]=c;break;case "i64":Oa=[c>>>0,Math.min(Math.floor(c/4294967296),4294967295)>>>0];L[b>>2]=Oa[0];L[b+4>>2]=Oa[1];break;case "float":Ka[b>>2]=c;break;case "double":La[M>>3]=c;L[b>>2]=L[M>>2];L[b+4>>2]=L[M+4>>2];break;default:Qa("invalid type for setValue: "+d)}}Module.setValue=Xa; +Module.getValue=function(b,c){c=c||"i8";"*"===c.charAt(c.length-1)&&(c="i32");switch(c){case "i1":return J[b];case "i8":return J[b];case "i16":return K[b>>1];case "i32":return L[b>>2];case "i64":return L[b>>2];case "float":return Ka[b>>2];case "double":return L[M>>2]=L[b>>2],L[M+4>>2]=L[b+4>>2],La[M>>3];default:Qa("invalid type for setValue: "+c)}return F};var Ya=1,Za=2,P=3;Module.ALLOC_NORMAL=0;Module.ALLOC_STACK=Ya;Module.ALLOC_STATIC=Za;Module.ALLOC_NONE=P; +function Q(b,c,d,e){var f,h;"number"===typeof b?(f=E,h=b):(f=G,h=b.length);var j="string"===typeof c?c:F,d=d==P?e:[R,Da,Ea][d===a?Za:d](Math.max(h,j?1:c.length));if(f){e=d;wa(0==(d&3));for(b=d+(h&-4);e>2]=0;for(b=d+h;e=c?2*Math.abs(1<=b)return b;var d=32>=c?Math.abs(1<=d&&(32>=c||b>d))b=-2*d+b;return b}Math.g||(Math.g=function(b,c){var d=b&65535,e=c&65535;return d*e+((b>>>16)*e+d*(c>>>16)<<16)|0});var mb=0,nb={},ob=G,pb=F; +function qb(b){mb++;Module.monitorRunDependencies&&Module.monitorRunDependencies(mb);b?(wa(!nb[b]),nb[b]=1,pb===F&&"undefined"!==typeof setInterval&&(pb=setInterval(function(){var b=G,d;for(d in nb)b||(b=E,Module.c("still waiting on run dependencies:")),Module.c("dependency: "+d);b&&Module.c("(end of list)")},6E3))):Module.c("warning: run dependency added without ID")}Module.addRunDependency=qb; +function rb(b){mb--;Module.monitorRunDependencies&&Module.monitorRunDependencies(mb);b?(wa(nb[b]),delete nb[b]):Module.c("warning: run dependency removed without ID");0==mb&&(pb!==F&&(clearInterval(pb),pb=F),!ob&&sb&&tb())}Module.removeRunDependency=rb;Module.preloadedImages={};Module.preloadedAudios={};wa(Fa==ab);wa(ab==ab);Fa+=7528;wa(Fa>2]=b}var Eb,Fb=Q(1,"i32*",Ya),Gb=Q(1,"i32*",Ya);ub=Q(1,"i32*",Ya);var Hb=Q(1,"i32*",Ya),Ib=2,Jb=[F],Kb=E; +function Lb(b,c){if("string"!==typeof b)return F;c===a&&(c="/");b&&"/"==b[0]&&(c="");for(var d=(c+"/"+b).split("/").reverse(),e=[""];d.length;){var f=d.pop();""==f||"."==f||(".."==f?1d)return Db(zb),-1;if(e.object.b){if(e.object.e){for(var f=0;fd||0>f)Db(zb),c=-1;else{for(var j=b.object.a;j.length>2]=L[d+f>>2],L[M+4>>2]=L[d+(f+4)>>2],La[M>>3]):"i64"==b?c=[L[d+f>>2],L[d+(f+4)>>2]]:(b="i32",c=L[d+f>>2]);f+=Math.max(sa(b),va);return c}for(var f=0,h=[],j,g;;){var i=c;j=J[c];if(0===j)break;g=J[c+1|0];if(37==j){var l=G,m=G,k=G,n=G;a:for(;;){switch(g){case 43:l=E;break;case 45:m=E;break;case 35:k=E;break;case 48:if(n)break a;else{n=E;break}default:break a}c++;g=J[c+1|0]}var q=0;if(42==g)q=e("i32"),c++,g=J[c+1|0];else for(;48<=g&&57>=g;)q= +10*q+(g-48),c++,g=J[c+1|0];var v=G;if(46==g){var u=0,v=E;c++;g=J[c+1|0];if(42==g)u=e("i32"),c++;else for(;;){g=J[c+1|0];if(48>g||57>>0)+4294967296*(j[1]>>>0):(j[0]>>>0)+4294967296*(j[1]|0));4>=s&&(j=(i?lb:kb)(j&Math.pow(256,s)-1,8*s));var y=Math.abs(j),i="";if(100==g||105==g)p=8==s&&$b?$b.stringify(r[0],r[1],F):lb(j,8*s).toString(10);else if(117==g)p=8==s&&$b?$b.stringify(r[0],r[1],E):kb(j,8*s).toString(10),j=Math.abs(j);else if(111==g)p=(k?"0":"")+y.toString(8);else if(120==g||88==g){i=k?"0x":"";if(8==s&&$b)p=(r[1]>>>0).toString(16)+(r[0]>>>0).toString(16);else if(0>j){j=-j;p=(y-1).toString(16); +r=[];for(k=0;kj?"-"+i:"+"+i);i.length+p.lengths&&-4<=s?(g=(103==g?"f":"F").charCodeAt(0),u-=s+1):(g=(103==g?"e":"E").charCodeAt(0),u--),s=Math.min(u,20);if(101==g||69==g)p=j.toExponential(s),/[eE][-+]\d$/.test(p)&&(p=p.slice(0,-1)+"0"+p.slice(-1));else if(102==g||70==g)p=j.toFixed(s);i=p.split("e");if(v&&!k)for(;1s++;)i[0]+="0";p=i[0]+(1j?"-":"")+"inf",n=G;for(;p.lengthg&&(p=p.toUpperCase());p.split("").forEach(function(b){h.push(b.charCodeAt(0))})}else if(115==g){n=l=e("i8*")||eb;n|=0;g=0;for(g=n;J[g]|0;)g=g+1|0;n=g-n|0;v&&(n=Math.min(n,u));if(!m)for(;n>2]=h.length;else if(37==g)h.push(j);else for(k=i;k>2]=L[c>>2],b=b+4|0,c=c+4|0,d=d-4|0}for(;0<(d|0);)J[b]=J[c],b=b+1|0,c=c+1|0,d=d-1|0} +function bc(b,c){var d,b=b|0;d=0;var c=c|0,e=0,f=0,h=0,j=0,e=b+c|0;if(20<=(c|0)){d&=255;j=b&3;f=d|d<<8|d<<16|d<<24;h=e&-4;if(j)for(j=b+4-j|0;(b|0)<(j|0);)J[b]=d,b=b+1|0;for(;(b|0)<(h|0);)L[b>>2]=f,b=b+4|0}for(;(b|0)<(e|0);)J[b]=d,b=b+1|0} +var cc=[8,7,6,6,5,5,5,5,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0];function dc(b){var c=cc[b>>>24];if(8>c)return c;c=cc[b>>16&255];if(8>c)return c+8;c=cc[b>>8&255];return 8>c?c+16:cc[b&255]+24}function W(){da("abort() at "+Error().stack)} +function ec(){switch(8){case 8:return $a;case 54:case 56:case 21:case 61:case 63:case 22:case 67:case 23:case 24:case 25:case 26:case 27:case 69:case 28:case 101:case 70:case 71:case 29:case 30:case 199:case 75:case 76:case 32:case 43:case 44:case 80:case 46:case 47:case 45:case 48:case 49:case 42:case 82:case 33:case 7:case 108:case 109:case 107:case 112:case 119:case 121:return 200809;case 13:case 104:case 94:case 95:case 34:case 35:case 77:case 81:case 83:case 84:case 85:case 86:case 87:case 88:case 89:case 90:case 91:case 94:case 95:case 110:case 111:case 113:case 114:case 115:case 116:case 117:case 118:case 120:case 40:case 16:case 79:case 19:return-1; +case 92:case 93:case 5:case 72:case 6:case 74:case 92:case 93:case 96:case 97:case 98:case 99:case 102:case 103:case 105:return 1;case 38:case 66:case 50:case 51:case 4:return 1024;case 15:case 64:case 41:return 32;case 55:case 37:case 17:return 2147483647;case 18:case 1:return 47839;case 59:case 57:return 99;case 68:case 58:return 2048;case 0:return 2097152;case 3:return 65536;case 14:return 32768;case 73:return 32767;case 39:return 16384;case 60:return 1E3;case 106:return 700;case 52:return 256; +case 62:return 255;case 2:return 100;case 65:return 64;case 36:return 20;case 100:return 16;case 20:return 6;case 53:return 4}Db(zb);return-1}function fc(b){gc||(Fa=Fa+4095>>12<<12,gc=E);var c=Fa;0!=b&&Ea(b);return c}var gc,hc=G,ic,jc,kc,lc; +hb.unshift({m:function(){if(!Module.noFSInit&&!Wb){var b,c,d,e=function(b){b===F||10===b?(c.i(c.buffer.join("")),c.buffer=[]):c.buffer.push(g.v(b))};wa(!Wb,"FS.init was previously called. If you want to initialize later with custom parameters, remove any earlier calls (note that one is automatically added to the generated code)");Wb=E;Pb();b=b||Module.stdin;c=c||Module.stdout;d=d||Module.stderr;var f=E,h=E,j=E;b||(f=G,b=function(){if(!b.k||!b.k.length){var c;"undefined"!=typeof window&&"function"== +typeof window.prompt?(c=window.prompt("Input: "),c===F&&(c=String.fromCharCode(0))):"function"==typeof readline&&(c=readline());c||(c="");b.k=db(c+"\n",E)}return b.k.shift()});var g=new Ba;c||(h=G,c=e);c.i||(c.i=Module.print);c.buffer||(c.buffer=[]);d||(j=G,d=e);d.i||(d.i=Module.print);d.buffer||(d.buffer=[]);try{Rb("/","tmp",E,E)}catch(i){}var e=Rb("/","dev",E,E),l=Vb(e,"stdin",b),m=Vb(e,"stdout",F,c);d=Vb(e,"stderr",F,d);Vb(e,"tty",b,c);Jb[1]={path:"/dev/stdin",object:l,position:0,q:E,h:G,p:G,r:!f, +error:G,o:G,z:[]};Jb[2]={path:"/dev/stdout",object:m,position:0,q:G,h:E,p:G,r:!h,error:G,o:G,z:[]};Jb[3]={path:"/dev/stderr",object:d,position:0,q:G,h:E,p:G,r:!j,error:G,o:G,z:[]};wa(128>Math.max(Fb,Gb,ub));L[Fb>>2]=1;L[Gb>>2]=2;L[ub>>2]=3;Sb("/","dev/shm/tmp",E,E);for(f=Jb.length;f>g-6&63,g=g-6,d=d+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[j]}2==g?(d+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[(e&3)<<4],d+="=="):4==g&&(d+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[(e&15)<<2],d+="=");l.src="data:audio/x-"+c.substr(-3)+";base64,"+d;f(l)}};l.src=j;setTimeout(function(){f(l)},1E4)}else return g()}})}for(var k, +n=[b,c],q=n[0],v=1;vj.status||304===j.status||da(Error("Couldn't load "+d+". Status: "+j.status));var g=Number(j.getResponseHeader("Content-length")), +i,l=1048576;if(!((i=j.getResponseHeader("Accept-Ranges"))&&"bytes"===i))l=g;var m=new h(l,g);m.J(function(b){var c=b*m.n,e=(b+1)*m.n-1,e=Math.min(e,g-1);if("undefined"===typeof m.f[b]){var f=m.f;c>e&&da(Error("invalid range ("+c+", "+e+") or no bytes requested!"));e>g-1&&da(Error("only "+g+" bytes available! programmer error!"));var h=new XMLHttpRequest;h.open("GET",d,G);g!==l&&h.setRequestHeader("Range","bytes="+c+"-"+e);"undefined"!=typeof Uint8Array&&(h.responseType="arraybuffer");h.overrideMimeType&& +h.overrideMimeType("text/plain; charset=x-user-defined");h.send(F);200<=h.status&&300>h.status||304===h.status||da(Error("Couldn't load "+d+". Status: "+h.status));c=h.response!==a?new Uint8Array(h.response||[]):db(h.responseText||"",E);f[b]=c}"undefined"===typeof m.f[b]&&da(Error("doXHR failed!"));return m.f[b]});h={b:G,a:m}}else h={b:G,url:d};return Tb(b,c,h,e,f)};Module.FS_createLink=function(b,c,d,e,f){return Tb(b,c,{b:G,link:d},e,f)};Module.FS_createDevice=Vb;Db(0);Q(12,"void*",Za); +Module.requestFullScreen=function(){function b(){}function c(){var b=G;if((document.webkitFullScreenElement||document.webkitFullscreenElement||document.mozFullScreenElement||document.mozFullscreenElement||document.fullScreenElement||document.fullscreenElement)===d)d.I=d.requestPointerLock||d.mozRequestPointerLock||d.webkitRequestPointerLock,d.I(),b=E;if(Module.onFullScreen)Module.onFullScreen(b)}var d=Module.canvas;document.addEventListener("fullscreenchange",c,G);document.addEventListener("mozfullscreenchange", +c,G);document.addEventListener("webkitfullscreenchange",c,G);document.addEventListener("pointerlockchange",b,G);document.addEventListener("mozpointerlockchange",b,G);document.addEventListener("webkitpointerlockchange",b,G);d.H=d.requestFullScreen||d.mozRequestFullScreen||(d.webkitRequestFullScreen?function(){d.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT)}:F);d.H()}; +Module.requestAnimationFrame=function(b){window.requestAnimationFrame||(window.requestAnimationFrame=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame||window.oRequestAnimationFrame||window.setTimeout);window.requestAnimationFrame(b)};Module.pauseMainLoop=function(){};Module.resumeMainLoop=function(){hc&&(hc=G,F())};var za=[0,0,mc,0,nc,0,oc,0,pc,0,qc,0,rc,0,sc,0,tc,0,uc,0]; +function vc(b,c){var d=0,d=24*c&-1,c=L[b+8>>2];return 0==J[c+(d|1)|0]<<24>>24&&0==J[c+(d|2)|0]<<24>>24?0:d=Ha[d+(c+21)|0]+3|0} +function wc(b,c,d){var e,f,h,j,g,i,l,m,k,n,q,v,u,s,r,p,y,w,t,x,z;e=0;f=I;I=I+108|0;h=f>>2;j=f+36;if(1024>(d-c|0)>>>0){if(c>>>0>>0)g=1E30,l=i=c;else return I=f,c;for(;;)if(k=xc(l,b),n=(c=kl>>>0)return I=f,c;i=j|0;g=c;q=d;d=1E30;n=c;for(c=l;;){l=Math.floor((c>>>0)/10);k=l+g|0;L[h]=k;c=xc(k,b);k=j|0;La[M>>3]=c;L[k>>2]=L[M>>2];L[k+4>>2]=L[M+4>>2];k=(l<<1)+g|0;L[h+1]=k;c=xc(k,b);k=j+8|0;La[M>>3]=c;L[k>>2]=L[M>>2]; +L[k+4>>2]=L[M+4>>2];k=(3*l&-1)+g|0;L[h+2]=k;c=xc(k,b);k=j+16|0;La[M>>3]=c;L[k>>2]=L[M>>2];L[k+4>>2]=L[M+4>>2];k=(l<<2)+g|0;L[h+3]=k;c=xc(k,b);k=j+24|0;La[M>>3]=c;L[k>>2]=L[M>>2];L[k+4>>2]=L[M+4>>2];k=(5*l&-1)+g|0;L[h+4]=k;c=xc(k,b);k=j+32|0;La[M>>3]=c;L[k>>2]=L[M>>2];L[k+4>>2]=L[M+4>>2];k=(6*l&-1)+g|0;L[h+5]=k;c=xc(k,b);k=j+40|0;La[M>>3]=c;L[k>>2]=L[M>>2];L[k+4>>2]=L[M+4>>2];k=(7*l&-1)+g|0;L[h+6]=k;c=xc(k,b);k=j+48|0;La[M>>3]=c;L[k>>2]=L[M>>2];L[k+4>>2]=L[M+4>>2];k=(l<<3)+g|0;L[h+7]=k;c=xc(k,b);k= +j+56|0;La[M>>3]=c;L[k>>2]=L[M>>2];L[k+4>>2]=L[M+4>>2];k=(9*l&-1)+g|0;L[h+8]=k;l=xc(k,b);k=j+64|0;La[M>>3]=l;L[k>>2]=L[M>>2];L[k+4>>2]=L[M+4>>2];k=(L[M>>2]=L[i>>2],L[M+4>>2]=L[i+4>>2],La[M>>3]);l=j+8|0;c=(L[M>>2]=L[l>>2],L[M+4>>2]=L[l+4>>2],La[M>>3]);v=(l=c>2]=L[k>>2],L[M+4>>2]=L[k+4>>2],La[M>>3]);u=(k=c>2]=L[v>>2],L[M+4>>2]=L[v+4>>2],La[M>>3]);s=(v=c>2]=L[u>>2],L[M+4>>2]=L[u+4>>2],La[M>>3]);r=(u=c>2]=L[s>> +2],L[M+4>>2]=L[s+4>>2],La[M>>3]);p=(s=c>2]=L[r>>2],L[M+4>>2]=L[r+4>>2],La[M>>3]);y=(r=c>2]=L[p>>2],L[M+4>>2]=L[p+4>>2],La[M>>3]);w=(p=c>2]=L[y>>2],L[M+4>>2]=L[y+4>>2],La[M>>3]);k=(y=cd){m=n;e=30;break}0==(k|0)?(t=g,e=25):(w=L[(k-1<<2>>2)+h],8==(k|0)?(x=q,z=w):(t=w,e=25));25==e&&(e=0,x=L[(k+1<<2>>2)+h],z=t);w=L[(k<<2>>2)+h];c=x-z|0;if(10>c>>>0){m=w;e=32;break}else g=z,q=x,d=l,n=w}if(30== +e||32==e)return I=f,m}function xc(b,c){var d;d=c+4|0;return yc(L[c>>2],L[d>>2],L[c+12>>2],b,2)+yc(L[c>>2],L[d>>2],b,L[c+16>>2],2)}function zc(b,c){var d,e,f,h,j;d=b<<1;e=R(d);f=c|0;L[f>>2]=e;e=R(d);d=c+4|0;L[d>>2]=e;e=24*b&-1;h=R(e);j=c+8|0;L[j>>2]=h;a:do if(0!=(b|0)){for(h=0;!(K[L[f>>2]+(h<<1)>>1]=1,c=h+1|0,(c|0)==(b|0));)h=c;if(0!=(b|0))for(h=0;;)if(K[L[d>>2]+(h<<1)>>1]=0,h=h+1|0,(h|0)==(b|0))break a}while(0);if(0!=(e|0)){e=24*b&-1;for(b=0;!(J[L[j>>2]+b|0]=0,h=b+1|0,(h|0)==(e|0));)b=h}} +function Ac(b){Z(L[b>>2]);Z(L[b+4>>2]);Z(L[b+8>>2])} +function Bc(b,c,d,e,f,h,j){var g,i,l,m,k,n,q,v,u,s,r,p,y,w,t,x;g=0;i=I;I=I+28|0;l=i>>2;m=i+4;k=m>>2;n=i+8;if(!(10>e>>>0)){q=R(e);0==(q|0)&&wb();0!=(e|0)&&bc(q,e);L[l]=0;L[k]=e;v=0==(f|0);u=n|0;s=n+4|0;r=n+8|0;p=n+12|0;y=n+16|0;w=n;for(n=1;v|n>>>0>>0;){L[u>>2]=c;L[s>>2]=d;L[r>>2]=e;L[p>>2]=L[l];L[y>>2]=L[k];L[l]>>>0>=L[k]>>>0&&V(5245952,252,5246684,5245936);t=wc(w,L[l]+1|0,L[k]);t>>>0<=L[l]>>>0&&V(5245952,255,5246684,5245188);t>>>0>=L[k]>>>0&&V(5245952,256,5246684,5245036);if(yc(c,d,L[l],t,2)+yc(c, +d,t,L[k],2)>yc(c,d,L[l],L[k],2))g=146;else if((t|0)==(L[l]+1|0)|(t|0)==(L[k]|0))g=146;else{x=t;t=h;var z=j,A=a,B=a,C=a,D=a,A=z>>2,z=t>>2;t=0;B=L[A];0==(B-1&B|0)&&(C=0==(B|0)?R(4):Cc(L[z],B<<3),L[z]=C);L[L[z]+(L[A]<<2)>>2]=x;C=L[A]+1|0;L[A]=C;if(0!=(C|0)){C=L[A]-1|0;for(A=0;;){if(A>>>0>=C>>>0){t=49;break}if(L[L[z]+(A<<2)>>2]>>>0>x>>>0)break;else A=A+1|0}if(49!=t){a:do if(C>>>0>A>>>0)for(t=C;;)if(B=t-1|0,D=L[z],L[D+(t<<2)>>2]=L[D+(B<<2)>>2],B>>>0>A>>>0)t=B;else break a;while(0);L[L[z]+(A<<2)>>2]=x}}x= +n+1|0}146==g&&(g=0,J[q+L[l]|0]=1,x=n);n=e;t=q;for(var z=L[h>>2],A=L[j>>2],B=i,C=m,H=D=a,N=a,O=a,X=a,$=a,O=N=a,D=n-1|0,N=H=n=0;!(O=0==(n|0)?0:L[z+(n-1<<2)>>2],X=(n|0)==(A|0)?D:L[z+(n<<2)>>2],0==J[t+O|0]<<24>>24?($=X-O|0,$>>>0<=N>>>0?O=H:(L[B>>2]=O,L[C>>2]=X,N=$,O=1)):O=H,$=n+1|0,$>>>0>A>>>0);)n=$,H=O;if(0==(O|0))break;if(10>(L[k]-L[l]|0)>>>0)break;else n=x}if(0!=(L[b>>2]|0)){var b=L[h>>2],f=L[j>>2],Y,S,U,ea,j=I;a:do if(0==(f|0)|0==(e|0))S=Y=0;else for(k=g=h=m=0;;){l=0==K[d+(h<<1)>>1]<<16>>16?1:Ia[c+ +(h<<1)>>1];if((L[b+(m<<2)>>2]|0)==(h|0))if(0==(m-1&m|0)&&(k=0==(m|0)?R(4):Cc(k,m<<3)),v=k,L[v+(m<<2)>>2]=g,k=m+1|0,(k|0)==(f|0)){Y=v;S=k;break a}else m=k;else v=k;k=h+1|0;if(k>>>0>>0)h=k,g=l+g|0,k=v;else{Y=v;S=m;break a}}while(0);(S|0)!=(f|0)&&V(5245952,172,5246800,5244604);Yb(5244428,20,1,L[ub>>2]);f=L[ub>>2];if(0==(S|0))Yb(5244212,5,1,f),U=L[ub>>2];else{c=0;for(d=f;!(Zb(d,5244328,(Na=I,I=I+4|0,L[Na>>2]=L[Y+(c<<2)>>2],Na)),f=c+1|0,ea=L[ub>>2],(f|0)==(S|0));)c=f,d=ea;Yb(5244212,5,1,ea);ea=L[ub>> +2];if(0==(S|0))U=ea;else for(c=0;;)if(Zb(ea,5244156,(Na=I,I=I+4|0,L[Na>>2]=L[Y+(c<<2)>>2],Na)),ea=c+1|0,d=L[ub>>2],(ea|0)==(S|0)){U=d;break}else c=ea,ea=d}Yb(5245932,2,1,U);Z(Y);I=j}Z(q)}I=i} +function Dc(b,c){var d,e,f;d=b>>2;for(b=0;;)if(L[(b<<2>>2)+d]=8,e=b+1|0,144==(e|0)){f=144;break}else b=e;for(;!(L[(f<<2>>2)+d]=9,b=f+1|0,256==(b|0));)f=b;L[d+256]=7;L[d+257]=7;L[d+258]=7;L[d+259]=7;L[d+260]=7;L[d+261]=7;L[d+262]=7;L[d+263]=7;L[d+264]=7;L[d+265]=7;L[d+266]=7;L[d+267]=7;L[d+268]=7;L[d+269]=7;L[d+270]=7;L[d+271]=7;L[d+272]=7;L[d+273]=7;L[d+274]=7;L[d+275]=7;L[d+276]=7;L[d+277]=7;L[d+278]=7;L[d+279]=7;L[d+280]=8;L[d+281]=8;L[d+282]=8;L[d+283]=8;L[d+284]=8;L[d+285]=8;L[d+286]=8;L[d+287]= +8;for(d=0;!(L[c+(d<<2)>>2]=5,f=d+1|0,32==(f|0));)d=f}function Ec(b){var c,d,e,f;c=b>>2;for(e=d=b=0;!(30<=(d|0));)if(f=(0!=(L[(d<<2>>2)+c]|0)&1)+e|0,1<(f|0)){b=172;break}else d=d+1|0,e=f;172!=b&&(1==(e|0)?L[((0!=(L[c]|0)&1)<<2>>2)+c]=1:0==(e|0)&&(L[c+1]=1,L[c]=1))} +function yc(b,c,d,e,f){var h,j,g,i,l;h=I;I=I+2560|0;j=h+1280;g=h+2432;2<=(f-1|0)>>>0&&V(5245480,324,5246628,5245732);if(1==(f|0))Dc(j|0,g|0),f=3;else{f=h|0;i=h+1152|0;Fc(b,c,d,e,f,i);l=j|0;Gc(f,288,15,l);f=g|0;Gc(i,32,15,f);Ec(f);var m,k;i=I;I=I+12|0;m=i+4;k=i+8;L[i>>2]=0;L[m>>2]=0;J[k]=0;Hc(l,f,k,i,m);Z(L[i>>2]);I=i;f=((J[k]&7|L[m>>2]<<3)>>>0)+3}j|=0;i=d;var n;if(i>>>0>>0){k=0;for(d=i;;)if(i=K[c+(d<<1)>>1],m=Ia[b+(d<<1)>>1],0==i<<16>>16?i=L[j+(m<<2)>>2]+k|0:(l=(Ic(m)<<2)+j|0,k=L[l>>2]+k|0,l=i& +65535,i=(Jc(l)<<2)+(g|0)|0,i=((k+L[i>>2]|0)+L[(m<<2)+5248140>>2]|0)+Kc(l)|0),l=d+1|0,(l|0)==(e|0)){n=i;break}else k=i,d=l}else n=0;b=L[(j+1024|0)>>2]+n|0;I=h;return f+(b>>>0)} +function Lc(b,c,d,e,f,h,j,g){var i,l,m,k,n,q,v,u;i=I;I=I+40|0;l=i+16;m=l>>2;k=i+28;n=k>>2;q=f-e|0;Mc(l);v=i|0;L[v>>2]=b;L[i+8>>2]=e;L[i+12>>2]=f;b=R(12);u=(i+4|0)>>2;L[u]=b;zc(q,b);Nc(i,d,e,f,l);b=(l+8|0)>>2;1E3>L[b]>>>0?(Mc(k),Oc(i,d,e,f,k),d=yc(L[m],L[m+1],0,L[b],2),yc(L[n],L[n+1],0,L[n+2],1)>2,e=k>>2,L[d]=L[e],L[d+1]=L[e+1],L[d+2]=L[e+2],d=1):(Pc(k),d=2)):d=2;Qc(L[v>>2],d,c,L[m],L[m+1],0,L[b],q,h,j,g);Ac(L[u]);Z(L[u]);Pc(l);I=i} +function Qc(b,c,d,e,f,h,j,g,i,l,m){var k,n,q,v,u,s,r,p,y,w;k=0;n=I;I=I+3840|0;q=n+1152;v=n+1280;u=n+2432;s=n+2560;r=n+3712;Rc(d,i,l,m);Rc(c&1,i,l,m);Rc(c>>>1&1,i,l,m);1==(c|0)?Dc(v|0,u|0):(2!=(c|0)&&V(5245480,386,5246948,5245152),k=292);a:do if(292==k){c=n|0;d=q|0;Fc(e,f,h,j,c,d);p=v|0;Gc(c,288,15,p);c=u|0;Gc(d,32,15,c);Ec(c);d=L[m>>2];Hc(p,c,i,l,m);0!=(L[b>>2]|0)&&Zb(L[ub>>2],5244852,(Na=I,I=I+4|0,L[Na>>2]=L[m>>2]-d|0,Na));for(c=0;;)if(0!=(L[n+(c<<2)>>2]|0)&&0==(L[v+(c<<2)>>2]|0)&&V(5245480,399, +5246948,5244680),d=c+1|0,288==(d|0)){y=0;break}else c=d;for(;;)if(0!=(L[q+(y<<2)>>2]|0)&&0==(L[u+(y<<2)>>2]|0)&&V(5245480,400,5246948,5244564),d=y+1|0,32==(d|0))break a;else y=d}while(0);y=v|0;q=s|0;Sc(y,288,15,q);c=u|0;u=r|0;Sc(c,32,15,u);r=L[m>>2];k=j;d=i;p=l;var t,x,z,A,B,C,D,H,N;a:do if(h>>>0>>0){t=h;for(x=0;;)if(z=K[f+(t<<1)>>1],A=z&65535,B=K[e+(t<<1)>>1],C=B&65535,0==z<<16>>16?(256<=(B&65535)&&V(5245480,256,5246936,5244264),z=(C<<2)+y|0,0==(L[z>>2]|0)&&V(5245480,257,5246936,5244188),Tc(L[q+ +(C<<2)>>2],L[z>>2],d,p,m),x=x+1|0):(z=Ic(C),D=Jc(A),286<=(B-3&65535)&&V(5245480,263,5246936,5244124),B=(z<<2)+y|0,0==(L[B>>2]|0)&&V(5245480,264,5246936,5245912),H=(D<<2)+c|0,0==(L[H>>2]|0)&&V(5245480,265,5246936,5245780),Tc(L[q+(z<<2)>>2],L[B>>2],d,p,m),Uc(L[(C<<2)+5249176>>2],L[(C<<2)+5248140>>2],d,p,m),Tc(L[u+(D<<2)>>2],L[H>>2],d,p,m),z=z=a,5>(A|0)?z=0:(z=dc(A-1|0)^31,z=(1<>2],L[v+1024>>2],i,l,m);a:do if(h>>>0>>0){l=0;for(i=h;;)if(g=0==K[f+(i<<1)>>1]<<16>>16?1:Ia[e+(i<<1)>>1],v=g+l|0,s=i+1|0,(s|0)==(j|0)){w=v;break a}else l=v,i=s}else w=0;while(0);j=L[m>>2]-r|0;0!=(L[b>>2]|0)&&Zb(L[ub>>2],5244384,(Na=I,I=I+12|0,L[Na>>2]=j,L[Na+4>>2]=j>>>10,L[Na+8>>2]=w,Na));I=n} +function Rc(b,c,d,e){var f;f=e>>2;0==(J[c]&7)<<24>>24&&(e=L[f],0==(e-1&e|0)&&(e=0==(e|0)?R(1):Cc(L[d>>2],e<<1),L[d>>2]=e),J[L[d>>2]+L[f]|0]=0,L[f]=L[f]+1|0);e=L[d>>2]+(L[f]-1)|0;J[e]=(Ha[e]|b<<(J[c]&7))&255;J[c]=J[c]+1&255} +function Hc(b,c,d,e,f){var h,j,g,i,l,m,k,n,q,v,u,s,r,p,y,w,t,x,z,A,B,C,D,H,N,O,X,$,Y,S,U,ea,T,ga,ba,ja,ia,ca,aa,ta,Ca,xa,ua,Pa,fb;h=0;j=I;g=I=I+76|0;i=I=I+76|0;I=I+76|0;l=29;for(m=316;;){if(0==(l|0)){k=29;n=m;break}if(0==(L[b+(l+256<<2)>>2]|0))l=l-1|0,m=m-1|0;else{k=29;n=m;break}}for(;0!=(k|0);)if(0==(L[c+(k<<2)>>2]|0))k=k-1|0,n=n-1|0;else break;m=l+257|0;q=k+(l+258)|0;v=R(q<<2);u=v>>2;0==(v|0)&&wb();a:do if(0==(q|0))h=429;else{s=-257-l|0;for(r=0;!(p=r>>>0>>0?(r<<2)+b|0:(s+r<<2)+c|0,p=L[p>>2], +L[(r<<2>>2)+u]=p,16<=p>>>0&&V(5245480,134,5246964,5245640),p=r+1|0,(p|0)==(n|0));)r=p;if(0==(q|0))h=429;else{for(z=x=t=w=y=0;;){do if(z>>>0>>0){r=L[(z<<2>>2)+u];s=z;for(p=0;;){if((r|0)!=(L[(s<<2>>2)+u]|0)){A=p;break}B=p+1|0;C=s+1|0;if(C>>>0>>0)s=C,p=B;else{A=B;break}}if(3>=A>>>0){if(2>=A>>>0){h=415;break}if(0!=(L[(z<<2>>2)+u]|0)){h=415;break}}p=((z<<2)+v|0)>>2;do if(0==(L[p]|0))10>>0?(s=138>>0?138:A,D=0==(t-1&t|0)?r=0==(t|0)?R(4):Cc(y,t<<3):y,L[D+(t<<2)>>2]=18,r=t+1|0,H=0==(x-1&x|0)?B= +0==(x|0)?R(4):Cc(w,x<<3):w,L[H+(x<<2)>>2]=s-11|0):(D=0==(t-1&t|0)?r=0==(t|0)?R(4):Cc(y,t<<3):y,L[D+(t<<2)>>2]=17,r=t+1|0,H=0==(x-1&x|0)?B=0==(x|0)?R(4):Cc(w,x<<3):w,L[H+(x<<2)>>2]=A-3|0,s=A),B=x+1|0,C=H,N=D;else{r=A-1|0;O=0==(t-1&t|0)?B=0==(t|0)?R(4):Cc(y,t<<3):y;L[O+(t<<2)>>2]=L[p];X=0==(x-1&x|0)?B=0==(x|0)?R(4):Cc(w,x<<3):w;L[X+(x<<2)>>2]=0;s=x+1|0;B=t+1|0;b:do if(5>>0){C=O;$=X;Y=t;N=x;S=r;D=s;for(H=B;;)if(0==(H&Y|0)&&(C=0==(H|0)?R(4):Cc(C,H<<3)),L[C+(H<<2)>>2]=16,N=0==(D&N|0)?0==(D|0)?R(4): +Cc($,D<<3):$,L[N+(D<<2)>>2]=3,S=S-6|0,U=D+1|0,ea=H+1|0,5>>0)$=N,Y=H,N=D,D=U,H=ea;else{T=C;ga=N;ba=H;ja=D;ia=S;ca=U;aa=ea;break b}}else T=O,ga=X,ba=t,ja=x,ia=r,ca=s,aa=B;while(0);2>>0?(r=0==(aa&ba|0)?0==(aa|0)?R(4):Cc(T,aa<<3):T,L[r+(aa<<2)>>2]=16,B=ba+2|0,s=0==(ca&ja|0)?0==(ca|0)?R(4):Cc(ga,ca<<3):ga,L[s+(ca<<2)>>2]=0,C=ia-3|0,H=ja+2|0,O=B,D=s,S=r):(C=ia,H=ca,O=aa,D=ga,S=T);if(0==(C|0))s=A,B=H,r=O,C=D,N=S;else{B=C+H|0;s=S;r=D;D=O;for(S=C;!(ta=0==(D-1&D|0)?0==(D|0)?R(4):Cc(s,D<<3):s,L[ta+(D<< +2)>>2]=L[p],N=D+1|0,Ca=0==(H-1&H|0)?0==(H|0)?R(4):Cc(r,H<<3):r,L[Ca+(H<<2)>>2]=0,Y=S-1|0,0==(Y|0));)s=ta,r=Ca,D=N,H=H+1|0,S=Y;s=A;r=C+O|0;C=Ca;N=ta}}while(0);D=z-1+s|0;H=B;S=r;O=C}else h=415;while(0);415==h&&(h=0,0==(t-1&t|0)&&(y=p=0==(t|0)?R(4):Cc(y,t<<3)),L[y+(t<<2)>>2]=L[(z<<2>>2)+u],p=t+1|0,0==(x-1&x|0)&&(w=0==(x|0)?R(4):Cc(w,x<<3)),L[w+(x<<2)>>2]=0,D=z,H=x+1|0,S=p,O=w,N=y);19<=L[N+(S-1<<2)>>2]>>>0&&V(5245480,178,5246964,5245568);p=D+1|0;if(p>>>0>>0)y=N,w=O,t=S,x=H,z=p;else break}p=j>>2;for(x= +p+19;p>2,fb=N;else for(x=0;;)if(p=(L[N+(x<<2)>>2]<<2)+j|0,L[p>>2]=L[p>>2]+1|0,p=x+1|0,(p|0)==(S|0)){xa=S;ua=O;Pa=ua>>2;fb=N;break a}else x=p}}while(0);if(429==h){p=j>>2;for(x=p+19;p>2;fb=0}p=g|0;Gc(j|0,19,7,p);Sc(p,19,7,i|0);p=15;for(x=19;0!=(p|0);)if(0==(L[j+(L[(p+3<<2)+5250332>>2]<<2)>>2]|0))p=p-1|0,x=x-1|0;else break;Uc(l,5,d,e,f);Uc(k,5,d,e,f);Uc(p,4,d,e,f);a:do if(-4!=(p|0))for(k=0;;)if(Uc(L[g+(L[(k<<2)+5250332>>2]<<2)>>2], +3,d,e,f),l=k+1|0,(l|0)==(x|0))break a;else k=l;while(0);if(0!=(xa|0))for(b=0;!(x=(b<<2)+fb|0,p=L[x>>2],Tc(L[i+(p<<2)>>2],L[g+(p<<2)>>2],d,e,f),p=L[x>>2],16==(p|0)?Uc(L[(b<<2>>2)+Pa],2,d,e,f):17==(p|0)?Uc(L[(b<<2>>2)+Pa],3,d,e,f):18==(p|0)&&Uc(L[(b<<2>>2)+Pa],7,d,e,f),p=b+1|0,(p|0)==(xa|0));)b=p;Z(v);Z(fb);Z(ua);I=j} +function Tc(b,c,d,e,f){var h,j,g,i;h=f>>2;if(0!=(c|0)){f=c-1|0;for(j=0;!(g=b>>>((f-j|0)>>>0)&1,0==(J[d]&7)<<24>>24&&(i=L[h],0==(i-1&i|0)&&(i=0==(i|0)?R(1):Cc(L[e>>2],i<<1),L[e>>2]=i),J[L[e>>2]+L[h]|0]=0,L[h]=L[h]+1|0),i=L[e>>2]+(L[h]-1)|0,J[i]=(Ha[i]|g<<(J[d]&7))&255,J[d]=J[d]+1&255,g=j+1|0,(g|0)==(c|0));)j=g}} +function Uc(b,c,d,e,f){var h,j,g;h=f>>2;if(0!=(c|0))for(j=0;!(f=b>>>(j>>>0)&1,0==(J[d]&7)<<24>>24&&(g=L[h],0==(g-1&g|0)&&(g=0==(g|0)?R(1):Cc(L[e>>2],g<<1),L[e>>2]=g),J[L[e>>2]+L[h]|0]=0,L[h]=L[h]+1|0),g=L[e>>2]+(L[h]-1)|0,J[g]=(Ha[g]|f<<(J[d]&7))&255,J[d]=J[d]+1&255,f=j+1|0,(f|0)==(c|0));)j=f}function sc(b,c){return L[b>>2]-L[c>>2]|0}function Vc(b,c){var d;d=b+12|0;L[d>>2]=L[d>>2]<<5&32736^c&255} +function Wc(b,c,d){var e,f,h,j,g,i,l;e=(d+4|0)>>2;f=(d+8|0)>>2;h=(d|0)>>2;d=0==(b|0);j=c<<1;for(g=c<<1;;){if(L[e]>>>0>=((L[f]<<4)+L[h]|0)>>>0){a:do if(0<(L[f]|0))for(c=0;;)if(J[(c<<4)+L[h]+12|0]=0,i=c+1|0,(i|0)<(L[f]|0))c=i;else break a;while(0);a:do if(!(d|1>(j|0)))for(c=0;;){i=L[b+(((c|0)/2&-1)<<3)+((c|0)%2<<2)>>2];b:do if(0!=(i|0))for(l=i;;)if(J[l+12|0]=1,l=L[l+4>>2],0==(l|0))break b;while(0);i=c+1|0;if((i|0)==(g|0))break a;else c=i}while(0);L[e]=L[h]}i=L[e];c=0==J[i+12|0]<<24>>24;L[e]=i+16|0; +if(c)break}return i}function Xc(b,c,d,e){L[e>>2]=b;L[e+8>>2]=c;L[e+4>>2]=d;J[e+12|0]=1}function Mc(b){L[b+8>>2]=0;L[b>>2]=0;L[b+4>>2]=0} +function Yc(b){var c,d,e,f,h,j;L[b+12>>2]=0;c=R(262144);d=b|0;L[d>>2]=c;c=65536;e=R(c);f=b+4|0;L[f>>2]=e;e=131072;h=R(e);j=b+8|0;L[j>>2]=h;for(h=0;!(L[L[d>>2]+(h<<2)>>2]=-1,h=h+1|0,65536==(h|0)););a:do for(h=0;;)if(K[L[f>>2]+(h<<1)>>1]=h&65535,L[L[j>>2]+(h<<2)>>2]=-1,d=h+1|0,32768==(d|0))break a;else h=d;while(0);j=R(c);f=b+32|0;L[f>>2]=j;a:do for(j=0;;)if(K[L[f>>2]+(j<<1)>>1]=0,h=j+1|0,32768==(h|0))break a;else j=h;while(0);L[b+28>>2]=0;f=R(262144);j=b+16|0;L[j>>2]=f;f=R(c);c=b+20|0;L[c>>2]=f;f= +R(e);e=b+24|0;L[e>>2]=f;for(f=0;!(L[L[j>>2]+(f<<2)>>2]=-1,b=f+1|0,65536==(b|0));)f=b;for(b=0;!(K[L[c>>2]+(b<<1)>>1]=b&65535,L[L[e>>2]+(b<<2)>>2]=-1,f=b+1|0,32768==(f|0));)b=f}function Zc(b){b>>=2;Z(L[b]);Z(L[b+1]);Z(L[b+2]);Z(L[b+4]);Z(L[b+5]);Z(L[b+6]);Z(L[b+8])} +function $c(b,c,d,e){var f,h,j,g,i,l,m,k;f=0;h=c&32767;j=(c+3|0)>>>0>d>>>0?0:J[c+(b+2)|0];Vc(e,j);j=(e+12|0)>>2;g=h&65535;i=e+8|0;L[L[i>>2]+(g<<2)>>2]=L[j];l=L[j];m=e|0;k=L[L[m>>2]+(l<<2)>>2];-1==(k|0)?f=639:(L[L[i>>2]+(k<<2)>>2]|0)!=(l|0)?f=639:K[L[e+4>>2]+(g<<1)>>1]=k&65535;639==f&&(K[L[e+4>>2]+(g<<1)>>1]=h);L[L[m>>2]+(L[j]<<2)>>2]=g;m=(e+32|0)>>2;f=K[L[m]+((c+32767&32767)<<1)>>1];i=1<(f&65535)?(f&65535)-1|0:0;f=c+1|0;k=b+c|0;for(c=i;;){i=f+c|0;if(i>>>0>=d>>>0)break;if(J[k]<<24>>24==J[b+i|0]<<24>> +24&65535>c>>>0)c=c+1|0;else break}K[L[m]+(g<<1)>>1]=c&65535;c=Ia[L[m]+(g<<1)>>1]+253&255^L[j];j=(e+28|0)>>2;L[j]=c;m=e+24|0;L[L[m>>2]+(g<<2)>>2]=c;c=L[j];b=(e+16|0)>>2;k=L[L[b]+(c<<2)>>2];K[L[e+20>>2]+(g<<1)>>1]=-1!=(k|0)&&(L[L[m>>2]+(k<<2)>>2]|0)==(c|0)?k&65535:h;L[((L[j]<<2)+L[b]|0)>>2]=g}function ad(b,c,d){Vc(d,J[b+c|0]);Vc(d,J[c+(b+1)|0])} +function bd(b,c,d,e,f,h,j){var g,i,l,m,k,n,q,v,u,s,r;g=0;i=(h<<3)+b+4|0;l=L[L[i>>2]+8>>2];m=0==(h|0);k=(l|0)<(e|0);if(k|m^1){n=j;q=i;v=l;l=m;for(j=k;;){u=Wc(b,c,f);s=L[q>>2];L[b+(h<<3)>>2]=s;L[q>>2]=u;if(l){g=681;break}k=h-1|0;m=(k<<3)+b+4|0;l=L[L[m>>2]>>2]+L[L[b+(k<<3)>>2]>>2]|0;if(j&&(r=L[d+(v<<4)>>2],l>>>0>r>>>0)){g=684;break}Xc(l,v,L[m>>2],u);if(0!=n<<24>>24){g=690;break}bd(b,c,d,e,f,k,0);m=(k<<3)+b+4|0;l=L[L[m>>2]+8>>2];i=0==(k|0);j=(l|0)<(e|0);if(j|i^1)h=k,n=0,q=m,v=l,l=i;else{g=691;break}}681== +g?Xc(L[d+(v<<4)>>2],v+1|0,0,u):684==g&&Xc(r,v+1|0,L[s+4>>2],u)}}function Pc(b){Z(L[b>>2]);Z(L[b+4>>2])}function cd(b,c,d){var e,f,h,j,g;e=d>>2;f=(d+8|0)>>2;d=L[f];(h=0!=(d-1&d|0))?(K[L[e]+(d<<1)>>1]=b,L[f]=L[f]+1|0):(g=(j=0==(d|0))?R(2):Cc(L[e],d<<2),L[e]=g,K[g+(L[f]<<1)>>1]=b,L[f]=L[f]+1|0,h||(b=j?R(2):Cc(L[e+1],d<<2),L[e+1]=b));K[L[e+1]+(d<<1)>>1]=c} +function dd(b,c,d,e,f){var h;h=0;f&=65535;(f+d|0)>>>0>c>>>0&&V(5244924,87,5246480,5245612);c=d-(e&65535)|0;for(e=0;;){if(e>>>0>=f>>>0){h=713;break}if(J[b+c+e|0]<<24>>24==J[b+e+d|0]<<24>>24)e=e+1|0;else break}713!=h&&V(5244924,90,5246480,5245112)} +function ed(b,c,d,e,f,h,j,g,i){var l,m,k,n,q,v,u,s,r,p,y,w,t,x,z,A,B,C,D,H,N,O,X,$,Y,S,U,ea,T,ga,ba;l=I;I=I+4|0;m=l;k=m>>2;L[k]=h;h=e&32767;n=L[c>>2];q=L[c+4>>2];v=L[c+8>>2];u=L[c+12>>2];if(0!=(fd(b,e,m,j,g,i)|0))(Ia[i>>1]+e|0)>>>0<=f>>>0||V(5244924,243,5246564,5244828);else if(m=L[k],259>m>>>0?s=m:(V(5244924,248,5246564,5244652),s=L[k]),2>=s>>>0&&V(5244924,249,5246564,5244536),(s=e>>>0>>0)||V(5244924,250,5246564,5244372),m=f-e|0,3>m>>>0)K[i>>1]=0,K[g>>1]=0;else{(L[k]+e|0)>>>0>f>>>0&&(L[k]=m); +m=d+e|0;r=L[k]+e|0;p=d+r|0;y=d+(r-8)|0;65536<=(u|0)&&V(5244924,266,5246564,5244248);r=L[n+(u<<2)>>2];w=r&65535;t=K[q+(w<<1)>>1];(w|0)!=(h|0)&&V(5244924,271,5246564,5244176);x=t&65535;z=c+16|0;A=c+32|0;B=c+28|0;C=c+24|0;D=c+20|0;H=c+32|0;c=m;N=0==(j|0);O=t;t=r&65535;r=u;u=v;v=q;q=n;n=(x>>>0>>0?w:w+32768|0)-x|0;x=8192;w=0;X=1;a:for(;;){if(32768<=n>>>0){$=w;Y=X;break}S=O&65535;-1>=O<<16>>16&&V(5244924,279,5246564,5243984);O<<16>>16!=K[v+((t&65535)<<1)>>1]<<16>>16&&V(5244924,280,5246564,5245896);(L[u+ +(S<<2)>>2]|0)!=(r|0)&&V(5244924,281,5246564,5245760);do if(0==(n|0))U=w,ea=X;else if(s||V(5244924,284,5246564,5244372),n>>>0>e>>>0&&V(5244924,285,5246564,5245660),t=e-n|0,T=d+t|0,ga=X&65535,U=ga+e|0,U>>>0>>0&&J[d+U|0]<<24>>24!=J[d+t+ga|0]<<24>>24)U=w,ea=X;else{ga=L[H>>2];U=K[ga+(h<<1)>>1];2<(U&65535)?J[m]<<24>>24!=J[T]<<24>>24?ba=m:(T=K[ga+((t&32767)<<1)>>1],ba=(U&65535)<(T&65535)?U:T,T=L[k],ba=((ba&65535)>>>0>T>>>0?T&65535:ba)&65535,T=d+ba+t|0,ba=d+ba+e|0):ba=m;var ja=ga=a,ia=a,ca=t=U=a,aa=a, +ia=ja=ea=a;ga=0;c:do if(ba>>>0>>0){ja=T;for(ia=ba;;){if(J[ia]<<24>>24!=J[ja]<<24>>24){U=ia;t=ja;break c}ca=ia+1|0;aa=ja+1|0;if(J[ca]<<24>>24!=J[aa]<<24>>24){U=ca;t=aa;break c}aa=ia+2|0;ca=ja+2|0;if(J[aa]<<24>>24!=J[ca]<<24>>24){U=aa;t=ca;break c}ca=ia+3|0;aa=ja+3|0;if(J[ca]<<24>>24!=J[aa]<<24>>24){U=ca;t=aa;break c}aa=ia+4|0;ca=ja+4|0;if(J[aa]<<24>>24!=J[ca]<<24>>24){U=aa;t=ca;break c}ca=ia+5|0;aa=ja+5|0;if(J[ca]<<24>>24!=J[aa]<<24>>24){U=ca;t=aa;break c}aa=ia+6|0;ca=ja+6|0;if(J[aa]<<24>>24!=J[ca]<< +24>>24){U=aa;t=ca;break c}ca=ia+7|0;aa=ja+7|0;if(J[ca]<<24>>24!=J[aa]<<24>>24){U=ca;t=aa;break c}aa=ia+8|0;ca=ja+8|0;if(aa>>>0>>0)ja=ca,ia=aa;else{U=aa;t=ca;break c}}}else U=ba,t=T;while(0);if((U|0)==(p|0))T=ea=U;else{ja=t;for(ia=U;;){if(J[ia]<<24>>24!=J[ja]<<24>>24){ea=ia;ga=737;break}U=ia+1|0;if((U|0)==(p|0)){ea=U;ga=738;break}else ja=ja+1|0,ia=U}T=737==ga||738==ga?ea:a}T=T-c|0;t=T&65535;U=T&65535;if((t&65535)<=(X&65535))U=w,ea=X;else{b:do if(!N&&(T=X+1&65535,!((T&65535)>(t&65535)))){ga=n&65535; +for(ba=T;;)if(K[j+((ba&65535)<<1)>>1]=ga,T=ba+1&65535,(T&65535)>(t&65535))break b;else ba=T}while(0);ba=n&65535;if(U>>>0>>0)U=ba,ea=t;else{$=ba;Y=t;break a}}}while(0);ba=L[z>>2];(q|0)!=(ba|0)&&!((ea&65535)>2]+(h<<1)>>1])&&(ga=L[B>>2],T=L[C>>2],(ga|0)==(L[T+(S<<2)>>2]|0)&&(r=ga,u=T,v=L[D>>2],q=ba));ba=K[v+(S<<1)>>1];if(ba<<16>>16==O<<16>>16){$=U;Y=ea;break}T=((ba&65535)<(O&65535)?S:S+32768|0)-(ba&65535)+n|0;ga=x-1|0;if(1>(ga|0)){$=U;Y=ea;break}else t=O,O=ba,n=T,x=ga,w=U,X=ea}c=b;h=$; +m=Y;n=0;b=e-L[c+8>>2]|0;d=(c+4|0)>>2;c=L[d];s=0==(c|0)?0:0==K[L[c>>2]+(b<<1)>>1]<<16>>16?1:0!=K[L[c+4>>2]+(b<<1)>>1]<<16>>16;c=L[d];if(!(258!=(L[k]|0)|0==(c|0)|0==(j|0)|s)){1==K[L[c>>2]+(b<<1)>>1]<<16>>16?0!=K[L[c+4>>2]+(b<<1)>>1]<<16>>16&&(n=833):n=833;833==n&&V(5244924,210,5246772,5245400);n=m&65535;c=3>(m&65535);K[L[L[d]+4>>2]+(b<<1)>>1]=c?0:h;K[L[L[d]>>2]+(b<<1)>>1]=c?0:m;m=L[d];1==K[L[m>>2]+(b<<1)>>1]<<16>>16&&0==K[L[m+4>>2]+(b<<1)>>1]<<16>>16&&V(5244924,213,5246772,5245300);var c=n,d=L[d],ta, +Ca,xa,ua,h=0;m=24*b&-1;n=L[d+8>>2];if(!(3>c>>>0)){s=m|1;p=m|2;A=y=0;for(x=3;;){(x|0)==(c|0)?h=117:K[j+(x<<1)>>1]<<16>>16==K[j+(x+1<<1)>>1]<<16>>16?(ta=A,Ca=y):h=117;if(117==h)if(h=0,A=3*y&-1,J[n+A+m|0]=x+253&255,z=(x<<1)+j|0,J[n+s+A|0]=K[z>>1]&255,J[n+p+A|0]=Ia[z>>1]>>>8&255,z=y+1|0,7>>0){xa=x;h=123;break}else ta=x,Ca=z;z=x+1|0;if(z>>>0>c>>>0){h=119;break}else y=Ca,A=ta,x=z}119==h&&(8<=Ca>>>0?(xa=ta,h=123):((ta|0)!=(c|0)&&V(5245824,73,5246500,5245800),J[m+(n+21)|0]=ta+253&255,ua=ta));123==h&&(xa>>> +0<=c>>>0||V(5245824,76,5246500,5245164),ua=xa);(ua|0)!=(vc(d,b)|0)&&V(5245824,78,5246500,5244868)}}j=Y&65535;j>>>0>L[k]>>>0&&V(5244924,349,5246564,5245592);K[g>>1]=$;K[i>>1]=Y;(j+e|0)>>>0<=f>>>0||V(5244924,353,5246564,5244828)}I=l} +function fd(b,c,d,e,f,h){var j,g,i;j=h>>1;h=c-L[b+8>>2]|0;c=(b+4|0)>>2;b=L[c];if(0==(b|0)||0!=K[L[b>>2]+(h<<1)>>1]<<16>>16&&0==K[L[b+4>>2]+(h<<1)>>1]<<16>>16)return 0;b=L[d>>2];if(258==(b|0))g=0;else if(i=L[c],Ia[L[i>>2]+(h<<1)>>1]>>>0<=b>>>0)g=0;else{if(0==(e|0))return 0;g=vc(i,h)>>>0>>0}b=L[c];if(0==(b|0)|g)return 0;if(g=0!=(e|0))if(i=Ia[L[b>>2]+(h<<1)>>1],!(i>>>0<=vc(b,h)>>>0))return L[d>>2]=i,0;b=K[L[L[c]>>2]+(h<<1)>>1];K[j]=b;i=L[d>>2];(b&65535)>>>0>i>>>0&&(K[j]=i&65535);i=L[c];if(!g)return K[f>> +1]=K[L[i+4>>2]+(h<<1)>>1],1;b=i;g=h;i=Ia[j];var l,m,k,n,q,v,u,s,r,p;l=vc(b,g);if(!(3>i>>>0)){i=24*g&-1;g=L[b+8>>2];b=i|1;m=i|2;for(n=k=0;;){q=3*n&-1;v=J[g+q+i|0];u=v&255;s=u+3|0;r=Ha[g+m+q|0]<<8|Ha[g+b+q|0];a:do if(k>>>0<=s>>>0){q=(v&255)+4|0;for(p=k;;)if(K[e+(p<<1)>>1]=r,p=p+1|0,(p|0)==(q|0))break a}while(0);if((s|0)==(l|0))break;r=n+1|0;if(8>r>>>0)k=u+4|0,n=r;else break}}K[f>>1]=K[e+(Ia[j]<<1)>>1];if(258!=(L[d>>2]|0))return 1;d=K[j];if(2>=(d&65535)||K[e+((d&65535)<<1)>>1]<<16>>16==K[L[L[c]+4>>2]+ +(h<<1)>>1]<<16>>16)return 1;V(5244924,177,5246728,5245260);return 1} +function gd(b,c,d,e,f){var h,j,g,i,l,m,k,n,q,v,u,s,r,p,y,w,t,x,z,A;h=0;j=I;I=I+564|0;g=j>>1;i=j+4;l=i>>1;m=j+8;k=j+528;n=32768>>0?d-32768|0:0;if((d|0)!=(e|0)){Yc(k);ad(c,n,k);a:do if(n>>>0>>0)for(q=n;;)if($c(c,q,e,k),v=q+1|0,(v|0)==(d|0))break a;else q=v;while(0);a:do if(d>>>0>>0){n=m|0;v=q=0;u=d;for(s=0;;){$c(c,u,e,k);ed(b,k,c,u,e,258,n,i,j);r=K[g];p=r&65535;y=Ia[l];w=((1024<(y|0))<<31>>31)+p|0;if(0==(s|0))2>=(w|0)?h=859:258>(r&65535)?(t=1,x=u,z=y,A=p):h=858;else if((w|0)>((((1024<(v|0))<< +31>>31)+q|0)+1|0))cd(Ha[c+(u-1)|0],0,f),255>(w-3|0)>>>0?(t=1,x=u,z=Ia[l],A=Ia[g]):h=2<(w|0)?858:859;else{x=q&65535;K[g]=x;t=v&65535;K[l]=t;dd(c,e,u-1|0,t,x);cd(K[g],K[l],f);if(2>=Ia[g])t=0,x=u;else{x=K[g];t=x&65535;z=x&65535;x=3>>0?z:3;z=2;for(A=u;!(A>>>0>=e>>>0&&V(5244924,415,5246544,5245532),A=A+1|0,$c(c,A,e,k),z=z+1|0,!(z>>>0>>0)););t=0;x=u-2+x|0}z=v;A=q}858==h?(dd(c,e,u,K[l],K[g]),cd(K[g],K[l],f),h=860):859==h&&(K[g]=1,cd(Ha[c+u|0],0,f),h=860);do if(860==h){h=0;if(1>=Ia[g])t=0,x=u;else{w= +K[g];p=w&65535;y=w&65535;w=2>>0?y:2;y=1;for(r=u;;)if(r>>>0>=e>>>0&&V(5244924,440,5246544,5245532),A=r+1|0,$c(c,A,e,k),z=y+1|0,z>>>0

    >>0)y=z,r=A;else break;t=0;x=u-1+w|0}z=v;A=q}while(0);r=x+1|0;if(r>>>0>>0)q=A,v=z,u=r,s=t;else break a}}while(0);Zc(k)}I=j} +function Fc(b,c,d,e,f,h){var j,g,i;j=f>>2;for(g=j+288;j>2;for(g=j+32;j>>0>>0)for(i=d;!(d=(i<<1)+c|0,j=Ia[b+(i<<1)>>1],0==K[d>>1]<<16>>16?g=(j<<2)+f|0:(g=(Ic(j)<<2)+f|0,L[g>>2]=L[g>>2]+1|0,g=(Jc(Ia[d>>1])<<2)+h|0),L[g>>2]=L[g>>2]+1|0,g=i+1|0,(g|0)==(e|0));)i=g;L[(f+1024|0)>>2]=1}function hd(b){var c,d;c=(b+4|0)>>2;d=L[c];L[c]=(36969*(d&65535)&-1)+(d>>>16)|0;d=b|0;b=L[d>>2];b=(18E3*(b&65535)&-1)+(b>>>16)|0;L[d>>2]=b;return(L[c]<<16)+b|0} +function id(b,c){var d,e,f,h;d=b+8|0;if(0!=(L[d>>2]|0)){e=b+4|0;f=b|0;for(b=0;;)if(h=Ia[L[f>>2]+(b<<1)>>1],0==K[L[e>>2]+(b<<1)>>1]<<16>>16?h=(h<<2)+c|0:(h=(Ic(h)<<2)+c|0,L[h>>2]=L[h>>2]+1|0,h=(Jc(Ia[L[e>>2]+(b<<1)>>1])<<2)+c+1152|0),L[h>>2]=L[h>>2]+1|0,h=b+1|0,h>>>0>2]>>>0)b=h;else break}L[(c+1024|0)>>2]=1;jd(c)} +function kd(b,c,d,e,f,h,j,g,i,l){var m;var k=e,n,q,v,u,s,r,p,y,w,t,x,z,A,B,C,D,H,N,O,X,$,Y,S;m=I;I=I+564|0;n=m+4;q=m+8;v=m+528;u=k-d|0;s=32768>>0?d-32768|0:0;B=3;C=0;for(r=1E30;;)if(x=za[g](B,1,i),p=(z=x>2],i),C>2]):(x=A,t=y),r=w+1|0,30==(r|0));)y=t,w=r,A=x;r=za[g](p,t,i);if((d|0)==(k|0))g=0;else{p=u+1|0;w=y=R(p<<2);t=w>>2;0==(y|0)&&wb();Yc(v);ad(c,s,v);b:do if(s>>>0>>0)for(x= +s;;)if($c(c,x,k,v),z=x+1|0,(z|0)==(d|0))break b;else x=z;while(0);b:do if(1

    >>0){s=k+1-d|0;for(x=1;;)if(Ka[(x<<2>>2)+t]=1.0000000150474662E30,z=x+1|0,(z|0)==(s|0))break b;else x=z}while(0);Ka[t]=0;K[j>>1]=0;b:do if(d>>>0>>0){p=v+32|0;x=d+259|0;s=q|0;z=258-d|0;for(A=d;;){B=A-d|0;$c(c,A,k,v);C=L[p>>2];if(516>1])if(A>>>0>x>>>0&(A+517|0)>>>0>>0)if(258>=Ia[C+((A+32510&32767)<<1)>>1])D=A,H=B;else{N=za[g](258,1,i);H=z+A|0;O=B;X=0;for($=A;!(Y=O+258|0,Ka[(Y<<2>>2)+t]=N+Ka[(O<< +2>>2)+t],K[j+(Y<<1)>>1]=258,Y=$+1|0,$c(c,Y,k,v),S=X+1|0,258==(S|0));)O=O+1|0,X=S,$=Y;D=A+258|0}else D=A,H=B;else D=A,H=B;ed(b,v,c,D,k,258,s,n,m);B=D+1|0;B>>>0<=k>>>0&&(C=Ka[(H<<2>>2)+t]+za[g](Ha[c+D|0],0,i),0>C&&V(5244484,274,5246840,5244160),$=H+1|0,X=($<<2)+w|0,C>=Ka[X>>2]||(Ka[X>>2]=C,K[j+($<<1)>>1]=1));c:do if(3<=Ia[m>>1]){$=(H<<2)+w|0;C=Ia[m>>1];for(X=3;;){if((X+D|0)>>>0>k>>>0)break c;O=X+H|0;N=((O<<2)+w|0)>>2;Y=Ka[$>>2];Ka[N]-Y>r&&(S=Y+za[g](X,Ia[q+(X<<1)>>1],i),0>S&&V(5244484,289,5246840,5244160), +S>=Ka[N]||(259<=X>>>0&&V(5244484,291,5246840,5243932),Ka[N]=S,K[j+(O<<1)>>1]=X&65535));O=X+1|0;if(O>>>0>C>>>0)break c;else X=O}}while(0);if(B>>>0>>0)A=B;else break b}}while(0);k=(u<<2)+w|0;0>Ka[k>>2]&&V(5244484,298,5246840,5245872);w=Ka[k>>2];Zc(v);Z(y);g=w}I=m;m=g;Z(L[f>>2]);L[f>>2]=0;L[h>>2]=0;q=e-d|0;i=h>>2;g=f>>2;if(0!=(q|0)){for(k=q;!(q=L[i],0==(q-1&q|0)&&(n=0==(q|0)?R(2):Cc(L[g],q<<2),L[g]=n),q=((k<<1)+j|0)>>1,K[L[g]+(L[i]<<1)>>1]=K[q],L[i]=L[i]+1|0,n=K[q],(n&65535)>>>0>k>>>0&&(V(5244484, +319,5246756,5244452),n=K[q]),259<=(n&65535)&&V(5244484,320,5246756,5244332),0==K[q]<<16>>16&&V(5244484,321,5246756,5244220),n=Ia[q],(k|0)==(n|0));)k=k-n|0;k=L[i];if(1>>0){v=q=0;for(u=k;;)if(k=L[g],n=(q<<1)+k|0,j=K[n>>1],K[n>>1]=K[k+(v-1+u<<1)>>1],K[L[g]+(v-1+L[i]<<1)>>1]=j,j=q+1|0,k=q^-1,n=L[i],j>>>0>>1>>>0)q=j,v=k,u=n;else break}}f=L[f>>2];h=L[h>>2];j=I;I=I+44|0;g=j+36;i=j+40;k=32768>>0?d-32768|0:0;if((d|0)!=(e|0)){Yc(j);ad(c,k,j);a:do if(k>>>0>>0)for(n=k;;)if($c(c,n,e,j),q=n+1|0,(q| +0)==(d|0))break a;else n=q;while(0);a:do if(0!=(h|0)){k=d;for(n=0;;){q=K[f+(n<<1)>>1];k>>>0>=e>>>0&&V(5244484,360,5246856,5245100);$c(c,k,e,j);(s=2<(q&65535))?(v=q&65535,ed(b,j,c,k,e,v,0,i,g),u=K[g>>1],u<<16>>16!=q<<16>>16&s&2<(u&65535)&&V(5244484,370,5246856,5244768),dd(c,e,k,K[i>>1],q),cd(q,K[i>>1],l),s=v):(cd(Ha[c+k|0],0,l),s=1);v=s+k|0;v>>>0>e>>>0&&V(5244484,381,5246856,5244628);b:do if(1>>0)for(q=1;;)if($c(c,q+k|0,e,j),u=q+1|0,(u|0)==(s|0))break b;else q=u;while(0);q=n+1|0;if((q|0)==(h|0))break a; +else k=v,n=q}}while(0);Zc(j)}I=j;1E30>m||V(5244484,443,5246824,5245372)}function oc(b,c,d){var e,f,h;0==(c|0)?(e=(b<<3)+d+1280|0,b=(L[M>>2]=L[e>>2],L[M+4>>2]=L[e+4>>2],La[M>>3])):(e=Ic(b),f=L[(b<<2)+5248140>>2],b=Jc(c),h=Kc(c),c=(e<<3)+d+1280|0,e=(b<<3)+d+3584|0,b=(f|0)+(L[M>>2]=L[c>>2],L[M+4>>2]=L[c+4>>2],La[M>>3])+(h|0)+(L[M>>2]=L[e>>2],L[M+4>>2]=L[e+4>>2],La[M>>3]));return b}function ld(b,c){ac(c,b,1152);ac(c+1152|0,b+1152|0,128);ac(c+1280|0,b+1280|0,2304);ac(c+3584|0,b+3584|0,256)} +function jd(b){md(b|0,288,b+1280|0);md(b+1152|0,32,b+3584|0)}function uc(b,c,d){0==(c|0)?d=144>b>>>0?8:9:(c=Kc(c),d=(L[(b<<2)+5248140>>2]|0)+(c|0)+(280>(Ic(b)|0)?12:13));return d}function nd(b,c,d){var e,f;if(0<(d|0))for(e=0;!(0==((hd(b)>>>4>>>0)%3|0)&&(f=((hd(b)>>>0)%(d>>>0)<<2)+c|0,L[c+(e<<2)>>2]=L[f>>2]),f=e+1|0,(f|0)==(d|0));)e=f} +function Nc(b,c,d,e,f){var h,j,g,i,l,m,k,n,q,v,u,s,r,p,y,w,t,x;h=I;I=I+11548|0;j=h>>2;g=h+4;i=h+8;l=h+20;m=h+3860;k=h+7700;n=h+11540;q=R((e-d<<1)+2|0);L[j]=0;L[g>>2]=0;0==(q|0)&&wb();L[n>>2]=1;L[n+4>>2]=2;bc(l,3840);Mc(i);gd(b,c,d,e,i);id(i,l);v=b|0;if(!(0>=(L[L[v>>2]+4>>2]|0))){u=i|0;s=i+4|0;r=i+8|0;p=0;y=1E30;w=0;for(t=-1;;){Pc(i);Mc(i);kd(b,c,d,e,h,g,q,6,l,i);x=yc(L[u>>2],L[s>>2],0,L[r>>2],2);if(x>2;B=R(L[A]<<1);C=(z|0)>>2;L[C]=B;B=R(L[A]<<1); +D=z+4|0;L[D>>2]=B;0==(L[C]|0)|0==(B|0)&&wb();L[z+8>>2]=L[A];if(0!=(L[A]|0)){z=y|0;B=y+4|0;for(y=0;;)if(K[L[C]+(y<<1)>>1]=K[L[z>>2]+(y<<1)>>1],K[L[D>>2]+(y<<1)>>1]=K[L[B>>2]+(y<<1)>>1],H=y+1|0,H>>>0>>0)y=H;else break}ld(l,m);y=x}ld(l,k);z=l;B=A=A=a;A=z;A>>=2;for(B=A+288;A>=2;for(B=A+32;A>2]>>>0)+0.5*(L[A+(C<<2)>>2]>>>0),H=0<=H?Math.floor(H):Math.ceil(H),L[B+(C<<2)>>2]=H,H=C+1|0,288== +(H|0)){D=0;break}else C=H;for(;!(C=(L[z+(D<<2)+1152>>2]>>>0)+0.5*(L[A+(D<<2)+1152>>2]>>>0),H=0<=C?Math.floor(C):Math.ceil(C),L[B+(D<<2)+1152>>2]=H,H=D+1|0,32==(H|0));)D=H;L[B+1024>>2]=1;jd(l)}5<(p|0)&x==w&&(ld(m,l),w=n,t=l,nd(w,t|0,288),nd(w,t+1152|0,32),L[t+1024>>2]=1,jd(l),t=p);p=p+1|0;if((p|0)<(L[L[v>>2]+4>>2]|0))w=x;else break}}Z(q);Z(L[j]);Pc(i);I=h} +function Oc(b,c,d,e,f){var h,j,g;h=I;I=I+8|0;j=h+4;g=R((e-d<<1)+2|0);L[h>>2]=0;L[j>>2]=0;0==(g|0)?wb():(L[b+8>>2]=d,L[b+12>>2]=e,kd(b,c,d,e,h,j,g,18,0,f),Z(g),Z(L[h>>2]),I=h)}function Ic(b){return L[(b<<2)+5247104>>2]} +function Sc(b,c,d,e){var f,h,j,g,i,l,m,k;f=(d<<2)+4|0;j=h=R(f);g=j>>2;f=i=R(f);0!=(c|0)&&bc(e,c<<2);for(l=0;!(L[(l<<2>>2)+g]=0,m=l+1|0,m>>>0>d>>>0);)l=m;a:do if(0!=(c|0))for(l=0;;)if(m=(l<<2)+b|0,L[m>>2]>>>0>d>>>0&&V(5244280,47,5246520,5245236),k=(L[m>>2]<<2)+j|0,L[k>>2]=L[k>>2]+1|0,k=l+1|0,(k|0)==(c|0))break a;else l=k;while(0);L[g]=0;a:do if(0!=(d|0)){j=0;for(l=1;;)if(k=L[(l-1<<2>>2)+g]+j<<1,L[f+(l<<2)>>2]=k,m=l+1|0,m>>>0>d>>>0)break a;else j=k,l=m}while(0);if(0!=(c|0))for(j=0;!(d=L[b+(j<<2)>>2], +0!=(d|0)&&(g=((d<<2)+f|0)>>2,L[e+(j<<2)>>2]=L[g],L[g]=L[g]+1|0),g=j+1|0,(g|0)==(c|0));)j=g;Z(h);Z(i)} +function md(b,c,d){var e,f,h,j,g;e=0;if(0==(c|0))e=1060;else{for(h=f=0;!(j=L[b+(f<<2)>>2]+h|0,f=f+1|0,(f|0)==(c|0));)h=j;0==(j|0)?e=1060:g=Math.log(j>>>0)}1060==e&&(g=Math.log(c>>>0));e=1.4426950408889*g;if(0!=(c|0))for(f=0;!(g=L[b+(f<<2)>>2],0==(g|0)?(j=(f<<3)+d|0,La[M>>3]=e,L[j>>2]=L[M>>2],L[j+4>>2]=L[M+4>>2]):(j=e-1.4426950408889*Math.log(g>>>0),g=(f<<3)+d|0,La[M>>3]=j,L[g>>2]=L[M>>2],L[g+4>>2]=L[M+4>>2]),g=((f<<3)+d|0)>>2,j=(L[M>>2]=L[g],L[M+4>>2]=L[g+1],La[M>>3]),0>j&-1E-5>3]=0,L[g]= +L[M>>2],L[g+1]=L[M+4>>2]):0<=j||V(5244280,92,5246604,5245080),j=f+1|0,(j|0)==(c|0));)f=j} +function Gc(b,c,d,e){var f=b,b=c,h,j,g,i,l,m,k,n,c=I;I=I+12|0;h=R(b<<4);b:do if(0<(b|0)){bc(e,b<<2);for(g=j=0;;)if(i=L[f+(g<<2)>>2],0==(i|0)?l=j:(L[h+(j<<4)>>2]=i,L[h+(j<<4)+8>>2]=g,l=j+1|0),i=g+1|0,(i|0)==(b|0)){m=l;break b}else j=l,g=i}else m=0;while(0);if((1<>2]<<2)>>2]=1,Z(h);else{b=m;if(0!=b){l=[];for(f=0;f>2;L[b]=l;f=R(l<<4);l=(c|0)>>2;L[l]=f;L[c+4>>2]=f;b:do if(0<(L[b]|0))for(f=0;;)if(J[(f<<4)+L[l]+12|0]=0,g=f+1|0,(g|0)<(L[b]|0))f=g;else break b;while(0);f=b=R(d<<3);k=h;j=f;g=Wc(0,d,c);i=Wc(0,d,c);Xc(L[k>>2],1,0,g);Xc(L[k+16>>2],2,0,i);if(0<(d|0))for(k=0;!(L[j+(k<<3)>>2]=g,L[j+(k<<3)+4>>2]=i,k=k+1|0,(k|0)==(d|0)););g=m<<1;b:do if(0<(g-4|0)){j=g-5|0;i=d-1|0;k=(m<<1)-4|0;for(n=0;;)if(bd(f,d,h,m,c,i,(n|0)==(j|0)&1),n=n+1|0,(n|0)==(k|0))break b}while(0); +d=L[f+(d-1<<3)+4>>2];if(0!=(d|0))for(m=d;;){d=m+8|0;b:do if(0<(L[d>>2]|0))for(f=0;;)if(j=(L[h+(f<<4)+8>>2]<<2)+e|0,L[j>>2]=L[j>>2]+1|0,j=f+1|0,(j|0)<(L[d>>2]|0))f=j;else break b;while(0);d=L[m+4>>2];if(0==(d|0))break;else m=d}Z(b);Z(h);Z(L[l])}e=0}I=c;0!=(e|0)&&V(5244280,100,5246656,5244760)}function Kc(b){return 5>(b|0)?0:b=(dc(b-1|0)^31)-1|0}function Jc(b){var c;c=b-1|0;if(5>(b|0))return c;b=dc(c)^31;return c>>>((b-1|0)>>>0)&1|b<<1} +function od(b,c,d,e){var f,h,j,g;f=I;I=I+32|0;h=f+20;j=f+24;g=f+28;J[g]=0;L[j>>2]=0;L[h>>2]=0;var i,l;l=I;I=I+20|0;i=l>>2;L[i]=0;L[i+1]=15;L[i+2]=1;L[i+3]=0;L[i+4]=15;L[l+4>>2]=e;i=f>>2;e=l>>2;L[i]=L[e];L[i+1]=L[e+1];L[i+2]=L[e+2];L[i+3]=L[e+3];L[i+4]=L[e+4];I=l;var m,k;if(0!=(d|0)){l=!0;for(m=0;;){k=(m+2E7|0)>>>0>=d>>>0;e=(k?d-m|0:2E7)+m|0;i=f;k=k&l&1;var n=c,q=e,v=g,u=h,s=j;if(0==(L[i+8>>2]|0))Lc(i,k,n,m,q,v,u,s);else{if(0==(L[i+12>>2]|0)){var r=a,p=a,y=a,w=a,t=a,x=a,z=a,t=a,r=I;I=I+8|0;p=r;y=p>> +2;w=r+4;L[y]=0;L[w>>2]=0;var t=i,x=n,z=q,A=L[i+16>>2],B=w,C=a,D=a,H=a,N=a,O=a,X=a,$=a,Y=a,S=a,U=a,ea=a,T=a,T=a,C=B>>2,B=I;I=I+36|0;D=B;H=D>>2;N=B+16;O=N>>2;X=B+20;$=X>>2;Y=B+24;L[O]=0;L[$]=0;Mc(Y);L[H]=t;L[H+2]=m;L[H+3]=z;L[H+1]=0;L[C]=0;L[p>>2]=0;gd(D,x,m,z,Y);z=Y|0;x=Y+4|0;D=(Y+8|0)>>2;Bc(t,L[z>>2],L[x>>2],L[D],A,N,X);a:do if(0!=(L[$]|0)&&0!=(L[D]|0)){X=L[x>>2];N=L[O];A=L[$];t=L[D];H=L[z>>2];S=0;for(U=m;;){ea=0==K[X+(S<<1)>>1]<<16>>16?1:Ia[H+(S<<1)>>1];T=L[C];if((L[N+(T<<2)>>2]|0)==(S|0)&&(0==(T- +1&T|0)&&(T=0==(T|0)?R(4):Cc(L[p>>2],T<<3),L[p>>2]=T),L[L[p>>2]+(L[C]<<2)>>2]=U,T=L[C]+1|0,L[C]=T,(T|0)==(A|0)))break a;T=S+1|0;if(T>>>0>>0)S=T,U=ea+U|0;else break a}}while(0);(L[C]|0)!=(L[$]|0)&&V(5245952,328,5246708,5244720);Z(L[O]);Pc(Y);I=B;p=L[w>>2];w=0!=(k|0);k=L[y];for(t=0;!(x=0==(t|0)?m:L[k+(t-1<<2)>>2],z=(t|0)==(p|0)?q:L[k+(t<<2)>>2],Lc(i,(t|0)==(p|0)&w&1,n,x,z,v,u,s),t=t+1|0,t>>>0>p>>>0););Z(L[y])}else{C=B=D=p=D=p=A=z=x=t=w=y=C=r=B=a;B=0;r=I;I=I+36|0;C=r>>2;y=r+16;w=y>>2;t=r+28;x=r+32; +z=x>>2;L[t>>2]=0;L[z]=0;p=G;D=E;211==B&&(V(5245480,612,5246868,5245732),p=a,D=A);Mc(y);L[C]=i;L[C+2]=m;L[C+3]=q;C=R(12);A=(r+4|0)>>2;L[A]=C;zc(q-m|0,C);D?Nc(r,n,m,q,y):(p||V(5245480,627,5246868,5245360),Oc(r,n,m,q,y));p||Bc(i,L[w],L[w+1],L[w+2],L[i+16>>2],t,x);x=L[z];p=L[w+2];q=0!=(k|0);k=L[w];m=L[w+1];w=L[z];z=L[t>>2];for(t=0;!(B=0==(t|0)?0:L[z+(t-1<<2)>>2],C=(t|0)==(x|0)?p:L[z+(t<<2)>>2],Qc(i,2,(t|0)==(x|0)&q&1,k,m,B,C,0,v,u,s),n=t+1|0,n>>>0>w>>>0);)t=n;Ac(L[A]);Z(L[A]);Pc(y)}I=r}if(e>>>0>>0)m= +e;else break}}L[b>>2]=L[h>>2];L[b+4>>2]=L[j>>2];I=f} +function R(b){var c,d,e,f,h,j,g,i,l,m;do if(245>b>>>0){c=11>b>>>0?16:b+11&-8;d=c>>>3;e=L[1311502];f=e>>>(d>>>0);if(0!=(f&3|0))return h=(f&1^1)+d|0,c=h<<1,b=(c<<2)+5246048|0,j=(c+2<<2)+5246048|0,c=L[j>>2],g=c+8|0,i=L[g>>2],(b|0)==(i|0)?L[1311502]=e&(1<>>0>>0&&W(),l=i+12|0,(L[l>>2]|0)==(c|0)?(L[l>>2]=b,L[j>>2]=i):W()),i=h<<3,L[c+4>>2]=i|3,j=c+(i|4)|0,L[j>>2]|=1,h=g;if(c>>>0<=L[1311504]>>>0)e=c;else{if(0==(f|0)){if(0==(L[1311503]|0)){e=c;break}h=c;var k=d=f=m=l=i=g=j=a,n=a,q=a, +v=a,u=a,s=j=j=n=v=u=e=b=a;j=L[1311503];g=(j&-j)-1|0;j=g>>>12&16;i=g>>>(j>>>0);g=i>>>5&8;l=i>>>(g>>>0);i=l>>>2&4;m=l>>>(i>>>0);l=m>>>1&2;f=m>>>(l>>>0);m=f>>>1&1;f=m=d=L[((g|j|i|l|m)+(f>>>(m>>>0))<<2)+5246312>>2];l=f>>2;for(i=(L[d+4>>2]&-8)-h|0;;){d=L[m+16>>2];if(0==(d|0))if(j=L[m+20>>2],0==(j|0))break;else k=j;else k=d;d=(L[k+4>>2]&-8)-h|0;j=d>>>0>>0;m=k;f=j?k:f;l=f>>2;i=j?d:i}k=f;m=L[1311506];k>>>0>>0&&W();j=d=k+h|0;k>>>0>=d>>>0&&W();d=L[l+6];g=L[l+3];b:do if((g|0)==(f|0)){n=f+20|0;q=L[n>>2]; +do if(0==(q|0)){if(v=f+16|0,u=L[v>>2],0==(u|0)){b=0;e=b>>2;break b}}else u=q,v=n;while(0);for(;;){n=u+20|0;if(0==(L[n>>2]|0))if(q=u+16|0,0==(L[q>>2]|0))break;else n=q;u=L[n>>2];v=n}v>>>0>>0?W():(L[v>>2]=0,b=u,e=b>>2)}else n=L[l+2],n>>>0>>0&&W(),q=n+12|0,(L[q>>2]|0)!=(f|0)&&W(),v=g+8|0,(L[v>>2]|0)==(f|0)?(L[q>>2]=g,L[v>>2]=n,b=g,e=b>>2):W();while(0);b:do if(0!=(d|0)){g=f+28|0;m=(L[g>>2]<<2)+5246312|0;do if((f|0)==(L[m>>2]|0)){if(L[m>>2]=b,0==(b|0)){L[1311503]&=1<>2]^-1;break b}}else if(d>>> +0>>0&&W(),u=d+16|0,(L[u>>2]|0)==(f|0)?L[u>>2]=b:L[d+20>>2]=b,0==(b|0))break b;while(0);b>>>0>>0&&W();L[e+6]=d;g=L[l+4];0!=(g|0)&&(g>>>0>>0?W():(L[e+4]=g,L[g+24>>2]=b));g=L[l+5];0!=(g|0)&&(g>>>0>>0?W():(L[e+5]=g,L[g+24>>2]=b))}while(0);16>i>>>0?(b=i+h|0,L[l+1]=b|3,e=b+(k+4)|0,L[e>>2]|=1):(L[l+1]=h|3,L[h+(k+4)>>2]=i|1,L[k+i+h>>2]=i,h=L[1311504],0!=(h|0)&&(k=L[1311507],l=h>>>3,h=l<<1,e=(h<<2)+5246048|0,b=L[1311502],d=1<>2],l>>>0>=L[1311506]>>>0?s=l:W()),L[(h+2<<2)+5246048>>2]=k,L[s+12>>2]=k,L[k+8>>2]=s,L[k+12>>2]=e),L[1311504]=i,L[1311507]=j);j=f+8|0;if(0==(j|0)){e=c;break}else h=j;return h}j=2<>>12&16;b=j>>>(i>>>0);j=b>>>5&8;l=b>>>(j>>>0);b=l>>>2&4;g=l>>>(b>>>0);l=g>>>1&2;m=g>>>(l>>>0);g=m>>>1&1;f=(j|i|b|l|g)+(m>>>(g>>>0))|0;g=f<<1;m=(g<<2)+5246048|0;l=(g+2<<2)+5246048|0;g=L[l>>2];b=g+8|0;i=L[b>>2];(m|0)==(i|0)?L[1311502]=e&(1<>>0>>0&& +W(),j=i+12|0,(L[j>>2]|0)==(g|0)?(L[j>>2]=m,L[l>>2]=i):W());i=f<<3;l=i-c|0;L[g+4>>2]=c|3;m=g;e=m+c|0;L[m+(c|4)>>2]=l|1;L[m+i>>2]=l;i=L[1311504];0!=(i|0)&&(m=L[1311507],d=i>>>3,i=d<<1,f=(i<<2)+5246048|0,g=L[1311502],c=1<>2],d>>>0>=L[1311506]>>>0?h=d:W()),L[(i+2<<2)+5246048>>2]=m,L[h+12>>2]=m,L[m+8>>2]=h,L[m+12>>2]=f);L[1311504]=l;L[1311507]=e;return h=b}}else if(4294967231>>0)e=-1;else if(c=b+11&-8,0==(L[1311503]|0))e=c;else{e=c;var r=s=k= +d=a,p=n=a,y=a,w=a,t=a,x=a,z=w=i=g=j=a,A=a,B=a,C=r=r=v=r=w=y=u=q=d=f=m=l=p=z=y=x=a;d=e>>2;k=0;s=-e|0;r=e>>>8;0==(r|0)?n=0:16777215>>0?n=31:(p=(r+1048320|0)>>>16&8,y=r<>>16&4,t=y<>>16&2,x=14-(w|p|y)+(t<>>15)|0,n=e>>>((x+7|0)>>>0)&1|x<<1);r=L[(n<<2)+5246312>>2];b:do if(0==(r|0))j=0,g=s,i=0;else{w=31==(n|0)?0:25-(n>>>1)|0;x=0;y=s;t=r;p=t>>2;w=e<>>0>>0)if((A|0)==(e|0)){j=t;g=B;i=t;break b}else x=t,y=B;B=L[p+5];A=L[((w>>> +31<<2)+16>>2)+p];z=0==(B|0)|(B|0)==(A|0)?z:B;if(0==(A|0)){j=x;g=y;i=z;break b}else t=A,p=t>>2,w<<=1}}while(0);0==(i|0)&0==(j|0)?(y=2<>>12&16,w=y>>>(x>>>0),y=w>>>5&8,r=w>>>(y>>>0),w=r>>>2&4,s=r>>>(w>>>0),r=s>>>1&2,z=s>>>(r>>>0),s=z>>>1&1,p=L[((y|x|w|r|s)+(z>>>(s>>>0))<<2)+5246312>>2])):p=i;b:do if(0==(p|0))l=g,m=j,f=m>>2;else{i=p;n=i>>2;s=g;for(z=j;;)if(r=(L[n+1]&-8)-e|0,x=(w=r>>>0>>0)?r:s,r=w?i:z,w=L[n+4],0!=(w|0))i=w,n=i>>2,s=x,z=r;else if(w= +L[n+5],0==(w|0)){l=x;m=r;f=m>>2;break b}else i=w,n=i>>2,s=x,z=r}while(0);if(0==(m|0))d=0;else if(l>>>0>=(L[1311504]-e|0)>>>0)d=0;else{j=m;g=j>>2;p=L[1311506];j>>>0

    >>0&&W();s=z=j+e|0;j>>>0>=z>>>0&&W();i=L[f+6];n=L[f+3];b:do if((n|0)==(m|0)){r=m+20|0;x=L[r>>2];do if(0==(x|0)){if(w=m+16|0,y=L[w>>2],0==(y|0)){q=0;u=q>>2;break b}}else y=x,w=r;while(0);for(;;){r=y+20|0;if(0==(L[r>>2]|0))if(x=y+16|0,0==(L[x>>2]|0))break;else r=x;y=L[r>>2];w=r}w>>>0>>0?W():(L[w>>2]=0,q=y,u=q>>2)}else r=L[f+ +2],r>>>0

    >>0&&W(),x=r+12|0,(L[x>>2]|0)!=(m|0)&&W(),w=n+8|0,(L[w>>2]|0)==(m|0)?(L[x>>2]=n,L[w>>2]=r,q=n,u=q>>2):W();while(0);b:do if(0!=(i|0)){n=m+28|0;p=(L[n>>2]<<2)+5246312|0;do if((m|0)==(L[p>>2]|0)){if(L[p>>2]=q,0==(q|0)){L[1311503]&=1<>2]^-1;break b}}else if(i>>>0>>0&&W(),y=i+16|0,(L[y>>2]|0)==(m|0)?L[y>>2]=q:L[i+20>>2]=q,0==(q|0))break b;while(0);q>>>0>>0&&W();L[u+6]=i;n=L[f+4];0!=(n|0)&&(n>>>0>>0?W():(L[u+4]=n,L[n+24>>2]=q));n=L[f+5];0!=(n|0)&&(n>>> +0>>0?W():(L[u+5]=n,L[n+24>>2]=q))}while(0);do if(16>l>>>0)q=l+e|0,L[f+1]=q|3,u=q+(j+4)|0,L[u>>2]|=1;else if(L[f+1]=e|3,L[d+(g+1)]=l|1,L[(l>>2)+g+d]=l,u=l>>>3,256>l>>>0)q=u<<1,i=(q<<2)+5246048|0,n=L[1311502],p=1<>2],u>>>0>=L[1311506]>>>0?v=u:W()),L[(q+2<<2)+5246048>>2]=s,L[v+12>>2]=s,L[d+(g+2)]=v,L[d+(g+3)]=i;else if(p=z,n=l>>>8,0==(n|0)?r=0:16777215>>0?r=31:(u=(n+1048320|0)>>>16&8,y=n<>>16&4,r=y<>>16&2,r=14-(w|u|y)+(r<>>15)|0,r=l>>>((r+7|0)>>>0)&1|r<<1),n=(r<<2)+5246312|0,L[d+(g+7)]=r,L[d+(g+5)]=0,L[d+(g+4)]=0,i=L[1311503],q=1<>2]=p,L[d+(g+6)]=n,L[d+(g+3)]=p,L[d+(g+2)]=p;else{r=31==(r|0)?0:25-(r>>>1)|0;q=l<>2];(L[i+4>>2]&-8|0)!=(l|0);)if(C=(q>>>31<<2)+i+16|0,n=L[C>>2],0==(n|0)){k=1328;break}else q<<=1,i=n;if(1328==k)if(C>>>0>>0)W();else{L[C>>2]=p;L[d+(g+6)]=i;L[d+(g+3)]=p;L[d+(g+2)]=p;break}q=i+8|0;n=L[q>>2];r=L[1311506];i>>> +0>>0&&W();n>>>0>>0?W():(L[n+12>>2]=p,L[q>>2]=p,L[d+(g+2)]=n,L[d+(g+3)]=i,L[d+(g+6)]=0)}while(0);d=m+8|0}g=d;if(0==(g|0))e=c;else return h=g}while(0);b=L[1311504];e>>>0>b>>>0?(h=L[1311505],e>>>0>>0?(c=h-e|0,L[1311505]=c,g=h=L[1311508],L[1311508]=g+e|0,L[e+(g+4)>>2]=c|1,L[h+4>>2]=e|3,h=h+8|0):h=pd(e)):(h=b-e|0,c=L[1311507],15>>0?(g=c,L[1311507]=g+e|0,L[1311504]=h,L[e+(g+4)>>2]=h|1,L[g+b>>2]=h,L[c+4>>2]=e|3):(L[1311504]=0,L[1311507]=0,L[c+4>>2]=b|3,e=b+(c+4)|0,L[e>>2]|=1),h=c+8|0);return h} +function pd(b){var c,d,e,f,h,j,g,i,l,m,k,n,q,v,u,s,r,p,y,w,t,x;c=0;0==(L[1310720]|0)&&qd();d=b+48|0;e=L[1310722];f=e+(b+47)&-e;if(f>>>0<=b>>>0)return 0;e=L[1311612];if(0!=(e|0)&&(h=L[1311610],j=h+f|0,j>>>0<=h>>>0|j>>>0>e>>>0))return 0;a:do{if(0==(L[1311613]&4|0)){e=L[1311508];0==(e|0)?c=1356:(j=rd(e),0==(j|0)?c=1356:(h=L[1310722],g=b+47-L[1311505]+h&-h,2147483647<=g>>>0?i=0:(h=fc(g),l=(j=(h|0)==(L[j>>2]+L[j+4>>2]|0))?h:-1,m=j?g:0,k=h,n=g,c=1365)));1356==c&&(e=fc(0),-1==(e|0)?i=0:(g=e,h=L[1310721], +j=h-1|0,q=0==(j&g|0)?f:f-g+(j+g&-h)|0,h=L[1311610],g=h+q|0,q>>>0>b>>>0&2147483647>q>>>0?(j=L[1311612],0!=(j|0)&&g>>>0<=h>>>0|g>>>0>j>>>0?i=0:(j=fc(q),l=(g=(j|0)==(e|0))?e:-1,m=g?q:0,k=j,n=q,c=1365)):i=0));b:do if(1365==c){j=-n|0;if(-1!=(l|0)){v=m;u=l;c=1376;break a}do if(-1!=(k|0)&2147483647>n>>>0&n>>>0>>0)if(g=L[1310722],e=b+47-n+g&-g,2147483647<=e>>>0)e=n;else if(-1==(fc(e)|0)){fc(j);i=m;break b}else e=e+n|0;else e=n;while(0);if(-1==(k|0))i=m;else{v=e;u=k;c=1376;break a}}while(0);L[1311613]|= +4;s=i}else s=0;c=1373}while(0);1373==c&&!(2147483647<=f>>>0)&&(i=fc(f),k=fc(0),-1!=(k|0)&-1!=(i|0)&i>>>0>>0&&(e=k-i|0,m=(k=e>>>0>(b+40|0)>>>0)?i:-1,-1!=(m|0)&&(v=k?e:s,u=m,c=1376)));do if(1376==c){s=L[1311610]+v|0;L[1311610]=s;s>>>0>L[1311611]>>>0&&(L[1311611]=s);a:do if(0==(L[1311508]|0)){s=L[1311506];0==(s|0)|u>>>0>>0&&(L[1311506]=u);L[1311614]=u;L[1311615]=v;L[1311617]=0;L[1311511]=L[1310720];L[1311510]=-1;i=f=d=a;for(d=0;!(f=d<<1,i=(f<<2)+5246048|0,L[(f+3<<2)+5246048>>2]=i,L[(f+2<<2)+5246048>> +2]=i,i=d+1|0,32==(i|0));)d=i;sd(u,v-40|0)}else{s=5246456;for(f=s>>2;;){r=L[f];p=s+4|0;y=L[p>>2];w=r+y|0;if((u|0)==(w|0)){c=1384;break}m=L[f+2];if(0==(m|0))break;else s=m,f=s>>2}do if(1384==c&&0==(L[f+3]&8|0)&&(s=L[1311508],s>>>0>=r>>>0&s>>>0>>0)){L[p>>2]=y+v|0;sd(L[1311508],L[1311505]+v|0);break a}while(0);u>>>0>>0&&(L[1311506]=u);f=u+v|0;for(s=5246456;;){t=s|0;x=L[t>>2];if((x|0)==(f|0)){c=1392;break}m=L[s+8>>2];if(0==(m|0))break;else s=m}if(1392==c&&0==(L[s+12>>2]&8|0))return L[t>> +2]=u,f=s+4|0,L[f>>2]=L[f>>2]+v|0,b=td(u,x,b);d=u;f=v;e=h=g=s=q=n=h=j=k=g=m=l=i=a;i=0;l=L[1311508];m=l>>2;g=l;k=rd(g);j=L[k>>2];h=L[k+4>>2];k=j+h|0;n=j+(h-39)|0;q=0==(n&7|0)?0:-n&7;n=j+(h-47)+q|0;q=n>>>0<(l+16|0)>>>0?g:n;n=q+8|0;h=n>>2;sd(d,f-40|0);L[q+4>>2]=27;L[h]=L[1311614];L[h+1]=L[1311615];L[h+2]=L[1311616];L[h+3]=L[1311617];L[1311614]=d;L[1311615]=f;L[1311617]=0;L[1311616]=n;n=q+28|0;L[n>>2]=7;b:do if((q+32|0)>>>0>>0)for(f=n;;)if(d=f+4|0,L[d>>2]=7,(f+8|0)>>>0>>0)f=d;else break b;while(0); +if((q|0)!=(g|0))if(k=q-l|0,q=k+(g+4)|0,L[q>>2]&=-2,L[m+1]=k|1,L[g+k>>2]=k,g=k>>>3,256>k>>>0)q=g<<1,n=(q<<2)+5246048|0,f=L[1311502],d=1<>2],g>>>0>=L[1311506]>>>0?s=g:W()),L[(q+2<<2)+5246048>>2]=l,L[s+12>>2]=l,L[m+2]=s,L[m+3]=n;else if(n=l,s=k>>>8,0==(s|0)?g=0:16777215>>0?g=31:(q=(s+1048320|0)>>>16&8,d=s<>>16&4,g=d<>>16&2,h=14-(f|q|d)+(g<>>15)|0,g=k>>>((h+7|0)>>>0)&1|h<<1),s=(g<<2)+5246312|0,L[m+7]=g, +L[m+5]=0,L[m+4]=0,h=L[1311503],d=1<>2]=n,L[m+6]=s,L[m+3]=l,L[m+2]=l;else{h=31==(g|0)?0:25-(g>>>1)|0;g=k<>2];(L[h+4>>2]&-8|0)!=(k|0);)if(e=(g>>>31<<2)+h+16|0,s=L[e>>2],0==(s|0)){i=2187;break}else g<<=1,h=s;2187==i?(e>>>0>>0&&W(),L[e>>2]=n,L[m+6]=h,L[m+3]=l,L[m+2]=l):(l=h+8|0,e=L[l>>2],i=L[1311506],h>>>0>>0&&W(),e>>>0>>0&&W(),L[e+12>>2]=n,L[l>>2]=n,L[m+2]=e,L[m+3]=h,L[m+6]=0)}}while(0);s=L[1311505];if(!(s>>>0<=b>>>0))return f=s-b|0,L[1311505]= +f,m=s=L[1311508],L[1311508]=m+b|0,L[b+(m+4)>>2]=f|1,L[s+4>>2]=b|3,b=s+8|0}while(0);b=Eb;L[b>>2]=12;return 0} +function Z(b){var c,d,e,f,h,j,g,i,l,m,k,n,q,v,u,s,r,p,y,w,t,x,z,A,B,C,D,H,N,O;c=b>>2;d=0;if(0!=(b|0)){f=e=b-8|0;h=L[1311506];e>>>0>>0&&W();j=L[b-4>>2];g=j&3;1==(g|0)&&W();i=j&-8;l=i>>2;m=b+(i-8)|0;a:do if(0==(j&1|0)){k=L[e>>2];if(0==(g|0))return;n=-8-k|0;q=n>>2;u=v=b+n|0;s=k+i|0;v>>>0>>0&&W();if((u|0)==(L[1311507]|0)){r=(b+(i-4)|0)>>2;if(3!=(L[r]&3|0)){p=u;y=p>>2;w=s;break}L[1311504]=s;L[r]&=-2;L[q+(c+1)]=s|1;L[m>>2]=s;return}r=k>>>3;if(256>k>>>0)k=L[q+(c+2)],p=L[q+(c+3)],t=(r<<3)+5246048|0, +(k|0)!=(t|0)&&(k>>>0>>0&&W(),(L[k+12>>2]|0)!=(u|0)&&W()),(p|0)==(k|0)?L[1311502]&=1<>>0>>0&&W(),(L[p+8>>2]|0)!=(u|0)&&W()),L[k+12>>2]=p,L[p+8>>2]=k),p=u,y=p>>2,w=s;else{t=v;r=L[q+(c+6)];x=L[q+(c+3)];b:do if((x|0)==(t|0)){v=n+(b+20)|0;z=L[v>>2];do if(0==(z|0)){if(A=n+(b+16)|0,k=L[A>>2],0==(k|0)){B=0;C=B>>2;break b}}else k=z,A=v;while(0);for(;;){v=k+20|0;if(0==(L[v>>2]|0))if(z=k+16|0,0==(L[z>>2]|0))break;else v=z;k=L[v>>2];A=v}A>>>0>>0?W():(L[A>>2]= +0,B=k,C=B>>2)}else v=L[q+(c+2)],v>>>0>>0&&W(),z=v+12|0,(L[z>>2]|0)!=(t|0)&&W(),A=x+8|0,(L[A>>2]|0)==(t|0)?(L[z>>2]=x,L[A>>2]=v,B=x,C=B>>2):W();while(0);if(0==(r|0))p=u,y=p>>2,w=s;else{x=n+(b+28)|0;v=(L[x>>2]<<2)+5246312|0;do if((t|0)==(L[v>>2]|0)){if(L[v>>2]=B,0==(B|0)){L[1311503]&=1<>2]^-1;p=u;y=p>>2;w=s;break a}}else if(r>>>0>>0&&W(),k=r+16|0,(L[k>>2]|0)==(t|0)?L[k>>2]=B:L[r+20>>2]=B,0==(B|0)){p=u;y=p>>2;w=s;break a}while(0);B>>>0>>0&&W();L[C+6]=r;t=L[q+(c+4)];0!= +(t|0)&&(t>>>0>>0?W():(L[C+4]=t,L[t+24>>2]=B));t=L[q+(c+5)];0==(t|0)?(p=u,y=p>>2,w=s):t>>>0>>0?W():(L[C+5]=t,L[t+24>>2]=B,p=u,y=p>>2,w=s)}}}else p=f,y=p>>2,w=i;while(0);f=p;B=f>>2;f>>>0>=m>>>0&&W();f=b+(i-4)|0;C=L[f>>2];0==(C&1|0)&&W();do if(0==(C&2|0)){if((m|0)==(L[1311508]|0)){h=L[1311505]+w|0;L[1311505]=h;L[1311508]=p;L[y+1]=h|1;(p|0)==(L[1311507]|0)&&(L[1311507]=0,L[1311504]=0);if(h>>>0<=L[1311509]>>>0)return;a:if(N=H=D=C=d=C=D=a,0==(L[1310720]|0)&&qd(),D=L[1311508],0!= +(D|0)){C=L[1311505];if(40>>0&&(d=L[1310722],C=Math.g(Math.floor(((-41+C+d|0)>>>0)/(d>>>0))-1|0,d),D=rd(D),H=D>>2,0==(L[H+3]&8|0)&&(N=fc(0),(N|0)==(L[H]+L[H+1]|0)&&(H=fc(-(2147483646>>0?-2147483648-d|0:C)|0),C=fc(0),-1!=(H|0)&C>>>0>>0&&(H=N-C|0,(N|0)!=(C|0)))))){d=D+4|0;L[d>>2]=L[d>>2]-H|0;L[1311610]=L[1311610]-H|0;sd(L[1311508],L[1311505]-H|0);break a}L[1311505]>>>0<=L[1311509]>>>0||(L[1311509]=-1)}return}if((m|0)==(L[1311507]|0)){h=L[1311504]+w|0;L[1311504]=h;L[1311507]=p;L[y+1]=h|1;L[(h>> +2)+B]=h;return}h=(C&-8)+w|0;k=C>>>3;a:do if(256>C>>>0)A=L[c+l],v=L[((i|4)>>2)+c],g=(k<<3)+5246048|0,(A|0)!=(g|0)&&(A>>>0>>0&&W(),(L[A+12>>2]|0)!=(m|0)&&W()),(v|0)==(A|0)?L[1311502]&=1<>>0>>0&&W(),(L[v+8>>2]|0)!=(m|0)&&W()),L[A+12>>2]=v,L[v+8>>2]=A);else{g=m;e=L[l+(c+4)];j=L[((i|4)>>2)+c];b:do if((j|0)==(g|0)){t=i+(b+12)|0;r=L[t>>2];do if(0==(r|0))if(x=i+(b+8)|0,v=L[x>>2],0==(v|0)){D=0;H=D>>2;break b}else u=v,s=x;else u=r,s=t;while(0);for(;;){t=u+20| +0;if(0==(L[t>>2]|0)){if(r=u+16|0,0==(L[r>>2]|0))break}else r=t;u=L[r>>2];s=r}s>>>0>>0?W():(L[s>>2]=0,D=u,H=D>>2)}else t=L[c+l],t>>>0>>0&&W(),r=t+12|0,(L[r>>2]|0)!=(g|0)&&W(),x=j+8|0,(L[x>>2]|0)==(g|0)?(L[r>>2]=j,L[x>>2]=t,D=j,H=D>>2):W();while(0);if(0!=(e|0)){j=i+(b+20)|0;A=(L[j>>2]<<2)+5246312|0;do if((g|0)==(L[A>>2]|0)){if(L[A>>2]=D,0==(D|0)){L[1311503]&=1<>2]^-1;break a}}else if(e>>>0>>0&&W(),v=e+16|0,(L[v>>2]|0)==(g|0)?L[v>>2]=D:L[e+20>>2]=D,0==(D|0))break a; +while(0);D>>>0>>0&&W();L[H+6]=e;g=L[l+(c+2)];0!=(g|0)&&(g>>>0>>0?W():(L[H+4]=g,L[g+24>>2]=D));g=L[l+(c+3)];0!=(g|0)&&(g>>>0>>0?W():(L[H+5]=g,L[g+24>>2]=D))}}while(0);L[y+1]=h|1;L[(h>>2)+B]=h;if((p|0)!=(L[1311507]|0))e=h;else{L[1311504]=h;return}}else L[f>>2]=C&-2,L[y+1]=w|1,e=L[(w>>2)+B]=w;while(0);w=e>>>3;if(256>e>>>0)B=w<<1,C=(B<<2)+5246048|0,f=L[1311502],D=1<>2],w>>>0>=L[1311506]>>>0?N=w:W()),L[(B+2<<2)+ +5246048>>2]=p,L[N+12>>2]=p,L[y+2]=N,L[y+3]=C;else{C=p;N=e>>>8;0==(N|0)?b=0:16777215>>0?b=31:(B=(N+1048320|0)>>>16&8,D=N<>>16&4,w=D<>>16&2,H=14-(f|B|D)+(w<>>15)|0,b=e>>>((H+7|0)>>>0)&1|H<<1);N=(b<<2)+5246312|0;L[y+7]=b;L[y+5]=0;L[y+4]=0;H=L[1311503];D=1<>2]=C,L[y+6]=N,L[y+3]=p,L[y+2]=p;else{f=31==(b|0)?0:25-(b>>>1)|0;w=e<>2];(L[B+4>>2]&-8|0)!=(e|0);)if(O=(w>>>31<<2)+B+16|0,f=L[O>>2],0==(f|0)){d=1534;break}else w<<= +1,B=f;if(1534==d)if(O>>>0>>0)W();else{L[O>>2]=C;L[y+6]=B;L[y+3]=p;L[y+2]=p;break}w=B+8|0;h=L[w>>2];f=L[1311506];B>>>0>>0&&W();h>>>0>>0?W():(L[h+12>>2]=C,L[w>>2]=C,L[y+2]=h,L[y+3]=B,L[y+6]=0)}while(0);y=L[1311510]-1|0;L[1311510]=y;if(0==(y|0)){for(d=5246464;!(d=L[d>>2],0==(d|0));)d=d+8|0;L[1311510]=-1}}}} +Module._calloc=function(b,c){var d;0==(b|0)?d=0:(d=Math.g(c,b),d=65535>=(c|b)>>>0?d:(Math.floor((d>>>0)/(b>>>0))|0)==(c|0)?d:-1);c=R(d);if(0==(c|0)||0==(L[c-4>>2]&3|0))return c;bc(c,d);return c};function Cc(b,c){var d,e;if(0==(b|0))return d=R(c);if(4294967231>>0)return d=Eb,L[d>>2]=12,0;d=ud(b-8|0,11>c>>>0?16:c+11&-8);if(0!=(d|0))return d+8|0;d=R(c);if(0==(d|0))return 0;e=L[b-4>>2];e=(e&-8)-(0==(e&3|0)?8:4)|0;ac(d,b,e>>>0>>0?e:c);Z(b);return d}Module._realloc=Cc; +function ud(b,c){var d,e,f,h,j,g,i,l,m,k,n,q,v,u,s,r,p,y,w;d=(b+4|0)>>2;e=L[d];f=e&-8;h=f>>2;j=b>>2;g=b+f|0;i=L[1311506];b>>>0>>0&&W();l=e&3;1!=(l|0)&b>>>0>>0||W();m=(b+(f|4)|0)>>2;k=L[m];0==(k&1|0)&&W();if(0==(l|0))return d=L[b+4>>2]&-8,d=256>c>>>0?0:d>>>0>=(c+4|0)>>>0&&!((d-c|0)>>>0>L[1310722]<<1>>>0)?b:0,d;if(f>>>0>=c>>>0){l=f-c|0;if(15>=l>>>0)return b;L[d]=e&1|c|2;L[(c+4>>2)+j]=l|3;L[m]|=1;vd(b+c|0,l);return b}if((g|0)==(L[1311508]|0)){l=L[1311505]+f|0;if(l>>>0<=c>>>0)return 0;m=l-c|0;L[d]= +e&1|c|2;L[(c+4>>2)+j]=m|1;L[1311508]=b+c|0;L[1311505]=m;return b}if((g|0)==(L[1311507]|0)){m=L[1311504]+f|0;if(m>>>0>>0)return 0;l=m-c|0;15>>0?(L[d]=e&1|c|2,L[(c+4>>2)+j]=l|1,L[(m>>2)+j]=l,n=m+(b+4)|0,L[n>>2]&=-2,q=b+c|0,v=l):(L[d]=e&1|m|2,e=m+(b+4)|0,L[e>>2]|=1,v=q=0);L[1311504]=v;L[1311507]=q;return b}if(0!=(k&2|0))return 0;q=(k&-8)+f|0;if(q>>>0>>0)return 0;v=q-c|0;e=k>>>3;a:do if(256>k>>>0)m=L[h+(j+2)],l=L[h+(j+3)],n=(e<<3)+5246048|0,(m|0)!=(n|0)&&(m>>>0>>0&&W(),(L[m+12>>2]|0)!=(g| +0)&&W()),(l|0)==(m|0)?L[1311502]&=1<>>0>>0&&W(),(L[l+8>>2]|0)!=(g|0)&&W()),L[m+12>>2]=l,L[l+8>>2]=m);else{n=g;u=L[h+(j+6)];s=L[h+(j+3)];b:do if((s|0)==(n|0)){l=f+(b+20)|0;m=L[l>>2];do if(0==(m|0)){if(r=f+(b+16)|0,p=L[r>>2],0==(p|0)){y=0;w=y>>2;break b}}else p=m,r=l;while(0);for(;;){l=p+20|0;if(0==(L[l>>2]|0))if(m=p+16|0,0==(L[m>>2]|0))break;else l=m;p=L[l>>2];r=l}r>>>0>>0?W():(L[r>>2]=0,y=p,w=y>>2)}else l=L[h+(j+2)],l>>>0>>0&&W(),m=l+12|0,(L[m>>2]| +0)!=(n|0)&&W(),r=s+8|0,(L[r>>2]|0)==(n|0)?(L[m>>2]=s,L[r>>2]=l,y=s,w=y>>2):W();while(0);if(0!=(u|0)){s=f+(b+28)|0;m=(L[s>>2]<<2)+5246312|0;do if((n|0)==(L[m>>2]|0)){if(L[m>>2]=y,0==(y|0)){L[1311503]&=1<>2]^-1;break a}}else if(u>>>0>>0&&W(),l=u+16|0,(L[l>>2]|0)==(n|0)?L[l>>2]=y:L[u+20>>2]=y,0==(y|0))break a;while(0);y>>>0>>0&&W();L[w+6]=u;n=L[h+(j+4)];0!=(n|0)&&(n>>>0>>0?W():(L[w+4]=n,L[n+24>>2]=y));n=L[h+(j+5)];0!=(n|0)&&(n>>>0>>0?W():(L[w+5]=n, +L[n+24>>2]=y))}}while(0);16>v>>>0?(L[d]=q|L[d]&1|2,y=b+(q|4)|0,L[y>>2]|=1):(L[d]=L[d]&1|c|2,L[(c+4>>2)+j]=v|3,j=b+(q|4)|0,L[j>>2]|=1,vd(b+c|0,v));return b}function qd(){var b;0==(L[1310720]|0)&&(b=ec(),0!=(b-1&b|0)&&W(),L[1310722]=b,L[1310721]=b,L[1310723]=-1,L[1310724]=2097152,L[1310725]=0,L[1311613]=0,b=Math.floor(Date.now()/1E3)&-16^1431655768,L[1310720]=b)} +function rd(b){var c,d,e,f,h;c=0;d=5246456;for(e=d>>2;;){f=L[e];if(f>>>0<=b>>>0&&(f+L[e+1]|0)>>>0>b>>>0){h=d;c=1902;break}f=L[e+2];if(0==(f|0)){h=0;c=1903;break}else d=f,e=d>>2}if(1903==c||1902==c)return h} +function vd(b,c){var d,e,f,h,j,g,i,l,m,k,n,q,v,u,s,r,p,y,w,t,x,z,A,B,C,D,H;d=c>>2;e=0;f=b;h=f>>2;j=f+c|0;g=L[b+4>>2];a:do if(0==(g&1|0)){i=L[b>>2];if(0==(g&3|0))return;m=l=f+-i|0;k=i+c|0;n=L[1311506];l>>>0>>0&&W();if((m|0)==(L[1311507]|0)){q=(c+(f+4)|0)>>2;if(3!=(L[q]&3|0)){v=m;u=v>>2;s=k;break}L[1311504]=k;L[q]&=-2;L[(4-i>>2)+h]=k|1;L[j>>2]=k;return}q=i>>>3;if(256>i>>>0)r=L[(8-i>>2)+h],p=L[(12-i>>2)+h],y=(q<<3)+5246048|0,(r|0)!=(y|0)&&(r>>>0>>0&&W(),(L[r+12>>2]|0)!=(m|0)&&W()),(p|0)==(r|0)? +L[1311502]&=1<>>0>>0&&W(),(L[p+8>>2]|0)!=(m|0)&&W()),L[r+12>>2]=p,L[p+8>>2]=r),v=m,u=v>>2,s=k;else{y=l;q=L[(24-i>>2)+h];w=L[(12-i>>2)+h];b:do if((w|0)==(y|0)){l=16-i|0;r=l+(f+4)|0;p=L[r>>2];do if(0==(p|0)){if(t=f+l|0,x=L[t>>2],0==(x|0)){z=0;A=z>>2;break b}}else x=p,t=r;while(0);for(;;){r=x+20|0;if(0==(L[r>>2]|0))if(p=x+16|0,0==(L[p>>2]|0))break;else l=p;else l=r;x=L[l>>2];t=l}t>>>0>>0?W():(L[t>>2]=0,z=x,A=z>>2)}else r=L[(8-i>>2)+h],r>>>0>>0&&W(), +p=r+12|0,(L[p>>2]|0)!=(y|0)&&W(),l=w+8|0,(L[l>>2]|0)==(y|0)?(L[p>>2]=w,L[l>>2]=r,z=w,A=z>>2):W();while(0);if(0==(q|0))v=m,u=v>>2,s=k;else{w=f+(28-i)|0;n=(L[w>>2]<<2)+5246312|0;do if((y|0)==(L[n>>2]|0)){if(L[n>>2]=z,0==(z|0)){L[1311503]&=1<>2]^-1;v=m;u=v>>2;s=k;break a}}else if(q>>>0>>0&&W(),l=q+16|0,(L[l>>2]|0)==(y|0)?L[l>>2]=z:L[q+20>>2]=z,0==(z|0)){v=m;u=v>>2;s=k;break a}while(0);z>>>0>>0&&W();L[A+6]=q;y=16-i|0;w=L[(y>>2)+h];0!=(w|0)&&(w>>>0>>0?W():(L[A+ +4]=w,L[w+24>>2]=z));w=L[(y+4>>2)+h];0==(w|0)?(v=m,u=v>>2,s=k):w>>>0>>0?W():(L[A+5]=w,L[w+24>>2]=z,v=m,u=v>>2,s=k)}}}else v=b,u=v>>2,s=c;while(0);b=L[1311506];j>>>0>>0&&W();z=c+(f+4)|0;A=L[z>>2];do if(0==(A&2|0)){if((j|0)==(L[1311508]|0)){x=L[1311505]+s|0;L[1311505]=x;L[1311508]=v;L[u+1]=x|1;if((v|0)!=(L[1311507]|0))return;L[1311507]=0;L[1311504]=0;return}if((j|0)==(L[1311507]|0)){x=L[1311504]+s|0;L[1311504]=x;L[1311507]=v;L[u+1]=x|1;L[(x>>2)+u]=x;return}x=(A&-8)+s|0;t=A>>>3;a:do if(256> +A>>>0)l=L[d+(h+2)],g=L[d+(h+3)],w=(t<<3)+5246048|0,(l|0)!=(w|0)&&(l>>>0>>0&&W(),(L[l+12>>2]|0)!=(j|0)&&W()),(g|0)==(l|0)?L[1311502]&=1<>>0>>0&&W(),(L[g+8>>2]|0)!=(j|0)&&W()),L[l+12>>2]=g,L[g+8>>2]=l);else{w=j;i=L[d+(h+6)];q=L[d+(h+3)];b:do if((q|0)==(w|0)){n=c+(f+20)|0;l=L[n>>2];do if(0==(l|0))if(r=c+(f+16)|0,p=L[r>>2],0==(p|0)){B=0;C=B>>2;break b}else g=p,m=r;else g=l,m=n;while(0);for(;;){n=g+20|0;if(0==(L[n>>2]|0))if(l=g+16|0,0==(L[l>>2]|0))break;else n=l; +g=L[n>>2];m=n}m>>>0>>0?W():(L[m>>2]=0,B=g,C=B>>2)}else n=L[d+(h+2)],n>>>0>>0&&W(),l=n+12|0,(L[l>>2]|0)!=(w|0)&&W(),r=q+8|0,(L[r>>2]|0)==(w|0)?(L[l>>2]=q,L[r>>2]=n,B=q,C=B>>2):W();while(0);if(0!=(i|0)){q=c+(f+28)|0;l=(L[q>>2]<<2)+5246312|0;do if((w|0)==(L[l>>2]|0)){if(L[l>>2]=B,0==(B|0)){L[1311503]&=1<>2]^-1;break a}}else if(i>>>0>>0&&W(),g=i+16|0,(L[g>>2]|0)==(w|0)?L[g>>2]=B:L[i+20>>2]=B,0==(B|0))break a;while(0);B>>>0>>0&&W();L[C+6]=i;w=L[d+(h+4)];0!=(w| +0)&&(w>>>0>>0?W():(L[C+4]=w,L[w+24>>2]=B));w=L[d+(h+5)];0!=(w|0)&&(w>>>0>>0?W():(L[C+5]=w,L[w+24>>2]=B))}}while(0);L[u+1]=x|1;L[(x>>2)+u]=x;if((v|0)!=(L[1311507]|0))i=x;else{L[1311504]=x;return}}else L[z>>2]=A&-2,L[u+1]=s|1,i=L[(s>>2)+u]=s;while(0);s=i>>>3;if(256>i>>>0)A=s<<1,z=(A<<2)+5246048|0,B=L[1311502],C=1<>2],s>>>0>=L[1311506]>>>0?D=s:W()),L[(A+2<<2)+5246048>>2]=v,L[D+12>>2]=v,L[u+2]=D,L[u+3]=z;else if(z=v,D=i>>> +8,0==(D|0)?d=0:16777215>>0?d=31:(A=(D+1048320|0)>>>16&8,C=D<>>16&4,s=C<>>16&2,h=14-(B|A|C)+(s<>>15)|0,d=i>>>((h+7|0)>>>0)&1|h<<1),D=(d<<2)+5246312|0,L[u+7]=d,L[u+5]=0,L[u+4]=0,h=L[1311503],C=1<>2]=z,L[u+6]=D,L[u+3]=v,L[u+2]=v;else{d=i<<(31==(d|0)?0:25-(d>>>1)|0);for(h=L[D>>2];(L[h+4>>2]&-8|0)!=(i|0);)if(H=(d>>>31<<2)+h+16|0,D=L[H>>2],0==(D|0)){e=2029;break}else d<<=1,h=D;2029==e?(H>>>0>>0&&W(),L[H>>2]=z,L[u+6]= +h,L[u+3]=v,L[u+2]=v):(v=h+8|0,H=L[v>>2],e=L[1311506],h>>>0>>0&&W(),H>>>0>>0&&W(),L[H+12>>2]=z,L[v>>2]=z,L[u+2]=H,L[u+3]=h,L[u+6]=0)}}function sd(b,c){var d,e;d=b+8|0;e=0==(d&7|0)?0:-d&7;d=c-e|0;L[1311508]=b+e|0;L[1311505]=d;L[e+(b+4)>>2]=d|1;L[c+(b+4)>>2]=40;L[1311509]=L[1310724]} +function td(b,c,d){var e,f,h,j,g,i,l,m,k,n,q,v,u,s,r,p,y,w,t,x,z,A,B,C,D,H;e=c>>2;f=b>>2;h=0;j=b+8|0;g=0==(j&7|0)?0:-j&7;j=c+8|0;i=0==(j&7|0)?0:-j&7;l=i>>2;m=j=c+i|0;k=g+d|0;n=k>>2;k=q=b+k|0;v=j-(b+g)-d|0;L[(g+4>>2)+f]=d|3;if((m|0)==(L[1311508]|0))return d=L[1311505]+v|0,L[1311505]=d,L[1311508]=k,L[n+(f+1)]=d|1,b=b+(g|8)|0;if((m|0)==(L[1311507]|0))return d=L[1311504]+v|0,L[1311504]=d,L[1311507]=k,L[n+(f+1)]=d|1,L[(d>>2)+f+n]=d,b=b+(g|8)|0;d=L[l+(e+1)];if(1==(d&3|0)){u=d&-8;s=d>>>3;a:do if(256>d>>> +0)r=L[((i|8)>>2)+e],p=L[l+(e+3)],y=(s<<3)+5246048|0,(r|0)!=(y|0)&&(r>>>0>>0&&W(),(L[r+12>>2]|0)!=(m|0)&&W()),(p|0)==(r|0)?L[1311502]&=1<>>0>>0&&W(),(L[p+8>>2]|0)!=(m|0)&&W()),L[r+12>>2]=p,L[p+8>>2]=r);else{y=j;w=L[((i|24)>>2)+e];t=L[l+(e+3)];b:do if((t|0)==(y|0)){r=i|16;p=r+(c+4)|0;x=L[p>>2];do if(0==(x|0)){if(z=c+r|0,A=L[z>>2],0==(A|0)){B=0;C=B>>2;break b}}else A=x,z=p;while(0);for(;;){p=A+20|0;if(0==(L[p>>2]|0))if(x=A+16|0,0==(L[x>>2]|0))break;else r= +x;else r=p;A=L[r>>2];z=r}z>>>0>>0?W():(L[z>>2]=0,B=A,C=B>>2)}else p=L[((i|8)>>2)+e],p>>>0>>0&&W(),x=p+12|0,(L[x>>2]|0)!=(y|0)&&W(),r=t+8|0,(L[r>>2]|0)==(y|0)?(L[x>>2]=t,L[r>>2]=p,B=t,C=B>>2):W();while(0);if(0!=(w|0)){t=i+(c+28)|0;r=(L[t>>2]<<2)+5246312|0;do if((y|0)==(L[r>>2]|0)){if(L[r>>2]=B,0==(B|0)){L[1311503]&=1<>2]^-1;break a}}else if(w>>>0>>0&&W(),p=w+16|0,(L[p>>2]|0)==(y|0)?L[p>>2]=B:L[w+20>>2]=B,0==(B|0))break a;while(0);B>>>0>>0&&W();L[C+ +6]=w;y=i|16;t=L[(y>>2)+e];0!=(t|0)&&(t>>>0>>0?W():(L[C+4]=t,L[t+24>>2]=B));t=L[(y+4>>2)+e];0!=(t|0)&&(t>>>0>>0?W():(L[C+5]=t,L[t+24>>2]=B))}}while(0);d=c+(u|i)|0;c=u+v|0}else d=m,c=v;v=d+4|0;L[v>>2]&=-2;L[n+(f+1)]=c|1;L[(c>>2)+f+n]=c;v=c>>>3;if(256>c>>>0)return d=v<<1,m=(d<<2)+5246048|0,u=L[1311502],i=1<>2],v>>>0>=L[1311506]>>>0?D=v:W()),L[(d+2<<2)+5246048>>2]=k,L[D+12>>2]=k,L[n+(f+2)]=D,L[n+(f+3)]=m,b=b+(g|8)|0;m=q; +q=c>>>8;0==(q|0)?i=0:16777215>>0?i=31:(D=(q+1048320|0)>>>16&8,k=q<>>16&4,i=k<>>16&2,u=14-(d|D|k)+(i<>>15)|0,i=c>>>((u+7|0)>>>0)&1|u<<1);q=(i<<2)+5246312|0;L[n+(f+7)]=i;L[n+(f+5)]=0;L[n+(f+4)]=0;u=L[1311503];k=1<>2]=m,L[n+(f+6)]=q,L[n+(f+3)]=m,L[n+(f+2)]=m,b=b+(g|8)|0;i=c<<(31==(i|0)?0:25-(i>>>1)|0);for(k=L[q>>2];(L[k+4>>2]&-8|0)!=(c|0);)if(H=(i>>>31<<2)+k+16|0,q=L[H>>2],0==(q|0)){h=2143;break}else i<<=1,k=q;if(2143== +h)return H>>>0>>0&&W(),L[H>>2]=m,L[n+(f+6)]=k,L[n+(f+3)]=m,L[n+(f+2)]=m,b=b+(g|8)|0;H=k+8|0;h=L[H>>2];i=L[1311506];k>>>0>>0&&W();h>>>0>>0&&W();L[h+12>>2]=m;L[H>>2]=m;L[n+(f+2)]=h;L[n+(f+3)]=k;L[n+(f+6)]=0;return b=b+(g|8)|0}function pc(){return 5244744}function qc(){return 5245544}function nc(){}function rc(b){0!=(b|0)&&Z(b)}function mc(b){0!=(b|0)&&Z(b)}function tc(){}var $b=F; +Module.A=function(b){function c(){for(var b=0;3>b;b++)e.push(0)}var d=b.length+1,e=[Q(db("/bin/this.program"),"i8",Za)];c();for(var f=0;f>2],d=L[e+4>>2],f=new Uint8Array(J.subarray(c,c+d))}finally{0!=(e|0)&&(b=e|0,c=L[b>>2],0!=(c|0)&&(Z(c),L[b>>2]=0),Z(e))}return f};ha("Zopfli.RawDeflate",wd);ha("Zopfli.RawDeflate.prototype.compress",wd.prototype.B);}).call(this); \ No newline at end of file diff --git a/src/data/extra/web/js/prism.js b/src/data/extra/web/js/prism.js new file mode 100644 index 00000000..055020b5 --- /dev/null +++ b/src/data/extra/web/js/prism.js @@ -0,0 +1,95 @@ +(function() { + let scriptNode = document.createElement('script'); + + let scriptFolderPath = document.currentScript.src; + scriptFolderPath = scriptFolderPath.substr(0, scriptFolderPath.lastIndexOf('/')); + scriptNode.src = scriptFolderPath + '/prism/prism.min.js'; + scriptNode.setAttribute('data-manual', ''); + document.head.appendChild(scriptNode); +})(); + +class PrismRenderer extends VxWorker { + constructor() { + super(); + + this.name = 'prism'; + + this.initialized = false; + } + + registerInternal() { + this.vnotex.on('basicMarkdownRendered', () => { + this.renderCodeNodes(this.vnotex.contentContainer); + }); + } + + initialize() { + if (this.initialized) { + return; + } + + this.initialized = true; + + let markdownIt = this.vnotex.getWorker('markdownit'); + Prism.plugins.filterHighlightAll.add((p_env) => { + return !markdownIt.langsToSkipHighlight.has(p_env.language); + }); + + /* + Prism.hooks.add('complete', () => { + this.finishWork(); + }); + */ + } + + // Interface 1. + // Fetch nodes to render from @p_node. + render(p_node) { + this.initialize(); + + // We use querySelectorAll() to get a snapshot since other VxWorkers may + // be changing the nodes, too. + let codeNodes = p_node.querySelectorAll('pre code'); + this.doRender(p_node, codeNodes); + } + + // Interface 2. + // Get code nodes from markdownIt directly. + renderCodeNodes(p_node) { + this.initialize(); + + let codeNodes = this.vnotex.getWorker('markdownit').getCodeNodes(null); + this.doRender(p_node, codeNodes); + } + + // Whether has class lang- or language-. + hasLangSpecified(p_node) { + for (let i = 0; i < p_node.classList.length; ++i) { + let key = p_node.classList[i]; + if (key.startsWith('lang-') || key.startsWith('language-')) { + return true; + } + } + + return false; + } + + doRender(p_containerNode, p_nodes) { + if (p_nodes.length > 0) { + // Add `lang-txt` to code nodes without any class to let Prism catch them. + for (let i = 0; i < p_nodes.length; ++i) { + if (!this.hasLangSpecified(p_nodes[i])) { + p_nodes[i].classList.add('lang-txt'); + } + } + + p_containerNode.classList.add('line-numbers'); + + Prism.highlightAllUnder(p_containerNode, false /* async or not */); + } + + this.finishWork(); + } +} + +window.vnotex.registerWorker(new PrismRenderer()); diff --git a/src/data/extra/web/js/prism/README.md b/src/data/extra/web/js/prism/README.md new file mode 100644 index 00000000..cf86e96b --- /dev/null +++ b/src/data/extra/web/js/prism/README.md @@ -0,0 +1,5 @@ +# [clipboard.min.js](https://github.com/zenorocha/clipboard.js) +v2.0.6 + +# [prism](https://prismjs.com/index.html) +v1.21.0 diff --git a/src/data/extra/web/js/prism/clipboard.min.js b/src/data/extra/web/js/prism/clipboard.min.js new file mode 100644 index 00000000..28650f3c --- /dev/null +++ b/src/data/extra/web/js/prism/clipboard.min.js @@ -0,0 +1,7 @@ +/*! + * clipboard.js v2.0.6 + * https://clipboardjs.com/ + * + * Licensed MIT © Zeno Rocha + */ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ClipboardJS=e():t.ClipboardJS=e()}(this,function(){return o={},r.m=n=[function(t,e){t.exports=function(t){var e;if("SELECT"===t.nodeName)t.focus(),e=t.value;else if("INPUT"===t.nodeName||"TEXTAREA"===t.nodeName){var n=t.hasAttribute("readonly");n||t.setAttribute("readonly",""),t.select(),t.setSelectionRange(0,t.value.length),n||t.removeAttribute("readonly"),e=t.value}else{t.hasAttribute("contenteditable")&&t.focus();var o=window.getSelection(),r=document.createRange();r.selectNodeContents(t),o.removeAllRanges(),o.addRange(r),e=o.toString()}return e}},function(t,e){function n(){}n.prototype={on:function(t,e,n){var o=this.e||(this.e={});return(o[t]||(o[t]=[])).push({fn:e,ctx:n}),this},once:function(t,e,n){var o=this;function r(){o.off(t,r),e.apply(n,arguments)}return r._=e,this.on(t,r,n)},emit:function(t){for(var e=[].slice.call(arguments,1),n=((this.e||(this.e={}))[t]||[]).slice(),o=0,r=n.length;o=l.reach);k+=y.value.length,y=y.next){var b=y.value;if(t.length>n.length)return;if(!(b instanceof W)){var x=1;if(h&&y!=t.tail.prev){m.lastIndex=k;var w=m.exec(n);if(!w)break;var A=w.index+(f&&w[1]?w[1].length:0),P=w.index+w[0].length,S=k;for(S+=y.value.length;S<=A;)y=y.next,S+=y.value.length;if(S-=y.value.length,k=S,y.value instanceof W)continue;for(var E=y;E!==t.tail&&(Sl.reach&&(l.reach=j);var C=y.prev;L&&(C=I(t,C,L),k+=L.length),z(t,C,x);var _=new W(o,g?M.tokenize(O,g):O,v,O);y=I(t,C,_),N&&I(t,y,N),1"+a.content+""},!u.document)return u.addEventListener&&(M.disableWorkerMessageHandler||u.addEventListener("message",function(e){var n=JSON.parse(e.data),t=n.language,r=n.code,a=n.immediateClose;u.postMessage(M.highlight(r,M.languages[t],t)),a&&u.close()},!1)),M;var e=M.util.currentScript();function t(){M.manual||M.highlightAll()}if(e&&(M.filename=e.src,e.hasAttribute("data-manual")&&(M.manual=!0)),!M.manual){var r=document.readyState;"loading"===r||"interactive"===r&&e&&e.defer?document.addEventListener("DOMContentLoaded",t):window.requestAnimationFrame?window.requestAnimationFrame(t):window.setTimeout(t,16)}return M}(_self);"undefined"!=typeof module&&module.exports&&(module.exports=Prism),"undefined"!=typeof global&&(global.Prism=Prism); +Prism.languages.markup={comment://,prolog:/<\?[\s\S]+?\?>/,doctype:{pattern:/"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^$|[[\]]/,"doctype-tag":/^DOCTYPE/,name:/[^\s<>'"]+/}},cdata://i,tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},Prism.languages.markup.tag.inside["attr-value"].inside.entity=Prism.languages.markup.entity,Prism.languages.markup.doctype.inside["internal-subset"].inside=Prism.languages.markup,Prism.hooks.add("wrap",function(a){"entity"===a.type&&(a.attributes.title=a.content.replace(/&/,"&"))}),Object.defineProperty(Prism.languages.markup.tag,"addInlined",{value:function(a,e){var s={};s["language-"+e]={pattern:/(^$)/i,lookbehind:!0,inside:Prism.languages[e]},s.cdata=/^$/i;var n={"included-cdata":{pattern://i,inside:s}};n["language-"+e]={pattern:/[\s\S]+/,inside:Prism.languages[e]};var t={};t[a]={pattern:RegExp("(<__[^]*?>)(?:))*\\]\\]>|(?!)".replace(/__/g,function(){return a}),"i"),lookbehind:!0,greedy:!0,inside:n},Prism.languages.insertBefore("markup","cdata",t)}}),Prism.languages.html=Prism.languages.markup,Prism.languages.mathml=Prism.languages.markup,Prism.languages.svg=Prism.languages.markup,Prism.languages.xml=Prism.languages.extend("markup",{}),Prism.languages.ssml=Prism.languages.xml,Prism.languages.atom=Prism.languages.xml,Prism.languages.rss=Prism.languages.xml; +!function(e){var s=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/;e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:/@[\w-]+[\s\S]*?(?:;|(?=\s*\{))/,inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\((?!\s*\))\s*)(?:[^()]|\((?:[^()]|\([^()]*\))*\))+?(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+s.source+"|(?:[^\\\\\r\n()\"']|\\\\[^])*)\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+s.source+"$"),alias:"url"}}},selector:RegExp("[^{}\\s](?:[^{};\"']|"+s.source+")*?(?=\\s*\\{)"),string:{pattern:s,greedy:!0},property:/[-_a-z\xA0-\uFFFF][-\w\xA0-\uFFFF]*(?=\s*:)/i,important:/!important\b/i,function:/[-a-z0-9]+(?=\()/i,punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css;var t=e.languages.markup;t&&(t.tag.addInlined("style","css"),e.languages.insertBefore("inside","attr-value",{"style-attr":{pattern:/\s*style=("|')(?:\\[\s\S]|(?!\1)[^\\])*\1/i,inside:{"attr-name":{pattern:/^\s*style/i,inside:t.tag.inside},punctuation:/^\s*=\s*['"]|['"]\s*$/,"attr-value":{pattern:/.+/i,inside:e.languages.css}},alias:"language-css"}},t.tag))}(Prism); +Prism.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|interface|extends|implements|trait|instanceof|new)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/,boolean:/\b(?:true|false)\b/,function:/\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+\.?\d*|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/}; +Prism.languages.javascript=Prism.languages.extend("clike",{"class-name":[Prism.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])[_$A-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\.(?:prototype|constructor))/,lookbehind:!0}],keyword:[{pattern:/((?:^|})\s*)(?:catch|finally)\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|for|from|function|(?:get|set)(?=\s*[\[$\w\xA0-\uFFFF])|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],number:/\b(?:(?:0[xX](?:[\dA-Fa-f](?:_[\dA-Fa-f])?)+|0[bB](?:[01](?:_[01])?)+|0[oO](?:[0-7](?:_[0-7])?)+)n?|(?:\d(?:_\d)?)+n|NaN|Infinity)\b|(?:\b(?:\d(?:_\d)?)+\.?(?:\d(?:_\d)?)*|\B\.(?:\d(?:_\d)?)+)(?:[Ee][+-]?(?:\d(?:_\d)?)+)?/,function:/#?[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),Prism.languages.javascript["class-name"][0].pattern=/(\b(?:class|interface|extends|implements|instanceof|new)\s+)[\w.\\]+/,Prism.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*]|\\.|[^/\\\[\r\n])+\/[gimyus]{0,6}(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/,lookbehind:!0,greedy:!0},"function-variable":{pattern:/#?[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+[_$A-Za-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*)?\s*\(\s*)(?!\s)(?:[^()]|\([^()]*\))+?(?=\s*\))/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*=>)/i,inside:Prism.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()]|\([^()]*\))+?(?=\s*\)\s*=>)/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:[_$A-Za-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()]|\([^()]*\))+?(?=\s*\)\s*\{)/,lookbehind:!0,inside:Prism.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),Prism.languages.insertBefore("javascript","string",{"template-string":{pattern:/`(?:\\[\s\S]|\${(?:[^{}]|{(?:[^{}]|{[^}]*})*})+}|(?!\${)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\${(?:[^{}]|{(?:[^{}]|{[^}]*})*})+}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\${|}$/,alias:"punctuation"},rest:Prism.languages.javascript}},string:/[\s\S]+/}}}),Prism.languages.markup&&Prism.languages.markup.tag.addInlined("script","javascript"),Prism.languages.js=Prism.languages.javascript; +Prism.languages.abap={comment:/^\*.*/m,string:/(`|')(?:\\.|(?!\1)[^\\\r\n])*\1/m,"string-template":{pattern:/([|}])(?:\\.|[^\\|{\r\n])*(?=[|{])/,lookbehind:!0,alias:"string"},"eol-comment":{pattern:/(^|\s)".*/m,lookbehind:!0,alias:"comment"},keyword:{pattern:/(\s|\.|^)(?:SCIENTIFIC_WITH_LEADING_ZERO|SCALE_PRESERVING_SCIENTIFIC|RMC_COMMUNICATION_FAILURE|END-ENHANCEMENT-SECTION|MULTIPLY-CORRESPONDING|SUBTRACT-CORRESPONDING|VERIFICATION-MESSAGE|DIVIDE-CORRESPONDING|ENHANCEMENT-SECTION|CURRENCY_CONVERSION|RMC_SYSTEM_FAILURE|START-OF-SELECTION|MOVE-CORRESPONDING|RMC_INVALID_STATUS|CUSTOMER-FUNCTION|END-OF-DEFINITION|ENHANCEMENT-POINT|SYSTEM-EXCEPTIONS|ADD-CORRESPONDING|SCALE_PRESERVING|SELECTION-SCREEN|CURSOR-SELECTION|END-OF-SELECTION|LOAD-OF-PROGRAM|SCROLL-BOUNDARY|SELECTION-TABLE|EXCEPTION-TABLE|IMPLEMENTATIONS|PARAMETER-TABLE|RIGHT-JUSTIFIED|UNIT_CONVERSION|AUTHORITY-CHECK|LIST-PROCESSING|SIGN_AS_POSTFIX|COL_BACKGROUND|IMPLEMENTATION|INTERFACE-POOL|TRANSFORMATION|IDENTIFICATION|ENDENHANCEMENT|LINE-SELECTION|INITIALIZATION|LEFT-JUSTIFIED|SELECT-OPTIONS|SELECTION-SETS|COMMUNICATION|CORRESPONDING|DECIMAL_SHIFT|PRINT-CONTROL|VALUE-REQUEST|CHAIN-REQUEST|FUNCTION-POOL|FIELD-SYMBOLS|FUNCTIONALITY|INVERTED-DATE|SELECTION-SET|CLASS-METHODS|OUTPUT-LENGTH|CLASS-CODING|COL_NEGATIVE|ERRORMESSAGE|FIELD-GROUPS|HELP-REQUEST|NO-EXTENSION|NO-TOPOFPAGE|REDEFINITION|DISPLAY-MODE|ENDINTERFACE|EXIT-COMMAND|FIELD-SYMBOL|NO-SCROLLING|SHORTDUMP-ID|ACCESSPOLICY|CLASS-EVENTS|COL_POSITIVE|DECLARATIONS|ENHANCEMENTS|FILTER-TABLE|SWITCHSTATES|SYNTAX-CHECK|TRANSPORTING|ASYNCHRONOUS|SYNTAX-TRACE|TOKENIZATION|USER-COMMAND|WITH-HEADING|ABAP-SOURCE|BREAK-POINT|CHAIN-INPUT|COMPRESSION|FIXED-POINT|NEW-SECTION|NON-UNICODE|OCCURRENCES|RESPONSIBLE|SYSTEM-CALL|TRACE-TABLE|ABBREVIATED|CHAR-TO-HEX|END-OF-FILE|ENDFUNCTION|ENVIRONMENT|ASSOCIATION|COL_HEADING|EDITOR-CALL|END-OF-PAGE|ENGINEERING|IMPLEMENTED|INTENSIFIED|RADIOBUTTON|SYSTEM-EXIT|TOP-OF-PAGE|TRANSACTION|APPLICATION|CONCATENATE|DESTINATION|ENHANCEMENT|IMMEDIATELY|NO-GROUPING|PRECOMPILED|REPLACEMENT|TITLE-LINES|ACTIVATION|BYTE-ORDER|CLASS-POOL|CONNECTION|CONVERSION|DEFINITION|DEPARTMENT|EXPIRATION|INHERITING|MESSAGE-ID|NO-HEADING|PERFORMING|QUEUE-ONLY|RIGHTSPACE|SCIENTIFIC|STATUSINFO|STRUCTURES|SYNCPOINTS|WITH-TITLE|ATTRIBUTES|BOUNDARIES|CLASS-DATA|COL_NORMAL|DD\/MM\/YYYY|DESCENDING|INTERFACES|LINE-COUNT|MM\/DD\/YYYY|NON-UNIQUE|PRESERVING|SELECTIONS|STATEMENTS|SUBROUTINE|TRUNCATION|TYPE-POOLS|ARITHMETIC|BACKGROUND|ENDPROVIDE|EXCEPTIONS|IDENTIFIER|INDEX-LINE|OBLIGATORY|PARAMETERS|PERCENTAGE|PUSHBUTTON|RESOLUTION|COMPONENTS|DEALLOCATE|DISCONNECT|DUPLICATES|FIRST-LINE|HEAD-LINES|NO-DISPLAY|OCCURRENCE|RESPECTING|RETURNCODE|SUBMATCHES|TRACE-FILE|ASCENDING|BYPASSING|ENDMODULE|EXCEPTION|EXCLUDING|EXPORTING|INCREMENT|MATCHCODE|PARAMETER|PARTIALLY|PREFERRED|REFERENCE|REPLACING|RETURNING|SELECTION|SEPARATED|SPECIFIED|STATEMENT|TIMESTAMP|TYPE-POOL|ACCEPTING|APPENDAGE|ASSIGNING|COL_GROUP|COMPARING|CONSTANTS|DANGEROUS|IMPORTING|INSTANCES|LEFTSPACE|LOG-POINT|QUICKINFO|READ-ONLY|SCROLLING|SQLSCRIPT|STEP-LOOP|TOP-LINES|TRANSLATE|APPENDING|AUTHORITY|CHARACTER|COMPONENT|CONDITION|DIRECTORY|DUPLICATE|MESSAGING|RECEIVING|SUBSCREEN|ACCORDING|COL_TOTAL|END-LINES|ENDMETHOD|ENDSELECT|EXPANDING|EXTENSION|INCLUDING|INFOTYPES|INTERFACE|INTERVALS|LINE-SIZE|PF-STATUS|PROCEDURE|PROTECTED|REQUESTED|RESUMABLE|RIGHTPLUS|SAP-SPOOL|SECONDARY|STRUCTURE|SUBSTRING|TABLEVIEW|NUMOFCHAR|ADJACENT|ANALYSIS|ASSIGNED|BACKWARD|CHANNELS|CHECKBOX|CONTINUE|CRITICAL|DATAINFO|DD\/MM\/YY|DURATION|ENCODING|ENDCLASS|FUNCTION|LEFTPLUS|LINEFEED|MM\/DD\/YY|OVERFLOW|RECEIVED|SKIPPING|SORTABLE|STANDARD|SUBTRACT|SUPPRESS|TABSTRIP|TITLEBAR|TRUNCATE|UNASSIGN|WHENEVER|ANALYZER|COALESCE|COMMENTS|CONDENSE|DECIMALS|DEFERRED|ENDWHILE|EXPLICIT|KEYWORDS|MESSAGES|POSITION|PRIORITY|RECEIVER|RENAMING|TIMEZONE|TRAILING|ALLOCATE|CENTERED|CIRCULAR|CONTROLS|CURRENCY|DELETING|DESCRIBE|DISTANCE|ENDCATCH|EXPONENT|EXTENDED|GENERATE|IGNORING|INCLUDES|INTERNAL|MAJOR-ID|MODIFIER|NEW-LINE|OPTIONAL|PROPERTY|ROLLBACK|STARTING|SUPPLIED|ABSTRACT|CHANGING|CONTEXTS|CREATING|CUSTOMER|DATABASE|DAYLIGHT|DEFINING|DISTINCT|DIVISION|ENABLING|ENDCHAIN|ESCAPING|HARMLESS|IMPLICIT|INACTIVE|LANGUAGE|MINOR-ID|MULTIPLY|NEW-PAGE|NO-TITLE|POS_HIGH|SEPARATE|TEXTPOOL|TRANSFER|SELECTOR|DBMAXLEN|ITERATOR|SELECTOR|ARCHIVE|BIT-XOR|BYTE-CO|COLLECT|COMMENT|CURRENT|DEFAULT|DISPLAY|ENDFORM|EXTRACT|LEADING|LISTBOX|LOCATOR|MEMBERS|METHODS|NESTING|POS_LOW|PROCESS|PROVIDE|RAISING|RESERVE|SECONDS|SUMMARY|VISIBLE|BETWEEN|BIT-AND|BYTE-CS|CLEANUP|COMPUTE|CONTROL|CONVERT|DATASET|ENDCASE|FORWARD|HEADERS|HOTSPOT|INCLUDE|INVERSE|KEEPING|NO-ZERO|OBJECTS|OVERLAY|PADDING|PATTERN|PROGRAM|REFRESH|SECTION|SUMMING|TESTING|VERSION|WINDOWS|WITHOUT|BIT-NOT|BYTE-CA|BYTE-NA|CASTING|CONTEXT|COUNTRY|DYNAMIC|ENABLED|ENDLOOP|EXECUTE|FRIENDS|HANDLER|HEADING|INITIAL|\*-INPUT|LOGFILE|MAXIMUM|MINIMUM|NO-GAPS|NO-SIGN|PRAGMAS|PRIMARY|PRIVATE|REDUCED|REPLACE|REQUEST|RESULTS|UNICODE|WARNING|ALIASES|BYTE-CN|BYTE-NS|CALLING|COL_KEY|COLUMNS|CONNECT|ENDEXEC|ENTRIES|EXCLUDE|FILTERS|FURTHER|HELP-ID|LOGICAL|MAPPING|MESSAGE|NAMETAB|OPTIONS|PACKAGE|PERFORM|RECEIVE|STATICS|VARYING|BINDING|CHARLEN|GREATER|XSTRLEN|ACCEPT|APPEND|DETAIL|ELSEIF|ENDING|ENDTRY|FORMAT|FRAMES|GIVING|HASHED|HEADER|IMPORT|INSERT|MARGIN|MODULE|NATIVE|OBJECT|OFFSET|REMOTE|RESUME|SAVING|SIMPLE|SUBMIT|TABBED|TOKENS|UNIQUE|UNPACK|UPDATE|WINDOW|YELLOW|ACTUAL|ASPECT|CENTER|CURSOR|DELETE|DIALOG|DIVIDE|DURING|ERRORS|EVENTS|EXTEND|FILTER|HANDLE|HAVING|IGNORE|LITTLE|MEMORY|NO-GAP|OCCURS|OPTION|PERSON|PLACES|PUBLIC|REDUCE|REPORT|RESULT|SINGLE|SORTED|SWITCH|SYNTAX|TARGET|VALUES|WRITER|ASSERT|BLOCKS|BOUNDS|BUFFER|CHANGE|COLUMN|COMMIT|CONCAT|COPIES|CREATE|DDMMYY|DEFINE|ENDIAN|ESCAPE|EXPAND|KERNEL|LAYOUT|LEGACY|LEVELS|MMDDYY|NUMBER|OUTPUT|RANGES|READER|RETURN|SCREEN|SEARCH|SELECT|SHARED|SOURCE|STABLE|STATIC|SUBKEY|SUFFIX|TABLES|UNWIND|YYMMDD|ASSIGN|BACKUP|BEFORE|BINARY|BIT-OR|BLANKS|CLIENT|CODING|COMMON|DEMAND|DYNPRO|EXCEPT|EXISTS|EXPORT|FIELDS|GLOBAL|GROUPS|LENGTH|LOCALE|MEDIUM|METHOD|MODIFY|NESTED|OTHERS|REJECT|SCROLL|SUPPLY|SYMBOL|ENDFOR|STRLEN|ALIGN|BEGIN|BOUND|ENDAT|ENTRY|EVENT|FINAL|FLUSH|GRANT|INNER|SHORT|USING|WRITE|AFTER|BLACK|BLOCK|CLOCK|COLOR|COUNT|DUMMY|EMPTY|ENDDO|ENDON|GREEN|INDEX|INOUT|LEAVE|LEVEL|LINES|MODIF|ORDER|OUTER|RANGE|RESET|RETRY|RIGHT|SMART|SPLIT|STYLE|TABLE|THROW|UNDER|UNTIL|UPPER|UTF-8|WHERE|ALIAS|BLANK|CLEAR|CLOSE|EXACT|FETCH|FIRST|FOUND|GROUP|LLANG|LOCAL|OTHER|REGEX|SPOOL|TITLE|TYPES|VALID|WHILE|ALPHA|BOXED|CATCH|CHAIN|CHECK|CLASS|COVER|ENDIF|EQUIV|FIELD|FLOOR|FRAME|INPUT|LOWER|MATCH|NODES|PAGES|PRINT|RAISE|ROUND|SHIFT|SPACE|SPOTS|STAMP|STATE|TASKS|TIMES|TRMAC|ULINE|UNION|VALUE|WIDTH|EQUAL|LOG10|TRUNC|BLOB|CASE|CEIL|CLOB|COND|EXIT|FILE|GAPS|HOLD|INCL|INTO|KEEP|KEYS|LAST|LINE|LONG|LPAD|MAIL|MODE|OPEN|PINK|READ|ROWS|TEST|THEN|ZERO|AREA|BACK|BADI|BYTE|CAST|EDIT|EXEC|FAIL|FIND|FKEQ|FONT|FREE|GKEQ|HIDE|INIT|ITNO|LATE|LOOP|MAIN|MARK|MOVE|NEXT|NULL|RISK|ROLE|UNIT|WAIT|ZONE|BASE|CALL|CODE|DATA|DATE|FKGE|GKGE|HIGH|KIND|LEFT|LIST|MASK|MESH|NAME|NODE|PACK|PAGE|POOL|SEND|SIGN|SIZE|SOME|STOP|TASK|TEXT|TIME|USER|VARY|WITH|WORD|BLUE|CONV|COPY|DEEP|ELSE|FORM|FROM|HINT|ICON|JOIN|LIKE|LOAD|ONLY|PART|SCAN|SKIP|SORT|TYPE|UNIX|VIEW|WHEN|WORK|ACOS|ASIN|ATAN|COSH|EACH|FRAC|LESS|RTTI|SINH|SQRT|TANH|AVG|BIT|DIV|ISO|LET|OUT|PAD|SQL|ALL|CI_|CPI|END|LOB|LPI|MAX|MIN|NEW|OLE|RUN|SET|\?TO|YES|ABS|ADD|AND|BIG|FOR|HDB|JOB|LOW|NOT|SAP|TRY|VIA|XML|ANY|GET|IDS|KEY|MOD|OFF|PUT|RAW|RED|REF|SUM|TAB|XSD|CNT|COS|EXP|LOG|SIN|TAN|XOR|AT|CO|CP|DO|GT|ID|IF|NS|OR|BT|CA|CS|GE|NA|NB|EQ|IN|LT|NE|NO|OF|ON|PF|TO|AS|BY|CN|IS|LE|NP|UP|E|I|M|O|Z|C|X)\b/i,lookbehind:!0},number:/\b\d+\b/,operator:{pattern:/(\s)(?:\*\*?|<[=>]?|>=?|\?=|[-+\/=])(?=\s)/,lookbehind:!0},"string-operator":{pattern:/(\s)&&?(?=\s)/,lookbehind:!0,alias:"keyword"},"token-operator":[{pattern:/(\w)(?:->?|=>|[~|{}])(?=\w)/,lookbehind:!0,alias:"punctuation"},{pattern:/[|{}]/,alias:"punctuation"}],punctuation:/[,.:()]/}; +!function(n){var i="(?:ALPHA|BIT|CHAR|CR|CRLF|CTL|DIGIT|DQUOTE|HEXDIG|HTAB|LF|LWSP|OCTET|SP|VCHAR|WSP)";Prism.languages.abnf={comment:/;.*/,string:{pattern:/(?:%[is])?"[^"\n\r]*"/,greedy:!0,inside:{punctuation:/^%[is]/}},range:{pattern:/%(?:b[01]+-[01]+|d\d+-\d+|x[A-F\d]+-[A-F\d]+)/i,alias:"number"},terminal:{pattern:/%(?:b[01]+(?:\.[01]+)*|d\d+(?:\.\d+)*|x[A-F\d]+(?:\.[A-F\d]+)*)/i,alias:"number"},repetition:{pattern:/(^|[^\w-])(?:\d*\*\d*|\d+)/,lookbehind:!0,alias:"operator"},definition:{pattern:/(^[ \t]*)(?:[a-z][\w-]*|<[^>\r\n]*>)(?=\s*=)/m,lookbehind:!0,alias:"keyword",inside:{punctuation:/<|>/}},"core-rule":{pattern:RegExp("(?:(^|[^<\\w-])"+i+"|<"+i+">)(?![\\w-])","i"),lookbehind:!0,alias:["rule","constant"],inside:{punctuation:/<|>/}},rule:{pattern:/(^|[^<\w-])[a-z][\w-]*|<[^>\r\n]*>/i,lookbehind:!0,inside:{punctuation:/<|>/}},operator:/=\/?|\//,punctuation:/[()\[\]]/}}(); +Prism.languages.actionscript=Prism.languages.extend("javascript",{keyword:/\b(?:as|break|case|catch|class|const|default|delete|do|else|extends|finally|for|function|if|implements|import|in|instanceof|interface|internal|is|native|new|null|package|private|protected|public|return|super|switch|this|throw|try|typeof|use|var|void|while|with|dynamic|each|final|get|include|namespace|native|override|set|static)\b/,operator:/\+\+|--|(?:[+\-*\/%^]|&&?|\|\|?|<>?>?|[!=]=?)=?|[~?@]/}),Prism.languages.actionscript["class-name"].alias="function",Prism.languages.markup&&Prism.languages.insertBefore("actionscript","string",{xml:{pattern:/(^|[^.])<\/?\w+(?:\s+[^\s>\/=]+=("|')(?:\\[\s\S]|(?!\2)[^\\])*\2)*\s*\/?>/,lookbehind:!0,inside:Prism.languages.markup}}); +Prism.languages.ada={comment:/--.*/,string:/"(?:""|[^"\r\f\n])*"/i,number:[{pattern:/\b\d(?:_?\d)*#[\dA-F](?:_?[\dA-F])*(?:\.[\dA-F](?:_?[\dA-F])*)?#(?:E[+-]?\d(?:_?\d)*)?/i},{pattern:/\b\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:E[+-]?\d(?:_?\d)*)?\b/i}],"attr-name":/\b'\w+/i,keyword:/\b(?:abort|abs|abstract|accept|access|aliased|all|and|array|at|begin|body|case|constant|declare|delay|delta|digits|do|else|new|return|elsif|end|entry|exception|exit|for|function|generic|goto|if|in|interface|is|limited|loop|mod|not|null|of|others|out|overriding|package|pragma|private|procedure|protected|raise|range|record|rem|renames|requeue|reverse|select|separate|some|subtype|synchronized|tagged|task|terminate|then|type|until|use|when|while|with|xor)\b/i,boolean:/\b(?:true|false)\b/i,operator:/<[=>]?|>=?|=>?|:=|\/=?|\*\*?|[&+-]/,punctuation:/\.\.?|[,;():]/,char:/'.'/,variable:/\b[a-z](?:[_a-z\d])*\b/i}; +Prism.languages.agda={comment:/\{-[\s\S]*?(?:-\}|$)|--.*/,string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^\\\r\n"])*"/,greedy:!0},punctuation:/[(){}⦃⦄.;@]/,"class-name":{pattern:/((?:data|record) +)\S+/,lookbehind:!0},function:{pattern:/(^[ \t]*)[^:\r\n]+?(?=:)/m,lookbehind:!0},operator:{pattern:/(^\s*|\s)(?:[=|:∀→λ\\?_]|->)(?=\s)/,lookbehind:!0},keyword:/\b(?:Set|abstract|constructor|data|eta-equality|field|forall|forall|hiding|import|in|inductive|infix|infixl|infixr|instance|let|macro|module|mutual|no-eta-equality|open|overlap|pattern|postulate|primitive|private|public|quote|quoteContext|quoteGoal|quoteTerm|record|renaming|rewrite|syntax|tactic|unquote|unquoteDecl|unquoteDef|using|variable|where|with)\b/}; +Prism.languages.al={comment:/\/\/.*|\/\*[\s\S]*?\*\//,string:{pattern:/'(?:''|[^'\r\n])*'(?!')|"(?:""|[^"\r\n])*"(?!")/,greedy:!0},function:{pattern:/(\b(?:event|procedure|trigger)\s+|(?:^|[^.])\.\s*)[a-z_]\w*(?=\s*\()/i,lookbehind:!0},keyword:[/\b(?:array|asserterror|begin|break|case|do|downto|else|end|event|exit|for|foreach|function|if|implements|in|indataset|interface|internal|local|of|procedure|program|protected|repeat|runonclient|securityfiltering|suppressdispose|temporary|then|to|trigger|until|var|while|with|withevents)\b/i,/\b(?:action|actions|addafter|addbefore|addfirst|addlast|area|assembly|chartpart|codeunit|column|controladdin|cuegroup|customizes|dataitem|dataset|dotnet|elements|enum|enumextension|extends|field|fieldattribute|fieldelement|fieldgroup|fieldgroups|fields|filter|fixed|grid|group|key|keys|label|labels|layout|modify|moveafter|movebefore|movefirst|movelast|page|pagecustomization|pageextension|part|profile|query|repeater|report|requestpage|schema|separator|systempart|table|tableelement|tableextension|textattribute|textelement|type|usercontrol|value|xmlport)\b/i],number:/\b(?:0x[\da-f]+|(?:\d+\.?\d*|\.\d+)(?:e[+-]?\d+)?)(?:F|U(?:LL?)?|LL?)?\b/i,boolean:/\b(?:false|true)\b/i,variable:/\b(?:Curr(?:FieldNo|Page|Report)|RequestOptionsPage|x?Rec)\b/,"class-name":/\b(?:automation|biginteger|bigtext|blob|boolean|byte|char|clienttype|code|completiontriggererrorlevel|connectiontype|database|dataclassification|datascope|date|dateformula|datetime|decimal|defaultlayout|dialog|dictionary|dotnetassembly|dotnettypedeclaration|duration|errorinfo|errortype|executioncontext|executionmode|fieldclass|fieldref|fieldtype|file|filterpagebuilder|guid|httpclient|httpcontent|httpheaders|httprequestmessage|httpresponsemessage|instream|integer|joker|jsonarray|jsonobject|jsontoken|jsonvalue|keyref|list|moduledependencyinfo|moduleinfo|none|notification|notificationscope|objecttype|option|outstream|pageresult|record|recordid|recordref|reportformat|securityfilter|sessionsettings|tableconnectiontype|tablefilter|testaction|testfield|testfilterfield|testpage|testpermissions|testrequestpage|text|textbuilder|textconst|textencoding|time|transactionmodel|transactiontype|variant|verbosity|version|view|views|webserviceactioncontext|webserviceactionresultcode|xmlattribute|xmlattributecollection|xmlcdata|xmlcomment|xmldeclaration|xmldocument|xmldocumenttype|xmlelement|xmlnamespacemanager|xmlnametable|xmlnode|xmlnodelist|xmlprocessinginstruction|xmlreadoptions|xmltext|xmlwriteoptions)\b/i,operator:/\.\.|:[=:]|[-+*/]=?|<>|[<>]=?|=|\b(?:and|div|mod|not|or|xor)\b/i,punctuation:/[()\[\]{}:.;,]/}; +Prism.languages.antlr4={comment:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,string:{pattern:/'(?:\\.|[^\\'\r\n])*'/,greedy:!0},"character-class":{pattern:/\[(?:\\.|[^\\\]\r\n])*\]/,greedy:!0,alias:"regex",inside:{range:{pattern:/([^[]|(?:^|[^\\])(?:\\\\)*\\\[)-(?!\])/,lookbehind:!0,alias:"punctuation"},escape:/\\(?:u(?:[a-fA-F\d]{4}|\{[a-fA-F\d]+\})|[pP]\{[=\w-]+\}|[^\r\nupP])/,punctuation:/[\[\]]/}},action:{pattern:/\{(?:[^{}]|\{(?:[^{}]|\{(?:[^{}]|\{[^{}]*\})*\})*\})*\}/,greedy:!0,inside:{content:{pattern:/(\{)[\s\S]+(?=\})/,lookbehind:!0},punctuation:/[{}]/}},command:{pattern:/(->\s*)(?:\s*(?:,\s*)?\b[a-z]\w*(?:\s*\([^()\r\n]*\))?)+(?=\s*;)/i,lookbehind:!0,inside:{function:/\b\w+(?=\s*(?:[,(]|$))/,punctuation:/[,()]/}},annotation:{pattern:/@\w+(?:::\w+)*/,alias:"keyword"},label:{pattern:/#[ \t]*\w+/,alias:"punctuation"},keyword:/\b(?:catch|channels|finally|fragment|grammar|import|lexer|locals|mode|options|parser|returns|throws|tokens)\b/,definition:[{pattern:/\b[a-z]\w*(?=\s*:)/,alias:["rule","class-name"]},{pattern:/\b[A-Z]\w*(?=\s*:)/,alias:["token","constant"]}],constant:/\b[A-Z][A-Z_]*\b/,operator:/\.\.|->|[|~]|[*+?]\??/,punctuation:/[;:()=]/},Prism.languages.g4=Prism.languages.antlr4; +Prism.languages.apacheconf={comment:/#.*/,"directive-inline":{pattern:/(^\s*)\b(?:AcceptFilter|AcceptPathInfo|AccessFileName|Action|Add(?:Alt|AltByEncoding|AltByType|Charset|DefaultCharset|Description|Encoding|Handler|Icon|IconByEncoding|IconByType|InputFilter|Language|ModuleInfo|OutputFilter|OutputFilterByType|Type)|Alias|AliasMatch|Allow(?:CONNECT|EncodedSlashes|Methods|Override|OverrideList)?|Anonymous(?:_LogEmail|_MustGiveEmail|_NoUserID|_VerifyEmail)?|AsyncRequestWorkerFactor|Auth(?:BasicAuthoritative|BasicFake|BasicProvider|BasicUseDigestAlgorithm|DBDUserPWQuery|DBDUserRealmQuery|DBMGroupFile|DBMType|DBMUserFile|Digest(?:Algorithm|Domain|NonceLifetime|Provider|Qop|ShmemSize)|Form(?:Authoritative|Body|DisableNoStore|FakeBasicAuth|Location|LoginRequiredLocation|LoginSuccessLocation|LogoutLocation|Method|Mimetype|Password|Provider|SitePassphrase|Size|Username)|GroupFile|LDAP(?:AuthorizePrefix|BindAuthoritative|BindDN|BindPassword|CharsetConfig|CompareAsUser|CompareDNOnServer|DereferenceAliases|GroupAttribute|GroupAttributeIsDN|InitialBindAsUser|InitialBindPattern|MaxSubGroupDepth|RemoteUserAttribute|RemoteUserIsDN|SearchAsUser|SubGroupAttribute|SubGroupClass|Url)|Merging|Name|Type|UserFile|nCache(?:Context|Enable|ProvideFor|SOCache|Timeout)|nzFcgiCheckAuthnProvider|nzFcgiDefineProvider|zDBDLoginToReferer|zDBDQuery|zDBDRedirectQuery|zDBMType|zSendForbiddenOnFailure)|BalancerGrowth|BalancerInherit|BalancerMember|BalancerPersist|BrowserMatch|BrowserMatchNoCase|BufferSize|BufferedLogs|CGIDScriptTimeout|CGIMapExtension|Cache(?:DefaultExpire|DetailHeader|DirLength|DirLevels|Disable|Enable|File|Header|IgnoreCacheControl|IgnoreHeaders|IgnoreNoLastMod|IgnoreQueryString|IgnoreURLSessionIdentifiers|KeyBaseURL|LastModifiedFactor|Lock|LockMaxAge|LockPath|MaxExpire|MaxFileSize|MinExpire|MinFileSize|NegotiatedDocs|QuickHandler|ReadSize|ReadTime|Root|Socache(?:MaxSize|MaxTime|MinTime|ReadSize|ReadTime)?|StaleOnError|StoreExpired|StoreNoStore|StorePrivate)|CharsetDefault|CharsetOptions|CharsetSourceEnc|CheckCaseOnly|CheckSpelling|ChrootDir|ContentDigest|CookieDomain|CookieExpires|CookieName|CookieStyle|CookieTracking|CoreDumpDirectory|CustomLog|DBDExptime|DBDInitSQL|DBDKeep|DBDMax|DBDMin|DBDParams|DBDPersist|DBDPrepareSQL|DBDriver|DTracePrivileges|Dav|DavDepthInfinity|DavGenericLockDB|DavLockDB|DavMinTimeout|DefaultIcon|DefaultLanguage|DefaultRuntimeDir|DefaultType|Define|Deflate(?:BufferSize|CompressionLevel|FilterNote|InflateLimitRequestBody|InflateRatio(?:Burst|Limit)|MemLevel|WindowSize)|Deny|DirectoryCheckHandler|DirectoryIndex|DirectoryIndexRedirect|DirectorySlash|DocumentRoot|DumpIOInput|DumpIOOutput|EnableExceptionHook|EnableMMAP|EnableSendfile|Error|ErrorDocument|ErrorLog|ErrorLogFormat|Example|ExpiresActive|ExpiresByType|ExpiresDefault|ExtFilterDefine|ExtFilterOptions|ExtendedStatus|FallbackResource|FileETag|FilterChain|FilterDeclare|FilterProtocol|FilterProvider|FilterTrace|ForceLanguagePriority|ForceType|ForensicLog|GprofDir|GracefulShutdownTimeout|Group|Header|HeaderName|Heartbeat(?:Address|Listen|MaxServers|Storage)|HostnameLookups|ISAPI(?:AppendLogToErrors|AppendLogToQuery|CacheFile|FakeAsync|LogNotSupported|ReadAheadBuffer)|IdentityCheck|IdentityCheckTimeout|ImapBase|ImapDefault|ImapMenu|Include|IncludeOptional|Index(?:HeadInsert|Ignore|IgnoreReset|Options|OrderDefault|StyleSheet)|InputSed|KeepAlive|KeepAliveTimeout|KeptBodySize|LDAP(?:CacheEntries|CacheTTL|ConnectionPoolTTL|ConnectionTimeout|LibraryDebug|OpCacheEntries|OpCacheTTL|ReferralHopLimit|Referrals|Retries|RetryDelay|SharedCacheFile|SharedCacheSize|Timeout|TrustedClientCert|TrustedGlobalCert|TrustedMode|VerifyServerCert)|LanguagePriority|Limit(?:InternalRecursion|Request(?:Body|FieldSize|Fields|Line)|XMLRequestBody)|Listen|ListenBackLog|LoadFile|LoadModule|LogFormat|LogLevel|LogMessage|LuaAuthzProvider|LuaCodeCache|Lua(?:Hook(?:AccessChecker|AuthChecker|CheckUserID|Fixups|InsertFilter|Log|MapToStorage|TranslateName|TypeChecker)|Inherit|InputFilter|MapHandler|OutputFilter|PackageCPath|PackagePath|QuickHandler|Root|Scope)|MMapFile|Max(?:ConnectionsPerChild|KeepAliveRequests|MemFree|RangeOverlaps|RangeReversals|Ranges|RequestWorkers|SpareServers|SpareThreads|Threads)|MergeTrailers|MetaDir|MetaFiles|MetaSuffix|MimeMagicFile|MinSpareServers|MinSpareThreads|ModMimeUsePathInfo|ModemStandard|MultiviewsMatch|Mutex|NWSSLTrustedCerts|NWSSLUpgradeable|NameVirtualHost|NoProxy|Options|Order|OutputSed|PassEnv|PidFile|PrivilegesMode|Protocol|ProtocolEcho|Proxy(?:AddHeaders|BadHeader|Block|Domain|ErrorOverride|ExpressDBMFile|ExpressDBMType|ExpressEnable|FtpDirCharset|FtpEscapeWildcards|FtpListOnWildcard|HTML(?:BufSize|CharsetOut|DocType|Enable|Events|Extended|Fixups|Interp|Links|Meta|StripComments|URLMap)|IOBufferSize|MaxForwards|Pass(?:Inherit|InterpolateEnv|Match|Reverse|ReverseCookieDomain|ReverseCookiePath)?|PreserveHost|ReceiveBufferSize|Remote|RemoteMatch|Requests|SCGIInternalRedirect|SCGISendfile|Set|SourceAddress|Status|Timeout|Via)|RLimitCPU|RLimitMEM|RLimitNPROC|ReadmeName|ReceiveBufferSize|Redirect|RedirectMatch|RedirectPermanent|RedirectTemp|ReflectorHeader|RemoteIP(?:Header|InternalProxy|InternalProxyList|ProxiesHeader|TrustedProxy|TrustedProxyList)|RemoveCharset|RemoveEncoding|RemoveHandler|RemoveInputFilter|RemoveLanguage|RemoveOutputFilter|RemoveType|RequestHeader|RequestReadTimeout|Require|Rewrite(?:Base|Cond|Engine|Map|Options|Rule)|SSIETag|SSIEndTag|SSIErrorMsg|SSILastModified|SSILegacyExprParser|SSIStartTag|SSITimeFormat|SSIUndefinedEcho|SSL(?:CACertificateFile|CACertificatePath|CADNRequestFile|CADNRequestPath|CARevocationCheck|CARevocationFile|CARevocationPath|CertificateChainFile|CertificateFile|CertificateKeyFile|CipherSuite|Compression|CryptoDevice|Engine|FIPS|HonorCipherOrder|InsecureRenegotiation|OCSP(?:DefaultResponder|Enable|OverrideResponder|ResponderTimeout|ResponseMaxAge|ResponseTimeSkew|UseRequestNonce)|OpenSSLConfCmd|Options|PassPhraseDialog|Protocol|Proxy(?:CACertificateFile|CACertificatePath|CARevocation(?:Check|File|Path)|CheckPeer(?:CN|Expire|Name)|CipherSuite|Engine|MachineCertificate(?:ChainFile|File|Path)|Protocol|Verify|VerifyDepth)|RandomSeed|RenegBufferSize|Require|RequireSSL|SRPUnknownUserSeed|SRPVerifierFile|Session(?:Cache|CacheTimeout|TicketKeyFile|Tickets)|Stapling(?:Cache|ErrorCacheTimeout|FakeTryLater|ForceURL|ResponderTimeout|ResponseMaxAge|ResponseTimeSkew|ReturnResponderErrors|StandardCacheTimeout)|StrictSNIVHostCheck|UseStapling|UserName|VerifyClient|VerifyDepth)|Satisfy|ScoreBoardFile|Script(?:Alias|AliasMatch|InterpreterSource|Log|LogBuffer|LogLength|Sock)?|SecureListen|SeeRequestTail|SendBufferSize|Server(?:Admin|Alias|Limit|Name|Path|Root|Signature|Tokens)|Session(?:Cookie(?:Name|Name2|Remove)|Crypto(?:Cipher|Driver|Passphrase|PassphraseFile)|DBD(?:CookieName|CookieName2|CookieRemove|DeleteLabel|InsertLabel|PerUser|SelectLabel|UpdateLabel)|Env|Exclude|Header|Include|MaxAge)?|SetEnv|SetEnvIf|SetEnvIfExpr|SetEnvIfNoCase|SetHandler|SetInputFilter|SetOutputFilter|StartServers|StartThreads|Substitute|Suexec|SuexecUserGroup|ThreadLimit|ThreadStackSize|ThreadsPerChild|TimeOut|TraceEnable|TransferLog|TypesConfig|UnDefine|UndefMacro|UnsetEnv|Use|UseCanonicalName|UseCanonicalPhysicalPort|User|UserDir|VHostCGIMode|VHostCGIPrivs|VHostGroup|VHostPrivs|VHostSecure|VHostUser|Virtual(?:DocumentRoot|ScriptAlias)(?:IP)?|WatchdogInterval|XBitHack|xml2EncAlias|xml2EncDefault|xml2StartParse)\b/im,lookbehind:!0,alias:"property"},"directive-block":{pattern:/<\/?\b(?:Auth[nz]ProviderAlias|Directory|DirectoryMatch|Else|ElseIf|Files|FilesMatch|If|IfDefine|IfModule|IfVersion|Limit|LimitExcept|Location|LocationMatch|Macro|Proxy|Require(?:All|Any|None)|VirtualHost)\b *.*>/i,inside:{"directive-block":{pattern:/^<\/?\w+/,inside:{punctuation:/^<\/?/},alias:"tag"},"directive-block-parameter":{pattern:/.*[^>]/,inside:{punctuation:/:/,string:{pattern:/("|').*\1/,inside:{variable:/[$%]\{?(?:\w\.?[-+:]?)+\}?/}}},alias:"attr-value"},punctuation:/>/},alias:"tag"},"directive-flags":{pattern:/\[(?:\w,?)+\]/,alias:"keyword"},string:{pattern:/("|').*\1/,inside:{variable:/[$%]\{?(?:\w\.?[-+:]?)+\}?/}},variable:/[$%]\{?(?:\w\.?[-+:]?)+\}?/,regex:/\^?.*\$|\^.*\$?/}; +Prism.languages.apl={comment:/(?:⍝|#[! ]).*$/m,string:{pattern:/'(?:[^'\r\n]|'')*'/,greedy:!0},number:/¯?(?:\d*\.?\b\d+(?:e[+¯]?\d+)?|¯|∞)(?:j¯?(?:\d*\.?\d+(?:e[+¯]?\d+)?|¯|∞))?/i,statement:/:[A-Z][a-z][A-Za-z]*\b/,"system-function":{pattern:/⎕[A-Z]+/i,alias:"function"},constant:/[⍬⌾#⎕⍞]/,function:/[-+×÷⌈⌊∣|⍳⍸?*⍟○!⌹<≤=>≥≠≡≢∊⍷∪∩~∨∧⍱⍲⍴,⍪⌽⊖⍉↑↓⊂⊃⊆⊇⌷⍋⍒⊤⊥⍕⍎⊣⊢⍁⍂≈⍯↗¤→]/,"monadic-operator":{pattern:/[\\\/⌿⍀¨⍨⌶&∥]/,alias:"operator"},"dyadic-operator":{pattern:/[.⍣⍠⍤∘⌸@⌺⍥]/,alias:"operator"},assignment:{pattern:/←/,alias:"keyword"},punctuation:/[\[;\]()◇⋄]/,dfn:{pattern:/[{}⍺⍵⍶⍹∇⍫:]/,alias:"builtin"}}; +Prism.languages.applescript={comment:[/\(\*(?:\(\*(?:[^*]|\*(?!\)))*\*\)|(?!\(\*)[\s\S])*?\*\)/,/--.+/,/#.+/],string:/"(?:\\.|[^"\\\r\n])*"/,number:/(?:\b\d+\.?\d*|\B\.\d+)(?:e-?\d+)?\b/i,operator:[/[&=≠≤≥*+\-\/÷^]|[<>]=?/,/\b(?:(?:start|begin|end)s? with|(?:(?:does not|doesn't) contain|contains?)|(?:is|isn't|is not) (?:in|contained by)|(?:(?:is|isn't|is not) )?(?:greater|less) than(?: or equal)?(?: to)?|(?:(?:does not|doesn't) come|comes) (?:before|after)|(?:is|isn't|is not) equal(?: to)?|(?:(?:does not|doesn't) equal|equals|equal to|isn't|is not)|(?:a )?(?:ref(?: to)?|reference to)|(?:and|or|div|mod|as|not))\b/],keyword:/\b(?:about|above|after|against|apart from|around|aside from|at|back|before|beginning|behind|below|beneath|beside|between|but|by|considering|continue|copy|does|eighth|else|end|equal|error|every|exit|false|fifth|first|for|fourth|from|front|get|given|global|if|ignoring|in|instead of|into|is|it|its|last|local|me|middle|my|ninth|of|on|onto|out of|over|prop|property|put|repeat|return|returning|second|set|seventh|since|sixth|some|tell|tenth|that|the|then|third|through|thru|timeout|times|to|transaction|true|try|until|where|while|whose|with|without)\b/,class:{pattern:/\b(?:alias|application|boolean|class|constant|date|file|integer|list|number|POSIX file|real|record|reference|RGB color|script|text|centimetres|centimeters|feet|inches|kilometres|kilometers|metres|meters|miles|yards|square feet|square kilometres|square kilometers|square metres|square meters|square miles|square yards|cubic centimetres|cubic centimeters|cubic feet|cubic inches|cubic metres|cubic meters|cubic yards|gallons|litres|liters|quarts|grams|kilograms|ounces|pounds|degrees Celsius|degrees Fahrenheit|degrees Kelvin)\b/,alias:"builtin"},punctuation:/[{}():,¬«»《》]/}; +Prism.languages.aql={comment:/\/\/.*|\/\*[\s\S]*?\*\//,property:{pattern:/([{,]\s*)(?:(?!\d)\w+|(["'´`])(?:(?!\2)[^\\\r\n]|\\.)*\2)(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(["'´`])(?:(?!\1)[^\\\r\n]|\\.)*\1/,greedy:!0},variable:/@@?\w+/,keyword:[{pattern:/(\bWITH\s+)COUNT(?=\s+INTO\b)/i,lookbehind:!0},/\b(?:AGGREGATE|ALL|AND|ANY|ASC|COLLECT|DESC|DISTINCT|FILTER|FOR|GRAPH|IN|INBOUND|INSERT|INTO|K_SHORTEST_PATHS|LET|LIKE|LIMIT|NONE|NOT|NULL|OR|OUTBOUND|REMOVE|REPLACE|RETURN|SHORTEST_PATH|SORT|UPDATE|UPSERT|WITH)\b/i,{pattern:/(^|[^\w.[])(?:KEEP|PRUNE|SEARCH|TO)\b/i,lookbehind:!0},{pattern:/(^|[^\w.[])(?:CURRENT|NEW|OLD)\b/,lookbehind:!0},{pattern:/\bOPTIONS(?=\s*{)/i}],function:/(?!\d)\w+(?=\s*\()/,boolean:/(?:true|false)/i,range:{pattern:/\.\./,alias:"operator"},number:/(?:\B\.\d+|\b(?:0|[1-9]\d*)(?:\.\d+)?)(?:e[+-]?\d+)?/i,operator:/\*{2,}|[=!]~|[!=<>]=?|&&|\|\||[-+*/%]/,punctuation:/::|[?.:,;()[\]{}]/}; +Prism.languages.c=Prism.languages.extend("clike",{comment:{pattern:/\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},"class-name":{pattern:/(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+/,lookbehind:!0},keyword:/\b(?:__attribute__|_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|asm|typeof|inline|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|union|unsigned|void|volatile|while)\b/,function:/[a-z_]\w*(?=\s*\()/i,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/,number:/(?:\b0x(?:[\da-f]+\.?[\da-f]*|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+\.?\d*|\B\.\d+)(?:e[+-]?\d+)?)[ful]*/i}),Prism.languages.insertBefore("c","string",{macro:{pattern:/(^\s*)#\s*[a-z]+(?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},Prism.languages.c.string],comment:Prism.languages.c.comment,directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:Prism.languages.c}}},constant:/\b(?:__FILE__|__LINE__|__DATE__|__TIME__|__TIMESTAMP__|__func__|EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|stdin|stdout|stderr)\b/}),delete Prism.languages.c.boolean; +!function(e){var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char8_t|char16_t|char32_t|class|compl|concept|const|consteval|constexpr|constinit|const_cast|continue|co_await|co_return|co_yield|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|float|for|friend|goto|if|inline|int|int8_t|int16_t|int32_t|int64_t|uint8_t|uint16_t|uint32_t|uint64_t|long|mutable|namespace|new|noexcept|nullptr|operator|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/;e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp("(\\b(?:class|concept|enum|struct|typename)\\s+)(?!)\\w+".replace(//g,function(){return t.source})),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:t,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+\.?[\da-f']*|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+\.?[\d']*|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]*/i,greedy:!0},operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:true|false)\b/}),e.languages.insertBefore("cpp","string",{"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),e.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)(?:[^;{}"'])+?(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend("cpp",{})}}),e.languages.insertBefore("inside","operator",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(Prism); +Prism.languages.arduino=Prism.languages.extend("cpp",{keyword:/\b(?:setup|if|else|while|do|for|return|in|instanceof|default|function|loop|goto|switch|case|new|try|throw|catch|finally|null|break|continue|boolean|bool|void|byte|word|string|String|array|int|long|integer|double)\b/,builtin:/\b(?:KeyboardController|MouseController|SoftwareSerial|EthernetServer|EthernetClient|LiquidCrystal|LiquidCrystal_I2C|RobotControl|GSMVoiceCall|EthernetUDP|EsploraTFT|HttpClient|RobotMotor|WiFiClient|GSMScanner|FileSystem|Scheduler|GSMServer|YunClient|YunServer|IPAddress|GSMClient|GSMModem|Keyboard|Ethernet|Console|GSMBand|Esplora|Stepper|Process|WiFiUDP|GSM_SMS|Mailbox|USBHost|Firmata|PImage|Client|Server|GSMPIN|FileIO|Bridge|Serial|EEPROM|Stream|Mouse|Audio|Servo|File|Task|GPRS|WiFi|Wire|TFT|GSM|SPI|SD|runShellCommandAsynchronously|analogWriteResolution|retrieveCallingNumber|printFirmwareVersion|analogReadResolution|sendDigitalPortPair|noListenOnLocalhost|readJoystickButton|setFirmwareVersion|readJoystickSwitch|scrollDisplayRight|getVoiceCallStatus|scrollDisplayLeft|writeMicroseconds|delayMicroseconds|beginTransmission|getSignalStrength|runAsynchronously|getAsynchronously|listenOnLocalhost|getCurrentCarrier|readAccelerometer|messageAvailable|sendDigitalPorts|lineFollowConfig|countryNameWrite|runShellCommand|readStringUntil|rewindDirectory|readTemperature|setClockDivider|readLightSensor|endTransmission|analogReference|detachInterrupt|countryNameRead|attachInterrupt|encryptionType|readBytesUntil|robotNameWrite|readMicrophone|robotNameRead|cityNameWrite|userNameWrite|readJoystickY|readJoystickX|mouseReleased|openNextFile|scanNetworks|noInterrupts|digitalWrite|beginSpeaker|mousePressed|isActionDone|mouseDragged|displayLogos|noAutoscroll|addParameter|remoteNumber|getModifiers|keyboardRead|userNameRead|waitContinue|processInput|parseCommand|printVersion|readNetworks|writeMessage|blinkVersion|cityNameRead|readMessage|setDataMode|parsePacket|isListening|setBitOrder|beginPacket|isDirectory|motorsWrite|drawCompass|digitalRead|clearScreen|serialEvent|rightToLeft|setTextSize|leftToRight|requestFrom|keyReleased|compassRead|analogWrite|interrupts|WiFiServer|disconnect|playMelody|parseFloat|autoscroll|getPINUsed|setPINUsed|setTimeout|sendAnalog|readSlider|analogRead|beginWrite|createChar|motorsStop|keyPressed|tempoWrite|readButton|subnetMask|debugPrint|macAddress|writeGreen|randomSeed|attachGPRS|readString|sendString|remotePort|releaseAll|mouseMoved|background|getXChange|getYChange|answerCall|getResult|voiceCall|endPacket|constrain|getSocket|writeJSON|getButton|available|connected|findUntil|readBytes|exitValue|readGreen|writeBlue|startLoop|IPAddress|isPressed|sendSysex|pauseMode|gatewayIP|setCursor|getOemKey|tuneWrite|noDisplay|loadImage|switchPIN|onRequest|onReceive|changePIN|playFile|noBuffer|parseInt|overflow|checkPIN|knobRead|beginTFT|bitClear|updateIR|bitWrite|position|writeRGB|highByte|writeRed|setSpeed|readBlue|noStroke|remoteIP|transfer|shutdown|hangCall|beginSMS|endWrite|attached|maintain|noCursor|checkReg|checkPUK|shiftOut|isValid|shiftIn|pulseIn|connect|println|localIP|pinMode|getIMEI|display|noBlink|process|getBand|running|beginSD|drawBMP|lowByte|setBand|release|bitRead|prepare|pointTo|readRed|setMode|noFill|remove|listen|stroke|detach|attach|noTone|exists|buffer|height|bitSet|circle|config|cursor|random|IRread|setDNS|endSMS|getKey|micros|millis|begin|print|write|ready|flush|width|isPIN|blink|clear|press|mkdir|rmdir|close|point|yield|image|BSSID|click|delay|read|text|move|peek|beep|rect|line|open|seek|fill|size|turn|stop|home|find|step|tone|sqrt|RSSI|SSID|end|bit|tan|cos|sin|pow|map|abs|max|min|get|run|put)\b/,constant:/\b(?:DIGITAL_MESSAGE|FIRMATA_STRING|ANALOG_MESSAGE|REPORT_DIGITAL|REPORT_ANALOG|INPUT_PULLUP|SET_PIN_MODE|INTERNAL2V56|SYSTEM_RESET|LED_BUILTIN|INTERNAL1V1|SYSEX_START|INTERNAL|EXTERNAL|DEFAULT|OUTPUT|INPUT|HIGH|LOW)\b/}); +Prism.languages.arff={comment:/%.*/,string:{pattern:/(["'])(?:\\.|(?!\1)[^\\\r\n])*\1/,greedy:!0},keyword:/@(?:attribute|data|end|relation)\b/i,number:/\b\d+(?:\.\d+)?\b/,punctuation:/[{},]/}; +!function(t){var n={pattern:/(^[ \t]*)\[(?!\[)(?:(["'$`])(?:(?!\2)[^\\]|\\.)*\2|\[(?:[^\]\\]|\\.)*\]|[^\]\\]|\\.)*\]/m,lookbehind:!0,inside:{quoted:{pattern:/([$`])(?:(?!\1)[^\\]|\\.)*\1/,inside:{punctuation:/^[$`]|[$`]$/}},interpreted:{pattern:/'(?:[^'\\]|\\.)*'/,inside:{punctuation:/^'|'$/}},string:/"(?:[^"\\]|\\.)*"/,variable:/\w+(?==)/,punctuation:/^\[|\]$|,/,operator:/=/,"attr-value":/(?!^\s+$).+/}},a=t.languages.asciidoc={"comment-block":{pattern:/^(\/{4,})(?:\r?\n|\r)(?:[\s\S]*(?:\r?\n|\r))??\1/m,alias:"comment"},table:{pattern:/^\|={3,}(?:(?:\r?\n|\r).*)*?(?:\r?\n|\r)\|={3,}$/m,inside:{specifiers:{pattern:/(?!\|)(?:(?:(?:\d+(?:\.\d+)?|\.\d+)[+*])?(?:[<^>](?:\.[<^>])?|\.[<^>])?[a-z]*)(?=\|)/,alias:"attr-value"},punctuation:{pattern:/(^|[^\\])[|!]=*/,lookbehind:!0}}},"passthrough-block":{pattern:/^(\+{4,})(?:\r?\n|\r)(?:[\s\S]*(?:\r?\n|\r))??\1$/m,inside:{punctuation:/^\++|\++$/}},"literal-block":{pattern:/^(-{4,}|\.{4,})(?:\r?\n|\r)(?:[\s\S]*(?:\r?\n|\r))??\1$/m,inside:{punctuation:/^(?:-+|\.+)|(?:-+|\.+)$/}},"other-block":{pattern:/^(--|\*{4,}|_{4,}|={4,})(?:\r?\n|\r)(?:[\s\S]*(?:\r?\n|\r))??\1$/m,inside:{punctuation:/^(?:-+|\*+|_+|=+)|(?:-+|\*+|_+|=+)$/}},"list-punctuation":{pattern:/(^[ \t]*)(?:-|\*{1,5}|\.{1,5}|(?:[a-z]|\d+)\.|[xvi]+\))(?= )/im,lookbehind:!0,alias:"punctuation"},"list-label":{pattern:/(^[ \t]*)[a-z\d].+(?::{2,4}|;;)(?=\s)/im,lookbehind:!0,alias:"symbol"},"indented-block":{pattern:/((\r?\n|\r)\2)([ \t]+)\S.*(?:(?:\r?\n|\r)\3.+)*(?=\2{2}|$)/,lookbehind:!0},comment:/^\/\/.*/m,title:{pattern:/^.+(?:\r?\n|\r)(?:={3,}|-{3,}|~{3,}|\^{3,}|\+{3,})$|^={1,5} +.+|^\.(?![\s.]).*/m,alias:"important",inside:{punctuation:/^(?:\.|=+)|(?:=+|-+|~+|\^+|\++)$/}},"attribute-entry":{pattern:/^:[^:\r\n]+:(?: .*?(?: \+(?:\r?\n|\r).*?)*)?$/m,alias:"tag"},attributes:n,hr:{pattern:/^'{3,}$/m,alias:"punctuation"},"page-break":{pattern:/^<{3,}$/m,alias:"punctuation"},admonition:{pattern:/^(?:TIP|NOTE|IMPORTANT|WARNING|CAUTION):/m,alias:"keyword"},callout:[{pattern:/(^[ \t]*)/m,lookbehind:!0,alias:"symbol"},{pattern:/<\d+>/,alias:"symbol"}],macro:{pattern:/\b[a-z\d][a-z\d-]*::?(?:(?:\S+)??\[(?:[^\]\\"]|(["'])(?:(?!\1)[^\\]|\\.)*\1|\\.)*\])/,inside:{function:/^[a-z\d-]+(?=:)/,punctuation:/^::?/,attributes:{pattern:/(?:\[(?:[^\]\\"]|(["'])(?:(?!\1)[^\\]|\\.)*\1|\\.)*\])/,inside:n.inside}}},inline:{pattern:/(^|[^\\])(?:(?:\B\[(?:[^\]\\"]|(["'])(?:(?!\2)[^\\]|\\.)*\2|\\.)*\])?(?:\b_(?!\s)(?: _|[^_\\\r\n]|\\.)+(?:(?:\r?\n|\r)(?: _|[^_\\\r\n]|\\.)+)*_\b|\B``(?!\s).+?(?:(?:\r?\n|\r).+?)*''\B|\B`(?!\s)(?:[^`'\s]|\s+\S)+['`]\B|\B(['*+#])(?!\s)(?: \3|(?!\3)[^\\\r\n]|\\.)+(?:(?:\r?\n|\r)(?: \3|(?!\3)[^\\\r\n]|\\.)+)*\3\B)|(?:\[(?:[^\]\\"]|(["'])(?:(?!\4)[^\\]|\\.)*\4|\\.)*\])?(?:(__|\*\*|\+\+\+?|##|\$\$|[~^]).+?(?:(?:\r?\n|\r).+?)*\5|\{[^}\r\n]+\}|\[\[\[?.+?(?:(?:\r?\n|\r).+?)*\]?\]\]|<<.+?(?:(?:\r?\n|\r).+?)*>>|\(\(\(?.+?(?:(?:\r?\n|\r).+?)*\)?\)\)))/m,lookbehind:!0,inside:{attributes:n,url:{pattern:/^(?:\[\[\[?.+?\]?\]\]|<<.+?>>)$/,inside:{punctuation:/^(?:\[\[\[?|<<)|(?:\]\]\]?|>>)$/}},"attribute-ref":{pattern:/^\{.+\}$/,inside:{variable:{pattern:/(^\{)[a-z\d,+_-]+/,lookbehind:!0},operator:/^[=?!#%@$]|!(?=[:}])/,punctuation:/^\{|\}$|::?/}},italic:{pattern:/^(['_])[\s\S]+\1$/,inside:{punctuation:/^(?:''?|__?)|(?:''?|__?)$/}},bold:{pattern:/^\*[\s\S]+\*$/,inside:{punctuation:/^\*\*?|\*\*?$/}},punctuation:/^(?:``?|\+{1,3}|##?|\$\$|[~^]|\(\(\(?)|(?:''?|\+{1,3}|##?|\$\$|[~^`]|\)?\)\))$/}},replacement:{pattern:/\((?:C|TM|R)\)/,alias:"builtin"},entity:/&#?[\da-z]{1,8};/i,"line-continuation":{pattern:/(^| )\+$/m,lookbehind:!0,alias:"punctuation"}};function i(t){for(var n={},i=0,e=(t=t.split(" ")).length;i>/g,function(e,n){return"(?:"+s[+n]+")"})}function t(e,n,s){return RegExp(a(e,n),s||"")}function e(e,n){for(var s=0;s>/g,function(){return"(?:"+e+")"});return e.replace(/<>/g,"[^\\s\\S]")}var n="bool byte char decimal double dynamic float int long object sbyte short string uint ulong ushort var void",r="class enum interface struct",i="add alias and ascending async await by descending from get global group into join let nameof not notnull on or orderby partial remove select set unmanaged value when where where",o="abstract as base break case catch checked const continue default delegate do else event explicit extern finally fixed for foreach goto if implicit in internal is lock namespace new null operator out override params private protected public readonly ref return sealed sizeof stackalloc static switch this throw try typeof unchecked unsafe using virtual volatile while yield";function l(e){return"\\b(?:"+e.trim().replace(/ /g,"|")+")\\b"}var d=l(r),p=RegExp(l(n+" "+r+" "+i+" "+o)),c=l(r+" "+i+" "+o),u=l(n+" "+r+" "+o),g=e("<(?:[^<>;=+\\-*/%&|^]|<>)*>",2),b=e("\\((?:[^()]|<>)*\\)",2),h="@?\\b[A-Za-z_]\\w*\\b",f=a("<<0>>(?:\\s*<<1>>)?",[h,g]),m=a("(?!<<0>>)<<1>>(?:\\s*\\.\\s*<<1>>)*",[c,f]),k="\\[\\s*(?:,\\s*)*\\]",y=a("<<0>>(?:\\s*(?:\\?\\s*)?<<1>>)*(?:\\s*\\?)?",[m,k]),w=a("(?:<<0>>|<<1>>)(?:\\s*(?:\\?\\s*)?<<2>>)*(?:\\s*\\?)?",[a("\\(<<0>>+(?:,<<0>>+)+\\)",[a("[^,()<>[\\];=+\\-*/%&|^]|<<0>>|<<1>>|<<2>>",[g,b,k])]),m,k]),v={keyword:p,punctuation:/[<>()?,.:[\]]/},x="'(?:[^\r\n'\\\\]|\\\\.|\\\\[Uux][\\da-fA-F]{1,8})'",$='"(?:\\\\.|[^\\\\"\r\n])*"';s.languages.csharp=s.languages.extend("clike",{string:[{pattern:t("(^|[^$\\\\])<<0>>",['@"(?:""|\\\\[^]|[^\\\\"])*"(?!")']),lookbehind:!0,greedy:!0},{pattern:t("(^|[^@$\\\\])<<0>>",[$]),lookbehind:!0,greedy:!0},{pattern:RegExp(x),greedy:!0,alias:"character"}],"class-name":[{pattern:t("(\\busing\\s+static\\s+)<<0>>(?=\\s*;)",[m]),lookbehind:!0,inside:v},{pattern:t("(\\busing\\s+<<0>>\\s*=\\s*)<<1>>(?=\\s*;)",[h,w]),lookbehind:!0,inside:v},{pattern:t("(\\busing\\s+)<<0>>(?=\\s*=)",[h]),lookbehind:!0},{pattern:t("(\\b<<0>>\\s+)<<1>>",[d,f]),lookbehind:!0,inside:v},{pattern:t("(\\bcatch\\s*\\(\\s*)<<0>>",[m]),lookbehind:!0,inside:v},{pattern:t("(\\bwhere\\s+)<<0>>",[h]),lookbehind:!0},{pattern:t("(\\b(?:is(?:\\s+not)?|as)\\s+)<<0>>",[y]),lookbehind:!0,inside:v},{pattern:t("\\b<<0>>(?=\\s+(?!<<1>>)<<2>>(?:\\s*[=,;:{)\\]]|\\s+(?:in|when)\\b))",[w,u,h]),inside:v}],keyword:p,number:/(?:\b0(?:x[\da-f_]*[\da-f]|b[01_]*[01])|(?:\B\.\d+(?:_+\d+)*|\b\d+(?:_+\d+)*(?:\.\d+(?:_+\d+)*)?)(?:e[-+]?\d+(?:_+\d+)*)?)(?:ul|lu|[dflmu])?\b/i,operator:/>>=?|<<=?|[-=]>|([-+&|])\1|~|\?\?=?|[-+*/%&|^!=<>]=?/,punctuation:/\?\.?|::|[{}[\];(),.:]/}),s.languages.insertBefore("csharp","number",{range:{pattern:/\.\./,alias:"operator"}}),s.languages.insertBefore("csharp","punctuation",{"named-parameter":{pattern:t("([(,]\\s*)<<0>>(?=\\s*:)",[h]),lookbehind:!0,alias:"punctuation"}}),s.languages.insertBefore("csharp","class-name",{namespace:{pattern:t("(\\b(?:namespace|using)\\s+)<<0>>(?:\\s*\\.\\s*<<0>>)*(?=\\s*[;{])",[h]),lookbehind:!0,inside:{punctuation:/\./}},"type-expression":{pattern:t("(\\b(?:default|typeof|sizeof)\\s*\\(\\s*)(?:[^()\\s]|\\s(?!\\s*\\))|<<0>>)*(?=\\s*\\))",[b]),lookbehind:!0,alias:"class-name",inside:v},"return-type":{pattern:t("<<0>>(?=\\s+(?:<<1>>\\s*(?:=>|[({]|\\.\\s*this\\s*\\[)|this\\s*\\[))",[w,m]),inside:v,alias:"class-name"},"constructor-invocation":{pattern:t("(\\bnew\\s+)<<0>>(?=\\s*[[({])",[w]),lookbehind:!0,inside:v,alias:"class-name"},"generic-method":{pattern:t("<<0>>\\s*<<1>>(?=\\s*\\()",[h,g]),inside:{function:t("^<<0>>",[h]),generic:{pattern:RegExp(g),alias:"class-name",inside:v}}},"type-list":{pattern:t("\\b((?:<<0>>\\s+<<1>>|where\\s+<<2>>)\\s*:\\s*)(?:<<3>>|<<4>>)(?:\\s*,\\s*(?:<<3>>|<<4>>))*(?=\\s*(?:where|[{;]|=>|$))",[d,f,h,w,p.source]),lookbehind:!0,inside:{keyword:p,"class-name":{pattern:RegExp(w),greedy:!0,inside:v},punctuation:/,/}},preprocessor:{pattern:/(^\s*)#.*/m,lookbehind:!0,alias:"property",inside:{directive:{pattern:/(\s*#)\b(?:define|elif|else|endif|endregion|error|if|line|pragma|region|undef|warning)\b/,lookbehind:!0,alias:"keyword"}}}});var _=$+"|"+x,B=a("/(?![*/])|//[^\r\n]*[\r\n]|/\\*(?:[^*]|\\*(?!/))*\\*/|<<0>>",[_]),E=e(a("[^\"'/()]|<<0>>|\\(<>*\\)",[B]),2),R="\\b(?:assembly|event|field|method|module|param|property|return|type)\\b",P=a("<<0>>(?:\\s*\\(<<1>>*\\))?",[m,E]);s.languages.insertBefore("csharp","class-name",{attribute:{pattern:t("((?:^|[^\\s\\w>)?])\\s*\\[\\s*)(?:<<0>>\\s*:\\s*)?<<1>>(?:\\s*,\\s*<<1>>)*(?=\\s*\\])",[R,P]),lookbehind:!0,greedy:!0,inside:{target:{pattern:t("^<<0>>(?=\\s*:)",[R]),alias:"keyword"},"attribute-arguments":{pattern:t("\\(<<0>>*\\)",[E]),inside:s.languages.csharp},"class-name":{pattern:RegExp(m),inside:{punctuation:/\./}},punctuation:/[:,]/}}});var z=":[^}\r\n]+",S=e(a("[^\"'/()]|<<0>>|\\(<>*\\)",[B]),2),j=a("\\{(?!\\{)(?:(?![}:])<<0>>)*<<1>>?\\}",[S,z]),A=e(a("[^\"'/()]|/(?!\\*)|/\\*(?:[^*]|\\*(?!/))*\\*/|<<0>>|\\(<>*\\)",[_]),2),F=a("\\{(?!\\{)(?:(?![}:])<<0>>)*<<1>>?\\}",[A,z]);function U(e,n){return{interpolation:{pattern:t("((?:^|[^{])(?:\\{\\{)*)<<0>>",[e]),lookbehind:!0,inside:{"format-string":{pattern:t("(^\\{(?:(?![}:])<<0>>)*)<<1>>(?=\\}$)",[n,z]),lookbehind:!0,inside:{punctuation:/^:/}},punctuation:/^\{|\}$/,expression:{pattern:/[\s\S]+/,alias:"language-csharp",inside:s.languages.csharp}}},string:/[\s\S]+/}}s.languages.insertBefore("csharp","string",{"interpolation-string":[{pattern:t('(^|[^\\\\])(?:\\$@|@\\$)"(?:""|\\\\[^]|\\{\\{|<<0>>|[^\\\\{"])*"',[j]),lookbehind:!0,greedy:!0,inside:U(j,S)},{pattern:t('(^|[^@\\\\])\\$"(?:\\\\.|\\{\\{|<<0>>|[^\\\\"{])*"',[F]),lookbehind:!0,greedy:!0,inside:U(F,A)}]})}(Prism),Prism.languages.dotnet=Prism.languages.cs=Prism.languages.csharp; +Prism.languages.aspnet=Prism.languages.extend("markup",{"page-directive":{pattern:/<%\s*@.*%>/i,alias:"tag",inside:{"page-directive":{pattern:/<%\s*@\s*(?:Assembly|Control|Implements|Import|Master(?:Type)?|OutputCache|Page|PreviousPageType|Reference|Register)?|%>/i,alias:"tag"},rest:Prism.languages.markup.tag.inside}},directive:{pattern:/<%.*%>/i,alias:"tag",inside:{directive:{pattern:/<%\s*?[$=%#:]{0,2}|%>/i,alias:"tag"},rest:Prism.languages.csharp}}}),Prism.languages.aspnet.tag.pattern=/<(?!%)\/?[^\s>\/]+(?:\s+[^\s>\/=]+(?:=(?:("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|[^\s'">=]+))?)*\s*\/?>/i,Prism.languages.insertBefore("inside","punctuation",{directive:Prism.languages.aspnet.directive},Prism.languages.aspnet.tag.inside["attr-value"]),Prism.languages.insertBefore("aspnet","comment",{"asp-comment":{pattern:/<%--[\s\S]*?--%>/,alias:["asp","comment"]}}),Prism.languages.insertBefore("aspnet",Prism.languages.javascript?"script":"tag",{"asp-script":{pattern:/()[\s\S]*?(?=<\/script>)/i,lookbehind:!0,alias:["asp","script"],inside:Prism.languages.csharp||{}}}); +Prism.languages.asm6502={comment:/;.*/,directive:{pattern:/\.\w+(?= )/,alias:"keyword"},string:/(["'`])(?:\\.|(?!\1)[^\\\r\n])*\1/,opcode:{pattern:/\b(?:adc|and|asl|bcc|bcs|beq|bit|bmi|bne|bpl|brk|bvc|bvs|clc|cld|cli|clv|cmp|cpx|cpy|dec|dex|dey|eor|inc|inx|iny|jmp|jsr|lda|ldx|ldy|lsr|nop|ora|pha|php|pla|plp|rol|ror|rti|rts|sbc|sec|sed|sei|sta|stx|sty|tax|tay|tsx|txa|txs|tya|ADC|AND|ASL|BCC|BCS|BEQ|BIT|BMI|BNE|BPL|BRK|BVC|BVS|CLC|CLD|CLI|CLV|CMP|CPX|CPY|DEC|DEX|DEY|EOR|INC|INX|INY|JMP|JSR|LDA|LDX|LDY|LSR|NOP|ORA|PHA|PHP|PLA|PLP|ROL|ROR|RTI|RTS|SBC|SEC|SED|SEI|STA|STX|STY|TAX|TAY|TSX|TXA|TXS|TYA)\b/,alias:"property"},hexnumber:{pattern:/#?\$[\da-f]{2,4}\b/i,alias:"string"},binarynumber:{pattern:/#?%[01]+\b/,alias:"string"},decimalnumber:{pattern:/#?\b\d+\b/,alias:"string"},register:{pattern:/\b[xya]\b/i,alias:"variable"}}; +Prism.languages.autohotkey={comment:[{pattern:/(^|\s);.*/,lookbehind:!0},{pattern:/(^\s*)\/\*[^\r\n]*(?:[\r\n](?![ \t]*\*\/)|[^\r\n])*(?:[\r\n][ \t]*\*\/)?/m,lookbehind:!0,greedy:!0}],string:/"(?:[^"\n\r]|"")*"/m,tag:/^[ \t]*[^\s:]+?(?=:(?:[^:]|$))/m,variable:/%\w+%/,number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+\.?\d*|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/\?|\/\/?=?|:=|\|[=|]?|&[=&]?|\+[=+]?|-[=-]?|\*[=*]?|<(?:<=?|>|=)?|>>?=?|[.^!=~]=?|\b(?:AND|NOT|OR)\b/,boolean:/\b(?:true|false)\b/,selector:/\b(?:AutoTrim|BlockInput|Break|Click|ClipWait|Continue|Control|ControlClick|ControlFocus|ControlGet|ControlGetFocus|ControlGetPos|ControlGetText|ControlMove|ControlSend|ControlSendRaw|ControlSetText|CoordMode|Critical|DetectHiddenText|DetectHiddenWindows|Drive|DriveGet|DriveSpaceFree|EnvAdd|EnvDiv|EnvGet|EnvMult|EnvSet|EnvSub|EnvUpdate|Exit|ExitApp|FileAppend|FileCopy|FileCopyDir|FileCreateDir|FileCreateShortcut|FileDelete|FileEncoding|FileGetAttrib|FileGetShortcut|FileGetSize|FileGetTime|FileGetVersion|FileInstall|FileMove|FileMoveDir|FileRead|FileReadLine|FileRecycle|FileRecycleEmpty|FileRemoveDir|FileSelectFile|FileSelectFolder|FileSetAttrib|FileSetTime|FormatTime|GetKeyState|Gosub|Goto|GroupActivate|GroupAdd|GroupClose|GroupDeactivate|Gui|GuiControl|GuiControlGet|Hotkey|ImageSearch|IniDelete|IniRead|IniWrite|Input|InputBox|KeyWait|ListHotkeys|ListLines|ListVars|Loop|Menu|MouseClick|MouseClickDrag|MouseGetPos|MouseMove|MsgBox|OnExit|OutputDebug|Pause|PixelGetColor|PixelSearch|PostMessage|Process|Progress|Random|RegDelete|RegRead|RegWrite|Reload|Repeat|Return|Run|RunAs|RunWait|Send|SendEvent|SendInput|SendMessage|SendMode|SendPlay|SendRaw|SetBatchLines|SetCapslockState|SetControlDelay|SetDefaultMouseSpeed|SetEnv|SetFormat|SetKeyDelay|SetMouseDelay|SetNumlockState|SetRegView|SetScrollLockState|SetStoreCapslockMode|SetTimer|SetTitleMatchMode|SetWinDelay|SetWorkingDir|Shutdown|Sleep|Sort|SoundBeep|SoundGet|SoundGetWaveVolume|SoundPlay|SoundSet|SoundSetWaveVolume|SplashImage|SplashTextOff|SplashTextOn|SplitPath|StatusBarGetText|StatusBarWait|StringCaseSense|StringGetPos|StringLeft|StringLen|StringLower|StringMid|StringReplace|StringRight|StringSplit|StringTrimLeft|StringTrimRight|StringUpper|Suspend|SysGet|Thread|ToolTip|Transform|TrayTip|URLDownloadToFile|WinActivate|WinActivateBottom|WinClose|WinGet|WinGetActiveStats|WinGetActiveTitle|WinGetClass|WinGetPos|WinGetText|WinGetTitle|WinHide|WinKill|WinMaximize|WinMenuSelectItem|WinMinimize|WinMinimizeAll|WinMinimizeAllUndo|WinMove|WinRestore|WinSet|WinSetTitle|WinShow|WinWait|WinWaitActive|WinWaitClose|WinWaitNotActive)\b/i,constant:/\b(?:a_ahkpath|a_ahkversion|a_appdata|a_appdatacommon|a_autotrim|a_batchlines|a_caretx|a_carety|a_computername|a_controldelay|a_cursor|a_dd|a_ddd|a_dddd|a_defaultmousespeed|a_desktop|a_desktopcommon|a_detecthiddentext|a_detecthiddenwindows|a_endchar|a_eventinfo|a_exitreason|a_fileencoding|a_formatfloat|a_formatinteger|a_gui|a_guievent|a_guicontrol|a_guicontrolevent|a_guiheight|a_guiwidth|a_guix|a_guiy|a_hour|a_iconfile|a_iconhidden|a_iconnumber|a_icontip|a_index|a_ipaddress1|a_ipaddress2|a_ipaddress3|a_ipaddress4|a_is64bitos|a_isadmin|a_iscompiled|a_iscritical|a_ispaused|a_issuspended|a_isunicode|a_keydelay|a_language|a_lasterror|a_linefile|a_linenumber|a_loopfield|a_loopfileattrib|a_loopfiledir|a_loopfileext|a_loopfilefullpath|a_loopfilelongpath|a_loopfilename|a_loopfileshortname|a_loopfileshortpath|a_loopfilesize|a_loopfilesizekb|a_loopfilesizemb|a_loopfiletimeaccessed|a_loopfiletimecreated|a_loopfiletimemodified|a_loopreadline|a_loopregkey|a_loopregname|a_loopregsubkey|a_loopregtimemodified|a_loopregtype|a_mday|a_min|a_mm|a_mmm|a_mmmm|a_mon|a_mousedelay|a_msec|a_mydocuments|a_now|a_nowutc|a_numbatchlines|a_ostype|a_osversion|a_priorhotkey|a_priorkey|programfiles|a_programfiles|a_programs|a_programscommon|a_ptrsize|a_regview|a_screendpi|a_screenheight|a_screenwidth|a_scriptdir|a_scriptfullpath|a_scripthwnd|a_scriptname|a_sec|a_space|a_startmenu|a_startmenucommon|a_startup|a_startupcommon|a_stringcasesense|a_tab|a_temp|a_thisfunc|a_thishotkey|a_thislabel|a_thismenu|a_thismenuitem|a_thismenuitempos|a_tickcount|a_timeidle|a_timeidlephysical|a_timesincepriorhotkey|a_timesincethishotkey|a_titlematchmode|a_titlematchmodespeed|a_username|a_wday|a_windelay|a_windir|a_workingdir|a_yday|a_year|a_yweek|a_yyyy|clipboard|clipboardall|comspec|errorlevel)\b/i,builtin:/\b(?:abs|acos|asc|asin|atan|ceil|chr|class|comobjactive|comobjarray|comobjconnect|comobjcreate|comobjerror|comobjflags|comobjget|comobjquery|comobjtype|comobjvalue|cos|dllcall|exp|fileexist|Fileopen|floor|format|il_add|il_create|il_destroy|instr|substr|isfunc|islabel|IsObject|ln|log|lv_add|lv_delete|lv_deletecol|lv_getcount|lv_getnext|lv_gettext|lv_insert|lv_insertcol|lv_modify|lv_modifycol|lv_setimagelist|ltrim|rtrim|mod|onmessage|numget|numput|registercallback|regexmatch|regexreplace|round|sin|tan|sqrt|strlen|strreplace|sb_seticon|sb_setparts|sb_settext|strsplit|tv_add|tv_delete|tv_getchild|tv_getcount|tv_getnext|tv_get|tv_getparent|tv_getprev|tv_getselection|tv_gettext|tv_modify|varsetcapacity|winactive|winexist|__New|__Call|__Get|__Set)\b/i,symbol:/\b(?:alt|altdown|altup|appskey|backspace|browser_back|browser_favorites|browser_forward|browser_home|browser_refresh|browser_search|browser_stop|bs|capslock|ctrl|ctrlbreak|ctrldown|ctrlup|del|delete|down|end|enter|esc|escape|f1|f10|f11|f12|f13|f14|f15|f16|f17|f18|f19|f2|f20|f21|f22|f23|f24|f3|f4|f5|f6|f7|f8|f9|home|ins|insert|joy1|joy10|joy11|joy12|joy13|joy14|joy15|joy16|joy17|joy18|joy19|joy2|joy20|joy21|joy22|joy23|joy24|joy25|joy26|joy27|joy28|joy29|joy3|joy30|joy31|joy32|joy4|joy5|joy6|joy7|joy8|joy9|joyaxes|joybuttons|joyinfo|joyname|joypov|joyr|joyu|joyv|joyx|joyy|joyz|lalt|launch_app1|launch_app2|launch_mail|launch_media|lbutton|lcontrol|lctrl|left|lshift|lwin|lwindown|lwinup|mbutton|media_next|media_play_pause|media_prev|media_stop|numlock|numpad0|numpad1|numpad2|numpad3|numpad4|numpad5|numpad6|numpad7|numpad8|numpad9|numpadadd|numpadclear|numpaddel|numpaddiv|numpaddot|numpaddown|numpadend|numpadenter|numpadhome|numpadins|numpadleft|numpadmult|numpadpgdn|numpadpgup|numpadright|numpadsub|numpadup|pgdn|pgup|printscreen|ralt|rbutton|rcontrol|rctrl|right|rshift|rwin|rwindown|rwinup|scrolllock|shift|shiftdown|shiftup|space|tab|up|volume_down|volume_mute|volume_up|wheeldown|wheelleft|wheelright|wheelup|xbutton1|xbutton2)\b/i,important:/#\b(?:AllowSameLineComments|ClipboardTimeout|CommentFlag|DerefChar|ErrorStdOut|EscapeChar|HotkeyInterval|HotkeyModifierTimeout|Hotstring|If|IfTimeout|IfWinActive|IfWinExist|IfWinNotActive|IfWinNotExist|Include|IncludeAgain|InputLevel|InstallKeybdHook|InstallMouseHook|KeyHistory|MaxHotkeysPerInterval|MaxMem|MaxThreads|MaxThreadsBuffer|MaxThreadsPerHotkey|MenuMaskKey|NoEnv|NoTrayIcon|Persistent|SingleInstance|UseHook|Warn|WinActivateForce)\b/i,keyword:/\b(?:Abort|AboveNormal|Add|ahk_class|ahk_exe|ahk_group|ahk_id|ahk_pid|All|Alnum|Alpha|AltSubmit|AltTab|AltTabAndMenu|AltTabMenu|AltTabMenuDismiss|AlwaysOnTop|AutoSize|Background|BackgroundTrans|BelowNormal|between|BitAnd|BitNot|BitOr|BitShiftLeft|BitShiftRight|BitXOr|Bold|Border|Button|ByRef|Checkbox|Checked|CheckedGray|Choose|ChooseString|Close|Color|ComboBox|Contains|ControlList|Count|Date|DateTime|Days|DDL|Default|DeleteAll|Delimiter|Deref|Destroy|Digit|Disable|Disabled|DropDownList|Edit|Eject|Else|Enable|Enabled|Error|Exist|Expand|ExStyle|FileSystem|First|Flash|Float|FloatFast|Focus|Font|for|global|Grid|Group|GroupBox|GuiClose|GuiContextMenu|GuiDropFiles|GuiEscape|GuiSize|Hdr|Hidden|Hide|High|HKCC|HKCR|HKCU|HKEY_CLASSES_ROOT|HKEY_CURRENT_CONFIG|HKEY_CURRENT_USER|HKEY_LOCAL_MACHINE|HKEY_USERS|HKLM|HKU|Hours|HScroll|Icon|IconSmall|ID|IDLast|If|IfEqual|IfExist|IfGreater|IfGreaterOrEqual|IfInString|IfLess|IfLessOrEqual|IfMsgBox|IfNotEqual|IfNotExist|IfNotInString|IfWinActive|IfWinExist|IfWinNotActive|IfWinNotExist|Ignore|ImageList|in|Integer|IntegerFast|Interrupt|is|italic|Join|Label|LastFound|LastFoundExist|Limit|Lines|List|ListBox|ListView|local|Lock|Logoff|Low|Lower|Lowercase|MainWindow|Margin|Maximize|MaximizeBox|MaxSize|Minimize|MinimizeBox|MinMax|MinSize|Minutes|MonthCal|Mouse|Move|Multi|NA|No|NoActivate|NoDefault|NoHide|NoIcon|NoMainWindow|norm|Normal|NoSort|NoSortHdr|NoStandard|Not|NoTab|NoTimers|Number|Off|Ok|On|OwnDialogs|Owner|Parse|Password|Picture|Pixel|Pos|Pow|Priority|ProcessName|Radio|Range|Read|ReadOnly|Realtime|Redraw|REG_BINARY|REG_DWORD|REG_EXPAND_SZ|REG_MULTI_SZ|REG_SZ|Region|Relative|Rename|Report|Resize|Restore|Retry|RGB|Screen|Seconds|Section|Serial|SetLabel|ShiftAltTab|Show|Single|Slider|SortDesc|Standard|static|Status|StatusBar|StatusCD|strike|Style|Submit|SysMenu|Tab2|TabStop|Text|Theme|Tile|ToggleCheck|ToggleEnable|ToolWindow|Top|Topmost|TransColor|Transparent|Tray|TreeView|TryAgain|Throw|Try|Catch|Finally|Type|UnCheck|underline|Unicode|Unlock|Until|UpDown|Upper|Uppercase|UseErrorLevel|Vis|VisFirst|Visible|VScroll|Wait|WaitClose|WantCtrlA|WantF2|WantReturn|While|Wrap|Xdigit|xm|xp|xs|Yes|ym|yp|ys)\b/i,function:/[^(); \t,\n+*\-=?>:\\\/<&%\[\]]+?(?=\()/m,punctuation:/[{}[\]():,]/}; +Prism.languages.autoit={comment:[/;.*/,{pattern:/(^\s*)#(?:comments-start|cs)[\s\S]*?^\s*#(?:comments-end|ce)/m,lookbehind:!0}],url:{pattern:/(^\s*#include\s+)(?:<[^\r\n>]+>|"[^\r\n"]+")/m,lookbehind:!0},string:{pattern:/(["'])(?:\1\1|(?!\1)[^\r\n])*\1/,greedy:!0,inside:{variable:/([%$@])\w+\1/}},directive:{pattern:/(^\s*)#\w+/m,lookbehind:!0,alias:"keyword"},function:/\b\w+(?=\()/,variable:/[$@]\w+/,keyword:/\b(?:Case|Const|Continue(?:Case|Loop)|Default|Dim|Do|Else(?:If)?|End(?:Func|If|Select|Switch|With)|Enum|Exit(?:Loop)?|For|Func|Global|If|In|Local|Next|Null|ReDim|Select|Static|Step|Switch|Then|To|Until|Volatile|WEnd|While|With)\b/i,number:/\b(?:0x[\da-f]+|\d+(?:\.\d+)?(?:e[+-]?\d+)?)\b/i,boolean:/\b(?:True|False)\b/i,operator:/<[=>]?|[-+*\/=&>]=?|[?^]|\b(?:And|Or|Not)\b/i,punctuation:/[\[\]().,:]/}; +!function(e){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",n={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},a={bash:n,environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+\.?\d*|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--?|-=|\+\+?|\+=|!=?|~|\*\*?|\*=|\/=?|%=?|<<=?|>>=?|<=?|>=?|==?|&&?|&=|\^=?|\|\|?|\|=|\?|:/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|x[0-9a-fA-F]{1,2}|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)\w+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b\w+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+?)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:a},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:n}},{pattern:/(^|[^\\](?:\\\\)*)(["'])(?:\\[\s\S]|\$\([^)]+\)|`[^`]+`|(?!\2)[^\\])*\2/,lookbehind:!0,greedy:!0,inside:a}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:a.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|aptitude|apt-cache|apt-get|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:if|then|else|elif|fi|for|while|in|case|esac|function|select|do|done|until)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|break|cd|continue|eval|exec|exit|export|getopts|hash|pwd|readonly|return|shift|test|times|trap|umask|unset|alias|bind|builtin|caller|command|declare|echo|enable|help|let|local|logout|mapfile|printf|read|readarray|source|type|typeset|ulimit|unalias|set|shopt)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:true|false)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|==?|!=?|=~|<<[<-]?|[&\d]?>>|\d?[<>]&?|&[>&]?|\|[&|]?|<=?|>=?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},n.inside=e.languages.bash;for(var s=["comment","function-name","for-or-select","assign-left","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],i=a.variable[1].inside,o=0;o?^_ +\-.A-Z\d])*"/i,greedy:!0},number:/(?:\b\d+\.?\d*|\B\.\d+)(?:E[+-]?\d+)?/i,keyword:/\b(?:AS|BEEP|BLOAD|BSAVE|CALL(?: ABSOLUTE)?|CASE|CHAIN|CHDIR|CLEAR|CLOSE|CLS|COM|COMMON|CONST|DATA|DECLARE|DEF(?: FN| SEG|DBL|INT|LNG|SNG|STR)|DIM|DO|DOUBLE|ELSE|ELSEIF|END|ENVIRON|ERASE|ERROR|EXIT|FIELD|FILES|FOR|FUNCTION|GET|GOSUB|GOTO|IF|INPUT|INTEGER|IOCTL|KEY|KILL|LINE INPUT|LOCATE|LOCK|LONG|LOOP|LSET|MKDIR|NAME|NEXT|OFF|ON(?: COM| ERROR| KEY| TIMER)?|OPEN|OPTION BASE|OUT|POKE|PUT|READ|REDIM|REM|RESTORE|RESUME|RETURN|RMDIR|RSET|RUN|SHARED|SINGLE|SELECT CASE|SHELL|SLEEP|STATIC|STEP|STOP|STRING|SUB|SWAP|SYSTEM|THEN|TIMER|TO|TROFF|TRON|TYPE|UNLOCK|UNTIL|USING|VIEW PRINT|WAIT|WEND|WHILE|WRITE)(?:\$|\b)/i,function:/\b(?:ABS|ACCESS|ACOS|ANGLE|AREA|ARITHMETIC|ARRAY|ASIN|ASK|AT|ATN|BASE|BEGIN|BREAK|CAUSE|CEIL|CHR|CLIP|COLLATE|COLOR|CON|COS|COSH|COT|CSC|DATE|DATUM|DEBUG|DECIMAL|DEF|DEG|DEGREES|DELETE|DET|DEVICE|DISPLAY|DOT|ELAPSED|EPS|ERASABLE|EXLINE|EXP|EXTERNAL|EXTYPE|FILETYPE|FIXED|FP|GO|GRAPH|HANDLER|IDN|IMAGE|IN|INT|INTERNAL|IP|IS|KEYED|LBOUND|LCASE|LEFT|LEN|LENGTH|LET|LINE|LINES|LOG|LOG10|LOG2|LTRIM|MARGIN|MAT|MAX|MAXNUM|MID|MIN|MISSING|MOD|NATIVE|NUL|NUMERIC|OF|OPTION|ORD|ORGANIZATION|OUTIN|OUTPUT|PI|POINT|POINTER|POINTS|POS|PRINT|PROGRAM|PROMPT|RAD|RADIANS|RANDOMIZE|RECORD|RECSIZE|RECTYPE|RELATIVE|REMAINDER|REPEAT|REST|RETRY|REWRITE|RIGHT|RND|ROUND|RTRIM|SAME|SEC|SELECT|SEQUENTIAL|SET|SETTER|SGN|SIN|SINH|SIZE|SKIP|SQR|STANDARD|STATUS|STR|STREAM|STYLE|TAB|TAN|TANH|TEMPLATE|TEXT|THERE|TIME|TIMEOUT|TRACE|TRANSFORM|TRUNCATE|UBOUND|UCASE|USE|VAL|VARIABLE|VIEWPORT|WHEN|WINDOW|WITH|ZER|ZONEWIDTH)(?:\$|\b)/i,operator:/<[=>]?|>=?|[+\-*\/^=&]|\b(?:AND|EQV|IMP|NOT|OR|XOR)\b/i,punctuation:/[,;:()]/}; +!function(e){var r=/%%?[~:\w]+%?|!\S+!/,t={pattern:/\/[a-z?]+(?=[ :]|$):?|-[a-z]\b|--[a-z-]+\b/im,alias:"attr-name",inside:{punctuation:/:/}},n=/"(?:[\\"]"|[^"])*"(?!")/,i=/(?:\b|-)\d+\b/;Prism.languages.batch={comment:[/^::.*/m,{pattern:/((?:^|[&(])[ \t]*)rem\b(?:[^^&)\r\n]|\^(?:\r\n|[\s\S]))*/im,lookbehind:!0}],label:{pattern:/^:.*/m,alias:"property"},command:[{pattern:/((?:^|[&(])[ \t]*)for(?: ?\/[a-z?](?:[ :](?:"[^"]*"|\S+))?)* \S+ in \([^)]+\) do/im,lookbehind:!0,inside:{keyword:/^for\b|\b(?:in|do)\b/i,string:n,parameter:t,variable:r,number:i,punctuation:/[()',]/}},{pattern:/((?:^|[&(])[ \t]*)if(?: ?\/[a-z?](?:[ :](?:"[^"]*"|\S+))?)* (?:not )?(?:cmdextversion \d+|defined \w+|errorlevel \d+|exist \S+|(?:"[^"]*"|\S+)?(?:==| (?:equ|neq|lss|leq|gtr|geq) )(?:"[^"]*"|\S+))/im,lookbehind:!0,inside:{keyword:/^if\b|\b(?:not|cmdextversion|defined|errorlevel|exist)\b/i,string:n,parameter:t,variable:r,number:i,operator:/\^|==|\b(?:equ|neq|lss|leq|gtr|geq)\b/i}},{pattern:/((?:^|[&()])[ \t]*)else\b/im,lookbehind:!0,inside:{keyword:/^else\b/i}},{pattern:/((?:^|[&(])[ \t]*)set(?: ?\/[a-z](?:[ :](?:"[^"]*"|\S+))?)* (?:[^^&)\r\n]|\^(?:\r\n|[\s\S]))*/im,lookbehind:!0,inside:{keyword:/^set\b/i,string:n,parameter:t,variable:[r,/\w+(?=(?:[*\/%+\-&^|]|<<|>>)?=)/],number:i,operator:/[*\/%+\-&^|]=?|<<=?|>>=?|[!~_=]/,punctuation:/[()',]/}},{pattern:/((?:^|[&(])[ \t]*@?)\w+\b(?:"(?:[\\"]"|[^"])*"(?!")|[^"^&)\r\n]|\^(?:\r\n|[\s\S]))*/im,lookbehind:!0,inside:{keyword:/^\w+\b/i,string:n,parameter:t,label:{pattern:/(^\s*):\S+/m,lookbehind:!0,alias:"property"},variable:r,number:i,operator:/\^/}}],operator:/[&@]/,punctuation:/[()']/}}(); +Prism.languages.bbcode={tag:{pattern:/\[\/?[^\s=\]]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'"\]=]+))?(?:\s+[^\s=\]]+\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'"\]=]+))*\s*\]/,inside:{tag:{pattern:/^\[\/?[^\s=\]]+/,inside:{punctuation:/^\[\/?/}},"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'"\]=]+)/i,inside:{punctuation:[/^=/,{pattern:/^(\s*)["']|["']$/,lookbehind:!0}]}},punctuation:/\]/,"attr-name":/[^\s=\]]+/}}},Prism.languages.shortcode=Prism.languages.bbcode; +Prism.languages.bison=Prism.languages.extend("c",{}),Prism.languages.insertBefore("bison","comment",{bison:{pattern:/^[\s\S]*?%%[\s\S]*?%%/,inside:{c:{pattern:/%\{[\s\S]*?%\}|\{(?:\{[^}]*\}|[^{}])*\}/,inside:{delimiter:{pattern:/^%?\{|%?\}$/,alias:"punctuation"},"bison-variable":{pattern:/[$@](?:<[^\s>]+>)?[\w$]+/,alias:"variable",inside:{punctuation:/<|>/}},rest:Prism.languages.c}},comment:Prism.languages.c.comment,string:Prism.languages.c.string,property:/\S+(?=:)/,keyword:/%\w+/,number:{pattern:/(^|[^@])\b(?:0x[\da-f]+|\d+)/i,lookbehind:!0},punctuation:/%[%?]|[|:;\[\]<>]/}}}); +Prism.languages.bnf={string:{pattern:/"[^\r\n"]*"|'[^\r\n']*'/},definition:{pattern:/<[^<>\r\n\t]+>(?=\s*::=)/,alias:["rule","keyword"],inside:{punctuation:/^<|>$/}},rule:{pattern:/<[^<>\r\n\t]+>/,inside:{punctuation:/^<|>$/}},operator:/::=|[|()[\]{}*+?]|\.{3}/},Prism.languages.rbnf=Prism.languages.bnf; +Prism.languages.brainfuck={pointer:{pattern:/<|>/,alias:"keyword"},increment:{pattern:/\+/,alias:"inserted"},decrement:{pattern:/-/,alias:"deleted"},branching:{pattern:/\[|\]/,alias:"important"},operator:/[.,]/,comment:/\S+/}; +Prism.languages.brightscript={comment:/(?:\brem|').*/i,"directive-statement":{pattern:/(^[\t ]*)#(?:const|else(?:[\t ]+if)?|end[\t ]+if|error|if).*/im,lookbehind:!0,alias:"property",inside:{"error-message":{pattern:/(^#error).+/,lookbehind:!0},directive:{pattern:/^#(?:const|else(?:[\t ]+if)?|end[\t ]+if|error|if)/,alias:"keyword"},expression:{pattern:/[\s\S]+/,inside:null}}},property:{pattern:/([\r\n{,][\t ]*)(?:(?!\d)\w+|"(?:[^"\r\n]|"")*"(?!"))(?=[ \t]*:)/,lookbehind:!0,greedy:!0},string:{pattern:/"(?:[^"\r\n]|"")*"(?!")/,greedy:!0},"class-name":{pattern:/(\bAs[\t ]+)\w+/i,lookbehind:!0},keyword:/\b(?:As|Dim|Each|Else|Elseif|End|Exit|For|Function|Goto|If|In|Print|Return|Step|Stop|Sub|Then|To|While)\b/i,boolean:/\b(?:true|false)\b/i,function:/\b(?!\d)\w+(?=[\t ]*\()/i,number:/(?:\b\d+(?:\.\d+)?(?:[ed][+-]\d+)?|&h[a-f\d]+)\b[%&!#]?/i,operator:/--|\+\+|>>=?|<<=?|<>|[-+*/\\<>]=?|[:^=?]|\b(?:and|mod|not|or)\b/i,punctuation:/[.,;()[\]{}]/,constant:/\b(?:LINE_NUM)\b/i},Prism.languages.brightscript["directive-statement"].inside.expression.inside=Prism.languages.brightscript; +Prism.languages.bro={comment:{pattern:/(^|[^\\$])#.*/,lookbehind:!0,inside:{italic:/\b(?:TODO|FIXME|XXX)\b/}},string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},boolean:/\b[TF]\b/,function:{pattern:/(?:function|hook|event) \w+(?:::\w+)?/,inside:{keyword:/^(?:function|hook|event)/}},variable:{pattern:/(?:global|local) \w+/i,inside:{keyword:/(?:global|local)/}},builtin:/(?:@(?:load(?:-(?:sigs|plugin))?|unload|prefixes|ifn?def|else|(?:end)?if|DIR|FILENAME))|(?:&?(?:redef|priority|log|optional|default|add_func|delete_func|expire_func|read_expire|write_expire|create_expire|synchronized|persistent|rotate_interval|rotate_size|encrypt|raw_output|mergeable|group|error_handler|type_column))/,constant:{pattern:/const \w+/i,inside:{keyword:/const/}},keyword:/\b(?:break|next|continue|alarm|using|of|add|delete|export|print|return|schedule|when|timeout|addr|any|bool|count|double|enum|file|int|interval|pattern|opaque|port|record|set|string|subnet|table|time|vector|for|if|else|in|module|function)\b/,operator:/--?|\+\+?|!=?=?|<=?|>=?|==?=?|&&|\|\|?|\?|\*|\/|~|\^|%/,number:/\b0x[\da-f]+\b|(?:\b\d+\.?\d*|\B\.\d+)(?:e[+-]?\d+)?/i,punctuation:/[{}[\];(),.:]/}; +Prism.languages.bsl={comment:/\/\/.*/,string:[{pattern:/"(?:[^"]|"")*"(?!")/,greedy:!0},{pattern:/'(?:[^'\r\n\\]|\\.)*'/}],keyword:[{pattern:/(^|[^\w\u0400-\u0484\u0487-\u052f\u1c80-\u1c88\u1d2b\u1d78\u2de0-\u2dff\ua640-\ua69f\ufe2e\ufe2f])(?:пока|для|новый|прервать|попытка|исключение|вызватьисключение|иначе|конецпопытки|неопределено|функция|перем|возврат|конецфункции|если|иначеесли|процедура|конецпроцедуры|тогда|знач|экспорт|конецесли|из|каждого|истина|ложь|по|цикл|конеццикла|выполнить)(?![\w\u0400-\u0484\u0487-\u052f\u1c80-\u1c88\u1d2b\u1d78\u2de0-\u2dff\ua640-\ua69f\ufe2e\ufe2f])/i,lookbehind:!0},{pattern:/\b(?:while|for|new|break|try|except|raise|else|endtry|undefined|function|var|return|endfunction|null|if|elseif|procedure|endprocedure|then|val|export|endif|in|each|true|false|to|do|enddo|execute)\b/i}],number:{pattern:/(^(?=\d)|[^\w\u0400-\u0484\u0487-\u052f\u1c80-\u1c88\u1d2b\u1d78\u2de0-\u2dff\ua640-\ua69f\ufe2e\ufe2f])(?:\d+\.?\d*|\.\d+)(?:E[+-]?\d+)?/i,lookbehind:!0},operator:[/[<>+\-*/]=?|[%=]/,{pattern:/(^|[^\w\u0400-\u0484\u0487-\u052f\u1c80-\u1c88\u1d2b\u1d78\u2de0-\u2dff\ua640-\ua69f\ufe2e\ufe2f])(?:и|или|не)(?![\w\u0400-\u0484\u0487-\u052f\u1c80-\u1c88\u1d2b\u1d78\u2de0-\u2dff\ua640-\ua69f\ufe2e\ufe2f])/i,lookbehind:!0},{pattern:/\b(?:and|or|not)\b/i}],punctuation:/\(\.|\.\)|[()\[\]:;,.]/,directive:[{pattern:/^(\s*)&.*/m,lookbehind:!0,alias:"important"},{pattern:/^\s*#.*/gm,alias:"important"}]},Prism.languages.oscript=Prism.languages.bsl; +Prism.languages.cil={comment:/\/\/.*/,string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},directive:{pattern:/(^|\W)\.[a-z]+(?=\s)/,lookbehind:!0,alias:"class-name"},variable:/\[[\w\.]+\]/,keyword:/\b(?:abstract|ansi|assembly|auto|autochar|beforefieldinit|bool|bstr|byvalstr|catch|char|cil|class|currency|date|decimal|default|enum|error|explicit|extends|extern|famandassem|family|famorassem|final(?:ly)?|float32|float64|hidebysig|iant|idispatch|implements|import|initonly|instance|u?int(?:8|16|32|64)?|interface|iunknown|literal|lpstr|lpstruct|lptstr|lpwstr|managed|method|native(?:Type)?|nested|newslot|object(?:ref)?|pinvokeimpl|private|privatescope|public|reqsecobj|rtspecialname|runtime|sealed|sequential|serializable|specialname|static|string|struct|syschar|tbstr|unicode|unmanagedexp|unsigned|value(?:type)?|variant|virtual|void)\b/,function:/\b(?:(?:constrained|unaligned|volatile|readonly|tail|no)\.)?(?:conv\.(?:[iu][1248]?|ovf\.[iu][1248]?(?:\.un)?|r\.un|r4|r8)|ldc\.(?:i4(?:\.[0-9]+|\.[mM]1|\.s)?|i8|r4|r8)|ldelem(?:\.[iu][1248]?|\.r[48]|\.ref|a)?|ldind\.(?:[iu][1248]?|r[48]|ref)|stelem\.?(?:i[1248]?|r[48]|ref)?|stind\.(?:i[1248]?|r[48]|ref)?|end(?:fault|filter|finally)|ldarg(?:\.[0-3s]|a(?:\.s)?)?|ldloc(?:\.[0-9]+|\.s)?|sub(?:\.ovf(?:\.un)?)?|mul(?:\.ovf(?:\.un)?)?|add(?:\.ovf(?:\.un)?)?|stloc(?:\.[0-3s])?|refany(?:type|val)|blt(?:\.un)?(?:\.s)?|ble(?:\.un)?(?:\.s)?|bgt(?:\.un)?(?:\.s)?|bge(?:\.un)?(?:\.s)?|unbox(?:\.any)?|init(?:blk|obj)|call(?:i|virt)?|brfalse(?:\.s)?|bne\.un(?:\.s)?|ldloca(?:\.s)?|brzero(?:\.s)?|brtrue(?:\.s)?|brnull(?:\.s)?|brinst(?:\.s)?|starg(?:\.s)?|leave(?:\.s)?|shr(?:\.un)?|rem(?:\.un)?|div(?:\.un)?|clt(?:\.un)?|alignment|ldvirtftn|castclass|beq(?:\.s)?|mkrefany|localloc|ckfinite|rethrow|ldtoken|ldsflda|cgt\.un|arglist|switch|stsfld|sizeof|newobj|newarr|ldsfld|ldnull|ldflda|isinst|throw|stobj|stloc|stfld|ldstr|ldobj|ldlen|ldftn|ldfld|cpobj|cpblk|break|br\.s|xor|shl|ret|pop|not|nop|neg|jmp|dup|clt|cgt|ceq|box|and|or|br)\b/,boolean:/\b(?:true|false)\b/,number:/\b-?(?:0x[0-9a-fA-F]+|[0-9]+)(?:\.[0-9a-fA-F]+)?\b/i,punctuation:/[{}[\];(),:=]|IL_[0-9A-Za-z]+/}; +Prism.languages.clojure={comment:/;.*/,string:{pattern:/"(?:[^"\\]|\\.)*"/,greedy:!0},operator:/(?:::|[:|'])\b[a-z][\w*+!?-]*\b/i,keyword:{pattern:/([^\w+*'?-])(?:def|if|do|let|\.\.|quote|var|->>|->|fn|loop|recur|throw|try|monitor-enter|\.|new|set!|def\-|defn|defn\-|defmacro|defmulti|defmethod|defstruct|defonce|declare|definline|definterface|defprotocol|==|defrecord|>=|deftype|<=|defproject|ns|\*|\+|\-|\/|<|=|>|accessor|agent|agent-errors|aget|alength|all-ns|alter|and|append-child|apply|array-map|aset|aset-boolean|aset-byte|aset-char|aset-double|aset-float|aset-int|aset-long|aset-short|assert|assoc|await|await-for|bean|binding|bit-and|bit-not|bit-or|bit-shift-left|bit-shift-right|bit-xor|boolean|branch\?|butlast|byte|cast|char|children|class|clear-agent-errors|comment|commute|comp|comparator|complement|concat|conj|cons|constantly|cond|if-not|construct-proxy|contains\?|count|create-ns|create-struct|cycle|dec|deref|difference|disj|dissoc|distinct|doall|doc|dorun|doseq|dosync|dotimes|doto|double|down|drop|drop-while|edit|end\?|ensure|eval|every\?|false\?|ffirst|file-seq|filter|find|find-doc|find-ns|find-var|first|float|flush|for|fnseq|frest|gensym|get-proxy-class|get|hash-map|hash-set|identical\?|identity|if-let|import|in-ns|inc|index|insert-child|insert-left|insert-right|inspect-table|inspect-tree|instance\?|int|interleave|intersection|into|into-array|iterate|join|key|keys|keyword|keyword\?|last|lazy-cat|lazy-cons|left|lefts|line-seq|list\*|list|load|load-file|locking|long|loop|macroexpand|macroexpand-1|make-array|make-node|map|map-invert|map\?|mapcat|max|max-key|memfn|merge|merge-with|meta|min|min-key|name|namespace|neg\?|new|newline|next|nil\?|node|not|not-any\?|not-every\?|not=|ns-imports|ns-interns|ns-map|ns-name|ns-publics|ns-refers|ns-resolve|ns-unmap|nth|nthrest|or|parse|partial|path|peek|pop|pos\?|pr|pr-str|print|print-str|println|println-str|prn|prn-str|project|proxy|proxy-mappings|quot|rand|rand-int|range|re-find|re-groups|re-matcher|re-matches|re-pattern|re-seq|read|read-line|reduce|ref|ref-set|refer|rem|remove|remove-method|remove-ns|rename|rename-keys|repeat|replace|replicate|resolve|rest|resultset-seq|reverse|rfirst|right|rights|root|rrest|rseq|second|select|select-keys|send|send-off|seq|seq-zip|seq\?|set|short|slurp|some|sort|sort-by|sorted-map|sorted-map-by|sorted-set|special-symbol\?|split-at|split-with|str|string\?|struct|struct-map|subs|subvec|symbol|symbol\?|sync|take|take-nth|take-while|test|time|to-array|to-array-2d|tree-seq|true\?|union|up|update-proxy|val|vals|var-get|var-set|var\?|vector|vector-zip|vector\?|when|when-first|when-let|when-not|with-local-vars|with-meta|with-open|with-out-str|xml-seq|xml-zip|zero\?|zipmap|zipper)(?=[^\w+*'?-])/,lookbehind:!0},boolean:/\b(?:true|false|nil)\b/,number:/\b[\da-f]+\b/i,punctuation:/[{}\[\](),]/}; +Prism.languages.cmake={comment:/#.*/,string:{pattern:/"(?:[^\\"]|\\.)*"/,greedy:!0,inside:{interpolation:{pattern:/\${(?:[^{}$]|\${[^{}$]*})*}/,inside:{punctuation:/\${|}/,variable:/\w+/}}}},variable:/\b(?:CMAKE_\w+|\w+_(?:VERSION(?:_MAJOR|_MINOR|_PATCH|_TWEAK)?|(?:BINARY|SOURCE)_DIR|DESCRIPTION|HOMEPAGE_URL|ROOT)|(?:CTEST_CUSTOM_(?:MAXIMUM_(?:(?:FAIL|PASS)ED_TEST_OUTPUT_SIZE|NUMBER_OF_(?:ERROR|WARNING)S)|ERROR_(?:P(?:OST|RE)_CONTEXT|EXCEPTION|MATCH)|P(?:OST|RE)_MEMCHECK|WARNING_(?:EXCEPTION|MATCH)|(?:MEMCHECK|TESTS)_IGNORE|P(?:OST|RE)_TEST|COVERAGE_EXCLUDE)|ANDROID|APPLE|BORLAND|BUILD_SHARED_LIBS|CACHE|CPACK_(?:ABSOLUTE_DESTINATION_FILES|COMPONENT_INCLUDE_TOPLEVEL_DIRECTORY|ERROR_ON_ABSOLUTE_INSTALL_DESTINATION|INCLUDE_TOPLEVEL_DIRECTORY|INSTALL_DEFAULT_DIRECTORY_PERMISSIONS|INSTALL_SCRIPT|PACKAGING_INSTALL_PREFIX|SET_DESTDIR|WARN_ON_ABSOLUTE_INSTALL_DESTINATION)|CTEST_(?:BINARY_DIRECTORY|BUILD_COMMAND|BUILD_NAME|BZR_COMMAND|BZR_UPDATE_OPTIONS|CHANGE_ID|CHECKOUT_COMMAND|CONFIGURATION_TYPE|CONFIGURE_COMMAND|COVERAGE_COMMAND|COVERAGE_EXTRA_FLAGS|CURL_OPTIONS|CUSTOM_(?:COVERAGE_EXCLUDE|ERROR_EXCEPTION|ERROR_MATCH|ERROR_POST_CONTEXT|ERROR_PRE_CONTEXT|MAXIMUM_FAILED_TEST_OUTPUT_SIZE|MAXIMUM_NUMBER_OF_(?:ERRORS|WARNINGS)|MAXIMUM_PASSED_TEST_OUTPUT_SIZE|MEMCHECK_IGNORE|POST_MEMCHECK|POST_TEST|PRE_MEMCHECK|PRE_TEST|TESTS_IGNORE|WARNING_EXCEPTION|WARNING_MATCH)|CVS_CHECKOUT|CVS_COMMAND|CVS_UPDATE_OPTIONS|DROP_LOCATION|DROP_METHOD|DROP_SITE|DROP_SITE_CDASH|DROP_SITE_PASSWORD|DROP_SITE_USER|EXTRA_COVERAGE_GLOB|GIT_COMMAND|GIT_INIT_SUBMODULES|GIT_UPDATE_CUSTOM|GIT_UPDATE_OPTIONS|HG_COMMAND|HG_UPDATE_OPTIONS|LABELS_FOR_SUBPROJECTS|MEMORYCHECK_(?:COMMAND|COMMAND_OPTIONS|SANITIZER_OPTIONS|SUPPRESSIONS_FILE|TYPE)|NIGHTLY_START_TIME|P4_CLIENT|P4_COMMAND|P4_OPTIONS|P4_UPDATE_OPTIONS|RUN_CURRENT_SCRIPT|SCP_COMMAND|SITE|SOURCE_DIRECTORY|SUBMIT_URL|SVN_COMMAND|SVN_OPTIONS|SVN_UPDATE_OPTIONS|TEST_LOAD|TEST_TIMEOUT|TRIGGER_SITE|UPDATE_COMMAND|UPDATE_OPTIONS|UPDATE_VERSION_ONLY|USE_LAUNCHERS)|CYGWIN|ENV|EXECUTABLE_OUTPUT_PATH|GHS-MULTI|IOS|LIBRARY_OUTPUT_PATH|MINGW|MSVC(?:10|11|12|14|60|70|71|80|90|_IDE|_TOOLSET_VERSION|_VERSION)?|MSYS|PROJECT_(?:BINARY_DIR|DESCRIPTION|HOMEPAGE_URL|NAME|SOURCE_DIR|VERSION|VERSION_(?:MAJOR|MINOR|PATCH|TWEAK))|UNIX|WIN32|WINCE|WINDOWS_PHONE|WINDOWS_STORE|XCODE|XCODE_VERSION))\b/,property:/\b(?:cxx_\w+|(?:ARCHIVE_OUTPUT_(?:DIRECTORY|NAME)|COMPILE_DEFINITIONS|COMPILE_PDB_NAME|COMPILE_PDB_OUTPUT_DIRECTORY|EXCLUDE_FROM_DEFAULT_BUILD|IMPORTED_(?:IMPLIB|LIBNAME|LINK_DEPENDENT_LIBRARIES|LINK_INTERFACE_LANGUAGES|LINK_INTERFACE_LIBRARIES|LINK_INTERFACE_MULTIPLICITY|LOCATION|NO_SONAME|OBJECTS|SONAME)|INTERPROCEDURAL_OPTIMIZATION|LIBRARY_OUTPUT_DIRECTORY|LIBRARY_OUTPUT_NAME|LINK_FLAGS|LINK_INTERFACE_LIBRARIES|LINK_INTERFACE_MULTIPLICITY|LOCATION|MAP_IMPORTED_CONFIG|OSX_ARCHITECTURES|OUTPUT_NAME|PDB_NAME|PDB_OUTPUT_DIRECTORY|RUNTIME_OUTPUT_DIRECTORY|RUNTIME_OUTPUT_NAME|STATIC_LIBRARY_FLAGS|VS_CSHARP|VS_DOTNET_REFERENCEPROP|VS_DOTNET_REFERENCE|VS_GLOBAL_SECTION_POST|VS_GLOBAL_SECTION_PRE|VS_GLOBAL|XCODE_ATTRIBUTE)_\w+|\w+_(?:CLANG_TIDY|COMPILER_LAUNCHER|CPPCHECK|CPPLINT|INCLUDE_WHAT_YOU_USE|OUTPUT_NAME|POSTFIX|VISIBILITY_PRESET)|ABSTRACT|ADDITIONAL_MAKE_CLEAN_FILES|ADVANCED|ALIASED_TARGET|ALLOW_DUPLICATE_CUSTOM_TARGETS|ANDROID_(?:ANT_ADDITIONAL_OPTIONS|API|API_MIN|ARCH|ASSETS_DIRECTORIES|GUI|JAR_DEPENDENCIES|NATIVE_LIB_DEPENDENCIES|NATIVE_LIB_DIRECTORIES|PROCESS_MAX|PROGUARD|PROGUARD_CONFIG_PATH|SECURE_PROPS_PATH|SKIP_ANT_STEP|STL_TYPE)|ARCHIVE_OUTPUT_DIRECTORY|ARCHIVE_OUTPUT_NAME|ATTACHED_FILES|ATTACHED_FILES_ON_FAIL|AUTOGEN_(?:BUILD_DIR|ORIGIN_DEPENDS|PARALLEL|SOURCE_GROUP|TARGETS_FOLDER|TARGET_DEPENDS)|AUTOMOC|AUTOMOC_(?:COMPILER_PREDEFINES|DEPEND_FILTERS|EXECUTABLE|MACRO_NAMES|MOC_OPTIONS|SOURCE_GROUP|TARGETS_FOLDER)|AUTORCC|AUTORCC_EXECUTABLE|AUTORCC_OPTIONS|AUTORCC_SOURCE_GROUP|AUTOUIC|AUTOUIC_EXECUTABLE|AUTOUIC_OPTIONS|AUTOUIC_SEARCH_PATHS|BINARY_DIR|BUILDSYSTEM_TARGETS|BUILD_RPATH|BUILD_RPATH_USE_ORIGIN|BUILD_WITH_INSTALL_NAME_DIR|BUILD_WITH_INSTALL_RPATH|BUNDLE|BUNDLE_EXTENSION|CACHE_VARIABLES|CLEAN_NO_CUSTOM|COMMON_LANGUAGE_RUNTIME|COMPATIBLE_INTERFACE_(?:BOOL|NUMBER_MAX|NUMBER_MIN|STRING)|COMPILE_(?:DEFINITIONS|FEATURES|FLAGS|OPTIONS|PDB_NAME|PDB_OUTPUT_DIRECTORY)|COST|CPACK_DESKTOP_SHORTCUTS|CPACK_NEVER_OVERWRITE|CPACK_PERMANENT|CPACK_STARTUP_SHORTCUTS|CPACK_START_MENU_SHORTCUTS|CPACK_WIX_ACL|CROSSCOMPILING_EMULATOR|CUDA_EXTENSIONS|CUDA_PTX_COMPILATION|CUDA_RESOLVE_DEVICE_SYMBOLS|CUDA_SEPARABLE_COMPILATION|CUDA_STANDARD|CUDA_STANDARD_REQUIRED|CXX_EXTENSIONS|CXX_STANDARD|CXX_STANDARD_REQUIRED|C_EXTENSIONS|C_STANDARD|C_STANDARD_REQUIRED|DEBUG_CONFIGURATIONS|DEBUG_POSTFIX|DEFINE_SYMBOL|DEFINITIONS|DEPENDS|DEPLOYMENT_ADDITIONAL_FILES|DEPLOYMENT_REMOTE_DIRECTORY|DISABLED|DISABLED_FEATURES|ECLIPSE_EXTRA_CPROJECT_CONTENTS|ECLIPSE_EXTRA_NATURES|ENABLED_FEATURES|ENABLED_LANGUAGES|ENABLE_EXPORTS|ENVIRONMENT|EXCLUDE_FROM_ALL|EXCLUDE_FROM_DEFAULT_BUILD|EXPORT_NAME|EXPORT_PROPERTIES|EXTERNAL_OBJECT|EchoString|FAIL_REGULAR_EXPRESSION|FIND_LIBRARY_USE_LIB32_PATHS|FIND_LIBRARY_USE_LIB64_PATHS|FIND_LIBRARY_USE_LIBX32_PATHS|FIND_LIBRARY_USE_OPENBSD_VERSIONING|FIXTURES_CLEANUP|FIXTURES_REQUIRED|FIXTURES_SETUP|FOLDER|FRAMEWORK|Fortran_FORMAT|Fortran_MODULE_DIRECTORY|GENERATED|GENERATOR_FILE_NAME|GENERATOR_IS_MULTI_CONFIG|GHS_INTEGRITY_APP|GHS_NO_SOURCE_GROUP_FILE|GLOBAL_DEPENDS_DEBUG_MODE|GLOBAL_DEPENDS_NO_CYCLES|GNUtoMS|HAS_CXX|HEADER_FILE_ONLY|HELPSTRING|IMPLICIT_DEPENDS_INCLUDE_TRANSFORM|IMPORTED|IMPORTED_(?:COMMON_LANGUAGE_RUNTIME|CONFIGURATIONS|GLOBAL|IMPLIB|LIBNAME|LINK_DEPENDENT_LIBRARIES|LINK_INTERFACE_(?:LANGUAGES|LIBRARIES|MULTIPLICITY)|LOCATION|NO_SONAME|OBJECTS|SONAME)|IMPORT_PREFIX|IMPORT_SUFFIX|INCLUDE_DIRECTORIES|INCLUDE_REGULAR_EXPRESSION|INSTALL_NAME_DIR|INSTALL_RPATH|INSTALL_RPATH_USE_LINK_PATH|INTERFACE_(?:AUTOUIC_OPTIONS|COMPILE_DEFINITIONS|COMPILE_FEATURES|COMPILE_OPTIONS|INCLUDE_DIRECTORIES|LINK_DEPENDS|LINK_DIRECTORIES|LINK_LIBRARIES|LINK_OPTIONS|POSITION_INDEPENDENT_CODE|SOURCES|SYSTEM_INCLUDE_DIRECTORIES)|INTERPROCEDURAL_OPTIMIZATION|IN_TRY_COMPILE|IOS_INSTALL_COMBINED|JOB_POOLS|JOB_POOL_COMPILE|JOB_POOL_LINK|KEEP_EXTENSION|LABELS|LANGUAGE|LIBRARY_OUTPUT_DIRECTORY|LIBRARY_OUTPUT_NAME|LINKER_LANGUAGE|LINK_(?:DEPENDS|DEPENDS_NO_SHARED|DIRECTORIES|FLAGS|INTERFACE_LIBRARIES|INTERFACE_MULTIPLICITY|LIBRARIES|OPTIONS|SEARCH_END_STATIC|SEARCH_START_STATIC|WHAT_YOU_USE)|LISTFILE_STACK|LOCATION|MACOSX_BUNDLE|MACOSX_BUNDLE_INFO_PLIST|MACOSX_FRAMEWORK_INFO_PLIST|MACOSX_PACKAGE_LOCATION|MACOSX_RPATH|MACROS|MANUALLY_ADDED_DEPENDENCIES|MEASUREMENT|MODIFIED|NAME|NO_SONAME|NO_SYSTEM_FROM_IMPORTED|OBJECT_DEPENDS|OBJECT_OUTPUTS|OSX_ARCHITECTURES|OUTPUT_NAME|PACKAGES_FOUND|PACKAGES_NOT_FOUND|PARENT_DIRECTORY|PASS_REGULAR_EXPRESSION|PDB_NAME|PDB_OUTPUT_DIRECTORY|POSITION_INDEPENDENT_CODE|POST_INSTALL_SCRIPT|PREDEFINED_TARGETS_FOLDER|PREFIX|PRE_INSTALL_SCRIPT|PRIVATE_HEADER|PROCESSORS|PROCESSOR_AFFINITY|PROJECT_LABEL|PUBLIC_HEADER|REPORT_UNDEFINED_PROPERTIES|REQUIRED_FILES|RESOURCE|RESOURCE_LOCK|RULE_LAUNCH_COMPILE|RULE_LAUNCH_CUSTOM|RULE_LAUNCH_LINK|RULE_MESSAGES|RUNTIME_OUTPUT_DIRECTORY|RUNTIME_OUTPUT_NAME|RUN_SERIAL|SKIP_AUTOGEN|SKIP_AUTOMOC|SKIP_AUTORCC|SKIP_AUTOUIC|SKIP_BUILD_RPATH|SKIP_RETURN_CODE|SOURCES|SOURCE_DIR|SOVERSION|STATIC_LIBRARY_FLAGS|STATIC_LIBRARY_OPTIONS|STRINGS|SUBDIRECTORIES|SUFFIX|SYMBOLIC|TARGET_ARCHIVES_MAY_BE_SHARED_LIBS|TARGET_MESSAGES|TARGET_SUPPORTS_SHARED_LIBS|TESTS|TEST_INCLUDE_FILE|TEST_INCLUDE_FILES|TIMEOUT|TIMEOUT_AFTER_MATCH|TYPE|USE_FOLDERS|VALUE|VARIABLES|VERSION|VISIBILITY_INLINES_HIDDEN|VS_(?:CONFIGURATION_TYPE|COPY_TO_OUT_DIR|DEBUGGER_(?:COMMAND|COMMAND_ARGUMENTS|ENVIRONMENT|WORKING_DIRECTORY)|DEPLOYMENT_CONTENT|DEPLOYMENT_LOCATION|DOTNET_REFERENCES|DOTNET_REFERENCES_COPY_LOCAL|GLOBAL_KEYWORD|GLOBAL_PROJECT_TYPES|GLOBAL_ROOTNAMESPACE|INCLUDE_IN_VSIX|IOT_STARTUP_TASK|KEYWORD|RESOURCE_GENERATOR|SCC_AUXPATH|SCC_LOCALPATH|SCC_PROJECTNAME|SCC_PROVIDER|SDK_REFERENCES|SHADER_(?:DISABLE_OPTIMIZATIONS|ENABLE_DEBUG|ENTRYPOINT|FLAGS|MODEL|OBJECT_FILE_NAME|OUTPUT_HEADER_FILE|TYPE|VARIABLE_NAME)|STARTUP_PROJECT|TOOL_OVERRIDE|USER_PROPS|WINRT_COMPONENT|WINRT_EXTENSIONS|WINRT_REFERENCES|XAML_TYPE)|WILL_FAIL|WIN32_EXECUTABLE|WINDOWS_EXPORT_ALL_SYMBOLS|WORKING_DIRECTORY|WRAP_EXCLUDE|XCODE_(?:EMIT_EFFECTIVE_PLATFORM_NAME|EXPLICIT_FILE_TYPE|FILE_ATTRIBUTES|LAST_KNOWN_FILE_TYPE|PRODUCT_TYPE|SCHEME_(?:ADDRESS_SANITIZER|ADDRESS_SANITIZER_USE_AFTER_RETURN|ARGUMENTS|DISABLE_MAIN_THREAD_CHECKER|DYNAMIC_LIBRARY_LOADS|DYNAMIC_LINKER_API_USAGE|ENVIRONMENT|EXECUTABLE|GUARD_MALLOC|MAIN_THREAD_CHECKER_STOP|MALLOC_GUARD_EDGES|MALLOC_SCRIBBLE|MALLOC_STACK|THREAD_SANITIZER(?:_STOP)?|UNDEFINED_BEHAVIOUR_SANITIZER(?:_STOP)?|ZOMBIE_OBJECTS))|XCTEST)\b/,keyword:/\b(?:add_compile_definitions|add_compile_options|add_custom_command|add_custom_target|add_definitions|add_dependencies|add_executable|add_library|add_link_options|add_subdirectory|add_test|aux_source_directory|break|build_command|build_name|cmake_host_system_information|cmake_minimum_required|cmake_parse_arguments|cmake_policy|configure_file|continue|create_test_sourcelist|ctest_build|ctest_configure|ctest_coverage|ctest_empty_binary_directory|ctest_memcheck|ctest_read_custom_files|ctest_run_script|ctest_sleep|ctest_start|ctest_submit|ctest_test|ctest_update|ctest_upload|define_property|else|elseif|enable_language|enable_testing|endforeach|endfunction|endif|endmacro|endwhile|exec_program|execute_process|export|export_library_dependencies|file|find_file|find_library|find_package|find_path|find_program|fltk_wrap_ui|foreach|function|get_cmake_property|get_directory_property|get_filename_component|get_property|get_source_file_property|get_target_property|get_test_property|if|include|include_directories|include_external_msproject|include_guard|include_regular_expression|install|install_files|install_programs|install_targets|link_directories|link_libraries|list|load_cache|load_command|macro|make_directory|mark_as_advanced|math|message|option|output_required_files|project|qt_wrap_cpp|qt_wrap_ui|remove|remove_definitions|return|separate_arguments|set|set_directory_properties|set_property|set_source_files_properties|set_target_properties|set_tests_properties|site_name|source_group|string|subdir_depends|subdirs|target_compile_definitions|target_compile_features|target_compile_options|target_include_directories|target_link_directories|target_link_libraries|target_link_options|target_sources|try_compile|try_run|unset|use_mangled_mesa|utility_source|variable_requires|variable_watch|while|write_file)(?=\s*\()\b/,boolean:/\b(?:ON|OFF|TRUE|FALSE)\b/,namespace:/\b(?:PROPERTIES|SHARED|PRIVATE|STATIC|PUBLIC|INTERFACE|TARGET_OBJECTS)\b/,operator:/\b(?:NOT|AND|OR|MATCHES|LESS|GREATER|EQUAL|STRLESS|STRGREATER|STREQUAL|VERSION_LESS|VERSION_EQUAL|VERSION_GREATER|DEFINED)\b/,inserted:{pattern:/\b\w+::\w+\b/,alias:"class-name"},number:/\b\d+(?:\.\d+)*\b/,function:/\b[a-z_]\w*(?=\s*\()\b/i,punctuation:/[()>}]|\$[<{]/}; +!function(e){var t=/#(?!\{).+/,n={pattern:/#\{[^}]+\}/,alias:"variable"};e.languages.coffeescript=e.languages.extend("javascript",{comment:t,string:[{pattern:/'(?:\\[\s\S]|[^\\'])*'/,greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0,inside:{interpolation:n}}],keyword:/\b(?:and|break|by|catch|class|continue|debugger|delete|do|each|else|extend|extends|false|finally|for|if|in|instanceof|is|isnt|let|loop|namespace|new|no|not|null|of|off|on|or|own|return|super|switch|then|this|throw|true|try|typeof|undefined|unless|until|when|while|window|with|yes|yield)\b/,"class-member":{pattern:/@(?!\d)\w+/,alias:"variable"}}),e.languages.insertBefore("coffeescript","comment",{"multiline-comment":{pattern:/###[\s\S]+?###/,alias:"comment"},"block-regex":{pattern:/\/{3}[\s\S]*?\/{3}/,alias:"regex",inside:{comment:t,interpolation:n}}}),e.languages.insertBefore("coffeescript","string",{"inline-javascript":{pattern:/`(?:\\[\s\S]|[^\\`])*`/,inside:{delimiter:{pattern:/^`|`$/,alias:"punctuation"},rest:e.languages.javascript}},"multiline-string":[{pattern:/'''[\s\S]*?'''/,greedy:!0,alias:"string"},{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string",inside:{interpolation:n}}]}),e.languages.insertBefore("coffeescript","keyword",{property:/(?!\d)\w+(?=\s*:(?!:))/}),delete e.languages.coffeescript["template-string"],e.languages.coffee=e.languages.coffeescript}(Prism); +Prism.languages.concurnas={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],langext:{pattern:/\w+\s*\|\|[\s\S]+?\|\|/,greedy:!0,alias:"string"},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/,lookbehind:!0},keyword:/\b(?:abstract|actor|also|annotation|assert|async|await|bool|boolean|break|byte|case|catch|changed|char|class|closed|constant|continue|def|default|del|double|elif|else|enum|every|extends|false|finally|float|for|from|global|gpudef|gpukernel|if|import|in|init|inject|int|lambda|local|long|loop|match|new|nodefault|null|of|onchange|open|out|override|package|parfor|parforsync|post|pre|private|protected|provide|provider|public|return|shared|short|single|size_t|sizeof|super|sync|this|throw|trait|trans|transient|true|try|typedef|unchecked|using|val|var|void|while|with)\b/,boolean:/\b(?:false|true)\b/,number:/\b0b[01][01_]*L?\b|\b0x[\da-f_]*\.?[\da-f_p+-]+\b|(?:\b\d[\d_]*\.?[\d_]*|\B\.\d[\d_]*)(?:e[+-]?\d[\d_]*)?[dfls]?/i,punctuation:/[{}[\];(),.:]/,operator:/<==|>==|=>|->|<-|<>|\^|&==|&<>|!|\?|\?:|\.\?|\+\+|--|[-+*/=<>]=?|\b(?:and|as|band|bor|bxor|comp|is|isnot|mod|or)\b=?/,annotation:{pattern:/@(?:\w+:)?(?:\w*|\[[^\]]+\])/,alias:"builtin"}},Prism.languages.insertBefore("concurnas","langext",{string:{pattern:/[rs]?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*){(?:[^{}]|{(?:[^{}]|{[^}]*})*})+}/,lookbehind:!0,inside:Prism.languages.concurnas},string:/[\s\S]+/}}}),Prism.languages.conc=Prism.languages.concurnas; +Prism.languages.csp={directive:{pattern:/\b(?:base-uri|block-all-mixed-content|(?:child|connect|default|font|frame|img|manifest|media|object|script|style|worker)-src|disown-opener|form-action|frame-ancestors|plugin-types|referrer|reflected-xss|report-to|report-uri|require-sri-for|sandbox|upgrade-insecure-requests)\b/i,alias:"keyword"},safe:{pattern:/'(?:self|none|strict-dynamic|(?:nonce-|sha(?:256|384|512)-)[a-zA-Z\d+=/]+)'/,alias:"selector"},unsafe:{pattern:/(?:'unsafe-inline'|'unsafe-eval'|'unsafe-hashed-attributes'|\*)/,alias:"function"}}; +!function(e){e.languages.ruby=e.languages.extend("clike",{comment:[/#.*/,{pattern:/^=begin\s[\s\S]*?^=end/m,greedy:!0}],"class-name":{pattern:/(\b(?:class)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:alias|and|BEGIN|begin|break|case|class|def|define_method|defined|do|each|else|elsif|END|end|ensure|extend|for|if|in|include|module|new|next|nil|not|or|prepend|protected|private|public|raise|redo|require|rescue|retry|return|self|super|then|throw|undef|unless|until|when|while|yield)\b/});var n={pattern:/#\{[^}]+\}/,inside:{delimiter:{pattern:/^#\{|\}$/,alias:"tag"},rest:e.languages.ruby}};delete e.languages.ruby.function,e.languages.insertBefore("ruby","keyword",{regex:[{pattern:RegExp("%r(?:"+["([^a-zA-Z0-9\\s{(\\[<])(?:(?!\\1)[^\\\\]|\\\\[^])*\\1[gim]{0,3}","\\((?:[^()\\\\]|\\\\[^])*\\)[gim]{0,3}","\\{(?:[^#{}\\\\]|#(?:\\{[^}]+\\})?|\\\\[^])*\\}[gim]{0,3}","\\[(?:[^\\[\\]\\\\]|\\\\[^])*\\][gim]{0,3}","<(?:[^<>\\\\]|\\\\[^])*>[gim]{0,3}"].join("|")+")"),greedy:!0,inside:{interpolation:n}},{pattern:/(^|[^/])\/(?!\/)(?:\[[^\r\n\]]+\]|\\.|[^[/\\\r\n])+\/[gim]{0,3}(?=\s*(?:$|[\r\n,.;})]))/,lookbehind:!0,greedy:!0}],variable:/[@$]+[a-zA-Z_]\w*(?:[?!]|\b)/,symbol:{pattern:/(^|[^:]):[a-zA-Z_]\w*(?:[?!]|\b)/,lookbehind:!0},"method-definition":{pattern:/(\bdef\s+)[\w.]+/,lookbehind:!0,inside:{function:/\w+$/,rest:e.languages.ruby}}}),e.languages.insertBefore("ruby","number",{builtin:/\b(?:Array|Bignum|Binding|Class|Continuation|Dir|Exception|FalseClass|File|Stat|Fixnum|Float|Hash|Integer|IO|MatchData|Method|Module|NilClass|Numeric|Object|Proc|Range|Regexp|String|Struct|TMS|Symbol|ThreadGroup|Thread|Time|TrueClass)\b/,constant:/\b[A-Z]\w*(?:[?!]|\b)/}),e.languages.ruby.string=[{pattern:RegExp("%[qQiIwWxs]?(?:"+["([^a-zA-Z0-9\\s{(\\[<])(?:(?!\\1)[^\\\\]|\\\\[^])*\\1","\\((?:[^()\\\\]|\\\\[^])*\\)","\\{(?:[^#{}\\\\]|#(?:\\{[^}]+\\})?|\\\\[^])*\\}","\\[(?:[^\\[\\]\\\\]|\\\\[^])*\\]","<(?:[^<>\\\\]|\\\\[^])*>"].join("|")+")"),greedy:!0,inside:{interpolation:n}},{pattern:/("|')(?:#\{[^}]+\}|\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0,inside:{interpolation:n}}],e.languages.rb=e.languages.ruby}(Prism); +!function(e){e.languages.crystal=e.languages.extend("ruby",{keyword:[/\b(?:abstract|alias|as|asm|begin|break|case|class|def|do|else|elsif|end|ensure|enum|extend|for|fun|if|include|instance_sizeof|lib|macro|module|next|of|out|pointerof|private|protected|rescue|return|require|select|self|sizeof|struct|super|then|type|typeof|uninitialized|union|unless|until|when|while|with|yield|__DIR__|__END_LINE__|__FILE__|__LINE__)\b/,{pattern:/(\.\s*)(?:is_a|responds_to)\?/,lookbehind:!0}],number:/\b(?:0b[01_]*[01]|0o[0-7_]*[0-7]|0x[\da-fA-F_]*[\da-fA-F]|(?:\d(?:[\d_]*\d)?)(?:\.[\d_]*\d)?(?:[eE][+-]?[\d_]*\d)?)(?:_(?:[uif](?:8|16|32|64))?)?\b/}),e.languages.insertBefore("crystal","string",{attribute:{pattern:/@\[.+?\]/,alias:"attr-name",inside:{delimiter:{pattern:/^@\[|\]$/,alias:"tag"},rest:e.languages.crystal}},expansion:[{pattern:/\{\{.+?\}\}/,inside:{delimiter:{pattern:/^\{\{|\}\}$/,alias:"tag"},rest:e.languages.crystal}},{pattern:/\{%.+?%\}/,inside:{delimiter:{pattern:/^\{%|%\}$/,alias:"tag"},rest:e.languages.crystal}}]})}(Prism); +!function(e){var a,n=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/;e.languages.css.selector={pattern:e.languages.css.selector,inside:a={"pseudo-element":/:(?:after|before|first-letter|first-line|selection)|::[-\w]+/,"pseudo-class":/:[-\w]+/,class:/\.[-\w]+/,id:/#[-\w]+/,attribute:{pattern:RegExp("\\[(?:[^[\\]\"']|"+n.source+")*\\]"),greedy:!0,inside:{punctuation:/^\[|\]$/,"case-sensitivity":{pattern:/(\s)[si]$/i,lookbehind:!0,alias:"keyword"},namespace:{pattern:/^(\s*)[-*\w\xA0-\uFFFF]*\|(?!=)/,lookbehind:!0,inside:{punctuation:/\|$/}},"attr-name":{pattern:/^(\s*)[-\w\xA0-\uFFFF]+/,lookbehind:!0},"attr-value":[n,{pattern:/(=\s*)[-\w\xA0-\uFFFF]+(?=\s*$)/,lookbehind:!0}],operator:/[|~*^$]?=/}},"n-th":[{pattern:/(\(\s*)[+-]?\d*[\dn](?:\s*[+-]\s*\d+)?(?=\s*\))/,lookbehind:!0,inside:{number:/[\dn]+/,operator:/[+-]/}},{pattern:/(\(\s*)(?:even|odd)(?=\s*\))/i,lookbehind:!0}],combinator:/>|\+|~|\|\|/,punctuation:/[(),]/}},e.languages.css.atrule.inside["selector-function-argument"].inside=a,e.languages.insertBefore("css","property",{variable:{pattern:/(^|[^-\w\xA0-\uFFFF])--[-_a-z\xA0-\uFFFF][-\w\xA0-\uFFFF]*/i,lookbehind:!0}});var r={pattern:/(\b\d+)(?:%|[a-z]+\b)/,lookbehind:!0},i={pattern:/(^|[^\w.-])-?\d*\.?\d+/,lookbehind:!0};e.languages.insertBefore("css","function",{operator:{pattern:/(\s)[+\-*\/](?=\s)/,lookbehind:!0},hexcode:{pattern:/\B#(?:[\da-f]{1,2}){3,4}\b/i,alias:"color"},color:[/\b(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)\b/i,{pattern:/\b(?:rgb|hsl)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:rgb|hsl)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:r,number:i,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:r,number:i})}(Prism); +Prism.languages.cypher={comment:/\/\/.*/,string:{pattern:/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/,greedy:!0},"class-name":{pattern:/(:\s*)(?:\w+|`(?:[^`\\\r\n])*`)(?=\s*[{):])/,lookbehind:!0,greedy:!0},relationship:{pattern:/(-\[\s*(?:\w+\s*|`(?:[^`\\\r\n])*`\s*)?:\s*|\|\s*:\s*)(?:\w+|`(?:[^`\\\r\n])*`)/,lookbehind:!0,greedy:!0,alias:"property"},identifier:{pattern:/`(?:[^`\\\r\n])*`/,greedy:!0,alias:"symbol"},variable:/\$\w+/,keyword:/\b(?:ADD|ALL|AND|AS|ASC|ASCENDING|ASSERT|BY|CALL|CASE|COMMIT|CONSTRAINT|CONTAINS|CREATE|CSV|DELETE|DESC|DESCENDING|DETACH|DISTINCT|DO|DROP|ELSE|END|ENDS|EXISTS|FOR|FOREACH|IN|INDEX|IS|JOIN|KEY|LIMIT|LOAD|MANDATORY|MATCH|MERGE|NODE|NOT|OF|ON|OPTIONAL|OR|ORDER(?=\s+BY)|PERIODIC|REMOVE|REQUIRE|RETURN|SCALAR|SCAN|SET|SKIP|START|STARTS|THEN|UNION|UNIQUE|UNWIND|USING|WHEN|WHERE|WITH|XOR|YIELD)\b/i,function:/\b\w+\b(?=\s*\()/,boolean:/\b(?:true|false|null)\b/i,number:/\b(?:0x[\da-fA-F]+|\d+(?:\.\d+)?(?:[eE][+-]?\d+)?)\b/,operator:/:|<--?|--?>?|<>|=~?|[<>]=?|[+*/%^|]|\.\.\.?/,punctuation:/[()[\]{},;.]/}; +Prism.languages.d=Prism.languages.extend("clike",{comment:[{pattern:/^\s*#!.+/,greedy:!0},{pattern:RegExp("(^|[^\\\\])(?:"+["/\\+(?:/\\+(?:[^+]|\\+(?!/))*\\+/|(?!/\\+)[^])*?\\+/","//.*","/\\*[^]*?\\*/"].join("|")+")"),lookbehind:!0,greedy:!0}],string:[{pattern:RegExp(['\\b[rx]"(?:\\\\[^]|[^\\\\"])*"[cwd]?','\\bq"(?:\\[[^]*?\\]|\\([^]*?\\)|<[^]*?>|\\{[^]*?\\})"','\\bq"((?!\\d)\\w+)$[^]*?^\\1"','\\bq"(.)[^]*?\\2"',"'(?:\\\\(?:\\W|\\w+)|[^\\\\])'",'(["`])(?:\\\\[^]|(?!\\3)[^\\\\])*\\3[cwd]?'].join("|"),"m"),greedy:!0},{pattern:/\bq\{(?:\{[^{}]*\}|[^{}])*\}/,greedy:!0,alias:"token-string"}],number:[/\b0x\.?[a-f\d_]+(?:(?!\.\.)\.[a-f\d_]*)?(?:p[+-]?[a-f\d_]+)?[ulfi]*/i,{pattern:/((?:\.\.)?)(?:\b0b\.?|\b|\.)\d[\d_]*(?:(?!\.\.)\.[\d_]*)?(?:e[+-]?\d[\d_]*)?[ulfi]*/i,lookbehind:!0}],keyword:/\$|\b(?:abstract|alias|align|asm|assert|auto|body|bool|break|byte|case|cast|catch|cdouble|cent|cfloat|char|class|const|continue|creal|dchar|debug|default|delegate|delete|deprecated|do|double|else|enum|export|extern|false|final|finally|float|for|foreach|foreach_reverse|function|goto|idouble|if|ifloat|immutable|import|inout|int|interface|invariant|ireal|lazy|long|macro|mixin|module|new|nothrow|null|out|override|package|pragma|private|protected|public|pure|real|ref|return|scope|shared|short|static|struct|super|switch|synchronized|template|this|throw|true|try|typedef|typeid|typeof|ubyte|ucent|uint|ulong|union|unittest|ushort|version|void|volatile|wchar|while|with|__(?:(?:FILE|MODULE|LINE|FUNCTION|PRETTY_FUNCTION|DATE|EOF|TIME|TIMESTAMP|VENDOR|VERSION)__|gshared|traits|vector|parameters)|string|wstring|dstring|size_t|ptrdiff_t)\b/,operator:/\|[|=]?|&[&=]?|\+[+=]?|-[-=]?|\.?\.\.|=[>=]?|!(?:i[ns]\b|<>?=?|>=?|=)?|\bi[ns]\b|(?:<[<>]?|>>?>?|\^\^|[*\/%^~])=?/}),Prism.languages.insertBefore("d","keyword",{property:/\B@\w*/}),Prism.languages.insertBefore("d","function",{register:{pattern:/\b(?:[ABCD][LHX]|E[ABCD]X|E?(?:BP|SP|DI|SI)|[ECSDGF]S|CR[0234]|DR[012367]|TR[3-7]|X?MM[0-7]|R[ABCD]X|[BS]PL|R[BS]P|[DS]IL|R[DS]I|R(?:[89]|1[0-5])[BWD]?|XMM(?:[89]|1[0-5])|YMM(?:1[0-5]|\d))\b|\bST(?:\([0-7]\)|\b)/,alias:"variable"}}); +Prism.languages.dart=Prism.languages.extend("clike",{string:[{pattern:/r?("""|''')[\s\S]*?\1/,greedy:!0},{pattern:/r?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,greedy:!0}],keyword:[/\b(?:async|sync|yield)\*/,/\b(?:abstract|assert|async|await|break|case|catch|class|const|continue|covariant|default|deferred|do|dynamic|else|enum|export|extension|external|extends|factory|final|finally|for|Function|get|hide|if|implements|interface|import|in|library|mixin|new|null|on|operator|part|rethrow|return|set|show|static|super|switch|sync|this|throw|try|typedef|var|void|while|with|yield)\b/],operator:/\bis!|\b(?:as|is)\b|\+\+|--|&&|\|\||<<=?|>>=?|~(?:\/=?)?|[+\-*\/%&^|=!<>]=?|\?/}),Prism.languages.insertBefore("dart","function",{metadata:{pattern:/@\w+/,alias:"symbol"}}); +Prism.languages.dax={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:--|\/\/).*)/,lookbehind:!0},"data-field":{pattern:/'(?:[^']|'')*'(?!')(?:\[[ \w\xA0-\uFFFF]+\])?|\w+\[[ \w\xA0-\uFFFF]+\]/,alias:"symbol"},measure:{pattern:/\[[ \w\xA0-\uFFFF]+\]/,alias:"constant"},string:{pattern:/"(?:[^"]|"")*"(?!")/,greedy:!0},function:/\b(?:ABS|ACOS|ACOSH|ACOT|ACOTH|ADDCOLUMNS|ADDMISSINGITEMS|ALL|ALLCROSSFILTERED|ALLEXCEPT|ALLNOBLANKROW|ALLSELECTED|AND|APPROXIMATEDISTINCTCOUNT|ASIN|ASINH|ATAN|ATANH|AVERAGE|AVERAGEA|AVERAGEX|BETA\.DIST|BETA\.INV|BLANK|CALCULATE|CALCULATETABLE|CALENDAR|CALENDARAUTO|CEILING|CHISQ\.DIST|CHISQ\.DIST\.RT|CHISQ\.INV|CHISQ\.INV\.RT|CLOSINGBALANCEMONTH|CLOSINGBALANCEQUARTER|CLOSINGBALANCEYEAR|COALESCE|COMBIN|COMBINA|COMBINEVALUES|CONCATENATE|CONCATENATEX|CONFIDENCE\.NORM|CONFIDENCE\.T|CONTAINS|CONTAINSROW|CONTAINSSTRING|CONTAINSSTRINGEXACT|CONVERT|COS|COSH|COT|COTH|COUNT|COUNTA|COUNTAX|COUNTBLANK|COUNTROWS|COUNTX|CROSSFILTER|CROSSJOIN|CURRENCY|CURRENTGROUP|CUSTOMDATA|DATATABLE|DATE|DATEADD|DATEDIFF|DATESBETWEEN|DATESINPERIOD|DATESMTD|DATESQTD|DATESYTD|DATEVALUE|DAY|DEGREES|DETAILROWS|DISTINCT|DISTINCTCOUNT|DISTINCTCOUNTNOBLANK|DIVIDE|EARLIER|EARLIEST|EDATE|ENDOFMONTH|ENDOFQUARTER|ENDOFYEAR|EOMONTH|ERROR|EVEN|EXACT|EXCEPT|EXP|EXPON\.DIST|FACT|FALSE|FILTER|FILTERS|FIND|FIRSTDATE|FIRSTNONBLANK|FIRSTNONBLANKVALUE|FIXED|FLOOR|FORMAT|GCD|GENERATE|GENERATEALL|GENERATESERIES|GEOMEAN|GEOMEANX|GROUPBY|HASONEFILTER|HASONEVALUE|HOUR|IF|IF\.EAGER|IFERROR|IGNORE|INT|INTERSECT|ISBLANK|ISCROSSFILTERED|ISEMPTY|ISERROR|ISEVEN|ISFILTERED|ISINSCOPE|ISLOGICAL|ISNONTEXT|ISNUMBER|ISO\.CEILING|ISODD|ISONORAFTER|ISSELECTEDMEASURE|ISSUBTOTAL|ISTEXT|KEEPFILTERS|KEYWORDMATCH|LASTDATE|LASTNONBLANK|LASTNONBLANKVALUE|LCM|LEFT|LEN|LN|LOG|LOG10|LOOKUPVALUE|LOWER|MAX|MAXA|MAXX|MEDIAN|MEDIANX|MID|MIN|MINA|MINUTE|MINX|MOD|MONTH|MROUND|NATURALINNERJOIN|NATURALLEFTOUTERJOIN|NEXTDAY|NEXTMONTH|NEXTQUARTER|NEXTYEAR|NONVISUAL|NORM\.DIST|NORM\.INV|NORM\.S\.DIST|NORM\.S\.INV|NOT|NOW|ODD|OPENINGBALANCEMONTH|OPENINGBALANCEQUARTER|OPENINGBALANCEYEAR|OR|PARALLELPERIOD|PATH|PATHCONTAINS|PATHITEM|PATHITEMREVERSE|PATHLENGTH|PERCENTILE\.EXC|PERCENTILE\.INC|PERCENTILEX\.EXC|PERCENTILEX\.INC|PERMUT|PI|POISSON\.DIST|POWER|PREVIOUSDAY|PREVIOUSMONTH|PREVIOUSQUARTER|PREVIOUSYEAR|PRODUCT|PRODUCTX|QUARTER|QUOTIENT|RADIANS|RAND|RANDBETWEEN|RANK\.EQ|RANKX|RELATED|RELATEDTABLE|REMOVEFILTERS|REPLACE|REPT|RIGHT|ROLLUP|ROLLUPADDISSUBTOTAL|ROLLUPGROUP|ROLLUPISSUBTOTAL|ROUND|ROUNDDOWN|ROUNDUP|ROW|SAMEPERIODLASTYEAR|SAMPLE|SEARCH|SECOND|SELECTCOLUMNS|SELECTEDMEASURE|SELECTEDMEASUREFORMATSTRING|SELECTEDMEASURENAME|SELECTEDVALUE|SIGN|SIN|SINH|SQRT|SQRTPI|STARTOFMONTH|STARTOFQUARTER|STARTOFYEAR|STDEV\.P|STDEV\.S|STDEVX\.P|STDEVX\.S|SUBSTITUTE|SUBSTITUTEWITHINDEX|SUM|SUMMARIZE|SUMMARIZECOLUMNS|SUMX|SWITCH|T\.DIST|T\.DIST\.2T|T\.DIST\.RT|T\.INV|T\.INV\.2T|TAN|TANH|TIME|TIMEVALUE|TODAY|TOPN|TOPNPERLEVEL|TOPNSKIP|TOTALMTD|TOTALQTD|TOTALYTD|TREATAS|TRIM|TRUE|TRUNC|UNICHAR|UNICODE|UNION|UPPER|USERELATIONSHIP|USERNAME|USEROBJECTID|USERPRINCIPALNAME|UTCNOW|UTCTODAY|VALUE|VALUES|VAR\.P|VAR\.S|VARX\.P|VARX\.S|WEEKDAY|WEEKNUM|XIRR|XNPV|YEAR|YEARFRAC)(?=\s*\()/i,keyword:/\b(?:DEFINE|MEASURE|EVALUATE|ORDER\s+BY|RETURN|VAR|START\s+AT|ASC|DESC)\b/i,boolean:{pattern:/\b(?:TRUE|FALSE|NULL)\b/i,alias:"constant"},number:/\b\d+\.?\d*|\B\.\d+\b/i,operator:/:=|[-+*\/=^]|&&?|\|\||<(?:=>?|<|>)?|>[>=]?|\b(?:IN|NOT)\b/i,punctuation:/[;\[\](){}`,.]/}; +Prism.languages.dhall={comment:/--.*|\{-(?:[^-{]|-(?!\})|\{(?!-)|\{-(?:[^-{]|-(?!\})|\{(?!-))*-\})*-\}/,string:{pattern:/"(?:[^"\\]|\\.)*"|''(?:[^']|'(?!')|'''|''\$\{)*''(?!'|\$)/,greedy:!0,inside:{interpolation:{pattern:/\$\{[^{}]*\}/,inside:{expression:{pattern:/(^\$\{)[\s\S]+(?=\}$)/,lookbehind:!0,alias:"language-dhall",inside:null},punctuation:/\$\{|\}/}}}},label:{pattern:/`[^`]*`/,greedy:!0},url:{pattern:/\bhttps?:\/\/[\w.:%!$&'*+;=@~-]+(?:\/[\w.:%!$&'*+;=@~-]*)*(?:\?[/?\w.:%!$&'*+;=@~-]*)?/,greedy:!0},env:{pattern:/\benv:(?:(?!\d)\w+|"(?:[^"\\=]|\\.)*")/,greedy:!0,inside:{function:/^env/,operator:/^:/,variable:/[\s\S]+/}},hash:{pattern:/\bsha256:[\da-fA-F]{64}\b/,inside:{function:/sha256/,operator:/:/,number:/[\da-fA-F]{64}/}},keyword:/\b(?:as|assert|else|forall|if|in|let|merge|missing|then|toMap|using|with)\b|\u2200/,builtin:/\b(?:Some|None)\b/,boolean:/\b(?:False|True)\b/,number:/\bNaN\b|-?\bInfinity\b|[+-]?\b(?:0x[\da-fA-F]+|\d+(?:\.\d+)?(?:e[+-]?\d+)?)\b/,operator:/\/\\|\/\/\\\\|&&|\|\||[!=]=|===|\/\/|->|\+\+|::|[+*#@=:?<>|\\\u2227\u2a53\u2261\u2afd\u03bb\u2192]/,punctuation:/\.\.|[{}\[\](),./]/,"class-name":/\b[A-Z]\w*\b/},Prism.languages.dhall.string.inside.interpolation.inside.expression.inside=Prism.languages.dhall; +!function(i){i.languages.diff={coord:[/^(?:\*{3}|-{3}|\+{3}).*$/m,/^@@.*@@$/m,/^\d+.*$/m]};var r={"deleted-sign":"-","deleted-arrow":"<","inserted-sign":"+","inserted-arrow":">",unchanged:" ",diff:"!"};Object.keys(r).forEach(function(e){var n=r[e],a=[];/^\w+$/.test(e)||a.push(/\w+/.exec(e)[0]),"diff"===e&&a.push("bold"),i.languages.diff[e]={pattern:RegExp("^(?:["+n+"].*(?:\r\n?|\n|(?![\\s\\S])))+","m"),alias:a,inside:{line:{pattern:/(.)(?=[\s\S]).*(?:\r\n?|\n)?/,lookbehind:!0},prefix:{pattern:/[\s\S]/,alias:/\w+/.exec(e)[0]}}}}),Object.defineProperty(i.languages.diff,"PREFIXES",{value:r})}(Prism); +!function(h){function v(e,n){return"___"+e.toUpperCase()+n+"___"}Object.defineProperties(h.languages["markup-templating"]={},{buildPlaceholders:{value:function(a,r,e,o){if(a.language===r){var c=a.tokenStack=[];a.code=a.code.replace(e,function(e){if("function"==typeof o&&!o(e))return e;for(var n,t=c.length;-1!==a.code.indexOf(n=v(r,t));)++t;return c[t]=e,n}),a.grammar=h.languages.markup}}},tokenizePlaceholders:{value:function(p,k){if(p.language===k&&p.tokenStack){p.grammar=h.languages[k];var m=0,d=Object.keys(p.tokenStack);!function e(n){for(var t=0;t=d.length);t++){var a=n[t];if("string"==typeof a||a.content&&"string"==typeof a.content){var r=d[m],o=p.tokenStack[r],c="string"==typeof a?a:a.content,i=v(k,r),u=c.indexOf(i);if(-1]?|>[=>]?|[&|^~]/,number:/\b\d+(?:\.\d+)?\b/,boolean:/[Tt]rue|[Ff]alse|[Nn]one/,variable:/\b\w+?\b/,punctuation:/[{}[\](),.:;]/};var n=/{{[\s\S]*?}}|{%[\s\S]*?%}|{#[\s\S]*?#}/g,o=e.languages["markup-templating"];e.hooks.add("before-tokenize",function(e){o.buildPlaceholders(e,"django",n)}),e.hooks.add("after-tokenize",function(e){o.tokenizePlaceholders(e,"django")}),e.languages.jinja2=e.languages.django,e.hooks.add("before-tokenize",function(e){o.buildPlaceholders(e,"jinja2",n)}),e.hooks.add("after-tokenize",function(e){o.tokenizePlaceholders(e,"jinja2")})}(Prism); +Prism.languages["dns-zone-file"]={comment:/;.*/,string:{pattern:/"(?:\\.|[^"\\\r\n])*"/,greedy:!0},variable:[{pattern:/(^\$ORIGIN[ \t]+)\S+/m,lookbehind:!0},{pattern:/(^|\s)@(?=\s|$)/,lookbehind:!0}],keyword:/^\$(?:ORIGIN|INCLUDE|TTL)(?=\s|$)/m,class:{pattern:/(^|\s)(?:IN|CH|CS|HS)(?=\s|$)/,lookbehind:!0,alias:"keyword"},type:{pattern:/(^|\s)(?:A|A6|AAAA|AFSDB|APL|ATMA|CAA|CDNSKEY|CDS|CERT|CNAME|DHCID|DLV|DNAME|DNSKEY|DS|EID|GID|GPOS|HINFO|HIP|IPSECKEY|ISDN|KEY|KX|LOC|MAILA|MAILB|MB|MD|MF|MG|MINFO|MR|MX|NAPTR|NB|NBSTAT|NIMLOC|NINFO|NS|NSAP|NSAP-PTR|NSEC|NSEC3|NSEC3PARAM|NULL|NXT|OPENPGPKEY|PTR|PX|RKEY|RP|RRSIG|RT|SIG|SINK|SMIMEA|SOA|SPF|SRV|SSHFP|TA|TKEY|TLSA|TSIG|TXT|UID|UINFO|UNSPEC|URI|WKS|X25)(?=\s|$)/,lookbehind:!0,alias:"keyword"},punctuation:/[()]/},Prism.languages["dns-zone"]=Prism.languages["dns-zone-file"]; +Prism.languages.docker={keyword:{pattern:/(^\s*)(?:ADD|ARG|CMD|COPY|ENTRYPOINT|ENV|EXPOSE|FROM|HEALTHCHECK|LABEL|MAINTAINER|ONBUILD|RUN|SHELL|STOPSIGNAL|USER|VOLUME|WORKDIR)(?=\s)/im,lookbehind:!0},string:/("|')(?:(?!\1)[^\\\r\n]|\\(?:\r\n|[\s\S]))*\1/,comment:{pattern:/#.*/,greedy:!0},punctuation:/---|\.\.\.|[:[\]{}\-,|>?]/},Prism.languages.dockerfile=Prism.languages.docker; +Prism.languages.ebnf={comment:/\(\*[\s\S]*?\*\)/,string:{pattern:/"[^"\r\n]*"|'[^'\r\n]*'/,greedy:!0},special:{pattern:/\?[^?\r\n]*\?/,greedy:!0,alias:"class-name"},definition:{pattern:/^(\s*)[a-z]\w*(?:[ \t]+[a-z]\w*)*(?=\s*=)/im,lookbehind:!0,alias:["rule","keyword"]},rule:/\b[a-z]\w*(?:[ \t]+[a-z]\w*)*\b/i,punctuation:/\([:/]|[:/]\)|[.,;()[\]{}]/,operator:/[-=|*/!]/}; +Prism.languages.editorconfig={comment:/[;#].*/,section:{pattern:/(^[ \t]*)\[.+]/m,lookbehind:!0,alias:"keyword",inside:{regex:/\\\\[\[\]{},!?.*]/,operator:/[!?]|\.\.|\*{1,2}/,punctuation:/[\[\]{},]/}},property:{pattern:/(^[ \t]*)[^\s=]+(?=[ \t]*=)/m,lookbehind:!0},value:{pattern:/=.*/,alias:"string",inside:{punctuation:/^=/}}}; +Prism.languages.eiffel={comment:/--.*/,string:[{pattern:/"([^[]*)\[[\s\S]*?\]\1"/,greedy:!0},{pattern:/"([^{]*)\{[\s\S]*?\}\1"/,greedy:!0},{pattern:/"(?:%\s*\n\s*%|%.|[^%"\r\n])*"/,greedy:!0}],char:/'(?:%.|[^%'\r\n])+'/,keyword:/\b(?:across|agent|alias|all|and|attached|as|assign|attribute|check|class|convert|create|Current|debug|deferred|detachable|do|else|elseif|end|ensure|expanded|export|external|feature|from|frozen|if|implies|inherit|inspect|invariant|like|local|loop|not|note|obsolete|old|once|or|Precursor|redefine|rename|require|rescue|Result|retry|select|separate|some|then|undefine|until|variant|Void|when|xor)\b/i,boolean:/\b(?:True|False)\b/i,"class-name":{pattern:/\b[A-Z][\dA-Z_]*\b/,alias:"builtin"},number:[/\b0[xcb][\da-f](?:_*[\da-f])*\b/i,/(?:\b\d(?:_*\d)*)?\.(?:(?:\d(?:_*\d)*)?e[+-]?)?\d(?:_*\d)*\b|\b\d(?:_*\d)*\b\.?/i],punctuation:/:=|<<|>>|\(\||\|\)|->|\.(?=\w)|[{}[\];(),:?]/,operator:/\\\\|\|\.\.\||\.\.|\/[~\/=]?|[><]=?|[-+*^=~]/}; +!function(e){e.languages.ejs={delimiter:{pattern:/^<%[-_=]?|[-_]?%>$/,alias:"punctuation"},comment:/^#[\s\S]*/,"language-javascript":{pattern:/[\s\S]+/,inside:e.languages.javascript}},e.hooks.add("before-tokenize",function(a){e.languages["markup-templating"].buildPlaceholders(a,"ejs",/<%(?!%)[\s\S]+?%>/g)}),e.hooks.add("after-tokenize",function(a){e.languages["markup-templating"].tokenizePlaceholders(a,"ejs")}),e.languages.eta=e.languages.ejs}(Prism); +Prism.languages.elixir={comment:/#.*/m,regex:{pattern:/~[rR](?:("""|''')(?:\\[\s\S]|(?!\1)[^\\])+\1|([\/|"'])(?:\\.|(?!\2)[^\\\r\n])+\2|\((?:\\.|[^\\)\r\n])+\)|\[(?:\\.|[^\\\]\r\n])+\]|\{(?:\\.|[^\\}\r\n])+\}|<(?:\\.|[^\\>\r\n])+>)[uismxfr]*/,greedy:!0},string:[{pattern:/~[cCsSwW](?:("""|''')(?:\\[\s\S]|(?!\1)[^\\])+\1|([\/|"'])(?:\\.|(?!\2)[^\\\r\n])+\2|\((?:\\.|[^\\)\r\n])+\)|\[(?:\\.|[^\\\]\r\n])+\]|\{(?:\\.|#\{[^}]+\}|#(?!\{)|[^#\\}\r\n])+\}|<(?:\\.|[^\\>\r\n])+>)[csa]?/,greedy:!0,inside:{}},{pattern:/("""|''')[\s\S]*?\1/,greedy:!0,inside:{}},{pattern:/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0,inside:{}}],atom:{pattern:/(^|[^:]):\w+/,lookbehind:!0,alias:"symbol"},"attr-name":/\w+\??:(?!:)/,capture:{pattern:/(^|[^&])&(?:[^&\s\d()][^\s()]*|(?=\())/,lookbehind:!0,alias:"function"},argument:{pattern:/(^|[^&])&\d+/,lookbehind:!0,alias:"variable"},attribute:{pattern:/@\w+/,alias:"variable"},number:/\b(?:0[box][a-f\d_]+|\d[\d_]*)(?:\.[\d_]+)?(?:e[+-]?[\d_]+)?\b/i,keyword:/\b(?:after|alias|and|case|catch|cond|def(?:callback|exception|impl|module|p|protocol|struct)?|do|else|end|fn|for|if|import|not|or|require|rescue|try|unless|use|when)\b/,boolean:/\b(?:true|false|nil)\b/,operator:[/\bin\b|&&?|\|[|>]?|\\\\|::|\.\.\.?|\+\+?|-[->]?|<[-=>]|>=|!==?|\B!|=(?:==?|[>~])?|[*\/^]/,{pattern:/([^<])<(?!<)/,lookbehind:!0},{pattern:/([^>])>(?!>)/,lookbehind:!0}],punctuation:/<<|>>|[.,%\[\]{}()]/},Prism.languages.elixir.string.forEach(function(e){e.inside={interpolation:{pattern:/#\{[^}]+\}/,inside:{delimiter:{pattern:/^#\{|\}$/,alias:"punctuation"},rest:Prism.languages.elixir}}}}); +Prism.languages.elm={comment:/--.*|{-[\s\S]*?-}/,char:{pattern:/'(?:[^\\'\r\n]|\\(?:[abfnrtv\\']|\d+|x[0-9a-fA-F]+))'/,greedy:!0},string:[{pattern:/"""[\s\S]*?"""/,greedy:!0},{pattern:/"(?:[^\\"\r\n]|\\(?:[abfnrtv\\"]|\d+|x[0-9a-fA-F]+))*"/,greedy:!0}],import_statement:{pattern:/^\s*import\s+[A-Z]\w*(?:\.[A-Z]\w*)*(?:\s+as\s+(?:[A-Z]\w*)(?:\.[A-Z]\w*)*)?(?:\s+exposing\s+)?/m,inside:{keyword:/\b(?:import|as|exposing)\b/}},keyword:/\b(?:alias|as|case|else|exposing|if|in|infixl|infixr|let|module|of|then|type)\b/,builtin:/\b(?:abs|acos|always|asin|atan|atan2|ceiling|clamp|compare|cos|curry|degrees|e|flip|floor|fromPolar|identity|isInfinite|isNaN|logBase|max|min|negate|never|not|pi|radians|rem|round|sin|sqrt|tan|toFloat|toPolar|toString|truncate|turns|uncurry|xor)\b/,number:/\b(?:\d+(?:\.\d+)?(?:e[+-]?\d+)?|0x[0-9a-f]+)\b/i,operator:/\s\.\s|[+\-/*=.$<>:&|^?%#@~!]{2,}|[+\-/*=$<>:&|^?%#@~!]/,hvariable:/\b(?:[A-Z]\w*\.)*[a-z]\w*\b/,constant:/\b(?:[A-Z]\w*\.)*[A-Z]\w*\b/,punctuation:/[{}[\]|(),.:]/}; +Prism.languages.lua={comment:/^#!.+|--(?:\[(=*)\[[\s\S]*?\]\1\]|.*)/m,string:{pattern:/(["'])(?:(?!\1)[^\\\r\n]|\\z(?:\r\n|\s)|\\(?:\r\n|[\s\S]))*\1|\[(=*)\[[\s\S]*?\]\2\]/,greedy:!0},number:/\b0x[a-f\d]+\.?[a-f\d]*(?:p[+-]?\d+)?\b|\b\d+(?:\.\B|\.?\d*(?:e[+-]?\d+)?\b)|\B\.\d+(?:e[+-]?\d+)?\b/i,keyword:/\b(?:and|break|do|else|elseif|end|false|for|function|goto|if|in|local|nil|not|or|repeat|return|then|true|until|while)\b/,function:/(?!\d)\w+(?=\s*(?:[({]))/,operator:[/[-+*%^&|#]|\/\/?|<[<=]?|>[>=]?|[=~]=?/,{pattern:/(^|[^.])\.\.(?!\.)/,lookbehind:!0}],punctuation:/[\[\](){},;]|\.+|:+/}; +!function(e){e.languages.etlua={delimiter:{pattern:/^<%[-=]?|-?%>$/,alias:"punctuation"},"language-lua":{pattern:/[\s\S]+/,inside:e.languages.lua}},e.hooks.add("before-tokenize",function(a){e.languages["markup-templating"].buildPlaceholders(a,"etlua",/<%[\s\S]+?%>/g)}),e.hooks.add("after-tokenize",function(a){e.languages["markup-templating"].tokenizePlaceholders(a,"etlua")})}(Prism); +!function(n){n.languages.erb=n.languages.extend("ruby",{}),n.languages.insertBefore("erb","comment",{delimiter:{pattern:/^<%=?|%>$/,alias:"punctuation"}}),n.hooks.add("before-tokenize",function(e){n.languages["markup-templating"].buildPlaceholders(e,"erb",/<%=?(?:[^\r\n]|[\r\n](?!=begin)|[\r\n]=begin\s[\s\S]*?^=end)+?%>/gm)}),n.hooks.add("after-tokenize",function(e){n.languages["markup-templating"].tokenizePlaceholders(e,"erb")})}(Prism); +Prism.languages.erlang={comment:/%.+/,string:{pattern:/"(?:\\.|[^\\"\r\n])*"/,greedy:!0},"quoted-function":{pattern:/'(?:\\.|[^\\'\r\n])+'(?=\()/,alias:"function"},"quoted-atom":{pattern:/'(?:\\.|[^\\'\r\n])+'/,alias:"atom"},boolean:/\b(?:true|false)\b/,keyword:/\b(?:fun|when|case|of|end|if|receive|after|try|catch)\b/,number:[/\$\\?./,/\d+#[a-z0-9]+/i,/(?:\b\d+\.?\d*|\B\.\d+)(?:e[+-]?\d+)?/i],function:/\b[a-z][\w@]*(?=\()/,variable:{pattern:/(^|[^@])(?:\b|\?)[A-Z_][\w@]*/,lookbehind:!0},operator:[/[=\/<>:]=|=[:\/]=|\+\+?|--?|[=*\/!]|\b(?:bnot|div|rem|band|bor|bxor|bsl|bsr|not|and|or|xor|orelse|andalso)\b/,{pattern:/(^|[^<])<(?!<)/,lookbehind:!0},{pattern:/(^|[^>])>(?!>)/,lookbehind:!0}],atom:/\b[a-z][\w@]*/,punctuation:/[()[\]{}:;,.#|]|<<|>>/}; +Prism.languages["excel-formula"]={comment:{pattern:/(\bN\(\s*)"(?:[^"]|"")*"(?=\s*\))/i,lookbehind:!0,greedy:!0},string:{pattern:/"(?:[^"]|"")*"(?!")/,greedy:!0},reference:{pattern:/(?:'[^']*'|(?:[^\s()[\]{}<>*?"';,$&]*\[[^^\s()[\]{}<>*?"']+\])?\w+)!/,greedy:!0,alias:"string",inside:{operator:/!$/,punctuation:/'/,sheet:{pattern:/[^[\]]+$/,alias:"function"},file:{pattern:/\[[^[\]]+\]$/,inside:{punctuation:/[[\]]/}},path:/[\s\S]+/}},"function-name":{pattern:/\b[A-Z]\w*(?=\()/i,alias:"keyword"},range:{pattern:/\$?\b(?:[A-Z]+\$?\d+:\$?[A-Z]+\$?\d+|[A-Z]+:\$?[A-Z]+|\d+:\$?\d+)\b/i,alias:"property",inside:{operator:/:/,cell:/\$?[A-Z]+\$?\d+/i,column:/\$?[A-Z]+/i,row:/\$?\d+/}},cell:{pattern:/\b[A-Z]+\d+\b|\$[A-Za-z]+\$?\d+\b|\b[A-Za-z]+\$\d+\b/,alias:"property"},number:/(?:\b\d+(?:\.\d+)?|\B\.\d+)(?:e[+-]?\d+)?\b/i,boolean:/\b(?:TRUE|FALSE)\b/i,operator:/[-+*/^%=&,]|<[=>]?|>=?/,punctuation:/[[\]();{}|]/},Prism.languages.xlsx=Prism.languages.xls=Prism.languages["excel-formula"]; +Prism.languages.fsharp=Prism.languages.extend("clike",{comment:[{pattern:/(^|[^\\])\(\*[\s\S]*?\*\)/,lookbehind:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0}],string:{pattern:/(?:"""[\s\S]*?"""|@"(?:""|[^"])*"|"(?:\\[\s\S]|[^\\"])*")B?|'(?:[^\\']|\\(?:.|\d{3}|x[a-fA-F\d]{2}|u[a-fA-F\d]{4}|U[a-fA-F\d]{8}))'B?/,greedy:!0},"class-name":{pattern:/(\b(?:exception|inherit|interface|new|of|type)\s+|\w\s*:\s*|\s:\??>\s*)[.\w]+\b(?:\s*(?:->|\*)\s*[.\w]+\b)*(?!\s*[:.])/,lookbehind:!0,inside:{operator:/->|\*/,punctuation:/\./}},keyword:/\b(?:let|return|use|yield)(?:!\B|\b)|\b(?:abstract|and|as|assert|base|begin|class|default|delegate|do|done|downcast|downto|elif|else|end|exception|extern|false|finally|for|fun|function|global|if|in|inherit|inline|interface|internal|lazy|match|member|module|mutable|namespace|new|not|null|of|open|or|override|private|public|rec|select|static|struct|then|to|true|try|type|upcast|val|void|when|while|with|asr|land|lor|lsl|lsr|lxor|mod|sig|atomic|break|checked|component|const|constraint|constructor|continue|eager|event|external|fixed|functor|include|method|mixin|object|parallel|process|protected|pure|sealed|tailcall|trait|virtual|volatile)\b/,number:[/\b0x[\da-fA-F]+(?:un|lf|LF)?\b/,/\b0b[01]+(?:y|uy)?\b/,/(?:\b\d+\.?\d*|\B\.\d+)(?:[fm]|e[+-]?\d+)?\b/i,/\b\d+(?:[IlLsy]|u[lsy]?|UL)?\b/],operator:/([<>~&^])\1\1|([*.:<>&])\2|<-|->|[!=:]=|?|\??(?:<=|>=|<>|[-+*/%=<>])\??|[!?^&]|~[+~-]|:>|:\?>?/}),Prism.languages.insertBefore("fsharp","keyword",{preprocessor:{pattern:/^[^\r\n\S]*#.*/m,alias:"property",inside:{directive:{pattern:/(\s*#)\b(?:else|endif|if|light|line|nowarn)\b/,lookbehind:!0,alias:"keyword"}}}}),Prism.languages.insertBefore("fsharp","punctuation",{"computation-expression":{pattern:/[_a-z]\w*(?=\s*\{)/i,alias:"keyword"}}),Prism.languages.insertBefore("fsharp","string",{annotation:{pattern:/\[<.+?>\]/,inside:{punctuation:/^\[<|>\]$/,"class-name":{pattern:/^\w+$|(^|;\s*)[A-Z]\w*(?=\()/,lookbehind:!0},"annotation-content":{pattern:/[\s\S]+/,inside:Prism.languages.fsharp}}}}); +!function(e){var t={function:/\b(?:TODOS?|FIX(?:MES?)?|NOTES?|BUGS?|XX+|HACKS?|WARN(?:ING)?|\?{2,}|!{2,})\b/},s={number:/\\[^\s']|%\w/},i={comment:[{pattern:/(^|\s)(?:! .*|!$)/,lookbehind:!0,inside:t},{pattern:/(^|\s)\/\*\s[\s\S]*?\*\/(?=\s|$)/,lookbehind:!0,greedy:!0,inside:t},{pattern:/(^|\s)!\[(={0,6})\[\s[\s\S]*?\]\2\](?=\s|$)/,lookbehind:!0,greedy:!0,inside:t}],number:[{pattern:/(^|\s)[+-]?\d+(?=\s|$)/,lookbehind:!0},{pattern:/(^|\s)[+-]?0(?:b[01]+|o[0-7]+|d\d+|x[\dA-F]+)(?=\s|$)/i,lookbehind:!0},{pattern:/(^|\s)[+-]?\d+\/\d+\.?(?=\s|$)/,lookbehind:!0},{pattern:/(^|\s)\+?\d+\+\d+\/\d+(?=\s|$)/,lookbehind:!0},{pattern:/(^|\s)-\d+-\d+\/\d+(?=\s|$)/,lookbehind:!0},{pattern:/(^|\s)[+-]?(?:\d*\.\d+|\d+\.\d*|\d+)(?:e[+-]?\d+)?(?=\s|$)/i,lookbehind:!0},{pattern:/(^|\s)NAN:\s+[\da-fA-F]+(?=\s|$)/,lookbehind:!0},{pattern:/(^|\s)[+-]?0(?:b1\.[01]*|o1\.[0-7]*|d1\.\d*|x1\.[\dA-F]*)p\d+(?=\s|$)/i,lookbehind:!0}],regexp:{pattern:/(^|\s)R\/\s+(?:\\\S|[^\\/])*\/(?:[idmsr]*|[idmsr]+-[idmsr]+)(?=\s|$)/,lookbehind:!0,alias:"number",inside:{variable:/\\\S/,keyword:/[+?*\[\]^$(){}.|]/,operator:{pattern:/(\/)[idmsr]+(?:-[idmsr]+)?/,lookbehind:!0}}},boolean:{pattern:/(^|\s)[tf](?=\s|$)/,lookbehind:!0},"custom-string":{pattern:/(^|\s)[A-Z0-9\-]+"\s(?:\\\S|[^"\\])*"/,lookbehind:!0,greedy:!0,alias:"string",inside:{number:/\\\S|%\w|\//}},"multiline-string":[{pattern:/(^|\s)STRING:\s+\S+(?:\n|\r\n).*(?:\n|\r\n)\s*;(?=\s|$)/,lookbehind:!0,greedy:!0,alias:"string",inside:{number:s.number,"semicolon-or-setlocal":{pattern:/((?:\n|\r\n)\s*);(?=\s|$)/,lookbehind:!0,alias:"function"}}},{pattern:/(^|\s)HEREDOC:\s+\S+(?:\n|\r\n).*(?:\n|\r\n)\s*\S+(?=\s|$)/,lookbehind:!0,greedy:!0,alias:"string",inside:s},{pattern:/(^|\s)\[(={0,6})\[\s[\s\S]*?\]\2\](?=\s|$)/,lookbehind:!0,greedy:!0,alias:"string",inside:s}],"special-using":{pattern:/(^|\s)USING:(?:\s\S+)*(?=\s+;(?:\s|$))/,lookbehind:!0,alias:"function",inside:{string:{pattern:/(\s)[^:\s]+/,lookbehind:!0}}},"stack-effect-delimiter":[{pattern:/(^|\s)(?:call|execute|eval)?\((?=\s)/,lookbehind:!0,alias:"operator"},{pattern:/(\s)--(?=\s)/,lookbehind:!0,alias:"operator"},{pattern:/(\s)\)(?=\s|$)/,lookbehind:!0,alias:"operator"}],combinators:{pattern:null,lookbehind:!0,alias:"keyword"},"kernel-builtin":{pattern:null,lookbehind:!0,alias:"variable"},"sequences-builtin":{pattern:null,lookbehind:!0,alias:"variable"},"math-builtin":{pattern:null,lookbehind:!0,alias:"variable"},"constructor-word":{pattern:/(^|\s)<(?!=+>|-+>)\S+>(?=\s|$)/,lookbehind:!0,alias:"keyword"},"other-builtin-syntax":{pattern:null,lookbehind:!0,alias:"operator"},"conventionally-named-word":{pattern:/(^|\s)(?!")(?:(?:set|change|with|new)-\S+|\$\S+|>[^>\s]+|[^:>\s]+>|[^>\s]+>[^>\s]+|\+[^+\s]+\+|[^?\s]+\?|\?[^?\s]+|[^>\s]+>>|>>[^>\s]+|[^<\s]+<<|\([^()\s]+\)|[^!\s]+!|[^*\s]\S*\*|[^.\s]\S*\.)(?=\s|$)/,lookbehind:!0,alias:"keyword"},"colon-syntax":{pattern:/(^|\s)(?:[A-Z0-9\-]+#?)?:{1,2}\s+(?:;\S+|(?!;)\S+)(?=\s|$)/,lookbehind:!0,greedy:!0,alias:"function"},"semicolon-or-setlocal":{pattern:/(\s)(?:;|:>)(?=\s|$)/,lookbehind:!0,alias:"function"},"curly-brace-literal-delimiter":[{pattern:/(^|\s)[a-z]*\{(?=\s)/i,lookbehind:!0,alias:"operator"},{pattern:/(\s)\}(?=\s|$)/,lookbehind:!0,alias:"operator"}],"quotation-delimiter":[{pattern:/(^|\s)\[(?=\s)/,lookbehind:!0,alias:"operator"},{pattern:/(\s)\](?=\s|$)/,lookbehind:!0,alias:"operator"}],"normal-word":{pattern:/(^|\s)[^"\s]\S*(?=\s|$)/,lookbehind:!0},string:{pattern:/"(?:\\\S|[^"\\])*"/,greedy:!0,inside:s}},n=function(e){return(e+"").replace(/([.?*+\^$\[\]\\(){}|\-])/g,"\\$1")},r=function(e){return new RegExp("(^|\\s)(?:"+e.map(n).join("|")+")(?=\\s|$)")},a={"kernel-builtin":["or","2nipd","4drop","tuck","wrapper","nip","wrapper?","callstack>array","die","dupd","callstack","callstack?","3dup","hashcode","pick","4nip","build",">boolean","nipd","clone","5nip","eq?","?","=","swapd","2over","clear","2dup","get-retainstack","not","tuple?","dup","3nipd","call","-rotd","object","drop","assert=","assert?","-rot","execute","boa","get-callstack","curried?","3drop","pickd","overd","over","roll","3nip","swap","and","2nip","rotd","throw","(clone)","hashcode*","spin","reach","4dup","equal?","get-datastack","assert","2drop","","boolean?","identity-hashcode","identity-tuple?","null","composed?","new","5drop","rot","-roll","xor","identity-tuple","boolean"],"other-builtin-syntax":["=======","recursive","flushable",">>","<<<<<<","M\\","B","PRIVATE>","\\","======","final","inline","delimiter","deprecated",">>>>>","<<<<<<<","parse-complex","malformed-complex","read-only",">>>>>>>","call-next-method","<<","foldable","$","$[","${"],"sequences-builtin":["member-eq?","mismatch","append","assert-sequence=","longer","repetition","clone-like","3sequence","assert-sequence?","last-index-from","reversed","index-from","cut*","pad-tail","join-as","remove-eq!","concat-as","but-last","snip","nths","nth","sequence","longest","slice?","","remove-nth","tail-slice","empty?","tail*","member?","virtual-sequence?","set-length","drop-prefix","iota","unclip","bounds-error?","unclip-last-slice","non-negative-integer-expected","non-negative-integer-expected?","midpoint@","longer?","?set-nth","?first","rest-slice","prepend-as","prepend","fourth","sift","subseq-start","new-sequence","?last","like","first4","1sequence","reverse","slice","virtual@","repetition?","set-last","index","4sequence","max-length","set-second","immutable-sequence","first2","first3","supremum","unclip-slice","suffix!","insert-nth","tail","3append","short","suffix","concat","flip","immutable?","reverse!","2sequence","sum","delete-all","indices","snip-slice","","check-slice","sequence?","head","append-as","halves","sequence=","collapse-slice","?second","slice-error?","product","bounds-check?","bounds-check","immutable","virtual-exemplar","harvest","remove","pad-head","last","set-fourth","cartesian-product","remove-eq","shorten","shorter","reversed?","shorter?","shortest","head-slice","pop*","tail-slice*","but-last-slice","iota?","append!","cut-slice","new-resizable","head-slice*","sequence-hashcode","pop","set-nth","?nth","second","join","immutable-sequence?","","3append-as","virtual-sequence","subseq?","remove-nth!","length","last-index","lengthen","assert-sequence","copy","move","third","first","tail?","set-first","prefix","bounds-error","","exchange","surround","cut","min-length","set-third","push-all","head?","subseq-start-from","delete-slice","rest","sum-lengths","head*","infimum","remove!","glue","slice-error","subseq","push","replace-slice","subseq-as","unclip-last"],"math-builtin":["number=","next-power-of-2","?1+","fp-special?","imaginary-part","float>bits","number?","fp-infinity?","bignum?","fp-snan?","denominator","gcd","*","+","fp-bitwise=","-","u>=","/",">=","bitand","power-of-2?","log2-expects-positive","neg?","<","log2",">","integer?","number","bits>double","2/","zero?","bits>float","float?","shift","ratio?","rect>","even?","ratio","fp-sign","bitnot",">fixnum","complex?","/i","integer>fixnum","/f","sgn",">bignum","next-float","u<","u>","mod","recip","rational",">float","2^","integer","fixnum?","neg","fixnum","sq","bignum",">rect","bit?","fp-qnan?","simple-gcd","complex","","real",">fraction","double>bits","bitor","rem","fp-nan-payload","real-part","log2-expects-positive?","prev-float","align","unordered?","float","fp-nan?","abs","bitxor","integer>fixnum-strict","u<=","odd?","<=","/mod",">integer","real?","rational?","numerator"]};Object.keys(a).forEach(function(e){i[e].pattern=r(a[e])});i.combinators.pattern=r(["2bi","while","2tri","bi*","4dip","both?","same?","tri@","curry","prepose","3bi","?if","tri*","2keep","3keep","curried","2keepd","when","2bi*","2tri*","4keep","bi@","keepdd","do","unless*","tri-curry","if*","loop","bi-curry*","when*","2bi@","2tri@","with","2with","either?","bi","until","3dip","3curry","tri-curry*","tri-curry@","bi-curry","keepd","compose","2dip","if","3tri","unless","tuple","keep","2curry","tri","most","while*","dip","composed","bi-curry@","find-last-from","trim-head-slice","map-as","each-from","none?","trim-tail","partition","if-empty","accumulate*","reject!","find-from","accumulate-as","collector-for-as","reject","map","map-sum","accumulate!","2each-from","follow","supremum-by","map!","unless-empty","collector","padding","reduce-index","replicate-as","infimum-by","trim-tail-slice","count","find-index","filter","accumulate*!","reject-as","map-integers","map-find","reduce","selector","interleave","2map","filter-as","binary-reduce","map-index-as","find","produce","filter!","replicate","cartesian-map","cartesian-each","find-index-from","map-find-last","3map-as","3map","find-last","selector-as","2map-as","2map-reduce","accumulate","each","each-index","accumulate*-as","when-empty","all?","collector-as","push-either","new-like","collector-for","2selector","push-if","2all?","map-reduce","3each","any?","trim-slice","2reduce","change-nth","produce-as","2each","trim","trim-head","cartesian-find","map-index","if-zero","each-integer","unless-zero","(find-integer)","when-zero","find-last-integer","(all-integers?)","times","(each-integer)","find-integer","all-integers?","unless-negative","if-positive","when-positive","when-negative","unless-positive","if-negative","case","2cleave","cond>quot","case>quot","3cleave","wrong-values","to-fixed-point","alist>quot","cond","cleave","call-effect","recursive-hashcode","spread","deep-spread>quot","2||","0||","n||","0&&","2&&","3||","1||","1&&","n&&","3&&","smart-unless*","keep-inputs","reduce-outputs","smart-when*","cleave>array","smart-with","smart-apply","smart-if","inputs/outputs","output>sequence-n","map-outputs","map-reduce-outputs","dropping","output>array","smart-map-reduce","smart-2map-reduce","output>array-n","nullary","inputsequence"]),e.languages.factor=i}(Prism); +Prism.languages["firestore-security-rules"]=Prism.languages.extend("clike",{comment:/\/\/.*/,keyword:/\b(?:allow|function|if|match|null|return|rules_version|service)\b/,operator:/&&|\|\||[<>!=]=?|[-+*/%=]|\b(?:in|is)\b/}),delete Prism.languages["firestore-security-rules"]["class-name"],Prism.languages.insertBefore("firestore-security-rules","keyword",{path:{pattern:/(^|[\s(),])(?:\/(?:[\w\xA0-\uFFFF]+|\{[\w\xA0-\uFFFF]+(?:=\*\*)?\}|\$\([\w\xA0-\uFFFF.]+\)))+/,lookbehind:!0,greedy:!0,inside:{variable:{pattern:/\{[\w\xA0-\uFFFF]+(?:=\*\*)?\}|\$\([\w\xA0-\uFFFF.]+\)/,inside:{operator:/=/,keyword:/\*\*/,punctuation:/[.$(){}]/}},punctuation:/[/]/}},method:{pattern:/(\ballow\s+)[a-z]+(?:\s*,\s*[a-z]+)*(?=\s*[:;])/,lookbehind:!0,alias:"builtin",inside:{punctuation:/,/}}}); +!function(a){a.languages.flow=a.languages.extend("javascript",{}),a.languages.insertBefore("flow","keyword",{type:[{pattern:/\b(?:[Nn]umber|[Ss]tring|[Bb]oolean|Function|any|mixed|null|void)\b/,alias:"tag"}]}),a.languages.flow["function-variable"].pattern=/[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*=\s*(?:function\b|(?:\([^()]*\)(?:\s*:\s*\w+)?|[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*)\s*=>))/i,delete a.languages.flow.parameter,a.languages.insertBefore("flow","operator",{"flow-punctuation":{pattern:/\{\||\|\}/,alias:"punctuation"}}),Array.isArray(a.languages.flow.keyword)||(a.languages.flow.keyword=[a.languages.flow.keyword]),a.languages.flow.keyword.unshift({pattern:/(^|[^$]\b)(?:type|opaque|declare|Class)\b(?!\$)/,lookbehind:!0},{pattern:/(^|[^$]\B)\$(?:await|Diff|Exact|Keys|ObjMap|PropertyType|Shape|Record|Supertype|Subtype|Enum)\b(?!\$)/,lookbehind:!0})}(Prism); +Prism.languages.fortran={"quoted-number":{pattern:/[BOZ](['"])[A-F0-9]+\1/i,alias:"number"},string:{pattern:/(?:\w+_)?(['"])(?:\1\1|&(?:\r\n?|\n)(?:\s*!.+(?:\r\n?|\n))?|(?!\1).)*(?:\1|&)/,inside:{comment:{pattern:/(&(?:\r\n?|\n)\s*)!.*/,lookbehind:!0}}},comment:{pattern:/!.*/,greedy:!0},boolean:/\.(?:TRUE|FALSE)\.(?:_\w+)?/i,number:/(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[ED][+-]?\d+)?(?:_\w+)?/i,keyword:[/\b(?:INTEGER|REAL|DOUBLE ?PRECISION|COMPLEX|CHARACTER|LOGICAL)\b/i,/\b(?:END ?)?(?:BLOCK ?DATA|DO|FILE|FORALL|FUNCTION|IF|INTERFACE|MODULE(?! PROCEDURE)|PROGRAM|SELECT|SUBROUTINE|TYPE|WHERE)\b/i,/\b(?:ALLOCATABLE|ALLOCATE|BACKSPACE|CALL|CASE|CLOSE|COMMON|CONTAINS|CONTINUE|CYCLE|DATA|DEALLOCATE|DIMENSION|DO|END|EQUIVALENCE|EXIT|EXTERNAL|FORMAT|GO ?TO|IMPLICIT(?: NONE)?|INQUIRE|INTENT|INTRINSIC|MODULE PROCEDURE|NAMELIST|NULLIFY|OPEN|OPTIONAL|PARAMETER|POINTER|PRINT|PRIVATE|PUBLIC|READ|RETURN|REWIND|SAVE|SELECT|STOP|TARGET|WHILE|WRITE)\b/i,/\b(?:ASSIGNMENT|DEFAULT|ELEMENTAL|ELSE|ELSEWHERE|ELSEIF|ENTRY|IN|INCLUDE|INOUT|KIND|NULL|ONLY|OPERATOR|OUT|PURE|RECURSIVE|RESULT|SEQUENCE|STAT|THEN|USE)\b/i],operator:[/\*\*|\/\/|=>|[=\/]=|[<>]=?|::|[+\-*=%]|\.(?:EQ|NE|LT|LE|GT|GE|NOT|AND|OR|EQV|NEQV)\.|\.[A-Z]+\./i,{pattern:/(^|(?!\().)\/(?!\))/,lookbehind:!0}],punctuation:/\(\/|\/\)|[(),;:&]/}; +!function(n){for(var i="[^<()\"']|\\((?:)*\\)|<(?!#--)|<#--(?:[^-]|-(?!->))*--\x3e|\"(?:[^\\\\\"]|\\\\.)*\"|'(?:[^\\\\']|\\\\.)*'",e=0;e<2;e++)i=i.replace(//g,function(){return i});i=i.replace(//g,"[^\\s\\S]");var t={comment:/<#--[\s\S]*?-->/,string:[{pattern:/\br("|')(?:(?!\1)[^\\]|\\.)*\1/,greedy:!0},{pattern:RegExp("(\"|')(?:(?!\\1|\\$\\{)[^\\\\]|\\\\.|\\$\\{(?:)*?\\})*\\1".replace(//g,function(){return i})),greedy:!0,inside:{interpolation:{pattern:RegExp("((?:^|[^\\\\])(?:\\\\\\\\)*)\\$\\{(?:)*?\\}".replace(//g,function(){return i})),lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:null}}}}],keyword:/\b(?:as)\b/,boolean:/\b(?:true|false)\b/,"builtin-function":{pattern:/((?:^|[^?])\?\s*)\w+/,lookbehind:!0,alias:"function"},function:/\w+(?=\s*\()/,number:/\d+(?:\.\d+)?/,operator:/\.\.[<*!]?|->|--|\+\+|&&|\|\||\?{1,2}|[-+*/%!=<>]=?|\b(?:gt|gte|lt|lte)\b/,punctuation:/[,;.:()[\]{}]/};t.string[1].inside.interpolation.inside.rest=t,n.languages.ftl={"ftl-comment":{pattern:/^<#--[\s\S]*/,alias:"comment"},"ftl-directive":{pattern:/^<[\s\S]+>$/,inside:{directive:{pattern:/(^<\/?)[#@][a-z]\w*/i,lookbehind:!0,alias:"keyword"},punctuation:/^<\/?|\/?>$/,content:{pattern:/[\s\S]*\S[\s\S]*/,alias:"ftl",inside:t}}},"ftl-interpolation":{pattern:/^\$\{[\s\S]*\}$/,inside:{punctuation:/^\$\{|\}$/,content:{pattern:/[\s\S]*\S[\s\S]*/,alias:"ftl",inside:t}}}},n.hooks.add("before-tokenize",function(e){var t=RegExp("<#--[^]*?--\x3e|)*?>|\\$\\{(?:)*?\\}".replace(//g,function(){return i}),"gi");n.languages["markup-templating"].buildPlaceholders(e,"ftl",t)}),n.hooks.add("after-tokenize",function(e){n.languages["markup-templating"].tokenizePlaceholders(e,"ftl")})}(Prism); +Prism.languages.gamemakerlanguage=Prism.languages.gml=Prism.languages.extend("clike",{number:/(?:\b0x[\da-f]+|(?:\b\d+\.?\d*|\B\.\d+)(?:e[+-]?\d+)?)[ulf]*/i,keyword:/\b(?:if|else|switch|case|default|break|for|repeat|while|do|until|continue|exit|return|globalvar|var|enum)\b/,operator:/[-+%=]=?|!=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]|\b(?:or|and|not|with|at|xor|not)\b/,constant:/\b(?:self|other|all|noone|global|local|undefined|pointer_(?:invalid|null)|action_(?:stop|restart|continue|reverse)|pi|GM_build_date|GM_version|timezone_(?:local|utc)|gamespeed_(?:fps|microseconds)|ev_(?:create|destroy|step|alarm|keyboard|mouse|collision|other|draw|draw_(?:begin|end|pre|post)|keypress|keyrelease|trigger|(?:left|right|middle|no)_button|(?:left|right|middle)_press|(?:left|right|middle)_release|mouse_(?:enter|leave|wheel_up|wheel_down)|global_(?:left|right|middle)_button|global_(?:left|right|middle)_press|global_(?:left|right|middle)_release|joystick(?:1|2)_(?:left|right|up|down|button1|button2|button3|button4|button5|button6|button7|button8)|outside|boundary|game_start|game_end|room_start|room_end|no_more_lives|animation_end|end_of_path|no_more_health|user\d|step_(?:normal|begin|end)|gui|gui_begin|gui_end)|vk_(?:nokey|anykey|enter|return|shift|control|alt|escape|space|backspace|tab|pause|printscreen|left|right|up|down|home|end|delete|insert|pageup|pagedown|f\d|numpad\d|divide|multiply|subtract|add|decimal|lshift|lcontrol|lalt|rshift|rcontrol|ralt)|mb_(?:any|none|left|right|middle)|c_(?:aqua|black|blue|dkgray|fuchsia|gray|green|lime|ltgray|maroon|navy|olive|purple|red|silver|teal|white|yellow|orange)|fa_(?:left|center|right|top|middle|bottom|readonly|hidden|sysfile|volumeid|directory|archive)|pr_(?:pointlist|linelist|linestrip|trianglelist|trianglestrip|trianglefan)|bm_(?:complex|normal|add|max|subtract|zero|one|src_colour|inv_src_colour|src_color|inv_src_color|src_alpha|inv_src_alpha|dest_alpha|inv_dest_alpha|dest_colour|inv_dest_colour|dest_color|inv_dest_color|src_alpha_sat)|audio_(?:falloff_(?:none|inverse_distance|inverse_distance_clamped|linear_distance|linear_distance_clamped|exponent_distance|exponent_distance_clamped)|old_system|new_system|mono|stereo|3d)|cr_(?:default|none|arrow|cross|beam|size_nesw|size_ns|size_nwse|size_we|uparrow|hourglass|drag|appstart|handpoint|size_all)|spritespeed_framesper(?:second|gameframe)|asset_(?:object|unknown|sprite|sound|room|path|script|font|timeline|tiles|shader)|ds_type_(?:map|list|stack|queue|grid|priority)|ef_(?:explosion|ring|ellipse|firework|smoke|smokeup|star|spark|flare|cloud|rain|snow)|pt_shape_(?:pixel|disk|square|line|star|circle|ring|sphere|flare|spark|explosion|cloud|smoke|snow)|ps_(?:distr|shape)_(?:linear|gaussian|invgaussian|rectangle|ellipse|diamond|line)|ty_(?:real|string)|dll_(?:cdel|cdecl|stdcall)|matrix_(?:view|projection|world)|os_(?:win32|windows|macosx|ios|android|linux|unknown|winphone|win8native|psvita|ps4|xboxone|ps3|uwp)|browser_(?:not_a_browser|unknown|ie|firefox|chrome|safari|safari_mobile|opera|tizen|windows_store|ie_mobile)|device_ios_(?:unknown|iphone|iphone_retina|ipad|ipad_retina|iphone5|iphone6|iphone6plus)|device_(?:emulator|tablet)|display_(?:landscape|landscape_flipped|portrait|portrait_flipped)|of_challenge_(?:win|lose|tie)|leaderboard_type_(?:number|time_mins_secs)|cmpfunc_(?:never|less|equal|lessequal|greater|notequal|greaterequal|always)|cull_(?:noculling|clockwise|counterclockwise)|lighttype_(?:dir|point)|iap_(?:ev_storeload|ev_product|ev_purchase|ev_consume|ev_restore|storeload_ok|storeload_failed|status_uninitialised|status_unavailable|status_loading|status_available|status_processing|status_restoring|failed|unavailable|available|purchased|canceled|refunded)|fb_login_(?:default|fallback_to_webview|no_fallback_to_webview|forcing_webview|use_system_account|forcing_safari)|phy_joint_(?:anchor_1_x|anchor_1_y|anchor_2_x|anchor_2_y|reaction_force_x|reaction_force_y|reaction_torque|motor_speed|angle|motor_torque|max_motor_torque|translation|speed|motor_force|max_motor_force|length_1|length_2|damping_ratio|frequency|lower_angle_limit|upper_angle_limit|angle_limits|max_length|max_torque|max_force)|phy_debug_render_(?:aabb|collision_pairs|coms|core_shapes|joints|obb|shapes)|phy_particle_flag_(?:water|zombie|wall|spring|elastic|viscous|powder|tensile|colourmixing|colormixing)|phy_particle_group_flag_(?:solid|rigid)|phy_particle_data_flag_(?:typeflags|position|velocity|colour|color|category)|achievement_(?:our_info|friends_info|leaderboard_info|info|filter_(?:all_players|friends_only|favorites_only)|type_challenge|type_score_challenge|pic_loaded|show_(?:ui|profile|leaderboard|achievement|bank|friend_picker|purchase_prompt))|network_(?:socket_(?:tcp|udp|bluetooth)|type_(?:connect|disconnect|data|non_blocking_connect)|config_(?:connect_timeout|use_non_blocking_socket|enable_reliable_udp|disable_reliable_udp))|buffer_(?:fixed|grow|wrap|fast|vbuffer|network|u8|s8|u16|s16|u32|s32|u64|f16|f32|f64|bool|text|string|seek_start|seek_relative|seek_end|generalerror|outofspace|outofbounds|invalidtype)|gp_(?:face\d|shoulderl|shoulderr|shoulderlb|shoulderrb|select|start|stickl|stickr|padu|padd|padl|padr|axislh|axislv|axisrh|axisrv)|ov_(?:friends|community|players|settings|gamegroup|achievements)|lb_sort_(?:none|ascending|descending)|lb_disp_(?:none|numeric|time_sec|time_ms)|ugc_(?:result_success|filetype_(?:community|microtrans)|visibility_(?:public|friends_only|private)|query_RankedBy(?:Vote|PublicationDate|Trend|NumTimesReported|TotalVotesAsc|VotesUp|TextSearch)|query_(?:AcceptedForGameRankedByAcceptanceDate|FavoritedByFriendsRankedByPublicationDate|CreatedByFriendsRankedByPublicationDate|NotYetRated)|sortorder_CreationOrder(?:Desc|Asc)|sortorder_(?:TitleAsc|LastUpdatedDesc|SubscriptionDateDesc|VoteScoreDesc|ForModeration)|list_(?:Published|VotedOn|VotedUp|VotedDown|WillVoteLater|Favorited|Subscribed|UsedOrPlayed|Followed)|match_(?:Items|Items_Mtx|Items_ReadyToUse|Collections|Artwork|Videos|Screenshots|AllGuides|WebGuides|IntegratedGuides|UsableInGame|ControllerBindings))|vertex_usage_(?:position|colour|color|normal|texcoord|textcoord|blendweight|blendindices|psize|tangent|binormal|fog|depth|sample)|vertex_type_(?:float\d|colour|color|ubyte4)|layerelementtype_(?:undefined|background|instance|oldtilemap|sprite|tilemap|particlesystem|tile)|tile_(?:rotate|flip|mirror|index_mask)|input_type|se_(?:chorus|compressor|echo|equalizer|flanger|gargle|none|reverb)|text_type|(?:obj|scr|spr|rm)\w+)\b/,variable:/\b(?:x|y|(?:x|y)(?:previous|start)|(?:h|v)speed|direction|speed|friction|gravity|gravity_direction|path_(?:index|position|positionprevious|speed|scale|orientation|endaction)|object_index|id|solid|persistent|mask_index|instance_(?:count|id)|alarm|timeline_(?:index|position|speed|running|loop)|visible|sprite_(?:index|width|height|xoffset|yoffset)|image_(?:number|index|speed|depth|xscale|yscale|angle|alpha|blend)|bbox_(?:left|right|top|bottom)|layer|phy_(?:rotation|(?:position|linear_velocity|speed|com|collision|col_normal)_(?:x|y)|angular_(?:velocity|damping)|position_(?:x|y)previous|speed|linear_damping|bullet|fixed_rotation|active|mass|inertia|dynamic|kinematic|sleeping|collision_points)|working_directory|webgl_enabled|view_(?:(?:y|x|w|h)view|(?:y|x|w|h)port|(?:v|h)(?:speed|border)|visible|surface_id|object|enabled|current|angle)|undefined|transition_(?:steps|kind|color)|temp_directory|show_(?:score|lives|health)|secure_mode|score|room_(?:width|speed|persistent|last|height|first|caption)|room|pointer_(?:null|invalid)|os_(?:version|type|device|browser)|mouse_(?:y|x|lastbutton|button)|lives|keyboard_(?:string|lastkey|lastchar|key)|iap_data|health|gamemaker_(?:version|registered|pro)|game_(?:save|project|display)_(?:id|name)|fps_real|fps|event_(?:type|object|number|action)|error_(?:occurred|last)|display_aa|delta_time|debug_mode|cursor_sprite|current_(?:year|weekday|time|second|month|minute|hour|day)|caption_(?:score|lives|health)|browser_(?:width|height)|background_(?:yscale|y|xscale|x|width|vtiled|vspeed|visible|showcolour|showcolor|index|htiled|hspeed|height|foreground|colour|color|blend|alpha)|async_load|application_surface|argument(?:_relitive|_count|\d)|argument|global|local|self|other)\b/}); +Prism.languages.gcode={comment:/;.*|\B\(.*?\)\B/,string:{pattern:/"(?:""|[^"])*"/,greedy:!0},keyword:/\b[GM]\d+(?:\.\d+)?\b/,property:/\b[A-Z]/,checksum:{pattern:/\*\d+/,alias:"punctuation"},punctuation:/:/}; +Prism.languages.gdscript={comment:/#.*/,string:{pattern:/@?(?:("|')(?:(?!\1)[^\n\\]|\\[\s\S])*\1(?!"|')|"""(?:[^\\]|\\[\s\S])*?""")/,greedy:!0},"class-name":{pattern:/(^(?:class_name|class|extends)[ \t]+|^export\([ \t]*|\bas[ \t]+|(?:\b(?:const|var)[ \t]|[,(])[ \t]*\w+[ \t]*:[ \t]*|->[ \t]*)[a-zA-Z_]\w*/m,lookbehind:!0},keyword:/\b(?:and|as|assert|break|breakpoint|class|class_name|const|continue|elif|else|enum|export|extends|for|func|if|in|is|master|mastersync|match|not|null|onready|or|pass|preload|puppet|puppetsync|remote|remotesync|return|self|setget|signal|static|tool|var|while|yield)\b/,function:/[a-z_]\w*(?=[ \t]*\()/i,variable:/\$\w+/,number:[/\b0b[01_]+\b|\b0x[\da-fA-F_]+\b|(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.[\d_]+)(?:e[+-]?[\d_]+)?\b/,/\b(?:INF|NAN|PI|TAU)\b/],constant:/\b[A-Z][A-Z_\d]*\b/,boolean:/\b(?:false|true)\b/,operator:/->|:=|&&|\|\||<<|>>|[-+*/%&|!<>=]=?|[~^]/,punctuation:/[.:,;()[\]{}]/}; +Prism.languages.gedcom={"line-value":{pattern:/(^\s*\d+ +(?:@\w[\w!"$%&'()*+,\-./:;<=>?[\\\]^`{|}~\x80-\xfe #]*@ +)?\w+ +).+/m,lookbehind:!0,inside:{pointer:{pattern:/^@\w[\w!"$%&'()*+,\-./:;<=>?[\\\]^`{|}~\x80-\xfe #]*@$/,alias:"variable"}}},tag:{pattern:/(^\s*\d+ +(?:@\w[\w!"$%&'()*+,\-./:;<=>?[\\\]^`{|}~\x80-\xfe #]*@ +)?)\w+/m,lookbehind:!0,alias:"string"},level:{pattern:/(^\s*)\d+/m,lookbehind:!0,alias:"number"},pointer:{pattern:/@\w[\w!"$%&'()*+,\-./:;<=>?[\\\]^`{|}~\x80-\xfe #]*@/,alias:"variable"}}; +!function(a){var n="(?:\r?\n|\r)[ \t]*\\|.+\\|.*";Prism.languages.gherkin={pystring:{pattern:/("""|''')[\s\S]+?\1/,alias:"string"},comment:{pattern:/(^[ \t]*)#.*/m,lookbehind:!0},tag:{pattern:/(^[ \t]*)@\S*/m,lookbehind:!0},feature:{pattern:/((?:^|\r?\n|\r)[ \t]*)(?:Ability|Ahoy matey!|Arwedd|Aspekt|Besigheid Behoefte|Business Need|Caracteristica|Característica|Egenskab|Egenskap|Eiginleiki|Feature|Fīča|Fitur|Fonctionnalité|Fonksyonalite|Funcionalidade|Funcionalitat|Functionalitate|Funcţionalitate|Funcționalitate|Functionaliteit|Fungsi|Funkcia|Funkcija|Funkcionalitāte|Funkcionalnost|Funkcja|Funksie|Funktionalität|Funktionalitéit|Funzionalità|Hwaet|Hwæt|Jellemző|Karakteristik|laH|Lastnost|Mak|Mogucnost|Mogućnost|Moznosti|Možnosti|OH HAI|Omadus|Ominaisuus|Osobina|Özellik|perbogh|poQbogh malja'|Potrzeba biznesowa|Požadavek|Požiadavka|Pretty much|Qap|Qu'meH 'ut|Savybė|Tính năng|Trajto|Vermoë|Vlastnosť|Właściwość|Značilnost|Δυνατότητα|Λειτουργία|Могућност|Мөмкинлек|Особина|Свойство|Үзенчәлеклелек|Функционал|Функционалност|Функция|Функціонал|תכונה|خاصية|خصوصیت|صلاحیت|کاروبار کی ضرورت|وِیژگی|रूप लेख|ਖਾਸੀਅਤ|ਨਕਸ਼ ਨੁਹਾਰ|ਮੁਹਾਂਦਰਾ|గుణము|ಹೆಚ್ಚಳ|ความต้องการทางธุรกิจ|ความสามารถ|โครงหลัก|기능|フィーチャ|功能|機能):(?:[^:]+(?:\r?\n|\r|$))*/,lookbehind:!0,inside:{important:{pattern:/(:)[^\r\n]+/,lookbehind:!0},keyword:/[^:\r\n]+:/}},scenario:{pattern:/(^[ \t]*)(?:Abstract Scenario|Abstrakt Scenario|Achtergrond|Aer|Ær|Agtergrond|All y'all|Antecedentes|Antecedents|Atburðarás|Atburðarásir|Awww, look mate|B4|Background|Baggrund|Bakgrund|Bakgrunn|Bakgrunnur|Beispiele|Beispiller|Bối cảnh|Cefndir|Cenario|Cenário|Cenario de Fundo|Cenário de Fundo|Cenarios|Cenários|Contesto|Context|Contexte|Contexto|Conto|Contoh|Contone|Dæmi|Dasar|Dead men tell no tales|Delineacao do Cenario|Delineação do Cenário|Dis is what went down|Dữ liệu|Dyagram senaryo|Dyagram Senaryo|Egzanp|Ejemplos|Eksempler|Ekzemploj|Enghreifftiau|Esbozo do escenario|Escenari|Escenario|Esempi|Esquema de l'escenari|Esquema del escenario|Esquema do Cenario|Esquema do Cenário|Examples|EXAMPLZ|Exempel|Exemple|Exemples|Exemplos|First off|Fono|Forgatókönyv|Forgatókönyv vázlat|Fundo|Geçmiş|ghantoH|Grundlage|Hannergrond|Háttér|Heave to|Istorik|Juhtumid|Keadaan|Khung kịch bản|Khung tình huống|Kịch bản|Koncept|Konsep skenario|Kontèks|Kontekst|Kontekstas|Konteksts|Kontext|Konturo de la scenaro|Latar Belakang|lut|lut chovnatlh|lutmey|Lýsing Atburðarásar|Lýsing Dæma|Menggariskan Senario|MISHUN|MISHUN SRSLY|mo'|Náčrt Scenára|Náčrt Scénáře|Náčrt Scenáru|Oris scenarija|Örnekler|Osnova|Osnova Scenára|Osnova scénáře|Osnutek|Ozadje|Paraugs|Pavyzdžiai|Példák|Piemēri|Plan du scénario|Plan du Scénario|Plan senaryo|Plan Senaryo|Plang vum Szenario|Pozadí|Pozadie|Pozadina|Príklady|Příklady|Primer|Primeri|Primjeri|Przykłady|Raamstsenaarium|Reckon it's like|Rerefons|Scenár|Scénář|Scenarie|Scenarij|Scenarijai|Scenarijaus šablonas|Scenariji|Scenārijs|Scenārijs pēc parauga|Scenarijus|Scenario|Scénario|Scenario Amlinellol|Scenario Outline|Scenario Template|Scenariomal|Scenariomall|Scenarios|Scenariu|Scenariusz|Scenaro|Schema dello scenario|Se ðe|Se the|Se þe|Senario|Senaryo|Senaryo deskripsyon|Senaryo Deskripsyon|Senaryo taslağı|Shiver me timbers|Situācija|Situai|Situasie|Situasie Uiteensetting|Skenario|Skenario konsep|Skica|Structura scenariu|Structură scenariu|Struktura scenarija|Stsenaarium|Swa|Swa hwaer swa|Swa hwær swa|Szablon scenariusza|Szenario|Szenariogrundriss|Tapaukset|Tapaus|Tapausaihio|Taust|Tausta|Template Keadaan|Template Senario|Template Situai|The thing of it is|Tình huống|Variantai|Voorbeelde|Voorbeelden|Wharrimean is|Yo\-ho\-ho|You'll wanna|Założenia|Παραδείγματα|Περιγραφή Σεναρίου|Σενάρια|Σενάριο|Υπόβαθρο|Кереш|Контекст|Концепт|Мисаллар|Мисоллар|Основа|Передумова|Позадина|Предистория|Предыстория|Приклади|Пример|Примери|Примеры|Рамка на сценарий|Скица|Структура сценарија|Структура сценария|Структура сценарію|Сценарий|Сценарий структураси|Сценарийның төзелеше|Сценарији|Сценарио|Сценарій|Тарих|Үрнәкләр|דוגמאות|רקע|תבנית תרחיש|תרחיש|الخلفية|الگوی سناریو|امثلة|پس منظر|زمینه|سناریو|سيناريو|سيناريو مخطط|مثالیں|منظر نامے کا خاکہ|منظرنامہ|نمونه ها|उदाहरण|परिदृश्य|परिदृश्य रूपरेखा|पृष्ठभूमि|ਉਦਾਹਰਨਾਂ|ਪਟਕਥਾ|ਪਟਕਥਾ ਢਾਂਚਾ|ਪਟਕਥਾ ਰੂਪ ਰੇਖਾ|ਪਿਛੋਕੜ|ఉదాహరణలు|కథనం|నేపథ్యం|సన్నివేశం|ಉದಾಹರಣೆಗಳು|ಕಥಾಸಾರಾಂಶ|ವಿವರಣೆ|ಹಿನ್ನೆಲೆ|โครงสร้างของเหตุการณ์|ชุดของตัวอย่าง|ชุดของเหตุการณ์|แนวคิด|สรุปเหตุการณ์|เหตุการณ์|배경|시나리오|시나리오 개요|예|サンプル|シナリオ|シナリオアウトライン|シナリオテンプレ|シナリオテンプレート|テンプレ|例|例子|剧本|剧本大纲|劇本|劇本大綱|场景|场景大纲|場景|場景大綱|背景):[^:\r\n]*/m,lookbehind:!0,inside:{important:{pattern:/(:)[^\r\n]*/,lookbehind:!0},keyword:/[^:\r\n]+:/}},"table-body":{pattern:RegExp("("+n+")(?:"+n+")+"),lookbehind:!0,inside:{outline:{pattern:/<[^>]+?>/,alias:"variable"},td:{pattern:/\s*[^\s|][^|]*/,alias:"string"},punctuation:/\|/}},"table-head":{pattern:RegExp(n),inside:{th:{pattern:/\s*[^\s|][^|]*/,alias:"variable"},punctuation:/\|/}},atrule:{pattern:/(^[ \t]+)(?:'ach|'a|'ej|7|a|A také|A taktiež|A tiež|A zároveň|Aber|Ac|Adott|Akkor|Ak|Aleshores|Ale|Ali|Allora|Alors|Als|Ama|Amennyiben|Amikor|Ampak|an|AN|Ananging|And y'all|And|Angenommen|Anrhegedig a|An|Apabila|Atès|Atesa|Atunci|Avast!|Aye|A|awer|Bagi|Banjur|Bet|Biết|Blimey!|Buh|But at the end of the day I reckon|But y'all|But|BUT|Cal|Când|Cando|Cand|Ce|Cuando|Če|Ða ðe|Ða|Dadas|Dada|Dados|Dado|DaH ghu' bejlu'|dann|Dann|Dano|Dan|Dar|Dat fiind|Data|Date fiind|Date|Dati fiind|Dati|Daţi fiind|Dați fiind|Dato|DEN|Den youse gotta|Dengan|De|Diberi|Diyelim ki|Donada|Donat|Donitaĵo|Do|Dun|Duota|Ðurh|Eeldades|Ef|Eğer ki|Entao|Então|Entón|Entonces|En|Epi|E|És|Etant donnée|Etant donné|Et|Étant données|Étant donnée|Étant donné|Etant données|Etant donnés|Étant donnés|Fakat|Gangway!|Gdy|Gegeben seien|Gegeben sei|Gegeven|Gegewe|ghu' noblu'|Gitt|Given y'all|Given|Givet|Givun|Ha|Cho|I CAN HAZ|In|Ir|It's just unbelievable|I|Ja|Jeśli|Jeżeli|Kadar|Kada|Kad|Kai|Kaj|Když|Keď|Kemudian|Ketika|Khi|Kiedy|Ko|Kuid|Kui|Kun|Lan|latlh|Le sa a|Let go and haul|Le|Lè sa a|Lè|Logo|Lorsqu'<|Lorsque|mä|Maar|Mais|Mając|Majd|Maka|Manawa|Mas|Ma|Menawa|Men|Mutta|Nalikaning|Nalika|Nanging|Når|När|Nato|Nhưng|Niin|Njuk|O zaman|Og|Och|Oletetaan|Onda|Ond|Oraz|Pak|Pero|Però|Podano|Pokiaľ|Pokud|Potem|Potom|Privzeto|Pryd|qaSDI'|Quando|Quand|Quan|Så|Sed|Se|Siis|Sipoze ke|Sipoze Ke|Sipoze|Si|Şi|Și|Soit|Stel|Tada|Tad|Takrat|Tak|Tapi|Ter|Tetapi|Tha the|Tha|Then y'all|Then|Thì|Thurh|Toda|Too right|ugeholl|Und|Un|Và|vaj|Vendar|Ve|wann|Wanneer|WEN|Wenn|When y'all|When|Wtedy|Wun|Y'know|Yeah nah|Yna|Youse know like when|Youse know when youse got|Y|Za predpokladu|Za předpokladu|Zadani|Zadano|Zadan|Zadate|Zadato|Zakładając|Zaradi|Zatati|Þa þe|Þa|Þá|Þegar|Þurh|Αλλά|Δεδομένου|Και|Όταν|Τότε|А також|Агар|Але|Али|Аммо|А|Әгәр|Әйтик|Әмма|Бирок|Ва|Вә|Дадено|Дано|Допустим|Если|Задате|Задати|Задато|И|І|К тому же|Када|Кад|Когато|Когда|Коли|Ләкин|Лекин|Нәтиҗәдә|Нехай|Но|Онда|Припустимо, що|Припустимо|Пусть|Также|Та|Тогда|Тоді|То|Унда|Һәм|Якщо|אבל|אזי|אז|בהינתן|וגם|כאשר|آنگاه|اذاً|اگر|اما|اور|با فرض|بالفرض|بفرض|پھر|تب|ثم|جب|عندما|فرض کیا|لكن|لیکن|متى|هنگامی|و|अगर|और|कदा|किन्तु|चूंकि|जब|तथा|तदा|तब|परन्तु|पर|यदि|ਅਤੇ|ਜਦੋਂ|ਜਿਵੇਂ ਕਿ|ਜੇਕਰ|ਤਦ|ਪਰ|అప్పుడు|ఈ పరిస్థితిలో|కాని|చెప్పబడినది|మరియు|ಆದರೆ|ನಂತರ|ನೀಡಿದ|ಮತ್ತು|ಸ್ಥಿತಿಯನ್ನು|กำหนดให้|ดังนั้น|แต่|เมื่อ|และ|그러면<|그리고<|단<|만약<|만일<|먼저<|조건<|하지만<|かつ<|しかし<|ただし<|ならば<|もし<|並且<|但し<|但是<|假如<|假定<|假設<|假设<|前提<|同时<|同時<|并且<|当<|當<|而且<|那么<|那麼<)(?=[ \t])/m,lookbehind:!0},string:{pattern:/"(?:\\.|[^"\\\r\n])*"|'(?:\\.|[^'\\\r\n])*'/,inside:{outline:{pattern:/<[^>]+?>/,alias:"variable"}}},outline:{pattern:/<[^>]+?>/,alias:"variable"}}}(); +Prism.languages.git={comment:/^#.*/m,deleted:/^[-–].*/m,inserted:/^\+.*/m,string:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/m,command:{pattern:/^.*\$ git .*$/m,inside:{parameter:/\s--?\w+/m}},coord:/^@@.*@@$/m,commit_sha1:/^commit \w{40}$/m}; +Prism.languages.glsl=Prism.languages.extend("c",{keyword:/\b(?:attribute|const|uniform|varying|buffer|shared|coherent|volatile|restrict|readonly|writeonly|atomic_uint|layout|centroid|flat|smooth|noperspective|patch|sample|break|continue|do|for|while|switch|case|default|if|else|subroutine|in|out|inout|float|double|int|void|bool|true|false|invariant|precise|discard|return|d?mat[234](?:x[234])?|[ibdu]?vec[234]|uint|lowp|mediump|highp|precision|[iu]?sampler[123]D|[iu]?samplerCube|sampler[12]DShadow|samplerCubeShadow|[iu]?sampler[12]DArray|sampler[12]DArrayShadow|[iu]?sampler2DRect|sampler2DRectShadow|[iu]?samplerBuffer|[iu]?sampler2DMS(?:Array)?|[iu]?samplerCubeArray|samplerCubeArrayShadow|[iu]?image[123]D|[iu]?image2DRect|[iu]?imageCube|[iu]?imageBuffer|[iu]?image[12]DArray|[iu]?imageCubeArray|[iu]?image2DMS(?:Array)?|struct|common|partition|active|asm|class|union|enum|typedef|template|this|resource|goto|inline|noinline|public|static|extern|external|interface|long|short|half|fixed|unsigned|superp|input|output|hvec[234]|fvec[234]|sampler3DRect|filter|sizeof|cast|namespace|using)\b/}); +Prism.languages.go=Prism.languages.extend("clike",{keyword:/\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,builtin:/\b(?:bool|byte|complex(?:64|128)|error|float(?:32|64)|rune|string|u?int(?:8|16|32|64)?|uintptr|append|cap|close|complex|copy|delete|imag|len|make|new|panic|print(?:ln)?|real|recover)\b/,boolean:/\b(?:_|iota|nil|true|false)\b/,operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,number:/(?:\b0x[a-f\d]+|(?:\b\d+\.?\d*|\B\.\d+)(?:e[-+]?\d+)?)i?/i,string:{pattern:/(["'`])(?:\\[\s\S]|(?!\1)[^\\])*\1/,greedy:!0}}),delete Prism.languages.go["class-name"]; +Prism.languages.graphql={comment:/#.*/,description:{pattern:/(?:"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*")(?=\s*[a-z_])/i,greedy:!0,alias:"string",inside:{"language-markdown":{pattern:/(^"(?:"")?)(?!\1)[\s\S]+(?=\1$)/,lookbehind:!0,inside:Prism.languages.markdown}}},string:{pattern:/"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},number:/(?:\B-|\b)\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,boolean:/\b(?:true|false)\b/,variable:/\$[a-z_]\w*/i,directive:{pattern:/@[a-z_]\w*/i,alias:"function"},"attr-name":{pattern:/[a-z_]\w*(?=\s*(?:\((?:[^()"]|"(?:\\.|[^\\"\r\n])*")*\))?:)/i,greedy:!0},"class-name":{pattern:/(\b(?:enum|implements|interface|on|scalar|type|union)\s+|&\s*)[a-zA-Z_]\w*/,lookbehind:!0},fragment:{pattern:/(\bfragment\s+|\.{3}\s*(?!on\b))[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},keyword:/\b(?:directive|enum|extend|fragment|implements|input|interface|mutation|on|query|repeatable|scalar|schema|subscription|type|union)\b/,operator:/[!=|&]|\.{3}/,punctuation:/[!(){}\[\]:=,]/,constant:/\b(?!ID\b)[A-Z][A-Z_\d]*\b/}; +Prism.languages.groovy=Prism.languages.extend("clike",{string:[{pattern:/("""|''')(?:[^\\]|\\[\s\S])*?\1|\$\/(?:[^/$]|\$(?:[/$]|(?![/$]))|\/(?!\$))*\/\$/,greedy:!0},{pattern:/(["'/])(?:\\.|(?!\1)[^\\\r\n])*\1/,greedy:!0}],keyword:/\b(?:as|def|in|abstract|assert|boolean|break|byte|case|catch|char|class|const|continue|default|do|double|else|enum|extends|final|finally|float|for|goto|if|implements|import|instanceof|int|interface|long|native|new|package|private|protected|public|return|short|static|strictfp|super|switch|synchronized|this|throw|throws|trait|transient|try|void|volatile|while)\b/,number:/\b(?:0b[01_]+|0x[\da-f_]+(?:\.[\da-f_p\-]+)?|[\d_]+(?:\.[\d_]+)?(?:e[+-]?[\d]+)?)[glidf]?\b/i,operator:{pattern:/(^|[^.])(?:~|==?~?|\?[.:]?|\*(?:[.=]|\*=?)?|\.[@&]|\.\.<|\.\.(?!\.)|-[-=>]?|\+[+=]?|!=?|<(?:<=?|=>?)?|>(?:>>?=?|=)?|&[&=]?|\|[|=]?|\/=?|\^=?|%=?)/,lookbehind:!0},punctuation:/\.+|[{}[\];(),.:$]/}),Prism.languages.insertBefore("groovy","string",{shebang:{pattern:/#!.+/,alias:"comment"}}),Prism.languages.insertBefore("groovy","punctuation",{"spock-block":/\b(?:setup|given|when|then|and|cleanup|expect|where):/}),Prism.languages.insertBefore("groovy","function",{annotation:{pattern:/(^|[^.])@\w+/,lookbehind:!0,alias:"punctuation"}}),Prism.hooks.add("wrap",function(e){if("groovy"===e.language&&"string"===e.type){var t=e.content[0];if("'"!=t){var n=/([^\\])(?:\$(?:\{.*?\}|[\w.]+))/;"$"===t&&(n=/([^\$])(?:\$(?:\{.*?\}|[\w.]+))/),e.content=e.content.replace(/</g,"<").replace(/&/g,"&"),e.content=Prism.highlight(e.content,{expression:{pattern:n,lookbehind:!0,inside:Prism.languages.groovy}}),e.classes.push("/"===t?"regex":"gstring")}}}); +!function(e){e.languages.haml={"multiline-comment":{pattern:/((?:^|\r?\n|\r)([\t ]*))(?:\/|-#).*(?:(?:\r?\n|\r)\2[\t ]+.+)*/,lookbehind:!0,alias:"comment"},"multiline-code":[{pattern:/((?:^|\r?\n|\r)([\t ]*)(?:[~-]|[&!]?=)).*,[\t ]*(?:(?:\r?\n|\r)\2[\t ]+.*,[\t ]*)*(?:(?:\r?\n|\r)\2[\t ]+.+)/,lookbehind:!0,inside:e.languages.ruby},{pattern:/((?:^|\r?\n|\r)([\t ]*)(?:[~-]|[&!]?=)).*\|[\t ]*(?:(?:\r?\n|\r)\2[\t ]+.*\|[\t ]*)*/,lookbehind:!0,inside:e.languages.ruby}],filter:{pattern:/((?:^|\r?\n|\r)([\t ]*)):[\w-]+(?:(?:\r?\n|\r)(?:\2[\t ]+.+|\s*?(?=\r?\n|\r)))+/,lookbehind:!0,inside:{"filter-name":{pattern:/^:[\w-]+/,alias:"variable"}}},markup:{pattern:/((?:^|\r?\n|\r)[\t ]*)<.+/,lookbehind:!0,inside:e.languages.markup},doctype:{pattern:/((?:^|\r?\n|\r)[\t ]*)!!!(?: .+)?/,lookbehind:!0},tag:{pattern:/((?:^|\r?\n|\r)[\t ]*)[%.#][\w\-#.]*[\w\-](?:\([^)]+\)|\{(?:\{[^}]+\}|[^}])+\}|\[[^\]]+\])*[\/<>]*/,lookbehind:!0,inside:{attributes:[{pattern:/(^|[^#])\{(?:\{[^}]+\}|[^}])+\}/,lookbehind:!0,inside:e.languages.ruby},{pattern:/\([^)]+\)/,inside:{"attr-value":{pattern:/(=\s*)(?:"(?:\\.|[^\\"\r\n])*"|[^)\s]+)/,lookbehind:!0},"attr-name":/[\w:-]+(?=\s*!?=|\s*[,)])/,punctuation:/[=(),]/}},{pattern:/\[[^\]]+\]/,inside:e.languages.ruby}],punctuation:/[<>]/}},code:{pattern:/((?:^|\r?\n|\r)[\t ]*(?:[~-]|[&!]?=)).+/,lookbehind:!0,inside:e.languages.ruby},interpolation:{pattern:/#\{[^}]+\}/,inside:{delimiter:{pattern:/^#\{|\}$/,alias:"punctuation"},rest:e.languages.ruby}},punctuation:{pattern:/((?:^|\r?\n|\r)[\t ]*)[~=\-&!]+/,lookbehind:!0}};for(var t=["css",{filter:"coffee",language:"coffeescript"},"erb","javascript","less","markdown","ruby","scss","textile"],n={},r=0,a=t.length;r@\[\\\]^`{|}~]/,variable:/[^!"#%&'()*+,\/;<=>@\[\\\]^`{|}~\s]+/},e.hooks.add("before-tokenize",function(a){e.languages["markup-templating"].buildPlaceholders(a,"handlebars",/\{\{\{[\s\S]+?\}\}\}|\{\{[\s\S]+?\}\}/g)}),e.hooks.add("after-tokenize",function(a){e.languages["markup-templating"].tokenizePlaceholders(a,"handlebars")})}(Prism); +Prism.languages.haskell={comment:{pattern:/(^|[^-!#$%*+=?&@|~.:<>^\\\/])(?:--[^-!#$%*+=?&@|~.:<>^\\\/].*|{-[\s\S]*?-})/m,lookbehind:!0},char:/'(?:[^\\']|\\(?:[abfnrtv\\"'&]|\^[A-Z@[\]^_]|NUL|SOH|STX|ETX|EOT|ENQ|ACK|BEL|BS|HT|LF|VT|FF|CR|SO|SI|DLE|DC1|DC2|DC3|DC4|NAK|SYN|ETB|CAN|EM|SUB|ESC|FS|GS|RS|US|SP|DEL|\d+|o[0-7]+|x[0-9a-fA-F]+))'/,string:{pattern:/"(?:[^\\"]|\\(?:[abfnrtv\\"'&]|\^[A-Z@[\]^_]|NUL|SOH|STX|ETX|EOT|ENQ|ACK|BEL|BS|HT|LF|VT|FF|CR|SO|SI|DLE|DC1|DC2|DC3|DC4|NAK|SYN|ETB|CAN|EM|SUB|ESC|FS|GS|RS|US|SP|DEL|\d+|o[0-7]+|x[0-9a-fA-F]+)|\\\s+\\)*"/,greedy:!0},keyword:/\b(?:case|class|data|deriving|do|else|if|in|infixl|infixr|instance|let|module|newtype|of|primitive|then|type|where)\b/,import_statement:{pattern:/((?:\r?\n|\r|^)\s*)import\s+(?:qualified\s+)?(?:[A-Z][\w']*)(?:\.[A-Z][\w']*)*(?:\s+as\s+(?:[A-Z][_a-zA-Z0-9']*)(?:\.[A-Z][\w']*)*)?(?:\s+hiding\b)?/m,lookbehind:!0,inside:{keyword:/\b(?:import|qualified|as|hiding)\b/}},builtin:/\b(?:abs|acos|acosh|all|and|any|appendFile|approxRational|asTypeOf|asin|asinh|atan|atan2|atanh|basicIORun|break|catch|ceiling|chr|compare|concat|concatMap|const|cos|cosh|curry|cycle|decodeFloat|denominator|digitToInt|div|divMod|drop|dropWhile|either|elem|encodeFloat|enumFrom|enumFromThen|enumFromThenTo|enumFromTo|error|even|exp|exponent|fail|filter|flip|floatDigits|floatRadix|floatRange|floor|fmap|foldl|foldl1|foldr|foldr1|fromDouble|fromEnum|fromInt|fromInteger|fromIntegral|fromRational|fst|gcd|getChar|getContents|getLine|group|head|id|inRange|index|init|intToDigit|interact|ioError|isAlpha|isAlphaNum|isAscii|isControl|isDenormalized|isDigit|isHexDigit|isIEEE|isInfinite|isLower|isNaN|isNegativeZero|isOctDigit|isPrint|isSpace|isUpper|iterate|last|lcm|length|lex|lexDigits|lexLitChar|lines|log|logBase|lookup|map|mapM|mapM_|max|maxBound|maximum|maybe|min|minBound|minimum|mod|negate|not|notElem|null|numerator|odd|or|ord|otherwise|pack|pi|pred|primExitWith|print|product|properFraction|putChar|putStr|putStrLn|quot|quotRem|range|rangeSize|read|readDec|readFile|readFloat|readHex|readIO|readInt|readList|readLitChar|readLn|readOct|readParen|readSigned|reads|readsPrec|realToFrac|recip|rem|repeat|replicate|return|reverse|round|scaleFloat|scanl|scanl1|scanr|scanr1|seq|sequence|sequence_|show|showChar|showInt|showList|showLitChar|showParen|showSigned|showString|shows|showsPrec|significand|signum|sin|sinh|snd|sort|span|splitAt|sqrt|subtract|succ|sum|tail|take|takeWhile|tan|tanh|threadToIOResult|toEnum|toInt|toInteger|toLower|toRational|toUpper|truncate|uncurry|undefined|unlines|until|unwords|unzip|unzip3|userError|words|writeFile|zip|zip3|zipWith|zipWith3)\b/,number:/\b(?:\d+(?:\.\d+)?(?:e[+-]?\d+)?|0o[0-7]+|0x[0-9a-f]+)\b/i,operator:/\s\.\s|[-!#$%*+=?&@|~.:<>^\\\/]*\.[-!#$%*+=?&@|~.:<>^\\\/]+|[-!#$%*+=?&@|~.:<>^\\\/]+\.[-!#$%*+=?&@|~.:<>^\\\/]*|[-!#$%*+=?&@|~:<>^\\\/]+|`(?:[A-Z][\w']*\.)*[_a-z][\w']*`/,hvariable:/\b(?:[A-Z][\w']*\.)*[_a-z][\w']*\b/,constant:/\b(?:[A-Z][\w']*\.)*[A-Z][\w']*\b/,punctuation:/[{}[\];(),.:]/},Prism.languages.hs=Prism.languages.haskell; +Prism.languages.haxe=Prism.languages.extend("clike",{string:{pattern:/(["'])(?:(?!\1)[^\\]|\\[\s\S])*\1/,greedy:!0,inside:{interpolation:{pattern:/(^|[^\\])\$(?:\w+|\{[^}]+\})/,lookbehind:!0,inside:{interpolation:{pattern:/^\$\w*/,alias:"variable"}}}}},keyword:/\bthis\b|\b(?:abstract|as|break|case|cast|catch|class|continue|default|do|dynamic|else|enum|extends|extern|from|for|function|if|implements|import|in|inline|interface|macro|new|null|override|public|private|return|static|super|switch|throw|to|try|typedef|using|var|while)(?!\.)\b/,operator:/\.{3}|\+\+?|-[->]?|[=!]=?|&&?|\|\|?|<[<=]?|>[>=]?|[*\/%~^]/}),Prism.languages.insertBefore("haxe","class-name",{regex:{pattern:/~\/(?:[^\/\\\r\n]|\\.)+\/[igmsu]*/,greedy:!0}}),Prism.languages.insertBefore("haxe","keyword",{preprocessor:{pattern:/#\w+/,alias:"builtin"},metadata:{pattern:/@:?\w+/,alias:"symbol"},reification:{pattern:/\$(?:\w+|(?=\{))/,alias:"variable"}}),Prism.languages.haxe.string.inside.interpolation.inside.rest=Prism.languages.haxe,delete Prism.languages.haxe["class-name"]; +Prism.languages.hcl={comment:/(?:\/\/|#).*|\/\*[\s\S]*?(?:\*\/|$)/,heredoc:{pattern:/<<-?(\w+)[\s\S]*?^\s*\1/m,greedy:!0,alias:"string"},keyword:[{pattern:/(?:resource|data)\s+(?:"(?:\\[\s\S]|[^\\"])*")(?=\s+"[\w-]+"\s+{)/i,inside:{type:{pattern:/(resource|data|\s+)(?:"(?:\\[\s\S]|[^\\"])*")/i,lookbehind:!0,alias:"variable"}}},{pattern:/(?:provider|provisioner|variable|output|module|backend)\s+(?:[\w-]+|"(?:\\[\s\S]|[^\\"])*")\s+(?={)/i,inside:{type:{pattern:/(provider|provisioner|variable|output|module|backend)\s+(?:[\w-]+|"(?:\\[\s\S]|[^\\"])*")\s+/i,lookbehind:!0,alias:"variable"}}},/[\w-]+(?=\s+{)/],property:[/[\w-\.]+(?=\s*=(?!=))/,/"(?:\\[\s\S]|[^\\"])+"(?=\s*[:=])/],string:{pattern:/"(?:[^\\$"]|\\[\s\S]|\$(?:(?=")|\$+|[^"${])|\$\{(?:[^{}"]|"(?:[^\\"]|\\[\s\S])*")*\})*"/,greedy:!0,inside:{interpolation:{pattern:/(^|[^$])\$\{(?:[^{}"]|"(?:[^\\"]|\\[\s\S])*")*\}/,lookbehind:!0,inside:{type:{pattern:/(\b(?:terraform|var|self|count|module|path|data|local)\b\.)[\w\*]+/i,lookbehind:!0,alias:"variable"},keyword:/\b(?:terraform|var|self|count|module|path|data|local)\b/i,function:/\w+(?=\()/,string:{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0},number:/\b0x[\da-f]+\b|\b\d+\.?\d*(?:e[+-]?\d+)?/i,punctuation:/[!\$#%&'()*+,.\/;<=>@\[\\\]^`{|}~?:]/}}}},number:/\b0x[\da-f]+\b|\b\d+\.?\d*(?:e[+-]?\d+)?/i,boolean:/\b(?:true|false)\b/i,punctuation:/[=\[\]{}]/}; +Prism.languages.hlsl=Prism.languages.extend("c",{"class-name":[Prism.languages.c["class-name"],/\b(?:AppendStructuredBuffer|BlendState|Buffer|ByteAddressBuffer|CompileShader|ComputeShader|ConsumeStructuredBuffer|DepthStencilState|DepthStencilView|DomainShader|GeometryShader|Hullshader|InputPatch|LineStream|OutputPatch|PixelShader|PointStream|RasterizerState|RenderTargetView|RWBuffer|RWByteAddressBuffer|RWStructuredBuffer|RWTexture(?:1D|1DArray|2D|2DArray|3D)|SamplerComparisonState|SamplerState|StructuredBuffer|Texture(?:1D|1DArray|2D|2DArray|2DMS|2DMSArray|3D|Cube|CubeArray)|TriangleStream|VertexShader)\b/],keyword:[/\b(?:asm|asm_fragment|auto|break|case|catch|cbuffer|centroid|char|class|column_major|compile|compile_fragment|const|const_cast|continue|default|delete|discard|do|dynamic_cast|else|enum|explicit|export|extern|for|friend|fxgroup|goto|groupshared|if|in|inline|inout|interface|line|lineadj|linear|long|matrix|mutable|namespace|new|nointerpolation|noperspective|operator|out|packoffset|pass|pixelfragment|point|precise|private|protected|public|register|reinterpret_cast|return|row_major|sample|sampler|shared|short|signed|sizeof|snorm|stateblock|stateblock_state|static|static_cast|string|struct|switch|tbuffer|technique|technique10|technique11|template|texture|this|throw|triangle|triangleadj|try|typedef|typename|uniform|union|unorm|unsigned|using|vector|vertexfragment|virtual|void|volatile|while)\b/,/\b(?:bool|double|dword|float|half|int|min(?:10float|12int|16(?:float|int|uint))|uint)(?:[1-4](?:x[1-4])?)?\b/],number:/(?:(?:\b\d+\.?\d*|\B\.\d+)(?:[eE][+-]?\d+)?|\b0x[\da-fA-F]+)[fFhHlLuU]?\b/,boolean:/\b(?:false|true)\b/}); +!function(t){t.languages.http={"request-line":{pattern:/^(?:POST|GET|PUT|DELETE|OPTIONS|PATCH|TRACE|CONNECT)\s(?:https?:\/\/|\/)\S+\sHTTP\/[0-9.]+/m,inside:{property:/^(?:POST|GET|PUT|DELETE|OPTIONS|PATCH|TRACE|CONNECT)\b/,"attr-name":/:\w+/}},"response-status":{pattern:/^HTTP\/1.[01] \d+.*/m,inside:{property:{pattern:/(^HTTP\/1.[01] )\d+.*/i,lookbehind:!0}}},"header-name":{pattern:/^[\w-]+:(?=.)/m,alias:"keyword"}};var a,e,n,i=t.languages,p={"application/javascript":i.javascript,"application/json":i.json||i.javascript,"application/xml":i.xml,"text/xml":i.xml,"text/html":i.html,"text/css":i.css},s={"application/json":!0,"application/xml":!0};for(var r in p)if(p[r]){a=a||{};var T=s[r]?(void 0,n=(e=r).replace(/^[a-z]+\//,""),"(?:"+e+"|\\w+/(?:[\\w.-]+\\+)+"+n+"(?![+\\w.-]))"):r;a[r.replace(/\//g,"-")]={pattern:RegExp("(content-type:\\s*"+T+"[\\s\\S]*?)(?:\\r?\\n|\\r){2}[\\s\\S]*","i"),lookbehind:!0,inside:p[r]}}a&&t.languages.insertBefore("http","header-name",a)}(Prism); +Prism.languages.hpkp={directive:{pattern:/\b(?:(?:includeSubDomains|preload|strict)(?: |;)|pin-sha256="[a-zA-Z\d+=/]+"|(?:max-age|report-uri)=|report-to )/,alias:"keyword"},safe:{pattern:/\b\d{7,}\b/,alias:"selector"},unsafe:{pattern:/\b\d{1,6}\b/,alias:"function"}}; +Prism.languages.hsts={directive:{pattern:/\b(?:max-age=|includeSubDomains|preload)/,alias:"keyword"},safe:{pattern:/\b\d{8,}\b/,alias:"selector"},unsafe:{pattern:/\b\d{1,7}\b/,alias:"function"}}; +Prism.languages.ichigojam={comment:/(?:\B'|REM)(?:[^\n\r]*)/i,string:{pattern:/"(?:""|[!#$%&'()*,\/:;<=>?^_ +\-.A-Z\d])*"/i,greedy:!0},number:/\B#[0-9A-F]+|\B`[01]+|(?:\b\d+\.?\d*|\B\.\d+)(?:E[+-]?\d+)?/i,keyword:/\b(?:BEEP|BPS|CASE|CLEAR|CLK|CLO|CLP|CLS|CLT|CLV|CONT|COPY|ELSE|END|FILE|FILES|FOR|GOSUB|GSB|GOTO|IF|INPUT|KBD|LED|LET|LIST|LOAD|LOCATE|LRUN|NEW|NEXT|OUT|RIGHT|PLAY|POKE|PRINT|PWM|REM|RENUM|RESET|RETURN|RTN|RUN|SAVE|SCROLL|SLEEP|SRND|STEP|STOP|SUB|TEMPO|THEN|TO|UART|VIDEO|WAIT)(?:\$|\b)/i,function:/\b(?:ABS|ANA|ASC|BIN|BTN|DEC|END|FREE|HELP|HEX|I2CR|I2CW|IN|INKEY|LEN|LINE|PEEK|RND|SCR|SOUND|STR|TICK|USR|VER|VPEEK|ZER)(?:\$|\b)/i,label:/(?:\B@[^\s]+)/i,operator:/<[=>]?|>=?|\|\||&&|[+\-*\/=|&^~!]|\b(?:AND|NOT|OR)\b/i,punctuation:/[\[,;:()\]]/}; +Prism.languages.icon={comment:/#.*/,string:{pattern:/(["'])(?:(?!\1)[^\\\r\n_]|\\.|_(?!\1)(?:\r\n|[\s\S]))*\1/,greedy:!0},number:/\b(?:\d+r[a-z\d]+|\d+(?:\.\d+)?(?:e[+-]?\d+)?)\b|\.\d+\b/i,"builtin-keyword":{pattern:/&(?:allocated|ascii|clock|collections|cset|current|date|dateline|digits|dump|e|error(?:number|text|value)?|errout|fail|features|file|host|input|lcase|letters|level|line|main|null|output|phi|pi|pos|progname|random|regions|source|storage|subject|time|trace|ucase|version)\b/,alias:"variable"},directive:{pattern:/\$\w+/,alias:"builtin"},keyword:/\b(?:break|by|case|create|default|do|else|end|every|fail|global|if|initial|invocable|link|local|next|not|of|procedure|record|repeat|return|static|suspend|then|to|until|while)\b/,function:/(?!\d)\w+(?=\s*[({]|\s*!\s*\[)/,operator:/[+-]:(?!=)|(?:[\/?@^%&]|\+\+?|--?|==?=?|~==?=?|\*\*?|\|\|\|?|<(?:->?|>?=?)(?::=)?|:(?:=:?)?|[!.\\|~]/,punctuation:/[\[\](){},;]/}; +!function(n){n.languages.ignore={comment:/^#.*/m,entry:{pattern:/\S(?:.*(?:(?:\\ )|\S))?/,alias:"string",inside:{operator:/^!|\*\*?|\?/,regex:{pattern:/(^|[^\\])\[[^\[\]]*\]/,lookbehind:!0},punctuation:/\//}}},n.languages.gitignore=n.languages.ignore,n.languages.hgignore=n.languages.ignore,n.languages.npmignore=n.languages.ignore}(Prism); +Prism.languages.inform7={string:{pattern:/"[^"]*"/,inside:{substitution:{pattern:/\[[^\]]+\]/,inside:{delimiter:{pattern:/\[|\]/,alias:"punctuation"}}}}},comment:{pattern:/\[[^\]]+\]/,greedy:!0},title:{pattern:/^[ \t]*(?:volume|book|part(?! of)|chapter|section|table)\b.+/im,alias:"important"},number:{pattern:/(^|[^-])(?:\b\d+(?:\.\d+)?(?:\^\d+)?\w*|\b(?:one|two|three|four|five|six|seven|eight|nine|ten|eleven|twelve))\b(?!-)/i,lookbehind:!0},verb:{pattern:/(^|[^-])\b(?:applying to|are|attacking|answering|asking|be(?:ing)?|burning|buying|called|carries|carry(?! out)|carrying|climbing|closing|conceal(?:s|ing)?|consulting|contain(?:s|ing)?|cutting|drinking|dropping|eating|enclos(?:es?|ing)|entering|examining|exiting|getting|giving|going|ha(?:ve|s|ving)|hold(?:s|ing)?|impl(?:y|ies)|incorporat(?:es?|ing)|inserting|is|jumping|kissing|listening|locking|looking|mean(?:s|ing)?|opening|provid(?:es?|ing)|pulling|pushing|putting|relat(?:es?|ing)|removing|searching|see(?:s|ing)?|setting|showing|singing|sleeping|smelling|squeezing|switching|support(?:s|ing)?|swearing|taking|tasting|telling|thinking|throwing|touching|turning|tying|unlock(?:s|ing)?|var(?:y|ies|ying)|waiting|waking|waving|wear(?:s|ing)?)\b(?!-)/i,lookbehind:!0,alias:"operator"},keyword:{pattern:/(^|[^-])\b(?:after|before|carry out|check|continue the action|definition(?= *:)|do nothing|else|end (?:if|unless|the story)|every turn|if|include|instead(?: of)?|let|move|no|now|otherwise|repeat|report|resume the story|rule for|running through|say(?:ing)?|stop the action|test|try(?:ing)?|understand|unless|use|when|while|yes)\b(?!-)/i,lookbehind:!0},property:{pattern:/(^|[^-])\b(?:adjacent(?! to)|carried|closed|concealed|contained|dark|described|edible|empty|enclosed|enterable|even|female|fixed in place|full|handled|held|improper-named|incorporated|inedible|invisible|lighted|lit|lock(?:able|ed)|male|marked for listing|mentioned|negative|neuter|non-(?:empty|full|recurring)|odd|opaque|open(?:able)?|plural-named|portable|positive|privately-named|proper-named|provided|publically-named|pushable between rooms|recurring|related|rubbing|scenery|seen|singular-named|supported|swinging|switch(?:able|ed(?: on| off)?)|touch(?:able|ed)|transparent|unconcealed|undescribed|unlit|unlocked|unmarked for listing|unmentioned|unopenable|untouchable|unvisited|variable|visible|visited|wearable|worn)\b(?!-)/i,lookbehind:!0,alias:"symbol"},position:{pattern:/(^|[^-])\b(?:above|adjacent to|back side of|below|between|down|east|everywhere|front side|here|in|inside(?: from)?|north(?:east|west)?|nowhere|on(?: top of)?|other side|outside(?: from)?|parts? of|regionally in|south(?:east|west)?|through|up|west|within)\b(?!-)/i,lookbehind:!0,alias:"keyword"},type:{pattern:/(^|[^-])\b(?:actions?|activit(?:y|ies)|actors?|animals?|backdrops?|containers?|devices?|directions?|doors?|holders?|kinds?|lists?|m[ae]n|nobody|nothing|nouns?|numbers?|objects?|people|persons?|player(?:'s holdall)?|regions?|relations?|rooms?|rule(?:book)?s?|scenes?|someone|something|supporters?|tables?|texts?|things?|time|vehicles?|wom[ae]n)\b(?!-)/i,lookbehind:!0,alias:"variable"},punctuation:/[.,:;(){}]/},Prism.languages.inform7.string.inside.substitution.inside.rest=Prism.languages.inform7,Prism.languages.inform7.string.inside.substitution.inside.rest.text={pattern:/\S(?:\s*\S)*/,alias:"comment"}; +Prism.languages.ini={comment:/^[ \t]*[;#].*$/m,selector:/^[ \t]*\[.*?\]/m,constant:/^[ \t]*[^\s=]+?(?=[ \t]*=)/m,"attr-value":{pattern:/=.*/,inside:{punctuation:/^[=]/}}}; +Prism.languages.io={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0},{pattern:/(^|[^\\])\/\/.*/,lookbehind:!0},{pattern:/(^|[^\\])#.*/,lookbehind:!0}],"triple-quoted-string":{pattern:/"""(?:\\[\s\S]|(?!""")[^\\])*"""/,greedy:!0,alias:"string"},string:{pattern:/"(?:\\.|[^\\\r\n"])*"/,greedy:!0},keyword:/\b(?:activate|activeCoroCount|asString|block|break|catch|clone|collectGarbage|compileString|continue|do|doFile|doMessage|doString|else|elseif|exit|for|foreach|forward|getSlot|getEnvironmentVariable|hasSlot|if|ifFalse|ifNil|ifNilEval|ifTrue|isActive|isNil|isResumable|list|message|method|parent|pass|pause|perform|performWithArgList|print|println|proto|raise|raiseResumable|removeSlot|resend|resume|schedulerSleepSeconds|self|sender|setSchedulerSleepSeconds|setSlot|shallowCopy|slotNames|super|system|then|thisBlock|thisContext|call|try|type|uniqueId|updateSlot|wait|while|write|yield)\b/,builtin:/\b(?:Array|AudioDevice|AudioMixer|Block|Box|Buffer|CFunction|CGI|Color|Curses|DBM|DNSResolver|DOConnection|DOProxy|DOServer|Date|Directory|Duration|DynLib|Error|Exception|FFT|File|Fnmatch|Font|Future|GL|GLE|GLScissor|GLU|GLUCylinder|GLUQuadric|GLUSphere|GLUT|Host|Image|Importer|LinkList|List|Lobby|Locals|MD5|MP3Decoder|MP3Encoder|Map|Message|Movie|Notification|Number|Object|OpenGL|Point|Protos|Regex|SGML|SGMLElement|SGMLParser|SQLite|Server|Sequence|ShowMessage|SleepyCat|SleepyCatCursor|Socket|SocketManager|Sound|Soup|Store|String|Tree|UDPSender|UPDReceiver|URL|User|Warning|WeakLink|Random|BigNum|Sequence)\b/,boolean:/\b(?:true|false|nil)\b/,number:/\b0x[\da-f]+\b|(?:\b\d+\.?\d*|\B\.\d+)(?:e-?\d+)?/i,operator:/[=!*/%+\-^&|]=|>>?=?|<+*\-%$|,#][.:]?|[?^]\.?|[;\[]:?|[~}"i][.:]|[ACeEIjLor]\.|(?:[_\/\\qsux]|_?\d):)/,alias:"keyword"},number:/\b_?(?:(?!\d:)\d+(?:\.\d+)?(?:(?:[ejpx]|ad|ar)_?\d+(?:\.\d+)?)*(?:b_?[\da-z]+(?:\.[\da-z]+)?)?|_\b(?!\.))/,adverb:{pattern:/[~}]|[\/\\]\.?|[bfM]\.|t[.:]/,alias:"builtin"},operator:/[=a][.:]|_\./,conjunction:{pattern:/&(?:\.:?|:)?|[.:@][.:]?|[!D][.:]|[;dHT]\.|`:?|[\^LS]:|"/,alias:"variable"},punctuation:/[()]/}; +!function(e){var t=/\b(?:abstract|assert|boolean|break|byte|case|catch|char|class|const|continue|default|do|double|else|enum|exports|extends|final|finally|float|for|goto|if|implements|import|instanceof|int|interface|long|module|native|new|null|open|opens|package|private|protected|provides|public|record|requires|return|short|static|strictfp|super|switch|synchronized|this|throw|throws|to|transient|transitive|try|uses|var|void|volatile|while|with|yield)\b/,a=/\b[A-Z](?:\w*[a-z]\w*)?\b/;e.languages.java=e.languages.extend("clike",{"class-name":[a,/\b[A-Z]\w*(?=\s+\w+\s*[;,=())])/],keyword:t,function:[e.languages.clike.function,{pattern:/(\:\:)[a-z_]\w*/,lookbehind:!0}],number:/\b0b[01][01_]*L?\b|\b0x[\da-f_]*\.?[\da-f_p+-]+\b|(?:\b\d[\d_]*\.?[\d_]*|\B\.\d[\d_]*)(?:e[+-]?\d[\d_]*)?[dfl]?/i,operator:{pattern:/(^|[^.])(?:<<=?|>>>?=?|->|--|\+\+|&&|\|\||::|[?:~]|[-+*/%&|^!=<>]=?)/m,lookbehind:!0}}),e.languages.insertBefore("java","string",{"triple-quoted-string":{pattern:/"""[ \t]*[\r\n](?:(?:"|"")?(?:\\.|[^"\\]))*"""/,greedy:!0,alias:"string"}}),e.languages.insertBefore("java","class-name",{annotation:{alias:"punctuation",pattern:/(^|[^.])@\w+/,lookbehind:!0},namespace:{pattern:RegExp("(\\b(?:exports|import(?:\\s+static)?|module|open|opens|package|provides|requires|to|transitive|uses|with)\\s+)(?!)[a-z]\\w*(?:\\.[a-z]\\w*)*\\.?".replace(//g,function(){return t.source})),lookbehind:!0,inside:{punctuation:/\./}},generics:{pattern:/<(?:[\w\s,.&?]|<(?:[\w\s,.&?]|<(?:[\w\s,.&?]|<[\w\s,.&?]*>)*>)*>)*>/,inside:{"class-name":a,keyword:t,punctuation:/[<>(),.:]/,operator:/[?&|]/}}})}(Prism); +!function(n){n.languages.php=n.languages.extend("clike",{keyword:/\b(?:__halt_compiler|abstract|and|array|as|break|callable|case|catch|class|clone|const|continue|declare|default|die|do|echo|else|elseif|empty|enddeclare|endfor|endforeach|endif|endswitch|endwhile|eval|exit|extends|final|finally|for|foreach|function|global|goto|if|implements|include|include_once|instanceof|insteadof|interface|isset|list|namespace|new|or|parent|print|private|protected|public|require|require_once|return|static|switch|throw|trait|try|unset|use|var|while|xor|yield)\b/i,boolean:{pattern:/\b(?:false|true)\b/i,alias:"constant"},constant:[/\b[A-Z_][A-Z0-9_]*\b/,/\b(?:null)\b/i],comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0}}),n.languages.insertBefore("php","string",{"shell-comment":{pattern:/(^|[^\\])#.*/,lookbehind:!0,alias:"comment"}}),n.languages.insertBefore("php","comment",{delimiter:{pattern:/\?>$|^<\?(?:php(?=\s)|=)?/i,alias:"important"}}),n.languages.insertBefore("php","keyword",{variable:/\$+(?:\w+\b|(?={))/i,package:{pattern:/(\\|namespace\s+|use\s+)[\w\\]+/,lookbehind:!0,inside:{punctuation:/\\/}}}),n.languages.insertBefore("php","operator",{property:{pattern:/(->)[\w]+/,lookbehind:!0}});var e={pattern:/{\$(?:{(?:{[^{}]+}|[^{}]+)}|[^{}])+}|(^|[^\\{])\$+(?:\w+(?:\[[^\r\n\[\]]+\]|->\w+)*)/,lookbehind:!0,inside:n.languages.php};n.languages.insertBefore("php","string",{"nowdoc-string":{pattern:/<<<'([^']+)'[\r\n](?:.*[\r\n])*?\1;/,greedy:!0,alias:"string",inside:{delimiter:{pattern:/^<<<'[^']+'|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<'?|[';]$/}}}},"heredoc-string":{pattern:/<<<(?:"([^"]+)"[\r\n](?:.*[\r\n])*?\1;|([a-z_]\w*)[\r\n](?:.*[\r\n])*?\2;)/i,greedy:!0,alias:"string",inside:{delimiter:{pattern:/^<<<(?:"[^"]+"|[a-z_]\w*)|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<"?|[";]$/}},interpolation:e}},"single-quoted-string":{pattern:/'(?:\\[\s\S]|[^\\'])*'/,greedy:!0,alias:"string"},"double-quoted-string":{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0,alias:"string",inside:{interpolation:e}}}),delete n.languages.php.string,n.hooks.add("before-tokenize",function(e){if(/<\?/.test(e.code)){n.languages["markup-templating"].buildPlaceholders(e,"php",/<\?(?:[^"'/#]|\/(?![*/])|("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|(?:\/\/|#)(?:[^?\n\r]|\?(?!>))*(?=$|\?>|[\r\n])|\/\*[\s\S]*?(?:\*\/|$))*?(?:\?>|$)/gi)}}),n.hooks.add("after-tokenize",function(e){n.languages["markup-templating"].tokenizePlaceholders(e,"php")})}(Prism); +!function(p){var a=p.languages.javadoclike={parameter:{pattern:/(^\s*(?:\/{3}|\*|\/\*\*)\s*@(?:param|arg|arguments)\s+)\w+/m,lookbehind:!0},keyword:{pattern:/(^\s*(?:\/{3}|\*|\/\*\*)\s*|\{)@[a-z][a-zA-Z-]+\b/m,lookbehind:!0},punctuation:/[{}]/};Object.defineProperty(a,"addSupport",{value:function(a,e){"string"==typeof a&&(a=[a]),a.forEach(function(a){!function(a,e){var n="doc-comment",t=p.languages[a];if(t){var r=t[n];if(!r){var o={"doc-comment":{pattern:/(^|[^\\])\/\*\*[^/][\s\S]*?(?:\*\/|$)/,lookbehind:!0,alias:"comment"}};r=(t=p.languages.insertBefore(a,"comment",o))[n]}if(r instanceof RegExp&&(r=t[n]={pattern:r}),Array.isArray(r))for(var i=0,s=r.length;i)?|".replace(//g,function(){return"#\\s*\\w+(?:\\s*\\([^()]*\\))?"});a.languages.javadoc=a.languages.extend("javadoclike",{}),a.languages.insertBefore("javadoc","keyword",{reference:{pattern:RegExp("(@(?:exception|throws|see|link|linkplain|value)\\s+(?:\\*\\s*)?)(?:"+n+")"),lookbehind:!0,inside:{function:{pattern:/(#\s*)\w+(?=\s*\()/,lookbehind:!0},field:{pattern:/(#\s*)\w+/,lookbehind:!0},namespace:{pattern:/\b(?:[a-z]\w*\s*\.\s*)+/,inside:{punctuation:/\./}},"class-name":/\b[A-Z]\w*/,keyword:a.languages.java.keyword,punctuation:/[#()[\],.]/}},"class-name":{pattern:/(@param\s+)<[A-Z]\w*>/,lookbehind:!0,inside:{punctuation:/[.<>]/}},"code-section":[{pattern:/(\{@code\s+)(?:[^{}]|\{(?:[^{}]|\{(?:[^{}]|\{(?:[^{}]|\{[^{}]*\})*\})*\})*\})+?(?=\s*\})/,lookbehind:!0,inside:{code:{pattern:e,lookbehind:!0,inside:a.languages.java,alias:"language-java"}}},{pattern:/(<(code|pre|tt)>(?!)\s*)[\s\S]+?(?=\s*<\/\2>)/,lookbehind:!0,inside:{line:{pattern:e,lookbehind:!0,inside:{tag:a.languages.markup.tag,entity:a.languages.markup.entity,code:{pattern:/.+/,inside:a.languages.java,alias:"language-java"}}}}}],tag:a.languages.markup.tag,entity:a.languages.markup.entity}),a.languages.javadoclike.addSupport("java",a.languages.javadoc)}(Prism); +Prism.languages.javastacktrace={summary:{pattern:/^[\t ]*(?:(?:Caused by:|Suppressed:|Exception in thread "[^"]*")[\t ]+)?[\w$.]+(?:\:.*)?$/m,inside:{keyword:{pattern:/^(\s*)(?:(?:Caused by|Suppressed)(?=:)|Exception in thread)/m,lookbehind:!0},string:{pattern:/^(\s*)"[^"]*"/,lookbehind:!0},exceptions:{pattern:/^(:?\s*)[\w$.]+(?=:|$)/,lookbehind:!0,inside:{"class-name":/[\w$]+(?=$|:)/,namespace:/[a-z]\w*/,punctuation:/[.:]/}},message:{pattern:/(:\s*)\S.*/,lookbehind:!0,alias:"string"},punctuation:/[:]/}},"stack-frame":{pattern:/^[\t ]*at [\w$.]+(?:)?\([^()]*\)/m,inside:{keyword:{pattern:/^(\s*)at/,lookbehind:!0},source:[{pattern:/(\()\w+.\w+:\d+(?=\))/,lookbehind:!0,inside:{file:/^\w+\.\w+/,punctuation:/:/,"line-number":{pattern:/\d+/,alias:"number"}}},{pattern:/(\()[^()]*(?=\))/,lookbehind:!0,inside:{keyword:/^(?:Unknown Source|Native Method)$/}}],"class-name":/[\w$]+(?=\.(?:|[\w$]+)\()/,function:/(?:|[\w$]+)(?=\()/,namespace:/[a-z]\w*/,punctuation:/[.()]/}},more:{pattern:/^[\t ]*\.{3} \d+ [a-z]+(?: [a-z]+)*/m,inside:{punctuation:/\.{3}/,number:/\d+/,keyword:/\b[a-z]+(?: [a-z]+)*\b/}}}; +Prism.languages.jolie=Prism.languages.extend("clike",{keyword:/\b(?:include|define|is_defined|undef|main|init|outputPort|inputPort|Location|Protocol|Interfaces|RequestResponse|OneWay|type|interface|extender|throws|cset|csets|forward|Aggregates|Redirects|embedded|courier|execution|sequential|concurrent|single|scope|install|throw|comp|cH|default|global|linkIn|linkOut|synchronized|this|new|for|if|else|while|in|Jolie|Java|Javascript|nullProcess|spawn|constants|with|provide|until|exit|foreach|instanceof|over|service)\b/,builtin:/\b(?:undefined|string|int|void|long|Byte|bool|double|float|char|any)\b/,number:/(?:\b\d+\.?\d*|\B\.\d+)(?:e[+-]?\d+)?l?/i,operator:/-[-=>]?|\+[+=]?|<[<=]?|[>=*!]=?|&&|\|\||[:?\/%^]/,symbol:/[|;@]/,punctuation:/[,.]/,string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0}}),delete Prism.languages.jolie["class-name"],Prism.languages.insertBefore("jolie","keyword",{function:{pattern:/((?:\b(?:outputPort|inputPort|in|service|courier)\b|@)\s*)\w+/,lookbehind:!0},aggregates:{pattern:/(\bAggregates\s*:\s*)(?:\w+(?:\s+with\s+\w+)?\s*,\s*)*\w+(?:\s+with\s+\w+)?/,lookbehind:!0,inside:{"with-extension":{pattern:/\bwith\s+\w+/,inside:{keyword:/\bwith\b/}},function:{pattern:/\w+/},punctuation:{pattern:/,/}}},redirects:{pattern:/(\bRedirects\s*:\s*)(?:\w+\s*=>\s*\w+\s*,\s*)*(?:\w+\s*=>\s*\w+)/,lookbehind:!0,inside:{punctuation:{pattern:/,/},function:{pattern:/\w+/},symbol:{pattern:/=>/}}}}); +!function(e){var n="\\\\\\((?:[^()]|\\([^()]*\\))*\\)",t=RegExp('"(?:[^"\r\n\\\\]|\\\\[^\r\n(]|__)*"'.replace(/__/g,function(){return n})),i={interpolation:{pattern:RegExp("((?:^|[^\\\\])(?:\\\\{2})*)"+n),lookbehind:!0,inside:{content:{pattern:/^(\\\()[\s\S]+(?=\)$)/,lookbehind:!0,inside:null},punctuation:/^\\\(|\)$/}}},a=e.languages.jq={comment:/#.*/,property:{pattern:RegExp(t.source+"(?=\\s*:(?!:))"),greedy:!0,inside:i},string:{pattern:t,greedy:!0,inside:i},function:{pattern:/(\bdef\s+)[a-z_]\w+/i,lookbehind:!0},variable:/\B\$\w+/,"property-literal":{pattern:/\b[a-z_]\w*(?=\s*:(?!:))/i,alias:"property"},keyword:/\b(?:as|break|catch|def|elif|else|end|foreach|if|import|include|label|module|modulemeta|null|reduce|then|try|while)\b/,boolean:/\b(?:true|false)\b/,number:/(?:\b\d+\.|\B\.)?\b\d+(?:[eE][+-]?\d+)?\b/,operator:[{pattern:/\|=?/,alias:"pipe"},/\.\.|[!=<>]?=|\?\/\/|\/\/=?|[-+*/%]=?|[<>?]|\b(?:and|or|not)\b/],"c-style-function":{pattern:/\b[a-z_]\w*(?=\s*\()/i,alias:"function"},punctuation:/::|[()\[\]{},:;]|\.(?=\s*[\[\w$])/,dot:{pattern:/\./,alias:"important"}};i.interpolation.inside.content.inside=a}(Prism); +!function(e){e.languages.typescript=e.languages.extend("javascript",{"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|type)\s+)(?!keyof\b)[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?:\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},keyword:/\b(?:abstract|as|asserts|async|await|break|case|catch|class|const|constructor|continue|debugger|declare|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|is|keyof|let|module|namespace|new|null|of|package|private|protected|public|readonly|return|require|set|static|super|switch|this|throw|try|type|typeof|undefined|var|void|while|with|yield)\b/,builtin:/\b(?:string|Function|any|number|boolean|Array|symbol|console|Promise|unknown|never)\b/}),delete e.languages.typescript.parameter;var n=e.languages.extend("typescript",{});delete n["class-name"],e.languages.typescript["class-name"].inside=n,e.languages.insertBefore("typescript","function",{"generic-function":{pattern:/#?[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,greedy:!0,inside:{function:/^#?[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:n}}}}),e.languages.ts=e.languages.typescript}(Prism); +!function(e){var a=e.languages.javascript,n="{(?:[^{}]|{(?:[^{}]|{[^{}]*})*})+}",t="(@(?:param|arg|argument|property)\\s+(?:"+n+"\\s+)?)";e.languages.jsdoc=e.languages.extend("javadoclike",{parameter:{pattern:RegExp(t+"[$\\w\\xA0-\\uFFFF.]+(?=\\s|$)"),lookbehind:!0,inside:{punctuation:/\./}}}),e.languages.insertBefore("jsdoc","keyword",{"optional-parameter":{pattern:RegExp(t+"\\[[$\\w\\xA0-\\uFFFF.]+(?:=[^[\\]]+)?\\](?=\\s|$)"),lookbehind:!0,inside:{parameter:{pattern:/(^\[)[$\w\xA0-\uFFFF\.]+/,lookbehind:!0,inside:{punctuation:/\./}},code:{pattern:/(=)[\s\S]*(?=\]$)/,lookbehind:!0,inside:a,alias:"language-javascript"},punctuation:/[=[\]]/}},"class-name":[{pattern:RegExp("(@(?:augments|extends|class|interface|memberof!?|template|this|typedef)\\s+(?:\\s+)?)[A-Z]\\w*(?:\\.[A-Z]\\w*)*".replace(//g,function(){return n})),lookbehind:!0,inside:{punctuation:/\./}},{pattern:RegExp("(@[a-z]+\\s+)"+n),lookbehind:!0,inside:{string:a.string,number:a.number,boolean:a.boolean,keyword:e.languages.typescript.keyword,operator:/=>|\.\.\.|[&|?:*]/,punctuation:/[.,;=<>{}()[\]]/}}],example:{pattern:/(@example\s+)[^@]+?(?=\s*(?:\*\s*)?(?:@\w|\*\/))/,lookbehind:!0,inside:{code:{pattern:/^(\s*(?:\*\s*)?).+$/m,lookbehind:!0,inside:a,alias:"language-javascript"}}}}),e.languages.javadoclike.addSupport("javascript",e.languages.jsdoc)}(Prism); +!function(a){function e(a,e){return RegExp(a.replace(//g,function(){return"[_$a-zA-Z\\xA0-\\uFFFF][$\\w\\xA0-\\uFFFF]*"}),e)}a.languages.insertBefore("javascript","function-variable",{"method-variable":{pattern:RegExp("(\\.\\s*)"+a.languages.javascript["function-variable"].pattern.source),lookbehind:!0,alias:["function-variable","method","function","property-access"]}}),a.languages.insertBefore("javascript","function",{method:{pattern:RegExp("(\\.\\s*)"+a.languages.javascript.function.source),lookbehind:!0,alias:["function","property-access"]}}),a.languages.insertBefore("javascript","constant",{"known-class-name":[{pattern:/\b(?:(?:(?:Uint|Int)(?:8|16|32)|Uint8Clamped|Float(?:32|64))?Array|ArrayBuffer|BigInt|Boolean|DataView|Date|Error|Function|Intl|JSON|Math|Number|Object|Promise|Proxy|Reflect|RegExp|String|Symbol|(?:Weak)?(?:Set|Map)|WebAssembly)\b/,alias:"class-name"},{pattern:/\b(?:[A-Z]\w*)Error\b/,alias:"class-name"}]}),a.languages.insertBefore("javascript","keyword",{imports:{pattern:e("(\\bimport\\b\\s*)(?:(?:\\s*,\\s*(?:\\*\\s*as\\s+|\\{[^{}]*\\}))?|\\*\\s*as\\s+|\\{[^{}]*\\})(?=\\s*\\bfrom\\b)"),lookbehind:!0,inside:a.languages.javascript},exports:{pattern:e("(\\bexport\\b\\s*)(?:\\*(?:\\s*as\\s+)?(?=\\s*\\bfrom\\b)|\\{[^{}]*\\})"),lookbehind:!0,inside:a.languages.javascript}}),a.languages.javascript.keyword.unshift({pattern:/\b(?:as|default|export|from|import)\b/,alias:"module"},{pattern:/\b(?:await|break|catch|continue|do|else|for|finally|if|return|switch|throw|try|while|yield)\b/,alias:"control-flow"},{pattern:/\bnull\b/,alias:["null","nil"]},{pattern:/\bundefined\b/,alias:"nil"}),a.languages.insertBefore("javascript","operator",{spread:{pattern:/\.{3}/,alias:"operator"},arrow:{pattern:/=>/,alias:"operator"}}),a.languages.insertBefore("javascript","punctuation",{"property-access":{pattern:e("(\\.\\s*)#?"),lookbehind:!0},"maybe-class-name":{pattern:/(^|[^$\w\xA0-\uFFFF])[A-Z][$\w\xA0-\uFFFF]+/,lookbehind:!0},dom:{pattern:/\b(?:document|location|navigator|performance|(?:local|session)Storage|window)\b/,alias:"variable"},console:{pattern:/\bconsole(?=\s*\.)/,alias:"class-name"}});for(var t=["function","function-variable","method","method-variable","property-access"],r=0;r|.*(?:node_modules|\(\\)|\(\|\$|\(internal\/|\(node\.js)).*/m,alias:"comment"},filename:{pattern:/(\bat\s+|\()(?:[a-zA-Z]:)?[^():]+(?=:)/,lookbehind:!0,alias:"url"},function:{pattern:/(at\s+(?:new\s+)?)[_$a-zA-Z\xA0-\uFFFF<][.$\w\xA0-\uFFFF<>]*/,lookbehind:!0,inside:{punctuation:/\./}},punctuation:/[()]/,keyword:/\b(?:at|new)\b/,alias:{pattern:/\[(?:as\s+)?[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*\]/,alias:"variable"},"line-number":{pattern:/:[0-9]+(?::[0-9]+)?\b/,alias:"number",inside:{punctuation:/:/}}}}}; +!function(u){var e=u.languages.javascript["template-string"],n=e.pattern.source,a=e.inside.interpolation,i=a.inside["interpolation-punctuation"],r=a.pattern.source;function t(e,t){if(u.languages[e])return{pattern:RegExp("((?:"+t+")\\s*)"+n),lookbehind:!0,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},"embedded-code":{pattern:/[\s\S]+/,alias:e}}}}function o(e,t,n){var r={code:e,grammar:t,language:n};return u.hooks.run("before-tokenize",r),r.tokens=u.tokenize(r.code,r.grammar),u.hooks.run("after-tokenize",r),r.tokens}function d(e){var t={};t["interpolation-punctuation"]=i;var n=u.tokenize(e,t);if(3===n.length){var r=[1,1];r.push.apply(r,o(n[1],u.languages.javascript,"javascript")),n.splice.apply(n,r)}return new u.Token("interpolation",n,a.alias,e)}function c(a,e,i){var t=u.tokenize(a,{interpolation:{pattern:RegExp(r),lookbehind:!0}}),f=0,y={},n=o(t.map(function(e){if("string"==typeof e)return e;for(var t,n=e.content;-1!==a.indexOf((r=f++,t="___"+i.toUpperCase()+"_"+r+"___")););return y[t]=n,t;var r}).join(""),e,i),v=Object.keys(y);return f=0,function e(t){for(var n=0;n=v.length)return;var r=t[n];if("string"==typeof r||"string"==typeof r.content){var a=v[f],i="string"==typeof r?r:r.content,o=i.indexOf(a);if(-1!==o){++f;var s=i.substring(0,o),p=d(y[a]),l=i.substring(o+a.length),g=[];if(s&&g.push(s),g.push(p),l){var u=[l];e(u),g.push.apply(g,u)}"string"==typeof r?(t.splice.apply(t,[n,1].concat(g)),n+=g.length-1):r.content=g}}else{var c=r.content;Array.isArray(c)?e(c):e([c])}}}(n),new u.Token(i,n,"language-"+i,a)}u.languages.javascript["template-string"]=[t("css","\\b(?:styled(?:\\([^)]*\\))?(?:\\s*\\.\\s*\\w+(?:\\([^)]*\\))*)*|css(?:\\s*\\.\\s*(?:global|resolve))?|createGlobalStyle|keyframes)"),t("html","\\bhtml|\\.\\s*(?:inner|outer)HTML\\s*\\+?="),t("svg","\\bsvg"),t("markdown","\\b(?:md|markdown)"),t("graphql","\\b(?:gql|graphql(?:\\s*\\.\\s*experimental)?)"),e].filter(Boolean);var s={javascript:!0,js:!0,typescript:!0,ts:!0,jsx:!0,tsx:!0};function f(e){return"string"==typeof e?e:Array.isArray(e)?e.map(f).join(""):f(e.content)}u.hooks.add("after-tokenize",function(e){e.language in s&&!function e(t){for(var n=0,r=t.length;n]?|<(?:<=?|[=:|])?|>(?:=|>>?=?)?|==?=?|[~≠≤≥'√∛]/,punctuation:/::?|[{}[\]();,.?]/,constant:/\b(?:(?:NaN|Inf)(?:16|32|64)?|im|pi|e|catalan|eulergamma|golden)\b|[πℯγφ]/}; +Prism.languages.keyman={comment:/\bc\s.*/i,function:/\[\s*(?:(?:CTRL|SHIFT|ALT|LCTRL|RCTRL|LALT|RALT|CAPS|NCAPS)\s+)*(?:[TKU]_[\w?]+|".+?"|'.+?')\s*\]/i,string:/("|').*?\1/,bold:[/&(?:baselayout|bitmap|capsononly|capsalwaysoff|shiftfreescaps|copyright|ethnologuecode|hotkey|includecodes|keyboardversion|kmw_embedcss|kmw_embedjs|kmw_helpfile|kmw_helptext|kmw_rtl|language|layer|layoutfile|message|mnemoniclayout|name|oldcharposmatching|platform|targets|version|visualkeyboard|windowslanguages)\b/i,/\b(?:bitmap|bitmaps|caps on only|caps always off|shift frees caps|copyright|hotkey|language|layout|message|name|version)\b/i],keyword:/\b(?:any|baselayout|beep|call|context|deadkey|dk|if|index|layer|notany|nul|outs|platform|return|reset|save|set|store|use)\b/i,atrule:/\b(?:ansi|begin|unicode|group|using keys|match|nomatch)\b/i,number:/\b(?:U\+[\dA-F]+|d\d+|x[\da-f]+|\d+)\b/i,operator:/[+>\\,()]/,tag:/\$(?:keyman|kmfl|weaver|keymanweb|keymanonly):/i}; +!function(n){n.languages.kotlin=n.languages.extend("clike",{keyword:{pattern:/(^|[^.])\b(?:abstract|actual|annotation|as|break|by|catch|class|companion|const|constructor|continue|crossinline|data|do|dynamic|else|enum|expect|external|final|finally|for|fun|get|if|import|in|infix|init|inline|inner|interface|internal|is|lateinit|noinline|null|object|open|operator|out|override|package|private|protected|public|reified|return|sealed|set|super|suspend|tailrec|this|throw|to|try|typealias|val|var|vararg|when|where|while)\b/,lookbehind:!0},function:[/\w+(?=\s*\()/,{pattern:/(\.)\w+(?=\s*\{)/,lookbehind:!0}],number:/\b(?:0[xX][\da-fA-F]+(?:_[\da-fA-F]+)*|0[bB][01]+(?:_[01]+)*|\d+(?:_\d+)*(?:\.\d+(?:_\d+)*)?(?:[eE][+-]?\d+(?:_\d+)*)?[fFL]?)\b/,operator:/\+[+=]?|-[-=>]?|==?=?|!(?:!|==?)?|[\/*%<>]=?|[?:]:?|\.\.|&&|\|\||\b(?:and|inv|or|shl|shr|ushr|xor)\b/}),delete n.languages.kotlin["class-name"],n.languages.insertBefore("kotlin","string",{"raw-string":{pattern:/("""|''')[\s\S]*?\1/,alias:"string"}}),n.languages.insertBefore("kotlin","keyword",{annotation:{pattern:/\B@(?:\w+:)?(?:[A-Z]\w*|\[[^\]]+\])/,alias:"builtin"}}),n.languages.insertBefore("kotlin","function",{label:{pattern:/\w+@|@\w+/,alias:"symbol"}});var e=[{pattern:/\$\{[^}]+\}/,inside:{delimiter:{pattern:/^\$\{|\}$/,alias:"variable"},rest:n.languages.kotlin}},{pattern:/\$\w+/,alias:"variable"}];n.languages.kotlin.string.inside=n.languages.kotlin["raw-string"].inside={interpolation:e},n.languages.kt=n.languages.kotlin,n.languages.kts=n.languages.kotlin}(Prism); +!function(a){var e=/\\(?:[^a-z()[\]]|[a-z*]+)/i,n={"equation-command":{pattern:e,alias:"regex"}};a.languages.latex={comment:/%.*/m,cdata:{pattern:/(\\begin\{((?:verbatim|lstlisting)\*?)\})[\s\S]*?(?=\\end\{\2\})/,lookbehind:!0},equation:[{pattern:/\$\$(?:\\[\s\S]|[^\\$])+\$\$|\$(?:\\[\s\S]|[^\\$])+\$|\\\([\s\S]*?\\\)|\\\[[\s\S]*?\\\]/,inside:n,alias:"string"},{pattern:/(\\begin\{((?:equation|math|eqnarray|align|multline|gather)\*?)\})[\s\S]*?(?=\\end\{\2\})/,lookbehind:!0,inside:n,alias:"string"}],keyword:{pattern:/(\\(?:begin|end|ref|cite|label|usepackage|documentclass)(?:\[[^\]]+\])?\{)[^}]+(?=\})/,lookbehind:!0},url:{pattern:/(\\url\{)[^}]+(?=\})/,lookbehind:!0},headline:{pattern:/(\\(?:part|chapter|section|subsection|frametitle|subsubsection|paragraph|subparagraph|subsubparagraph|subsubsubparagraph)\*?(?:\[[^\]]+\])?\{)[^}]+(?=\}(?:\[[^\]]+\])?)/,lookbehind:!0,alias:"class-name"},function:{pattern:e,alias:"selector"},punctuation:/[[\]{}&]/},a.languages.tex=a.languages.latex,a.languages.context=a.languages.latex}(Prism); +!function(t){t.languages.latte={comment:/^\{\*[\s\S]*/,ld:{pattern:/^\{(?:[=_]|\/?(?!\d|\w+\()\w+|)/,inside:{punctuation:/^\{\/?/,tag:{pattern:/.+/,alias:"important"}}},rd:{pattern:/\}$/,inside:{punctuation:/.+/}},php:{pattern:/\S(?:[\s\S]*\S)?/,alias:"language-php",inside:t.languages.php}};var e=t.languages.extend("markup",{});t.languages.insertBefore("inside","attr-value",{"n-attr":{pattern:/n:[\w-]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+))?/,inside:{"attr-name":{pattern:/^[^\s=]+/,alias:"important"},"attr-value":{pattern:/=[\s\S]+/,inside:{punctuation:[/^=/,{pattern:/^(\s*)["']|["']$/,lookbehind:!0}],php:{pattern:/\S(?:[\s\S]*\S)?/,inside:t.languages.php}}}}}},e.tag),t.hooks.add("before-tokenize",function(a){if("latte"===a.language){t.languages["markup-templating"].buildPlaceholders(a,"latte",/\{\*[\s\S]*?\*\}|\{[^'"\s{}*](?:[^"'/{}]|\/(?![*/])|("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|\/\*[\s\S]*?\*\/)*?\}/g),a.grammar=e}}),t.hooks.add("after-tokenize",function(a){t.languages["markup-templating"].tokenizePlaceholders(a,"latte")})}(Prism); +Prism.languages.less=Prism.languages.extend("css",{comment:[/\/\*[\s\S]*?\*\//,{pattern:/(^|[^\\])\/\/.*/,lookbehind:!0}],atrule:{pattern:/@[\w-]+?(?:\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};])*?(?=\s*\{)/,inside:{punctuation:/[:()]/}},selector:{pattern:/(?:@\{[\w-]+\}|[^{};\s@])(?:@\{[\w-]+\}|\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};@])*?(?=\s*\{)/,inside:{variable:/@+[\w-]+/}},property:/(?:@\{[\w-]+\}|[\w-])+(?:\+_?)?(?=\s*:)/i,operator:/[+\-*\/]/}),Prism.languages.insertBefore("less","property",{variable:[{pattern:/@[\w-]+\s*:/,inside:{punctuation:/:/}},/@@?[\w-]+/],"mixin-usage":{pattern:/([{;]\s*)[.#](?!\d)[\w-]+.*?(?=[(;])/,lookbehind:!0,alias:"function"}}); +Prism.languages.scheme={comment:/;.*/,string:{pattern:/"(?:[^"\\]|\\.)*"/,greedy:!0},symbol:{pattern:/'[^()#'\s]+/,greedy:!0},character:{pattern:/#\\(?:[ux][a-fA-F\d]+|[-a-zA-Z]+|\S)/,greedy:!0,alias:"string"},"lambda-parameter":[{pattern:/(\(lambda\s+)[^()'\s]+/,lookbehind:!0},{pattern:/(\(lambda\s+\()[^()']+/,lookbehind:!0}],keyword:{pattern:/(\()(?:define(?:-library|-macro|-syntax|-values)?|defmacro|(?:case-)?lambda|let(?:(?:\*|rec)?(?:-values)?|-syntax|rec-syntax)|else|if|cond|begin|delay(?:-force)?|parameterize|guard|set!|(?:quasi-)?quote|syntax-(?:case|rules))(?=[()\s]|$)/,lookbehind:!0},builtin:{pattern:/(\()(?:(?:cons|car|cdr|list|call-with-current-continuation|call\/cc|append|abs|apply|eval)\b|null\?|pair\?|boolean\?|eof-object\?|char\?|procedure\?|number\?|port\?|string\?|vector\?|symbol\?|bytevector\?)(?=[()\s]|$)/,lookbehind:!0},number:{pattern:/(^|[\s()])(?:(?:#d(?:#[ei])?|#[ei](?:#d)?)?[+-]?(?:(?:\d*\.?\d+(?:[eE][+-]?\d+)?|\d+\/\d+)(?:[+-](?:\d*\.?\d+(?:[eE][+-]?\d+)?|\d+\/\d+)i)?|(?:\d*\.?\d+(?:[eE][+-]?\d+)?|\d+\/\d+)i)|(?:#[box](?:#[ei])?|#[ei](?:#[box])?)[+-]?(?:[\da-fA-F]+(?:\/[\da-fA-F]+)?(?:[+-][\da-fA-F]+(?:\/[\da-fA-F]+)?i)?|[\da-fA-F]+(?:\/[\da-fA-F]+)?i))(?=[()\s]|$)/,lookbehind:!0},boolean:{pattern:/(^|[\s()])#[ft](?=[()\s]|$)/,lookbehind:!0},operator:{pattern:/(\()(?:[-+*%\/]|[<>]=?|=>?)(?=[()\s]|$)/,lookbehind:!0},function:{pattern:/(\()[^()'\s]+(?=[()\s]|$)/,lookbehind:!0},punctuation:/[()']/}; +!function(e){for(var n='\\((?:[^();"#\\\\]|\\\\[^]|;.*(?!.)|"(?:[^"\\\\]|\\\\.)*"|#(?:\\{(?:(?!#\\})[^])*#\\}|[^{])|)*\\)',i=0;i<5;i++)n=n.replace(//g,function(){return n});n=n.replace(//g,"[^\\s\\S]");var d=e.languages.lilypond={comment:/%(?:(?!\{).*|\{[\s\S]*?%\})/,"embedded-scheme":{pattern:RegExp('(^|[=\\s])#(?:"(?:[^"\\\\]|\\\\.)*"|[^\\s()"]*(?:[^\\s()]|))'.replace(//g,function(){return n}),"m"),lookbehind:!0,greedy:!0,inside:{scheme:{pattern:/^(#)[\s\S]+$/,lookbehind:!0,alias:"language-scheme",inside:{"embedded-lilypond":{pattern:/#\{[\s\S]*?#\}/,greedy:!0,inside:{punctuation:/^#\{|#\}$/,lilypond:{pattern:/[\s\S]+/,alias:"language-lilypond",inside:null}}},rest:e.languages.scheme}},punctuation:/#/}},string:{pattern:/"(?:[^"\\]|\\.)*"/,greedy:!0},"class-name":{pattern:/(\\new\s+)[\w-]+/,lookbehind:!0},keyword:{pattern:/\\[a-z][-\w]*/i,inside:{punctuation:/^\\/}},operator:/[=|]|<<|>>/,punctuation:{pattern:/(^|[a-z\d])(?:'+|,+|[_^]?-[_^]?(?:[-+^!>._]|(?=\d))|[_^]\.?|[.!])|[{}()[\]<>^~]|\\[()[\]<>\\!]|--|__/,lookbehind:!0},number:/\b\d+(?:\/\d+)?\b/};d["embedded-scheme"].inside.scheme.inside["embedded-lilypond"].inside.lilypond.inside=d,e.languages.ly=d}(Prism); +Prism.languages.liquid={keyword:/\b(?:comment|endcomment|if|elsif|else|endif|unless|endunless|for|endfor|case|endcase|when|in|break|assign|continue|limit|offset|range|reversed|raw|endraw|capture|endcapture|tablerow|endtablerow)\b/,number:/\b0b[01]+\b|\b0x[\da-f]*\.?[\da-fp-]+\b|(?:\b\d+\.?\d*|\B\.\d+)(?:e[+-]?\d+)?[df]?/i,operator:{pattern:/(^|[^.])(?:\+[+=]?|-[-=]?|!=?|<>?>?=?|==?|&[&=]?|\|[|=]?|\*=?|\/=?|%=?|\^=?|[?:~])/m,lookbehind:!0},function:{pattern:/(^|[\s;|&])(?:append|prepend|capitalize|cycle|cols|increment|decrement|abs|at_least|at_most|ceil|compact|concat|date|default|divided_by|downcase|escape|escape_once|first|floor|join|last|lstrip|map|minus|modulo|newline_to_br|plus|remove|remove_first|replace|replace_first|reverse|round|rstrip|size|slice|sort|sort_natural|split|strip|strip_html|strip_newlines|times|truncate|truncatewords|uniq|upcase|url_decode|url_encode|include|paginate)(?=$|[\s;|&])/,lookbehind:!0}}; +!function(e){function n(e){return RegExp("(\\()"+e+"(?=[\\s\\)])")}function a(e){return RegExp("([\\s([])"+e+"(?=[\\s)])")}var t="[-+*/_~!@$%^=<>{}\\w]+",r="(\\()",i="(?=\\))",s="(?=\\s)",o={heading:{pattern:/;;;.*/,alias:["comment","title"]},comment:/;.*/,string:{pattern:/"(?:[^"\\]|\\.)*"/,greedy:!0,inside:{argument:/[-A-Z]+(?=[.,\s])/,symbol:RegExp("`"+t+"'")}},"quoted-symbol":{pattern:RegExp("#?'"+t),alias:["variable","symbol"]},"lisp-property":{pattern:RegExp(":"+t),alias:"property"},splice:{pattern:RegExp(",@?"+t),alias:["symbol","variable"]},keyword:[{pattern:RegExp(r+"(?:(?:lexical-)?let\\*?|(?:cl-)?letf|if|when|while|unless|cons|cl-loop|and|or|not|cond|setq|error|message|null|require|provide|use-package)"+s),lookbehind:!0},{pattern:RegExp(r+"(?:for|do|collect|return|finally|append|concat|in|by)"+s),lookbehind:!0}],declare:{pattern:n("declare"),lookbehind:!0,alias:"keyword"},interactive:{pattern:n("interactive"),lookbehind:!0,alias:"keyword"},boolean:{pattern:a("(?:t|nil)"),lookbehind:!0},number:{pattern:a("[-+]?\\d+(?:\\.\\d*)?"),lookbehind:!0},defvar:{pattern:RegExp(r+"def(?:var|const|custom|group)\\s+"+t),lookbehind:!0,inside:{keyword:/^def[a-z]+/,variable:RegExp(t)}},defun:{pattern:RegExp(r+"(?:cl-)?(?:defun\\*?|defmacro)\\s+"+t+"\\s+\\([\\s\\S]*?\\)"),lookbehind:!0,inside:{keyword:/^(?:cl-)?def\S+/,arguments:null,function:{pattern:RegExp("(^\\s)"+t),lookbehind:!0},punctuation:/[()]/}},lambda:{pattern:RegExp(r+"lambda\\s+\\((?:&?"+t+"\\s*)*\\)"),lookbehind:!0,inside:{keyword:/^lambda/,arguments:null,punctuation:/[()]/}},car:{pattern:RegExp(r+t),lookbehind:!0},punctuation:[/(?:['`,]?\(|[)\[\]])/,{pattern:/(\s)\.(?=\s)/,lookbehind:!0}]},l={"lisp-marker":RegExp("&[-+*/_~!@$%^=<>{}\\w]+"),rest:{argument:{pattern:RegExp(t),alias:"variable"},varform:{pattern:RegExp(r+t+"\\s+\\S[\\s\\S]*"+i),lookbehind:!0,inside:{string:o.string,boolean:o.boolean,number:o.number,symbol:o.symbol,punctuation:/[()]/}}}},p="\\S+(?:\\s+\\S+)*",d={pattern:RegExp(r+"[\\s\\S]*"+i),lookbehind:!0,inside:{"rest-vars":{pattern:RegExp("&(?:rest|body)\\s+"+p),inside:l},"other-marker-vars":{pattern:RegExp("&(?:optional|aux)\\s+"+p),inside:l},keys:{pattern:RegExp("&key\\s+"+p+"(?:\\s+&allow-other-keys)?"),inside:l},argument:{pattern:RegExp(t),alias:"variable"},punctuation:/[()]/}};o.lambda.inside.arguments=d,o.defun.inside.arguments=e.util.clone(d),o.defun.inside.arguments.inside.sublist=d,e.languages.lisp=o,e.languages.elisp=o,e.languages.emacs=o,e.languages["emacs-lisp"]=o}(Prism); +Prism.languages.livescript={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?\*\//,lookbehind:!0},{pattern:/(^|[^\\])#.*/,lookbehind:!0}],"interpolated-string":{pattern:/(^|[^"])("""|")(?:\\[\s\S]|(?!\2)[^\\])*\2(?!")/,lookbehind:!0,greedy:!0,inside:{variable:{pattern:/(^|[^\\])#[a-z_](?:-?[a-z]|[\d_])*/m,lookbehind:!0},interpolation:{pattern:/(^|[^\\])#\{[^}]+\}/m,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^#\{|\}$/,alias:"variable"}}},string:/[\s\S]+/}},string:[{pattern:/('''|')(?:\\[\s\S]|(?!\1)[^\\])*\1/,greedy:!0},{pattern:/<\[[\s\S]*?\]>/,greedy:!0},/\\[^\s,;\])}]+/],regex:[{pattern:/\/\/(?:\[[^\r\n\]]*\]|\\.|(?!\/\/)[^\\\[])+\/\/[gimyu]{0,5}/,greedy:!0,inside:{comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0}}},{pattern:/\/(?:\[[^\r\n\]]*\]|\\.|[^/\\\r\n\[])+\/[gimyu]{0,5}/,greedy:!0}],keyword:{pattern:/(^|(?!-).)\b(?:break|case|catch|class|const|continue|default|do|else|extends|fallthrough|finally|for(?: ever)?|function|if|implements|it|let|loop|new|null|otherwise|own|return|super|switch|that|then|this|throw|try|unless|until|var|void|when|while|yield)(?!-)\b/m,lookbehind:!0},"keyword-operator":{pattern:/(^|[^-])\b(?:(?:delete|require|typeof)!|(?:and|by|delete|export|from|import(?: all)?|in|instanceof|is(?:nt| not)?|not|of|or|til|to|typeof|with|xor)(?!-)\b)/m,lookbehind:!0,alias:"operator"},boolean:{pattern:/(^|[^-])\b(?:false|no|off|on|true|yes)(?!-)\b/m,lookbehind:!0},argument:{pattern:/(^|(?!\.&\.)[^&])&(?!&)\d*/m,lookbehind:!0,alias:"variable"},number:/\b(?:\d+~[\da-z]+|\d[\d_]*(?:\.\d[\d_]*)?(?:[a-z]\w*)?)/i,identifier:/[a-z_](?:-?[a-z]|[\d_])*/i,operator:[{pattern:/( )\.(?= )/,lookbehind:!0},/\.(?:[=~]|\.\.?)|\.(?:[&|^]|<<|>>>?)\.|:(?:=|:=?)|&&|\|[|>]|<(?:<[>=?]?|-(?:->?|>)?|\+\+?|@@?|%%?|\*\*?|!(?:~?=|--?>|~?~>)?|~(?:~?>|=)?|==?|\^\^?|[\/?]/],punctuation:/[(){}\[\]|.,:;`]/},Prism.languages.livescript["interpolated-string"].inside.interpolation.inside.rest=Prism.languages.livescript; +Prism.languages.llvm={comment:/;.*/,string:{pattern:/"[^"]*"/,greedy:!0},boolean:/\b(?:true|false)\b/,variable:/[%@!#](?:(?!\d)(?:[-$.\w]|\\[a-f\d]{2})+|\d+)/i,label:/(?!\d)(?:[-$.\w]|\\[a-f\d]{2})+:/i,type:{pattern:/\b(?:double|float|fp128|half|i[1-9]\d*|label|metadata|ppc_fp128|token|void|x86_fp80|x86_mmx)\b/,alias:"class-name"},keyword:/\b[a-z_][a-z_0-9]*\b/,number:/[+-]?\b\d+(?:\.\d+)?(?:[eE][+-]?\d+)?\b|\b0x[\dA-Fa-f]+\b|\b0xK[\dA-Fa-f]{20}\b|\b0x[ML][\dA-Fa-f]{32}\b|\b0xH[\dA-Fa-f]{4}\b/,punctuation:/[{}[\];(),.!*=<>]/}; +Prism.languages.lolcode={comment:[/\bOBTW\s+[\s\S]*?\s+TLDR\b/,/\bBTW.+/],string:{pattern:/"(?::.|[^":])*"/,inside:{variable:/:\{[^}]+\}/,symbol:[/:\([a-f\d]+\)/i,/:\[[^\]]+\]/,/:[)>o":]/]},greedy:!0},number:/(?:\B-)?(?:\b\d+\.?\d*|\B\.\d+)/,symbol:{pattern:/(^|\s)(?:A )?(?:YARN|NUMBR|NUMBAR|TROOF|BUKKIT|NOOB)(?=\s|,|$)/,lookbehind:!0,inside:{keyword:/A(?=\s)/}},label:{pattern:/((?:^|\s)(?:IM IN YR|IM OUTTA YR) )[a-zA-Z]\w*/,lookbehind:!0,alias:"string"},function:{pattern:/((?:^|\s)(?:I IZ|HOW IZ I|IZ) )[a-zA-Z]\w*/,lookbehind:!0},keyword:[{pattern:/(^|\s)(?:O HAI IM|KTHX|HAI|KTHXBYE|I HAS A|ITZ(?: A)?|R|AN|MKAY|SMOOSH|MAEK|IS NOW(?: A)?|VISIBLE|GIMMEH|O RLY\?|YA RLY|NO WAI|OIC|MEBBE|WTF\?|OMG|OMGWTF|GTFO|IM IN YR|IM OUTTA YR|FOUND YR|YR|TIL|WILE|UPPIN|NERFIN|I IZ|HOW IZ I|IF U SAY SO|SRS|HAS A|LIEK(?: A)?|IZ)(?=\s|,|$)/,lookbehind:!0},/'Z(?=\s|,|$)/],boolean:{pattern:/(^|\s)(?:WIN|FAIL)(?=\s|,|$)/,lookbehind:!0},variable:{pattern:/(^|\s)IT(?=\s|,|$)/,lookbehind:!0},operator:{pattern:/(^|\s)(?:NOT|BOTH SAEM|DIFFRINT|(?:SUM|DIFF|PRODUKT|QUOSHUNT|MOD|BIGGR|SMALLR|BOTH|EITHER|WON|ALL|ANY) OF)(?=\s|,|$)/,lookbehind:!0},punctuation:/\.{3}|…|,|!/}; +Prism.languages.makefile={comment:{pattern:/(^|[^\\])#(?:\\(?:\r\n|[\s\S])|[^\\\r\n])*/,lookbehind:!0},string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},builtin:/\.[A-Z][^:#=\s]+(?=\s*:(?!=))/,symbol:{pattern:/^[^:=\r\n]+(?=\s*:(?!=))/m,inside:{variable:/\$+(?:[^(){}:#=\s]+|(?=[({]))/}},variable:/\$+(?:[^(){}:#=\s]+|\([@*%<^+?][DF]\)|(?=[({]))/,keyword:[/-include\b|\b(?:define|else|endef|endif|export|ifn?def|ifn?eq|include|override|private|sinclude|undefine|unexport|vpath)\b/,{pattern:/(\()(?:addsuffix|abspath|and|basename|call|dir|error|eval|file|filter(?:-out)?|findstring|firstword|flavor|foreach|guile|if|info|join|lastword|load|notdir|or|origin|patsubst|realpath|shell|sort|strip|subst|suffix|value|warning|wildcard|word(?:s|list)?)(?=[ \t])/,lookbehind:!0}],operator:/(?:::|[?:+!])?=|[|@]/,punctuation:/[:;(){}]/}; +!function(d){function n(n){return n=n.replace(//g,function(){return"(?:\\\\.|[^\\\\\n\r]|(?:\n|\r\n?)(?!\n|\r\n?))"}),RegExp("((?:^|[^\\\\])(?:\\\\{2})*)(?:"+n+")")}var e="(?:\\\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\\\|\r\n`])+",t="\\|?__(?:\\|__)+\\|?(?:(?:\n|\r\n?)|$)".replace(/__/g,function(){return e}),a="\\|?[ \t]*:?-{3,}:?[ \t]*(?:\\|[ \t]*:?-{3,}:?[ \t]*)+\\|?(?:\n|\r\n?)";d.languages.markdown=d.languages.extend("markup",{}),d.languages.insertBefore("markdown","prolog",{blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+t+a+"(?:"+t+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+t+a+")(?:"+t+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(e),inside:d.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+t+")"+a+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+t+"$"),inside:{"table-header":{pattern:RegExp(e),alias:"important",inside:d.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/``.+?``|`[^`\r\n]+`/,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#+.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:n("\\b__(?:(?!_)|_(?:(?!_))+_)+__\\b|\\*\\*(?:(?!\\*)|\\*(?:(?!\\*))+\\*)+\\*\\*"),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:n("\\b_(?:(?!_)|__(?:(?!_))+__)+_\\b|\\*(?:(?!\\*)|\\*\\*(?:(?!\\*))+\\*\\*)+\\*"),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:n("(~~?)(?:(?!~))+?\\2"),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},url:{pattern:n('!?\\[(?:(?!\\]))+\\](?:\\([^\\s)]+(?:[\t ]+"(?:\\\\.|[^"\\\\])*")?\\)| ?\\[(?:(?!\\]))+\\])'),lookbehind:!0,greedy:!0,inside:{variable:{pattern:/(\[)[^\]]+(?=\]$)/,lookbehind:!0},content:{pattern:/(^!?\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},string:{pattern:/"(?:\\.|[^"\\])*"(?=\)$)/}}}}),["url","bold","italic","strike"].forEach(function(e){["url","bold","italic","strike"].forEach(function(n){e!==n&&(d.languages.markdown[e].inside.content.inside[n]=d.languages.markdown[n])})}),d.hooks.add("after-tokenize",function(n){"markdown"!==n.language&&"md"!==n.language||!function n(e){if(e&&"string"!=typeof e)for(var t=0,a=e.length;t=~]=?|&&?|\|\|?/,punctuation:/\.{3}|[.,;\[\](){}!]/}; +Prism.languages.mel={comment:/\/\/.*/,code:{pattern:/`(?:\\.|[^\\`\r\n])*`/,greedy:!0,alias:"italic",inside:{delimiter:{pattern:/^`|`$/,alias:"punctuation"}}},string:{pattern:/"(?:\\.|[^\\"\r\n])*"/,greedy:!0},variable:/\$\w+/,number:/\b0x[\da-fA-F]+\b|\b\d+\.?\d*|\B\.\d+/,flag:{pattern:/-[^\d\W]\w*/,alias:"operator"},keyword:/\b(?:break|case|continue|default|do|else|float|for|global|if|in|int|matrix|proc|return|string|switch|vector|while)\b/,function:/\w+(?=\()|\b(?:about|abs|addAttr|addAttributeEditorNodeHelp|addDynamic|addNewShelfTab|addPP|addPanelCategory|addPrefixToName|advanceToNextDrivenKey|affectedNet|affects|aimConstraint|air|alias|aliasAttr|align|alignCtx|alignCurve|alignSurface|allViewFit|ambientLight|angle|angleBetween|animCone|animCurveEditor|animDisplay|animView|annotate|appendStringArray|applicationName|applyAttrPreset|applyTake|arcLenDimContext|arcLengthDimension|arclen|arrayMapper|art3dPaintCtx|artAttrCtx|artAttrPaintVertexCtx|artAttrSkinPaintCtx|artAttrTool|artBuildPaintMenu|artFluidAttrCtx|artPuttyCtx|artSelectCtx|artSetPaintCtx|artUserPaintCtx|assignCommand|assignInputDevice|assignViewportFactories|attachCurve|attachDeviceAttr|attachSurface|attrColorSliderGrp|attrCompatibility|attrControlGrp|attrEnumOptionMenu|attrEnumOptionMenuGrp|attrFieldGrp|attrFieldSliderGrp|attrNavigationControlGrp|attrPresetEditWin|attributeExists|attributeInfo|attributeMenu|attributeQuery|autoKeyframe|autoPlace|bakeClip|bakeFluidShading|bakePartialHistory|bakeResults|bakeSimulation|basename|basenameEx|batchRender|bessel|bevel|bevelPlus|binMembership|bindSkin|blend2|blendShape|blendShapeEditor|blendShapePanel|blendTwoAttr|blindDataType|boneLattice|boundary|boxDollyCtx|boxZoomCtx|bufferCurve|buildBookmarkMenu|buildKeyframeMenu|button|buttonManip|CBG|cacheFile|cacheFileCombine|cacheFileMerge|cacheFileTrack|camera|cameraView|canCreateManip|canvas|capitalizeString|catch|catchQuiet|ceil|changeSubdivComponentDisplayLevel|changeSubdivRegion|channelBox|character|characterMap|characterOutlineEditor|characterize|chdir|checkBox|checkBoxGrp|checkDefaultRenderGlobals|choice|circle|circularFillet|clamp|clear|clearCache|clip|clipEditor|clipEditorCurrentTimeCtx|clipSchedule|clipSchedulerOutliner|clipTrimBefore|closeCurve|closeSurface|cluster|cmdFileOutput|cmdScrollFieldExecuter|cmdScrollFieldReporter|cmdShell|coarsenSubdivSelectionList|collision|color|colorAtPoint|colorEditor|colorIndex|colorIndexSliderGrp|colorSliderButtonGrp|colorSliderGrp|columnLayout|commandEcho|commandLine|commandPort|compactHairSystem|componentEditor|compositingInterop|computePolysetVolume|condition|cone|confirmDialog|connectAttr|connectControl|connectDynamic|connectJoint|connectionInfo|constrain|constrainValue|constructionHistory|container|containsMultibyte|contextInfo|control|convertFromOldLayers|convertIffToPsd|convertLightmap|convertSolidTx|convertTessellation|convertUnit|copyArray|copyFlexor|copyKey|copySkinWeights|cos|cpButton|cpCache|cpClothSet|cpCollision|cpConstraint|cpConvClothToMesh|cpForces|cpGetSolverAttr|cpPanel|cpProperty|cpRigidCollisionFilter|cpSeam|cpSetEdit|cpSetSolverAttr|cpSolver|cpSolverTypes|cpTool|cpUpdateClothUVs|createDisplayLayer|createDrawCtx|createEditor|createLayeredPsdFile|createMotionField|createNewShelf|createNode|createRenderLayer|createSubdivRegion|cross|crossProduct|ctxAbort|ctxCompletion|ctxEditMode|ctxTraverse|currentCtx|currentTime|currentTimeCtx|currentUnit|curve|curveAddPtCtx|curveCVCtx|curveEPCtx|curveEditorCtx|curveIntersect|curveMoveEPCtx|curveOnSurface|curveSketchCtx|cutKey|cycleCheck|cylinder|dagPose|date|defaultLightListCheckBox|defaultNavigation|defineDataServer|defineVirtualDevice|deformer|deg_to_rad|delete|deleteAttr|deleteShadingGroupsAndMaterials|deleteShelfTab|deleteUI|deleteUnusedBrushes|delrandstr|detachCurve|detachDeviceAttr|detachSurface|deviceEditor|devicePanel|dgInfo|dgdirty|dgeval|dgtimer|dimWhen|directKeyCtx|directionalLight|dirmap|dirname|disable|disconnectAttr|disconnectJoint|diskCache|displacementToPoly|displayAffected|displayColor|displayCull|displayLevelOfDetail|displayPref|displayRGBColor|displaySmoothness|displayStats|displayString|displaySurface|distanceDimContext|distanceDimension|doBlur|dolly|dollyCtx|dopeSheetEditor|dot|dotProduct|doubleProfileBirailSurface|drag|dragAttrContext|draggerContext|dropoffLocator|duplicate|duplicateCurve|duplicateSurface|dynCache|dynControl|dynExport|dynExpression|dynGlobals|dynPaintEditor|dynParticleCtx|dynPref|dynRelEdPanel|dynRelEditor|dynamicLoad|editAttrLimits|editDisplayLayerGlobals|editDisplayLayerMembers|editRenderLayerAdjustment|editRenderLayerGlobals|editRenderLayerMembers|editor|editorTemplate|effector|emit|emitter|enableDevice|encodeString|endString|endsWith|env|equivalent|equivalentTol|erf|error|eval|evalDeferred|evalEcho|event|exactWorldBoundingBox|exclusiveLightCheckBox|exec|executeForEachObject|exists|exp|expression|expressionEditorListen|extendCurve|extendSurface|extrude|fcheck|fclose|feof|fflush|fgetline|fgetword|file|fileBrowserDialog|fileDialog|fileExtension|fileInfo|filetest|filletCurve|filter|filterCurve|filterExpand|filterStudioImport|findAllIntersections|findAnimCurves|findKeyframe|findMenuItem|findRelatedSkinCluster|finder|firstParentOf|fitBspline|flexor|floatEq|floatField|floatFieldGrp|floatScrollBar|floatSlider|floatSlider2|floatSliderButtonGrp|floatSliderGrp|floor|flow|fluidCacheInfo|fluidEmitter|fluidVoxelInfo|flushUndo|fmod|fontDialog|fopen|formLayout|format|fprint|frameLayout|fread|freeFormFillet|frewind|fromNativePath|fwrite|gamma|gauss|geometryConstraint|getApplicationVersionAsFloat|getAttr|getClassification|getDefaultBrush|getFileList|getFluidAttr|getInputDeviceRange|getMayaPanelTypes|getModifiers|getPanel|getParticleAttr|getPluginResource|getenv|getpid|glRender|glRenderEditor|globalStitch|gmatch|goal|gotoBindPose|grabColor|gradientControl|gradientControlNoAttr|graphDollyCtx|graphSelectContext|graphTrackCtx|gravity|grid|gridLayout|group|groupObjectsByName|HfAddAttractorToAS|HfAssignAS|HfBuildEqualMap|HfBuildFurFiles|HfBuildFurImages|HfCancelAFR|HfConnectASToHF|HfCreateAttractor|HfDeleteAS|HfEditAS|HfPerformCreateAS|HfRemoveAttractorFromAS|HfSelectAttached|HfSelectAttractors|HfUnAssignAS|hardenPointCurve|hardware|hardwareRenderPanel|headsUpDisplay|headsUpMessage|help|helpLine|hermite|hide|hilite|hitTest|hotBox|hotkey|hotkeyCheck|hsv_to_rgb|hudButton|hudSlider|hudSliderButton|hwReflectionMap|hwRender|hwRenderLoad|hyperGraph|hyperPanel|hyperShade|hypot|iconTextButton|iconTextCheckBox|iconTextRadioButton|iconTextRadioCollection|iconTextScrollList|iconTextStaticLabel|ikHandle|ikHandleCtx|ikHandleDisplayScale|ikSolver|ikSplineHandleCtx|ikSystem|ikSystemInfo|ikfkDisplayMethod|illustratorCurves|image|imfPlugins|inheritTransform|insertJoint|insertJointCtx|insertKeyCtx|insertKnotCurve|insertKnotSurface|instance|instanceable|instancer|intField|intFieldGrp|intScrollBar|intSlider|intSliderGrp|interToUI|internalVar|intersect|iprEngine|isAnimCurve|isConnected|isDirty|isParentOf|isSameObject|isTrue|isValidObjectName|isValidString|isValidUiName|isolateSelect|itemFilter|itemFilterAttr|itemFilterRender|itemFilterType|joint|jointCluster|jointCtx|jointDisplayScale|jointLattice|keyTangent|keyframe|keyframeOutliner|keyframeRegionCurrentTimeCtx|keyframeRegionDirectKeyCtx|keyframeRegionDollyCtx|keyframeRegionInsertKeyCtx|keyframeRegionMoveKeyCtx|keyframeRegionScaleKeyCtx|keyframeRegionSelectKeyCtx|keyframeRegionSetKeyCtx|keyframeRegionTrackCtx|keyframeStats|lassoContext|lattice|latticeDeformKeyCtx|launch|launchImageEditor|layerButton|layeredShaderPort|layeredTexturePort|layout|layoutDialog|lightList|lightListEditor|lightListPanel|lightlink|lineIntersection|linearPrecision|linstep|listAnimatable|listAttr|listCameras|listConnections|listDeviceAttachments|listHistory|listInputDeviceAxes|listInputDeviceButtons|listInputDevices|listMenuAnnotation|listNodeTypes|listPanelCategories|listRelatives|listSets|listTransforms|listUnselected|listerEditor|loadFluid|loadNewShelf|loadPlugin|loadPluginLanguageResources|loadPrefObjects|localizedPanelLabel|lockNode|loft|log|longNameOf|lookThru|ls|lsThroughFilter|lsType|lsUI|Mayatomr|mag|makeIdentity|makeLive|makePaintable|makeRoll|makeSingleSurface|makeTubeOn|makebot|manipMoveContext|manipMoveLimitsCtx|manipOptions|manipRotateContext|manipRotateLimitsCtx|manipScaleContext|manipScaleLimitsCtx|marker|match|max|memory|menu|menuBarLayout|menuEditor|menuItem|menuItemToShelf|menuSet|menuSetPref|messageLine|min|minimizeApp|mirrorJoint|modelCurrentTimeCtx|modelEditor|modelPanel|mouse|movIn|movOut|move|moveIKtoFK|moveKeyCtx|moveVertexAlongDirection|multiProfileBirailSurface|mute|nParticle|nameCommand|nameField|namespace|namespaceInfo|newPanelItems|newton|nodeCast|nodeIconButton|nodeOutliner|nodePreset|nodeType|noise|nonLinear|normalConstraint|normalize|nurbsBoolean|nurbsCopyUVSet|nurbsCube|nurbsEditUV|nurbsPlane|nurbsSelect|nurbsSquare|nurbsToPoly|nurbsToPolygonsPref|nurbsToSubdiv|nurbsToSubdivPref|nurbsUVSet|nurbsViewDirectionVector|objExists|objectCenter|objectLayer|objectType|objectTypeUI|obsoleteProc|oceanNurbsPreviewPlane|offsetCurve|offsetCurveOnSurface|offsetSurface|openGLExtension|openMayaPref|optionMenu|optionMenuGrp|optionVar|orbit|orbitCtx|orientConstraint|outlinerEditor|outlinerPanel|overrideModifier|paintEffectsDisplay|pairBlend|palettePort|paneLayout|panel|panelConfiguration|panelHistory|paramDimContext|paramDimension|paramLocator|parent|parentConstraint|particle|particleExists|particleInstancer|particleRenderInfo|partition|pasteKey|pathAnimation|pause|pclose|percent|performanceOptions|pfxstrokes|pickWalk|picture|pixelMove|planarSrf|plane|play|playbackOptions|playblast|plugAttr|plugNode|pluginInfo|pluginResourceUtil|pointConstraint|pointCurveConstraint|pointLight|pointMatrixMult|pointOnCurve|pointOnSurface|pointPosition|poleVectorConstraint|polyAppend|polyAppendFacetCtx|polyAppendVertex|polyAutoProjection|polyAverageNormal|polyAverageVertex|polyBevel|polyBlendColor|polyBlindData|polyBoolOp|polyBridgeEdge|polyCacheMonitor|polyCheck|polyChipOff|polyClipboard|polyCloseBorder|polyCollapseEdge|polyCollapseFacet|polyColorBlindData|polyColorDel|polyColorPerVertex|polyColorSet|polyCompare|polyCone|polyCopyUV|polyCrease|polyCreaseCtx|polyCreateFacet|polyCreateFacetCtx|polyCube|polyCut|polyCutCtx|polyCylinder|polyCylindricalProjection|polyDelEdge|polyDelFacet|polyDelVertex|polyDuplicateAndConnect|polyDuplicateEdge|polyEditUV|polyEditUVShell|polyEvaluate|polyExtrudeEdge|polyExtrudeFacet|polyExtrudeVertex|polyFlipEdge|polyFlipUV|polyForceUV|polyGeoSampler|polyHelix|polyInfo|polyInstallAction|polyLayoutUV|polyListComponentConversion|polyMapCut|polyMapDel|polyMapSew|polyMapSewMove|polyMergeEdge|polyMergeEdgeCtx|polyMergeFacet|polyMergeFacetCtx|polyMergeUV|polyMergeVertex|polyMirrorFace|polyMoveEdge|polyMoveFacet|polyMoveFacetUV|polyMoveUV|polyMoveVertex|polyNormal|polyNormalPerVertex|polyNormalizeUV|polyOptUvs|polyOptions|polyOutput|polyPipe|polyPlanarProjection|polyPlane|polyPlatonicSolid|polyPoke|polyPrimitive|polyPrism|polyProjection|polyPyramid|polyQuad|polyQueryBlindData|polyReduce|polySelect|polySelectConstraint|polySelectConstraintMonitor|polySelectCtx|polySelectEditCtx|polySeparate|polySetToFaceNormal|polySewEdge|polyShortestPathCtx|polySmooth|polySoftEdge|polySphere|polySphericalProjection|polySplit|polySplitCtx|polySplitEdge|polySplitRing|polySplitVertex|polyStraightenUVBorder|polySubdivideEdge|polySubdivideFacet|polyToSubdiv|polyTorus|polyTransfer|polyTriangulate|polyUVSet|polyUnite|polyWedgeFace|popen|popupMenu|pose|pow|preloadRefEd|print|progressBar|progressWindow|projFileViewer|projectCurve|projectTangent|projectionContext|projectionManip|promptDialog|propModCtx|propMove|psdChannelOutliner|psdEditTextureFile|psdExport|psdTextureFile|putenv|pwd|python|querySubdiv|quit|rad_to_deg|radial|radioButton|radioButtonGrp|radioCollection|radioMenuItemCollection|rampColorPort|rand|randomizeFollicles|randstate|rangeControl|readTake|rebuildCurve|rebuildSurface|recordAttr|recordDevice|redo|reference|referenceEdit|referenceQuery|refineSubdivSelectionList|refresh|refreshAE|registerPluginResource|rehash|reloadImage|removeJoint|removeMultiInstance|removePanelCategory|rename|renameAttr|renameSelectionList|renameUI|render|renderGlobalsNode|renderInfo|renderLayerButton|renderLayerParent|renderLayerPostProcess|renderLayerUnparent|renderManip|renderPartition|renderQualityNode|renderSettings|renderThumbnailUpdate|renderWindowEditor|renderWindowSelectContext|renderer|reorder|reorderDeformers|requires|reroot|resampleFluid|resetAE|resetPfxToPolyCamera|resetTool|resolutionNode|retarget|reverseCurve|reverseSurface|revolve|rgb_to_hsv|rigidBody|rigidSolver|roll|rollCtx|rootOf|rot|rotate|rotationInterpolation|roundConstantRadius|rowColumnLayout|rowLayout|runTimeCommand|runup|sampleImage|saveAllShelves|saveAttrPreset|saveFluid|saveImage|saveInitialState|saveMenu|savePrefObjects|savePrefs|saveShelf|saveToolSettings|scale|scaleBrushBrightness|scaleComponents|scaleConstraint|scaleKey|scaleKeyCtx|sceneEditor|sceneUIReplacement|scmh|scriptCtx|scriptEditorInfo|scriptJob|scriptNode|scriptTable|scriptToShelf|scriptedPanel|scriptedPanelType|scrollField|scrollLayout|sculpt|searchPathArray|seed|selLoadSettings|select|selectContext|selectCurveCV|selectKey|selectKeyCtx|selectKeyframeRegionCtx|selectMode|selectPref|selectPriority|selectType|selectedNodes|selectionConnection|separator|setAttr|setAttrEnumResource|setAttrMapping|setAttrNiceNameResource|setConstraintRestPosition|setDefaultShadingGroup|setDrivenKeyframe|setDynamic|setEditCtx|setEditor|setFluidAttr|setFocus|setInfinity|setInputDeviceMapping|setKeyCtx|setKeyPath|setKeyframe|setKeyframeBlendshapeTargetWts|setMenuMode|setNodeNiceNameResource|setNodeTypeFlag|setParent|setParticleAttr|setPfxToPolyCamera|setPluginResource|setProject|setStampDensity|setStartupMessage|setState|setToolTo|setUITemplate|setXformManip|sets|shadingConnection|shadingGeometryRelCtx|shadingLightRelCtx|shadingNetworkCompare|shadingNode|shapeCompare|shelfButton|shelfLayout|shelfTabLayout|shellField|shortNameOf|showHelp|showHidden|showManipCtx|showSelectionInTitle|showShadingGroupAttrEditor|showWindow|sign|simplify|sin|singleProfileBirailSurface|size|sizeBytes|skinCluster|skinPercent|smoothCurve|smoothTangentSurface|smoothstep|snap2to2|snapKey|snapMode|snapTogetherCtx|snapshot|soft|softMod|softModCtx|sort|sound|soundControl|source|spaceLocator|sphere|sphrand|spotLight|spotLightPreviewPort|spreadSheetEditor|spring|sqrt|squareSurface|srtContext|stackTrace|startString|startsWith|stitchAndExplodeShell|stitchSurface|stitchSurfacePoints|strcmp|stringArrayCatenate|stringArrayContains|stringArrayCount|stringArrayInsertAtIndex|stringArrayIntersector|stringArrayRemove|stringArrayRemoveAtIndex|stringArrayRemoveDuplicates|stringArrayRemoveExact|stringArrayToString|stringToStringArray|strip|stripPrefixFromName|stroke|subdAutoProjection|subdCleanTopology|subdCollapse|subdDuplicateAndConnect|subdEditUV|subdListComponentConversion|subdMapCut|subdMapSewMove|subdMatchTopology|subdMirror|subdToBlind|subdToPoly|subdTransferUVsToCache|subdiv|subdivCrease|subdivDisplaySmoothness|substitute|substituteAllString|substituteGeometry|substring|surface|surfaceSampler|surfaceShaderList|swatchDisplayPort|switchTable|symbolButton|symbolCheckBox|sysFile|system|tabLayout|tan|tangentConstraint|texLatticeDeformContext|texManipContext|texMoveContext|texMoveUVShellContext|texRotateContext|texScaleContext|texSelectContext|texSelectShortestPathCtx|texSmudgeUVContext|texWinToolCtx|text|textCurves|textField|textFieldButtonGrp|textFieldGrp|textManip|textScrollList|textToShelf|textureDisplacePlane|textureHairColor|texturePlacementContext|textureWindow|threadCount|threePointArcCtx|timeControl|timePort|timerX|toNativePath|toggle|toggleAxis|toggleWindowVisibility|tokenize|tokenizeList|tolerance|tolower|toolButton|toolCollection|toolDropped|toolHasOptions|toolPropertyWindow|torus|toupper|trace|track|trackCtx|transferAttributes|transformCompare|transformLimits|translator|trim|trunc|truncateFluidCache|truncateHairCache|tumble|tumbleCtx|turbulence|twoPointArcCtx|uiRes|uiTemplate|unassignInputDevice|undo|undoInfo|ungroup|uniform|unit|unloadPlugin|untangleUV|untitledFileName|untrim|upAxis|updateAE|userCtx|uvLink|uvSnapshot|validateShelfName|vectorize|view2dToolCtx|viewCamera|viewClipPlane|viewFit|viewHeadOn|viewLookAt|viewManip|viewPlace|viewSet|visor|volumeAxis|vortex|waitCursor|warning|webBrowser|webBrowserPrefs|whatIs|window|windowPref|wire|wireContext|workspace|wrinkle|wrinkleContext|writeTake|xbmLangPathList|xform)\b/,operator:[/\+[+=]?|-[-=]?|&&|\|\||[<>]=|[*\/!=]=?|[%^]/,{pattern:/(^|[^<])<(?!<)/,lookbehind:!0},{pattern:/(^|[^>])>(?!>)/,lookbehind:!0}],punctuation:/<<|>>|[.,:;?\[\](){}]/},Prism.languages.mel.code.inside.rest=Prism.languages.mel; +Prism.languages.mizar={comment:/::.+/,keyword:/@proof\b|\b(?:according|aggregate|all|and|antonym|are|as|associativity|assume|asymmetry|attr|be|begin|being|by|canceled|case|cases|clusters?|coherence|commutativity|compatibility|connectedness|consider|consistency|constructors|contradiction|correctness|def|deffunc|define|definitions?|defpred|do|does|equals|end|environ|ex|exactly|existence|for|from|func|given|hence|hereby|holds|idempotence|identity|iff?|implies|involutiveness|irreflexivity|is|it|let|means|mode|non|not|notations?|now|of|or|otherwise|over|per|pred|prefix|projectivity|proof|provided|qua|reconsider|redefine|reduce|reducibility|reflexivity|registrations?|requirements|reserve|sch|schemes?|section|selector|set|sethood|st|struct|such|suppose|symmetry|synonym|take|that|the|then|theorems?|thesis|thus|to|transitivity|uniqueness|vocabular(?:y|ies)|when|where|with|wrt)\b/,parameter:{pattern:/\$(?:10|\d)/,alias:"variable"},variable:/\w+(?=:)/,number:/(?:\b|-)\d+\b/,operator:/\.\.\.|->|&|\.?=/,punctuation:/\(#|#\)|[,:;\[\](){}]/}; +!function($){var e=["$eq","$gt","$gte","$in","$lt","$lte","$ne","$nin","$and","$not","$nor","$or","$exists","$type","$expr","$jsonSchema","$mod","$regex","$text","$where","$geoIntersects","$geoWithin","$near","$nearSphere","$all","$elemMatch","$size","$bitsAllClear","$bitsAllSet","$bitsAnyClear","$bitsAnySet","$comment","$elemMatch","$meta","$slice","$currentDate","$inc","$min","$max","$mul","$rename","$set","$setOnInsert","$unset","$addToSet","$pop","$pull","$push","$pullAll","$each","$position","$slice","$sort","$bit","$addFields","$bucket","$bucketAuto","$collStats","$count","$currentOp","$facet","$geoNear","$graphLookup","$group","$indexStats","$limit","$listLocalSessions","$listSessions","$lookup","$match","$merge","$out","$planCacheStats","$project","$redact","$replaceRoot","$replaceWith","$sample","$set","$skip","$sort","$sortByCount","$unionWith","$unset","$unwind","$abs","$accumulator","$acos","$acosh","$add","$addToSet","$allElementsTrue","$and","$anyElementTrue","$arrayElemAt","$arrayToObject","$asin","$asinh","$atan","$atan2","$atanh","$avg","$binarySize","$bsonSize","$ceil","$cmp","$concat","$concatArrays","$cond","$convert","$cos","$dateFromParts","$dateToParts","$dateFromString","$dateToString","$dayOfMonth","$dayOfWeek","$dayOfYear","$degreesToRadians","$divide","$eq","$exp","$filter","$first","$floor","$function","$gt","$gte","$hour","$ifNull","$in","$indexOfArray","$indexOfBytes","$indexOfCP","$isArray","$isNumber","$isoDayOfWeek","$isoWeek","$isoWeekYear","$last","$last","$let","$literal","$ln","$log","$log10","$lt","$lte","$ltrim","$map","$max","$mergeObjects","$meta","$min","$millisecond","$minute","$mod","$month","$multiply","$ne","$not","$objectToArray","$or","$pow","$push","$radiansToDegrees","$range","$reduce","$regexFind","$regexFindAll","$regexMatch","$replaceOne","$replaceAll","$reverseArray","$round","$rtrim","$second","$setDifference","$setEquals","$setIntersection","$setIsSubset","$setUnion","$size","$sin","$slice","$split","$sqrt","$stdDevPop","$stdDevSamp","$strcasecmp","$strLenBytes","$strLenCP","$substr","$substrBytes","$substrCP","$subtract","$sum","$switch","$tan","$toBool","$toDate","$toDecimal","$toDouble","$toInt","$toLong","$toObjectId","$toString","$toLower","$toUpper","$trim","$trunc","$type","$week","$year","$zip","$comment","$explain","$hint","$max","$maxTimeMS","$min","$orderby","$query","$returnKey","$showDiskLoc","$natural"],t="(?:"+(e=e.map(function($){return $.replace("$","\\$")})).join("|")+")\\b";$.languages.mongodb=$.languages.extend("javascript",{}),$.languages.insertBefore("mongodb","string",{property:{pattern:/(?:(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1|[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*)(?=\s*:)/,greedy:!0,inside:{keyword:RegExp("^(['\"])?"+t+"(?:\\1)?$")}}}),$.languages.mongodb.string.inside={url:{pattern:/https?:\/\/[-\w@:%.+~#=]{1,256}\.[a-z0-9()]{1,6}\b[-\w()@:%+.~#?&/=]*/i,greedy:!0},entity:{pattern:/\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b/,greedy:!0}},$.languages.insertBefore("mongodb","constant",{builtin:{pattern:RegExp("\\b(?:"+["ObjectId","Code","BinData","DBRef","Timestamp","NumberLong","NumberDecimal","MaxKey","MinKey","RegExp","ISODate","UUID"].join("|")+")\\b"),alias:"keyword"}})}(Prism); +Prism.languages.monkey={string:/"[^"\r\n]*"/,comment:[{pattern:/^#Rem\s+[\s\S]*?^#End/im,greedy:!0},{pattern:/'.+/,greedy:!0}],preprocessor:{pattern:/(^[ \t]*)#.+/m,lookbehind:!0,alias:"comment"},function:/\w+(?=\()/,"type-char":{pattern:/(\w)[?%#$]/,lookbehind:!0,alias:"variable"},number:{pattern:/((?:\.\.)?)(?:(?:\b|\B-\.?|\B\.)\d+(?:(?!\.\.)\.\d*)?|\$[\da-f]+)/i,lookbehind:!0},keyword:/\b(?:Void|Strict|Public|Private|Property|Bool|Int|Float|String|Array|Object|Continue|Exit|Import|Extern|New|Self|Super|Try|Catch|Eachin|True|False|Extends|Abstract|Final|Select|Case|Default|Const|Local|Global|Field|Method|Function|Class|End|If|Then|Else|ElseIf|EndIf|While|Wend|Repeat|Until|Forever|For|To|Step|Next|Return|Module|Interface|Implements|Inline|Throw|Null)\b/i,operator:/\.\.|<[=>]?|>=?|:?=|(?:[+\-*\/&~|]|\b(?:Mod|Shl|Shr)\b)=?|\b(?:And|Not|Or)\b/i,punctuation:/[.,:;()\[\]]/}; +Prism.languages.moonscript={comment:/--.*/,string:[{pattern:/'[^']*'|\[(=*)\[[\s\S]*?\]\1\]/,greedy:!0},{pattern:/"[^"]*"/,greedy:!0,inside:{interpolation:{pattern:/#\{[^{}]*\}/,inside:{moonscript:{pattern:/(^#\{)[\s\S]+(?=\})/,lookbehind:!0,inside:null},"interpolation-punctuation":{pattern:/#\{|\}/,alias:"punctuation"}}}}}],"class-name":[{pattern:/(\b(?:class|extends)[ \t]+)\w+/,lookbehind:!0},/\b[A-Z]\w*/],keyword:/\b(?:class|continue|do|else|elseif|export|extends|for|from|if|import|in|local|nil|return|self|super|switch|then|unless|using|when|while|with)\b/,variable:/@@?\w*/,property:{pattern:/\b(?!\d)\w+(?=:)|(:)(?!\d)\w+/,lookbehind:!0},function:{pattern:/\b(?:_G|_VERSION|assert|collectgarbage|coroutine\.(?:running|create|resume|status|wrap|yield)|debug\.(?:debug|gethook|getinfo|getlocal|getupvalue|setlocal|setupvalue|sethook|traceback|getfenv|getmetatable|getregistry|setfenv|setmetatable)|dofile|error|getfenv|getmetatable|io\.(?:stdin|stdout|stderr|close|flush|input|lines|open|output|popen|read|tmpfile|type|write)|ipairs|load|loadfile|loadstring|math\.(?:abs|acos|asin|atan|atan2|ceil|sin|cos|tan|deg|exp|floor|log|log10|max|min|fmod|modf|cosh|sinh|tanh|pow|rad|sqrt|frexp|ldexp|random|randomseed|pi)|module|next|os\.(?:clock|date|difftime|execute|exit|getenv|remove|rename|setlocale|time|tmpname)|package\.(?:cpath|loaded|loadlib|path|preload|seeall)|pairs|pcall|print|rawequal|rawget|rawset|require|select|setfenv|setmetatable|string\.(?:byte|char|dump|find|len|lower|rep|sub|upper|format|gsub|gmatch|match|reverse)|table\.(?:maxn|concat|sort|insert|remove)|tonumber|tostring|type|unpack|xpcall)\b/,inside:{punctuation:/\./}},boolean:/\b(?:false|true)\b/,number:/(?:\B\.\d+|\b\d+\.\d+|\b\d+(?=[eE]))(?:[eE][-+]?\d+)?\b|\b(?:0x[a-fA-F\d]+|\d+)(?:U?LL)?\b/,operator:/\.{3}|[-=]>|~=|(?:[-+*/%<>!=]|\.\.)=?|[:#^]|\b(?:and|or)\b=?|\b(?:not)\b/,punctuation:/[.,()[\]{}\\]/},Prism.languages.moonscript.string[1].inside.interpolation.inside.moonscript.inside=Prism.languages.moonscript,Prism.languages.moon=Prism.languages.moonscript; +Prism.languages.n1ql={comment:/\/\*[\s\S]*?(?:$|\*\/)/,parameter:/\$[\w.]+/,string:{pattern:/(["'])(?:\\[\s\S]|(?!\1)[^\\]|\1\1)*\1/,greedy:!0},identifier:{pattern:/`(?:\\[\s\S]|[^\\`]|``)*`/,greedy:!0},function:/\b(?:ABS|ACOS|ARRAY_AGG|ARRAY_APPEND|ARRAY_AVG|ARRAY_CONCAT|ARRAY_CONTAINS|ARRAY_COUNT|ARRAY_DISTINCT|ARRAY_FLATTEN|ARRAY_IFNULL|ARRAY_INSERT|ARRAY_INTERSECT|ARRAY_LENGTH|ARRAY_MAX|ARRAY_MIN|ARRAY_POSITION|ARRAY_PREPEND|ARRAY_PUT|ARRAY_RANGE|ARRAY_REMOVE|ARRAY_REPEAT|ARRAY_REPLACE|ARRAY_REVERSE|ARRAY_SORT|ARRAY_STAR|ARRAY_SUM|ARRAY_SYMDIFF|ARRAY_SYMDIFFN|ARRAY_UNION|ASIN|ATAN|ATAN2|AVG|BASE64|BASE64_DECODE|BASE64_ENCODE|BITAND|BITCLEAR|BITNOT|BITOR|BITSET|BITSHIFT|BITTEST|BITXOR|CEIL|CLOCK_LOCAL|CLOCK_MILLIS|CLOCK_STR|CLOCK_TZ|CLOCK_UTC|CONTAINS|CONTAINS_TOKEN|CONTAINS_TOKEN_LIKE|CONTAINS_TOKEN_REGEXP|COS|COUNT|CURL|DATE_ADD_MILLIS|DATE_ADD_STR|DATE_DIFF_MILLIS|DATE_DIFF_STR|DATE_FORMAT_STR|DATE_PART_MILLIS|DATE_PART_STR|DATE_RANGE_MILLIS|DATE_RANGE_STR|DATE_TRUNC_MILLIS|DATE_TRUNC_STR|DECODE_JSON|DEGREES|DURATION_TO_STR|E|ENCODED_SIZE|ENCODE_JSON|EXP|FLOOR|GREATEST|HAS_TOKEN|IFINF|IFMISSING|IFMISSINGORNULL|IFNAN|IFNANORINF|IFNULL|INITCAP|ISARRAY|ISATOM|ISBOOLEAN|ISNUMBER|ISOBJECT|ISSTRING|IsBitSET|LEAST|LENGTH|LN|LOG|LOWER|LTRIM|MAX|META|MILLIS|MILLIS_TO_LOCAL|MILLIS_TO_STR|MILLIS_TO_TZ|MILLIS_TO_UTC|MILLIS_TO_ZONE_NAME|MIN|MISSINGIF|NANIF|NEGINFIF|NOW_LOCAL|NOW_MILLIS|NOW_STR|NOW_TZ|NOW_UTC|NULLIF|OBJECT_ADD|OBJECT_CONCAT|OBJECT_INNER_PAIRS|OBJECT_INNER_VALUES|OBJECT_LENGTH|OBJECT_NAMES|OBJECT_PAIRS|OBJECT_PUT|OBJECT_REMOVE|OBJECT_RENAME|OBJECT_REPLACE|OBJECT_UNWRAP|OBJECT_VALUES|PAIRS|PI|POLY_LENGTH|POSINFIF|POSITION|POWER|RADIANS|RANDOM|REGEXP_CONTAINS|REGEXP_LIKE|REGEXP_POSITION|REGEXP_REPLACE|REPEAT|REPLACE|REVERSE|ROUND|RTRIM|SIGN|SIN|SPLIT|SQRT|STR_TO_DURATION|STR_TO_MILLIS|STR_TO_TZ|STR_TO_UTC|STR_TO_ZONE_NAME|SUBSTR|SUFFIXES|SUM|TAN|TITLE|TOARRAY|TOATOM|TOBOOLEAN|TOKENS|TOKENS|TONUMBER|TOOBJECT|TOSTRING|TRIM|TRUNC|TYPE|UPPER|WEEKDAY_MILLIS|WEEKDAY_STR)(?=\s*\()/i,keyword:/\b(?:ALL|ALTER|ANALYZE|AS|ASC|BEGIN|BINARY|BOOLEAN|BREAK|BUCKET|BUILD|BY|CALL|CAST|CLUSTER|COLLATE|COLLECTION|COMMIT|CONNECT|CONTINUE|CORRELATE|COVER|CREATE|DATABASE|DATASET|DATASTORE|DECLARE|DECREMENT|DELETE|DERIVED|DESC|DESCRIBE|DISTINCT|DO|DROP|EACH|ELEMENT|EXCEPT|EXCLUDE|EXECUTE|EXPLAIN|FETCH|FLATTEN|FOR|FORCE|FROM|FUNCTION|GRANT|GROUP|GSI|HAVING|IF|IGNORE|ILIKE|INCLUDE|INCREMENT|INDEX|INFER|INLINE|INNER|INSERT|INTERSECT|INTO|IS|JOIN|KEY|KEYS|KEYSPACE|KNOWN|LAST|LEFT|LET|LETTING|LIMIT|LSM|MAP|MAPPING|MATCHED|MATERIALIZED|MERGE|MINUS|MISSING|NAMESPACE|NEST|NULL|NUMBER|OBJECT|OFFSET|ON|OPTION|ORDER|OUTER|OVER|PARSE|PARTITION|PASSWORD|PATH|POOL|PREPARE|PRIMARY|PRIVATE|PRIVILEGE|PROCEDURE|PUBLIC|RAW|REALM|REDUCE|RENAME|RETURN|RETURNING|REVOKE|RIGHT|ROLE|ROLLBACK|SATISFIES|SCHEMA|SELECT|SELF|SEMI|SET|SHOW|SOME|START|STATISTICS|STRING|SYSTEM|TO|TRANSACTION|TRIGGER|TRUNCATE|UNDER|UNION|UNIQUE|UNKNOWN|UNNEST|UNSET|UPDATE|UPSERT|USE|USER|USING|VALIDATE|VALUE|VALUES|VIA|VIEW|WHERE|WHILE|WITH|WORK|XOR)\b/i,boolean:/\b(?:TRUE|FALSE)\b/i,number:/(?:\b\d+\.|\B\.)\d+e[+\-]?\d+\b|\b\d+\.?\d*|\B\.\d+\b/i,operator:/[-+*\/=%]|!=|==?|\|\||<[>=]?|>=?|\b(?:AND|ANY|ARRAY|BETWEEN|CASE|ELSE|END|EVERY|EXISTS|FIRST|IN|LIKE|NOT|OR|THEN|VALUED|WHEN|WITHIN)\b/i,punctuation:/[;[\](),.{}:]/}; +Prism.languages.n4js=Prism.languages.extend("javascript",{keyword:/\b(?:any|Array|boolean|break|case|catch|class|const|constructor|continue|debugger|declare|default|delete|do|else|enum|export|extends|false|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|module|new|null|number|package|private|protected|public|return|set|static|string|super|switch|this|throw|true|try|typeof|var|void|while|with|yield)\b/}),Prism.languages.insertBefore("n4js","constant",{annotation:{pattern:/@+\w+/,alias:"operator"}}),Prism.languages.n4jsd=Prism.languages.n4js; +Prism.languages["nand2tetris-hdl"]={comment:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,keyword:/\b(?:CHIP|IN|OUT|PARTS|BUILTIN|CLOCKED)\b/,boolean:/\b(?:true|false)\b/,function:/[A-Za-z][A-Za-z0-9]*(?=\()/,number:/\b\d+\b/,operator:/=|\.\./,punctuation:/[{}[\];(),:]/}; +!function(e){var a=/\{[^\r\n\[\]{}]*\}/,n={"quoted-string":{pattern:/"(?:[^"\\]|\\.)*"/,alias:"operator"},"command-param-id":{pattern:/(\s)\w+:/,lookbehind:!0,alias:"property"},"command-param-value":[{pattern:a,alias:"selector"},{pattern:/([\t ])\S+/,lookbehind:!0,greedy:!0,alias:"operator"},{pattern:/\S(?:.*\S)?/,alias:"operator"}]};function t(e){return"string"==typeof e?e:Array.isArray(e)?e.map(t).join(""):t(e.content)}e.languages.naniscript={comment:{pattern:/^([\t ]*);.*/m,lookbehind:!0},define:{pattern:/^>.+/m,alias:"tag",inside:{value:{pattern:/(^>\w+[\t ]+)(?!\s)[^{}\r\n]+/,lookbehind:!0,alias:"operator"},key:{pattern:/(^>)\w+/,lookbehind:!0}}},label:{pattern:/^([\t ]*)#[\t ]*\w+[\t ]*$/m,lookbehind:!0,alias:"regex"},command:{pattern:/^([\t ]*)@\w+(?=[\t ]|$).*/m,lookbehind:!0,alias:"function",inside:{"command-name":/^@\w+/,expression:{pattern:a,greedy:!0,alias:"selector"},"command-params":{pattern:/[\s\S]*\S[\s\S]*/,inside:n}}},"generic-text":{pattern:/(^[ \t]*)[^#@>;\s].*/m,lookbehind:!0,alias:"punctuation",inside:{"escaped-char":/\\[{}\[\]"]/,expression:{pattern:a,greedy:!0,alias:"selector"},"inline-command":{pattern:/\[[\t ]*\w+[^\r\n\[\]]*\]/,greedy:!0,alias:"function",inside:{"command-params":{pattern:/(^\[[\t ]*\w+\b)[\s\S]+(?=\]$)/,lookbehind:!0,inside:n},"command-param-name":{pattern:/^(\[[\t ]*)\w+/,lookbehind:!0,alias:"name"},"start-stop-char":/[\[\]]/}}}}},e.languages.nani=e.languages.naniscript,e.hooks.add("after-tokenize",function(e){e.tokens.forEach(function(e){if("string"!=typeof e&&"generic-text"===e.type){var a=t(e);(function(e){for(var a=[],n=0;n=&|$!]/}; +Prism.languages.neon={comment:{pattern:/#.*/,greedy:!0},datetime:{pattern:/(^|[[{(=:,\s])\d\d\d\d-\d\d?-\d\d?(?:(?:[Tt]| +)\d\d?:\d\d:\d\d(?:\.\d*)? *(?:Z|[-+]\d\d?(?::?\d\d)?)?)?(?=$|[\]}),\s])/,lookbehind:!0,alias:"number"},key:{pattern:/(^|[[{(,\s])[^,:=[\]{}()'"\s]+(?=\s*:(?:$|[\]}),\s])|\s*=)/,lookbehind:!0,alias:"atrule"},number:{pattern:/(^|[[{(=:,\s])[+-]?(?:0x[\da-fA-F]+|0o[0-7]+|0b[01]+|(?:\d+\.?\d*|\.?\d+)(?:[eE][+-]?\d+)?)(?=$|[\]}),:=\s])/,lookbehind:!0},boolean:{pattern:/(^|[[{(=:,\s])(?:true|false|yes|no)(?=$|[\]}),:=\s])/i,lookbehind:!0},null:{pattern:/(^|[[{(=:,\s])(?:null)(?=$|[\]}),:=\s])/i,lookbehind:!0,alias:"keyword"},string:{pattern:/(^|[[{(=:,\s])(?:('''|""")\r?\n(?:(?:[^\r\n]|\r?\n(?![\t ]*\2))*\r?\n)?[\t ]*\2|'[^'\r\n]*'|"(?:\\.|[^\\"\r\n])*")/,lookbehind:!0,greedy:!0},literal:{pattern:/(^|[[{(=:,\s])(?:[^#"\',:=[\]{}()\s`-]|[:-][^"\',=[\]{}()\s])(?:[^,:=\]})(\s]+|:(?![\s,\]})]|$)|[ \t]+[^#,:=\]})(\s])*/,lookbehind:!0,alias:"string"},punctuation:/[,:=[\]{}()-]/}; +Prism.languages.nginx=Prism.languages.extend("clike",{comment:{pattern:/(^|[^"{\\])#.*/,lookbehind:!0},keyword:/\b(?:CONTENT_|DOCUMENT_|GATEWAY_|HTTP_|HTTPS|if_not_empty|PATH_|QUERY_|REDIRECT_|REMOTE_|REQUEST_|SCGI|SCRIPT_|SERVER_|http|events|accept_mutex|accept_mutex_delay|access_log|add_after_body|add_before_body|add_header|addition_types|aio|alias|allow|ancient_browser|ancient_browser_value|auth|auth_basic|auth_basic_user_file|auth_http|auth_http_header|auth_http_timeout|autoindex|autoindex_exact_size|autoindex_localtime|break|charset|charset_map|charset_types|chunked_transfer_encoding|client_body_buffer_size|client_body_in_file_only|client_body_in_single_buffer|client_body_temp_path|client_body_timeout|client_header_buffer_size|client_header_timeout|client_max_body_size|connection_pool_size|create_full_put_path|daemon|dav_access|dav_methods|debug_connection|debug_points|default_type|deny|devpoll_changes|devpoll_events|directio|directio_alignment|disable_symlinks|empty_gif|env|epoll_events|error_log|error_page|expires|fastcgi_buffer_size|fastcgi_buffers|fastcgi_busy_buffers_size|fastcgi_cache|fastcgi_cache_bypass|fastcgi_cache_key|fastcgi_cache_lock|fastcgi_cache_lock_timeout|fastcgi_cache_methods|fastcgi_cache_min_uses|fastcgi_cache_path|fastcgi_cache_purge|fastcgi_cache_use_stale|fastcgi_cache_valid|fastcgi_connect_timeout|fastcgi_hide_header|fastcgi_ignore_client_abort|fastcgi_ignore_headers|fastcgi_index|fastcgi_intercept_errors|fastcgi_keep_conn|fastcgi_max_temp_file_size|fastcgi_next_upstream|fastcgi_no_cache|fastcgi_param|fastcgi_pass|fastcgi_pass_header|fastcgi_read_timeout|fastcgi_redirect_errors|fastcgi_send_timeout|fastcgi_split_path_info|fastcgi_store|fastcgi_store_access|fastcgi_temp_file_write_size|fastcgi_temp_path|flv|geo|geoip_city|geoip_country|google_perftools_profiles|gzip|gzip_buffers|gzip_comp_level|gzip_disable|gzip_http_version|gzip_min_length|gzip_proxied|gzip_static|gzip_types|gzip_vary|if|if_modified_since|ignore_invalid_headers|image_filter|image_filter_buffer|image_filter_jpeg_quality|image_filter_sharpen|image_filter_transparency|imap_capabilities|imap_client_buffer|include|index|internal|ip_hash|keepalive|keepalive_disable|keepalive_requests|keepalive_timeout|kqueue_changes|kqueue_events|large_client_header_buffers|limit_conn|limit_conn_log_level|limit_conn_zone|limit_except|limit_rate|limit_rate_after|limit_req|limit_req_log_level|limit_req_zone|limit_zone|lingering_close|lingering_time|lingering_timeout|listen|location|lock_file|log_format|log_format_combined|log_not_found|log_subrequest|map|map_hash_bucket_size|map_hash_max_size|master_process|max_ranges|memcached_buffer_size|memcached_connect_timeout|memcached_next_upstream|memcached_pass|memcached_read_timeout|memcached_send_timeout|merge_slashes|min_delete_depth|modern_browser|modern_browser_value|mp4|mp4_buffer_size|mp4_max_buffer_size|msie_padding|msie_refresh|multi_accept|open_file_cache|open_file_cache_errors|open_file_cache_min_uses|open_file_cache_valid|open_log_file_cache|optimize_server_names|override_charset|pcre_jit|perl|perl_modules|perl_require|perl_set|pid|pop3_auth|pop3_capabilities|port_in_redirect|post_action|postpone_output|protocol|proxy|proxy_buffer|proxy_buffer_size|proxy_buffering|proxy_buffers|proxy_busy_buffers_size|proxy_cache|proxy_cache_bypass|proxy_cache_key|proxy_cache_lock|proxy_cache_lock_timeout|proxy_cache_methods|proxy_cache_min_uses|proxy_cache_path|proxy_cache_use_stale|proxy_cache_valid|proxy_connect_timeout|proxy_cookie_domain|proxy_cookie_path|proxy_headers_hash_bucket_size|proxy_headers_hash_max_size|proxy_hide_header|proxy_http_version|proxy_ignore_client_abort|proxy_ignore_headers|proxy_intercept_errors|proxy_max_temp_file_size|proxy_method|proxy_next_upstream|proxy_no_cache|proxy_pass|proxy_pass_error_message|proxy_pass_header|proxy_pass_request_body|proxy_pass_request_headers|proxy_read_timeout|proxy_redirect|proxy_redirect_errors|proxy_send_lowat|proxy_send_timeout|proxy_set_body|proxy_set_header|proxy_ssl_session_reuse|proxy_store|proxy_store_access|proxy_temp_file_write_size|proxy_temp_path|proxy_timeout|proxy_upstream_fail_timeout|proxy_upstream_max_fails|random_index|read_ahead|real_ip_header|recursive_error_pages|request_pool_size|reset_timedout_connection|resolver|resolver_timeout|return|rewrite|root|rtsig_overflow_events|rtsig_overflow_test|rtsig_overflow_threshold|rtsig_signo|satisfy|satisfy_any|secure_link_secret|send_lowat|send_timeout|sendfile|sendfile_max_chunk|server|server_name|server_name_in_redirect|server_names_hash_bucket_size|server_names_hash_max_size|server_tokens|set|set_real_ip_from|smtp_auth|smtp_capabilities|so_keepalive|source_charset|split_clients|ssi|ssi_silent_errors|ssi_types|ssi_value_length|ssl|ssl_certificate|ssl_certificate_key|ssl_ciphers|ssl_client_certificate|ssl_crl|ssl_dhparam|ssl_engine|ssl_prefer_server_ciphers|ssl_protocols|ssl_session_cache|ssl_session_timeout|ssl_verify_client|ssl_verify_depth|starttls|stub_status|sub_filter|sub_filter_once|sub_filter_types|tcp_nodelay|tcp_nopush|timeout|timer_resolution|try_files|types|types_hash_bucket_size|types_hash_max_size|underscores_in_headers|uninitialized_variable_warn|upstream|use|user|userid|userid_domain|userid_expires|userid_name|userid_p3p|userid_path|userid_service|valid_referers|variables_hash_bucket_size|variables_hash_max_size|worker_connections|worker_cpu_affinity|worker_priority|worker_processes|worker_rlimit_core|worker_rlimit_nofile|worker_rlimit_sigpending|working_directory|xclient|xml_entities|xslt_entities|xslt_stylesheet|xslt_types|ssl_session_tickets|ssl_stapling|ssl_stapling_verify|ssl_ecdh_curve|ssl_trusted_certificate|more_set_headers|ssl_early_data)\b/i}),Prism.languages.insertBefore("nginx","keyword",{variable:/\$[a-z_]+/i}); +Prism.languages.nim={comment:/#.*/,string:{pattern:/(?:(?:\b(?!\d)(?:\w|\\x[8-9a-fA-F][0-9a-fA-F])+)?(?:"""[\s\S]*?"""(?!")|"(?:\\[\s\S]|""|[^"\\])*")|'(?:\\(?:\d+|x[\da-fA-F]{2}|.)|[^'])')/,greedy:!0},number:/\b(?:0[xXoObB][\da-fA-F_]+|\d[\d_]*(?:(?!\.\.)\.[\d_]*)?(?:[eE][+-]?\d[\d_]*)?)(?:'?[iuf]\d*)?/,keyword:/\b(?:addr|as|asm|atomic|bind|block|break|case|cast|concept|const|continue|converter|defer|discard|distinct|do|elif|else|end|enum|except|export|finally|for|from|func|generic|if|import|include|interface|iterator|let|macro|method|mixin|nil|object|out|proc|ptr|raise|ref|return|static|template|try|tuple|type|using|var|when|while|with|without|yield)\b/,function:{pattern:/(?:(?!\d)(?:\w|\\x[8-9a-fA-F][0-9a-fA-F])+|`[^`\r\n]+`)\*?(?:\[[^\]]+\])?(?=\s*\()/,inside:{operator:/\*$/}},ignore:{pattern:/`[^`\r\n]+`/,inside:{punctuation:/`/}},operator:{pattern:/(^|[({\[](?=\.\.)|(?![({\[]\.).)(?:(?:[=+\-*\/<>@$~&%|!?^:\\]|\.\.|\.(?![)}\]]))+|\b(?:and|div|of|or|in|is|isnot|mod|not|notin|shl|shr|xor)\b)/m,lookbehind:!0},punctuation:/[({\[]\.|\.[)}\]]|[`(){}\[\],:]/}; +Prism.languages.nix={comment:/\/\*[\s\S]*?\*\/|#.*/,string:{pattern:/"(?:[^"\\]|\\[\s\S])*"|''(?:(?!'')[\s\S]|''(?:'|\\|\$\{))*''/,greedy:!0,inside:{interpolation:{pattern:/(^|(?:^|(?!'').)[^\\])\$\{(?:[^}]|\{[^}]*\})*}/,lookbehind:!0,inside:{antiquotation:{pattern:/^\$(?=\{)/,alias:"variable"}}}}},url:[/\b(?:[a-z]{3,7}:\/\/)[\w\-+%~\/.:#=?&]+/,{pattern:/([^\/])(?:[\w\-+%~.:#=?&]*(?!\/\/)[\w\-+%~\/.:#=?&])?(?!\/\/)\/[\w\-+%~\/.:#=?&]*/,lookbehind:!0}],antiquotation:{pattern:/\$(?=\{)/,alias:"variable"},number:/\b\d+\b/,keyword:/\b(?:assert|builtins|else|if|in|inherit|let|null|or|then|with)\b/,function:/\b(?:abort|add|all|any|attrNames|attrValues|baseNameOf|compareVersions|concatLists|currentSystem|deepSeq|derivation|dirOf|div|elem(?:At)?|fetch(?:url|Tarball)|filter(?:Source)?|fromJSON|genList|getAttr|getEnv|hasAttr|hashString|head|import|intersectAttrs|is(?:Attrs|Bool|Function|Int|List|Null|String)|length|lessThan|listToAttrs|map|mul|parseDrvName|pathExists|read(?:Dir|File)|removeAttrs|replaceStrings|seq|sort|stringLength|sub(?:string)?|tail|throw|to(?:File|JSON|Path|String|XML)|trace|typeOf)\b|\bfoldl'\B/,boolean:/\b(?:true|false)\b/,operator:/[=!<>]=?|\+\+?|\|\||&&|\/\/|->?|[?@]/,punctuation:/[{}()[\].,:;]/},Prism.languages.nix.string.inside.interpolation.inside.rest=Prism.languages.nix; +Prism.languages.nsis={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|[#;].*)/,lookbehind:!0},string:{pattern:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,greedy:!0},keyword:{pattern:/(^\s*)(?:Abort|Add(?:BrandingImage|Size)|AdvSplash|Allow(?:RootDirInstall|SkipFiles)|AutoCloseWindow|Banner|BG(?:Font|Gradient|Image)|BrandingText|BringToFront|Call(?:InstDLL)?|Caption|ChangeUI|CheckBitmap|ClearErrors|CompletedText|ComponentText|CopyFiles|CRCCheck|Create(?:Directory|Font|ShortCut)|Delete(?:INISec|INIStr|RegKey|RegValue)?|Detail(?:Print|sButtonText)|Dialer|Dir(?:Text|Var|Verify)|EnableWindow|Enum(?:RegKey|RegValue)|Exch|Exec(?:Shell(?:Wait)?|Wait)?|ExpandEnvStrings|File(?:BufSize|Close|ErrorText|Open|Read|ReadByte|ReadUTF16LE|ReadWord|WriteUTF16LE|Seek|Write|WriteByte|WriteWord)?|Find(?:Close|First|Next|Window)|FlushINI|Get(?:CurInstType|CurrentAddress|DlgItem|DLLVersion(?:Local)?|ErrorLevel|FileTime(?:Local)?|FullPathName|Function(?:Address|End)?|InstDirError|LabelAddress|TempFileName)|Goto|HideWindow|Icon|If(?:Abort|Errors|FileExists|RebootFlag|Silent)|InitPluginsDir|Install(?:ButtonText|Colors|Dir(?:RegKey)?)|InstProgressFlags|Inst(?:Type(?:GetText|SetText)?)|Int(?:64|Ptr)?CmpU?|Int(?:64)?Fmt|Int(?:Ptr)?Op|IsWindow|Lang(?:DLL|String)|License(?:BkColor|Data|ForceSelection|LangString|Text)|LoadLanguageFile|LockWindow|Log(?:Set|Text)|Manifest(?:DPIAware|SupportedOS)|Math|MessageBox|MiscButtonText|Name|Nop|ns(?:Dialogs|Exec)|NSISdl|OutFile|Page(?:Callbacks)?|PE(?:DllCharacteristics|SubsysVer)|Pop|Push|Quit|Read(?:EnvStr|INIStr|RegDWORD|RegStr)|Reboot|RegDLL|Rename|RequestExecutionLevel|ReserveFile|Return|RMDir|SearchPath|Section(?:End|GetFlags|GetInstTypes|GetSize|GetText|Group|In|SetFlags|SetInstTypes|SetSize|SetText)?|SendMessage|Set(?:AutoClose|BrandingImage|Compress|Compressor(?:DictSize)?|CtlColors|CurInstType|DatablockOptimize|DateSave|Details(?:Print|View)|ErrorLevel|Errors|FileAttributes|Font|OutPath|Overwrite|PluginUnload|RebootFlag|RegView|ShellVarContext|Silent)|Show(?:InstDetails|UninstDetails|Window)|Silent(?:Install|UnInstall)|Sleep|SpaceTexts|Splash|StartMenu|Str(?:CmpS?|Cpy|Len)|SubCaption|System|Unicode|Uninstall(?:ButtonText|Caption|Icon|SubCaption|Text)|UninstPage|UnRegDLL|UserInfo|Var|VI(?:AddVersionKey|FileVersion|ProductVersion)|VPatch|WindowIcon|Write(?:INIStr|Reg(?:Bin|DWORD|ExpandStr|MultiStr|None|Str)|Uninstaller)|XPStyle)\b/m,lookbehind:!0},property:/\b(?:admin|all|auto|both|colored|false|force|hide|highest|lastused|leave|listonly|none|normal|notset|off|on|open|print|show|silent|silentlog|smooth|textonly|true|user|ARCHIVE|FILE_(?:ATTRIBUTE_ARCHIVE|ATTRIBUTE_NORMAL|ATTRIBUTE_OFFLINE|ATTRIBUTE_READONLY|ATTRIBUTE_SYSTEM|ATTRIBUTE_TEMPORARY)|HK(?:(?:CR|CU|LM)(?:32|64)?|DD|PD|U)|HKEY_(?:CLASSES_ROOT|CURRENT_CONFIG|CURRENT_USER|DYN_DATA|LOCAL_MACHINE|PERFORMANCE_DATA|USERS)|ID(?:ABORT|CANCEL|IGNORE|NO|OK|RETRY|YES)|MB_(?:ABORTRETRYIGNORE|DEFBUTTON1|DEFBUTTON2|DEFBUTTON3|DEFBUTTON4|ICONEXCLAMATION|ICONINFORMATION|ICONQUESTION|ICONSTOP|OK|OKCANCEL|RETRYCANCEL|RIGHT|RTLREADING|SETFOREGROUND|TOPMOST|USERICON|YESNO)|NORMAL|OFFLINE|READONLY|SHCTX|SHELL_CONTEXT|SYSTEM|TEMPORARY)\b/,constant:/\${[\w\.:\^-]+}|\$\([\w\.:\^-]+\)/i,variable:/\$\w+/i,number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+\.?\d*|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--?|\+\+?|<=?|>=?|==?=?|&&?|\|\|?|[?*\/~^%]/,punctuation:/[{}[\];(),.:]/,important:{pattern:/(^\s*)!(?:addincludedir|addplugindir|appendfile|cd|define|delfile|echo|else|endif|error|execute|finalize|getdllversion|gettlbversion|ifdef|ifmacrodef|ifmacrondef|ifndef|if|include|insertmacro|macroend|macro|makensis|packhdr|pragma|searchparse|searchreplace|system|tempfile|undef|verbose|warning)\b/im,lookbehind:!0}}; +Prism.languages.objectivec=Prism.languages.extend("c",{keyword:/\b(?:asm|typeof|inline|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|union|unsigned|void|volatile|while|in|self|super)\b|(?:@interface|@end|@implementation|@protocol|@class|@public|@protected|@private|@property|@try|@catch|@finally|@throw|@synthesize|@dynamic|@selector)\b/,string:/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1|@"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,operator:/-[->]?|\+\+?|!=?|<>?=?|==?|&&?|\|\|?|[~^%?*\/@]/}),delete Prism.languages.objectivec["class-name"],Prism.languages.objc=Prism.languages.objectivec; +Prism.languages.ocaml={comment:/\(\*[\s\S]*?\*\)/,string:[{pattern:/"(?:\\.|[^\\\r\n"])*"/,greedy:!0},{pattern:/(['`])(?:\\(?:\d+|x[\da-f]+|.)|(?!\1)[^\\\r\n])\1/i,greedy:!0}],number:/\b(?:0x[\da-f][\da-f_]+|(?:0[bo])?\d[\d_]*\.?[\d_]*(?:e[+-]?[\d_]+)?)/i,directive:{pattern:/\B#\w+/,alias:"important"},label:{pattern:/\B~\w+/,alias:"function"},type_variable:{pattern:/\B'\w+/,alias:"function"},variant:{pattern:/`\w+/,alias:"variable"},module:{pattern:/\b[A-Z]\w+/,alias:"variable"},keyword:/\b(?:as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|match|method|module|mutable|new|nonrec|object|of|open|private|rec|sig|struct|then|to|try|type|val|value|virtual|when|where|while|with)\b/,boolean:/\b(?:false|true)\b/,operator:/:=|[=<>@^|&+\-*\/$%!?~][!$%&*+\-.\/:<=>?@^|~]*|\b(?:and|asr|land|lor|lsl|lsr|lxor|mod|or)\b/,punctuation:/[(){}\[\]|.,:;]|\b_\b/}; +!function(E){E.languages.opencl=E.languages.extend("c",{keyword:/\b(?:__attribute__|(?:__)?(?:constant|global|kernel|local|private|read_only|read_write|write_only)|_cl_(?:command_queue|context|device_id|event|kernel|mem|platform_id|program|sampler)|auto|break|case|cl_(?:image_format|mem_fence_flags)|clk_event_t|complex|const|continue|default|do|(?:float|double)(?:16(?:x(?:1|16|2|4|8))?|1x(?:1|16|2|4|8)|2(?:x(?:1|16|2|4|8))?|3|4(?:x(?:1|16|2|4|8))?|8(?:x(?:1|16|2|4|8))?)?|else|enum|event_t|extern|for|goto|(?:u?(?:char|short|int|long)|half|quad|bool)(?:2|3|4|8|16)?|if|image(?:1d_(?:array_|buffer_)?t|2d_(?:array_(?:depth_|msaa_depth_|msaa_)?|depth_|msaa_depth_|msaa_)?t|3d_t)|imaginary|inline|intptr_t|ndrange_t|packed|pipe|ptrdiff_t|queue_t|register|reserve_id_t|restrict|return|sampler_t|signed|size_t|sizeof|static|struct|switch|typedef|uintptr_t|uniform|union|unsigned|void|volatile|while)\b/,"constant-opencl-kernel":{pattern:/\b(?:CHAR_(?:BIT|MAX|MIN)|CLK_(?:ADDRESS_(?:CLAMP(?:_TO_EDGE)?|NONE|REPEAT)|FILTER_(?:LINEAR|NEAREST)|(?:LOCAL|GLOBAL)_MEM_FENCE|NORMALIZED_COORDS_(?:FALSE|TRUE))|CL_(?:BGRA|(?:HALF_)?FLOAT|INTENSITY|LUMINANCE|A?R?G?B?[Ax]?|(?:(?:UN)?SIGNED|[US]NORM)_(?:INT(?:8|16|32))|UNORM_(?:INT_101010|SHORT_(?:555|565)))|(?:DBL|FLT|HALF)_(?:DIG|EPSILON|MANT_DIG|(?:MIN|MAX)(?:(?:_10)?_EXP)?)|FLT_RADIX|HUGE_VALF?|INFINITY|(?:INT|LONG|SCHAR|SHRT)_(?:MAX|MIN)|(?:UCHAR|USHRT|UINT|ULONG)_MAX|MAXFLOAT|M_(?:[12]_PI|2_SQRTPI|E|LN(?:2|10)|LOG(?:10|2)E?|PI(?:_[24])?|SQRT(?:1_2|2))(?:_F|_H)?|NAN)\b/,alias:"constant"},boolean:/\b(?:false|true)\b/,number:/(?:\b0x(?:[\da-f]+\.?[\da-f]*|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+\.?\d*|\B\.\d+)(?:e[+-]?\d+)?)[fuhl]*/i});var _={"type-opencl-host":{pattern:/\b(?:cl_(?:GLenum|GLint|GLuin|addressing_mode|bitfield|bool|buffer_create_type|build_status|channel_(?:order|type)|(?:u?(?:char|short|int|long)|float|double)(?:2|3|4|8|16)?|command_(?:queue(?:_info|_properties)?|type)|context(?:_info|_properties)?|device_(?:exec_capabilities|fp_config|id|info|local_mem_type|mem_cache_type|type)|(?:event|sampler)(?:_info)?|filter_mode|half|image_info|kernel(?:_info|_work_group_info)?|map_flags|mem(?:_flags|_info|_object_type)?|platform_(?:id|info)|profiling_info|program(?:_build_info|_info)?))\b/,alias:"keyword"},"boolean-opencl-host":{pattern:/\bCL_(?:TRUE|FALSE)\b/,alias:"boolean"},"constant-opencl-host":{pattern:/\bCL_(?:A|ABGR|ADDRESS_(?:CLAMP(?:_TO_EDGE)?|MIRRORED_REPEAT|NONE|REPEAT)|ARGB|BGRA|BLOCKING|BUFFER_CREATE_TYPE_REGION|BUILD_(?:ERROR|IN_PROGRESS|NONE|PROGRAM_FAILURE|SUCCESS)|COMMAND_(?:ACQUIRE_GL_OBJECTS|BARRIER|COPY_(?:BUFFER(?:_RECT|_TO_IMAGE)?|IMAGE(?:_TO_BUFFER)?)|FILL_(?:BUFFER|IMAGE)|MAP(?:_BUFFER|_IMAGE)|MARKER|MIGRATE(?:_SVM)?_MEM_OBJECTS|NATIVE_KERNEL|NDRANGE_KERNEL|READ_(?:BUFFER(?:_RECT)?|IMAGE)|RELEASE_GL_OBJECTS|SVM_(?:FREE|MAP|MEMCPY|MEMFILL|UNMAP)|TASK|UNMAP_MEM_OBJECT|USER|WRITE_(?:BUFFER(?:_RECT)?|IMAGE))|COMPILER_NOT_AVAILABLE|COMPILE_PROGRAM_FAILURE|COMPLETE|CONTEXT_(?:DEVICES|INTEROP_USER_SYNC|NUM_DEVICES|PLATFORM|PROPERTIES|REFERENCE_COUNT)|DEPTH(?:_STENCIL)?|DEVICE_(?:ADDRESS_BITS|AFFINITY_DOMAIN_(?:L[1-4]_CACHE|NEXT_PARTITIONABLE|NUMA)|AVAILABLE|BUILT_IN_KERNELS|COMPILER_AVAILABLE|DOUBLE_FP_CONFIG|ENDIAN_LITTLE|ERROR_CORRECTION_SUPPORT|EXECUTION_CAPABILITIES|EXTENSIONS|GLOBAL_(?:MEM_(?:CACHELINE_SIZE|CACHE_SIZE|CACHE_TYPE|SIZE)|VARIABLE_PREFERRED_TOTAL_SIZE)|HOST_UNIFIED_MEMORY|IL_VERSION|IMAGE(?:2D_MAX_(?:HEIGHT|WIDTH)|3D_MAX_(?:DEPTH|HEIGHT|WIDTH)|_BASE_ADDRESS_ALIGNMENT|_MAX_ARRAY_SIZE|_MAX_BUFFER_SIZE|_PITCH_ALIGNMENT|_SUPPORT)|LINKER_AVAILABLE|LOCAL_MEM_SIZE|LOCAL_MEM_TYPE|MAX_(?:CLOCK_FREQUENCY|COMPUTE_UNITS|CONSTANT_ARGS|CONSTANT_BUFFER_SIZE|GLOBAL_VARIABLE_SIZE|MEM_ALLOC_SIZE|NUM_SUB_GROUPS|ON_DEVICE_(?:EVENTS|QUEUES)|PARAMETER_SIZE|PIPE_ARGS|READ_IMAGE_ARGS|READ_WRITE_IMAGE_ARGS|SAMPLERS|WORK_GROUP_SIZE|WORK_ITEM_DIMENSIONS|WORK_ITEM_SIZES|WRITE_IMAGE_ARGS)|MEM_BASE_ADDR_ALIGN|MIN_DATA_TYPE_ALIGN_SIZE|NAME|NATIVE_VECTOR_WIDTH_(?:CHAR|DOUBLE|FLOAT|HALF|INT|LONG|SHORT)|NOT_(?:AVAILABLE|FOUND)|OPENCL_C_VERSION|PARENT_DEVICE|PARTITION_(?:AFFINITY_DOMAIN|BY_AFFINITY_DOMAIN|BY_COUNTS|BY_COUNTS_LIST_END|EQUALLY|FAILED|MAX_SUB_DEVICES|PROPERTIES|TYPE)|PIPE_MAX_(?:ACTIVE_RESERVATIONS|PACKET_SIZE)|PLATFORM|PREFERRED_(?:GLOBAL_ATOMIC_ALIGNMENT|INTEROP_USER_SYNC|LOCAL_ATOMIC_ALIGNMENT|PLATFORM_ATOMIC_ALIGNMENT|VECTOR_WIDTH_(?:CHAR|DOUBLE|FLOAT|HALF|INT|LONG|SHORT))|PRINTF_BUFFER_SIZE|PROFILE|PROFILING_TIMER_RESOLUTION|QUEUE_(?:ON_(?:DEVICE_(?:MAX_SIZE|PREFERRED_SIZE|PROPERTIES)|HOST_PROPERTIES)|PROPERTIES)|REFERENCE_COUNT|SINGLE_FP_CONFIG|SUB_GROUP_INDEPENDENT_FORWARD_PROGRESS|SVM_(?:ATOMICS|CAPABILITIES|COARSE_GRAIN_BUFFER|FINE_GRAIN_BUFFER|FINE_GRAIN_SYSTEM)|TYPE(?:_ACCELERATOR|_ALL|_CPU|_CUSTOM|_DEFAULT|_GPU)?|VENDOR(?:_ID)?|VERSION)|DRIVER_VERSION|EVENT_(?:COMMAND_(?:EXECUTION_STATUS|QUEUE|TYPE)|CONTEXT|REFERENCE_COUNT)|EXEC_(?:KERNEL|NATIVE_KERNEL|STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST)|FILTER_(?:LINEAR|NEAREST)|FLOAT|FP_(?:CORRECTLY_ROUNDED_DIVIDE_SQRT|DENORM|FMA|INF_NAN|ROUND_TO_INF|ROUND_TO_NEAREST|ROUND_TO_ZERO|SOFT_FLOAT)|GLOBAL|HALF_FLOAT|IMAGE_(?:ARRAY_SIZE|BUFFER|DEPTH|ELEMENT_SIZE|FORMAT|FORMAT_MISMATCH|FORMAT_NOT_SUPPORTED|HEIGHT|NUM_MIP_LEVELS|NUM_SAMPLES|ROW_PITCH|SLICE_PITCH|WIDTH)|INTENSITY|INVALID_(?:ARG_INDEX|ARG_SIZE|ARG_VALUE|BINARY|BUFFER_SIZE|BUILD_OPTIONS|COMMAND_QUEUE|COMPILER_OPTIONS|CONTEXT|DEVICE|DEVICE_PARTITION_COUNT|DEVICE_QUEUE|DEVICE_TYPE|EVENT|EVENT_WAIT_LIST|GLOBAL_OFFSET|GLOBAL_WORK_SIZE|GL_OBJECT|HOST_PTR|IMAGE_DESCRIPTOR|IMAGE_FORMAT_DESCRIPTOR|IMAGE_SIZE|KERNEL|KERNEL_ARGS|KERNEL_DEFINITION|KERNEL_NAME|LINKER_OPTIONS|MEM_OBJECT|MIP_LEVEL|OPERATION|PIPE_SIZE|PLATFORM|PROGRAM|PROGRAM_EXECUTABLE|PROPERTY|QUEUE_PROPERTIES|SAMPLER|VALUE|WORK_DIMENSION|WORK_GROUP_SIZE|WORK_ITEM_SIZE)|KERNEL_(?:ARG_(?:ACCESS_(?:NONE|QUALIFIER|READ_ONLY|READ_WRITE|WRITE_ONLY)|ADDRESS_(?:CONSTANT|GLOBAL|LOCAL|PRIVATE|QUALIFIER)|INFO_NOT_AVAILABLE|NAME|TYPE_(?:CONST|NAME|NONE|PIPE|QUALIFIER|RESTRICT|VOLATILE))|ATTRIBUTES|COMPILE_NUM_SUB_GROUPS|COMPILE_WORK_GROUP_SIZE|CONTEXT|EXEC_INFO_SVM_FINE_GRAIN_SYSTEM|EXEC_INFO_SVM_PTRS|FUNCTION_NAME|GLOBAL_WORK_SIZE|LOCAL_MEM_SIZE|LOCAL_SIZE_FOR_SUB_GROUP_COUNT|MAX_NUM_SUB_GROUPS|MAX_SUB_GROUP_SIZE_FOR_NDRANGE|NUM_ARGS|PREFERRED_WORK_GROUP_SIZE_MULTIPLE|PRIVATE_MEM_SIZE|PROGRAM|REFERENCE_COUNT|SUB_GROUP_COUNT_FOR_NDRANGE|WORK_GROUP_SIZE)|LINKER_NOT_AVAILABLE|LINK_PROGRAM_FAILURE|LOCAL|LUMINANCE|MAP_(?:FAILURE|READ|WRITE|WRITE_INVALIDATE_REGION)|MEM_(?:ALLOC_HOST_PTR|ASSOCIATED_MEMOBJECT|CONTEXT|COPY_HOST_PTR|COPY_OVERLAP|FLAGS|HOST_NO_ACCESS|HOST_PTR|HOST_READ_ONLY|HOST_WRITE_ONLY|KERNEL_READ_AND_WRITE|MAP_COUNT|OBJECT_(?:ALLOCATION_FAILURE|BUFFER|IMAGE1D|IMAGE1D_ARRAY|IMAGE1D_BUFFER|IMAGE2D|IMAGE2D_ARRAY|IMAGE3D|PIPE)|OFFSET|READ_ONLY|READ_WRITE|REFERENCE_COUNT|SIZE|SVM_ATOMICS|SVM_FINE_GRAIN_BUFFER|TYPE|USES_SVM_POINTER|USE_HOST_PTR|WRITE_ONLY)|MIGRATE_MEM_OBJECT_(?:CONTENT_UNDEFINED|HOST)|MISALIGNED_SUB_BUFFER_OFFSET|NONE|NON_BLOCKING|OUT_OF_(?:HOST_MEMORY|RESOURCES)|PIPE_(?:MAX_PACKETS|PACKET_SIZE)|PLATFORM_(?:EXTENSIONS|HOST_TIMER_RESOLUTION|NAME|PROFILE|VENDOR|VERSION)|PROFILING_(?:COMMAND_(?:COMPLETE|END|QUEUED|START|SUBMIT)|INFO_NOT_AVAILABLE)|PROGRAM_(?:BINARIES|BINARY_SIZES|BINARY_TYPE(?:_COMPILED_OBJECT|_EXECUTABLE|_LIBRARY|_NONE)?|BUILD_(?:GLOBAL_VARIABLE_TOTAL_SIZE|LOG|OPTIONS|STATUS)|CONTEXT|DEVICES|IL|KERNEL_NAMES|NUM_DEVICES|NUM_KERNELS|REFERENCE_COUNT|SOURCE)|QUEUED|QUEUE_(?:CONTEXT|DEVICE|DEVICE_DEFAULT|ON_DEVICE|ON_DEVICE_DEFAULT|OUT_OF_ORDER_EXEC_MODE_ENABLE|PROFILING_ENABLE|PROPERTIES|REFERENCE_COUNT|SIZE)|R|RA|READ_(?:ONLY|WRITE)_CACHE|RG|RGB|RGBA|RGBx|RGx|RUNNING|Rx|SAMPLER_(?:ADDRESSING_MODE|CONTEXT|FILTER_MODE|LOD_MAX|LOD_MIN|MIP_FILTER_MODE|NORMALIZED_COORDS|REFERENCE_COUNT)|(?:UN)?SIGNED_INT(?:8|16|32)|SNORM_INT(?:8|16)|SUBMITTED|SUCCESS|UNORM_INT(?:16|24|8|_101010|_101010_2)|UNORM_SHORT_(?:555|565)|VERSION_(?:1_0|1_1|1_2|2_0|2_1)|sBGRA|sRGB|sRGBA|sRGBx)\b/,alias:"constant"},"function-opencl-host":{pattern:/\bcl(?:BuildProgram|CloneKernel|CompileProgram|Create(?:Buffer|CommandQueue(?:WithProperties)?|Context|ContextFromType|Image|Image2D|Image3D|Kernel|KernelsInProgram|Pipe|ProgramWith(?:Binary|BuiltInKernels|IL|Source)|Sampler|SamplerWithProperties|SubBuffer|SubDevices|UserEvent)|Enqueue(?:(?:Barrier|Marker)(?:WithWaitList)?|Copy(?:Buffer(?:Rect|ToImage)?|Image(?:ToBuffer)?)|(?:Fill|Map)(?:Buffer|Image)|MigrateMemObjects|NDRangeKernel|NativeKernel|(?:Read|Write)(?:Buffer(?:Rect)?|Image)|SVM(?:Free|Map|MemFill|Memcpy|MigrateMem|Unmap)|Task|UnmapMemObject|WaitForEvents)|Finish|Flush|Get(?:CommandQueueInfo|ContextInfo|Device(?:AndHostTimer|IDs|Info)|Event(?:Profiling)?Info|ExtensionFunctionAddress(?:ForPlatform)?|HostTimer|ImageInfo|Kernel(?:ArgInfo|Info|SubGroupInfo|WorkGroupInfo)|MemObjectInfo|PipeInfo|Platform(?:IDs|Info)|Program(?:Build)?Info|SamplerInfo|SupportedImageFormats)|LinkProgram|(?:Release|Retain)(?:CommandQueue|Context|Device|Event|Kernel|MemObject|Program|Sampler)|SVM(?:Alloc|Free)|Set(?:CommandQueueProperty|DefaultDeviceCommandQueue|EventCallback|Kernel(?:Arg(?:SVMPointer)?|ExecInfo)|Kernel|MemObjectDestructorCallback|UserEventStatus)|Unload(?:Platform)?Compiler|WaitForEvents)\b/,alias:"function"}};E.languages.insertBefore("c","keyword",_),E.languages.cpp&&(_["type-opencl-host-cpp"]={pattern:/\b(?:Buffer|BufferGL|BufferRenderGL|CommandQueue|Context|Device|DeviceCommandQueue|EnqueueArgs|Event|Image|Image1D|Image1DArray|Image1DBuffer|Image2D|Image2DArray|Image2DGL|Image3D|Image3DGL|ImageFormat|ImageGL|Kernel|KernelFunctor|LocalSpaceArg|Memory|NDRange|Pipe|Platform|Program|Sampler|SVMAllocator|SVMTraitAtomic|SVMTraitCoarse|SVMTraitFine|SVMTraitReadOnly|SVMTraitReadWrite|SVMTraitWriteOnly|UserEvent)\b/,alias:"keyword"},E.languages.insertBefore("cpp","keyword",_))}(Prism); +Prism.languages.oz={comment:/\/\*[\s\S]*?\*\/|%.*/,string:{pattern:/"(?:[^"\\]|\\[\s\S])*"/,greedy:!0},atom:{pattern:/'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,alias:"builtin"},keyword:/\$|\[\]|\b(?:_|at|attr|case|catch|choice|class|cond|declare|define|dis|else(?:case|if)?|end|export|fail|false|feat|finally|from|fun|functor|if|import|in|local|lock|meth|nil|not|of|or|prepare|proc|prop|raise|require|self|skip|then|thread|true|try|unit)\b/,function:[/\b[a-z][A-Za-z\d]*(?=\()/,{pattern:/(\{)[A-Z][A-Za-z\d]*\b/,lookbehind:!0}],number:/\b(?:0[bx][\da-f]+|\d+\.?\d*(?:e~?\d+)?)\b|&(?:[^\\]|\\(?:\d{3}|.))/i,variable:/\b[A-Z][A-Za-z\d]*|`(?:[^`\\]|\\.)+`/,"attr-name":/\w+(?=:)/,operator:/:(?:=|::?)|<[-:=]?|=(?:=|=?:?|\\=:?|!!?|[|#+\-*\/,~^@]|\b(?:andthen|div|mod|orelse)\b/,punctuation:/[\[\](){}.:;?]/}; +Prism.languages.parigp={comment:/\/\*[\s\S]*?\*\/|\\\\.*/,string:{pattern:/"(?:[^"\\\r\n]|\\.)*"/,greedy:!0},keyword:function(){var r=["breakpoint","break","dbg_down","dbg_err","dbg_up","dbg_x","forcomposite","fordiv","forell","forpart","forprime","forstep","forsubgroup","forvec","for","iferr","if","local","my","next","return","until","while"];return r=r.map(function(r){return r.split("").join(" *")}).join("|"),RegExp("\\b(?:"+r+")\\b")}(),function:/\w[\w ]*?(?= *\()/,number:{pattern:/((?:\. *\. *)?)(?:\b\d(?: *\d)*(?: *(?!\. *\.)\.(?: *\d)*)?|\. *\d(?: *\d)*)(?: *e *[+-]? *\d(?: *\d)*)?/i,lookbehind:!0},operator:/\. *\.|[*\/!](?: *=)?|%(?: *=|(?: *#)?(?: *')*)?|\+(?: *[+=])?|-(?: *[-=>])?|<(?:(?: *<)?(?: *=)?| *>)?|>(?: *>)?(?: *=)?|=(?: *=){0,2}|\\(?: *\/)?(?: *=)?|&(?: *&)?|\| *\||['#~^]/,punctuation:/[\[\]{}().,:;|]/}; +!function(e){var n=e.languages.parser=e.languages.extend("markup",{keyword:{pattern:/(^|[^^])(?:\^(?:case|eval|for|if|switch|throw)\b|@(?:BASE|CLASS|GET(?:_DEFAULT)?|OPTIONS|SET_DEFAULT|USE)\b)/,lookbehind:!0},variable:{pattern:/(^|[^^])\B\$(?:\w+|(?=[.{]))(?:(?:\.|::?)\w+)*(?:\.|::?)?/,lookbehind:!0,inside:{punctuation:/\.|:+/}},function:{pattern:/(^|[^^])\B[@^]\w+(?:(?:\.|::?)\w+)*(?:\.|::?)?/,lookbehind:!0,inside:{keyword:{pattern:/(^@)(?:GET_|SET_)/,lookbehind:!0},punctuation:/\.|:+/}},escape:{pattern:/\^(?:[$^;@()\[\]{}"':]|#[a-f\d]*)/i,alias:"builtin"},punctuation:/[\[\](){};]/});n=e.languages.insertBefore("parser","keyword",{"parser-comment":{pattern:/(\s)#.*/,lookbehind:!0,alias:"comment"},expression:{pattern:/(^|[^^])\((?:[^()]|\((?:[^()]|\((?:[^()])*\))*\))*\)/,greedy:!0,lookbehind:!0,inside:{string:{pattern:/(^|[^^])(["'])(?:(?!\2)[^^]|\^[\s\S])*\2/,lookbehind:!0},keyword:n.keyword,variable:n.variable,function:n.function,boolean:/\b(?:true|false)\b/,number:/\b(?:0x[a-f\d]+|\d+\.?\d*(?:e[+-]?\d+)?)\b/i,escape:n.escape,operator:/[~+*\/\\%]|!(?:\|\|?|=)?|&&?|\|\|?|==|<[<=]?|>[>=]?|-[fd]?|\b(?:def|eq|ge|gt|in|is|le|lt|ne)\b/,punctuation:n.punctuation}}}),n=e.languages.insertBefore("inside","punctuation",{expression:n.expression,keyword:n.keyword,variable:n.variable,function:n.function,escape:n.escape,"parser-punctuation":{pattern:n.punctuation,alias:"punctuation"}},n.tag.inside["attr-value"])}(Prism); +Prism.languages.pascal={comment:[/\(\*[\s\S]+?\*\)/,/\{[\s\S]+?\}/,/\/\/.*/],string:{pattern:/(?:'(?:''|[^'\r\n])*'(?!')|#[&$%]?[a-f\d]+)+|\^[a-z]/i,greedy:!0},keyword:[{pattern:/(^|[^&])\b(?:absolute|array|asm|begin|case|const|constructor|destructor|do|downto|else|end|file|for|function|goto|if|implementation|inherited|inline|interface|label|nil|object|of|operator|packed|procedure|program|record|reintroduce|repeat|self|set|string|then|to|type|unit|until|uses|var|while|with)\b/i,lookbehind:!0},{pattern:/(^|[^&])\b(?:dispose|exit|false|new|true)\b/i,lookbehind:!0},{pattern:/(^|[^&])\b(?:class|dispinterface|except|exports|finalization|finally|initialization|inline|library|on|out|packed|property|raise|resourcestring|threadvar|try)\b/i,lookbehind:!0},{pattern:/(^|[^&])\b(?:absolute|abstract|alias|assembler|bitpacked|break|cdecl|continue|cppdecl|cvar|default|deprecated|dynamic|enumerator|experimental|export|external|far|far16|forward|generic|helper|implements|index|interrupt|iochecks|local|message|name|near|nodefault|noreturn|nostackframe|oldfpccall|otherwise|overload|override|pascal|platform|private|protected|public|published|read|register|reintroduce|result|safecall|saveregisters|softfloat|specialize|static|stdcall|stored|strict|unaligned|unimplemented|varargs|virtual|write)\b/i,lookbehind:!0}],number:[/(?:[&%]\d+|\$[a-f\d]+)/i,/\b\d+(?:\.\d+)?(?:e[+-]?\d+)?/i],operator:[/\.\.|\*\*|:=|<[<=>]?|>[>=]?|[+\-*\/]=?|[@^=]/i,{pattern:/(^|[^&])\b(?:and|as|div|exclude|in|include|is|mod|not|or|shl|shr|xor)\b/,lookbehind:!0}],punctuation:/\(\.|\.\)|[()\[\]:;,.]/},Prism.languages.objectpascal=Prism.languages.pascal; +!function(e){var n="(?:\\w+(?:)?|)".replace(//g,function(){return"\\((?:[^()]|\\((?:[^()]|\\([^()]*\\))*\\))*\\)"}),t=e.languages.pascaligo={comment:/\(\*[\s\S]+?\*\)|\/\/.*/,string:{pattern:/(["'`])(?:\\[\s\S]|(?!\1)[^\\])*\1|\^[a-z]/i,greedy:!0},"class-name":[{pattern:RegExp("(\\btype\\s+\\w+\\s+is\\s+)".replace(//g,function(){return n}),"i"),lookbehind:!0,inside:null},{pattern:RegExp("(?=\\s+is\\b)".replace(//g,function(){return n}),"i"),inside:null},{pattern:RegExp("(:\\s*)".replace(//g,function(){return n})),lookbehind:!0,inside:null}],keyword:{pattern:/(^|[^&])\b(?:begin|block|case|const|else|end|fail|for|from|function|if|is|nil|of|remove|return|skip|then|type|var|while|with)\b/i,lookbehind:!0},boolean:{pattern:/(^|[^&])\b(?:True|False)\b/i,lookbehind:!0},builtin:{pattern:/(^|[^&])\b(?:bool|int|list|map|nat|record|string|unit)\b/i,lookbehind:!0},function:/\w+(?=\s*\()/i,number:[/%[01]+|&[0-7]+|\$[a-f\d]+/i,/\b\d+(?:\.\d+)?(?:e[+-]?\d+)?(?:mtz|n)?/i],operator:/->|=\/=|\.\.|\*\*|:=|<[<=>]?|>[>=]?|[+\-*\/]=?|[@^=|]|\b(?:and|mod|or)\b/,punctuation:/\(\.|\.\)|[()\[\]:;,.{}]/},i=["comment","keyword","builtin","operator","punctuation"].reduce(function(e,n){return e[n]=t[n],e},{});t["class-name"].forEach(function(e){e.inside=i})}(Prism); +Prism.languages.pcaxis={string:/"[^"]*"/,keyword:{pattern:/((?:^|;)\s*)[-A-Z\d]+(?:\s*\[[-\w]+\])?(?:\s*\("[^"]*"(?:,\s*"[^"]*")*\))?(?=\s*=)/,lookbehind:!0,greedy:!0,inside:{keyword:/^[-A-Z\d]+/,language:{pattern:/^(\s*)\[[-\w]+\]/,lookbehind:!0,inside:{punctuation:/^\[|\]$/,property:/[-\w]+/}},"sub-key":{pattern:/^(\s*)[\s\S]+/,lookbehind:!0,inside:{parameter:{pattern:/"[^"]*"/,alias:"property"},punctuation:/^\(|\)$|,/}}}},operator:/=/,tlist:{pattern:/TLIST\s*\(\s*\w+(?:(?:\s*,\s*"[^"]*")+|\s*,\s*"[^"]*"-"[^"]*")?\s*\)/,greedy:!0,inside:{function:/^TLIST/,property:{pattern:/^(\s*\(\s*)\w+/,lookbehind:!0},string:/"[^"]*"/,punctuation:/[(),]/,operator:/-/}},punctuation:/[;,]/,number:{pattern:/(^|\s)\d+(?:\.\d+)?(?!\S)/,lookbehind:!0},boolean:/YES|NO/},Prism.languages.px=Prism.languages.pcaxis; +Prism.languages.peoplecode={comment:RegExp(["/\\*[^]*?\\*/","\\bREM[^;]*;","<\\*(?:[^<*]|\\*(?!>)|<(?!\\*)|<\\*(?:(?!\\*>)[^])*\\*>)*\\*>","/\\+[^]*?\\+/"].join("|")),string:{pattern:/'(?:''|[^'\r\n])*'(?!')|"(?:""|[^"\r\n])*"(?!")/,greedy:!0},variable:/%\w+/,"function-definition":{pattern:/((?:^|[^\w-])(?:function|method)\s+)\w+/i,lookbehind:!0,alias:"function"},"class-name":{pattern:/((?:^|[^-\w])(?:as|catch|class|component|create|extends|global|implements|instance|local|of|property|returns)\s+)\w+(?::\w+)*/i,lookbehind:!0,inside:{punctuation:/:/}},keyword:/\b(?:abstract|alias|as|catch|class|component|constant|create|declare|else|end-(?:class|evaluate|for|function|get|if|method|set|try|while)|evaluate|extends|for|function|get|global|implements|import|instance|if|library|local|method|null|of|out|peopleCode|private|program|property|protected|readonly|ref|repeat|returns?|set|step|then|throw|to|try|until|value|when(?:-other)?|while)\b/i,"operator-keyword":{pattern:/\b(?:and|not|or)\b/i,alias:"operator"},function:/[_a-z]\w*(?=\s*\()/i,boolean:/\b(?:false|true)\b/i,number:/\b\d+(?:\.\d+)?\b/,operator:/<>|[<>]=?|!=|\*\*|[-+*/|=@]/,punctuation:/[:.;,()[\]]/},Prism.languages.pcode=Prism.languages.peoplecode; +Prism.languages.perl={comment:[{pattern:/(^\s*)=\w+[\s\S]*?=cut.*/m,lookbehind:!0},{pattern:/(^|[^\\$])#.*/,lookbehind:!0}],string:[{pattern:/\b(?:q|qq|qx|qw)\s*([^a-zA-Z0-9\s{(\[<])(?:(?!\1)[^\\]|\\[\s\S])*\1/,greedy:!0},{pattern:/\b(?:q|qq|qx|qw)\s+([a-zA-Z0-9])(?:(?!\1)[^\\]|\\[\s\S])*\1/,greedy:!0},{pattern:/\b(?:q|qq|qx|qw)\s*\((?:[^()\\]|\\[\s\S])*\)/,greedy:!0},{pattern:/\b(?:q|qq|qx|qw)\s*\{(?:[^{}\\]|\\[\s\S])*\}/,greedy:!0},{pattern:/\b(?:q|qq|qx|qw)\s*\[(?:[^[\]\\]|\\[\s\S])*\]/,greedy:!0},{pattern:/\b(?:q|qq|qx|qw)\s*<(?:[^<>\\]|\\[\s\S])*>/,greedy:!0},{pattern:/("|`)(?:(?!\1)[^\\]|\\[\s\S])*\1/,greedy:!0},{pattern:/'(?:[^'\\\r\n]|\\.)*'/,greedy:!0}],regex:[{pattern:/\b(?:m|qr)\s*([^a-zA-Z0-9\s{(\[<])(?:(?!\1)[^\\]|\\[\s\S])*\1[msixpodualngc]*/,greedy:!0},{pattern:/\b(?:m|qr)\s+([a-zA-Z0-9])(?:(?!\1)[^\\]|\\[\s\S])*\1[msixpodualngc]*/,greedy:!0},{pattern:/\b(?:m|qr)\s*\((?:[^()\\]|\\[\s\S])*\)[msixpodualngc]*/,greedy:!0},{pattern:/\b(?:m|qr)\s*\{(?:[^{}\\]|\\[\s\S])*\}[msixpodualngc]*/,greedy:!0},{pattern:/\b(?:m|qr)\s*\[(?:[^[\]\\]|\\[\s\S])*\][msixpodualngc]*/,greedy:!0},{pattern:/\b(?:m|qr)\s*<(?:[^<>\\]|\\[\s\S])*>[msixpodualngc]*/,greedy:!0},{pattern:/(^|[^-]\b)(?:s|tr|y)\s*([^a-zA-Z0-9\s{(\[<])(?:(?!\2)[^\\]|\\[\s\S])*\2(?:(?!\2)[^\\]|\\[\s\S])*\2[msixpodualngcer]*/,lookbehind:!0,greedy:!0},{pattern:/(^|[^-]\b)(?:s|tr|y)\s+([a-zA-Z0-9])(?:(?!\2)[^\\]|\\[\s\S])*\2(?:(?!\2)[^\\]|\\[\s\S])*\2[msixpodualngcer]*/,lookbehind:!0,greedy:!0},{pattern:/(^|[^-]\b)(?:s|tr|y)\s*\((?:[^()\\]|\\[\s\S])*\)\s*\((?:[^()\\]|\\[\s\S])*\)[msixpodualngcer]*/,lookbehind:!0,greedy:!0},{pattern:/(^|[^-]\b)(?:s|tr|y)\s*\{(?:[^{}\\]|\\[\s\S])*\}\s*\{(?:[^{}\\]|\\[\s\S])*\}[msixpodualngcer]*/,lookbehind:!0,greedy:!0},{pattern:/(^|[^-]\b)(?:s|tr|y)\s*\[(?:[^[\]\\]|\\[\s\S])*\]\s*\[(?:[^[\]\\]|\\[\s\S])*\][msixpodualngcer]*/,lookbehind:!0,greedy:!0},{pattern:/(^|[^-]\b)(?:s|tr|y)\s*<(?:[^<>\\]|\\[\s\S])*>\s*<(?:[^<>\\]|\\[\s\S])*>[msixpodualngcer]*/,lookbehind:!0,greedy:!0},{pattern:/\/(?:[^\/\\\r\n]|\\.)*\/[msixpodualngc]*(?=\s*(?:$|[\r\n,.;})&|\-+*~<>!?^]|(?:lt|gt|le|ge|eq|ne|cmp|not|and|or|xor|x)\b))/,greedy:!0}],variable:[/[&*$@%]\{\^[A-Z]+\}/,/[&*$@%]\^[A-Z_]/,/[&*$@%]#?(?=\{)/,/[&*$@%]#?(?:(?:::)*'?(?!\d)[\w$]+)+(?:::)*/i,/[&*$@%]\d+/,/(?!%=)[$@%][!"#$%&'()*+,\-.\/:;<=>?@[\\\]^_`{|}~]/],filehandle:{pattern:/<(?![<=])\S*>|\b_\b/,alias:"symbol"},vstring:{pattern:/v\d+(?:\.\d+)*|\d+(?:\.\d+){2,}/,alias:"string"},function:{pattern:/sub [a-z0-9_]+/i,inside:{keyword:/sub/}},keyword:/\b(?:any|break|continue|default|delete|die|do|else|elsif|eval|for|foreach|given|goto|if|last|local|my|next|our|package|print|redo|require|return|say|state|sub|switch|undef|unless|until|use|when|while)\b/,number:/\b(?:0x[\dA-Fa-f](?:_?[\dA-Fa-f])*|0b[01](?:_?[01])*|(?:\d(?:_?\d)*)?\.?\d(?:_?\d)*(?:[Ee][+-]?\d+)?)\b/,operator:/-[rwxoRWXOezsfdlpSbctugkTBMAC]\b|\+[+=]?|-[-=>]?|\*\*?=?|\/\/?=?|=[=~>]?|~[~=]?|\|\|?=?|&&?=?|<(?:=>?|<=?)?|>>?=?|![~=]?|[%^]=?|\.(?:=|\.\.?)?|[\\?]|\bx(?:=|\b)|\b(?:lt|gt|le|ge|eq|ne|cmp|not|and|or|xor)\b/,punctuation:/[{}[\];(),:]/}; +!function(a){var e="(?:\\b[a-zA-Z]\\w*|[|\\\\[\\]])+";a.languages.phpdoc=a.languages.extend("javadoclike",{parameter:{pattern:RegExp("(@(?:global|param|property(?:-read|-write)?|var)\\s+(?:"+e+"\\s+)?)\\$\\w+"),lookbehind:!0}}),a.languages.insertBefore("phpdoc","keyword",{"class-name":[{pattern:RegExp("(@(?:global|package|param|property(?:-read|-write)?|return|subpackage|throws|var)\\s+)"+e),lookbehind:!0,inside:{keyword:/\b(?:callback|resource|boolean|integer|double|object|string|array|false|float|mixed|bool|null|self|true|void|int)\b/,punctuation:/[|\\[\]()]/}}]}),a.languages.javadoclike.addSupport("php",a.languages.phpdoc)}(Prism); +Prism.languages.insertBefore("php","variable",{this:/\$this\b/,global:/\$(?:_(?:SERVER|GET|POST|FILES|REQUEST|SESSION|ENV|COOKIE)|GLOBALS|HTTP_RAW_POST_DATA|argc|argv|php_errormsg|http_response_header)\b/,scope:{pattern:/\b[\w\\]+::/,inside:{keyword:/static|self|parent/,punctuation:/::|\\/}}}); +Prism.languages.sql={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:--|\/\/|#).*)/,lookbehind:!0},variable:[{pattern:/@(["'`])(?:\\[\s\S]|(?!\1)[^\\])+\1/,greedy:!0},/@[\w.$]+/],string:{pattern:/(^|[^@\\])("|')(?:\\[\s\S]|(?!\2)[^\\]|\2\2)*\2/,greedy:!0,lookbehind:!0},function:/\b(?:AVG|COUNT|FIRST|FORMAT|LAST|LCASE|LEN|MAX|MID|MIN|MOD|NOW|ROUND|SUM|UCASE)(?=\s*\()/i,keyword:/\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR(?:ACTER|SET)?|CHECK(?:POINT)?|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMNS?|COMMENT|COMMIT(?:TED)?|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS(?:TABLE)?|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|CYCLE|DATA(?:BASES?)?|DATE(?:TIME)?|DAY|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITERS?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE|ELSE(?:IF)?|ENABLE|ENCLOSED|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPED?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|HOUR|IDENTITY(?:_INSERT|COL)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTERVAL|INTO|INVOKER|ISOLATION|ITERATE|JOIN|KEYS?|KILL|LANGUAGE|LAST|LEAVE|LEFT|LEVEL|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|LOOP|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MINUTE|MODE|MODIFIES|MODIFY|MONTH|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL|NATURAL|NCHAR|NEXT|NO|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREPARE|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READS?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEAT(?:ABLE)?|REPLACE|REPLICATION|REQUIRE|RESIGNAL|RESTORE|RESTRICT|RETURN(?:S|ING)?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SECOND|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|SQL|START(?:ING)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED|TEXT(?:SIZE)?|THEN|TIME(?:STAMP)?|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNLOCK|UNPIVOT|UNSIGNED|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?|YEAR)\b/i,boolean:/\b(?:TRUE|FALSE|NULL)\b/i,number:/\b0x[\da-f]+\b|\b\d+\.?\d*|\B\.\d+\b/i,operator:/[-+*\/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|IN|LIKE|NOT|OR|IS|DIV|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/}; +!function(E){var A=E.languages.plsql=E.languages.extend("sql",{comment:[/\/\*[\s\S]*?\*\//,/--.*/]}),T=A.keyword;Array.isArray(T)||(T=A.keyword=[T]),T.unshift(/\b(?:ACCESS|AGENT|AGGREGATE|ARRAY|ARROW|AT|ATTRIBUTE|AUDIT|AUTHID|BFILE_BASE|BLOB_BASE|BLOCK|BODY|BOTH|BOUND|BYTE|CALLING|CHAR_BASE|CHARSET(?:FORM|ID)|CLOB_BASE|COLAUTH|COLLECT|CLUSTERS?|COMPILED|COMPRESS|CONSTANT|CONSTRUCTOR|CONTEXT|CRASH|CUSTOMDATUM|DANGLING|DATE_BASE|DEFINE|DETERMINISTIC|DURATION|ELEMENT|EMPTY|EXCEPTIONS?|EXCLUSIVE|EXTERNAL|FINAL|FORALL|FORM|FOUND|GENERAL|HEAP|HIDDEN|IDENTIFIED|IMMEDIATE|INCLUDING|INCREMENT|INDICATOR|INDEXES|INDICES|INFINITE|INITIAL|ISOPEN|INSTANTIABLE|INTERFACE|INVALIDATE|JAVA|LARGE|LEADING|LENGTH|LIBRARY|LIKE[24C]|LIMITED|LONG|LOOP|MAP|MAXEXTENTS|MAXLEN|MEMBER|MINUS|MLSLABEL|MULTISET|NAME|NAN|NATIVE|NEW|NOAUDIT|NOCOMPRESS|NOCOPY|NOTFOUND|NOWAIT|NUMBER(?:_BASE)?|OBJECT|OCI(?:COLL|DATE|DATETIME|DURATION|INTERVAL|LOBLOCATOR|NUMBER|RAW|REF|REFCURSOR|ROWID|STRING|TYPE)|OFFLINE|ONLINE|ONLY|OPAQUE|OPERATOR|ORACLE|ORADATA|ORGANIZATION|ORL(?:ANY|VARY)|OTHERS|OVERLAPS|OVERRIDING|PACKAGE|PARALLEL_ENABLE|PARAMETERS?|PASCAL|PCTFREE|PIPE(?:LINED)?|PRAGMA|PRIOR|PRIVATE|RAISE|RANGE|RAW|RECORD|REF|REFERENCE|REM|REMAINDER|RESULT|RESOURCE|RETURNING|REVERSE|ROW(?:ID|NUM|TYPE)|SAMPLE|SB[124]|SEGMENT|SELF|SEPARATE|SEQUENCE|SHORT|SIZE(?:_T)?|SPARSE|SQL(?:CODE|DATA|NAME|STATE)|STANDARD|STATIC|STDDEV|STORED|STRING|STRUCT|STYLE|SUBMULTISET|SUBPARTITION|SUBSTITUTABLE|SUBTYPE|SUCCESSFUL|SYNONYM|SYSDATE|TABAUTH|TDO|THE|TIMEZONE_(?:ABBR|HOUR|MINUTE|REGION)|TRAILING|TRANSAC(?:TIONAL)?|TRUSTED|UB[124]|UID|UNDER|UNTRUSTED|VALIDATE|VALIST|VARCHAR2|VARIABLE|VARIANCE|VARRAY|VIEWS|VOID|WHENEVER|WRAPPED|ZONE)\b/i);var R=A.operator;Array.isArray(R)||(R=A.operator=[R]),R.unshift(/:=/)}(Prism); +Prism.languages.powerquery={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:\/\/).*)/,lookbehind:!0},"quoted-identifier":{pattern:/#"(?:[^"\r\n]|"")*"(?!")/,greedy:!0,alias:"variable"},string:{pattern:/"(?:[^"\r\n]|"")*"(?!")/,greedy:!0},constant:[/\bDay\.(?:Sunday|Monday|Tuesday|Wednesday|Thursday|Friday|Saturday)\b/,/\bTraceLevel\.(?:Critical|Error|Information|Verbose|Warning)\b/,/\bOccurrence\.(?:First|Last|All)\b/,/\bOrder\.(?:Ascending|Descending)\b/,/\bRoundingMode\.(?:AwayFromZero|Down|ToEven|TowardZero|Up)\b/,/\bMissingField\.(?:Error|Ignore|UseNull)\b/,/\bQuoteStyle\.(?:Csv|None)\b/,/\bJoinKind\.(?:Inner|LeftOuter|RightOuter|FullOuter|LeftAnti|RightAnti)\b/,/\bGroupKind\.(?:Global|Local)\b/,/\bExtraValues\.(?:List|Ignore|Error)\b/,/\bJoinAlgorithm\.(?:Dynamic|PairwiseHash|SortMerge|LeftHash|RightHash|LeftIndex|RightIndex)\b/,/\bJoinSide\.(?:Left|Right)\b/,/\bPrecision\.(?:Double|Decimal)\b/,/\bRelativePosition\.From(?:End|Start)\b/,/\bTextEncoding\.(?:Ascii|BigEndianUnicode|Unicode|Utf8|Utf16|Windows)\b/,/\b(?:Any|Binary|Date|DateTime|DateTimeZone|Duration|Int8|Int16|Int32|Int64|Function|List|Logical|None|Number|Record|Table|Text|Time)\.Type\b/,/\bnull\b/],boolean:/\b(?:true|false)\b/,keyword:/\b(?:and|as|each|else|error|if|in|is|let|meta|not|nullable|optional|or|otherwise|section|shared|then|try|type)\b|#(?:binary|date|datetime|datetimezone|duration|infinity|nan|sections|shared|table|time)\b/,function:{pattern:/(^|[^#\w.])(?!\d)[\w.]+(?=\s*\()/,lookbehind:!0},"data-type":{pattern:/\b(?:any|anynonnull|binary|date|datetime|datetimezone|duration|function|list|logical|none|number|record|table|text|time|type)\b/,alias:"variable"},number:{pattern:/\b0x[\da-f]+\b|(?:[+-]?(?:\b\d+\.)?\b\d+|[+-]\.\d+|(^|[^.])\B\.\d+)(?:e[+-]?\d+)?\b/i,lookbehind:!0},operator:/[-+*\/&?@^]|<(?:=>?|>)?|>=?|=>?|\.\.\.?/,punctuation:/[,;\[\](){}]/},Prism.languages.pq=Prism.languages.powerquery,Prism.languages.mscript=Prism.languages.powerquery; +!function(e){var i=Prism.languages.powershell={comment:[{pattern:/(^|[^`])<#[\s\S]*?#>/,lookbehind:!0},{pattern:/(^|[^`])#.*/,lookbehind:!0}],string:[{pattern:/"(?:`[\s\S]|[^`"])*"/,greedy:!0,inside:{function:{pattern:/(^|[^`])\$\((?:\$\([^\r\n()]*\)|(?!\$\()[^\r\n)])*\)/,lookbehind:!0,inside:{}}}},{pattern:/'(?:[^']|'')*'/,greedy:!0}],namespace:/\[[a-z](?:\[(?:\[[^\]]*]|[^\[\]])*]|[^\[\]])*]/i,boolean:/\$(?:true|false)\b/i,variable:/\$\w+\b/,function:[/\b(?:Add|Approve|Assert|Backup|Block|Checkpoint|Clear|Close|Compare|Complete|Compress|Confirm|Connect|Convert|ConvertFrom|ConvertTo|Copy|Debug|Deny|Disable|Disconnect|Dismount|Edit|Enable|Enter|Exit|Expand|Export|Find|ForEach|Format|Get|Grant|Group|Hide|Import|Initialize|Install|Invoke|Join|Limit|Lock|Measure|Merge|Move|New|New|Open|Optimize|Out|Ping|Pop|Protect|Publish|Push|Read|Receive|Redo|Register|Remove|Rename|Repair|Request|Reset|Resize|Resolve|Restart|Restore|Resume|Revoke|Save|Search|Select|Send|Set|Show|Skip|Sort|Split|Start|Step|Stop|Submit|Suspend|Switch|Sync|Tee|Test|Trace|Unblock|Undo|Uninstall|Unlock|Unprotect|Unpublish|Unregister|Update|Use|Wait|Watch|Where|Write)-[a-z]+\b/i,/\b(?:ac|cat|chdir|clc|cli|clp|clv|compare|copy|cp|cpi|cpp|cvpa|dbp|del|diff|dir|ebp|echo|epal|epcsv|epsn|erase|fc|fl|ft|fw|gal|gbp|gc|gci|gcs|gdr|gi|gl|gm|gp|gps|group|gsv|gu|gv|gwmi|iex|ii|ipal|ipcsv|ipsn|irm|iwmi|iwr|kill|lp|ls|measure|mi|mount|move|mp|mv|nal|ndr|ni|nv|ogv|popd|ps|pushd|pwd|rbp|rd|rdr|ren|ri|rm|rmdir|rni|rnp|rp|rv|rvpa|rwmi|sal|saps|sasv|sbp|sc|select|set|shcm|si|sl|sleep|sls|sort|sp|spps|spsv|start|sv|swmi|tee|trcm|type|write)\b/i],keyword:/\b(?:Begin|Break|Catch|Class|Continue|Data|Define|Do|DynamicParam|Else|ElseIf|End|Exit|Filter|Finally|For|ForEach|From|Function|If|InlineScript|Parallel|Param|Process|Return|Sequence|Switch|Throw|Trap|Try|Until|Using|Var|While|Workflow)\b/i,operator:{pattern:/(\W?)(?:!|-(?:eq|ne|gt|ge|lt|le|sh[lr]|not|b?(?:and|x?or)|(?:Not)?(?:Like|Match|Contains|In)|Replace|Join|is(?:Not)?|as)\b|-[-=]?|\+[+=]?|[*\/%]=?)/i,lookbehind:!0},punctuation:/[|{}[\];(),.]/},r=i.string[0].inside;r.boolean=i.boolean,r.variable=i.variable,r.function.inside=i}(); +Prism.languages.processing=Prism.languages.extend("clike",{keyword:/\b(?:break|catch|case|class|continue|default|else|extends|final|for|if|implements|import|new|null|private|public|return|static|super|switch|this|try|void|while)\b/,operator:/<[<=]?|>[>=]?|&&?|\|\|?|[%?]|[!=+\-*\/]=?/}),Prism.languages.insertBefore("processing","number",{constant:/\b(?!XML\b)[A-Z][A-Z\d_]+\b/,type:{pattern:/\b(?:boolean|byte|char|color|double|float|int|XML|[A-Z]\w*)\b/,alias:"variable"}}),Prism.languages.processing.function.pattern=/\w+(?=\s*\()/,Prism.languages.processing["class-name"].alias="variable"; +Prism.languages.prolog={comment:[/%.+/,/\/\*[\s\S]*?\*\//],string:{pattern:/(["'])(?:\1\1|\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},builtin:/\b(?:fx|fy|xf[xy]?|yfx?)\b/,variable:/\b[A-Z_]\w*/,function:/\b[a-z]\w*(?:(?=\()|\/\d+)/,number:/\b\d+\.?\d*/,operator:/[:\\=><\-?*@\/;+^|!$.]+|\b(?:is|mod|not|xor)\b/,punctuation:/[(){}\[\],]/}; +Prism.languages.properties={comment:/^[ \t]*[#!].*$/m,"attr-value":{pattern:/(^[ \t]*(?:\\(?:\r\n|[\s\S])|[^\\\s:=])+?(?: *[=:] *| ))(?:\\(?:\r\n|[\s\S])|[^\\\r\n])+/m,lookbehind:!0},"attr-name":/^[ \t]*(?:\\(?:\r\n|[\s\S])|[^\\\s:=])+?(?= *[=:] *| )/m,punctuation:/[=:]/}; +!function(e){var s=/\b(?:double|float|[su]?int(?:32|64)|s?fixed(?:32|64)|bool|string|bytes)\b/;e.languages.protobuf=e.languages.extend("clike",{"class-name":[{pattern:/(\b(?:enum|extend|message|service)\s+)[A-Za-z_]\w*(?=\s*\{)/,lookbehind:!0},{pattern:/(\b(?:rpc\s+\w+|returns)\s*\(\s*(?:stream\s+)?)\.?[A-Za-z_]\w*(?:\.[A-Za-z_]\w*)*(?=\s*\))/,lookbehind:!0}],keyword:/\b(?:enum|extend|extensions|import|message|oneof|option|optional|package|public|repeated|required|reserved|returns|rpc(?=\s+\w)|service|stream|syntax|to)\b(?!\s*=\s*\d)/,function:/[a-z_]\w*(?=\s*\()/i}),e.languages.insertBefore("protobuf","operator",{map:{pattern:/\bmap<\s*[\w.]+\s*,\s*[\w.]+\s*>(?=\s+[a-z_]\w*\s*[=;])/i,alias:"class-name",inside:{punctuation:/[<>.,]/,builtin:s}},builtin:s,"positional-class-name":{pattern:/(?:\b|\B\.)[a-z_]\w*(?:\.[a-z_]\w*)*(?=\s+[a-z_]\w*\s*[=;])/i,alias:"class-name",inside:{punctuation:/\./}},annotation:{pattern:/(\[\s*)[a-z_]\w*(?=\s*=)/i,lookbehind:!0}})}(Prism); +!function(e){e.languages.pug={comment:{pattern:/(^([\t ]*))\/\/.*(?:(?:\r?\n|\r)\2[\t ]+.+)*/m,lookbehind:!0},"multiline-script":{pattern:/(^([\t ]*)script\b.*\.[\t ]*)(?:(?:\r?\n|\r(?!\n))(?:\2[\t ]+.+|\s*?(?=\r?\n|\r)))+/m,lookbehind:!0,inside:e.languages.javascript},filter:{pattern:/(^([\t ]*)):.+(?:(?:\r?\n|\r(?!\n))(?:\2[\t ]+.+|\s*?(?=\r?\n|\r)))+/m,lookbehind:!0,inside:{"filter-name":{pattern:/^:[\w-]+/,alias:"variable"}}},"multiline-plain-text":{pattern:/(^([\t ]*)[\w\-#.]+\.[\t ]*)(?:(?:\r?\n|\r(?!\n))(?:\2[\t ]+.+|\s*?(?=\r?\n|\r)))+/m,lookbehind:!0},markup:{pattern:/(^[\t ]*)<.+/m,lookbehind:!0,inside:e.languages.markup},doctype:{pattern:/((?:^|\n)[\t ]*)doctype(?: .+)?/,lookbehind:!0},"flow-control":{pattern:/(^[\t ]*)(?:if|unless|else|case|when|default|each|while)\b(?: .+)?/m,lookbehind:!0,inside:{each:{pattern:/^each .+? in\b/,inside:{keyword:/\b(?:each|in)\b/,punctuation:/,/}},branch:{pattern:/^(?:if|unless|else|case|when|default|while)\b/,alias:"keyword"},rest:e.languages.javascript}},keyword:{pattern:/(^[\t ]*)(?:block|extends|include|append|prepend)\b.+/m,lookbehind:!0},mixin:[{pattern:/(^[\t ]*)mixin .+/m,lookbehind:!0,inside:{keyword:/^mixin/,function:/\w+(?=\s*\(|\s*$)/,punctuation:/[(),.]/}},{pattern:/(^[\t ]*)\+.+/m,lookbehind:!0,inside:{name:{pattern:/^\+\w+/,alias:"function"},rest:e.languages.javascript}}],script:{pattern:/(^[\t ]*script(?:(?:&[^(]+)?\([^)]+\))*[\t ]+).+/m,lookbehind:!0,inside:e.languages.javascript},"plain-text":{pattern:/(^[\t ]*(?!-)[\w\-#.]*[\w\-](?:(?:&[^(]+)?\([^)]+\))*\/?[\t ]+).+/m,lookbehind:!0},tag:{pattern:/(^[\t ]*)(?!-)[\w\-#.]*[\w\-](?:(?:&[^(]+)?\([^)]+\))*\/?:?/m,lookbehind:!0,inside:{attributes:[{pattern:/&[^(]+\([^)]+\)/,inside:e.languages.javascript},{pattern:/\([^)]+\)/,inside:{"attr-value":{pattern:/(=\s*)(?:\{[^}]*\}|[^,)\r\n]+)/,lookbehind:!0,inside:e.languages.javascript},"attr-name":/[\w-]+(?=\s*!?=|\s*[,)])/,punctuation:/[!=(),]+/}}],punctuation:/:/,"attr-id":/#[\w\-]+/,"attr-class":/\.[\w\-]+/}},code:[{pattern:/(^[\t ]*(?:-|!?=)).+/m,lookbehind:!0,inside:e.languages.javascript}],punctuation:/[.\-!=|]+/};for(var t=[{filter:"atpl",language:"twig"},{filter:"coffee",language:"coffeescript"},"ejs","handlebars","less","livescript","markdown",{filter:"sass",language:"scss"},"stylus"],n={},a=0,i=t.length;a\s*|^\s*))\/(?:[^\/\\]|\\[\s\S])+\/(?:[imx]+\b|\B)/,lookbehind:!0,greedy:!0,inside:{"extended-regex":{pattern:/^\/(?:[^\/\\]|\\[\s\S])+\/[im]*x[im]*$/,inside:{comment:/#.*/}}}},comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},string:{pattern:/(["'])(?:\$\{(?:[^'"}]|(["'])(?:(?!\2)[^\\]|\\[\s\S])*\2)+\}|(?!\1)[^\\]|\\[\s\S])*\1/,greedy:!0,inside:{"double-quoted":{pattern:/^"[\s\S]*"$/,inside:{}}}},variable:{pattern:/\$(?:::)?\w+(?:::\w+)*/,inside:{punctuation:/::/}},"attr-name":/(?:\w+|\*)(?=\s*=>)/,function:[{pattern:/(\.)(?!\d)\w+/,lookbehind:!0},/\b(?:contain|debug|err|fail|include|info|notice|realize|require|tag|warning)\b|\b(?!\d)\w+(?=\()/],number:/\b(?:0x[a-f\d]+|\d+(?:\.\d+)?(?:e-?\d+)?)\b/i,boolean:/\b(?:true|false)\b/,keyword:/\b(?:application|attr|case|class|consumes|default|define|else|elsif|function|if|import|inherits|node|private|produces|type|undef|unless)\b/,datatype:{pattern:/\b(?:Any|Array|Boolean|Callable|Catalogentry|Class|Collection|Data|Default|Enum|Float|Hash|Integer|NotUndef|Numeric|Optional|Pattern|Regexp|Resource|Runtime|Scalar|String|Struct|Tuple|Type|Undef|Variant)\b/,alias:"symbol"},operator:/=[=~>]?|![=~]?|<(?:<\|?|[=~|-])?|>[>=]?|->?|~>|\|>?>?|[*\/%+?]|\b(?:and|in|or)\b/,punctuation:/[\[\]{}().,;]|:+/};var n=[{pattern:/(^|[^\\])\$\{(?:[^'"{}]|\{[^}]*\}|(["'])(?:(?!\2)[^\\]|\\[\s\S])*\2)+\}/,lookbehind:!0,inside:{"short-variable":{pattern:/(^\$\{)(?!\w+\()(?:::)?\w+(?:::\w+)*/,lookbehind:!0,alias:"variable",inside:{punctuation:/::/}},delimiter:{pattern:/^\$/,alias:"variable"},rest:e.languages.puppet}},{pattern:/(^|[^\\])\$(?:::)?\w+(?:::\w+)*/,lookbehind:!0,alias:"variable",inside:{punctuation:/::/}}];e.languages.puppet.heredoc[0].inside.interpolation=n,e.languages.puppet.string.inside["double-quoted"].inside.interpolation=n}(Prism); +!function(r){r.languages.pure={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?\*\//,lookbehind:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0},/#!.+/],"inline-lang":{pattern:/%<[\s\S]+?%>/,greedy:!0,inside:{lang:{pattern:/(^%< *)-\*-.+?-\*-/,lookbehind:!0,alias:"comment"},delimiter:{pattern:/^%<.*|%>$/,alias:"punctuation"}}},string:{pattern:/"(?:\\.|[^"\\\r\n])*"/,greedy:!0},number:{pattern:/((?:\.\.)?)(?:\b(?:inf|nan)\b|\b0x[\da-f]+|(?:\b(?:0b)?\d+(?:\.\d)?|\B\.\d)\d*(?:e[+-]?\d+)?L?)/i,lookbehind:!0},keyword:/\b(?:ans|break|bt|case|catch|cd|clear|const|def|del|dump|else|end|exit|extern|false|force|help|if|infix[lr]?|interface|let|ls|mem|namespace|nonfix|NULL|of|otherwise|outfix|override|postfix|prefix|private|public|pwd|quit|run|save|show|stats|then|throw|trace|true|type|underride|using|when|with)\b/,function:/\b(?:abs|add_(?:(?:fundef|interface|macdef|typedef)(?:_at)?|addr|constdef|vardef)|all|any|applp?|arity|bigintp?|blob(?:_crc|_size|p)?|boolp?|byte_(?:matrix|pointer)|byte_c?string(?:_pointer)?|calloc|cat|catmap|ceil|char[ps]?|check_ptrtag|chr|clear_sentry|clearsym|closurep?|cmatrixp?|cols?|colcat(?:map)?|colmap|colrev|colvector(?:p|seq)?|complex(?:_float_(?:matrix|pointer)|_matrix(?:_view)?|_pointer|p)?|conj|cookedp?|cst|cstring(?:_(?:dup|list|vector))?|curry3?|cyclen?|del_(?:constdef|fundef|interface|macdef|typedef|vardef)|delete|diag(?:mat)?|dim|dmatrixp?|do|double(?:_matrix(?:_view)?|_pointer|p)?|dowith3?|drop|dropwhile|eval(?:cmd)?|exactp|filter|fix|fixity|flip|float(?:_matrix|_pointer)|floor|fold[lr]1?|frac|free|funp?|functionp?|gcd|get(?:_(?:byte|constdef|double|float|fundef|int(?:64)?|interface(?:_typedef)?|long|macdef|pointer|ptrtag|short|sentry|string|typedef|vardef))?|globsym|hash|head|id|im|imatrixp?|index|inexactp|infp|init|insert|int(?:_matrix(?:_view)?|_pointer|p)?|int64_(?:matrix|pointer)|integerp?|iteraten?|iterwhile|join|keys?|lambdap?|last(?:err(?:pos)?)?|lcd|list[2p]?|listmap|make_ptrtag|malloc|map|matcat|matrixp?|max|member|min|nanp|nargs|nmatrixp?|null|numberp?|ord|pack(?:ed)?|pointer(?:_cast|_tag|_type|p)?|pow|pred|ptrtag|put(?:_(?:byte|double|float|int(?:64)?|long|pointer|short|string))?|rationalp?|re|realp?|realloc|recordp?|redim|reduce(?:_with)?|refp?|repeatn?|reverse|rlistp?|round|rows?|rowcat(?:map)?|rowmap|rowrev|rowvector(?:p|seq)?|same|scan[lr]1?|sentry|sgn|short_(?:matrix|pointer)|slice|smatrixp?|sort|split|str|strcat|stream|stride|string(?:_(?:dup|list|vector)|p)?|subdiag(?:mat)?|submat|subseq2?|substr|succ|supdiag(?:mat)?|symbolp?|tail|take|takewhile|thunkp?|transpose|trunc|tuplep?|typep|ubyte|uint(?:64)?|ulong|uncurry3?|unref|unzip3?|update|ushort|vals?|varp?|vector(?:p|seq)?|void|zip3?|zipwith3?)\b/,special:{pattern:/\b__[a-z]+__\b/i,alias:"builtin"},operator:/(?:[!"#$%&'*+,\-.\/:<=>?@\\^`|~\u00a1-\u00bf\u00d7-\u00f7\u20d0-\u2bff]|\b_+\b)+|\b(?:and|div|mod|not|or)\b/,punctuation:/[(){}\[\];,|]/};["c",{lang:"c++",alias:"cpp"},"fortran"].forEach(function(e){var t=e;if("string"!=typeof e&&(t=e.alias,e=e.lang),r.languages[t]){var a={};a["inline-lang-"+t]={pattern:RegExp("%< *-\\*- *{lang}\\d* *-\\*-[^]+?%>".replace("{lang}",e.replace(/([.+*?\/\\(){}\[\]])/g,"\\$1")),"i"),inside:r.util.clone(r.languages.pure["inline-lang"].inside)},a["inline-lang-"+t].inside.rest=r.util.clone(r.languages[t]),r.languages.insertBefore("pure","inline-lang",a)}}),r.languages.c&&(r.languages.pure["inline-lang"].inside.rest=r.util.clone(r.languages.c))}(Prism); +Prism.languages.purebasic=Prism.languages.extend("clike",{comment:/;.*/,keyword:/\b(?:declarecdll|declaredll|compilerselect|compilercase|compilerdefault|compilerendselect|compilererror|enableexplicit|disableexplicit|not|and|or|xor|calldebugger|debuglevel|enabledebugger|disabledebugger|restore|read|includepath|includebinary|threaded|runtime|with|endwith|structureunion|endstructureunion|align|newlist|newmap|interface|endinterface|extends|enumeration|endenumeration|swap|foreach|continue|fakereturn|goto|gosub|return|break|module|endmodule|declaremodule|enddeclaremodule|declare|declarec|prototype|prototypec|enableasm|disableasm|dim|redim|data|datasection|enddatasection|to|procedurereturn|debug|default|case|select|endselect|as|import|endimport|importc|compilerif|compilerelse|compilerendif|compilerelseif|end|structure|endstructure|while|wend|for|next|step|if|else|elseif|endif|repeat|until|procedure|proceduredll|procedurec|procedurecdll|endprocedure|protected|shared|static|global|define|includefile|xincludefile|macro|endmacro)\b/i,function:/\b\w+(?:\.\w+)?\s*(?=\()/,number:/(?:\$[\da-f]+|\b-?\d*\.?\d+(?:e[+-]?\d+)?)\b/i,operator:/(?:@\*?|\?|\*)\w+|-[>-]?|\+\+?|!=?|<>?=?|==?|&&?|\|?\||[~^%?*/@]/}),Prism.languages.insertBefore("purebasic","keyword",{tag:/#\w+/,asm:{pattern:/(^\s*)!.*/m,lookbehind:!0,alias:"tag",inside:{comment:/;.*/,string:{pattern:/(["'`])(?:\\.|(?!\1)[^\\\r\n])*\1/,greedy:!0},"label-reference-anonymous":{pattern:/(\s*!\s*j[a-z]+\s+)@[fb]/i,lookbehind:!0,alias:"fasm-label"},"label-reference-addressed":{pattern:/(\s*!\s*j[a-z]+\s+)[A-Z._?$@][\w.?$@~#]*/i,lookbehind:!0,alias:"fasm-label"},function:{pattern:/^(\s*!\s*)[\da-z]+(?=\s|$)/im,lookbehind:!0},"function-inline":{pattern:/(\s*:\s*)[\da-z]+(?=\s)/i,lookbehind:!0,alias:"function"},label:{pattern:/^(\s*!\s*)[A-Za-z._?$@][\w.?$@~#]*(?=:)/m,lookbehind:!0,alias:"fasm-label"},keyword:[/(?:extern|extern|global)[^;\r\n]*/i,/(?:CPU|FLOAT|DEFAULT).*/],register:/\b(?:st\d|[xyz]mm\d\d?|[cdt]r\d|r\d\d?[bwd]?|[er]?[abcd]x|[abcd][hl]|[er]?(?:bp|sp|si|di)|[cdefgs]s|mm\d+)\b/i,number:/(?:\b|-|(?=\$))(?:0[hx][\da-f]*\.?[\da-f]+(?:p[+-]?\d+)?|\d[\da-f]+[hx]|\$\d[\da-f]*|0[oq][0-7]+|[0-7]+[oq]|0[by][01]+|[01]+[by]|0[dt]\d+|\d*\.?\d+(?:\.?e[+-]?\d+)?[dt]?)\b/i,operator:/[\[\]*+\-/%<>=&|$!,.:]/}}}),delete Prism.languages.purebasic["class-name"],delete Prism.languages.purebasic.boolean,Prism.languages.pbfasm=Prism.languages.purebasic; +Prism.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0},"string-interpolation":{pattern:/(?:f|rf|fr)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:{{)*){(?!{)(?:[^{}]|{(?!{)(?:[^{}]|{(?!{)(?:[^{}])+})+})+}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|rb|br)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|rb|br)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^\s*)@\w+(?:\.\w+)*/im,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:and|as|assert|async|await|break|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:True|False|None)\b/,number:/(?:\b(?=\d)|\B(?=\.))(?:0[bo])?(?:(?:\d|0x[\da-f])[\da-f]*\.?\d*|\.\d+)(?:e[+-]?\d+)?j?\b/i,operator:/[-+%=]=?|!=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},Prism.languages.python["string-interpolation"].inside.interpolation.inside.rest=Prism.languages.python,Prism.languages.py=Prism.languages.python; +Prism.languages.q={string:/"(?:\\.|[^"\\\r\n])*"/,comment:[{pattern:/([\t )\]}])\/.*/,lookbehind:!0,greedy:!0},{pattern:/(^|\r?\n|\r)\/[\t ]*(?:(?:\r?\n|\r)(?:.*(?:\r?\n|\r))*?(?:\\(?=[\t ]*(?:\r?\n|\r))|$)|\S.*)/,lookbehind:!0,greedy:!0},{pattern:/^\\[\t ]*(?:\r?\n|\r)[\s\S]+/m,greedy:!0},{pattern:/^#!.+/m,greedy:!0}],symbol:/`(?::\S+|[\w.]*)/,datetime:{pattern:/0N[mdzuvt]|0W[dtz]|\d{4}\.\d\d(?:m|\.\d\d(?:T(?:\d\d(?::\d\d(?::\d\d(?:[.:]\d\d\d)?)?)?)?)?[dz]?)|\d\d:\d\d(?::\d\d(?:[.:]\d\d\d)?)?[uvt]?/,alias:"number"},number:/\b(?![01]:)(?:0[wn]|0W[hj]?|0N[hje]?|0x[\da-fA-F]+|\d+\.?\d*(?:e[+-]?\d+)?[hjfeb]?)/,keyword:/\\\w+\b|\b(?:abs|acos|aj0?|all|and|any|asc|asin|asof|atan|attr|avgs?|binr?|by|ceiling|cols|cor|cos|count|cov|cross|csv|cut|delete|deltas|desc|dev|differ|distinct|div|do|dsave|ej|enlist|eval|except|exec|exit|exp|fby|fills|first|fkeys|flip|floor|from|get|getenv|group|gtime|hclose|hcount|hdel|hopen|hsym|iasc|identity|idesc|if|ij|in|insert|inter|inv|keys?|last|like|list|ljf?|load|log|lower|lsq|ltime|ltrim|mavg|maxs?|mcount|md5|mdev|med|meta|mins?|mmax|mmin|mmu|mod|msum|neg|next|not|null|or|over|parse|peach|pj|plist|prds?|prev|prior|rand|rank|ratios|raze|read0|read1|reciprocal|reval|reverse|rload|rotate|rsave|rtrim|save|scan|scov|sdev|select|set|setenv|show|signum|sin|sqrt|ssr?|string|sublist|sums?|sv|svar|system|tables|tan|til|trim|txf|type|uj|ungroup|union|update|upper|upsert|value|var|views?|vs|wavg|where|while|within|wj1?|wsum|ww|xasc|xbar|xcols?|xdesc|xexp|xgroup|xkey|xlog|xprev|xrank)\b/,adverb:{pattern:/['\/\\]:?|\beach\b/,alias:"function"},verb:{pattern:/(?:\B\.\B|\b[01]:|<[=>]?|>=?|[:+\-*%,!?~=|$&#@^]):?|\b_\b:?/,alias:"operator"},punctuation:/[(){}\[\];.]/}; +!function(e){for(var r="(?:[^\\\\()[\\]{}\"'/]||/(?![*/])||\\(*\\)|\\[*\\]|\\{*\\}|\\\\[^])".replace(//g,function(){return"\"(?:\\\\.|[^\\\\\"\r\n])*\"|'(?:\\\\.|[^\\\\'\r\n])*'"}).replace(//g,function(){return"//.*(?!.)|/\\*(?:[^*]|\\*(?!/))*\\*/"}),n=0;n<2;n++)r=r.replace(//g,function(){return r});r=r.replace(//g,"[^\\s\\S]"),e.languages.qml={comment:{pattern:/\/\/.*|\/\*[\s\S]*?\*\//,greedy:!0},"javascript-function":{pattern:RegExp("((?:^|;)[ \t]*)function\\s+[_$a-zA-Z\\xA0-\\uFFFF][$\\w\\xA0-\\uFFFF]*\\s*\\(*\\)\\s*\\{*\\}".replace(//g,function(){return r}),"m"),lookbehind:!0,greedy:!0,alias:"language-javascript",inside:e.languages.javascript},"class-name":{pattern:/((?:^|[:;])[ \t]*)(?!\d)\w+(?=[ \t]*\{|[ \t]+on\b)/m,lookbehind:!0},property:[{pattern:/((?:^|[;{])[ \t]*)(?!\d)\w+(?:\.\w+)*(?=[ \t]*:)/m,lookbehind:!0},{pattern:/((?:^|[;{])[ \t]*)property[ \t]+(?!\d)\w+(?:\.\w+)*[ \t]+(?!\d)\w+(?:\.\w+)*(?=[ \t]*:)/m,lookbehind:!0,inside:{keyword:/^property/,property:/\w+(?:\.\w+)*/}}],"javascript-expression":{pattern:RegExp("(:[ \t]*)(?![\\s;}[])(?:(?!$|[;}]))+".replace(//g,function(){return r}),"m"),lookbehind:!0,greedy:!0,alias:"language-javascript",inside:e.languages.javascript},string:/"(?:\\.|[^\\"\r\n])*"/,keyword:/\b(?:as|import|on)\b/,punctuation:/[{}[\]:;,]/}}(Prism); +Prism.languages.qore=Prism.languages.extend("clike",{comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:\/\/|#).*)/,lookbehind:!0},string:{pattern:/("|')(?:\\[\s\S]|(?!\1)[^\\])*\1/,greedy:!0},variable:/\$(?!\d)\w+\b/,keyword:/\b(?:abstract|any|assert|binary|bool|boolean|break|byte|case|catch|char|class|code|const|continue|data|default|do|double|else|enum|extends|final|finally|float|for|goto|hash|if|implements|import|inherits|instanceof|int|interface|long|my|native|new|nothing|null|object|our|own|private|reference|rethrow|return|short|soft(?:int|float|number|bool|string|date|list)|static|strictfp|string|sub|super|switch|synchronized|this|throw|throws|transient|try|void|volatile|while)\b/,number:/\b(?:0b[01]+|0x[\da-f]*\.?[\da-fp\-]+|\d*\.?\d+e?\d*[df]|\d*\.?\d+)\b/i,boolean:/\b(?:true|false)\b/i,operator:{pattern:/(^|[^.])(?:\+[+=]?|-[-=]?|[!=](?:==?|~)?|>>?=?|<(?:=>?|<=?)?|&[&=]?|\|[|=]?|[*\/%^]=?|[~?])/,lookbehind:!0},function:/\$?\b(?!\d)\w+(?=\()/}); +Prism.languages.r={comment:/#.*/,string:{pattern:/(['"])(?:\\.|(?!\1)[^\\\r\n])*\1/,greedy:!0},"percent-operator":{pattern:/%[^%\s]*%/,alias:"operator"},boolean:/\b(?:TRUE|FALSE)\b/,ellipsis:/\.\.(?:\.|\d+)/,number:[/\b(?:NaN|Inf)\b/,/(?:\b0x[\dA-Fa-f]+(?:\.\d*)?|\b\d+\.?\d*|\B\.\d+)(?:[EePp][+-]?\d+)?[iL]?/],keyword:/\b(?:if|else|repeat|while|function|for|in|next|break|NULL|NA|NA_integer_|NA_real_|NA_complex_|NA_character_)\b/,operator:/->?>?|<(?:=|=!]=?|::?|&&?|\|\|?|[+*\/^$@~]/,punctuation:/[(){}\[\],;]/}; +Prism.languages.racket=Prism.languages.extend("scheme",{"lambda-parameter":{pattern:/(\(lambda\s+\()[^()'\s]+/,lookbehind:!0}}),Prism.languages.DFS(Prism.languages.racket,function(e,a){if("RegExp"===Prism.util.type(a)){var r=a.source.replace(/\\(.)|\[\^?((?:\\.|[^\\\]])*)\]/g,function(e,a,r){if(a){if("("===a)return"[([]";if(")"===a)return"[)\\]]"}return r?("^"===e[1]?"[^":"[")+r.replace(/\\(.)|[()]/g,function(e,a){return"("===e||"("===a?"([":")"===e||")"===a?")\\]":e})+"]":e});this[e]=RegExp(r,a.flags)}}),Prism.languages.insertBefore("racket","string",{lang:{pattern:/^#lang.+/m,greedy:!0,alias:"keyword"}}),Prism.languages.rkt=Prism.languages.racket; +!function(i){var t=i.util.clone(i.languages.javascript);i.languages.jsx=i.languages.extend("markup",t),i.languages.jsx.tag.pattern=/<\/?(?:[\w.:-]+\s*(?:\s+(?:[\w.:$-]+(?:=(?:("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|[^\s{'">=]+|\{(?:\{(?:\{[^{}]*\}|[^{}])*\}|[^{}])+\}))?|\{\s*\.{3}\s*[a-z_$][\w$]*(?:\.[a-z_$][\w$]*)*\s*\}))*\s*\/?)?>/i,i.languages.jsx.tag.inside.tag.pattern=/^<\/?[^\s>\/]*/i,i.languages.jsx.tag.inside["attr-value"].pattern=/=(?!\{)(?:("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|[^\s'">]+)/i,i.languages.jsx.tag.inside.tag.inside["class-name"]=/^[A-Z]\w*(?:\.[A-Z]\w*)*$/,i.languages.insertBefore("inside","attr-name",{spread:{pattern:/\{\s*\.{3}\s*[a-z_$][\w$]*(?:\.[a-z_$][\w$]*)*\s*\}/,inside:{punctuation:/\.{3}|[{}.]/,"attr-value":/\w+/}}},i.languages.jsx.tag),i.languages.insertBefore("inside","attr-value",{script:{pattern:/=(?:\{(?:\{(?:\{[^{}]*\}|[^{}])*\}|[^{}])+\})/i,inside:{"script-punctuation":{pattern:/^=(?={)/,alias:"punctuation"},rest:i.languages.jsx},alias:"language-javascript"}},i.languages.jsx.tag);var o=function(t){return t?"string"==typeof t?t:"string"==typeof t.content?t.content:t.content.map(o).join(""):""},p=function(t){for(var n=[],e=0;e"===a.content[a.content.length-1].content||n.push({tagName:o(a.content[0].content[1]),openedBraces:0}):0|->|=(?:==?|>)?|<=?|>=?|[|^?'#!~`]|[+\-*\/]\.?|\b(?:mod|land|lor|lxor|lsl|lsr|asr)\b/}),Prism.languages.insertBefore("reason","class-name",{character:{pattern:/'(?:\\x[\da-f]{2}|\\o[0-3][0-7][0-7]|\\\d{3}|\\.|[^'\\\r\n])'/,alias:"string"},constructor:{pattern:/\b[A-Z]\w*\b(?!\s*\.)/,alias:"variable"},label:{pattern:/\b[a-z]\w*(?=::)/,alias:"symbol"}}),delete Prism.languages.reason.function; +Prism.languages.vala=Prism.languages.extend("clike",{"class-name":[{pattern:/\b[A-Z]\w*(?:\.\w+)*\b(?=(?:\?\s+|\*?\s+\*?)\w+)/,inside:{punctuation:/\./}},{pattern:/(\[)[A-Z]\w*(?:\.\w+)*\b/,lookbehind:!0,inside:{punctuation:/\./}},{pattern:/(\b(?:class|interface)\s+[A-Z]\w*(?:\.\w+)*\s*:\s*)[A-Z]\w*(?:\.\w+)*\b/,lookbehind:!0,inside:{punctuation:/\./}},{pattern:/((?:\b(?:class|interface|new|struct|enum)\s+)|(?:catch\s+\())[A-Z]\w*(?:\.\w+)*\b/,lookbehind:!0,inside:{punctuation:/\./}}],constant:/\b[A-Z0-9_]+\b/,function:/\w+(?=\s*\()/,keyword:/\b(?:bool|char|double|float|null|size_t|ssize_t|string|unichar|void|int|int8|int16|int32|int64|long|short|uchar|uint|uint8|uint16|uint32|uint64|ulong|ushort|class|delegate|enum|errordomain|interface|namespace|struct|break|continue|do|for|foreach|return|while|else|if|switch|assert|case|default|abstract|const|dynamic|ensures|extern|inline|internal|override|private|protected|public|requires|signal|static|virtual|volatile|weak|async|owned|unowned|try|catch|finally|throw|as|base|construct|delete|get|in|is|lock|new|out|params|ref|sizeof|set|this|throws|typeof|using|value|var|yield)\b/i,number:/(?:\b0x[\da-f]+\b|(?:\b\d+\.?\d*|\B\.\d+)(?:e[+-]?\d+)?)(?:f|u?l?)?/i,operator:/\+\+|--|&&|\|\||<<=?|>>=?|=>|->|~|[+\-*\/%&^|=!<>]=?|\?\??|\.\.\./,punctuation:/[{}[\];(),.:]/}),Prism.languages.insertBefore("vala","string",{"raw-string":{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string"},"template-string":{pattern:/@"[\s\S]*?"/,greedy:!0,inside:{interpolation:{pattern:/\$(?:\([^)]*\)|[a-zA-Z]\w*)/,inside:{delimiter:{pattern:/^\$\(?|\)$/,alias:"punctuation"},rest:Prism.languages.vala}},string:/[\s\S]+/}}}),Prism.languages.insertBefore("vala","keyword",{regex:{pattern:/\/(?:\[(?:[^\]\\\r\n]|\\.)*]|\\.|[^/\\\[\r\n])+\/[imsx]{0,4}(?=\s*(?:$|[\r\n,.;})\]]))/,greedy:!0}}); +!function(n){var a={pattern:/\\[\\(){}[\]^$+*?|.]/,alias:"escape"},e=/\\(?:x[\da-fA-F]{2}|u[\da-fA-F]{4}|u\{[\da-fA-F]+\}|c[a-zA-Z]|0[0-7]{0,2}|[123][0-7]{2}|.)/,t="(?:[^\\\\-]|"+e.source+")",i=RegExp(t+"-"+t),r={pattern:/(<|')[^<>']+(?=[>']$)/,lookbehind:!0,alias:"variable"};n.languages.regex={charset:{pattern:/((?:^|[^\\])(?:\\\\)*)\[(?:[^\\\]]|\\[\s\S])*\]/,lookbehind:!0,inside:{"charset-negation":{pattern:/(^\[)\^/,lookbehind:!0,alias:"operator"},"charset-punctuation":{pattern:/^\[|\]$/,alias:"punctuation"},range:{pattern:i,inside:{escape:e,"range-punctuation":{pattern:/-/,alias:"operator"}}},"special-escape":a,charclass:{pattern:/\\[wsd]|\\p{[^{}]+}/i,alias:"class-name"},escape:e}},"special-escape":a,charclass:{pattern:/\.|\\[wsd]|\\p{[^{}]+}/i,alias:"class-name"},backreference:[{pattern:/\\(?![123][0-7]{2})[1-9]/,alias:"keyword"},{pattern:/\\k<[^<>']+>/,alias:"keyword",inside:{"group-name":r}}],anchor:{pattern:/[$^]|\\[ABbGZz]/,alias:"function"},escape:e,group:[{pattern:/\((?:\?(?:<[^<>']+>|'[^<>']+'|[>:]|]?|>[=>]?|[&|^~]|\b(?:or|and|not|with|at)\b/,punctuation:/[{}[\];(),.:]/},Prism.languages.rpy=Prism.languages.renpy; +Prism.languages.rest={table:[{pattern:/(\s*)(?:\+[=-]+)+\+(?:\r?\n|\r)(?:\1(?:[+|].+)+[+|](?:\r?\n|\r))+\1(?:\+[=-]+)+\+/,lookbehind:!0,inside:{punctuation:/\||(?:\+[=-]+)+\+/}},{pattern:/(\s*)(?:=+ +)+=+(?:(?:\r?\n|\r)\1.+)+(?:\r?\n|\r)\1(?:=+ +)+=+(?=(?:\r?\n|\r){2}|\s*$)/,lookbehind:!0,inside:{punctuation:/[=-]+/}}],"substitution-def":{pattern:/(^\s*\.\. )\|(?:[^|\s](?:[^|]*[^|\s])?)\| [^:]+::/m,lookbehind:!0,inside:{substitution:{pattern:/^\|(?:[^|\s]|[^|\s][^|]*[^|\s])\|/,alias:"attr-value",inside:{punctuation:/^\||\|$/}},directive:{pattern:/( +)[^:]+::/,lookbehind:!0,alias:"function",inside:{punctuation:/::$/}}}},"link-target":[{pattern:/(^\s*\.\. )\[[^\]]+\]/m,lookbehind:!0,alias:"string",inside:{punctuation:/^\[|\]$/}},{pattern:/(^\s*\.\. )_(?:`[^`]+`|(?:[^:\\]|\\.)+):/m,lookbehind:!0,alias:"string",inside:{punctuation:/^_|:$/}}],directive:{pattern:/(^\s*\.\. )[^:]+::/m,lookbehind:!0,alias:"function",inside:{punctuation:/::$/}},comment:{pattern:/(^\s*\.\.)(?:(?: .+)?(?:(?:\r?\n|\r).+)+| .+)(?=(?:\r?\n|\r){2}|$)/m,lookbehind:!0},title:[{pattern:/^(([!"#$%&'()*+,\-.\/:;<=>?@\[\\\]^_`{|}~])\2+)(?:\r?\n|\r).+(?:\r?\n|\r)\1$/m,inside:{punctuation:/^[!"#$%&'()*+,\-.\/:;<=>?@\[\\\]^_`{|}~]+|[!"#$%&'()*+,\-.\/:;<=>?@\[\\\]^_`{|}~]+$/,important:/.+/}},{pattern:/(^|(?:\r?\n|\r){2}).+(?:\r?\n|\r)([!"#$%&'()*+,\-.\/:;<=>?@\[\\\]^_`{|}~])\2+(?=\r?\n|\r|$)/,lookbehind:!0,inside:{punctuation:/[!"#$%&'()*+,\-.\/:;<=>?@\[\\\]^_`{|}~]+$/,important:/.+/}}],hr:{pattern:/((?:\r?\n|\r){2})([!"#$%&'()*+,\-.\/:;<=>?@\[\\\]^_`{|}~])\2{3,}(?=(?:\r?\n|\r){2})/,lookbehind:!0,alias:"punctuation"},field:{pattern:/(^\s*):[^:\r\n]+:(?= )/m,lookbehind:!0,alias:"attr-name"},"command-line-option":{pattern:/(^\s*)(?:[+-][a-z\d]|(?:--|\/)[a-z\d-]+)(?:[ =](?:[a-z][\w-]*|<[^<>]+>))?(?:, (?:[+-][a-z\d]|(?:--|\/)[a-z\d-]+)(?:[ =](?:[a-z][\w-]*|<[^<>]+>))?)*(?=(?:\r?\n|\r)? {2,}\S)/im,lookbehind:!0,alias:"symbol"},"literal-block":{pattern:/::(?:\r?\n|\r){2}([ \t]+).+(?:(?:\r?\n|\r)\1.+)*/,inside:{"literal-block-punctuation":{pattern:/^::/,alias:"punctuation"}}},"quoted-literal-block":{pattern:/::(?:\r?\n|\r){2}([!"#$%&'()*+,\-.\/:;<=>?@\[\\\]^_`{|}~]).*(?:(?:\r?\n|\r)\1.*)*/,inside:{"literal-block-punctuation":{pattern:/^(?:::|([!"#$%&'()*+,\-.\/:;<=>?@\[\\\]^_`{|}~])\1*)/m,alias:"punctuation"}}},"list-bullet":{pattern:/(^\s*)(?:[*+\-•‣⁃]|\(?(?:\d+|[a-z]|[ivxdclm]+)\)|(?:\d+|[a-z]|[ivxdclm]+)\.)(?= )/im,lookbehind:!0,alias:"punctuation"},"doctest-block":{pattern:/(^\s*)>>> .+(?:(?:\r?\n|\r).+)*/m,lookbehind:!0,inside:{punctuation:/^>>>/}},inline:[{pattern:/(^|[\s\-:\/'"<(\[{])(?::[^:]+:`.*?`|`.*?`:[^:]+:|(\*\*?|``?|\|)(?!\s).*?[^\s]\2(?=[\s\-.,:;!?\\\/'")\]}]|$))/m,lookbehind:!0,inside:{bold:{pattern:/(^\*\*).+(?=\*\*$)/,lookbehind:!0},italic:{pattern:/(^\*).+(?=\*$)/,lookbehind:!0},"inline-literal":{pattern:/(^``).+(?=``$)/,lookbehind:!0,alias:"symbol"},role:{pattern:/^:[^:]+:|:[^:]+:$/,alias:"function",inside:{punctuation:/^:|:$/}},"interpreted-text":{pattern:/(^`).+(?=`$)/,lookbehind:!0,alias:"attr-value"},substitution:{pattern:/(^\|).+(?=\|$)/,lookbehind:!0,alias:"attr-value"},punctuation:/\*\*?|``?|\|/}}],link:[{pattern:/\[[^\]]+\]_(?=[\s\-.,:;!?\\\/'")\]}]|$)/,alias:"string",inside:{punctuation:/^\[|\]_$/}},{pattern:/(?:\b[a-z\d]+(?:[_.:+][a-z\d]+)*_?_|`[^`]+`_?_|_`[^`]+`)(?=[\s\-.,:;!?\\\/'")\]}]|$)/i,alias:"string",inside:{punctuation:/^_?`|`$|`?_?_$/}}],punctuation:{pattern:/(^\s*)(?:\|(?= |$)|(?:---?|—|\.\.|__)(?= )|\.\.$)/m,lookbehind:!0}}; +Prism.languages.rip={comment:/#.*/,keyword:/(?:=>|->)|\b(?:class|if|else|switch|case|return|exit|try|catch|finally|raise)\b/,builtin:/@|\bSystem\b/,boolean:/\b(?:true|false)\b/,date:/\b\d{4}-\d{2}-\d{2}\b/,time:/\b\d{2}:\d{2}:\d{2}\b/,datetime:/\b\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\b/,character:/\B`[^\s`'",.:;#\/\\()<>\[\]{}]\b/,regex:{pattern:/(^|[^/])\/(?!\/)(?:\[[^\n\r\]]*\]|\\.|[^/\\\r\n\[])+\/(?=\s*(?:$|[\r\n,.;})]))/,lookbehind:!0,greedy:!0},symbol:/:[^\d\s`'",.:;#\/\\()<>\[\]{}][^\s`'",.:;#\/\\()<>\[\]{}]*/,string:{pattern:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,greedy:!0},number:/[+-]?\b(?:\d+\.\d+|\d+)\b/,punctuation:/(?:\.{2,3})|[`,.:;=\/\\()<>\[\]{}]/,reference:/[^\d\s`'",.:;#\/\\()<>\[\]{}][^\s`'",.:;#\/\\()<>\[\]{}]*/}; +Prism.languages.roboconf={comment:/#.*/,keyword:{pattern:/(^|\s)(?:(?:facet|instance of)(?=[ \t]+[\w-]+[ \t]*\{)|(?:external|import)\b)/,lookbehind:!0},component:{pattern:/[\w-]+(?=[ \t]*\{)/,alias:"variable"},property:/[\w.-]+(?=[ \t]*:)/,value:{pattern:/(=[ \t]*)[^,;]+/,lookbehind:!0,alias:"attr-value"},optional:{pattern:/\(optional\)/,alias:"builtin"},wildcard:{pattern:/(\.)\*/,lookbehind:!0,alias:"operator"},punctuation:/[{},.;:=]/}; +!function(t){var r={pattern:/(^[ \t]*| {2}|\t)#.*/m,lookbehind:!0,greedy:!0},o={pattern:/((?:^|[^\\])(?:\\{2})*)[$@&%]\{(?:[^{}\r\n]|\{[^{}\r\n]*\})*\}/,lookbehind:!0,inside:{punctuation:/^[$@&%]\{|\}$/}};function n(t,n){var e={"section-header":{pattern:/^ ?\*{3}.+?\*{3}/,alias:"keyword"}};for(var a in n)e[a]=n[a];return e.tag={pattern:/([\r\n](?: |\t)[ \t]*)\[[-\w]+\]/,lookbehind:!0,inside:{punctuation:/\[|\]/}},e.variable=o,e.comment=r,{pattern:RegExp("^ ?\\*{3}[ \t]*[ \t]*\\*{3}(?:.|[\r\n](?!\\*{3}))*".replace(//g,function(){return t}),"im"),alias:"section",inside:e}}var e={pattern:/(\[Documentation\](?: |\t)[ \t]*)(?![ \t]|#)(?:.|(?:\r\n?|\n)[ \t]*\.{3})+/,lookbehind:!0,alias:"string"},a={pattern:/([\r\n] ?)(?!#)(?:\S(?:[ \t]\S)*)+/,lookbehind:!0,alias:"function",inside:{variable:o}},i={pattern:/([\r\n](?: |\t)[ \t]*)(?!\[|\.{3}|#)(?:\S(?:[ \t]\S)*)+/,lookbehind:!0,inside:{variable:o}};t.languages.robotframework={settings:n("Settings",{documentation:{pattern:/([\r\n] ?Documentation(?: |\t)[ \t]*)(?![ \t]|#)(?:.|(?:\r\n?|\n)[ \t]*\.{3})+/,lookbehind:!0,alias:"string"},property:{pattern:/([\r\n] ?)(?!\.{3}|#)(?:\S(?:[ \t]\S)*)+/,lookbehind:!0}}),variables:n("Variables"),"test-cases":n("Test Cases",{"test-name":a,documentation:e,property:i}),keywords:n("Keywords",{"keyword-name":a,documentation:e,property:i}),tasks:n("Tasks",{"task-name":a,documentation:e,property:i}),comment:r},t.languages.robot=t.languages.robotframework}(Prism); +!function(e){for(var a="/\\*(?:[^*/]|\\*(?!/)|/(?!\\*)|)*\\*/",t=0;t<2;t++)a=a.replace(//g,function(){return a});a=a.replace(//g,function(){return"[^\\s\\S]"}),e.languages.rust={comment:[{pattern:RegExp("(^|[^\\\\])"+a),lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/b?"(?:\\[\s\S]|[^\\"])*"|b?r(#*)"(?:[^"]|"(?!\1))*"\1/,greedy:!0},char:{pattern:/b?'(?:\\(?:x[0-7][\da-fA-F]|u{(?:[\da-fA-F]_*){1,6}|.)|[^\\\r\n\t'])'/,greedy:!0,alias:"string"},attribute:{pattern:/#!?\[(?:[^\[\]"]|"(?:\\[\s\S]|[^\\"])*")*\]/,greedy:!0,alias:"attr-name",inside:{string:null}},"closure-params":{pattern:/([=(,:]\s*|\bmove\s*)\|[^|]*\||\|[^|]*\|(?=\s*(?:\{|->))/,lookbehind:!0,greedy:!0,inside:{"closure-punctuation":{pattern:/^\||\|$/,alias:"punctuation"},rest:null}},"lifetime-annotation":{pattern:/'\w+/,alias:"symbol"},"fragment-specifier":{pattern:/(\$\w+:)[a-z]+/,lookbehind:!0,alias:"punctuation"},variable:/\$\w+/,"function-definition":{pattern:/(\bfn\s+)\w+/,lookbehind:!0,alias:"function"},"type-definition":{pattern:/(\b(?:enum|struct|union)\s+)\w+/,lookbehind:!0,alias:"class-name"},"module-declaration":[{pattern:/(\b(?:crate|mod)\s+)[a-z][a-z_\d]*/,lookbehind:!0,alias:"namespace"},{pattern:/(\b(?:crate|self|super)\s*)::\s*[a-z][a-z_\d]*\b(?:\s*::(?:\s*[a-z][a-z_\d]*\s*::)*)?/,lookbehind:!0,alias:"namespace",inside:{punctuation:/::/}}],keyword:[/\b(?:abstract|as|async|await|become|box|break|const|continue|crate|do|dyn|else|enum|extern|final|fn|for|if|impl|in|let|loop|macro|match|mod|move|mut|override|priv|pub|ref|return|self|Self|static|struct|super|trait|try|type|typeof|union|unsafe|unsized|use|virtual|where|while|yield)\b/,/\b(?:[ui](?:8|16|32|64|128|size)|f(?:32|64)|bool|char|str)\b/],function:/\b[a-z_]\w*(?=\s*(?:::\s*<|\())/,macro:{pattern:/\w+!/,alias:"property"},constant:/\b[A-Z_][A-Z_\d]+\b/,"class-name":/\b[A-Z]\w*\b/,namespace:{pattern:/(?:\b[a-z][a-z_\d]*\s*::\s*)*\b[a-z][a-z_\d]*\s*::(?!\s*<)/,inside:{punctuation:/::/}},number:/\b(?:0x[\dA-Fa-f](?:_?[\dA-Fa-f])*|0o[0-7](?:_?[0-7])*|0b[01](?:_?[01])*|(?:\d(?:_?\d)*)?\.?\d(?:_?\d)*(?:[Ee][+-]?\d+)?)(?:_?(?:[iu](?:8|16|32|64|size)?|f32|f64))?\b/,boolean:/\b(?:false|true)\b/,punctuation:/->|\.\.=|\.{1,3}|::|[{}[\];(),:]/,operator:/[-+*\/%!^]=?|=[=>]?|&[&=]?|\|[|=]?|<>?=?|[@?]/},e.languages.rust["closure-params"].inside.rest=e.languages.rust,e.languages.rust.attribute.inside.string=e.languages.rust.string}(Prism); +!function(e){var t="(?:\"(?:\"\"|[^\"])*\"(?!\")|'(?:''|[^'])*'(?!'))",a=/\b(?:\d[\da-f]*x|\d+(?:\.\d+)?(?:e[+-]?\d+)?)\b/i,n={pattern:RegExp(t+"[bx]"),alias:"number"},i={pattern:/&[a-z_][a-z_0-9]*/i},r={pattern:/((?:^|\s|=|\())%(?:ABORT|BY|CMS|COPY|DISPLAY|DO|ELSE|END|EVAL|GLOBAL|GO|GOTO|IF|INC|INCLUDE|INDEX|INPUT|KTRIM|LENGTH|LET|LIST|LOCAL|PUT|QKTRIM|QSCAN|QSUBSTR|QSYSFUNC|QUPCASE|RETURN|RUN|SCAN|SUBSTR|SUPERQ|SYMDEL|SYMGLOBL|SYMLOCAL|SYMEXIST|SYSCALL|SYSEVALF|SYSEXEC|SYSFUNC|SYSGET|SYSRPUT|THEN|TO|TSO|UNQUOTE|UNTIL|UPCASE|WHILE|WINDOW)\b/i,lookbehind:!0,alias:"keyword"},s={pattern:/(^|\s+)(?:proc\s+\w+|quit|run|data(?!\=))\b/i,alias:"keyword",lookbehind:!0},o=[/\/\*[\s\S]*?\*\//,{pattern:/(^\s*|;\s*)\*[^;]*;/m,lookbehind:!0}],l={pattern:RegExp(t),greedy:!0},c=/[$%@.(){}\[\];,\\]/,d={pattern:/%?\w+(?=\()/,alias:"keyword"},p={function:d,"arg-value":{pattern:/(\s*=\s*)[A-Z\.]+/i,lookbehind:!0},operator:/=/,"macro-variable":i,arg:{pattern:/[A-Z]+/i,alias:"keyword"},number:a,"numeric-constant":n,punctuation:c,string:l},u={pattern:/\b(?:format|put)\b=?[\w'$.]+/im,inside:{keyword:/^(?:format|put)(?=\=)/i,equals:/=/,format:{pattern:/(?:\w|\$\d)+\.\d?/i,alias:"number"}}},m={pattern:/\b(?:format|put)\s+[\w']+(?:\s+[$.\w]+)+(?=;)/i,inside:{keyword:/^(?:format|put)/i,format:{pattern:/[\w$]+\.\d?/,alias:"number"}}},b={pattern:/((?:^|[\s])=?)(?:catname|checkpoint execute_always|dm|endsas|filename|footnote|%include|libname|%list|lock|missing|options|page|resetline|%run|sasfile|skip|sysecho|title\d?)\b/i,lookbehind:!0,alias:"keyword"},g={pattern:/(^|\s)(?:submit(?:\s+(?:load|parseonly|norun))?|endsubmit)\b/i,lookbehind:!0,alias:"keyword"},k="accessControl|cdm|aggregation|aStore|ruleMining|audio|autotune|bayesianNetClassifier|bioMedImage|boolRule|builtins|cardinality|sccasl|clustering|copula|countreg|dataDiscovery|dataPreprocess|dataSciencePilot|dataStep|decisionTree|deepLearn|deepNeural|varReduce|simSystem|ds2|deduplication|ecm|entityRes|espCluster|explainModel|factmac|fastKnn|fcmpact|fedSql|freqTab|gam|gleam|graphSemiSupLearn|gVarCluster|hiddenMarkovModel|hyperGroup|image|iml|ica|kernalPca|langModel|ldaTopic|sparseML|mlTools|mixed|modelPublishing|mbc|network|optNetwork|neuralNet|nonlinear|nmf|nonParametricBayes|optimization|panel|pls|percentile|pca|phreg|qkb|qlim|quantreg|recommend|tsReconcile|deepRnn|regression|reinforcementLearn|robustPca|sampling|sparkEmbeddedProcess|search(?:Analytics)?|sentimentAnalysis|sequence|configuration|session(?:Prop)?|severity|simple|smartData|sandwich|spatialreg|stabilityMonitoring|spc|loadStreams|svDataDescription|svm|table|conditionalRandomFields|text(?:Rule(?:Develop|Score)|Mining|Parse|Topic|Util|Filters|Frequency)|tsInfo|timeData|transpose|uniTimeSeries",y={pattern:RegExp("(^|\\s)(?:action\\s+)?(?:)\\.[a-z]+\\b[^;]+".replace(//g,function(){return k}),"i"),lookbehind:!0,inside:{keyword:RegExp("(?:)\\.[a-z]+\\b".replace(//g,function(){return k}),"i"),action:{pattern:/(?:action)/i,alias:"keyword"},comment:o,function:d,"arg-value":p["arg-value"],operator:p.operator,argument:p.arg,number:a,"numeric-constant":n,punctuation:c,string:l}},S={pattern:/((?:^|\s)=?)(?:after|analysis|and|array|barchart|barwidth|begingraph|by|call|cas|cbarline|cfill|class(?:lev)?|close|column|computed?|contains|continue|data(?=\=)|define|delete|describe|document|do\s+over|do|dol|drop|dul|end(?:source|comp)?|entryTitle|else|eval(?:uate)?|exec(?:ute)?|exit|fill(?:attrs)?|file(?:name)?|flist|fnc|function(?:list)?|goto|global|group(?:by)?|headline|headskip|histogram|if|infile|keep|keylabel|keyword|label|layout|leave|legendlabel|length|libname|loadactionset|merge|midpoints|name|noobs|nowd|_?null_|ods|options|or|otherwise|out(?:put)?|over(?:lay)?|plot|put|print|raise|ranexp|rannor|rbreak|retain|return|select|set|session|sessref|source|statgraph|sum|summarize|table|temp|terminate|then\s+do|then|title\d?|to|var|when|where|xaxisopts|yaxisopts|y2axisopts)\b/i,lookbehind:!0};e.languages.sas={datalines:{pattern:/^(\s*)(?:(?:data)?lines|cards);[\s\S]+?^\s*;/im,lookbehind:!0,alias:"string",inside:{keyword:{pattern:/^(?:(?:data)?lines|cards)/i},punctuation:/;/}},"proc-sql":{pattern:/(^proc\s+(?:fed)?sql(?:\s+[\w|=]+)?;)[\s\S]+?(?=^(?:proc\s+\w+|quit|run|data);|(?![\s\S]))/im,lookbehind:!0,inside:{sql:{pattern:RegExp("^[ \t]*(?:select|alter\\s+table|(?:create|describe|drop)\\s+(?:index|table(?:\\s+constraints)?|view)|create\\s+unique\\s+index|insert\\s+into|update)(?:|[^;\"'])+;".replace(//g,function(){return t}),"im"),alias:"language-sql",inside:e.languages.sql},"global-statements":b,"sql-statements":{pattern:/(^|\s)(?:disconnect\s+from|exec(?:ute)?|begin|commit|rollback|reset|validate)\b/i,lookbehind:!0,alias:"keyword"},number:a,"numeric-constant":n,punctuation:c,string:l}},"proc-groovy":{pattern:/(^proc\s+groovy(?:\s+[\w|=]+)?;)[\s\S]+?(?=^(?:proc\s+\w+|quit|run|data);|(?![\s\S]))/im,lookbehind:!0,inside:{comment:o,groovy:{pattern:RegExp("(^[ \t]*submit(?:\\s+(?:load|parseonly|norun))?)(?:|[^\"'])+?(?=endsubmit;)".replace(//g,function(){return t}),"im"),lookbehind:!0,alias:"language-groovy",inside:e.languages.groovy},keyword:S,"submit-statement":g,"global-statements":b,number:a,"numeric-constant":n,punctuation:c,string:l}},"proc-lua":{pattern:/(^proc\s+lua(?:\s+[\w|=]+)?;)[\s\S]+?(?=^(?:proc\s+\w+|quit|run|data);|(?![\s\S]))/im,lookbehind:!0,inside:{comment:o,lua:{pattern:RegExp("(^[ \t]*submit(?:\\s+(?:load|parseonly|norun))?)(?:|[^\"'])+?(?=endsubmit;)".replace(//g,function(){return t}),"im"),lookbehind:!0,alias:"language-lua",inside:e.languages.lua},keyword:S,"submit-statement":g,"global-statements":b,number:a,"numeric-constant":n,punctuation:c,string:l}},"proc-cas":{pattern:/(^proc\s+cas(?:\s+[\w|=]+)?;)[\s\S]+?(?=^(?:proc\s+\w+|quit|data);|(?![\s\S]))/im,lookbehind:!0,inside:{comment:o,"statement-var":{pattern:/((?:^|\s)=?)saveresult\s+[^;]+/im,lookbehind:!0,inside:{statement:{pattern:/^saveresult\s+\S+/i,inside:{keyword:/^(?:saveresult)/i}},rest:p}},"cas-actions":y,statement:{pattern:/((?:^|\s)=?)(?:default|(?:un)?set|on|output|upload)[^;]+/im,lookbehind:!0,inside:p},step:s,keyword:S,function:d,format:u,altformat:m,"global-statements":b,number:a,"numeric-constant":n,punctuation:c,string:l}},"proc-args":{pattern:RegExp("(^proc\\s+\\w+\\s+)(?!\\s)(?:[^;\"']|)+;".replace(//g,function(){return t}),"im"),lookbehind:!0,inside:p},"macro-keyword":r,"macro-variable":i,"macro-string-functions":{pattern:/((?:^|\s|=))%(?:NRBQUOTE|NRQUOTE|NRSTR|BQUOTE|QUOTE|STR)\(.*?(?:[^%]\))/i,lookbehind:!0,inside:{function:{pattern:/%(?:NRBQUOTE|NRQUOTE|NRSTR|BQUOTE|QUOTE|STR)/i,alias:"keyword"},"macro-keyword":r,"macro-variable":i,"escaped-char":{pattern:/%['"()<>=¬^~;,#]/i},punctuation:c}},"macro-declaration":{pattern:/^%macro[^;]+(?=;)/im,inside:{keyword:/%macro/i}},"macro-end":{pattern:/^%mend[^;]+(?=;)/im,inside:{keyword:/%mend/i}},macro:{pattern:/%_\w+(?=\()/,alias:"keyword"},input:{pattern:/\binput\s+[-\w\s/*.$&]+;/i,inside:{input:{alias:"keyword",pattern:/^input/i},comment:o,number:a,"numeric-constant":n}},"options-args":{pattern:/(^options)[-'"|/\\<>*+=:()\w\s]*(?=;)/im,lookbehind:!0,inside:p},"cas-actions":y,comment:o,function:d,format:u,altformat:m,"numeric-constant":n,datetime:{pattern:RegExp(t+"(?:dt?|t)"),alias:"number"},string:l,step:s,keyword:S,"operator-keyword":{pattern:/\b(?:eq|ne|gt|lt|ge|le|in|not)\b/i,alias:"operator"},number:a,operator:/\*\*?|\|\|?|!!?|¦¦?|<[>=]?|>[<=]?|[-+\/=&]|[~¬^]=?/i,punctuation:c}}(Prism); +!function(e){e.languages.sass=e.languages.extend("css",{comment:{pattern:/^([ \t]*)\/[\/*].*(?:(?:\r?\n|\r)\1[ \t]+.+)*/m,lookbehind:!0}}),e.languages.insertBefore("sass","atrule",{"atrule-line":{pattern:/^(?:[ \t]*)[@+=].+/m,inside:{atrule:/(?:@[\w-]+|[+=])/m}}}),delete e.languages.sass.atrule;var t=/\$[-\w]+|#\{\$[-\w]+\}/,a=[/[+*\/%]|[=!]=|<=?|>=?|\b(?:and|or|not)\b/,{pattern:/(\s+)-(?=\s)/,lookbehind:!0}];e.languages.insertBefore("sass","property",{"variable-line":{pattern:/^[ \t]*\$.+/m,inside:{punctuation:/:/,variable:t,operator:a}},"property-line":{pattern:/^[ \t]*(?:[^:\s]+ *:.*|:[^:\s]+.*)/m,inside:{property:[/[^:\s]+(?=\s*:)/,{pattern:/(:)[^:\s]+/,lookbehind:!0}],punctuation:/:/,variable:t,operator:a,important:e.languages.sass.important}}}),delete e.languages.sass.property,delete e.languages.sass.important,e.languages.insertBefore("sass","punctuation",{selector:{pattern:/([ \t]*)\S(?:,?[^,\r\n]+)*(?:,(?:\r?\n|\r)\1[ \t]+\S(?:,?[^,\r\n]+)*)*/,lookbehind:!0}})}(Prism); +Prism.languages.scss=Prism.languages.extend("css",{comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},atrule:{pattern:/@[\w-]+(?:\([^()]+\)|[^(])*?(?=\s+[{;])/,inside:{rule:/@[\w-]+/}},url:/(?:[-a-z]+-)?url(?=\()/i,selector:{pattern:/(?=\S)[^@;{}()]?(?:[^@;{}()]|#\{\$[-\w]+\})+(?=\s*\{(?:\}|\s|[^}]+[:{][^}]+))/m,inside:{parent:{pattern:/&/,alias:"important"},placeholder:/%[-\w]+/,variable:/\$[-\w]+|#\{\$[-\w]+\}/}},property:{pattern:/(?:[\w-]|\$[-\w]+|#\{\$[-\w]+\})+(?=\s*:)/,inside:{variable:/\$[-\w]+|#\{\$[-\w]+\}/}}}),Prism.languages.insertBefore("scss","atrule",{keyword:[/@(?:if|else(?: if)?|for|each|while|import|extend|debug|warn|mixin|include|function|return|content)/i,{pattern:/( +)(?:from|through)(?= )/,lookbehind:!0}]}),Prism.languages.insertBefore("scss","important",{variable:/\$[-\w]+|#\{\$[-\w]+\}/}),Prism.languages.insertBefore("scss","function",{placeholder:{pattern:/%[-\w]+/,alias:"selector"},statement:{pattern:/\B!(?:default|optional)\b/i,alias:"keyword"},boolean:/\b(?:true|false)\b/,null:{pattern:/\bnull\b/,alias:"keyword"},operator:{pattern:/(\s)(?:[-+*\/%]|[=!]=|<=?|>=?|and|or|not)(?=\s)/,lookbehind:!0}}),Prism.languages.scss.atrule.inside.rest=Prism.languages.scss; +Prism.languages.scala=Prism.languages.extend("java",{keyword:/<-|=>|\b(?:abstract|case|catch|class|def|do|else|extends|final|finally|for|forSome|if|implicit|import|lazy|match|new|null|object|override|package|private|protected|return|sealed|self|super|this|throw|trait|try|type|val|var|while|with|yield)\b/,"triple-quoted-string":{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string"},string:{pattern:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,greedy:!0},builtin:/\b(?:String|Int|Long|Short|Byte|Boolean|Double|Float|Char|Any|AnyRef|AnyVal|Unit|Nothing)\b/,number:/\b0x[\da-f]*\.?[\da-f]+|(?:\b\d+\.?\d*|\B\.\d+)(?:e\d+)?[dfl]?/i,symbol:/'[^\d\s\\]\w*/}),delete Prism.languages.scala["class-name"],delete Prism.languages.scala.function; +!function(n){var s=["([\"'])(?:\\\\[^]|\\$\\([^)]+\\)|`[^`]+`|(?!\\1)[^\\\\])*\\1","<<-?\\s*([\"']?)(\\w+)\\2\\s[^]*?[\r\n]\\3"].join("|");n.languages["shell-session"]={info:{pattern:/^[^\r\n$#*!]+(?=[$#])/m,alias:"punctuation",inside:{path:{pattern:/(:)[\s\S]+/,lookbehind:!0},user:/^[^\s@:$#*!/\\]+@[^\s@:$#*!/\\]+(?=:|$)/,punctuation:/:/}},command:{pattern:RegExp("[$#](?:[^\\\\\r\n'\"<]|\\\\.|<>)+".replace(/<>/g,function(){return s})),greedy:!0,inside:{bash:{pattern:/(^[$#]\s*)[\s\S]+/,lookbehind:!0,alias:"language-bash",inside:n.languages.bash},"shell-symbol":{pattern:/^[$#]/,alias:"important"}}},output:/.(?:.*(?:[\r\n]|.$))*/}}(Prism); +Prism.languages.smali={comment:/#.*/,string:{pattern:/"(?:[^\r\n\\"]|\\.)*"|'(?:[^\r\n\\']|\\(?:.|u[\da-fA-F]{4}))'/,greedy:!0},"class-name":{pattern:/L(?:(?:\w+|`[^`\r\n]*`)\/)*(?:[\w$]+|`[^`\r\n]*`)(?=\s*;)/,inside:{"class-name":{pattern:/(^L|\/)(?:[\w$]+|`[^`\r\n]*`)$/,lookbehind:!0},namespace:{pattern:/^(L)(?:(?:\w+|`[^`\r\n]*`)\/)+/,lookbehind:!0,inside:{punctuation:/\//}},builtin:/^L/}},builtin:[{pattern:/([();\[])[BCDFIJSVZ]+/,lookbehind:!0},{pattern:/([\w$>]:)[BCDFIJSVZ]/,lookbehind:!0}],keyword:[{pattern:/(\.end\s+)[\w-]+/,lookbehind:!0},{pattern:/(^|[^\w.-])\.(?!\d)[\w-]+/,lookbehind:!0},{pattern:/(^|[^\w.-])(?:abstract|annotation|bridge|constructor|enum|final|interface|private|protected|public|runtime|static|synthetic|system|transient)(?![\w.-])/,lookbehind:!0}],function:{pattern:/(^|[^\w.-])(?:\w+|<[\w$-]+>)(?=\()/,lookbehind:!0},field:{pattern:/[\w$]+(?=:)/,alias:"variable"},register:{pattern:/(^|[^\w.-])[vp]\d(?![\w.-])/,lookbehind:!0,alias:"variable"},boolean:{pattern:/(^|[^\w.-])(?:true|false)(?![\w.-])/,lookbehind:!0},number:{pattern:/(^|[^/\w.-])-?(?:NAN|INFINITY|0x(?:[\dA-F]+(?:\.[\dA-F]*)?|\.[\dA-F]+)(?:p[+-]?[\dA-F]+)?|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?)[dflst]?(?![\w.-])/i,lookbehind:!0},label:{pattern:/(:)\w+/,lookbehind:!0,alias:"property"},operator:/->|\.\.|[\[=]/,punctuation:/[{}(),;:]/}; +Prism.languages.smalltalk={comment:/"(?:""|[^"])*"/,character:{pattern:/\$./,alias:"string"},string:/'(?:''|[^'])*'/,symbol:/#[\da-z]+|#(?:-|([+\/\\*~<>=@%|&?!])\1?)|#(?=\()/i,"block-arguments":{pattern:/(\[\s*):[^\[|]*\|/,lookbehind:!0,inside:{variable:/:[\da-z]+/i,punctuation:/\|/}},"temporary-variables":{pattern:/\|[^|]+\|/,inside:{variable:/[\da-z]+/i,punctuation:/\|/}},keyword:/\b(?:nil|true|false|self|super|new)\b/,number:[/\d+r-?[\dA-Z]+(?:\.[\dA-Z]+)?(?:e-?\d+)?/,/\b\d+(?:\.\d+)?(?:e-?\d+)?/],operator:/[<=]=?|:=|~[~=]|\/\/?|\\\\|>[>=]?|[!^+\-*&|,@]/,punctuation:/[.;:?\[\](){}]/}; +!function(n){n.languages.smarty={comment:/\{\*[\s\S]*?\*\}/,delimiter:{pattern:/^\{|\}$/i,alias:"punctuation"},string:/(["'])(?:\\.|(?!\1)[^\\\r\n])*\1/,number:/\b0x[\dA-Fa-f]+|(?:\b\d+\.?\d*|\B\.\d+)(?:[Ee][-+]?\d+)?/,variable:[/\$(?!\d)\w+/,/#(?!\d)\w+#/,{pattern:/(\.|->)(?!\d)\w+/,lookbehind:!0},{pattern:/(\[)(?!\d)\w+(?=\])/,lookbehind:!0}],function:[{pattern:/(\|\s*)@?(?!\d)\w+/,lookbehind:!0},/^\/?(?!\d)\w+/,/(?!\d)\w+(?=\()/],"attr-name":{pattern:/\w+\s*=\s*(?:(?!\d)\w+)?/,inside:{variable:{pattern:/(=\s*)(?!\d)\w+/,lookbehind:!0},operator:/=/}},punctuation:[/[\[\]().,:`]|->/],operator:[/[+\-*\/%]|==?=?|[!<>]=?|&&|\|\|?/,/\bis\s+(?:not\s+)?(?:div|even|odd)(?:\s+by)?\b/,/\b(?:eq|neq?|gt|lt|gt?e|lt?e|not|mod|or|and)\b/],keyword:/\b(?:false|off|on|no|true|yes)\b/},n.hooks.add("before-tokenize",function(e){var t=!1;n.languages["markup-templating"].buildPlaceholders(e,"smarty",/\{\*[\s\S]*?\*\}|\{[\s\S]+?\}/g,function(e){return"{/literal}"===e&&(t=!1),!t&&("{literal}"===e&&(t=!0),!0)})}),n.hooks.add("after-tokenize",function(e){n.languages["markup-templating"].tokenizePlaceholders(e,"smarty")})}(Prism); +Prism.languages.solidity=Prism.languages.extend("clike",{"class-name":{pattern:/(\b(?:contract|enum|interface|library|new|struct|using)\s+)(?!\d)[\w$]+/,lookbehind:!0},keyword:/\b(?:_|anonymous|as|assembly|assert|break|calldata|case|constant|constructor|continue|contract|default|delete|do|else|emit|enum|event|external|for|from|function|if|import|indexed|inherited|interface|internal|is|let|library|mapping|memory|modifier|new|payable|pragma|private|public|pure|require|returns?|revert|selfdestruct|solidity|storage|struct|suicide|switch|this|throw|using|var|view|while)\b/,operator:/=>|->|:=|=:|\*\*|\+\+|--|\|\||&&|<<=?|>>=?|[-+*/%^&|<>!=]=?|[~?]/}),Prism.languages.insertBefore("solidity","keyword",{builtin:/\b(?:address|bool|string|u?int(?:8|16|24|32|40|48|56|64|72|80|88|96|104|112|120|128|136|144|152|160|168|176|184|192|200|208|216|224|232|240|248|256)?|byte|bytes(?:[1-9]|[12]\d|3[0-2])?)\b/}),Prism.languages.insertBefore("solidity","number",{version:{pattern:/([<>]=?|\^)\d+\.\d+\.\d+\b/,lookbehind:!0,alias:"number"}}),Prism.languages.sol=Prism.languages.solidity; +!function(n){var t={pattern:/\{[\da-f]{8}-[\da-f]{4}-[\da-f]{4}-[\da-f]{4}-[\da-f]{12}\}/i,alias:"constant",inside:{punctuation:/[{}]/}};n.languages["solution-file"]={comment:{pattern:/#.*/,greedy:!0},string:{pattern:/"[^"\r\n]*"|'[^'\r\n]*'/,greedy:!0,inside:{guid:t}},object:{pattern:/^([ \t]*)(?:([A-Z]\w*)\b(?=.*(?:\r\n?|\n)(?:\1[ \t].*(?:\r\n?|\n))*\1End\2(?=[ \t]*$))|End[A-Z]\w*(?=[ \t]*$))/m,lookbehind:!0,greedy:!0,alias:"keyword"},property:{pattern:/^([ \t]*)[^\r\n"#=()]*[^\s"#=()](?=\s*=)/m,lookbehind:!0,inside:{guid:t}},guid:t,number:/\b\d+(?:\.\d+)*\b/,boolean:/\b(?:FALSE|TRUE)\b/,operator:/=/,punctuation:/[(),]/},n.languages.sln=n.languages["solution-file"]}(Prism); +!function(t){var e=/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,a=/\b\d+(?:\.\d+)?(?:[eE][+-]?\d+)?\b|\b0x[\dA-F]+\b/;t.languages.soy={comment:[/\/\*[\s\S]*?\*\//,{pattern:/(\s)\/\/.*/,lookbehind:!0,greedy:!0}],"command-arg":{pattern:/({+\/?\s*(?:alias|call|delcall|delpackage|deltemplate|namespace|template)\s+)\.?[\w.]+/,lookbehind:!0,alias:"string",inside:{punctuation:/\./}},parameter:{pattern:/({+\/?\s*@?param\??\s+)\.?[\w.]+/,lookbehind:!0,alias:"variable"},keyword:[{pattern:/({+\/?[^\S\r\n]*)(?:\\[nrt]|alias|call|case|css|default|delcall|delpackage|deltemplate|else(?:if)?|fallbackmsg|for(?:each)?|if(?:empty)?|lb|let|literal|msg|namespace|nil|@?param\??|rb|sp|switch|template|xid)/,lookbehind:!0},/\b(?:any|as|attributes|bool|css|float|in|int|js|html|list|map|null|number|string|uri)\b/],delimiter:{pattern:/^{+\/?|\/?}+$/,alias:"punctuation"},property:/\w+(?==)/,variable:{pattern:/\$[^\W\d]\w*(?:\??(?:\.\w+|\[[^\]]+]))*/,inside:{string:{pattern:e,greedy:!0},number:a,punctuation:/[\[\].?]/}},string:{pattern:e,greedy:!0},function:[/\w+(?=\()/,{pattern:/(\|[^\S\r\n]*)\w+/,lookbehind:!0}],boolean:/\b(?:true|false)\b/,number:a,operator:/\?:?|<=?|>=?|==?|!=|[+*/%-]|\b(?:and|not|or)\b/,punctuation:/[{}()\[\]|.,:]/},t.hooks.add("before-tokenize",function(e){var a=!1;t.languages["markup-templating"].buildPlaceholders(e,"soy",/{{.+?}}|{.+?}|\s\/\/.*|\/\*[\s\S]*?\*\//g,function(e){return"{/literal}"===e&&(a=!1),!a&&("{literal}"===e&&(a=!0),!0)})}),t.hooks.add("after-tokenize",function(e){t.languages["markup-templating"].tokenizePlaceholders(e,"soy")})}(Prism); +Prism.languages.turtle={comment:{pattern:/#.*/,greedy:!0},"multiline-string":{pattern:/"""(?:(?:""?)?(?:[^"\\]|\\.))*"""|'''(?:(?:''?)?(?:[^'\\]|\\.))*'''/,greedy:!0,alias:"string",inside:{comment:/#.*/}},string:{pattern:/"(?:[^\\"\r\n]|\\.)*"|'(?:[^\\'\r\n]|\\.)*'/,greedy:!0},url:{pattern:/<(?:[^\x00-\x20<>"{}|^`\\]|\\(?:u[\da-fA-F]{4}|U[\da-fA-F]{8}))*>/,greedy:!0,inside:{punctuation:/[<>]/}},function:{pattern:/(?:(?![-.\d\xB7])[-.\w\xB7\xC0-\uFFFD]+)?:(?:(?![-.])(?:[-.:\w\xC0-\uFFFD]|%[\da-f]{2}|\\.)+)?/i,inside:{"local-name":{pattern:/([^:]*:)[\s\S]+/,lookbehind:!0},prefix:{pattern:/[\s\S]+/,inside:{punctuation:/:/}}}},number:/[+-]?\b\d+\.?\d*(?:e[+-]?\d+)?/i,punctuation:/[{}.,;()[\]]|\^\^/,boolean:/\b(?:true|false)\b/,keyword:[/(?:\ba|@prefix|@base)\b|=/,/\b(?:graph|base|prefix)\b/i],tag:{pattern:/@[a-z]+(?:-[a-z\d]+)*/i,inside:{punctuation:/@/}}},Prism.languages.trig=Prism.languages.turtle; +Prism.languages.sparql=Prism.languages.extend("turtle",{variable:{pattern:/[?$]\w+/,greedy:!0},boolean:/\b(?:true|false)\b/i}),Prism.languages.insertBefore("sparql","punctuation",{keyword:[/\b(?:A|ADD|ALL|AS|ASC|ASK|BNODE|BY|CLEAR|CONSTRUCT|COPY|CREATE|DATA|DEFAULT|DELETE|DESC|DESCRIBE|DISTINCT|DROP|EXISTS|FILTER|FROM|GROUP|HAVING|INSERT|INTO|LIMIT|LOAD|MINUS|MOVE|NAMED|NOT|NOW|OFFSET|OPTIONAL|ORDER|RAND|REDUCED|SELECT|SEPARATOR|SERVICE|SILENT|STRUUID|UNION|USING|UUID|VALUES|WHERE)\b/i,/\b(?:ABS|AVG|BIND|BOUND|CEIL|COALESCE|CONCAT|CONTAINS|COUNT|DATATYPE|DAY|ENCODE_FOR_URI|FLOOR|GROUP_CONCAT|HOURS|IF|IRI|isBLANK|isIRI|isLITERAL|isNUMERIC|isURI|LANG|LANGMATCHES|LCASE|MAX|MD5|MIN|MINUTES|MONTH|ROUND|REGEX|REPLACE|sameTerm|SAMPLE|SECONDS|SHA1|SHA256|SHA384|SHA512|STR|STRAFTER|STRBEFORE|STRDT|STRENDS|STRLANG|STRLEN|STRSTARTS|SUBSTR|SUM|TIMEZONE|TZ|UCASE|URI|YEAR)\b(?=\s*\()/i,/\b(?:GRAPH|BASE|PREFIX)\b/i]}),Prism.languages.rq=Prism.languages.sparql; +Prism.languages["splunk-spl"]={comment:/`comment\("(?:\\.|[^\\"])*"\)`/,string:{pattern:/"(?:\\.|[^\\"])*"/,greedy:!0},keyword:/\b(?:abstract|accum|addcoltotals|addinfo|addtotals|analyzefields|anomalies|anomalousvalue|anomalydetection|append|appendcols|appendcsv|appendlookup|appendpipe|arules|associate|audit|autoregress|bin|bucket|bucketdir|chart|cluster|cofilter|collect|concurrency|contingency|convert|correlate|datamodel|dbinspect|dedup|delete|delta|diff|erex|eval|eventcount|eventstats|extract|fieldformat|fields|fieldsummary|filldown|fillnull|findtypes|folderize|foreach|format|from|gauge|gentimes|geom|geomfilter|geostats|head|highlight|history|iconify|input|inputcsv|inputlookup|iplocation|join|kmeans|kv|kvform|loadjob|localize|localop|lookup|makecontinuous|makemv|makeresults|map|mcollect|metadata|metasearch|meventcollect|mstats|multikv|multisearch|mvcombine|mvexpand|nomv|outlier|outputcsv|outputlookup|outputtext|overlap|pivot|predict|rangemap|rare|regex|relevancy|reltime|rename|replace|rest|return|reverse|rex|rtorder|run|savedsearch|script|scrub|search|searchtxn|selfjoin|sendemail|set|setfields|sichart|sirare|sistats|sitimechart|sitop|sort|spath|stats|strcat|streamstats|table|tags|tail|timechart|timewrap|top|transaction|transpose|trendline|tscollect|tstats|typeahead|typelearner|typer|union|uniq|untable|where|x11|xmlkv|xmlunescape|xpath|xyseries)\b/i,"operator-word":{pattern:/\b(?:and|as|by|not|or|xor)\b/i,alias:"operator"},function:/\w+(?=\s*\()/,property:/\w+(?=\s*=(?!=))/,date:{pattern:/\b\d{1,2}\/\d{1,2}\/\d{1,4}(?:(?::\d{1,2}){3})?\b/,alias:"number"},number:/\b\d+(?:\.\d+)?\b/,boolean:/\b(?:f|false|t|true)\b/i,operator:/[<>=]=?|[-+*/%|]/,punctuation:/[()[\],]/}; +Prism.languages.sqf=Prism.languages.extend("clike",{string:{pattern:/"(?:(?:"")?[^"])*"(?!")|'(?:[^'])*'/,greedy:!0},keyword:/\b(?:breakOut|breakTo|call|case|catch|default|do|echo|else|execVM|execFSM|exitWith|for|forEach|forEachMember|forEachMemberAgent|forEachMemberTeam|from|goto|if|nil|preprocessFile|preprocessFileLineNumbers|private|scopeName|spawn|step|switch|then|throw|to|try|while|with)\b/i,"magic-variable":{pattern:/\b(?:_exception|_fnc_scriptName|_fnc_scriptNameParent|_forEachIndex|_this|_thisEventHandler|_thisFSM|_thisScript|_x|this|thisList|thisTrigger)\b/i,alias:"keyword"},boolean:/\b(?:true|false)\b/i,function:/\b(?:abs|accTime|acos|action|actionIDs|actionKeys|actionKeysImages|actionKeysNames|actionKeysNamesArray|actionName|actionParams|activateAddons|activatedAddons|activateKey|add3DENConnection|add3DENEventHandler|add3DENLayer|addAction|addBackpack|addBackpackCargo|addBackpackCargoGlobal|addBackpackGlobal|addCamShake|addCuratorAddons|addCuratorCameraArea|addCuratorEditableObjects|addCuratorEditingArea|addCuratorPoints|addEditorObject|addEventHandler|addForce|addForceGeneratorRTD|addGoggles|addGroupIcon|addHandgunItem|addHeadgear|addItem|addItemCargo|addItemCargoGlobal|addItemPool|addItemToBackpack|addItemToUniform|addItemToVest|addLiveStats|addMagazine|addMagazineAmmoCargo|addMagazineCargo|addMagazineCargoGlobal|addMagazineGlobal|addMagazinePool|addMagazines|addMagazineTurret|addMenu|addMenuItem|addMissionEventHandler|addMPEventHandler|addMusicEventHandler|addOwnedMine|addPlayerScores|addPrimaryWeaponItem|addPublicVariableEventHandler|addRating|addResources|addScore|addScoreSide|addSecondaryWeaponItem|addSwitchableUnit|addTeamMember|addToRemainsCollector|addTorque|addUniform|addVehicle|addVest|addWaypoint|addWeapon|addWeaponCargo|addWeaponCargoGlobal|addWeaponGlobal|addWeaponItem|addWeaponPool|addWeaponTurret|admin|agent|agents|AGLToASL|aimedAtTarget|aimPos|airDensityCurveRTD|airDensityRTD|airplaneThrottle|airportSide|AISFinishHeal|alive|all3DENEntities|allAirports|allControls|allCurators|allCutLayers|allDead|allDeadMen|allDisplays|allGroups|allMapMarkers|allMines|allMissionObjects|allow3DMode|allowCrewInImmobile|allowCuratorLogicIgnoreAreas|allowDamage|allowDammage|allowFileOperations|allowFleeing|allowGetIn|allowSprint|allPlayers|allSimpleObjects|allSites|allTurrets|allUnits|allUnitsUAV|allVariables|ammo|ammoOnPylon|animate|animateBay|animateDoor|animatePylon|animateSource|animationNames|animationPhase|animationSourcePhase|animationState|append|apply|armoryPoints|arrayIntersect|asin|ASLToAGL|ASLToATL|assert|assignAsCargo|assignAsCargoIndex|assignAsCommander|assignAsDriver|assignAsGunner|assignAsTurret|assignCurator|assignedCargo|assignedCommander|assignedDriver|assignedGunner|assignedItems|assignedTarget|assignedTeam|assignedVehicle|assignedVehicleRole|assignItem|assignTeam|assignToAirport|atan|atan2|atg|ATLToASL|attachedObject|attachedObjects|attachedTo|attachObject|attachTo|attackEnabled|backpack|backpackCargo|backpackContainer|backpackItems|backpackMagazines|backpackSpaceFor|behaviour|benchmark|binocular|blufor|boundingBox|boundingBoxReal|boundingCenter|briefingName|buildingExit|buildingPos|buldozer_EnableRoadDiag|buldozer_IsEnabledRoadDiag|buldozer_LoadNewRoads|buldozer_reloadOperMap|buttonAction|buttonSetAction|cadetMode|callExtension|camCommand|camCommit|camCommitPrepared|camCommitted|camConstuctionSetParams|camCreate|camDestroy|cameraEffect|cameraEffectEnableHUD|cameraInterest|cameraOn|cameraView|campaignConfigFile|camPreload|camPreloaded|camPrepareBank|camPrepareDir|camPrepareDive|camPrepareFocus|camPrepareFov|camPrepareFovRange|camPreparePos|camPrepareRelPos|camPrepareTarget|camSetBank|camSetDir|camSetDive|camSetFocus|camSetFov|camSetFovRange|camSetPos|camSetRelPos|camSetTarget|camTarget|camUseNVG|canAdd|canAddItemToBackpack|canAddItemToUniform|canAddItemToVest|cancelSimpleTaskDestination|canFire|canMove|canSlingLoad|canStand|canSuspend|canTriggerDynamicSimulation|canUnloadInCombat|canVehicleCargo|captive|captiveNum|cbChecked|cbSetChecked|ceil|channelEnabled|cheatsEnabled|checkAIFeature|checkVisibility|civilian|className|clear3DENAttribute|clear3DENInventory|clearAllItemsFromBackpack|clearBackpackCargo|clearBackpackCargoGlobal|clearForcesRTD|clearGroupIcons|clearItemCargo|clearItemCargoGlobal|clearItemPool|clearMagazineCargo|clearMagazineCargoGlobal|clearMagazinePool|clearOverlay|clearRadio|clearVehicleInit|clearWeaponCargo|clearWeaponCargoGlobal|clearWeaponPool|clientOwner|closeDialog|closeDisplay|closeOverlay|collapseObjectTree|collect3DENHistory|collectiveRTD|combatMode|commandArtilleryFire|commandChat|commander|commandFire|commandFollow|commandFSM|commandGetOut|commandingMenu|commandMove|commandRadio|commandStop|commandSuppressiveFire|commandTarget|commandWatch|comment|commitOverlay|compile|compileFinal|completedFSM|composeText|configClasses|configFile|configHierarchy|configName|configNull|configProperties|configSourceAddonList|configSourceMod|configSourceModList|confirmSensorTarget|connectTerminalToUAV|controlNull|controlsGroupCtrl|copyFromClipboard|copyToClipboard|copyWaypoints|cos|count|countEnemy|countFriendly|countSide|countType|countUnknown|create3DENComposition|create3DENEntity|createAgent|createCenter|createDialog|createDiaryLink|createDiaryRecord|createDiarySubject|createDisplay|createGearDialog|createGroup|createGuardedPoint|createLocation|createMarker|createMarkerLocal|createMenu|createMine|createMissionDisplay|createMPCampaignDisplay|createSimpleObject|createSimpleTask|createSite|createSoundSource|createTask|createTeam|createTrigger|createUnit|createVehicle|createVehicleCrew|createVehicleLocal|crew|ctAddHeader|ctAddRow|ctClear|ctCurSel|ctData|ctFindHeaderRows|ctFindRowHeader|ctHeaderControls|ctHeaderCount|ctRemoveHeaders|ctRemoveRows|ctrlActivate|ctrlAddEventHandler|ctrlAngle|ctrlAutoScrollDelay|ctrlAutoScrollRewind|ctrlAutoScrollSpeed|ctrlChecked|ctrlClassName|ctrlCommit|ctrlCommitted|ctrlCreate|ctrlDelete|ctrlEnable|ctrlEnabled|ctrlFade|ctrlHTMLLoaded|ctrlIDC|ctrlIDD|ctrlMapAnimAdd|ctrlMapAnimClear|ctrlMapAnimCommit|ctrlMapAnimDone|ctrlMapCursor|ctrlMapMouseOver|ctrlMapScale|ctrlMapScreenToWorld|ctrlMapWorldToScreen|ctrlModel|ctrlModelDirAndUp|ctrlModelScale|ctrlParent|ctrlParentControlsGroup|ctrlPosition|ctrlRemoveAllEventHandlers|ctrlRemoveEventHandler|ctrlScale|ctrlSetActiveColor|ctrlSetAngle|ctrlSetAutoScrollDelay|ctrlSetAutoScrollRewind|ctrlSetAutoScrollSpeed|ctrlSetBackgroundColor|ctrlSetChecked|ctrlSetDisabledColor|ctrlSetEventHandler|ctrlSetFade|ctrlSetFocus|ctrlSetFont|ctrlSetFontH1|ctrlSetFontH1B|ctrlSetFontH2|ctrlSetFontH2B|ctrlSetFontH3|ctrlSetFontH3B|ctrlSetFontH4|ctrlSetFontH4B|ctrlSetFontH5|ctrlSetFontH5B|ctrlSetFontH6|ctrlSetFontH6B|ctrlSetFontHeight|ctrlSetFontHeightH1|ctrlSetFontHeightH2|ctrlSetFontHeightH3|ctrlSetFontHeightH4|ctrlSetFontHeightH5|ctrlSetFontHeightH6|ctrlSetFontHeightSecondary|ctrlSetFontP|ctrlSetFontPB|ctrlSetFontSecondary|ctrlSetForegroundColor|ctrlSetModel|ctrlSetModelDirAndUp|ctrlSetModelScale|ctrlSetPixelPrecision|ctrlSetPosition|ctrlSetScale|ctrlSetStructuredText|ctrlSetText|ctrlSetTextColor|ctrlSetTextColorSecondary|ctrlSetTextSecondary|ctrlSetTooltip|ctrlSetTooltipColorBox|ctrlSetTooltipColorShade|ctrlSetTooltipColorText|ctrlShow|ctrlShown|ctrlText|ctrlTextHeight|ctrlTextSecondary|ctrlTextWidth|ctrlType|ctrlVisible|ctRowControls|ctRowCount|ctSetCurSel|ctSetData|ctSetHeaderTemplate|ctSetRowTemplate|ctSetValue|ctValue|curatorAddons|curatorCamera|curatorCameraArea|curatorCameraAreaCeiling|curatorCoef|curatorEditableObjects|curatorEditingArea|curatorEditingAreaType|curatorMouseOver|curatorPoints|curatorRegisteredObjects|curatorSelected|curatorWaypointCost|current3DENOperation|currentChannel|currentCommand|currentMagazine|currentMagazineDetail|currentMagazineDetailTurret|currentMagazineTurret|currentMuzzle|currentNamespace|currentTask|currentTasks|currentThrowable|currentVisionMode|currentWaypoint|currentWeapon|currentWeaponMode|currentWeaponTurret|currentZeroing|cursorObject|cursorTarget|customChat|customRadio|cutFadeOut|cutObj|cutRsc|cutText|damage|date|dateToNumber|daytime|deActivateKey|debriefingText|debugFSM|debugLog|deg|delete3DENEntities|deleteAt|deleteCenter|deleteCollection|deleteEditorObject|deleteGroup|deleteGroupWhenEmpty|deleteIdentity|deleteLocation|deleteMarker|deleteMarkerLocal|deleteRange|deleteResources|deleteSite|deleteStatus|deleteTeam|deleteVehicle|deleteVehicleCrew|deleteWaypoint|detach|detectedMines|diag_activeMissionFSMs|diag_activeScripts|diag_activeSQFScripts|diag_activeSQSScripts|diag_captureFrame|diag_captureFrameToFile|diag_captureSlowFrame|diag_codePerformance|diag_drawMode|diag_dynamicSimulationEnd|diag_enable|diag_enabled|diag_fps|diag_fpsMin|diag_frameNo|diag_lightNewLoad|diag_list|diag_log|diag_logSlowFrame|diag_mergeConfigFile|diag_recordTurretLimits|diag_setLightNew|diag_tickTime|diag_toggle|dialog|diarySubjectExists|didJIP|didJIPOwner|difficulty|difficultyEnabled|difficultyEnabledRTD|difficultyOption|direction|directSay|disableAI|disableCollisionWith|disableConversation|disableDebriefingStats|disableMapIndicators|disableNVGEquipment|disableRemoteSensors|disableSerialization|disableTIEquipment|disableUAVConnectability|disableUserInput|displayAddEventHandler|displayCtrl|displayNull|displayParent|displayRemoveAllEventHandlers|displayRemoveEventHandler|displaySetEventHandler|dissolveTeam|distance|distance2D|distanceSqr|distributionRegion|do3DENAction|doArtilleryFire|doFire|doFollow|doFSM|doGetOut|doMove|doorPhase|doStop|doSuppressiveFire|doTarget|doWatch|drawArrow|drawEllipse|drawIcon|drawIcon3D|drawLine|drawLine3D|drawLink|drawLocation|drawPolygon|drawRectangle|drawTriangle|driver|drop|dynamicSimulationDistance|dynamicSimulationDistanceCoef|dynamicSimulationEnabled|dynamicSimulationSystemEnabled|east|edit3DENMissionAttributes|editObject|editorSetEventHandler|effectiveCommander|emptyPositions|enableAI|enableAIFeature|enableAimPrecision|enableAttack|enableAudioFeature|enableAutoStartUpRTD|enableAutoTrimRTD|enableCamShake|enableCaustics|enableChannel|enableCollisionWith|enableCopilot|enableDebriefingStats|enableDiagLegend|enableDynamicSimulation|enableDynamicSimulationSystem|enableEndDialog|enableEngineArtillery|enableEnvironment|enableFatigue|enableGunLights|enableInfoPanelComponent|enableIRLasers|enableMimics|enablePersonTurret|enableRadio|enableReload|enableRopeAttach|enableSatNormalOnDetail|enableSaving|enableSentences|enableSimulation|enableSimulationGlobal|enableStamina|enableStressDamage|enableTeamSwitch|enableTraffic|enableUAVConnectability|enableUAVWaypoints|enableVehicleCargo|enableVehicleSensor|enableWeaponDisassembly|endl|endLoadingScreen|endMission|engineOn|enginesIsOnRTD|enginesPowerRTD|enginesRpmRTD|enginesTorqueRTD|entities|environmentEnabled|estimatedEndServerTime|estimatedTimeLeft|evalObjectArgument|everyBackpack|everyContainer|exec|execEditorScript|exp|expectedDestination|exportJIPMessages|eyeDirection|eyePos|face|faction|fadeMusic|fadeRadio|fadeSound|fadeSpeech|failMission|fillWeaponsFromPool|find|findCover|findDisplay|findEditorObject|findEmptyPosition|findEmptyPositionReady|findIf|findNearestEnemy|finishMissionInit|finite|fire|fireAtTarget|firstBackpack|flag|flagAnimationPhase|flagOwner|flagSide|flagTexture|fleeing|floor|flyInHeight|flyInHeightASL|fog|fogForecast|fogParams|forceAddUniform|forceAtPositionRTD|forcedMap|forceEnd|forceFlagTexture|forceFollowRoad|forceGeneratorRTD|forceMap|forceRespawn|forceSpeed|forceWalk|forceWeaponFire|forceWeatherChange|forgetTarget|format|formation|formationDirection|formationLeader|formationMembers|formationPosition|formationTask|formatText|formLeader|freeLook|fromEditor|fuel|fullCrew|gearIDCAmmoCount|gearSlotAmmoCount|gearSlotData|get3DENActionState|get3DENAttribute|get3DENCamera|get3DENConnections|get3DENEntity|get3DENEntityID|get3DENGrid|get3DENIconsVisible|get3DENLayerEntities|get3DENLinesVisible|get3DENMissionAttribute|get3DENMouseOver|get3DENSelected|getAimingCoef|getAllEnvSoundControllers|getAllHitPointsDamage|getAllOwnedMines|getAllSoundControllers|getAmmoCargo|getAnimAimPrecision|getAnimSpeedCoef|getArray|getArtilleryAmmo|getArtilleryComputerSettings|getArtilleryETA|getAssignedCuratorLogic|getAssignedCuratorUnit|getBackpackCargo|getBleedingRemaining|getBurningValue|getCameraViewDirection|getCargoIndex|getCenterOfMass|getClientState|getClientStateNumber|getCompatiblePylonMagazines|getConnectedUAV|getContainerMaxLoad|getCursorObjectParams|getCustomAimCoef|getDammage|getDescription|getDir|getDirVisual|getDLCAssetsUsage|getDLCAssetsUsageByName|getDLCs|getDLCUsageTime|getEditorCamera|getEditorMode|getEditorObjectScope|getElevationOffset|getEngineTargetRpmRTD|getEnvSoundController|getFatigue|getFieldManualStartPage|getForcedFlagTexture|getFriend|getFSMVariable|getFuelCargo|getGroupIcon|getGroupIconParams|getGroupIcons|getHideFrom|getHit|getHitIndex|getHitPointDamage|getItemCargo|getMagazineCargo|getMarkerColor|getMarkerPos|getMarkerSize|getMarkerType|getMass|getMissionConfig|getMissionConfigValue|getMissionDLCs|getMissionLayerEntities|getMissionLayers|getModelInfo|getMousePosition|getMusicPlayedTime|getNumber|getObjectArgument|getObjectChildren|getObjectDLC|getObjectMaterials|getObjectProxy|getObjectTextures|getObjectType|getObjectViewDistance|getOxygenRemaining|getPersonUsedDLCs|getPilotCameraDirection|getPilotCameraPosition|getPilotCameraRotation|getPilotCameraTarget|getPlateNumber|getPlayerChannel|getPlayerScores|getPlayerUID|getPlayerUIDOld|getPos|getPosASL|getPosASLVisual|getPosASLW|getPosATL|getPosATLVisual|getPosVisual|getPosWorld|getPylonMagazines|getRelDir|getRelPos|getRemoteSensorsDisabled|getRepairCargo|getResolution|getRotorBrakeRTD|getShadowDistance|getShotParents|getSlingLoad|getSoundController|getSoundControllerResult|getSpeed|getStamina|getStatValue|getSuppression|getTerrainGrid|getTerrainHeightASL|getText|getTotalDLCUsageTime|getTrimOffsetRTD|getUnitLoadout|getUnitTrait|getUserMFDText|getUserMFDValue|getVariable|getVehicleCargo|getWeaponCargo|getWeaponSway|getWingsOrientationRTD|getWingsPositionRTD|getWPPos|glanceAt|globalChat|globalRadio|goggles|group|groupChat|groupFromNetId|groupIconSelectable|groupIconsVisible|groupId|groupOwner|groupRadio|groupSelectedUnits|groupSelectUnit|grpNull|gunner|gusts|halt|handgunItems|handgunMagazine|handgunWeapon|handsHit|hasInterface|hasPilotCamera|hasWeapon|hcAllGroups|hcGroupParams|hcLeader|hcRemoveAllGroups|hcRemoveGroup|hcSelected|hcSelectGroup|hcSetGroup|hcShowBar|hcShownBar|headgear|hideBody|hideObject|hideObjectGlobal|hideSelection|hint|hintC|hintCadet|hintSilent|hmd|hostMission|htmlLoad|HUDMovementLevels|humidity|image|importAllGroups|importance|in|inArea|inAreaArray|incapacitatedState|independent|inflame|inflamed|infoPanel|infoPanelComponentEnabled|infoPanelComponents|infoPanels|inGameUISetEventHandler|inheritsFrom|initAmbientLife|inPolygon|inputAction|inRangeOfArtillery|insertEditorObject|intersect|is3DEN|is3DENMultiplayer|isAbleToBreathe|isAgent|isAimPrecisionEnabled|isArray|isAutoHoverOn|isAutonomous|isAutoStartUpEnabledRTD|isAutotest|isAutoTrimOnRTD|isBleeding|isBurning|isClass|isCollisionLightOn|isCopilotEnabled|isDamageAllowed|isDedicated|isDLCAvailable|isEngineOn|isEqualTo|isEqualType|isEqualTypeAll|isEqualTypeAny|isEqualTypeArray|isEqualTypeParams|isFilePatchingEnabled|isFlashlightOn|isFlatEmpty|isForcedWalk|isFormationLeader|isGroupDeletedWhenEmpty|isHidden|isInRemainsCollector|isInstructorFigureEnabled|isIRLaserOn|isKeyActive|isKindOf|isLaserOn|isLightOn|isLocalized|isManualFire|isMarkedForCollection|isMultiplayer|isMultiplayerSolo|isNil|isNull|isNumber|isObjectHidden|isObjectRTD|isOnRoad|isPipEnabled|isPlayer|isRealTime|isRemoteExecuted|isRemoteExecutedJIP|isServer|isShowing3DIcons|isSimpleObject|isSprintAllowed|isStaminaEnabled|isSteamMission|isStreamFriendlyUIEnabled|isStressDamageEnabled|isText|isTouchingGround|isTurnedOut|isTutHintsEnabled|isUAVConnectable|isUAVConnected|isUIContext|isUniformAllowed|isVehicleCargo|isVehicleRadarOn|isVehicleSensorEnabled|isWalking|isWeaponDeployed|isWeaponRested|itemCargo|items|itemsWithMagazines|join|joinAs|joinAsSilent|joinSilent|joinString|kbAddDatabase|kbAddDatabaseTargets|kbAddTopic|kbHasTopic|kbReact|kbRemoveTopic|kbTell|kbWasSaid|keyImage|keyName|knowsAbout|land|landAt|landResult|language|laserTarget|lbAdd|lbClear|lbColor|lbColorRight|lbCurSel|lbData|lbDelete|lbIsSelected|lbPicture|lbPictureRight|lbSelection|lbSetColor|lbSetColorRight|lbSetCurSel|lbSetData|lbSetPicture|lbSetPictureColor|lbSetPictureColorDisabled|lbSetPictureColorSelected|lbSetPictureRight|lbSetPictureRightColor|lbSetPictureRightColorDisabled|lbSetPictureRightColorSelected|lbSetSelectColor|lbSetSelectColorRight|lbSetSelected|lbSetText|lbSetTextRight|lbSetTooltip|lbSetValue|lbSize|lbSort|lbSortByValue|lbText|lbTextRight|lbValue|leader|leaderboardDeInit|leaderboardGetRows|leaderboardInit|leaderboardRequestRowsFriends|leaderboardRequestRowsGlobal|leaderboardRequestRowsGlobalAroundUser|leaderboardsRequestUploadScore|leaderboardsRequestUploadScoreKeepBest|leaderboardState|leaveVehicle|libraryCredits|libraryDisclaimers|lifeState|lightAttachObject|lightDetachObject|lightIsOn|lightnings|limitSpeed|linearConversion|lineBreak|lineIntersects|lineIntersectsObjs|lineIntersectsSurfaces|lineIntersectsWith|linkItem|list|listObjects|listRemoteTargets|listVehicleSensors|ln|lnbAddArray|lnbAddColumn|lnbAddRow|lnbClear|lnbColor|lnbColorRight|lnbCurSelRow|lnbData|lnbDeleteColumn|lnbDeleteRow|lnbGetColumnsPosition|lnbPicture|lnbPictureRight|lnbSetColor|lnbSetColorRight|lnbSetColumnsPos|lnbSetCurSelRow|lnbSetData|lnbSetPicture|lnbSetPictureColor|lnbSetPictureColorRight|lnbSetPictureColorSelected|lnbSetPictureColorSelectedRight|lnbSetPictureRight|lnbSetText|lnbSetTextRight|lnbSetValue|lnbSize|lnbSort|lnbSortByValue|lnbText|lnbTextRight|lnbValue|load|loadAbs|loadBackpack|loadFile|loadGame|loadIdentity|loadMagazine|loadOverlay|loadStatus|loadUniform|loadVest|local|localize|locationNull|locationPosition|lock|lockCameraTo|lockCargo|lockDriver|locked|lockedCargo|lockedDriver|lockedTurret|lockIdentity|lockTurret|lockWP|log|logEntities|logNetwork|logNetworkTerminate|lookAt|lookAtPos|magazineCargo|magazines|magazinesAllTurrets|magazinesAmmo|magazinesAmmoCargo|magazinesAmmoFull|magazinesDetail|magazinesDetailBackpack|magazinesDetailUniform|magazinesDetailVest|magazinesTurret|magazineTurretAmmo|mapAnimAdd|mapAnimClear|mapAnimCommit|mapAnimDone|mapCenterOnCamera|mapGridPosition|markAsFinishedOnSteam|markerAlpha|markerBrush|markerColor|markerDir|markerPos|markerShape|markerSize|markerText|markerType|max|members|menuAction|menuAdd|menuChecked|menuClear|menuCollapse|menuData|menuDelete|menuEnable|menuEnabled|menuExpand|menuHover|menuPicture|menuSetAction|menuSetCheck|menuSetData|menuSetPicture|menuSetValue|menuShortcut|menuShortcutText|menuSize|menuSort|menuText|menuURL|menuValue|min|mineActive|mineDetectedBy|missionConfigFile|missionDifficulty|missionName|missionNamespace|missionStart|missionVersion|modelToWorld|modelToWorldVisual|modelToWorldVisualWorld|modelToWorldWorld|modParams|moonIntensity|moonPhase|morale|move|move3DENCamera|moveInAny|moveInCargo|moveInCommander|moveInDriver|moveInGunner|moveInTurret|moveObjectToEnd|moveOut|moveTime|moveTo|moveToCompleted|moveToFailed|musicVolume|name|nameSound|nearEntities|nearestBuilding|nearestLocation|nearestLocations|nearestLocationWithDubbing|nearestObject|nearestObjects|nearestTerrainObjects|nearObjects|nearObjectsReady|nearRoads|nearSupplies|nearTargets|needReload|netId|netObjNull|newOverlay|nextMenuItemIndex|nextWeatherChange|nMenuItems|numberOfEnginesRTD|numberToDate|objectCurators|objectFromNetId|objectParent|objNull|objStatus|onBriefingGear|onBriefingGroup|onBriefingNotes|onBriefingPlan|onBriefingTeamSwitch|onCommandModeChanged|onDoubleClick|onEachFrame|onGroupIconClick|onGroupIconOverEnter|onGroupIconOverLeave|onHCGroupSelectionChanged|onMapSingleClick|onPlayerConnected|onPlayerDisconnected|onPreloadFinished|onPreloadStarted|onShowNewObject|onTeamSwitch|openCuratorInterface|openDLCPage|openDSInterface|openMap|openSteamApp|openYoutubeVideo|opfor|orderGetIn|overcast|overcastForecast|owner|param|params|parseNumber|parseSimpleArray|parseText|parsingNamespace|particlesQuality|pi|pickWeaponPool|pitch|pixelGrid|pixelGridBase|pixelGridNoUIScale|pixelH|pixelW|playableSlotsNumber|playableUnits|playAction|playActionNow|player|playerRespawnTime|playerSide|playersNumber|playGesture|playMission|playMove|playMoveNow|playMusic|playScriptedMission|playSound|playSound3D|position|positionCameraToWorld|posScreenToWorld|posWorldToScreen|ppEffectAdjust|ppEffectCommit|ppEffectCommitted|ppEffectCreate|ppEffectDestroy|ppEffectEnable|ppEffectEnabled|ppEffectForceInNVG|precision|preloadCamera|preloadObject|preloadSound|preloadTitleObj|preloadTitleRsc|primaryWeapon|primaryWeaponItems|primaryWeaponMagazine|priority|processDiaryLink|processInitCommands|productVersion|profileName|profileNamespace|profileNameSteam|progressLoadingScreen|progressPosition|progressSetPosition|publicVariable|publicVariableClient|publicVariableServer|pushBack|pushBackUnique|putWeaponPool|queryItemsPool|queryMagazinePool|queryWeaponPool|rad|radioChannelAdd|radioChannelCreate|radioChannelRemove|radioChannelSetCallSign|radioChannelSetLabel|radioVolume|rain|rainbow|random|rank|rankId|rating|rectangular|registeredTasks|registerTask|reload|reloadEnabled|remoteControl|remoteExec|remoteExecCall|remoteExecutedOwner|remove3DENConnection|remove3DENEventHandler|remove3DENLayer|removeAction|removeAll3DENEventHandlers|removeAllActions|removeAllAssignedItems|removeAllContainers|removeAllCuratorAddons|removeAllCuratorCameraAreas|removeAllCuratorEditingAreas|removeAllEventHandlers|removeAllHandgunItems|removeAllItems|removeAllItemsWithMagazines|removeAllMissionEventHandlers|removeAllMPEventHandlers|removeAllMusicEventHandlers|removeAllOwnedMines|removeAllPrimaryWeaponItems|removeAllWeapons|removeBackpack|removeBackpackGlobal|removeCuratorAddons|removeCuratorCameraArea|removeCuratorEditableObjects|removeCuratorEditingArea|removeDrawIcon|removeDrawLinks|removeEventHandler|removeFromRemainsCollector|removeGoggles|removeGroupIcon|removeHandgunItem|removeHeadgear|removeItem|removeItemFromBackpack|removeItemFromUniform|removeItemFromVest|removeItems|removeMagazine|removeMagazineGlobal|removeMagazines|removeMagazinesTurret|removeMagazineTurret|removeMenuItem|removeMissionEventHandler|removeMPEventHandler|removeMusicEventHandler|removeOwnedMine|removePrimaryWeaponItem|removeSecondaryWeaponItem|removeSimpleTask|removeSwitchableUnit|removeTeamMember|removeUniform|removeVest|removeWeapon|removeWeaponAttachmentCargo|removeWeaponCargo|removeWeaponGlobal|removeWeaponTurret|reportRemoteTarget|requiredVersion|resetCamShake|resetSubgroupDirection|resistance|resize|resources|respawnVehicle|restartEditorCamera|reveal|revealMine|reverse|reversedMouseY|roadAt|roadsConnectedTo|roleDescription|ropeAttachedObjects|ropeAttachedTo|ropeAttachEnabled|ropeAttachTo|ropeCreate|ropeCut|ropeDestroy|ropeDetach|ropeEndPosition|ropeLength|ropes|ropeUnwind|ropeUnwound|rotorsForcesRTD|rotorsRpmRTD|round|runInitScript|safeZoneH|safeZoneW|safeZoneWAbs|safeZoneX|safeZoneXAbs|safeZoneY|save3DENInventory|saveGame|saveIdentity|saveJoysticks|saveOverlay|saveProfileNamespace|saveStatus|saveVar|savingEnabled|say|say2D|say3D|score|scoreSide|screenshot|screenToWorld|scriptDone|scriptName|scriptNull|scudState|secondaryWeapon|secondaryWeaponItems|secondaryWeaponMagazine|select|selectBestPlaces|selectDiarySubject|selectedEditorObjects|selectEditorObject|selectionNames|selectionPosition|selectLeader|selectMax|selectMin|selectNoPlayer|selectPlayer|selectRandom|selectRandomWeighted|selectWeapon|selectWeaponTurret|sendAUMessage|sendSimpleCommand|sendTask|sendTaskResult|sendUDPMessage|serverCommand|serverCommandAvailable|serverCommandExecutable|serverName|serverTime|set|set3DENAttribute|set3DENAttributes|set3DENGrid|set3DENIconsVisible|set3DENLayer|set3DENLinesVisible|set3DENLogicType|set3DENMissionAttribute|set3DENMissionAttributes|set3DENModelsVisible|set3DENObjectType|set3DENSelected|setAccTime|setActualCollectiveRTD|setAirplaneThrottle|setAirportSide|setAmmo|setAmmoCargo|setAmmoOnPylon|setAnimSpeedCoef|setAperture|setApertureNew|setArmoryPoints|setAttributes|setAutonomous|setBehaviour|setBleedingRemaining|setBrakesRTD|setCameraInterest|setCamShakeDefParams|setCamShakeParams|setCamUseTI|setCaptive|setCenterOfMass|setCollisionLight|setCombatMode|setCompassOscillation|setConvoySeparation|setCuratorCameraAreaCeiling|setCuratorCoef|setCuratorEditingAreaType|setCuratorWaypointCost|setCurrentChannel|setCurrentTask|setCurrentWaypoint|setCustomAimCoef|setCustomWeightRTD|setDamage|setDammage|setDate|setDebriefingText|setDefaultCamera|setDestination|setDetailMapBlendPars|setDir|setDirection|setDrawIcon|setDriveOnPath|setDropInterval|setDynamicSimulationDistance|setDynamicSimulationDistanceCoef|setEditorMode|setEditorObjectScope|setEffectCondition|setEngineRpmRTD|setFace|setFaceAnimation|setFatigue|setFeatureType|setFlagAnimationPhase|setFlagOwner|setFlagSide|setFlagTexture|setFog|setForceGeneratorRTD|setFormation|setFormationTask|setFormDir|setFriend|setFromEditor|setFSMVariable|setFuel|setFuelCargo|setGroupIcon|setGroupIconParams|setGroupIconsSelectable|setGroupIconsVisible|setGroupId|setGroupIdGlobal|setGroupOwner|setGusts|setHideBehind|setHit|setHitIndex|setHitPointDamage|setHorizonParallaxCoef|setHUDMovementLevels|setIdentity|setImportance|setInfoPanel|setLeader|setLightAmbient|setLightAttenuation|setLightBrightness|setLightColor|setLightDayLight|setLightFlareMaxDistance|setLightFlareSize|setLightIntensity|setLightnings|setLightUseFlare|setLocalWindParams|setMagazineTurretAmmo|setMarkerAlpha|setMarkerAlphaLocal|setMarkerBrush|setMarkerBrushLocal|setMarkerColor|setMarkerColorLocal|setMarkerDir|setMarkerDirLocal|setMarkerPos|setMarkerPosLocal|setMarkerShape|setMarkerShapeLocal|setMarkerSize|setMarkerSizeLocal|setMarkerText|setMarkerTextLocal|setMarkerType|setMarkerTypeLocal|setMass|setMimic|setMousePosition|setMusicEffect|setMusicEventHandler|setName|setNameSound|setObjectArguments|setObjectMaterial|setObjectMaterialGlobal|setObjectProxy|setObjectTexture|setObjectTextureGlobal|setObjectViewDistance|setOvercast|setOwner|setOxygenRemaining|setParticleCircle|setParticleClass|setParticleFire|setParticleParams|setParticleRandom|setPilotCameraDirection|setPilotCameraRotation|setPilotCameraTarget|setPilotLight|setPiPEffect|setPitch|setPlateNumber|setPlayable|setPlayerRespawnTime|setPos|setPosASL|setPosASL2|setPosASLW|setPosATL|setPosition|setPosWorld|setPylonLoadOut|setPylonsPriority|setRadioMsg|setRain|setRainbow|setRandomLip|setRank|setRectangular|setRepairCargo|setRotorBrakeRTD|setShadowDistance|setShotParents|setSide|setSimpleTaskAlwaysVisible|setSimpleTaskCustomData|setSimpleTaskDescription|setSimpleTaskDestination|setSimpleTaskTarget|setSimpleTaskType|setSimulWeatherLayers|setSize|setSkill|setSlingLoad|setSoundEffect|setSpeaker|setSpeech|setSpeedMode|setStamina|setStaminaScheme|setStatValue|setSuppression|setSystemOfUnits|setTargetAge|setTaskMarkerOffset|setTaskResult|setTaskState|setTerrainGrid|setText|setTimeMultiplier|setTitleEffect|setToneMapping|setToneMappingParams|setTrafficDensity|setTrafficDistance|setTrafficGap|setTrafficSpeed|setTriggerActivation|setTriggerArea|setTriggerStatements|setTriggerText|setTriggerTimeout|setTriggerType|setType|setUnconscious|setUnitAbility|setUnitLoadout|setUnitPos|setUnitPosWeak|setUnitRank|setUnitRecoilCoefficient|setUnitTrait|setUnloadInCombat|setUserActionText|setUserMFDText|setUserMFDValue|setVariable|setVectorDir|setVectorDirAndUp|setVectorUp|setVehicleAmmo|setVehicleAmmoDef|setVehicleArmor|setVehicleCargo|setVehicleId|setVehicleInit|setVehicleLock|setVehiclePosition|setVehicleRadar|setVehicleReceiveRemoteTargets|setVehicleReportOwnPosition|setVehicleReportRemoteTargets|setVehicleTIPars|setVehicleVarName|setVelocity|setVelocityModelSpace|setVelocityTransformation|setViewDistance|setVisibleIfTreeCollapsed|setWantedRpmRTD|setWaves|setWaypointBehaviour|setWaypointCombatMode|setWaypointCompletionRadius|setWaypointDescription|setWaypointForceBehaviour|setWaypointFormation|setWaypointHousePosition|setWaypointLoiterRadius|setWaypointLoiterType|setWaypointName|setWaypointPosition|setWaypointScript|setWaypointSpeed|setWaypointStatements|setWaypointTimeout|setWaypointType|setWaypointVisible|setWeaponReloadingTime|setWind|setWindDir|setWindForce|setWindStr|setWingForceScaleRTD|setWPPos|show3DIcons|showChat|showCinemaBorder|showCommandingMenu|showCompass|showCuratorCompass|showGPS|showHUD|showLegend|showMap|shownArtilleryComputer|shownChat|shownCompass|shownCuratorCompass|showNewEditorObject|shownGPS|shownHUD|shownMap|shownPad|shownRadio|shownScoretable|shownUAVFeed|shownWarrant|shownWatch|showPad|showRadio|showScoretable|showSubtitles|showUAVFeed|showWarrant|showWatch|showWaypoint|showWaypoints|side|sideAmbientLife|sideChat|sideEmpty|sideEnemy|sideFriendly|sideLogic|sideRadio|sideUnknown|simpleTasks|simulationEnabled|simulCloudDensity|simulCloudOcclusion|simulInClouds|simulWeatherSync|sin|size|sizeOf|skill|skillFinal|skipTime|sleep|sliderPosition|sliderRange|sliderSetPosition|sliderSetRange|sliderSetSpeed|sliderSpeed|slingLoadAssistantShown|soldierMagazines|someAmmo|sort|soundVolume|speaker|speed|speedMode|splitString|sqrt|squadParams|stance|startLoadingScreen|stop|stopEngineRTD|stopped|str|sunOrMoon|supportInfo|suppressFor|surfaceIsWater|surfaceNormal|surfaceType|swimInDepth|switchableUnits|switchAction|switchCamera|switchGesture|switchLight|switchMove|synchronizedObjects|synchronizedTriggers|synchronizedWaypoints|synchronizeObjectsAdd|synchronizeObjectsRemove|synchronizeTrigger|synchronizeWaypoint|systemChat|systemOfUnits|tan|targetKnowledge|targets|targetsAggregate|targetsQuery|taskAlwaysVisible|taskChildren|taskCompleted|taskCustomData|taskDescription|taskDestination|taskHint|taskMarkerOffset|taskNull|taskParent|taskResult|taskState|taskType|teamMember|teamMemberNull|teamName|teams|teamSwitch|teamSwitchEnabled|teamType|terminate|terrainIntersect|terrainIntersectASL|terrainIntersectAtASL|text|textLog|textLogFormat|tg|time|timeMultiplier|titleCut|titleFadeOut|titleObj|titleRsc|titleText|toArray|toFixed|toLower|toString|toUpper|triggerActivated|triggerActivation|triggerArea|triggerAttachedVehicle|triggerAttachObject|triggerAttachVehicle|triggerDynamicSimulation|triggerStatements|triggerText|triggerTimeout|triggerTimeoutCurrent|triggerType|turretLocal|turretOwner|turretUnit|tvAdd|tvClear|tvCollapse|tvCollapseAll|tvCount|tvCurSel|tvData|tvDelete|tvExpand|tvExpandAll|tvPicture|tvPictureRight|tvSetColor|tvSetCurSel|tvSetData|tvSetPicture|tvSetPictureColor|tvSetPictureColorDisabled|tvSetPictureColorSelected|tvSetPictureRight|tvSetPictureRightColor|tvSetPictureRightColorDisabled|tvSetPictureRightColorSelected|tvSetSelectColor|tvSetText|tvSetTooltip|tvSetValue|tvSort|tvSortByValue|tvText|tvTooltip|tvValue|type|typeName|typeOf|UAVControl|uiNamespace|uiSleep|unassignCurator|unassignItem|unassignTeam|unassignVehicle|underwater|uniform|uniformContainer|uniformItems|uniformMagazines|unitAddons|unitAimPosition|unitAimPositionVisual|unitBackpack|unitIsUAV|unitPos|unitReady|unitRecoilCoefficient|units|unitsBelowHeight|unlinkItem|unlockAchievement|unregisterTask|updateDrawIcon|updateMenuItem|updateObjectTree|useAIOperMapObstructionTest|useAISteeringComponent|useAudioTimeForMoves|userInputDisabled|vectorAdd|vectorCos|vectorCrossProduct|vectorDiff|vectorDir|vectorDirVisual|vectorDistance|vectorDistanceSqr|vectorDotProduct|vectorFromTo|vectorMagnitude|vectorMagnitudeSqr|vectorModelToWorld|vectorModelToWorldVisual|vectorMultiply|vectorNormalized|vectorUp|vectorUpVisual|vectorWorldToModel|vectorWorldToModelVisual|vehicle|vehicleCargoEnabled|vehicleChat|vehicleRadio|vehicleReceiveRemoteTargets|vehicleReportOwnPosition|vehicleReportRemoteTargets|vehicles|vehicleVarName|velocity|velocityModelSpace|verifySignature|vest|vestContainer|vestItems|vestMagazines|viewDistance|visibleCompass|visibleGPS|visibleMap|visiblePosition|visiblePositionASL|visibleScoretable|visibleWatch|waitUntil|waves|waypointAttachedObject|waypointAttachedVehicle|waypointAttachObject|waypointAttachVehicle|waypointBehaviour|waypointCombatMode|waypointCompletionRadius|waypointDescription|waypointForceBehaviour|waypointFormation|waypointHousePosition|waypointLoiterRadius|waypointLoiterType|waypointName|waypointPosition|waypoints|waypointScript|waypointsEnabledUAV|waypointShow|waypointSpeed|waypointStatements|waypointTimeout|waypointTimeoutCurrent|waypointType|waypointVisible|weaponAccessories|weaponAccessoriesCargo|weaponCargo|weaponDirection|weaponInertia|weaponLowered|weapons|weaponsItems|weaponsItemsCargo|weaponState|weaponsTurret|weightRTD|west|WFSideText|wind|windDir|windRTD|windStr|wingsForcesRTD|worldName|worldSize|worldToModel|worldToModelVisual|worldToScreen)\b/i,number:/(?:\$|\b0x)[\da-f]+\b|(?:\B\.\d+|\b\d+(?:\.\d+)?)(?:e[+-]?\d+)?\b/i,operator:/##|>>|&&|\|\||[!=<>]=?|[-+*/%#^]|\b(?:and|mod|not|or)\b/i,constant:/\bDIK(?:_[a-z\d]+)+\b/i}),Prism.languages.insertBefore("sqf","string",{macro:{pattern:/(^\s*)#[a-z]+(?:[^\r\n\\]|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{directive:{pattern:/#[a-z]+\b/i,alias:"keyword"},comment:Prism.languages.sqf.comment}}}),delete Prism.languages.sqf["class-name"]; +Prism.languages.stan={comment:/\/\/.*|\/\*[\s\S]*?\*\/|#(?!include).*/,string:{pattern:/"[\x20\x21\x23-\x5B\x5D-\x7E]*"/,greedy:!0},directive:{pattern:/^([ \t]*)#include\b.*/m,lookbehind:!0,alias:"property"},"function-arg":{pattern:/(\b(?:algebra_solver|integrate_1d|integrate_ode|integrate_ode_bdf|integrate_ode_rk45|map_rect)\s*\(\s*)[a-zA-Z]\w*/,lookbehind:!0,alias:"function"},constraint:{pattern:/(\b(?:int|matrix|real|row_vector|vector)\s*)<[^<>]*>/,lookbehind:!0,inside:{expression:{pattern:/(=\s*)(?:(?!\s*(?:>$|,\s*\w+\s*=))[\s\S])+/,lookbehind:!0,inside:null},property:/\b[a-z]\w*(?=\s*=)/i,operator:/=/,punctuation:/^<|>$|[,]/}},keyword:[/\b(?:break|cholesky_factor_corr|cholesky_factor_cov|continue|corr_matrix|cov_matrix|data|else|for|functions|generated|if|in|increment_log_prob|int|matrix|model|ordered|parameters|positive_ordered|print|quantities|real|reject|return|row_vector|simplex|target|transformed|unit_vector|vector|void|while)\b/,/\b(?:algebra_solver|integrate_1d|integrate_ode|integrate_ode_bdf|integrate_ode_rk45|map_rect)\b/],function:/\b[a-z]\w*(?=\s*\()/i,number:/(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:E[+-]?\d+)?\b/i,boolean:/\b(?:false|true)\b/,operator:/<-|\.[*/]=?|\|\|?|&&|[!=<>+\-*/]=?|['^%~?:]/,punctuation:/[()\[\]{},;]/},Prism.languages.stan.constraint.inside.expression.inside=Prism.languages.stan; +Prism.languages.iecst={comment:[{pattern:/(^|[^\\])(?:\/\*[\s\S]*?(?:\*\/|$)|\(\*[\s\S]*?(?:\*\)|$)|\{[\s\S]*?(?:\}|$))/,lookbehind:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":/\b(?:END_)?(?:PROGRAM|CONFIGURATION|INTERFACE|FUNCTION_BLOCK|FUNCTION|ACTION|TRANSITION|TYPE|STRUCT|(?:INITIAL_)?STEP|NAMESPACE|LIBRARY|CHANNEL|FOLDER|RESOURCE|VAR_(?:GLOBAL|INPUT|PUTPUT|IN_OUT|ACCESS|TEMP|EXTERNAL|CONFIG)|VAR|METHOD|PROPERTY)\b/i,keyword:/\b(?:(?:END_)?(?:IF|WHILE|REPEAT|CASE|FOR)|ELSE|FROM|THEN|ELSIF|DO|TO|BY|PRIVATE|PUBLIC|PROTECTED|CONSTANT|RETURN|EXIT|CONTINUE|GOTO|JMP|AT|RETAIN|NON_RETAIN|TASK|WITH|UNTIL|USING|EXTENDS|IMPLEMENTS|GET|SET|__TRY|__CATCH|__FINALLY|__ENDTRY)\b/,variable:/\b(?:AT|BOOL|BYTE|(?:D|L)?WORD|U?(?:S|D|L)?INT|L?REAL|TIME(?:_OF_DAY)?|TOD|DT|DATE(?:_AND_TIME)?|STRING|ARRAY|ANY|POINTER)\b/,symbol:/%[IQM][XBWDL][\d.]*|%[IQ][\d.]*/,number:/\b(?:16#[\da-f]+|2#[01_]+|0x[\da-f]+)\b|\b(?:T|D|DT|TOD)#[\d_shmd:]*|\b[A-Z]*\#[\d.,_]*|(?:\b\d+\.?\d*|\B\.\d+)(?:e[+-]?\d+)?/i,boolean:/\b(?:TRUE|FALSE|NULL)\b/,function:/\w+(?=\()/,operator:/(?:S?R?:?=>?|&&?|\*\*?|<=?|>=?|[-:^/+])|\b(?:OR|AND|MOD|NOT|XOR|LE|GE|EQ|NE|GE|LT)\b/,punctuation:/[();]/,type:{pattern:/#/,alias:"selector"}}; +!function(e){var n={pattern:/(\b\d+)(?:%|[a-z]+)/,lookbehind:!0},r={pattern:/(^|[^\w.-])-?\d*\.?\d+/,lookbehind:!0},i={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},url:{pattern:/url\((["']?).*?\1\)/i,greedy:!0},string:{pattern:/("|')(?:(?!\1)[^\\\r\n]|\\(?:\r\n|[\s\S]))*\1/,greedy:!0},interpolation:null,func:null,important:/\B!(?:important|optional)\b/i,keyword:{pattern:/(^|\s+)(?:(?:if|else|for|return|unless)(?=\s+|$)|@[\w-]+)/,lookbehind:!0},hexcode:/#[\da-f]{3,6}/i,color:[/\b(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)\b/i,{pattern:/\b(?:rgb|hsl)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:rgb|hsl)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:n,number:r,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:n,boolean:/\b(?:true|false)\b/,operator:[/~|[+!\/%<>?=]=?|[-:]=|\*[*=]?|\.{2,3}|&&|\|\||\B-\B|\b(?:and|in|is(?: a| defined| not|nt)?|not|or)\b/],number:r,punctuation:/[{}()\[\];:,]/};i.interpolation={pattern:/\{[^\r\n}:]+\}/,alias:"variable",inside:{delimiter:{pattern:/^{|}$/,alias:"punctuation"},rest:i}},i.func={pattern:/[\w-]+\([^)]*\).*/,inside:{function:/^[^(]+/,rest:i}},e.languages.stylus={"atrule-declaration":{pattern:/(^\s*)@.+/m,lookbehind:!0,inside:{atrule:/^@[\w-]+/,rest:i}},"variable-declaration":{pattern:/(^[ \t]*)[\w$-]+\s*.?=[ \t]*(?:(?:\{[^}]*\}|.+)|$)/m,lookbehind:!0,inside:{variable:/^\S+/,rest:i}},statement:{pattern:/(^[ \t]*)(?:if|else|for|return|unless)[ \t]+.+/m,lookbehind:!0,inside:{keyword:/^\S+/,rest:i}},"property-declaration":{pattern:/((?:^|\{)([ \t]*))(?:[\w-]|\{[^}\r\n]+\})+(?:\s*:\s*|[ \t]+)[^{\r\n]*(?:;|[^{\r\n,](?=$)(?!(?:\r?\n|\r)(?:\{|\2[ \t]+)))/m,lookbehind:!0,inside:{property:{pattern:/^[^\s:]+/,inside:{interpolation:i.interpolation}},rest:i}},selector:{pattern:/(^[ \t]*)(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\))?|\{[^}\r\n]+\})+)(?:(?:\r?\n|\r)(?:\1(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\))?|\{[^}\r\n]+\})+)))*(?:,$|\{|(?=(?:\r?\n|\r)(?:\{|\1[ \t]+)))/m,lookbehind:!0,inside:{interpolation:i.interpolation,comment:i.comment,punctuation:/[{},]/}},func:i.func,string:i.string,comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0,greedy:!0},interpolation:i.interpolation,punctuation:/[{}()\[\];:.]/}}(Prism); +Prism.languages.swift=Prism.languages.extend("clike",{string:{pattern:/("|')(?:\\(?:\((?:[^()]|\([^)]+\))+\)|\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0,inside:{interpolation:{pattern:/\\\((?:[^()]|\([^)]+\))+\)/,inside:{delimiter:{pattern:/^\\\(|\)$/,alias:"variable"}}}}},keyword:/\b(?:as|associativity|break|case|catch|class|continue|convenience|default|defer|deinit|didSet|do|dynamic(?:Type)?|else|enum|extension|fallthrough|final|for|func|get|guard|if|import|in|infix|init|inout|internal|is|lazy|left|let|mutating|new|none|nonmutating|operator|optional|override|postfix|precedence|prefix|private|protocol|public|repeat|required|rethrows|return|right|safe|self|Self|set|static|struct|subscript|super|switch|throws?|try|Type|typealias|unowned|unsafe|var|weak|where|while|willSet|__(?:COLUMN__|FILE__|FUNCTION__|LINE__))\b/,number:/\b(?:[\d_]+(?:\.[\de_]+)?|0x[a-f0-9_]+(?:\.[a-f0-9p_]+)?|0b[01_]+|0o[0-7_]+)\b/i,constant:/\b(?:nil|[A-Z_]{2,}|k[A-Z][A-Za-z_]+)\b/,atrule:/@\b(?:IB(?:Outlet|Designable|Action|Inspectable)|class_protocol|exported|noreturn|NS(?:Copying|Managed)|objc|UIApplicationMain|auto_closure)\b/,builtin:/\b(?:[A-Z]\S+|abs|advance|alignof(?:Value)?|assert|contains|count(?:Elements)?|debugPrint(?:ln)?|distance|drop(?:First|Last)|dump|enumerate|equal|filter|find|first|getVaList|indices|isEmpty|join|last|lexicographicalCompare|map|max(?:Element)?|min(?:Element)?|numericCast|overlaps|partition|print(?:ln)?|reduce|reflect|reverse|sizeof(?:Value)?|sort(?:ed)?|split|startsWith|stride(?:of(?:Value)?)?|suffix|swap|toDebugString|toString|transcode|underestimateCount|unsafeBitCast|with(?:ExtendedLifetime|Unsafe(?:MutablePointers?|Pointers?)|VaList))\b/}),Prism.languages.swift.string.inside.interpolation.inside.rest=Prism.languages.swift; +!function(n){function i(e,t,a){return{pattern:RegExp("<#"+e+"[\\s\\S]*?#>"),alias:"block",inside:{delimiter:{pattern:RegExp("^<#"+e+"|#>$"),alias:"important"},content:{pattern:/[\s\S]+/,inside:t,alias:a}}}}n.languages["t4-templating"]=Object.defineProperty({},"createT4",{value:function(e){var t=n.languages[e],a="language-"+e;return{block:{pattern:/<#[\s\S]+?#>/,inside:{directive:i("@",{"attr-value":{pattern:/=(?:("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|[^\s'">=]+)/,inside:{punctuation:/^=|^["']|["']$/}},keyword:/\w+(?=\s)/,"attr-name":/\w+/}),expression:i("=",t,a),"class-feature":i("\\+",t,a),standard:i("",t,a)}}}}})}(Prism); +Prism.languages.t4=Prism.languages["t4-cs"]=Prism.languages["t4-templating"].createT4("csharp"); +Prism.languages.vbnet=Prism.languages.extend("basic",{keyword:/(?:\b(?:ADDHANDLER|ADDRESSOF|ALIAS|AND|ANDALSO|AS|BEEP|BLOAD|BOOLEAN|BSAVE|BYREF|BYTE|BYVAL|CALL(?: ABSOLUTE)?|CASE|CATCH|CBOOL|CBYTE|CCHAR|CDATE|CDEC|CDBL|CHAIN|CHAR|CHDIR|CINT|CLASS|CLEAR|CLNG|CLOSE|CLS|COBJ|COM|COMMON|CONST|CONTINUE|CSBYTE|CSHORT|CSNG|CSTR|CTYPE|CUINT|CULNG|CUSHORT|DATA|DATE|DECIMAL|DECLARE|DEFAULT|DEF(?: FN| SEG|DBL|INT|LNG|SNG|STR)|DELEGATE|DIM|DIRECTCAST|DO|DOUBLE|ELSE|ELSEIF|END|ENUM|ENVIRON|ERASE|ERROR|EVENT|EXIT|FALSE|FIELD|FILES|FINALLY|FOR(?: EACH)?|FRIEND|FUNCTION|GET|GETTYPE|GETXMLNAMESPACE|GLOBAL|GOSUB|GOTO|HANDLES|IF|IMPLEMENTS|IMPORTS|IN|INHERITS|INPUT|INTEGER|INTERFACE|IOCTL|IS|ISNOT|KEY|KILL|LINE INPUT|LET|LIB|LIKE|LOCATE|LOCK|LONG|LOOP|LSET|ME|MKDIR|MOD|MODULE|MUSTINHERIT|MUSTOVERRIDE|MYBASE|MYCLASS|NAME|NAMESPACE|NARROWING|NEW|NEXT|NOT|NOTHING|NOTINHERITABLE|NOTOVERRIDABLE|OBJECT|OF|OFF|ON(?: COM| ERROR| KEY| TIMER)?|OPERATOR|OPEN|OPTION(?: BASE)?|OPTIONAL|OR|ORELSE|OUT|OVERLOADS|OVERRIDABLE|OVERRIDES|PARAMARRAY|PARTIAL|POKE|PRIVATE|PROPERTY|PROTECTED|PUBLIC|PUT|RAISEEVENT|READ|READONLY|REDIM|REM|REMOVEHANDLER|RESTORE|RESUME|RETURN|RMDIR|RSET|RUN|SBYTE|SELECT(?: CASE)?|SET|SHADOWS|SHARED|SHORT|SINGLE|SHELL|SLEEP|STATIC|STEP|STOP|STRING|STRUCTURE|SUB|SYNCLOCK|SWAP|SYSTEM|THEN|THROW|TIMER|TO|TROFF|TRON|TRUE|TRY|TRYCAST|TYPE|TYPEOF|UINTEGER|ULONG|UNLOCK|UNTIL|USHORT|USING|VIEW PRINT|WAIT|WEND|WHEN|WHILE|WIDENING|WITH|WITHEVENTS|WRITE|WRITEONLY|XOR)|\B(?:#CONST|#ELSE|#ELSEIF|#END|#IF))(?:\$|\b)/i,comment:[{pattern:/(?:!|REM\b).+/i,inside:{keyword:/^REM/i}},{pattern:/(^|[^\\:])'.*/,lookbehind:!0}]}); +Prism.languages["t4-vb"]=Prism.languages["t4-templating"].createT4("vbnet"); +!function(n){var t=/[*&][^\s[\]{},]+/,e=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,r="(?:"+e.source+"(?:[ \t]+"+t.source+")?|"+t.source+"(?:[ \t]+"+e.source+")?)";function a(n,t){t=(t||"").replace(/m/g,"")+"m";var e="([:\\-,[{]\\s*(?:\\s<>[ \t]+)?)(?:<>)(?=[ \t]*(?:$|,|]|}|\\s*#))".replace(/<>/g,function(){return r}).replace(/<>/g,function(){return n});return RegExp(e,t)}n.languages.yaml={scalar:{pattern:RegExp("([\\-:]\\s*(?:\\s<>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)[^\r\n]+(?:\\2[^\r\n]+)*)".replace(/<>/g,function(){return r})),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp("((?:^|[:\\-,[{\r\n?])[ \t]*(?:<>[ \t]+)?)[^\r\n{[\\]},#\\s]+?(?=\\s*:\\s)".replace(/<>/g,function(){return r})),lookbehind:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:a("\\d{4}-\\d\\d?-\\d\\d?(?:[tT]|[ \t]+)\\d\\d?:\\d{2}:\\d{2}(?:\\.\\d*)?[ \t]*(?:Z|[-+]\\d\\d?(?::\\d{2})?)?|\\d{4}-\\d{2}-\\d{2}|\\d\\d?:\\d{2}(?::\\d{2}(?:\\.\\d*)?)?"),lookbehind:!0,alias:"number"},boolean:{pattern:a("true|false","i"),lookbehind:!0,alias:"important"},null:{pattern:a("null|~","i"),lookbehind:!0,alias:"important"},string:{pattern:a("(\"|')(?:(?!\\2)[^\\\\\r\n]|\\\\.)*\\2"),lookbehind:!0,greedy:!0},number:{pattern:a("[+-]?(?:0x[\\da-f]+|0o[0-7]+|(?:\\d+\\.?\\d*|\\.?\\d+)(?:e[+-]?\\d+)?|\\.inf|\\.nan)","i"),lookbehind:!0},tag:e,important:t,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},n.languages.yml=n.languages.yaml}(Prism); +Prism.languages.tap={fail:/not ok[^#{\n\r]*/,pass:/ok[^#{\n\r]*/,pragma:/pragma [+-][a-z]+/,bailout:/bail out!.*/i,version:/TAP version \d+/i,plan:/\d+\.\.\d+(?: +#.*)?/,subtest:{pattern:/# Subtest(?:: .*)?/,greedy:!0},punctuation:/[{}]/,directive:/#.*/,yamlish:{pattern:/(^[^\S\r\n]*)---(?:\r\n?|\n)(?:.*(?:\r\n?|\n))*?[^\S\r\n]*\.\.\.$/m,lookbehind:!0,inside:Prism.languages.yaml,alias:"language-yaml"}}; +Prism.languages.tcl={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0},string:{pattern:/"(?:[^"\\\r\n]|\\(?:\r\n|[\s\S]))*"/,greedy:!0},variable:[{pattern:/(\$)(?:::)?(?:[a-zA-Z0-9]+::)*\w+/,lookbehind:!0},{pattern:/(\$){[^}]+}/,lookbehind:!0},{pattern:/(^\s*set[ \t]+)(?:::)?(?:[a-zA-Z0-9]+::)*\w+/m,lookbehind:!0}],function:{pattern:/(^\s*proc[ \t]+)[^\s]+/m,lookbehind:!0},builtin:[{pattern:/(^\s*)(?:proc|return|class|error|eval|exit|for|foreach|if|switch|while|break|continue)\b/m,lookbehind:!0},/\b(?:elseif|else)\b/],scope:{pattern:/(^\s*)(?:global|upvar|variable)\b/m,lookbehind:!0,alias:"constant"},keyword:{pattern:/(^\s*|\[)(?:after|append|apply|array|auto_(?:execok|import|load|mkindex|qualify|reset)|automkindex_old|bgerror|binary|catch|cd|chan|clock|close|concat|dde|dict|encoding|eof|exec|expr|fblocked|fconfigure|fcopy|file(?:event|name)?|flush|gets|glob|history|http|incr|info|interp|join|lappend|lassign|lindex|linsert|list|llength|load|lrange|lrepeat|lreplace|lreverse|lsearch|lset|lsort|math(?:func|op)|memory|msgcat|namespace|open|package|parray|pid|pkg_mkIndex|platform|puts|pwd|re_syntax|read|refchan|regexp|registry|regsub|rename|Safe_Base|scan|seek|set|socket|source|split|string|subst|Tcl|tcl(?:_endOfWord|_findLibrary|startOf(?:Next|Previous)Word|wordBreak(?:After|Before)|test|vars)|tell|time|tm|trace|unknown|unload|unset|update|uplevel|vwait)\b/m,lookbehind:!0},operator:/!=?|\*\*?|==|&&?|\|\|?|<[=<]?|>[=>]?|[-+~\/%?^]|\b(?:eq|ne|in|ni)\b/,punctuation:/[{}()\[\]]/}; +!function(t){t.languages.tt2=t.languages.extend("clike",{comment:/#.*|\[%#[\s\S]*?%\]/,keyword:/\b(?:BLOCK|CALL|CASE|CATCH|CLEAR|DEBUG|DEFAULT|ELSE|ELSIF|END|FILTER|FINAL|FOREACH|GET|IF|IN|INCLUDE|INSERT|LAST|MACRO|META|NEXT|PERL|PROCESS|RAWPERL|RETURN|SET|STOP|TAGS|THROW|TRY|SWITCH|UNLESS|USE|WHILE|WRAPPER)\b/,punctuation:/[[\]{},()]/}),t.languages.insertBefore("tt2","number",{operator:/=[>=]?|!=?|<=?|>=?|&&|\|\|?|\b(?:and|or|not)\b/,variable:{pattern:/\b[a-z]\w*(?:\s*\.\s*(?:\d+|\$?[a-z]\w*))*\b/i}}),t.languages.insertBefore("tt2","keyword",{delimiter:{pattern:/^(?:\[%|%%)-?|-?%]$/,alias:"punctuation"}}),t.languages.insertBefore("tt2","string",{"single-quoted-string":{pattern:/'[^\\']*(?:\\[\s\S][^\\']*)*'/,greedy:!0,alias:"string"},"double-quoted-string":{pattern:/"[^\\"]*(?:\\[\s\S][^\\"]*)*"/,greedy:!0,alias:"string",inside:{variable:{pattern:/\$(?:[a-z]\w*(?:\.(?:\d+|\$?[a-z]\w*))*)/i}}}}),delete t.languages.tt2.string,t.hooks.add("before-tokenize",function(e){t.languages["markup-templating"].buildPlaceholders(e,"tt2",/\[%[\s\S]+?%\]/g)}),t.hooks.add("after-tokenize",function(e){t.languages["markup-templating"].tokenizePlaceholders(e,"tt2")})}(Prism); +!function(n){function e(n,e){return RegExp(n.replace(//g,function(){return"(?:\\([^|()\n]+\\)|\\[[^\\]\n]+\\]|\\{[^}\n]+\\})"}).replace(//g,function(){return"(?:\\)|\\((?![^|()\n]+\\)))"}),e||"")}var i={css:{pattern:/\{[^}]+\}/,inside:{rest:n.languages.css}},"class-id":{pattern:/(\()[^)]+(?=\))/,lookbehind:!0,alias:"attr-value"},lang:{pattern:/(\[)[^\]]+(?=\])/,lookbehind:!0,alias:"attr-value"},punctuation:/[\\\/]\d+|\S/},t=n.languages.textile=n.languages.extend("markup",{phrase:{pattern:/(^|\r|\n)\S[\s\S]*?(?=$|\r?\n\r?\n|\r\r)/,lookbehind:!0,inside:{"block-tag":{pattern:e("^[a-z]\\w*(?:||[<>=])*\\."),inside:{modifier:{pattern:e("(^[a-z]\\w*)(?:||[<>=])+(?=\\.)"),lookbehind:!0,inside:i},tag:/^[a-z]\w*/,punctuation:/\.$/}},list:{pattern:e("^[*#]+*\\s+.+","m"),inside:{modifier:{pattern:e("(^[*#]+)+"),lookbehind:!0,inside:i},punctuation:/^[*#]+/}},table:{pattern:e("^(?:(?:||[<>=^~])+\\.\\s*)?(?:\\|(?:(?:||[<>=^~_]|[\\\\/]\\d+)+\\.)?[^|]*)+\\|","m"),inside:{modifier:{pattern:e("(^|\\|(?:\r?\n|\r)?)(?:||[<>=^~_]|[\\\\/]\\d+)+(?=\\.)"),lookbehind:!0,inside:i},punctuation:/\||^\./}},inline:{pattern:e("(^|[^a-zA-Z\\d])(\\*\\*|__|\\?\\?|[*_%@+\\-^~])*.+?\\2(?![a-zA-Z\\d])"),lookbehind:!0,inside:{bold:{pattern:e("(^(\\*\\*?)*).+?(?=\\2)"),lookbehind:!0},italic:{pattern:e("(^(__?)*).+?(?=\\2)"),lookbehind:!0},cite:{pattern:e("(^\\?\\?*).+?(?=\\?\\?)"),lookbehind:!0,alias:"string"},code:{pattern:e("(^@*).+?(?=@)"),lookbehind:!0,alias:"keyword"},inserted:{pattern:e("(^\\+*).+?(?=\\+)"),lookbehind:!0},deleted:{pattern:e("(^-*).+?(?=-)"),lookbehind:!0},span:{pattern:e("(^%*).+?(?=%)"),lookbehind:!0},modifier:{pattern:e("(^\\*\\*|__|\\?\\?|[*_%@+\\-^~])+"),lookbehind:!0,inside:i},punctuation:/[*_%?@+\-^~]+/}},"link-ref":{pattern:/^\[[^\]]+\]\S+$/m,inside:{string:{pattern:/(\[)[^\]]+(?=\])/,lookbehind:!0},url:{pattern:/(\])\S+$/,lookbehind:!0},punctuation:/[\[\]]/}},link:{pattern:e('"*[^"]+":.+?(?=[^\\w/]?(?:\\s|$))'),inside:{text:{pattern:e('(^"*)[^"]+(?=")'),lookbehind:!0},modifier:{pattern:e('(^")+'),lookbehind:!0,inside:i},url:{pattern:/(:).+/,lookbehind:!0},punctuation:/[":]/}},image:{pattern:e("!(?:||[<>=])*[^!\\s()]+(?:\\([^)]+\\))?!(?::.+?(?=[^\\w/]?(?:\\s|$)))?"),inside:{source:{pattern:e("(^!(?:||[<>=])*)[^!\\s()]+(?:\\([^)]+\\))?(?=!)"),lookbehind:!0,alias:"url"},modifier:{pattern:e("(^!)(?:||[<>=])+"),lookbehind:!0,inside:i},url:{pattern:/(:).+/,lookbehind:!0},punctuation:/[!:]/}},footnote:{pattern:/\b\[\d+\]/,alias:"comment",inside:{punctuation:/\[|\]/}},acronym:{pattern:/\b[A-Z\d]+\([^)]+\)/,inside:{comment:{pattern:/(\()[^)]+(?=\))/,lookbehind:!0},punctuation:/[()]/}},mark:{pattern:/\b\((?:TM|R|C)\)/,alias:"comment",inside:{punctuation:/[()]/}}}}}),a=t.phrase.inside,o={inline:a.inline,link:a.link,image:a.image,footnote:a.footnote,acronym:a.acronym,mark:a.mark};t.tag.pattern=/<\/?(?!\d)[a-z0-9]+(?:\s+[^\s>\/=]+(?:=(?:("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|[^\s'">=]+))?)*\s*\/?>/i;var r=a.inline.inside;r.bold.inside=o,r.italic.inside=o,r.inserted.inside=o,r.deleted.inside=o,r.span.inside=o;var d=a.table.inside;d.inline=o.inline,d.link=o.link,d.image=o.image,d.footnote=o.footnote,d.acronym=o.acronym,d.mark=o.mark}(Prism); +!function(e){function n(e){return e.replace(/__/g,function(){return"(?:[\\w-]+|'[^'\n\r]*'|\"(?:\\\\.|[^\\\\\"\r\n])*\")"})}e.languages.toml={comment:{pattern:/#.*/,greedy:!0},table:{pattern:RegExp(n("(^\\s*\\[\\s*(?:\\[\\s*)?)__(?:\\s*\\.\\s*__)*(?=\\s*\\])"),"m"),lookbehind:!0,greedy:!0,alias:"class-name"},key:{pattern:RegExp(n("(^\\s*|[{,]\\s*)__(?:\\s*\\.\\s*__)*(?=\\s*=)"),"m"),lookbehind:!0,greedy:!0,alias:"property"},string:{pattern:/"""(?:\\[\s\S]|[^\\])*?"""|'''[\s\S]*?'''|'[^'\n\r]*'|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},date:[{pattern:/\b\d{4}-\d{2}-\d{2}(?:[T\s]\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})?)?\b/i,alias:"number"},{pattern:/\b\d{2}:\d{2}:\d{2}(?:\.\d+)?\b/,alias:"number"}],number:/(?:\b0(?:x[\da-zA-Z]+(?:_[\da-zA-Z]+)*|o[0-7]+(?:_[0-7]+)*|b[10]+(?:_[10]+)*))\b|[-+]?\b\d+(?:_\d+)*(?:\.\d+(?:_\d+)*)?(?:[eE][+-]?\d+(?:_\d+)*)?\b|[-+]?\b(?:inf|nan)\b/,boolean:/\b(?:true|false)\b/,punctuation:/[.,=[\]{}]/}}(Prism); +Prism.languages.twig={comment:/\{#[\s\S]*?#\}/,tag:{pattern:/\{\{[\s\S]*?\}\}|\{%[\s\S]*?%\}/,inside:{ld:{pattern:/^(?:\{\{-?|\{%-?\s*\w+)/,inside:{punctuation:/^(?:\{\{|\{%)-?/,keyword:/\w+/}},rd:{pattern:/-?(?:%\}|\}\})$/,inside:{punctuation:/.+/}},string:{pattern:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,inside:{punctuation:/^['"]|['"]$/}},keyword:/\b(?:even|if|odd)\b/,boolean:/\b(?:true|false|null)\b/,number:/\b0x[\dA-Fa-f]+|(?:\b\d+\.?\d*|\B\.\d+)(?:[Ee][-+]?\d+)?/,operator:[{pattern:/(\s)(?:and|b-and|b-xor|b-or|ends with|in|is|matches|not|or|same as|starts with)(?=\s)/,lookbehind:!0},/[=<>]=?|!=|\*\*?|\/\/?|\?:?|[-+~%|]/],property:/\b[a-zA-Z_]\w*\b/,punctuation:/[()\[\]{}:.,]/}},other:{pattern:/\S(?:[\s\S]*\S)?/,inside:Prism.languages.markup}}; +!function(E){var n=/\b(?:ACT|ACTIFSUB|CARRAY|CASE|CLEARGIF|COA|COA_INT|CONSTANTS|CONTENT|CUR|EDITPANEL|EFFECT|EXT|FILE|FLUIDTEMPLATE|FORM|FRAME|FRAMESET|GIFBUILDER|GMENU|GMENU_FOLDOUT|GMENU_LAYERS|GP|HMENU|HRULER|HTML|IENV|IFSUB|IMAGE|IMGMENU|IMGMENUITEM|IMGTEXT|IMG_RESOURCE|INCLUDE_TYPOSCRIPT|JSMENU|JSMENUITEM|LLL|LOAD_REGISTER|NO|PAGE|RECORDS|RESTORE_REGISTER|TEMPLATE|TEXT|TMENU|TMENUITEM|TMENU_LAYERS|USER|USER_INT|_GIFBUILDER|global|globalString|globalVar)\b/;E.languages.typoscript={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0},{pattern:/(^|[^\\:= \t]|(?:^|[^= \t])[ \t]+)\/\/.*/,lookbehind:!0,greedy:!0},{pattern:/(^|[^"'])#.*/,lookbehind:!0,greedy:!0}],function:[{pattern://,inside:{string:{pattern:/"[^"\r\n]*"|'[^'\r\n]*'/,inside:{keyword:n}},keyword:{pattern:/INCLUDE_TYPOSCRIPT/}}},{pattern:/@import\s*(?:"[^"\r\n]*"|'[^'\r\n]*')/,inside:{string:/"[^"\r\n]*"|'[^'\r\n]*'/}}],string:{pattern:/^([^=]*=[< ]?)(?:(?!]\n).)*/,lookbehind:!0,inside:{function:/{\$.*}/,keyword:n,number:/^[0-9]+$/,punctuation:/[,|:]/}},keyword:n,number:{pattern:/[0-9]+\s*[.{=]/,inside:{operator:/[.{=]/}},tag:{pattern:/\.?[\w-\\]+\.?/,inside:{punctuation:/\./}},punctuation:/[{}[\];(),.:|]/,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/},E.languages.tsconfig=E.languages.typoscript}(Prism); +Prism.languages.unrealscript={comment:/\/\/.*|\/\*[\s\S]*?\*\//,string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},category:{pattern:/(\b(?:(?:autoexpand|hide|show)categories|var)\s*\()[^()]+(?=\))/,lookbehind:!0,greedy:!0,alias:"property"},metadata:{pattern:/(\w\s*)<\s*\w+\s*=[^<>|=\r\n]+(?:\|\s*\w+\s*=[^<>|=\r\n]+)*>/,lookbehind:!0,greedy:!0,inside:{property:/\w+(?=\s*=)/,operator:/=/,punctuation:/[<>|]/}},macro:{pattern:/`\w+/,alias:"property"},"class-name":{pattern:/(\b(?:class|enum|extends|interface|state(?:\(\))?|struct|within)\s+)\w+/,lookbehind:!0},keyword:/\b(?:abstract|actor|array|auto|autoexpandcategories|bool|break|byte|case|class|classgroup|client|coerce|collapsecategories|config|const|continue|default|defaultproperties|delegate|dependson|deprecated|do|dontcollapsecategories|editconst|editinlinenew|else|enum|event|exec|export|extends|final|float|for|forcescriptorder|foreach|function|goto|guid|hidecategories|hidedropdown|if|ignores|implements|inherits|input|int|interface|iterator|latent|local|material|name|native|nativereplication|noexport|nontransient|noteditinlinenew|notplaceable|operator|optional|out|pawn|perobjectconfig|perobjectlocalized|placeable|postoperator|preoperator|private|protected|reliable|replication|return|server|showcategories|simulated|singular|state|static|string|struct|structdefault|structdefaultproperties|switch|texture|transient|travel|unreliable|until|var|vector|while|within)\b/,function:/[a-z_]\w*(?=\s*\()/i,boolean:/\b(?:false|true)\b/,number:/\b0x[\da-f]+\b|(?:\b\d+\.?\d*|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/>>|<<|--|\+\+|\*\*|[-+*/~!=<>$@]=?|&&?|\|\|?|\^\^?|[?:%]|\b(?:Cross|Dot|ClockwiseFrom)\b/,punctuation:/[()[\]{};,.]/},Prism.languages.uc=Prism.languages.uscript=Prism.languages.unrealscript; +!function(e){e.languages.velocity=e.languages.extend("markup",{});var n={variable:{pattern:/(^|[^\\](?:\\\\)*)\$!?(?:[a-z][\w-]*(?:\([^)]*\))?(?:\.[a-z][\w-]*(?:\([^)]*\))?|\[[^\]]+])*|{[^}]+})/i,lookbehind:!0,inside:{}},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},number:/\b\d+\b/,boolean:/\b(?:true|false)\b/,operator:/[=!<>]=?|[+*/%-]|&&|\|\||\.\.|\b(?:eq|g[et]|l[et]|n(?:e|ot))\b/,punctuation:/[(){}[\]:,.]/};n.variable.inside={string:n.string,function:{pattern:/([^\w-])[a-z][\w-]*(?=\()/,lookbehind:!0},number:n.number,boolean:n.boolean,punctuation:n.punctuation},e.languages.insertBefore("velocity","comment",{unparsed:{pattern:/(^|[^\\])#\[\[[\s\S]*?]]#/,lookbehind:!0,greedy:!0,inside:{punctuation:/^#\[\[|]]#$/}},"velocity-comment":[{pattern:/(^|[^\\])#\*[\s\S]*?\*#/,lookbehind:!0,greedy:!0,alias:"comment"},{pattern:/(^|[^\\])##.*/,lookbehind:!0,greedy:!0,alias:"comment"}],directive:{pattern:/(^|[^\\](?:\\\\)*)#@?(?:[a-z][\w-]*|{[a-z][\w-]*})(?:\s*\((?:[^()]|\([^()]*\))*\))?/i,lookbehind:!0,inside:{keyword:{pattern:/^#@?(?:[a-z][\w-]*|{[a-z][\w-]*})|\bin\b/,inside:{punctuation:/[{}]/}},rest:n}},variable:n.variable}),e.languages.velocity.tag.inside["attr-value"].inside.rest=e.languages.velocity}(Prism); +Prism.languages.verilog={comment:/\/\/.*|\/\*[\s\S]*?\*\//,string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},property:/\B\$\w+\b/,constant:/\B`\w+\b/,function:/\w+(?=\()/,keyword:/\b(?:alias|and|assert|assign|assume|automatic|before|begin|bind|bins|binsof|bit|break|buf|bufif0|bufif1|byte|class|case|casex|casez|cell|chandle|clocking|cmos|config|const|constraint|context|continue|cover|covergroup|coverpoint|cross|deassign|default|defparam|design|disable|dist|do|edge|else|end|endcase|endclass|endclocking|endconfig|endfunction|endgenerate|endgroup|endinterface|endmodule|endpackage|endprimitive|endprogram|endproperty|endspecify|endsequence|endtable|endtask|enum|event|expect|export|extends|extern|final|first_match|for|force|foreach|forever|fork|forkjoin|function|generate|genvar|highz0|highz1|if|iff|ifnone|ignore_bins|illegal_bins|import|incdir|include|initial|inout|input|inside|instance|int|integer|interface|intersect|join|join_any|join_none|large|liblist|library|local|localparam|logic|longint|macromodule|matches|medium|modport|module|nand|negedge|new|nmos|nor|noshowcancelled|not|notif0|notif1|null|or|output|package|packed|parameter|pmos|posedge|primitive|priority|program|property|protected|pull0|pull1|pulldown|pullup|pulsestyle_onevent|pulsestyle_ondetect|pure|rand|randc|randcase|randsequence|rcmos|real|realtime|ref|reg|release|repeat|return|rnmos|rpmos|rtran|rtranif0|rtranif1|scalared|sequence|shortint|shortreal|showcancelled|signed|small|solve|specify|specparam|static|string|strong0|strong1|struct|super|supply0|supply1|table|tagged|task|this|throughout|time|timeprecision|timeunit|tran|tranif0|tranif1|tri|tri0|tri1|triand|trior|trireg|type|typedef|union|unique|unsigned|use|uwire|var|vectored|virtual|void|wait|wait_order|wand|weak0|weak1|while|wildcard|wire|with|within|wor|xnor|xor)\b/,important:/\b(?:always_latch|always_comb|always_ff|always)\b ?@?/,number:/\B##?\d+|(?:\b\d+)?'[odbh] ?[\da-fzx_?]+|\b\d*[._]?\d+(?:e[-+]?\d+)?/i,operator:/[-+{}^~%*\/?=!<>&|]+/,punctuation:/[[\];(),.:]/}; +Prism.languages.vhdl={comment:/--.+/,"vhdl-vectors":{pattern:/\b[oxb]"[\da-f_]+"|"[01uxzwlh-]+"/i,alias:"number"},"quoted-function":{pattern:/"\S+?"(?=\()/,alias:"function"},string:/"(?:[^\\"\r\n]|\\(?:\r\n|[\s\S]))*"/,constant:/\b(?:use|library)\b/i,keyword:/\b(?:'active|'ascending|'base|'delayed|'driving|'driving_value|'event|'high|'image|'instance_name|'last_active|'last_event|'last_value|'left|'leftof|'length|'low|'path_name|'pos|'pred|'quiet|'range|'reverse_range|'right|'rightof|'simple_name|'stable|'succ|'transaction|'val|'value|access|after|alias|all|architecture|array|assert|attribute|begin|block|body|buffer|bus|case|component|configuration|constant|disconnect|downto|else|elsif|end|entity|exit|file|for|function|generate|generic|group|guarded|if|impure|in|inertial|inout|is|label|library|linkage|literal|loop|map|new|next|null|of|on|open|others|out|package|port|postponed|procedure|process|pure|range|record|register|reject|report|return|select|severity|shared|signal|subtype|then|to|transport|type|unaffected|units|until|use|variable|wait|when|while|with)\b/i,boolean:/\b(?:true|false)\b/i,function:/\w+(?=\()/,number:/'[01uxzwlh-]'|\b(?:\d+#[\da-f_.]+#|\d[\d_.]*)(?:e[-+]?\d+)?/i,operator:/[<>]=?|:=|[-+*/&=]|\b(?:abs|not|mod|rem|sll|srl|sla|sra|rol|ror|and|or|nand|xnor|xor|nor)\b/i,punctuation:/[{}[\];(),.:]/}; +Prism.languages.vim={string:/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\r\n]|'')*'/,comment:/".*/,function:/\w+(?=\()/,keyword:/\b(?:ab|abbreviate|abc|abclear|abo|aboveleft|al|all|arga|argadd|argd|argdelete|argdo|arge|argedit|argg|argglobal|argl|arglocal|ar|args|argu|argument|as|ascii|bad|badd|ba|ball|bd|bdelete|be|bel|belowright|bf|bfirst|bl|blast|bm|bmodified|bn|bnext|bN|bNext|bo|botright|bp|bprevious|brea|break|breaka|breakadd|breakd|breakdel|breakl|breaklist|br|brewind|bro|browse|bufdo|b|buffer|buffers|bun|bunload|bw|bwipeout|ca|cabbrev|cabc|cabclear|caddb|caddbuffer|cad|caddexpr|caddf|caddfile|cal|call|cat|catch|cb|cbuffer|cc|ccl|cclose|cd|ce|center|cex|cexpr|cf|cfile|cfir|cfirst|cgetb|cgetbuffer|cgete|cgetexpr|cg|cgetfile|c|change|changes|chd|chdir|che|checkpath|checkt|checktime|cla|clast|cl|clist|clo|close|cmapc|cmapclear|cnew|cnewer|cn|cnext|cN|cNext|cnf|cnfile|cNfcNfile|cnorea|cnoreabbrev|col|colder|colo|colorscheme|comc|comclear|comp|compiler|conf|confirm|con|continue|cope|copen|co|copy|cpf|cpfile|cp|cprevious|cq|cquit|cr|crewind|cuna|cunabbrev|cu|cunmap|cw|cwindow|debugg|debuggreedy|delc|delcommand|d|delete|delf|delfunction|delm|delmarks|diffg|diffget|diffoff|diffpatch|diffpu|diffput|diffsplit|diffthis|diffu|diffupdate|dig|digraphs|di|display|dj|djump|dl|dlist|dr|drop|ds|dsearch|dsp|dsplit|earlier|echoe|echoerr|echom|echomsg|echon|e|edit|el|else|elsei|elseif|em|emenu|endfo|endfor|endf|endfunction|endfun|en|endif|endt|endtry|endw|endwhile|ene|enew|ex|exi|exit|exu|exusage|f|file|files|filetype|fina|finally|fin|find|fini|finish|fir|first|fix|fixdel|fo|fold|foldc|foldclose|folddoc|folddoclosed|foldd|folddoopen|foldo|foldopen|for|fu|fun|function|go|goto|gr|grep|grepa|grepadd|ha|hardcopy|h|help|helpf|helpfind|helpg|helpgrep|helpt|helptags|hid|hide|his|history|ia|iabbrev|iabc|iabclear|if|ij|ijump|il|ilist|imapc|imapclear|in|inorea|inoreabbrev|isearch|isp|isplit|iuna|iunabbrev|iu|iunmap|j|join|ju|jumps|k|keepalt|keepj|keepjumps|kee|keepmarks|laddb|laddbuffer|lad|laddexpr|laddf|laddfile|lan|language|la|last|later|lb|lbuffer|lc|lcd|lch|lchdir|lcl|lclose|let|left|lefta|leftabove|lex|lexpr|lf|lfile|lfir|lfirst|lgetb|lgetbuffer|lgete|lgetexpr|lg|lgetfile|lgr|lgrep|lgrepa|lgrepadd|lh|lhelpgrep|l|list|ll|lla|llast|lli|llist|lmak|lmake|lm|lmap|lmapc|lmapclear|lnew|lnewer|lne|lnext|lN|lNext|lnf|lnfile|lNf|lNfile|ln|lnoremap|lo|loadview|loc|lockmarks|lockv|lockvar|lol|lolder|lop|lopen|lpf|lpfile|lp|lprevious|lr|lrewind|ls|lt|ltag|lu|lunmap|lv|lvimgrep|lvimgrepa|lvimgrepadd|lw|lwindow|mak|make|ma|mark|marks|mat|match|menut|menutranslate|mk|mkexrc|mks|mksession|mksp|mkspell|mkvie|mkview|mkv|mkvimrc|mod|mode|m|move|mzf|mzfile|mz|mzscheme|nbkey|new|n|next|N|Next|nmapc|nmapclear|noh|nohlsearch|norea|noreabbrev|nu|number|nun|nunmap|omapc|omapclear|on|only|o|open|opt|options|ou|ounmap|pc|pclose|ped|pedit|pe|perl|perld|perldo|po|pop|popu|popup|pp|ppop|pre|preserve|prev|previous|p|print|P|Print|profd|profdel|prof|profile|promptf|promptfind|promptr|promptrepl|ps|psearch|pta|ptag|ptf|ptfirst|ptj|ptjump|ptl|ptlast|ptn|ptnext|ptN|ptNext|ptp|ptprevious|ptr|ptrewind|pts|ptselect|pu|put|pw|pwd|pyf|pyfile|py|python|qa|qall|q|quit|quita|quitall|r|read|rec|recover|redi|redir|red|redo|redr|redraw|redraws|redrawstatus|reg|registers|res|resize|ret|retab|retu|return|rew|rewind|ri|right|rightb|rightbelow|rub|ruby|rubyd|rubydo|rubyf|rubyfile|ru|runtime|rv|rviminfo|sal|sall|san|sandbox|sa|sargument|sav|saveas|sba|sball|sbf|sbfirst|sbl|sblast|sbm|sbmodified|sbn|sbnext|sbN|sbNext|sbp|sbprevious|sbr|sbrewind|sb|sbuffer|scripte|scriptencoding|scrip|scriptnames|se|set|setf|setfiletype|setg|setglobal|setl|setlocal|sf|sfind|sfir|sfirst|sh|shell|sign|sil|silent|sim|simalt|sla|slast|sl|sleep|sm|smagic|sm|smap|smapc|smapclear|sme|smenu|sn|snext|sN|sNext|sni|sniff|sno|snomagic|snor|snoremap|snoreme|snoremenu|sor|sort|so|source|spelld|spelldump|spe|spellgood|spelli|spellinfo|spellr|spellrepall|spellu|spellundo|spellw|spellwrong|sp|split|spr|sprevious|sre|srewind|sta|stag|startg|startgreplace|star|startinsert|startr|startreplace|stj|stjump|st|stop|stopi|stopinsert|sts|stselect|sun|sunhide|sunm|sunmap|sus|suspend|sv|sview|syncbind|t|tab|tabc|tabclose|tabd|tabdo|tabe|tabedit|tabf|tabfind|tabfir|tabfirst|tabl|tablast|tabm|tabmove|tabnew|tabn|tabnext|tabN|tabNext|tabo|tabonly|tabp|tabprevious|tabr|tabrewind|tabs|ta|tag|tags|tc|tcl|tcld|tcldo|tclf|tclfile|te|tearoff|tf|tfirst|th|throw|tj|tjump|tl|tlast|tm|tm|tmenu|tn|tnext|tN|tNext|to|topleft|tp|tprevious|tr|trewind|try|ts|tselect|tu|tu|tunmenu|una|unabbreviate|u|undo|undoj|undojoin|undol|undolist|unh|unhide|unlet|unlo|unlockvar|unm|unmap|up|update|verb|verbose|ve|version|vert|vertical|vie|view|vim|vimgrep|vimgrepa|vimgrepadd|vi|visual|viu|viusage|vmapc|vmapclear|vne|vnew|vs|vsplit|vu|vunmap|wa|wall|wh|while|winc|wincmd|windo|winp|winpos|win|winsize|wn|wnext|wN|wNext|wp|wprevious|wq|wqa|wqall|w|write|ws|wsverb|wv|wviminfo|X|xa|xall|x|xit|xm|xmap|xmapc|xmapclear|xme|xmenu|XMLent|XMLns|xn|xnoremap|xnoreme|xnoremenu|xu|xunmap|y|yank)\b/,builtin:/\b(?:autocmd|acd|ai|akm|aleph|allowrevins|altkeymap|ambiwidth|ambw|anti|antialias|arab|arabic|arabicshape|ari|arshape|autochdir|autoindent|autoread|autowrite|autowriteall|aw|awa|background|backspace|backup|backupcopy|backupdir|backupext|backupskip|balloondelay|ballooneval|balloonexpr|bdir|bdlay|beval|bex|bexpr|bg|bh|bin|binary|biosk|bioskey|bk|bkc|bomb|breakat|brk|browsedir|bs|bsdir|bsk|bt|bufhidden|buflisted|buftype|casemap|ccv|cdpath|cedit|cfu|ch|charconvert|ci|cin|cindent|cink|cinkeys|cino|cinoptions|cinw|cinwords|clipboard|cmdheight|cmdwinheight|cmp|cms|columns|com|comments|commentstring|compatible|complete|completefunc|completeopt|consk|conskey|copyindent|cot|cpo|cpoptions|cpt|cscopepathcomp|cscopeprg|cscopequickfix|cscopetag|cscopetagorder|cscopeverbose|cspc|csprg|csqf|cst|csto|csverb|cuc|cul|cursorcolumn|cursorline|cwh|debug|deco|def|define|delcombine|dex|dg|dict|dictionary|diff|diffexpr|diffopt|digraph|dip|dir|directory|dy|ea|ead|eadirection|eb|ed|edcompatible|ef|efm|ei|ek|enc|encoding|endofline|eol|ep|equalalways|equalprg|errorbells|errorfile|errorformat|esckeys|et|eventignore|expandtab|exrc|fcl|fcs|fdc|fde|fdi|fdl|fdls|fdm|fdn|fdo|fdt|fen|fenc|fencs|fex|ff|ffs|fileencoding|fileencodings|fileformat|fileformats|fillchars|fk|fkmap|flp|fml|fmr|foldcolumn|foldenable|foldexpr|foldignore|foldlevel|foldlevelstart|foldmarker|foldmethod|foldminlines|foldnestmax|foldtext|formatexpr|formatlistpat|formatoptions|formatprg|fp|fs|fsync|ft|gcr|gd|gdefault|gfm|gfn|gfs|gfw|ghr|gp|grepformat|grepprg|gtl|gtt|guicursor|guifont|guifontset|guifontwide|guiheadroom|guioptions|guipty|guitablabel|guitabtooltip|helpfile|helpheight|helplang|hf|hh|hi|hidden|highlight|hk|hkmap|hkmapp|hkp|hl|hlg|hls|hlsearch|ic|icon|iconstring|ignorecase|im|imactivatekey|imak|imc|imcmdline|imd|imdisable|imi|iminsert|ims|imsearch|inc|include|includeexpr|incsearch|inde|indentexpr|indentkeys|indk|inex|inf|infercase|insertmode|isf|isfname|isi|isident|isk|iskeyword|isprint|joinspaces|js|key|keymap|keymodel|keywordprg|km|kmp|kp|langmap|langmenu|laststatus|lazyredraw|lbr|lcs|linebreak|lines|linespace|lisp|lispwords|listchars|loadplugins|lpl|lsp|lz|macatsui|magic|makeef|makeprg|matchpairs|matchtime|maxcombine|maxfuncdepth|maxmapdepth|maxmem|maxmempattern|maxmemtot|mco|mef|menuitems|mfd|mh|mis|mkspellmem|ml|mls|mm|mmd|mmp|mmt|modeline|modelines|modifiable|modified|more|mouse|mousef|mousefocus|mousehide|mousem|mousemodel|mouses|mouseshape|mouset|mousetime|mp|mps|msm|mzq|mzquantum|nf|nrformats|numberwidth|nuw|odev|oft|ofu|omnifunc|opendevice|operatorfunc|opfunc|osfiletype|pa|para|paragraphs|paste|pastetoggle|patchexpr|patchmode|path|pdev|penc|pex|pexpr|pfn|ph|pheader|pi|pm|pmbcs|pmbfn|popt|preserveindent|previewheight|previewwindow|printdevice|printencoding|printexpr|printfont|printheader|printmbcharset|printmbfont|printoptions|prompt|pt|pumheight|pvh|pvw|qe|quoteescape|readonly|remap|report|restorescreen|revins|rightleft|rightleftcmd|rl|rlc|ro|rs|rtp|ruf|ruler|rulerformat|runtimepath|sbo|sc|scb|scr|scroll|scrollbind|scrolljump|scrolloff|scrollopt|scs|sect|sections|secure|sel|selection|selectmode|sessionoptions|sft|shcf|shellcmdflag|shellpipe|shellquote|shellredir|shellslash|shelltemp|shelltype|shellxquote|shiftround|shiftwidth|shm|shortmess|shortname|showbreak|showcmd|showfulltag|showmatch|showmode|showtabline|shq|si|sidescroll|sidescrolloff|siso|sj|slm|smartcase|smartindent|smarttab|smc|smd|softtabstop|sol|spc|spell|spellcapcheck|spellfile|spelllang|spellsuggest|spf|spl|splitbelow|splitright|sps|sr|srr|ss|ssl|ssop|stal|startofline|statusline|stl|stmp|su|sua|suffixes|suffixesadd|sw|swapfile|swapsync|swb|swf|switchbuf|sws|sxq|syn|synmaxcol|syntax|tabline|tabpagemax|tabstop|tagbsearch|taglength|tagrelative|tagstack|tal|tb|tbi|tbidi|tbis|tbs|tenc|term|termbidi|termencoding|terse|textauto|textmode|textwidth|tgst|thesaurus|tildeop|timeout|timeoutlen|title|titlelen|titleold|titlestring|toolbar|toolbariconsize|top|tpm|tsl|tsr|ttimeout|ttimeoutlen|ttm|tty|ttybuiltin|ttyfast|ttym|ttymouse|ttyscroll|ttytype|tw|tx|uc|ul|undolevels|updatecount|updatetime|ut|vb|vbs|vdir|verbosefile|vfile|viewdir|viewoptions|viminfo|virtualedit|visualbell|vop|wak|warn|wb|wc|wcm|wd|weirdinvert|wfh|wfw|whichwrap|wi|wig|wildchar|wildcharm|wildignore|wildmenu|wildmode|wildoptions|wim|winaltkeys|window|winfixheight|winfixwidth|winheight|winminheight|winminwidth|winwidth|wiv|wiw|wm|wmh|wmnu|wmw|wop|wrap|wrapmargin|wrapscan|writeany|writebackup|writedelay|ww|noacd|noai|noakm|noallowrevins|noaltkeymap|noanti|noantialias|noar|noarab|noarabic|noarabicshape|noari|noarshape|noautochdir|noautoindent|noautoread|noautowrite|noautowriteall|noaw|noawa|nobackup|noballooneval|nobeval|nobin|nobinary|nobiosk|nobioskey|nobk|nobl|nobomb|nobuflisted|nocf|noci|nocin|nocindent|nocompatible|noconfirm|noconsk|noconskey|nocopyindent|nocp|nocscopetag|nocscopeverbose|nocst|nocsverb|nocuc|nocul|nocursorcolumn|nocursorline|nodeco|nodelcombine|nodg|nodiff|nodigraph|nodisable|noea|noeb|noed|noedcompatible|noek|noendofline|noeol|noequalalways|noerrorbells|noesckeys|noet|noex|noexpandtab|noexrc|nofen|nofk|nofkmap|nofoldenable|nogd|nogdefault|noguipty|nohid|nohidden|nohk|nohkmap|nohkmapp|nohkp|nohls|noic|noicon|noignorecase|noim|noimc|noimcmdline|noimd|noincsearch|noinf|noinfercase|noinsertmode|nois|nojoinspaces|nojs|nolazyredraw|nolbr|nolinebreak|nolisp|nolist|noloadplugins|nolpl|nolz|noma|nomacatsui|nomagic|nomh|noml|nomod|nomodeline|nomodifiable|nomodified|nomore|nomousef|nomousefocus|nomousehide|nonu|nonumber|noodev|noopendevice|nopaste|nopi|nopreserveindent|nopreviewwindow|noprompt|nopvw|noreadonly|noremap|norestorescreen|norevins|nori|norightleft|norightleftcmd|norl|norlc|noro|nors|noru|noruler|nosb|nosc|noscb|noscrollbind|noscs|nosecure|nosft|noshellslash|noshelltemp|noshiftround|noshortname|noshowcmd|noshowfulltag|noshowmatch|noshowmode|nosi|nosm|nosmartcase|nosmartindent|nosmarttab|nosmd|nosn|nosol|nospell|nosplitbelow|nosplitright|nospr|nosr|nossl|nosta|nostartofline|nostmp|noswapfile|noswf|nota|notagbsearch|notagrelative|notagstack|notbi|notbidi|notbs|notermbidi|noterse|notextauto|notextmode|notf|notgst|notildeop|notimeout|notitle|noto|notop|notr|nottimeout|nottybuiltin|nottyfast|notx|novb|novisualbell|nowa|nowarn|nowb|noweirdinvert|nowfh|nowfw|nowildmenu|nowinfixheight|nowinfixwidth|nowiv|nowmnu|nowrap|nowrapscan|nowrite|nowriteany|nowritebackup|nows|invacd|invai|invakm|invallowrevins|invaltkeymap|invanti|invantialias|invar|invarab|invarabic|invarabicshape|invari|invarshape|invautochdir|invautoindent|invautoread|invautowrite|invautowriteall|invaw|invawa|invbackup|invballooneval|invbeval|invbin|invbinary|invbiosk|invbioskey|invbk|invbl|invbomb|invbuflisted|invcf|invci|invcin|invcindent|invcompatible|invconfirm|invconsk|invconskey|invcopyindent|invcp|invcscopetag|invcscopeverbose|invcst|invcsverb|invcuc|invcul|invcursorcolumn|invcursorline|invdeco|invdelcombine|invdg|invdiff|invdigraph|invdisable|invea|inveb|inved|invedcompatible|invek|invendofline|inveol|invequalalways|inverrorbells|invesckeys|invet|invex|invexpandtab|invexrc|invfen|invfk|invfkmap|invfoldenable|invgd|invgdefault|invguipty|invhid|invhidden|invhk|invhkmap|invhkmapp|invhkp|invhls|invhlsearch|invic|invicon|invignorecase|invim|invimc|invimcmdline|invimd|invincsearch|invinf|invinfercase|invinsertmode|invis|invjoinspaces|invjs|invlazyredraw|invlbr|invlinebreak|invlisp|invlist|invloadplugins|invlpl|invlz|invma|invmacatsui|invmagic|invmh|invml|invmod|invmodeline|invmodifiable|invmodified|invmore|invmousef|invmousefocus|invmousehide|invnu|invnumber|invodev|invopendevice|invpaste|invpi|invpreserveindent|invpreviewwindow|invprompt|invpvw|invreadonly|invremap|invrestorescreen|invrevins|invri|invrightleft|invrightleftcmd|invrl|invrlc|invro|invrs|invru|invruler|invsb|invsc|invscb|invscrollbind|invscs|invsecure|invsft|invshellslash|invshelltemp|invshiftround|invshortname|invshowcmd|invshowfulltag|invshowmatch|invshowmode|invsi|invsm|invsmartcase|invsmartindent|invsmarttab|invsmd|invsn|invsol|invspell|invsplitbelow|invsplitright|invspr|invsr|invssl|invsta|invstartofline|invstmp|invswapfile|invswf|invta|invtagbsearch|invtagrelative|invtagstack|invtbi|invtbidi|invtbs|invtermbidi|invterse|invtextauto|invtextmode|invtf|invtgst|invtildeop|invtimeout|invtitle|invto|invtop|invtr|invttimeout|invttybuiltin|invttyfast|invtx|invvb|invvisualbell|invwa|invwarn|invwb|invweirdinvert|invwfh|invwfw|invwildmenu|invwinfixheight|invwinfixwidth|invwiv|invwmnu|invwrap|invwrapscan|invwrite|invwriteany|invwritebackup|invws|t_AB|t_AF|t_al|t_AL|t_bc|t_cd|t_ce|t_Ce|t_cl|t_cm|t_Co|t_cs|t_Cs|t_CS|t_CV|t_da|t_db|t_dl|t_DL|t_EI|t_F1|t_F2|t_F3|t_F4|t_F5|t_F6|t_F7|t_F8|t_F9|t_fs|t_IE|t_IS|t_k1|t_K1|t_k2|t_k3|t_K3|t_k4|t_K4|t_k5|t_K5|t_k6|t_K6|t_k7|t_K7|t_k8|t_K8|t_k9|t_K9|t_KA|t_kb|t_kB|t_KB|t_KC|t_kd|t_kD|t_KD|t_ke|t_KE|t_KF|t_KG|t_kh|t_KH|t_kI|t_KI|t_KJ|t_KK|t_kl|t_KL|t_kN|t_kP|t_kr|t_ks|t_ku|t_le|t_mb|t_md|t_me|t_mr|t_ms|t_nd|t_op|t_RI|t_RV|t_Sb|t_se|t_Sf|t_SI|t_so|t_sr|t_te|t_ti|t_ts|t_ue|t_us|t_ut|t_vb|t_ve|t_vi|t_vs|t_WP|t_WS|t_xs|t_ZH|t_ZR)\b/,number:/\b(?:0x[\da-f]+|\d+(?:\.\d+)?)\b/i,operator:/\|\||&&|[-+.]=?|[=!](?:[=~][#?]?)?|[<>]=?[#?]?|[*\/%?]|\b(?:is(?:not)?)\b/,punctuation:/[{}[\](),;:]/}; +Prism.languages["visual-basic"]={comment:{pattern:/(?:['‘’]|REM\b)(?:[^\r\n_]|_(?:\r\n?|\n)?)*/i,inside:{keyword:/^REM/i}},directive:{pattern:/#(?:Const|Else|ElseIf|End|ExternalChecksum|ExternalSource|If|Region)(?:[^\S\r\n]_[^\S\r\n]*(?:\r\n?|\n)|.)+/i,alias:"comment",greedy:!0},string:{pattern:/\$?["“”](?:["“”]{2}|[^"“”])*["“”]C?/i,greedy:!0},date:{pattern:/#[^\S\r\n]*(?:\d+([/-])\d+\1\d+(?:[^\S\r\n]+(?:\d+[^\S\r\n]*(?:AM|PM)|\d+:\d+(?::\d+)?(?:[^\S\r\n]*(?:AM|PM))?))?|\d+[^\S\r\n]*(?:AM|PM)|\d+:\d+(?::\d+)?(?:[^\S\r\n]*(?:AM|PM))?)[^\S\r\n]*#/i,alias:"builtin"},number:/(?:(?:\b\d+(?:\.\d+)?|\.\d+)(?:E[+-]?\d+)?|&[HO][\dA-F]+)(?:U?[ILS]|[FRD])?/i,boolean:/\b(?:True|False|Nothing)\b/i,keyword:/\b(?:AddHandler|AddressOf|Alias|And(?:Also)?|As|Boolean|ByRef|Byte|ByVal|Call|Case|Catch|C(?:Bool|Byte|Char|Date|Dbl|Dec|Int|Lng|Obj|SByte|Short|Sng|Str|Type|UInt|ULng|UShort)|Char|Class|Const|Continue|Currency|Date|Decimal|Declare|Default|Delegate|Dim|DirectCast|Do|Double|Each|Else(?:If)?|End(?:If)?|Enum|Erase|Error|Event|Exit|Finally|For|Friend|Function|Get(?:Type|XMLNamespace)?|Global|GoSub|GoTo|Handles|If|Implements|Imports|In|Inherits|Integer|Interface|Is|IsNot|Let|Lib|Like|Long|Loop|Me|Mod|Module|Must(?:Inherit|Override)|My(?:Base|Class)|Namespace|Narrowing|New|Next|Not(?:Inheritable|Overridable)?|Object|Of|On|Operator|Option(?:al)?|Or(?:Else)?|Out|Overloads|Overridable|Overrides|ParamArray|Partial|Private|Property|Protected|Public|RaiseEvent|ReadOnly|ReDim|RemoveHandler|Resume|Return|SByte|Select|Set|Shadows|Shared|short|Single|Static|Step|Stop|String|Structure|Sub|SyncLock|Then|Throw|To|Try|TryCast|Type|TypeOf|U(?:Integer|Long|Short)|Using|Variant|Wend|When|While|Widening|With(?:Events)?|WriteOnly|Until|Xor)\b/i,operator:[/[+\-*/\\^<=>&#@$%!]/,{pattern:/([^\S\r\n])_(?=[^\S\r\n]*[\r\n])/,lookbehind:!0}],punctuation:/[{}().,:?]/},Prism.languages.vb=Prism.languages["visual-basic"],Prism.languages.vba=Prism.languages["visual-basic"]; +Prism.languages.warpscript={comment:/#.*|\/\/.*|\/\*[\s\S]*?\*\//,string:{pattern:/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'|<'(?:[^\\']|'(?!>)|\\.)*'>/,greedy:!0},variable:/\$\S+/,macro:{pattern:/@\S+/,alias:"property"},keyword:/\b(?:BREAK|CHECKMACRO|CONTINUE|CUDF|DEFINED|DEFINEDMACRO|EVAL|FAIL|FOR|FOREACH|FORSTEP|IFT|IFTE|MSGFAIL|NRETURN|RETHROW|RETURN|SWITCH|TRY|UDF|UNTIL|WHILE)\b/,number:/[+-]?\b(?:NaN|Infinity|\d+(?:\.\d*)?(?:[Ee][+-]?\d+)?|0x[\da-fA-F]+|0b[01]+)\b/,boolean:/\b(?:false|true|F|T)\b/,punctuation:/<%|%>|[{}[\]()]/,operator:/==|&&?|\|\|?|\*\*?|>>>?|<<|==|[<>!~]=?|[-/%^]|\+!?|\b(?:AND|NOT|OR)\b/}; +Prism.languages.wasm={comment:[/\(;[\s\S]*?;\)/,{pattern:/;;.*/,greedy:!0}],string:{pattern:/"(?:\\[\s\S]|[^"\\])*"/,greedy:!0},keyword:[{pattern:/\b(?:align|offset)=/,inside:{operator:/=/}},{pattern:/\b(?:(?:f32|f64|i32|i64)(?:\.(?:abs|add|and|ceil|clz|const|convert_[su]\/i(?:32|64)|copysign|ctz|demote\/f64|div(?:_[su])?|eqz?|extend_[su]\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|nearest|neg?|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|store(?:8|16|32)?|sqrt|sub|trunc(?:_[su]\/f(?:32|64))?|wrap\/i64|xor))?|memory\.(?:grow|size))\b/,inside:{punctuation:/\./}},/\b(?:anyfunc|block|br(?:_if|_table)?|call(?:_indirect)?|data|drop|elem|else|end|export|func|get_(?:global|local)|global|if|import|local|loop|memory|module|mut|nop|offset|param|result|return|select|set_(?:global|local)|start|table|tee_local|then|type|unreachable)\b/],variable:/\$[\w!#$%&'*+\-./:<=>?@\\^_`|~]+/i,number:/[+-]?\b(?:\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?|0x[\da-fA-F](?:_?[\da-fA-F])*(?:\.[\da-fA-F](?:_?[\da-fA-D])*)?(?:[pP][+-]?\d(?:_?\d)*)?)\b|\binf\b|\bnan(?::0x[\da-fA-F](?:_?[\da-fA-D])*)?\b/,punctuation:/[()]/}; +Prism.languages.wiki=Prism.languages.extend("markup",{"block-comment":{pattern:/(^|[^\\])\/\*[\s\S]*?\*\//,lookbehind:!0,alias:"comment"},heading:{pattern:/^(=+).+?\1/m,inside:{punctuation:/^=+|=+$/,important:/.+/}},emphasis:{pattern:/('{2,5}).+?\1/,inside:{"bold-italic":{pattern:/(''''').+?(?=\1)/,lookbehind:!0,alias:["bold","italic"]},bold:{pattern:/(''')[^'](?:.*?[^'])?(?=\1)/,lookbehind:!0},italic:{pattern:/('')[^'](?:.*?[^'])?(?=\1)/,lookbehind:!0},punctuation:/^''+|''+$/}},hr:{pattern:/^-{4,}/m,alias:"punctuation"},url:[/ISBN +(?:97[89][ -]?)?(?:\d[ -]?){9}[\dx]\b|(?:RFC|PMID) +\d+/i,/\[\[.+?\]\]|\[.+?\]/],variable:[/__[A-Z]+__/,/\{{3}.+?\}{3}/,/\{\{.+?\}\}/],symbol:[/^#redirect/im,/~{3,5}/],"table-tag":{pattern:/((?:^|[|!])[|!])[^|\r\n]+\|(?!\|)/m,lookbehind:!0,inside:{"table-bar":{pattern:/\|$/,alias:"punctuation"},rest:Prism.languages.markup.tag.inside}},punctuation:/^(?:\{\||\|\}|\|-|[*#:;!|])|\|\||!!/m}),Prism.languages.insertBefore("wiki","tag",{nowiki:{pattern:/<(nowiki|pre|source)\b[\s\S]*?>[\s\S]*?<\/\1>/i,inside:{tag:{pattern:/<(?:nowiki|pre|source)\b[\s\S]*?>|<\/(?:nowiki|pre|source)>/i,inside:Prism.languages.markup.tag.inside}}}}); +!function(n){n.languages.xeora=n.languages.extend("markup",{constant:{pattern:/\$(?:DomainContents|PageRenderDuration)\$/,inside:{punctuation:{pattern:/\$/}}},variable:{pattern:/\$@?(?:#+|[-+*~=^])?[\w.]+\$/,inside:{punctuation:{pattern:/[$.]/},operator:{pattern:/#+|[-+*~=^@]/}}},"function-inline":{pattern:/\$F:[-\w.]+\?[-\w.]+(?:,(?:\|?(?:[-#.^+*~]*(?:[\w+][^$]*)|=(?:[\S+][^$]*)|@[-#]*(?:\w+.)[\w+.]+)?)*)?\$/,inside:{variable:{pattern:/(?:[,|])@?(?:#+|[-+*~=^])?[\w.]+/,inside:{punctuation:{pattern:/[,.|]/},operator:{pattern:/#+|[-+*~=^@]/}}},punctuation:{pattern:/\$\w:|[$:?.,|]/}},alias:"function"},"function-block":{pattern:/\$XF:{[-\w.]+\?[-\w.]+(?:,(?:\|?(?:[-#.^+*~]*(?:[\w+][^$]*)|=(?:[\S+][^$]*)|@[-#]*(?:\w+.)[\w+.]+)?)*)?}:XF\$/,inside:{punctuation:{pattern:/[$:{}?.,|]/}},alias:"function"},"directive-inline":{pattern:/\$\w(?:#\d+\+?)?(?:\[[-\w.]+])?:[-\/\w.]+\$/,inside:{punctuation:{pattern:/\$(?:\w:|C(?:\[|#\d))?|[:{[\]]/,inside:{tag:{pattern:/#\d/}}}},alias:"function"},"directive-block-open":{pattern:/\$\w+:{|\$\w(?:#\d+\+?)?(?:\[[-\w.]+])?:[-\w.]+:{(?:![A-Z]+)?/,inside:{punctuation:{pattern:/\$(?:\w:|C(?:\[|#\d))?|[:{[\]]/,inside:{tag:{pattern:/#\d/}}},attribute:{pattern:/![A-Z]+$/,inside:{punctuation:{pattern:/!/}},alias:"keyword"}},alias:"function"},"directive-block-separator":{pattern:/}:[-\w.]+:{/,inside:{punctuation:{pattern:/[:{}]/}},alias:"function"},"directive-block-close":{pattern:/}:[-\w.]+\$/,inside:{punctuation:{pattern:/[:{}$]/}},alias:"function"}}),n.languages.insertBefore("inside","punctuation",{variable:n.languages.xeora["function-inline"].inside.variable},n.languages.xeora["function-block"]),n.languages.xeoracube=n.languages.xeora}(Prism); +!function(n){function a(a,e){n.languages[a]&&n.languages.insertBefore(a,"comment",{"doc-comment":e})}var e=n.languages.markup.tag,t={pattern:/\/\/\/.*/,greedy:!0,alias:"comment",inside:{tag:e}},g={pattern:/'''.*/,greedy:!0,alias:"comment",inside:{tag:e}};a("csharp",t),a("fsharp",t),a("vbnet",g)}(Prism); +Prism.languages.xojo={comment:{pattern:/(?:'|\/\/|Rem\b).+/i,inside:{keyword:/^Rem/i}},string:{pattern:/"(?:""|[^"])*"/,greedy:!0},number:[/(?:\b\d+\.?\d*|\B\.\d+)(?:E[+-]?\d+)?/i,/&[bchou][a-z\d]+/i],symbol:/#(?:If|Else|ElseIf|Endif|Pragma)\b/i,keyword:/\b(?:AddHandler|App|Array|As(?:signs)?|By(?:Ref|Val)|Break|Call|Case|Catch|Const|Continue|CurrentMethodName|Declare|Dim|Do(?:wnTo)?|Each|Else(?:If)?|End|Exit|Extends|False|Finally|For|Global|If|In|Lib|Loop|Me|Next|Nil|Optional|ParamArray|Raise(?:Event)?|ReDim|Rem|RemoveHandler|Return|Select|Self|Soft|Static|Step|Super|Then|To|True|Try|Ubound|Until|Using|Wend|While)\b/i,operator:/<[=>]?|>=?|[+\-*\/\\^=]|\b(?:AddressOf|And|Ctype|IsA?|Mod|New|Not|Or|Xor|WeakAddressOf)\b/i,punctuation:/[.,;:()]/}; +!function(r){r.languages.xquery=r.languages.extend("markup",{"xquery-comment":{pattern:/\(:[\s\S]*?:\)/,greedy:!0,alias:"comment"},string:{pattern:/(["'])(?:\1\1|(?!\1)[\s\S])*\1/,greedy:!0},extension:{pattern:/\(#.+?#\)/,alias:"symbol"},variable:/\$[\w-:]+/,axis:{pattern:/(^|[^-])(?:ancestor(?:-or-self)?|attribute|child|descendant(?:-or-self)?|following(?:-sibling)?|parent|preceding(?:-sibling)?|self)(?=::)/,lookbehind:!0,alias:"operator"},"keyword-operator":{pattern:/(^|[^:-])\b(?:and|castable as|div|eq|except|ge|gt|idiv|instance of|intersect|is|le|lt|mod|ne|or|union)\b(?=$|[^:-])/,lookbehind:!0,alias:"operator"},keyword:{pattern:/(^|[^:-])\b(?:as|ascending|at|base-uri|boundary-space|case|cast as|collation|construction|copy-namespaces|declare|default|descending|else|empty (?:greatest|least)|encoding|every|external|for|function|if|import|in|inherit|lax|let|map|module|namespace|no-inherit|no-preserve|option|order(?: by|ed|ing)?|preserve|return|satisfies|schema|some|stable|strict|strip|then|to|treat as|typeswitch|unordered|validate|variable|version|where|xquery)\b(?=$|[^:-])/,lookbehind:!0},function:/[\w-]+(?::[\w-]+)*(?=\s*\()/,"xquery-element":{pattern:/(element\s+)[\w-]+(?::[\w-]+)*/,lookbehind:!0,alias:"tag"},"xquery-attribute":{pattern:/(attribute\s+)[\w-]+(?::[\w-]+)*/,lookbehind:!0,alias:"attr-name"},builtin:{pattern:/(^|[^:-])\b(?:attribute|comment|document|element|processing-instruction|text|xs:(?:anyAtomicType|anyType|anyURI|base64Binary|boolean|byte|date|dateTime|dayTimeDuration|decimal|double|duration|ENTITIES|ENTITY|float|gDay|gMonth|gMonthDay|gYear|gYearMonth|hexBinary|ID|IDREFS?|int|integer|language|long|Name|NCName|negativeInteger|NMTOKENS?|nonNegativeInteger|nonPositiveInteger|normalizedString|NOTATION|positiveInteger|QName|short|string|time|token|unsigned(?:Byte|Int|Long|Short)|untyped(?:Atomic)?|yearMonthDuration))\b(?=$|[^:-])/,lookbehind:!0},number:/\b\d+(?:\.\d+)?(?:E[+-]?\d+)?/,operator:[/[+*=?|@]|\.\.?|:=|!=|<[=<]?|>[=>]?/,{pattern:/(\s)-(?=\s)/,lookbehind:!0}],punctuation:/[[\](){},;:/]/}),r.languages.xquery.tag.pattern=/<\/?(?!\d)[^\s>\/=$<%]+(?:\s+[^\s>\/=]+(?:=(?:("|')(?:\\[\s\S]|{(?!{)(?:{(?:{[^{}]*}|[^{}])*}|[^{}])+}|(?!\1)[^\\])*\1|[^\s'">=]+))?)*\s*\/?>/i,r.languages.xquery.tag.inside["attr-value"].pattern=/=(?:("|')(?:\\[\s\S]|{(?!{)(?:{(?:{[^{}]*}|[^{}])*}|[^{}])+}|(?!\1)[^\\])*\1|[^\s'">=]+)/i,r.languages.xquery.tag.inside["attr-value"].inside.punctuation=/^="|"$/,r.languages.xquery.tag.inside["attr-value"].inside.expression={pattern:/{(?!{)(?:{(?:{[^{}]*}|[^{}])*}|[^{}])+}/,inside:r.languages.xquery,alias:"language-xquery"};var s=function(e){return"string"==typeof e?e:"string"==typeof e.content?e.content:e.content.map(s).join("")},l=function(e){for(var t=[],n=0;n"===a.content[a.content.length-1].content||t.push({tagName:s(a.content[0].content[1]),openedBraces:0}):!(0|(?:\\[[^[\\]]*\\]|\\*(?!\\*)|\\*\\*)(?:\\s*|\\s*const\\b|\\s*volatile\\b|\\s*allowzero\\b)*)".replace(//g,e(o))+"\\s*)*"+"(?:\\bpromise\\b|(?:\\berror\\.)?(?:\\.)*(?!\\s+))".replace(//g,e(a))+")+";n.languages.zig={comment:[{pattern:/\/{3}.*/,alias:"doc-comment"},/\/{2}.*/],string:[{pattern:/(^|[^\\@])c?"(?:[^"\\\r\n]|\\.)*"/,lookbehind:!0,greedy:!0},{pattern:/([\r\n])([ \t]+c?\\{2}).*(?:(?:\r\n?|\n)\2.*)*/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\])'(?:[^'\\\r\n]|\\(?:.|x[a-fA-F\d]{2}|u\{[a-fA-F\d]{1,6}\}))'/,lookbehind:!0,greedy:!0}],builtin:/\B@(?!\d)\w+(?=\s*\()/,label:{pattern:/(\b(?:break|continue)\s*:\s*)\w+\b|\b(?!\d)\w+\b(?=\s*:\s*(?:\{|while\b))/,lookbehind:!0},"class-name":[/\b(?!\d)\w+(?=\s*=\s*(?:(?:extern|packed)\s+)?(?:enum|struct|union)\s*[({])/,{pattern:RegExp("(:\\s*)(?=\\s*(?:\\s*)?[=;,)])|(?=\\s*(?:\\s*)?\\{)".replace(//g,e(s)).replace(//g,e(o))),lookbehind:!0,inside:null},{pattern:RegExp("(\\)\\s*)(?=\\s*(?:\\s*)?;)".replace(//g,e(s)).replace(//g,e(o))),lookbehind:!0,inside:null}],"builtin-types":{pattern:/\b(?:anyerror|bool|c_u?(?:short|int|long|longlong)|c_longdouble|c_void|comptime_(?:float|int)|[iu](?:8|16|32|64|128|size)|f(?:16|32|64|128)|noreturn|type|void)\b/,alias:"keyword"},keyword:r,function:/\b(?!\d)\w+(?=\s*\()/,number:/\b(?:0b[01]+|0o[0-7]+|0x[a-fA-F\d]+\.?[a-fA-F\d]*(?:[pP][+-]?[a-fA-F\d]+)?|\d+\.?\d*(?:[eE][+-]?\d+)?)\b/,boolean:/\b(?:false|true)\b/,operator:/\.[*?]|\.{2,3}|[-=]>|\*\*|\+\+|\|\||(?:<<|>>|[-+*]%|[-+*/%^&|<>!=])=?|[?~]/,punctuation:/[.:,;(){}[\]]/},n.languages.zig["class-name"].forEach(function(e){null===e.inside&&(e.inside=n.languages.zig)})}(Prism); +!function(){if("undefined"!=typeof self&&self.Prism&&self.document){var o="line-numbers",a=/\n(?!$)/g,e=Prism.plugins.lineNumbers={getLine:function(e,n){if("PRE"===e.tagName&&e.classList.contains(o)){var t=e.querySelector(".line-numbers-rows"),i=parseInt(e.getAttribute("data-start"),10)||1,r=i+(t.children.length-1);n");(i=document.createElement("span")).setAttribute("aria-hidden","true"),i.className="line-numbers-rows",i.innerHTML=l,t.hasAttribute("data-start")&&(t.style.counterReset="linenumber "+(parseInt(t.getAttribute("data-start"),10)-1)),e.element.appendChild(i),u([t]),Prism.hooks.run("line-numbers",e)}}}),Prism.hooks.add("line-numbers",function(e){e.plugins=e.plugins||{},e.plugins.lineNumbers=!0})}function u(e){if(0!=(e=e.filter(function(e){var n=t(e)["white-space"];return"pre-wrap"===n||"pre-line"===n})).length){var n=e.map(function(e){var n=e.querySelector("code"),t=e.querySelector(".line-numbers-rows");if(n&&t){var i=e.querySelector(".line-numbers-sizer"),r=n.textContent.split(a);i||((i=document.createElement("span")).className="line-numbers-sizer",n.appendChild(i)),i.innerHTML="0",i.style.display="block";var s=i.getBoundingClientRect().height;return i.innerHTML="",{element:e,lines:r,lineHeights:[],oneLinerHeight:s,sizer:i}}}).filter(Boolean);n.forEach(function(e){var i=e.sizer,n=e.lines,r=e.lineHeights,s=e.oneLinerHeight;r[n.length-1]=void 0,n.forEach(function(e,n){if(e&&1 +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the QtWebChannel module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +"use strict"; + +var QWebChannelMessageTypes = { + signal: 1, + propertyUpdate: 2, + init: 3, + idle: 4, + debug: 5, + invokeMethod: 6, + connectToSignal: 7, + disconnectFromSignal: 8, + setProperty: 9, + response: 10, +}; + +var QWebChannel = function(transport, initCallback) +{ + if (typeof transport !== "object" || typeof transport.send !== "function") { + console.error("The QWebChannel expects a transport object with a send function and onmessage callback property." + + " Given is: transport: " + typeof(transport) + ", transport.send: " + typeof(transport.send)); + return; + } + + var channel = this; + this.transport = transport; + + this.send = function(data) + { + if (typeof(data) !== "string") { + data = JSON.stringify(data); + } + channel.transport.send(data); + } + + this.transport.onmessage = function(message) + { + var data = message.data; + if (typeof data === "string") { + data = JSON.parse(data); + } + switch (data.type) { + case QWebChannelMessageTypes.signal: + channel.handleSignal(data); + break; + case QWebChannelMessageTypes.response: + channel.handleResponse(data); + break; + case QWebChannelMessageTypes.propertyUpdate: + channel.handlePropertyUpdate(data); + break; + default: + console.error("invalid message received:", message.data); + break; + } + } + + this.execCallbacks = {}; + this.execId = 0; + this.exec = function(data, callback) + { + if (!callback) { + // if no callback is given, send directly + channel.send(data); + return; + } + if (channel.execId === Number.MAX_VALUE) { + // wrap + channel.execId = Number.MIN_VALUE; + } + if (data.hasOwnProperty("id")) { + console.error("Cannot exec message with property id: " + JSON.stringify(data)); + return; + } + data.id = channel.execId++; + channel.execCallbacks[data.id] = callback; + channel.send(data); + }; + + this.objects = {}; + + this.handleSignal = function(message) + { + var object = channel.objects[message.object]; + if (object) { + object.signalEmitted(message.signal, message.args); + } else { + console.warn("Unhandled signal: " + message.object + "::" + message.signal); + } + } + + this.handleResponse = function(message) + { + if (!message.hasOwnProperty("id")) { + console.error("Invalid response message received: ", JSON.stringify(message)); + return; + } + channel.execCallbacks[message.id](message.data); + delete channel.execCallbacks[message.id]; + } + + this.handlePropertyUpdate = function(message) + { + for (var i in message.data) { + var data = message.data[i]; + var object = channel.objects[data.object]; + if (object) { + object.propertyUpdate(data.signals, data.properties); + } else { + console.warn("Unhandled property update: " + data.object + "::" + data.signal); + } + } + channel.exec({type: QWebChannelMessageTypes.idle}); + } + + this.debug = function(message) + { + channel.send({type: QWebChannelMessageTypes.debug, data: message}); + }; + + channel.exec({type: QWebChannelMessageTypes.init}, function(data) { + for (var objectName in data) { + var object = new QObject(objectName, data[objectName], channel); + } + // now unwrap properties, which might reference other registered objects + for (var objectName in channel.objects) { + channel.objects[objectName].unwrapProperties(); + } + if (initCallback) { + initCallback(channel); + } + channel.exec({type: QWebChannelMessageTypes.idle}); + }); +}; + +function QObject(name, data, webChannel) +{ + this.__id__ = name; + webChannel.objects[name] = this; + + // List of callbacks that get invoked upon signal emission + this.__objectSignals__ = {}; + + // Cache of all properties, updated when a notify signal is emitted + this.__propertyCache__ = {}; + + var object = this; + + // ---------------------------------------------------------------------- + + this.unwrapQObject = function(response) + { + if (response instanceof Array) { + // support list of objects + var ret = new Array(response.length); + for (var i = 0; i < response.length; ++i) { + ret[i] = object.unwrapQObject(response[i]); + } + return ret; + } + if (!response + || !response["__QObject*__"] + || response.id === undefined) { + return response; + } + + var objectId = response.id; + if (webChannel.objects[objectId]) + return webChannel.objects[objectId]; + + if (!response.data) { + console.error("Cannot unwrap unknown QObject " + objectId + " without data."); + return; + } + + var qObject = new QObject( objectId, response.data, webChannel ); + qObject.destroyed.connect(function() { + if (webChannel.objects[objectId] === qObject) { + delete webChannel.objects[objectId]; + // reset the now deleted QObject to an empty {} object + // just assigning {} though would not have the desired effect, but the + // below also ensures all external references will see the empty map + // NOTE: this detour is necessary to workaround QTBUG-40021 + var propertyNames = []; + for (var propertyName in qObject) { + propertyNames.push(propertyName); + } + for (var idx in propertyNames) { + delete qObject[propertyNames[idx]]; + } + } + }); + // here we are already initialized, and thus must directly unwrap the properties + qObject.unwrapProperties(); + return qObject; + } + + this.unwrapProperties = function() + { + for (var propertyIdx in object.__propertyCache__) { + object.__propertyCache__[propertyIdx] = object.unwrapQObject(object.__propertyCache__[propertyIdx]); + } + } + + function addSignal(signalData, isPropertyNotifySignal) + { + var signalName = signalData[0]; + var signalIndex = signalData[1]; + object[signalName] = { + connect: function(callback) { + if (typeof(callback) !== "function") { + console.error("Bad callback given to connect to signal " + signalName); + return; + } + + object.__objectSignals__[signalIndex] = object.__objectSignals__[signalIndex] || []; + object.__objectSignals__[signalIndex].push(callback); + + if (!isPropertyNotifySignal && signalName !== "destroyed") { + // only required for "pure" signals, handled separately for properties in propertyUpdate + // also note that we always get notified about the destroyed signal + webChannel.exec({ + type: QWebChannelMessageTypes.connectToSignal, + object: object.__id__, + signal: signalIndex + }); + } + }, + disconnect: function(callback) { + if (typeof(callback) !== "function") { + console.error("Bad callback given to disconnect from signal " + signalName); + return; + } + object.__objectSignals__[signalIndex] = object.__objectSignals__[signalIndex] || []; + var idx = object.__objectSignals__[signalIndex].indexOf(callback); + if (idx === -1) { + console.error("Cannot find connection of signal " + signalName + " to " + callback.name); + return; + } + object.__objectSignals__[signalIndex].splice(idx, 1); + if (!isPropertyNotifySignal && object.__objectSignals__[signalIndex].length === 0) { + // only required for "pure" signals, handled separately for properties in propertyUpdate + webChannel.exec({ + type: QWebChannelMessageTypes.disconnectFromSignal, + object: object.__id__, + signal: signalIndex + }); + } + } + }; + } + + /** + * Invokes all callbacks for the given signalname. Also works for property notify callbacks. + */ + function invokeSignalCallbacks(signalName, signalArgs) + { + var connections = object.__objectSignals__[signalName]; + if (connections) { + connections.forEach(function(callback) { + callback.apply(callback, signalArgs); + }); + } + } + + this.propertyUpdate = function(signals, propertyMap) + { + // update property cache + for (var propertyIndex in propertyMap) { + var propertyValue = propertyMap[propertyIndex]; + object.__propertyCache__[propertyIndex] = propertyValue; + } + + for (var signalName in signals) { + // Invoke all callbacks, as signalEmitted() does not. This ensures the + // property cache is updated before the callbacks are invoked. + invokeSignalCallbacks(signalName, signals[signalName]); + } + } + + this.signalEmitted = function(signalName, signalArgs) + { + invokeSignalCallbacks(signalName, this.unwrapQObject(signalArgs)); + } + + function addMethod(methodData) + { + var methodName = methodData[0]; + var methodIdx = methodData[1]; + object[methodName] = function() { + var args = []; + var callback; + for (var i = 0; i < arguments.length; ++i) { + var argument = arguments[i]; + if (typeof argument === "function") + callback = argument; + else if (argument instanceof QObject && webChannel.objects[argument.__id__] !== undefined) + args.push({ + "id": argument.__id__ + }); + else + args.push(argument); + } + + webChannel.exec({ + "type": QWebChannelMessageTypes.invokeMethod, + "object": object.__id__, + "method": methodIdx, + "args": args + }, function(response) { + if (response !== undefined) { + var result = object.unwrapQObject(response); + if (callback) { + (callback)(result); + } + } + }); + }; + } + + function bindGetterSetter(propertyInfo) + { + var propertyIndex = propertyInfo[0]; + var propertyName = propertyInfo[1]; + var notifySignalData = propertyInfo[2]; + // initialize property cache with current value + // NOTE: if this is an object, it is not directly unwrapped as it might + // reference other QObject that we do not know yet + object.__propertyCache__[propertyIndex] = propertyInfo[3]; + + if (notifySignalData) { + if (notifySignalData[0] === 1) { + // signal name is optimized away, reconstruct the actual name + notifySignalData[0] = propertyName + "Changed"; + } + addSignal(notifySignalData, true); + } + + Object.defineProperty(object, propertyName, { + configurable: true, + get: function () { + var propertyValue = object.__propertyCache__[propertyIndex]; + if (propertyValue === undefined) { + // This shouldn't happen + console.warn("Undefined value in property cache for property \"" + propertyName + "\" in object " + object.__id__); + } + + return propertyValue; + }, + set: function(value) { + if (value === undefined) { + console.warn("Property setter for " + propertyName + " called with undefined value!"); + return; + } + object.__propertyCache__[propertyIndex] = value; + var valueToSend = value; + if (valueToSend instanceof QObject && webChannel.objects[valueToSend.__id__] !== undefined) + valueToSend = { "id": valueToSend.__id__ }; + webChannel.exec({ + "type": QWebChannelMessageTypes.setProperty, + "object": object.__id__, + "property": propertyIndex, + "value": valueToSend + }); + } + }); + + } + + // ---------------------------------------------------------------------- + + data.methods.forEach(addMethod); + + data.properties.forEach(bindGetterSetter); + + data.signals.forEach(function(signal) { addSignal(signal, false); }); + + for (var name in data.enums) { + object[name] = data.enums[name]; + } +} + +//required for use with nodejs +if (typeof module === 'object') { + module.exports = { + QWebChannel: QWebChannel + }; +} diff --git a/src/data/extra/web/js/svg-to-image.js b/src/data/extra/web/js/svg-to-image.js new file mode 100644 index 00000000..bf36b19c --- /dev/null +++ b/src/data/extra/web/js/svg-to-image.js @@ -0,0 +1,77 @@ +class SvgToImage { + constructor() { + + } + + static loadImage(p_src, p_opt, p_callback) { + if (typeof p_opt === 'function') { + callback = p_opt; + p_opt = null; + } + + let el = document.createElement('img'); + let locked; + + el.onload = function onLoaded () { + if (locked) return; + locked = true; + + if (p_callback) p_callback(undefined, el); + }; + + el.onerror = function onError () { + if (locked) return; + locked = true; + + if (p_callback) p_callback(new Error('Unable to load "' + p_src + '"'), el); + }; + + if (p_opt && p_opt.crossOrigin) { + el.crossOrigin = p_opt.crossOrigin; + } + + el.src = p_src; + + return el; + } + + static svgToImage(p_svg, p_opt, p_callback) { + if (typeof p_opt === 'function') { + p_callback = p_opt; + p_opt = {}; + } + p_callback = p_callback || function() {}; + p_opt = p_opt || {}; + + let domUrl = this.getUrl(); + if (!Array.isArray(p_svg)) { + p_svg = [ p_svg ]; + } + + let blob = null; + try { + blob = new window.Blob(p_svg, { + type: 'image/svg+xml;charset=utf-8' + }); + } catch (e) { + console.error('failed to create blob', e); + } + + let url = domUrl.createObjectURL(blob); + this.loadImage(url, p_opt, function(err, img) { + domUrl.revokeObjectURL(url); + if (err) { + // try again for Safari 8.0, using simple encodeURIComponent + // this will fail with DOM content but at least it works with SVG. + let url2 = 'data:image/svg+xml,' + encodeURIComponent(p_svg.join('')); + return SvgToImage.loadImage(url2, p_opt, p_callback); + } + + p_callback(err, img) + }); + } + + static getUrl() { + return window.URL || window.webkitURL || window.mozURL || window.msURL; + } +} diff --git a/src/data/extra/web/js/turndown.js b/src/data/extra/web/js/turndown.js new file mode 100644 index 00000000..cf60fa46 --- /dev/null +++ b/src/data/extra/web/js/turndown.js @@ -0,0 +1,93 @@ +// Convert HTML to Markdown. +class TurndownConverter { + constructor(p_adapter) { + this.adapter = p_adapter; + + turndownPluginGfm.options.autoHead = true; + + this.ts = new TurndownService({headingStyle: 'atx', + bulletListMarker: '*', + emDelimiter: '*', + hr: '***', + codeBlockStyle: 'fenced', + blankReplacement: function(content, node) { + if (node.nodeName == 'SPAN') { + return content; + } + + return node.isBlock ? '\n\n' : '' + }}); + this.ts.use(turndownPluginGfm.gfm); + + // TODO: verify and copy several rules from VNote 2.0. + this.fixMark(); + } + + turndown(p_html) { + return this.ts.turndown(p_html); + } + + // Trim a string into 3 parts: leading spaces, content, trailing spaces. + trimString(p_str) { + let result = { leadingSpaces: '', + content: '', + trailingSpaces: '' + }; + if (!p_str) { + return result; + } + + let lRe = /^\s+/; + let ret = lRe.exec(p_str); + if (ret) { + result.leadingSpaces = ret[0]; + if (result.leadingSpaces.length == p_str.length) { + return result; + } + } + + let tRe = /\s+$/; + ret = tRe.exec(p_str); + if (ret) { + result.trailingSpaces = ret[0]; + } + + result.content = p_str.slice(result.leadingSpaces.length, p_str.length - result.trailingSpaces.length); + return result; + }; + + fixMark() { + this.ts.addRule('mark', { + filter: 'mark', + replacement: function(content, node, options) { + if (!content) { + return ''; + } + + return '' + content + ''; + } + }); + } + + fixImage() { + this.ts.addRule('img_fix', { + filter: 'img', + replacement: function (content, node) { + let alt = node.alt || ''; + if (/[\r\n\[\]]/g.test(alt)) { + alt= ''; + } + + let src = node.getAttribute('src') || ''; + + let title = node.title || ''; + if (/[\r\n\)"]/g.test(title)) { + title = ''; + } + + let titlePart = title ? ' "' + title + '"' : ''; + return src ? '![' + alt + ']' + '(' + src + titlePart + ')' : '' + } + }); + } +} diff --git a/src/data/extra/web/js/turndown/README.md b/src/data/extra/web/js/turndown/README.md new file mode 100644 index 00000000..6c7770fd --- /dev/null +++ b/src/data/extra/web/js/turndown/README.md @@ -0,0 +1,7 @@ +# [turndown](https://github.com/domchristie/turndown) +v7.0.0 +Dom Christie + +# [turndown](https://github.com/domchristie/turndown-plugin-gfm) +v1.0.2 +Dom Christie diff --git a/src/data/extra/web/js/turndown/turndown-plugin-gfm.js b/src/data/extra/web/js/turndown/turndown-plugin-gfm.js new file mode 100644 index 00000000..32a2c948 --- /dev/null +++ b/src/data/extra/web/js/turndown/turndown-plugin-gfm.js @@ -0,0 +1,199 @@ +var turndownPluginGfm = (function (exports) { +'use strict'; + +var highlightRegExp = /highlight-(?:text|source)-([a-z0-9]+)/; + +function highlightedCodeBlock (turndownService) { + turndownService.addRule('highlightedCodeBlock', { + filter: function (node) { + var firstChild = node.firstChild; + return ( + node.nodeName === 'DIV' && + highlightRegExp.test(node.className) && + firstChild && + firstChild.nodeName === 'PRE' + ) + }, + replacement: function (content, node, options) { + var className = node.className || ''; + var language = (className.match(highlightRegExp) || [null, ''])[1]; + + return ( + '\n\n' + options.fence + language + '\n' + + node.firstChild.textContent + + '\n' + options.fence + '\n\n' + ) + } + }); +} + +function strikethrough (turndownService) { + turndownService.addRule('strikethrough', { + filter: ['del', 's', 'strike'], + replacement: function (content) { + return '~' + content + '~' + } + }); +} + +var indexOf = Array.prototype.indexOf; +var every = Array.prototype.every; +var rules = {}; +var configs = { autoHead: false }; + +rules.tableCell = { + filter: ['th', 'td'], + replacement: function (content, node) { + content = content.replace(/[\r\n]/g, ''); + return cell(content, node) + } +}; + +rules.tableRow = { + filter: 'tr', + replacement: function (content, node) { + var borderCells = ''; + var alignMap = { left: ':--', right: '--:', center: ':-:' }; + + if (isHeadingRow(node)) { + for (var i = 0; i < node.childNodes.length; i++) { + var border = '---'; + var align = ( + node.childNodes[i].getAttribute('align') || '' + ).toLowerCase(); + + if (align) border = alignMap[align] || border; + + borderCells += cell(border, node.childNodes[i]); + } + } else if (configs.autoHead && isFirstRow(node)) { + var fakeHead = ''; + + for (var i = 0; i < node.childNodes.length; i++) { + // Add a fake head. + fakeHead += cell('
    ', node.childNodes[i]); + + var border = '---'; + var align = ( + node.childNodes[i].getAttribute('align') || '' + ).toLowerCase(); + + if (align) border = alignMap[align] || border; + + borderCells += cell(border, node.childNodes[i]); + } + + return '\n' + fakeHead + '\n' + borderCells + '\n' + content; + } + + return '\n' + content + (borderCells ? '\n' + borderCells : '') + } +}; + +rules.table = { + // If configs.autoHead is false, only convert tables with a heading row. + // Tables with no heading row are kept using `keep` (see below). + filter: function (node) { + return node.nodeName === 'TABLE' + && (configs.autoHead || isHeadingRow(node.rows[0])) + }, + + replacement: function (content) { + // Ensure there are no blank lines + content = content.replace('\n\n', '\n'); + return '\n\n' + content + '\n\n' + } +}; + +rules.tableSection = { + filter: ['thead', 'tbody', 'tfoot'], + replacement: function (content) { + return content + } +}; + +function isFirstRow (tr) { + var parentNode = tr.parentNode; + return parentNode.firstChild === tr + && (parentNode.nodeName === 'TABLE' || isFirstTbody(parentNode)); +} + +// A tr is a heading row if: +// - the parent is a THEAD +// - or if its the first child of the TABLE or the first TBODY (possibly +// following a blank THEAD) +// - and every cell is a TH +function isHeadingRow (tr) { + var parentNode = tr.parentNode; + return ( + parentNode.nodeName === 'THEAD' || + ( + parentNode.firstChild === tr && + (parentNode.nodeName === 'TABLE' || isFirstTbody(parentNode)) && + every.call(tr.childNodes, function (n) { return n.nodeName === 'TH' }) + ) + ) +} + +function isFirstTbody (element) { + var previousSibling = element.previousSibling; + return ( + element.nodeName === 'TBODY' && ( + !previousSibling || + ( + previousSibling.nodeName === 'THEAD' && + /^\s*$/i.test(previousSibling.textContent) + ) || + // For parsting table from Microsoft Excel. + previousSibling.nodeName == 'COLGROUP' + ) + ) +} + +function cell (content, node) { + var index = indexOf.call(node.parentNode.childNodes, node); + var prefix = ' '; + if (index === 0) prefix = '| '; + return prefix + content + ' |' +} + +function tables (turndownService) { + if (!configs.autoHead) { + turndownService.keep(function (node) { + return node.nodeName === 'TABLE' && !isHeadingRow(node.rows[0]) + }); + } + + for (var key in rules) turndownService.addRule(key, rules[key]); +} + +function taskListItems (turndownService) { + turndownService.addRule('taskListItems', { + filter: function (node) { + return node.type === 'checkbox' && node.parentNode.nodeName === 'LI' + }, + replacement: function (content, node) { + return (node.checked ? '[x]' : '[ ]') + ' ' + } + }); +} + +function gfm (turndownService) { + turndownService.use([ + highlightedCodeBlock, + strikethrough, + tables, + taskListItems + ]); +} + +exports.gfm = gfm; +exports.highlightedCodeBlock = highlightedCodeBlock; +exports.strikethrough = strikethrough; +exports.tables = tables; +exports.taskListItems = taskListItems; +exports.options = configs; + +return exports; + +}({})); diff --git a/src/data/extra/web/js/turndown/turndown.js b/src/data/extra/web/js/turndown/turndown.js new file mode 100644 index 00000000..deb57cdc --- /dev/null +++ b/src/data/extra/web/js/turndown/turndown.js @@ -0,0 +1,956 @@ +var TurndownService = (function () { + 'use strict'; + + function extend (destination) { + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i]; + for (var key in source) { + if (source.hasOwnProperty(key)) destination[key] = source[key]; + } + } + return destination + } + + function repeat (character, count) { + return Array(count + 1).join(character) + } + + var blockElements = [ + 'ADDRESS', 'ARTICLE', 'ASIDE', 'AUDIO', 'BLOCKQUOTE', 'BODY', 'CANVAS', + 'CENTER', 'DD', 'DIR', 'DIV', 'DL', 'DT', 'FIELDSET', 'FIGCAPTION', 'FIGURE', + 'FOOTER', 'FORM', 'FRAMESET', 'H1', 'H2', 'H3', 'H4', 'H5', 'H6', 'HEADER', + 'HGROUP', 'HR', 'HTML', 'ISINDEX', 'LI', 'MAIN', 'MENU', 'NAV', 'NOFRAMES', + 'NOSCRIPT', 'OL', 'OUTPUT', 'P', 'PRE', 'SECTION', 'TABLE', 'TBODY', 'TD', + 'TFOOT', 'TH', 'THEAD', 'TR', 'UL' + ]; + + function isBlock (node) { + return is(node, blockElements) + } + + var voidElements = [ + 'AREA', 'BASE', 'BR', 'COL', 'COMMAND', 'EMBED', 'HR', 'IMG', 'INPUT', + 'KEYGEN', 'LINK', 'META', 'PARAM', 'SOURCE', 'TRACK', 'WBR' + ]; + + function isVoid (node) { + return is(node, voidElements) + } + + function hasVoid (node) { + return has(node, voidElements) + } + + var meaningfulWhenBlankElements = [ + 'A', 'TABLE', 'THEAD', 'TBODY', 'TFOOT', 'TH', 'TD', 'IFRAME', 'SCRIPT', + 'AUDIO', 'VIDEO' + ]; + + function isMeaningfulWhenBlank (node) { + return is(node, meaningfulWhenBlankElements) + } + + function hasMeaningfulWhenBlank (node) { + return has(node, meaningfulWhenBlankElements) + } + + function is (node, tagNames) { + return tagNames.indexOf(node.nodeName) >= 0 + } + + function has (node, tagNames) { + return ( + node.getElementsByTagName && + tagNames.some(function (tagName) { + return node.getElementsByTagName(tagName).length + }) + ) + } + + var rules = {}; + + rules.paragraph = { + filter: 'p', + + replacement: function (content) { + return '\n\n' + content + '\n\n' + } + }; + + rules.lineBreak = { + filter: 'br', + + replacement: function (content, node, options) { + return options.br + '\n' + } + }; + + rules.heading = { + filter: ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'], + + replacement: function (content, node, options) { + var hLevel = Number(node.nodeName.charAt(1)); + + if (options.headingStyle === 'setext' && hLevel < 3) { + var underline = repeat((hLevel === 1 ? '=' : '-'), content.length); + return ( + '\n\n' + content + '\n' + underline + '\n\n' + ) + } else { + return '\n\n' + repeat('#', hLevel) + ' ' + content + '\n\n' + } + } + }; + + rules.blockquote = { + filter: 'blockquote', + + replacement: function (content) { + content = content.replace(/^\n+|\n+$/g, ''); + content = content.replace(/^/gm, '> '); + return '\n\n' + content + '\n\n' + } + }; + + rules.list = { + filter: ['ul', 'ol'], + + replacement: function (content, node) { + var parent = node.parentNode; + if (parent.nodeName === 'LI' && parent.lastElementChild === node) { + return '\n' + content + } else { + return '\n\n' + content + '\n\n' + } + } + }; + + rules.listItem = { + filter: 'li', + + replacement: function (content, node, options) { + content = content + .replace(/^\n+/, '') // remove leading newlines + .replace(/\n+$/, '\n') // replace trailing newlines with just a single one + .replace(/\n/gm, '\n '); // indent + var prefix = options.bulletListMarker + ' '; + var parent = node.parentNode; + if (parent.nodeName === 'OL') { + var start = parent.getAttribute('start'); + var index = Array.prototype.indexOf.call(parent.children, node); + prefix = (start ? Number(start) + index : index + 1) + '. '; + } + return ( + prefix + content + (node.nextSibling && !/\n$/.test(content) ? '\n' : '') + ) + } + }; + + rules.indentedCodeBlock = { + filter: function (node, options) { + return ( + options.codeBlockStyle === 'indented' && + node.nodeName === 'PRE' && + node.firstChild && + node.firstChild.nodeName === 'CODE' + ) + }, + + replacement: function (content, node, options) { + return ( + '\n\n ' + + node.firstChild.textContent.replace(/\n/g, '\n ') + + '\n\n' + ) + } + }; + + rules.fencedCodeBlock = { + filter: function (node, options) { + return ( + options.codeBlockStyle === 'fenced' && + node.nodeName === 'PRE' && + node.firstChild && + node.firstChild.nodeName === 'CODE' + ) + }, + + replacement: function (content, node, options) { + var className = node.firstChild.getAttribute('class') || ''; + var language = (className.match(/language-(\S+)/) || [null, ''])[1]; + var code = node.firstChild.textContent; + + var fenceChar = options.fence.charAt(0); + var fenceSize = 3; + var fenceInCodeRegex = new RegExp('^' + fenceChar + '{3,}', 'gm'); + + var match; + while ((match = fenceInCodeRegex.exec(code))) { + if (match[0].length >= fenceSize) { + fenceSize = match[0].length + 1; + } + } + + var fence = repeat(fenceChar, fenceSize); + + return ( + '\n\n' + fence + language + '\n' + + code.replace(/\n$/, '') + + '\n' + fence + '\n\n' + ) + } + }; + + rules.horizontalRule = { + filter: 'hr', + + replacement: function (content, node, options) { + return '\n\n' + options.hr + '\n\n' + } + }; + + rules.inlineLink = { + filter: function (node, options) { + return ( + options.linkStyle === 'inlined' && + node.nodeName === 'A' && + node.getAttribute('href') + ) + }, + + replacement: function (content, node) { + var href = node.getAttribute('href'); + var title = cleanAttribute(node.getAttribute('title')); + if (title) title = ' "' + title + '"'; + return '[' + content + '](' + href + title + ')' + } + }; + + rules.referenceLink = { + filter: function (node, options) { + return ( + options.linkStyle === 'referenced' && + node.nodeName === 'A' && + node.getAttribute('href') + ) + }, + + replacement: function (content, node, options) { + var href = node.getAttribute('href'); + var title = cleanAttribute(node.getAttribute('title')); + if (title) title = ' "' + title + '"'; + var replacement; + var reference; + + switch (options.linkReferenceStyle) { + case 'collapsed': + replacement = '[' + content + '][]'; + reference = '[' + content + ']: ' + href + title; + break + case 'shortcut': + replacement = '[' + content + ']'; + reference = '[' + content + ']: ' + href + title; + break + default: + var id = this.references.length + 1; + replacement = '[' + content + '][' + id + ']'; + reference = '[' + id + ']: ' + href + title; + } + + this.references.push(reference); + return replacement + }, + + references: [], + + append: function (options) { + var references = ''; + if (this.references.length) { + references = '\n\n' + this.references.join('\n') + '\n\n'; + this.references = []; // Reset references + } + return references + } + }; + + rules.emphasis = { + filter: ['em', 'i'], + + replacement: function (content, node, options) { + if (!content.trim()) return '' + return options.emDelimiter + content + options.emDelimiter + } + }; + + rules.strong = { + filter: ['strong', 'b'], + + replacement: function (content, node, options) { + if (!content.trim()) return '' + return options.strongDelimiter + content + options.strongDelimiter + } + }; + + rules.code = { + filter: function (node) { + var hasSiblings = node.previousSibling || node.nextSibling; + var isCodeBlock = node.parentNode.nodeName === 'PRE' && !hasSiblings; + + return node.nodeName === 'CODE' && !isCodeBlock + }, + + replacement: function (content) { + if (!content.trim()) return '' + + var delimiter = '`'; + var leadingSpace = ''; + var trailingSpace = ''; + var matches = content.match(/`+/gm); + if (matches) { + if (/^`/.test(content)) leadingSpace = ' '; + if (/`$/.test(content)) trailingSpace = ' '; + while (matches.indexOf(delimiter) !== -1) delimiter = delimiter + '`'; + } + + return delimiter + leadingSpace + content + trailingSpace + delimiter + } + }; + + rules.image = { + filter: 'img', + + replacement: function (content, node) { + var alt = cleanAttribute(node.getAttribute('alt')); + var src = node.getAttribute('src') || ''; + var title = cleanAttribute(node.getAttribute('title')); + var titlePart = title ? ' "' + title + '"' : ''; + return src ? '![' + alt + ']' + '(' + src + titlePart + ')' : '' + } + }; + + function cleanAttribute (attribute) { + return attribute ? attribute.replace(/(\n+\s*)+/g, '\n') : '' + } + + /** + * Manages a collection of rules used to convert HTML to Markdown + */ + + function Rules (options) { + this.options = options; + this._keep = []; + this._remove = []; + + this.blankRule = { + replacement: options.blankReplacement + }; + + this.keepReplacement = options.keepReplacement; + + this.defaultRule = { + replacement: options.defaultReplacement + }; + + this.array = []; + for (var key in options.rules) this.array.push(options.rules[key]); + } + + Rules.prototype = { + add: function (key, rule) { + this.array.unshift(rule); + }, + + keep: function (filter) { + this._keep.unshift({ + filter: filter, + replacement: this.keepReplacement + }); + }, + + remove: function (filter) { + this._remove.unshift({ + filter: filter, + replacement: function () { + return '' + } + }); + }, + + forNode: function (node) { + if (node.isBlank) return this.blankRule + var rule; + + if ((rule = findRule(this.array, node, this.options))) return rule + if ((rule = findRule(this._keep, node, this.options))) return rule + if ((rule = findRule(this._remove, node, this.options))) return rule + + return this.defaultRule + }, + + forEach: function (fn) { + for (var i = 0; i < this.array.length; i++) fn(this.array[i], i); + } + }; + + function findRule (rules, node, options) { + for (var i = 0; i < rules.length; i++) { + var rule = rules[i]; + if (filterValue(rule, node, options)) return rule + } + return void 0 + } + + function filterValue (rule, node, options) { + var filter = rule.filter; + if (typeof filter === 'string') { + if (filter === node.nodeName.toLowerCase()) return true + } else if (Array.isArray(filter)) { + if (filter.indexOf(node.nodeName.toLowerCase()) > -1) return true + } else if (typeof filter === 'function') { + if (filter.call(rule, node, options)) return true + } else { + throw new TypeError('`filter` needs to be a string, array, or function') + } + } + + /** + * The collapseWhitespace function is adapted from collapse-whitespace + * by Luc Thevenard. + * + * The MIT License (MIT) + * + * Copyright (c) 2014 Luc Thevenard + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + + /** + * collapseWhitespace(options) removes extraneous whitespace from an the given element. + * + * @param {Object} options + */ + function collapseWhitespace (options) { + var element = options.element; + var isBlock = options.isBlock; + var isVoid = options.isVoid; + var isPre = options.isPre || function (node) { + return node.nodeName === 'PRE' + }; + + if (!element.firstChild || isPre(element)) return + + var prevText = null; + var prevVoid = false; + + var prev = null; + var node = next(prev, element, isPre); + + while (node !== element) { + if (node.nodeType === 3 || node.nodeType === 4) { // Node.TEXT_NODE or Node.CDATA_SECTION_NODE + var text = node.data.replace(/[ \r\n\t]+/g, ' '); + + if ((!prevText || / $/.test(prevText.data)) && + !prevVoid && text[0] === ' ') { + text = text.substr(1); + } + + // `text` might be empty at this point. + if (!text) { + node = remove(node); + continue + } + + node.data = text; + + prevText = node; + } else if (node.nodeType === 1) { // Node.ELEMENT_NODE + if (isBlock(node) || node.nodeName === 'BR') { + if (prevText) { + prevText.data = prevText.data.replace(/ $/, ''); + } + + prevText = null; + prevVoid = false; + } else if (isVoid(node)) { + // Avoid trimming space around non-block, non-BR void elements. + prevText = null; + prevVoid = true; + } + } else { + node = remove(node); + continue + } + + var nextNode = next(prev, node, isPre); + prev = node; + node = nextNode; + } + + if (prevText) { + prevText.data = prevText.data.replace(/ $/, ''); + if (!prevText.data) { + remove(prevText); + } + } + } + + /** + * remove(node) removes the given node from the DOM and returns the + * next node in the sequence. + * + * @param {Node} node + * @return {Node} node + */ + function remove (node) { + var next = node.nextSibling || node.parentNode; + + node.parentNode.removeChild(node); + + return next + } + + /** + * next(prev, current, isPre) returns the next node in the sequence, given the + * current and previous nodes. + * + * @param {Node} prev + * @param {Node} current + * @param {Function} isPre + * @return {Node} + */ + function next (prev, current, isPre) { + if ((prev && prev.parentNode === current) || isPre(current)) { + return current.nextSibling || current.parentNode + } + + return current.firstChild || current.nextSibling || current.parentNode + } + + /* + * Set up window for Node.js + */ + + var root = (typeof window !== 'undefined' ? window : {}); + + /* + * Parsing HTML strings + */ + + function canParseHTMLNatively () { + var Parser = root.DOMParser; + var canParse = false; + + // Adapted from https://gist.github.com/1129031 + // Firefox/Opera/IE throw errors on unsupported types + try { + // WebKit returns null on unsupported types + if (new Parser().parseFromString('', 'text/html')) { + canParse = true; + } + } catch (e) {} + + return canParse + } + + function createHTMLParser () { + var Parser = function () {}; + + { + if (shouldUseActiveX()) { + Parser.prototype.parseFromString = function (string) { + var doc = new window.ActiveXObject('htmlfile'); + doc.designMode = 'on'; // disable on-page scripts + doc.open(); + doc.write(string); + doc.close(); + return doc + }; + } else { + Parser.prototype.parseFromString = function (string) { + var doc = document.implementation.createHTMLDocument(''); + doc.open(); + doc.write(string); + doc.close(); + return doc + }; + } + } + return Parser + } + + function shouldUseActiveX () { + var useActiveX = false; + try { + document.implementation.createHTMLDocument('').open(); + } catch (e) { + if (window.ActiveXObject) useActiveX = true; + } + return useActiveX + } + + var HTMLParser = canParseHTMLNatively() ? root.DOMParser : createHTMLParser(); + + function RootNode (input) { + var root; + if (typeof input === 'string') { + var doc = htmlParser().parseFromString( + // DOM parsers arrange elements in the and . + // Wrapping in a custom element ensures elements are reliably arranged in + // a single element. + '' + input + '', + 'text/html' + ); + root = doc.getElementById('turndown-root'); + } else { + root = input.cloneNode(true); + } + collapseWhitespace({ + element: root, + isBlock: isBlock, + isVoid: isVoid + }); + + return root + } + + var _htmlParser; + function htmlParser () { + _htmlParser = _htmlParser || new HTMLParser(); + return _htmlParser + } + + function Node (node) { + node.isBlock = isBlock(node); + node.isCode = node.nodeName.toLowerCase() === 'code' || node.parentNode.isCode; + node.isBlank = isBlank(node); + node.flankingWhitespace = flankingWhitespace(node); + return node + } + + function isBlank (node) { + return ( + !isVoid(node) && + !isMeaningfulWhenBlank(node) && + /^\s*$/i.test(node.textContent) && + !hasVoid(node) && + !hasMeaningfulWhenBlank(node) + ) + } + + function flankingWhitespace (node) { + var leading = ''; + var trailing = ''; + + if (!node.isBlock) { + var hasLeading = /^\s/.test(node.textContent); + var hasTrailing = /\s$/.test(node.textContent); + var blankWithSpaces = node.isBlank && hasLeading && hasTrailing; + + if (hasLeading && !isFlankedByWhitespace('left', node)) { + leading = ' '; + } + + if (!blankWithSpaces && hasTrailing && !isFlankedByWhitespace('right', node)) { + trailing = ' '; + } + } + + return { leading: leading, trailing: trailing } + } + + function isFlankedByWhitespace (side, node) { + var sibling; + var regExp; + var isFlanked; + + if (side === 'left') { + sibling = node.previousSibling; + regExp = / $/; + } else { + sibling = node.nextSibling; + regExp = /^ /; + } + + if (sibling) { + if (sibling.nodeType === 3) { + isFlanked = regExp.test(sibling.nodeValue); + } else if (sibling.nodeType === 1 && !isBlock(sibling)) { + isFlanked = regExp.test(sibling.textContent); + } + } + return isFlanked + } + + var reduce = Array.prototype.reduce; + var leadingNewLinesRegExp = /^\n*/; + var trailingNewLinesRegExp = /\n*$/; + var escapes = [ + [/\\/g, '\\\\'], + [/\*/g, '\\*'], + [/^-/g, '\\-'], + [/^\+ /g, '\\+ '], + [/^(=+)/g, '\\$1'], + [/^(#{1,6}) /g, '\\$1 '], + [/`/g, '\\`'], + [/^~~~/g, '\\~~~'], + [/\[/g, '\\['], + [/\]/g, '\\]'], + [/^>/g, '\\>'], + [/_/g, '\\_'], + [/^(\d+)\. /g, '$1\\. '] + ]; + + function TurndownService (options) { + if (!(this instanceof TurndownService)) return new TurndownService(options) + + var defaults = { + rules: rules, + headingStyle: 'setext', + hr: '* * *', + bulletListMarker: '*', + codeBlockStyle: 'indented', + fence: '```', + emDelimiter: '_', + strongDelimiter: '**', + linkStyle: 'inlined', + linkReferenceStyle: 'full', + br: ' ', + blankReplacement: function (content, node) { + return node.isBlock ? '\n\n' : '' + }, + keepReplacement: function (content, node) { + return node.isBlock ? '\n\n' + node.outerHTML + '\n\n' : node.outerHTML + }, + defaultReplacement: function (content, node) { + return node.isBlock ? '\n\n' + content + '\n\n' : content + } + }; + this.options = extend({}, defaults, options); + this.rules = new Rules(this.options); + } + + TurndownService.prototype = { + /** + * The entry point for converting a string or DOM node to Markdown + * @public + * @param {String|HTMLElement} input The string or DOM node to convert + * @returns A Markdown representation of the input + * @type String + */ + + turndown: function (input) { + if (!canConvert(input)) { + throw new TypeError( + input + ' is not a string, or an element/document/fragment node.' + ) + } + + if (input === '') return '' + + var output = process.call(this, new RootNode(input)); + return postProcess.call(this, output) + }, + + /** + * Add one or more plugins + * @public + * @param {Function|Array} plugin The plugin or array of plugins to add + * @returns The Turndown instance for chaining + * @type Object + */ + + use: function (plugin) { + if (Array.isArray(plugin)) { + for (var i = 0; i < plugin.length; i++) this.use(plugin[i]); + } else if (typeof plugin === 'function') { + plugin(this); + } else { + throw new TypeError('plugin must be a Function or an Array of Functions') + } + return this + }, + + /** + * Adds a rule + * @public + * @param {String} key The unique key of the rule + * @param {Object} rule The rule + * @returns The Turndown instance for chaining + * @type Object + */ + + addRule: function (key, rule) { + this.rules.add(key, rule); + return this + }, + + /** + * Keep a node (as HTML) that matches the filter + * @public + * @param {String|Array|Function} filter The unique key of the rule + * @returns The Turndown instance for chaining + * @type Object + */ + + keep: function (filter) { + this.rules.keep(filter); + return this + }, + + /** + * Remove a node that matches the filter + * @public + * @param {String|Array|Function} filter The unique key of the rule + * @returns The Turndown instance for chaining + * @type Object + */ + + remove: function (filter) { + this.rules.remove(filter); + return this + }, + + /** + * Escapes Markdown syntax + * @public + * @param {String} string The string to escape + * @returns A string with Markdown syntax escaped + * @type String + */ + + escape: function (string) { + return escapes.reduce(function (accumulator, escape) { + return accumulator.replace(escape[0], escape[1]) + }, string) + } + }; + + /** + * Reduces a DOM node down to its Markdown string equivalent + * @private + * @param {HTMLElement} parentNode The node to convert + * @returns A Markdown representation of the node + * @type String + */ + + function process (parentNode) { + var self = this; + return reduce.call(parentNode.childNodes, function (output, node) { + node = new Node(node); + + var replacement = ''; + if (node.nodeType === 3) { + replacement = node.isCode ? node.nodeValue : self.escape(node.nodeValue); + } else if (node.nodeType === 1) { + replacement = replacementForNode.call(self, node); + } + + return join(output, replacement) + }, '') + } + + /** + * Appends strings as each rule requires and trims the output + * @private + * @param {String} output The conversion output + * @returns A trimmed version of the ouput + * @type String + */ + + function postProcess (output) { + var self = this; + this.rules.forEach(function (rule) { + if (typeof rule.append === 'function') { + output = join(output, rule.append(self.options)); + } + }); + + return output.replace(/^[\t\r\n]+/, '').replace(/[\t\r\n\s]+$/, '') + } + + /** + * Converts an element node to its Markdown equivalent + * @private + * @param {HTMLElement} node The node to convert + * @returns A Markdown representation of the node + * @type String + */ + + function replacementForNode (node) { + var rule = this.rules.forNode(node); + var content = process.call(this, node); + var whitespace = node.flankingWhitespace; + if (whitespace.leading || whitespace.trailing) content = content.trim(); + return ( + whitespace.leading + + rule.replacement(content, node, this.options) + + whitespace.trailing + ) + } + + /** + * Determines the new lines between the current output and the replacement + * @private + * @param {String} output The current conversion output + * @param {String} replacement The string to append to the output + * @returns The whitespace to separate the current output and the replacement + * @type String + */ + + function separatingNewlines (output, replacement) { + var newlines = [ + output.match(trailingNewLinesRegExp)[0], + replacement.match(leadingNewLinesRegExp)[0] + ].sort(); + var maxNewlines = newlines[newlines.length - 1]; + return maxNewlines.length < 2 ? maxNewlines : '\n\n' + } + + function join (string1, string2) { + var separator = separatingNewlines(string1, string2); + + // Remove trailing/leading newlines and replace with separator + string1 = string1.replace(trailingNewLinesRegExp, ''); + string2 = string2.replace(leadingNewLinesRegExp, ''); + + return string1 + separator + string2 + } + + /** + * Determines whether an input can be converted + * @private + * @param {String|HTMLElement} input Describe this parameter + * @returns Describe what it returns + * @type String|Object|Array|Boolean|Number + */ + + function canConvert (input) { + return ( + input != null && ( + typeof input === 'string' || + (input.nodeType && ( + input.nodeType === 1 || input.nodeType === 9 || input.nodeType === 11 + )) + ) + ) + } + + return TurndownService; + +}()); diff --git a/src/data/extra/web/js/utils.js b/src/data/extra/web/js/utils.js new file mode 100644 index 00000000..3a414a0a --- /dev/null +++ b/src/data/extra/web/js/utils.js @@ -0,0 +1,102 @@ +class Utils { + constructor() { + } + + static parentFolder(p_path) { + return p_path.substr(0, p_path.lastIndexOf('/')); + } + + // @p_type: 'blob'/'text'. + static httpGet(p_url, p_type, p_callback) { + let xmlHttp = new XMLHttpRequest(); + xmlHttp.open("GET", p_url); + xmlHttp.responseType = p_type; + + xmlHttp.onload = function() { + p_callback(xmlHttp.response); + }; + + xmlHttp.send(null); + } + + static loadScript(p_src, p_callback) { + let script = document.createElement('script'); + if (p_callback) { + script.onload = p_callback; + } + script.type = 'text/javascript'; + script.src = p_src; + document.head.appendChild(script); + } + + static loadScripts(p_srcs, p_callback) { + if (p_srcs.length == 1) { + this.loadScript(p_srcs[0], p_callback); + return; + } + + let func = (function() { + let scriptsToLoad = p_srcs.length; + let callback = p_callback; + return function() { + --scriptsToLoad; + if (scriptsToLoad == 0) { + callback(); + } + }; + })(); + + let scriptsToLoad = p_srcs.length; + p_srcs.forEach((p_src) => { + this.loadScript(p_src, func); + }); + } + + // 'lang-' + ['cpp', 'md'] => ['lang-cpp', 'lang-md']. + static addPrefix(p_prefix, p_elements) { + let res = []; + p_elements.forEach(function(p_ele) { + res.push(p_prefix + p_ele); + }); + return res; + } + + // Check if @p_node contains source line info. If yes, add it to @p_newNode. + static checkSourceLine(p_node, p_newNode) { + if (p_node.classList.contains('source-line')) { + p_newNode.classList.add('source-line'); + p_newNode.setAttribute('data-source-line', p_node.getAttribute('data-source-line')); + } + } + + // Replace @p_node with @p_newNode. + static replaceNodeWithPreCheck(p_node, p_newNode) { + let childNode = p_node; + let parentNode = p_node.parentNode; + if (parentNode.tagName.toLowerCase() == 'pre') { + childNode = parentNode; + parentNode = parentNode.parentNode; + } + parentNode.replaceChild(p_newNode, childNode); + } + + static viewPortRect() { + return { + left: document.documentElement.scrollLeft || document.body.scrollLeft || window.pageXOffset, + top: document.documentElement.scrollTop || document.body.scrollTop || window.pageYOffset, + width: document.documentElement.clientWidth || document.body.clientWidth, + height: document.documentElement.clientHeight || document.body.clientHeight + } + } + + static nodeRectInContent(p_node) { + let rect = p_node.getBoundingClientRect(); + let vrect = this.viewPortRect(); + return { + left: vrect.left + rect.left, + top: vrect.top + rect.top, + width: rect.width, + height: rect.height + }; + } +} diff --git a/src/data/extra/web/js/viz.js/README.md b/src/data/extra/web/js/viz.js/README.md new file mode 100644 index 00000000..daada677 --- /dev/null +++ b/src/data/extra/web/js/viz.js/README.md @@ -0,0 +1,2 @@ +# [viz.js](https://github.com/mdaines/viz.js) +v2.1.2 diff --git a/src/data/extra/web/js/viz.js/lite.render.js b/src/data/extra/web/js/viz.js/lite.render.js new file mode 100644 index 00000000..c027a6a5 --- /dev/null +++ b/src/data/extra/web/js/viz.js/lite.render.js @@ -0,0 +1,90 @@ +/* +Viz.js 2.1.2 (Graphviz 2.40.1, Emscripten 1.37.36) +*/ +(function(global) { +var Module = function(Module) { + Module = Module || {}; +var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=(function(status,toThrow){throw toThrow});Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;if(Module["ENVIRONMENT"]){if(Module["ENVIRONMENT"]==="WEB"){ENVIRONMENT_IS_WEB=true}else if(Module["ENVIRONMENT"]==="WORKER"){ENVIRONMENT_IS_WORKER=true}else if(Module["ENVIRONMENT"]==="NODE"){ENVIRONMENT_IS_NODE=true}else if(Module["ENVIRONMENT"]==="SHELL"){ENVIRONMENT_IS_SHELL=true}else{throw new Error("Module['ENVIRONMENT'] value is not valid. must be one of: WEB|WORKER|NODE|SHELL.")}}else{ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER}if(ENVIRONMENT_IS_NODE){var nodeFS;var nodePath;Module["read"]=function shell_read(filename,binary){var ret;ret=tryParseAsDataURI(filename);if(!ret){if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);ret=nodeFS["readFileSync"](filename)}return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",(function(ex){if(!(ex instanceof ExitStatus)){throw ex}}));process["on"]("unhandledRejection",(function(reason,p){process["exit"](1)}));Module["inspect"]=(function(){return"[Emscripten Module object]"})}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){var data=tryParseAsDataURI(f);if(data){return intArrayToString(data)}return read(f)}}Module["readBinary"]=function readBinary(f){var data;data=tryParseAsDataURI(f);if(data){return data}if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=(function(status,toThrow){quit(status)})}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){Module["read"]=function shell_read(url){try{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText}catch(err){var data=tryParseAsDataURI(url);if(data){return intArrayToString(data)}throw err}};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){try{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}catch(err){var data=tryParseAsDataURI(url);if(data){return data}throw err}}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}var data=tryParseAsDataURI(url);if(data){onload(data.buffer);return}onerror()};xhr.onerror=onerror;xhr.send(null)};if(typeof arguments!="undefined"){Module["arguments"]=arguments}Module["setWindowTitle"]=(function(title){document.title=title})}Module["print"]=typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null;Module["printErr"]=typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||Module["print"];Module.print=Module["print"];Module.printErr=Module["printErr"];for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;var STACK_ALIGN=16;function staticAlloc(size){assert(!staticSealed);var ret=STATICTOP;STATICTOP=STATICTOP+size+15&-16;return ret}function dynamicAlloc(size){assert(DYNAMICTOP_PTR);var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;HEAP32[DYNAMICTOP_PTR>>2]=end;if(end>=TOTAL_MEMORY){var success=enlargeMemory();if(!success){HEAP32[DYNAMICTOP_PTR>>2]=ret;return 0}}return ret}function alignMemory(size,factor){if(!factor)factor=STACK_ALIGN;var ret=size=Math.ceil(size/factor)*factor;return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;Module.printErr(text)}}var jsCallStartIndex=1;var functionPointers=new Array(0);var funcWrappers={};function dynCall(sig,ptr,args){if(args&&args.length){return Module["dynCall_"+sig].apply(null,[ptr].concat(args))}else{return Module["dynCall_"+sig].call(null,ptr)}}var GLOBAL_BASE=8;var ABORT=0;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function getCFunc(ident){var func=Module["_"+ident];assert(func,"Cannot call unknown function "+ident+", make sure it is exported");return func}var JSfuncs={"stackSave":(function(){stackSave()}),"stackRestore":(function(){stackRestore()}),"arrayToC":(function(arr){var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}),"stringToC":(function(str){var ret=0;if(str!==null&&str!==undefined&&str!==0){var len=(str.length<<2)+1;ret=stackAlloc(len);stringToUTF8(str,ret,len)}return ret})};var toC={"string":JSfuncs["stringToC"],"array":JSfuncs["arrayToC"]};function ccall(ident,returnType,argTypes,args,opts){var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=+1?tempDouble>+0?(Math_min(+Math_floor(tempDouble/+4294967296),+4294967295)|0)>>>0:~~+Math_ceil((tempDouble- +(~~tempDouble>>>0))/+4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_STATIC=2;var ALLOC_NONE=4;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[typeof _malloc==="function"?_malloc:staticAlloc,stackAlloc,staticAlloc,dynamicAlloc][allocator===undefined?ALLOC_STATIC:allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i>0];hasUtf|=t;if(t==0&&!length)break;i++;if(length&&i==length)break}if(!length)length=i;var ret="";if(hasUtf<128){var MAX_CHUNK=1024;var curr;while(length>0){curr=String.fromCharCode.apply(String,HEAPU8.subarray(ptr,ptr+Math.min(length,MAX_CHUNK)));ret=ret?ret+curr:curr;ptr+=MAX_CHUNK;length-=MAX_CHUNK}return ret}return UTF8ToString(ptr)}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(u8Array,idx){var endPtr=idx;while(u8Array[endPtr])++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var u0,u1,u2,u3,u4,u5;var str="";while(1){u0=u8Array[idx++];if(!u0)return str;if(!(u0&128)){str+=String.fromCharCode(u0);continue}u1=u8Array[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}u2=u8Array[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u3=u8Array[idx++]&63;if((u0&248)==240){u0=(u0&7)<<18|u1<<12|u2<<6|u3}else{u4=u8Array[idx++]&63;if((u0&252)==248){u0=(u0&3)<<24|u1<<18|u2<<12|u3<<6|u4}else{u5=u8Array[idx++]&63;u0=(u0&1)<<30|u1<<24|u2<<18|u3<<12|u4<<6|u5}}}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}}function UTF8ToString(ptr){return UTF8ArrayToString(HEAPU8,ptr)}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=2097151){if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=67108863){if(outIdx+4>=endIdx)break;outU8Array[outIdx++]=248|u>>24;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+5>=endIdx)break;outU8Array[outIdx++]=252|u>>30;outU8Array[outIdx++]=128|u>>24&63;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){++len}else if(u<=2047){len+=2}else if(u<=65535){len+=3}else if(u<=2097151){len+=4}else if(u<=67108863){len+=5}else{len+=6}}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8(str){var size=lengthBytesUTF8(str)+1;var ret=_malloc(size);if(ret)stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,(function(x){var y=demangle(x);return x===y?x:x+" ["+y+"]"}))}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var PAGE_SIZE=16384;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var STATIC_BASE,STATICTOP,staticSealed;var STACK_BASE,STACKTOP,STACK_MAX;var DYNAMIC_BASE,DYNAMICTOP_PTR;STATIC_BASE=STATICTOP=STACK_BASE=STACKTOP=STACK_MAX=DYNAMIC_BASE=DYNAMICTOP_PTR=0;staticSealed=false;function abortOnCannotGrowMemory(){abort("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+TOTAL_MEMORY+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or (4) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")}function enlargeMemory(){abortOnCannotGrowMemory()}var TOTAL_STACK=Module["TOTAL_STACK"]||5242880;var TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(TOTAL_MEMORY0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){callRuntimeCallbacks(__ATEXIT__);runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}if(!Math["imul"]||Math["imul"](4294967295,5)!==-5)Math["imul"]=function imul(a,b){var ah=a>>>16;var al=a&65535;var bh=b>>>16;var bl=b&65535;return al*bl+(ah*bl+al*bh<<16)|0};Math.imul=Math["imul"];if(!Math["clz32"])Math["clz32"]=(function(x){x=x>>>0;for(var i=0;i<32;i++){if(x&1<<31-i)return i}return 32});Math.clz32=Math["clz32"];if(!Math["trunc"])Math["trunc"]=(function(x){return x<0?Math.ceil(x):Math.floor(x)});Math.trunc=Math["trunc"];var Math_abs=Math.abs;var Math_cos=Math.cos;var Math_sin=Math.sin;var Math_tan=Math.tan;var Math_acos=Math.acos;var Math_asin=Math.asin;var Math_atan=Math.atan;var Math_atan2=Math.atan2;var Math_exp=Math.exp;var Math_log=Math.log;var Math_sqrt=Math.sqrt;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_pow=Math.pow;var Math_imul=Math.imul;var Math_fround=Math.fround;var Math_round=Math.round;var Math_min=Math.min;var Math_max=Math.max;var Math_clz32=Math.clz32;var Math_trunc=Math.trunc;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var memoryInitializer=null;var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var ASM_CONSTS=[(function($0,$1){var path=Pointer_stringify($0);var data=Pointer_stringify($1);FS.createPath("/",PATH.dirname(path));FS.writeFile(PATH.join("/",path),data)})];function _emscripten_asm_const_iii(code,a0,a1){return ASM_CONSTS[code](a0,a1)}STATIC_BASE=GLOBAL_BASE;STATICTOP=STATIC_BASE+176368;__ATINIT__.push();memoryInitializer="data:application/octet-stream;base64,AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/ACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAIMEAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABSQAAAAAAAAFJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFJAAAAAAAAAUkAAIMEAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABSQAAAAAAAAFJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFJAAAAAAAAAUkACEAAAAAAAAAAAAAAAABBAWC8AAAgAAAABAAAAAAAAAAIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICWQAAAAAAAgJZABJDDAAAAAAAAAAAAAAAQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWEAAAAAAAABYQAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYQAAAAAAAAFhAAAAAAAAAAAAAAAAAAAAQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUkAAAAAAAABSQAAgAwIAAAAAAAAAAAAAEEAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAABCQAAAAAAAAEJAAAAAAAAgg0AAAAAAAMCIQAAAAAAAAFJAAAAAAAAAUkAAAAAAAAAAAAAAAAAAAEJAAAAAAAAAQkAAAAAAACCDQAAAAAAAwIhAAAAAAAAAUkAAAAAAAABSQACwwQAAAAAAAAAAAAAAEED4NQAAkwAAAAEAAAAAAAAAQAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFJAAAAAAAAAUkAAEAACAAAAAAAAAAAAABBAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYQAAAAAAAAFhAALDBAAAAAAAAAAAAAAAAANQ5AAAQAAAAAQAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWEAAAAAAAABYQEAgPgMAAAAAAAAAAAAAEEDcOgAAegAAAAEAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFJAAAAAAAAAUkAAAAAAAAAAAAAAAAAAABBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABSQAAAAAAAAFJAAQAAAAAAAAABAAAAAAAAAAAAAAAAAPA/AQAAAAAAAAACAAAAAAAAAAAAAAAAAPA/AgAAAAAAAAADAAAAAAAAAAAAAAAAAOA/AwAAAAAAAAAEAAAAAAAAAAAAAAAAAPA/BAAAAAAAAAAFAAAAAAAAADMzMzMzM/M/BQAAAAAAAAAGAAAAAAAAAJqZmZmZmek/BgAAAAAAAAAHAAAAAAAAAAAAAAAAAPA/BwAAAAAAAAAIAAAAAAAAAAAAAAAAAOA/CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAzMzMzMzPTvwAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAQAAAAAAAAAAAAAAACARkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAQAAAAAAAAAAAAAAAAAAACamZmZmZnZvwAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMzMzMzM+M/AAAAAAAAAAAAAAAAAQAAAAUAAAAAAAAAAAAAAAAAAAB7FK5H4XrkvwAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAQAAABMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGiRSAAABAAAAAQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAMAAAAAAAAAAAAAAACAZkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAQAAAAAAAAAAAAAAACAZkCamZmZmZnZvwAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAUAAAAAAAAAAAAAAACAZkB7FK5H4XrkvwAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAQAAAAQAAAAAAAAAAAAAAACARkAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAABAAAAAQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAABAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAAAAQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQAAAAAAAAAAAQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAAAAAAAAAAAQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEgAAAAAAAAAAAQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEwAAAAAAAAAAAQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFQAAAAAAAAAAAQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAAAAAAAAQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQAAAAAAAAAAAQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFgAAAAAAAAAAAQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFwAAAAAAAAAAAQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAAAAAAAQAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAAABAAAAAAAAAAAAAAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/WKg1zTtO1T8ldQKaCBvaPwAAAAAAAOA/AAAAAAAA4D8s1JrmHafqP2recYqO5Og/WKg1zTtO1T9YqDXNO07VP1ioNc07TtU/AAAAAAAA4D9d3EYDeAviPwAAAAAAANA/WKg1zTtO1T8AAAAAAADQP9O84xQdydE/AAAAAAAA4D8AAAAAAADgPwAAAAAAAOA/AAAAAAAA4D8AAAAAAADgPwAAAAAAAOA/AAAAAAAA4D8AAAAAAADgPwAAAAAAAOA/AAAAAAAA4D/TvOMUHcnRP9O84xQdydE/XdxGA3gL4j9d3EYDeAviP13cRgN4C+I/DXGsi9to3D9kXdxGA3jtP9JvXwfOGec/EHo2qz5X5T8QejarPlflP9JvXwfOGec/eAskKH6M4z+1FfvL7snhP9JvXwfOGec/0m9fB84Z5z9YqDXNO07VP4iFWtO849g/0m9fB84Z5z94CyQofozjP8RCrWnecew/0m9fB84Z5z/Sb18HzhnnP7UV+8vuyeE/0m9fB84Z5z8QejarPlflP7UV+8vuyeE/eAskKH6M4z/Sb18HzhnnP9JvXwfOGec/hjjWxW007j/Sb18HzhnnP9JvXwfOGec/eAskKH6M4z9YqDXNO07VP9O84xQdydE/WKg1zTtO1T+mCkYldQLePwAAAAAAAOA/WKg1zTtO1T8NcayL22jcPwAAAAAAAOA/DXGsi9to3D8AAAAAAADgPw1xrIvbaNw/WKg1zTtO1T8AAAAAAADgPwAAAAAAAOA/07zjFB3J0T/TvOMUHcnRPwAAAAAAAOA/07zjFB3J0T9q3nGKjuToPwAAAAAAAOA/AAAAAAAA4D8AAAAAAADgPwAAAAAAAOA/WKg1zTtO1T+IhVrTvOPYP9O84xQdydE/AAAAAAAA4D8AAAAAAADgP9JvXwfOGec/AAAAAAAA4D8AAAAAAADgPw1xrIvbaNw/9GxWfa623j8RNjy9UpbJP/RsVn2utt4/OwFNhA1P4T8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQP1ioNc07TtU/AAAAAAAA4D8AAAAAAADgPz7o2az6XMU/AAAAAAAA4D8AAAAAAADgPwAAAAAAAOA/AAAAAAAA4D+Cc0aU9gbHPw1xrIvbaNw/AAAAAAAA4D9YqDXNO07VP1ioNc07TtU/tRX7y+7J4T+1FfvL7snhPwAAAAAAANA/AAAAAAAA4D8AAAAAAADgPwAAAAAAAOA/AAAAAAAA0D8AAAAAAADQPwfwFkhQ/Nw/orQ3+MJk1j9YqDXNO07VPw1xrIvbaNw/DXGsi9to3D8AAAAAAADgPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADQPw1xrIvbaNw/AAAAAAAA0D9YqDXNO07VP1ioNc07TtU/WKg1zTtO1T9YqDXNO07VP1ioNc07TtU/WKg1zTtO1T9YqDXNO07VP1ioNc07TtU/AAAAAAAA0D9YqDXNO07VP1ioNc07TtU/AAAAAAAA0D9YqDXNO07VP1ioNc07TtU/WKg1zTtO1T8AAAAAAADwPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/xEKtad5x7D8AAAAAAADQP3/ZPXlYqNE/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D94CyQofozjP9JvXwfOGec/xEKtad5x7D8T8kHPZtXTPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8QejarPlflPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQP9O84xQdydE/AAAAAAAA0D8AAAAAAADQP9O84xQdydE/AAAAAAAA4D/Sb18HzhnnPwAAAAAAAOA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/9GxWfa621j+1FfvL7snhP7UV+8vuyeE/xEKtad5x7D8QejarPlflP/Xb14FzRsw/WKg1zTtO1T9YqDXNO07VP4iFWtO849g/AU2EDU+v4j/TvOMUHcnRP1ioNc07TtU/07zjFB3J0T/TvOMUHcnRP7UV+8vuyeE/tRX7y+7J4T+1FfvL7snhP7UV+8vuyeE/tRX7y+7J4T+1FfvL7snhP7UV+8vuyeE/tRX7y+7J4T+1FfvL7snhP7UV+8vuyeE/07zjFB3J0T/TvOMUHcnRPwFNhA1Pr+I/AU2EDU+v4j8BTYQNT6/iP7UV+8vuyeE/zF1LyAc98D8QejarPlflPxB6Nqs+V+U/0m9fB84Z5z/Sb18HzhnnPxB6Nqs+V+U/eAskKH6M4z9q3nGKjuToP9JvXwfOGec/07zjFB3J0T8AAAAAAADgPxB6Nqs+V+U/tRX7y+7J4T8s1JrmHafqP9JvXwfOGec/at5xio7k6D8QejarPlflP2recYqO5Og/0m9fB84Z5z8QejarPlflP3gLJCh+jOM/0m9fB84Z5z8QejarPlflP4Y41sVtNO4/EHo2qz5X5T8QejarPlflP3gLJCh+jOM/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/pgpGJXUC3j+1FfvL7snhP0i/fR04Z8w/tRX7y+7J4T+1FfvL7snhPwAAAAAAAOA/tRX7y+7J4T+1FfvL7snhP9O84xQdydE/tRX7y+7J4T+1FfvL7snhP0i/fR04Z8w/SL99HThnzD8AAAAAAADgP0i/fR04Z8w/LNSa5h2n6j+1FfvL7snhP7UV+8vuyeE/tRX7y+7J4T+1FfvL7snhP1ioNc07TtU/AAAAAAAA4D/TvOMUHcnRP7UV+8vuyeE/AAAAAAAA4D/Sb18HzhnnPwAAAAAAAOA/AAAAAAAA4D8AAAAAAADgPwKaCBueXtU/4L4OnDOi0D8Cmggbnl7VPwFNhA1Pr+I/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T9YqDXNO07VP7UV+8vuyeE/tRX7y+7J4T8+6Nms+lzFP7UV+8vuyeE/tRX7y+7J4T+1FfvL7snhP7UV+8vuyeE/HThnRGlvyD9YqDXNO07VP7UV+8vuyeE/WKg1zTtO1T9YqDXNO07VPwAAAAAAAOA/AAAAAAAA4D/TvOMUHcnRP7UV+8vuyeE/tRX7y+7J4T+1FfvL7snhP9O84xQdydE/07zjFB3J0T/nHafoSC7hP6K0N/jCZNY/SL99HThnzD9YqDXNO07VP1ioNc07TtU/tRX7y+7J4T8AAAAAAADwPwAAAAAAAPA/07zjFB3J0T94CyQofozjP9O84xQdydE/WKg1zTtO1T9YqDXNO07VP1ioNc07TtU/WKg1zTtO1T9YqDXNO07VP1ioNc07TtU/WKg1zTtO1T9YqDXNO07VP9O84xQdydE/WKg1zTtO1T9YqDXNO07VP9O84xQdydE/WKg1zTtO1T9YqDXNO07VP1ioNc07TtU/AAAAAAAA8D/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRPwAAAAAAAPA/07zjFB3J0T/qlbIMcazXP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/tRX7y+7J4T9q3nGKjuToPwAAAAAAAPA/mN2Th4Va1z/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/xEKtad5x7D/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T9Iv30dOGfMP3gLJCh+jOM/hjjWxW007j94CyQofozjP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/UaBP5EnSDkC0yHa+nzo1wDoi36XUJdW/84I+R5ouij+f5Xlwd9b5v379EBssnOY/luzYCMTrzD/NzqJ3KuDQP7Djv0AQIO2/raHUXkTb2D87oXzmUZZ2P9NucPl6hHs/gczOoncq5L/Rrdf0oKDIP2rfNxmwP4Q/vsqQGV7/hD8clgZ+VMPEv6VJKej24iNAqdkDrcCQwT8IxJBBk2mJP/pEniRdM9C/AfCZNi3CXj8NnH0vz5SXP4m1+BQA44k/5alYRjTLsb+PAMnPoWemv1y1xvvMtIg/TaSPVDqzkD/mxwShYdagv8dpZxwT94K/Kn9r5S1wXL/kV2JUCJp1P9Hxh1VyBLc/ldQJaCI8M8BkIxCv63cQwKchqvBneMc/2v8Aa9WuwT9OKETAIVT3v6pIhbGFIPU/nWhXIeUn9j9NLsbAOo7NP1lrKLUX0dy/Az+qYb8nzD+mR1M9mX/aP7aBO1CnPK4/UUzeADPfub/1dpX/2gumP9SlNbwP9pQ/H60gvCzckD8oLPGAsskjQCNa4UwCirc/SKNlUZYpfz+7tIb3wZ6TPxeoe1NHfaC/ISuu4G2Uiz8zc9yE1h61v6B4hIn1/I8/aTUk7rH0kb+4zTN6Xr9qP5I+raI/NM2/frDnxk8+mL8HI5tQLcekPz4YwntYuZG/LXx9rUuNxj8AAABA+yH5PwAAAAAtRHQ+AAAAgJhG+DwAAABgUcx4OwAAAICDG/A5AAAAQCAlejgAAACAIoLjNgAAAAAd82k1tOgAAKAqAAADAAAAyCwAAAMAAACgLwAAAwAAAGgwAAADAAAAuDEAAAMAAAAwNQAAAwAAAGw4AAADAAAAfC4AAAMAAAA0OQAAAwAAADw6AAADAAAAyD4AAAMAAADsPAAAAAAAAIwsAAAAAAAAeC8AAAAAAADILwAAAAAAAJAxAAAAAAAA4DEAAAAAAABEOAAAAAAAABguAAAAAAAADDkAAAAAAAAUOgAAAAAAAKA+AAAAAAAAxDwAAAQAAADwPgAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAACAAAAAQAAAAEAAAADAAAAAAAAAAAAAADQjQIA4I0CAPCNAgAAjgIAEI4CACCOAgAwjgIAQI4CAOCNAgDgjQIAII4CACCOAgAfAAAAPwAAAH8AAAAAAAAAHUsBAAEAAABgKwAAaAAAAAQAAADW7AAAAQAAANgrAACIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbukAAAEAAAAAAAAA4AAAAAAAAAB26QAAAQAAAAAAAADgAAAAAQAAAH3pAAABAAAAAAAAAKgAAAACAAAAh+kAAAEAAAAAAAAA4AAAAAMAAACR6QAAAQAAAAAAAADgAAAABAAAAJ/pAAABAAAAAAAAAOAAAAAFAAAAqekAAAEAAAAAAAAA4AAAAAYAAAC26QAAAQAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAA/////wAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2+wAAAEAAAB8LQAAGAEAAAEAAADg7AAAAQAAAHwtAAAYAQAAAgAAAObsAAABAAAAfC0AABgBAAADAAAA7+wAAAEAAAB8LQAAGAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPnsAAABAAAAAAAAAHABAAABAAAAA+0AAAEAAAAAAAAAcAEAAAIAAAAO7QAAAQAAAAAAAAA4AQAAAwAAABztAAABAAAAAAAAADgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAkAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAwAAAANAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAQAAAAYAAAACAAAAAgAAAAcAAAACAAAAAAAAAPrcAQD/xQEAkMcBANDNAQDH1AEABtkBAIbcAQCX3AEAAAAAAGPtAAABAAAA4C4AAKgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABn7QAAAQAAAAAAAADIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAb+0AAAEAAADwLwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAKfuAAABAAAAAAAAACACAAACAAAAse4AAAEAAAAAAAAAWAIAAAAAAAC67gAAAQAAAAAAAABYAgAAAwAAAMPuAAABAAAAAAAAAFgCAAAAAAAAze4AAAEAAAAAAAAAIAIAAAMAAADZ7gAAAQAAAAAAAAAgAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAAAASAAAAAAAAAAAAAAATAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAVAAAAFgAAABcAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAMAAAAJAAAAAwAAAAMAAAAKAAAABAAAAAAAAAD63AEA/8UBANDNAQCQxwEABtkBAMfUAQCX3AEAhtwBAAAAAAAAAAAAlvAAAP/////0MAAAkAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJnwAAD/////AAAAALACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABcUwEAAQAAAAgyAADoAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAGQAAABoAAAAAAAAABAAAAAAAAAAbAAAAHAAAAB0AAAAeAAAAAAAAAAAAAAAAAAAAAAAAAB8AAAAgAAAAIQAAACIAAAACAAAAAAAAAAAAAAAAAAAACwAAAAAAAAAMAAAABQAAAAQAAAANAAAABQAAAAMAAACW9AAApPQAALr0AABpqAIAyPQAANf0AADc9AAA+vQAAGmoAgAM9QAAPPUAAGmoAgBa9QAAgvUAAJD1AAC/9QAA8/UAAAT2AAAp9gAATPYAAFL2AABu9gAAi/YAAKb2AADH9gAA4fYAAAP3AAAi9wAASPcAAGD3AACA9wAAnfcAAMH3AADN9wAAaagCANj3AAD+9wAAIvgAAEj4AABpqAIAfvgAAJb4AACj+AAA0vgAAM33AABpqAIA3/gAAOj4AAAJ+QAARPkAAI/5AADj+QAABfoAABr6AAAx+gAAR/oAAF/6AABpqAIAdfoAAJD6AAC0+gAA2PoAAP36AABpqAIAHvsAADj7AABK+wAAV/sAAGT7AAB4+wAAh/sAAI/7AACk+wAAsvsAAPD7AAD7+wAAzfcAAGmoAgAB/AAADfwAABz8AABM9gAAaagCAC/8AABY/AAAdvwAAIb8AACX/AAAnvwAAK38AAC9/AAAAf0AAAj9AABM9gAAaagCABL9AAA+/QAASf0AAFL9AABb/QAAbP0AAH39AACR/QAAzfcAAGmoAgCd/QAArf0AALv9AADJ/QAA1v0AAOP9AAD5/QAAAv4AABH+AAAe/gAAL/4AAM33AABpqAIAOv4AAFn+AABpqAIAa/4AAHr+AACq/gAAtP4AAMH+AADO/gAA2/4AAOj+AADr/gAAaagCAO/+AABpqAIAEv8AAEP/AABy/wAAif8AAKT/AAC//wAAzfcAAGmoAgDb/wAAaagCAAMAAQAPAAEAIgABADUAAQBKAAEAXwABAGMAAQBM9gAAaagCAG8AAQBpqAIAfwABAI0AAQCZAAEApgABAMYAAQDcAAEAaagCAPAAAQA5AQEAfwEBAK8BAQDiAQEA6QEBABACAQA3AgEAaagCADwCAQAAAAAAAAAAAPorAQABAAAAAAAAAAgDAAABAAAAsAIBAAEAAAAAAAAACAMAAAIAAADzKwEAAQAAAAAAAABAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjAAAAAAAAACQAAAAlAAAABgAAACYAAAAnAAAAKAAAACkAAAAqAAAAAAAAAAAAAAAAAAAAAAAAACsAAAAsAAAALQAAAC4AAAAEAAAALwAAAAAAAAAAAAAADgAAAAAAAAAPAAAABwAAAAUAAAAQAAAABgAAAAAAAAAXxQEAIcUBAHoVAQBmxQEAocUBAMPFAQDJxQEA+twBAPDFAQD/xQEAHMYBACfGAQBJxgEAf8YBALXGAQDwxgEAJscBAEjHAQBXxwEAiMcBAJDHAQBACQEASQkBAK3HAQBSCQEA98cBAFsJAQAByAEAZAkBAAvIAQBayAEAlcgBAHAJAQDQyAEA28gBACDJAQAuyQEAeMkBAIbJAQCUyQEAn8kBANDJAQAQygEAGMoBACDKAQBbygEAkcoBAJ3KAQB/FQEAqcoBALPKAQC+ygEA28oBABHLAQDQzQEA8s0BAP7NAQC90AEA7tABABrRAQBQ0QEAXdEBAH/RAQCh0QEAqtEBAPTRAQD+0QEAQ9IBAHnSAQCE0gEACdMBAB7TAQB4CQEAKNMBADLTAQBo0wEAqNMBALbTAQAK1AEAGdQBACjUAQB31AEAhxUBALfUAQDB1AEAx9QBAPPUAQAa1QEAK9UBADbVAQB71QEAwNUBAM/VAQDf1QEA8dUBAAHWAQAR1gEAHtYBACjWAQBe1gEAZ9YBAKfWAQC61gEAjBUBAMLWAQD41gEAH9cBAFXXAQB81wEAitcBAMDXAQAK2AEAVNgBAF/YAQCV2AEAmtgBALfYAQDU2AEA39gBAAbZAQAe2QEAVNkBAIrZAQCW2QEAvdkBAMjZAQD52QEAKtoBAHkgAQBR2gEAfdoBALPaAQDp2gEA89oBABDbAQBQ2wEAhtsBAJIVAQCe2wEAytsBAPHbAQAn3AEAZNwBAIbcAQCM3AEAl9wBAL7cAQAAAAAAX1MBAAEAAACANQAAeAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANEsAQABAAAAAAAAAJgDAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMgAAAAAAAAAzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARAAAAAAAAABIAAAAIAAAABgAAABMAAAAHAAAAAAAAAAAAAACuCgEAAQAAAJQ4AADQAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsQoBAAEAAAAAAAAA8AMAAAAAAAAAAAAAAAAAAAAAAAAAAAAANAAAAAAAAAA1AAAANgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAADcAAAAAAAAAAAAAABQAAAAAAAAAFQAAAAkAAAAHAAAAFgAAAAgAAAAAAAAAehUBAPrcAQD/xQEAfxUBABHLAQDQzQEAhxUBAPPUAQCn1gEAjBUBAN/YAQAG2QEAeSABAJIVAQCG3AEAl9wBAAAAAACXFQEAAQAAAFw5AAAoBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmxUBAAEAAAAAAAAASAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAA5AAAAOgAAAAoAAAA7AAAAPAAAAD0AAAA+AAAAPwAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQQAAAEIAAABDAAAAAAAAAAAAAAAAAAAAAAAAABcAAAAAAAAAGAAAAAsAAAAIAAAAGQAAAAkAAAAAAAAAZsUBAA8fAQD63AEA/8UBABzGAQAaHwEAIB8BACsfAQAyHwEAJ8YBAH/GAQA6HwEAQB8BAEsfAQAmxwEASMcBAJDHAQBSHwEA98cBAAvIAQCVyAEAXB8BACDJAQAuyQEAeMkBAGcfAQCGyQEAbx8BAHgfAQCGHwEAkB8BAFvKAQCZHwEAncoBAL7KAQDbygEAnx8BACLLAQBNywEAdssBAJnLAQDCywEA5csBAA7MAQAxzAEAWswBAH3MAQCmzAEAycwBAPLMAQAVzQEAPs0BAGHNAQCKzQEArc0BANDNAQCmHwEA8s0BALIfAQAa0QEAf9EBAEPSAQC/HwEAKNQBAMwfAQC31AEAx9QBANYfAQDz1AEAGtUBACvVAQDlHwEA9x8BADbVAQDA1QEAz9UBAN/VAQDx1QEAAdYBAAcgAQASIAEAHSABABHWAQCn1gEArNYBACIgAQArIAEANCABAEQgAQBLIAEA+NYBAB/XAQBV1wEAitcBAJrYAQC32AEAUyABAAbZAQBaIAEAltkBAGMgAQDI2QEAayABACraAQB5IAEAUdoBAH3aAQCAIAEAENsBAFDbAQCKIAEAhtsBAJ7bAQDx2wEAlCABAKIgAQAn3AEALtwBAGTcAQCG3AEAl9wBAL7cAQAAAAAAtCABAAEAAABkOgAAgAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALggAQABAAAAAAAAAKAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARAAAAEUAAAAAAAAAAAAAAEYAAABHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAAAAAABsAAAAMAAAACQAAABwAAAAKAAAAAAAAAEFCAABEZwEAQUkAAB5nAQBBUgAA8WYBAEFYAABZZwEAQiAAAJVpAQBCSQAApmkBAENCAADeZwEAQ08AAMxnAQBDWAAA62cBAEggAAAPaAEASEIAABloAQBISQAApWgBAEhYAAAoaAEASGIAAFloAQBIaQAAjGgBAEhyAAA+aAEASHgAAG9oAQBJIAAAt2kBAEtCAABwZwEAS0kAALhnAQBLUgAApGcBAEtYAACRZwEATkIAALdoAQBOSQAA/mgBAE5SAAAWaQEATlgAAOJoAQBQQQAAd2kBAFBCAAAzaQEAUEkAAGdpAQBQWAAAU2kBAFIgAABjawEAUyAAAIZpAQBaRAAA9GkBAAAAAAAAAAAAAQAAAAAAAABnKwEA/////xQ9AADYBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaysBAP////8AAAAA+AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAHMrAQABAAAA2EIAAAAAAAAQAAAAeysBAAEAAADYQgAAAAAAABEAAACDKwEAAQAAANhCAAAAAAAAEQAAAIwrAQABAAAA2EIAAAAAAAARAAAAlCsBAAEAAADYQgAAAAAAABMAAACcKwEAAQAAANxCAAAAAAAAFAAAAKQrAQABAAAA3EIAAAAAAAAVAAAArCsBAAEAAADcQgAAAAAAABUAAAC1KwEAAQAAANxCAAAAAAAAFQAAAL0rAQABAAAA3EIAAAAAAAAWAAAAxSsBAAEAAADgQgAAAAAAABcAAADOKwEAAQAAAOBCAAAAAAAAGAAAANcrAQABAAAA4EIAAAAAAAAYAAAA4SsBAAEAAADgQgAAAAAAABgAAADqKwEAAQAAAOBCAAAAAAAAGQAAAPMrAQABAAAA5EIAAAAAAAAZAAAA+isBAAEAAADkQgAAAAAAABoAAAAALAEAAQAAAOhCAAAAAAAACgAAAAksAQABAAAA7EIAAAAAAAALAAAAESwBAAEAAADsQgAAAAAAAAwAAAAZLAEAAQAAAOxCAAAAAAAADAAAACIsAQABAAAA7EIAAAAAAAAMAAAAKiwBAAEAAADsQgAAAAAAAA4AAAAyLAEAAQAAAOxCAAAAAAAADgAAADksAQABAAAA7EIAAAAAAAANAAAAQSwBAAEAAADsQgAAAAAAAAUAAABJLAEAAQAAAOxCAAAAAAAABgAAAFEsAQABAAAA7EIAAAAAAAAHAAAAWSwBAAEAAADsQgAAAAAAAAcAAABiLAEAAQAAAOxCAAAAAAAABwAAAGosAQABAAAA7EIAAAAAAAAJAAAAciwBAAEAAADsQgAAAAAAAAkAAAB5LAEAAQAAAOxCAAAAAAAACAAAAIEsAQABAAAA7EIAAAAAAAAAAAAAiSwBAAEAAADwQgAAAAAAAAEAAACSLAEAAQAAAPBCAAAAAAAAAgAAAJssAQABAAAA8EIAAAAAAAACAAAApSwBAAEAAADwQgAAAAAAAAIAAACuLAEAAQAAAPBCAAAAAAAABAAAALcsAQABAAAA8EIAAAAAAAAEAAAAvywBAAEAAADwQgAAAAAAAAMAAADILAEAAQAAAPBCAAAAAAAAEgAAANEsAQABAAAA2EIAAAAAAAAbAAAA2SwBAAEAAAD0QgAAAAAAABwAAADhLAEAAQAAAPRCAAAAAAAAHQAAAOksAQABAAAA9EIAAAAAAAAdAAAA8iwBAAEAAAD0QgAAAAAAAB0AAAD6LAEAAQAAAPRCAAAAAAAAHgAAAAItAQABAAAA+EIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0AAAAOAAAADwAAABAAAAARAAAAEgAAABMAAAAUAAAAFQAAAG0wAQAEQwAAAQAAACBDAAAAAAAAAAAAAEgAAABJAAAAAQAAAAAAAAAdSwEAAAAAABRDAAAcQwAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAAAAAABAAAAAQAAAAEAAAABAAAAAgAAAAIAAAABAAAAAgAAAAQAAAAYAQAAMAEAALAAAACXOAEAnDgBAKA4AQCnOAEAqzgBAAAAAAABAAAAAgAAAAMAAAAEAAAABQAAAAAAAAAdAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAfAAAAAAAAAAAAAAABAAAAQAAAANhDAADoQwAAAgAAAAQAAAD0QwAAAgAAAAgAAAACAAAABAAAAPxDAAAABAAACAAAAP////8AAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAANQAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAQAAAAAAAAACAAAAAAAAAAAAAAAAAAAA/////wAAAAAAAAAAAQAAAAAAAAACAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAwAAAAAAAAACAAAAAAAAAAAAAAAAAAAA/////wAAAAAAAAAAAwAAAAAAAAACAAAAAAAAAAAAAAAAAAAAHAAAAAAAAAAAAAAABAAAAAAAAAACAAAAAAAAAAkAAAALAAAACAAAAAoAAACARQAABEUAAGhFAAABAAAAAQAAAAUAAAAWAAAABgAAAEoAAAAhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAIAAAAAAAAAAIAAAAAAAAAAwAAAAIAAAADAAAABAAAAAAAAAAAAAAABAAAAAMAAAAJAAAACwAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAoAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIgAAAAsAAAAAAAAAAgAAAAAAAAAIAAAACAAAAAAAAAAAAAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAQAAAA/////wAAAAAAAAAAJAAAAAAAAAAAAAAAAgAAAAAAAAABAAAAAAAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAgAAAAMAAAABAAAAAQAAAAIAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAACAAAAAQAAAAQAAAAFAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAABgAAAAEAAAABAAAABwAAAAgAAAAJAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAEAAAABAAAACwAAAAEAAAAMAAAAAQAAAA0AAAAOAAAADwAAABAAAAARAAAAEgAAABMAAAAUAAAAFQAAABYAAAATAAAAEwAAABMAAAATAAAAFwAAABgAAAAZAAAAEwAAABoAAAAbAAAAHAAAAB0AAAATAAAAEwAAABMAAAATAAAAEwAAAAEAAAAeAAAAAQAAAAEAAAATAAAAAQAAAB8AAAAgAAAAIQAAACIAAAAjAAAAEwAAACQAAAAlAAAAJgAAABMAAAATAAAAEwAAABMAAAAnAAAAKAAAACkAAAATAAAAKgAAACsAAAAsAAAALQAAABMAAAATAAAAEwAAABMAAAATAAAAAQAAAAEAAAABAAAAAQAAAAEAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAAC4AAAATAAAAEwAAABMAAAAvAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAAwAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAAAAAAAABAAAAAQAAAAIAAAADAAAAAQAAAAQAAAABAAAABQAAAAEAAAAGAAAABwAAAAcAAAABAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAMAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAACAAAAAEXgBAO13AQBjQQEAHngBABZ4AQAkeAEAAAAAAGlFAQByRQEAeUUBAIdFAQCORQEAOngBAJVFAQCcRQEAAQAAAAgAAAD/////AAAAAAAAAAAlAAAAAAAAAAAAAAAAAAAAAAAAADpHAQAIAAAAAwAAAENHAQBHRwEACwAAAAYAAABcUwEAU0cBAAIAAAABAAAAVkcBAFpHAQAEAAAAAgAAAF9HAQBjRwEABAAAAAQAAABoRwEAbUcBAAUAAAAFAAAAc0cBAHdHAQAEAAAABwAAAHxHAQCARwEABQAAAAkAAACGRwEAikcBAAQAAAAKAAAAj0cBAJRHAQAEAAAADAAAAJlHAQBaTAEAAAAAAAEAAABiTAEAAQAAAAAAAAA4dwEAAQAAAAEAAAC11gEAAAAAAAAAAAAAAAAAAAAAAAAAAABGSwEAMQAAAAAAAAAAAAAAWXIBABAAAADw4gEAgAAAAD9LAQBAAAAAomUBABAAAABBSwEAQAAAAAAAAAAAAAAADUsBAAEAAAAUSwEAAgAAABlLAQADAAAAiWIBAAQAAADEYgEABQAAAB1LAQAGAAAAtdYBAAgAAAAhSwEAIQAAACVLAQAiAAAAKUsBACIAAAAtSwEAAQAAADJLAQAHAAAAOEsBACcAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAP////8AAAAAJgAAAAAAAAAAAAAAAAAAAAAAAACEUAEAi1ABAAAAAABZUwEAXFMBAF9TAQAAAAAAAAAAAAEAAAACAAAA/////xxTAQAiUwEAtdYBAAAAAABkAAAAZQAAAGYAAABkAAAACAAAAAgAAAAAAAAAAAAAACcAAAAMAAAAAAAAAAAAAAAAAAAACAAAAP////8AAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAiWIBAIxRAABABgAAAAAAAI1iAQCMUQAAcAYAAAAAAABbawEAjFEAAKAGAAAAAAAAlWIBAIxRAACgBgAAAAAAAJpiAQCMUQAA0AYAAAAAAAChYgEApFEAANAGAAAAAAAAp2IBAIxRAAAABwAAAAAAAKtiAQCMUQAAMAcAAAAAAAC11gEAjFEAAGAHAAAAAAAAtGIBAIxRAABgBwAAAAAAAL5iAQCMUQAAEAYAAAAAAADEYgEAjFEAAJAHAAAAAAAAzGIBAIxRAADABwAAAAAAANZiAQCMUQAA8AcAAAAAAADkYgEAjFEAACAIAAAAAAAA6mIBAIxRAABQCAAAAAAAAPNiAQCMUQAAgAgAAAAAAAD7YgEAjFEAALAIAAAAAAAABGMBAIxRAADgCAAAAAAAAAxjAQCMUQAAEAkAAAAAAAARYwEAjFEAAEAJAAAAAAAAFWMBAIxRAABwCQAAAAAAABxjAQCMUQAAoAkAAAAAAAAiYwEAjFEAANAJAAAAAAAALGMBALxRAAAACgAAAAAAADVjAQCMUQAAQAYAAAAAAAA6YwEAjFEAAEAGAAAAAAAARGMBAIxRAAAwCgAAAAAAAEtjAQCMUQAAYAoAAAAAAABYYwEAjFEAAJAKAAAAAAAAZmMBAIxRAADACgAAAAAAAHRjAQCMUQAA8AoAAAAAAACAYwEAjFEAACALAAAAAAAAjWMBAIxRAABQCwAAAAAAAJZjAQCMUQAAgAsAAAAAAACgYwEAjFEAALALAAAAAAAAqWMBAIxRAADgCwAAAAAAALFjAQCMUQAAEAwAAAAAAAC5YwEAjFEAAEAMAAAAAAAAwmMBAIxRAABwDAAAAAAAAMZjAQCMUQAAoAwAAAAAAADRYwEAjFEAANAMAAAAAAAA1WMBAIxRAAAADQAAAAAAAN9jAQCMUQAAMA0AAAAAAADoYwEAjFEAAGANAAAAAAAA8GMBAIxRAACQDQAAAAAAAP1jAQCMUQAAwA0AAAAAAAAJZAEAjFEAAPANAAAAAAAAFGQBAIxRAAAgDgAAAAAAACRkAQCMUQAAUA4AAAAAAAAyZAEAjFEAAIAOAAAAAAAAQWQBAIxRAACwDgAAAAAAAEtkAQCMUQAA4A4AAAAAAABUZAEAjFEAABAPAAAAAAAAXmQBAIxRAABADwAAAAAAAGhkAQCMUQAAcA8AAAAAAABvZAEAjFEAAKAPAAAAAAAAdmQBAIxRAADQDwAAAAAAAIBkAQDUUQAAAAAAAAAAAACHZAEA1FEAAAAAAAAAAAAAZWIBAOxRAAAAAAAAAAAAAI9kAQAEUgAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASwAAAEwAAAAXAAAABAAAAAIAAAAMAAAATQAAAEwAAAAXAAAABQAAAAAAAAANAAAASwAAAEwAAAAXAAAABAAAAAIAAAAMAAAATgAAAE8AAAAYAAAABgAAAAMAAAAOAAAAUAAAAFEAAAAXAAAABwAAAAAAAAAPAAAASwAAAEwAAAAXAAAACAAAAAIAAAAMAAAAEAAAABEAAAASAAAAEwAAAJFlAQCYZQEAAAAAAKBlAQCiZQEAKuMBAKRlAQAMAAAABAAAAAYAAAACAAAAAwAAAAEAAAAJAAAACAAAAAsAAAAMAAAADQAAAA4AAAAPAAAAEAAAABEAAAASAAAAFQAAABYAAAAXAAAAGAAAABkAAAAaAAAAGwAAABwAAAAfAAAAIAAAACEAAAAiAAAAIwAAACQAAAAlAAAAJgAAACkAAAAqAAAAKwAAACwAAAAtAAAALgAAAC8AAAAwAAAAMwAAADQAAAA1AAAANgAAADcAAAA4AAAAOQAAADoAAAA9AAAAPgAAAD8AAABAAAAAQQAAAEIAAABDAAAARAAAAEcAAABIAAAASQAAAEoAAABLAAAATAAAAE0AAABOAAAAUQAAAFIAAABTAAAAVAAAAFUAAABWAAAAVwAAAFgAAADxZgEAAWcBAA5nAQAAAAAAAAAAAAQAAAATZwEAAAAAAAAAAAAeZwEAAWcBAA5nAQAAAAAANWcBAAUAAAATZwEAAAAAAD1nAQBEZwEAAWcBAFRnAQAAAAAAAAAAAAYAAAATZwEAoXYBAAAAAABZZwEAAWcBAFRnAQAAAAAANWcBAAcAAAATZwEAoXYBAD1nAQBwZwEAfWcBAFRnAQAAAAAAAAAAAAoAAACLZwEAoXYBAAAAAACRZwEAfWcBAFRnAQAAAAAAPWcBAAsAAACLZwEAoXYBAD1nAQCkZwEAfWcBALJnAQAAAAAAAAAAAAgAAACLZwEAAAAAAAAAAAC4ZwEAfWcBALJnAQAAAAAAPWcBAAkAAACLZwEAAAAAAD1nAQDMZwEAzGcBAAAAAAAAAAAAAAAAAAwAAADUZwEAAAAAAAAAAADeZwEAzGcBAKF2AQAAAAAAAAAAAA4AAADUZwEAoXYBAAAAAADrZwEAzGcBAKF2AQAAAAAANWcBAA8AAADUZwEAoXYBAD1nAQD/ZwEAzGcBAAAAAAAAAAAANWcBAA0AAADUZwEAAAAAAD1nAQAPaAEAD2gBAAAAAAAAAAAAAAAAABAAAAATZwEAAAAAAAAAAAAZaAEAD2gBAKF2AQAAAAAAAAAAABIAAAATZwEAoXYBAAAAAAAoaAEAD2gBAKF2AQAAAAAANWcBABMAAAATZwEAoXYBAD1nAQA+aAEAD2gBAAAAAABPaAEAAAAAABQAAAATZwEAAAAAAAAAAABZaAEAD2gBAKF2AQBPaAEAAAAAABYAAAATZwEAoXYBAAAAAABvaAEAD2gBAKF2AQBPaAEANWcBABcAAAATZwEAoXYBAD1nAQCMaAEAD2gBAAAAAABPaAEANWcBABUAAAATZwEAAAAAAD1nAQClaAEAD2gBAAAAAAAAAAAANWcBABEAAAATZwEAAAAAAD1nAQC3aAEAzWgBAKF2AQAAAAAAAAAAABoAAACLZwEAoXYBAAAAAADiaAEAzWgBAKF2AQAAAAAAPWcBABsAAACLZwEAoXYBAD1nAQD+aAEAzWgBAAAAAAAAAAAAPWcBABkAAACLZwEAAAAAAD1nAQAWaQEAzWgBAC1pAQAAAAAAAAAAABgAAACLZwEAAAAAAAAAAAAzaQEAQWkBAKF2AQAAAAAAAAAAAB4AAACLZwEAoXYBAAAAAABTaQEAQWkBAKF2AQAAAAAAPWcBAB8AAACLZwEAoXYBAD1nAQBnaQEAQWkBAAAAAAAAAAAAPWcBAB0AAACLZwEAAAAAAD1nAQB3aQEAQWkBAC1pAQAAAAAAAAAAABwAAACLZwEAAAAAAAAAAACGaQEAhmkBAAAAAAAAAAAAAAAAACAAAACNaQEAAAAAAAAAAACVaQEAoGkBAKF2AQAAAAAAAAAAAAIAAACLZwEAoXYBAAAAAACmaQEAoGkBAKF2AQAAAAAAPWcBAAMAAACLZwEAoXYBAD1nAQC3aQEAoGkBAAAAAAAAAAAAPWcBAAEAAACLZwEAAAAAAD1nAQBjawEAoGkBAAAAAAAAAAAAAAAAAAAAAACLZwEAAAAAAAAAAADEaQEA3mkBAO1pAQAAAAAAPWcBACEAAACLZwEAAAAAAD1nAQD0aQEAAWoBAAAAAAAAAAAAAAAAACIAAACNaQEAAAAAAAAAAAAIAAAA/////wAAAAAAAAAAKQAAAAAAAAAAAAAAAAAAAAAAAAC/awEAxgAAAMVrAQDBAAAAzGsBAMIAAADSawEAwAAAANlrAQCRAwAA32sBAMUAAADlawEAwwAAAOxrAQDEAAAA8WsBAJIDAAD2awEAxwAAAP1rAQCnAwAAAWwBACEgAAAIbAEAlAMAAA5sAQDQAAAAEmwBAMkAAAAZbAEAygAAAB9sAQDIAAAAJmwBAJUDAAAubAEAlwMAADJsAQDLAAAAN2wBAJMDAAA9bAEAzQAAAERsAQDOAAAASmwBAMwAAABRbAEAmQMAAFZsAQDPAAAAW2wBAJoDAABhbAEAmwMAAGhsAQCcAwAAa2wBANEAAABybAEAnQMAAHVsAQBSAQAAe2wBANMAAACCbAEA1AAAAIhsAQDSAAAAj2wBAKkDAACVbAEAnwMAAJ1sAQDYAAAApGwBANUAAACrbAEA1gAAALBsAQCmAwAAtGwBAKADAAC3bAEAMyAAAL1sAQCoAwAAwWwBAKEDAADFbAEAYAEAAMxsAQCjAwAA0mwBAN4AAADYbAEApAMAANxsAQCYAwAA4mwBANoAAADpbAEA2wAAAO9sAQDZAAAA9mwBAKUDAAD+bAEA3AAAAANtAQCeAwAABm0BAN0AAAANbQEAeAEAABJtAQCWAwAAF20BAOEAAAAebQEA4gAAACRtAQC0AAAAKm0BAOYAAAAwbQEA4AAAADdtAQA1IQAAP20BALEDAABFbQEAJgAAAEltAQAnIgAATW0BACAiAABRbQEA5QAAAFdtAQBIIgAAXW0BAOMAAABkbQEA5AAAAGltAQAeIAAAb20BALIDAAB0bQEApgAAAHttAQAiIAAAgG0BACkiAACEbQEA5wAAAIttAQC4AAAAkW0BAKIAAACWbQEAxwMAAJptAQDGAgAAn20BAGMmAAClbQEARSIAAKptAQCpAAAAr20BALUhAAC1bQEAKiIAALltAQCkAAAAwG0BANMhAADFbQEAICAAAMxtAQCTIQAA0W0BALAAAADVbQEAtAMAANttAQBmJgAA4W0BAPcAAADobQEA6QAAAO9tAQDqAAAA9W0BAOgAAAD8bQEABSIAAAJuAQADIAAAB24BAAIgAAAMbgEAtQMAABRuAQBhIgAAGm4BALcDAAAebgEA8AAAACJuAQDrAAAAJ24BAKwgAAAsbgEAAyIAADJuAQCSAQAAN24BAAAiAAA+bgEAvQAAAEVuAQC8AAAATG4BAL4AAABTbgEARCAAAFluAQCzAwAAX24BAGUiAABibgEAPgAAAGVuAQDUIQAAam4BAJQhAABvbgEAZSYAAHZuAQAmIAAAfW4BAO0AAACEbgEA7gAAAIpuAQChAAAAkG4BAOwAAACXbgEAESEAAJ1uAQAeIgAAo24BACsiAACnbgEAuQMAAKxuAQC/AAAAs24BAAgiAAC4bgEA7wAAAL1uAQC6AwAAw24BANAhAADIbgEAuwMAAM9uAQApIwAA1G4BAKsAAADabgEAkCEAAN9uAQAIIwAA5W4BABwgAADrbgEAZCIAAO5uAQAKIwAA9W4BABciAAD8bgEAyiUAAABvAQAOIAAABG8BADkgAAALbwEAGCAAABFvAQA8AAAAFG8BAK8AAAAZbwEAFCAAAB9vAQC1AAAAJW8BALcAAADRdwEAEiIAACxvAQC8AwAAL28BAAciAAA1bwEAoAAAADpvAQATIAAAQG8BAGAiAABDbwEACyIAAEZvAQCsAAAASm8BAAkiAABQbwEAhCIAAFVvAQDxAAAAXG8BAL0DAABfbwEA8wAAAGZvAQD0AAAAbG8BAFMBAABybwEA8gAAAHlvAQA+IAAAf28BAMkDAACFbwEAvwMAAI1vAQCVIgAAk28BACgiAACWbwEAqgAAAJtvAQC6AAAAoG8BAPgAAACnbwEA9QAAAK5vAQCXIgAAtW8BAPYAAAC6bwEAtgAAAL9vAQACIgAAxG8BADAgAADLbwEApSIAANBvAQDGAwAA1G8BAMADAADXbwEA1gMAANtvAQCxAAAA4m8BAKMAAADobwEAMiAAAO5vAQAPIgAA828BAB0iAAD4bwEAyAMAAPxvAQAiAAAAAXABANIhAAAGcAEAGiIAAAxwAQAqIwAAEXABALsAAAAXcAEAkiEAABxwAQAJIwAAInABAB0gAAAocAEAHCEAAC1wAQCuAAAAMXABAAsjAAA4cAEAwQMAADxwAQAPIAAAQHABADogAABHcAEAGSAAAE1wAQAaIAAAU3ABAGEBAABacAEAxSIAAF9wAQCnAAAAZHABAK0AAABocAEAwwMAAG5wAQDCAwAAdXABADwiAAB5cAEAYCYAAIBwAQCCIgAAhHABAIYiAACJcAEAESIAAI1wAQCDIgAAkXABALkAAACWcAEAsgAAAJtwAQCzAAAAoHABAIciAAClcAEA3wAAAKtwAQDEAwAAr3ABADQiAAC2cAEAuAMAALxwAQDRAwAAxXABAAkgAADMcAEA/gAAANJwAQDcAgAA2HABANcAAADecAEAIiEAAORwAQDRIQAA6XABAPoAAADwcAEAkSEAAPVwAQD7AAAA+3ABAPkAAAACcQEAqAAAAAZxAQDSAwAADHEBAMUDAAAUcQEA/AAAABlxAQAYIQAAIHEBAL4DAAAjcQEA/QAAACpxAQClAAAALnEBAP8AAAAzcQEAtgMAADhxAQANIAAAPHEBAAwgAAAFAAAABgAAAAEBAAAIAAAACAAAAAAAAAAAAAAAKgAAAA0AAAAAAAAAAAAAAAAAAAAIAAAAEAAAAAAAAAAAAAAAKwAAAA4AAAAAAAAAAAAAAAAAAACRdwEABwAAAJN3AQAIAAAAmHcBAAgAAACgdwEACQAAAKZ3AQAJAAAAr3cBAAoAAACydwEACgAAALh3AQALAAAAvXcBAAsAAADFdwEADAAAAMp3AQAMAAAA0XcBAA0AAADXdwEADQAAAON3AQAOAAAAUgAAACwAAAAtAAAAFAAAAC4AAABTAAAALwAAABUAAAAwAAAACAAAAAQAAAD/////AAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAAO3kBAFVdyX/Jf/8ARnkBALst1L6u1P8AUXkBABR3/f3Ahv8AXHkBAFVdyX/Jf/8AZ3kBALst1L6u1P8AcnkBABR3/f3Ahv8AfXkBACpm////mf8AiHkBAFVdyX/Jf/8Ak3kBALst1L6u1P8AnnkBABR3/f3Ahv8AqXkBACpm////mf8AtHkBAJetsDhssP8Av3kBAFVdyX/Jf/8AynkBALst1L6u1P8A1XkBABR3/f3Ahv8A4HkBACpm////mf8A63kBAJetsDhssP8A9nkBAOj88PACf/8AAXoBAFVdyX/Jf/8ADHoBALst1L6u1P8AF3oBABR3/f3Ahv8AInoBACpm////mf8ALXoBAJetsDhssP8AOHoBAOj88PACf/8AQ3oBABHgv79bF/8ATnoBAFVdyX/Jf/8AWXoBALst1L6u1P8AZHoBABR3/f3Ahv8Ab3oBACpm////mf8AenoBAJetsDhssP8AhXoBAOj88PACf/8AkHoBABHgv79bF/8Am3oBAAAAZmZmZv8ApnoBAJMZ997r9/8AsHoBAI5L4Z7K4f8AunoBAJG8vTGCvf8AxHoBAJ8Q/+/z//8AznoBAI8u573X5/8A2HoBAI9/1muu1v8A4noBAJPQtSFxtf8A7HoBAJ8Q/+/z//8A9noBAI8u573X5/8AAHsBAI9/1muu1v8ACnsBAJG8vTGCvf8AFHsBAJXxnAhRnP8AHnsBAJ8Q/+/z//8AKHsBAJQr78bb7/8AMnsBAI5L4Z7K4f8APHsBAI9/1muu1v8ARnsBAJG8vTGCvf8AUHsBAJXxnAhRnP8AWnsBAJ8Q/+/z//8AZHsBAJQr78bb7/8AbnsBAI5L4Z7K4f8AeHsBAI9/1muu1v8AgnsBAJCpxkKSxv8AjHsBAJPQtSFxtf8AlnsBAJfxlAhFlP8AoHsBAJQI//f7//8AqnsBAJMZ997r9/8AtHsBAJQr78bb7/8AvnsBAI5L4Z7K4f8AyHsBAI9/1muu1v8A0nsBAJCpxkKSxv8A3HsBAJPQtSFxtf8A5nsBAJfxlAhFlP8A8HsBAJQI//f7//8A+nsBAJMZ997r9/8ABHwBAJQr78bb7/8ADnwBAI5L4Z7K4f8AGHwBAI9/1muu1v8AInwBAJCpxkKSxv8ALHwBAJPQtSFxtf8ANnwBAJXxnAhRnP8AQHwBAJjrawgwa/8ASnwBABfvVFQwBf8AVHwBAHf/PAA8MP8AX3wBABfsjIxRCv8AaXwBABjCv7+BLf8Ac3wBAB1w39/Cff8AfXwBAB409vbow/8Ah3wBAHkm6sfq5f8AkXwBAHhfzYDNwf8Am3wBAHyllzWXj/8ApXwBAHz8ZgFmXv8Ar3wBABfvVFQwBf8AuXwBAHz8ZgFmXv8AxHwBAHf/PAA8MP8Az3wBABfsjIxRCv8A2XwBABjCv7+BLf8A43wBAB1w39/Cff8A7XwBAB409vbow/8A93wBAAAA9fX19f8AAX0BAHkm6sfq5f8AC30BAHhfzYDNwf8AFX0BAHyllzWXj/8AH30BAByH2NizZf8AKH0BAAAA9fX19f8AMX0BAHt/tFq0rP8AOn0BABXXpqZhGv8AQ30BAB1w39/Cff8ATH0BAHhfzYDNwf8AVX0BAHn9hQGFcf8AXn0BABXXpqZhGv8AZ30BAB1w39/Cff8AcH0BAAAA9fX19f8AeX0BAHhfzYDNwf8Agn0BAHn9hQGFcf8Ai30BABfsjIxRCv8AlH0BAByH2NizZf8AnX0BAB409vbow/8Apn0BAHkm6sfq5f8Ar30BAHt/tFq0rP8AuH0BAHz8ZgFmXv8AwX0BABfsjIxRCv8Ayn0BAByH2NizZf8A030BAB409vbow/8A3H0BAAAA9fX19f8A5X0BAHkm6sfq5f8A7n0BAHt/tFq0rP8A930BAHz8ZgFmXv8AAH4BABfsjIxRCv8ACX4BABjCv7+BLf8AEn4BAB1w39/Cff8AG34BAB409vbow/8AJH4BAHkm6sfq5f8ALX4BAHhfzYDNwf8ANn4BAHyllzWXj/8AP34BAHz8ZgFmXv8ASH4BABfsjIxRCv8AUX4BABjCv7+BLf8AWn4BAB1w39/Cff8AY34BAB409vbow/8AbH4BAAAA9fX19f8AdX4BAHkm6sfq5f8Afn4BAHhfzYDNwf8Ah34BAHyllzWXj/8AkH4BAHz8ZgFmXv8AmX4BAIcU+eX1+f8Aon4BAHVK2JnYyf8Aq34BAGe5oiyiX/8AtH4BAIgO++34+/8AvX4BAH824rLi4v8Axn4BAHF4wmbCpP8Az34BAGK+iyOLRf8A2H4BAIgO++34+/8A4X4BAH824rLi4v8A6n4BAHF4wmbCpP8A834BAGe5oiyiX/8A/H4BAGb/bQBtLP8ABX8BAIgO++34+/8ADn8BAHci7Mzs5v8AF38BAHVK2JnYyf8AIH8BAHF4wmbCpP8AKX8BAGe5oiyiX/8AMn8BAGb/bQBtLP8AO38BAIgO++34+/8ARH8BAHci7Mzs5v8ATX8BAHVK2JnYyf8AVn8BAHF4wmbCpP8AX38BAGmfrkGudv8AaH8BAGK+iyOLRf8AcX8BAGb/WABYJP8Aen8BAIYG/ff8/f8Ag38BAIcU+eX1+f8AjH8BAHci7Mzs5v8AlX8BAHVK2JnYyf8Ann8BAHF4wmbCpP8Ap38BAGmfrkGudv8AsH8BAGK+iyOLRf8AuX8BAGb/WABYJP8Awn8BAIYG/ff8/f8Ay38BAIcU+eX1+f8A1H8BAHci7Mzs5v8A3X8BAHVK2JnYyf8A5n8BAHF4wmbCpP8A738BAGmfrkGudv8A+H8BAGK+iyOLRf8AAYABAGb/bQBtLP8ACoABAGX/RABEG/8AE4ABAJAU9ODs9P8AHIABAJRG2p682v8AJYABAMR7p4hWp/8ALoABAIgO++34+/8AN4ABAJI147PN4/8AQIABAKJKxoyWxv8ASYABAMqVnYhBnf8AUoABAIgO++34+/8AW4ABAJI147PN4/8AZIABAKJKxoyWxv8AbYABAMR7p4hWp/8AdoABANbhgYEPfP8Af4ABAIgO++34+/8AiIABAJQr5r/T5v8AkYABAJRG2p682v8AmoABAKJKxoyWxv8Ao4ABAMR7p4hWp/8ArIABANbhgYEPfP8AtYABAIgO++34+/8AvoABAJQr5r/T5v8Ax4ABAJRG2p682v8A0IABAKJKxoyWxv8A2YABAL5ksYxrsf8A4oABAMqVnYhBnf8A64ABANX8bm4Ba/8A9IABAIYG/ff8/f8A/YABAJAU9ODs9P8ABoEBAJQr5r/T5v8AD4EBAJRG2p682v8AGIEBAKJKxoyWxv8AIYEBAL5ksYxrsf8AKoEBAMqVnYhBnf8AM4EBANX8bm4Ba/8APIEBAIYG/ff8/f8ARYEBAJAU9ODs9P8AToEBAJQr5r/T5v8AV4EBAJRG2p682v8AYIEBAKJKxoyWxv8AaYEBAL5ksYxrsf8AcoEBAMqVnYhBnf8Ae4EBANbhgYEPfP8AhIEBANX/TU0AS/8AjYEBAHLTnhued/8Al4EBABL82dlfAv8AoYEBAK1fs3Vws/8Aq4EBAHLTnhued/8AtYEBABL82dlfAv8Av4EBAK1fs3Vws/8AyYEBAOnR5+cpiv8A04EBAHLTnhued/8A3YEBABL82dlfAv8A54EBAK1fs3Vws/8A8YEBAOnR5+cpiv8A+4EBAD7QpmamHv8ABYIBAHLTnhued/8AD4IBABL82dlfAv8AGYIBAK1fs3Vws/8AI4IBAOnR5+cpiv8ALYIBAD7QpmamHv8AN4IBAB/85uarAv8AQYIBAHLTnhued/8AS4IBABL82dlfAv8AVYIBAK1fs3Vws/8AX4IBAOnR5+cpiv8AaYIBAD7QpmamHv8Ac4IBAB/85uarAv8AfYIBABvSpqZ2Hf8Ah4IBAHLTnhued/8AkYIBABL82dlfAv8Am4IBAK1fs3Vws/8ApYIBAOnR5+cpiv8Ar4IBAD7QpmamHv8AuYIBAB/85uarAv8Aw4IBABvSpqZ2Hf8AzYIBAAAAZmZmZv8A14IBAEwZ8+Dz2/8A4IIBAF893ajdtf8A6YIBAIyqykOiyv8A8oIBAEER+fD56P8A+4IBAFcu5LrkvP8ABIMBAHtlzHvMxP8ADYMBAI3FviuMvv8AFoMBAEER+fD56P8AH4MBAFcu5LrkvP8AKIMBAHtlzHvMxP8AMYMBAIyqykOiyv8AOoMBAJHzrAhorP8AQ4MBAEER+fD56P8ATIMBAE0p68zrxf8AVYMBAF893ajdtf8AXoMBAHtlzHvMxP8AZ4MBAIyqykOiyv8AcIMBAJHzrAhorP8AeYMBAEER+fD56P8AgoMBAE0p68zrxf8Ai4MBAF893ajdtf8AlIMBAHtlzHvMxP8AnYMBAImg006z0/8ApoMBAI3FviuMvv8Ar4MBAJPynghYnv8AuIMBADwM/Pf88P8AwYMBAEwZ8+Dz2/8AyoMBAE0p68zrxf8A04MBAF893ajdtf8A3IMBAHtlzHvMxP8A5YMBAImg006z0/8A7oMBAI3FviuMvv8A94MBAJPynghYnv8AAIQBADwM/Pf88P8ACYQBAEwZ8+Dz2/8AEoQBAE0p68zrxf8AG4QBAF893ajdtf8AJIQBAHtlzHvMxP8ALYQBAImg006z0/8ANoQBAI3FviuMvv8AP4QBAJHzrAhorP8ASIQBAJbvgQhAgf8AUYQBAEoV9eX14P8AXIQBAFBI2aHZm/8AZ4QBAGKyozGjVP8AcoQBAEkP+O346f8AfYQBAE425Lrks/8AiIQBAFZoxHTEdv8Ak4QBAGK+iyOLRf8AnoQBAEkP+O346f8AqYQBAE425Lrks/8AtIQBAFZoxHTEdv8Av4QBAGKyozGjVP8AyoQBAGb/bQBtLP8A1YQBAEkP+O346f8A4IQBAE0s6cfpwP8A64QBAFBI2aHZm/8A9oQBAFZoxHTEdv8AAYUBAGKyozGjVP8ADIUBAGb/bQBtLP8AF4UBAEkP+O346f8AIoUBAE0s6cfpwP8ALYUBAFBI2aHZm/8AOIUBAFZoxHTEdv8AQ4UBAGCeq0GrXf8AToUBAGK+iyOLRf8AWYUBAGz/WgBaMv8AZIUBAEgH/Pf89f8Ab4UBAEoV9eX14P8AeoUBAE0s6cfpwP8AhYUBAFBI2aHZm/8AkIUBAFZoxHTEdv8Am4UBAGCeq0GrXf8ApoUBAGK+iyOLRf8AsYUBAGz/WgBaMv8AvIUBAEgH/Pf89f8Ax4UBAEoV9eX14P8A0oUBAE0s6cfpwP8A3YUBAFBI2aHZm/8A6IUBAFZoxHTEdv8A84UBAGCeq0GrXf8A/oUBAGK+iyOLRf8ACYYBAGb/bQBtLP8AFIYBAGX/RABEG/8AH4YBAAAA8PDw8P8AKYYBAAAAvb29vf8AM4YBAAAAY2NjY/8APYYBAAAA9/f39/8AR4YBAAAAzMzMzP8AUYYBAAAAlpaWlv8AW4YBAAAAUlJSUv8AZYYBAAAA9/f39/8Ab4YBAAAAzMzMzP8AeYYBAAAAlpaWlv8Ag4YBAAAAY2NjY/8AjYYBAAAAJSUlJf8Al4YBAAAA9/f39/8AoYYBAAAA2dnZ2f8Aq4YBAAAAvb29vf8AtYYBAAAAlpaWlv8Av4YBAAAAY2NjY/8AyYYBAAAAJSUlJf8A04YBAAAA9/f39/8A3YYBAAAA2dnZ2f8A54YBAAAAvb29vf8A8YYBAAAAlpaWlv8A+4YBAAAAc3Nzc/8ABYcBAAAAUlJSUv8AD4cBAAAAJSUlJf8AGYcBAAAA//////8AI4cBAAAA8PDw8P8ALYcBAAAA2dnZ2f8AN4cBAAAAvb29vf8AQYcBAAAAlpaWlv8AS4cBAAAAc3Nzc/8AVYcBAAAAUlJSUv8AX4cBAAAAJSUlJf8AaYcBAAAA//////8Ac4cBAAAA8PDw8P8AfYcBAAAA2dnZ2f8Ah4cBAAAAvb29vf8AkYcBAAAAlpaWlv8Am4cBAAAAc3Nzc/8ApYcBAAAAUlJSUv8Ar4cBAAAAJSUlJf8AuYcBAAAAAAAAAP8Aw4cBABUw/v7mzv8Az4cBABOT/f2ua/8A24cBAA7w5uZVDf8A54cBABMg/v7t3v8A84cBABR4/f2+hf8A/4cBABHC/f2NPP8AC4gBAA392dlHAf8AF4gBABMg/v7t3v8AI4gBABR4/f2+hf8AL4gBABHC/f2NPP8AO4gBAA7w5uZVDf8AR4gBAA36pqY2A/8AU4gBABMg/v7t3v8AX4gBABVb/f3Qov8Aa4gBABOT/f2ua/8Ad4gBABHC/f2NPP8Ag4gBAA7w5uZVDf8Aj4gBAA36pqY2A/8Am4gBABMg/v7t3v8Ap4gBABVb/f3Qov8As4gBABOT/f2ua/8Av4gBABHC/f2NPP8Ay4gBABDq8fFpE/8A14gBAA392dlIAf8A44gBAAz3jIwtBP8A74gBABUU///16/8A+4gBABUw/v7mzv8AB4kBABVb/f3Qov8AE4kBABOT/f2ua/8AH4kBABHC/f2NPP8AK4kBABDq8fFpE/8AN4kBAA392dlIAf8AQ4kBAAz3jIwtBP8AT4kBABUU///16/8AW4kBABUw/v7mzv8AZ4kBABVb/f3Qov8Ac4kBABOT/f2ua/8Af4kBABHC/f2NPP8Ai4kBABDq8fFpE/8Al4kBAA392dlIAf8Ao4kBAA36pqY2A/8Ar4kBAAz2f38nBP8Au4kBABk2/v7oyP8AxIkBABN5/f27hP8AzYkBAAXF4+NKM/8A1okBABol/v7w2f8A34kBABhz/f3Miv8A6IkBAA2k/PyNWf8A8YkBAAPa19cwH/8A+okBABol/v7w2f8AA4oBABhz/f3Miv8ADIoBAA2k/PyNWf8AFYoBAAXF4+NKM/8AHooBAAD/s7MAAP8AJ4oBABol/v7w2f8AMIoBABhf/f3Unv8AOYoBABN5/f27hP8AQooBAA2k/PyNWf8AS4oBAAXF4+NKM/8AVIoBAAD/s7MAAP8AXYoBABol/v7w2f8AZooBABhf/f3Unv8Ab4oBABN5/f27hP8AeIoBAA2k/PyNWf8AgYoBAAey7+9lSP8AiooBAAPa19cwH/8Ak4oBAAD/mZkAAP8AnIoBABgS///37P8ApYoBABk2/v7oyP8ArooBABhf/f3Unv8At4oBABN5/f27hP8AwIoBAA2k/PyNWf8AyYoBAAey7+9lSP8A0ooBAAPa19cwH/8A24oBAAD/mZkAAP8A5IoBABgS///37P8A7YoBABk2/v7oyP8A9ooBABhf/f3Unv8A/4oBABN5/f27hP8ACIsBAA2k/PyNWf8AEYsBAAey7+9lSP8AGosBAAPa19cwH/8AI4sBAAD/s7MAAP8ALIsBAAD/f38AAP8ANYsBAI5E46bO4/8AQYsBAL6Zmmo9mv8ATosBAJDTtB94tP8AWosBAEFh37Lfiv8AZosBAFK4oDOgLP8AcosBAABj+/uamf8AfosBAP7h4+MaHP8AiosBABeP/f2/b/8AlosBABX///9/AP8AoosBAMYq1sqy1v8ArosBAI5E46bO4/8AuosBAL6Zmmo9mv8Ax4sBACpm////mf8A1IsBAJDTtB94tP8A4IsBAEFh37Lfiv8A7IsBAFK4oDOgLP8A+IsBAABj+/uamf8ABIwBAP7h4+MaHP8AEIwBABeP/f2/b/8AHIwBABX///9/AP8AKIwBAMYq1sqy1v8ANIwBAI5E46bO4/8AQIwBAL6Zmmo9mv8ATYwBACpm////mf8AWowBAA/FsbFZKP8AZ4wBAJDTtB94tP8Ac4wBAEFh37Lfiv8Af4wBAFK4oDOgLP8Ai4wBAABj+/uamf8Al4wBAP7h4+MaHP8Ao4wBABeP/f2/b/8Ar4wBABX///9/AP8Au4wBAMYq1sqy1v8Ax4wBAI5E46bO4/8A0owBAJDTtB94tP8A3YwBAEFh37Lfiv8A6IwBAI5E46bO4/8A84wBAJDTtB94tP8A/owBAEFh37Lfiv8ACY0BAFK4oDOgLP8AFI0BAI5E46bO4/8AH40BAJDTtB94tP8AKo0BAEFh37Lfiv8ANY0BAFK4oDOgLP8AQI0BAABj+/uamf8AS40BAI5E46bO4/8AVo0BAJDTtB94tP8AYY0BAEFh37Lfiv8AbI0BAFK4oDOgLP8Ad40BAABj+/uamf8Ago0BAP7h4+MaHP8AjY0BAI5E46bO4/8AmI0BAJDTtB94tP8Ao40BAEFh37Lfiv8Aro0BAFK4oDOgLP8AuY0BAABj+/uamf8AxI0BAP7h4+MaHP8Az40BABeP/f2/b/8A2o0BAI5E46bO4/8A5Y0BAJDTtB94tP8A8I0BAEFh37Lfiv8A+40BAFK4oDOgLP8ABo4BAABj+/uamf8AEY4BAP7h4+MaHP8AHI4BABeP/f2/b/8AJ44BABX///9/AP8AMo4BAI5E46bO4/8APY4BAJDTtB94tP8ASI4BAEFh37Lfiv8AU44BAFK4oDOgLP8AXo4BAABj+/uamf8AaY4BAP7h4+MaHP8AdI4BABeP/f2/b/8Af44BABX///9/AP8Aio4BAMYq1sqy1v8AlY4BAANO+/u0rv8AoY4BAJI147PN4/8ArY4BAE0p68zrxf8AuY4BAANO+/u0rv8AxY4BAJI147PN4/8A0Y4BAE0p68zrxf8A3Y4BAMob5N7L5P8A6Y4BAANO+/u0rv8A9Y4BAJI147PN4/8AAY8BAE0p68zrxf8ADY8BAMob5N7L5P8AGY8BABhY/v7Zpv8AJY8BAANO+/u0rv8AMY8BAJI147PN4/8APY8BAE0p68zrxf8ASY8BAMob5N7L5P8AVY8BABhY/v7Zpv8AYY8BACoy////zP8AbY8BAANO+/u0rv8AeY8BAJI147PN4/8AhY8BAE0p68zrxf8AkY8BAMob5N7L5P8AnY8BABhY/v7Zpv8AqY8BACoy////zP8AtY8BABws5eXYvf8AwY8BAANO+/u0rv8AzY8BAJI147PN4/8A2Y8BAE0p68zrxf8A5Y8BAMob5N7L5P8A8Y8BABhY/v7Zpv8A/Y8BACoy////zP8ACZABABws5eXYvf8AFZABAOkj/f3a7P8AIZABAANO+/u0rv8ALZABAJI147PN4/8AOZABAE0p68zrxf8ARZABAMob5N7L5P8AUZABABhY/v7Zpv8AXZABACoy////zP8AaZABABws5eXYvf8AdZABAOkj/f3a7P8AgZABAAAA8vLy8v8AjZABAGw14rPizf8AmZABABFR/f3NrP8ApZABAJsf6MvV6P8AsZABAGw14rPizf8AvZABABFR/f3NrP8AyZABAJsf6MvV6P8A1ZABAOQr9PTK5P8A4ZABAGw14rPizf8A7ZABABFR/f3NrP8A+ZABAJsf6MvV6P8ABZEBAOQr9PTK5P8AEZEBADgt9eb1yf8AHZEBAGw14rPizf8AKZEBABFR/f3NrP8ANZEBAJsf6MvV6P8AQZEBAOQr9PTK5P8ATZEBADgt9eb1yf8AWZEBACNR///yrv8AZZEBAGw14rPizf8AcZEBABFR/f3NrP8AfZEBAJsf6MvV6P8AiZEBAOQr9PTK5P8AlZEBADgt9eb1yf8AoZEBACNR///yrv8ArZEBABkn8fHizP8AuZEBAGw14rPizf8AxZEBABFR/f3NrP8A0ZEBAJsf6MvV6P8A3ZEBAOQr9PTK5P8A6ZEBADgt9eb1yf8A9ZEBACNR///yrv8AAZIBABkn8fHizP8ADZIBAAAAzMzMzP8AGZIBAOb9jo4BUv8AI5IBAE2/ZCdkGf8ALpIBAObcxcUbff8AOJIBAOh23t53rv8AQpIBAOU+8fG22v8ATJIBAOkd/f3g7/8AVpIBADsm9eb10P8AYJIBAD1n4bjhhv8AapIBAD+mvH+8Qf8AdJIBAETFkk2SIf8AfpIBAOb9jo4BUv8AiJIBAETFkk2SIf8Ak5IBAE2/ZCdkGf8AnpIBAObcxcUbff8AqJIBAOh23t53rv8AspIBAOU+8fG22v8AvJIBAOkd/f3g7/8AxpIBAAAA9/f39/8A0JIBADsm9eb10P8A2pIBAD1n4bjhhv8A5JIBAD+mvH+8Qf8A7pIBAOdM6emjyf8A95IBAAAA9/f39/8AAJMBAD+B16HXav8ACZMBAOTc0NAci/8AEpMBAOU+8fG22v8AG5MBAD1n4bjhhv8AJJMBAEjGrE2sJv8ALZMBAOTc0NAci/8ANpMBAOU+8fG22v8AP5MBAAAA9/f39/8ASJMBAD1n4bjhhv8AUZMBAEjGrE2sJv8AWpMBAObcxcUbff8AY5MBAOdM6emjyf8AbJMBAOkd/f3g7/8AdZMBADsm9eb10P8AfpMBAD+B16HXav8Ah5MBAETFkk2SIf8AkJMBAObcxcUbff8AmZMBAOdM6emjyf8AopMBAOkd/f3g7/8Aq5MBAAAA9/f39/8AtJMBADsm9eb10P8AvZMBAD+B16HXav8AxpMBAETFkk2SIf8Az5MBAObcxcUbff8A2JMBAOh23t53rv8A4ZMBAOU+8fG22v8A6pMBAOkd/f3g7/8A85MBADsm9eb10P8A/JMBAD1n4bjhhv8ABZQBAD+mvH+8Qf8ADpQBAETFkk2SIf8AF5QBAObcxcUbff8AIJQBAOh23t53rv8AKZQBAOU+8fG22v8AMpQBAOkd/f3g7/8AO5QBAAAA9/f39/8ARJQBADsm9eb10P8ATZQBAD1n4bjhhv8AVpQBAD+mvH+8Qf8AX5QBAETFkk2SIf8AaJQBAM7/S0AAS/8AcpQBAGX/RABEG/8AfZQBAM6tg3Yqg/8Ah5QBAMdXq5lwq/8AkZQBAMczz8Klz/8Am5QBANIV6OfU6P8ApZQBAEwe8Nnw0/8Ar5QBAFBE26bboP8AuZQBAFh7rlquYf8Aw5QBAGHFeBt4N/8AzZQBAM7/S0AAS/8A15QBAGHFeBt4N/8A4pQBAGX/RABEG/8A7ZQBAM6tg3Yqg/8A95QBAMdXq5lwq/8AAZUBAMczz8Klz/8AC5UBANIV6OfU6P8AFZUBAAAA9/f39/8AH5UBAEwe8Nnw0/8AKZUBAFBE26bboP8AM5UBAFh7rlquYf8APZUBAMRGw6+Nw/8ARpUBAAAA9/f39/8AT5UBAFJav3+/e/8AWJUBAMmolHsylP8AYZUBAMczz8Klz/8AapUBAFBE26bboP8Ac5UBAGb/iACIN/8AfJUBAMmolHsylP8AhZUBAMczz8Klz/8AjpUBAAAA9/f39/8Al5UBAFBE26bboP8AoJUBAGb/iACIN/8AqZUBAM6tg3Yqg/8AspUBAMRGw6+Nw/8Au5UBANIV6OfU6P8AxJUBAEwe8Nnw0/8AzZUBAFJav3+/e/8A1pUBAGHFeBt4N/8A35UBAM6tg3Yqg/8A6JUBAMRGw6+Nw/8A8ZUBANIV6OfU6P8A+pUBAAAA9/f39/8AA5YBAEwe8Nnw0/8ADJYBAFJav3+/e/8AFZYBAGHFeBt4N/8AHpYBAM6tg3Yqg/8AJ5YBAMdXq5lwq/8AMJYBAMczz8Klz/8AOZYBANIV6OfU6P8AQpYBAEwe8Nnw0/8AS5YBAFBE26bboP8AVJYBAFh7rlquYf8AXZYBAGHFeBt4N/8AZpYBAM6tg3Yqg/8Ab5YBAMdXq5lwq/8AeJYBAMczz8Klz/8AgZYBANIV6OfU6P8AipYBAAAA9/f39/8Ak5YBAEwe8Nnw0/8AnJYBAFBE26bboP8ApZYBAFh7rlquYf8ArpYBAGHFeBt4N/8At5YBAL0L8uzn8v8AwJYBAJc926a92/8AyZYBAI3FviuMvv8A0pYBALkI9vHu9v8A25YBAJso4b3J4f8A5JYBAJFwz3Spz/8A7ZYBAI/3sAVwsP8A9pYBALkI9vHu9v8A/5YBAJso4b3J4f8ACJcBAJFwz3Spz/8AEZcBAI3FviuMvv8AGpcBAI/3jQRajf8AI5cBALkI9vHu9v8ALJcBAKgY5tDR5v8ANZcBAJc926a92/8APpcBAJFwz3Spz/8AR5cBAI3FviuMvv8AUJcBAI/3jQRajf8AWZcBALkI9vHu9v8AYpcBAKgY5tDR5v8Aa5cBAJc926a92/8AdJcBAJFwz3Spz/8AfZcBAI63wDaQwP8AhpcBAI/3sAVwsP8Aj5cBAI/4ewNOe/8AmJcBAOkI///3+/8AoZcBAL0L8uzn8v8AqpcBAKgY5tDR5v8As5cBAJc926a92/8AvJcBAJFwz3Spz/8AxZcBAI63wDaQwP8AzpcBAI/3sAVwsP8A15cBAI/4ewNOe/8A4JcBAOkI///3+/8A6ZcBAL0L8uzn8v8A8pcBAKgY5tDR5v8A+5cBAJc926a92/8ABJgBAJFwz3Spz/8ADZgBAI63wDaQwP8AFpgBAI/3sAVwsP8AH5gBAI/3jQRajf8AKJgBAI/5WAI4WP8AMZgBAMgO8Ozi8P8APJgBAJc926a92/8AR5gBAILQmRyQmf8AUpgBAM8I9/bv9/8AXZgBAJso4b3J4f8AaJgBAI+Az2epz/8Ac5gBAIL7igKBiv8AfpgBAM8I9/bv9/8AiZgBAJso4b3J4f8AlJgBAI+Az2epz/8An5gBAILQmRyQmf8AqpgBAHf8bAFsWf8AtZgBAM8I9/bv9/8AwJgBAKgY5tDR5v8Ay5gBAJc926a92/8A1pgBAI+Az2epz/8A4ZgBAILQmRyQmf8A7JgBAHf8bAFsWf8A95gBAM8I9/bv9/8AApkBAKgY5tDR5v8ADZkBAJc926a92/8AGJkBAI+Az2epz/8AI5kBAI63wDaQwP8ALpkBAIL7igKBiv8AOZkBAHb8ZAFkUP8ARJkBAOkI///3+/8AT5kBAMgO8Ozi8P8AWpkBAKgY5tDR5v8AZZkBAJc926a92/8AcJkBAI+Az2epz/8Ae5kBAI63wDaQwP8AhpkBAIL7igKBiv8AkZkBAHb8ZAFkUP8AnJkBAOkI///3+/8Ap5kBAMgO8Ozi8P8AspkBAKgY5tDR5v8AvZkBAJc926a92/8AyJkBAI+Az2epz/8A05kBAI63wDaQwP8A3pkBAIL7igKBiv8A6ZkBAHf8bAFsWf8A9JkBAHX7RgFGNv8A/5kBABLuf387CP8ACZoBAMP/Sy0AS/8AFJoBABT2s7NYBv8AHpoBABbo4OCCFP8AKJoBABeb/f24Y/8AMpoBABhI/v7gtv8APJoBAKUU69ja6/8ARpoBALEv0rKr0v8AUJoBALNUrIBzrP8AWpoBAL21iFQniP8AZJoBABLuf387CP8AbpoBAL21iFQniP8AeZoBAMP/Sy0AS/8AhJoBABT2s7NYBv8AjpoBABbo4OCCFP8AmJoBABeb/f24Y/8AopoBABhI/v7gtv8ArJoBAAAA9/f39/8AtpoBAKUU69ja6/8AwJoBALEv0rKr0v8AypoBALNUrIBzrP8A1JoBABe78fGjQP8A3ZoBAAAA9/f39/8A5poBALJFw5mOw/8A75oBABH95uZhAf8A+JoBABeb/f24Y/8AAZsBALEv0rKr0v8ACpsBALmbmV48mf8AE5sBABH95uZhAf8AHJsBABeb/f24Y/8AJZsBAAAA9/f39/8ALpsBALEv0rKr0v8AN5sBALmbmV48mf8AQJsBABT2s7NYBv8ASZsBABe78fGjQP8AUpsBABhI/v7gtv8AW5sBAKUU69ja6/8AZJsBALJFw5mOw/8AbZsBAL21iFQniP8AdpsBABT2s7NYBv8Af5sBABe78fGjQP8AiJsBABhI/v7gtv8AkZsBAAAA9/f39/8AmpsBAKUU69ja6/8Ao5sBALJFw5mOw/8ArJsBAL21iFQniP8AtZsBABT2s7NYBv8AvpsBABbo4OCCFP8Ax5sBABeb/f24Y/8A0JsBABhI/v7gtv8A2ZsBAKUU69ja6/8A4psBALEv0rKr0v8A65sBALNUrIBzrP8A9JsBAL21iFQniP8A/ZsBABT2s7NYBv8ABpwBABbo4OCCFP8AD5wBABeb/f24Y/8AGJwBABhI/v7gtv8AIZwBAAAA9/f39/8AKpwBAKUU69ja6/8AM5wBALEv0rKr0v8APJwBALNUrIBzrP8ARZwBAL21iFQniP8ATpwBALwO7+fh7/8AV5wBANZDycmUx/8AYJwBAOre3d0cd/8AaZwBALkI9vHu9v8AcpwBANMp2Ne12P8Ae5wBAOSL399lsP8AhJwBAO/ozs4SVv8AjZwBALkI9vHu9v8AlpwBANMp2Ne12P8An5wBAOSL399lsP8AqJwBAOre3d0cd/8AsZwBAOz/mJgAQ/8AupwBALkI9vHu9v8Aw5wBAMwm2tS52v8AzJwBANZDycmUx/8A1ZwBAOSL399lsP8A3pwBAOre3d0cd/8A55wBAOz/mJgAQ/8A8JwBALkI9vHu9v8A+ZwBAMwm2tS52v8AAp0BANZDycmUx/8AC50BAOSL399lsP8AFJ0BAOnR5+cpiv8AHZ0BAO/ozs4SVv8AJp0BAOz/kZEAP/8AL50BAMMF+ff0+f8AOJ0BALwO7+fh7/8AQZ0BAMwm2tS52v8ASp0BANZDycmUx/8AU50BAOSL399lsP8AXJ0BAOnR5+cpiv8AZZ0BAO/ozs4SVv8Abp0BAOz/kZEAP/8Ad50BAMMF+ff0+f8AgJ0BALwO7+fh7/8AiZ0BAMwm2tS52v8Akp0BANZDycmUx/8Am50BAOSL399lsP8ApJ0BAOnR5+cpiv8ArZ0BAO/ozs4SVv8Atp0BAOz/mJgAQ/8Av50BAPL/Z2cAH/8AyJ0BALQI9e/t9f8A1J0BAKgl3Ly93P8A4J0BALBksXVrsf8A7J0BALYH9/Lw9/8A+J0BAK0c4svJ4v8ABJ4BAK06yJ6ayP8AEJ4BALaAo2pRo/8AHJ4BALYH9/Lw9/8AKJ4BAK0c4svJ4v8ANJ4BAK06yJ6ayP8AQJ4BALBksXVrsf8ATJ4BALy5j1Qnj/8AWJ4BALYH9/Lw9/8AZJ4BAKoS69ra6/8AcJ4BAKgl3Ly93P8AfJ4BAK06yJ6ayP8AiJ4BALBksXVrsf8AlJ4BALy5j1Qnj/8AoJ4BALYH9/Lw9/8ArJ4BAKoS69ra6/8AuJ4BAKgl3Ly93P8AxJ4BAK06yJ6ayP8A0J4BAKxTuoB9uv8A3J4BALaAo2pRo/8A6J4BAL7YhkoUhv8A9J4BAL8C/fz7/f8AAJ8BALQI9e/t9f8ADJ8BAKoS69ra6/8AGJ8BAKgl3Ly93P8AJJ8BAK06yJ6ayP8AMJ8BAKxTuoB9uv8APJ8BALaAo2pRo/8ASJ8BAL7YhkoUhv8AVJ8BAL8C/fz7/f8AYJ8BALQI9e/t9f8AbJ8BAKoS69ra6/8AeJ8BAKgl3Ly93P8AhJ8BAK06yJ6ayP8AkJ8BAKxTuoB9uv8AnJ8BALaAo2pRo/8AqJ8BALy5j1Qnj/8AtJ8BAL//fT8Aff8AwJ8BAPL/Z2cAH/8Ayp8BAJbxYQUwYf8A1Z8BAPncsrIYK/8A358BAAWj1tZgTf8A6Z8BAA139PSlgv8A858BAA82/f3bx/8A/Z8BAI4g8NHl8P8AB6ABAI1X3pLF3v8AEaABAI+nw0OTw/8AG6ABAJTOrCFmrP8AJaABAPL/Z2cAH/8AL6ABAJTOrCFmrP8AOqABAJbxYQUwYf8ARaABAPncsrIYK/8AT6ABAAWj1tZgTf8AWaABAA139PSlgv8AY6ABAA82/f3bx/8AbaABAAAA9/f39/8Ad6ABAI4g8NHl8P8AgaABAI1X3pLF3v8Ai6ABAI+nw0OTw/8AlaABAAyW7++KYv8AnqABAAAA9/f39/8Ap6ABAI+Az2epz/8AsKABAPj/ysoAIP8AuaABAA139PSlgv8AwqABAI1X3pLF3v8Ay6ABAI/3sAVxsP8A1KABAPj/ysoAIP8A3aABAA139PSlgv8A5qABAAAA9/f39/8A76ABAI1X3pLF3v8A+KABAI/3sAVxsP8AAaEBAPncsrIYK/8ACqEBAAyW7++KYv8AE6EBAA82/f3bx/8AHKEBAI4g8NHl8P8AJaEBAI+Az2epz/8ALqEBAJTOrCFmrP8AN6EBAPncsrIYK/8AQKEBAAyW7++KYv8ASaEBAA82/f3bx/8AUqEBAAAA9/f39/8AW6EBAI4g8NHl8P8AZKEBAI+Az2epz/8AbaEBAJTOrCFmrP8AdqEBAPncsrIYK/8Af6EBAAWj1tZgTf8AiKEBAA139PSlgv8AkaEBAA82/f3bx/8AmqEBAI4g8NHl8P8Ao6EBAI1X3pLF3v8ArKEBAI+nw0OTw/8AtaEBAJTOrCFmrP8AvqEBAPncsrIYK/8Ax6EBAAWj1tZgTf8A0KEBAA139PSlgv8A2aEBAA82/f3bx/8A4qEBAAAA9/f39/8A66EBAI4g8NHl8P8A9KEBAI1X3pLF3v8A/aEBAI+nw0OTw/8ABqIBAJTOrCFmrP8AD6IBAPL/Z2cAH/8AGaIBAAAAGhoaGv8AJKIBAPncsrIYK/8ALqIBAAWj1tZgTf8AOKIBAA139PSlgv8AQqIBAA82/f3bx/8ATKIBAAAA4ODg4P8AVqIBAAAAurq6uv8AYKIBAAAAh4eHh/8AaqIBAAAATU1NTf8AdKIBAPL/Z2cAH/8AfqIBAAAATU1NTf8AiaIBAAAAGhoaGv8AlKIBAPncsrIYK/8AnqIBAAWj1tZgTf8AqKIBAA139PSlgv8AsqIBAA82/f3bx/8AvKIBAAAA//////8AxqIBAAAA4ODg4P8A0KIBAAAAurq6uv8A2qIBAAAAh4eHh/8A5KIBAAyW7++KYv8A7aIBAAAA//////8A9qIBAAAAmZmZmf8A/6IBAPj/ysoAIP8ACKMBAA139PSlgv8AEaMBAAAAurq6uv8AGqMBAAAAQEBAQP8AI6MBAPj/ysoAIP8ALKMBAA139PSlgv8ANaMBAAAA//////8APqMBAAAAurq6uv8AR6MBAAAAQEBAQP8AUKMBAPncsrIYK/8AWaMBAAyW7++KYv8AYqMBAA82/f3bx/8Aa6MBAAAA4ODg4P8AdKMBAAAAmZmZmf8AfaMBAAAATU1NTf8AhqMBAPncsrIYK/8Aj6MBAAyW7++KYv8AmKMBAA82/f3bx/8AoaMBAAAA//////8AqqMBAAAA4ODg4P8As6MBAAAAmZmZmf8AvKMBAAAATU1NTf8AxaMBAPncsrIYK/8AzqMBAAWj1tZgTf8A16MBAA139PSlgv8A4KMBAA82/f3bx/8A6aMBAAAA4ODg4P8A8qMBAAAAurq6uv8A+6MBAAAAh4eHh/8ABKQBAAAATU1NTf8ADaQBAPncsrIYK/8AFqQBAAWj1tZgTf8AH6QBAA139PSlgv8AKKQBAA82/f3bx/8AMaQBAAAA//////8AOqQBAAAA4ODg4P8AQ6QBAAAAurq6uv8ATKQBAAAAh4eHh/8AVaQBAAAATU1NTf8AXqQBAAMg/f3g3f8AZ6QBAPRc+vqftf8AcKQBAOPcxcUbiv8AeaQBAA0c/v7r4v8AgqQBAPxI+/u0uf8Ai6QBAO6T9/doof8AlKQBAOD9rq4Bfv8AnaQBAA0c/v7r4v8ApqQBAPxI+/u0uf8Ar6QBAO6T9/doof8AuKQBAOPcxcUbiv8AwaQBANX8enoBd/8AyqQBAA0c/v7r4v8A06QBAAM8/PzFwP8A3KQBAPRc+vqftf8A5aQBAO6T9/doof8A7qQBAOPcxcUbiv8A96QBANX8enoBd/8AAKUBAA0c/v7r4v8ACaUBAAM8/PzFwP8AEqUBAPRc+vqftf8AG6UBAO6T9/doof8AJKUBAObD3d00l/8ALaUBAOD9rq4Bfv8ANqUBANX8enoBd/8AP6UBAA4M///38/8ASKUBAAMg/f3g3f8AUaUBAAM8/PzFwP8AWqUBAPRc+vqftf8AY6UBAO6T9/doof8AbKUBAObD3d00l/8AdaUBAOD9rq4Bfv8AfqUBANX8enoBd/8Ah6UBAA4M///38/8AkKUBAAMg/f3g3f8AmaUBAAM8/PzFwP8AoqUBAPRc+vqftf8Aq6UBAO6T9/doof8AtKUBAObD3d00l/8AvaUBAOD9rq4Bfv8AxqUBANX8enoBd/8Az6UBAMf/akkAav8A2KUBAPX/paUAJv8A5KUBAKerlTE2lf8A8aUBAALQ19cwJ/8A/aUBAAq49PRtQ/8ACaYBABSd/f2uYf8AFaYBAB5u/v7gkP8AIaYBAIgY+ODz+P8ALaYBAIpD6avZ6f8AOaYBAI9x0XSt0f8ARaYBAJedtEV1tP8AUaYBAPX/paUAJv8AXaYBAJedtEV1tP8AaqYBAKerlTE2lf8Ad6YBAALQ19cwJ/8Ag6YBAAq49PRtQ/8Aj6YBABSd/f2uYf8Am6YBAB5u/v7gkP8Ap6YBACpA////v/8As6YBAIgY+ODz+P8Av6YBAIpD6avZ6f8Ay6YBAI9x0XSt0f8A16YBAA2k/PyNWf8A4qYBACpA////v/8A7aYBAI9W25G/2/8A+KYBAP7h19cZHP8AA6cBABSd/f2uYf8ADqcBAIpD6avZ6f8AGacBAJHBtix7tv8AJKcBAP7h19cZHP8AL6cBABSd/f2uYf8AOqcBACpA////v/8ARacBAIpD6avZ6f8AUKcBAJHBtix7tv8AW6cBAALQ19cwJ/8AZqcBAA2k/PyNWf8AcacBAB5u/v7gkP8AfKcBAIgY+ODz+P8Ah6cBAI9W25G/2/8AkqcBAJedtEV1tP8AnacBAALQ19cwJ/8AqKcBAA2k/PyNWf8As6cBAB5u/v7gkP8AvqcBACpA////v/8AyacBAIgY+ODz+P8A1KcBAI9W25G/2/8A36cBAJedtEV1tP8A6qcBAALQ19cwJ/8A9acBAAq49PRtQ/8AAKgBABSd/f2uYf8AC6gBAB5u/v7gkP8AFqgBAIgY+ODz+P8AIagBAIpD6avZ6f8ALKgBAI9x0XSt0f8AN6gBAJedtEV1tP8AQqgBAALQ19cwJ/8ATagBAAq49PRtQ/8AWKgBABSd/f2uYf8AY6gBAB5u/v7gkP8AbqgBACpA////v/8AeagBAIgY+ODz+P8AhKgBAIpD6avZ6f8Aj6gBAI9x0XSt0f8AmqgBAJedtEV1tP8ApagBAPX/paUAJv8AsagBAGv/aABoN/8AvqgBAALQ19cwJ/8AyqgBAAq49PRtQ/8A1qgBABSd/f2uYf8A4qgBAB9z/v7gi/8A7qgBADNq79nvi/8A+qgBAD6C2abZav8ABqkBAFN5vWa9Y/8AEqkBAGfTmBqYUP8AHqkBAPX/paUAJv8AKqkBAGfTmBqYUP8AN6kBAGv/aABoN/8ARKkBAALQ19cwJ/8AUKkBAAq49PRtQ/8AXKkBABSd/f2uYf8AaKkBAB9z/v7gi/8AdKkBACpA////v/8AgKkBADNq79nvi/8AjKkBAD6C2abZav8AmKkBAFN5vWa9Y/8ApKkBAA2k/PyNWf8Ar6kBACpA////v/8AuqkBAEKIz5HPYP8AxakBAP7h19cZHP8A0KkBABSd/f2uYf8A26kBAD6C2abZav8A5qkBAGLSlhqWQf8A8akBAP7h19cZHP8A/KkBABSd/f2uYf8AB6oBACpA////v/8AEqoBAD6C2abZav8AHaoBAGLSlhqWQf8AKKoBAALQ19cwJ/8AM6oBAA2k/PyNWf8APqoBAB9z/v7gi/8ASaoBADNq79nvi/8AVKoBAEKIz5HPYP8AX6oBAGfTmBqYUP8AaqoBAALQ19cwJ/8AdaoBAA2k/PyNWf8AgKoBAB9z/v7gi/8Ai6oBACpA////v/8AlqoBADNq79nvi/8AoaoBAEKIz5HPYP8ArKoBAGfTmBqYUP8At6oBAALQ19cwJ/8AwqoBAAq49PRtQ/8AzaoBABSd/f2uYf8A2KoBAB9z/v7gi/8A46oBADNq79nvi/8A7qoBAD6C2abZav8A+aoBAFN5vWa9Y/8ABKsBAGfTmBqYUP8AD6sBAALQ19cwJ/8AGqsBAAq49PRtQ/8AJasBABSd/f2uYf8AMKsBAB9z/v7gi/8AO6sBACpA////v/8ARqsBADNq79nvi/8AUasBAD6C2abZav8AXKsBAFN5vWa9Y/8AZ6sBAGfTmBqYUP8AcqsBAA0s/v7g0v8Ae6sBAAmL/PyScv8AhKsBAAHT3t4tJv8AjasBAA0l/v7l2f8AlqsBAAts/Pyukf8An6sBAAez+/tqSv8AqKsBAP3gy8sYHf8AsasBAA0l/v7l2f8AuqsBAAts/Pyukf8Aw6sBAAez+/tqSv8AzKsBAAHT3t4tJv8A1asBAP3npaUPFf8A3qsBAA0l/v7l2f8A56sBAAxc/Py7of8A8KsBAAmL/PyScv8A+asBAAez+/tqSv8AAqwBAAHT3t4tJv8AC6wBAP3npaUPFf8AFKwBAA0l/v7l2f8AHawBAAxc/Py7of8AJqwBAAmL/PyScv8AL6wBAAez+/tqSv8AOKwBAAPQ7+87LP8AQawBAP3gy8sYHf8ASqwBAPv/mZkADf8AU6wBAA4P///18P8AXKwBAA0s/v7g0v8AZawBAAxc/Py7of8AbqwBAAmL/PyScv8Ad6wBAAez+/tqSv8AgKwBAAPQ7+87LP8AiawBAP3gy8sYHf8AkqwBAPv/mZkADf8Am6wBAA4P///18P8ApKwBAA0s/v7g0v8ArawBAAxc/Py7of8AtqwBAAmL/PyScv8Av6wBAAez+/tqSv8AyKwBAAPQ7+87LP8A0awBAP3gy8sYHf8A2qwBAP3npaUPFf8A46wBAPn/Z2cADf8A7KwBAP7h5OQaHP8A9awBAJKyuDd+uP8A/qwBAFOTr02vSv8AB60BAP7h5OQaHP8AEK0BAJKyuDd+uP8AGa0BAFOTr02vSv8AIq0BAM+Eo5hOo/8AK60BAP7h5OQaHP8ANK0BAJKyuDd+uP8APa0BAFOTr02vSv8ARq0BAM+Eo5hOo/8AT60BABX///9/AP8AWK0BAP7h5OQaHP8AYa0BAJKyuDd+uP8Aaq0BAFOTr02vSv8Ac60BAM+Eo5hOo/8AfK0BABX///9/AP8Aha0BACrM////M/8Ajq0BAP7h5OQaHP8Al60BAJKyuDd+uP8AoK0BAFOTr02vSv8Aqa0BAM+Eo5hOo/8Asq0BABX///9/AP8Au60BACrM////M/8AxK0BAA/BpqZWKP8Aza0BAP7h5OQaHP8A1q0BAJKyuDd+uP8A360BAFOTr02vSv8A6K0BAM+Eo5hOo/8A8a0BABX///9/AP8A+q0BACrM////M/8AA64BAA/BpqZWKP8ADK4BAOh59/eBv/8AFa4BAP7h5OQaHP8AHq4BAJKyuDd+uP8AJ64BAFOTr02vSv8AMK4BAM+Eo5hOo/8AOa4BABX///9/AP8AQq4BACrM////M/8AS64BAA/BpqZWKP8AVK4BAOh59/eBv/8AXa4BAAAAmZmZmf8AZq4BAHJ4wmbCpf8Ab64BAAub/PyNYv8AeK4BAJxNy42gy/8Aga4BAHJ4wmbCpf8Aiq4BAAub/PyNYv8Ak64BAJxNy42gy/8AnK4BAORm5+eKw/8Apa4BAHJ4wmbCpf8Arq4BAAub/PyNYv8At64BAJxNy42gy/8AwK4BAORm5+eKw/8Aya4BADqb2KbYVP8A0q4BAHJ4wmbCpf8A264BAAub/PyNYv8A5K4BAJxNy42gy/8A7a4BAORm5+eKw/8A9q4BADqb2KbYVP8A/64BACLQ///ZL/8ACK8BAHJ4wmbCpf8AEa8BAAub/PyNYv8AGq8BAJxNy42gy/8AI68BAORm5+eKw/8ALK8BADqb2KbYVP8ANa8BACLQ///ZL/8APq8BABla5eXElP8AR68BAHJ4wmbCpf8AUK8BAAub/PyNYv8AWa8BAJxNy42gy/8AYq8BAORm5+eKw/8Aa68BADqb2KbYVP8AdK8BACLQ///ZL/8Afa8BABla5eXElP8Ahq8BAAAAs7Ozs/8Aj68BAHhU043Tx/8Ama8BANNSvbyAvf8ApK8BACpM////s/8Arq8BAK8l2r662v8AuK8BAASL+/uAcv8Awq8BAJBk04Cx0/8AzK8BABac/f20Yv8A1q8BADqG3rPeaf8A4K8BAOkv/PzN5f8A6q8BAAAA2dnZ2f8A9K8BAHhU043Tx/8A/q8BANNSvbyAvf8ACbABAE0p68zrxf8AFLABACpM////s/8AHrABAK8l2r662v8AKLABAASL+/uAcv8AMrABAJBk04Cx0/8APLABABac/f20Yv8ARrABADqG3rPeaf8AULABAOkv/PzN5f8AWrABAAAA2dnZ2f8AZLABAHhU043Tx/8AbrABANNSvbyAvf8AebABAE0p68zrxf8AhLABACWQ///tb/8Aj7ABACpM////s/8AmbABAK8l2r662v8Ao7ABAASL+/uAcv8ArbABAJBk04Cx0/8At7ABABac/f20Yv8AwbABADqG3rPeaf8Ay7ABAOkv/PzN5f8A1bABAAAA2dnZ2f8A37ABAHhU043Tx/8A6LABACpM////s/8A8bABAK8l2r662v8A+rABAHhU043Tx/8AA7EBACpM////s/8ADLEBAK8l2r662v8AFbEBAASL+/uAcv8AHrEBAHhU043Tx/8AJ7EBACpM////s/8AMLEBAK8l2r662v8AObEBAASL+/uAcv8AQrEBAJBk04Cx0/8AS7EBAHhU043Tx/8AVLEBACpM////s/8AXbEBAK8l2r662v8AZrEBAASL+/uAcv8Ab7EBAJBk04Cx0/8AeLEBABac/f20Yv8AgbEBAHhU043Tx/8AirEBACpM////s/8Ak7EBAK8l2r662v8AnLEBAASL+/uAcv8ApbEBAJBk04Cx0/8ArrEBABac/f20Yv8At7EBADqG3rPeaf8AwLEBAHhU043Tx/8AybEBACpM////s/8A0rEBAK8l2r662v8A27EBAASL+/uAcv8A5LEBAJBk04Cx0/8A7bEBABac/f20Yv8A9rEBADqG3rPeaf8A/7EBAOkv/PzN5f8ACLIBAHhU043Tx/8AEbIBACpM////s/8AGrIBAK8l2r662v8AI7IBAASL+/uAcv8ALLIBAJBk04Cx0/8ANbIBABac/f20Yv8APrIBADqG3rPeaf8AR7IBAOkv/PzN5f8AULIBAAAA2dnZ2f8AWbIBAO39np4BQv8AZ7IBALGCol5Pov8AdrIBAPq01dU+T/8AhLIBAAq49PRtQ/8AkrIBABSd/f2uYf8AoLIBAB9z/v7gi/8ArrIBADFg9eb1mP8AvLIBAE9B3avdpP8AyrIBAHJ4wmbCpf8A2LIBAI+7vTKIvf8A5rIBAO39np4BQv8A9LIBAI+7vTKIvf8AA7MBALGCol5Pov8AErMBAPq01dU+T/8AILMBAAq49PRtQ/8ALrMBABSd/f2uYf8APLMBAB9z/v7gi/8ASrMBACpA////v/8AWLMBADFg9eb1mP8AZrMBAE9B3avdpP8AdLMBAHJ4wmbCpf8AgrMBAA2k/PyNWf8Aj7MBACpA////v/8AnLMBAFFN1ZnVlP8AqbMBAP7h19cZHP8AtrMBABSd/f2uYf8Aw7MBAE9B3avdpP8A0LMBAI/EuiuDuv8A3bMBAP7h19cZHP8A6rMBABSd/f2uYf8A97MBACpA////v/8ABLQBAE9B3avdpP8AEbQBAI/EuiuDuv8AHrQBAPq01dU+T/8AK7QBAA2k/PyNWf8AOLQBAB9z/v7gi/8ARbQBADFg9eb1mP8AUrQBAFFN1ZnVlP8AX7QBAI+7vTKIvf8AbLQBAPq01dU+T/8AebQBAA2k/PyNWf8AhrQBAB9z/v7gi/8Ak7QBACpA////v/8AoLQBADFg9eb1mP8ArbQBAFFN1ZnVlP8AurQBAI+7vTKIvf8Ax7QBAPq01dU+T/8A1LQBAAq49PRtQ/8A4bQBABSd/f2uYf8A7rQBAB9z/v7gi/8A+7QBADFg9eb1mP8ACLUBAE9B3avdpP8AFbUBAHJ4wmbCpf8AIrUBAI+7vTKIvf8AL7UBAPq01dU+T/8APLUBAAq49PRtQ/8ASbUBABSd/f2uYf8AVrUBAB9z/v7gi/8AY7UBACpA////v/8AcLUBADFg9eb1mP8AfbUBAE9B3avdpP8AirUBAHJ4wmbCpf8Al7UBAI+7vTKIvf8ApLUBAJMP//D4//8As7UBABgj+vrr1/8AxbUBAH///wD///8Az7UBAHGA/3//1P8A37UBAH8P//D///8A6rUBACoa9fX13P8A9bUBABc6///kxP8AAbYBAAAAAAAAAP8ADLYBABkx///rzf8AILYBAKr//wAA//8AKrYBAMDO4oor4v8AOrYBAAC+paUqKv8ARbYBABdj3t64h/8AVLYBAIBnoF+eoP8AY7YBAD///3//AP8Ac7YBABHa0tJpHv8AgrYBAAuv//9/UP8AjbYBAJqT7WSV7f8AobYBACEi///43P8Ar7YBAPbn3NwUPP8AvLYBAH///wD///8AxrYBAKr/iwAAi/8A1LYBAH//iwCLi/8A4rYBAB7vuLiGC/8A9bYBAAAAqampqf8AA7cBAFX/ZABkAP8AErcBAAAAqampqf8AILcBACduvb23a/8AL7cBANT/i4sAi/8AQLcBADqOa1VrL/8AVLcBABf///+MAP8AZLcBAMbAzJkyzP8AdLcBAAD/i4sAAP8AgbcBAAp56emWev8AkbcBAFU9vI+8j/8Ao7cBAK+Pi0g9i/8AtrcBAH9nTy9PT/8AybcBAH9nTy9PT/8A3LcBAID/0QDO0f8A77cBAMf/05QA0/8A/7cBAOjr//8Uk/8ADbgBAIr//wC///8AHrgBAAAAaWlpaf8AK7gBAAAAaWlpaf8AOLgBAJTh/x6Q//8ASLgBAADOsrIiIv8AV7gBABwP///68P8AaLgBAFXAiyKLIv8AebgBANT///8A//8AhrgBAAAA3Nzc3P8AlbgBAKoH//j4//8ApbgBACP////XAP8Ar7gBAB7Z2tqlIP8AvrgBAAAAgICAgP8AyLgBAFX/gACAAP8A07gBADvQ/63/L/8A5LgBAAAAgICAgP8A7rgBAFUP//D/8P8A/LgBAOmW//9ptP8ACbkBAACMzc1cXP8AGLkBAML/gksAgv8AJLkBACoP////8P8AL7kBACZq8PDmjP8AOrkBAKoU+ubm+v8ASLkBAPAP///w9f8AW7kBAED//Hz8AP8AarkBACYx///6zf8AfLkBAIk/5q3Y5v8Ai7kBAAB38PCAgP8Am7kBAH8f/+D///8AqrkBACoo+vr60v8AxLkBAAAA09PT0/8A07kBAFVk7pDukP8A47kBAAAA09PT0/8A8rkBAPhJ//+2wf8AAboBAAyE//+gev8AEroBAH3RsiCyqv8AJboBAI91+ofO+v8AN7oBAJQ4mXeImf8AS7oBAJQ4mXeImf8AX7oBAJc03rDE3v8Ac7oBACof////4P8AhLoBAFX//wD/AP8AjroBAFXAzTLNMv8AnboBABUU+vrw5v8AqLoBANT///8A//8AtboBAAD/gIAAAP8AwboBAHGAzWbNqv8A17oBAKr/zQAAzf8A57oBAMyY07pV0/8A+boBALd825Nw2/8AC7sBAGepszyzcf8AH7sBALCP7nto7v8ANLsBAG//+gD6mv8AS7sBAH2n0UjRzP8AYLsBAOTkx8cVhf8AdbsBAKrGcBkZcP8Ah7sBAGoJ//X/+v8AlrsBAAQe///k4f8ApbsBABpJ///ktf8As7sBABlR///erf8AxLsBAKr/gAAAgP8AzrsBABsX/f315v8A27sBACr/gICAAP8A5rsBADjAjmuOI/8A9bsBABv///+lAP8AAbwBAAv///9FAP8AELwBANZ72tpw1v8AHLwBACZI7u7oqv8AL7wBAFVk+5j7mP8APrwBAH9D7q/u7v8AUbwBAPF829twk/8AZLwBABop///v1f8AdLwBABRG///auf8Ag7wBABSwzc2FP/8AjbwBAPc////Ay/8Al7wBANRG3d2g3f8AobwBAIQ75rDg5v8AsbwBANT/gIAAgP8AvbwBAAD///8AAP8AxrwBAAA9vLyPj/8A1bwBAJ+14UFp4f8A5LwBABHci4tFE/8A9bwBAASK+vqAcv8AAb0BABOa9PSkYP8AEb0BAGeqiy6LV/8AH70BABEQ///17v8ALb0BAA23oKBSLf8AOb0BAAAAwMDAwP8ARb0BAIts64fO6/8AUr0BAK+PzWpazf8AYb0BAJQ4kHCAkP8AcL0BAJQ4kHCAkP8Af70BAAAF///6+v8Aib0BAGr//wD/f/8Amr0BAJKbtEaCtP8Aqb0BABhU0tK0jP8Asr0BAH//gACAgP8AvL0BANQd2Ni/2P8Ayb0BAAa4//9jR/8A1b0BAHu24EDg0P8A5L0BANRz7u6C7v8A8L0BABtE9fXes/8A+70BAAAA//////8ABr4BAAAA9fX19f8AFr4BACr/////AP8AIr4BADjAzZrNMv8AM74BAC1D/Pf8uf8APL4BAERb3a3djv8ARb4BAGKyozGjVP8ATr4BACoy////zP8AV74BAD5V5sLmmf8AYL4BAFVkxnjGef8Aab4BAGO7hCOEQ/8Acr4BACoy////zP8Ae74BAD5V5sLmmf8AhL4BAFVkxnjGef8Ajb4BAGKyozGjVP8Alr4BAGv/aABoN/8An74BACoy////zP8AqL4BADdR8Nnwo/8Asb4BAERb3a3djv8Aur4BAFVkxnjGef8Aw74BAGKyozGjVP8AzL4BAGv/aABoN/8A1b4BACoy////zP8A3r4BADdR8Nnwo/8A574BAERb3a3djv8A8L4BAFVkxnjGef8A+b4BAGCeq0GrXf8AAr8BAGO7hCOEQ/8AC78BAGz/WgBaMv8AFL8BACoZ////5f8AHb8BAC1D/Pf8uf8AJr8BADdR8Nnwo/8AL78BAERb3a3djv8AOL8BAFVkxnjGef8AQb8BAGCeq0GrXf8ASr8BAGO7hCOEQ/8AU78BAGz/WgBaMv8AXL8BACoZ////5f8AZb8BAC1D/Pf8uf8Abr8BADdR8Nnwo/8Ad78BAERb3a3djv8AgL8BAFVkxnjGef8Aib8BAGCeq0GrXf8Akr8BAGO7hCOEQ/8Am78BAGv/aABoN/8ApL8BAG7/RQBFKf8Arb8BADFJ+O34sf8AuL8BAHVhzX/Nu/8Aw78BAJDCuCx/uP8Azr8BACoy////zP8A2b8BAGNC2qHatP8A5L8BAISqxEG2xP8A778BAJbLqCJeqP8A+r8BACoy////zP8ABcABAGNC2qHatP8AEMABAISqxEG2xP8AG8ABAJDCuCx/uP8AJsABAKS/lCU0lP8AMcABACoy////zP8APMABAEU66cfptP8AR8ABAHVhzX/Nu/8AUsABAISqxEG2xP8AXcABAJDCuCx/uP8AaMABAKS/lCU0lP8Ac8ABACoy////zP8AfsABAEU66cfptP8AicABAHVhzX/Nu/8AlMABAISqxEG2xP8An8ABAIvYwB2RwP8AqsABAJbLqCJeqP8AtcABAJ7nhAwshP8AwMABACom////2f8Ay8ABADFJ+O34sf8A1sABAEU66cfptP8A4cABAHVhzX/Nu/8A7MABAISqxEG2xP8A98ABAIvYwB2RwP8AAsEBAJbLqCJeqP8ADcEBAJ7nhAwshP8AGMEBACom////2f8AI8EBADFJ+O34sf8ALsEBAEU66cfptP8AOcEBAHVhzX/Nu/8ARMEBAISqxEG2xP8AT8EBAIvYwB2RwP8AWsEBAJbLqCJeqP8AZcEBAKS/lCU0lP8AcMEBAJ7nWAgdWP8Ae8EBACVC///3vP8AhsEBAByv/v7ET/8AkcEBABDu2dlfDv8AnMEBACoq////1P8Ap8EBABxw/v7Zjv8AssEBABbV/v6ZKf8AvcEBAA/8zMxMAv8AyMEBACoq////1P8A08EBABxw/v7Zjv8A3sEBABbV/v6ZKf8A6cEBABDu2dlfDv8A9MEBAA34mZk0BP8A/8EBACoq////1P8ACsIBAB9t/v7jkf8AFcIBAByv/v7ET/8AIMIBABbV/v6ZKf8AK8IBABDu2dlfDv8ANsIBAA34mZk0BP8AQcIBACoq////1P8ATMIBAB9t/v7jkf8AV8IBAByv/v7ET/8AYsIBABbV/v6ZKf8AbcIBABLp7OxwFP8AeMIBAA/8zMxMAv8Ag8IBAAz3jIwtBP8AjsIBACoZ////5f8AmcIBACVC///3vP8ApMIBAB9t/v7jkf8Ar8IBAByv/v7ET/8AusIBABbV/v6ZKf8AxcIBABLp7OxwFP8A0MIBAA/8zMxMAv8A28IBAAz3jIwtBP8A5sIBACoZ////5f8A8cIBACVC///3vP8A/MIBAB9t/v7jkf8AB8MBAByv/v7ET/8AEsMBABbV/v6ZKf8AHcMBABLp7OxwFP8AKMMBAA/8zMxMAv8AM8MBAA34mZk0BP8APsMBAA3wZmYlBv8AScMBACJf///toP8AVMMBABiy/v6yTP8AX8MBAAXd8PA7IP8AasMBACpN////sv8AdcMBAB2i/v7MXP8AgMMBABHC/f2NPP8Ai8MBAP7h4+MaHP8AlsMBACpN////sv8AocMBAB2i/v7MXP8ArMMBABHC/f2NPP8At8MBAAXd8PA7IP8AwsMBAPb/vb0AJv8AzcMBACpN////sv8A2MMBAB6I/v7Zdv8A48MBABiy/v6yTP8A7sMBABHC/f2NPP8A+cMBAAXd8PA7IP8ABMQBAPb/vb0AJv8AD8QBACpN////sv8AGsQBAB6I/v7Zdv8AJcQBABiy/v6yTP8AMMQBABHC/f2NPP8AO8QBAAfU/PxOKv8ARsQBAP7h4+MaHP8AUcQBAPX/sbEAJv8AXMQBACoy////zP8AZ8QBACJf///toP8AcsQBAB6I/v7Zdv8AfcQBABiy/v6yTP8AiMQBABHC/f2NPP8Ak8QBAAfU/PxOKv8AnsQBAP7h4+MaHP8AqcQBAPX/sbEAJv8AtMQBACoy////zP8Av8QBACJf///toP8AysQBAB6I/v7Zdv8A1cQBABiy/v6yTP8A4MQBABHC/f2NPP8A68QBAAfU/PxOKv8A9sQBAP7h4+MaHP8AAcUBAPb/vb0AJv8ADMUBAPL/gIAAJv8AF8UBAJMP//D4//8AIcUBABgj+vrr1/8ALsUBABck///v2/8APMUBABck7u7fzP8ASsUBABckzc3AsP8AWMUBABgii4uDeP8AZsUBAHGA/3//1P8AccUBAHGA/3//1P8AfcUBAHGA7nbuxv8AicUBAHGAzWbNqv8AlcUBAHGAi0WLdP8AocUBAH8P//D///8Ap8UBAH8P//D///8ArsUBAH8P7uDu7v8AtcUBAH8OzcHNzf8AvMUBAH8Oi4OLi/8Aw8UBACoa9fX13P8AycUBABc6///kxP8A0MUBABc6///kxP8A2MUBABc67u7Vt/8A4MUBABY6zc23nv8A6MUBABc6i4t9a/8A+twBAAAAAAAAAP8A8MUBABkx///rzf8A/8UBAKr//wAA//8ABMYBAKr//wAA//8ACsYBAKr/7gAA7v8AEMYBAKr/zQAAzf8AFsYBAKr/iwAAi/8AHMYBAMDO4oor4v8AJ8YBAAC+paUqKv8ALcYBAAC///9AQP8ANMYBAAC/7u47O/8AO8YBAAC/zc0zM/8AQsYBAAC+i4sjI/8AScYBABdj3t64h/8AU8YBABdk///Tm/8AXsYBABdj7u7Fkf8AacYBABdjzc2qff8AdMYBABdji4tzVf8Af8YBAIBnoF+eoP8AicYBAINn/5j1//8AlMYBAINm7o7l7v8An8YBAINnzXrFzf8AqsYBAINmi1OGi/8AtcYBAD///3//AP8AwMYBAD///3//AP8AzMYBAD//7nbuAP8A2MYBAD//zWbNAP8A5MYBAD//i0WLAP8A8MYBABHa0tJpHv8A+sYBABHb//9/JP8ABccBABHb7u52If8AEMcBABHazc1mHf8AG8cBABHci4tFE/8AJscBAAuv//9/UP8ALMcBAAep//9yVv8AM8cBAAap7u5qUP8AOscBAAapzc1bRf8AQccBAAaoi4s+L/8ASMcBAJqT7WSV7f8AV8cBACEi///43P8AYMcBACEi///43P8AascBACIj7u7ozf8AdMcBACIizc3Isf8AfscBACMii4uIeP8AiMcBAPbn3NwUPP8AkMcBAH///wD///8AlccBAH///wD///8Am8cBAH//7gDu7v8AoccBAH//zQDNzf8Ap8cBAH//iwCLi/8ArccBAB7vuLiGC/8Au8cBAB7w//+5D/8AyscBAB7w7u6tDv8A2ccBAB7wzc2VDP8A6McBAB7wi4tlCP8A98cBAFX/ZABkAP8AAcgBACduvb23a/8AC8gBADqOa1VrL/8AGsgBADqP/8r/cP8AKsgBADqP7rzuaP8AOsgBADqPzaLNWv8ASsgBADqPi26LPf8AWsgBABf///+MAP8AZcgBABX///9/AP8AccgBABX/7u52AP8AfcgBABX/zc1mAP8AicgBABX/i4tFAP8AlcgBAMbAzJkyzP8AoMgBAMbB/78+//8ArMgBAMbA7rI67v8AuMgBAMbAzZoyzf8AxMgBAMbAi2gii/8A0MgBAAp56emWev8A28gBAFU9vI+8j/8A6MgBAFU+/8H/wf8A9sgBAFU+7rTutP8ABMkBAFU+zZvNm/8AEskBAFU+i2mLaf8AIMkBAK+Pi0g9i/8ALskBAH9nTy9PT/8APMkBAH9o/5f///8AS8kBAH9n7o3u7v8AWskBAH9ozXnNzf8AackBAH9oi1KLi/8AeMkBAH9nTy9PT/8AhskBAID/0QDO0f8AlMkBAMf/05QA0/8An8kBAOjr//8Uk/8AqMkBAOjr//8Uk/8AsskBAOjr7u4Sif8AvMkBAOjrzc0Qdv8AxskBAOfsi4sKUP8A0MkBAIr//wC///8A3MkBAIr//wC///8A6ckBAIr/7gCy7v8A9skBAIr/zQCazf8AA8oBAIr/iwBoi/8AEMoBAAAAaWlpaf8AGMoBAAAAaWlpaf8AIMoBAJTh/x6Q//8AK8oBAJTh/x6Q//8AN8oBAJTh7hyG7v8AQ8oBAJThzRh0zf8AT8oBAJThixBOi/8AW8oBAADOsrIiIv8AZcoBAADP//8wMP8AcMoBAADP7u4sLP8Ae8oBAADPzc0mJv8AhsoBAADPi4saGv8AkcoBABwP///68P8AncoBAFXAiyKLIv8AqcoBAAAA3Nzc3P8As8oBAKoH//j4//8AvsoBACP////XAP8Aw8oBACP////XAP8AycoBACP/7u7JAP8Az8oBACP/zc2tAP8A1coBACP/i4t1AP8A28oBAB7Z2tqlIP8A5coBAB7a///BJf8A8MoBAB7a7u60Iv8A+8oBAB7azc2bHf8ABssBAB7ai4tpFP8AEcsBAAAAwMDAwP8AFssBAAAAAAAAAP8AHMsBAAAAAwMDA/8AIssBAAAAGhoaGv8AKcsBAAAA//////8AMcsBAAAAHBwcHP8AOMsBAAAAHx8fH/8AP8sBAAAAISEhIf8ARssBAAAAJCQkJP8ATcsBAAAAJiYmJv8AVMsBAAAAKSkpKf8AW8sBAAAAKysrK/8AYssBAAAALi4uLv8AacsBAAAAMDAwMP8AcMsBAAAABQUFBf8AdssBAAAAMzMzM/8AfcsBAAAANjY2Nv8AhMsBAAAAODg4OP8Ai8sBAAAAOzs7O/8AkssBAAAAPT09Pf8AmcsBAAAAQEBAQP8AoMsBAAAAQkJCQv8Ap8sBAAAARUVFRf8ArssBAAAAR0dHR/8AtcsBAAAASkpKSv8AvMsBAAAACAgICP8AwssBAAAATU1NTf8AycsBAAAAT09PT/8A0MsBAAAAUlJSUv8A18sBAAAAVFRUVP8A3ssBAAAAV1dXV/8A5csBAAAAWVlZWf8A7MsBAAAAXFxcXP8A88sBAAAAXl5eXv8A+ssBAAAAYWFhYf8AAcwBAAAAY2NjY/8ACMwBAAAACgoKCv8ADswBAAAAZmZmZv8AFcwBAAAAaWlpaf8AHMwBAAAAa2tra/8AI8wBAAAAbm5ubv8AKswBAAAAcHBwcP8AMcwBAAAAc3Nzc/8AOMwBAAAAdXV1df8AP8wBAAAAeHh4eP8ARswBAAAAenp6ev8ATcwBAAAAfX19ff8AVMwBAAAADQ0NDf8AWswBAAAAf39/f/8AYcwBAAAAgoKCgv8AaMwBAAAAhYWFhf8Ab8wBAAAAh4eHh/8AdswBAAAAioqKiv8AfcwBAAAAjIyMjP8AhMwBAAAAj4+Pj/8Ai8wBAAAAkZGRkf8AkswBAAAAlJSUlP8AmcwBAAAAlpaWlv8AoMwBAAAADw8PD/8ApswBAAAAmZmZmf8ArcwBAAAAnJycnP8AtMwBAAAAnp6env8Au8wBAAAAoaGhof8AwswBAAAAo6Ojo/8AycwBAAAApqampv8A0MwBAAAAqKioqP8A18wBAAAAq6urq/8A3swBAAAAra2trf8A5cwBAAAAsLCwsP8A7MwBAAAAEhISEv8A8swBAAAAs7Ozs/8A+cwBAAAAtbW1tf8AAM0BAAAAuLi4uP8AB80BAAAAurq6uv8ADs0BAAAAvb29vf8AFc0BAAAAv7+/v/8AHM0BAAAAwsLCwv8AI80BAAAAxMTExP8AKs0BAAAAx8fHx/8AMc0BAAAAycnJyf8AOM0BAAAAFBQUFP8APs0BAAAAzMzMzP8ARc0BAAAAz8/Pz/8ATM0BAAAA0dHR0f8AU80BAAAA1NTU1P8AWs0BAAAA1tbW1v8AYc0BAAAA2dnZ2f8AaM0BAAAA29vb2/8Ab80BAAAA3t7e3v8Ads0BAAAA4ODg4P8Afc0BAAAA4+Pj4/8AhM0BAAAAFxcXF/8Ais0BAAAA5eXl5f8Akc0BAAAA6Ojo6P8AmM0BAAAA6+vr6/8An80BAAAA7e3t7f8Aps0BAAAA8PDw8P8Arc0BAAAA8vLy8v8AtM0BAAAA9fX19f8Au80BAAAA9/f39/8Aws0BAAAA+vr6+v8Ayc0BAAAA/Pz8/P8A0M0BAFX//wD/AP8A1s0BAFX//wD/AP8A3c0BAFX/7gDuAP8A5M0BAFX/zQDNAP8A680BAFX/iwCLAP8A8s0BADvQ/63/L/8A/s0BAAAAwMDAwP8AA84BAAAAAAAAAP8ACc4BAAAAAwMDA/8AD84BAAAAGhoaGv8AFs4BAAAA//////8AHs4BAAAAHBwcHP8AJc4BAAAAHx8fH/8ALM4BAAAAISEhIf8AM84BAAAAJCQkJP8AOs4BAAAAJiYmJv8AQc4BAAAAKSkpKf8ASM4BAAAAKysrK/8AT84BAAAALi4uLv8AVs4BAAAAMDAwMP8AXc4BAAAABQUFBf8AY84BAAAAMzMzM/8Aas4BAAAANjY2Nv8Acc4BAAAAODg4OP8AeM4BAAAAOzs7O/8Af84BAAAAPT09Pf8Ahs4BAAAAQEBAQP8Ajc4BAAAAQkJCQv8AlM4BAAAARUVFRf8Am84BAAAAR0dHR/8Aos4BAAAASkpKSv8Aqc4BAAAACAgICP8Ar84BAAAATU1NTf8Ats4BAAAAT09PT/8Avc4BAAAAUlJSUv8AxM4BAAAAVFRUVP8Ay84BAAAAV1dXV/8A0s4BAAAAWVlZWf8A2c4BAAAAXFxcXP8A4M4BAAAAXl5eXv8A584BAAAAYWFhYf8A7s4BAAAAY2NjY/8A9c4BAAAACgoKCv8A+84BAAAAZmZmZv8AAs8BAAAAaWlpaf8ACc8BAAAAa2tra/8AEM8BAAAAbm5ubv8AF88BAAAAcHBwcP8AHs8BAAAAc3Nzc/8AJc8BAAAAdXV1df8ALM8BAAAAeHh4eP8AM88BAAAAenp6ev8AOs8BAAAAfX19ff8AQc8BAAAADQ0NDf8AR88BAAAAf39/f/8ATs8BAAAAgoKCgv8AVc8BAAAAhYWFhf8AXM8BAAAAh4eHh/8AY88BAAAAioqKiv8Aas8BAAAAjIyMjP8Acc8BAAAAj4+Pj/8AeM8BAAAAkZGRkf8Af88BAAAAlJSUlP8Ahs8BAAAAlpaWlv8Ajc8BAAAADw8PD/8Ak88BAAAAmZmZmf8Ams8BAAAAnJycnP8Aoc8BAAAAnp6env8AqM8BAAAAoaGhof8Ar88BAAAAo6Ojo/8Ats8BAAAApqampv8Avc8BAAAAqKioqP8AxM8BAAAAq6urq/8Ay88BAAAAra2trf8A0s8BAAAAsLCwsP8A2c8BAAAAEhISEv8A388BAAAAs7Ozs/8A5s8BAAAAtbW1tf8A7c8BAAAAuLi4uP8A9M8BAAAAurq6uv8A+88BAAAAvb29vf8AAtABAAAAv7+/v/8ACdABAAAAwsLCwv8AENABAAAAxMTExP8AF9ABAAAAx8fHx/8AHtABAAAAycnJyf8AJdABAAAAFBQUFP8AK9ABAAAAzMzMzP8AMtABAAAAz8/Pz/8AOdABAAAA0dHR0f8AQNABAAAA1NTU1P8AR9ABAAAA1tbW1v8ATtABAAAA2dnZ2f8AVdABAAAA29vb2/8AXNABAAAA3t7e3v8AY9ABAAAA4ODg4P8AatABAAAA4+Pj4/8AcdABAAAAFxcXF/8Ad9ABAAAA5eXl5f8AftABAAAA6Ojo6P8AhdABAAAA6+vr6/8AjNABAAAA7e3t7f8Ak9ABAAAA8PDw8P8AmtABAAAA8vLy8v8AodABAAAA9fX19f8AqNABAAAA9/f39/8Ar9ABAAAA+vr6+v8AttABAAAA/Pz8/P8AvdABAFUP//D/8P8AxtABAFUP//D/8P8A0NABAFUP7uDu4P8A2tABAFUOzcHNwf8A5NABAFUOi4OLg/8A7tABAOmW//9ptP8A9tABAOqR//9utP8A/9ABAOuN7u5qp/8ACNEBAOyHzc1gkP8AEdEBAOqUi4s6Yv8AGtEBAACMzc1cXP8AJNEBAACU//9qav8AL9EBAACU7u5jY/8AOtEBAACVzc1VVf8ARdEBAACUi4s6Ov8AUNEBAML/gksAgv8AV9EBACoA/////gAAXdEBACoP////8P8AY9EBACoP////8P8AatEBACoP7u7u4P8AcdEBACoOzc3Nwf8AeNEBACoOi4uLg/8Af9EBACZq8PDmjP8AhdEBACdw///2j/8AjNEBACdw7u7mhf8Ak9EBACdvzc3Gc/8AmtEBACdvi4uGTv8AodEBAKoU+ubm+v8AqtEBAPAP///w9f8AuNEBAPAP///w9f8Ax9EBAO8P7u7g5f8A1tEBAPAOzc3Bxf8A5dEBAO8Oi4uDhv8A9NEBAED//Hz8AP8A/tEBACYx///6zf8AC9IBACYx///6zf8AGdIBACUy7u7pv/8AJ9IBACYxzc3Jpf8ANdIBACcxi4uJcP8AQ9IBAIk/5q3Y5v8ATdIBAIpA/7/v//8AWNIBAIpA7rLf7v8AY9IBAIo/zZrAzf8AbtIBAIlAi2iDi/8AedIBAAB38PCAgP8AhNIBAH8f/+D///8AjtIBAH8f/+D///8AmdIBAH8f7tHu7v8ApNIBAH8fzbTNzf8Ar9IBAH8fi3qLi/8AutIBACNz7u7dgv8AydIBACN0///si/8A2dIBACNz7u7cgv8A6dIBACNzzc2+cP8A+dIBACNzi4uBTP8ACdMBACoo+vr60v8AHtMBAAAA09PT0/8AKNMBAAAA09PT0/8AMtMBAPhJ//+2wf8APNMBAPlR//+uuf8AR9MBAPhR7u6irf8AUtMBAPlQzc2Mlf8AXdMBAPlQi4tfZf8AaNMBAAyE//+gev8AdNMBAAyE//+gev8AgdMBAAuE7u6Vcv8AjtMBAAyFzc2BYv8Am9MBAAyFi4tXQv8AqNMBAH3RsiCyqv8AttMBAI91+ofO+v8Aw9MBAI9P/7Di//8A0dMBAI9P7qTT7v8A39MBAI5PzY22zf8A7dMBAI9Oi2B7i/8A+9MBAK+P/4Rw//8ACtQBAJQ4mXeImf8AGdQBAJQ4mXeImf8AKNQBAJc03rDE3v8AN9QBAJc1/8rh//8AR9QBAJc17rzS7v8AV9QBAJc1zaK1zf8AZ9QBAJY1i257i/8Ad9QBACof////4P8Ag9QBACof////4P8AkNQBACof7u7u0f8AndQBACofzc3NtP8AqtQBACofi4uLev8At9QBAFXAzTLNMv8AwdQBABUU+vrw5v8Ax9QBANT///8A//8Az9QBANT///8A//8A2NQBANT/7u4A7v8A4dQBANT/zc0Azf8A6tQBANT/i4sAi/8A89QBAO+5sLAwYP8A+tQBAOTL//80s/8AAtUBAOTL7u4wp/8ACtUBAOTMzc0pkP8AEtUBAOTLi4scYv8AGtUBAHGAzWbNqv8AK9UBAKr/zQAAzf8ANtUBAMyY07pV0/8AQ9UBAMuZ/+Bm//8AUdUBAMuZ7tFf7v8AX9UBAMuZzbRSzf8AbdUBAMuai3o3i/8Ae9UBALd825Nw2/8AiNUBALd9/6uC//8AltUBALd97p957v8ApNUBALd9zYlozf8AstUBALd8i11Hi/8AwNUBAGepszyzcf8Az9UBALCP7nto7v8A39UBAG//+gD6mv8A8dUBAH2n0UjRzP8AAdYBAOTkx8cVhf8AEdYBAKrGcBkZcP8AHtYBAGoJ//X/+v8AKNYBAAQe///k4f8AMtYBAAQe///k4f8APdYBAAQe7u7V0v8ASNYBAAMdzc23tf8AU9YBAAUdi4t9e/8AXtYBABpJ///ktf8AZ9YBABlR///erf8Ac9YBABlR///erf8AgNYBABlS7u7Pof8AjdYBABlSzc2zi/8AmtYBABlSi4t5Xv8Ap9YBAKr/gAAAgP8ArNYBAKr/gAAAgP8AtdYBACoA/////gAAutYBABsX/f315v8AwtYBADjAjmuOI/8AzNYBADjB/8D/Pv8A19YBADjA7rPuOv8A4tYBADjAzZrNMv8A7dYBADjAi2mLIv8A+NYBABv///+lAP8A/9YBABv///+lAP8AB9cBABv/7u6aAP8AD9cBABv/zc2FAP8AF9cBABv/i4taAP8AH9cBAAv///9FAP8AKdcBAAv///9FAP8ANNcBAAv/7u5AAP8AP9cBAAv/zc03AP8AStcBAAv/i4slAP8AVdcBANZ72tpw1v8AXNcBANZ8//+D+v8AZNcBANZ87u566f8AbNcBANZ8zc1pyf8AdNcBANV8i4tHif8AfNcBACZI7u7oqv8AitcBAFVk+5j7mP8AlNcBAFVl/5r/mv8An9cBAFVk7pDukP8AqtcBAFVkzXzNfP8AtdcBAFVki1SLVP8AwNcBAH9D7q/u7v8AztcBAH9E/7v///8A3dcBAH9E7q7u7v8A7NcBAH9EzZbNzf8A+9cBAH9Di2aLi/8ACtgBAPF829twk/8AGNgBAPF9//+Cq/8AJ9gBAPF97u55n/8ANtgBAPF9zc1oif8ARdgBAPF8i4tHXf8AVNgBABop///v1f8AX9gBABRG///auf8AadgBABRG///auf8AdNgBABNF7u7Lrf8Af9gBABNFzc2vlf8AitgBABRFi4t3Zf8AldgBABSwzc2FP/8AmtgBAPc////Ay/8An9gBAPVJ//+1xf8ApdgBAPVJ7u6puP8Aq9gBAPVKzc2Rnv8AsdgBAPVJi4tjbP8At9gBANRG3d2g3f8AvNgBANRE//+7//8AwtgBANRE7u6u7v8AyNgBANREzc2Wzf8AztgBANRDi4tmi/8A1NgBAIQ75rDg5v8A39gBAMTd8KAg8P8A5tgBAL/P/5sw//8A7tgBAMDP7pEs7v8A9tgBAMDPzX0mzf8A/tgBAMDPi1Uai/8ABtkBAAD///8AAP8ACtkBAAD///8AAP8AD9kBAAD/7u4AAP8AFNkBAAD/zc0AAP8AGdkBAAD/i4sAAP8AHtkBAAA9vLyPj/8AKNkBAAA+///Bwf8AM9kBAAA+7u60tP8APtkBAAA+zc2bm/8ASdkBAAA+i4tpaf8AVNkBAJ+14UFp4f8AXtkBAJ+3/0h2//8AadkBAJ+37kNu7v8AdNkBAJ+2zTpfzf8Af9kBAJ+3iydAi/8AitkBABHci4tFE/8AltkBAASK+vqAcv8AndkBAAmW//+Maf8ApdkBAAmW7u6CYv8ArdkBAAmWzc1wVP8AtdkBAAmWi4tMOf8AvdkBABOa9PSkYP8AyNkBAGeqiy6LV/8A0dkBAGer/1T/n/8A29kBAGer7k7ulP8A5dkBAGerzUPNgP8A79kBAGeqiy6LV/8A+dkBABEQ///17v8AAtoBABEQ///17v8ADNoBABIR7u7l3v8AFtoBABIRzc3Fv/8AINoBABIQi4uGgv8AKtoBAA23oKBSLf8AMdoBAA24//+CR/8AOdoBAA247u55Qv8AQdoBAA24zc1oOf8ASdoBAA25i4tHJv8AUdoBAIts64fO6/8AWdoBAJB4/4fO//8AYtoBAJB47n7A7v8Aa9oBAJB4zWymzf8AdNoBAJF3i0pwi/8AfdoBAK+PzWpazf8Ah9oBAK+Q/4Nv//8AktoBAK+Q7npn7v8AndoBAK+QzWlZzf8AqNoBAK+Qi0c8i/8As9oBAJQ4kHCAkP8AvdoBAJU4/8bi//8AyNoBAJU47rnT7v8A09oBAJQ5zZ+2zf8A3toBAJU4i2x7i/8A6doBAJQ4kHCAkP8A89oBAAAF///6+v8A+NoBAAAF///6+v8A/toBAAAF7u7p6f8ABNsBAAAEzc3Jyf8ACtsBAAADi4uJif8AENsBAGr//wD/f/8AHNsBAGr//wD/f/8AKdsBAGr/7gDudv8ANtsBAGr/zQDNZv8AQ9sBAGr/iwCLRf8AUNsBAJKbtEaCtP8AWtsBAJKc/2O4//8AZdsBAJKc7lys7v8AcNsBAJKczU+Uzf8Ae9sBAJObizZki/8AhtsBABhU0tK0jP8AitsBABSw//+lT/8Aj9sBABSw7u6aSf8AlNsBABSwzc2FP/8AmdsBABSwi4taK/8AntsBANQd2Ni/2P8AptsBANQe///h//8Ar9sBANQe7u7S7v8AuNsBANQdzc21zf8AwdsBANQdi4t7i/8AytsBAAa4//9jR/8A0dsBAAa4//9jR/8A2dsBAAa47u5cQv8A4dsBAAa4zc1POf8A6dsBAAa5i4s2Jv8AO90BACoA/////gAA8dsBAHu24EDg0P8A+9sBAIH//wD1//8ABtwBAIH/7gDl7v8AEdwBAIH/zQDFzf8AHNwBAIH/iwCGi/8AJ9wBANRz7u6C7v8ALtwBAOPX0NAgkP8AONwBAOvB//8+lv8AQ9wBAOvA7u46jP8ATtwBAOvAzc0yeP8AWdwBAOvAi4siUv8AZNwBABtE9fXes/8AatwBABtF///nuv8AcdwBABtE7u7Yrv8AeNwBABtEzc26lv8Af9wBABtDi4t+Zv8AhtwBAAAA//////8AjNwBAAAA9fX19f8Al9wBACr/////AP8AntwBACr/////AP8AptwBACr/7u7uAP8ArtwBACr/zc3NAP8AttwBACr/i4uLAP8AvtwBADjAzZrNMv8AReEBAE7dAQBQ3QEAUt0BAFTdAQBW3QEAWN0BAFrdAQBc3QEAXt0BAGDdAQBj3QEAZt0BAGndAQBs3QEAb90BAHLdAQB13QEAeN0BAHvdAQB+3QEAAAAAAAQAAAAEAAAABQAAADEAAAAQAAAAAAAAAAAAAAAAAAAACAAAABAAAAAYAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAACAAAABAAAAAYAAAAAAAAAAAAAAASAAAAAAAAAAAAAAAAAAAACAAAAAQAAAAAAAAAAAAAADIAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAQAAAAAAAAAAAAAADMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMAAAAAAAAAAAAAAAAAAAAAAAAAlNcAABQAAABDLlVURi04AAAAAAAAAAAAAAAAAN4SBJUAAAAA////////////////AgAAwAMAAMAEAADABQAAwAYAAMAHAADACAAAwAkAAMAKAADACwAAwAwAAMANAADADgAAwA8AAMAQAADAEQAAwBIAAMATAADAFAAAwBUAAMAWAADAFwAAwBgAAMAZAADAGgAAwBsAAMAcAADAHQAAwB4AAMAfAADAAAAAswEAAMMCAADDAwAAwwQAAMMFAADDBgAAwwcAAMMIAADDCQAAwwoAAMMLAADDDAAAww0AANMOAADDDwAAwwAADLsBAAzDAgAMwwMADMMEAAzTeNgAAAkAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAHAAAAcqgCAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD42AAABQAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAcAAAB6rAIAAAQAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAACv////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPjYAAB82QAABQAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQAAAAcAAACCsAIAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAA//////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+JoCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAABAAAAAQAAAAGAAAAg/miAERObgD8KRUA0VcnAN009QBi28AAPJmVAEGQQwBjUf4Au96rALdhxQA6biQA0k1CAEkG4AAJ6i4AHJLRAOsd/gApsRwA6D6nAPU1ggBEuy4AnOmEALQmcABBfl8A1pE5AFODOQCc9DkAi1+EACj5vQD4HzsA3v+XAA+YBQARL+8AClqLAG0fbQDPfjYACcsnAEZPtwCeZj8ALepfALondQDl68cAPXvxAPc5BwCSUooA+2vqAB+xXwAIXY0AMANWAHv8RgDwq2sAILzPADb0mgDjqR0AXmGRAAgb5gCFmWUAoBRfAI1AaACA2P8AJ3NNAAYGMQDKVhUAyahzAHviYABrjMAAIAAAAAkAAAAKAAAADQAAAAsAAAAMAAAAhQAAAAAgAAABIAAAAiAAAAMgAAAEIAAABSAAAAYgAAAIIAAACSAAAAogAAAoIAAAKSAAAF8gAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAZAAAAOgDAAAQJwAAoIYBAEBCDwCAlpgAAOH1BV9wiQD/CS8PdAAAAPMOAgBuAAAA9Q4CAHIAAAD3DgIAZgAAAPkOAgBhAAAA+w4CAGUAAAD9DgIAdwAAAP8OAgBXAAAADA8CAHMAAAAaDwIAUwAAACYPAgBkAAAAMw8CAEQAAAA/DwIAAAAAAAAAAAAAAAAAAAAEAAQAGwAbACAAIAAjACEACgACABYACQAhACEAIQAVABwAAQAUABQAFAAUABQAFAAUAAgABAAFABsAAgAXABsAIAAfAB4AHQAJABMAAAAVABIAFQADAAcAFQAVABQAFAAUABQAFAAUABQAFAAIAAQABQAFAAYAGwAaABgAGQAgAAcAFQAUABQAFAAUABQAFAALABQADQAUAAwAFAAUABQADgAUABQAFAAQABQADwAUABEAAAAAAAAArgAuAC8AMwA1ADAANwCqANsA2wDbANsAAAA9AIcANwA3ANsA2wAAACgANQAuADIALwBiAAAAAABHAAAAAADbAFEAAADbANsA2wAAANsAhABVANsAggDbAAAAgQDbAAAAPgBCAEEASABEAFIAWwAAAAAAXgBfANsAAADbANsA2wAAAAAAewBJAFcAUgBaAFoAXQAAAF8AAABfAAAAZQBdAF8AAABdAG4AagAAAGkAAABuAAAA2wCTAJoAoQCoAKsAcACxALgAvwDGAM0A0wAAAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAMABAAHAAMABAAFAAUABgAGAAgABwAHABEAFgASABEAEgAIAAgADwAPABcADwAYAA8AGQAaABoAHgAWADQAHgAFADIABgAiACIAMwAXABgANQAZABoAGgAqADYAKgA0ADcAMgBFADsAPAAzADsAPABGADUARwBIAEwANgAiAEkASgA3AEUATgBQAGIAUQBSAFQARgBHAFUASABMAFYASQBKAFgAWgBOAEQAUABRAFIAVAA4AC8ALABVACkAVgAbABAAWABaAF0AXQBdAF0AXQBdAF0AXgBeAF4AXgBeAF4AXgBfAF8AXwBfAF8AXwBfAGAACQBgAGAAYABgAGAAYQBhAGMAAgBjAGMAYwBjAGMAZAAAAGQAAABkAGQAZABlAAAAZQBlAGUAZQBlAGYAZgAAAGYAZgBmAGYAZwAAAGcAZwBnAGcAaAAAAGgAaABoAGgAaABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAAAAXAABAF0AXQBeAF4AXwBfAFwAXABcAFwAXABgAFwAXABcAGEAXABcAGIAYgBiAGIAYgBiAGIAYwBkAGUAZgBmAFwAXABnAFwAXABcAGAAXABcAGEAXABhAFwAaABhAFwAYgBiAGIAYgBiAGIAYgBiAGMAZABlAGUAXABmAFwAXABcAGcAaABhAGIAYgBiAGIAYgBiAGIAYgBiAGIAYgBiAGIAYgBiAGIAYgBiAGIAYgBiAGIAYgAAAFwAXABcAFwAXABcAFwAXABcAFwAXABcAAAACgALAAwADQAOAAoADwAQABEAEgATAAoAFAAVABUAFQAWABcAFQAYABUAFQAZABUAFQAVABoAFQAVAAoAFQAVABUAFgAXABgAFQAVABkAFQAVABUAGgAVABUAFQAVABsADAAMACQAHgAeACAAIQAgACEAJAAlACYALQAyAC8ALgAqACUAJgAoACkAMwAqADQAKwA1ADYANwA8ADIARwA9ACIARQAiAD8AQABGADMANABIADUANgA3AC8ASQAqAEcASgBFAEwAXAA8AEYAXAA9AE0ASABOAE8AUgBJAEEAUABRAEoATABTAFQAMQBVAFYAVwBNAE4AWABPAFIAWQBQAFEAWgBbAFMARABUAFUAVgBXAEsARAAsAFgALABZADgALABaAFsAHQAdAB0AHQAdAB0AHQAfAB8AHwAfAB8AHwAfACMAIwAjACMAIwAjACMAJwBcACcAJwAnACcAJwAwADAAOQAcADkAOQA5ADkAOQA6AFwAOgBcADoAOgA6ADsAXAA7ADsAOwA7ADsAPgA+AFwAPgA+AD4APgBCAFwAQgBCAEIAQgBDAFwAQwBDAEMAQwBDAAkAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwACACu/9EACgCu/67/CwCu/67/rv+u/67/rv+u/67/BQDRAK7/0QDRANEA0QDRANEA0QDRAK7/+/+u/w4A7P+u/67/rv+u/9EA0QDRANEA0QANACUADABCABAAUAATAG0AewAUAJgADwCmAMMArv+u/67/rv+u/67/rv+u/67/rv+u/67/rv+u/67/rv+u/67/rv+u/67/rv+u/67/FwCu/3cArv8HAC4Arv8mAK7/FwARACMArv8NAK7/rv+u/67/OgCu/67/NQCu/67/rv8oAK7/BwCu/zsARQCu/0gArv+u/67/rv+u/67/rv/8/+gA9v///xoAAAAnAAEAMgCu/67/AgAkAAMALwCu/67/rv+u/67//v+UAK7/CQAbAK7/vP+u/67/r/+u/67/rv+u/67/rv+u/wAAAAAAAG3m7N4FAAsASQAxAVMAfwEwAWkAeAH/AIEBUwKCAYMBhAGFAYYBVAKHAYgBiQFWAooBVwKLAYwBjgHdAY8BWQKQAVsCkQGSAZMBYAKUAWMClgFpApcBaAKYAZkBnAFvAp0BcgKfAXUCpgGAAqcBqAGpAYMCrAGtAa4BiAKvAbABsQGKArIBiwK3AZICuAG5AbwBvQHEAcYBxAHFAcUBxgHHAckBxwHIAcgByQHKAcwBygHLAcsBzAHxAfMB8QHyAfIB8wH0AfUB9gGVAfcBvwEgAp4BhgOsA4gDrQOJA64DigOvA4wDzAOOA80DjwPOA5kDRQOZA74fowPCA/cD+AP6A/sDYB6bHp4e3wBZH1EfWx9TH10fVR9fH1cfvB+zH8wfwx/sH+Uf/B/zHzoCZSw7AjwCPQKaAT4CZixBAkICQwKAAUQCiQJFAowC9AO4A/kD8gP9A3sD/gN8A/8DfQPABM8EJiHJAyohawArIeUAMiFOIYMhhCFgLGEsYixrAmMsfR1kLH0CbSxRAm4scQJvLFACcCxSAnIscyx1LHYsfiw/An8sQALyLPMsfad5HYunjKeNp2UCqqdmAscQJy3NEC0tdgN3A5wDtQCSA9ADmAPRA6YD1QOgA9YDmgPwA6ED8QOVA/UDzwPXAwAAAABBACAawAAgHwABAS8yAQEFOQEBD0oBAS15AQEFcAMBA5EDIBGjAyAJAARQEBAEICBgBAEhigQBNcEEAQ3QBAE/FAUBEzEFMCagAQEFswEBA80BAQ/eAQER+AEBJyICARHYAwEXAB4BlaAeAV8IH/gIGB/4Bigf+Ag4H/gISB/4Bmgf+AiIH/gImB/4CKgf+Ai4H/gCuh+2AsgfqgTYH/gC2h+cAugf+ALqH5AC+B+AAvofggJGAgEJEAUBA2AhEBAALDAvZywBBYAsAWPrLAEDQKYBLYCmARcipwENMqcBPXmnAQN+pwEJkKcBA6CnAQkh/yAaAAAAAHsgdmFyIHBhdGggPSBQb2ludGVyX3N0cmluZ2lmeSgkMCk7IHZhciBkYXRhID0gUG9pbnRlcl9zdHJpbmdpZnkoJDEpOyBGUy5jcmVhdGVQYXRoKCIvIiwgUEFUSC5kaXJuYW1lKHBhdGgpKTsgRlMud3JpdGVGaWxlKFBBVEguam9pbigiLyIsIHBhdGgpLCBkYXRhKTsgfQBjb3JlAHhkb3R2ZXJzaW9uADEuNwAxLjQAMS4yAF9sZHJhd18AX2hkcmF3XwBfdGRyYXdfAF9obGRyYXdfAF90bGRyYXdfAHhkb3QgdmVyc2lvbiAiJXMiIHRvbyBsb25nACAlZCAAJS4wMmYAJXMlZCAtACMlMDJ4JTAyeCUwMnglMDJ4AHNldGxpbmV3aWR0aCgAJS4zZgBTIABDIAAyIAAlLjAzZgBFIABlIABGIAB0ICV1IABUIABkb3Q6ZG90AGd2OmRvdABjYW5vbjpkb3QAcGxhaW46ZG90AHBsYWluLWV4dDpkb3QAeGRvdDp4ZG90AHhkb3QxLjI6eGRvdAB4ZG90MS40Onhkb3QASSAAIl9zdWJncmFwaF9jbnQiOiAlZAAiX2d2aWQiOiAlZAAiZWRnZXMiOiBbCgAiX2d2aWQiOiAlZCwKACJ0YWlsIjogJWQsCgAiaGVhZCI6ICVkACJvYmplY3RzIjogWwoAIm5vZGVzIjogWwoAIm5hbWUiOiAiJXMiAFwiAFwvAFxiAFxmAFxuAFxyAFx0ACJzdWJncmFwaHMiOiBbCgAiJXMiOiAAIiVzIgBDb3VsZCBub3QgcGFyc2UgeGRvdCAiJXMiCgBbCgAib3AiOiAiJWMiLAoAInJlY3QiOiBbJS4wM2YsJS4wM2YsJS4wM2YsJS4wM2ZdCgAib3AiOiAiTCIsCgAib3AiOiAiVCIsCgAicHQiOiBbJS4wM2YsJS4wM2ZdLAoAImFsaWduIjogIiVjIiwKACJ3aWR0aCI6ICUuMDNmLAoAInRleHQiOiAiJXMiCgAiZ3JhZCI6ICJub25lIiwKACJjb2xvciI6ICIlcyIKACJncmFkIjogImxpbmVhciIsCgAiZ3JhZCI6ICJyYWRpYWwiLAoAIm9wIjogIkYiLAoAInNpemUiOiAlLjAzZiwKACJmYWNlIjogIiVzIgoAIm9wIjogIlMiLAoAInN0eWxlIjogIiVzIgoAIm9wIjogInQiLAoAImZvbnRjaGFyIjogJWQKACJwMCI6IFslLjAzZiwlLjAzZiwlLjAzZl0sCgAicDEiOiBbJS4wM2YsJS4wM2YsJS4wM2ZdLAoAInN0b3BzIjogWwB7ImZyYWMiOiAlLjAzZiwgImNvbG9yIjogIiVzIn0AXQoAInAwIjogWyUuMDNmLCUuMDNmXSwKACJwMSI6IFslLjAzZiwlLjAzZl0sCgAicG9pbnRzIjogWwBbJS4wM2YsJS4wM2ZdAGRyYXdfAGxkcmF3XwBoZHJhd18AdGRyYXdfAGhsZHJhd18AdGxkcmF3XwAiZGlyZWN0ZWQiOiAlcywKACJzdHJpY3QiOiAlcwAgIABEdXBsaWNhdGUgY2x1c3RlciBuYW1lICIlcyIKAHhkb3QAanNvbgBqc29uMABkb3RfanNvbgB4ZG90X2pzb24AanNvbjpqc29uAGpzb24wOmpzb24AZG90X2pzb246anNvbgB4ZG90X2pzb246anNvbgBuID49IDQAZ3ZyZW5kZXJfY29yZV9maWcuYwBmaWdfYmV6aWVyAGZpZ19yZXNvbHZlX2NvbG9yAGZpZwBmaWc6ZmlnAG1hcAByZWN0ICVzICVkLCVkICVkLCVkCgBjaXJjbGUgJXMgJWQsJWQsJWQKAHBvbHkgJXMAICVkLCVkAGd2cmVuZGVyX2NvcmVfbWFwLmMAbWFwX291dHB1dF9zaGFwZQByZWN0YW5nbGUgKCVkLCVkKSAoJWQsJWQpICVzICVzCgA8YXJlYSBzaGFwZT0iY2lyY2xlIgA8YXJlYSBzaGFwZT0icmVjdCIAPGFyZWEgc2hhcGU9InBvbHkiACBocmVmPSIAIHRpdGxlPSIAIGFsdD0iIgAgY29vcmRzPSIAJWQsJWQsJWQAJWQsJWQsJWQsJWQAJWQsJWQALCVkLCVkACI+CgA8L21hcD4KAGJhc2UgcmVmZXJlcgoAZGVmYXVsdCAAPG1hcCBpZD0iACIgbmFtZT0iAGlzbWFwOm1hcABjbWFwOm1hcABpbWFwOm1hcABjbWFweDptYXAAaW1hcF9ucDptYXAAY21hcHhfbnA6bWFwACMgJXMKACVkICVkICVkICVkICVkICVkICVkICVkICVkICUuMWYgJWQgJWQgJWQgJWQgJWQgJWQKACVkICVkICVkICVkICVkICVkICVkICVkICVkICUuMWYgJWQgJWQgJWQgJWQKACVkICVkICVkICVkICVkICVkICVkICVkICVkICUuM2YgJWQgJS40ZiAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZAoAJWQgJWQgIyUwMnglMDJ4JTAyeAoAZ3ZyZW5kZXJfY29yZV9tcC5jAG1wX3Jlc29sdmVfY29sb3IAJWQgJWQgJWQgJWQgJWQgJWQgJS4xZiAlLjRmICVkICUuMWYgJS4xZiAlZCAlZCAlc1wwMDEKACMgZW5kIG9mIEZJRyBmaWxlCgAjRklHIDMuMgoAIyBHZW5lcmF0ZWQgYnkgJXMgdmVyc2lvbiAlcyAoJXMpCgAjIFRpdGxlOiAlcwoAIyBQYWdlczogJWQKAFBvcnRyYWl0CgBDZW50ZXIKAEluY2hlcwoATGV0dGVyCgAxMDAuMDAKAFNpbmdsZQoALTIKADEyMDAAIDIKAG1wAG1wOm1wACBdICAlZCB0cnVlICVzCgAgXSAgJWQgZmFsc2UgJXMKACBzZXRsaW5ld2lkdGgKACVzIABzZXRoc2IAJS41ZyAlLjVnICUuNWcgJXNjb2xvcgoAJSAAbmV3cGF0aCAAIG1vdmV0bwoAIGxpbmV0bwoAc3Ryb2tlCgAgY3VydmV0bwoAY2xvc2VwYXRoIGZpbGwKAGNsb3NlcGF0aCBzdHJva2UKACBlbGxpcHNlX3BhdGggZmlsbAoAIGVsbGlwc2VfcGF0aCBzdHJva2UKACAvJXMgc2V0X2ZvbnQKACBtb3ZldG8gACAlcyBhbGlnbmVkdGV4dAoAWyAvUmVjdCBbIAAgXQoAICAvQm9yZGVyIFsgMCAwIDAgXQogIC9BY3Rpb24gPDwgL1N1YnR5cGUgL1VSSSAvVVJJICVzID4+CiAgL1N1YnR5cGUgL0xpbmsKL0FOTiBwZGZtYXJrCgBnc2F2ZQoAJSUgJXMKADAgMCAwIGVkZ2Vjb2xvcgoAZW5kcGFnZQpzaG93cGFnZQpncmVzdG9yZQoAJSVQYWdlVHJhaWxlcgoAJSUlJUVuZFBhZ2U6ICVkCgAlJSUlUGFnZTogJWQgJWQKACUlJSVQYWdlQm91bmRpbmdCb3g6ICVkICVkICVkICVkCgBMYW5kc2NhcGUAUG9ydHJhaXQAJSUlJVBhZ2VPcmllbnRhdGlvbjogJXMKADw8IC9QYWdlU2l6ZSBbJWQgJWRdID4+IHNldHBhZ2VkZXZpY2UKACVkICVkICVkIGJlZ2lucGFnZQoAZ3NhdmUKJWQgJWQgJWQgJWQgYm94cHJpbSBjbGlwIG5ld3BhdGgKACVnICVnIHNldF9zY2FsZSAlZCByb3RhdGUgJWcgJWcgdHJhbnNsYXRlCgBjYW52YXMgc2l6ZSAoJWQsJWQpIGV4Y2VlZHMgUERGIGxpbWl0ICglZCkKCShzdWdnZXN0IHNldHRpbmcgYSBib3VuZGluZyBib3ggc2l6ZSwgc2VlIGRvdCgxKSkKAFsgL0Nyb3BCb3ggWyVkICVkICVkICVkXSAvUEFHRVMgcGRmbWFyawoAJWQgJWQgc2V0bGF5ZXIKACUlJSVUaXRsZTogJXMKACUlUGFnZXM6IChhdGVuZCkKACUlUGFnZXM6IDEKACUlQm91bmRpbmdCb3g6IChhdGVuZCkKACUlJSVCb3VuZGluZ0JveDogJWQgJWQgJWQgJWQKACUlRW5kQ29tbWVudHMKc2F2ZQoAc2V0dXBMYXRpbjEKAFsge0NhdGFsb2d9IDw8IC9VUkkgPDwgL0Jhc2UgJXMgPj4gPj4KL1BVVCBwZGZtYXJrCgAlJUJlZ2luUHJvbG9nAC9Eb3REaWN0IDIwMCBkaWN0IGRlZgBEb3REaWN0IGJlZ2luAC9zZXR1cExhdGluMSB7AG1hcmsAL0VuY29kaW5nVmVjdG9yIDI1NiBhcnJheSBkZWYAIEVuY29kaW5nVmVjdG9yIDAASVNPTGF0aW4xRW5jb2RpbmcgMCAyNTUgZ2V0aW50ZXJ2YWwgcHV0aW50ZXJ2YWwARW5jb2RpbmdWZWN0b3IgNDUgL2h5cGhlbiBwdXQAJSBTZXQgdXAgSVNPIExhdGluIDEgY2hhcmFjdGVyIGVuY29kaW5nAC9zdGFybmV0SVNPIHsAICAgICAgICBkdXAgZHVwIGZpbmRmb250IGR1cCBsZW5ndGggZGljdCBiZWdpbgAgICAgICAgIHsgMSBpbmRleCAvRklEIG5lIHsgZGVmIH17IHBvcCBwb3AgfSBpZmVsc2UAICAgICAgICB9IGZvcmFsbAAgICAgICAgIC9FbmNvZGluZyBFbmNvZGluZ1ZlY3RvciBkZWYAICAgICAgICBjdXJyZW50ZGljdCBlbmQgZGVmaW5lZm9udAB9IGRlZgAvVGltZXMtUm9tYW4gc3Rhcm5ldElTTyBkZWYAL1RpbWVzLUl0YWxpYyBzdGFybmV0SVNPIGRlZgAvVGltZXMtQm9sZCBzdGFybmV0SVNPIGRlZgAvVGltZXMtQm9sZEl0YWxpYyBzdGFybmV0SVNPIGRlZgAvSGVsdmV0aWNhIHN0YXJuZXRJU08gZGVmAC9IZWx2ZXRpY2EtT2JsaXF1ZSBzdGFybmV0SVNPIGRlZgAvSGVsdmV0aWNhLUJvbGQgc3Rhcm5ldElTTyBkZWYAL0hlbHZldGljYS1Cb2xkT2JsaXF1ZSBzdGFybmV0SVNPIGRlZgAvQ291cmllciBzdGFybmV0SVNPIGRlZgAvQ291cmllci1PYmxpcXVlIHN0YXJuZXRJU08gZGVmAC9Db3VyaWVyLUJvbGQgc3Rhcm5ldElTTyBkZWYAL0NvdXJpZXItQm9sZE9ibGlxdWUgc3Rhcm5ldElTTyBkZWYAY2xlYXJ0b21hcmsAfSBiaW5kIGRlZgAlJUJlZ2luUmVzb3VyY2U6IHByb2NzZXQgZ3JhcGh2aXogMCAwAC9jb29yZC1mb250LWZhbWlseSAvVGltZXMtUm9tYW4gZGVmAC9kZWZhdWx0LWZvbnQtZmFtaWx5IC9UaW1lcy1Sb21hbiBkZWYAL2Nvb3JkZm9udCBjb29yZC1mb250LWZhbWlseSBmaW5kZm9udCA4IHNjYWxlZm9udCBkZWYAL0ludlNjYWxlRmFjdG9yIDEuMCBkZWYAL3NldF9zY2FsZSB7ACAgICAgICBkdXAgMSBleGNoIGRpdiAvSW52U2NhbGVGYWN0b3IgZXhjaCBkZWYAICAgICAgIHNjYWxlACUgc3R5bGVzAC9zb2xpZCB7IFtdIDAgc2V0ZGFzaCB9IGJpbmQgZGVmAC9kYXNoZWQgeyBbOSBJbnZTY2FsZUZhY3RvciBtdWwgZHVwIF0gMCBzZXRkYXNoIH0gYmluZCBkZWYAL2RvdHRlZCB7IFsxIEludlNjYWxlRmFjdG9yIG11bCA2IEludlNjYWxlRmFjdG9yIG11bF0gMCBzZXRkYXNoIH0gYmluZCBkZWYAL2ludmlzIHsvZmlsbCB7bmV3cGF0aH0gZGVmIC9zdHJva2Uge25ld3BhdGh9IGRlZiAvc2hvdyB7cG9wIG5ld3BhdGh9IGRlZn0gYmluZCBkZWYAL2JvbGQgeyAyIHNldGxpbmV3aWR0aCB9IGJpbmQgZGVmAC9maWxsZWQgeyB9IGJpbmQgZGVmAC91bmZpbGxlZCB7IH0gYmluZCBkZWYAL3JvdW5kZWQgeyB9IGJpbmQgZGVmAC9kaWFnb25hbHMgeyB9IGJpbmQgZGVmAC90YXBlcmVkIHsgfSBiaW5kIGRlZgAlIGhvb2tzIGZvciBzZXR0aW5nIGNvbG9yIAAvbm9kZWNvbG9yIHsgc2V0aHNiY29sb3IgfSBiaW5kIGRlZgAvZWRnZWNvbG9yIHsgc2V0aHNiY29sb3IgfSBiaW5kIGRlZgAvZ3JhcGhjb2xvciB7IHNldGhzYmNvbG9yIH0gYmluZCBkZWYAL25vcGNvbG9yIHtwb3AgcG9wIHBvcH0gYmluZCBkZWYAL2JlZ2lucGFnZSB7CSUgaSBqIG5wYWdlcwAJL25wYWdlcyBleGNoIGRlZgAJL2ogZXhjaCBkZWYACS9pIGV4Y2ggZGVmAAkvc3RyIDEwIHN0cmluZyBkZWYACW5wYWdlcyAxIGd0IHsACQlnc2F2ZQAJCQljb29yZGZvbnQgc2V0Zm9udAAJCQkwIDAgbW92ZXRvAAkJCShcKCkgc2hvdyBpIHN0ciBjdnMgc2hvdyAoLCkgc2hvdyBqIHN0ciBjdnMgc2hvdyAoXCkpIHNob3cACQlncmVzdG9yZQAJfSBpZgAvc2V0X2ZvbnQgewAJZmluZGZvbnQgZXhjaAAJc2NhbGVmb250IHNldGZvbnQAJSBkcmF3IHRleHQgZml0dGVkIHRvIGl0cyBleHBlY3RlZCB3aWR0aAAvYWxpZ25lZHRleHQgewkJCSUgd2lkdGggdGV4dAAJL3RleHQgZXhjaCBkZWYACS93aWR0aCBleGNoIGRlZgAJZ3NhdmUACQl3aWR0aCAwIGd0IHsACQkJW10gMCBzZXRkYXNoAAkJCXRleHQgc3RyaW5nd2lkdGggcG9wIHdpZHRoIGV4Y2ggc3ViIHRleHQgbGVuZ3RoIGRpdiAwIHRleHQgYXNob3cACQl9IGlmAAlncmVzdG9yZQAvYm94cHJpbSB7CQkJCSUgeGNvcm5lciB5Y29ybmVyIHhzaXplIHlzaXplAAkJNCAyIHJvbGwACQltb3ZldG8ACQkyIGNvcHkACQlleGNoIDAgcmxpbmV0bwAJCTAgZXhjaCBybGluZXRvAAkJcG9wIG5lZyAwIHJsaW5ldG8ACQljbG9zZXBhdGgAL2VsbGlwc2VfcGF0aCB7AAkvcnkgZXhjaCBkZWYACS9yeCBleGNoIGRlZgAJL3kgZXhjaCBkZWYACS94IGV4Y2ggZGVmAAltYXRyaXggY3VycmVudG1hdHJpeAAJbmV3cGF0aAAJeCB5IHRyYW5zbGF0ZQAJcnggcnkgc2NhbGUACTAgMCAxIDAgMzYwIGFyYwAJc2V0bWF0cml4AC9lbmRwYWdlIHsgc2hvd3BhZ2UgfSBiaW5kIGRlZgAvc2hvd3BhZ2UgeyB9IGRlZgAvbGF5ZXJjb2xvcnNlcQAJWwklIGxheWVyIGNvbG9yIHNlcXVlbmNlIC0gZGFya2VzdCB0byBsaWdodGVzdAAJCVswIDAgMF0ACQlbLjIgLjggLjhdAAkJWy40IC44IC44XQAJCVsuNiAuOCAuOF0ACQlbLjggLjggLjhdAAldAGRlZgAvbGF5ZXJsZW4gbGF5ZXJjb2xvcnNlcSBsZW5ndGggZGVmAC9zZXRsYXllciB7L21heGxheWVyIGV4Y2ggZGVmIC9jdXJsYXllciBleGNoIGRlZgAJbGF5ZXJjb2xvcnNlcSBjdXJsYXllciAxIHN1YiBsYXllcmxlbiBtb2QgZ2V0AAlhbG9hZCBwb3Agc2V0aHNiY29sb3IACS9ub2RlY29sb3Ige25vcGNvbG9yfSBkZWYACS9lZGdlY29sb3Ige25vcGNvbG9yfSBkZWYACS9ncmFwaGNvbG9yIHtub3Bjb2xvcn0gZGVmAC9vbmxheWVyIHsgY3VybGF5ZXIgbmUge2ludmlzfSBpZiB9IGRlZgAvb25sYXllcnMgewAJL215dXBwZXIgZXhjaCBkZWYACS9teWxvd2VyIGV4Y2ggZGVmAAljdXJsYXllciBteWxvd2VyIGx0AAljdXJsYXllciBteXVwcGVyIGd0AAlvcgAJe2ludmlzfSBpZgAvY3VybGF5ZXIgMCBkZWYAJSVFbmRSZXNvdXJjZQAlJUVuZFByb2xvZwAlJUJlZ2luU2V0dXAAMTQgZGVmYXVsdC1mb250LWZhbWlseSBzZXRfZm9udAAlIC9hcnJvd2xlbmd0aCAxMCBkZWYAJSAvYXJyb3d3aWR0aCA1IGRlZgAlIG1ha2Ugc3VyZSBwZGZtYXJrIGlzIGhhcm1sZXNzIGZvciBQUy1pbnRlcnByZXRlcnMgb3RoZXIgdGhhbiBEaXN0aWxsZXIAL3BkZm1hcmsgd2hlcmUge3BvcH0ge3VzZXJkaWN0IC9wZGZtYXJrIC9jbGVhcnRvbWFyayBsb2FkIHB1dH0gaWZlbHNlACUgbWFrZSAnPDwnIGFuZCAnPj4nIHNhZmUgb24gUFMgTGV2ZWwgMSBkZXZpY2VzAC9sYW5ndWFnZWxldmVsIHdoZXJlIHtwb3AgbGFuZ3VhZ2VsZXZlbH17MX0gaWZlbHNlADIgbHQgewAgICAgdXNlcmRpY3QgKDw8KSBjdm4gKFspIGN2biBsb2FkIHB1dAAgICAgdXNlcmRpY3QgKD4+KSBjdm4gKFspIGN2biBsb2FkIHB1dAB9IGlmACUlRW5kU2V0dXAAJSVUcmFpbGVyCgAlJSUlUGFnZXM6ICVkCgBlbmQKcmVzdG9yZQoAJSVFT0YKACUhUFMtQWRvYmUtMy4wACBFUFNGLTMuMAoAJSUlJUNyZWF0b3I6ICVzIHZlcnNpb24gJXMgKCVzKQoAcHMyOnBzADwhLS0gADxwb2x5bGluZQAgcG9pbnRzPSIAIi8+CgAgZmlsbD0iAHVybCgjbF8lZCkAdXJsKCNyXyVkKQAiIGZpbGwtb3BhY2l0eT0iJWYAIiBzdHJva2U9IgAiIHN0cm9rZS13aWR0aD0iACIgc3Ryb2tlLWRhc2hhcnJheT0iJXMANSwyADEsNQAiIHN0cm9rZS1vcGFjaXR5PSIlZgBndnJlbmRlcl9jb3JlX3N2Zy5jAHN2Z19wcmludF9jb2xvcgA8cGF0aAAgaWQ9IgBfcCIgACBkPSIAJWMAPGRlZnM+CjxyYWRpYWxHcmFkaWVudCBpZD0icl8lZCIgY3g9IjUwJSUiIGN5PSI1MCUlIiByPSI3NSUlIiBmeD0iJWQlJSIgZnk9IiVkJSUiPgoAPHN0b3Agb2Zmc2V0PSIwIiBzdHlsZT0ic3RvcC1jb2xvcjoAO3N0b3Atb3BhY2l0eToAMS4AOyIvPgoAPHN0b3Agb2Zmc2V0PSIxIiBzdHlsZT0ic3RvcC1jb2xvcjoAOyIvPgo8L3JhZGlhbEdyYWRpZW50Pgo8L2RlZnM+CgA8ZGVmcz4KPGxpbmVhckdyYWRpZW50IGlkPSJsXyVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgAHgxPSIAIiB5MT0iACIgeDI9IgAiIHkyPSIAIiA+CgA8c3RvcCBvZmZzZXQ9IiUuMDNmIiBzdHlsZT0ic3RvcC1jb2xvcjoAOyIvPgo8L2xpbmVhckdyYWRpZW50Pgo8L2RlZnM+CgA8cG9seWdvbgA8ZWxsaXBzZQAgY3g9IgAiIGN5PSIAIiByeD0iACIgcnk9IgA8dGV4dAAgdGV4dC1hbmNob3I9InN0YXJ0IgAgdGV4dC1hbmNob3I9ImVuZCIAIHRleHQtYW5jaG9yPSJtaWRkbGUiACB4PSIAIiB5PSIAIGZvbnQtZmFtaWx5PSIlcwAsJXMAIGZvbnQtd2VpZ2h0PSIlcyIAIGZvbnQtc3RyZXRjaD0iJXMiACBmb250LXN0eWxlPSIlcyIAIGZvbnQtZmFtaWx5PSIlcyIAIGZvbnQtd2VpZ2h0PSJib2xkIgAgZm9udC1zdHlsZT0iaXRhbGljIgAgdGV4dC1kZWNvcmF0aW9uPSIAJXNvdmVybGluZQAlc2xpbmUtdGhyb3VnaAAgYmFzZWxpbmUtc2hpZnQ9InN1cGVyIgAgYmFzZWxpbmUtc2hpZnQ9InN1YiIAIGZvbnQtc2l6ZT0iJS4yZiIAIGZpbGw9IiVzIgAgZmlsbD0iIyUwMnglMDJ4JTAyeCIAc3ZnX3RleHRzcGFuAD4APHRleHRQYXRoIHhsaW5rOmhyZWY9IiMlc19wIiBzdGFydE9mZnNldD0iNTAlJSI+ADx0c3BhbiB4PSIwIiBkeT0iACI+ADwvdHNwYW4+PC90ZXh0UGF0aD4APC90ZXh0PgoAPC9nPgoAPGcAIGlkPSJhXwAgeGxpbms6aHJlZj0iACB4bGluazp0aXRsZT0iACB0YXJnZXQ9IgA8dGl0bGU+ADwvdGl0bGU+CgA8ZyBpZD0iAF8lcwAiIGNsYXNzPSIlcwBjbGFzcwAgdHJhbnNmb3JtPSJzY2FsZSgAKSByb3RhdGUoJWQpIHRyYW5zbGF0ZSgAKSI+CgA8L3N2Zz4KADwhLS0AIFBhZ2VzOiAlZCAtLT4KADxzdmcgd2lkdGg9IiVkcHQiIGhlaWdodD0iJWRwdCIKACB2aWV3Qm94PSIlLjJmICUuMmYgJS4yZiAlLjJmIgAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgAgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiADw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgoAc3R5bGVzaGVldAA8P3htbC1zdHlsZXNoZWV0IGhyZWY9IgAiIHR5cGU9InRleHQvY3NzIj8+CgA8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iCgAgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CgA8IS0tIEdlbmVyYXRlZCBieSAAZGFya2JsdWUAZGFya2N5YW4AZGFya2dyYXkAZGFya2dyZXkAZGFya21hZ2VudGEAZGFya3JlZABsaWdodGdyZWVuACMgACBjcmVhdGUgbGluZSAAIC1maWxsIAAgLWRhc2ggNQAgLWRhc2ggMgBndnJlbmRlcl9jb3JlX3RrLmMAdGtnZW5fcHJpbnRfdGFncwBncmFwaCBsYWJlbAAgLXRhZ3MgeyVkJXMlcH0AdGtnZW5fcHJpbnRfY29sb3IAJGMAIC13aWR0aCAAIC1zbW9vdGggYmV6aWVyIAAgY3JlYXRlIHBvbHlnb24gACAtb3V0bGluZSAAIGNyZWF0ZSBvdmFsIAAgY3JlYXRlIHRleHQgACAtdGV4dCB7AH0AIC1mb250IHsAICVkfQAgLWFuY2hvciB3ACAtYW5jaG9yIGUAIwAgVGl0bGU6IAAgUGFnZXM6ICVkCgAjIEdlbmVyYXRlZCBieSAAKQoAdGsAdGs6dGsAICAgICAgPCEtLSAAIC0tPgoARXJyb3IgZHVyaW5nIGNvbnZlcnNpb24gdG8gIlVURi04Ii4gIFF1aXRpbmcuCgAgPHY6c2hhcGUgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlOyAAIHdpZHRoOiAlZDsgaGVpZ2h0OiAlZCIgZmlsbGVkPSJmYWxzZSI+ADx2OnBhdGggdj0iACBtIAAlLjBmLCUuMGYgACBsIAAgZSAAIi8+ADwvdjpzaGFwZT4KADx2OnN0cm9rZSBjb2xvcj0iACIgd2VpZ2h0PSIlLjBmcHQAIiBkYXNoc3R5bGU9ImRhc2gAIiBkYXNoc3R5bGU9ImRvdAAiIC8+ACMlMDJ4JTAyeCUwMngAZ3ZyZW5kZXJfY29yZV92bWwuYwB2bWxfcHJpbnRfY29sb3IAIHdpZHRoOiAlZDsgaGVpZ2h0OiAlZCIAID4APHY6cGF0aCAgdj0iAC8+PC92OnNoYXBlPgoAbSAAJXMlLjBmLCUuMGYgAGMgACBmaWxsZWQ9InRydWUiIGZpbGxjb2xvcj0iACIgACBmaWxsZWQ9ImZhbHNlIiAAJS4wZiAlLjBmIABsIAB4IGUgIi8+ACAgPHY6b3ZhbCBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7ACBsZWZ0OiAlLjJmOyB0b3A6ICUuMmY7ACB3aWR0aDogJS4yZjsgaGVpZ2h0OiAlLjJmIgA8L3Y6b3ZhbD4KADx2OnJlY3Qgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlOyAAIHN0cm9rZWQ9ImZhbHNlIiBmaWxsZWQ9ImZhbHNlIj4KADx2OnRleHRib3ggaW5zZXQ9IjAsMCwwLDAiIHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTsgdi10ZXh0LXdyYXBwaW5nOidmYWxzZSc7cGFkZGluZzonMCc7AGZvbnQtZmFtaWx5OiAnJXMnOwBmb250LXdlaWdodDogJXM7AGZvbnQtc3RyZXRjaDogJXM7AGZvbnQtc3R5bGU6ICVzOwAgZm9udC1zaXplOiAlLjJmcHQ7AGNvbG9yOiVzOwBjb2xvcjojJTAyeCUwMnglMDJ4OwB2bWxfdGV4dHNwYW4AIj48Y2VudGVyPgA8L2NlbnRlcj48L3Y6dGV4dGJveD4KADwvdjpyZWN0PgoAPC9hPgoAPGEAIGhyZWY9IiVzIgAgdGl0bGU9IiVzIgAgdGFyZ2V0PSIlcyIAPgoAPC92Omdyb3VwPgoAPC9ESVY+CgA8RElWIGlkPSdfVk1MMl8nIHN0eWxlPSJwb3NpdGlvbjpyZWxhdGl2ZTt2aXNpYmlsaXR5OmhpZGRlbiI+CgA8IS0tIGluc2VydCBhbnkgb3RoZXIgaHRtbCBjb250ZW50IGhlcmUgLS0+CgA8RElWIGlkPSdfbm90Vk1MMV8nIHN0eWxlPSJwb3NpdGlvbjpyZWxhdGl2ZTsiPgoAPCEtLSB0aGlzIHNob3VsZCBvbmx5IGRpc3BsYXkgb24gTk9OLUlFIGJyb3dzZXJzIC0tPgoAPEgyPlNvcnJ5LCB0aGlzIGRpYWdyYW0gd2lsbCBvbmx5IGRpc3BsYXkgY29ycmVjdGx5IG9uIEludGVybmV0IEV4cGxvcmVyIDUgKGFuZCB1cCkgYnJvd3NlcnMuPC9IMj4KADxESVYgaWQ9J19ub3RWTUwyXycgc3R5bGU9InBvc2l0aW9uOnJlbGF0aXZlOyI+CgA8IS0tIGluc2VydCBhbnkgb3RoZXIgTk9OLUlFIGh0bWwgY29udGVudCBoZXJlIC0tPgoAPC9CT0RZPgo8L0hUTUw+CgA8SEVBRD4APE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgoAPFRJVExFPgA8L1RJVExFPgA8IS0tIFBhZ2VzOiAlZCAtLT4KACAgIDxTQ1JJUFQgTEFOR1VBR0U9J0phdmFzY3JpcHQnPgoAICAgZnVuY3Rpb24gYnJvd3NlcmNoZWNrKCkKACAgIHsKACAgICAgIHZhciB1YSA9IHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50CgAgICAgICB2YXIgbXNpZSA9IHVhLmluZGV4T2YgKCAnTVNJRSAnICkKACAgICAgIHZhciBpZXZlcnM7CgAgICAgICB2YXIgaXRlbTsKACAgICAgIHZhciBWTUx5ZXM9bmV3IEFycmF5KCdfVk1MMV8nLCdfVk1MMl8nKTsKACAgICAgIHZhciBWTUxubz1uZXcgQXJyYXkoJ19ub3RWTUwxXycsJ19ub3RWTUwyXycpOwoAICAgICAgaWYgKCBtc2llID4gMCApeyAgICAgIC8vIElmIEludGVybmV0IEV4cGxvcmVyLCByZXR1cm4gdmVyc2lvbiBudW1iZXIKACAgICAgICAgIGlldmVycz0gcGFyc2VJbnQgKHVhLnN1YnN0cmluZyAobXNpZSs1LCB1YS5pbmRleE9mICgnLicsIG1zaWUgKSkpCgAgICAgICB9CgAgICAgICBpZiAoaWV2ZXJzPj01KXsKACAgICAgICBmb3IgKHggaW4gVk1MeWVzKXsKACAgICAgICAgIGl0ZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChWTUx5ZXNbeF0pOwoAICAgICAgICAgaWYgKGl0ZW0pIHsKACAgICAgICAgICAgaXRlbS5zdHlsZS52aXNpYmlsaXR5PSd2aXNpYmxlJzsKACAgICAgICAgIH0KACAgICAgICB9CgAgICAgICAgZm9yICh4IGluIFZNTG5vKXsKACAgICAgICAgIGl0ZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChWTUxub1t4XSk7CgAgICAgICAgICAgIGl0ZW0uc3R5bGUudmlzaWJpbGl0eT0naGlkZGVuJzsKACAgICAgfWVsc2V7CgAgICAgIH0KACAgIH0KACAgIDwvU0NSSVBUPgoAPC9IRUFEPgA8Qk9EWSBvbmxvYWQ9J2Jyb3dzZXJjaGVjaygpOyc+CgA8RElWIGlkPSdfVk1MMV8nIHN0eWxlPSJwb3NpdGlvbjpyZWxhdGl2ZTsgZGlzcGxheTppbmxpbmU7IHZpc2liaWxpdHk6aGlkZGVuACB3aWR0aDogJWRwdDsgaGVpZ2h0OiAlZHB0Ij4KADxTVFlMRT4KAHZcOiogeyBiZWhhdmlvcjogdXJsKCNkZWZhdWx0I1ZNTCk7ZGlzcGxheTppbmxpbmUtYmxvY2t9CgA8L1NUWUxFPgoAPHhtbDpuYW1lc3BhY2UgbnM9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206dm1sIiBwcmVmaXg9InYiIC8+CgAgPHY6Z3JvdXAgc3R5bGU9InBvc2l0aW9uOnJlbGF0aXZlOyAAIHdpZHRoOiAlZHB0OyBoZWlnaHQ6ICVkcHQiACBjb29yZG9yaWdpbj0iMCwwIiBjb29yZHNpemU9IiVkLCVkIiA+ADxIVE1MPgoACjwhLS0gR2VuZXJhdGVkIGJ5IAAgdmVyc2lvbiAAICgAKQotLT4KAGFxdWEAZnVjaHNpYQBsaW1lAG9saXZlAHRlYWwAdm1sAHZtbDp2bWwALy8qKiogY29tbWVudDogJXMKAC8vKioqIHBvbHlsaW5lCgBzY2FsZSAgICA8JTkuM2YsICU5LjNmLCAlOS4zZj4KAHJvdGF0ZSAgIDwlOS4zZiwgJTkuM2YsICU5LjNmPgoAdHJhbnNsYXRlPCU5LjNmLCAlOS4zZiwgJTkuM2Y+CgBzcGhlcmVfc3dlZXAgewogICAgJXMKICAgICVkLAoAbGluZWFyX3NwbGluZQA8JTkuM2YsICU5LjNmLCAlOS4zZj4sICUuM2YKACVzICAgICVzACAgICB0b2xlcmFuY2UgMC4wMQogICAgJXMgICAgJXMgICAgJXMgICAgJXN9CgAlcyVzACVzIHRyYW5zbWl0ICUuM2YAUmVkAEdyZWVuAEJsdWUAcmdiPCU5LjNmLCAlOS4zZiwgJTkuM2Y+IHRyYW5zbWl0ICUuM2YAb29wcywgaW50ZXJuYWwgZXJyb3I6IHVuaGFuZGxlZCBjb2xvciB0eXBlPSVkICVzCgBndnJlbmRlcl9jb3JlX3Bvdi5jAHBvdl9jb2xvcl9hc19zdHIAcGlnbWVudCB7IGNvbG9yICVzIH0KAHBvdiByZW5kZXJlcjplbCAtICVzCgAvLyoqKiBiZXppZXIKAGJfc3BsaW5lACAgICAgICAgdG9sZXJhbmNlIDAuMDEKICAgICVzICAgICVzICAgICVzICAgICVzfQoALy8qKiogcG9seWdvbgoAICAgIHRvbGVyYW5jZSAwLjEKICAgICVzICAgICVzICAgICVzICAgICVzfQoAcG9seWdvbiB7ICVkLAoAPCU5LjNmLCAlOS4zZiwgJTkuM2Y+ACVzCiAgICAlcwAKICAgICVzICAgICVzICAgICVzICAgICVzfQoALy8qKiogZWxsaXBzZQoAdG9ydXMgeyAlLjNmLCAlLjNmCiAgICAlcyAgICAlcyAgICAlcyAgICAlc30KAHNwaGVyZSB7PCU5LjNmLCAlOS4zZiwgJTkuM2Y+LCAxLjAKICAgICVzICAgICVzICAgICVzICAgICVzfQoALy8qKiogdGV4dHNwYW46ICVzLCBmb250c2l6ZSA9ICUuM2YsIGZvbnRuYW1lID0gJXMKAHNjYWxlICUuM2YKAHRleHQgewogICAgdHRmICIlcyIsCiAgICAiJXMiLCAlLjNmLCAlLjNmCiAgICAlcyAgICAlcyAgICAlcyAgICAlcyAgICAlc30KACAgICBub19zaGFkb3cKAC8vKioqIGVuZF9lZGdlCgAvLyoqKiBiZWdpbl9lZGdlCgAvLyoqKiBlbmRfbm9kZQoALy8qKiogYmVnaW5fbm9kZTogJXMKAC8vKioqIGVuZF9jbHVzdGVyCgAvLyoqKiBiZWdpbl9jbHVzdGVyCgAvLyoqKiBlbmRfcGFnZQoALy8qKiogYmVnaW5fcGFnZQoALy8qKiogZW5kX2xheWVyCgAvLyoqKiBiZWdpbl9sYXllcjogJXMsICVkLyVkCgAvLyoqKiBlbmRfZ3JhcGgKAC8vKioqIGJlZ2luX2dyYXBoICVzCgBjYW1lcmEgeyBsb2NhdGlvbiA8JS4zZiAsICUuM2YgLCAlLjNmPgogICAgICAgICBsb29rX2F0ICA8JS4zZiAsICUuM2YgLCAlLjNmPgogICAgICAgICByaWdodCB4ICogaW1hZ2Vfd2lkdGggLyBpbWFnZV9oZWlnaHQKICAgICAgICAgYW5nbGUgJS4zZgp9CgAvL3NreQpwbGFuZSB7IDwwLCAxLCAwPiwgMSBob2xsb3cKICAgIHRleHR1cmUgewogICAgICAgIHBpZ21lbnQgeyBib3pvIHR1cmJ1bGVuY2UgMC45NQogICAgICAgICAgICBjb2xvcl9tYXAgewogICAgICAgICAgICAgICAgWzAuMDAgcmdiIDwwLjA1LCAwLjIwLCAwLjUwPl0KICAgICAgICAgICAgICAgIFswLjUwIHJnYiA8MC4wNSwgMC4yMCwgMC41MD5dCiAgICAgICAgICAgICAgICBbMC43NSByZ2IgPDEuMDAsIDEuMDAsIDEuMDA+XQogICAgICAgICAgICAgICAgWzAuNzUgcmdiIDwwLjI1LCAwLjI1LCAwLjI1Pl0KICAgICAgICAgICAgICAgIFsxLjAwIHJnYiA8MC41MCwgMC41MCwgMC41MD5dCiAgICAgICAgICAgIH0KICAgICAgICAgICAgc2NhbGUgPDEuMDAsIDEuMDAsIDEuNTA+ICogMi41MAogICAgICAgICAgICB0cmFuc2xhdGUgPDAuMDAsIDAuMDAsIDAuMDA+CiAgICAgICAgfQogICAgICAgIGZpbmlzaCB7IGFtYmllbnQgMSBkaWZmdXNlIDAgfQogICAgfQogICAgc2NhbGUgMTAwMDAKfQovL21pc3QKZm9nIHsgZm9nX3R5cGUgMgogICAgZGlzdGFuY2UgNTAKICAgIGNvbG9yIHJnYiA8MS4wMCwgMS4wMCwgMS4wMD4gKiAwLjc1CiAgICBmb2dfb2Zmc2V0IDAuMTAKICAgIGZvZ19hbHQgMS41MAogICAgdHVyYnVsZW5jZSAxLjc1Cn0KLy9nbmQKcGxhbmUgeyA8MC4wMCwgMS4wMCwgMC4wMD4sIDAKICAgIHRleHR1cmUgewogICAgICAgIHBpZ21lbnR7IGNvbG9yIHJnYiA8MC4yNSwgMC40NSwgMC4wMD4gfQogICAgICAgIG5vcm1hbCB7IGJ1bXBzIDAuNzUgc2NhbGUgMC4wMSB9CiAgICAgICAgZmluaXNoIHsgcGhvbmcgMC4xMCB9CiAgICB9Cn0KAGxpZ2h0X3NvdXJjZSB7IDwxNTAwLDMwMDAsLTI1MDA+IGNvbG9yIFdoaXRlIH0KACN2ZXJzaW9uIDMuNjsKAGdsb2JhbF9zZXR0aW5ncyB7IGFzc3VtZWRfZ2FtbWEgMS4wIH0KACNkZWZhdWx0IHsgZmluaXNoIHsgYW1iaWVudCAwLjEgZGlmZnVzZSAwLjkgfSB9CgAjaW5jbHVkZSAiY29sb3JzLmluYyIKI2luY2x1ZGUgInRleHR1cmVzLmluYyIKI2luY2x1ZGUgInNoYXBlcy5pbmMiCgAjZGVjbGFyZSAlcyA9ICVzOwoAQmxhY2sAV2hpdGUAYmFrZXJzY2hvYwBicmFzcwBicmlnaHRnb2xkAGJyb256ZQBicm9uemUyAGNsZWFyAGNvb2xjb3BwZXIAY29wcGVyAGRhcmticm93bgBkYXJrcHVycGxlAGRhcmt0YW4AZGFya3dvb2QAZGtncmVlbmNvcHBlcgBkdXN0eXJvc2UAZmVsZHNwYXIAZmxlc2gAZ3JheTA1AGdyZWVuY29wcGVyAGh1bnRlcnNncmVlbgBsaWdodF9wdXJwbGUAbGlnaHR3b29kAG1hbmRhcmlub3JhbmdlAG1lZGl1bWZvcmVzdGdyZWVuAG1lZGl1bWdvbGRlbnJvZABtZWRpdW13b29kAG1lZF9wdXJwbGUAbWljYQBuZW9uYmx1ZQBuZW9ucGluawBuZXdtaWRuaWdodGJsdWUAbmV3dGFuAG9sZGdvbGQAcXVhcnR6AHJpY2hibHVlAHNjYXJsZXQAc2VtaVN3ZWV0Q2hvYwBzaWx2ZXIAc3BpY3lwaW5rAHN1bW1lcnNreQB2ZXJ5ZGFya2Jyb3duAHZlcnlfbGlnaHRfcHVycGxlAHBvdgBwb3Y6cG92ACVzICVzCgAuXCIgACAlZCAlZAAgJXMKACAlZABmaWxsIABlbGxpcHNlIGF0dHJzJWQgJXN3aWQgJS41ZiBodCAlLjVmIGF0ICglLjVmLCUuNWYpOwoALmZ0ICVzCgAucHMgJWQqXG4oU0Z1LyUuMGZ1CgAiJXMiIGF0ICglLjVmLCUuNWYpOwoAJTAzbwAlcyVzIGlzIG5vdCBhIHRyb2ZmIGZvbnQKAGRvdCBwaWMgcGx1Z2luOiAAUgBdCi5QRQoALlBTICUuNWYgJS41ZgoAJXMgdG8gY2hhbmdlIGRyYXdpbmcgc2l6ZSwgbXVsdGlwbHkgdGhlIHdpZHRoIGFuZCBoZWlnaHQgb24gdGhlIC5QUyBsaW5lIGFib3ZlIGFuZCB0aGUgbnVtYmVyIG9uIHRoZSB0d28gbGluZXMgYmVsb3cgKHJvdW5kZWQgdG8gdGhlIG5lYXJlc3QgaW50ZWdlcikgYnkgYSBzY2FsZSBmYWN0b3IKAC5uciBTRiAlLjBmCnNjYWxldGhpY2tuZXNzID0gJS4wZgoAJXMgZG9uJ3QgY2hhbmdlIGFueXRoaW5nIGJlbG93IHRoaXMgbGluZSBpbiB0aGlzIGRyYXdpbmcKACVzIG5vbi1mYXRhbCBydW4tdGltZSBwaWMgdmVyc2lvbiBkZXRlcm1pbmF0aW9uLCB2ZXJzaW9uIDIKAGJveHJhZD0yLjAgJXMgd2lsbCBiZSByZXNldCB0byAwLjAgYnkgZ3BpYyBvbmx5CgBzY2FsZT0xLjAgJXMgcmVxdWlyZWQgZm9yIGNvbXBhcmlzb25zCgAlcyBib3hyYWQgaXMgbm93IDAuMCBpbiBncGljLCBlbHNlIGl0IHJlbWFpbnMgMi4wCgAlcyBkYXNod2lkIGlzIDAuMSBpbiAxMHRoIEVkaXRpb24sIDAuMDUgaW4gRFdCIDIgYW5kIGluIGdwaWMKACVzIGZpbGx2YWwgaXMgMC4zIGluIDEwdGggRWRpdGlvbiAoZmlsbCAwIG1lYW5zIGJsYWNrKSwgMC41IGluIGdwaWMgKGZpbGwgMCBtZWFucyB3aGl0ZSksIHVuZGVmaW5lZCBpbiBEV0IgMgoAJXMgZmlsbCBoYXMgbm8gbWVhbmluZyBpbiBEV0IgMiwgZ3BpYyBjYW4gdXNlIGZpbGwgb3IgZmlsbGVkLCAxMHRoIEVkaXRpb24gdXNlcyBmaWxsIG9ubHkKACVzIERXQiAyIGRvZXNuJ3QgdXNlIGZpbGwgYW5kIGRvZXNuJ3QgZGVmaW5lIGZpbGx2YWwKACVzIHJlc2V0IHdvcmtzIGluIGdwaWMgYW5kIDEwdGggZWRpdGlvbiwgYnV0IGlzbid0IGRlZmluZWQgaW4gRFdCIDIKACVzIERXQiAyIGNvbXBhdGliaWxpdHkgZGVmaW5pdGlvbnMKAGlmIGJveHJhZCA+IDEuMCAmJiBkYXNod2lkIDwgMC4wNzUgdGhlbiBYCglmaWxsdmFsID0gMTsKCWRlZmluZSBmaWxsIFkgWTsKCWRlZmluZSBzb2xpZCBZIFk7CglkZWZpbmUgcmVzZXQgWSBzY2FsZT0xLjAgWTsKWAoAcmVzZXQgJXMgc2V0IHRvIGtub3duIHN0YXRlCgAlcyBHTlUgcGljIHZzLiAxMHRoIEVkaXRpb24gZFwoZSd0ZW50ZQoAaWYgZmlsbHZhbCA+IDAuNCB0aGVuIFgKCWRlZmluZSBzZXRmaWxsdmFsIFkgZmlsbHZhbCA9IDEgLSBZOwoJZGVmaW5lIGJvbGQgWSB0aGlja25lc3MgMiBZOwoACSVzIGlmIHlvdSB1c2UgZ3BpYyBhbmQgaXQgYmFyZnMgb24gZW5jb3VudGVyaW5nICJzb2xpZCIsCgAJJXMJaW5zdGFsbCBhIG1vcmUgcmVjZW50IHZlcnNpb24gb2YgZ3BpYyBvciBzd2l0Y2ggdG8gRFdCIG9yIDEwdGggRWRpdGlvbiBwaWM7CgAJJXMJc29ycnksIHRoZSBncm9mZiBmb2xrcyBjaGFuZ2VkIGdwaWM7IHNlbmQgYW55IGNvbXBsYWludCB0byB0aGVtOwoAWCBlbHNlIFoKCWRlZmluZSBzZXRmaWxsdmFsIFkgZmlsbHZhbCA9IFk7CglkZWZpbmUgYm9sZCBZIFk7CglkZWZpbmUgZmlsbGVkIFkgZmlsbCBZOwpaCgAlcyBhcnJvd2hlYWQgaGFzIG5vIG1lYW5pbmcgaW4gRFdCIDIsIGFycm93aGVhZCA9IDcgbWFrZXMgZmlsbGVkIGFycm93aGVhZHMgaW4gZ3BpYyBhbmQgaW4gMTB0aCBFZGl0aW9uCgAlcyBhcnJvd2hlYWQgaXMgdW5kZWZpbmVkIGluIERXQiAyLCBpbml0aWFsbHkgMSBpbiBncGljLCAyIGluIDEwdGggRWRpdGlvbgoAYXJyb3doZWFkID0gNyAlcyBub3QgdXNlZCBieSBncmFwaHZpegoAJXMgR05VIHBpYyBzdXBwb3J0cyBhIGJveHJhZCB2YXJpYWJsZSB0byBkcmF3IGJveGVzIHdpdGggcm91bmRlZCBjb3JuZXJzOyBEV0IgYW5kIDEwdGggRWQuIGRvIG5vdAoAYm94cmFkID0gMCAlcyBubyByb3VuZGVkIGNvcm5lcnMgaW4gZ3JhcGh2aXoKACVzIEdOVSBwaWMgc3VwcG9ydHMgYSBsaW5ldGhpY2sgdmFyaWFibGUgdG8gc2V0IGxpbmUgdGhpY2tuZXNzOyBEV0IgYW5kIDEwdGggRWQuIGRvIG5vdAoAbGluZXRoaWNrID0gMDsgb2xkbGluZXRoaWNrID0gbGluZXRoaWNrCgAlcyAuUFMgdy9vIGFyZ3MgY2F1c2VzIEdOVSBwaWMgdG8gc2NhbGUgZHJhd2luZyB0byBmaXQgOC41eDExIHBhcGVyOyBEV0IgZG9lcyBub3QKACVzIG1heHBzaHQgYW5kIG1heHBzd2lkIGhhdmUgbm8gbWVhbmluZyBpbiBEV0IgMi4wLCBzZXQgcGFnZSBib3VuZGFyaWVzIGluIGdwaWMgYW5kIGluIDEwdGggRWRpdGlvbgoAJXMgbWF4cHNodCBhbmQgbWF4cHN3aWQgYXJlIHByZWRlZmluZWQgdG8gMTEuMCBhbmQgOC41IGluIGdwaWMKAG1heHBzaHQgPSAlZgptYXhwc3dpZCA9ICVmCgBEb3Q6IFsKAGRlZmluZSBhdHRyczAgJSUgJSU7IGRlZmluZSB1bmZpbGxlZCAlJSAlJTsgZGVmaW5lIHJvdW5kZWQgJSUgJSU7IGRlZmluZSBkaWFnb25hbHMgJSUgJSUKACVzJXMgdW5zdXBwb3J0ZWQKAHJvdGF0aW9uACVzIHJlc3RvcmUgcG9pbnQgc2l6ZSBhbmQgZm9udAoucHMgXG4oLlMKLmZ0IFxuKERGCgAlcyBDcmVhdG9yOiAlcyB2ZXJzaW9uICVzICglcykKACVzIFRpdGxlOiAlcwoAJXMgc2F2ZSBwb2ludCBzaXplIGFuZCBmb250Ci5uciAuUyBcbigucwoubnIgREYgXG4oLmYKAHBpYwBwaWM6cGljAHBuZzpzdmcAZ2lmOnN2ZwBqcGVnOnN2ZwBqcGU6c3ZnAGpwZzpzdmcAcG5nOmZpZwBnaWY6ZmlnAGpwZWc6ZmlnAGpwZTpmaWcAanBnOmZpZwBwbmc6dnJtbABnaWY6dnJtbABqcGVnOnZybWwAanBlOnZybWwAanBnOnZybWwAZXBzOnBzAHBzOnBzAChsaWIpOnBzAHBuZzptYXAAZ2lmOm1hcABqcGVnOm1hcABqcGU6bWFwAGpwZzptYXAAcHM6bWFwAGVwczptYXAAc3ZnOm1hcABwbmc6ZG90AGdpZjpkb3QAanBlZzpkb3QAanBlOmRvdABqcGc6ZG90AHBzOmRvdABlcHM6ZG90AHN2Zzpkb3QAcG5nOnhkb3QAZ2lmOnhkb3QAanBlZzp4ZG90AGpwZTp4ZG90AGpwZzp4ZG90AHBzOnhkb3QAZXBzOnhkb3QAc3ZnOnhkb3QAc3ZnOnN2ZwBwbmc6dm1sAGdpZjp2bWwAanBlZzp2bWwAanBlOnZtbABqcGc6dm1sAGdpZjp0awBpbWFnZSBjcmVhdGUgcGhvdG8gInBob3RvXyVzIiAtZmlsZSAiJXMiCgAkYyBjcmVhdGUgaW1hZ2UgJS4yZiAlLjJmIC1pbWFnZSAicGhvdG9fJXMiCgA8djppbWFnZSBzcmM9IiVzIiBzdHlsZT0iIHBvc2l0aW9uOmFic29sdXRlOyB3aWR0aDolLjJmOyBoZWlnaHQ6JS4yZjsgbGVmdDolLjJmIDsgdG9wOiUuMmYiACAvPgoAZ3Zsb2FkaW1hZ2VfY29yZS5jAGNvcmVfbG9hZGltYWdlX3BzbGliAFsgACVnICVnIABdICAlZCB0cnVlICVzCgBdICAlZCBmYWxzZSAlcwoAY29yZV9sb2FkaW1hZ2VfcHMAZ3NhdmUgJWcgJWcgdHJhbnNsYXRlIG5ld3BhdGgKAHVzZXJfc2hhcGVfJWQKAGdyZXN0b3JlCgBjb3JlX2xvYWRpbWFnZV92cm1sAFNoYXBlIHsKACAgYXBwZWFyYW5jZSBBcHBlYXJhbmNlIHsKACAgICBtYXRlcmlhbCBNYXRlcmlhbCB7CgAgICAgICBhbWJpZW50SW50ZW5zaXR5IDAuMzMKACAgICAgICAgZGlmZnVzZUNvbG9yIDEgMSAxCgAgICAgfQoAICAgIHRleHR1cmUgSW1hZ2VUZXh0dXJlIHsgdXJsICIlcyIgfQoAICB9CgBjb3JlX2xvYWRpbWFnZV9maWcAJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJS4xZiAlZCAlZCAlZCAlZCAlZCAlZAogJWQgJXMKACAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZAoAY29yZV9sb2FkaW1hZ2Vfc3ZnADxpbWFnZSB4bGluazpocmVmPSIAIiB3aWR0aD0iJWdweCIgaGVpZ2h0PSIlZ3B4IiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1pZCBtZWV0IiB4PSIlZyIgeT0iJWciACB0cmFuc2Zvcm09InJvdGF0ZSglZCAlZyAlZykiACIgd2lkdGg9IiVncHgiIGhlaWdodD0iJWdweCIgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pbllNaW4gbWVldCIgeD0iJWciIHk9IiVnIgAvPgoAZG90X2xheW91dABwaGFzZQBkb3QgZG9lcyBub3Qgc3VwcG9ydCB0aGUgYXNwZWN0IGF0dHJpYnV0ZSBmb3IgZGlzY29ubmVjdGVkIGdyYXBocyBvciBncmFwaHMgd2l0aCBjbHVzdGVycwoAY29tcG91bmQAdiA9PSBuAGRvdGluaXQuYwByZW1vdmVfZnJvbV9yYW5rAG9yZGVyAGVkZ2UgbGFiZWxzIHdpdGggc3BsaW5lcz1jdXJ2ZWQgbm90IHN1cHBvcnRlZCBpbiBkb3QgLSB1c2UgeGxhYmVscwoARURfbGFiZWwoZmUpAGRvdHNwbGluZXMuYwBfZG90X3NwbGluZXMAZmxhdCBlZGdlIGJldHdlZW4gYWRqYWNlbnQgbm9kZXMgb25lIG9mIHdoaWNoIGhhcyBhIHJlY29yZCBzaGFwZSAtIHJlcGxhY2UgcmVjb3JkcyB3aXRoIEhUTUwtbGlrZSBsYWJlbHMKACAgRWRnZSAlcyAlcyAlcwoAeHh4ADEwMDAwAHslc30AYXV4ZwBsYWJlbF9mbG9hdABmaXhlZAAobCA9IEVEX2xhYmVsKGZlKSkAc2V0RWRnZUxhYmVsUG9zAGUgIT0gTlVMTABmYXN0Z3IuYwBkZWxldGVfZmFzdF9lZGdlAG4gIT0gTkRfbmV4dChuKQBmYXN0X25vZGUAdSAhPSB2AGZhc3Rfbm9kZWFwcABORF9uZXh0KHYpID09IE5VTEwAZmluZF9mYXN0X25vZGUoZywgbikAZGVsZXRlX2Zhc3Rfbm9kZQBkZWxldGVfZmxhdF9lZGdlAG1lcmdlX29uZXdheSBnbGl0Y2gKAG1lcmdlX29uZXdheQBzYWZlX2RlbGV0ZV9mYXN0X2VkZ2UAbGcAaW5mbwBjb21wAGNudCA9PSBzegBtaW5jcm9zcy5jAGZpeExhYmVsT3JkZXIAcmVtaW5jcm9zcwBtaW5jcm9zcyAlczogJWQgY3Jvc3NpbmdzLCAlLjJmIHNlY3MuCgB2AG5laWdoYm9yAChydiA9PSAwKSB8fCAoTkRfb3JkZXIocnYpLU5EX29yZGVyKHYpKSpkaXIgPiAwAGNvbnN0cmFpbmluZ19mbGF0X2VkZ2UoZyx2LGUpID09IEZBTFNFAGZsYXRfcmVvcmRlcgBORF9yYW5rKHYpID09IHIAcG9zdG9yZGVyAGZsYXRpbmRleChhZ2hlYWQoZSkpIDwgTS0+bnJvd3MAZmxhdF9zZWFyY2gAZmxhdGluZGV4KGFndGFpbChlKSkgPCBNLT5uY29scwBvdXQAb3JkZXJpbmcgJyVzJyBub3QgcmVjb2duaXplZC4KAG9yZGVyaW5nICclcycgbm90IHJlY29nbml6ZWQgZm9yIG5vZGUgJyVzJy4KAG1lcmdlMjogZ3JhcGggJXMsIHJhbmsgJWQgaGFzIG9ubHkgJWQgPCAlZCBub2RlcwoAbWluY3Jvc3M6IHBhc3MgJWQgaXRlciAlZCB0cnlpbmcgJWQgY3VyX2Nyb3NzICVkIGJlc3RfY3Jvc3MgJWQKAE5EX29yZGVyKHYpIDwgTkRfb3JkZXIodykAYmFsYW5jZQB0cmFuc3Bvc2Vfc3RlcABzdXJwcmlzZQoAaW5zdGFsbF9pbl9yYW5rLCBsaW5lICVkOiAlcyAlcyByYW5rICVkIGkgPSAlZCBhbiA9IDAKAEdEX3JhbmsoZylbcl0ubiA8PSBHRF9yYW5rKGcpW3JdLmFuAGluc3RhbGxfaW5fcmFuawBpbnN0YWxsX2luX3JhbmssIGxpbmUgJWQ6IE5EX29yZGVyKCVzKSBbJWRdID4gR0RfcmFuayhSb290KVslZF0uYW4gWyVkXQoAaW5zdGFsbF9pbl9yYW5rLCBsaW5lICVkOiByYW5rICVkIG5vdCBpbiByYW5rIHJhbmdlIFslZCwlZF0KAGluc3RhbGxfaW5fcmFuaywgbGluZSAlZDogR0RfcmFuayhnKVslZF0udiArIE5EX29yZGVyKCVzKSBbJWRdID4gR0RfcmFuayhnKVslZF0uYXYgKyBHRF9yYW5rKFJvb3QpWyVkXS5hbiBbJWRdCgBfbmV3X3JhbmsAbWNsaW1pdAByYW5rKGcsIDIsIG5zaXRlcjIoZykpID09IDAAcG9zaXRpb24uYwBkb3RfcG9zaXRpb24AQVI9JTAuNGxmCSBBcmVhPSAlMC40bGYJAER1bW15PSVkCgBHb2luZyB0byBhcHBseSBhbm90aGVyIGV4cGFuc2lvbi4KAG5leHQjaXRlcj0lZAoAaHAAY29ubmVjdEdyYXBoAEVkZ2UgbGVuZ3RoICVmIGxhcmdlciB0aGFuIG1heGltdW0gJXUgYWxsb3dlZC4KQ2hlY2sgZm9yIG92ZXJ3aWRlIG5vZGUocykuCgBuc2xpbWl0AGNvbnRhaW5fbm9kZXMgY2x1c3QgJXMgcmFuayAlZCBtaXNzaW5nIG5vZGUKAG5zbGltaXQxAG5ld3JhbmsATWF4cmFuayA9ICVkLCBtaW5yYW5rID0gJWQKAGxlYWRlciAhPSBOVUxMAHJhbmsuYwBjbHVzdGVyX2xlYWRlcgAoTkRfVUZfc2l6ZShuKSA8PSAxKSB8fCAobiA9PSBsZWFkZXIpAGFnaGVhZChlKSA9PSBVRl9maW5kKGFnaGVhZChlKSkAbWlubWF4X2VkZ2VzAGFndGFpbChlKSA9PSBVRl9maW5kKGFndGFpbChlKSkAcmFuawBzYW1lAG1pbgBzb3VyY2UAbWF4AHNpbmsAbGV2ZWwgYXNzaWdubWVudCBjb25zdHJhaW50cwBsZXZlbCBncmFwaCByZWMAf3Jvb3QAf3RvcAB/Ym90AGNvbXBhY3QAX3dlYWtfJWQAcmFua2luZzogZmFpbHVyZSB0byBjcmVhdGUgc3Ryb25nIGNvbnN0cmFpbnQgZWRnZSBiZXR3ZWVuIG5vZGVzICVzIGFuZCAlcwoAJXMgaGFzIHVucmVjb2duaXplZCByYW5rPSVzAGxldmVsIGVkZ2UgcmVjAGxldmVsIG5vZGUgcmVjAHNhbWVoZWFkAHNhbWV0YWlsAHRvbyBtYW55ICg+ICVkKSBzYW1le2hlYWQsdGFpbH0gZ3JvdXBzIGZvciBub2RlICVzCgBjb21iaUFSID0gJWxmCgAlbGYsJWQAdGhlIGFzcGVjdCBhdHRyaWJ1dGUgaGFzIGJlZW4gZGlzYWJsZWQgZHVlIHRvIGltcGxlbWVudGF0aW9uIGZsYXdzIC0gYXR0cmlidXRlIGlnbm9yZWQuCgBFRF90b192aXJ0KGUpID09IE5VTEwAY2xhc3MyLmMAbWVyZ2VfY2hhaW4ARURfdG9fdmlydChvcmlnKSA9PSBOVUxMAG1ha2VfY2hhaW4ARURfdG9fdmlydChvcmlnKSAhPSBOVUxMAE5EX3JhbmsoZnJvbSkgPCBORF9yYW5rKHRvKQBjbHVzdGVyLmMAbWFwX3BhdGgAJXMgd2FzIGFscmVhZHkgaW4gYSByYW5rc2V0LCBkZWxldGVkIGZyb20gY2x1c3RlciAlcwoAbGhlYWQAbHRhaWwAJXMgLT4gJXM6IHNwbGluZSBzaXplID4gMSBub3Qgc3VwcG9ydGVkCgAlcyAtPiAlczogaGVhZCBub3QgaW5zaWRlIGhlYWQgY2x1c3RlciAlcwoAJXMgLT4gJXM6IHRhaWwgaXMgaW5zaWRlIGhlYWQgY2x1c3RlciAlcwoAYmV6LT5zZmxhZwBjb21wb3VuZC5jAG1ha2VDb21wb3VuZEVkZ2UAYmV6LT5lZmxhZwAlcyAtPiAlczogdGFpbCBub3QgaW5zaWRlIHRhaWwgY2x1c3RlciAlcwoAJXMgLT4gJXM6IGhlYWQgaXMgaW5zaWRlIHRhaWwgY2x1c3RlciAlcwoAc2VnbWVudCBbJXMsJXNdIGRvZXMgbm90IGludGVyc2VjdCBib3ggbGw9JXMsdXI9JXMKAGJveEludGVyc2VjdGYAKCUuNWcsJS41ZykAY2x1c3RlciBuYW1lZCAlcyBub3QgZm91bmQKAGNvbmNlbnRyYXRlPXRydWUgbWF5IG5vdCB3b3JrIGNvcnJlY3RseS4KAHJlYnVpbHRkX3ZsaXN0czogcmFuayBsZWFkICVzIG5vdCBpbiBvcmRlciAlZCBvZiByYW5rICVkCgBkZWdlbmVyYXRlIGNvbmNlbnRyYXRlZCByYW5rICVzLCVkCgBORF9pbihyaWdodCkuc2l6ZSArIE5EX291dChyaWdodCkuc2l6ZSA9PSAwAGNvbmMuYwBtZXJnZXZpcnR1YWwAZG90OiBPdXQgb2YgbWVtb3J5CgBORF9vdXQodikuc2l6ZSA9PSAyAGZsYXQuYwBzZXRib3VuZHMAR0RfbWlucmFuayhnKSA9PSAwAGFib21pbmF0aW9uAEVycm9yAFdhcm5pbmcAJXM6IAB1c2Vyb3V0OiBjb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5CgBfQUdfc3RyZGF0YQBfQUdfZGF0YWRpY3QAYWdkaWN0b2Y6IHVua25vd24ga2luZCAlZAoAJWMlbGQAbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZQBhZ2RlbGV0ZSBvbiB3cm9uZyBncmFwaABfQUdfcGVuZGluZwBhZ3JlY29yZF9jYWxsYmFjayBvZiBhIGJhZCBvYmplY3QAcGVuZCBkaWN0b2YgYSBiYWQgb2JqZWN0AG1vdmUgdG8gZnJvbnQgbG9jayBpbmNvbnNpc3RlbmN5AFxcAGZhdGFsIGZsZXggc2Nhbm5lciBpbnRlcm5hbCBlcnJvci0tbm8gYWN0aW9uIGZvdW5kACVzCgBmYXRhbCBmbGV4IHNjYW5uZXIgaW50ZXJuYWwgZXJyb3ItLWVuZCBvZiBidWZmZXIgbWlzc2VkAGZhdGFsIGVycm9yIC0gc2Nhbm5lciBpbnB1dCBidWZmZXIgb3ZlcmZsb3cAb3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIGFhZ19nZXRfbmV4dF9idWZmZXIoKQBpbnB1dABzeW50YXggYW1iaWd1aXR5IC0gYmFkbHkgZGVsaW1pdGVkIG51bWJlciAnACcgaW4gbGluZSAlZCBvZiAAIHNwbGl0cyBpbnRvIHR3byB0b2tlbnMKACVzAGxpbmUAJWQgJTFbIl0lbgBvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4gYWFnX2NyZWF0ZV9idWZmZXIoKQBvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4gYWFnZW5zdXJlX2J1ZmZlcl9zdGFjaygpADogACBpbiBsaW5lICVkACBuZWFyICcAIHNjYW5uaW5nIGEgcXVvdGVkIHN0cmluZyAobWlzc2luZyBlbmRxdW90ZT8gbG9uZ2VyIHRoYW4gJWQ/KQAKU3RyaW5nIHN0YXJ0aW5nOiIAIHNjYW5uaW5nIGEgSFRNTCBzdHJpbmcgKG1pc3NpbmcgJz4nPyBiYWQgbmVzdGluZz8gbG9uZ2VyIHRoYW4gJWQ/KQAKU3RyaW5nIHN0YXJ0aW5nOjwAIHNjYW5uaW5nIGEgLyouLi4qLyBjb21tZW50IChtaXNzaW5nICcqLz8gbG9uZ2VyIHRoYW4gJWQ/KQBmbGV4IHNjYW5uZXIgcHVzaC1iYWNrIG92ZXJmbG93ACIiAHN0cmljdABsaW5lbGVuZ3RoADsKACBba2V5PQBdACBbACwKAD0AXyVsZF9TVVNQRUNUAGRpAHN0cmljdCAAewoAXTsKABLu7hQJA+7+7u7uAe7u7gHu7gr+7hMZFe4TAe7u7u4LEe7u7u7u7u7u7gHu7hYJAQEdDxfu7hoXG+7uHO7u7u4BGfvu7u4B7hDu7h7u7u7uAAICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhcRAgICAgICAgICAgICAhIQAhMCAhYCAgICAgICAgICAgICAgICAgICAgICAgICAhQCFQICAgICAgICAgICAgICAgICAgICAgICAgICAgICDgIPAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgECAwQFBgcICQoLDA0LAwQFDwcDDA0GDA0ODA0aFRYAAQADBw4GDwgMDRITKhARCRAvMBEyFxMNFBIuEhRBEzITLEAqQhksQkYiDA0OIw8JEBEKEBHJEBEtRUb8AQb2Dwf2JAIQES8wNk1OKCY7PCo2MTk9Py86QNhEMD4lN0M1Sys4SUwAAwkAAAABDgILDAgjJCU2Oz0ADRASGxYcEicyIhczHjwGBzUFDxEUGCkAEykAAAAAADcVKB0eACEmNB8wPhksABsAIBoqACs6Li8AMTg5LQACAgEAAwMBAAEAAQEBAAIBAQACAgMBAQAABQABAwEDBQMBAQEBAgABAAQCAAIBAQMCAQADAgEAAQEAAQEBAwAYGRkZGhscHB0dHh4fHyAgISEiIiMkJCYnJSUoKCkpKSoqKysrLCwtLS4vLzAxMTIzNDY1Nzc3ODg4OTk6Ou7u/+7u7u7u7h8g7gDv7u7uDO7u7ggN7u7u+O7u7u7u7vXu/wMIBCEFCxITJxQVFikyQRcYGRosMzRCR0gbShwdLh5PHyBrZXkAYXR0cmlidXRlIG1hY3JvcyBub3QgaW1wbGVtZW50ZWQAJXM6JXMAQ291bGQgbm90IG9wZW4gIiVzIiBmb3Igd3JpdGluZyA6ICVzCgBObyBsaWJ6IHN1cHBvcnQuCgAuJWQAbm9uYW1lLmd2AGd2d3JpdGVfbm9feiBwcm9ibGVtICVkCgBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlCgBObyBsaWJ6IHN1cHBvcnQKAGd2cHJpbnRmOiAlcwoALTk5OTk5OTk5OTk5OTk5OS45OQBncmFwaHZpegAyLjQwLjEAMjAxNjEyMjUuMDMwNAByZW5kZXIAbGF5b3V0AGRldmljZQBsb2FkaW1hZ2UAZHluYW1pYyBsb2FkaW5nIG5vdCBhdmFpbGFibGUKAFVzaW5nICVzOiAlczolcwoAZ3Z1c2Vyc2hhcGUuYwBndnVzZXJzaGFwZV9maW5kAGd2dXNlcnNoYXBlX2ZpbGVfYWNjZXNzAEZpbGVuYW1lICIlcyIgaXMgdW5zYWZlCgAlcyB3aGlsZSBvcGVuaW5nICVzCgB1cy0+ZgBndnVzZXJzaGFwZV9vcGVuACIlcyIgd2FzIG5vdCBmb3VuZCBhcyBhIGZpbGUgb3IgYXMgYSBzaGFwZSBsaWJyYXJ5IG1lbWJlcgoAL01lZGlhQm94AChbYS16XVthLXpBLVpdKik9IihbXiJdKikiAGNhbm5vdCBjb21waWxlIHJlZ3VsYXIgZXhwcmVzc2lvbiAlcwAlbGYlMnMAcHQAdmlld0JveAAlbGYgJWxmICVsZiAlbGYAaW4AcHgAcGMAIgBjbQBtbQAlJUJvdW5kaW5nQm94OgAB0NHS09TV1tfY2QA8c3ZnAFdFQlAAd2VicAAobGliKQCJUE5HDQoaCgBwbmcAJSFQUy1BZG9iZS0AQk0AYm1wAEdJRjgAZ2lmAP/Y/+AAanBlZwAlUERGLQBwZGYAxdDTxgBlcHMAPD94bWwAeG1sAFJJRkYAcmlmZgAAAAEAAGljbwBMYXlvdXQgdHlwZTogIiVzIiBub3QgcmVjb2duaXplZC4gVXNlIG9uZSBvZjolcwoAJWQgJWQgJWQgJWQATGF5b3V0IHdhcyBub3QgZG9uZQoAZmFpbHVyZSBtYWxsb2MnaW5nIGZvciByZXN1bHQgc3RyaW5nAGdjOiBPdXQgb2YgbWVtb3J5CgBfY2NfAG9yaWcAb3AAY2NvbXBzLmMAbWFwQ2x1c3QAY2NncmFwaGluZm8AY2Nnbm9kZWluZm8AKCU0bGQpICU3bGQgbm9kZXMgJTdsZCBlZGdlcwoAICAgICAgICU3ZCBub2RlcyAlN2QgZWRnZXMgJTdsZCBjb21wb25lbnRzICVzCgBkZwBFcnJvcjogbm9kZSAiJXMiIGJlbG9uZ3MgdG8gdHdvIG5vbi1uZXN0ZWQgY2x1c3RlcnMgIiVzIiBhbmQgIiVzIgoAc29ydHYAcm93IG1ham9yAGNvbHVtbiBtYWpvcgBhcnJheSBwYWNraW5nOiAlcyAlZCByb3dzICVkIGNvbHVtbnMKAGJiWyVzXSAlLjVnICUuNWcgJS41ZyAlLjVnCgBzdGVwIHNpemUgPSAlZAoAcG9zWyVkXSAlZCAlZAoAY2MgKCVkIGNlbGxzKSBhdCAoJWQsJWQpICglZCwlZCkKAGNjICglZCBjZWxscykgYXQgKCVkLCVkKQoAJXMgbm8uIGNlbGxzICVkIFcgJWQgSCAlZAoAICAlZCAlZCBjZWxsCgBsaWJwYWNrOiBkaXNjID0gJWYgKCA8IDApCgBQYWNraW5nOiBjb21wdXRlIGdyaWQgc2l6ZQoAYSAlZiBiICVmIGMgJWYgZCAlZiByICVmCgByb290ICVkICglZikgJWQgKCVmKQoAIHIxICVmIHIyICVmCgBwaW5mbwBwYWNrLmMAZ2V0UGFja0luZm8AICBtYXJnaW4gJWQKAHBhY2ttb2RlAHBhcnNlUGFja01vZGVJbmZvAGFycmF5AGFzcGVjdAAlZgBwYWNrIGluZm86CgAgIG1vZGUgICAlcwoAICBhc3BlY3QgJWYKACAgc2l6ZSAgICVkCgAgIGZsYWdzICAlZAoAdW5kZWZpbmVkAHBhY2sAQXJyb3cgdHlwZSAiJXMiIHVua25vd24gLSBpZ25vcmluZwoAbm9ybWFsAGNyb3cAdGVlAGRvdABpbnYAdmVlAHBlbgBtcHR5AGN1cnZlAGljdXJ2ZQBsAGhhbGYAaW52ZW1wdHkAX2JhY2tncm91bmQAX2RyYXdfAENvdWxkIG5vdCBwYXJzZSAiX2JhY2tncm91bmQiIGF0dHJpYnV0ZSBpbiBncmFwaCAlcwoAICAiJXMiCgBubyBtZW1vcnkgZnJvbSB6bWFsbG9jKCkKAG9iagBlbWl0LmMAcG9wX29ial9zdGF0ZQBjbHVzdAAlbGQAcGFnZSVkLCVkXwBUb3RhbCBzaXplID4gMSBpbiAiJXMiIGNvbG9yIHNwZWMgAElsbGVnYWwgbGVuZ3RoIHZhbHVlIGluICIlcyIgY29sb3IgYXR0cmlidXRlIABjb2xvcnNjaGVtZQBlbWl0X2VkZ2VfbGFiZWwAJXMtJXMAZm9yd2FyZABiYWNrACAtPiAAIC0tIABpbiBlZGdlICVzJXMlcwoAbGFiZWxhbGlnbmVkAGVkZ2VocmVmAGVkZ2VVUkwAbGFiZWxocmVmAGxhYmVsVVJMAHRhaWxocmVmAHRhaWxVUkwAaGVhZGhyZWYAaGVhZFVSTAB0YXJnZXQAZWRnZXRhcmdldABsYWJlbHRhcmdldAB0YWlsdGFyZ2V0AGhlYWR0YXJnZXQAZWRnZXRvb2x0aXAAbGFiZWx0b29sdGlwAHRhaWx0b29sdGlwAGhlYWR0b29sdGlwAAFuZXN0aW5nIG5vdCBhbGxvd2VkIGluIHN0eWxlOiAlcwoAdW5tYXRjaGVkICcpJyBpbiBzdHlsZTogJXMKAHRydW5jYXRpbmcgc3R5bGUgJyVzJwoAdW5tYXRjaGVkICcoJyBpbiBzdHlsZTogJXMKAGFsbABiZ2NvbG9yAGluIGNsdXN0ZXIgJXMKAE1vcmUgdGhhbiAyIGNvbG9ycyBzcGVjaWZpZWQgZm9yIGEgZ3JhZGllbnQgLSBpZ25vcmluZyByZW1haW5pbmcKAGdyYWRpZW50IHBlbiBjb2xvcnMgbm90IHlldCBzdXBwb3J0ZWQuCgBJbWFnZXMgdW5zdXBwb3J0ZWQgaW4gImJhY2tncm91bmQiIGF0dHJpYnV0ZQoAbGF5ZXJzIG5vdCBzdXBwb3J0ZWQgaW4gJXMgb3V0cHV0CgBMYXlvdXQgd2FzIG5vdCBkb25lLiAgTWlzc2luZyBsYXlvdXQgcGx1Z2lucz8gCgBndlJlbmRlckpvYnMgJXM6ICUuMmYgc2Vjcy4KAGxheW91dCB3YXMgbm90IGRvbmUKAHJlbmRlcmVyIGZvciAlcyBpcyB1bmF2YWlsYWJsZQoAcGFnZWRpcj0lcyBpZ25vcmVkCgB2aWV3cG9ydAAlbGYsJWxmLCVsZiwnJVteJ10nACVsZiwlbGYsJWxmLCVbXixdJXMAJWxmLCVsZiwlbGYsJWxmLCVsZgBvdXRwdXRvcmRlcgBvZGVzZmlyc3QAZGdlc2ZpcnN0AGxheWVycwBsYXllcnNlbGVjdABUaGUgbGF5ZXJzZWxlY3QgYXR0cmlidXRlICIlcyIgZG9lcyBub3QgbWF0Y2ggYW55IGxheWVyIHNwZWNpZmVkIGJ5IHRoZSBsYXllcnMgYXR0cmlidXRlIC0gaWdub3JlZC4KAGxheWVyc2VwADoJIABsYXllcmxpc3RzZXAALABUaGUgY2hhcmFjdGVyICclYycgYXBwZWFycyBpbiBib3RoIHRoZSBsYXllcnNlcCBhbmQgbGF5ZXJsaXN0c2VwIGF0dHJpYnV0ZXMgLSBsYXllcmxpc3RzZXAgaWdub3JlZC4KAHBhZABCTABwYWdlZGlyAHNvbGlkAABzZXRsaW5ld2lkdGgAMQAAc3BsLT5zaXplID4gMABpbml0X3NwbGluZXNfYmIAYnouc2l6ZSA+IDAAYmV6aWVyX2JiAGJ6LnNpemUgJSAzID09IDEAbGFiZWwAJWxmAGZvbnRwYXRoAERPVEZPTlRQQVRIAEdERk9OVFBBVEgAaW1hZ2VwYXRoAHF1YW50dW0AcmFua2RpcgBMUgBCVABSTABub2Rlc2VwAHJhbmtzZXAAZXF1YWxseQBzaG93Ym94ZXMAZm9udG5hbWVzAHNpemUAcGFnZQBjZW50ZXIAcm90YXRlAG9yaWVudGF0aW9uAGxhbmRzY2FwZQBjbHVzdGVycmFuawBjb25jZW50cmF0ZQBkcGkAcmVzb2x1dGlvbgBvcmRlcmluZwBncmFkaWVudGFuZ2xlAGZpbGxjb2xvcgBzdHlsZQBmb250c2l6ZQBmb250bmFtZQBmb250Y29sb3IAeGxhYmVsAHBlbndpZHRoAHNpZGVzAHBlcmlwaGVyaWVzAHNrZXcAZGlzdG9ydGlvbgBmaXhlZHNpemUAbm9qdXN0aWZ5AGxheWVyAGdyb3VwAGNvbW1lbnQAdmVydGljZXMAegB3ZWlnaHQAbGFiZWxmbG9hdABkaXIAYXJyb3doZWFkAGFycm93dGFpbABoZWFkbGFiZWwAdGFpbGxhYmVsAGxhYmVsZm9udHNpemUAbGFiZWxmb250bmFtZQBsYWJlbGZvbnRjb2xvcgBsYWJlbGRpc3RhbmNlAGxhYmVsYW5nbGUAbWlubGVuAGRlY29yYXRlAGFycm93c2l6ZQBjb25zdHJhaW50AHRhaWxjbGlwAGhlYWRjbGlwAGlkAGxhYmVsanVzdABsb2NhbABnbG9iYWwAJWxmLCVsZiVjACVsZiVjAHJhdGlvAGF1dG8AY29tcHJlc3MAZXhwYW5kAGZpbGwAZ2QAcHMAc3ZnAGNoYXJzZXQAdXRmLTgAbGF0aW4tMQBsYXRpbjEAbDEASVNPLTg4NTktMQBJU09fODg1OS0xAElTTzg4NTktMQBJU08tSVItMTAwAGJpZy01AGJpZzUAdXRmOABVbnN1cHBvcnRlZCBjaGFyc2V0ICIlcyIgLSBhc3N1bWluZyB1dGYtOAoAaW4gbGFiZWwgb2YgZ3JhcGggJXMKAGluIGxhYmVsIG9mIG5vZGUgJXMKAGluIGxhYmVsIG9mIGVkZ2UgJXMgJXMgJXMKAGtpbmQgPT0gTFRfTk9ORQBsYWJlbHMuYwBtYWtlX2xhYmVsAFxMAFxHAFxFAFxIAFxUACYjMTM7ACYjMTA7ACZxdW90OwAmIzE2MDsAJmFtcDsAJmd0OwAmIzM5OwAmIzQ1OwAmbHQ7ACVzICVkIG5vZGVzICVkIGVkZ2VzIG1heGl0ZXI9JWQgYmFsYW5jZT0lZAoAbmV0d29yayBzaW1wbGV4OiAAJWQgACVzJWQgbm9kZXMgJWQgZWRnZXMgJWQgaXRlciAlLjJmIHNlYwoAdXBkYXRlOiBtaXNtYXRjaGVkIGxjYSBpbiB0cmVldXBkYXRlcwoAVHJlZV9lZGdlLnNpemUgPT0gTl9ub2RlcyAtIDEAbnMuYwBmZWFzaWJsZV90cmVlACFUUkVFX0VER0UoZSkAbWVyZ2VfdHJlZXMAKHIwLT5oZWFwX2luZGV4ID4gLTEpIHx8IChyMS0+aGVhcF9pbmRleCA+IC0xKQBTVHNldFVuaW9uAHItPmhlYXBfaW5kZXggPj0gMABhZGRfdHJlZV9lZGdlOiBtaXNzaW5nIHRyZWUgZWRnZQoAYWRkX3RyZWVfZWRnZTogZW1wdHkgb3V0ZWRnZSBsaXN0CgBhZGRfdHJlZV9lZGdlOiBlbXB0eSBpbmVkZ2UgbGlzdAoAdHJvdWJsZSBpbiBpbml0X3JhbmsKAAklcyAlZAoAc2VhcmNoc2l6ZQBncmFwaCAAIABub2RlIABzdG9wCgAlLjVnAHBvcwByZWN0cwB4bHAAbHAAaGVhZF9scAB0YWlsX2xwAGx3aWR0aABsaGVpZ2h0AGJiACUuNWcsJS41ZywlLjVnACwlLjVnACUuNWcsJS41ZwBzYW1wbGVwb2ludHMAJS41ZyAlLjVnAHMsJS41ZywlLjVnIABlLCUuNWcsJS41ZyAAJS41ZywlLjVnLCUuNWcsJS41ZwAlLjJmACUuNWcsJS41ZywlLjVnLCUuNWcgAC9wYXRoYm94IHsKICAgIC9YIGV4Y2ggbmVnICUuNWcgc3ViIGRlZgogICAgL1kgZXhjaCAlLjVnIHN1YiBkZWYKICAgIC94IGV4Y2ggbmVnICUuNWcgc3ViIGRlZgogICAgL3kgZXhjaCAlLjVnIHN1YiBkZWYKICAgIG5ld3BhdGggeCB5IG1vdmV0bwogICAgWCB5IGxpbmV0bwogICAgWCBZIGxpbmV0bwogICAgeCBZIGxpbmV0bwogICAgY2xvc2VwYXRoIHN0cm9rZQp9IGRlZgoAL3BhdGhib3ggewogICAgL1kgZXhjaCAlLjVnIHN1YiBkZWYKICAgIC9YIGV4Y2ggJS41ZyBzdWIgZGVmCiAgICAveSBleGNoICUuNWcgc3ViIGRlZgogICAgL3ggZXhjaCAlLjVnIHN1YiBkZWYKICAgIG5ld3BhdGggeCB5IG1vdmV0bwogICAgWCB5IGxpbmV0bwogICAgWCBZIGxpbmV0bwogICAgeCBZIGxpbmV0bwogICAgY2xvc2VwYXRoIHN0cm9rZQogfSBkZWYKL2RiZ3N0YXJ0IHsgZ3NhdmUgJS41ZyAlLjVnIHRyYW5zbGF0ZSB9IGRlZgovYXJyb3dsZW5ndGggMTAgZGVmCi9hcnJvd3dpZHRoIGFycm93bGVuZ3RoIDIgZGl2IGRlZgovYXJyb3doZWFkIHsKICAgIGdzYXZlCiAgICByb3RhdGUKICAgIGN1cnJlbnRwb2ludAogICAgbmV3cGF0aAogICAgbW92ZXRvCiAgICBhcnJvd2xlbmd0aCBhcnJvd3dpZHRoIDIgZGl2IHJsaW5ldG8KICAgIDAgYXJyb3d3aWR0aCBuZWcgcmxpbmV0bwogICAgY2xvc2VwYXRoIGZpbGwKICAgIGdyZXN0b3JlCn0gYmluZCBkZWYKL21ha2VhcnJvdyB7CiAgICBjdXJyZW50cG9pbnQgZXhjaCBwb3Agc3ViIGV4Y2ggY3VycmVudHBvaW50IHBvcCBzdWIgYXRhbgogICAgYXJyb3doZWFkCn0gYmluZCBkZWYKL3BvaW50IHsgICAgbmV3cGF0aCAgICAyIDAgMzYwIGFyYyBmaWxsfSBkZWYvbWFrZXZlYyB7CiAgICAvWSBleGNoIGRlZgogICAgL1ggZXhjaCBkZWYKICAgIC95IGV4Y2ggZGVmCiAgICAveCBleGNoIGRlZgogICAgbmV3cGF0aCB4IHkgbW92ZXRvCiAgICBYIFkgbGluZXRvIHN0cm9rZQogICAgWCBZIG1vdmV0bwogICAgeCB5IG1ha2VhcnJvdwp9IGRlZgoAbG9zdCAlcyAlcyBlZGdlCgBubyBwb3NpdGlvbiBmb3IgZWRnZSB3aXRoIGxhYmVsICVzAG5vIHBvc2l0aW9uIGZvciBlZGdlIHdpdGggdGFpbCBsYWJlbCAlcwBubyBwb3NpdGlvbiBmb3IgZWRnZSB3aXRoIGhlYWQgbGFiZWwgJXMAbm8gcG9zaXRpb24gZm9yIGVkZ2Ugd2l0aCB4bGFiZWwgJXMAZm9yY2VsYWJlbHMAJWQgb3V0IG9mICVkIGxhYmVscyBwb3NpdGlvbmVkLgoAJWQgb3V0IG9mICVkIGV4dGVyaW9yIGxhYmVscyBwb3NpdGlvbmVkLgoAJWQgb2JqcyAlZCB4bGFiZWxzIGZvcmNlPSVkIGJiPSglLjAyZiwlLjAyZikgKCUuMDJmLCUuMDJmKQoAb2JqZWN0cwoAIFslZF0gKCUuMDJmLCUuMDJmKSAoJS4wMmYsJS4wMmYpICVwICIlcyIKAHhsYWJlbHMKACBbJWRdICVwIHNldCAlZCAoJS4wMmYsJS4wMmYpICglLjAyZiwlLjAyZikgJXMKAHNoYXBlZmlsZSBub3Qgc2V0IG9yIG5vdCBmb3VuZCBmb3IgZXBzZiBub2RlICVzCgBjb3VsZG4ndCBvcGVuIGVwc2YgZmlsZSAlcwoAJSUlJUJvdW5kaW5nQm94OiAlZCAlZCAlZCAlZAByZWFkAEJvdW5kaW5nQm94IG5vdCBmb3VuZCBpbiBlcHNmIGZpbGUgJXMKAGNhbid0IGZpbmQgbGlicmFyeSBmaWxlICVzCgBjYW4ndCBvcGVuIGxpYnJhcnkgZmlsZSAlcwoARU9GAEJFR0lOAEVORABUUkFJTEVSAC91c2VyX3NoYXBlXyVkIHsKACUlQmVnaW5Eb2N1bWVudDoKACUlRW5kRG9jdW1lbnQKAH0gYmluZCBkZWYKAFVURi04IGlucHV0IHVzZXMgbm9uLUxhdGluMSBjaGFyYWN0ZXJzIHdoaWNoIGNhbm5vdCBiZSBoYW5kbGVkIGJ5IHRoaXMgUG9zdFNjcmlwdCBkcml2ZXIKAGNhbm5vdCByZS1hbGxvY2F0ZSBwcwoAcm91dGVzcGxpbmVzaW5pdDogY2Fubm90IGFsbG9jYXRlIHBzCgByb3V0ZXNwbGluZXM6ICVkIGVkZ2VzLCAlZCBib3hlcyAlLjJmIHNlYwoAaW4gcm91dGVzcGxpbmVzLCBjYW5ub3QgZmluZCBOT1JNQUwgZWRnZQoAaW4gcm91dGVzcGxpbmVzLCBpbGxlZ2FsIHZhbHVlcyBvZiBwcmV2ICVkIGFuZCBuZXh0ICVkLCBsaW5lICVkCgBpbiByb3V0ZXNwbGluZXMsIGVkZ2UgaXMgYSBsb29wIGF0ICVzCgBpbiByb3V0ZXNwbGluZXMsIFBzaG9ydGVzdHBhdGggZmFpbGVkCgBpbiByb3V0ZXNwbGluZXMsIFByb3V0ZXNwbGluZSBmYWlsZWQKAFVuYWJsZSB0byByZWNsYWltIGJveCBzcGFjZSBpbiBzcGxpbmUgcm91dGluZyBmb3IgZWRnZSAiJXMiIC0+ICIlcyIuIFNvbWV0aGluZyBpcyBwcm9iYWJseSBzZXJpb3VzbHkgd3JvbmcuCgBpbiBjaGVja3BhdGgsIGJveCAwIGhhcyBMTCBjb29yZCA+IFVSIGNvb3JkCgBpbiBjaGVja3BhdGgsIGJveCAlZCBoYXMgTEwgY29vcmQgPiBVUiBjb29yZAoAaW4gY2hlY2twYXRoLCBib3hlcyAlZCBhbmQgJWQgZG9uJ3QgdG91Y2gKAGluIGNoZWNrcGF0aCwgc3RhcnQgcG9ydCBub3QgaW4gZmlyc3QgYm94CgBpbiBjaGVja3BhdGgsIGVuZCBwb3J0IG5vdCBpbiBsYXN0IGJveAoAJWQgYm94ZXM6CgAlZCAoJS41ZywgJS41ZyksICglLjVnLCAlLjVnKQoAY29uc3RyYWluZWQAbm90IGNvbnN0cmFpbmVkAHN0YXJ0IHBvcnQ6ICglLjVnLCAlLjVnKSwgdGFuZ2VudCBhbmdsZTogJS41ZywgJXMKAGVuZCBwb3J0OiAoJS41ZywgJS41ZyksIHRhbmdlbnQgYW5nbGU6ICUuNWcsICVzCgBzaWRlcyA9PSA0AHNoYXBlcy5jAHJvdW5kX2Nvcm5lcnMAYmFkIGxhYmVsIGZvcm1hdCAlcwoAXE4AbWFyZ2luACVsZiwlbGYAcmVndWxhcgBjdXN0b20Ac2hhcGVmaWxlADxuaWw+AE5vIG9yIGltcHJvcGVyIHNoYXBlZmlsZT0iJXMiIGZvciBub2RlICIlcyIKAE5vIG9yIGltcHJvcGVyIGltYWdlPSIlcyIgZm9yIG5vZGUgIiVzIgoAbGFiZWxsb2MAc2hhcGUAbm9kZSAnJXMnLCBncmFwaCAnJXMnIHNpemUgdG9vIHNtYWxsIGZvciBsYWJlbAoAZXBzZgB1c2luZyAlcyBmb3IgdW5rbm93biBzaGFwZSAlcwoAYm94AHBvbHlnb24Ab3ZhbABjaXJjbGUAcG9pbnQAZWdnAHRyaWFuZ2xlAHBsYWludGV4dABwbGFpbgBkaWFtb25kAHRyYXBleml1bQBwYXJhbGxlbG9ncmFtAGhvdXNlAHBlbnRhZ29uAGhleGFnb24Ac2VwdGFnb24Ab2N0YWdvbgBub3RlAHRhYgBmb2xkZXIAYm94M2QAY29tcG9uZW50AGN5bGluZGVyAHJlY3QAcmVjdGFuZ2xlAHNxdWFyZQBkb3VibGVjaXJjbGUAZG91Ymxlb2N0YWdvbgB0cmlwbGVvY3RhZ29uAGludnRyaWFuZ2xlAGludnRyYXBleml1bQBpbnZob3VzZQB1bmRlcmxpbmUATWRpYW1vbmQATXNxdWFyZQBNY2lyY2xlAHByb21vdGVyAGNkcwB0ZXJtaW5hdG9yAHV0cgBpbnN1bGF0b3IAcmlib3NpdGUAcm5hc3RhYgBwcm90ZWFzZXNpdGUAcHJvdGVpbnN0YWIAcHJpbWVyc2l0ZQByZXN0cmljdGlvbnNpdGUAZml2ZXBvdmVyaGFuZwB0aHJlZXBvdmVyaGFuZwBub3ZlcmhhbmcAYXNzZW1ibHkAc2lnbmF0dXJlAHJwcm9tb3RlcgBsYXJyb3cAcmFycm93AGxwcm9tb3RlcgByZWNvcmQATXJlY29yZABzdGFyACM4MDgwODAAI2ZjZmNmYwAjMzAzMDMwACNlOGU4ZTgAI2UwZTBlMAAjZjBmMGYwACMxMDEwMTAAI2Y4ZjhmOABpbiBub2RlICVzCgByb3VuZGVkAGRpYWdvbmFscwByYWRpYWwAc3RyaXBlZAB3ZWRnZWQAXwBub2RlICVzLCBwb3J0ICVzLCB1bnJlY29nbml6ZWQgY29tcGFzcyBwb2ludCAnJXMnIC0gaWdub3JlZAoAbm9kZSAlcywgcG9ydCAlcyB1bnJlY29nbml6ZWQKACUuNWcgJS41ZyB0cmFuc2xhdGUgbmV3cGF0aCB1c2VyX3NoYXBlXyVkCgBpbnZpcwAAZmlsbGVkAABzAGUAdwBzcGxpbmVzLmMAYmVnaW5wYXRoAFAtPmVuZC50aGV0YSA8IDIgKiBNX1BJAGVuZHBhdGgAbWFrZVNlbGZFZGdlAGdldHNwbGluZXBvaW50czogbm8gc3BsaW5lIHBvaW50cyBhdmFpbGFibGUgZm9yIGVkZ2UgKCVzLCVzKQoAcG9seWxpbmVNaWRwb2ludABzcGFuLT5mb250AHRleHRzcGFuLmMAdGV4dHNwYW5fc2l6ZQBmb250LT5uYW1lAGZvbnRuYW1lOiAiJXMiIHJlc29sdmVkIHRvOiAlcwoAZm9udG5hbWU6IHVuYWJsZSB0byByZXNvbHZlICIlcyIKAGNvdXIAYXJpYWwAaGVsdmV0aWNhAFtpbnRlcm5hbCB0aW1lc10AW2ludGVybmFsIGNvdXJpZXJdAFtpbnRlcm5hbCBhcmlhbF0AQXZhbnRHYXJkZS1Cb29rAFVSVyBHb3RoaWMgTABib29rAHNhbnMtU2VyaWYAQXZhbnRHYXJkZS1Cb29rT2JsaXF1ZQBvYmxpcXVlAGl0YWxpYwBBdmFudEdhcmRlLURlbWkAZGVtaQBBdmFudEdhcmRlLURlbWlPYmxpcXVlAEJvb2ttYW4tRGVtaQBVUlcgQm9va21hbiBMAHNlcmlmAEJvb2ttYW4tRGVtaUl0YWxpYwBCb29rbWFuLUxpZ2h0AGxpZ2h0AEJvb2ttYW4tTGlnaHRJdGFsaWMAQ291cmllcgBtb25vc3BhY2UAQ291cmllci1Cb2xkAENvdXJpZXItQm9sZE9ibGlxdWUAQ291cmllci1PYmxpcXVlAEhlbHZldGljYQBIZWx2ZXRpY2EtQm9sZABIZWx2ZXRpY2EtQm9sZE9ibGlxdWUASGVsdmV0aWNhLU5hcnJvdwBjb25kZW5zZWQASGVsdmV0aWNhLU5hcnJvdy1Cb2xkAEhlbHZldGljYS1OYXJyb3ctQm9sZE9ibGlxdWUASGVsdmV0aWNhLU5hcnJvdy1PYmxpcXVlAEhlbHZldGljYS1PYmxpcXVlAE5ld0NlbnR1cnlTY2hsYmstQm9sZABDZW50dXJ5IFNjaG9vbGJvb2sgTABOZXdDZW50dXJ5U2NobGJrLUJvbGRJdGFsaWMATmV3Q2VudHVyeVNjaGxiay1JdGFsaWMATmV3Q2VudHVyeVNjaGxiay1Sb21hbgByb21hbgBQYWxhdGluby1Cb2xkAFBhbGF0aW5vIExpbm90eXBlAFBhbGF0aW5vLUJvbGRJdGFsaWMAUGFsYXRpbm8tSXRhbGljAFBhbGF0aW5vLVJvbWFuAFN5bWJvbABmYW50YXN5AFRpbWVzLUJvbGQAVGltZXMAVGltZXMtQm9sZEl0YWxpYwBUaW1lcy1JdGFsaWMAWmFwZkNoYW5jZXJ5LU1lZGl1bUl0YWxpYwBVUlcgQ2hhbmNlcnkgTABtZWRpdW0AWmFwZkRpbmdiYXRzAERpbmdiYXRzAG5vAHRydWUAeWVzAHV0aWxzLmMAdSA9PSBVRl9maW5kKHUpAFVGX3NldG5hbWUAAWZpbGUgbG9hZGluZyBpcyBkaXNhYmxlZCBiZWNhdXNlIHRoZSBlbnZpcm9ubWVudCBjb250YWlucyBTRVJWRVJfTkFNRT0iJXMiCmFuZCB0aGUgR1ZfRklMRV9QQVRIIHZhcmlhYmxlIGlzIHVuc2V0IG9yIGVtcHR5LgoAUGF0aCBwcm92aWRlZCB0byBmaWxlOiAiJXMiIGhhcyBiZWVuIGlnbm9yZWQgYmVjYXVzZSBmaWxlcyBhcmUgb25seSBwZXJtaXR0ZWQgdG8gYmUgbG9hZGVkIGZyb20gdGhlIGRpcmVjdG9yaWVzIGluICIlcyIgd2hlbiBydW5uaW5nIGluIGFuIGh0dHAgc2VydmVyLgoAJXMlcyVzAC8AOgBlbGxpcHNlAFRpbWVzLVJvbWFuAGNsdXN0ZXIAX19jbHVzdGVybm9kZXMAVHdvIGNsdXN0ZXJzIG5hbWVkICVzIC0gdGhlIHNlY29uZCB3aWxsIGJlIGlnbm9yZWQKAG1hcE4AQUVsaWcAQWFjdXRlAEFjaXJjAEFncmF2ZQBBbHBoYQBBcmluZwBBdGlsZGUAQXVtbABCZXRhAENjZWRpbABDaGkARGFnZ2VyAERlbHRhAEVUSABFYWN1dGUARWNpcmMARWdyYXZlAEVwc2lsb24ARXRhAEV1bWwAR2FtbWEASWFjdXRlAEljaXJjAElncmF2ZQBJb3RhAEl1bWwAS2FwcGEATGFtYmRhAE11AE50aWxkZQBOdQBPRWxpZwBPYWN1dGUAT2NpcmMAT2dyYXZlAE9tZWdhAE9taWNyb24AT3NsYXNoAE90aWxkZQBPdW1sAFBoaQBQaQBQcmltZQBQc2kAUmhvAFNjYXJvbgBTaWdtYQBUSE9STgBUYXUAVGhldGEAVWFjdXRlAFVjaXJjAFVncmF2ZQBVcHNpbG9uAFV1bWwAWGkAWWFjdXRlAFl1bWwAWmV0YQBhYWN1dGUAYWNpcmMAYWN1dGUAYWVsaWcAYWdyYXZlAGFsZWZzeW0AYWxwaGEAYW1wAGFuZABhbmcAYXJpbmcAYXN5bXAAYXRpbGRlAGF1bWwAYmRxdW8AYmV0YQBicnZiYXIAYnVsbABjYXAAY2NlZGlsAGNlZGlsAGNlbnQAY2hpAGNpcmMAY2x1YnMAY29uZwBjb3B5AGNyYXJyAGN1cABjdXJyZW4AZEFycgBkYWdnZXIAZGFycgBkZWcAZGVsdGEAZGlhbXMAZGl2aWRlAGVhY3V0ZQBlY2lyYwBlZ3JhdmUAZW1wdHkAZW1zcABlbnNwAGVwc2lsb24AZXF1aXYAZXRhAGV0aABldW1sAGV1cm8AZXhpc3QAZm5vZgBmb3JhbGwAZnJhYzEyAGZyYWMxNABmcmFjMzQAZnJhc2wAZ2FtbWEAZ2UAZ3QAaEFycgBoYXJyAGhlYXJ0cwBoZWxsaXAAaWFjdXRlAGljaXJjAGlleGNsAGlncmF2ZQBpbWFnZQBpbmZpbgBpbnQAaW90YQBpcXVlc3QAaXNpbgBpdW1sAGthcHBhAGxBcnIAbGFtYmRhAGxhbmcAbGFxdW8AbGFycgBsY2VpbABsZHF1bwBsZQBsZmxvb3IAbG93YXN0AGxvegBscm0AbHNhcXVvAGxzcXVvAGx0AG1hY3IAbWRhc2gAbWljcm8AbWlkZG90AG11AG5hYmxhAG5ic3AAbmRhc2gAbmUAbmkAbm90AG5vdGluAG5zdWIAbnRpbGRlAG51AG9hY3V0ZQBvY2lyYwBvZWxpZwBvZ3JhdmUAb2xpbmUAb21lZ2EAb21pY3JvbgBvcGx1cwBvcgBvcmRmAG9yZG0Ab3NsYXNoAG90aWxkZQBvdGltZXMAb3VtbABwYXJhAHBhcnQAcGVybWlsAHBlcnAAcGhpAHBpAHBpdgBwbHVzbW4AcG91bmQAcHJpbWUAcHJvZABwcm9wAHBzaQBxdW90AHJBcnIAcmFkaWMAcmFuZwByYXF1bwByYXJyAHJjZWlsAHJkcXVvAHJlYWwAcmVnAHJmbG9vcgByaG8AcmxtAHJzYXF1bwByc3F1bwBzYnF1bwBzY2Fyb24Ac2RvdABzZWN0AHNoeQBzaWdtYQBzaWdtYWYAc2ltAHNwYWRlcwBzdWIAc3ViZQBzdW0Ac3VwAHN1cDEAc3VwMgBzdXAzAHN1cGUAc3psaWcAdGF1AHRoZXJlNAB0aGV0YQB0aGV0YXN5bQB0aGluc3AAdGhvcm4AdGlsZGUAdGltZXMAdHJhZGUAdUFycgB1YWN1dGUAdWFycgB1Y2lyYwB1Z3JhdmUAdW1sAHVwc2loAHVwc2lsb24AdXVtbAB3ZWllcnAAeGkAeWFjdXRlAHllbgB5dW1sAHpldGEAendqAHp3bmoAVVRGOCBjb2RlcyA+IDQgYnl0ZXMgYXJlIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkIChncmFwaCAlcykgLSB0cmVhdGVkIGFzIExhdGluLTEuIFBlcmhhcHMgIi1HY2hhcnNldD1sYXRpbjEiIGlzIG5lZWRlZD8KAEludmFsaWQgJWQtYnl0ZSBVVEY4IGZvdW5kIGluIGlucHV0IG9mIGdyYXBoICVzIC0gdHJlYXRlZCBhcyBMYXRpbi0xLiBQZXJoYXBzICItR2NoYXJzZXQ9bGF0aW4xIiBpcyBuZWVkZWQ/CgBiei5zaXplAG92ZXJsYXBfYmV6aWVyAHVydmVkAG9tcG91bmQAYWxzZQBpbmUAb25lAG8AcnRobwBvbHlsaW5lAHBsaW5lAHJ1ZQBlcwBVbmtub3duICJzcGxpbmVzIiB2YWx1ZTogIiVzIiAtIGlnbm9yZWQKAHNwbGluZXMAb2RiAE9ydGhvZ29uYWwgZWRnZXMgZG8gbm90IGN1cnJlbnRseSBoYW5kbGUgZWRnZSBsYWJlbHMuIFRyeSB1c2luZyB4bGFiZWxzLgoAb3J0aG8gJXMgJXMKAGNoYW5pAG9ydGhvLmMAY2hhblNlYXJjaABjcAAlJSFQUy1BZG9iZS0yLjAKJSUlJUJvdW5kaW5nQm94OiAoYXRlbmQpCi9wb2ludCB7CiAgL1kgZXhjaCBkZWYKICAvWCBleGNoIGRlZgogIG5ld3BhdGgKICBYIFkgMyAwIDM2MCBhcmMgZmlsbAp9IGRlZgovY2VsbCB7CiAgL1kgZXhjaCBkZWYKICAvWCBleGNoIGRlZgogIC95IGV4Y2ggZGVmCiAgL3ggZXhjaCBkZWYKICBuZXdwYXRoCiAgeCB5IG1vdmV0bwogIHggWSBsaW5ldG8KICBYIFkgbGluZXRvCiAgWCB5IGxpbmV0bwogIGNsb3NlcGF0aCBzdHJva2UKfSBkZWYKL25vZGUgewogL3UgZXhjaCBkZWYKIC9yIGV4Y2ggZGVmCiAvZCBleGNoIGRlZgogL2wgZXhjaCBkZWYKIG5ld3BhdGggbCBkIG1vdmV0bwogciBkIGxpbmV0byByIHUgbGluZXRvIGwgdSBsaW5ldG8KIGNsb3NlcGF0aCBmaWxsCn0gZGVmCgoAJWQgJWQgdHJhbnNsYXRlCgAwLjggMC44IDAuOCBzZXRyZ2Jjb2xvcgoAc2hvd3BhZ2UKJSUlJVRyYWlsZXIKJSUlJUJvdW5kaW5nQm94OiAlZCAlZCAlZCAlZAoAbmV3cGF0aCAlZCAlZCBtb3ZldG8KACVkICVkIGxpbmV0bwoAJWQgJWQgbGluZXRvIHN0cm9rZQoAY2hhbm5lbCAlZCAoJWYsJWYpCgAgLT4KACAgICAgACgoJWYsJWYpLCglZiwlZikpICVzICVzAEJfUklHSFQAQl9ET1dOAEJfTEVGVABCX1VQAEJfTk9ERQBzZWcAbmV4dF9zZWcAZGVjaWRlX3BvaW50AGluY29tcGFyYWJsZSBzZWdtZW50cyAhISAtLSBBYm9ydGluZwoAczEtPmNvbW1fY29vcmQ9PXMyLT5jb21tX2Nvb3JkAGlzX3BhcmFsbGVsAGdyYXBoIEcgewoAIG5vZGVbc2hhcGU9cG9pbnRdCgAgICVkIFtwb3M9IiVkLCVkIl0KACAgJWQgLS0gJWRbbGVuPSIlZiJdCgB9CgBjb2xvciAlcwAlcyBpcyBub3QgYSBrbm93biBjb2xvci4KAGVycm9yIGluIGNvbHhsYXRlKCkKAHNvbGlkAGludmlzaWJsZQBib2xkAHNldGxpbmV3aWR0aABmaWxsZWQAdW5maWxsZWQAdGFwZXJlZABndnJlbmRlcl9zZXRfc3R5bGU6IHVuc3VwcG9ydGVkIHN0eWxlICVzIC0gaWdub3JpbmcKAGd2cmVuZGVyLmMAZ3ZyZW5kZXJfdXNlcnNoYXBlAG5hbWUAbmFtZVswXQB3aWR0aABoZWlnaHQAYm90aABqb2IAZ3Zsb2FkaW1hZ2UuYwBndmxvYWRpbWFnZQB1cwB1cy0+bmFtZQB1cy0+bmFtZVswXQBObyBsb2FkaW1hZ2UgcGx1Z2luIGZvciAiJXMiCgBRAExlZnQAS1BfTGVmdABSaWdodABLUF9SaWdodABVcABLUF9VcABEb3duAEtQX0Rvd24AcGx1cwBLUF9BZGQAbWludXMAS1BfU3VidHJhY3QARgB0b29sdGlwAGVkZ2UAdGFpbHBvcnQAaGVhZHBvcnQAa2V5AGhyZWYAVVJMAG5vZGUAZGlncmFwaABncmFwaABzdWJncmFwaABfTFRYX2xpYnJhcnkAdGV4dGxheW91dABvYmpwLT5sYmwAeGxhYmVscy5jAHhsYWRqdXN0AHhsaW50ZXJzZWN0aW9ucwBscCAhPSBjbHAAZ2V0aW50cnN4aQBvYmpwMS0+c3oueCA9PSAwICYmIG9ianAxLT5zei55ID09IDAAbGJsZW5jbG9zaW5nAHZwAHhsaGR4dW5sb2FkAHNpemU9PWZyZWVkAHJlY3QuYm91bmRhcnlbMl0gPCBJTlRfTUFYAG9ianBscG1rcwByZWN0LmJvdW5kYXJ5WzNdIDwgSU5UX01BWABvdXQgb2YgbWVtb3J5CgAjJTJ4JTJ4JTJ4JTJ4ACVsZiVsZiVsZgAvYWNjZW50My8xAC9hY2NlbnQzLzIAL2FjY2VudDMvMwAvYWNjZW50NC8xAC9hY2NlbnQ0LzIAL2FjY2VudDQvMwAvYWNjZW50NC80AC9hY2NlbnQ1LzEAL2FjY2VudDUvMgAvYWNjZW50NS8zAC9hY2NlbnQ1LzQAL2FjY2VudDUvNQAvYWNjZW50Ni8xAC9hY2NlbnQ2LzIAL2FjY2VudDYvMwAvYWNjZW50Ni80AC9hY2NlbnQ2LzUAL2FjY2VudDYvNgAvYWNjZW50Ny8xAC9hY2NlbnQ3LzIAL2FjY2VudDcvMwAvYWNjZW50Ny80AC9hY2NlbnQ3LzUAL2FjY2VudDcvNgAvYWNjZW50Ny83AC9hY2NlbnQ4LzEAL2FjY2VudDgvMgAvYWNjZW50OC8zAC9hY2NlbnQ4LzQAL2FjY2VudDgvNQAvYWNjZW50OC82AC9hY2NlbnQ4LzcAL2FjY2VudDgvOAAvYmx1ZXMzLzEAL2JsdWVzMy8yAC9ibHVlczMvMwAvYmx1ZXM0LzEAL2JsdWVzNC8yAC9ibHVlczQvMwAvYmx1ZXM0LzQAL2JsdWVzNS8xAC9ibHVlczUvMgAvYmx1ZXM1LzMAL2JsdWVzNS80AC9ibHVlczUvNQAvYmx1ZXM2LzEAL2JsdWVzNi8yAC9ibHVlczYvMwAvYmx1ZXM2LzQAL2JsdWVzNi81AC9ibHVlczYvNgAvYmx1ZXM3LzEAL2JsdWVzNy8yAC9ibHVlczcvMwAvYmx1ZXM3LzQAL2JsdWVzNy81AC9ibHVlczcvNgAvYmx1ZXM3LzcAL2JsdWVzOC8xAC9ibHVlczgvMgAvYmx1ZXM4LzMAL2JsdWVzOC80AC9ibHVlczgvNQAvYmx1ZXM4LzYAL2JsdWVzOC83AC9ibHVlczgvOAAvYmx1ZXM5LzEAL2JsdWVzOS8yAC9ibHVlczkvMwAvYmx1ZXM5LzQAL2JsdWVzOS81AC9ibHVlczkvNgAvYmx1ZXM5LzcAL2JsdWVzOS84AC9ibHVlczkvOQAvYnJiZzEwLzEAL2JyYmcxMC8xMAAvYnJiZzEwLzIAL2JyYmcxMC8zAC9icmJnMTAvNAAvYnJiZzEwLzUAL2JyYmcxMC82AC9icmJnMTAvNwAvYnJiZzEwLzgAL2JyYmcxMC85AC9icmJnMTEvMQAvYnJiZzExLzEwAC9icmJnMTEvMTEAL2JyYmcxMS8yAC9icmJnMTEvMwAvYnJiZzExLzQAL2JyYmcxMS81AC9icmJnMTEvNgAvYnJiZzExLzcAL2JyYmcxMS84AC9icmJnMTEvOQAvYnJiZzMvMQAvYnJiZzMvMgAvYnJiZzMvMwAvYnJiZzQvMQAvYnJiZzQvMgAvYnJiZzQvMwAvYnJiZzQvNAAvYnJiZzUvMQAvYnJiZzUvMgAvYnJiZzUvMwAvYnJiZzUvNAAvYnJiZzUvNQAvYnJiZzYvMQAvYnJiZzYvMgAvYnJiZzYvMwAvYnJiZzYvNAAvYnJiZzYvNQAvYnJiZzYvNgAvYnJiZzcvMQAvYnJiZzcvMgAvYnJiZzcvMwAvYnJiZzcvNAAvYnJiZzcvNQAvYnJiZzcvNgAvYnJiZzcvNwAvYnJiZzgvMQAvYnJiZzgvMgAvYnJiZzgvMwAvYnJiZzgvNAAvYnJiZzgvNQAvYnJiZzgvNgAvYnJiZzgvNwAvYnJiZzgvOAAvYnJiZzkvMQAvYnJiZzkvMgAvYnJiZzkvMwAvYnJiZzkvNAAvYnJiZzkvNQAvYnJiZzkvNgAvYnJiZzkvNwAvYnJiZzkvOAAvYnJiZzkvOQAvYnVnbjMvMQAvYnVnbjMvMgAvYnVnbjMvMwAvYnVnbjQvMQAvYnVnbjQvMgAvYnVnbjQvMwAvYnVnbjQvNAAvYnVnbjUvMQAvYnVnbjUvMgAvYnVnbjUvMwAvYnVnbjUvNAAvYnVnbjUvNQAvYnVnbjYvMQAvYnVnbjYvMgAvYnVnbjYvMwAvYnVnbjYvNAAvYnVnbjYvNQAvYnVnbjYvNgAvYnVnbjcvMQAvYnVnbjcvMgAvYnVnbjcvMwAvYnVnbjcvNAAvYnVnbjcvNQAvYnVnbjcvNgAvYnVnbjcvNwAvYnVnbjgvMQAvYnVnbjgvMgAvYnVnbjgvMwAvYnVnbjgvNAAvYnVnbjgvNQAvYnVnbjgvNgAvYnVnbjgvNwAvYnVnbjgvOAAvYnVnbjkvMQAvYnVnbjkvMgAvYnVnbjkvMwAvYnVnbjkvNAAvYnVnbjkvNQAvYnVnbjkvNgAvYnVnbjkvNwAvYnVnbjkvOAAvYnVnbjkvOQAvYnVwdTMvMQAvYnVwdTMvMgAvYnVwdTMvMwAvYnVwdTQvMQAvYnVwdTQvMgAvYnVwdTQvMwAvYnVwdTQvNAAvYnVwdTUvMQAvYnVwdTUvMgAvYnVwdTUvMwAvYnVwdTUvNAAvYnVwdTUvNQAvYnVwdTYvMQAvYnVwdTYvMgAvYnVwdTYvMwAvYnVwdTYvNAAvYnVwdTYvNQAvYnVwdTYvNgAvYnVwdTcvMQAvYnVwdTcvMgAvYnVwdTcvMwAvYnVwdTcvNAAvYnVwdTcvNQAvYnVwdTcvNgAvYnVwdTcvNwAvYnVwdTgvMQAvYnVwdTgvMgAvYnVwdTgvMwAvYnVwdTgvNAAvYnVwdTgvNQAvYnVwdTgvNgAvYnVwdTgvNwAvYnVwdTgvOAAvYnVwdTkvMQAvYnVwdTkvMgAvYnVwdTkvMwAvYnVwdTkvNAAvYnVwdTkvNQAvYnVwdTkvNgAvYnVwdTkvNwAvYnVwdTkvOAAvYnVwdTkvOQAvZGFyazIzLzEAL2RhcmsyMy8yAC9kYXJrMjMvMwAvZGFyazI0LzEAL2RhcmsyNC8yAC9kYXJrMjQvMwAvZGFyazI0LzQAL2RhcmsyNS8xAC9kYXJrMjUvMgAvZGFyazI1LzMAL2RhcmsyNS80AC9kYXJrMjUvNQAvZGFyazI2LzEAL2RhcmsyNi8yAC9kYXJrMjYvMwAvZGFyazI2LzQAL2RhcmsyNi81AC9kYXJrMjYvNgAvZGFyazI3LzEAL2RhcmsyNy8yAC9kYXJrMjcvMwAvZGFyazI3LzQAL2RhcmsyNy81AC9kYXJrMjcvNgAvZGFyazI3LzcAL2RhcmsyOC8xAC9kYXJrMjgvMgAvZGFyazI4LzMAL2RhcmsyOC80AC9kYXJrMjgvNQAvZGFyazI4LzYAL2RhcmsyOC83AC9kYXJrMjgvOAAvZ25idTMvMQAvZ25idTMvMgAvZ25idTMvMwAvZ25idTQvMQAvZ25idTQvMgAvZ25idTQvMwAvZ25idTQvNAAvZ25idTUvMQAvZ25idTUvMgAvZ25idTUvMwAvZ25idTUvNAAvZ25idTUvNQAvZ25idTYvMQAvZ25idTYvMgAvZ25idTYvMwAvZ25idTYvNAAvZ25idTYvNQAvZ25idTYvNgAvZ25idTcvMQAvZ25idTcvMgAvZ25idTcvMwAvZ25idTcvNAAvZ25idTcvNQAvZ25idTcvNgAvZ25idTcvNwAvZ25idTgvMQAvZ25idTgvMgAvZ25idTgvMwAvZ25idTgvNAAvZ25idTgvNQAvZ25idTgvNgAvZ25idTgvNwAvZ25idTgvOAAvZ25idTkvMQAvZ25idTkvMgAvZ25idTkvMwAvZ25idTkvNAAvZ25idTkvNQAvZ25idTkvNgAvZ25idTkvNwAvZ25idTkvOAAvZ25idTkvOQAvZ3JlZW5zMy8xAC9ncmVlbnMzLzIAL2dyZWVuczMvMwAvZ3JlZW5zNC8xAC9ncmVlbnM0LzIAL2dyZWVuczQvMwAvZ3JlZW5zNC80AC9ncmVlbnM1LzEAL2dyZWVuczUvMgAvZ3JlZW5zNS8zAC9ncmVlbnM1LzQAL2dyZWVuczUvNQAvZ3JlZW5zNi8xAC9ncmVlbnM2LzIAL2dyZWVuczYvMwAvZ3JlZW5zNi80AC9ncmVlbnM2LzUAL2dyZWVuczYvNgAvZ3JlZW5zNy8xAC9ncmVlbnM3LzIAL2dyZWVuczcvMwAvZ3JlZW5zNy80AC9ncmVlbnM3LzUAL2dyZWVuczcvNgAvZ3JlZW5zNy83AC9ncmVlbnM4LzEAL2dyZWVuczgvMgAvZ3JlZW5zOC8zAC9ncmVlbnM4LzQAL2dyZWVuczgvNQAvZ3JlZW5zOC82AC9ncmVlbnM4LzcAL2dyZWVuczgvOAAvZ3JlZW5zOS8xAC9ncmVlbnM5LzIAL2dyZWVuczkvMwAvZ3JlZW5zOS80AC9ncmVlbnM5LzUAL2dyZWVuczkvNgAvZ3JlZW5zOS83AC9ncmVlbnM5LzgAL2dyZWVuczkvOQAvZ3JleXMzLzEAL2dyZXlzMy8yAC9ncmV5czMvMwAvZ3JleXM0LzEAL2dyZXlzNC8yAC9ncmV5czQvMwAvZ3JleXM0LzQAL2dyZXlzNS8xAC9ncmV5czUvMgAvZ3JleXM1LzMAL2dyZXlzNS80AC9ncmV5czUvNQAvZ3JleXM2LzEAL2dyZXlzNi8yAC9ncmV5czYvMwAvZ3JleXM2LzQAL2dyZXlzNi81AC9ncmV5czYvNgAvZ3JleXM3LzEAL2dyZXlzNy8yAC9ncmV5czcvMwAvZ3JleXM3LzQAL2dyZXlzNy81AC9ncmV5czcvNgAvZ3JleXM3LzcAL2dyZXlzOC8xAC9ncmV5czgvMgAvZ3JleXM4LzMAL2dyZXlzOC80AC9ncmV5czgvNQAvZ3JleXM4LzYAL2dyZXlzOC83AC9ncmV5czgvOAAvZ3JleXM5LzEAL2dyZXlzOS8yAC9ncmV5czkvMwAvZ3JleXM5LzQAL2dyZXlzOS81AC9ncmV5czkvNgAvZ3JleXM5LzcAL2dyZXlzOS84AC9ncmV5czkvOQAvb3JhbmdlczMvMQAvb3JhbmdlczMvMgAvb3JhbmdlczMvMwAvb3JhbmdlczQvMQAvb3JhbmdlczQvMgAvb3JhbmdlczQvMwAvb3JhbmdlczQvNAAvb3JhbmdlczUvMQAvb3JhbmdlczUvMgAvb3JhbmdlczUvMwAvb3JhbmdlczUvNAAvb3JhbmdlczUvNQAvb3JhbmdlczYvMQAvb3JhbmdlczYvMgAvb3JhbmdlczYvMwAvb3JhbmdlczYvNAAvb3JhbmdlczYvNQAvb3JhbmdlczYvNgAvb3JhbmdlczcvMQAvb3JhbmdlczcvMgAvb3JhbmdlczcvMwAvb3JhbmdlczcvNAAvb3JhbmdlczcvNQAvb3JhbmdlczcvNgAvb3JhbmdlczcvNwAvb3JhbmdlczgvMQAvb3JhbmdlczgvMgAvb3JhbmdlczgvMwAvb3JhbmdlczgvNAAvb3JhbmdlczgvNQAvb3JhbmdlczgvNgAvb3JhbmdlczgvNwAvb3JhbmdlczgvOAAvb3JhbmdlczkvMQAvb3JhbmdlczkvMgAvb3JhbmdlczkvMwAvb3JhbmdlczkvNAAvb3JhbmdlczkvNQAvb3JhbmdlczkvNgAvb3JhbmdlczkvNwAvb3JhbmdlczkvOAAvb3JhbmdlczkvOQAvb3JyZDMvMQAvb3JyZDMvMgAvb3JyZDMvMwAvb3JyZDQvMQAvb3JyZDQvMgAvb3JyZDQvMwAvb3JyZDQvNAAvb3JyZDUvMQAvb3JyZDUvMgAvb3JyZDUvMwAvb3JyZDUvNAAvb3JyZDUvNQAvb3JyZDYvMQAvb3JyZDYvMgAvb3JyZDYvMwAvb3JyZDYvNAAvb3JyZDYvNQAvb3JyZDYvNgAvb3JyZDcvMQAvb3JyZDcvMgAvb3JyZDcvMwAvb3JyZDcvNAAvb3JyZDcvNQAvb3JyZDcvNgAvb3JyZDcvNwAvb3JyZDgvMQAvb3JyZDgvMgAvb3JyZDgvMwAvb3JyZDgvNAAvb3JyZDgvNQAvb3JyZDgvNgAvb3JyZDgvNwAvb3JyZDgvOAAvb3JyZDkvMQAvb3JyZDkvMgAvb3JyZDkvMwAvb3JyZDkvNAAvb3JyZDkvNQAvb3JyZDkvNgAvb3JyZDkvNwAvb3JyZDkvOAAvb3JyZDkvOQAvcGFpcmVkMTAvMQAvcGFpcmVkMTAvMTAAL3BhaXJlZDEwLzIAL3BhaXJlZDEwLzMAL3BhaXJlZDEwLzQAL3BhaXJlZDEwLzUAL3BhaXJlZDEwLzYAL3BhaXJlZDEwLzcAL3BhaXJlZDEwLzgAL3BhaXJlZDEwLzkAL3BhaXJlZDExLzEAL3BhaXJlZDExLzEwAC9wYWlyZWQxMS8xMQAvcGFpcmVkMTEvMgAvcGFpcmVkMTEvMwAvcGFpcmVkMTEvNAAvcGFpcmVkMTEvNQAvcGFpcmVkMTEvNgAvcGFpcmVkMTEvNwAvcGFpcmVkMTEvOAAvcGFpcmVkMTEvOQAvcGFpcmVkMTIvMQAvcGFpcmVkMTIvMTAAL3BhaXJlZDEyLzExAC9wYWlyZWQxMi8xMgAvcGFpcmVkMTIvMgAvcGFpcmVkMTIvMwAvcGFpcmVkMTIvNAAvcGFpcmVkMTIvNQAvcGFpcmVkMTIvNgAvcGFpcmVkMTIvNwAvcGFpcmVkMTIvOAAvcGFpcmVkMTIvOQAvcGFpcmVkMy8xAC9wYWlyZWQzLzIAL3BhaXJlZDMvMwAvcGFpcmVkNC8xAC9wYWlyZWQ0LzIAL3BhaXJlZDQvMwAvcGFpcmVkNC80AC9wYWlyZWQ1LzEAL3BhaXJlZDUvMgAvcGFpcmVkNS8zAC9wYWlyZWQ1LzQAL3BhaXJlZDUvNQAvcGFpcmVkNi8xAC9wYWlyZWQ2LzIAL3BhaXJlZDYvMwAvcGFpcmVkNi80AC9wYWlyZWQ2LzUAL3BhaXJlZDYvNgAvcGFpcmVkNy8xAC9wYWlyZWQ3LzIAL3BhaXJlZDcvMwAvcGFpcmVkNy80AC9wYWlyZWQ3LzUAL3BhaXJlZDcvNgAvcGFpcmVkNy83AC9wYWlyZWQ4LzEAL3BhaXJlZDgvMgAvcGFpcmVkOC8zAC9wYWlyZWQ4LzQAL3BhaXJlZDgvNQAvcGFpcmVkOC82AC9wYWlyZWQ4LzcAL3BhaXJlZDgvOAAvcGFpcmVkOS8xAC9wYWlyZWQ5LzIAL3BhaXJlZDkvMwAvcGFpcmVkOS80AC9wYWlyZWQ5LzUAL3BhaXJlZDkvNgAvcGFpcmVkOS83AC9wYWlyZWQ5LzgAL3BhaXJlZDkvOQAvcGFzdGVsMTMvMQAvcGFzdGVsMTMvMgAvcGFzdGVsMTMvMwAvcGFzdGVsMTQvMQAvcGFzdGVsMTQvMgAvcGFzdGVsMTQvMwAvcGFzdGVsMTQvNAAvcGFzdGVsMTUvMQAvcGFzdGVsMTUvMgAvcGFzdGVsMTUvMwAvcGFzdGVsMTUvNAAvcGFzdGVsMTUvNQAvcGFzdGVsMTYvMQAvcGFzdGVsMTYvMgAvcGFzdGVsMTYvMwAvcGFzdGVsMTYvNAAvcGFzdGVsMTYvNQAvcGFzdGVsMTYvNgAvcGFzdGVsMTcvMQAvcGFzdGVsMTcvMgAvcGFzdGVsMTcvMwAvcGFzdGVsMTcvNAAvcGFzdGVsMTcvNQAvcGFzdGVsMTcvNgAvcGFzdGVsMTcvNwAvcGFzdGVsMTgvMQAvcGFzdGVsMTgvMgAvcGFzdGVsMTgvMwAvcGFzdGVsMTgvNAAvcGFzdGVsMTgvNQAvcGFzdGVsMTgvNgAvcGFzdGVsMTgvNwAvcGFzdGVsMTgvOAAvcGFzdGVsMTkvMQAvcGFzdGVsMTkvMgAvcGFzdGVsMTkvMwAvcGFzdGVsMTkvNAAvcGFzdGVsMTkvNQAvcGFzdGVsMTkvNgAvcGFzdGVsMTkvNwAvcGFzdGVsMTkvOAAvcGFzdGVsMTkvOQAvcGFzdGVsMjMvMQAvcGFzdGVsMjMvMgAvcGFzdGVsMjMvMwAvcGFzdGVsMjQvMQAvcGFzdGVsMjQvMgAvcGFzdGVsMjQvMwAvcGFzdGVsMjQvNAAvcGFzdGVsMjUvMQAvcGFzdGVsMjUvMgAvcGFzdGVsMjUvMwAvcGFzdGVsMjUvNAAvcGFzdGVsMjUvNQAvcGFzdGVsMjYvMQAvcGFzdGVsMjYvMgAvcGFzdGVsMjYvMwAvcGFzdGVsMjYvNAAvcGFzdGVsMjYvNQAvcGFzdGVsMjYvNgAvcGFzdGVsMjcvMQAvcGFzdGVsMjcvMgAvcGFzdGVsMjcvMwAvcGFzdGVsMjcvNAAvcGFzdGVsMjcvNQAvcGFzdGVsMjcvNgAvcGFzdGVsMjcvNwAvcGFzdGVsMjgvMQAvcGFzdGVsMjgvMgAvcGFzdGVsMjgvMwAvcGFzdGVsMjgvNAAvcGFzdGVsMjgvNQAvcGFzdGVsMjgvNgAvcGFzdGVsMjgvNwAvcGFzdGVsMjgvOAAvcGl5ZzEwLzEAL3BpeWcxMC8xMAAvcGl5ZzEwLzIAL3BpeWcxMC8zAC9waXlnMTAvNAAvcGl5ZzEwLzUAL3BpeWcxMC82AC9waXlnMTAvNwAvcGl5ZzEwLzgAL3BpeWcxMC85AC9waXlnMTEvMQAvcGl5ZzExLzEwAC9waXlnMTEvMTEAL3BpeWcxMS8yAC9waXlnMTEvMwAvcGl5ZzExLzQAL3BpeWcxMS81AC9waXlnMTEvNgAvcGl5ZzExLzcAL3BpeWcxMS84AC9waXlnMTEvOQAvcGl5ZzMvMQAvcGl5ZzMvMgAvcGl5ZzMvMwAvcGl5ZzQvMQAvcGl5ZzQvMgAvcGl5ZzQvMwAvcGl5ZzQvNAAvcGl5ZzUvMQAvcGl5ZzUvMgAvcGl5ZzUvMwAvcGl5ZzUvNAAvcGl5ZzUvNQAvcGl5ZzYvMQAvcGl5ZzYvMgAvcGl5ZzYvMwAvcGl5ZzYvNAAvcGl5ZzYvNQAvcGl5ZzYvNgAvcGl5ZzcvMQAvcGl5ZzcvMgAvcGl5ZzcvMwAvcGl5ZzcvNAAvcGl5ZzcvNQAvcGl5ZzcvNgAvcGl5ZzcvNwAvcGl5ZzgvMQAvcGl5ZzgvMgAvcGl5ZzgvMwAvcGl5ZzgvNAAvcGl5ZzgvNQAvcGl5ZzgvNgAvcGl5ZzgvNwAvcGl5ZzgvOAAvcGl5ZzkvMQAvcGl5ZzkvMgAvcGl5ZzkvMwAvcGl5ZzkvNAAvcGl5ZzkvNQAvcGl5ZzkvNgAvcGl5ZzkvNwAvcGl5ZzkvOAAvcGl5ZzkvOQAvcHJnbjEwLzEAL3ByZ24xMC8xMAAvcHJnbjEwLzIAL3ByZ24xMC8zAC9wcmduMTAvNAAvcHJnbjEwLzUAL3ByZ24xMC82AC9wcmduMTAvNwAvcHJnbjEwLzgAL3ByZ24xMC85AC9wcmduMTEvMQAvcHJnbjExLzEwAC9wcmduMTEvMTEAL3ByZ24xMS8yAC9wcmduMTEvMwAvcHJnbjExLzQAL3ByZ24xMS81AC9wcmduMTEvNgAvcHJnbjExLzcAL3ByZ24xMS84AC9wcmduMTEvOQAvcHJnbjMvMQAvcHJnbjMvMgAvcHJnbjMvMwAvcHJnbjQvMQAvcHJnbjQvMgAvcHJnbjQvMwAvcHJnbjQvNAAvcHJnbjUvMQAvcHJnbjUvMgAvcHJnbjUvMwAvcHJnbjUvNAAvcHJnbjUvNQAvcHJnbjYvMQAvcHJnbjYvMgAvcHJnbjYvMwAvcHJnbjYvNAAvcHJnbjYvNQAvcHJnbjYvNgAvcHJnbjcvMQAvcHJnbjcvMgAvcHJnbjcvMwAvcHJnbjcvNAAvcHJnbjcvNQAvcHJnbjcvNgAvcHJnbjcvNwAvcHJnbjgvMQAvcHJnbjgvMgAvcHJnbjgvMwAvcHJnbjgvNAAvcHJnbjgvNQAvcHJnbjgvNgAvcHJnbjgvNwAvcHJnbjgvOAAvcHJnbjkvMQAvcHJnbjkvMgAvcHJnbjkvMwAvcHJnbjkvNAAvcHJnbjkvNQAvcHJnbjkvNgAvcHJnbjkvNwAvcHJnbjkvOAAvcHJnbjkvOQAvcHVidTMvMQAvcHVidTMvMgAvcHVidTMvMwAvcHVidTQvMQAvcHVidTQvMgAvcHVidTQvMwAvcHVidTQvNAAvcHVidTUvMQAvcHVidTUvMgAvcHVidTUvMwAvcHVidTUvNAAvcHVidTUvNQAvcHVidTYvMQAvcHVidTYvMgAvcHVidTYvMwAvcHVidTYvNAAvcHVidTYvNQAvcHVidTYvNgAvcHVidTcvMQAvcHVidTcvMgAvcHVidTcvMwAvcHVidTcvNAAvcHVidTcvNQAvcHVidTcvNgAvcHVidTcvNwAvcHVidTgvMQAvcHVidTgvMgAvcHVidTgvMwAvcHVidTgvNAAvcHVidTgvNQAvcHVidTgvNgAvcHVidTgvNwAvcHVidTgvOAAvcHVidTkvMQAvcHVidTkvMgAvcHVidTkvMwAvcHVidTkvNAAvcHVidTkvNQAvcHVidTkvNgAvcHVidTkvNwAvcHVidTkvOAAvcHVidTkvOQAvcHVidWduMy8xAC9wdWJ1Z24zLzIAL3B1YnVnbjMvMwAvcHVidWduNC8xAC9wdWJ1Z240LzIAL3B1YnVnbjQvMwAvcHVidWduNC80AC9wdWJ1Z241LzEAL3B1YnVnbjUvMgAvcHVidWduNS8zAC9wdWJ1Z241LzQAL3B1YnVnbjUvNQAvcHVidWduNi8xAC9wdWJ1Z242LzIAL3B1YnVnbjYvMwAvcHVidWduNi80AC9wdWJ1Z242LzUAL3B1YnVnbjYvNgAvcHVidWduNy8xAC9wdWJ1Z243LzIAL3B1YnVnbjcvMwAvcHVidWduNy80AC9wdWJ1Z243LzUAL3B1YnVnbjcvNgAvcHVidWduNy83AC9wdWJ1Z244LzEAL3B1YnVnbjgvMgAvcHVidWduOC8zAC9wdWJ1Z244LzQAL3B1YnVnbjgvNQAvcHVidWduOC82AC9wdWJ1Z244LzcAL3B1YnVnbjgvOAAvcHVidWduOS8xAC9wdWJ1Z245LzIAL3B1YnVnbjkvMwAvcHVidWduOS80AC9wdWJ1Z245LzUAL3B1YnVnbjkvNgAvcHVidWduOS83AC9wdWJ1Z245LzgAL3B1YnVnbjkvOQAvcHVvcjEwLzEAL3B1b3IxMC8xMAAvcHVvcjEwLzIAL3B1b3IxMC8zAC9wdW9yMTAvNAAvcHVvcjEwLzUAL3B1b3IxMC82AC9wdW9yMTAvNwAvcHVvcjEwLzgAL3B1b3IxMC85AC9wdW9yMTEvMQAvcHVvcjExLzEwAC9wdW9yMTEvMTEAL3B1b3IxMS8yAC9wdW9yMTEvMwAvcHVvcjExLzQAL3B1b3IxMS81AC9wdW9yMTEvNgAvcHVvcjExLzcAL3B1b3IxMS84AC9wdW9yMTEvOQAvcHVvcjMvMQAvcHVvcjMvMgAvcHVvcjMvMwAvcHVvcjQvMQAvcHVvcjQvMgAvcHVvcjQvMwAvcHVvcjQvNAAvcHVvcjUvMQAvcHVvcjUvMgAvcHVvcjUvMwAvcHVvcjUvNAAvcHVvcjUvNQAvcHVvcjYvMQAvcHVvcjYvMgAvcHVvcjYvMwAvcHVvcjYvNAAvcHVvcjYvNQAvcHVvcjYvNgAvcHVvcjcvMQAvcHVvcjcvMgAvcHVvcjcvMwAvcHVvcjcvNAAvcHVvcjcvNQAvcHVvcjcvNgAvcHVvcjcvNwAvcHVvcjgvMQAvcHVvcjgvMgAvcHVvcjgvMwAvcHVvcjgvNAAvcHVvcjgvNQAvcHVvcjgvNgAvcHVvcjgvNwAvcHVvcjgvOAAvcHVvcjkvMQAvcHVvcjkvMgAvcHVvcjkvMwAvcHVvcjkvNAAvcHVvcjkvNQAvcHVvcjkvNgAvcHVvcjkvNwAvcHVvcjkvOAAvcHVvcjkvOQAvcHVyZDMvMQAvcHVyZDMvMgAvcHVyZDMvMwAvcHVyZDQvMQAvcHVyZDQvMgAvcHVyZDQvMwAvcHVyZDQvNAAvcHVyZDUvMQAvcHVyZDUvMgAvcHVyZDUvMwAvcHVyZDUvNAAvcHVyZDUvNQAvcHVyZDYvMQAvcHVyZDYvMgAvcHVyZDYvMwAvcHVyZDYvNAAvcHVyZDYvNQAvcHVyZDYvNgAvcHVyZDcvMQAvcHVyZDcvMgAvcHVyZDcvMwAvcHVyZDcvNAAvcHVyZDcvNQAvcHVyZDcvNgAvcHVyZDcvNwAvcHVyZDgvMQAvcHVyZDgvMgAvcHVyZDgvMwAvcHVyZDgvNAAvcHVyZDgvNQAvcHVyZDgvNgAvcHVyZDgvNwAvcHVyZDgvOAAvcHVyZDkvMQAvcHVyZDkvMgAvcHVyZDkvMwAvcHVyZDkvNAAvcHVyZDkvNQAvcHVyZDkvNgAvcHVyZDkvNwAvcHVyZDkvOAAvcHVyZDkvOQAvcHVycGxlczMvMQAvcHVycGxlczMvMgAvcHVycGxlczMvMwAvcHVycGxlczQvMQAvcHVycGxlczQvMgAvcHVycGxlczQvMwAvcHVycGxlczQvNAAvcHVycGxlczUvMQAvcHVycGxlczUvMgAvcHVycGxlczUvMwAvcHVycGxlczUvNAAvcHVycGxlczUvNQAvcHVycGxlczYvMQAvcHVycGxlczYvMgAvcHVycGxlczYvMwAvcHVycGxlczYvNAAvcHVycGxlczYvNQAvcHVycGxlczYvNgAvcHVycGxlczcvMQAvcHVycGxlczcvMgAvcHVycGxlczcvMwAvcHVycGxlczcvNAAvcHVycGxlczcvNQAvcHVycGxlczcvNgAvcHVycGxlczcvNwAvcHVycGxlczgvMQAvcHVycGxlczgvMgAvcHVycGxlczgvMwAvcHVycGxlczgvNAAvcHVycGxlczgvNQAvcHVycGxlczgvNgAvcHVycGxlczgvNwAvcHVycGxlczgvOAAvcHVycGxlczkvMQAvcHVycGxlczkvMgAvcHVycGxlczkvMwAvcHVycGxlczkvNAAvcHVycGxlczkvNQAvcHVycGxlczkvNgAvcHVycGxlczkvNwAvcHVycGxlczkvOAAvcHVycGxlczkvOQAvcmRidTEwLzEAL3JkYnUxMC8xMAAvcmRidTEwLzIAL3JkYnUxMC8zAC9yZGJ1MTAvNAAvcmRidTEwLzUAL3JkYnUxMC82AC9yZGJ1MTAvNwAvcmRidTEwLzgAL3JkYnUxMC85AC9yZGJ1MTEvMQAvcmRidTExLzEwAC9yZGJ1MTEvMTEAL3JkYnUxMS8yAC9yZGJ1MTEvMwAvcmRidTExLzQAL3JkYnUxMS81AC9yZGJ1MTEvNgAvcmRidTExLzcAL3JkYnUxMS84AC9yZGJ1MTEvOQAvcmRidTMvMQAvcmRidTMvMgAvcmRidTMvMwAvcmRidTQvMQAvcmRidTQvMgAvcmRidTQvMwAvcmRidTQvNAAvcmRidTUvMQAvcmRidTUvMgAvcmRidTUvMwAvcmRidTUvNAAvcmRidTUvNQAvcmRidTYvMQAvcmRidTYvMgAvcmRidTYvMwAvcmRidTYvNAAvcmRidTYvNQAvcmRidTYvNgAvcmRidTcvMQAvcmRidTcvMgAvcmRidTcvMwAvcmRidTcvNAAvcmRidTcvNQAvcmRidTcvNgAvcmRidTcvNwAvcmRidTgvMQAvcmRidTgvMgAvcmRidTgvMwAvcmRidTgvNAAvcmRidTgvNQAvcmRidTgvNgAvcmRidTgvNwAvcmRidTgvOAAvcmRidTkvMQAvcmRidTkvMgAvcmRidTkvMwAvcmRidTkvNAAvcmRidTkvNQAvcmRidTkvNgAvcmRidTkvNwAvcmRidTkvOAAvcmRidTkvOQAvcmRneTEwLzEAL3JkZ3kxMC8xMAAvcmRneTEwLzIAL3JkZ3kxMC8zAC9yZGd5MTAvNAAvcmRneTEwLzUAL3JkZ3kxMC82AC9yZGd5MTAvNwAvcmRneTEwLzgAL3JkZ3kxMC85AC9yZGd5MTEvMQAvcmRneTExLzEwAC9yZGd5MTEvMTEAL3JkZ3kxMS8yAC9yZGd5MTEvMwAvcmRneTExLzQAL3JkZ3kxMS81AC9yZGd5MTEvNgAvcmRneTExLzcAL3JkZ3kxMS84AC9yZGd5MTEvOQAvcmRneTMvMQAvcmRneTMvMgAvcmRneTMvMwAvcmRneTQvMQAvcmRneTQvMgAvcmRneTQvMwAvcmRneTQvNAAvcmRneTUvMQAvcmRneTUvMgAvcmRneTUvMwAvcmRneTUvNAAvcmRneTUvNQAvcmRneTYvMQAvcmRneTYvMgAvcmRneTYvMwAvcmRneTYvNAAvcmRneTYvNQAvcmRneTYvNgAvcmRneTcvMQAvcmRneTcvMgAvcmRneTcvMwAvcmRneTcvNAAvcmRneTcvNQAvcmRneTcvNgAvcmRneTcvNwAvcmRneTgvMQAvcmRneTgvMgAvcmRneTgvMwAvcmRneTgvNAAvcmRneTgvNQAvcmRneTgvNgAvcmRneTgvNwAvcmRneTgvOAAvcmRneTkvMQAvcmRneTkvMgAvcmRneTkvMwAvcmRneTkvNAAvcmRneTkvNQAvcmRneTkvNgAvcmRneTkvNwAvcmRneTkvOAAvcmRneTkvOQAvcmRwdTMvMQAvcmRwdTMvMgAvcmRwdTMvMwAvcmRwdTQvMQAvcmRwdTQvMgAvcmRwdTQvMwAvcmRwdTQvNAAvcmRwdTUvMQAvcmRwdTUvMgAvcmRwdTUvMwAvcmRwdTUvNAAvcmRwdTUvNQAvcmRwdTYvMQAvcmRwdTYvMgAvcmRwdTYvMwAvcmRwdTYvNAAvcmRwdTYvNQAvcmRwdTYvNgAvcmRwdTcvMQAvcmRwdTcvMgAvcmRwdTcvMwAvcmRwdTcvNAAvcmRwdTcvNQAvcmRwdTcvNgAvcmRwdTcvNwAvcmRwdTgvMQAvcmRwdTgvMgAvcmRwdTgvMwAvcmRwdTgvNAAvcmRwdTgvNQAvcmRwdTgvNgAvcmRwdTgvNwAvcmRwdTgvOAAvcmRwdTkvMQAvcmRwdTkvMgAvcmRwdTkvMwAvcmRwdTkvNAAvcmRwdTkvNQAvcmRwdTkvNgAvcmRwdTkvNwAvcmRwdTkvOAAvcmRwdTkvOQAvcmR5bGJ1MTAvMQAvcmR5bGJ1MTAvMTAAL3JkeWxidTEwLzIAL3JkeWxidTEwLzMAL3JkeWxidTEwLzQAL3JkeWxidTEwLzUAL3JkeWxidTEwLzYAL3JkeWxidTEwLzcAL3JkeWxidTEwLzgAL3JkeWxidTEwLzkAL3JkeWxidTExLzEAL3JkeWxidTExLzEwAC9yZHlsYnUxMS8xMQAvcmR5bGJ1MTEvMgAvcmR5bGJ1MTEvMwAvcmR5bGJ1MTEvNAAvcmR5bGJ1MTEvNQAvcmR5bGJ1MTEvNgAvcmR5bGJ1MTEvNwAvcmR5bGJ1MTEvOAAvcmR5bGJ1MTEvOQAvcmR5bGJ1My8xAC9yZHlsYnUzLzIAL3JkeWxidTMvMwAvcmR5bGJ1NC8xAC9yZHlsYnU0LzIAL3JkeWxidTQvMwAvcmR5bGJ1NC80AC9yZHlsYnU1LzEAL3JkeWxidTUvMgAvcmR5bGJ1NS8zAC9yZHlsYnU1LzQAL3JkeWxidTUvNQAvcmR5bGJ1Ni8xAC9yZHlsYnU2LzIAL3JkeWxidTYvMwAvcmR5bGJ1Ni80AC9yZHlsYnU2LzUAL3JkeWxidTYvNgAvcmR5bGJ1Ny8xAC9yZHlsYnU3LzIAL3JkeWxidTcvMwAvcmR5bGJ1Ny80AC9yZHlsYnU3LzUAL3JkeWxidTcvNgAvcmR5bGJ1Ny83AC9yZHlsYnU4LzEAL3JkeWxidTgvMgAvcmR5bGJ1OC8zAC9yZHlsYnU4LzQAL3JkeWxidTgvNQAvcmR5bGJ1OC82AC9yZHlsYnU4LzcAL3JkeWxidTgvOAAvcmR5bGJ1OS8xAC9yZHlsYnU5LzIAL3JkeWxidTkvMwAvcmR5bGJ1OS80AC9yZHlsYnU5LzUAL3JkeWxidTkvNgAvcmR5bGJ1OS83AC9yZHlsYnU5LzgAL3JkeWxidTkvOQAvcmR5bGduMTAvMQAvcmR5bGduMTAvMTAAL3JkeWxnbjEwLzIAL3JkeWxnbjEwLzMAL3JkeWxnbjEwLzQAL3JkeWxnbjEwLzUAL3JkeWxnbjEwLzYAL3JkeWxnbjEwLzcAL3JkeWxnbjEwLzgAL3JkeWxnbjEwLzkAL3JkeWxnbjExLzEAL3JkeWxnbjExLzEwAC9yZHlsZ24xMS8xMQAvcmR5bGduMTEvMgAvcmR5bGduMTEvMwAvcmR5bGduMTEvNAAvcmR5bGduMTEvNQAvcmR5bGduMTEvNgAvcmR5bGduMTEvNwAvcmR5bGduMTEvOAAvcmR5bGduMTEvOQAvcmR5bGduMy8xAC9yZHlsZ24zLzIAL3JkeWxnbjMvMwAvcmR5bGduNC8xAC9yZHlsZ240LzIAL3JkeWxnbjQvMwAvcmR5bGduNC80AC9yZHlsZ241LzEAL3JkeWxnbjUvMgAvcmR5bGduNS8zAC9yZHlsZ241LzQAL3JkeWxnbjUvNQAvcmR5bGduNi8xAC9yZHlsZ242LzIAL3JkeWxnbjYvMwAvcmR5bGduNi80AC9yZHlsZ242LzUAL3JkeWxnbjYvNgAvcmR5bGduNy8xAC9yZHlsZ243LzIAL3JkeWxnbjcvMwAvcmR5bGduNy80AC9yZHlsZ243LzUAL3JkeWxnbjcvNgAvcmR5bGduNy83AC9yZHlsZ244LzEAL3JkeWxnbjgvMgAvcmR5bGduOC8zAC9yZHlsZ244LzQAL3JkeWxnbjgvNQAvcmR5bGduOC82AC9yZHlsZ244LzcAL3JkeWxnbjgvOAAvcmR5bGduOS8xAC9yZHlsZ245LzIAL3JkeWxnbjkvMwAvcmR5bGduOS80AC9yZHlsZ245LzUAL3JkeWxnbjkvNgAvcmR5bGduOS83AC9yZHlsZ245LzgAL3JkeWxnbjkvOQAvcmVkczMvMQAvcmVkczMvMgAvcmVkczMvMwAvcmVkczQvMQAvcmVkczQvMgAvcmVkczQvMwAvcmVkczQvNAAvcmVkczUvMQAvcmVkczUvMgAvcmVkczUvMwAvcmVkczUvNAAvcmVkczUvNQAvcmVkczYvMQAvcmVkczYvMgAvcmVkczYvMwAvcmVkczYvNAAvcmVkczYvNQAvcmVkczYvNgAvcmVkczcvMQAvcmVkczcvMgAvcmVkczcvMwAvcmVkczcvNAAvcmVkczcvNQAvcmVkczcvNgAvcmVkczcvNwAvcmVkczgvMQAvcmVkczgvMgAvcmVkczgvMwAvcmVkczgvNAAvcmVkczgvNQAvcmVkczgvNgAvcmVkczgvNwAvcmVkczgvOAAvcmVkczkvMQAvcmVkczkvMgAvcmVkczkvMwAvcmVkczkvNAAvcmVkczkvNQAvcmVkczkvNgAvcmVkczkvNwAvcmVkczkvOAAvcmVkczkvOQAvc2V0MTMvMQAvc2V0MTMvMgAvc2V0MTMvMwAvc2V0MTQvMQAvc2V0MTQvMgAvc2V0MTQvMwAvc2V0MTQvNAAvc2V0MTUvMQAvc2V0MTUvMgAvc2V0MTUvMwAvc2V0MTUvNAAvc2V0MTUvNQAvc2V0MTYvMQAvc2V0MTYvMgAvc2V0MTYvMwAvc2V0MTYvNAAvc2V0MTYvNQAvc2V0MTYvNgAvc2V0MTcvMQAvc2V0MTcvMgAvc2V0MTcvMwAvc2V0MTcvNAAvc2V0MTcvNQAvc2V0MTcvNgAvc2V0MTcvNwAvc2V0MTgvMQAvc2V0MTgvMgAvc2V0MTgvMwAvc2V0MTgvNAAvc2V0MTgvNQAvc2V0MTgvNgAvc2V0MTgvNwAvc2V0MTgvOAAvc2V0MTkvMQAvc2V0MTkvMgAvc2V0MTkvMwAvc2V0MTkvNAAvc2V0MTkvNQAvc2V0MTkvNgAvc2V0MTkvNwAvc2V0MTkvOAAvc2V0MTkvOQAvc2V0MjMvMQAvc2V0MjMvMgAvc2V0MjMvMwAvc2V0MjQvMQAvc2V0MjQvMgAvc2V0MjQvMwAvc2V0MjQvNAAvc2V0MjUvMQAvc2V0MjUvMgAvc2V0MjUvMwAvc2V0MjUvNAAvc2V0MjUvNQAvc2V0MjYvMQAvc2V0MjYvMgAvc2V0MjYvMwAvc2V0MjYvNAAvc2V0MjYvNQAvc2V0MjYvNgAvc2V0MjcvMQAvc2V0MjcvMgAvc2V0MjcvMwAvc2V0MjcvNAAvc2V0MjcvNQAvc2V0MjcvNgAvc2V0MjcvNwAvc2V0MjgvMQAvc2V0MjgvMgAvc2V0MjgvMwAvc2V0MjgvNAAvc2V0MjgvNQAvc2V0MjgvNgAvc2V0MjgvNwAvc2V0MjgvOAAvc2V0MzEwLzEAL3NldDMxMC8xMAAvc2V0MzEwLzIAL3NldDMxMC8zAC9zZXQzMTAvNAAvc2V0MzEwLzUAL3NldDMxMC82AC9zZXQzMTAvNwAvc2V0MzEwLzgAL3NldDMxMC85AC9zZXQzMTEvMQAvc2V0MzExLzEwAC9zZXQzMTEvMTEAL3NldDMxMS8yAC9zZXQzMTEvMwAvc2V0MzExLzQAL3NldDMxMS81AC9zZXQzMTEvNgAvc2V0MzExLzcAL3NldDMxMS84AC9zZXQzMTEvOQAvc2V0MzEyLzEAL3NldDMxMi8xMAAvc2V0MzEyLzExAC9zZXQzMTIvMTIAL3NldDMxMi8yAC9zZXQzMTIvMwAvc2V0MzEyLzQAL3NldDMxMi81AC9zZXQzMTIvNgAvc2V0MzEyLzcAL3NldDMxMi84AC9zZXQzMTIvOQAvc2V0MzMvMQAvc2V0MzMvMgAvc2V0MzMvMwAvc2V0MzQvMQAvc2V0MzQvMgAvc2V0MzQvMwAvc2V0MzQvNAAvc2V0MzUvMQAvc2V0MzUvMgAvc2V0MzUvMwAvc2V0MzUvNAAvc2V0MzUvNQAvc2V0MzYvMQAvc2V0MzYvMgAvc2V0MzYvMwAvc2V0MzYvNAAvc2V0MzYvNQAvc2V0MzYvNgAvc2V0MzcvMQAvc2V0MzcvMgAvc2V0MzcvMwAvc2V0MzcvNAAvc2V0MzcvNQAvc2V0MzcvNgAvc2V0MzcvNwAvc2V0MzgvMQAvc2V0MzgvMgAvc2V0MzgvMwAvc2V0MzgvNAAvc2V0MzgvNQAvc2V0MzgvNgAvc2V0MzgvNwAvc2V0MzgvOAAvc2V0MzkvMQAvc2V0MzkvMgAvc2V0MzkvMwAvc2V0MzkvNAAvc2V0MzkvNQAvc2V0MzkvNgAvc2V0MzkvNwAvc2V0MzkvOAAvc2V0MzkvOQAvc3BlY3RyYWwxMC8xAC9zcGVjdHJhbDEwLzEwAC9zcGVjdHJhbDEwLzIAL3NwZWN0cmFsMTAvMwAvc3BlY3RyYWwxMC80AC9zcGVjdHJhbDEwLzUAL3NwZWN0cmFsMTAvNgAvc3BlY3RyYWwxMC83AC9zcGVjdHJhbDEwLzgAL3NwZWN0cmFsMTAvOQAvc3BlY3RyYWwxMS8xAC9zcGVjdHJhbDExLzEwAC9zcGVjdHJhbDExLzExAC9zcGVjdHJhbDExLzIAL3NwZWN0cmFsMTEvMwAvc3BlY3RyYWwxMS80AC9zcGVjdHJhbDExLzUAL3NwZWN0cmFsMTEvNgAvc3BlY3RyYWwxMS83AC9zcGVjdHJhbDExLzgAL3NwZWN0cmFsMTEvOQAvc3BlY3RyYWwzLzEAL3NwZWN0cmFsMy8yAC9zcGVjdHJhbDMvMwAvc3BlY3RyYWw0LzEAL3NwZWN0cmFsNC8yAC9zcGVjdHJhbDQvMwAvc3BlY3RyYWw0LzQAL3NwZWN0cmFsNS8xAC9zcGVjdHJhbDUvMgAvc3BlY3RyYWw1LzMAL3NwZWN0cmFsNS80AC9zcGVjdHJhbDUvNQAvc3BlY3RyYWw2LzEAL3NwZWN0cmFsNi8yAC9zcGVjdHJhbDYvMwAvc3BlY3RyYWw2LzQAL3NwZWN0cmFsNi81AC9zcGVjdHJhbDYvNgAvc3BlY3RyYWw3LzEAL3NwZWN0cmFsNy8yAC9zcGVjdHJhbDcvMwAvc3BlY3RyYWw3LzQAL3NwZWN0cmFsNy81AC9zcGVjdHJhbDcvNgAvc3BlY3RyYWw3LzcAL3NwZWN0cmFsOC8xAC9zcGVjdHJhbDgvMgAvc3BlY3RyYWw4LzMAL3NwZWN0cmFsOC80AC9zcGVjdHJhbDgvNQAvc3BlY3RyYWw4LzYAL3NwZWN0cmFsOC83AC9zcGVjdHJhbDgvOAAvc3BlY3RyYWw5LzEAL3NwZWN0cmFsOS8yAC9zcGVjdHJhbDkvMwAvc3BlY3RyYWw5LzQAL3NwZWN0cmFsOS81AC9zcGVjdHJhbDkvNgAvc3BlY3RyYWw5LzcAL3NwZWN0cmFsOS84AC9zcGVjdHJhbDkvOQAvc3ZnL2FsaWNlYmx1ZQAvc3ZnL2FudGlxdWV3aGl0ZQAvc3ZnL2FxdWEAL3N2Zy9hcXVhbWFyaW5lAC9zdmcvYXp1cmUAL3N2Zy9iZWlnZQAvc3ZnL2Jpc3F1ZQAvc3ZnL2JsYWNrAC9zdmcvYmxhbmNoZWRhbG1vbmQAL3N2Zy9ibHVlAC9zdmcvYmx1ZXZpb2xldAAvc3ZnL2Jyb3duAC9zdmcvYnVybHl3b29kAC9zdmcvY2FkZXRibHVlAC9zdmcvY2hhcnRyZXVzZQAvc3ZnL2Nob2NvbGF0ZQAvc3ZnL2NvcmFsAC9zdmcvY29ybmZsb3dlcmJsdWUAL3N2Zy9jb3Juc2lsawAvc3ZnL2NyaW1zb24AL3N2Zy9jeWFuAC9zdmcvZGFya2JsdWUAL3N2Zy9kYXJrY3lhbgAvc3ZnL2Rhcmtnb2xkZW5yb2QAL3N2Zy9kYXJrZ3JheQAvc3ZnL2RhcmtncmVlbgAvc3ZnL2RhcmtncmV5AC9zdmcvZGFya2toYWtpAC9zdmcvZGFya21hZ2VudGEAL3N2Zy9kYXJrb2xpdmVncmVlbgAvc3ZnL2RhcmtvcmFuZ2UAL3N2Zy9kYXJrb3JjaGlkAC9zdmcvZGFya3JlZAAvc3ZnL2RhcmtzYWxtb24AL3N2Zy9kYXJrc2VhZ3JlZW4AL3N2Zy9kYXJrc2xhdGVibHVlAC9zdmcvZGFya3NsYXRlZ3JheQAvc3ZnL2RhcmtzbGF0ZWdyZXkAL3N2Zy9kYXJrdHVycXVvaXNlAC9zdmcvZGFya3Zpb2xldAAvc3ZnL2RlZXBwaW5rAC9zdmcvZGVlcHNreWJsdWUAL3N2Zy9kaW1ncmF5AC9zdmcvZGltZ3JleQAvc3ZnL2RvZGdlcmJsdWUAL3N2Zy9maXJlYnJpY2sAL3N2Zy9mbG9yYWx3aGl0ZQAvc3ZnL2ZvcmVzdGdyZWVuAC9zdmcvZnVjaHNpYQAvc3ZnL2dhaW5zYm9ybwAvc3ZnL2dob3N0d2hpdGUAL3N2Zy9nb2xkAC9zdmcvZ29sZGVucm9kAC9zdmcvZ3JheQAvc3ZnL2dyZWVuAC9zdmcvZ3JlZW55ZWxsb3cAL3N2Zy9ncmV5AC9zdmcvaG9uZXlkZXcAL3N2Zy9ob3RwaW5rAC9zdmcvaW5kaWFucmVkAC9zdmcvaW5kaWdvAC9zdmcvaXZvcnkAL3N2Zy9raGFraQAvc3ZnL2xhdmVuZGVyAC9zdmcvbGF2ZW5kZXJibHVzaAAvc3ZnL2xhd25ncmVlbgAvc3ZnL2xlbW9uY2hpZmZvbgAvc3ZnL2xpZ2h0Ymx1ZQAvc3ZnL2xpZ2h0Y29yYWwAL3N2Zy9saWdodGN5YW4AL3N2Zy9saWdodGdvbGRlbnJvZHllbGxvdwAvc3ZnL2xpZ2h0Z3JheQAvc3ZnL2xpZ2h0Z3JlZW4AL3N2Zy9saWdodGdyZXkAL3N2Zy9saWdodHBpbmsAL3N2Zy9saWdodHNhbG1vbgAvc3ZnL2xpZ2h0c2VhZ3JlZW4AL3N2Zy9saWdodHNreWJsdWUAL3N2Zy9saWdodHNsYXRlZ3JheQAvc3ZnL2xpZ2h0c2xhdGVncmV5AC9zdmcvbGlnaHRzdGVlbGJsdWUAL3N2Zy9saWdodHllbGxvdwAvc3ZnL2xpbWUAL3N2Zy9saW1lZ3JlZW4AL3N2Zy9saW5lbgAvc3ZnL21hZ2VudGEAL3N2Zy9tYXJvb24AL3N2Zy9tZWRpdW1hcXVhbWFyaW5lAC9zdmcvbWVkaXVtYmx1ZQAvc3ZnL21lZGl1bW9yY2hpZAAvc3ZnL21lZGl1bXB1cnBsZQAvc3ZnL21lZGl1bXNlYWdyZWVuAC9zdmcvbWVkaXVtc2xhdGVibHVlAC9zdmcvbWVkaXVtc3ByaW5nZ3JlZW4AL3N2Zy9tZWRpdW10dXJxdW9pc2UAL3N2Zy9tZWRpdW12aW9sZXRyZWQAL3N2Zy9taWRuaWdodGJsdWUAL3N2Zy9taW50Y3JlYW0AL3N2Zy9taXN0eXJvc2UAL3N2Zy9tb2NjYXNpbgAvc3ZnL25hdmFqb3doaXRlAC9zdmcvbmF2eQAvc3ZnL29sZGxhY2UAL3N2Zy9vbGl2ZQAvc3ZnL29saXZlZHJhYgAvc3ZnL29yYW5nZQAvc3ZnL29yYW5nZXJlZAAvc3ZnL29yY2hpZAAvc3ZnL3BhbGVnb2xkZW5yb2QAL3N2Zy9wYWxlZ3JlZW4AL3N2Zy9wYWxldHVycXVvaXNlAC9zdmcvcGFsZXZpb2xldHJlZAAvc3ZnL3BhcGF5YXdoaXAAL3N2Zy9wZWFjaHB1ZmYAL3N2Zy9wZXJ1AC9zdmcvcGluawAvc3ZnL3BsdW0AL3N2Zy9wb3dkZXJibHVlAC9zdmcvcHVycGxlAC9zdmcvcmVkAC9zdmcvcm9zeWJyb3duAC9zdmcvcm95YWxibHVlAC9zdmcvc2FkZGxlYnJvd24AL3N2Zy9zYWxtb24AL3N2Zy9zYW5keWJyb3duAC9zdmcvc2VhZ3JlZW4AL3N2Zy9zZWFzaGVsbAAvc3ZnL3NpZW5uYQAvc3ZnL3NpbHZlcgAvc3ZnL3NreWJsdWUAL3N2Zy9zbGF0ZWJsdWUAL3N2Zy9zbGF0ZWdyYXkAL3N2Zy9zbGF0ZWdyZXkAL3N2Zy9zbm93AC9zdmcvc3ByaW5nZ3JlZW4AL3N2Zy9zdGVlbGJsdWUAL3N2Zy90YW4AL3N2Zy90ZWFsAC9zdmcvdGhpc3RsZQAvc3ZnL3RvbWF0bwAvc3ZnL3R1cnF1b2lzZQAvc3ZnL3Zpb2xldAAvc3ZnL3doZWF0AC9zdmcvd2hpdGUAL3N2Zy93aGl0ZXNtb2tlAC9zdmcveWVsbG93AC9zdmcveWVsbG93Z3JlZW4AL3lsZ24zLzEAL3lsZ24zLzIAL3lsZ24zLzMAL3lsZ240LzEAL3lsZ240LzIAL3lsZ240LzMAL3lsZ240LzQAL3lsZ241LzEAL3lsZ241LzIAL3lsZ241LzMAL3lsZ241LzQAL3lsZ241LzUAL3lsZ242LzEAL3lsZ242LzIAL3lsZ242LzMAL3lsZ242LzQAL3lsZ242LzUAL3lsZ242LzYAL3lsZ243LzEAL3lsZ243LzIAL3lsZ243LzMAL3lsZ243LzQAL3lsZ243LzUAL3lsZ243LzYAL3lsZ243LzcAL3lsZ244LzEAL3lsZ244LzIAL3lsZ244LzMAL3lsZ244LzQAL3lsZ244LzUAL3lsZ244LzYAL3lsZ244LzcAL3lsZ244LzgAL3lsZ245LzEAL3lsZ245LzIAL3lsZ245LzMAL3lsZ245LzQAL3lsZ245LzUAL3lsZ245LzYAL3lsZ245LzcAL3lsZ245LzgAL3lsZ245LzkAL3lsZ25idTMvMQAveWxnbmJ1My8yAC95bGduYnUzLzMAL3lsZ25idTQvMQAveWxnbmJ1NC8yAC95bGduYnU0LzMAL3lsZ25idTQvNAAveWxnbmJ1NS8xAC95bGduYnU1LzIAL3lsZ25idTUvMwAveWxnbmJ1NS80AC95bGduYnU1LzUAL3lsZ25idTYvMQAveWxnbmJ1Ni8yAC95bGduYnU2LzMAL3lsZ25idTYvNAAveWxnbmJ1Ni81AC95bGduYnU2LzYAL3lsZ25idTcvMQAveWxnbmJ1Ny8yAC95bGduYnU3LzMAL3lsZ25idTcvNAAveWxnbmJ1Ny81AC95bGduYnU3LzYAL3lsZ25idTcvNwAveWxnbmJ1OC8xAC95bGduYnU4LzIAL3lsZ25idTgvMwAveWxnbmJ1OC80AC95bGduYnU4LzUAL3lsZ25idTgvNgAveWxnbmJ1OC83AC95bGduYnU4LzgAL3lsZ25idTkvMQAveWxnbmJ1OS8yAC95bGduYnU5LzMAL3lsZ25idTkvNAAveWxnbmJ1OS81AC95bGduYnU5LzYAL3lsZ25idTkvNwAveWxnbmJ1OS84AC95bGduYnU5LzkAL3lsb3JicjMvMQAveWxvcmJyMy8yAC95bG9yYnIzLzMAL3lsb3JicjQvMQAveWxvcmJyNC8yAC95bG9yYnI0LzMAL3lsb3JicjQvNAAveWxvcmJyNS8xAC95bG9yYnI1LzIAL3lsb3JicjUvMwAveWxvcmJyNS80AC95bG9yYnI1LzUAL3lsb3JicjYvMQAveWxvcmJyNi8yAC95bG9yYnI2LzMAL3lsb3JicjYvNAAveWxvcmJyNi81AC95bG9yYnI2LzYAL3lsb3JicjcvMQAveWxvcmJyNy8yAC95bG9yYnI3LzMAL3lsb3JicjcvNAAveWxvcmJyNy81AC95bG9yYnI3LzYAL3lsb3JicjcvNwAveWxvcmJyOC8xAC95bG9yYnI4LzIAL3lsb3JicjgvMwAveWxvcmJyOC80AC95bG9yYnI4LzUAL3lsb3JicjgvNgAveWxvcmJyOC83AC95bG9yYnI4LzgAL3lsb3JicjkvMQAveWxvcmJyOS8yAC95bG9yYnI5LzMAL3lsb3JicjkvNAAveWxvcmJyOS81AC95bG9yYnI5LzYAL3lsb3JicjkvNwAveWxvcmJyOS84AC95bG9yYnI5LzkAL3lsb3JyZDMvMQAveWxvcnJkMy8yAC95bG9ycmQzLzMAL3lsb3JyZDQvMQAveWxvcnJkNC8yAC95bG9ycmQ0LzMAL3lsb3JyZDQvNAAveWxvcnJkNS8xAC95bG9ycmQ1LzIAL3lsb3JyZDUvMwAveWxvcnJkNS80AC95bG9ycmQ1LzUAL3lsb3JyZDYvMQAveWxvcnJkNi8yAC95bG9ycmQ2LzMAL3lsb3JyZDYvNAAveWxvcnJkNi81AC95bG9ycmQ2LzYAL3lsb3JyZDcvMQAveWxvcnJkNy8yAC95bG9ycmQ3LzMAL3lsb3JyZDcvNAAveWxvcnJkNy81AC95bG9ycmQ3LzYAL3lsb3JyZDcvNwAveWxvcnJkOC8xAC95bG9ycmQ4LzIAL3lsb3JyZDgvMwAveWxvcnJkOC80AC95bG9ycmQ4LzUAL3lsb3JyZDgvNgAveWxvcnJkOC83AC95bG9ycmQ4LzgAL3lsb3JyZDkvMQAveWxvcnJkOS8yAC95bG9ycmQ5LzMAL3lsb3JyZDkvNAAveWxvcnJkOS81AC95bG9ycmQ5LzYAL3lsb3JyZDkvNwAveWxvcnJkOS84AC95bG9ycmQ5LzkAYWxpY2VibHVlAGFudGlxdWV3aGl0ZQBhbnRpcXVld2hpdGUxAGFudGlxdWV3aGl0ZTIAYW50aXF1ZXdoaXRlMwBhbnRpcXVld2hpdGU0AGFxdWFtYXJpbmUAYXF1YW1hcmluZTEAYXF1YW1hcmluZTIAYXF1YW1hcmluZTMAYXF1YW1hcmluZTQAYXp1cmUAYXp1cmUxAGF6dXJlMgBhenVyZTMAYXp1cmU0AGJlaWdlAGJpc3F1ZQBiaXNxdWUxAGJpc3F1ZTIAYmlzcXVlMwBiaXNxdWU0AGJsYW5jaGVkYWxtb25kAGJsdWUAYmx1ZTEAYmx1ZTIAYmx1ZTMAYmx1ZTQAYmx1ZXZpb2xldABicm93bgBicm93bjEAYnJvd24yAGJyb3duMwBicm93bjQAYnVybHl3b29kAGJ1cmx5d29vZDEAYnVybHl3b29kMgBidXJseXdvb2QzAGJ1cmx5d29vZDQAY2FkZXRibHVlAGNhZGV0Ymx1ZTEAY2FkZXRibHVlMgBjYWRldGJsdWUzAGNhZGV0Ymx1ZTQAY2hhcnRyZXVzZQBjaGFydHJldXNlMQBjaGFydHJldXNlMgBjaGFydHJldXNlMwBjaGFydHJldXNlNABjaG9jb2xhdGUAY2hvY29sYXRlMQBjaG9jb2xhdGUyAGNob2NvbGF0ZTMAY2hvY29sYXRlNABjb3JhbABjb3JhbDEAY29yYWwyAGNvcmFsMwBjb3JhbDQAY29ybmZsb3dlcmJsdWUAY29ybnNpbGsAY29ybnNpbGsxAGNvcm5zaWxrMgBjb3Juc2lsazMAY29ybnNpbGs0AGNyaW1zb24AY3lhbgBjeWFuMQBjeWFuMgBjeWFuMwBjeWFuNABkYXJrZ29sZGVucm9kAGRhcmtnb2xkZW5yb2QxAGRhcmtnb2xkZW5yb2QyAGRhcmtnb2xkZW5yb2QzAGRhcmtnb2xkZW5yb2Q0AGRhcmtncmVlbgBkYXJra2hha2kAZGFya29saXZlZ3JlZW4AZGFya29saXZlZ3JlZW4xAGRhcmtvbGl2ZWdyZWVuMgBkYXJrb2xpdmVncmVlbjMAZGFya29saXZlZ3JlZW40AGRhcmtvcmFuZ2UAZGFya29yYW5nZTEAZGFya29yYW5nZTIAZGFya29yYW5nZTMAZGFya29yYW5nZTQAZGFya29yY2hpZABkYXJrb3JjaGlkMQBkYXJrb3JjaGlkMgBkYXJrb3JjaGlkMwBkYXJrb3JjaGlkNABkYXJrc2FsbW9uAGRhcmtzZWFncmVlbgBkYXJrc2VhZ3JlZW4xAGRhcmtzZWFncmVlbjIAZGFya3NlYWdyZWVuMwBkYXJrc2VhZ3JlZW40AGRhcmtzbGF0ZWJsdWUAZGFya3NsYXRlZ3JheQBkYXJrc2xhdGVncmF5MQBkYXJrc2xhdGVncmF5MgBkYXJrc2xhdGVncmF5MwBkYXJrc2xhdGVncmF5NABkYXJrc2xhdGVncmV5AGRhcmt0dXJxdW9pc2UAZGFya3Zpb2xldABkZWVwcGluawBkZWVwcGluazEAZGVlcHBpbmsyAGRlZXBwaW5rMwBkZWVwcGluazQAZGVlcHNreWJsdWUAZGVlcHNreWJsdWUxAGRlZXBza3libHVlMgBkZWVwc2t5Ymx1ZTMAZGVlcHNreWJsdWU0AGRpbWdyYXkAZGltZ3JleQBkb2RnZXJibHVlAGRvZGdlcmJsdWUxAGRvZGdlcmJsdWUyAGRvZGdlcmJsdWUzAGRvZGdlcmJsdWU0AGZpcmVicmljawBmaXJlYnJpY2sxAGZpcmVicmljazIAZmlyZWJyaWNrMwBmaXJlYnJpY2s0AGZsb3JhbHdoaXRlAGZvcmVzdGdyZWVuAGdhaW5zYm9ybwBnaG9zdHdoaXRlAGdvbGQAZ29sZDEAZ29sZDIAZ29sZDMAZ29sZDQAZ29sZGVucm9kAGdvbGRlbnJvZDEAZ29sZGVucm9kMgBnb2xkZW5yb2QzAGdvbGRlbnJvZDQAZ3JheQBncmF5MABncmF5MQBncmF5MTAAZ3JheTEwMABncmF5MTEAZ3JheTEyAGdyYXkxMwBncmF5MTQAZ3JheTE1AGdyYXkxNgBncmF5MTcAZ3JheTE4AGdyYXkxOQBncmF5MgBncmF5MjAAZ3JheTIxAGdyYXkyMgBncmF5MjMAZ3JheTI0AGdyYXkyNQBncmF5MjYAZ3JheTI3AGdyYXkyOABncmF5MjkAZ3JheTMAZ3JheTMwAGdyYXkzMQBncmF5MzIAZ3JheTMzAGdyYXkzNABncmF5MzUAZ3JheTM2AGdyYXkzNwBncmF5MzgAZ3JheTM5AGdyYXk0AGdyYXk0MABncmF5NDEAZ3JheTQyAGdyYXk0MwBncmF5NDQAZ3JheTQ1AGdyYXk0NgBncmF5NDcAZ3JheTQ4AGdyYXk0OQBncmF5NQBncmF5NTAAZ3JheTUxAGdyYXk1MgBncmF5NTMAZ3JheTU0AGdyYXk1NQBncmF5NTYAZ3JheTU3AGdyYXk1OABncmF5NTkAZ3JheTYAZ3JheTYwAGdyYXk2MQBncmF5NjIAZ3JheTYzAGdyYXk2NABncmF5NjUAZ3JheTY2AGdyYXk2NwBncmF5NjgAZ3JheTY5AGdyYXk3AGdyYXk3MABncmF5NzEAZ3JheTcyAGdyYXk3MwBncmF5NzQAZ3JheTc1AGdyYXk3NgBncmF5NzcAZ3JheTc4AGdyYXk3OQBncmF5OABncmF5ODAAZ3JheTgxAGdyYXk4MgBncmF5ODMAZ3JheTg0AGdyYXk4NQBncmF5ODYAZ3JheTg3AGdyYXk4OABncmF5ODkAZ3JheTkAZ3JheTkwAGdyYXk5MQBncmF5OTIAZ3JheTkzAGdyYXk5NABncmF5OTUAZ3JheTk2AGdyYXk5NwBncmF5OTgAZ3JheTk5AGdyZWVuAGdyZWVuMQBncmVlbjIAZ3JlZW4zAGdyZWVuNABncmVlbnllbGxvdwBncmV5AGdyZXkwAGdyZXkxAGdyZXkxMABncmV5MTAwAGdyZXkxMQBncmV5MTIAZ3JleTEzAGdyZXkxNABncmV5MTUAZ3JleTE2AGdyZXkxNwBncmV5MTgAZ3JleTE5AGdyZXkyAGdyZXkyMABncmV5MjEAZ3JleTIyAGdyZXkyMwBncmV5MjQAZ3JleTI1AGdyZXkyNgBncmV5MjcAZ3JleTI4AGdyZXkyOQBncmV5MwBncmV5MzAAZ3JleTMxAGdyZXkzMgBncmV5MzMAZ3JleTM0AGdyZXkzNQBncmV5MzYAZ3JleTM3AGdyZXkzOABncmV5MzkAZ3JleTQAZ3JleTQwAGdyZXk0MQBncmV5NDIAZ3JleTQzAGdyZXk0NABncmV5NDUAZ3JleTQ2AGdyZXk0NwBncmV5NDgAZ3JleTQ5AGdyZXk1AGdyZXk1MABncmV5NTEAZ3JleTUyAGdyZXk1MwBncmV5NTQAZ3JleTU1AGdyZXk1NgBncmV5NTcAZ3JleTU4AGdyZXk1OQBncmV5NgBncmV5NjAAZ3JleTYxAGdyZXk2MgBncmV5NjMAZ3JleTY0AGdyZXk2NQBncmV5NjYAZ3JleTY3AGdyZXk2OABncmV5NjkAZ3JleTcAZ3JleTcwAGdyZXk3MQBncmV5NzIAZ3JleTczAGdyZXk3NABncmV5NzUAZ3JleTc2AGdyZXk3NwBncmV5NzgAZ3JleTc5AGdyZXk4AGdyZXk4MABncmV5ODEAZ3JleTgyAGdyZXk4MwBncmV5ODQAZ3JleTg1AGdyZXk4NgBncmV5ODcAZ3JleTg4AGdyZXk4OQBncmV5OQBncmV5OTAAZ3JleTkxAGdyZXk5MgBncmV5OTMAZ3JleTk0AGdyZXk5NQBncmV5OTYAZ3JleTk3AGdyZXk5OABncmV5OTkAaG9uZXlkZXcAaG9uZXlkZXcxAGhvbmV5ZGV3MgBob25leWRldzMAaG9uZXlkZXc0AGhvdHBpbmsAaG90cGluazEAaG90cGluazIAaG90cGluazMAaG90cGluazQAaW5kaWFucmVkAGluZGlhbnJlZDEAaW5kaWFucmVkMgBpbmRpYW5yZWQzAGluZGlhbnJlZDQAaW5kaWdvAGludmlzAGl2b3J5AGl2b3J5MQBpdm9yeTIAaXZvcnkzAGl2b3J5NABraGFraQBraGFraTEAa2hha2kyAGtoYWtpMwBraGFraTQAbGF2ZW5kZXIAbGF2ZW5kZXJibHVzaABsYXZlbmRlcmJsdXNoMQBsYXZlbmRlcmJsdXNoMgBsYXZlbmRlcmJsdXNoMwBsYXZlbmRlcmJsdXNoNABsYXduZ3JlZW4AbGVtb25jaGlmZm9uAGxlbW9uY2hpZmZvbjEAbGVtb25jaGlmZm9uMgBsZW1vbmNoaWZmb24zAGxlbW9uY2hpZmZvbjQAbGlnaHRibHVlAGxpZ2h0Ymx1ZTEAbGlnaHRibHVlMgBsaWdodGJsdWUzAGxpZ2h0Ymx1ZTQAbGlnaHRjb3JhbABsaWdodGN5YW4AbGlnaHRjeWFuMQBsaWdodGN5YW4yAGxpZ2h0Y3lhbjMAbGlnaHRjeWFuNABsaWdodGdvbGRlbnJvZABsaWdodGdvbGRlbnJvZDEAbGlnaHRnb2xkZW5yb2QyAGxpZ2h0Z29sZGVucm9kMwBsaWdodGdvbGRlbnJvZDQAbGlnaHRnb2xkZW5yb2R5ZWxsb3cAbGlnaHRncmF5AGxpZ2h0Z3JleQBsaWdodHBpbmsAbGlnaHRwaW5rMQBsaWdodHBpbmsyAGxpZ2h0cGluazMAbGlnaHRwaW5rNABsaWdodHNhbG1vbgBsaWdodHNhbG1vbjEAbGlnaHRzYWxtb24yAGxpZ2h0c2FsbW9uMwBsaWdodHNhbG1vbjQAbGlnaHRzZWFncmVlbgBsaWdodHNreWJsdWUAbGlnaHRza3libHVlMQBsaWdodHNreWJsdWUyAGxpZ2h0c2t5Ymx1ZTMAbGlnaHRza3libHVlNABsaWdodHNsYXRlYmx1ZQBsaWdodHNsYXRlZ3JheQBsaWdodHNsYXRlZ3JleQBsaWdodHN0ZWVsYmx1ZQBsaWdodHN0ZWVsYmx1ZTEAbGlnaHRzdGVlbGJsdWUyAGxpZ2h0c3RlZWxibHVlMwBsaWdodHN0ZWVsYmx1ZTQAbGlnaHR5ZWxsb3cAbGlnaHR5ZWxsb3cxAGxpZ2h0eWVsbG93MgBsaWdodHllbGxvdzMAbGlnaHR5ZWxsb3c0AGxpbWVncmVlbgBsaW5lbgBtYWdlbnRhAG1hZ2VudGExAG1hZ2VudGEyAG1hZ2VudGEzAG1hZ2VudGE0AG1hcm9vbgBtYXJvb24xAG1hcm9vbjIAbWFyb29uMwBtYXJvb240AG1lZGl1bWFxdWFtYXJpbmUAbWVkaXVtYmx1ZQBtZWRpdW1vcmNoaWQAbWVkaXVtb3JjaGlkMQBtZWRpdW1vcmNoaWQyAG1lZGl1bW9yY2hpZDMAbWVkaXVtb3JjaGlkNABtZWRpdW1wdXJwbGUAbWVkaXVtcHVycGxlMQBtZWRpdW1wdXJwbGUyAG1lZGl1bXB1cnBsZTMAbWVkaXVtcHVycGxlNABtZWRpdW1zZWFncmVlbgBtZWRpdW1zbGF0ZWJsdWUAbWVkaXVtc3ByaW5nZ3JlZW4AbWVkaXVtdHVycXVvaXNlAG1lZGl1bXZpb2xldHJlZABtaWRuaWdodGJsdWUAbWludGNyZWFtAG1pc3R5cm9zZQBtaXN0eXJvc2UxAG1pc3R5cm9zZTIAbWlzdHlyb3NlMwBtaXN0eXJvc2U0AG1vY2Nhc2luAG5hdmFqb3doaXRlAG5hdmFqb3doaXRlMQBuYXZham93aGl0ZTIAbmF2YWpvd2hpdGUzAG5hdmFqb3doaXRlNABuYXZ5AG5hdnlibHVlAG5vbmUAb2xkbGFjZQBvbGl2ZWRyYWIAb2xpdmVkcmFiMQBvbGl2ZWRyYWIyAG9saXZlZHJhYjMAb2xpdmVkcmFiNABvcmFuZ2UAb3JhbmdlMQBvcmFuZ2UyAG9yYW5nZTMAb3JhbmdlNABvcmFuZ2VyZWQAb3JhbmdlcmVkMQBvcmFuZ2VyZWQyAG9yYW5nZXJlZDMAb3JhbmdlcmVkNABvcmNoaWQAb3JjaGlkMQBvcmNoaWQyAG9yY2hpZDMAb3JjaGlkNABwYWxlZ29sZGVucm9kAHBhbGVncmVlbgBwYWxlZ3JlZW4xAHBhbGVncmVlbjIAcGFsZWdyZWVuMwBwYWxlZ3JlZW40AHBhbGV0dXJxdW9pc2UAcGFsZXR1cnF1b2lzZTEAcGFsZXR1cnF1b2lzZTIAcGFsZXR1cnF1b2lzZTMAcGFsZXR1cnF1b2lzZTQAcGFsZXZpb2xldHJlZABwYWxldmlvbGV0cmVkMQBwYWxldmlvbGV0cmVkMgBwYWxldmlvbGV0cmVkMwBwYWxldmlvbGV0cmVkNABwYXBheWF3aGlwAHBlYWNocHVmZgBwZWFjaHB1ZmYxAHBlYWNocHVmZjIAcGVhY2hwdWZmMwBwZWFjaHB1ZmY0AHBlcnUAcGluawBwaW5rMQBwaW5rMgBwaW5rMwBwaW5rNABwbHVtAHBsdW0xAHBsdW0yAHBsdW0zAHBsdW00AHBvd2RlcmJsdWUAcHVycGxlAHB1cnBsZTEAcHVycGxlMgBwdXJwbGUzAHB1cnBsZTQAcmVkAHJlZDEAcmVkMgByZWQzAHJlZDQAcm9zeWJyb3duAHJvc3licm93bjEAcm9zeWJyb3duMgByb3N5YnJvd24zAHJvc3licm93bjQAcm95YWxibHVlAHJveWFsYmx1ZTEAcm95YWxibHVlMgByb3lhbGJsdWUzAHJveWFsYmx1ZTQAc2FkZGxlYnJvd24Ac2FsbW9uAHNhbG1vbjEAc2FsbW9uMgBzYWxtb24zAHNhbG1vbjQAc2FuZHlicm93bgBzZWFncmVlbgBzZWFncmVlbjEAc2VhZ3JlZW4yAHNlYWdyZWVuMwBzZWFncmVlbjQAc2Vhc2hlbGwAc2Vhc2hlbGwxAHNlYXNoZWxsMgBzZWFzaGVsbDMAc2Vhc2hlbGw0AHNpZW5uYQBzaWVubmExAHNpZW5uYTIAc2llbm5hMwBzaWVubmE0AHNreWJsdWUAc2t5Ymx1ZTEAc2t5Ymx1ZTIAc2t5Ymx1ZTMAc2t5Ymx1ZTQAc2xhdGVibHVlAHNsYXRlYmx1ZTEAc2xhdGVibHVlMgBzbGF0ZWJsdWUzAHNsYXRlYmx1ZTQAc2xhdGVncmF5AHNsYXRlZ3JheTEAc2xhdGVncmF5MgBzbGF0ZWdyYXkzAHNsYXRlZ3JheTQAc2xhdGVncmV5AHNub3cAc25vdzEAc25vdzIAc25vdzMAc25vdzQAc3ByaW5nZ3JlZW4Ac3ByaW5nZ3JlZW4xAHNwcmluZ2dyZWVuMgBzcHJpbmdncmVlbjMAc3ByaW5nZ3JlZW40AHN0ZWVsYmx1ZQBzdGVlbGJsdWUxAHN0ZWVsYmx1ZTIAc3RlZWxibHVlMwBzdGVlbGJsdWU0AHRhbgB0YW4xAHRhbjIAdGFuMwB0YW40AHRoaXN0bGUAdGhpc3RsZTEAdGhpc3RsZTIAdGhpc3RsZTMAdGhpc3RsZTQAdG9tYXRvAHRvbWF0bzEAdG9tYXRvMgB0b21hdG8zAHRvbWF0bzQAdHVycXVvaXNlAHR1cnF1b2lzZTEAdHVycXVvaXNlMgB0dXJxdW9pc2UzAHR1cnF1b2lzZTQAdmlvbGV0AHZpb2xldHJlZAB2aW9sZXRyZWQxAHZpb2xldHJlZDIAdmlvbGV0cmVkMwB2aW9sZXRyZWQ0AHdoZWF0AHdoZWF0MQB3aGVhdDIAd2hlYXQzAHdoZWF0NAB3aGl0ZQB3aGl0ZXNtb2tlAHllbGxvdwB5ZWxsb3cxAHllbGxvdzIAeWVsbG93MwB5ZWxsb3c0AHllbGxvd2dyZWVuAGxhY2sAaGl0ZQBpZ2h0Z3JleQBYMTEvAC8lcy8lcwBpbWFnZXNjYWxlAGZhbHNlAGJsYWNrAGRvdHRlZABkYXNoZWQAY3AtPnNyYwBodG1sdGFibGUuYwBlbWl0X2h0bWxfaW1nAGNwLT5zcmNbMF0AdHJhbnNwYXJlbnQAXyVkACVkADEAMgAzADQANQA2ADcAOAA5ADEwADExADEyADEzADE0ADE1ADE2ADE3ADE4ADE5ADIwAEFnbm9kZWluZm9fdABBZ2VkZ2VpbmZvX3QAcm93ZwBjb2xnAEFncmFwaGluZm9fdAA8VEFCTEU+AGRlbHggPj0gMABwb3NfaHRtbF90YmwAZGVseSA+PSAwAHRhYmxlIHNpemUgdG9vIHNtYWxsIGZvciBjb250ZW50CgBmaXhlZCB0YWJsZSBzaXplIHdpdGggdW5zcGVjaWZpZWQgd2lkdGggb3IgaGVpZ2h0CgBjZWxsIHNpemUgdG9vIHNtYWxsIGZvciBjb250ZW50CgBmaXhlZCBjZWxsIHNpemUgd2l0aCB1bnNwZWNpZmllZCB3aWR0aCBvciBoZWlnaHQKAE5vIG9yIGltcHJvcGVyIGltYWdlIGZpbGU9IiVzIgoAcGVuY29sb3IAY29sb3IALT4ALS0AZlBRLmMAUFFjaGVjawBIZWFwIG92ZXJmbG93CgAlIVBTLUFkb2JlLTIuMAovbm9kZSB7CiAgL1kgZXhjaCBkZWYKICAvWCBleGNoIGRlZgogIC95IGV4Y2ggZGVmCiAgL3ggZXhjaCBkZWYKICBuZXdwYXRoCiAgeCB5IG1vdmV0bwogIHggWSBsaW5ldG8KICBYIFkgbGluZXRvCiAgWCB5IGxpbmV0bwogIGNsb3NlcGF0aCBmaWxsCn0gZGVmCi9jZWxsIHsKICAvWSBleGNoIGRlZgogIC9YIGV4Y2ggZGVmCiAgL3kgZXhjaCBkZWYKICAveCBleGNoIGRlZgogIG5ld3BhdGgKICB4IHkgbW92ZXRvCiAgeCBZIGxpbmV0bwogIFggWSBsaW5ldG8KICBYIHkgbGluZXRvCiAgY2xvc2VwYXRoIHN0cm9rZQp9IGRlZgoAc2hvd3BhZ2UKAGZhaWxlZCBhdCBub2RlICVkWzBdCgBucC0+Y2VsbHNbMF0AbWF6ZS5jAGNoa1NncmFwaABmYWlsZWQgYXQgbm9kZSAlZFsxXQoAbnAtPmNlbGxzWzFdAGRpdGVtcwBmaW5kU1ZlcnQAJSUlJVBhZ2U6IDEgMQolJSUlUGFnZUJvdW5kaW5nQm94OiAlZCAlZCAlZCAlZAoAJWYgJWYgdHJhbnNsYXRlCgAwIDAgMSBzZXRyZ2Jjb2xvcgoAJWYgJWYgJWYgJWYgbm9kZQoAMCAwIDAgc2V0cmdiY29sb3IKACVmICVmICVmICVmIGNlbGwKADEgMCAwIHNldHJnYmNvbG9yCgB1bmV4cGVjdGVkIGNhc2UgaW4gbG9jYXRlX2VuZHBvaW50CgAwAHRyYXBlem9pZC5jAGxvY2F0ZV9lbmRwb2ludABhZGRfc2VnbWVudDogZXJyb3IKAG5ld25vZGU6IFF1ZXJ5LXRhYmxlIG92ZXJmbG93CgBuZXdub2RlAG5ld3RyYXA6IFRyYXBlem9pZC10YWJsZSBvdmVyZmxvdyAlZAoAbmV3dHJhcABpbmRleC5jAFJUcmVlU2VhcmNoAG4tPmxldmVsID49IDAAUlRyZWVJbnNlcnQAbGV2ZWwgPj0gMCAmJiBsZXZlbCA8PSAoKm4pLT5sZXZlbAByLT5ib3VuZGFyeVtpXSA8PSByLT5ib3VuZGFyeVtOVU1ESU1TICsgaV0AciAmJiBuICYmIG5ldwBSVHJlZUluc2VydDIAbGV2ZWwgPj0gMCAmJiBsZXZlbCA8PSBuLT5sZXZlbABGQUxTRQBub2RlLmMATm9kZUNvdmVyAHIgJiYgbgBQaWNrQnJhbmNoAEFkZEJyYW5jaABpIDwgTk9ERUNBUkQAbmV3AG4gJiYgaSA+PSAwICYmIGkgPCBOT0RFQ0FSRABEaXNjb25CcmFuY2gAcgByZWN0YW5nbGUuYwBSZWN0QXJlYQByICYmIHJyAENvbWJpbmVSZWN0AHIgJiYgcwBPdmVybGFwAG4Ac3BsaXQucS5jAFNwbGl0Tm9kZQBiAG4tPmNvdW50ICsgKCpubiktPmNvdW50ID09IE5PREVDQVJEICsgMQBMb2FkTm9kZXMAcQBwAHJ0cC0+c3BsaXQuUGFydGl0aW9uc1swXS5wYXJ0aXRpb25baV0gPT0gMCB8fCBydHAtPnNwbGl0LlBhcnRpdGlvbnNbMF0ucGFydGl0aW9uW2ldID09IDEAcnRwLT5zcGxpdC5QYXJ0aXRpb25zWzBdLmNvdW50WzBdICsgcnRwLT5zcGxpdC5QYXJ0aXRpb25zWzBdLmNvdW50WzFdID09IE5PREVDQVJEICsgMQBNZXRob2RaZXJvAHJ0cC0+c3BsaXQuUGFydGl0aW9uc1swXS5jb3VudFswXSA+PSBydHAtPk1pbkZpbGwgJiYgcnRwLT5zcGxpdC5QYXJ0aXRpb25zWzBdLmNvdW50WzFdID49IHJ0cC0+TWluRmlsbAAhcnRwLT5zcGxpdC5QYXJ0aXRpb25zWzBdLnRha2VuW2ldAENsYXNzaWZ5AEdldEJyYW5jaGVzAG4tPmJyYW5jaFtpXS5jaGlsZAAAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyAhIiMkJSYnKAICAgICAhAMWQEAH1AIAwcSExRXFhcIC2kMHwoFDA4pESsPLRAvMCAyBjQ1GxwdHgsMISIjJCUmJygMGBkXBAobHBogKgohIiMkJSYnKAwKDlMKLFgxWFhYWFhYDBscDy5YMyEiIyQlJicoGxz/U///ISIjJCUmJygM//8F////CRT//////wwbHP8QFRYhIiMkJSYnKBsc/////yEiIyQlJicoDP8SExQRFhf///////8MGxz///8SISIjJCUmJygbHP////8hIiMkJSYnKAz///////8T////////DBsc/////yEiIyQlJicoGxz/////ISIjJCUmJygSExQVFhcYGf///////////yMkJSYnGxITFBYXIjZoAR84ViEgAhsbG14bGzc5cDbSwk8EPCJHIj8iRCIiWCJlIiIFBl9gOQQHCAkKCwwNDgRmZ11qbQUGb1g7cQcICQoLDA0OBHI8W3M+YUYbEhMUFhcEBQY/QWJJBwgJCgsMDQ4FBgBcAAAHCAkKCwwNDgQAAE8AAABTQgAAAAAABAUGAERUVQcICQoLDA0OBQYAAAAABwgJCgsMDQ4EACosLkcxMwAAAAAAAAQFBgAAAEoHCAkKCwwNDgUGAAAAAAcICQoLDA0OBAAAAAAAAEwAAAAAAAAEBQYAAAAABwgJCgsMDQ4FBgAAAAAHCAkKCwwNDikrLS8wMjQ1AAAAAAAAAAAAKSstMDIABC8AJCMAEhQWGhweIBgABQcvLy8ALy8AAAkIKAAAASICBgAAAAAACAAAAAAAAAAAAAAAAAAlAyYTCikVCyoXDi0ZERsMKx0NLB8PIRAAMwAwAC9DADEALwA1LidCMkEAOjgAPDRFADYAQAAAPwBENzs5PQACAwMBAQIBAQEDAwMDAwMDAwEBAQEBAQEBAQEBAQEBAQECAQECAAYBAwMDAwMBAAECAwAEAQIDAAQABAAEAAMCAQIBAgFTeW50YXggZXJyb3I6IG5vbi1zcGFjZSBzdHJpbmcgdXNlZCBiZWZvcmUgPFRBQkxFPgBTeW50YXggZXJyb3I6IG5vbi1zcGFjZSBzdHJpbmcgdXNlZCBhZnRlciA8L1RBQkxFPgAAKSoqKissLC0tLS0tLS0tLS0uLzAxMjM0NTY3ODk6Ozw9Pj4/P0FAQkJCQkJCQ0NERERGRUdHR0lISkhLSExITU1OTk9P/wMPEBEjOiQ9JUAVQyZFJ0gYSxlNGigcTh0eUFFSWVpsa25jZFdpc3ludGF4IGVycm9yAG1lbW9yeSBleGhhdXN0ZWQAJXMgaW4gbGluZSAlZCAKAE5vdCBidWlsdCB3aXRoIGxpYmV4cGF0LiBUYWJsZSBmb3JtYXR0aW5nIGlzIG5vdCBhdmFpbGFibGUuCgByb3V0ZS5jAGxpYnBhdGgvJXM6JWQ6ICVzCgBzaG9ydGVzdC5jAHNvdXJjZSBwb2ludCBub3QgaW4gYW55IHRyaWFuZ2xlAGRlc3RpbmF0aW9uIHBvaW50IG5vdCBpbiBhbnkgdHJpYW5nbGUAY2Fubm90IGZpbmQgdHJpYW5nbGUgcGF0aABjYW5ub3QgbWFsbG9jIG9wcwBjYW5ub3QgcmVhbGxvYyBvcHMAdHJpYW5ndWxhdGlvbiBmYWlsZWQAY2Fubm90IG1hbGxvYyB0cmlzAGNhbm5vdCByZWFsbG9jIHRyaXMAY2Fubm90IG1hbGxvYyBkcS5wbmxzAGNhbm5vdCByZWFsbG9jIGRxLnBubHMAY2Fubm90IG1hbGxvYyBwbmxzAGNhbm5vdCBtYWxsb2MgcG5scHMAY2Fubm90IHJlYWxsb2MgcG5scwBjYW5ub3QgcmVhbGxvYyBwbmxwcwBUISIZDQECAxFLHAwQBAsdEh4naG5vcHFiIAUGDxMUFRoIFgcoJBcYCQoOGx8lI4OCfSYqKzw9Pj9DR0pNWFlaW1xdXl9gYWNkZWZnaWprbHJzdHl6e3wASWxsZWdhbCBieXRlIHNlcXVlbmNlAERvbWFpbiBlcnJvcgBSZXN1bHQgbm90IHJlcHJlc2VudGFibGUATm90IGEgdHR5AFBlcm1pc3Npb24gZGVuaWVkAE9wZXJhdGlvbiBub3QgcGVybWl0dGVkAE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkATm8gc3VjaCBwcm9jZXNzAEZpbGUgZXhpc3RzAFZhbHVlIHRvbyBsYXJnZSBmb3IgZGF0YSB0eXBlAE5vIHNwYWNlIGxlZnQgb24gZGV2aWNlAE91dCBvZiBtZW1vcnkAUmVzb3VyY2UgYnVzeQBJbnRlcnJ1cHRlZCBzeXN0ZW0gY2FsbABSZXNvdXJjZSB0ZW1wb3JhcmlseSB1bmF2YWlsYWJsZQBJbnZhbGlkIHNlZWsAQ3Jvc3MtZGV2aWNlIGxpbmsAUmVhZC1vbmx5IGZpbGUgc3lzdGVtAERpcmVjdG9yeSBub3QgZW1wdHkAQ29ubmVjdGlvbiByZXNldCBieSBwZWVyAE9wZXJhdGlvbiB0aW1lZCBvdXQAQ29ubmVjdGlvbiByZWZ1c2VkAEhvc3QgaXMgZG93bgBIb3N0IGlzIHVucmVhY2hhYmxlAEFkZHJlc3MgaW4gdXNlAEJyb2tlbiBwaXBlAEkvTyBlcnJvcgBObyBzdWNoIGRldmljZSBvciBhZGRyZXNzAEJsb2NrIGRldmljZSByZXF1aXJlZABObyBzdWNoIGRldmljZQBOb3QgYSBkaXJlY3RvcnkASXMgYSBkaXJlY3RvcnkAVGV4dCBmaWxlIGJ1c3kARXhlYyBmb3JtYXQgZXJyb3IASW52YWxpZCBhcmd1bWVudABBcmd1bWVudCBsaXN0IHRvbyBsb25nAFN5bWJvbGljIGxpbmsgbG9vcABGaWxlbmFtZSB0b28gbG9uZwBUb28gbWFueSBvcGVuIGZpbGVzIGluIHN5c3RlbQBObyBmaWxlIGRlc2NyaXB0b3JzIGF2YWlsYWJsZQBCYWQgZmlsZSBkZXNjcmlwdG9yAE5vIGNoaWxkIHByb2Nlc3MAQmFkIGFkZHJlc3MARmlsZSB0b28gbGFyZ2UAVG9vIG1hbnkgbGlua3MATm8gbG9ja3MgYXZhaWxhYmxlAFJlc291cmNlIGRlYWRsb2NrIHdvdWxkIG9jY3VyAFN0YXRlIG5vdCByZWNvdmVyYWJsZQBQcmV2aW91cyBvd25lciBkaWVkAE9wZXJhdGlvbiBjYW5jZWxlZABGdW5jdGlvbiBub3QgaW1wbGVtZW50ZWQATm8gbWVzc2FnZSBvZiBkZXNpcmVkIHR5cGUASWRlbnRpZmllciByZW1vdmVkAERldmljZSBub3QgYSBzdHJlYW0ATm8gZGF0YSBhdmFpbGFibGUARGV2aWNlIHRpbWVvdXQAT3V0IG9mIHN0cmVhbXMgcmVzb3VyY2VzAExpbmsgaGFzIGJlZW4gc2V2ZXJlZABQcm90b2NvbCBlcnJvcgBCYWQgbWVzc2FnZQBGaWxlIGRlc2NyaXB0b3IgaW4gYmFkIHN0YXRlAE5vdCBhIHNvY2tldABEZXN0aW5hdGlvbiBhZGRyZXNzIHJlcXVpcmVkAE1lc3NhZ2UgdG9vIGxhcmdlAFByb3RvY29sIHdyb25nIHR5cGUgZm9yIHNvY2tldABQcm90b2NvbCBub3QgYXZhaWxhYmxlAFByb3RvY29sIG5vdCBzdXBwb3J0ZWQAU29ja2V0IHR5cGUgbm90IHN1cHBvcnRlZABOb3Qgc3VwcG9ydGVkAFByb3RvY29sIGZhbWlseSBub3Qgc3VwcG9ydGVkAEFkZHJlc3MgZmFtaWx5IG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wAQWRkcmVzcyBub3QgYXZhaWxhYmxlAE5ldHdvcmsgaXMgZG93bgBOZXR3b3JrIHVucmVhY2hhYmxlAENvbm5lY3Rpb24gcmVzZXQgYnkgbmV0d29yawBDb25uZWN0aW9uIGFib3J0ZWQATm8gYnVmZmVyIHNwYWNlIGF2YWlsYWJsZQBTb2NrZXQgaXMgY29ubmVjdGVkAFNvY2tldCBub3QgY29ubmVjdGVkAENhbm5vdCBzZW5kIGFmdGVyIHNvY2tldCBzaHV0ZG93bgBPcGVyYXRpb24gYWxyZWFkeSBpbiBwcm9ncmVzcwBPcGVyYXRpb24gaW4gcHJvZ3Jlc3MAU3RhbGUgZmlsZSBoYW5kbGUAUmVtb3RlIEkvTyBlcnJvcgBRdW90YSBleGNlZWRlZABObyBtZWRpdW0gZm91bmQAV3JvbmcgbWVkaXVtIHR5cGUATm8gZXJyb3IgaW5mb3JtYXRpb24AABIQExQVFhcYGRobHB0eHyAhEBAiIxAkJSYnKCkqKxAsLS4RLzARETEREREyMzQ1Njc4OREQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQOhAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQOxA8PT4/QEEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQQhAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQQxAQRBBFRkcQSBBJEBAQEEpLTE0QEE4QT1AQEBAQURAQEBAQEBAQEBAQEBBSEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBBTEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQVFVWVxAQWFkQEBAQEBAQEBAQEBAQEBAQEBAQEBAQWhBbXF1eX2BhYhAQEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//////////////////////////////////////////wAAAAD+/wD8AQAA+AEAAHgAAAAA//vf+wAAgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAD8/+Cv/////////////9///////yBAsAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAD8AwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD8AAAAAACG/v///wBASQAAAAAAGADf/wDIAAAAAAAAAAEAPAAAAAAAAAAAAAAAABDgAR4AYP+/AAAAAAAA/wcAAAAAAAAAAAAAAAAAAAAAAAAA+M8DAAAAAwAg/38AAABOAAAAAAAAAAAAAAAAAAAAAAD8AAAAAAAAAAAAEAAgHgAwAAEAAAAAAAAAABAAIAAAAAD8DwAAAAAAAAAQACAAAAAAAAAAAAAAAAAAEAAgAAAAAAMAAAAAAAAAABAAIAAAAAD9AAAAAAAAAAAAACAAAAAA/wcAAAAAAAAAAAAgAAAAAAD/AAAAAAAAABAAIAAAAAAAAAAAAAAAAAAAACAAAAAAPwIAAAAAAAAAAAAEAAAAABAAAAAAAACAAIDA3wAMAAAAAAAAAAAAAAAAAB8AAAAAAAD+////APz//wAAAAAAAAAA/AAAAAAAAMD/3/8HAAAAAAAAAAAAAIAGAPwAABg+AACAvwDMAAAAAAAAAAAAAAAIAAAAAAAAAAAAAABg////HwAA/wMAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAABAAAYAAAAAAAAAAAAOAAAAAAQAAAAcAAAAAAAAAAAAAAAAAAAADAAAP5/LwAA/wP/fwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOMQAAAAAAAAAAAAAAAAAAAAAAAMT/////AAAAwAAAAAAAAAAAAQDgnwAAAAB/PwAAAAAAAAAAAAAAAAAAAAAQABAAAPz///8fAAAAAAAMAAAAAAAAQAAM8AAAAAAAAMD4AAAAAAAAAMAAAAAAAAAAAP8A////IRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/////38AAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAD4ADgAOAAYID4/////P//////fx/88X//fwAA////AwAA/////wEAewPQwa9CAAwfvP//AAAAAAAC//////////////////////////////////////////////////////////8PAP////9/AAAA/wcAAP////////////8/AAAAAAAA/P///v////////////////////////////////////////////////////8f/wMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADghwP+AAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAD//////3//DwAAAAAAAAAA////+/////////////8PAP//////////////////////////////////PwAAAP8PHv///wH8weAAAAAAAAAAAAAAAB4BAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAD//wAAAAD/////DwAAAP///3////////////////////////////////////9/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////8AAAAAAAAAAAAAAAAAAAAAAAD///////9/AAAAAAAAwADgAAAAAAAAAAAAAACAD3AAAAAAAAAAAAAAAAAAAP8A//9/AAMAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAABECAAAAA//AwAAAAAAAPAAAAAAAAAAAAAQwAAA//8DBwAAAAAA+AAAAAAIgAAAAAAAAAAAAAAIAP8/AMAAAAAAAAAAAAAAAAAAAADwAACACwAAAAAAAACAAgAAwAAAQwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAIAAAAAAAAAAAAAAAAAAAAA/P8DAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAw////A38A//////f/fw8AAAAAAAAAAAAAAAAAAAAAAID+/wD8AQAA+AEAAPg/AAAAAAAAAAAAAAAAAAAAf38AMIf//////4//AAAAAAAA4P//B/8PAAAAAAAA//////8/AAAAAA8AAAAAAAAAAAAAAAAAAIAAAAAAAAABAAAAAAAAAAAAAAAAAAAAgP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAwI8AAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIf/AP8BAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAAP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///38AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAP/z/PwAAAAMAAAAAAAD+AwAAAAAAAAAAAAAAAAAYAA8AAAAAAAAAAAAAAAAAAADhAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAHAAAAAAAAAAAAAAAAAP///////////////////////////////////////z8A/////3/+////////////////////////////PwAAAAD//////////z8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////////9/AP//AwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAACAAAAAgAACAAAAAgAACAAAAAgAAAAAIAAAACAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMA//////8P////////////////DwD/f/5//v/+/wAAAAD/B////3//////////D///////BwAAAAAAAAAAwP///wcA//////8H/wEDAAAAAAAAAAAAAAAAAAAAAAAAAAAA/////wEAv///////////H///DwD/////3wcAAP//AQD/////////f/3/////////////////////////////Hv////////8/DwD///8AAAAAAAAAAAAAAAAAAAAAAAD4///////////h/wAAAAAAAP//////////PwAAAAAAAAD//////////////////w8AAAAAAAAAAAAAAAAAAAAAAP////////////////////////////////////////////////////////////////8AAQIDBAUGBwgJ/////////woLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIj////////CgsMDQ4PEBESExQVFhcYGRobHB0eHyAhIiP/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAECBAcDBgUAEhETFBUWFxgZGhscHR4fICERIiMkESUmJygpKissES0uLxAQMBAQEBAQEBAxMjMQNDUQEBERERERERERERERERERERERERERERERERE2ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERNxERERE4ETk6Ozw9PhERERERERERERERERERERERERERERERERERERERERERERERERERERERERE/EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEUBBEUJDREVGR0hJEBAQSktMTU4QEBBPUBAQEBBREBAQEBAQEBAQERERUlMQEBAQEBAQEBAQEBERERFUEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQERFVEBAQEFYQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQVxAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQWFlaWxAQEBAQEBAQEBAQEBAQEBAQEBAQEBBcEBAQEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////////////////////////////////////AAAAAAAAAAD+//8H/v//BwAAAAAABCAE//9/////f//////////////////////////////////D/wMAH1AAAAAAAAAAAAAAIAAAAAAA3zxA1///+////////////7///////////////////////wP8/////////////////////////wD+////fwL+/////wAAAAAA/7+2AP///wcHAAAA/wf//////////v/D////////////////7x/+4f+fAAD///////8A4P///////////////wMA//////8HMAT////8/x8AAP///wEAAAAAAAAAAP0fAAAAAAAA8AP/f//////////v/9/h/8///v7un/n///3F459ZgLDP/wMA7of5///9bcOHGQJewP8/AO6/+////e3jvxsBAM//AADun/n///3t458ZwLDP/wIA7Mc91hjH/8PHHYEAwP8AAO7f/f///e/j3x1gA8//AADs3/3///3v498dYEDP/wYA7N/9/////+ffXYAAz/8A/Oz/f/z///svf4Bf/wAADAD+/////3//Bz8g/wMAAAAAliXw/q7s/ztfIP/zAAAAAAEAAAD/AwAA//7///8f/v8D///+////HwAAAAAAAAAA////////f/n/A///58H//39A/zP/////vyD///////f///////////89fz3//////z3/////PX89/3//////////Pf//////////hwAAAAD//wAA/////////////x8A/v//////////////////////////////////////////////////////////n////v//B////////////8cBAP/fDwD//w8A//8PAP/fDQD////////P//8BgBD/AwAAAAD/A///////////////AP//////B///////////PwD///8f/w//AcD/////Px8A//////8P////A/8DAAAAAP///w//////////f/7/HwD/A/8DgAAAAAAAAAAAAAAA////////7//vD/8DAAAAAP//////8////////7//AwD///////8/AP/j//////8/AAAAAAAAAAAAAAAAAN5vAP///////////////////////////////wAAAAAAAAAA//8/P/////8/P/+q////P////////99f3B/PD/8f3B8AAAAAAAAAAAAAAAAAAAKAAAD/HwAAAAAAAAAAAAAAAIT8Lz5Qvf/z4EMAAP//////AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMD///////8DAAD//////3///////3//////////////////////H3gMAP////+/IP////////+AAAD//38Af39/f39/f3//////AAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAA/gM+H/7///////////9/4P7/////////////9+D/////P/7/////////////fwAA////BwAAAAAAAP///////////////////////////////z8AAAAAAAAAAAD/////////////////////////////////HwAAAAAAAP//////////////////////HwAAAAAAAAAA//////8//x////8PAAD//////3/wj////4D/////////////AAAAAID//P///////////////3kPAP8HAAAAAAAAAAAA/7v3////AAAA////////DwD//////////w8A/wMAAPwI//////8H/////wcA////H/////////f/AID/AwAAAAD///////9/AP8//wP//38E/////////38FAAA4//88AH5+fgB/fwAAAAAAAAAAAAAAAAAAAAAAAP//////B/8D//////////////////////////8PAP//f/j//////w//////////////////P/////////////////8DAAAAAH8A+OD//X9f2/////////////////8DAAAA+P///////////////z8AAP///////////P///////wAAAAAA/w8AAAAAAAAAAAAAAAAAAN//////////////////////HwAA/wP+//8H/v//B8D/////////////f/z8/BwAAAAA/+///3///7f/P/8/AAAAAP///////////////////wcAAAAAAAAAAP///////x8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8f////////AQAAAAAA////fwAA////BwAAAAAAAP///z//////D/8+AAAAAAD/////////////////////////P/8DAAAAAAAAAAAAAD/9/////7+R//8/AAAAAAAAAAAAAAAAAAAAAAAAAAAA//8/AP///wMAAAAAAAAAAP/////////AAAAAAAAAAABv8O/+//8PAAAAAAD///8fAAAAAAAAAAAAAAAAAAAAAP///////z8A//8/AP//BwAAAAAAAAAAAAAAAAAAAAAA////////////AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//////////z8AAADA/wAA/P///////wEAAP///wH/A////////8f/AAAAAAAAAAD//////////x4A/wMAAAAAAAAAAAAAAAAAAAAAAAAAAP///////z8A/wMAAAAAAAD/////////////////fwAAAAAAAAAAAAAAAAAAAAAAAP///////////////wcAAAAAAAAAAAAAAAAAAAAAAAAA//////9/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/////////AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////HwD//////38AAPj/AAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/////////////3///////////32Te/+vv/////////7/n39////97X/z9//////////////////////////////////////////////////////8//////f//9/////f//9/////f//9/////f/////3////9///3z////////+////+W/vcKhOqWqpb3917/+/8P7vv/DwAAAAAAAAAATENfQUxMAExDX0NUWVBFAAAAAExDX05VTUVSSUMAAExDX1RJTUUAAAAAAExDX0NPTExBVEUAAExDX01PTkVUQVJZAExDX01FU1NBR0VTAExBTkcAQy5VVEYtOABQT1NJWABNVVNMX0xPQ1BBVEgAEQAKABEREQAAAAAFAAAAAAAACQAAAAALAAAAAAAAAAARAA8KERERAwoHAAETCQsLAAAJBgsAAAsABhEAAAAREREAAAAAAAAAAAAAAAAAAAAACwAAAAAAAAAAEQAKChEREQAKAAACAAkLAAAACQALAAALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAADAAAAAAJDAAAAAAADAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAANAAAABA0AAAAACQ4AAAAAAA4AAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAADwAAAAAPAAAAAAkQAAAAAAAQAAAQAAASAAAAEhISAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAAASEhIAAAAAAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALAAAAAAAAAAAAAAAKAAAAAAoAAAAACQsAAAAAAAsAAAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAADAAAAAAMAAAAAAkMAAAAAAAMAAAMAAAtKyAgIDBYMHgAKG51bGwpAC0wWCswWCAwWC0weCsweCAweABpbmYASU5GAE5BTgAwMTIzNDU2Nzg5QUJDREVGLgBhbG51bQBhbHBoYQBibGFuawBjbnRybABkaWdpdABncmFwaABsb3dlcgBwcmludABwdW5jdABzcGFjZQB1cHBlcgB4ZGlnaXQAQy5VVEYtOAAAAAAAAAAAAEMAL3Byb2Mvc2VsZi9mZC8AcndhAGluZmluaXR5AG5hbgAJAAoADQAMAAcAGwBbWzphbG51bTpdX10AW15bOmFsbnVtOl1fXQBbWzpzcGFjZTpdXQBbXls6c3BhY2U6XV0AW1s6ZGlnaXQ6XV0AW15bOmRpZ2l0Ol1dAC90bXAvdG1wZmlsZV9YWFhYWFgAdys=";var tempDoublePtr=STATICTOP;STATICTOP+=16;function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+Pointer_stringify(condition)+", at: "+[filename?Pointer_stringify(filename):"unknown filename",line,func?Pointer_stringify(func):"unknown function"])}function _emscripten_get_now(){abort()}function _emscripten_get_now_is_monotonic(){return ENVIRONMENT_IS_NODE||typeof dateNow!=="undefined"||(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&self["performance"]&&self["performance"]["now"]}var ERRNO_CODES={EPERM:1,ENOENT:2,ESRCH:3,EINTR:4,EIO:5,ENXIO:6,E2BIG:7,ENOEXEC:8,EBADF:9,ECHILD:10,EAGAIN:11,EWOULDBLOCK:11,ENOMEM:12,EACCES:13,EFAULT:14,ENOTBLK:15,EBUSY:16,EEXIST:17,EXDEV:18,ENODEV:19,ENOTDIR:20,EISDIR:21,EINVAL:22,ENFILE:23,EMFILE:24,ENOTTY:25,ETXTBSY:26,EFBIG:27,ENOSPC:28,ESPIPE:29,EROFS:30,EMLINK:31,EPIPE:32,EDOM:33,ERANGE:34,ENOMSG:42,EIDRM:43,ECHRNG:44,EL2NSYNC:45,EL3HLT:46,EL3RST:47,ELNRNG:48,EUNATCH:49,ENOCSI:50,EL2HLT:51,EDEADLK:35,ENOLCK:37,EBADE:52,EBADR:53,EXFULL:54,ENOANO:55,EBADRQC:56,EBADSLT:57,EDEADLOCK:35,EBFONT:59,ENOSTR:60,ENODATA:61,ETIME:62,ENOSR:63,ENONET:64,ENOPKG:65,EREMOTE:66,ENOLINK:67,EADV:68,ESRMNT:69,ECOMM:70,EPROTO:71,EMULTIHOP:72,EDOTDOT:73,EBADMSG:74,ENOTUNIQ:76,EBADFD:77,EREMCHG:78,ELIBACC:79,ELIBBAD:80,ELIBSCN:81,ELIBMAX:82,ELIBEXEC:83,ENOSYS:38,ENOTEMPTY:39,ENAMETOOLONG:36,ELOOP:40,EOPNOTSUPP:95,EPFNOSUPPORT:96,ECONNRESET:104,ENOBUFS:105,EAFNOSUPPORT:97,EPROTOTYPE:91,ENOTSOCK:88,ENOPROTOOPT:92,ESHUTDOWN:108,ECONNREFUSED:111,EADDRINUSE:98,ECONNABORTED:103,ENETUNREACH:101,ENETDOWN:100,ETIMEDOUT:110,EHOSTDOWN:112,EHOSTUNREACH:113,EINPROGRESS:115,EALREADY:114,EDESTADDRREQ:89,EMSGSIZE:90,EPROTONOSUPPORT:93,ESOCKTNOSUPPORT:94,EADDRNOTAVAIL:99,ENETRESET:102,EISCONN:106,ENOTCONN:107,ETOOMANYREFS:109,EUSERS:87,EDQUOT:122,ESTALE:116,ENOTSUP:95,ENOMEDIUM:123,EILSEQ:84,EOVERFLOW:75,ECANCELED:125,ENOTRECOVERABLE:131,EOWNERDEAD:130,ESTRPIPE:86};function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}function _clock_gettime(clk_id,tp){var now;if(clk_id===0){now=Date.now()}else if(clk_id===1&&_emscripten_get_now_is_monotonic()){now=_emscripten_get_now()}else{___setErrNo(ERRNO_CODES.EINVAL);return-1}HEAP32[tp>>2]=now/1e3|0;HEAP32[tp+4>>2]=now%1e3*1e3*1e3|0;return 0}function ___clock_gettime(){return _clock_gettime.apply(null,arguments)}function ___lock(){}function ___map_file(pathname,size){___setErrNo(ERRNO_CODES.EPERM);return-1}var ERRNO_MESSAGES={0:"Success",1:"Not super-user",2:"No such file or directory",3:"No such process",4:"Interrupted system call",5:"I/O error",6:"No such device or address",7:"Arg list too long",8:"Exec format error",9:"Bad file number",10:"No children",11:"No more processes",12:"Not enough core",13:"Permission denied",14:"Bad address",15:"Block device required",16:"Mount device busy",17:"File exists",18:"Cross-device link",19:"No such device",20:"Not a directory",21:"Is a directory",22:"Invalid argument",23:"Too many open files in system",24:"Too many open files",25:"Not a typewriter",26:"Text file busy",27:"File too large",28:"No space left on device",29:"Illegal seek",30:"Read only file system",31:"Too many links",32:"Broken pipe",33:"Math arg out of domain of func",34:"Math result not representable",35:"File locking deadlock error",36:"File or path name too long",37:"No record locks available",38:"Function not implemented",39:"Directory not empty",40:"Too many symbolic links",42:"No message of desired type",43:"Identifier removed",44:"Channel number out of range",45:"Level 2 not synchronized",46:"Level 3 halted",47:"Level 3 reset",48:"Link number out of range",49:"Protocol driver not attached",50:"No CSI structure available",51:"Level 2 halted",52:"Invalid exchange",53:"Invalid request descriptor",54:"Exchange full",55:"No anode",56:"Invalid request code",57:"Invalid slot",59:"Bad font file fmt",60:"Device not a stream",61:"No data (for no delay io)",62:"Timer expired",63:"Out of streams resources",64:"Machine is not on the network",65:"Package not installed",66:"The object is remote",67:"The link has been severed",68:"Advertise error",69:"Srmount error",70:"Communication error on send",71:"Protocol error",72:"Multihop attempted",73:"Cross mount point (not really error)",74:"Trying to read unreadable message",75:"Value too large for defined data type",76:"Given log. name not unique",77:"f.d. invalid for this operation",78:"Remote address changed",79:"Can access a needed shared lib",80:"Accessing a corrupted shared lib",81:".lib section in a.out corrupted",82:"Attempting to link in too many libs",83:"Attempting to exec a shared library",84:"Illegal byte sequence",86:"Streams pipe error",87:"Too many users",88:"Socket operation on non-socket",89:"Destination address required",90:"Message too long",91:"Protocol wrong type for socket",92:"Protocol not available",93:"Unknown protocol",94:"Socket type not supported",95:"Not supported",96:"Protocol family not supported",97:"Address family not supported by protocol family",98:"Address already in use",99:"Address not available",100:"Network interface is not configured",101:"Network is unreachable",102:"Connection reset by network",103:"Connection aborted",104:"Connection reset by peer",105:"No buffer space available",106:"Socket is already connected",107:"Socket is not connected",108:"Can't send after socket shutdown",109:"Too many references",110:"Connection timed out",111:"Connection refused",112:"Host is down",113:"Host is unreachable",114:"Socket already connected",115:"Connection already in progress",116:"Stale file handle",122:"Quota exceeded",123:"No medium (in tape drive)",125:"Operation canceled",130:"Previous owner died",131:"State not recoverable"};var PATH={splitPath:(function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)}),normalizeArray:(function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts}),normalize:(function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter((function(p){return!!p})),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path}),dirname:(function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir}),basename:(function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)}),extname:(function(path){return PATH.splitPath(path)[3]}),join:(function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))}),join2:(function(l,r){return PATH.normalize(l+"/"+r)}),resolve:(function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter((function(p){return!!p})),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."}),relative:(function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()}),put_char:(function(tty,val){if(val===null||val===10){Module["print"](UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}}),flush:(function(tty){if(tty.output&&tty.output.length>0){Module["print"](UTF8ArrayToString(tty.output,0));tty.output=[]}})},default_tty1_ops:{put_char:(function(tty,val){if(val===null||val===10){Module["printErr"](UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}}),flush:(function(tty){if(tty.output&&tty.output.length>0){Module["printErr"](UTF8ArrayToString(tty.output,0));tty.output=[]}})}};var MEMFS={ops_table:null,mount:(function(mount){return MEMFS.createNode(null,"/",16384|511,0)}),createNode:(function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node}),getFileDataAsRegularArray:(function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;inode.contents.length){node.contents=MEMFS.getFileDataAsRegularArray(node);node.usedBytes=node.contents.length}if(!node.contents||node.contents.subarray){var prevCapacity=node.contents?node.contents.length:0;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return}if(!node.contents&&newCapacity>0)node.contents=[];while(node.contents.lengthnewSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);assert(size>=0);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}}));var remove=[];Object.keys(dst.entries).forEach((function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}}));if(!total){return callback(null)}var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=(function(e){done(this.error);e.preventDefault()});create.sort().forEach((function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,(function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)}))}else{IDBFS.loadLocalEntry(path,(function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)}))}}));remove.sort().reverse().forEach((function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}}))})};var NODEFS={isWindows:false,staticInit:(function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={"1024":flags["O_APPEND"],"64":flags["O_CREAT"],"128":flags["O_EXCL"],"0":flags["O_RDONLY"],"2":flags["O_RDWR"],"4096":flags["O_SYNC"],"512":flags["O_TRUNC"],"1":flags["O_WRONLY"]}}),bufferFrom:(function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)}),mount:(function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)}),createNode:(function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node}),getMode:(function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}return stat.mode}),realPath:(function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)}),flagsForNode:(function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}}),node_ops:{getattr:(function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}}),setattr:(function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),lookup:(function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)}),mknod:(function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}return node}),rename:(function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),unlink:(function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),rmdir:(function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),readdir:(function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),symlink:(function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),readlink:(function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}})},stream_ops:{open:(function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),close:(function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),read:(function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),write:(function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),llseek:(function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(ERRNO_CODES[e.code])}}}if(position<0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}return position})}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:(function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size}),write:(function(stream,buffer,offset,length,position){throw new FS.ErrnoError(ERRNO_CODES.EIO)}),llseek:(function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}return position})}};STATICTOP+=16;STATICTOP+=16;STATICTOP+=16;var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:(function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)}),lookupPath:(function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(ERRNO_CODES.ELOOP)}var parts=PATH.normalizeArray(path.split("/").filter((function(p){return!!p})),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(ERRNO_CODES.ELOOP)}}}}return{path:current_path,node:current}}),getPath:(function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}}),hashName:(function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length}),hashAddNode:(function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node}),hashRemoveNode:(function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}}),lookupNode:(function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)}),createNode:(function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=(function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev});FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:(function(){return(this.mode&readMode)===readMode}),set:(function(val){val?this.mode|=readMode:this.mode&=~readMode})},write:{get:(function(){return(this.mode&writeMode)===writeMode}),set:(function(val){val?this.mode|=writeMode:this.mode&=~writeMode})},isFolder:{get:(function(){return FS.isDir(this.mode)})},isDevice:{get:(function(){return FS.isChrdev(this.mode)})}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node}),destroyNode:(function(node){FS.hashRemoveNode(node)}),isRoot:(function(node){return node===node.parent}),isMountpoint:(function(node){return!!node.mounted}),isFile:(function(mode){return(mode&61440)===32768}),isDir:(function(mode){return(mode&61440)===16384}),isLink:(function(mode){return(mode&61440)===40960}),isChrdev:(function(mode){return(mode&61440)===8192}),isBlkdev:(function(mode){return(mode&61440)===24576}),isFIFO:(function(mode){return(mode&61440)===4096}),isSocket:(function(mode){return(mode&49152)===49152}),flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:(function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags}),flagsToPermissionString:(function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms}),nodePermissions:(function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return ERRNO_CODES.EACCES}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return ERRNO_CODES.EACCES}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return ERRNO_CODES.EACCES}return 0}),mayLookup:(function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return ERRNO_CODES.EACCES;return 0}),mayCreate:(function(dir,name){try{var node=FS.lookupNode(dir,name);return ERRNO_CODES.EEXIST}catch(e){}return FS.nodePermissions(dir,"wx")}),mayDelete:(function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return ERRNO_CODES.ENOTDIR}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return ERRNO_CODES.EBUSY}}else{if(FS.isDir(node.mode)){return ERRNO_CODES.EISDIR}}return 0}),mayOpen:(function(node,flags){if(!node){return ERRNO_CODES.ENOENT}if(FS.isLink(node.mode)){return ERRNO_CODES.ELOOP}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return ERRNO_CODES.EISDIR}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))}),MAX_OPEN_FDS:4096,nextfd:(function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(ERRNO_CODES.EMFILE)}),getStream:(function(fd){return FS.streams[fd]}),createStream:(function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=(function(){});FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:(function(){return this.node}),set:(function(val){this.node=val})},isRead:{get:(function(){return(this.flags&2097155)!==1})},isWrite:{get:(function(){return(this.flags&2097155)!==0})},isAppend:{get:(function(){return this.flags&1024})}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream}),closeStream:(function(fd){FS.streams[fd]=null}),chrdev_stream_ops:{open:(function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}}),llseek:(function(){throw new FS.ErrnoError(ERRNO_CODES.ESPIPE)})},major:(function(dev){return dev>>8}),minor:(function(dev){return dev&255}),makedev:(function(ma,mi){return ma<<8|mi}),registerDevice:(function(dev,ops){FS.devices[dev]={stream_ops:ops}}),getDevice:(function(dev){return FS.devices[dev]}),getMounts:(function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts}),syncfs:(function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){assert(FS.syncFSRequests>0);FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach((function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)}))}),mount:(function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(ERRNO_CODES.EBUSY)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(ERRNO_CODES.EBUSY)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot}),unmount:(function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach((function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}}));node.mounted=null;var idx=node.mount.mounts.indexOf(mount);assert(idx!==-1);node.mount.mounts.splice(idx,1)}),lookup:(function(parent,name){return parent.node_ops.lookup(parent,name)}),mknod:(function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}return parent.node_ops.mknod(parent,name,mode,dev)}),create:(function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)}),mkdir:(function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)}),mkdirTree:(function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=(function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}});var lazyArray=this;lazyArray.setDataGetter((function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]}));if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:(function(){if(!this.lengthKnown){this.cacheLength()}return this._length})},chunkSize:{get:(function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize})}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:(function(){return this.contents.length})}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach((function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(ERRNO_CODES.EIO)}return fn.apply(null,arguments)}}));stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(ERRNO_CODES.EIO)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);assert(size>=0);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;HEAP32[buf+36>>2]=stat.size;HEAP32[buf+40>>2]=4096;HEAP32[buf+44>>2]=stat.blocks;HEAP32[buf+48>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+52>>2]=0;HEAP32[buf+56>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ino;return 0}),doMsync:(function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)}),doMkdir:(function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0}),doMknod:(function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0}),doReadlink:(function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len}),doAccess:(function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0}),doDup:(function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd}),doReadv:(function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret}),varargs:0,get:(function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret}),getStr:(function(){var ret=Pointer_stringify(SYSCALLS.get());return ret}),getStreamFromFD:(function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream}),getSocketFromFD:(function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket}),getSocketAddress:(function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info}),get64:(function(){var low=SYSCALLS.get(),high=SYSCALLS.get();if(low>=0)assert(high===0);else assert(high===-1);return low}),getZero:(function(){assert(SYSCALLS.get()===0)})};function ___syscall10(which,varargs){SYSCALLS.varargs=varargs;try{var path=SYSCALLS.getStr();FS.unlink(path);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();var offset=offset_low;FS.llseek(stream,offset,whence);HEAP32[result>>2]=stream.position;if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall192(which,varargs){SYSCALLS.varargs=varargs;try{var addr=SYSCALLS.get(),len=SYSCALLS.get(),prot=SYSCALLS.get(),flags=SYSCALLS.get(),fd=SYSCALLS.get(),off=SYSCALLS.get();off<<=12;var ptr;var allocated=false;if(fd===-1){ptr=_memalign(PAGE_SIZE,len);if(!ptr)return-ERRNO_CODES.ENOMEM;_memset(ptr,0,len);allocated=true}else{var info=FS.getStream(fd);if(!info)return-ERRNO_CODES.EBADF;var res=FS.mmap(info,HEAPU8,addr,len,off,prot,flags);ptr=res.ptr;allocated=res.allocated}SYSCALLS.mappings[ptr]={malloc:ptr,len:len,allocated:allocated,fd:fd,flags:flags};return ptr}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall195(which,varargs){SYSCALLS.varargs=varargs;try{var path=SYSCALLS.getStr(),buf=SYSCALLS.get();return SYSCALLS.doStat(FS.stat,path,buf)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall197(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),buf=SYSCALLS.get();return SYSCALLS.doStat(FS.stat,stream.path,buf)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd};case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0};case 12:case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0};case 13:case 14:case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall33(which,varargs){SYSCALLS.varargs=varargs;try{var path=SYSCALLS.getStr(),amode=SYSCALLS.get();return SYSCALLS.doAccess(path,amode)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0};case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0};case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0};case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL};case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)};case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0};default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall91(which,varargs){SYSCALLS.varargs=varargs;try{var addr=SYSCALLS.get(),len=SYSCALLS.get();var info=SYSCALLS.mappings[addr];if(!info)return 0;if(len===info.len){var stream=FS.getStream(info.fd);SYSCALLS.doMsync(addr,stream,len,info.flags);FS.munmap(stream);SYSCALLS.mappings[addr]=null;if(info.allocated){_free(info.malloc)}}return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}var cttz_i8=allocate([8,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0],"i8",ALLOC_STATIC);function ___unlock(){}function __exit(status){Module["exit"](status)}function _exit(status){__exit(status)}var _environ=STATICTOP;STATICTOP+=16;function ___buildEnvironment(env){var MAX_ENV_VALUES=64;var TOTAL_ENV_SIZE=1024;var poolPtr;var envPtr;if(!___buildEnvironment.called){___buildEnvironment.called=true;ENV["USER"]=ENV["LOGNAME"]="web_user";ENV["PATH"]="/";ENV["PWD"]="/";ENV["HOME"]="/home/web_user";ENV["LANG"]="C.UTF-8";ENV["_"]=Module["thisProgram"];poolPtr=staticAlloc(TOTAL_ENV_SIZE);envPtr=staticAlloc(MAX_ENV_VALUES*4);HEAP32[envPtr>>2]=poolPtr;HEAP32[_environ>>2]=envPtr}else{envPtr=HEAP32[_environ>>2];poolPtr=HEAP32[envPtr>>2]}var strings=[];var totalSize=0;for(var key in env){if(typeof env[key]==="string"){var line=key+"="+env[key];strings.push(line);totalSize+=line.length}}if(totalSize>TOTAL_ENV_SIZE){throw new Error("Environment size exceeded TOTAL_ENV_SIZE!")}var ptrSize=4;for(var i=0;i>2]=poolPtr;poolPtr+=line.length+1}HEAP32[envPtr+strings.length*ptrSize>>2]=0}var ENV={};function _getenv(name){if(name===0)return 0;name=Pointer_stringify(name);if(!ENV.hasOwnProperty(name))return 0;if(_getenv.ret)_free(_getenv.ret);_getenv.ret=allocateUTF8(ENV[name]);return _getenv.ret}var _llvm_ceil_f64=Math_ceil;var _llvm_fabs_f64=Math_abs;var _llvm_floor_f64=Math_floor;var _llvm_pow_f64=Math_pow;var _llvm_sqrt_f64=Math_sqrt;function _llvm_trap(){abort("trap!")}function _longjmp(env,value){Module["setThrew"](env,value||1);throw"longjmp"}function _emscripten_memcpy_big(dest,src,num){HEAPU8.set(HEAPU8.subarray(src,src+num),dest);return dest}function _setenv(envname,envval,overwrite){if(envname===0){___setErrNo(ERRNO_CODES.EINVAL);return-1}var name=Pointer_stringify(envname);var val=Pointer_stringify(envval);if(name===""||name.indexOf("=")!==-1){___setErrNo(ERRNO_CODES.EINVAL);return-1}if(ENV.hasOwnProperty(name)&&!overwrite)return 0;ENV[name]=val;___buildEnvironment(ENV);return 0}function _times(buffer){if(buffer!==0){_memset(buffer,0,16)}return 0}if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof self==="object"&&self["performance"]&&typeof self["performance"]["now"]==="function"){_emscripten_get_now=(function(){return self["performance"]["now"]()})}else if(typeof performance==="object"&&typeof performance["now"]==="function"){_emscripten_get_now=(function(){return performance["now"]()})}else{_emscripten_get_now=Date.now}FS.staticInit();__ATINIT__.unshift((function(){if(!Module["noFSInit"]&&!FS.init.initialized)FS.init()}));__ATMAIN__.push((function(){FS.ignorePermissions=false}));__ATEXIT__.push((function(){FS.quit()}));__ATINIT__.unshift((function(){TTY.init()}));__ATEXIT__.push((function(){TTY.shutdown()}));if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}___buildEnvironment(ENV);DYNAMICTOP_PTR=staticAlloc(4);STACK_BASE=STACKTOP=alignMemory(STATICTOP);STACK_MAX=STACK_BASE+TOTAL_STACK;DYNAMIC_BASE=alignMemory(STACK_MAX);HEAP32[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE;staticSealed=true;var ASSERTIONS=false;function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}function intArrayToString(array){var ret=[];for(var i=0;i255){if(ASSERTIONS){assert(false,"Character code "+chr+" ("+String.fromCharCode(chr)+") at offset "+i+" not in 0x00-0xFF.")}chr&=255}ret.push(String.fromCharCode(chr))}return ret.join("")}var decodeBase64=typeof atob==="function"?atob:(function(input){var keyStr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";var output="";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;input=input.replace(/[^A-Za-z0-9\+\/\=]/g,"");do{enc1=keyStr.indexOf(input.charAt(i++));enc2=keyStr.indexOf(input.charAt(i++));enc3=keyStr.indexOf(input.charAt(i++));enc4=keyStr.indexOf(input.charAt(i++));chr1=enc1<<2|enc2>>4;chr2=(enc2&15)<<4|enc3>>2;chr3=(enc3&3)<<6|enc4;output=output+String.fromCharCode(chr1);if(enc3!==64){output=output+String.fromCharCode(chr2)}if(enc4!==64){output=output+String.fromCharCode(chr3)}}while(i>2]=0;h=ls()|0;qs(h,10904);qs(h,17148);_l(1)|0;Zl(16)|0;fp(1);while(1){a=Tn(a)|0;e=c[f>>2]|0;if(!a)break;if(!e){ms(h,a,d)|0;ps(h,a,b,f,g)|0;ir(h,a)|0}mn(a)|0;a=174185}l=i;return e|0}function Ab(a){a=a|0;var d=0,e=0,f=0,g=0;g=l;l=l+16|0;d=g+4|0;e=g;f=c[(c[a+16>>2]|0)+8>>2]|0;a=a+64|0;switch(c[a>>2]|0){case 0:{wx(f);break}case 1:{if(b[(c[f+16>>2]|0)+136>>1]&1)oB(f);break}case 4:case 5:case 6:{tx(f,e,d);Db(f,c[e>>2]|0,c[d>>2]|0,c[a>>2]|0);break}default:{}}l=g;return}function Bb(a){a=a|0;var b=0,d=0,e=0,f=0;d=c[(c[a+16>>2]|0)+8>>2]|0;if(!(c[41841]|0)){c[41841]=c[4442];c[41842]=9;c[41843]=17}e=d+64|0;f=(c[e>>2]|0)+8|0;b=c[f>>2]|0;c[f>>2]=167364;switch(c[a+64>>2]|0){case 2:{jx(a,d,a,0);break}case 3:{jx(a,d,a,1);break}case 1:case 0:{if(!(c[a+152>>2]&134217728))$p(d,a)|0;break}case 6:case 5:case 4:{Cb(d);if(!(c[a+152>>2]&134217728))$p(d,a)|0;break}default:{}}c[(c[e>>2]|0)+8>>2]=b;return}function Cb(b){b=b|0;var d=0,e=0;d=c[41845]|0;if((d|0)!=(c[41844]|0)){e=c[c[41876]>>2]|0;if(!e){e=uB(b,0,84827,174185)|0;c[c[41876]>>2]=e;d=c[41845]|0}if(d>>>0>=(c[41846]|0)>>>0){em(167376,1)|0;d=c[41845]|0}a[d>>0]=0;d=c[41844]|0;c[41845]=d;Dm(b,e,d)|0}if(c[(c[b+16>>2]|0)+12>>2]|0){e=c[(c[41876]|0)+4>>2]|0;d=c[41861]|0;if(d>>>0>=(c[41862]|0)>>>0){em(167440,1)|0;d=c[41861]|0}a[d>>0]=0;d=c[41860]|0;c[41861]=d;Dm(b,e,d)|0}Mm(b,59577,c[(c[41876]|0)+8236>>2]|0,174185)|0;d=0;while(1){if((d|0)==8)break;hm(167376+(d<<4)|0);d=d+1|0}$I(c[41876]|0);h[1]=1.0;h[5]=1.0;c[41877]=0;c[41881]=0;return}function Db(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0;i=_I(8240)|0;c[41876]=i;a:do switch(g|0){case 6:{b[i+8232>>1]=14;g=59593;break}case 5:{b[i+8232>>1]=12;g=59597;break}default:{g=Jm(d,59577)|0;if((g|0?a[g>>0]|0:0)?(h=Eb(g)|0,(h&65535)>10):0){i=c[41876]|0;b[i+8232>>1]=h;break a}g=Eb(59589)|0;i=c[41876]|0;b[i+8232>>1]=g;g=59589}}while(0);c[i+8236>>2]=g;j=d+16|0;g=c[j>>2]|0;if(!(c[g+180>>2]|0))h=0;else{h=uB(d,0,84827,174185)|0;i=c[41876]|0;g=c[j>>2]|0}c[i>>2]=h;if(!(a[g+113>>0]&8))g=0;else g=uB(d,0,59601,174185)|0;c[(c[41876]|0)+4>>2]=g;i=uB(d,1,84827,174185)|0;c[(c[41876]|0)+8>>2]=i;i=uB(d,1,59601,174185)|0;c[(c[41876]|0)+12>>2]=i;i=uB(d,2,84827,174185)|0;g=c[41876]|0;c[g+16>>2]=i;if(!f)h=0;else{h=uB(d,2,59609,174185)|0;g=c[41876]|0}c[g+20>>2]=h;if(!e)h=0;else{h=uB(d,2,59617,174185)|0;g=c[41876]|0}c[g+24>>2]=h;h=a[(c[j>>2]|0)+113>>0]|0;if(!(h&33))i=0;else{i=uB(d,2,59601,174185)|0;g=c[41876]|0;h=a[(c[j>>2]|0)+113>>0]|0}c[g+28>>2]=i;if(!(h&2))i=0;else{i=uB(d,2,59625,174185)|0;g=c[41876]|0;h=a[(c[j>>2]|0)+113>>0]|0}c[g+32>>2]=i;if(!(h&4))h=0;else{h=uB(d,2,59634,174185)|0;g=c[41876]|0}c[g+36>>2]=h;g=0;while(1){if((g|0)==8)break;dm(167376+(g<<4)|0,1024,(c[41876]|0)+40+(g<<10)|0);g=g+1|0}return}function Eb(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=l;l=l+1040|0;h=j;g=j+8|0;f=0;d=b;a:while(1){do{e=d;d=d+1|0;e=a[e>>0]|0;if(!(e<<24>>24))break a}while(((e<<24>>24)+-48|0)>>>0>=10);if((f|0)>=1023){i=7;break}a[g+f>>0]=e;f=f+1|0}if((i|0)==7){c[h>>2]=b;$l(0,59643,h)|0}a[g+f>>0]=0;i=(sM(g)|0)&65535;l=j;return i|0}function Fb(b){b=b|0;var d=0,e=0;e=c[(c[b+16>>2]|0)+8>>2]|0;d=c[c[41876]>>2]|0;b=c[41849]|0;if(b>>>0>=(c[41850]|0)>>>0){em(167392,1)|0;b=c[41849]|0}a[b>>0]=0;b=c[41848]|0;c[41849]=b;Dm(e,d,b)|0;if(c[(c[e+16>>2]|0)+12>>2]|0){d=c[(c[41876]|0)+4>>2]|0;b=c[41865]|0;if(b>>>0>=(c[41866]|0)>>>0){em(167456,1)|0;b=c[41865]|0}a[b>>0]=0;b=c[41864]|0;c[41865]=b;Dm(e,d,b)|0}h[2]=1.0;h[6]=1.0;c[41878]=0;c[41882]=0;return}function Gb(b){b=b|0;var d=0,e=0;e=c[(c[b+16>>2]|0)+8>>2]|0;b=c[41849]|0;if((c[41848]|0)!=(b|0)){d=c[(c[41876]|0)+8>>2]|0;if(b>>>0>=(c[41850]|0)>>>0){em(167392,1)|0;b=c[41849]|0}a[b>>0]=0;b=c[41848]|0;c[41849]=b;Dm(e,d,b)|0}b=c[41865]|0;if((c[41864]|0)!=(b|0)){d=c[(c[41876]|0)+12>>2]|0;if(b>>>0>=(c[41866]|0)>>>0){em(167456,1)|0;b=c[41865]|0}a[b>>0]=0;b=c[41864]|0;c[41865]=b;Dm(e,d,b)|0}h[9]=1.0;h[11]=1.0;c[41885]=0;c[41887]=0;return}function Hb(b){b=b|0;var d=0,e=0;e=c[(c[b+16>>2]|0)+8>>2]|0;b=c[41849]|0;if((c[41848]|0)!=(b|0)){d=c[(c[41876]|0)+16>>2]|0;if(b>>>0>=(c[41850]|0)>>>0){em(167392,1)|0;b=c[41849]|0}a[b>>0]=0;b=c[41848]|0;c[41849]=b;Dm(e,d,b)|0}b=c[41853]|0;if((c[41852]|0)!=(b|0)){d=c[(c[41876]|0)+24>>2]|0;if(b>>>0>=(c[41854]|0)>>>0){em(167408,1)|0;b=c[41853]|0}a[b>>0]=0;b=c[41852]|0;c[41853]=b;Dm(e,d,b)|0}b=c[41857]|0;if((c[41856]|0)!=(b|0)){d=c[(c[41876]|0)+20>>2]|0;if(b>>>0>=(c[41858]|0)>>>0){em(167424,1)|0;b=c[41857]|0}a[b>>0]=0;b=c[41856]|0;c[41857]=b;Dm(e,d,b)|0}b=c[41865]|0;if((c[41864]|0)!=(b|0)){d=c[(c[41876]|0)+28>>2]|0;if(b>>>0>=(c[41866]|0)>>>0){em(167456,1)|0;b=c[41865]|0}a[b>>0]=0;b=c[41864]|0;c[41865]=b;Dm(e,d,b)|0}b=c[41869]|0;if((c[41868]|0)!=(b|0)){d=c[(c[41876]|0)+36>>2]|0;if(b>>>0>=(c[41870]|0)>>>0){em(167472,1)|0;b=c[41869]|0}a[b>>0]=0;b=c[41868]|0;c[41869]=b;Dm(e,d,b)|0}b=c[41873]|0;if((c[41872]|0)!=(b|0)){d=c[(c[41876]|0)+32>>2]|0;if(b>>>0>=(c[41874]|0)>>>0){em(167488,1)|0;b=c[41873]|0}a[b>>0]=0;b=c[41872]|0;c[41873]=b;Dm(e,d,b)|0}h[10]=1.0;h[12]=1.0;h[3]=1.0;h[4]=1.0;h[7]=1.0;h[8]=1.0;c[41886]=0;c[41888]=0;c[41879]=0;c[41880]=0;c[41883]=0;c[41884]=0;return}function Ib(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=l;l=l+1056|0;j=t+16|0;s=t+8|0;r=t;k=t+32|0;o=c[(c[d+16>>2]|0)+12>>2]|0;p=c[11344+(o<<2)>>2]|0;gm(p,59746)|0;g=f+4|0;Rb(k,+h[(c[g>>2]|0)+16>>3]);gm(p,k)|0;Ub(d,174185,c[c[g>>2]>>2]|0);Ob(d);q=a[f+48>>0]|0;q=q<<24>>24==108?-1:q<<24>>24==114&1;g=c[g>>2]|0;if(!g)g=0;else g=c[g+24>>2]&127;i=b[(c[41876]|0)+8232>>1]|0;if((i&65535)>14?(m=c[11392+((i&65535)+-15<<2)>>2]&g,n=167508+(o<<2)|0,(c[n>>2]|0)!=(m|0)):0){c[r>>2]=m;qL(k,59749,r)|0;gm(p,k)|0;c[n>>2]=m}r=e+8|0;h[r>>3]=+h[r>>3]+ +h[f+24>>3];gm(p,59755)|0;c[j>>2]=c[e>>2];c[j+4>>2]=c[e+4>>2];c[j+8>>2]=c[e+8>>2];c[j+12>>2]=c[e+12>>2];Qb(p,j);c[s>>2]=q;qL(k,87254,s)|0;gm(p,k)|0;Rb(k,+h[f+32>>3]);gm(p,k)|0;Ub(d,174185,c[f>>2]|0);l=t;return}function Jb(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0;i=l;l=l+1040|0;f=i;g=i+16|0;e=c[(c[a+16>>2]|0)+12>>2]|0;Nb(a);Ob(a);if(!d){a=c[11344+(e<<2)>>2]|0;gm(a,59743)|0}else{if((d|1|0)==3)Wb(a,d,b,2);else Xb(a);a=c[11344+(e<<2)>>2]|0;gm(a,59740)|0};c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Qb(a,f);Rb(g,+h[b+16>>3]-+h[b>>3]);gm(a,g)|0;Rb(g,+h[b+24>>3]-+h[b+8>>3]);gm(a,g)|0;l=i;return}function Kb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Nb(a);Ob(a);if(!d)Pb(a,112,b,c);else{if((d|1|0)==3)Wb(a,d,b,c);else Xb(a);Pb(a,80,b,c)}return}function Lb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;Nb(a);Ob(a);if(!f)Pb(a,66,b,c);else{if((f|1|0)==3)Wb(a,f,b,c);else Xb(a);Pb(a,98,b,c)}return}function Mb(a,b,c){a=a|0;b=b|0;c=c|0;Nb(a);Ob(a);Pb(a,76,b,c);return}function Nb(b){b=b|0;var d=0,e=0,f=0,g=0.0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+1184|0;i=n;f=n+24|0;m=n+8|0;dm(m,1024,n+152|0);j=b+16|0;d=c[j>>2]|0;g=+h[d+152>>3];e=8+(c[d+12>>2]<<3)|0;if(g!=+h[e>>3]){h[e>>3]=g;gm(m,59706)|0;h[i>>3]=+h[(c[j>>2]|0)+152>>3];qL(f,59720,i)|0;Sb(f,0);gm(m,f)|0;f=m+4|0;d=c[f>>2]|0;e=m+8|0;if(d>>>0>=(c[e>>2]|0)>>>0){em(m,1)|0;d=c[f>>2]|0}c[f>>2]=d+1;a[d>>0]=41;d=c[f>>2]|0;if(d>>>0>=(c[e>>2]|0)>>>0){em(m,1)|0;d=c[f>>2]|0}a[d>>0]=0;d=c[m>>2]|0;c[f>>2]=d;Ub(b,59725,d);d=c[j>>2]|0}d=c[d+160>>2]|0;if(d|0){j=m+4|0;k=m+8|0;a:while(1){i=d+4|0;d=c[d>>2]|0;if(!d)break;switch(a[d>>0]|0){case 102:{if(!(yJ(d,95923)|0)){d=i;continue a}break}case 98:{if(!(yJ(d,95905)|0)){d=i;continue a}break}case 115:{if(!(yJ(d,95910)|0)){d=i;continue a}break}default:{}}gm(m,d)|0;do{f=d;d=d+1|0}while((a[f>>0]|0)!=0);if(a[d>>0]|0){e=c[j>>2]|0;if(e>>>0>=(c[k>>2]|0)>>>0){em(m,1)|0;e=c[j>>2]|0}c[j>>2]=e+1;a[e>>0]=40;f=0;while(1){if(!(a[d>>0]|0))break;if(f|0){e=c[j>>2]|0;if(e>>>0>=(c[k>>2]|0)>>>0){em(m,1)|0;e=c[j>>2]|0}c[j>>2]=e+1;a[e>>0]=44}gm(m,d)|0;do{e=d;d=d+1|0}while((a[e>>0]|0)!=0);f=f+1|0}d=c[j>>2]|0;if(d>>>0>=(c[k>>2]|0)>>>0){em(m,1)|0;d=c[j>>2]|0}c[j>>2]=d+1;a[d>>0]=41}d=c[j>>2]|0;if(d>>>0>=(c[k>>2]|0)>>>0){em(m,1)|0;d=c[j>>2]|0}a[d>>0]=0;d=c[m>>2]|0;c[j>>2]=d;Ub(b,59725,d);d=i}hm(m)}l=n;return}function Ob(a){a=a|0;Tb((c[a+16>>2]|0)+16|0);Ub(a,68667,173886);return}function Pb(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;k=l;l=l+1040|0;j=k;i=k+16|0;h=c[11344+(c[(c[b+16>>2]|0)+12>>2]<<2)>>2]|0;g=h+4|0;b=c[g>>2]|0;if(b>>>0>=(c[h+8>>2]|0)>>>0){em(h,1)|0;b=c[g>>2]|0}c[g>>2]=b+1;a[b>>0]=d;c[j>>2]=f;qL(i,59670,j)|0;gm(h,i)|0;b=0;while(1){if((b|0)>=(f|0))break;i=e+(b<<4)|0;c[j>>2]=c[i>>2];c[j+4>>2]=c[i+4>>2];c[j+8>>2]=c[i+8>>2];c[j+12>>2]=c[i+12>>2];Qb(h,j);b=b+1|0}l=k;return}function Qb(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+1024|0;d=c;Rb(d,+h[b>>3]);gm(a,d)|0;Rb(d,+ix(+h[b+8>>3]));gm(a,d)|0;l=c;return}function Rb(a,b){a=a|0;b=+b;var c=0,d=0;c=l;l=l+16|0;d=c;h[d>>3]=b>-1.0e-08&b<1.0e-08?0.0:b;qL(a,59675,d)|0;Sb(a,1);l=c;return}function Sb(b,c){b=b|0;c=c|0;var d=0,e=0;d=XJ(b,46)|0;if(!d){if(c|0){d=b+(sJ(b)|0)|0;e=10}}else{while(1){b=d+1|0;if(!(a[b>>0]|0))break;else d=b}a:while(1){switch(a[d>>0]|0){case 46:{e=5;break a}case 48:break;default:{e=6;break a}}a[d>>0]=0;d=d+-1|0}if((e|0)==5)a[d>>0]=0;else if((e|0)==6)d=d+1|0;if(c|0)e=10}if((e|0)==10){a[d>>0]=32;a[d+1>>0]=0}return}function Tb(b){b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=l;l=l+32|0;i=j+16|0;h=j;e=a[b+3>>0]|0;f=d[b>>0]|0;g=d[b+1>>0]|0;b=d[b+2>>0]|0;if(e<<24>>24==-1){c[h>>2]=f;c[h+4>>2]=g;c[h+8>>2]=b;qL(173886,68547,h)|0}else{c[i>>2]=f;c[i+4>>2]=g;c[i+8>>2]=b;c[i+12>>2]=e&255;qL(173886,59688,i)|0}l=j;return}function Ub(a,b,d){a=a|0;b=b|0;d=d|0;Vb(c[11344+(c[(c[a+16>>2]|0)+12>>2]<<2)>>2]|0,b,d);return}function Vb(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+1040|0;h=f;g=f+8|0;i=sJ(e)|0;c[h>>2]=d;c[h+4>>2]=i;qL(g,59681,h)|0;gm(b,g)|0;gm(b,e)|0;e=b+4|0;d=c[e>>2]|0;if(d>>>0>=(c[b+8>>2]|0)>>>0){em(b,1)|0;d=c[e>>2]|0}c[e>>2]=d+1;a[d>>0]=32;l=f;return}function Wb(b,d,f,i){b=b|0;d=d|0;f=f|0;i=i|0;var j=0.0,k=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0;x=l;l=l+1120|0;t=x+64|0;w=x+80|0;k=x+32|0;r=x+16|0;s=x;u=c[b+16>>2]|0;j=+(c[u+136>>2]|0)*.017453292519943295;if((e[(c[41876]|0)+8232>>1]|0)<14)Xb(b);else{dm(w,1024,x+96|0);v=(d|0)==2;if(v){KB(f,k,i,j,2);f=w+4|0;d=c[f>>2]|0;if(d>>>0>=(c[w+8>>2]|0)>>>0){em(w,1)|0;d=c[f>>2]|0}c[f>>2]=d+1;a[d>>0]=91;c[t>>2]=c[k>>2];c[t+4>>2]=c[k+4>>2];c[t+8>>2]=c[k+8>>2];c[t+12>>2]=c[k+12>>2];Qb(w,t);s=k+16|0;c[t>>2]=c[s>>2];c[t+4>>2]=c[s+4>>2];c[t+8>>2]=c[s+8>>2];c[t+12>>2]=c[s+12>>2];Qb(w,t)}else{KB(f,k,i,0.0,3);q=+h[k+24>>3];o=+h[k>>3];if(j==0.0){n=+h[k+8>>3];p=q*.25;j=n;m=o}else{p=q*.25;y=p;m=+E(+j)*y+o;n=+h[k+8>>3];j=+F(+j)*y+n}h[r>>3]=m;h[r+8>>3]=j;h[s>>3]=o;h[s+8>>3]=n;f=w+4|0;d=c[f>>2]|0;if(d>>>0>=(c[w+8>>2]|0)>>>0){em(w,1)|0;d=c[f>>2]|0}c[f>>2]=d+1;a[d>>0]=40;c[t>>2]=c[r>>2];c[t+4>>2]=c[r+4>>2];c[t+8>>2]=c[r+8>>2];c[t+12>>2]=c[r+12>>2];Qb(w,t);Yb(w,p);c[t>>2]=c[s>>2];c[t+4>>2]=c[s+4>>2];c[t+8>>2]=c[s+8>>2];c[t+12>>2]=c[s+12>>2];Qb(w,t);Yb(w,q)}gm(w,59731)|0;d=u+140|0;j=+g[d>>2];f=u+56|0;if(j>0.0){Zb(w,j,f);Zb(w,+g[d>>2],u+96|0)}else{Zb(w,0.0,f);Zb(w,1.0,u+96|0)}im(w)|0;k=w+4|0;d=c[k>>2]|0;i=w+8|0;f=d>>>0>=(c[i>>2]|0)>>>0;if(v){if(f){em(w,1)|0;d=c[k>>2]|0}c[k>>2]=d+1;a[d>>0]=93}else{if(f){em(w,1)|0;d=c[k>>2]|0}c[k>>2]=d+1;a[d>>0]=41}d=c[k>>2]|0;if(d>>>0>=(c[i>>2]|0)>>>0){em(w,1)|0;d=c[k>>2]|0}a[d>>0]=0;v=c[w>>2]|0;c[k>>2]=v;Ub(b,59728,v);hm(w)}l=x;return}function Xb(a){a=a|0;Tb((c[a+16>>2]|0)+56|0);Ub(a,59728,173886);return}function Yb(a,b){a=a|0;b=+b;var c=0,d=0;c=l;l=l+1024|0;d=c;Rb(d,b);gm(a,d)|0;l=c;return}function Zb(a,b,c){a=a|0;b=+b;c=c|0;var d=0,e=0,f=0;d=l;l=l+1040|0;f=d;e=d+8|0;h[f>>3]=b;qL(e,59734,f)|0;Sb(e,1);Tb(c);Vb(a,e,173886);l=d;return}function _b(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0;e=l;l=l+1040|0;i=e;f=e+16|0;g=c[11344+(c[(c[a+16>>2]|0)+12>>2]<<2)>>2]|0;gm(g,59843)|0;c[i>>2]=c[d>>2];c[i+4>>2]=c[d+4>>2];c[i+8>>2]=c[d+8>>2];c[i+12>>2]=c[d+12>>2];Qb(g,i);Rb(f,+h[d+16>>3]-+h[d>>3]);gm(g,f)|0;Rb(f,+h[d+24>>3]-+h[d+8>>3]);gm(g,f)|0;Ub(a,174185,c[b+8>>2]|0);l=e;return}function $b(a){a=a|0;var b=0;switch(c[a+64>>2]|0){case 0:{b=zr(c[a>>2]|0)|0;ns(b,c[(c[a+16>>2]|0)+8>>2]|0,60630,0)|0;Ar(b);break}case 1:{wx(c[(c[a>>2]|0)+168>>2]|0);break}default:{}}return}function ac(b){b=b|0;var d=0,e=0,f=0,g=0;f=l;l=l+16|0;d=f;e=c[(c[b+16>>2]|0)+8>>2]|0;if(!(c[41889]|0)){c[41889]=c[4442];c[41890]=9;c[41891]=17}c[(c[e+64>>2]|0)+8>>2]=167556;bc(e,1);c[d>>2]=0;a[d+4>>0]=(a[(c[e+16>>2]|0)+115>>0]|0)==1&1;g=c[b+64>>2]|0;a[d+5>>0]=((g|0)==0|(g|0)==3)&1;a[d+6>>0]=0;cc(e,b,1,d);l=f;return}function bc(a,b){a=a|0;b=b|0;var d=0;c[a>>2]=c[a>>2]&-9;d=Kp(a)|0;while(1){if(!d)break;bc(d,0);d=Lp(d)|0}a:do if(b|0){b=eo(a)|0;while(1){if(!b)break a;c[b>>2]=c[b>>2]&-9;d=Qm(a,b)|0;while(1){if(!d)break;c[d>>2]=c[d>>2]&-9;d=Sm(a,d)|0}b=fo(a,b)|0}}while(0);return}function cc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l;l=l+16|0;p=q+8|0;o=q;n=(d|0)!=0;if(n){m=Rl(11764,c[4345]|0)|0;To(a,1,86799,12,0);To(a,2,86799,12,0);To(a,0,86799,-12,0);f=dc(a,0,m)|0;j=eo(a)|0;i=0;g=0;while(1){if(!j)break;if(!(WJ(En(j)|0,93039,7)|0)){k=g;g=ec(m,En(j)|0)|0}else{k=g+1|0;g=g+f|0}c[(Mo(j,86799,0)|0)+8>>2]=g;h=Qm(a,j)|0;g=i;while(1){if(!h)break;c[(Mo(h,86799,0)|0)+8>>2]=g;h=Sm(a,h)|0;g=g+1|0}j=fo(a,j)|0;i=g;g=k}Ll(m)|0}else f=0;m=c[e>>2]|0;c[e>>2]=m+1;fc(b,m);nr(b,82337)|0;gc(a,b,d,e);hc(a,b,e);nr(b,82308)|0;fc(b,c[e>>2]|0);if(n){c[o>>2]=f;tr(b,59846,o)}else{c[p>>2]=c[(Mo(a,86799,0)|0)+8>>2];tr(b,59866,p)}jc(a,b,d,ic(a,b,d,e)|0,e);kc(a,b,d,e);nr(b,134901)|0;p=(c[e>>2]|0)+-1|0;c[e>>2]=p;fc(b,p);if(n)nr(b,95830)|0;else nr(b,68190)|0;l=q;return}function dc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;if((to(a)|0)!=(a|0)){e=b+1|0;c[(Mo(a,86799,0)|0)+8>>2]=b;if(!(WJ(En(a)|0,93039,7)|0)){b=En(a)|0;wc(d,b,c[(Mo(a,86799,0)|0)+8>>2]|0);b=e}else b=e}e=Kp(a)|0;while(1){if(!e)break;a=dc(e,b,d)|0;e=Lp(e)|0;b=a}return b|0}function ec(a,b){a=a|0;b=b|0;a=bb[c[a>>2]&31](a,b,512)|0;if(!a)a=-1;else a=c[a+12>>2]|0;return a|0}function fc(a,b){a=a|0;b=b|0;while(1){if((b|0)<=0)break;nr(a,60598)|0;b=b+-1|0}return}function gc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;h=l;l=l+32|0;g=h+16|0;f=h+8|0;i=h;j=En(a)|0;fc(b,c[e>>2]|0);c[i>>2]=nc(j,e)|0;tr(b,59954,i);if(d|0){nr(b,82308)|0;fc(b,c[e>>2]|0);j=(rn(a)|0)!=0;c[f>>2]=j?92685:122100;tr(b,60568,f);fc(b,c[e>>2]|0);j=(tn(a)|0)!=0;c[g>>2]=j?92685:122100;tr(b,60585,g)}l=h;return}function hc(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+16|0;n=o+8|0;m=o;i=to(b)|0;j=c[b>>2]&3;f=Em(i,j,0)|0;a:do if(f|0){k=e+5|0;while(1){if(!f)break a;g=Km(b,f)|0;do if(g|0){h=f+8|0;if(!(a[g>>0]|0)){g=c[h>>2]|0;if((a[g>>0]|0)!=108)break;if(yJ(g,86240)|0)break}nr(d,82308)|0;fc(d,c[e>>2]|0);c[m>>2]=nc(c[h>>2]|0,e)|0;tr(d,60004,m);if(a[k>>0]|0?pc(c[h>>2]|0)|0:0){qc(Km(b,f)|0,d,e);break}c[n>>2]=nc(Km(b,f)|0,e)|0;tr(d,60011,n)}while(0);f=Em(i,j,f)|0}}while(0);l=o;return}function ic(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;i=l;l=l+16|0;h=i;f=Kp(a)|0;if(f){nr(b,82308)|0;g=c[e>>2]|0;c[e>>2]=g+1;fc(b,g);g=(d|0)!=0;if(g){nr(b,59928)|0;a=0;d=f}else{nr(b,59988)|0;fc(b,c[e>>2]|0);a=0;d=f}while(1){if(!d)break;if(!a)a=1;else nr(b,82308)|0;if(g)oc(d,b,e);else{c[h>>2]=c[(Mo(d,86799,0)|0)+8>>2];tr(b,122187,h)}d=Lp(d)|0}if(g)a=1;else{c[e>>2]=(c[e>>2]|0)+-1;nr(b,134901)|0;fc(b,c[e>>2]|0);nr(b,82303)|0;a=1}}else a=0;l=i;return a|0}function jc(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;g=eo(a)|0;if(!g){if((d|0)!=0&(e|0)!=0){c[f>>2]=(c[f>>2]|0)+-1;nr(b,134901)|0;fc(b,c[f>>2]|0);nr(b,82303)|0}}else{nr(b,82308)|0;h=(d|0)!=0;if(h)if(!e){e=c[f>>2]|0;c[f>>2]=e+1;fc(b,e);nr(b,59928)|0;e=0}else e=0;else{e=c[f>>2]|0;c[f>>2]=e+1;fc(b,e);nr(b,59942)|0;fc(b,c[f>>2]|0);e=0}while(1){if(!g)break;if(WJ(En(g)|0,93039,7)|0){do if(e)if(h){nr(b,82308)|0;break}else{nr(b,86030)|0;break}else e=1;while(0);mc(g,b,d,f)}g=fo(a,g)|0}c[f>>2]=(c[f>>2]|0)+-1;nr(b,134901)|0;fc(b,c[f>>2]|0);nr(b,82303)|0}return}function kc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=eo(a)|0;a:do if(f|0){while(1){if(!f)break a;if(Qm(a,f)|0)break;f=fo(a,f)|0}nr(b,82308)|0;i=c[e>>2]|0;c[e>>2]=i+1;fc(b,i);nr(b,59878)|0;i=(d|0)!=0;if(i)g=0;else{fc(b,c[e>>2]|0);g=0}while(1){if(!f)break;h=Qm(a,f)|0;while(1){if(!h)break;do if(g)if(i){nr(b,82308)|0;break}else{nr(b,86030)|0;break}else g=1;while(0);lc(h,b,d,e);h=Sm(a,h)|0}f=fo(a,f)|0}c[e>>2]=(c[e>>2]|0)+-1;nr(b,134901)|0;fc(b,c[e>>2]|0);nr(b,82303)|0}while(0);return}function lc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;j=l;l=l+32|0;i=j+24|0;h=j+16|0;g=j+8|0;f=j;if(!d){c[i>>2]=c[(Mo(a,86799,0)|0)+8>>2];tr(b,122187,i)}else{i=c[e>>2]|0;c[e>>2]=i+1;fc(b,i);nr(b,82337)|0;fc(b,c[e>>2]|0);c[f>>2]=c[(Mo(a,86799,0)|0)+8>>2];tr(b,59890,f);fc(b,c[e>>2]|0);c[g>>2]=c[(Mo(c[((c[a>>2]&3|0)==3?a:a+48|0)+40>>2]|0,86799,0)|0)+8>>2];tr(b,59904,g);fc(b,c[e>>2]|0);c[h>>2]=c[(Mo(c[((c[a>>2]&3|0)==2?a:a+-48|0)+40>>2]|0,86799,0)|0)+8>>2];tr(b,59917,h);hc(a,b,e);nr(b,134901)|0;i=(c[e>>2]|0)+-1|0;c[e>>2]=i;fc(b,i);nr(b,68190)|0}l=j;return}function mc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;i=l;l=l+32|0;h=i+16|0;g=i+8|0;f=i;if(!d){c[h>>2]=c[(Mo(a,86799,0)|0)+8>>2];tr(b,122187,h)}else{h=c[e>>2]|0;c[e>>2]=h+1;fc(b,h);nr(b,82337)|0;fc(b,c[e>>2]|0);c[f>>2]=c[(Mo(a,86799,0)|0)+8>>2];tr(b,59890,f);fc(b,c[e>>2]|0);c[g>>2]=nc(En(a)|0,e)|0;tr(b,59954,g);hc(a,b,e);nr(b,134901)|0;h=(c[e>>2]|0)+-1|0;c[e>>2]=h;fc(b,h);nr(b,68190)|0}l=i;return}function nc(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=d+4|0;if(a[g>>0]|0)b=zB(b)|0;if(!(c[41892]|0)){dm(167568,1024,0);e=b}else e=b;a:while(1){f=a[e>>0]|0;switch(f<<24>>24){case 0:break a;case 34:{gm(167568,59967)|0;break}case 92:{gm(167568,81579)|0;break}case 47:{gm(167568,59970)|0;break}case 8:{gm(167568,59973)|0;break}case 12:{gm(167568,59976)|0;break}case 10:{gm(167568,59979)|0;break}case 13:{gm(167568,59982)|0;break}case 9:{gm(167568,59985)|0;break}default:{d=c[41893]|0;if(d>>>0>=(c[41894]|0)>>>0){em(167568,1)|0;d=c[41893]|0}c[41893]=d+1;a[d>>0]=f}}e=e+1|0}d=c[41893]|0;if(d>>>0>=(c[41894]|0)>>>0){em(167568,1)|0;d=c[41893]|0}a[d>>0]=0;d=c[41892]|0;c[41893]=d;if(a[g>>0]|0)$I(b);return d|0}function oc(a,b,c){a=a|0;b=b|0;c=c|0;cc(a,b,0,c);a=Kp(a)|0;while(1){if(!a)break;nr(b,82308)|0;oc(a,b,c);a=Lp(a)|0}return}function pc(b){b=b|0;var c=0;c=b+1|0;a:do if((a[b>>0]|0)==95){b=(a[c>>0]|0)+-100<<24>>24;switch(((b&255)>>>2|b<<6&255)<<24>>24){case 0:{if(!(yJ(c,60525)|0)){b=1;break a}break}case 2:{if(!(yJ(c,60531)|0)){b=1;break a}break}case 1:{if(!(yJ(c,60538)|0)){b=1;break a}return (yJ(c,60552)|0)==0|0}case 4:{if(!(yJ(c,60545)|0)){b=1;break a}b=(yJ(c,60560)|0)==0&1;break a}default:{b=0;break a}}b=0}else b=0;while(0);return b|0}function qc(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;i=l;l=l+16|0;f=i;do if(b|0?a[b>>0]|0:0){h=xt(b)|0;if(!h){c[f>>2]=b;$l(0,60016,f)|0;break}nr(d,134901)|0;g=c[e>>2]|0;c[e>>2]=g+1;fc(d,g);nr(d,60043)|0;g=h+8|0;b=0;f=0;while(1){if((f|0)>=(c[h>>2]|0))break;if(!b)b=1;else nr(d,82308)|0;rc((c[g>>2]|0)+(f*80|0)|0,d,e);f=f+1|0}c[e>>2]=(c[e>>2]|0)+-1;nr(d,134901)|0;fc(d,c[e>>2]|0);nr(d,82303)|0;yt(h)}while(0);l=i;return}function rc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0.0,C=0.0,D=0.0;A=l;l=l+240|0;y=A+224|0;x=A+216|0;w=A+208|0;v=A+200|0;u=A+192|0;t=A+184|0;s=A+176|0;r=A+152|0;q=A+136|0;p=A+128|0;o=A+112|0;n=A+104|0;m=A+96|0;k=A+88|0;j=A+72|0;i=A+48|0;z=A+40|0;g=A+8|0;f=A;e=c[d>>2]|0;c[d>>2]=e+1;fc(b,e);nr(b,82337)|0;fc(b,c[d>>2]|0);e=c[a>>2]|0;a:do switch(e|0){case 1:case 0:{c[f>>2]=(e|0)==0?69:101;tr(b,60046,f);fc(b,c[d>>2]|0);D=+h[a+16>>3];C=+h[a+24>>3];B=+h[a+32>>3];h[g>>3]=+h[a+8>>3];h[g+8>>3]=D;h[g+16>>3]=C;h[g+24>>3]=B;tr(b,60059,g);break}case 3:case 2:{c[z>>2]=(e|0)==2?80:112;tr(b,60046,z);fc(b,c[d>>2]|0);sc(b,a+8|0);break}case 5:case 4:{c[i>>2]=(e|0)==4?66:98;tr(b,60046,i);fc(b,c[d>>2]|0);sc(b,a+8|0);break}case 6:{tr(b,60094,A+56|0);fc(b,c[d>>2]|0);sc(b,a+8|0);break}case 7:{tr(b,60106,A+64|0);fc(b,c[d>>2]|0);D=+h[a+16>>3];h[j>>3]=+h[a+8>>3];h[j+8>>3]=D;tr(b,60118,j);fc(b,c[d>>2]|0);z=c[a+24>>2]|0;c[k>>2]=(z|0)==0?108:(z|0)==1?99:114;tr(b,60140,k);fc(b,c[d>>2]|0);h[m>>3]=+h[a+32>>3];tr(b,60156,m);fc(b,c[d>>2]|0);c[n>>2]=nc(c[a+40>>2]|0,d)|0;tr(b,60173,n);break}case 9:case 8:{c[o>>2]=(e|0)==8?67:99;tr(b,60046,o);fc(b,c[d>>2]|0);tr(b,60187,A+120|0);fc(b,c[d>>2]|0);c[p>>2]=nc(c[a+8>>2]|0,d)|0;tr(b,60204,p);break}case 13:case 14:{c[q>>2]=(e|0)==13?67:99;tr(b,60046,q);fc(b,c[d>>2]|0);switch(c[a+8>>2]|0){case 0:{tr(b,60187,A+144|0);fc(b,c[d>>2]|0);c[r>>2]=nc(c[a+16>>2]|0,d)|0;tr(b,60204,r);break a}case 1:{tr(b,60219,A+160|0);fc(b,c[d>>2]|0);tc(b,a+16|0,d);break a}default:{tr(b,60238,A+168|0);fc(b,c[d>>2]|0);uc(b,a+16|0,d);break a}}}case 10:{tr(b,60257,s);fc(b,c[d>>2]|0);h[t>>3]=+h[a+8>>3];tr(b,60269,t);fc(b,c[d>>2]|0);c[u>>2]=nc(c[a+16>>2]|0,d)|0;tr(b,60285,u);break}case 11:{tr(b,60299,v);fc(b,c[d>>2]|0);c[w>>2]=nc(c[a+8>>2]|0,d)|0;tr(b,60311,w);break}case 15:{tr(b,60326,x);fc(b,c[d>>2]|0);c[y>>2]=c[a+8>>2];tr(b,60338,y);break}default:{}}while(0);z=(c[d>>2]|0)+-1|0;c[d>>2]=z;fc(b,z);nr(b,68190)|0;l=A;return}function sc(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0.0;j=l;l=l+48|0;i=j+32|0;g=j+16|0;f=j+8|0;e=c[b>>2]|0;d=c[b+4>>2]|0;tr(a,60499,j);b=0;while(1){if((b|0)>=(e|0))break;if((b|0)>0)tr(a,86030,f);k=+h[d+(b*24|0)+8>>3];h[g>>3]=+h[d+(b*24|0)>>3];h[g+8>>3]=k;tr(a,60511,g);b=b+1|0}tr(a,60452,i);l=j;return}function tc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0,i=0;e=l;l=l+32|0;f=e+16|0;i=e;fc(a,c[d>>2]|0);g=+h[b+8>>3];h[i>>3]=+h[b>>3];h[i+8>>3]=g;tr(a,60455,i);fc(a,c[d>>2]|0);g=+h[b+24>>3];h[f>>3]=+h[b+16>>3];h[f+8>>3]=g;tr(a,60477,f);fc(a,c[d>>2]|0);vc(a,c[b+32>>2]|0,c[b+36>>2]|0,d);l=e;return}function uc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0,i=0.0,j=0;e=l;l=l+48|0;f=e+24|0;j=e;fc(a,c[d>>2]|0);g=+h[b+8>>3];i=+h[b+16>>3];h[j>>3]=+h[b>>3];h[j+8>>3]=g;h[j+16>>3]=i;tr(a,60354,j);fc(a,c[d>>2]|0);i=+h[b+32>>3];g=+h[b+40>>3];h[f>>3]=+h[b+24>>3];h[f+8>>3]=i;h[f+16>>3]=g;tr(a,60382,f);fc(a,c[d>>2]|0);vc(a,c[b+48>>2]|0,c[b+52>>2]|0,d);l=e;return}function vc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,i=0,j=0,k=0,m=0,n=0,o=0.0;m=l;l=l+48|0;k=m+32|0;j=m+16|0;i=m+8|0;tr(a,60410,m);f=0;while(1){if((f|0)>=(b|0))break;if((f|0)>0)tr(a,86030,i);o=+g[d+(f<<3)>>2];n=nc(c[d+(f<<3)+4>>2]|0,e)|0;h[j>>3]=o;c[j+8>>2]=n;tr(a,60421,j);f=f+1|0}tr(a,60452,k);l=m;return}function wc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;f=g;e=bb[c[a>>2]&31](a,b,512)|0;if(e){if((c[e+12>>2]|0)!=(d|0)){c[f>>2]=b;$l(0,60601,f)|0}}else{f=aJ(1,16)|0;c[f+8>>2]=HL(b)|0;c[f+12>>2]=d;bb[c[a>>2]&31](a,f,1)|0}l=g;return}function xc(a,b,d){a=a|0;b=b|0;d=d|0;$I(c[b+8>>2]|0);$I(b);return}function yc(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;b=l;l=l+32|0;d=b+24|0;e=b+16|0;g=b;f=c[a+16>>2]|0;nr(a,61456)|0;j=c[c[a+12>>2]>>2]|0;i=c[j+4>>2]|0;h=c[j+8>>2]|0;c[g>>2]=c[j>>2];c[g+4>>2]=i;c[g+8>>2]=h;tr(a,61466,g);c[e>>2]=En(c[f+8>>2]|0)|0;tr(a,61501,e);c[d>>2]=O(c[a+168>>2]|0,c[a+164>>2]|0)|0;tr(a,61514,d);nr(a,61527)|0;nr(a,61537)|0;nr(a,61545)|0;nr(a,61553)|0;nr(a,61561)|0;nr(a,61569)|0;nr(a,61577)|0;nr(a,61581)|0;nr(a,61586)|0;l=b;return}function zc(a){a=a|0;nr(a,61437)|0;return}function Ac(a){a=a|0;c[41896]=2;return}function Bc(a){a=a|0;c[41896]=1;return}function Cc(a){a=a|0;c[41896]=2;return}function Dc(a){a=a|0;c[41896]=0;return}function Ec(a){a=a|0;c[41896]=2;return}function Fc(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0.0,i=0.0,j=0,k=0.0,m=0,n=0,o=0,p=0,q=0.0,r=0.0,s=0;p=l;l=l+80|0;o=p;m=c[(c[b+16>>2]|0)+16>>2]|0;n=c[41896]|0;f=c[e+4>>2]|0;g=+h[b+352>>3]*+h[f+16>>3];i=c[b+360>>2]|0?1.5707963267948966:0.0;j=c[e>>2]|0;k=g*.3333333333333333*+((sJ(j)|0)>>>0);f=c[f+8>>2]|0;if(!f)f=-1;else f=c[f+20>>2]|0;s=a[e+48>>0]|0;r=+h[d>>3];q=+h[d+8>>3];e=Pc(j)|0;c[o>>2]=4;c[o+4>>2]=s<<24>>24==108?0:s<<24>>24==114?2:1;c[o+8>>2]=m;c[o+12>>2]=n;c[o+16>>2]=0;c[o+20>>2]=f;h[o+24>>3]=g;h[o+32>>3]=i;c[o+40>>2]=6;h[o+48>>3]=g;h[o+56>>3]=k;c[o+64>>2]=~~(r+(r>=0.0?.5:-.5));c[o+68>>2]=~~(q+(q+-72.0>=0.0?-71.5:-72.5));c[o+72>>2]=e;tr(b,61382,o);l=p;return}function Gc(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+32|0;j=n;i=n+20|0;m=e+32|0;a:do switch(c[m>>2]|0){case 5:{f=0;while(1){g=c[12652+(f<<2)>>2]|0;if((f|0)==8)break a;h=c[e>>2]|0;if((a[g>>0]|0)==(a[h>>0]|0)?(yJ(g,h)|0)==0:0){k=10;break a}f=f+1|0}}case 1:{g=e+1|0;h=e+2|0;f=(Oc(i,d[e>>0]|0,d[g>>0]|0,d[h>>0]|0)|0)+32|0;if(!(c[i>>2]|0))k=10;else{o=d[e>>0]|0;i=d[g>>0]|0;k=d[h>>0]|0;c[j>>2]=0;c[j+4>>2]=f;c[j+8>>2]=o;c[j+12>>2]=i;c[j+16>>2]=k;tr(b,61325,j);k=10}break}default:ma(123205,60722,163,60753)}while(0);if((k|0)==10)c[e>>2]=f;c[m>>2]=6;l=n;return}function Hc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0,i=0.0,j=0,k=0,m=0.0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0;e=l;l=l+112|0;f=e+8|0;u=e+104|0;t=e;k=c[a+16>>2]|0;s=~~+h[k+152>>3];r=c[k+16>>2]|0;q=c[k+56>>2]|0;p=c[41896]|0;Mc(k,u,t);n=+h[b>>3];k=~~(n+(n>=0.0?.5:-.5));m=+h[b+8>>3];j=~~(m+(m>=0.0?.5:-.5));i=+h[b+16>>3];n=i-n;g=+h[b+24>>3];m=g-m;b=c[u>>2]|0;o=+h[t>>3];c[f>>2]=1;c[f+4>>2]=1;c[f+8>>2]=b;c[f+12>>2]=s;c[f+16>>2]=r;c[f+20>>2]=q;c[f+24>>2]=p;c[f+28>>2]=0;c[f+32>>2]=d|0?20:-1;h[f+40>>3]=o;c[f+48>>2]=0;h[f+56>>3]=0.0;c[f+64>>2]=k;c[f+68>>2]=j;c[f+72>>2]=~~(n+(n>=0.0?.5:-.5));c[f+76>>2]=~~(m+(m>=0.0?.5:-.5));c[f+80>>2]=k;c[f+84>>2]=j;c[f+88>>2]=~~(i+(i>=0.0?.5:-.5));c[f+92>>2]=~~(g+(g>=0.0?.5:-.5));tr(a,61260,f);l=e;return}function Ic(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;f=l;l=l+96|0;g=f+8|0;o=f+80|0;p=f;q=c[a+16>>2]|0;n=~~+h[q+152>>3];m=c[q+16>>2]|0;k=c[q+56>>2]|0;j=c[41896]|0;Mc(q,o,p);o=c[o>>2]|0;i=+h[p>>3];c[g>>2]=2;c[g+4>>2]=3;c[g+8>>2]=o;c[g+12>>2]=n;c[g+16>>2]=m;c[g+20>>2]=k;c[g+24>>2]=j;c[g+28>>2]=0;c[g+32>>2]=e|0?20:-1;h[g+40>>3]=i;c[g+48>>2]=0;c[g+52>>2]=0;c[g+56>>2]=0;c[g+60>>2]=0;c[g+64>>2]=0;c[g+68>>2]=d+1;tr(a,61164,g);Nc(a,b,d,1);l=f;return}function Jc(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0.0,E=0.0,F=0;C=l;l=l+192|0;B=C+176|0;z=C+168|0;A=C+104|0;y=C+96|0;i=C+88|0;u=C+180|0;v=C+80|0;w=C+16|0;x=C;f=a+16|0;e=c[f>>2]|0;q=~~+h[e+152>>3];r=c[e+16>>2]|0;s=c[41896]|0;if((d|0)<=3)ma(60715,60722,360,60742);t=_I((d*140|0)+140|0)|0;Mc(e,u,v);if(!g){o=4;j=0;k=-1}else{o=5;j=c[(c[f>>2]|0)+56>>2]|0;k=20}E=+h[b>>3];n=w+48|0;h[n>>3]=E;D=+h[b+8>>3];h[w+56>>3]=D;c[i>>2]=~~(E+(E>=0.0?.5:-.5));c[i+4>>2]=~~(D+(D>=0.0?.5:-.5));m=x+8|0;e=t+(qL(t,73932,i)|0)|0;p=1;g=0;while(1){i=g+3|0;if((i|0)>=(d|0))break;c[w>>2]=c[n>>2];c[w+4>>2]=c[n+4>>2];c[w+8>>2]=c[n+8>>2];c[w+12>>2]=c[n+12>>2];f=1;while(1){if((f|0)==4){f=1;break}F=f+g|0;h[w+(f<<4)>>3]=+h[b+(F<<4)>>3];h[w+(f<<4)+8>>3]=+h[b+(F<<4)+8>>3];f=f+1|0}while(1){if((f|0)==7)break;QA(x,w,3,+(f|0)*.16666666666666666,0,0);D=+h[x>>3];E=+h[m>>3];c[y>>2]=~~(D+(D>=0.0?.5:-.5));c[y+4>>2]=~~(E+(E>=0.0?.5:-.5));f=f+1|0;e=e+(qL(e,73932,y)|0)|0}p=p+6|0;g=i}f=c[u>>2]|0;E=+h[v>>3];c[A>>2]=3;c[A+4>>2]=o;c[A+8>>2]=f;c[A+12>>2]=q;c[A+16>>2]=r;c[A+20>>2]=j;c[A+24>>2]=s;c[A+28>>2]=0;c[A+32>>2]=k;h[A+40>>3]=E;c[A+48>>2]=0;c[A+52>>2]=0;c[A+56>>2]=0;c[A+60>>2]=p;tr(a,61215,A);c[z>>2]=t;tr(a,73939,z);$I(t);f=p+-1|0;e=0;while(1){if((e|0)>=(p|0))break;c[B>>2]=((e|0)%(f|0)|0|0)!=0&1;tr(a,73944,B);e=e+1|0}nr(a,134901)|0;l=C;return}function Kc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0,i=0,j=0,k=0,m=0,n=0,o=0;e=l;l=l+96|0;f=e+8|0;m=e+80|0;n=e;o=c[a+16>>2]|0;k=~~+h[o+152>>3];j=c[o+16>>2]|0;i=c[41896]|0;Mc(o,m,n);m=c[m>>2]|0;g=+h[n>>3];c[f>>2]=2;c[f+4>>2]=1;c[f+8>>2]=m;c[f+12>>2]=k;c[f+16>>2]=j;c[f+20>>2]=0;c[f+24>>2]=i;c[f+28>>2]=0;c[f+32>>2]=0;h[f+40>>3]=g;c[f+48>>2]=0;c[f+52>>2]=0;c[f+56>>2]=0;c[f+60>>2]=0;c[f+64>>2]=0;c[f+68>>2]=d;tr(a,61164,f);Nc(a,b,d,0);l=e;return}function Lc(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;tr(a,61158,e);l=d;return}function Mc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;switch(c[a+144>>2]|0){case 1:{e=10.0;a=1;break}case 2:{e=10.0;a=2;break}default:{e=0.0;a=0}}c[b>>2]=a;h[d>>3]=e;return}function Nc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0.0,m=0.0;j=l;l=l+16|0;i=j+8|0;g=j;f=0;while(1){if((f|0)>=(d|0))break;m=+h[b+(f<<4)>>3];k=+h[b+(f<<4)+8>>3];c[g>>2]=~~(m+(m>=0.0?.5:-.5));c[g+4>>2]=~~(k+(k>=0.0?.5:-.5));tr(a,73932,g);f=f+1|0}if(e|0){k=+h[b>>3];m=+h[b+8>>3];c[i>>2]=~~(k+(k>=0.0?.5:-.5));c[i+4>>2]=~~(m+(m>=0.0?.5:-.5));tr(a,73932,i)}nr(a,134901)|0;l=j;return}function Oc(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;c[a>>2]=0;k=c[41897]|0;h=195075;g=0;i=-1;while(1){if((g|0)>=(k|0)){l=6;break}m=(b[170808+(g<<1)>>1]|0)-d|0;n=(b[171320+(g<<1)>>1]|0)-e|0;j=(b[171832+(g<<1)>>1]|0)-f|0;j=(O(n,n)|0)+(O(m,m)|0)+(O(j,j)|0)|0;if((j|0)<(h|0))if(!j)break;else{h=j;i=g}g=g+1|0}if((l|0)==6){c[41897]=k+1;if((k|0)==256)g=i;else{b[170808+(g<<1)>>1]=d;b[171320+(g<<1)>>1]=e;b[171832+(g<<1)>>1]=f;c[a>>2]=1}}return g|0}function Pc(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;h=i;d=c[41898]|0;if(!d){c[41899]=64;d=_I(64)|0;c[41898]=d;e=0}else e=0;while(1){g=b+1|0;f=a[b>>0]|0;if(!(f<<24>>24))break;b=c[41899]|0;if((e|0)>(b+-8|0)){d=b<<1;c[41899]=d;d=bJ(c[41898]|0,d)|0;c[41898]=d;d=d+e|0}if(f<<24>>24<=-1){a[d>>0]=92;c[h>>2]=f&255;qL(d+1|0,74057,h)|0;b=g;d=d+4|0;e=e+4|0;continue}if(f<<24>>24==92){a[d>>0]=92;e=e+1|0;d=d+1|0}a[d>>0]=f;b=g;d=d+1|0;e=e+1|0}a[d>>0]=0;l=i;return c[41898]|0}function Qc(b){b=b|0;var d=0,e=0,f=0;e=c[b+16>>2]|0;switch(c[b+64>>2]|0){case 0:{nr(b,61053)|0;d=e+208|0;e=c[d>>2]|0;if(e|0?a[e>>0]|0:0){nr(b,61067)|0;nr(b,sw(c[d>>2]|0)|0)|0;nr(b,134901)|0}break}case 1:{d=e+208|0;f=c[d>>2]|0;if(f|0?a[f>>0]|0:0){nr(b,61067)|0;nr(b,sw(c[d>>2]|0)|0)|0;nr(b,87638)|0;nr(b,sw(En(c[e+8>>2]|0)|0)|0)|0;nr(b,134901)|0}break}case 3:{f=sw(En(c[e+8>>2]|0)|0)|0;nr(b,61076)|0;nr(b,f)|0;nr(b,61086)|0;nr(b,f)|0;nr(b,61041)|0;break}default:{}}return}function Rc(a){a=a|0;var b=0;b=c[a+16>>2]|0;switch(c[a+64>>2]|0){case 2:{Tc(a,c[b+264>>2]|0,c[b+272>>2]|0,c[b+268>>2]|0,c[b+208>>2]|0,c[b+228>>2]|0,c[b+244>>2]|0,c[b+212>>2]|0);break}case 3:{Tc(a,c[b+264>>2]|0,c[b+272>>2]|0,c[b+268>>2]|0,c[b+208>>2]|0,c[b+228>>2]|0,c[b+244>>2]|0,c[b+212>>2]|0);nr(a,61045)|0;break}default:{}}return}function Sc(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;g=c[a+16>>2]|0;Tc(a,c[g+264>>2]|0,c[g+272>>2]|0,c[g+268>>2]|0,b,d,e,f);return}function Tc(b,d,e,f,g,i,j,k){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;j=j|0;k=k|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0.0;y=l;l=l+128|0;x=y+120|0;u=y+112|0;t=y+96|0;s=y+80|0;r=y+56|0;w=y+48|0;q=y+40|0;v=y+24|0;p=y;a:do if((e|0)!=0&(f|0)!=0){m=f+10|0;if((c[41900]|0)<(f|0)){c[41900]=m;o=bJ(c[41901]|0,m<<3)|0;c[41901]=o}else o=c[41901]|0;m=0;while(1){if((m|0)>=(f|0))break;z=+h[e+(m<<4)>>3];c[o+(m<<3)>>2]=~~(z+(z>=0.0?.5:-.5));z=+h[e+(m<<4)+8>>3];c[o+(m<<3)+4>>2]=~~(z+(z>=0.0?.5:-.5));m=m+1|0}n=b+64|0;m=c[n>>2]|0;e=(g|0)!=0;if(e&(m|0)==0){if(!(a[g>>0]|0))break;switch(d|0){case 0:{v=c[o>>2]|0;w=c[o+12>>2]|0;x=c[o+8>>2]|0;f=c[o+4>>2]|0;c[p>>2]=g;c[p+4>>2]=v;c[p+8>>2]=w;c[p+12>>2]=x;c[p+16>>2]=f;tr(b,60787,p);break a}case 1:{w=c[o>>2]|0;x=c[o+4>>2]|0;f=(c[o+8>>2]|0)-w|0;c[v>>2]=g;c[v+4>>2]=w;c[v+8>>2]=x;c[v+12>>2]=f;tr(b,60808,v);break a}case 2:{c[q>>2]=g;tr(b,60828,q);m=0;while(1){if((m|0)>=(f|0))break;v=c[41901]|0;x=c[v+(m<<3)+4>>2]|0;c[w>>2]=c[v+(m<<3)>>2];c[w+4>>2]=x;tr(b,60836,w);m=m+1|0}nr(b,134901)|0;break a}default:ma(123205,60843,63,60863)}}if(e&(m|0)==1){if(!(a[g>>0]|0))break;if(!d){w=c[o+12>>2]|0;x=c[o+8>>2]|0;f=c[o+4>>2]|0;c[r>>2]=c[o>>2];c[r+4>>2]=w;c[r+8>>2]=x;c[r+12>>2]=f;c[r+16>>2]=g;c[r+20>>2]=i;tr(b,60880,r);break}else ma(123205,60843,75,60863)}if((m&-2|0)==2){switch(d|0){case 1:{nr(b,60913)|0;break}case 0:{nr(b,60934)|0;break}case 2:{nr(b,60953)|0;break}default:ma(123205,60843,91,60863)}if(k|0?a[k>>0]|0:0){nr(b,66433)|0;nr(b,vw(k)|0)|0;nr(b,83714)|0}if(e?a[g>>0]|0:0){nr(b,60972)|0;nr(b,vw(g)|0)|0;nr(b,83714)|0}if(j|0?a[j>>0]|0:0){nr(b,67392)|0;nr(b,sw(j)|0)|0;nr(b,83714)|0}if(i|0?a[i>>0]|0:0){nr(b,60980)|0;nr(b,sw(i)|0)|0;nr(b,83714)|0}nr(b,60989)|0;nr(b,60997)|0;b:do switch(d|0){case 1:{f=c[41901]|0;w=c[f>>2]|0;x=c[f+4>>2]|0;f=(c[f+8>>2]|0)-w|0;c[s>>2]=w;c[s+4>>2]=x;c[s+8>>2]=f;tr(b,61007,s);break}case 0:{v=c[41901]|0;w=c[v+12>>2]|0;x=c[v+8>>2]|0;f=c[v+4>>2]|0;c[t>>2]=c[v>>2];c[t+4>>2]=w;c[t+8>>2]=x;c[t+12>>2]=f;tr(b,61016,t);break}case 2:{w=c[41901]|0;m=c[w+4>>2]|0;c[u>>2]=c[w>>2];c[u+4>>2]=m;tr(b,61028,u);m=1;while(1){if((m|0)>=(f|0))break b;v=c[41901]|0;w=c[v+(m<<3)+4>>2]|0;c[x>>2]=c[v+(m<<3)>>2];c[x+4>>2]=w;tr(b,61034,x);m=m+1|0}}default:{}}while(0);if((c[n>>2]|0)==3){nr(b,66257)|0;break}else{nr(b,61041)|0;break}}}while(0);l=y;return}function Uc(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;b=l;l=l+32|0;d=b+24|0;e=b+16|0;g=b;f=c[a+16>>2]|0;nr(a,61456)|0;j=c[c[a+12>>2]>>2]|0;i=c[j+4>>2]|0;h=c[j+8>>2]|0;c[g>>2]=c[j>>2];c[g+4>>2]=i;c[g+8>>2]=h;tr(a,61466,g);c[e>>2]=En(c[f+8>>2]|0)|0;tr(a,61501,e);c[d>>2]=O(c[a+168>>2]|0,c[a+164>>2]|0)|0;tr(a,61514,d);nr(a,61527)|0;nr(a,61537)|0;nr(a,61545)|0;nr(a,61553)|0;nr(a,61561)|0;nr(a,61569)|0;nr(a,61577)|0;nr(a,61581)|0;nr(a,61586)|0;l=b;return}function Vc(a){a=a|0;nr(a,61437)|0;return}function Wc(a){a=a|0;c[41902]=2;return}function Xc(a){a=a|0;c[41902]=1;return}function Yc(a){a=a|0;c[41902]=2;return}function Zc(a){a=a|0;c[41902]=0;return}function _c(a){a=a|0;c[41902]=2;return}function $c(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0.0,p=0.0,q=0;n=l;l=l+80|0;m=n;j=c[(c[b+16>>2]|0)+16>>2]|0;k=c[41902]|0;f=c[e+4>>2]|0;g=+h[b+352>>3]*+h[f+16>>3];i=c[b+360>>2]|0?1.5707963267948966:0.0;f=c[f+8>>2]|0;if(!f)f=-1;else f=c[f+20>>2]|0;q=a[e+48>>0]|0;p=+h[d>>3];o=+h[d+8>>3];e=jd(c[e>>2]|0)|0;c[m>>2]=4;c[m+4>>2]=q<<24>>24==108?0:q<<24>>24==114?2:1;c[m+8>>2]=j;c[m+12>>2]=k;c[m+16>>2]=0;c[m+20>>2]=f;h[m+24>>3]=g;h[m+32>>3]=i;c[m+40>>2]=4;h[m+48>>3]=0.0;h[m+56>>3]=0.0;c[m+64>>2]=~~(p+(p>=0.0?.5:-.5));c[m+68>>2]=~~(o+(o>=0.0?.5:-.5));c[m+72>>2]=e;tr(b,61382,m);l=n;return}function ad(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+32|0;j=n;i=n+20|0;m=e+32|0;a:do switch(c[m>>2]|0){case 5:{f=0;while(1){g=c[12652+(f<<2)>>2]|0;if((f|0)==8)break a;h=c[e>>2]|0;if((a[g>>0]|0)==(a[h>>0]|0)?(yJ(g,h)|0)==0:0){k=10;break a}f=f+1|0}}case 1:{g=e+1|0;h=e+2|0;f=(id(i,d[e>>0]|0,d[g>>0]|0,d[h>>0]|0)|0)+32|0;if(!(c[i>>2]|0))k=10;else{o=d[e>>0]|0;i=d[g>>0]|0;k=d[h>>0]|0;c[j>>2]=0;c[j+4>>2]=f;c[j+8>>2]=o;c[j+12>>2]=i;c[j+16>>2]=k;tr(b,61325,j);k=10}break}case 0:{f=0;k=10;break}default:ma(123205,61346,168,61365)}while(0);if((k|0)==10)c[e>>2]=f;c[m>>2]=6;l=n;return}function bd(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0,i=0.0,j=0,k=0,m=0.0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0;e=l;l=l+112|0;f=e+8|0;u=e+104|0;t=e;k=c[a+16>>2]|0;s=~~+h[k+152>>3];r=c[k+16>>2]|0;q=c[k+56>>2]|0;p=c[41902]|0;gd(k,u,t);n=+h[b>>3];k=~~(n+(n>=0.0?.5:-.5));m=+h[b+8>>3];j=~~(m+(m>=0.0?.5:-.5));i=+h[b+16>>3];n=i-n;g=+h[b+24>>3];m=g-m;b=c[u>>2]|0;o=+h[t>>3];c[f>>2]=1;c[f+4>>2]=1;c[f+8>>2]=b;c[f+12>>2]=s;c[f+16>>2]=r;c[f+20>>2]=q;c[f+24>>2]=p;c[f+28>>2]=0;c[f+32>>2]=d|0?20:-1;h[f+40>>3]=o;c[f+48>>2]=0;h[f+56>>3]=0.0;c[f+64>>2]=k;c[f+68>>2]=j;c[f+72>>2]=~~(n+(n>=0.0?.5:-.5));c[f+76>>2]=~~(m+(m>=0.0?.5:-.5));c[f+80>>2]=k;c[f+84>>2]=j;c[f+88>>2]=~~(i+(i>=0.0?.5:-.5));c[f+92>>2]=~~(g+(g>=0.0?.5:-.5));tr(a,61260,f);l=e;return}function cd(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;f=l;l=l+96|0;g=f+8|0;o=f+80|0;p=f;q=c[a+16>>2]|0;n=~~+h[q+152>>3];m=c[q+16>>2]|0;k=c[q+56>>2]|0;j=c[41902]|0;gd(q,o,p);o=c[o>>2]|0;i=+h[p>>3];c[g>>2]=2;c[g+4>>2]=3;c[g+8>>2]=o;c[g+12>>2]=n;c[g+16>>2]=m;c[g+20>>2]=k;c[g+24>>2]=j;c[g+28>>2]=0;c[g+32>>2]=e|0?20:-1;h[g+40>>3]=i;c[g+48>>2]=0;c[g+52>>2]=0;c[g+56>>2]=0;c[g+60>>2]=0;c[g+64>>2]=0;c[g+68>>2]=d+1;tr(a,61164,g);hd(a,b,d,1);l=f;return}function dd(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0.0,E=0.0,F=0;C=l;l=l+192|0;B=C+176|0;z=C+168|0;A=C+104|0;y=C+96|0;f=C+88|0;u=C+180|0;v=C+80|0;w=C+16|0;x=C;e=a+16|0;p=c[e>>2]|0;q=~~+h[p+152>>3];r=c[p+16>>2]|0;s=c[41902]|0;t=_I((d*140|0)+140|0)|0;gd(p,u,v);if(!g){o=4;j=0;k=-1}else{o=5;j=c[(c[e>>2]|0)+56>>2]|0;k=20}E=+h[b>>3];n=w+48|0;h[n>>3]=E;D=+h[b+8>>3];h[w+56>>3]=D;c[f>>2]=~~(E+(E>=0.0?.5:-.5));c[f+4>>2]=~~(D+(D>=0.0?.5:-.5));m=x+8|0;e=t+(qL(t,73932,f)|0)|0;p=1;g=0;while(1){i=g+3|0;if((i|0)>=(d|0))break;c[w>>2]=c[n>>2];c[w+4>>2]=c[n+4>>2];c[w+8>>2]=c[n+8>>2];c[w+12>>2]=c[n+12>>2];f=1;while(1){if((f|0)==4){f=1;break}F=f+g|0;h[w+(f<<4)>>3]=+h[b+(F<<4)>>3];h[w+(f<<4)+8>>3]=+h[b+(F<<4)+8>>3];f=f+1|0}while(1){if((f|0)==7)break;QA(x,w,3,+(f|0)*.16666666666666666,0,0);D=+h[x>>3];E=+h[m>>3];c[y>>2]=~~(D+(D>=0.0?.5:-.5));c[y+4>>2]=~~(E+(E>=0.0?.5:-.5));f=f+1|0;e=e+(qL(e,73932,y)|0)|0}p=p+6|0;g=i}f=c[u>>2]|0;E=+h[v>>3];c[A>>2]=3;c[A+4>>2]=o;c[A+8>>2]=f;c[A+12>>2]=q;c[A+16>>2]=r;c[A+20>>2]=j;c[A+24>>2]=s;c[A+28>>2]=0;c[A+32>>2]=k;h[A+40>>3]=E;c[A+48>>2]=0;c[A+52>>2]=0;c[A+56>>2]=0;c[A+60>>2]=p;tr(a,61215,A);c[z>>2]=t;tr(a,73939,z);$I(t);f=p+-1|0;e=0;while(1){if((e|0)>=(p|0))break;c[B>>2]=((e|0)%(f|0)|0|0)!=0&1;tr(a,73944,B);e=e+1|0}nr(a,134901)|0;l=C;return}function ed(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0,i=0,j=0,k=0,m=0,n=0,o=0;e=l;l=l+96|0;f=e+8|0;m=e+80|0;n=e;o=c[a+16>>2]|0;k=~~+h[o+152>>3];j=c[o+16>>2]|0;i=c[41902]|0;gd(o,m,n);m=c[m>>2]|0;g=+h[n>>3];c[f>>2]=2;c[f+4>>2]=1;c[f+8>>2]=m;c[f+12>>2]=k;c[f+16>>2]=j;c[f+20>>2]=0;c[f+24>>2]=i;c[f+28>>2]=0;c[f+32>>2]=0;h[f+40>>3]=g;c[f+48>>2]=0;c[f+52>>2]=0;c[f+56>>2]=0;c[f+60>>2]=0;c[f+64>>2]=0;c[f+68>>2]=d;tr(a,61164,f);hd(a,b,d,0);l=e;return}function fd(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;tr(a,61158,e);l=d;return}function gd(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;switch(c[a+144>>2]|0){case 1:{e=10.0;a=1;break}case 2:{e=10.0;a=2;break}default:{e=0.0;a=0}}c[b>>2]=a;h[d>>3]=e;return}function hd(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0.0,m=0.0;j=l;l=l+16|0;i=j+8|0;g=j;f=0;while(1){if((f|0)>=(d|0))break;m=+h[b+(f<<4)>>3];k=+h[b+(f<<4)+8>>3];c[g>>2]=~~(m+(m>=0.0?.5:-.5));c[g+4>>2]=~~(k+(k>=0.0?.5:-.5));tr(a,73932,g);f=f+1|0}if(e|0){k=+h[b>>3];m=+h[b+8>>3];c[i>>2]=~~(k+(k>=0.0?.5:-.5));c[i+4>>2]=~~(m+(m>=0.0?.5:-.5));tr(a,73932,i)}nr(a,134901)|0;l=j;return}function id(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;c[a>>2]=0;k=c[41903]|0;h=195075;g=0;i=-1;while(1){if((g|0)>=(k|0)){l=6;break}m=(b[172344+(g<<1)>>1]|0)-d|0;n=(b[172856+(g<<1)>>1]|0)-e|0;j=(b[173368+(g<<1)>>1]|0)-f|0;j=(O(n,n)|0)+(O(m,m)|0)+(O(j,j)|0)|0;if((j|0)<(h|0))if(!j)break;else{h=j;i=g}g=g+1|0}if((l|0)==6){c[41903]=k+1;if((k|0)==256)g=i;else{b[172344+(g<<1)>>1]=d;b[172856+(g<<1)>>1]=e;b[173368+(g<<1)>>1]=f;c[a>>2]=1}}return g|0}function jd(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;h=i;d=c[41904]|0;if(!d){c[41905]=64;d=_I(64)|0;c[41904]=d;e=0}else e=0;while(1){g=b+1|0;f=a[b>>0]|0;if(!(f<<24>>24))break;b=c[41905]|0;if((e|0)>(b+-8|0)){d=b<<1;c[41905]=d;d=bJ(c[41904]|0,d)|0;c[41904]=d;d=d+e|0}if(f<<24>>24<=-1){a[d>>0]=92;c[h>>2]=f&255;qL(d+1|0,74057,h)|0;b=g;d=d+4|0;e=e+4|0;continue}if(f<<24>>24==92){a[d>>0]=92;e=e+1|0;d=d+1|0}a[d>>0]=f;b=g;d=d+1|0;e=e+1|0}a[d>>0]=0;l=i;return c[41904]|0}function kd(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;d=l;l=l+16|0;b=d;nr(a,66165)|0;if((c[a+64>>2]|0)==2)nr(a,66180)|0;else nr(a,134901)|0;g=c[c[a+12>>2]>>2]|0;f=c[g+4>>2]|0;e=c[g+8>>2]|0;c[b>>2]=c[g>>2];c[b+4>>2]=f;c[b+8>>2]=e;tr(a,66191,b);l=d;return}function ld(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=l;l=l+32|0;f=g+8|0;e=g;nr(a,66119)|0;d=a+64|0;b=a+12|0;if((c[d>>2]|0)!=2){c[e>>2]=c[(c[b>>2]|0)+28>>2];tr(a,66130,e)}if((c[(c[b>>2]|0)+20>>2]|0)==0?(c[d>>2]|0)!=2:0){b=c[a+476>>2]|0;d=c[a+480>>2]|0;e=c[a+484>>2]|0;c[f>>2]=c[a+472>>2];c[f+4>>2]=b;c[f+8>>2]=d;c[f+12>>2]=e;tr(a,62499,f)}nr(a,66145)|0;nr(a,66158)|0;l=g;return}function md(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;k=l;l=l+32|0;j=k+24|0;f=k+8|0;i=k;g=c[b+16>>2]|0;a[173896]=0;e=b+12|0;h=g+8|0;if(!(c[(c[e>>2]|0)+28>>2]|0)){c[i>>2]=En(c[h>>2]|0)|0;tr(b,62430,i);d=b+64|0;if((c[d>>2]|0)==2)nr(b,62463)|0;else nr(b,62445)|0;do if(!(c[(c[e>>2]|0)+20>>2]|0))if((c[d>>2]|0)==2){n=c[b+460>>2]|0;m=c[b+464>>2]|0;d=c[b+468>>2]|0;c[f>>2]=c[b+456>>2];c[f+4>>2]=n;c[f+8>>2]=m;c[f+12>>2]=d;tr(b,62499,f);break}else{nr(b,62475)|0;break}while(0);nr(b,62529)|0;fy(b,c[(c[e>>2]|0)+24>>2]|0,12928);hy(b);d=c[(c[e>>2]|0)+20>>2]|0;if(d|0){c[i>>2]=c[d>>2];c[i+4>>2]=0;fy(b,0,i)}}c[41906]=(a[(c[(c[h>>2]|0)+16>>2]|0)+115>>0]|0)==1?1:-1;if(!(a[173896]|0)){nr(b,62549)|0;a[173896]=1}d=c[g+208>>2]|0;if(d|0){c[j>>2]=iy(d,c[41906]|0)|0;tr(b,62562,j)}l=k;return}function nd(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;b=l;l=l+16|0;f=b;c[f>>2]=d;c[f+4>>2]=e;tr(a,62414,f);l=b;return}function od(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0,v=0.0,w=0.0;s=l;l=l+144|0;r=s+128|0;q=s+112|0;p=s+72|0;o=s+56|0;n=s+40|0;m=s+32|0;e=s+24|0;b=s+8|0;d=s;f=c[a+456>>2]|0;j=c[a+460>>2]|0;g=c[a+464>>2]|0;i=c[a+468>>2]|0;k=a+12|0;t=(c[(c[k>>2]|0)+28>>2]|0)+1|0;c[d>>2]=t;c[d+4>>2]=t;tr(a,62041,d);if(!(c[(c[k>>2]|0)+20>>2]|0)){c[b>>2]=f;c[b+4>>2]=j;c[b+8>>2]=g;c[b+12>>2]=i;tr(a,62058,b)}d=a+360|0;c[e>>2]=c[d>>2]|0?62092:62102;tr(a,62111,e);b=a+64|0;if((c[b>>2]|0)==1){c[m>>2]=g;c[m+4>>2]=i;tr(a,62136,m)}m=c[a+200>>2]|0;t=c[a+204>>2]|0;c[n>>2]=c[a+196>>2];c[n+4>>2]=m;c[n+8>>2]=t;tr(a,62175,n);if(!(c[(c[k>>2]|0)+20>>2]|0)){c[o>>2]=f;c[o+4>>2]=j;c[o+8>>2]=g-f;c[o+12>>2]=i-j;tr(a,62195,o)}w=+h[a+496>>3];t=c[d>>2]|0;v=+h[a+504>>3];u=+h[a+512>>3];h[p>>3]=+h[a+488>>3];h[p+8>>3]=w;c[p+16>>2]=t;h[p+24>>3]=v;h[p+32>>3]=u;tr(a,62235,p);if((c[b>>2]|0)==1){if((g|0)>14399|(i|0)>14399){t=c[(c[k>>2]|0)+16>>2]|0;c[q>>2]=g;c[q+4>>2]=i;c[q+8>>2]=14400;hb[t&31](62278,q)}c[r>>2]=f;c[r+4>>2]=j;c[r+8>>2]=g;c[r+12>>2]=i;tr(a,62373,r)}l=s;return}function pd(a){a=a|0;var b=0,d=0,e=0;e=l;l=l+16|0;d=e;b=a+12|0;if(c[(c[b>>2]|0)+20>>2]|0){nr(a,61965)|0;fy(a,0,(c[(c[b>>2]|0)+20>>2]|0)+4|0)}nr(a,61982)|0;nr(a,62009)|0;c[d>>2]=c[(c[b>>2]|0)+28>>2];tr(a,62024,d);l=e;return}function qd(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=En(c[(c[a+16>>2]|0)+8>>2]|0)|0;tr(a,61958,d);nr(a,61951)|0;l=b;return}function rd(a){a=a|0;nr(a,77394)|0;return}function sd(a){a=a|0;nr(a,61951)|0;return}function td(a){a=a|0;nr(a,77394)|0;return}function ud(a){a=a|0;nr(a,61951)|0;return}function vd(a){a=a|0;nr(a,77394)|0;return}function wd(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;e=l;l=l+16|0;d=e;if(b|0?(g=(c[a+16>>2]|0)+272|0,c[g>>2]|0):0){nr(a,61847)|0;xr(a,c[g>>2]|0,2);nr(a,61858)|0;c[d>>2]=iy(b,c[41906]|0)|0;tr(a,61862,d)}l=e;return}function xd(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0.0,i=0,j=0,k=0,m=0,n=0;m=l;l=l+32|0;j=m+8|0;k=m;f=c[b+16>>2]|0;if(!(+h[f+40>>3]<.5)){Ed(b,f+16|0);i=e+4|0;ur(b,+h[(c[i>>2]|0)+16>>3]);c[j>>2]=c[c[i>>2]>>2];tr(b,61806,j);i=iy(c[e>>2]|0,c[41906]|0)|0;switch(a[e+48>>0]|0){case 114:{n=e+32|0;f=n;g=+h[n>>3];break}case 108:{f=e+32|0;g=0.0;break}default:{n=e+32|0;f=n;g=+h[n>>3]*.5}}h[d>>3]=+h[d>>3]-g;n=d+8|0;h[n>>3]=+h[n>>3]+ +h[e+24>>3];c[j>>2]=c[d>>2];c[j+4>>2]=c[d+4>>2];c[j+8>>2]=c[d+8>>2];c[j+12>>2]=c[d+12>>2];wr(b,j);nr(b,61821)|0;ur(b,+h[f>>3]);c[k>>2]=i;tr(b,61830,k)}l=m;return}function yd(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+32|0;f=g;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];h[f+16>>3]=+h[b+16>>3]-+h[b>>3];h[f+24>>3]=+h[b+24>>3]-+h[b+8>>3];b=a+16|0;if(d|0?(e=c[b>>2]|0,+h[e+80>>3]>.5):0){Ed(a,e+56|0);xr(a,f,2);nr(a,61764)|0}if(+h[(c[b>>2]|0)+40>>3]>.5){Fd(a);Ed(a,(c[b>>2]|0)+16|0);xr(a,f,2);nr(a,61784)|0}l=g;return}function zd(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0;j=l;l=l+16|0;i=j;g=a+16|0;if(e|0?(f=c[g>>2]|0,+h[f+80>>3]>.5):0){Ed(a,f+56|0);nr(a,61685)|0;c[i>>2]=c[b>>2];c[i+4>>2]=c[b+4>>2];c[i+8>>2]=c[b+8>>2];c[i+12>>2]=c[b+12>>2];wr(a,i);nr(a,61694)|0;e=1;while(1){if((e|0)>=(d|0))break;f=b+(e<<4)|0;c[i>>2]=c[f>>2];c[i+4>>2]=c[f+4>>2];c[i+8>>2]=c[f+8>>2];c[i+12>>2]=c[f+12>>2];wr(a,i);nr(a,61703)|0;e=e+1|0}nr(a,61730)|0}if(+h[(c[g>>2]|0)+40>>3]>.5){Fd(a);Ed(a,(c[g>>2]|0)+16|0);nr(a,61685)|0;c[i>>2]=c[b>>2];c[i+4>>2]=c[b+4>>2];c[i+8>>2]=c[b+8>>2];c[i+12>>2]=c[b+12>>2];wr(a,i);nr(a,61694)|0;e=1;while(1){if((e|0)>=(d|0))break;g=b+(e<<4)|0;c[i>>2]=c[g>>2];c[i+4>>2]=c[g+4>>2];c[i+8>>2]=c[g+8>>2];c[i+12>>2]=c[g+12>>2];wr(a,i);nr(a,61703)|0;e=e+1|0}nr(a,61746)|0}l=j;return}function Ad(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0;k=l;l=l+16|0;f=k;i=a+16|0;if(g|0?(j=c[i>>2]|0,+h[j+80>>3]>.5):0){Ed(a,j+56|0);nr(a,61685)|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];wr(a,f);nr(a,61694)|0;e=1;while(1){if((e|0)>=(d|0))break;xr(a,b+(e<<4)|0,3);nr(a,61720)|0;e=e+3|0}nr(a,61730)|0}if(+h[(c[i>>2]|0)+40>>3]>.5){Fd(a);Ed(a,(c[i>>2]|0)+16|0);nr(a,61685)|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];wr(a,f);nr(a,61694)|0;e=1;while(1){if((e|0)>=(d|0))break;xr(a,b+(e<<4)|0,3);nr(a,61720)|0;e=e+3|0}nr(a,61712)|0}l=k;return}function Bd(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0;g=l;l=l+16|0;f=g;e=a+16|0;if(+h[(c[e>>2]|0)+40>>3]>.5){Fd(a);Ed(a,(c[e>>2]|0)+16|0);nr(a,61685)|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];wr(a,f);nr(a,61694)|0;e=1;while(1){if((e|0)>=(d|0))break;i=b+(e<<4)|0;c[f>>2]=c[i>>2];c[f+4>>2]=c[i+4>>2];c[f+8>>2]=c[i+8>>2];c[f+12>>2]=c[i+12>>2];wr(a,f);nr(a,61703)|0;e=e+1|0}nr(a,61712)|0}l=g;return}function Cd(a,b){a=a|0;b=b|0;nr(a,61682)|0;nr(a,b)|0;nr(a,134901)|0;return}function Dd(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+32|0;g=n+16|0;m=n+8|0;k=n;i=a+16|0;if(f|0?(j=c[i>>2]|0,+h[j+80>>3]>.5):0){Ed(a,j+56|0);nr(a,77289)|0;xr(a,d,e);nr(a,87638)|0;c[g>>2]=c[d>>2];c[g+4>>2]=c[d+4>>2];c[g+8>>2]=c[d+8>>2];c[g+12>>2]=c[d+12>>2];wr(a,g);c[k>>2]=e;c[k+4>>2]=b;tr(a,61599,k)}if(+h[(c[i>>2]|0)+40>>3]>.5){Fd(a);Ed(a,(c[i>>2]|0)+16|0);nr(a,77289)|0;xr(a,d,e);nr(a,87638)|0;c[g>>2]=c[d>>2];c[g+4>>2]=c[d+4>>2];c[g+8>>2]=c[d+8>>2];c[g+12>>2]=c[d+12>>2];wr(a,g);c[m>>2]=e;c[m+4>>2]=b;tr(a,61615,m)}l=n;return}function Ed(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0.0,i=0.0;f=l;l=l+32|0;e=f;if(b|0){switch(c[(c[a+16>>2]|0)+4>>2]|0){case 1:case 0:{d=96286;break}case 2:{d=96273;break}case 3:{d=96237;break}default:d=61651}i=+h[b+8>>3];g=+h[b+16>>3];h[e>>3]=+h[b>>3];h[e+8>>3]=i;h[e+16>>3]=g;c[e+24>>2]=d;tr(a,61658,e)}l=f;return}function Fd(b){b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0;m=l;l=l+16|0;k=m+8|0;j=m;g=b+16|0;i=c[g>>2]|0;d=c[i+160>>2]|0;ur(b,+h[i+152>>3]);nr(b,61632)|0;while(1){if(!d)break;i=d+4|0;f=c[d>>2]|0;if(!f)break;if(!(yJ(f,95910)|0)){d=i;continue}else e=f;while(1){d=e+1|0;if(!(a[e>>0]|0))break;else e=d}a:while(1){if(!(a[d>>0]|0))break;c[j>>2]=d;tr(b,61647,j);while(1){e=d+1|0;if(!(a[d>>0]|0)){d=e;continue a}else d=e}}if(!(yJ(f,119127)|0))h[(c[g>>2]|0)+152>>3]=0.0;c[k>>2]=f;tr(b,81633,k);d=i}l=m;return}function Gd(b){b=b|0;var d=0;nr(b,67671)|0;d=Jm(c[(c[b>>2]|0)+168>>2]|0,67727)|0;if(d|0?a[d>>0]|0:0){nr(b,67738)|0;nr(b,d)|0;nr(b,67762)|0}nr(b,67783)|0;nr(b,67831)|0;nr(b,67885)|0;d=b+12|0;nr(b,sw(c[c[c[d>>2]>>2]>>2]|0)|0)|0;nr(b,71014)|0;nr(b,sw(c[(c[c[d>>2]>>2]|0)+4>>2]|0)|0)|0;nr(b,71024)|0;nr(b,sw(c[(c[c[d>>2]>>2]|0)+8>>2]|0)|0)|0;nr(b,68267)|0;nr(b,68291)|0;return}function Hd(b){b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0.0,k=0.0,m=0.0;i=l;l=l+48|0;g=i+16|0;f=i+8|0;e=i;d=c[b+16>>2]|0;nr(b,67506)|0;d=d+8|0;if(a[(En(c[d>>2]|0)|0)>>0]|0){nr(b,68230)|0;nr(b,sw(En(c[d>>2]|0)|0)|0)|0}c[e>>2]=O(c[b+168>>2]|0,c[b+164>>2]|0)|0;tr(b,67511,e);e=c[b+452>>2]|0;c[f>>2]=c[b+448>>2];c[f+4>>2]=e;tr(b,67527,f);m=+h[b+392>>3];k=+h[b+400>>3];j=+h[b+408>>3];h[g>>3]=+h[b+384>>3];h[g+8>>3]=m;h[g+16>>3]=k;h[g+24>>3]=j;tr(b,67560,g);nr(b,67591)|0;nr(b,67627)|0;nr(b,69221)|0;l=i;return}function Id(a){a=a|0;nr(a,67498)|0;return}function Jd(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;ee(a,b,0,86583,c[(c[a+16>>2]|0)+8>>2]|0);nr(a,69221)|0;return}function Kd(a){a=a|0;nr(a,67346)|0;return}function Ld(b){b=b|0;var d=0,e=0,f=0,g=0;e=l;l=l+16|0;f=e;g=c[b+16>>2]|0;d=g+8|0;ee(b,c[g+212>>2]|0,0,96286,c[d>>2]|0);nr(b,67450)|0;ur(b,+h[b+488>>3]);nr(b,87638)|0;ur(b,+h[b+496>>3]);c[f>>2]=0-(c[b+360>>2]|0);tr(b,67469,f);ur(b,+h[b+504>>3]);nr(b,87638)|0;ur(b,-+h[b+512>>3]);nr(b,67493)|0;if(a[(En(c[d>>2]|0)|0)>>0]|0){nr(b,67402)|0;nr(b,sw(En(c[d>>2]|0)|0)|0)|0;nr(b,67410)|0}l=e;return}function Md(a){a=a|0;nr(a,67346)|0;return}function Nd(a){a=a|0;var b=0,d=0;d=c[a+16>>2]|0;b=d+8|0;ee(a,c[d+212>>2]|0,0,93039,c[b>>2]|0);nr(a,69221)|0;nr(a,67402)|0;nr(a,sw(En(c[b>>2]|0)|0)|0)|0;nr(a,67410)|0;return}function Od(a){a=a|0;nr(a,67346)|0;return}function Pd(a){a=a|0;var b=0,d=0,e=0;d=c[a+16>>2]|0;b=c[a+160>>2]|0;if((b|0)>1)b=c[(c[(c[a>>2]|0)+308>>2]|0)+(b<<2)>>2]|0;else b=0;e=d+8|0;ee(a,c[d+212>>2]|0,b,96273,c[e>>2]|0);nr(a,69221)|0;nr(a,67402)|0;nr(a,sw(En(c[e>>2]|0)|0)|0)|0;nr(a,67410)|0;return}function Qd(a){a=a|0;nr(a,67346)|0;return}function Rd(a){a=a|0;var b=0,d=0;d=c[a+16>>2]|0;b=d+8|0;ee(a,c[d+212>>2]|0,0,96237,c[b>>2]|0);nr(a,69221)|0;nr(a,67402)|0;b=rw(87129,c[b>>2]|0)|0;nr(a,sw(b)|0)|0;$I(b);nr(a,67410)|0;return}function Sd(a){a=a|0;nr(a,67346)|0;return}function Td(b,c,d,e,f){b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;nr(b,67352)|0;if(f|0){nr(b,67355)|0;nr(b,sw(f)|0)|0;nr(b,83714)|0}nr(b,67245)|0;nr(b,69182)|0;if(c|0?a[c>>0]|0:0){nr(b,67363)|0;nr(b,c)|0;nr(b,83714)|0}if(d|0?a[d>>0]|0:0){nr(b,67377)|0;nr(b,tw(d,1)|0)|0;nr(b,83714)|0}if(e|0?a[e>>0]|0:0){nr(b,67392)|0;nr(b,sw(e)|0)|0;nr(b,83714)|0}nr(b,69221)|0;return}function Ud(a){a=a|0;nr(a,69176)|0;nr(a,67346)|0;return}function Vd(e,f,g){e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0.0,H=0,I=0,J=0,K=0,L=0,M=0;M=l;l=l+176|0;L=M+160|0;K=M+152|0;F=M+136|0;J=M+128|0;E=M+120|0;D=M+112|0;C=M+104|0;B=M+96|0;A=M+88|0;y=M+80|0;w=M+72|0;v=M+64|0;u=M+56|0;t=M+48|0;i=M+40|0;q=M+32|0;s=M+24|0;r=M+16|0;p=M+8|0;o=M;I=c[e+16>>2]|0;nr(e,66877)|0;switch(a[g+48>>0]|0){case 108:{nr(e,66883)|0;break}case 114:{nr(e,66904)|0;break}default:nr(e,66923)|0}H=f+8|0;G=+h[H>>3]+ +h[g+24>>3];h[H>>3]=G;H=I+260|0;if(!(b[H>>1]&512)){nr(e,66945)|0;ur(e,+h[f>>3]);nr(e,66950)|0;ur(e,-G);nr(e,83714)|0}x=g+4|0;f=c[x>>2]|0;n=c[f+8>>2]|0;if(n){switch(c[(c[(c[(c[e>>2]|0)+168>>2]|0)+16>>2]|0)+244>>2]|0){case 1:{m=n;f=n+16|0;i=n+8|0;break}case 2:{m=n+24|0;f=n+32|0;i=n+28|0;break}default:{m=n+4|0;f=n+16|0;i=n+8|0}}j=c[f>>2]|0;f=c[i>>2]|0;k=c[n+12>>2]|0;c[o>>2]=c[m>>2];tr(e,66956,o);i=c[n+24>>2]|0;if(i|0){c[p>>2]=i;tr(e,66973,p)}nr(e,83714)|0;if(f|0){c[r>>2]=f;tr(e,66977,r)}if(k|0){c[s>>2]=k;tr(e,66995,s)}if(!j)j=0;else{c[q>>2]=j;tr(e,67014,q)}}else{c[i>>2]=c[f>>2];tr(e,67031,i);j=0;f=0}i=c[x>>2]|0;if(i|0?(z=c[i+24>>2]|0,z&127|0):0){if(!((f|0)!=0|(z&1|0)==0))tr(e,67049,t);if(!((j|0)!=0|(z&2|0)==0))tr(e,67069,u);if(z&100|0){tr(e,67090,v);if(!(z&4))f=0;else{tr(e,91030,w);f=1}if(z&64){c[y>>2]=f|0?86030:174185;tr(e,67109,y);f=1}if(z&32|0){c[A>>2]=f|0?86030:174185;tr(e,67120,A)}tr(e,83714,B)}if(z&8|0)tr(e,67135,C);if(z&16|0)tr(e,67159,D)}h[E>>3]=+h[(c[x>>2]|0)+16>>3];tr(e,67181,E);f=I+16|0;switch(c[I+48>>2]|0){case 5:{f=c[f>>2]|0;if(jK(f,122106)|0){c[J>>2]=f;tr(e,67199,J)}break}case 1:{E=d[f+1>>0]|0;J=d[f+2>>0]|0;c[F>>2]=d[f>>0];c[F+4>>2]=E;c[F+8>>2]=J;tr(e,67210,F);break}default:ma(123205,66391,486,67232)}nr(e,67245)|0;if(b[H>>1]&512){c[K>>2]=sw(c[I+212>>2]|0)|0;tr(e,67247,K);nr(e,67296)|0;ur(e,-G);nr(e,67314)|0}nr(e,tw(c[g>>2]|0,1)|0)|0;if(b[H>>1]&512)tr(e,67317,L);nr(e,67337)|0;l=M;return}function Wd(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;switch(c|0){case 2:{d=be(a,b,2)|0;break}case 3:{d=ce(a)|0;break}default:d=0}nr(a,66841)|0;$d(a,c,d);nr(a,66850)|0;ur(a,+h[b>>3]);nr(a,66856)|0;c=b+8|0;ur(a,-+h[c>>3]);nr(a,66863)|0;ur(a,+h[b+16>>3]-+h[b>>3]);nr(a,66870)|0;ur(a,+h[b+24>>3]-+h[c>>3]);nr(a,66257)|0;return}function Xd(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;switch(d|0){case 2:{e=be(a,b,c)|0;break}case 3:{e=ce(a)|0;break}default:e=0}nr(a,66832)|0;$d(a,d,e);nr(a,66247)|0;e=0;while(1){if((e|0)>=(c|0))break;ur(a,+h[b+(e<<4)>>3]);nr(a,86030)|0;ur(a,-+h[b+(e<<4)+8>>3]);nr(a,87638)|0;e=e+1|0}ur(a,+h[b>>3]);nr(a,86030)|0;ur(a,-+h[b+8>>3]);nr(a,66257)|0;return}function Yd(a,d,e,f,g,h){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;g=c[a+16>>2]|0;switch(h|0){case 2:{f=be(a,d,e)|0;break}case 3:{f=ce(a)|0;break}default:f=0}nr(a,66427)|0;if(b[g+260>>1]&512){nr(a,66433)|0;nr(a,sw(c[g+212>>2]|0)|0)|0;nr(a,66439)|0}$d(a,h,f);nr(a,66444)|0;de(a,d,e);nr(a,66257)|0;return}function Zd(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;nr(a,66237)|0;$d(a,0,0);nr(a,66247)|0;d=0;while(1){if((d|0)>=(c|0))break;ur(a,+h[b+(d<<4)>>3]);nr(a,86030)|0;ur(a,-+h[b+(d<<4)+8>>3]);nr(a,87638)|0;d=d+1|0}nr(a,66257)|0;return}function _d(a,b){a=a|0;b=b|0;nr(a,66231)|0;nr(a,sw(b)|0)|0;nr(a,68291)|0;return}function $d(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l;l=l+96|0;k=q+48|0;p=q+40|0;n=q+32|0;o=q+24|0;j=q+16|0;g=q+8|0;f=q;m=c[b+16>>2]|0;nr(b,66262)|0;a:do switch(d|0){case 2:{c[f>>2]=e;tr(b,66270,f);break}case 3:{c[g>>2]=e;tr(b,66281,g);break}case 0:{nr(b,120501)|0;break}default:{d=m+56|0;f=k;g=d;i=f+40|0;do{c[f>>2]=c[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(i|0));ae(b,k);if((c[m+88>>2]|0)==1){d=a[d+3>>0]|0;switch(d<<24>>24){case -1:case 0:break a;default:{}}h[j>>3]=+(d&255)*.00392156862745098;tr(b,66292,j)}}}while(0);nr(b,66311)|0;e=m+16|0;f=k;g=e;i=f+40|0;do{c[f>>2]=c[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(i|0));ae(b,k);d=m+152|0;if(+h[d>>3]!=1.0){nr(b,66322)|0;ur(b,+h[d>>3])}switch(c[m+144>>2]|0){case 1:{c[o>>2]=66362;tr(b,66339,o);break}case 2:{c[n>>2]=66366;tr(b,66339,n);break}default:{}}b:do if((c[m+48>>2]|0)==1){d=a[e+3>>0]|0;switch(d<<24>>24){case -1:case 0:break b;default:{}}h[p>>3]=+(d&255)*.00392156862745098;tr(b,66370,p)}while(0);nr(b,83714)|0;l=q;return}function ae(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0;g=l;l=l+16|0;f=g;a:do switch(c[e+32>>2]|0){case 5:{nr(b,c[e>>2]|0)|0;break}case 1:if(!(a[e+3>>0]|0)){nr(b,122171)|0;break a}else{i=d[e+1>>0]|0;h=d[e+2>>0]|0;c[f>>2]=d[e>>0];c[f+4>>2]=i;c[f+8>>2]=h;tr(b,68547,f);break a}default:ma(123205,66391,117,66411)}while(0);l=g;return}function be(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=l;l=l+112|0;o=t+64|0;r=t+56|0;n=t+48|0;m=t+40|0;i=t+32|0;k=t;q=c[41908]|0;c[41908]=q+1;p=c[b+16>>2]|0;f=+(c[p+136>>2]|0)*.017453292519943295;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;c[k+16>>2]=0;c[k+20>>2]=0;c[k+24>>2]=0;c[k+28>>2]=0;KB(d,k,e,f,0);c[o>>2]=q;tr(b,66664,o);nr(b,66729)|0;ur(b,+h[k>>3]);nr(b,66734)|0;ur(b,+h[k+8>>3]);nr(b,66741)|0;ur(b,+h[k+16>>3]);nr(b,66748)|0;ur(b,+h[k+24>>3]);nr(b,66755)|0;k=p+140|0;f=+g[k>>2];if(f>0.0){h[i>>3]=f+-.001;tr(b,66760,i)}else nr(b,66536)|0;d=p+56|0;e=o;i=d;j=e+40|0;do{c[e>>2]=c[i>>2];e=e+4|0;i=i+4|0}while((e|0)<(j|0));ae(b,o);nr(b,66572)|0;a:do if((c[p+88>>2]|0)==1){d=a[d+3>>0]|0;switch(d<<24>>24){case -1:case 0:{s=7;break a}default:{}}h[m>>3]=+(d&255)*.00392156862745098;tr(b,84631,m)}else s=7;while(0);if((s|0)==7)nr(b,66587)|0;nr(b,66590)|0;f=+g[k>>2];if(f>0.0){h[n>>3]=f;tr(b,66760,n)}else nr(b,66596)|0;d=p+96|0;e=o;i=d;j=e+40|0;do{c[e>>2]=c[i>>2];e=e+4|0;i=i+4|0}while((e|0)<(j|0));ae(b,o);nr(b,66572)|0;b:do if((c[p+128>>2]|0)==1){d=a[d+3>>0]|0;switch(d<<24>>24){case -1:case 0:{s=14;break b}default:{}}h[r>>3]=+(d&255)*.00392156862745098;tr(b,84631,r)}else s=14;while(0);if((s|0)==14)nr(b,66587)|0;nr(b,66800)|0;l=t;return q|0}function ce(b){b=b|0;var d=0,e=0.0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0;q=l;l=l+64|0;k=q+16|0;o=q+8|0;j=q;n=c[41907]|0;c[41907]=n+1;m=c[b+16>>2]|0;r=+(c[m+136>>2]|0)*.017453292519943295;e=r;if(r==0.0){f=50;d=50}else{f=~~((+E(+e)+1.0)*50.0);d=~~((1.0-+F(+e))*50.0)}c[k>>2]=n;c[k+4>>2]=f;c[k+8>>2]=d;tr(b,66452,k);nr(b,66536)|0;d=m+56|0;f=k;g=d;i=f+40|0;do{c[f>>2]=c[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(i|0));ae(b,k);nr(b,66572)|0;a:do if((c[m+88>>2]|0)==1){d=a[d+3>>0]|0;switch(d<<24>>24){case -1:case 0:{p=6;break a}default:{}}h[j>>3]=+(d&255)*.00392156862745098;tr(b,84631,j)}else p=6;while(0);if((p|0)==6)nr(b,66587)|0;nr(b,66590)|0;nr(b,66596)|0;d=m+96|0;f=k;g=d;i=f+40|0;do{c[f>>2]=c[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(i|0));ae(b,k);nr(b,66572)|0;b:do if((c[m+128>>2]|0)==1){d=a[d+3>>0]|0;switch(d<<24>>24){case -1:case 0:{p=10;break b}default:{}}h[o>>3]=+(d&255)*.00392156862745098;tr(b,84631,o)}else p=10;while(0);if((p|0)==10)nr(b,66587)|0;nr(b,66632)|0;l=q;return n|0}function de(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0;i=l;l=l+16|0;g=i;e=77;f=0;while(1){if((f|0)>=(d|0))break;c[g>>2]=e;tr(a,66449,g);ur(a,+h[b+(f<<4)>>3]);nr(a,86030)|0;ur(a,-+h[b+(f<<4)+8>>3]);e=(f|0)==0?67:32;f=f+1|0}l=i;return}function ee(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0;j=l;l=l+16|0;i=j+8|0;h=j;nr(b,67420)|0;nr(b,sw(d)|0)|0;if(e|0){c[h>>2]=sw(e)|0;tr(b,67428,h)}c[i>>2]=f;tr(b,67432,i);d=Jm(g,67444)|0;if(d|0?a[d>>0]|0:0){nr(b,87638)|0;nr(b,sw(d)|0)|0}nr(b,83714)|0;l=j;return}function fe(a){a=a|0;var b=0;nr(a,68251)|0;b=a+12|0;nr(a,pe(c[c[c[b>>2]>>2]>>2]|0)|0)|0;nr(a,71014)|0;nr(a,pe(c[(c[c[b>>2]>>2]|0)+4>>2]|0)|0)|0;nr(a,71024)|0;nr(a,pe(c[(c[c[b>>2]>>2]|0)+8>>2]|0)|0)|0;nr(a,68267)|0;return}function ge(b){b=b|0;var d=0,e=0,f=0;f=l;l=l+16|0;e=f;d=c[b+16>>2]|0;nr(b,68228)|0;d=d+8|0;if(a[(En(c[d>>2]|0)|0)>>0]|0){nr(b,68230)|0;nr(b,pe(En(c[d>>2]|0)|0)|0)|0}c[e>>2]=O(c[b+168>>2]|0,c[b+164>>2]|0)|0;tr(b,68239,e);c[41909]=0;l=f;return}function he(a){a=a|0;c[41909]=1;return}function ie(a){a=a|0;c[41909]=-1;return}function je(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+48|0;i=n+8|0;m=n;f=c[b+16>>2]|0;if(c[f+144>>2]|0?(k=e+4|0,j=~~(+h[b+352>>3]*+h[(c[k>>2]|0)+16>>3]),j|0):0){qe(b);nr(b,68167)|0;g=d+8|0;h[g>>3]=+h[g>>3]-+(j|0)*.55;c[i>>2]=c[d>>2];c[i+4>>2]=c[d+4>>2];c[i+8>>2]=c[d+8>>2];c[i+12>>2]=c[d+12>>2];wr(b,i);nr(b,68181)|0;nr(b,c[e>>2]|0)|0;nr(b,68190)|0;nr(b,67988)|0;g=i;d=f+16|0;f=g+40|0;do{c[g>>2]=c[d>>2];g=g+4|0;d=d+4|0}while((g|0)<(f|0));re(b,i);nr(b,68192)|0;i=c[k>>2]|0;k=c[i+8>>2]|0;k=c[((k|0)==0?i:k+4|0)>>2]|0;nr(b,83714)|0;nr(b,k)|0;nr(b,83714)|0;c[m>>2]=j;tr(b,68201,m);switch(a[e+48>>0]|0){case 108:{nr(b,68206)|0;break}case 114:{nr(b,68217)|0;break}default:{}}se(b);nr(b,134901)|0}l=n;return}function ke(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0.0,m=0.0,n=0.0;j=l;l=l+48|0;f=j;g=c[a+16>>2]|0;i=g+144|0;if(c[i>>2]|0){n=+h[b>>3];m=+h[b+24>>3];e=b+8|0;k=+h[e>>3];h[b>>3]=n-+h[b+16>>3]+n;h[e>>3]=k-m+k;qe(a);nr(a,68153)|0;xr(a,b,2);nr(a,67988)|0;do if(!d)if(!(c[41909]|0)){nr(a,82272)|0;break}else{nr(a,121990)|0;break}else{b=f;d=g+56|0;e=b+40|0;do{c[b>>2]=c[d>>2];b=b+4|0;d=d+4|0}while((b|0)<(e|0));re(a,f)}while(0);if((c[41909]|0)==1)c[41909]=0;nr(a,68099)|0;ur(a,+h[g+152>>3]);nr(a,68142)|0;b=f;d=g+16|0;e=b+40|0;do{c[b>>2]=c[d>>2];b=b+4|0;d=d+4|0}while((b|0)<(e|0));re(a,f);b=c[i>>2]|0;if((b|0)==1){nr(a,67996)|0;b=c[i>>2]|0}if((b|0)==2)nr(a,68005)|0;se(a);nr(a,134901)|0}l=j;return}function le(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0;j=l;l=l+48|0;f=j;g=c[a+16>>2]|0;i=g+144|0;if(c[i>>2]|0){qe(a);nr(a,68125)|0;xr(a,b,d);nr(a,67988)|0;do if(!e)if(!(c[41909]|0)){nr(a,82272)|0;break}else{nr(a,121990)|0;break}else{b=f;d=g+56|0;e=b+40|0;do{c[b>>2]=c[d>>2];b=b+4|0;d=d+4|0}while((b|0)<(e|0));re(a,f)}while(0);if((c[41909]|0)==1)c[41909]=0;nr(a,68099)|0;ur(a,+h[g+152>>3]);nr(a,68142)|0;b=f;d=g+16|0;e=b+40|0;do{c[b>>2]=c[d>>2];b=b+4|0;d=d+4|0}while((b|0)<(e|0));re(a,f);b=c[i>>2]|0;if((b|0)==1){nr(a,67996)|0;b=c[i>>2]|0}if((b|0)==2)nr(a,68005)|0;se(a);nr(a,134901)|0}l=j;return}function me(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0,m=0;m=l;l=l+48|0;i=m;j=c[a+16>>2]|0;k=j+144|0;if(c[k>>2]|0){qe(a);nr(a,67974)|0;xr(a,b,d);nr(a,67988)|0;e=i;f=j+16|0;g=e+40|0;do{c[e>>2]=c[f>>2];e=e+4|0;f=f+4|0}while((e|0)<(g|0));re(a,i);nr(a,68099)|0;ur(a,+h[j+152>>3]);e=c[k>>2]|0;if((e|0)==1){nr(a,67996)|0;e=c[k>>2]|0}if((e|0)==2)nr(a,68005)|0;nr(a,68108)|0;se(a);nr(a,134901)|0}l=m;return}function ne(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+48|0;g=i;e=c[a+16>>2]|0;h=e+144|0;if(c[h>>2]|0){qe(a);nr(a,67974)|0;xr(a,b,d);nr(a,67988)|0;f=g;b=e+16|0;d=f+40|0;do{c[f>>2]=c[b>>2];f=f+4|0;b=b+4|0}while((f|0)<(d|0));re(a,g);b=c[h>>2]|0;if((b|0)==1){nr(a,67996)|0;b=c[h>>2]|0}if((b|0)==2)nr(a,68005)|0;se(a);nr(a,134901)|0}l=i;return}function oe(a,b){a=a|0;b=b|0;nr(a,67971)|0;nr(a,pe(b)|0)|0;nr(a,134901)|0;return}function pe(a){a=a|0;return a|0}function qe(b){b=b|0;if(!(a[b+144>>0]|0))nr(b,68096)|0;else nr(b,c[b+148>>2]|0)|0;return}function re(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0;g=l;l=l+16|0;f=g;a:do switch(c[e+32>>2]|0){case 5:{nr(b,c[e>>2]|0)|0;break}case 1:if(!(a[e+3>>0]|0)){nr(b,82272)|0;break a}else{i=d[e+1>>0]|0;h=d[e+2>>0]|0;c[f>>2]=d[e>>0];c[f+4>>2]=i;c[f+8>>2]=h;tr(b,68547,f);break a}default:ma(123205,68014,49,68078)}while(0);l=g;return}function se(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=l;l=l+16|0;g=h;f=c[a+16>>2]|0;switch(c[f+12>>2]|0){case 8:{b=1;d=96273;e=f+8|0;break}case 10:{b=0;d=96273;e=f+8|0;break}case 3:case 2:case 9:{b=1;d=96237;e=f+8|0;break}case 7:case 6:case 11:{b=0;d=96237;e=f+8|0;break}case 0:{b=1;d=96286;e=f+8|0;break}case 4:{b=0;d=68050;e=f+8|0;break}case 1:{b=1;d=96286;e=f+8|0;break}case 5:{b=0;d=96286;e=f+8|0;break}default:ma(123205,68014,106,68033)}f=c[(c[e>>2]|0)+8>>2]|0;c[g>>2]=b;c[g+4>>2]=d;c[g+8>>2]=f;tr(a,68062,g);l=h;return}function te(a){a=a|0;var b=0;nr(a,70986)|0;nr(a,70994)|0;b=a+12|0;nr(a,Ee(c[c[c[b>>2]>>2]>>2]|0)|0)|0;nr(a,71014)|0;nr(a,Ee(c[(c[c[b>>2]>>2]|0)+4>>2]|0)|0)|0;nr(a,71024)|0;nr(a,Ee(c[(c[c[b>>2]>>2]|0)+8>>2]|0)|0)|0;nr(a,71027)|0;return}function ue(b){b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0;j=l;l=l+32|0;i=j+24|0;g=j+16|0;f=j+8|0;e=j;d=c[b+16>>2]|0;c[41913]=~~(+h[b+232>>3]-+h[b+216>>3]);c[41912]=~~(+h[b+224>>3]-+h[b+208>>3]);nr(b,69673)|0;nr(b,69680)|0;d=En(c[d+8>>2]|0)|0;if(a[d>>0]|0){nr(b,69749)|0;nr(b,Ee(d)|0)|0;nr(b,69757)|0}c[e>>2]=O(c[b+168>>2]|0,c[b+164>>2]|0)|0;tr(b,69766,e);nr(b,69786)|0;nr(b,69821)|0;nr(b,69849)|0;nr(b,69855)|0;nr(b,69898)|0;nr(b,69939)|0;nr(b,69958)|0;nr(b,69975)|0;nr(b,70023)|0;nr(b,70076)|0;nr(b,70152)|0;nr(b,70228)|0;nr(b,70237)|0;nr(b,70260)|0;nr(b,70287)|0;nr(b,70340)|0;nr(b,70362)|0;nr(b,70407)|0;nr(b,70419)|0;nr(b,70429)|0;nr(b,70455)|0;nr(b,70340)|0;nr(b,70507)|0;nr(b,70407)|0;nr(b,70419)|0;nr(b,70551)|0;nr(b,70260)|0;nr(b,70287)|0;nr(b,70340)|0;nr(b,70507)|0;nr(b,70407)|0;nr(b,70419)|0;nr(b,70429)|0;nr(b,70455)|0;nr(b,70340)|0;nr(b,70362)|0;nr(b,70407)|0;nr(b,70419)|0;nr(b,70564)|0;nr(b,70572)|0;nr(b,70578)|0;nr(b,70592)|0;nr(b,70600)|0;nr(b,70633)|0;e=(c[41913]|0)+10|0;c[f>>2]=c[41912];c[f+4>>2]=e;tr(b,70710,f);nr(b,70740)|0;nr(b,70749)|0;nr(b,70807)|0;nr(b,70817)|0;nr(b,70882)|0;f=c[41913]|0;c[g>>2]=c[41912];c[g+4>>2]=f;tr(b,70919,g);g=c[41913]|0;c[i>>2]=c[41912];c[i+4>>2]=g;tr(b,70947,i);l=j;return}function ve(a){a=a|0;nr(a,69224)|0;nr(a,69236)|0;nr(a,69244)|0;nr(a,69307)|0;nr(a,69236)|0;nr(a,69352)|0;nr(a,69401)|0;nr(a,69455)|0;nr(a,69236)|0;nr(a,69555)|0;nr(a,69604)|0;nr(a,69236)|0;nr(a,69656)|0;return}function we(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0;j=l;l=l+32|0;i=j+16|0;h=j+8|0;g=j;nr(b,69182)|0;if(d|0?a[d>>0]|0:0){c[g>>2]=Ee(d)|0;tr(b,69185,g)}if(e|0?a[e>>0]|0:0){c[h>>2]=Ee(e)|0;tr(b,69196,h)}if(f|0?a[f>>0]|0:0){c[i>>2]=Ee(f)|0;tr(b,69208,i)}nr(b,69221)|0;l=j;return}function xe(a){a=a|0;nr(a,69176)|0;return}function ye(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,i=0.0,j=0.0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0.0;A=l;l=l+112|0;y=A+96|0;z=A+88|0;w=A+80|0;q=A+72|0;v=A+64|0;t=A+56|0;s=A+48|0;r=A+40|0;p=A+24|0;o=A+8|0;n=A;x=c[b+16>>2]|0;switch(a[f+48>>0]|0){case 108:{j=+h[e>>3];m=+h[f+32>>3];break}case 114:{m=+h[f+32>>3];j=+h[e>>3]-m;break}default:{m=+h[f+32>>3];j=+h[e>>3]-m*.5}}g=f+40|0;i=+h[g>>3];u=f+4|0;k=+h[(c[u>>2]|0)+16>>3];if(i>3]=i}B=j+-8.0;k=+((c[41913]|0)>>>0)-+h[e+8>>3]-i+k*.2+(k<12.0?1.4:2.0);tr(b,68838,n);h[o>>3]=B;h[o+8>>3]=k;tr(b,68775,o);h[p>>3]=j+8.0+m-B;h[p+8>>3]=i;tr(b,68799,p);nr(b,68873)|0;nr(b,68907)|0;g=c[u>>2]|0;e=c[g+8>>2]|0;if(e){c[r>>2]=c[e+4>>2];tr(b,68997,r);g=c[e+8>>2]|0;if(g|0){c[s>>2]=g;tr(b,69016,s)}g=c[e+12>>2]|0;if(g|0){c[t>>2]=g;tr(b,69033,t)}g=c[e+16>>2]|0;if(g|0){c[v>>2]=g;tr(b,69051,v)}}else{c[q>>2]=c[g>>2];tr(b,68997,q)}h[w>>3]=+h[(c[u>>2]|0)+16>>3];tr(b,69067,w);g=x+16|0;switch(c[x+48>>2]|0){case 5:{g=c[g>>2]|0;if(jK(g,122106)|0){c[z>>2]=g;tr(b,69087,z)}break}case 1:{x=d[g+1>>0]|0;z=d[g+2>>0]|0;c[y>>2]=d[g>>0];c[y+4>>2]=x;c[y+8>>2]=z;tr(b,69097,y);break}default:ma(123205,68561,438,69118)}nr(b,69131)|0;nr(b,Ee(c[f>>2]|0)|0)|0;nr(b,69142)|0;nr(b,69165)|0;l=A;return}function ze(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0,i=0.0,j=0,k=0.0,m=0.0;e=l;l=l+32|0;f=e+16|0;j=e;nr(a,68739)|0;m=+h[b>>3];i=+h[b+16>>3]-m;k=+h[b+24>>3];g=k-+h[b+8>>3];k=+((c[41913]|0)>>>0)-k;h[j>>3]=m-i;h[j+8>>3]=k;tr(a,68775,j);h[f>>3]=i*2.0;h[f+8>>3]=g*2.0;tr(a,68799,f);Ie(a,d);nr(a,68621)|0;Ge(a);nr(a,68827)|0;l=e;return}function Ae(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,g=0,i=0.0,j=0,k=0,m=0,n=0;m=l;l=l+48|0;k=m+24|0;j=m+8|0;g=m;nr(a,68344)|0;n=c[41913]|0;c[g>>2]=c[41912];c[g+4>>2]=n;tr(a,68597,g);Ie(a,e);nr(a,68621)|0;Ge(a);nr(a,68624)|0;g=d+-1|0;e=0;while(1){if((e|0)>=(d|0))break;i=+h[b+(e<<4)>>3];f=+((c[41913]|0)>>>0)-+h[b+(e<<4)+8>>3];if(!e){nr(a,68651)|0;h[j>>3]=i;h[j+8>>3]=f;tr(a,68717,j);nr(a,68728)|0}else{h[k>>3]=i;h[k+8>>3]=f;tr(a,68717,k)}if((e|0)==(g|0))nr(a,68731)|0;e=e+1|0}nr(a,68460)|0;l=m;return}function Be(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0;f=l;l=l+16|0;e=f;nr(a,68344)|0;h=c[41913]|0;c[e>>2]=c[41912];c[e+4>>2]=h;tr(a,68597,e);Ie(a,g);nr(a,68621)|0;Ge(a);nr(a,68624)|0;Je(a,b,d);nr(a,68637)|0;l=f;return}function Ce(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,m=0.0;k=l;l=l+48|0;j=k+24|0;i=k+8|0;f=k;nr(a,68344)|0;g=c[41913]|0;c[f>>2]=c[41912];c[f+4>>2]=g;tr(a,68381,f);nr(a,68421)|0;f=d+-1|0;g=b+8|0;e=0;while(1){if((e|0)>=(d|0))break;if(!e){nr(a,68433)|0;m=+((c[41913]|0)>>>0)-+h[g>>3];h[i>>3]=+h[b>>3];h[i+8>>3]=m;tr(a,68437,i);nr(a,68448)|0}else{m=+((c[41913]|0)>>>0)-+h[b+(e<<4)+8>>3];h[j>>3]=+h[b+(e<<4)>>3];h[j+8>>3]=m;tr(a,68437,j)}if((e|0)==(f|0))nr(a,68452)|0;e=e+1|0}nr(a,68456)|0;Ge(a);nr(a,68460)|0;l=k;return}function De(a,b){a=a|0;b=b|0;nr(a,68279)|0;nr(a,Ee(b)|0)|0;nr(a,68291)|0;return}function Ee(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+16|0;e=u;d=c[41910]|0;if(!d){c[41911]=64;d=xw(64)|0;c[41910]=d}s=e+15|0;r=e+14|0;g=0;q=0;o=0;e=0;f=0;a:while(1){n=(o|0)!=0;k=g;p=b;j=e;b:while(1){if(!p){t=32;break a}e=a[p>>0]|0;if(!(e<<24>>24)){t=32;break a}b=c[41911]|0;if((q|0)>(b+-8|0)){d=b<<1;c[41911]=d;d=zw(c[41910]|0,d)|0;c[41910]=d;d=d+q|0;e=a[p>>0]|0}switch(e<<24>>24){case 60:{e=4;b=87187;t=26;break b}case 62:{e=4;b=87170;t=27;break b}case 38:{t=10;break b}case 45:{e=5;b=87181;i=j;break b}default:{}}if(n&e<<24>>24==32){t=12;break}switch(e<<24>>24){case 34:{e=6;b=87150;t=26;break b}case 39:{e=5;b=87175;t=27;break b}default:{}}if(e<<24>>24<0){i=127;b=0}else{e=1;b=p;t=26;break}while(1){g=i&255;h=e&255;if(g>>>0>=h>>>0)break;e=i&h&255;i=g>>>1;b=b+1|0}if((b|0)<=1){g=PN(j|0,f|0,6)|0;g=IN(g|0,z|0,e&255|0,0)|0;f=z;m=k+-1|0;if((k|0)>1){b=m;e=g}else{t=21;break}}else{b=b+-1|0;e=e&255;f=0}k=b;p=p+1|0;j=e}if((t|0)==10){t=0;b=(Fe(p)|0)==0;e=b?5:1;b=b?87164:p;i=j}else if((t|0)==12){t=0;b=(a[o>>0]|0)==32;e=b?6:1;b=b?87157:p;i=j}else if((t|0)==21){t=0;a[s>>0]=59;e=3;h=r;i=g;j=f;while(1){b=NN(i|0,j|0,10,0)|0;g=h+-1|0;a[h>>0]=b|48;b=i;i=MN(i|0,j|0,10,0)|0;f=j;j=z;o=e;e=e+1|0;if((o|0)>11){t=23;break a}if(!(f>>>0>0|(f|0)==0&b>>>0>9))break;else h=g}b=h+-2|0;a[g>>0]=35;a[b>>0]=38;k=m;f=j}else if((t|0)==26){t=0;i=j}else if((t|0)==27){t=0;i=j}h=d+e|0;g=e;while(1){if(!g)break;a[d>>0]=a[b>>0]|0;g=g+-1|0;b=b+1|0;d=d+1|0}g=k;b=p+1|0;q=e+q|0;o=p;d=h;e=i}if((t|0)==23){YL(68297,46,1,c[13918]|0)|0;Ma(1)}else if((t|0)==32){a[d>>0]=0;l=u;return c[41910]|0}return 0}function Fe(b){b=b|0;var c=0,d=0;d=b+1|0;c=a[d>>0]|0;a:do if(c<<24>>24==35){d=b+2|0;c=a[d>>0]|0;switch(c<<24>>24){case 88:case 120:break;default:{b=d;while(1){d=b+1|0;if((c+-48&255)>=10)break a;b=d;c=a[d>>0]|0}}}d=b+3|0;while(1){c=a[d>>0]|0;if((c+-48&255)>=10)switch(c<<24>>24){case 65:case 66:case 67:case 68:case 69:case 70:case 97:case 98:case 99:case 100:case 101:case 102:break;default:break a}d=d+1|0}}else while(1){b=d+1|0;if(((c&-33)+-65&255)>=26)break a;d=b;c=a[b>>0]|0}while(0);return c<<24>>24==59|0}function Ge(a){a=a|0;var b=0.0,d=0,e=0,f=0,g=0,i=0,j=0,k=0;k=l;l=l+48|0;d=k+8|0;j=k;i=c[a+16>>2]|0;nr(a,68472)|0;e=d;f=i+16|0;g=e+40|0;do{c[e>>2]=c[f>>2];e=e+4|0;f=f+4|0}while((e|0)<(g|0));He(a,d);b=+h[i+152>>3];if(b!=1.0){h[j>>3]=b;tr(a,68490,j)}switch(c[i+144>>2]|0){case 1:{nr(a,68507)|0;break}case 2:{nr(a,68525)|0;break}default:{}}nr(a,68542)|0;l=k;return}function He(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0;g=l;l=l+16|0;f=g;a:do switch(c[e+32>>2]|0){case 5:{nr(b,c[e>>2]|0)|0;break}case 1:if(!(a[e+3>>0]|0)){nr(b,120501)|0;break a}else{i=d[e+1>>0]|0;h=d[e+2>>0]|0;c[f>>2]=d[e>>0];c[f+4>>2]=i;c[f+8>>2]=h;tr(b,68547,f);break a}default:ma(123205,68561,94,68581)}while(0);l=g;return}function Ie(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=l;l=l+48|0;f=g;if(!b)nr(a,68700)|0;else{d=c[a+16>>2]|0;nr(a,68670)|0;b=f;d=d+56|0;e=b+40|0;do{c[b>>2]=c[d>>2];b=b+4|0;d=d+4|0}while((b|0)<(e|0));He(a,f);nr(a,68697)|0}l=g;return}function Je(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0.0,k=0.0;i=l;l=l+32|0;g=i;e=68651;f=0;while(1){if((f|0)>=(d|0))break;k=+h[b+(f<<4)>>3];j=+((c[41913]|0)>>>0)-+h[b+(f<<4)+8>>3];c[g>>2]=e;h[g+8>>3]=k;h[g+16>>3]=j;tr(a,68654,g);e=(f|0)==0?68667:174185;f=f+1|0}nr(a,83714)|0;l=i;return}function Ke(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b+8|0;e=b;nr(a,73284)|0;nr(a,73299)|0;nr(a,73338)|0;nr(a,73387)|0;c[e>>2]=122106;c[e+4>>2]=73475;tr(a,73456,e);c[d>>2]=121990;c[d+4>>2]=73481;tr(a,73456,d);l=b;return}function Le(a){a=a|0;var b=0,d=0,e=0.0,f=0.0,g=0.0,i=0.0,j=0;b=l;l=l+64|0;d=b+8|0;j=b;c[j>>2]=En(c[(c[a+16>>2]|0)+8>>2]|0)|0;tr(a,72237,j);i=+h[a+368>>3]*.5*+h[a+488>>3];g=+h[a+376>>3]*.5*+h[a+496>>3];f=+J(+(i*2.0000000949949026e-03))*180.0*.6366197723675814;e=+J(+(g*2.0000000949949026e-03))*180.0*.6366197723675814;h[d>>3]=i;h[d+8>>3]=g;h[d+16>>3]=-500.0;h[d+24>>3]=i;h[d+32>>3]=g;h[d+40>>3]=0.0;h[d+48>>3]=(f>e?f:e)*1.2;tr(a,72259,d);nr(a,72406)|0;nr(a,73236)|0;l=b;return}function Me(a){a=a|0;nr(a,72220)|0;return}function Ne(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0;f=l;l=l+16|0;h=f;c[h>>2]=b;c[h+4>>2]=d;c[h+8>>2]=e;tr(a,72190,h);g[41914]=+(O(d,-10)|0);l=f;return}function Oe(a){a=a|0;nr(a,72173)|0;return}function Pe(a){a=a|0;nr(a,72155)|0;return}function Qe(a){a=a|0;nr(a,72139)|0;return}function Re(a){a=a|0;nr(a,72118)|0;g[41914]=+g[41914]+-2.0;return}function Se(a){a=a|0;nr(a,72099)|0;return}function Te(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=En(c[(c[a+16>>2]|0)+8>>2]|0)|0;tr(a,72077,d);l=b;return}function Ue(a){a=a|0;nr(a,72061)|0;return}function Ve(a){a=a|0;nr(a,72043)|0;g[41914]=+g[41914]+-5.0;return}function We(a){a=a|0;nr(a,72027)|0;g[41914]=+g[41914]+5.0;return}function Xe(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0.0,u=0.0;r=l;l=l+144|0;o=r+104|0;q=r+56|0;m=r+32|0;j=r+24|0;n=r;p=e+4|0;i=c[p>>2]|0;f=+h[i+16>>3];i=c[i>>2]|0;c[n>>2]=c[e>>2];h[n+8>>3]=f;c[n+16>>2]=i;tr(b,71873,n);g[41915]=+g[41914]+-9.0;switch(a[e+48>>0]|0){case 108:{f=+h[d>>3];break}case 114:{i=d;f=+h[d>>3]-+h[e+32>>3];k=5;break}default:{i=d;f=+h[d>>3]-+h[e+32>>3]*.5;k=5}}if((k|0)==5)h[i>>3]=f;u=+h[b+488>>3];t=(+h[b+504>>3]+f)*u;s=(+h[b+512>>3]+ +h[d+8>>3])*+h[b+496>>3];h[j>>3]=+h[(c[p>>2]|0)+16>>3]*u;n=bf(b,71925,j)|0;f=+(c[b+360>>2]|0);h[m>>3]=0.0;h[m+8>>3]=0.0;h[m+16>>3]=f;i=bf(b,71142,m)|0;f=+g[41915];h[o>>3]=t;h[o+8>>3]=s;h[o+16>>3]=f;d=bf(b,71174,o)|0;j=o;k=(c[b+16>>2]|0)+16|0;m=j+40|0;do{c[j>>2]=c[k>>2];j=j+4|0;k=k+4|0}while((j|0)<(m|0));o=cf(b,o,0.0)|0;e=c[e>>2]|0;c[q>>2]=c[c[p>>2]>>2];h[q+8>>3]=.25;h[q+16>>3]=0.0;c[q+24>>2]=e;c[q+28>>2]=72012;c[q+32>>2]=n;c[q+36>>2]=i;c[q+40>>2]=d;c[q+44>>2]=o;q=bf(b,71937,q)|0;nr(b,q)|0;$I(q);$I(i);$I(o);$I(d);$I(n);l=r;return}function Ye(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,i=0.0,j=0.0,k=0.0,m=0,n=0,o=0,p=0.0,q=0.0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.0;z=l;l=l+240|0;x=z+192|0;y=z+152|0;t=z+128|0;r=z+104|0;o=z+80|0;n=z+48|0;e=z+24|0;m=z;nr(a,71750)|0;g[41915]=+g[41914]+-6.0;i=+h[b>>3];j=+h[a+488>>3];p=(+h[a+504>>3]+i)*j;A=+h[b+8>>3];k=+h[a+496>>3];q=(+h[a+512>>3]+A)*k;j=(+h[b+16>>3]-i)*j;k=(+h[b+24>>3]-A)*k;s=a+16|0;A=k+j;i=+h[(c[s>>2]|0)+152>>3]/A*2.5;h[m>>3]=j;h[m+8>>3]=A*.25;h[m+16>>3]=k;b=bf(a,71110,m)|0;m=a+360|0;A=+(c[m>>2]|0);h[e>>3]=90.0;h[e+8>>3]=0.0;h[e+16>>3]=A;e=bf(a,71142,e)|0;A=+g[41915];h[x>>3]=p;h[x+8>>3]=q;h[x+16>>3]=A;f=bf(a,71174,x)|0;u=x;v=(c[s>>2]|0)+16|0;w=u+40|0;do{c[u>>2]=c[v>>2];u=u+4|0;v=v+4|0}while((u|0)<(w|0));v=cf(a,x,0.0)|0;h[n>>3]=1.0;h[n+8>>3]=i;c[n+16>>2]=b;c[n+20>>2]=e;c[n+24>>2]=f;c[n+28>>2]=v;w=bf(a,71765,n)|0;nr(a,w)|0;$I(b);$I(e);$I(f);$I(v);$I(w);if(d|0){h[o>>3]=j;h[o+8>>3]=k;h[o+16>>3]=1.0;f=bf(a,71110,o)|0;A=+(c[m>>2]|0);h[r>>3]=0.0;h[r+8>>3]=0.0;h[r+16>>3]=A;e=bf(a,71142,r)|0;A=+g[41915];h[t>>3]=p;h[t+8>>3]=q;h[t+16>>3]=A;b=bf(a,71174,t)|0;u=x;v=(c[s>>2]|0)+56|0;w=u+40|0;do{c[u>>2]=c[v>>2];u=u+4|0;v=v+4|0}while((u|0)<(w|0));x=cf(a,x,0.0)|0;h[y>>3]=0.0;h[y+8>>3]=0.0;h[y+16>>3]=0.0;c[y+24>>2]=f;c[y+28>>2]=e;c[y+32>>2]=b;c[y+36>>2]=x;y=bf(a,71811,y)|0;nr(a,y)|0;$I(f);$I(e);$I(b);$I(x);$I(y)}l=z;return}function Ze(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0.0,M=0,N=0.0;K=l;l=l+336|0;B=K+296|0;J=K+288|0;I=K+272|0;H=K+264|0;G=K+240|0;D=K+232|0;A=K+208|0;z=K+184|0;w=K+160|0;v=K+152|0;u=K+136|0;t=K+128|0;s=K+96|0;r=K+88|0;q=K+56|0;f=K+48|0;m=K+24|0;k=K;nr(a,71615)|0;g[41915]=+g[41914]+-2.0;o=a+488|0;p=a+496|0;L=+h[p>>3];h[k>>3]=+h[o>>3];h[k+8>>3]=L;h[k+16>>3]=1.0;k=bf(a,71110,k)|0;y=a+360|0;L=+(c[y>>2]|0);h[m>>3]=0.0;h[m+8>>3]=0.0;h[m+16>>3]=L;m=bf(a,71142,m)|0;L=+g[41915]+-2.0;h[B>>3]=0.0;h[B+8>>3]=0.0;h[B+16>>3]=L;n=bf(a,71174,B)|0;C=a+16|0;i=B;j=(c[C>>2]|0)+16|0;x=i+40|0;do{c[i>>2]=c[j>>2];i=i+4|0;j=j+4|0}while((i|0)<(x|0));j=cf(a,B,0.0)|0;c[f>>2]=71237;c[f+4>>2]=d+1;E=a+504|0;F=a+512|0;i=0;f=bf(a,71206,f)|0;while(1){if((i|0)>=(d|0))break;N=+h[F>>3]+ +h[b+(i<<4)+8>>3];L=+h[(c[C>>2]|0)+152>>3];h[q>>3]=+h[E>>3]+ +h[b+(i<<4)>>3];h[q+8>>3]=N;h[q+16>>3]=0.0;h[q+24>>3]=L;M=bf(a,71251,q)|0;c[r>>2]=f;c[r+4>>2]=M;x=bf(a,71280,r)|0;$I(M);$I(f);i=i+1|0;f=x}L=+h[F>>3]+ +h[b+8>>3];N=+h[(c[C>>2]|0)+152>>3];h[s>>3]=+h[E>>3]+ +h[b>>3];h[s+8>>3]=L;h[s+16>>3]=0.0;h[s+24>>3]=N;x=bf(a,71251,s)|0;c[t>>2]=f;c[t+4>>2]=x;M=bf(a,71280,t)|0;$I(x);$I(f);c[u>>2]=k;c[u+4>>2]=m;c[u+8>>2]=n;c[u+12>>2]=j;x=bf(a,71630,u)|0;c[v>>2]=M;c[v+4>>2]=x;M=bf(a,71335,v)|0;$I(x);nr(a,M)|0;$I(k);$I(m);$I(n);$I(j);$I(M);if(e|0){N=+h[p>>3];h[w>>3]=+h[o>>3];h[w+8>>3]=N;h[w+16>>3]=1.0;n=bf(a,71110,w)|0;N=+(c[y>>2]|0);h[z>>3]=0.0;h[z+8>>3]=0.0;h[z+16>>3]=N;m=bf(a,71142,z)|0;N=+g[41915]+-2.0;h[A>>3]=0.0;h[A+8>>3]=0.0;h[A+16>>3]=N;k=bf(a,71174,A)|0;i=B;j=(c[C>>2]|0)+56|0;x=i+40|0;do{c[i>>2]=c[j>>2];i=i+4|0;j=j+4|0}while((i|0)<(x|0));j=cf(a,B,.25)|0;c[D>>2]=d;i=0;f=bf(a,71675,D)|0;while(1){if((i|0)>=(d|0))break;N=+h[F>>3]+ +h[b+(i<<4)+8>>3];h[G>>3]=+h[E>>3]+ +h[b+(i<<4)>>3];h[G+8>>3]=N;h[G+16>>3]=0.0;D=bf(a,71690,G)|0;c[H>>2]=f;c[H+4>>2]=D;M=bf(a,71712,H)|0;$I(D);$I(f);i=i+1|0;f=M}c[I>>2]=n;c[I+4>>2]=m;c[I+8>>2]=k;c[I+12>>2]=j;I=bf(a,71722,I)|0;c[J>>2]=f;c[J+4>>2]=I;M=bf(a,71335,J)|0;$I(I);nr(a,M)|0;$I(n);$I(m);$I(k);$I(j);$I(M)}l=K;return}function _e(a,b,d,e,f,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0.0,D=0.0;B=l;l=l+208|0;e=B+160|0;A=B+152|0;z=B+136|0;y=B+128|0;x=B+96|0;w=B+88|0;v=B+56|0;k=B+48|0;s=B+24|0;r=B;nr(a,71542)|0;g[41915]=+g[41914]+-4.0;C=+h[a+496>>3];h[r>>3]=+h[a+488>>3];h[r+8>>3]=C;h[r+16>>3]=1.0;r=bf(a,71110,r)|0;C=+(c[a+360>>2]|0);h[s>>3]=0.0;h[s+8>>3]=0.0;h[s+16>>3]=C;s=bf(a,71142,s)|0;C=+g[41915]+-2.0;h[e>>3]=0.0;h[e+8>>3]=0.0;h[e+16>>3]=C;t=bf(a,71174,e)|0;u=a+16|0;f=e;i=(c[u>>2]|0)+56|0;j=f+40|0;do{c[f>>2]=c[i>>2];f=f+4|0;i=i+4|0}while((f|0)<(j|0));n=cf(a,e,0.0)|0;c[k>>2]=71556;c[k+4>>2]=d+2;o=a+504|0;p=a+512|0;q=d+-1|0;m=0;e=bf(a,71206,k)|0;while(1){if((m|0)>=(d|0))break;f=b+(m<<4)|0;i=b+(m<<4)+8|0;D=+h[p>>3]+ +h[i>>3];C=+h[(c[u>>2]|0)+152>>3];h[v>>3]=+h[o>>3]+ +h[f>>3];h[v+8>>3]=D;h[v+16>>3]=0.0;h[v+24>>3]=C;k=bf(a,71251,v)|0;c[w>>2]=e;c[w+4>>2]=k;j=bf(a,71280,w)|0;$I(k);$I(e);if((m|0)==0|(m|0)==(q|0)){C=+h[p>>3]+ +h[i>>3];D=+h[(c[u>>2]|0)+152>>3];h[x>>3]=+h[o>>3]+ +h[f>>3];h[x+8>>3]=C;h[x+16>>3]=0.0;h[x+24>>3]=D;k=bf(a,71251,x)|0;c[y>>2]=j;c[y+4>>2]=k;e=bf(a,71280,y)|0;$I(k);$I(j)}else e=j;m=m+1|0}c[z>>2]=r;c[z+4>>2]=s;c[z+8>>2]=t;c[z+12>>2]=n;b=bf(a,71565,z)|0;c[A>>2]=e;c[A+4>>2]=b;d=bf(a,71335,A)|0;$I(b);nr(a,d)|0;$I(r);$I(s);$I(t);$I(n);$I(d);l=B;return}function $e(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0.0,x=0,y=0.0;v=l;l=l+160|0;e=v+120|0;u=v+112|0;t=v+96|0;s=v+88|0;r=v+56|0;m=v+48|0;n=v+24|0;q=v;nr(a,71094)|0;g[41915]=+g[41914]+-6.0;w=+h[a+496>>3];h[q>>3]=+h[a+488>>3];h[q+8>>3]=w;h[q+16>>3]=1.0;q=bf(a,71110,q)|0;w=+(c[a+360>>2]|0);h[n>>3]=0.0;h[n+8>>3]=0.0;h[n+16>>3]=w;n=bf(a,71142,n)|0;w=+g[41915];h[e>>3]=0.0;h[e+8>>3]=0.0;h[e+16>>3]=w;o=bf(a,71174,e)|0;p=a+16|0;f=e;i=(c[p>>2]|0)+16|0;j=f+40|0;do{c[f>>2]=c[i>>2];f=f+4|0;i=i+4|0}while((f|0)<(j|0));i=cf(a,e,0.0)|0;c[m>>2]=71237;c[m+4>>2]=d;j=a+504|0;k=a+512|0;f=0;e=bf(a,71206,m)|0;while(1){if((f|0)>=(d|0))break;y=+h[k>>3]+ +h[b+(f<<4)+8>>3];w=+h[(c[p>>2]|0)+152>>3];h[r>>3]=+h[j>>3]+ +h[b+(f<<4)>>3];h[r+8>>3]=y;h[r+16>>3]=0.0;h[r+24>>3]=w;x=bf(a,71251,r)|0;c[s>>2]=e;c[s+4>>2]=x;m=bf(a,71280,s)|0;$I(x);$I(e);f=f+1|0;e=m}c[t>>2]=q;c[t+4>>2]=n;c[t+8>>2]=o;c[t+12>>2]=i;t=bf(a,71289,t)|0;c[u>>2]=e;c[u+4>>2]=t;x=bf(a,71335,u)|0;$I(t);nr(a,x)|0;$I(q);$I(n);$I(o);$I(i);$I(x);l=v;return}function af(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;tr(a,71075,e);l=d;return}function bf(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+1056|0;h=i;e=i+24|0;f=i+8|0;c[f>>2]=d;g=MK(e,1024,b,f)|0;do if((g|0)>=0)if((g|0)>1023){a=_I(g+1|0)|0;c[f>>2]=d;rL(a,b,f)|0;break}else{a=HL(e)|0;break}else{a=c[(c[a+12>>2]|0)+16>>2]|0;c[h>>2]=zJ(c[(kJ()|0)>>2]|0)|0;hb[a&31](71520,h);a=HL(174185)|0}while(0);l=i;return a|0}function cf(a,b,e){a=a|0;b=b|0;e=+e;var f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0.0;q=l;l=l+112|0;o=q+104|0;j=q+96|0;i=q+64|0;n=q+48|0;p=q+32|0;m=q+16|0;k=q;g=c[b+32>>2]|0;a:do switch(g|0){case 5:{f=c[b>>2]|0;if(!(yJ(f,121094)|0)){c[k>>2]=71357;h[k+8>>3]=e;f=bf(a,71340,k)|0;break a}if(!(yJ(f,118224)|0)){c[m>>2]=71361;h[m+8>>3]=e;f=bf(a,71340,m)|0;break a}if(!(yJ(f,116223)|0)){c[p>>2]=71367;h[p+8>>3]=e;f=bf(a,71340,p)|0;break a}else{c[n>>2]=f;h[n+8>>3]=e;f=bf(a,71340,n)|0;break a}}case 1:{s=+(d[b+1>>0]|0)*.00390625;r=+(d[b+2>>0]|0)*.00390625;h[i>>3]=+(d[b>>0]|0)*.00390625;h[i+8>>3]=s;h[i+16>>3]=r;h[i+24>>3]=e;f=bf(a,71372,i)|0;break}default:{p=c[13918]|0;n=c[b>>2]|0;c[j>>2]=g;c[j+4>>2]=n;AL(p,71411,j)|0;ma(123205,71461,436,71481)}}while(0);c[o>>2]=f;p=bf(a,71498,o)|0;$I(f);l=q;return p|0}function df(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;b=l;l=l+32|0;d=b+24|0;e=b+16|0;g=b;f=c[a+16>>2]|0;h=c[c[a+12>>2]>>2]|0;j=c[h>>2]|0;i=c[h+4>>2]|0;h=c[h+8>>2]|0;c[g>>2]=73927;c[g+4>>2]=j;c[g+8>>2]=i;c[g+12>>2]=h;tr(a,76546,g);f=En(c[f+8>>2]|0)|0;c[e>>2]=73927;c[e+4>>2]=f;tr(a,76578,e);c[d>>2]=73927;tr(a,76592,d);l=b;return}function ef(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=73927;tr(a,76494,d);l=b;return}function ff(a){a=a|0;var b=0.0,d=0.0,e=0.0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0;W=l;l=l+304|0;V=W+296|0;U=W+288|0;T=W+272|0;R=W+264|0;Q=W+256|0;P=W+248|0;O=W+240|0;N=W+232|0;M=W+224|0;L=W+216|0;K=W+208|0;J=W+200|0;I=W+192|0;H=W+184|0;G=W+176|0;F=W+168|0;E=W+160|0;C=W+152|0;A=W+144|0;z=W+136|0;y=W+128|0;x=W+120|0;w=W+112|0;v=W+104|0;u=W+96|0;t=W+88|0;s=W+80|0;r=W+72|0;q=W+64|0;p=W+56|0;o=W+48|0;S=W+40|0;B=W+24|0;n=W+16|0;m=W;g=c[a+456>>2]|0;i=c[a+460>>2]|0;j=c[a+464>>2]|0;k=c[a+468>>2]|0;f=a+360|0;a:do if(c[4007]|0){switch(c[f>>2]|0){case 90:case 0:break a;default:{}}sf();c[4007]=0}while(0);e=(+(k|0)-+(i|0))*.013888888888888888;b=(+(j|0)-+(g|0))*.013888888888888888;k=(c[f>>2]|0)==90;d=k?e:b;e=k?b:e;h[m>>3]=d;h[m+8>>3]=e;tr(a,74114,m);c[n>>2]=73927;tr(a,74129,n);if(d>0.0){b=+GJ(d);h[16877]=b;b=b+3.0-+(~~b|0)}else b=3.0;b=+D(10.0,+b);h[16877]=b;h[B>>3]=b;h[B+8>>3]=b;tr(a,74298,B);c[S>>2]=73927;tr(a,74333,S);c[o>>2]=73927;tr(a,74391,o);c[p>>2]=73927;tr(a,74451,p);c[q>>2]=73927;tr(a,74500,q);c[r>>2]=73927;tr(a,74539,r);c[s>>2]=73927;tr(a,74590,s);c[t>>2]=73927;tr(a,74652,t);c[u>>2]=73927;tr(a,74762,u);c[v>>2]=73927;tr(a,74853,v);c[w>>2]=73927;tr(a,74907,w);c[x>>2]=73927;tr(a,74976,x);tr(a,75012,y);c[z>>2]=73927;tr(a,75137,z);c[A>>2]=73927;tr(a,75166,A);tr(a,75206,C);c[E>>2]=73927;tr(a,75299,E);c[F>>2]=73927;tr(a,75358,F);c[G>>2]=73927;tr(a,75439,G);tr(a,75509,H);c[I>>2]=73927;tr(a,75598,I);c[J>>2]=73927;tr(a,75703,J);c[K>>2]=73927;tr(a,75779,K);c[L>>2]=73927;tr(a,75818,L);c[M>>2]=73927;tr(a,75917,M);c[N>>2]=73927;tr(a,75963,N);tr(a,76052,O);c[P>>2]=73927;tr(a,76093,P);c[Q>>2]=73927;tr(a,76176,Q);c[R>>2]=73927;tr(a,76277,R);h[T>>3]=e;h[T+8>>3]=d;tr(a,76341,T);tr(a,76369,U);tr(a,76377,V);l=W;return}function gf(a){a=a|0;var b=0;b=l;l=l+16|0;tr(a,74107,b);l=b;return}function hf(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0.0,i=0.0,j=0.0,k=0,m=0,n=0.0,o=0,p=0,q=0,r=0;r=l;l=l+48|0;q=r+24|0;p=r+8|0;o=r;switch(a[e+48>>0]|0){case 108:{k=d;i=+h[e+32>>3];j=+h[d>>3];break}case 114:{i=+h[e+32>>3];g=i;f=5;break}default:{i=+h[e+32>>3];g=i*.5;f=5}}if((f|0)==5){j=+h[d>>3]-g;h[d>>3]=j;k=d}m=e+4|0;f=c[m>>2]|0;g=+h[f+16>>3];d=d+8|0;n=+h[d>>3]+g*.004629629629629629;h[d>>3]=n;i=j+i*.006944444444444444;h[k>>3]=i;f=c[f>>2]|0;do if(f){d=c[41916]|0;if(d|0?(yJ(d,f)|0)==0:0)break;c[o>>2]=qf(f)|0;tr(b,74006,o);o=c[m>>2]|0;c[41916]=c[o>>2];g=+h[o+16>>3]}while(0);f=~~g;f=(f|0)>1?f:1;if((f|0)!=(c[41917]|0)){j=+h[16877];c[p>>2]=f;h[p+8>>3]=j;tr(b,74014,p);c[41917]=f}c[q>>2]=rf(c[e>>2]|0)|0;h[q+8>>3]=i;h[q+16>>3]=n;tr(b,74035,q);l=r;return}function jf(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0,i=0.0,j=0.0,k=0.0;e=l;l=l+48|0;f=e;i=+h[b>>3];k=(+h[b+16>>3]-i)*.027777777777777776;g=+h[b+8>>3];j=(+h[b+24>>3]-g)*.027777777777777776;c[f>>2]=1;c[f+4>>2]=d|0?73948:174185;h[f+8>>3]=k;h[f+16>>3]=j;h[f+24>>3]=i*.013888888888888888;h[f+32>>3]=g*.013888888888888888;tr(a,73954,f);l=e;return}function kf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;e=l;l=l+16|0;of(c[a+16>>2]|0,e+8|0,e);pf(a,b,d,1);l=e;return}function lf(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0,v=0.0,w=0;t=l;l=l+128|0;s=t+112|0;q=t+104|0;p=t+96|0;e=t+88|0;n=t+16|0;o=t;k=c[a+16>>2]|0;j=_I((d*140|0)+140|0)|0;of(k,t+116|0,t+80|0);v=+h[b>>3];k=n+48|0;h[k>>3]=v;u=+h[b+8>>3];h[n+56>>3]=u;c[e>>2]=~~(v+(v>=0.0?.5:-.5));c[e+4>>2]=~~(u+(u>=0.0?.5:-.5));i=o+8|0;e=j+(qL(j,73932,e)|0)|0;r=1;g=0;while(1){m=g+3|0;if((m|0)>=(d|0))break;c[n>>2]=c[k>>2];c[n+4>>2]=c[k+4>>2];c[n+8>>2]=c[k+8>>2];c[n+12>>2]=c[k+12>>2];f=1;while(1){if((f|0)==4){f=1;break}w=f+g|0;h[n+(f<<4)>>3]=+h[b+(w<<4)>>3];h[n+(f<<4)+8>>3]=+h[b+(w<<4)+8>>3];f=f+1|0}while(1){if((f|0)==7)break;QA(o,n,3,+(f|0)*.16666666666666666,0,0);u=+h[o>>3];v=+h[i>>3];c[p>>2]=~~(u+(u>=0.0?.5:-.5));c[p+4>>2]=~~(v+(v>=0.0?.5:-.5));f=f+1|0;e=e+(qL(e,73932,p)|0)|0}r=r+6|0;g=m}c[q>>2]=j;tr(a,73939,q);$I(j);f=r+-1|0;e=0;while(1){if((e|0)>=(r|0))break;c[s>>2]=((e|0)%(f|0)|0|0)!=0&1;tr(a,73944,s);e=e+1|0}nr(a,134901)|0;l=t;return}function mf(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=l;l=l+16|0;of(c[a+16>>2]|0,e+8|0,e);pf(a,b,d,0);l=e;return}function nf(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=73927;c[e+4>>2]=b;tr(a,73920,e);l=d;return}function of(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;switch(c[a+144>>2]|0){case 1:{e=10.0;a=1;break}case 2:{e=10.0;a=2;break}default:{e=0.0;a=0}}c[b>>2]=a;h[d>>3]=e;return}function pf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0.0,m=0.0;j=l;l=l+16|0;i=j+8|0;g=j;f=0;while(1){if((f|0)>=(d|0))break;m=+h[b+(f<<4)>>3];k=+h[b+(f<<4)+8>>3];c[g>>2]=~~(m+(m>=0.0?.5:-.5));c[g+4>>2]=~~(k+(k>=0.0?.5:-.5));tr(a,73932,g);f=f+1|0}if(e|0){k=+h[b>>3];m=+h[b+8>>3];c[i>>2]=~~(k+(k>=0.0?.5:-.5));c[i+4>>2]=~~(m+(m>=0.0?.5:-.5));tr(a,73932,i)}nr(a,134901)|0;l=j;return}function qf(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;h=l;l=l+16|0;f=h;a:while(1){d=15756;while(1){e=c[d+4>>2]|0;if(!e)break;if(!(yJ(e,b)|0)){g=6;break a}d=d+8|0}c[f>>2]=74088;c[f+4>>2]=b;$l(1,74062,f)|0;d=IL(b,45)|0;if(!d){d=74105;break}a[d>>0]=0}l=h;return d|0}function rf(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;h=i;d=c[41918]|0;if(!d){c[41919]=64;d=_I(64)|0;c[41918]=d;e=0}else e=0;while(1){g=b+1|0;f=a[b>>0]|0;if(!(f<<24>>24))break;b=c[41919]|0;if((e|0)>(b+-8|0)){d=b<<1;c[41919]=d;d=bJ(c[41918]|0,d)|0;c[41918]=d;d=d+e|0}if(f<<24>>24<=-1){a[d>>0]=92;c[h>>2]=f&255;qL(d+1|0,74057,h)|0;b=g;d=d+4|0;e=e+4|0;continue}if(f<<24>>24==92){a[d>>0]=92;e=e+1|0;d=d+1|0}a[d>>0]=f;b=g;d=d+1|0;e=e+1|0}a[d>>0]=0;l=i;return c[41918]|0}function sf(){var a=0,b=0;a=l;l=l+16|0;b=a;c[b>>2]=74088;c[b+4>>2]=76485;$l(0,76467,b)|0;l=a;return}function tf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0.0,i=0.0,j=0,k=0;e=l;l=l+32|0;f=e+8|0;j=e;b=b+8|0;k=c[b>>2]|0;c[j>>2]=k;c[j+4>>2]=k;tr(a,77065,j);i=(+h[d>>3]+ +h[d+16>>3])*.5;g=(+h[d+8>>3]+ +h[d+24>>3])*.5;c[f>>2]=c[b>>2];h[f+8>>3]=i;h[f+16>>3]=g;tr(a,77107,f);l=e;return}function uf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0.0,i=0.0,j=0.0,k=0.0;e=l;l=l+48|0;f=e;i=+h[d>>3];k=+h[d+16>>3]-i;g=+h[d+24>>3];j=g-+h[d+8>>3];g=+(~~(+h[a+232>>3]-+h[a+216>>3])>>>0)-g;c[f>>2]=c[b+8>>2];h[f+8>>3]=k;h[f+16>>3]=j;h[f+24>>3]=i;h[f+32>>3]=g;tr(a,77152,f);nr(a,77244)|0;l=e;return}function vf(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return}function wf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,g=0.0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0;t=l;l=l+160|0;s=t+152|0;r=t+136|0;q=t+120|0;k=t+112|0;n=t+104|0;m=t+88|0;j=t+72|0;i=t+64|0;o=t;if(!a)ma(96061,77249,212,77268);if(!b)ma(96091,77249,213,77268);p=b+8|0;if(!(c[p>>2]|0))ma(96094,77249,214,77268);if(c[b+52>>2]|0){c[o>>2]=c[d>>2];c[o+4>>2]=c[d+4>>2];c[o+8>>2]=c[d+8>>2];c[o+12>>2]=c[d+12>>2];b=o+32|0;d=d+16|0;c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];c[b+12>>2]=c[d+12>>2];f=+h[o>>3];h[o+16>>3]=f;h[o+24>>3]=+h[o+40>>3];h[o+48>>3]=+h[b>>3];g=+h[o+8>>3];h[o+56>>3]=g;if(e<<24>>24){tr(a,77289,i);b=0;while(1){if((b|0)==4)break;u=+h[o+(b<<4)+8>>3];h[j>>3]=+h[o+(b<<4)>>3];h[j+8>>3]=u;tr(a,77292,j);b=b+1|0}h[m>>3]=f;h[m+8>>3]=g;tr(a,77292,m);m=c[p>>2]|0;c[n>>2]=4;c[n+4>>2]=m;tr(a,77299,n)}tr(a,77289,k);b=0;while(1){if((b|0)==4)break;u=+h[o+(b<<4)+8>>3];h[q>>3]=+h[o+(b<<4)>>3];h[q+8>>3]=u;tr(a,77292,q);b=b+1|0}h[r>>3]=f;h[r+8>>3]=g;tr(a,77292,r);r=c[p>>2]|0;c[s>>2]=4;c[s+4>>2]=r;tr(a,77314,s)}l=t;return}function xf(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0.0;o=l;l=l+112|0;n=o+24|0;m=o+16|0;k=o;i=o+28|0;if(!b)ma(96061,77249,153,77330);if(!d)ma(96091,77249,154,77330);if(!(c[d+8>>2]|0))ma(96094,77249,155,77330);j=d+52|0;if(c[j>>2]|0){f=d+60|0;g=c[f>>2]|0;if((g|0)==84)g=18;else{gb[g&127](d);c[j>>2]=0;c[f>>2]=0;c[d+56>>2]=0;g=10}}else g=10;do if((g|0)==10){if(!((Nr(d)|0)<<24>>24))break;f=AN(c[d+20>>2]|0)|0;if((c[d+24>>2]&-2|0)==6){$L(f,i)|0;i=c[i+36>>2]|0;c[d+56>>2]=i;f=qJ(0,i,1,1,f,0)|0;c[j>>2]=f;a[d+16>>0]=1}else f=c[j>>2]|0;if(f|0)c[d+60>>2]=84;Or(d);if(c[j>>2]|0)g=18}while(0);if((g|0)==18){p=+h[e+8>>3]-+(c[d+36>>2]|0);h[k>>3]=+h[e>>3]-+(c[d+32>>2]|0);h[k+8>>3]=p;tr(b,77348,k);if(!(a[d+16>>0]|0)){c[m>>2]=c[d+12>>2];tr(b,77379,m)}else gy(b,d);tr(b,77394,n)}l=o;return}function yf(a){a=a|0;oJ(c[a+52>>2]|0,c[a+56>>2]|0)|0;return}function zf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+80|0;f=g+48|0;if(!a)ma(96061,77249,121,77404);e=c[a+16>>2]|0;if(!e)ma(84921,77249,123,77404);if(!b)ma(96091,77249,124,77404);d=b+8|0;if(!(c[d>>2]|0))ma(96094,77249,125,77404);if(!(c[e+8>>2]|0))ma(123690,77249,128,77404);else{tr(a,77424,g);tr(a,77433,g+8|0);tr(a,77460,g+16|0);tr(a,77485,g+24|0);tr(a,77514,g+32|0);tr(a,77542,g+40|0);c[f>>2]=c[d>>2];tr(a,77549,f);tr(a,77588,g+56|0);tr(a,95830,g+64|0);l=g;return}}function Af(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0.0;i=l;l=l+128|0;g=i+80|0;f=i;if(!a)ma(96061,77249,97,77593);if(!b)ma(96091,77249,98,77593);e=c[b+8>>2]|0;if(!e)ma(96094,77249,99,77593);else{m=+h[d>>3];j=~~(m+(m>=0.0?.5:-.5));m=+h[d+8>>3];b=~~(m+(m>=0.0?.5:-.5));m=+h[d+16>>3];k=~~(m+(m>=0.0?.5:-.5));m=+h[d+24>>3];d=~~(m+(m>=0.0?.5:-.5));c[f>>2]=2;c[f+4>>2]=5;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=-1;c[f+24>>2]=1;c[f+28>>2]=-1;c[f+32>>2]=0;h[f+40>>3]=0.0;c[f+48>>2]=0;c[f+52>>2]=0;c[f+56>>2]=0;c[f+60>>2]=0;c[f+64>>2]=0;c[f+68>>2]=5;c[f+72>>2]=0;c[f+76>>2]=e;tr(a,77612,f);c[g>>2]=j;c[g+4>>2]=b;c[g+8>>2]=j;c[g+12>>2]=d;c[g+16>>2]=k;c[g+20>>2]=d;c[g+24>>2]=k;c[g+28>>2]=b;c[g+32>>2]=j;c[g+36>>2]=b;tr(a,77670,g);l=i;return}}function Bf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,g=0.0,i=0.0,j=0.0,k=0,m=0,n=0,o=0;o=l;l=l+96|0;n=o+56|0;m=o+32|0;k=o;i=+h[d>>3];j=+h[d+16>>3]-i;f=+h[d+24>>3];g=f-+h[d+8>>3];if(!a)ma(96061,77249,53,77702);if(!b)ma(96091,77249,54,77702);e=b+8|0;if(!(c[e>>2]|0))ma(96094,77249,55,77702);nr(a,77721)|0;nr(a,c[e>>2]|0)|0;e=a+360|0;f=-f;if(!(c[e>>2]|0)){h[n>>3]=j;h[n+8>>3]=g;h[n+16>>3]=i;h[n+24>>3]=f;tr(a,77850,n)}else{h[k>>3]=g;h[k+8>>3]=j;h[k+16>>3]=i;h[k+24>>3]=f;tr(a,77741,k);c[m>>2]=c[e>>2];h[m+8>>3]=i;h[m+16>>3]=f;tr(a,77820,m)}nr(a,77929)|0;l=o;return}function Cf(a){a=a|0;var b=0,c=0;b=eo(a)|0;while(1){if(!b)break;Df(b);b=fo(a,b)|0}c=eo(a)|0;while(1){if(!c)break;b=Qm(a,c)|0;while(1){if(!b)break;Ef(b);b=Sm(a,b)|0}c=fo(a,c)|0}return}function Df(a){a=a|0;var b=0,d=0;Oo(a,122241,304,1)|0;XA(a);LB(a,c[(c[(so(a)|0)+16>>2]|0)+116>>2]&1);a=a+16|0;c[(c[a>>2]|0)+176>>2]=0;b=ww(20)|0;d=c[a>>2]|0;c[d+172>>2]=b;c[d+184>>2]=0;d=ww(20)|0;b=c[a>>2]|0;c[b+180>>2]=d;c[b+200>>2]=0;b=ww(12)|0;d=c[a>>2]|0;c[d+196>>2]=b;c[d+192>>2]=0;d=ww(12)|0;b=c[a>>2]|0;c[b+188>>2]=d;c[b+208>>2]=0;b=ww(12)|0;a=c[a>>2]|0;c[a+204>>2]=b;c[a+216>>2]=1;return}function Ef(d){d=d|0;var e=0,f=0,g=0,h=0,i=0;Oo(d,122254,176,1)|0;YA(d)|0;h=EA(d,c[42219]|0,1,0)|0;g=d+16|0;c[(c[g>>2]|0)+156>>2]=h;h=GA(c[((c[d>>2]&3|0)==3?d:d+48|0)+40>>2]|0,c[42213]|0,174185)|0;i=GA(c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0,c[42213]|0,174185)|0;e=c[g>>2]|0;f=e+154|0;b[f>>1]=1;b[e+168>>1]=1;if((h|0)==(i|0)&(a[h>>0]|0)!=0){b[f>>1]=1e3;i=e+156|0;c[i>>2]=(c[i>>2]|0)*100}if(Ak(d)|0){i=c[g>>2]|0;b[i+154>>1]=0;c[i+156>>2]=0}i=(EA(d,c[42232]|0,0,0)|0)&255;a[(c[g>>2]|0)+152>>0]=i;i=(EA(d,c[42220]|0,1,0)|0)&65535;b[(c[g>>2]|0)+170>>1]=i;return}function Ff(a){a=a|0;var b=0,d=0;Gf(c[(c[a+16>>2]|0)+192>>2]|0);d=eo(a)|0;while(1){if(!d)break;b=Qm(a,d)|0;while(1){if(!b)break;sB(b);b=Sm(a,b)|0}Hf(d);d=fo(a,d)|0}If(a);return}function Gf(b){b=b|0;var d=0,e=0,f=0,g=0;while(1){if(!b)break;f=b+16|0;g=c[(c[f>>2]|0)+164>>2]|0;Jf(b);d=c[f>>2]|0;if((a[d+156>>0]|0)!=1){b=g;continue}e=c[d+180>>2]|0;if(e){$I(e);d=c[f>>2]|0}e=c[d+172>>2]|0;if(e){$I(e);d=c[f>>2]|0}$I(d);$I(b);b=g}return}function Hf(a){a=a|0;var b=0,d=0,e=0;e=a+16|0;b=c[e>>2]|0;d=c[b+172>>2]|0;if(d){$I(d);b=c[e>>2]|0}d=c[b+180>>2]|0;if(d){$I(d);b=c[e>>2]|0}d=c[b+188>>2]|0;if(d){$I(d);b=c[e>>2]|0}d=c[b+196>>2]|0;if(d){$I(d);b=c[e>>2]|0}d=c[b+204>>2]|0;if(d){$I(d);b=c[e>>2]|0}pw(c[b+104>>2]|0);pw(c[(c[e>>2]|0)+108>>2]|0);b=c[(c[e>>2]|0)+8>>2]|0;if(b|0)gb[c[(c[b+4>>2]|0)+4>>2]&127](a);Qo(a,122241)|0;return}function If(a){a=a|0;var d=0,e=0,f=0;d=Kp(a)|0;while(1){if(!d)break;If(d);d=Lp(d)|0}if(Oo(a,122277,0,1)|0){f=a+16|0;d=c[f>>2]|0;e=c[d+184>>2]|0;if(e){$I(e);d=c[f>>2]|0}e=c[d+268>>2]|0;if(e){$I(e);d=c[f>>2]|0}e=c[d+216>>2]|0;if(e){$I(e);d=c[f>>2]|0}do if(c[d+196>>2]|0){e=b[d+236>>1]|0;while(1){if((e|0)>(b[d+238>>1]|0))break;$I(c[(c[d+196>>2]|0)+(e<<6)+12>>2]|0);e=e+1|0;d=c[f>>2]|0}e=c[d+196>>2]|0;if((b[d+236>>1]|0)==-1){$I(e+-64|0);break}else{$I(e);break}}while(0);if((to(a)|0)!=(a|0)){pw(c[(c[f>>2]|0)+12>>2]|0);Qo(a,122277)|0}}return}function Jf(a){a=a|0;var b=0,d=0,e=0;e=a+16|0;d=c[e>>2]|0;b=c[d+176>>2]|0;while(1){a=b+-1|0;if((b|0)<=0)break;b=c[(c[d+172>>2]|0)+(a<<2)>>2]|0;Yg(b);$I(c[b+16>>2]|0);$I(b);b=a;d=c[e>>2]|0}b=c[d+184>>2]|0;while(1){a=b+-1|0;if((b|0)<=0)break;b=c[(c[(c[e>>2]|0)+180>>2]|0)+(a<<2)>>2]|0;Yg(b);$I(c[b+16>>2]|0);$I(b);b=a}return}function Kf(a){a=a|0;if(nn(a)|0)Lf(a);ay(a);return}function Lf(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=l;l=l+48|0;g=h+32|0;f=h;b=ft(a,-1,8)|0;d=gt(a,0,f)|0;et(a,2,8,f)|0;d=(d|0)==0;e=(b|0)<0;if(e&d)Mf(a);else{if(d)c[f+16>>2]=3;else b=e?8:b;c[f+8>>2]=b;c[f+20>>2]=0;e=Cs(a,g,0)|0;b=c[g>>2]|0;do if((b|0)==1){Mf(a);b=0}else{if(c[(c[(c[a+16>>2]|0)+8>>2]|0)+84>>2]|0){Mf(a);b=0;break}c[f+12>>2]=1;d=0;while(1){if((d|0)>=(b|0))break;b=c[e+(d<<2)>>2]|0;Nf(b,a);Mf(b);d=d+1|0;b=c[g>>2]|0}Of(a);dt(c[g>>2]|0,e,a,f)|0;Pf(a);Qf(c[g>>2]|0,e,a);b=0}while(0);while(1){if((b|0)>=(c[g>>2]|0))break;f=e+(b<<2)|0;$I(c[(c[(c[f>>2]|0)+16>>2]|0)+8>>2]|0);If(c[f>>2]|0);ro(a,c[f>>2]|0)|0;b=b+1|0}$I(e)}l=h;return}function Mf(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;m=l;l=l+48|0;k=m+40|0;e=m;i=EA(a,zm(a,0,77944,0)|0,-1,1)|0;JB(a,10);d=zk(a,e)|0;Sf(a,a);Cf(a);f=(i|0)==1;g=e+32|0;h=(i|0)==2;i=(i|0)==3;j=e+28|0;e=e+24|0;while(1){lj(a,d);if(f){d=3;break}if(c[g>>2]|0){$l(0,77950,k)|0;c[e>>2]=0;d=0}vh(a,(d|0)!=0&1);if(h){d=7;break}yi(a,d);if(i){d=9;break}n=(c[j>>2]|0)+-1|0;c[j>>2]=n;if(!((n|0)!=0&(c[e>>2]|0)!=0)){d=11;break}}if((d|0)==3)Tf(a,1);else if((d|0)==7)Tf(a,2);else if((d|0)==9)Tf(a,2);else if((d|0)==11){if(b[(c[a+16>>2]|0)+136>>1]&16)Uf(a);fk(a);Yf(a);if((JA(Jm(a,78041)|0)|0)<<24>>24)$k(a)}l=m;return}function Nf(b,d){b=b|0;d=d|0;var e=0,f=0;Oo(b,122277,280,1)|0;e=ww(96)|0;b=c[b+16>>2]|0;c[b+8>>2]=e;d=c[d+16>>2]|0;f=c[d+8>>2]|0;h[e>>3]=+h[f>>3];h[e+24>>3]=+h[f+24>>3];c[b+144>>2]=c[d+144>>2];a[b+115>>0]=a[d+115>>0]|0;c[b+116>>2]=c[d+116>>2];c[b+248>>2]=c[d+248>>2];c[b+252>>2]=c[d+252>>2];c[b+244>>2]=c[d+244>>2];return}function Of(a){a=a|0;var b=0,d=0,e=0;b=ww((nn(a)|0)<<4)|0;d=eo(a)|0;while(1){if(!d)break;e=c[d+16>>2]|0;c[e+132>>2]=b;h[b>>3]=+h[e+16>>3]*.013888888888888888;h[b+8>>3]=+h[e+24>>3]*.013888888888888888;b=b+16|0;d=fo(a,d)|0}return}function Pf(a){a=a|0;var b=0,d=0,e=0,f=0;e=c[(c[(eo(a)|0)+16>>2]|0)+132>>2]|0;b=e;d=eo(a)|0;while(1){if(!d)break;f=c[d+16>>2]|0;c[f+132>>2]=0;h[f+16>>3]=+h[b>>3]*72.0;h[f+24>>3]=+h[b+8>>3]*72.0;b=b+16|0;d=fo(a,d)|0}$I(e);return}function Qf(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=0;f=0;while(1){if((e|0)>=(a|0))break;i=(c[(c[(c[b+(e<<2)>>2]|0)+16>>2]|0)+180>>2]|0)+f|0;e=e+1|0;f=i}i=d+16|0;c[(c[i>>2]|0)+180>>2]=f;g=ww((f<<2)+4|0)|0;c[(c[i>>2]|0)+184>>2]=g;g=0;e=1;while(1){if((g|0)>=(a|0))break;h=(c[b+(g<<2)>>2]|0)+16|0;f=1;while(1){d=c[h>>2]|0;if((f|0)>(c[d+180>>2]|0))break;d=Bs(c[(c[d+184>>2]|0)+(f<<2)>>2]|0)|0;c[(c[(c[i>>2]|0)+184>>2]|0)+(e<<2)>>2]=d;Rf(c[(c[(c[h>>2]|0)+184>>2]|0)+(f<<2)>>2]|0,d);f=f+1|0;e=e+1|0}g=g+1|0}return}function Rf(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;Oo(d,122277,280,1)|0;g=d+16|0;d=(c[g>>2]|0)+16|0;f=b+16|0;b=(c[f>>2]|0)+16|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];c[d+16>>2]=c[b+16>>2];c[d+20>>2]=c[b+20>>2];c[d+24>>2]=c[b+24>>2];c[d+28>>2]=c[b+28>>2];b=c[f>>2]|0;d=c[g>>2]|0;a[d+275>>0]=a[b+275>>0]|0;d=d+48|0;b=b+48|0;e=d+64|0;do{c[d>>2]=c[b>>2];d=d+4|0;b=b+4|0}while((d|0)<(e|0));b=c[(c[f>>2]|0)+180>>2]|0;c[(c[g>>2]|0)+180>>2]=b;d=ww((b<<2)+4|0)|0;c[(c[g>>2]|0)+184>>2]=d;d=1;while(1){e=c[f>>2]|0;if((d|0)>(b|0))break;e=Bs(c[(c[e+184>>2]|0)+(d<<2)>>2]|0)|0;c[(c[(c[g>>2]|0)+184>>2]|0)+(d<<2)>>2]=e;Rf(c[(c[(c[f>>2]|0)+184>>2]|0)+(d<<2)>>2]|0,e);d=d+1|0}f=e+12|0;c[(c[g>>2]|0)+12>>2]=c[f>>2];c[f>>2]=0;return}function Sf(a,b){a=a|0;b=b|0;if((to(a)|0)!=(a|0))Oo(a,122277,280,1)|0;if((a|0)==(b|0))c[(c[(to(a)|0)+16>>2]|0)+188>>2]=a;a=Kp(a)|0;while(1){if(!a)break;Sf(a,b);a=Lp(a)|0}return}function Tf(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+1040|0;k=m+8|0;j=m;e=m+16|0;f=zm(a,1,80018,174185)|0;g=zm(a,1,78084,174185)|0;h=(b|0)>0;d=(b|0)==1;b=eo(a)|0;while(1){if(!b)break;if(h?(i=b+16|0,c[j>>2]=c[(c[i>>2]|0)+232>>2],qL(e,122187,j)|0,Dm(b,f,e)|0,!d):0){c[k>>2]=c[(c[i>>2]|0)+236>>2];qL(e,122187,k)|0;Dm(b,g,e)|0}b=fo(a,b)|0}l=m;return}function Uf(a){a=a|0;var b=0,c=0,d=0;c=Jp(a,79522,0)|0;if(c|0){b=eo(c)|0;while(1){if(!b)break;d=fo(c,b)|0;eh(a,b);Vf(a,b);Hf(b);qo(a,b)|0;b=d}Np(a,c)|0}return}function Vf(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=c[(c[b+16>>2]|0)+232>>2]|0;i=a+16|0;a=c[(c[i>>2]|0)+196>>2]|0;d=c[a+(j<<6)>>2]|0;h=a+(j<<6)+4|0;g=0;e=0;while(1){if((e|0)>=(d|0)){f=7;break}f=c[(c[h>>2]|0)+(e<<2)>>2]|0;e=e+1|0;if((f|0)==(b|0)){f=4;break}else g=f}if((f|0)==4){while(1){if((e|0)>=(d|0))break;f=c[a+(j<<6)+4>>2]|0;c[f+(e+-1<<2)>>2]=c[f+(e<<2)>>2];f=c[(c[i>>2]|0)+196>>2]|0;e=e+1|0;d=c[f+(j<<6)>>2]|0;a=f;f=4}c[a+(j<<6)>>2]=d+-1}else if((f|0)==7?(g|0)!=(b|0):0)ma(78050,78057,248,78067);return}function Wf(a){a=a|0;return c[(c[(to(a)|0)+16>>2]|0)+188>>2]|0}function Xf(b,c){b=b|0;c=c|0;var d=0;d=a[b+28>>0]|0;if(a[c+28>>0]|0)if(d<<24>>24){d=~~(+h[b>>3]-+h[c>>3]);if(!d)d=~~(+h[b+8>>3]-+h[c+8>>3])}else d=-1;else d=d<<24>>24!=0&1;return d|0}function Yf(a){a=a|0;Zf(a,1);return}function Zf(d,e){d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0.0;Z=l;l=l+656|0;O=Z+592|0;N=Z+552|0;f=Z+544|0;T=Z+96|0;U=Z;Y=Z+632|0;V=d+16|0;X=b[(c[V>>2]|0)+136>>1]&14;P=X&65535;Q=T+16|0;c[Q>>2]=Z+368;R=U+16|0;c[R>>2]=Z+192;do if(X<<16>>16){S=X<<16>>16==4;do if(S){_f(d);if(!(a[(c[(c[d+60>>2]|0)+16>>2]|0)+113>>0]&1))A=9;else{$l(0,78090,f)|0;A=9}}else if(X<<16>>16==8){_f(d);if(!(a[(c[(c[d+60>>2]|0)+16>>2]|0)+113>>0]&1)){MB(d,0);n=0;m=0;k=0;break}else{$f(d);MB(d,1);n=0;m=0;k=0;break}}else A=9;while(0);if((A|0)==9){Zk(d);if(my()|0)break;W=ww(96)|0;K=c[(c[V>>2]|0)+248>>2]|0;c[Y+8>>2]=(K|0)/4|0;c[Y+12>>2]=K;k=ww(512)|0;F=Y+4|0;c[F>>2]=0;c[Y>>2]=0;j=c[V>>2]|0;C=b[j+236>>1]|0;D=0;L=0;M=k;E=k;m=k;n=k;o=k;H=0;I=0;a:while(1){if((C|0)>(b[j+238>>1]|0))break;p=c[j+196>>2]|0;i=c[p+(C<<6)>>2]|0;G=i+D|0;g=c[p+(C<<6)+4>>2]|0;f=c[g>>2]|0;if(!f)f=H;else{_=+(H|0);f=c[f+16>>2]|0;y=+h[f+16>>3]-+h[f+88>>3];f=~~(y>_?_:y)}if((i|0)!=0?(J=c[g+(i+-1<<2)>>2]|0,(J|0)!=0):0){y=+(I|0);g=c[J+16>>2]|0;_=+h[g+96>>3]+ +h[g+16>>3];g=~~(_=(i|0))break;k=c[(c[f+(C<<6)+4>>2]|0)+(x<<2)>>2]|0;w=k+16|0;f=c[w>>2]|0;i=c[f+112>>2]|0;if(i){i=i+16|0;j=c[(c[i>>2]|0)+96>>2]|0;if(!j){A=21;break a}s=j+56|0;f=f+16|0;c[s>>2]=c[f>>2];c[s+4>>2]=c[f+4>>2];c[s+8>>2]=c[f+8>>2];c[s+12>>2]=c[f+12>>2];a[(c[(c[i>>2]|0)+96>>2]|0)+81>>0]=1;f=c[w>>2]|0}if((a[f+156>>0]|0)!=0?($a[c[17228>>2]&31](k)|0)<<24>>24==0:0){q=t;f=r;j=u;k=v;i=o}else{s=0;q=t;j=u;k=v;A=25}b:do if((A|0)==25){while(1){A=0;p=c[w>>2]|0;i=c[(c[p+180>>2]|0)+(s<<2)>>2]|0;if(!i)break;switch(a[(c[i+16>>2]|0)+112>>0]|0){case 6:case 4:{f=q;i=r;break}default:{ag(i,1,16,64);f=q+1|0;c[r+(q<<2)>>2]=i;if(!(f&127)){g=zw(g,(q<<2)+516|0)|0;i=g;j=g;k=g;n=g;o=g}else i=r}}s=s+1|0;q=f;r=i;A=25}f=c[p+188>>2]|0;c:do if(!f)i=o;else{s=0;i=o;while(1){f=c[f+(s<<2)>>2]|0;if(!f)break c;ag(f,2,0,128);o=q+1|0;c[r+(q<<2)>>2]=f;if(!(o&127)){g=zw(i,(q<<2)+516|0)|0;f=g;j=g;k=g;n=g;i=g}else f=r;p=c[w>>2]|0;s=s+1|0;q=o;r=f;f=c[p+188>>2]|0}}while(0);f=c[p+204>>2]|0;if(!f)f=r;else{if(!(a[p+156>>0]|0)){v=p+96|0;_=+h[v>>3];s=p+240|0;h[v>>3]=+h[s>>3];h[s>>3]=_;s=0;p=r}else{s=0;p=r}while(1){f=c[f+(s<<2)>>2]|0;if(!f){f=p;break b}ag(f,0,0,128);o=q+1|0;c[p+(q<<2)>>2]=f;if(!(o&127)){g=zw(n,(q<<2)+516|0)|0;f=g;j=g;k=g;n=g;i=g}else f=p;s=s+1|0;q=o;p=f;f=c[(c[w>>2]|0)+204>>2]|0}}}while(0);u=c[V>>2]|0;w=c[u+196>>2]|0;x=x+1|0;t=q;r=f;q=u;u=j;v=k;o=i;i=c[w+(C<<6)>>2]|0;f=w}C=C+1|0;D=G;L=t;M=r;E=u;j=q;m=v;k=g;H=B;I=z}if((A|0)==21)ma(78158,78171,313,78184);c[Y>>2]=H;c[F>>2]=I;sL(E,L,4,10);c[W+84>>2]=ww((D<<5)+11520|0)|0;c[Y+16>>2]=ww(C<<5)|0;d:do if(X<<16>>16==2){f=(c[V>>2]|0)+192|0;while(1){g=c[f>>2]|0;if(!g)break d;i=g+16|0;f=c[i>>2]|0;if((a[f+156>>0]|0)==1?(c[f+104>>2]|0)!=0:0){cg(g);f=c[i>>2]|0}f=f+164|0}}while(0);z=U+48|0;A=U+-48|0;B=T+48|0;C=T+-48|0;y=+(K|0);x=0;e:while(1){if((x|0)>=(L|0))break;v=M+(x<<2)|0;r=c[v>>2]|0;s=dg(r)|0;t=r+16|0;g=c[t>>2]|0;if(!(a[g+44>>0]|0)){g=(a[g+84>>0]|0)==0?s:r;f=g;g=c[g+16>>2]|0}else f=r;i=f+16|0;if(c[g+164>>2]&32){g=c[Q>>2]|0;UN(g|0,c[i>>2]|0,176)|0;n=T;o=f;p=n+48|0;do{c[n>>2]=c[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(p|0));c[Q>>2]=g;o=c[f>>2]&3;n=c[T>>2]&3;c[((n|0)==3?T:B)+40>>2]=c[((o|0)==2?f:f+-48|0)+40>>2];c[((n|0)==2?T:C)+40>>2]=c[((o|0)==3?f:f+48|0)+40>>2];n=g+16|0;o=(c[i>>2]|0)+56|0;p=n+40|0;do{c[n>>2]=c[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(p|0));n=g+56|0;o=(c[i>>2]|0)+16|0;p=n+40|0;do{c[n>>2]=c[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(p|0));a[g+112>>0]=1;c[g+116>>2]=f;f=T}q=f+16|0;w=1;f=x;while(1){u=f+1|0;if((u|0)>=(L|0))break;j=M+(u<<2)|0;f=c[j>>2]|0;if((s|0)!=(dg(f)|0))break;if(!(a[(c[t>>2]|0)+113>>0]|0)){k=f+16|0;g=c[k>>2]|0;if(!(a[g+44>>0]|0)){g=(a[g+84>>0]|0)==0?s:f;f=g;g=c[g+16>>2]|0}i=f+16|0;if(c[g+164>>2]&32){g=c[R>>2]|0;UN(g|0,c[i>>2]|0,176)|0;n=U;o=f;p=n+48|0;do{c[n>>2]=c[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(p|0));c[R>>2]=g;o=c[f>>2]&3;n=c[U>>2]&3;c[((n|0)==3?U:z)+40>>2]=c[((o|0)==2?f:f+-48|0)+40>>2];c[((n|0)==2?U:A)+40>>2]=c[((o|0)==3?f:f+48|0)+40>>2];n=g+16|0;o=(c[i>>2]|0)+56|0;p=n+40|0;do{c[n>>2]=c[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(p|0));n=g+56|0;o=(c[i>>2]|0)+16|0;p=n+40|0;do{c[n>>2]=c[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(p|0));a[g+112>>0]=1;c[g+116>>2]=f}i=c[q>>2]|0;f=g+16|0;n=N;o=i+16|0;p=n+40|0;do{c[n>>2]=c[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(p|0));n=O;o=f;p=n+40|0;do{c[n>>2]=c[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(p|0));if(Xf(N,O)|0)break;f=g+56|0;n=N;o=i+56|0;p=n+40|0;do{c[n>>2]=c[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(p|0));n=O;o=f;p=n+40|0;do{c[n>>2]=c[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(p|0));if(Xf(N,O)|0)break;K=c[t>>2]|0;if((c[K+164>>2]&15|0)==2?(c[K+96>>2]|0)!=(c[(c[k>>2]|0)+96>>2]|0):0)break;if(c[(c[(c[j>>2]|0)+16>>2]|0)+164>>2]&64|0)break}w=w+1|0;f=u}if(S){if((w|0)==1)f=O;else f=ww(w<<2)|0;c[f>>2]=dg(c[v>>2]|0)|0;g=1;while(1){if((g|0)>=(w|0))break;c[f+(g<<2)>>2]=c[v+(g<<2)>>2];g=g+1|0}vy(d,f,w,P,17224);if((w|0)>1)$I(f);x=u;continue}f=c[r>>2]&3;K=c[((f|0)==3?r:r+48|0)+40>>2]|0;f=c[((f|0)==2?r:r+-48|0)+40>>2]|0;g=c[K+16>>2]|0;i=c[g+232>>2]|0;if((K|0)!=(f|0))if((i|0)==(c[(c[f+16>>2]|0)+232>>2]|0)){eg(d,Y,W,M,x,w,P);x=u;continue}else{fg(d,Y,W,M,x,w,P);x=u;continue}f=c[V>>2]|0;do if((i|0)==(b[f+238>>1]|0))if((i|0)>0){f=~~(+h[(c[(c[c[(c[f+196>>2]|0)+(i+-1<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]-+h[g+24>>3]);break}else{f=~~+h[g+80>>3];break}else if((i|0)==(b[f+236>>1]|0)){f=~~(+h[g+24>>3]-+h[(c[(c[c[(c[f+196>>2]|0)+(i+1<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]);break}else{f=c[f+196>>2]|0;_=+h[g+24>>3];K=~~(+h[(c[(c[c[f+(i+-1<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]-_);f=~~(_-+h[(c[(c[c[f+(i+1<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]);f=(K|0)<(f|0)?K:f;break}while(0);Sz(W,M,x,w,y,+((f|0)/2|0|0),17224);f=0;while(1){if((f|0)>=(w|0)){x=u;continue e}g=c[(c[(c[M+(f+x<<2)>>2]|0)+16>>2]|0)+96>>2]|0;if(g|0)cB(d,g);f=f+1|0}}f=(c[V>>2]|0)+192|0;while(1){g=c[f>>2]|0;if(!g)break;i=g+16|0;f=c[i>>2]|0;if((a[f+156>>0]|0)==1?(c[f+104>>2]|0)!=0:0){cg(g);cB(d,c[(c[i>>2]|0)+104>>2]|0);f=c[i>>2]|0}f=f+164|0}if(!e){n=W;k=W}else{gg(d);n=W;k=W}}f:do if((c[42242]|0)!=0|(c[42243]|0)!=0?(c[42248]|0)!=0|(c[42247]|0)!=0:0){j=eo(d)|0;while(1){if(!j)break f;g:do if(c[42242]|0){f=Tm(d,j)|0;while(1){if(!f)break g;g=f+-48|0;i=(c[f>>2]&3|0)==2?f:g;if(c[(c[i+16>>2]|0)+100>>2]|0){_z(i,1)|0;cB(d,c[(c[((c[f>>2]&3|0)==2?f:g)+16>>2]|0)+100>>2]|0)}f=Um(d,f)|0}}while(0);h:do if(c[42243]|0){f=Qm(d,j)|0;while(1){if(!f)break h;g=f+16|0;if(c[(c[g>>2]|0)+104>>2]|0?_z(f,0)|0:0)cB(d,c[(c[g>>2]|0)+104>>2]|0);f=Sm(d,f)|0}}while(0);j=fo(d,j)|0}}while(0);switch(X&15){case 4:case 8:break;default:{$I(m);$I(c[n+84>>2]|0);$I(k);$I(c[Y+16>>2]|0);ny()}}c[42182]=1;c[42183]=1}while(0);l=Z;return}function _f(a){a=a|0;var b=0,d=0,e=0.0,f=0;b=eo(a)|0;while(1){if(!b)break;d=c[b+16>>2]|0;if(c[d+204>>2]|0){f=d+96|0;e=+h[f>>3];d=d+240|0;h[f>>3]=+h[d>>3];h[d>>3]=e}b=fo(a,b)|0}return}function $f(b){b=b|0;var d=0,e=0,f=0,g=0;d=(c[b+16>>2]|0)+192|0;a:while(1){f=c[d>>2]|0;if(!f){d=12;break}g=f+16|0;d=c[g>>2]|0;do if((a[d+156>>0]|0)==1){e=c[d+112>>2]|0;if(!e){e=c[d+104>>2]|0;if(!e)break;cg(f);d=e}else{e=c[(c[e+16>>2]|0)+96>>2]|0;if(!e){d=6;break a}f=e+56|0;d=d+16|0;c[f>>2]=c[d>>2];c[f+4>>2]=c[d+4>>2];c[f+8>>2]=c[d+8>>2];c[f+12>>2]=c[d+12>>2];a[e+81>>0]=1;d=e}cB(b,d);d=c[g>>2]|0}while(0);d=d+164|0}if((d|0)==6)ma(78358,78171,234,78377);else if((d|0)==12)return}function ag(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0;do if(!d){g=c[b>>2]&3;d=c[((g|0)==3?b:b+48|0)+40>>2]|0;g=c[((g|0)==2?b:b+-48|0)+40>>2]|0;if((d|0)!=(g|0)){d=(c[(c[d+16>>2]|0)+232>>2]|0)==(c[(c[g+16>>2]|0)+232>>2]|0)?2:1;break}d=c[b+16>>2]|0;if(!(a[d+44>>0]|0))d=(a[d+84>>0]|0)==0?8:4;else d=4}while(0);a:do if(!e)switch(d|0){case 1:{e=c[b>>2]&3;e=(c[(c[(c[((e|0)==3?b:b+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)<(c[(c[(c[((e|0)==2?b:b+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)?16:32;break a}case 2:{e=c[b>>2]&3;e=(c[(c[(c[((e|0)==3?b:b+48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0)<(c[(c[(c[((e|0)==2?b:b+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0)?16:32;break a}default:{e=16;break a}}while(0);c[(c[b+16>>2]|0)+164>>2]=d|f|e;return}function bg(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;D=l;l=l+624|0;z=D+584|0;y=D+544|0;s=D+368|0;e=D+192|0;t=D+96|0;v=D;u=t+16|0;c[u>>2]=s;w=v+16|0;c[w>>2]=e;C=c[b>>2]|0;B=c[d>>2]|0;x=C+16|0;q=c[x>>2]|0;d=c[q+164>>2]|0;f=d&15;A=B+16|0;b=c[A>>2]|0;g=c[b+164>>2]&15;do if((g|0)==(f|0)){p=dg(C)|0;r=dg(B)|0;n=c[p>>2]|0;g=n&3;f=c[(c[((g|0)==3?p:p+48|0)+40>>2]|0)+16>>2]|0;g=c[(c[((g|0)==2?p:p+-48|0)+40>>2]|0)+16>>2]|0;i=(c[f+232>>2]|0)-(c[g+232>>2]|0)|0;o=c[r>>2]|0;m=o&3;k=c[(c[((m|0)==3?r:r+48|0)+40>>2]|0)+16>>2]|0;m=c[(c[((m|0)==2?r:r+-48|0)+40>>2]|0)+16>>2]|0;j=(c[k+232>>2]|0)-(c[m+232>>2]|0)|0;i=(i|0)>-1?i:0-i|0;j=(j|0)>-1?j:0-j|0;if((i|0)!=(j|0)){b=i-j|0;break}g=~~(+h[f+16>>3]-+h[g+16>>3]);g=(g|0)>-1?g:0-g|0;f=~~(+h[k+16>>3]-+h[m+16>>3]);f=(f|0)>-1?f:0-f|0;if((g|0)!=(f|0)){b=g-f|0;break}g=n>>>4;f=o>>>4;if((g|0)!=(f|0)){b=g-f|0;break}if(!(a[q+44>>0]|0)){d=(a[q+84>>0]|0)==0?p:C;g=d;d=c[(c[d+16>>2]|0)+164>>2]|0}else g=C;f=g+16|0;if(d&32){UN(s|0,c[f>>2]|0,176)|0;i=t;j=g;k=i+48|0;do{c[i>>2]=c[j>>2];i=i+4|0;j=j+4|0}while((i|0)<(k|0));c[u>>2]=s;j=c[g>>2]&3;i=c[t>>2]&3;c[((i|0)==3?t:t+48|0)+40>>2]=c[((j|0)==2?g:g+-48|0)+40>>2];c[((i|0)==2?t:t+-48|0)+40>>2]=c[((j|0)==3?g:g+48|0)+40>>2];i=s+16|0;j=(c[f>>2]|0)+56|0;k=i+40|0;do{c[i>>2]=c[j>>2];i=i+4|0;j=j+4|0}while((i|0)<(k|0));i=s+56|0;j=(c[f>>2]|0)+16|0;k=i+40|0;do{c[i>>2]=c[j>>2];i=i+4|0;j=j+4|0}while((i|0)<(k|0));a[s+112>>0]=1;c[s+116>>2]=g;g=t;b=c[A>>2]|0}if(!(a[b+44>>0]|0)){b=(a[b+84>>0]|0)==0?r:B;f=b;b=c[b+16>>2]|0}else f=B;d=f+16|0;if(!(c[b+164>>2]&32))e=b;else{UN(e|0,c[d>>2]|0,176)|0;i=v;j=f;k=i+48|0;do{c[i>>2]=c[j>>2];i=i+4|0;j=j+4|0}while((i|0)<(k|0));c[w>>2]=e;j=c[f>>2]&3;i=c[v>>2]&3;c[((i|0)==3?v:v+48|0)+40>>2]=c[((j|0)==2?f:f+-48|0)+40>>2];c[((i|0)==2?v:v+-48|0)+40>>2]=c[((j|0)==3?f:f+48|0)+40>>2];i=e+16|0;j=(c[d>>2]|0)+56|0;k=i+40|0;do{c[i>>2]=c[j>>2];i=i+4|0;j=j+4|0}while((i|0)<(k|0));i=e+56|0;j=(c[d>>2]|0)+16|0;k=i+40|0;do{c[i>>2]=c[j>>2];i=i+4|0;j=j+4|0}while((i|0)<(k|0));a[e+112>>0]=1;c[e+116>>2]=f}d=c[g+16>>2]|0;b=e+16|0;i=y;j=d+16|0;k=i+40|0;do{c[i>>2]=c[j>>2];i=i+4|0;j=j+4|0}while((i|0)<(k|0));i=z;j=b;k=i+40|0;do{c[i>>2]=c[j>>2];i=i+4|0;j=j+4|0}while((i|0)<(k|0));b=Xf(y,z)|0;if(!b){b=e+56|0;i=y;j=d+56|0;k=i+40|0;do{c[i>>2]=c[j>>2];i=i+4|0;j=j+4|0}while((i|0)<(k|0));i=z;j=b;k=i+40|0;do{c[i>>2]=c[j>>2];i=i+4|0;j=j+4|0}while((i|0)<(k|0));b=Xf(y,z)|0;if(!b){d=c[(c[x>>2]|0)+164>>2]&192;b=c[(c[A>>2]|0)+164>>2]&192;if((d|0)==(b|0)){b=((c[C>>2]|0)>>>4)-((c[B>>2]|0)>>>4)|0;break}else{b=d-b|0;break}}}}else b=g-f|0;while(0);l=D;return b|0}function cg(b){b=b|0;var d=0,e=0,f=0,g=0.0,i=0.0;f=b+16|0;d=c[f>>2]|0;if(c[d+176>>2]|0){d=c[d+180>>2]|0;while(1){d=(c[d>>2]|0)+16|0;e=c[d>>2]|0;if(!(a[e+112>>0]|0))break;else d=e+116|0}e=c[e+96>>2]|0;g=+h[e+24>>3];i=+h[e+32>>3];e=(c[(c[(so(b)|0)+16>>2]|0)+116>>2]&1|0)!=0;b=c[f>>2]|0;f=c[(c[d>>2]|0)+96>>2]|0;h[f+56>>3]=(e?i:g)*.5+ +h[b+16>>3];h[f+64>>3]=+h[b+24>>3];a[f+81>>0]=1}return}function dg(a){a=a|0;var b=0,d=0;while(1){b=c[a+16>>2]|0;d=c[b+172>>2]|0;if(!d)break;else a=d}while(1){b=c[b+116>>2]|0;if(!b)break;a=b;b=c[b+16>>2]|0}return a|0}function eg(b,d,e,f,g,i,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;j=j|0;var k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0.0,w=0,x=0,y=0,z=0,A=0,B=0,C=0.0,D=0.0,E=0.0,F=0.0,G=0.0;B=l;l=l+1712|0;x=B+1664|0;s=B+1488|0;t=B+1392|0;A=B+1696|0;y=B+696|0;z=B;p=t+16|0;c[p>>2]=s;q=c[f+(g<<2)>>2]|0;r=q+16|0;k=c[r>>2]|0;u=a[k+113>>0]|0;if(c[k+164>>2]&32){UN(s|0,k|0,176)|0;k=t;n=q;o=k+48|0;do{c[k>>2]=c[n>>2];k=k+4|0;n=n+4|0}while((k|0)<(o|0));c[p>>2]=s;k=c[t>>2]&3;c[((k|0)==3?t:t+48|0)+40>>2]=c[((c[q>>2]&3|0)==2?q:q+-48|0)+40>>2];c[((k|0)==2?t:t+-48|0)+40>>2]=c[((c[q>>2]&3|0)==3?q:q+48|0)+40>>2];k=s+16|0;n=(c[r>>2]|0)+56|0;o=k+40|0;do{c[k>>2]=c[n>>2];k=k+4|0;n=n+4|0}while((k|0)<(o|0));k=s+56|0;n=(c[r>>2]|0)+16|0;o=k+40|0;do{c[k>>2]=c[n>>2];k=k+4|0;n=n+4|0}while((k|0)<(o|0));a[s+112>>0]=1;c[s+116>>2]=q;q=t}k=1;while(1){if((k|0)>=(i|0)){w=6;break}if(!(a[(c[(c[f+(k+g<<2)>>2]|0)+16>>2]|0)+113>>0]|0))k=k+1|0;else{w=7;break}}a:do if((w|0)==6)if(!(u<<24>>24)){k=c[q+16>>2]|0;if(c[k+96>>2]|0){Eg(b,d,e,q,j);break}if((j|0)==2){A=c[q>>2]&3;Fg(c[((A|0)==3?q:q+48|0)+40>>2]|0,c[((A|0)==2?q:q+-48|0)+40>>2]|0,f,g,i,2);break}t=a[k+49>>0]|0;u=a[k+89>>0]|0;if(!(t<<24>>24==1&u<<24>>24!=4)?!(t<<24>>24!=4&u<<24>>24==1):0){p=c[q>>2]&3;o=c[((p|0)==3?q:q+48|0)+40>>2]|0;p=c[((p|0)==2?q:q+-48|0)+40>>2]|0;k=c[o+16>>2]|0;n=c[k+232>>2]|0;if((n|0)>0){u=c[(c[b+16>>2]|0)+196>>2]|0;t=n+~(a[(c[(c[b+60>>2]|0)+16>>2]|0)+113>>0]&1)|0;m=+h[(c[(c[c[u+(t<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]-+h[u+(t<<6)+16>>3]-+h[k+24>>3]-+h[u+(n<<6)+24>>3]}else m=+(c[(c[b+16>>2]|0)+252>>2]|0);C=+(i+1|0);v=+(c[d+12>>2]|0)/C;m=m/C;Hg(b,d,e,o,q,y,1);Hg(b,d,e,p,q,z,0);s=y+52|0;t=z+52|0;p=(j|0)==10;q=e+80|0;k=0;while(1){if((k|0)>=(i|0))break a;r=c[f+(k+g<<2)>>2]|0;o=c[s>>2]|0;n=o+-1|0;G=+h[y+56+(n<<5)>>3];F=+h[y+56+(n<<5)+16>>3];E=+h[y+56+(n<<5)+24>>3];h[16878]=G;h[16879]=E;k=k+1|0;C=+(k|0);D=v*C;h[16880]=F+D;C=E+m*C;h[16881]=C;h[16882]=G;h[16883]=C;n=(c[t>>2]|0)+-1|0;G=+h[z+56+(n<<5)+16>>3];h[16884]=G;h[16885]=C+m;E=+h[z+56+(n<<5)>>3];F=+h[z+56+(n<<5)+24>>3];h[16888]=G;h[16887]=F;h[16886]=E-D;h[16889]=C;n=0;while(1){if((n|0)>=(o|0)){n=0;break}o=y+56+(n<<5)|0;c[x>>2]=c[o>>2];c[x+4>>2]=c[o+4>>2];c[x+8>>2]=c[o+8>>2];c[x+12>>2]=c[o+12>>2];c[x+16>>2]=c[o+16>>2];c[x+20>>2]=c[o+20>>2];c[x+24>>2]=c[o+24>>2];c[x+28>>2]=c[o+28>>2];Mz(e,x);n=n+1|0;o=c[s>>2]|0}while(1){if((n|0)==3)break;j=135024+(n<<5)|0;c[x>>2]=c[j>>2];c[x+4>>2]=c[j+4>>2];c[x+8>>2]=c[j+8>>2];c[x+12>>2]=c[j+12>>2];c[x+16>>2]=c[j+16>>2];c[x+20>>2]=c[j+20>>2];c[x+24>>2]=c[j+24>>2];c[x+28>>2]=c[j+28>>2];Mz(e,x);n=n+1|0}o=c[t>>2]|0;while(1){n=o+-1|0;if((o|0)<=0)break;o=z+56+(n<<5)|0;c[x>>2]=c[o>>2];c[x+4>>2]=c[o+4>>2];c[x+8>>2]=c[o+8>>2];c[x+12>>2]=c[o+12>>2];c[x+16>>2]=c[o+16>>2];c[x+20>>2]=c[o+20>>2];c[x+24>>2]=c[o+24>>2];c[x+28>>2]=c[o+28>>2];Mz(e,x);o=n}if(p)n=oy(e,A)|0;else n=uy(e,A)|0;o=c[A>>2]|0;if(!o)break a;Kz(r,c[((c[r>>2]&3|0)==2?r:r+-48|0)+40>>2]|0,n,o,17224);c[q>>2]=0}}Gg(b,d,e,f,g,i,q,(j|0)==10&1)}else w=7;while(0);if((w|0)==7)Dg(b,f,g,i,q,j);l=B;return}function fg(b,d,e,f,g,i,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;j=j|0;var k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0;ba=l;l=l+2576|0;S=ba+2528|0;_=ba+2568|0;k=ba+2352|0;n=ba+2176|0;t=ba+1904|0;Y=ba+1808|0;$=ba+1712|0;T=ba+1016|0;U=ba+320|0;V=ba+256|0;X=ba+2564|0;Z=ba+2560|0;z=ba+288|0;A=ba+224|0;L=ba+192|0;M=ba+160|0;N=ba+128|0;P=ba+96|0;Q=ba+64|0;R=ba+32|0;W=ba;s=t+16|0;c[s>>2]=k;o=Y+16|0;c[o>>2]=n;aa=$+16|0;c[aa>>2]=ba+2e3;if(!(c[41920]|0)){c[41920]=xw(32e3)|0;c[41921]=xw(32e3)|0;c[41922]=2e3;c[41923]=2e3}u=c[f+(g<<2)>>2]|0;K=c[u>>2]&3;p=u+48|0;q=u+-48|0;K=(c[(c[(c[((K|0)==3?u:p)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(c[(c[(c[((K|0)==2?u:q)+40>>2]|0)+16>>2]|0)+232>>2]|0)|0;r=u+16|0;if((((K|0)>-1?K:0-K|0)|0)<=1){k=c[r>>2]|0;if(!(c[k+164>>2]&32)){K=u;n=0}else{n=c[s>>2]|0;UN(n|0,k|0,176)|0;w=t;x=u;y=w+48|0;do{c[w>>2]=c[x>>2];w=w+4|0;x=x+4|0}while((w|0)<(y|0));c[s>>2]=n;w=c[t>>2]&3;c[((w|0)==3?t:t+48|0)+40>>2]=c[((c[u>>2]&3|0)==2?u:q)+40>>2];c[((w|0)==2?t:t+-48|0)+40>>2]=c[((c[u>>2]&3|0)==3?u:p)+40>>2];w=n+16|0;x=(c[r>>2]|0)+56|0;y=w+40|0;do{c[w>>2]=c[x>>2];w=w+4|0;x=x+4|0}while((w|0)<(y|0));k=c[s>>2]|0;w=k+56|0;x=(c[r>>2]|0)+16|0;y=w+40|0;do{c[w>>2]=c[x>>2];w=w+4|0;x=x+4|0}while((w|0)<(y|0));a[k+112>>0]=1;n=0;J=12}}else{UN(k|0,c[r>>2]|0,176)|0;w=t;x=u;y=w+48|0;do{c[w>>2]=c[x>>2];w=w+4|0;x=x+4|0}while((w|0)<(y|0));w=t+48|0;x=p;y=w+48|0;do{c[w>>2]=c[x>>2];w=w+4|0;x=x+4|0}while((w|0)<(y|0));c[s>>2]=k;k=c[r>>2]|0;if(!(c[k+164>>2]&32)){UN(n|0,k|0,176)|0;w=Y;x=u;y=w+48|0;do{c[w>>2]=c[x>>2];w=w+4|0;x=x+4|0}while((w|0)<(y|0));c[o>>2]=n;o=c[t>>2]|0;c[((o&3|0)==3?t:t+48|0)+40>>2]=c[((c[u>>2]&3|0)==3?u:p)+40>>2];w=Y+48|0;x=p;y=w+48|0;do{c[w>>2]=c[x>>2];w=w+4|0;x=x+4|0}while((w|0)<(y|0))}else{n=c[o>>2]|0;UN(n|0,k|0,176)|0;w=Y;x=u;y=w+48|0;do{c[w>>2]=c[x>>2];w=w+4|0;x=x+4|0}while((w|0)<(y|0));c[o>>2]=n;w=c[Y>>2]&3;c[((w|0)==3?Y:Y+48|0)+40>>2]=c[((c[u>>2]&3|0)==2?u:q)+40>>2];c[((w|0)==2?Y:Y+-48|0)+40>>2]=c[((c[u>>2]&3|0)==3?u:p)+40>>2];w=n+16|0;x=(c[r>>2]|0)+56|0;y=w+40|0;do{c[w>>2]=c[x>>2];w=w+4|0;x=x+4|0}while((w|0)<(y|0));k=c[o>>2]|0;w=k+56|0;x=(c[r>>2]|0)+16|0;y=w+40|0;do{c[w>>2]=c[x>>2];w=w+4|0;x=x+4|0}while((w|0)<(y|0));a[k+112>>0]=1;c[k+116>>2]=u;o=c[t>>2]|0;c[((o&3|0)==3?t:t+48|0)+40>>2]=c[((c[u>>2]&3|0)==2?u:q)+40>>2];w=(c[s>>2]|0)+16|0;x=(c[r>>2]|0)+56|0;y=w+40|0;do{c[w>>2]=c[x>>2];w=w+4|0;x=x+4|0}while((w|0)<(y|0))}k=dg(u)|0;while(1){n=c[(c[k+16>>2]|0)+172>>2]|0;if(!n)break;else k=n}c[((o&3|0)==2?t:t+-48|0)+40>>2]=c[((c[k>>2]&3|0)==2?k:k+-48|0)+40>>2];k=c[s>>2]|0;a[k+84>>0]=0;a[k+112>>0]=1;n=k+56|0;c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;c[n+12>>2]=0;n=1;J=12}if((J|0)==12){c[k+116>>2]=u;K=t}H=(j|0)==2;if(H?(v=jg(b,K,c[41920]|0,_)|0,c[Z>>2]=v,(v|0)!=0):0)J=63;else J=15;a:do if((J|0)==15){G=(j|0)==10;c[Z>>2]=0;o=c[K>>2]&3;k=c[((o|0)==3?K:K+48|0)+40>>2]|0;o=c[((o|0)==2?K:K+-48|0)+40>>2]|0;c[_>>2]=o;kg(z,b,d,k,0,K);c[T>>2]=c[z>>2];c[T+4>>2]=c[z+4>>2];c[T+8>>2]=c[z+8>>2];c[T+12>>2]=c[z+12>>2];c[T+16>>2]=c[z+16>>2];c[T+20>>2]=c[z+20>>2];c[T+24>>2]=c[z+24>>2];c[T+28>>2]=c[z+28>>2];c[V>>2]=c[z>>2];c[V+4>>2]=c[z+4>>2];c[V+8>>2]=c[z+8>>2];c[V+12>>2]=c[z+12>>2];c[V+16>>2]=c[z+16>>2];c[V+20>>2]=c[z+20>>2];Nz(e,K,1,T,lg(k)|0);B=T+52|0;I=(c[B>>2]|0)+-1|0;D=V+24|0;h[D>>3]=+h[T+56+(I<<5)+24>>3];E=V+8|0;h[E>>3]=+h[T+56+(I<<5)+8>>3];I=c[k+16>>2]|0;F=b+16|0;m=+h[I+24>>3]-+h[(c[(c[F>>2]|0)+196>>2]|0)+(c[I+232>>2]<<6)+16>>3];c[S>>2]=c[V>>2];c[S+4>>2]=c[V+4>>2];c[S+8>>2]=c[V+8>>2];c[S+12>>2]=c[V+12>>2];c[S+16>>2]=c[V+16>>2];c[S+20>>2]=c[V+20>>2];c[S+24>>2]=c[V+24>>2];c[S+28>>2]=c[V+28>>2];mg(A,S,1,m);c[V>>2]=c[A>>2];c[V+4>>2]=c[A+4>>2];c[V+8>>2]=c[A+8>>2];c[V+12>>2]=c[A+12>>2];c[V+16>>2]=c[A+16>>2];c[V+20>>2]=c[A+20>>2];c[V+24>>2]=c[A+24>>2];c[V+28>>2]=c[A+28>>2];A=V+16|0;if(+h[V>>3]<+h[A>>3]?+h[E>>3]<+h[D>>3]:0){I=c[B>>2]|0;c[B>>2]=I+1;I=T+56+(I<<5)|0;c[I>>2]=c[V>>2];c[I+4>>2]=c[V+4>>2];c[I+8>>2]=c[V+8>>2];c[I+12>>2]=c[V+12>>2];c[I+16>>2]=c[V+16>>2];c[I+20>>2]=c[V+20>>2];c[I+24>>2]=c[V+24>>2];c[I+28>>2]=c[V+28>>2]}w=b+60|0;C=U+52|0;x=e+56|0;y=e+69|0;j=e+16|0;z=e+29|0;I=K;q=0;r=-1;b:while(1){s=k;t=0;k=0;u=I;while(1){p=o;v=o;if((a[(c[p+16>>2]|0)+156>>0]|0)!=1)break b;if(($a[c[17228>>2]&31](p)|0)<<24>>24)break b;o=t|1;ca=135024+(t<<5)|0;ng(L,d,b,c[(c[s+16>>2]|0)+232>>2]|0);c[ca>>2]=c[L>>2];c[ca+4>>2]=c[L+4>>2];c[ca+8>>2]=c[L+8>>2];c[ca+12>>2]=c[L+12>>2];c[ca+16>>2]=c[L+16>>2];c[ca+20>>2]=c[L+20>>2];c[ca+24>>2]=c[L+24>>2];c[ca+28>>2]=c[L+28>>2];if(!k){q=og(p)|0;k=(q|0)<((a[(c[(c[w>>2]|0)+16>>2]|0)+113>>0]<<1&2)+3&255|0);q=k?q:q+-2|0;r=k?r:1;k=(k^1)&1}if(!((k|0)==0|(r|0)>0))break;ca=135024+(o<<5)|0;kg(M,b,d,p,u,c[c[(c[p+16>>2]|0)+180>>2]>>2]|0);c[ca>>2]=c[M>>2];c[ca+4>>2]=c[M+4>>2];c[ca+8>>2]=c[M+8>>2];c[ca+12>>2]=c[M+12>>2];c[ca+16>>2]=c[M+16>>2];c[ca+20>>2]=c[M+20>>2];c[ca+24>>2]=c[M+24>>2];c[ca+28>>2]=c[M+28>>2];ca=c[c[(c[v+16>>2]|0)+180>>2]>>2]|0;o=c[ca>>2]&3;s=c[((o|0)==3?ca:ca+48|0)+40>>2]|0;o=c[((o|0)==2?ca:ca+-48|0)+40>>2]|0;c[_>>2]=o;t=t+2|0;r=r+-1|0;u=ca}kg(N,b,d,p,u,c[c[(c[p+16>>2]|0)+180>>2]>>2]|0);c[U>>2]=c[N>>2];c[U+4>>2]=c[N+4>>2];c[U+8>>2]=c[N+8>>2];c[U+12>>2]=c[N+12>>2];c[U+16>>2]=c[N+16>>2];c[U+20>>2]=c[N+20>>2];c[U+24>>2]=c[N+24>>2];c[U+28>>2]=c[N+28>>2];Qz(e,u,1,U,lg(c[((c[u>>2]&3|0)==2?u:u+-48|0)+40>>2]|0)|0);ca=U+56+((c[C>>2]|0)+-1<<5)|0;t=c[v+16>>2]|0;m=+h[(c[(c[F>>2]|0)+196>>2]|0)+(c[t+232>>2]<<6)+24>>3]+ +h[t+24>>3];c[S>>2]=c[ca>>2];c[S+4>>2]=c[ca+4>>2];c[S+8>>2]=c[ca+8>>2];c[S+12>>2]=c[ca+12>>2];c[S+16>>2]=c[ca+16>>2];c[S+20>>2]=c[ca+20>>2];c[S+24>>2]=c[ca+24>>2];c[S+28>>2]=c[ca+28>>2];mg(V,S,4,m);if(+h[V>>3]<+h[A>>3]?+h[E>>3]<+h[D>>3]:0){ca=c[C>>2]|0;c[C>>2]=ca+1;ca=U+56+(ca<<5)|0;c[ca>>2]=c[V>>2];c[ca+4>>2]=c[V+4>>2];c[ca+8>>2]=c[V+8>>2];c[ca+12>>2]=c[V+12>>2];c[ca+16>>2]=c[V+16>>2];c[ca+20>>2]=c[V+20>>2];c[ca+24>>2]=c[V+24>>2];c[ca+28>>2]=c[V+28>>2]}h[x>>3]=1.5707963267948966;a[y>>0]=1;pg(e,I,u,T,U,o);if(!G){k=uy(e,X)|0;o=c[X>>2]|0;if(H&(o|0)>4){ca=k+16|0;c[ca>>2]=c[k>>2];c[ca+4>>2]=c[k+4>>2];c[ca+8>>2]=c[k+8>>2];c[ca+12>>2]=c[k+12>>2];ca=k+32|0;o=k+(o+-1<<4)|0;c[ca>>2]=c[o>>2];c[ca+4>>2]=c[o+4>>2];c[ca+8>>2]=c[o+8>>2];c[ca+12>>2]=c[o+12>>2];VN(k+48|0,o|0,16)|0;c[X>>2]=4;o=4}else J=33}else{k=oy(e,X)|0;o=c[X>>2]|0;J=33}if((J|0)==33){J=0;if(!o)break a}u=c[Z>>2]|0;p=u+o|0;if((p|0)>(c[41922]|0)){c[41922]=p<<1;t=zw(c[41920]|0,p<<5)|0;c[41920]=t;o=c[X>>2]|0}else t=c[41920]|0;s=0;p=u;while(1){if((s|0)>=(o|0))break;ca=t+(p<<4)|0;u=k+(s<<4)|0;c[ca>>2]=c[u>>2];c[ca+4>>2]=c[u+4>>2];c[ca+8>>2]=c[u+8>>2];c[ca+12>>2]=c[u+12>>2];s=s+1|0;p=p+1|0}c[Z>>2]=p;o=qg(c[c[(c[v+16>>2]|0)+180>>2]>>2]|0,q,t,Z)|0;rg(I,e);p=c[o>>2]&3;k=c[((p|0)==3?o:o+48|0)+40>>2]|0;p=c[((p|0)==2?o:o+-48|0)+40>>2]|0;c[_>>2]=p;I=k+16|0;kg(P,b,d,k,c[c[(c[I>>2]|0)+172>>2]>>2]|0,o);c[T>>2]=c[P>>2];c[T+4>>2]=c[P+4>>2];c[T+8>>2]=c[P+8>>2];c[T+12>>2]=c[P+12>>2];c[T+16>>2]=c[P+16>>2];c[T+20>>2]=c[P+20>>2];c[T+24>>2]=c[P+24>>2];c[T+28>>2]=c[P+28>>2];Nz(e,o,1,T,lg(k)|0);ca=T+56+((c[B>>2]|0)+-1<<5)|0;I=c[I>>2]|0;m=+h[I+24>>3]-+h[(c[(c[F>>2]|0)+196>>2]|0)+(c[I+232>>2]<<6)+16>>3];c[S>>2]=c[ca>>2];c[S+4>>2]=c[ca+4>>2];c[S+8>>2]=c[ca+8>>2];c[S+12>>2]=c[ca+12>>2];c[S+16>>2]=c[ca+16>>2];c[S+20>>2]=c[ca+20>>2];c[S+24>>2]=c[ca+24>>2];c[S+28>>2]=c[ca+28>>2];mg(V,S,1,m);if(+h[V>>3]<+h[A>>3]?+h[E>>3]<+h[D>>3]:0){ca=c[B>>2]|0;c[B>>2]=ca+1;ca=T+56+(ca<<5)|0;c[ca>>2]=c[V>>2];c[ca+4>>2]=c[V+4>>2];c[ca+8>>2]=c[V+8>>2];c[ca+12>>2]=c[V+12>>2];c[ca+16>>2]=c[V+16>>2];c[ca+20>>2]=c[V+20>>2];c[ca+24>>2]=c[V+24>>2];c[ca+28>>2]=c[V+28>>2]}h[j>>3]=-1.5707963267948966;a[z>>0]=1;I=o;o=p}k=t|1;r=135024+(t<<5)|0;ng(Q,d,b,c[(c[s+16>>2]|0)+232>>2]|0);c[r>>2]=c[Q>>2];c[r+4>>2]=c[Q+4>>2];c[r+8>>2]=c[Q+8>>2];c[r+12>>2]=c[Q+12>>2];c[r+16>>2]=c[Q+16>>2];c[r+20>>2]=c[Q+20>>2];c[r+24>>2]=c[Q+24>>2];c[r+28>>2]=c[Q+28>>2];kg(R,b,d,p,u,0);c[U>>2]=c[R>>2];c[U+4>>2]=c[R+4>>2];c[U+8>>2]=c[R+8>>2];c[U+12>>2]=c[R+12>>2];c[U+16>>2]=c[R+16>>2];c[U+20>>2]=c[R+20>>2];c[U+24>>2]=c[R+24>>2];c[U+28>>2]=c[R+28>>2];c[V>>2]=c[R>>2];c[V+4>>2]=c[R+4>>2];c[V+8>>2]=c[R+8>>2];c[V+12>>2]=c[R+12>>2];c[V+16>>2]=c[R+16>>2];c[V+20>>2]=c[R+20>>2];c[V+24>>2]=c[R+24>>2];c[V+28>>2]=c[R+28>>2];r=(n|0)!=0;s=u+-48|0;Qz(e,r?Y:u,1,U,lg(c[((c[u>>2]&3|0)==2?u:s)+40>>2]|0)|0);ca=(c[C>>2]|0)+-1|0;h[D>>3]=+h[U+56+(ca<<5)+24>>3];h[E>>3]=+h[U+56+(ca<<5)+8>>3];ca=c[v+16>>2]|0;m=+h[(c[(c[F>>2]|0)+196>>2]|0)+(c[ca+232>>2]<<6)+24>>3]+ +h[ca+24>>3];c[S>>2]=c[V>>2];c[S+4>>2]=c[V+4>>2];c[S+8>>2]=c[V+8>>2];c[S+12>>2]=c[V+12>>2];c[S+16>>2]=c[V+16>>2];c[S+20>>2]=c[V+20>>2];c[S+24>>2]=c[V+24>>2];c[S+28>>2]=c[V+28>>2];mg(W,S,4,m);c[V>>2]=c[W>>2];c[V+4>>2]=c[W+4>>2];c[V+8>>2]=c[W+8>>2];c[V+12>>2]=c[W+12>>2];c[V+16>>2]=c[W+16>>2];c[V+20>>2]=c[W+20>>2];c[V+24>>2]=c[W+24>>2];c[V+28>>2]=c[W+28>>2];if(+h[V>>3]<+h[A>>3]?+h[E>>3]<+h[D>>3]:0){ca=c[C>>2]|0;c[C>>2]=ca+1;ca=U+56+(ca<<5)|0;c[ca>>2]=c[V>>2];c[ca+4>>2]=c[V+4>>2];c[ca+8>>2]=c[V+8>>2];c[ca+12>>2]=c[V+12>>2];c[ca+16>>2]=c[V+16>>2];c[ca+20>>2]=c[V+20>>2];c[ca+24>>2]=c[V+24>>2];c[ca+28>>2]=c[V+28>>2]}pg(e,I,u,T,U,k);if(G)q=oy(e,X)|0;else q=uy(e,X)|0;k=c[X>>2]|0;if(!(H&(k|0)>4)){if(!k)break}else{ca=q+16|0;c[ca>>2]=c[q>>2];c[ca+4>>2]=c[q+4>>2];c[ca+8>>2]=c[q+8>>2];c[ca+12>>2]=c[q+12>>2];ca=q+32|0;k=q+(k+-1<<4)|0;c[ca>>2]=c[k>>2];c[ca+4>>2]=c[k+4>>2];c[ca+8>>2]=c[k+8>>2];c[ca+12>>2]=c[k+12>>2];VN(q+48|0,k|0,16)|0;c[X>>2]=4;k=4}o=c[Z>>2]|0;n=o+k|0;if((n|0)>(c[41922]|0)){c[41922]=n<<1;p=zw(c[41920]|0,n<<5)|0;c[41920]=p;k=c[X>>2]|0}else p=c[41920]|0;n=0;while(1){if((n|0)>=(k|0))break;ca=p+(o<<4)|0;X=q+(n<<4)|0;c[ca>>2]=c[X>>2];c[ca+4>>2]=c[X+4>>2];c[ca+8>>2]=c[X+8>>2];c[ca+12>>2]=c[X+12>>2];n=n+1|0;o=o+1|0}c[Z>>2]=o;rg(I,e);if(r)k=(c[Y>>2]&3|0)==2?Y:Y+-48|0;else k=(c[u>>2]&3|0)==2?u:s;c[_>>2]=c[k+40>>2];v=o;J=63}while(0);c:do if((J|0)==63){if((i|0)==1){Kz(K,c[_>>2]|0,c[41920]|0,v,17224);break}t=d+12|0;u=v+-1|0;m=+((O(c[t>>2]|0,i+-1|0)|0)/2|0|0);n=c[41920]|0;k=1;while(1){if((k|0)>=(u|0))break;ca=n+(k<<4)|0;h[ca>>3]=+h[ca>>3]-m;k=k+1|0}k=c[41922]|0;if((k|0)>(c[41923]|0)){c[41923]=k;o=zw(c[41921]|0,k<<4)|0;c[41921]=o;n=c[41920]|0}else o=c[41921]|0;k=0;while(1){if((k|0)>=(v|0))break;ca=o+(k<<4)|0;d=n+(k<<4)|0;c[ca>>2]=c[d>>2];c[ca+4>>2]=c[d+4>>2];c[ca+8>>2]=c[d+8>>2];c[ca+12>>2]=c[d+12>>2];k=k+1|0}Kz(K,c[_>>2]|0,o,v,17224);r=$+48|0;s=$+-48|0;q=1;while(1){if((q|0)>=(i|0))break c;o=c[f+(q+g<<2)>>2]|0;p=o+16|0;k=c[p>>2]|0;if(c[k+164>>2]&32){n=c[aa>>2]|0;UN(n|0,k|0,176)|0;w=$;x=o;y=w+48|0;do{c[w>>2]=c[x>>2];w=w+4|0;x=x+4|0}while((w|0)<(y|0));c[aa>>2]=n;w=c[$>>2]&3;c[((w|0)==3?$:r)+40>>2]=c[((c[o>>2]&3|0)==2?o:o+-48|0)+40>>2];c[((w|0)==2?$:s)+40>>2]=c[((c[o>>2]&3|0)==3?o:o+48|0)+40>>2];w=n+16|0;x=(c[p>>2]|0)+56|0;y=w+40|0;do{c[w>>2]=c[x>>2];w=w+4|0;x=x+4|0}while((w|0)<(y|0));k=c[aa>>2]|0;w=k+56|0;x=(c[p>>2]|0)+16|0;y=w+40|0;do{c[w>>2]=c[x>>2];w=w+4|0;x=x+4|0}while((w|0)<(y|0));a[k+112>>0]=1;c[k+116>>2]=o;o=$}p=c[41920]|0;k=1;while(1){if((k|0)>=(u|0))break;ca=p+(k<<4)|0;h[ca>>3]=+h[ca>>3]+ +(c[t>>2]|0);k=k+1|0}n=c[41921]|0;k=0;while(1){if((k|0)>=(v|0))break;ca=n+(k<<4)|0;_=p+(k<<4)|0;c[ca>>2]=c[_>>2];c[ca+4>>2]=c[_+4>>2];c[ca+8>>2]=c[_+8>>2];c[ca+12>>2]=c[_+12>>2];k=k+1|0}Kz(o,c[((c[o>>2]&3|0)==2?o:o+-48|0)+40>>2]|0,n,v,17224);q=q+1|0}}while(0);l=ba;return}function gg(a){a=a|0;var b=0,d=0,e=0;b=eo(a)|0;while(1){if(!b)break;d=Qm(a,b)|0;while(1){if(!d)break;if(($a[c[4306]&31](d)|0)<<24>>24?(e=c[(c[d+16>>2]|0)+8>>2]|0,e|0):0)hg(e);d=Sm(a,d)|0}b=fo(a,b)|0}return}function hg(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;f=c[a+4>>2]|0;g=xw(f*48|0)|0;b=g;d=0;e=(c[a>>2]|0)+((f+-1|0)*48|0)|0;while(1){if((d|0)>=(f|0)){b=0;break}ig(e,b);b=b+48|0;d=d+1|0;e=e+-48|0}while(1){d=c[a>>2]|0;if((b|0)>=(f|0))break;$I(c[d+(b*48|0)>>2]|0);b=b+1|0}$I(d);c[a>>2]=g;return}function ig(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;g=c[a+4>>2]|0;h=xw(g<<4)|0;d=h;e=0;f=(c[a>>2]|0)+(g+-1<<4)|0;while(1){if((e|0)>=(g|0))break;c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];c[d+8>>2]=c[f+8>>2];c[d+12>>2]=c[f+12>>2];d=d+16|0;e=e+1|0;f=f+-16|0}c[b>>2]=h;c[b+4>>2]=g;c[b+8>>2]=c[a+12>>2];c[b+12>>2]=c[a+8>>2];h=b+16|0;g=a+32|0;c[h>>2]=c[g>>2];c[h+4>>2]=c[g+4>>2];c[h+8>>2]=c[g+8>>2];c[h+12>>2]=c[g+12>>2];h=b+32|0;g=a+16|0;c[h>>2]=c[g>>2];c[h+4>>2]=c[g+4>>2];c[h+8>>2]=c[g+8>>2];c[h+12>>2]=c[g+12>>2];return}function jg(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0.0,j=0.0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;x=l;l=l+96|0;q=x+80|0;s=x+64|0;r=x+48|0;u=x+32|0;v=x+16|0;w=x;m=d;while(1){t=m+16|0;g=c[t>>2]|0;if(!(a[g+112>>0]|0))break;m=c[g+116>>2]|0}g=c[m>>2]&3;o=c[((g|0)==2?m:m+-48|0)+40>>2]|0;g=c[((g|0)==3?m:m+48|0)+40>>2]|0;m=o+16|0;n=g+16|0;y=(c[(c[m>>2]|0)+232>>2]|0)-(c[(c[n>>2]|0)+232>>2]|0)|0;switch(((y|0)>-1?y:0-y|0)|0){case 1:{g=0;break}case 2:{if(!(a[(c[(c[b+60>>2]|0)+16>>2]|0)+113>>0]&1))p=6;else g=0;break}default:p=6}do if((p|0)==6){if((c[((c[d>>2]&3|0)==3?d:d+48|0)+40>>2]|0)==(g|0)){c[f>>2]=o;y=(c[n>>2]|0)+16|0;p=(c[t>>2]|0)+16|0;c[s>>2]=c[y>>2];c[s+4>>2]=c[y+4>>2];c[s+8>>2]=c[y+8>>2];c[s+12>>2]=c[y+12>>2];c[q>>2]=c[p>>2];c[q+4>>2]=c[p+4>>2];c[q+8>>2]=c[p+8>>2];c[q+12>>2]=c[p+12>>2];Bg(u,s,q);p=(c[m>>2]|0)+16|0;y=(c[t>>2]|0)+56|0;c[s>>2]=c[p>>2];c[s+4>>2]=c[p+4>>2];c[s+8>>2]=c[p+8>>2];c[s+12>>2]=c[p+12>>2];c[q>>2]=c[y>>2];c[q+4>>2]=c[y+4>>2];c[q+8>>2]=c[y+8>>2];c[q+12>>2]=c[y+12>>2];Bg(v,s,q)}else{c[f>>2]=g;y=(c[m>>2]|0)+16|0;p=(c[t>>2]|0)+56|0;c[s>>2]=c[y>>2];c[s+4>>2]=c[y+4>>2];c[s+8>>2]=c[y+8>>2];c[s+12>>2]=c[y+12>>2];c[q>>2]=c[p>>2];c[q+4>>2]=c[p+4>>2];c[q+8>>2]=c[p+8>>2];c[q+12>>2]=c[p+12>>2];Bg(u,s,q);p=(c[n>>2]|0)+16|0;y=(c[t>>2]|0)+16|0;c[s>>2]=c[p>>2];c[s+4>>2]=c[p+4>>2];c[s+8>>2]=c[p+8>>2];c[s+12>>2]=c[p+12>>2];c[q>>2]=c[y>>2];c[q+4>>2]=c[y+4>>2];c[q+8>>2]=c[y+8>>2];c[q+12>>2]=c[y+12>>2];Bg(v,s,q)}g=c[(c[t>>2]|0)+96>>2]|0;if(!g){g=e+16|0;c[e>>2]=c[u>>2];c[e+4>>2]=c[u+4>>2];c[e+8>>2]=c[u+8>>2];c[e+12>>2]=c[u+12>>2];c[g>>2]=c[u>>2];c[g+4>>2]=c[u+4>>2];c[g+8>>2]=c[u+8>>2];c[g+12>>2]=c[u+12>>2];g=e+48|0;y=e+32|0;c[y>>2]=c[v>>2];c[y+4>>2]=c[v+4>>2];c[y+8>>2]=c[v+8>>2];c[y+12>>2]=c[v+12>>2];c[g>>2]=c[v>>2];c[g+4>>2]=c[v+4>>2];c[g+8>>2]=c[v+8>>2];c[g+12>>2]=c[v+12>>2];g=4;break}j=+h[g+24>>3];i=+h[g+32>>3];p=(c[(c[(so(o)|0)+16>>2]|0)+116>>2]&1|0)==0;k=p?i:j;y=(c[(c[t>>2]|0)+96>>2]|0)+56|0;c[w>>2]=c[y>>2];c[w+4>>2]=c[y+4>>2];c[w+8>>2]=c[y+8>>2];c[w+12>>2]=c[y+12>>2];c[r>>2]=c[v>>2];c[r+4>>2]=c[v+4>>2];c[r+8>>2]=c[v+8>>2];c[r+12>>2]=c[v+12>>2];c[s>>2]=c[u>>2];c[s+4>>2]=c[u+4>>2];c[s+8>>2]=c[u+8>>2];c[s+12>>2]=c[u+12>>2];c[q>>2]=c[y>>2];c[q+4>>2]=c[y+4>>2];c[q+8>>2]=c[y+8>>2];c[q+12>>2]=c[y+12>>2];y=(Cg(r,s,q)|0)==0;i=(p?j:i)*.5;j=+h[w>>3];if(y){h[w>>3]=j-i;y=w+8|0;h[y>>3]=+h[y>>3]+k*.5}else{h[w>>3]=j+i;y=w+8|0;h[y>>3]=+h[y>>3]-k*.5}g=e+16|0;c[e>>2]=c[u>>2];c[e+4>>2]=c[u+4>>2];c[e+8>>2]=c[u+8>>2];c[e+12>>2]=c[u+12>>2];c[g>>2]=c[u>>2];c[g+4>>2]=c[u+4>>2];c[g+8>>2]=c[u+8>>2];c[g+12>>2]=c[u+12>>2];g=e+32|0;y=e+48|0;u=e+64|0;c[u>>2]=c[w>>2];c[u+4>>2]=c[w+4>>2];c[u+8>>2]=c[w+8>>2];c[u+12>>2]=c[w+12>>2];c[y>>2]=c[w>>2];c[y+4>>2]=c[w+4>>2];c[y+8>>2]=c[w+8>>2];c[y+12>>2]=c[w+12>>2];c[g>>2]=c[w>>2];c[g+4>>2]=c[w+4>>2];c[g+8>>2]=c[w+8>>2];c[g+12>>2]=c[w+12>>2];g=e+80|0;y=e+96|0;c[y>>2]=c[v>>2];c[y+4>>2]=c[v+4>>2];c[y+8>>2]=c[v+8>>2];c[y+12>>2]=c[v+12>>2];c[g>>2]=c[v>>2];c[g+4>>2]=c[v+4>>2];c[g+8>>2]=c[v+8>>2];c[g+12>>2]=c[v+12>>2];g=7}while(0);l=x;return g|0}function kg(b,d,e,f,g,i){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0.0,k=0,l=0,m=0.0,n=0,o=0.0,p=0.0,q=0;q=c[f+16>>2]|0;p=+h[q+16>>3];j=p-+h[q+88>>3];m=j+-4.0;l=xg(d,f,g,i,-1)|0;if(!l){n=~~(j+(m>=0.0?-3.5:-4.5));k=c[e>>2]|0;k=(k|0)>(n|0)?n:k}else{k=yg(d,f,l)|0;do if(!k){n=c[l+16>>2]|0;j=+h[n+240>>3]+ +h[n+16>>3];if(!(a[n+156>>0]|0)){j=+(c[(c[d+16>>2]|0)+248>>2]|0)*.5+j;break}else{j=j+ +(c[e+8>>2]|0);break}}else j=+h[(c[k+16>>2]|0)+32>>3]+ +(c[e+8>>2]|0);while(0);o=j=0.0?.5:-.5))}o=+(k|0);n=(a[q+156>>0]|0)==1;if(n?(c[q+104>>2]|0)!=0:0)m=p+10.0;else m=p+4.0+ +h[q+96>>3];l=xg(d,f,g,i,1)|0;if(!l){f=~~(m+(m>=0.0?.5:-.5));k=c[e+4>>2]|0;k=(k|0)<(f|0)?f:k}else{k=yg(d,f,l)|0;do if(!k){f=c[l+16>>2]|0;j=+h[f+16>>3]-+h[f+88>>3];if(!(a[f+156>>0]|0)){j=j-+(c[(c[d+16>>2]|0)+248>>2]|0)*.5;break}else{j=j-+(c[e+8>>2]|0);break}}else j=+h[(c[k+16>>2]|0)+16>>3]-+(c[e+8>>2]|0);while(0);m=j>m?j:m;k=~~(m+(m>=0.0?.5:-.5))}j=+(k|0);if(n?(c[q+104>>2]|0)!=0:0){j=j-+h[q+96>>3];if(j>3];d=c[(c[d+16>>2]|0)+196>>2]|0;q=c[q+232>>2]|0;m=p-+h[d+(q<<6)+16>>3];p=+h[d+(q<<6)+24>>3]+p;h[b>>3]=o;h[b+8>>3]=m;h[b+16>>3]=j;h[b+24>>3]=p;return}function lg(b){b=b|0;b=c[b+16>>2]|0;if((a[b+156>>0]|0)==1)if((c[b+176>>2]|0)>1)b=1;else b=(c[b+184>>2]|0)>1&1;else b=0;return b|0}function mg(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0,g=0;g=l;l=l+32|0;f=g;switch(d|0){case 1:{wg(f,+h[b>>3],e,+h[b+16>>3],+h[b+8>>3]);break}case 4:{wg(f,+h[b>>3],+h[b+24>>3],+h[b+16>>3],e);break}default:{}}c[a>>2]=c[f>>2];c[a+4>>2]=c[f+4>>2];c[a+8>>2]=c[f+8>>2];c[a+12>>2]=c[f+12>>2];c[a+16>>2]=c[f+16>>2];c[a+20>>2]=c[f+20>>2];c[a+24>>2]=c[f+24>>2];c[a+28>>2]=c[f+28>>2];l=g;return}function ng(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,g=0.0,i=0.0,j=0.0,k=0,l=0,m=0,n=0,o=0;l=c[b+16>>2]|0;k=l+(e<<5)|0;j=+h[k>>3];m=l+(e<<5)+8|0;g=+h[m>>3];n=l+(e<<5)+16|0;f=+h[n>>3];l=l+(e<<5)+24|0;i=+h[l>>3];if(j==f){d=c[(c[d+16>>2]|0)+196>>2]|0;o=e+1|0;j=+(c[b>>2]|0);g=+h[d+(o<<6)+24>>3]+ +h[(c[(c[c[d+(o<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3];f=+(c[b+4>>2]|0);i=+h[(c[(c[c[d+(e<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]-+h[d+(e<<6)+16>>3];h[k>>3]=j;h[m>>3]=g;h[n>>3]=f;h[l>>3]=i}h[a>>3]=j;h[a+8>>3]=g;h[a+16>>3]=f;h[a+24>>3]=i;return}function og(b){b=b|0;var d=0,e=0;b=c[b+16>>2]|0;e=b+16|0;d=0;while(1){b=c[c[b+180>>2]>>2]|0;b=c[(c[((c[b>>2]&3|0)==2?b:b+-48|0)+40>>2]|0)+16>>2]|0;if((a[b+156>>0]|0)!=1)break;if((c[b+184>>2]|0)!=1)break;if((c[b+176>>2]|0)!=1)break;if(+h[b+16>>3]!=+h[e>>3])break;d=d+1|0}return d|0}function pg(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;k=l;l=l+32|0;j=k;h=tg(b,-1)|0;b=tg(b,1)|0;if(!((h|0)!=0?!($z(h)|0):0))i=3;do if((i|0)==3){if(b|0?($z(b)|0)==0:0)break;h=ug(d,-1)|0;b=ug(d,1)|0;if(h|0?($z(h)|0)==0:0)break;if(b|0?($z(b)|0)==0:0)break;h=e+52|0;b=0;while(1){if((b|0)>=(c[h>>2]|0))break;d=e+56+(b<<5)|0;c[j>>2]=c[d>>2];c[j+4>>2]=c[d+4>>2];c[j+8>>2]=c[d+8>>2];c[j+12>>2]=c[d+12>>2];c[j+16>>2]=c[d+16>>2];c[j+20>>2]=c[d+20>>2];c[j+24>>2]=c[d+24>>2];c[j+28>>2]=c[d+28>>2];Mz(a,j);b=b+1|0}h=c[a+80>>2]|0;i=g+-3|0;b=0;while(1){if((b|0)>=(g|0))break;e=135024+(b<<5)|0;c[j>>2]=c[e>>2];c[j+4>>2]=c[e+4>>2];c[j+8>>2]=c[e+8>>2];c[j+12>>2]=c[e+12>>2];c[j+16>>2]=c[e+16>>2];c[j+20>>2]=c[e+20>>2];c[j+24>>2]=c[e+24>>2];c[j+28>>2]=c[e+28>>2];Mz(a,j);b=b+1|0}d=h+1|0;i=i+d|0;h=c[f+52>>2]|0;while(1){b=h+-1|0;if((h|0)<=0)break;h=f+56+(b<<5)|0;c[j>>2]=c[h>>2];c[j+4>>2]=c[h+4>>2];c[j+8>>2]=c[h+8>>2];c[j+12>>2]=c[h+12>>2];c[j+16>>2]=c[h+16>>2];c[j+20>>2]=c[h+20>>2];c[j+24>>2]=c[h+24>>2];c[j+28>>2]=c[h+28>>2];Mz(a,j);h=b}vg(a,d,i)}while(0);l=k;return}function qg(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=c[e>>2]|0;while(1){if(!b)break;a=c[c[(c[(c[((c[a>>2]&3|0)==2?a:a+-48|0)+40>>2]|0)+16>>2]|0)+180>>2]>>2]|0;b=b+-1|0}c[e>>2]=f+1;g=d+(f<<4)|0;b=d+(f+-1<<4)|0;c[g>>2]=c[b>>2];c[g+4>>2]=c[b+4>>2];c[g+8>>2]=c[b+8>>2];c[g+12>>2]=c[b+12>>2];f=c[e>>2]|0;c[e>>2]=f+1;f=d+(f<<4)|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];f=d+(c[e>>2]<<4)|0;e=(c[(c[((c[a>>2]&3|0)==3?a:a+48|0)+40>>2]|0)+16>>2]|0)+16|0;c[f>>2]=c[e>>2];c[f+4>>2]=c[e+4>>2];c[f+8>>2]=c[e+8>>2];c[f+12>>2]=c[e+12>>2];return a|0}function rg(b,d){b=b|0;d=d|0;var e=0,f=0.0,g=0.0,i=0,j=0,k=0,l=0,m=0;m=d+84|0;l=d+80|0;e=0;d=b;a:while(1){j=c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0;k=j+16|0;if((a[(c[k>>2]|0)+156>>0]|0)!=1)break;if(($a[c[17228>>2]&31](j)|0)<<24>>24)break;d=c[l>>2]|0;while(1){if((e|0)>=(d|0))break a;if(!(+h[(c[m>>2]|0)+(e<<5)+8>>3]>+h[(c[k>>2]|0)+24>>3]))break;e=e+1|0}d=c[m>>2]|0;b=c[k>>2]|0;do if(!(+h[d+(e<<5)+24>>3]<+h[b+24>>3])){g=+h[d+(e<<5)>>3];i=~~g;f=+h[d+(e<<5)+16>>3];if(!(c[b+104>>2]|0)){sg(j,i,~~((f+g)*.5),~~f);break}else{sg(j,i,~~f,~~(+h[b+96>>3]+f));break}}while(0);d=c[c[(c[k>>2]|0)+180>>2]>>2]|0}return}function sg(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=c[a+16>>2]|0;h[a+16>>3]=+(d|0);h[a+88>>3]=+(d-b|0);h[a+96>>3]=+(e-d|0);return}function tg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=c[a>>2]&3;i=c[(c[(c[((h|0)==3?a:a+48|0)+40>>2]|0)+16>>2]|0)+180>>2]|0;h=((h|0)==2?a:a+-48|0)+40|0;g=0;a=0;while(1){e=c[i+(g<<2)>>2]|0;if(!e)break;f=c[(c[(c[((c[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0;do if((O(f-(c[(c[(c[h>>2]|0)+16>>2]|0)+236>>2]|0)|0,b)|0)>=1){d=c[e+16>>2]|0;if(!(c[d+8>>2]|0)){d=c[d+116>>2]|0;if(!d)break;if(!(c[(c[d+16>>2]|0)+8>>2]|0))break}if(a|0?(O((c[(c[(c[((c[a>>2]&3|0)==2?a:a+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0)-f|0,b)|0)<=0:0)break;a=e}while(0);g=g+1|0}return a|0}function ug(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=c[a>>2]&3;i=c[(c[(c[((h|0)==2?a:a+-48|0)+40>>2]|0)+16>>2]|0)+172>>2]|0;h=((h|0)==3?a:a+48|0)+40|0;g=0;a=0;while(1){e=c[i+(g<<2)>>2]|0;if(!e)break;f=c[(c[(c[((c[e>>2]&3|0)==3?e:e+48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0;do if((O(f-(c[(c[(c[h>>2]|0)+16>>2]|0)+236>>2]|0)|0,b)|0)>=1){d=c[e+16>>2]|0;if(!(c[d+8>>2]|0)){d=c[d+116>>2]|0;if(!d)break;if(!(c[(c[d+16>>2]|0)+8>>2]|0))break}if(a|0?(O((c[(c[(c[((c[a>>2]&3|0)==3?a:a+48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0)-f|0,b)|0)<=0:0)break;a=e}while(0);g=g+1|0}return a|0}function vg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,g=0,i=0,j=0,k=0,l=0,m=0.0;l=a+84|0;i=b+-1|0;while(1){if((i|0)>(d|0))break;f=c[l>>2]|0;j=f+(i<<5)|0;e=+h[j>>3];if(!(i-b&1)){f=f+(i<<5)+16|0;m=+h[f>>3];g=~~((m+e)*.5);if(e>=m){h[j>>3]=+(g+-8|0);h[f>>3]=+(g+8|0)}}else{f=f+(i<<5)+16|0;m=+h[f>>3];g=~~((m+e)*.5);if(e+16.0>m){h[j>>3]=+(g+-8|0);h[f>>3]=+(g+8|0)}}i=i+1|0}k=(c[a+80>>2]|0)+-1|0;g=0;while(1){if((g|0)>=(k|0))break;i=c[l>>2]|0;f=i+(g<<5)|0;j=g+1|0;a=i+(j<<5)|0;if(!((g|0)<(b|0)|(g|0)>(d|0))?(g-b&1|0)==0:0){e=+h[f>>3]+16.0;f=i+(j<<5)+16|0;if(e>+h[f>>3])h[f>>3]=e;e=+h[i+(g<<5)+16>>3]+-16.0;if(!(e<+h[a>>3])){g=j;continue}h[a>>3]=e;g=j;continue}if(!((g|0)<(d|0)&(j|0)>=(b|0))){g=j;continue}if(j-b&1|0){g=j;continue}e=+h[i+(j<<5)+16>>3];if(+h[f>>3]+16.0>e)h[f>>3]=e+-16.0;f=i+(g<<5)+16|0;e=+h[a>>3];if(!(+h[f>>3]+-16.0>3]=e+16.0;g=j}return}function wg(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;h[a>>3]=b;h[a+8>>3]=c;h[a+16>>3]=d;h[a+24>>3]=e;return}function xg(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;k=c[(c[b+16>>2]|0)+196>>2]|0;h=c[d+16>>2]|0;j=c[h+232>>2]|0;i=k+(j<<6)|0;j=k+(j<<6)+4|0;h=c[h+236>>2]|0;a:do{h=h+g|0;if((h|0)<=-1){b=0;break}if((h|0)>=(c[i>>2]|0)){b=0;break}b=c[(c[j>>2]|0)+(h<<2)>>2]|0;k=c[b+16>>2]|0;switch(a[k+156>>0]|0){case 0:break a;case 1:{if(c[k+104>>2]|0)break a;break}default:{}}}while((Ag(b,d,e,f)|0)<<24>>24!=0);return b|0}function yg(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;d=c[d+16>>2]|0;if(!(a[d+156>>0]|0)){i=c[d+212>>2]|0;h=i}else{i=c[(c[(c[c[d+180>>2]>>2]|0)+16>>2]|0)+116>>2]|0;g=c[i>>2]&3;h=c[(c[(c[((g|0)==2?i:i+-48|0)+40>>2]|0)+16>>2]|0)+212>>2]|0;i=c[(c[(c[((g|0)==3?i:i+48|0)+40>>2]|0)+16>>2]|0)+212>>2]|0}d=c[e+16>>2]|0;if(!(a[d+156>>0]|0)){e=c[d+212>>2]|0;e=(e|0)==(b|0)?0:e;return ((e|0)==(h|0)|((e|0)==0|(e|0)==(i|0))?0:e)|0}f=c[(c[(c[c[d+180>>2]>>2]|0)+16>>2]|0)+116>>2]|0;g=c[f>>2]&3;d=c[(c[(c[((g|0)==3?f:f+48|0)+40>>2]|0)+16>>2]|0)+212>>2]|0;d=(d|0)==(b|0)?0:d;if(!(!((d|0)==(h|0)|((d|0)==0|(d|0)==(i|0)))?(zg(d,e)|0)!=0:0)){d=c[(c[(c[((g|0)==2?f:f+-48|0)+40>>2]|0)+16>>2]|0)+212>>2]|0;d=(d|0)==(b|0)?0:d;if((d|0)==(h|0)|((d|0)==0|(d|0)==(i|0)))d=0;else{e=(zg(d,e)|0)==0;return (e?0:d)|0}}return d|0}function zg(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0.0;d=c[a+16>>2]|0;a=c[b+16>>2]|0;f=+h[a+16>>3];if((+h[d+16>>3]<=f?f<=+h[d+32>>3]:0)?(e=+h[a+24>>3],+h[d+24>>3]<=e):0)a=e<=+h[d+40>>3]&1;else a=0;return a|0}function Ag(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;i=c[b+16>>2]|0;j=(c[i+236>>2]|0)>(c[(c[d+16>>2]|0)+236>>2]|0);a:do if((c[i+184>>2]|0)==1){b:do if(f|0){h=0;b=c[c[i+180>>2]>>2]|0;while(1){if((h|0)>=2)break b;b=c[((c[b>>2]&3|0)==2?b:b+-48|0)+40>>2]|0;d=c[((c[f>>2]&3|0)==2?f:f+-48|0)+40>>2]|0;if((b|0)==(d|0))break b;g=c[b+16>>2]|0;b=c[d+16>>2]|0;if(j^(c[g+236>>2]|0)>(c[b+236>>2]|0)){b=1;break a}if((c[g+184>>2]|0)!=1)break b;if(!(a[g+156>>0]|0))break b;if((c[b+184>>2]|0)!=1)break b;if(!(a[b+156>>0]|0))break b;h=h+1|0;f=c[c[b+180>>2]>>2]|0;b=c[c[g+180>>2]>>2]|0}}while(0);if(e|0?(c[i+176>>2]|0)==1:0){g=0;d=e;b=c[c[i+172>>2]>>2]|0;while(1){if((g|0)>=2){b=0;break a}b=c[((c[b>>2]&3|0)==3?b:b+48|0)+40>>2]|0;d=c[((c[d>>2]&3|0)==3?d:d+48|0)+40>>2]|0;if((b|0)==(d|0)){b=0;break a}f=c[b+16>>2]|0;b=c[d+16>>2]|0;if(j^(c[f+236>>2]|0)>(c[b+236>>2]|0)){b=1;break a}if((c[f+176>>2]|0)!=1){b=0;break a}if(!(a[f+156>>0]|0)){b=0;break a}if((c[b+176>>2]|0)!=1){b=0;break a}if(!(a[b+156>>0]|0)){b=0;break a}g=g+1|0;d=c[c[b+172>>2]>>2]|0;b=c[c[f+172>>2]>>2]|0}}else b=0}else b=0;while(0);return b|0}function Bg(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=+h[c+8>>3]+ +h[b+8>>3];h[a>>3]=+h[c>>3]+ +h[b>>3];h[a+8>>3]=d;return}function Cg(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0;d=+h[b+8>>3];e=+h[b>>3];return (~~((+h[c>>3]-e)*(+h[a+8>>3]-d)-(+h[a>>3]-e)*(+h[c+8>>3]-d))|0)>0|0}function Dg(b,d,e,f,g,i){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0,u=0,v=0.0,w=0.0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0;R=l;l=l+256|0;D=R+232|0;C=R+216|0;P=R+88|0;O=R+80|0;K=R+64|0;L=R+200|0;M=R+184|0;N=R;E=R+168|0;F=R+152|0;G=R+136|0;H=R+120|0;I=R+104|0;B=c[g>>2]&3;J=c[((B|0)==3?g:g+48|0)+40>>2]|0;B=c[((B|0)==2?g:g+-48|0)+40>>2]|0;do if((Cy(J)|0)!=2?(Cy(B)|0)!=2:0){g=0;j=0;k=0;while(1){if((k|0)>=(f|0))break;A=c[(c[d+(k+e<<2)>>2]|0)+16>>2]|0;g=g+((c[A+96>>2]|0)!=0&1)|0;if(!((a[A+44>>0]|0)==0?(a[A+84>>0]|0)==0:0))j=1;k=k+1|0}if(!j)if(!g){Fg(J,B,d,e,f,i);break}else{Kg(J,B,d,e,f,i,g);break}y=ww(156)|0;z=Lg(b,y)|0;t=Jp(z,78320,1)|0;Oo(t,122277,280,1)|0;Lm(t,80018,80032)|0;m=+h[(c[B+16>>2]|0)+16>>3];s=+h[(c[J+16>>2]|0)+16>>3];A=b+16|0;q=(c[(c[A>>2]|0)+116>>2]&1|0)==0;r=q?B:J;q=q?J:B;t=Mg(t,q)|0;u=Mg(z,r)|0;g=0;p=0;while(1){if((p|0)>=(f|0))break;j=d+(p+e<<2)|0;while(1){o=c[j>>2]|0;n=o+16|0;j=c[n>>2]|0;if(!(a[j+112>>0]|0))break;else j=j+116|0}if((c[((c[o>>2]&3|0)==3?o:o+48|0)+40>>2]|0)==(q|0))k=Ng(z,t,u,o)|0;else k=Ng(z,u,t,o)|0;j=c[n>>2]|0;c[j+120>>2]=k;if(!g)if((a[j+44>>0]|0)==0?(a[j+84>>0]|0)==0:0){c[(c[k+16>>2]|0)+120>>2]=o;g=k}else g=0;p=p+1|0}if(!g)x=bn(z,t,u,0,1)|0;else x=g;Dm(x,c[42219]|0,78324)|0;g=z+16|0;n=c[g>>2]|0;c[n+144>>2]=c[(c[A>>2]|0)+144>>2];c[n+188>>2]=z;JB(z,i);Cf(z);lj(z,0);vh(z,0);yi(z,0);q=q+16|0;i=c[q>>2]|0;n=c[r+16>>2]|0;r=t+16|0;o=c[r>>2]|0;p=o+16|0;v=+(~~m|0);w=+(~~((+h[(c[u+16>>2]|0)+16>>3]+ +h[p>>3])*.5)|0);m=+(~~s|0);s=+(~~((+h[i+16>>3]-+h[i+96>>3]+ +h[n+16>>3]+ +h[n+88>>3])*.5)|0);n=o+24|0;g=(c[g>>2]|0)+192|0;while(1){j=c[g>>2]|0;if(!j)break;do if((j|0)!=(t|0)){g=c[j+16>>2]|0;k=g+24|0;if((j|0)==(u|0)){h[k>>3]=m;h[g+16>>3]=w;break}else{h[k>>3]=s;break}}else{h[n>>3]=v;h[p>>3]=w;g=o}while(0);g=g+164|0}fk(z);Zf(z,0);ay(z);k=c[q>>2]|0;g=c[r>>2]|0;if(!(c[(c[A>>2]|0)+116>>2]&1)){j=g+16|0;m=+h[k+24>>3]-+h[g+24>>3]}else{j=g+24|0;m=+h[g+16>>3]+ +h[k+24>>3]}h[K>>3]=+h[k+16>>3]-+h[j>>3];h[K+8>>3]=m;i=N+16|0;t=N+32|0;u=N+48|0;r=0;while(1){if((r|0)>=(f|0))break;g=d+(r+e<<2)|0;while(1){j=c[g>>2]|0;q=j+16|0;g=c[q>>2]|0;if(!(a[g+112>>0]|0))break;else g=g+116|0}o=c[g+120>>2]|0;p=o+16|0;g=c[p>>2]|0;if(!((o|0)==(x|0)&(c[g+120>>2]|0)==0)){n=c[c[g+8>>2]>>2]|0;o=n+4|0;j=Jz(j,c[o>>2]|0)|0;c[j+8>>2]=c[n+8>>2];g=j+16|0;k=n+16|0;S=c[(c[A>>2]|0)+116>>2]&1;c[C>>2]=c[k>>2];c[C+4>>2]=c[k+4>>2];c[C+8>>2]=c[k+8>>2];c[C+12>>2]=c[k+12>>2];c[D>>2]=c[K>>2];c[D+4>>2]=c[K+4>>2];c[D+8>>2]=c[K+8>>2];c[D+12>>2]=c[K+12>>2];Og(L,C,D,S);c[g>>2]=c[L>>2];c[g+4>>2]=c[L+4>>2];c[g+8>>2]=c[L+8>>2];c[g+12>>2]=c[L+12>>2];c[j+12>>2]=c[n+12>>2];g=j+32|0;S=n+32|0;k=c[(c[A>>2]|0)+116>>2]&1;c[C>>2]=c[S>>2];c[C+4>>2]=c[S+4>>2];c[C+8>>2]=c[S+8>>2];c[C+12>>2]=c[S+12>>2];c[D>>2]=c[K>>2];c[D+4>>2]=c[K+4>>2];c[D+8>>2]=c[K+8>>2];c[D+12>>2]=c[K+12>>2];Og(M,C,D,k);c[g>>2]=c[M>>2];c[g+4>>2]=c[M+4>>2];c[g+8>>2]=c[M+8>>2];c[g+12>>2]=c[M+12>>2];g=0;while(1){if((g|0)>=(c[o>>2]|0))break;k=(c[j>>2]|0)+(g<<4)|0;T=(c[n>>2]|0)+(g<<4)|0;S=c[(c[A>>2]|0)+116>>2]&1;c[C>>2]=c[T>>2];c[C+4>>2]=c[T+4>>2];c[C+8>>2]=c[T+8>>2];c[C+12>>2]=c[T+12>>2];c[D>>2]=c[K>>2];c[D+4>>2]=c[K+4>>2];c[D+8>>2]=c[K+8>>2];c[D+12>>2]=c[K+12>>2];Og(E,C,D,S);c[k>>2]=c[E>>2];c[k+4>>2]=c[E+4>>2];c[k+8>>2]=c[E+8>>2];c[k+12>>2]=c[E+12>>2];c[N>>2]=c[E>>2];c[N+4>>2]=c[E+4>>2];c[N+8>>2]=c[E+8>>2];c[N+12>>2]=c[E+12>>2];k=g+1|0;if((k|0)>=(c[o>>2]|0)){Q=48;break}S=(c[j>>2]|0)+(k<<4)|0;k=(c[n>>2]|0)+(k<<4)|0;T=c[(c[A>>2]|0)+116>>2]&1;c[C>>2]=c[k>>2];c[C+4>>2]=c[k+4>>2];c[C+8>>2]=c[k+8>>2];c[C+12>>2]=c[k+12>>2];c[D>>2]=c[K>>2];c[D+4>>2]=c[K+4>>2];c[D+8>>2]=c[K+8>>2];c[D+12>>2]=c[K+12>>2];Og(F,C,D,T);c[S>>2]=c[F>>2];c[S+4>>2]=c[F+4>>2];c[S+8>>2]=c[F+8>>2];c[S+12>>2]=c[F+12>>2];c[i>>2]=c[F>>2];c[i+4>>2]=c[F+4>>2];c[i+8>>2]=c[F+8>>2];c[i+12>>2]=c[F+12>>2];S=g+2|0;T=(c[j>>2]|0)+(S<<4)|0;S=(c[n>>2]|0)+(S<<4)|0;k=c[(c[A>>2]|0)+116>>2]&1;c[C>>2]=c[S>>2];c[C+4>>2]=c[S+4>>2];c[C+8>>2]=c[S+8>>2];c[C+12>>2]=c[S+12>>2];c[D>>2]=c[K>>2];c[D+4>>2]=c[K+4>>2];c[D+8>>2]=c[K+8>>2];c[D+12>>2]=c[K+12>>2];Og(G,C,D,k);c[T>>2]=c[G>>2];c[T+4>>2]=c[G+4>>2];c[T+8>>2]=c[G+8>>2];c[T+12>>2]=c[G+12>>2];c[t>>2]=c[G>>2];c[t+4>>2]=c[G+4>>2];c[t+8>>2]=c[G+8>>2];c[t+12>>2]=c[G+12>>2];T=g+3|0;k=(c[n>>2]|0)+(T<<4)|0;S=c[(c[A>>2]|0)+116>>2]&1;c[C>>2]=c[k>>2];c[C+4>>2]=c[k+4>>2];c[C+8>>2]=c[k+8>>2];c[C+12>>2]=c[k+12>>2];c[D>>2]=c[K>>2];c[D+4>>2]=c[K+4>>2];c[D+8>>2]=c[K+8>>2];c[D+12>>2]=c[K+12>>2];Og(H,C,D,S);c[u>>2]=c[H>>2];c[u+4>>2]=c[H+4>>2];c[u+8>>2]=c[H+8>>2];c[u+12>>2]=c[H+12>>2];fu((c[A>>2]|0)+16|0,N);g=T}if((Q|0)==48)Q=0;g=c[(c[q>>2]|0)+96>>2]|0;if(g|0){T=g+56|0;p=(c[(c[p>>2]|0)+96>>2]|0)+56|0;S=c[(c[A>>2]|0)+116>>2]&1;c[C>>2]=c[p>>2];c[C+4>>2]=c[p+4>>2];c[C+8>>2]=c[p+8>>2];c[C+12>>2]=c[p+12>>2];c[D>>2]=c[K>>2];c[D+4>>2]=c[K+4>>2];c[D+8>>2]=c[K+8>>2];c[D+12>>2]=c[K+12>>2];Og(I,C,D,S);c[T>>2]=c[I>>2];c[T+4>>2]=c[I+4>>2];c[T+8>>2]=c[I+8>>2];c[T+12>>2]=c[I+12>>2];T=c[(c[q>>2]|0)+96>>2]|0;a[T+81>>0]=1;cB(b,T)}}r=r+1|0}Pg(z,y)}else Q=3;while(0);if((Q|0)==3?(c[41924]|0)==0:0){c[41924]=1;$l(0,78197,O)|0;Q=En(J)|0;S=(rn(b)|0)!=0;T=En(B)|0;c[P>>2]=Q;c[P+4>>2]=S?122546:122549;c[P+8>>2]=T;$l(3,78303,P)|0}l=R;return}function Eg(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0;z=l;l=l+1600|0;u=z+1552|0;n=z+1536|0;t=z+840|0;v=z+144|0;w=z+1584|0;j=z+32|0;s=z+16|0;o=z;q=c[f>>2]&3;p=c[((q|0)==3?f:f+48|0)+40>>2]|0;x=f+-48|0;q=c[((q|0)==2?f:x)+40>>2]|0;r=f+16|0;k=c[r>>2]|0;i=c[k+172>>2]|0;while(1){m=c[(c[i+16>>2]|0)+172>>2]|0;if(!m)break;else i=m}k=(c[k+96>>2]|0)+56|0;i=(c[((c[i>>2]&3|0)==3?i:i+48|0)+40>>2]|0)+16|0;m=(c[i>>2]|0)+16|0;c[k>>2]=c[m>>2];c[k+4>>2]=c[m+4>>2];c[k+8>>2]=c[m+8>>2];c[k+12>>2]=c[m+12>>2];k=c[r>>2]|0;a[(c[k+96>>2]|0)+81>>0]=1;if((g|0)!=2){k=c[i>>2]|0;C=+h[k+16>>3];E=C-+h[k+88>>3];C=+h[k+96>>3]+C;B=+h[k+24>>3];D=+h[k+80>>3]*.5+B;k=c[(c[b+16>>2]|0)+196>>2]|0;m=c[p+16>>2]|0;j=c[m+232>>2]|0;B=+(~~(+(~~(B-+h[k+(j<<6)+16>>3]-+h[m+24>>3]+ +h[k+(j<<6)+24>>3])|0)*.16666666666666666)|0);B=D-(B<5.0?5.0:B);Hg(b,d,e,p,f,t,1);Hg(b,d,e,q,f,v,0);j=t+52|0;k=c[j>>2]|0;m=k+-1|0;A=+h[t+56+(m<<5)>>3];h[16878]=A;h[16879]=+h[t+56+(m<<5)+24>>3];h[16880]=E;h[16881]=B;h[16882]=A;h[16883]=B;m=v+52|0;i=(c[m>>2]|0)+-1|0;A=+h[v+56+(i<<5)+16>>3];h[16884]=A;h[16885]=D;h[16886]=C;h[16889]=B;h[16887]=+h[v+56+(i<<5)+24>>3];h[16888]=A;i=0;while(1){if((i|0)>=(k|0)){i=0;break}k=t+56+(i<<5)|0;c[u>>2]=c[k>>2];c[u+4>>2]=c[k+4>>2];c[u+8>>2]=c[k+8>>2];c[u+12>>2]=c[k+12>>2];c[u+16>>2]=c[k+16>>2];c[u+20>>2]=c[k+20>>2];c[u+24>>2]=c[k+24>>2];c[u+28>>2]=c[k+28>>2];Mz(e,u);i=i+1|0;k=c[j>>2]|0}while(1){if((i|0)==3)break;t=135024+(i<<5)|0;c[u>>2]=c[t>>2];c[u+4>>2]=c[t+4>>2];c[u+8>>2]=c[t+8>>2];c[u+12>>2]=c[t+12>>2];c[u+16>>2]=c[t+16>>2];c[u+20>>2]=c[t+20>>2];c[u+24>>2]=c[t+24>>2];c[u+28>>2]=c[t+28>>2];Mz(e,u);i=i+1|0}j=c[m>>2]|0;while(1){i=j+-1|0;if((j|0)<=0)break;j=v+56+(i<<5)|0;c[u>>2]=c[j>>2];c[u+4>>2]=c[j+4>>2];c[u+8>>2]=c[j+8>>2];c[u+12>>2]=c[j+12>>2];c[u+16>>2]=c[j+16>>2];c[u+20>>2]=c[j+20>>2];c[u+24>>2]=c[j+24>>2];c[u+28>>2]=c[j+28>>2];Mz(e,u);j=i}if((g|0)==10)j=oy(e,w)|0;else j=uy(e,w)|0;i=c[w>>2]|0;if(i|0)y=17}else{i=(c[p+16>>2]|0)+16|0;v=k+16|0;c[n>>2]=c[i>>2];c[n+4>>2]=c[i+4>>2];c[n+8>>2]=c[i+8>>2];c[n+12>>2]=c[i+12>>2];c[u>>2]=c[v>>2];c[u+4>>2]=c[v+4>>2];c[u+8>>2]=c[v+8>>2];c[u+12>>2]=c[v+12>>2];Bg(s,n,u);v=(c[q+16>>2]|0)+16|0;i=(c[r>>2]|0)+56|0;c[n>>2]=c[v>>2];c[n+4>>2]=c[v+4>>2];c[n+8>>2]=c[v+8>>2];c[n+12>>2]=c[v+12>>2];c[u>>2]=c[i>>2];c[u+4>>2]=c[i+4>>2];c[u+8>>2]=c[i+8>>2];c[u+12>>2]=c[i+12>>2];Bg(o,n,u);i=c[(c[r>>2]|0)+96>>2]|0;D=+h[i+56>>3];E=+h[i+64>>3]-+h[i+32>>3]*.5;i=j+16|0;c[j>>2]=c[s>>2];c[j+4>>2]=c[s+4>>2];c[j+8>>2]=c[s+8>>2];c[j+12>>2]=c[s+12>>2];c[i>>2]=c[s>>2];c[i+4>>2]=c[s+4>>2];c[i+8>>2]=c[s+8>>2];c[i+12>>2]=c[s+12>>2];i=j+32|0;v=j+48|0;y=j+64|0;h[j+64>>3]=D;h[j+72>>3]=E;c[v>>2]=c[y>>2];c[v+4>>2]=c[y+4>>2];c[v+8>>2]=c[y+8>>2];c[v+12>>2]=c[y+12>>2];c[i>>2]=c[y>>2];c[i+4>>2]=c[y+4>>2];c[i+8>>2]=c[y+8>>2];c[i+12>>2]=c[y+12>>2];i=j+80|0;y=j+96|0;c[y>>2]=c[o>>2];c[y+4>>2]=c[o+4>>2];c[y+8>>2]=c[o+8>>2];c[y+12>>2]=c[o+12>>2];c[i>>2]=c[o>>2];c[i+4>>2]=c[o+4>>2];c[i+8>>2]=c[o+8>>2];c[i+12>>2]=c[o+12>>2];c[w>>2]=7;i=7;y=17}if((y|0)==17)Kz(f,c[((c[f>>2]&3|0)==2?f:x)+40>>2]|0,j,i,17224);l=z;return}function Fg(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0,t=0.0,u=0,v=0,w=0,x=0,y=0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0;N=l;l=l+352|0;x=N+336|0;w=N+320|0;L=N+128|0;u=N+304|0;y=N+288|0;M=N+112|0;E=N+96|0;F=N+80|0;G=N+64|0;H=N+48|0;I=N+32|0;J=N+16|0;K=N;a=a+16|0;q=(c[a>>2]|0)+16|0;v=(c[d+(e<<2)>>2]|0)+16|0;s=(c[v>>2]|0)+16|0;c[w>>2]=c[q>>2];c[w+4>>2]=c[q+4>>2];c[w+8>>2]=c[q+8>>2];c[w+12>>2]=c[q+12>>2];c[x>>2]=c[s>>2];c[x+4>>2]=c[s+4>>2];c[x+8>>2]=c[s+8>>2];c[x+12>>2]=c[s+12>>2];Bg(u,w,x);C=+h[u>>3];D=+h[u+8>>3];u=(c[b+16>>2]|0)+16|0;v=(c[v>>2]|0)+56|0;c[w>>2]=c[u>>2];c[w+4>>2]=c[u+4>>2];c[w+8>>2]=c[u+8>>2];c[w+12>>2]=c[u+12>>2];c[x>>2]=c[v>>2];c[x+4>>2]=c[v+4>>2];c[x+8>>2]=c[v+8>>2];c[x+12>>2]=c[v+12>>2];Bg(y,w,x);A=+h[y>>3];B=+h[y+8>>3];if((f|0)>1){z=+h[(c[a>>2]|0)+80>>3];i=z*.5;z=z/+(f+-1|0)}else{i=0.0;z=0.0}p=(g|8|0)==10;m=L+8|0;q=L+16|0;r=(A+C*2.0)*.3333333333333333;s=L+32|0;t=(A*2.0+C)*.3333333333333333;n=L+24|0;u=L+48|0;v=L+64|0;w=L+80|0;x=L+96|0;y=L+112|0;k=L+128|0;o=L+136|0;i=D-i;b=0;while(1){if((b|0)>=(f|0))break;j=c[d+(b+e<<2)>>2]|0;h[L>>3]=C;h[m>>3]=D;if(p){Jg(M,r,i);c[q>>2]=c[M>>2];c[q+4>>2]=c[M+4>>2];c[q+8>>2]=c[M+8>>2];c[q+12>>2]=c[M+12>>2];Jg(E,t,i);c[s>>2]=c[E>>2];c[s+4>>2]=c[E+4>>2];c[s+8>>2]=c[E+8>>2];c[s+12>>2]=c[E+12>>2];a=4;g=3}else{h[q>>3]=C;h[n>>3]=D;Jg(F,r,i);c[s>>2]=c[F>>2];c[s+4>>2]=c[F+4>>2];c[s+8>>2]=c[F+8>>2];c[s+12>>2]=c[F+12>>2];Jg(G,r,i);c[u>>2]=c[G>>2];c[u+4>>2]=c[G+4>>2];c[u+8>>2]=c[G+8>>2];c[u+12>>2]=c[G+12>>2];Jg(H,r,i);c[v>>2]=c[H>>2];c[v+4>>2]=c[H+4>>2];c[v+8>>2]=c[H+8>>2];c[v+12>>2]=c[H+12>>2];Jg(I,t,i);c[w>>2]=c[I>>2];c[w+4>>2]=c[I+4>>2];c[w+8>>2]=c[I+8>>2];c[w+12>>2]=c[I+12>>2];Jg(J,t,i);c[x>>2]=c[J>>2];c[x+4>>2]=c[J+4>>2];c[x+8>>2]=c[J+8>>2];c[x+12>>2]=c[J+12>>2];Jg(K,t,i);c[y>>2]=c[K>>2];c[y+4>>2]=c[K+4>>2];c[y+8>>2]=c[K+8>>2];c[y+12>>2]=c[K+12>>2];h[k>>3]=A;h[o>>3]=B;a=10;g=9}h[L+(g<<4)>>3]=A;h[L+(g<<4)+8>>3]=B;Kz(j,c[((c[j>>2]&3|0)==2?j:j+-48|0)+40>>2]|0,L,a,17224);i=i+z;b=b+1|0}l=N;return}function Gg(a,d,e,f,g,i,j,k){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;j=j|0;k=k|0;var m=0,n=0.0,o=0,p=0,q=0,r=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0;x=l;l=l+1440|0;t=x+1392|0;v=x+1424|0;w=x+696|0;u=x;r=c[j>>2]&3;q=c[((r|0)==3?j:j+48|0)+40>>2]|0;r=c[((r|0)==2?j:j+-48|0)+40>>2]|0;m=c[q+16>>2]|0;o=c[m+232>>2]|0;p=c[a+16>>2]|0;if((o|0)<(b[p+238>>1]|0)){y=c[p+196>>2]|0;p=o+1|0;n=+h[m+24>>3]-+h[y+(o<<6)+32>>3]-+h[(c[(c[c[y+(p<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]-+h[y+(p<<6)+40>>3]}else n=+(c[p+252>>2]|0);z=+(i+1|0);s=+(c[d+12>>2]|0)/z;n=n/z;Ig(a,d,e,q,j,w,1);Ig(a,d,e,r,j,u,0);r=w+52|0;j=u+52|0;a=(k|0)==0;d=e+80|0;m=0;while(1){if((m|0)>=(i|0))break;q=c[f+(m+g<<2)>>2]|0;p=c[r>>2]|0;o=p+-1|0;D=+h[w+56+(o<<5)>>3];B=+h[w+56+(o<<5)+8>>3];C=+h[w+56+(o<<5)+16>>3];h[16878]=D;h[16881]=B;m=m+1|0;z=+(m|0);A=s*z;h[16880]=C+A;z=B-n*z;h[16879]=z;h[16882]=D;h[16885]=z;o=(c[j>>2]|0)+-1|0;D=+h[u+56+(o<<5)+16>>3];h[16884]=D;h[16883]=z-n;B=+h[u+56+(o<<5)>>3];C=+h[u+56+(o<<5)+8>>3];h[16888]=D;h[16889]=C;h[16886]=B-A;h[16887]=z;o=0;while(1){if((o|0)>=(p|0)){o=0;break}p=w+56+(o<<5)|0;c[t>>2]=c[p>>2];c[t+4>>2]=c[p+4>>2];c[t+8>>2]=c[p+8>>2];c[t+12>>2]=c[p+12>>2];c[t+16>>2]=c[p+16>>2];c[t+20>>2]=c[p+20>>2];c[t+24>>2]=c[p+24>>2];c[t+28>>2]=c[p+28>>2];Mz(e,t);o=o+1|0;p=c[r>>2]|0}while(1){if((o|0)==3)break;y=135024+(o<<5)|0;c[t>>2]=c[y>>2];c[t+4>>2]=c[y+4>>2];c[t+8>>2]=c[y+8>>2];c[t+12>>2]=c[y+12>>2];c[t+16>>2]=c[y+16>>2];c[t+20>>2]=c[y+20>>2];c[t+24>>2]=c[y+24>>2];c[t+28>>2]=c[y+28>>2];Mz(e,t);o=o+1|0}p=c[j>>2]|0;while(1){o=p+-1|0;if((p|0)<=0)break;p=u+56+(o<<5)|0;c[t>>2]=c[p>>2];c[t+4>>2]=c[p+4>>2];c[t+8>>2]=c[p+8>>2];c[t+12>>2]=c[p+12>>2];c[t+16>>2]=c[p+16>>2];c[t+20>>2]=c[p+20>>2];c[t+24>>2]=c[p+24>>2];c[t+28>>2]=c[p+28>>2];Mz(e,t);p=o}if(a)o=uy(e,v)|0;else o=oy(e,v)|0;p=c[v>>2]|0;if(!p)break;Kz(q,c[((c[q>>2]&3|0)==2?q:q+-48|0)+40>>2]|0,o,p,17224);c[d>>2]=0}l=x;return}function Hg(a,b,d,e,f,g,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0.0;n=l;l=l+128|0;j=n+96|0;k=n+64|0;o=n+32|0;m=n;kg(o,a,b,e,0,f);c[g>>2]=c[o>>2];c[g+4>>2]=c[o+4>>2];c[g+8>>2]=c[o+8>>2];c[g+12>>2]=c[o+12>>2];c[g+16>>2]=c[o+16>>2];c[g+20>>2]=c[o+20>>2];c[g+24>>2]=c[o+24>>2];c[g+28>>2]=c[o+28>>2];c[k>>2]=c[o>>2];c[k+4>>2]=c[o+4>>2];c[k+8>>2]=c[o+8>>2];c[k+12>>2]=c[o+12>>2];c[k+16>>2]=c[o+16>>2];c[k+20>>2]=c[o+20>>2];c[k+24>>2]=c[o+24>>2];c[k+28>>2]=c[o+28>>2];c[g+48>>2]=4;if(!(i<<24>>24))Qz(d,f,2,g,0);else Nz(d,f,2,g,0);b=g+52|0;f=(c[b>>2]|0)+-1|0;o=k+24|0;h[o>>3]=+h[g+56+(f<<5)+24>>3];i=k+8|0;h[i>>3]=+h[g+56+(f<<5)+8>>3];e=c[e+16>>2]|0;p=+h[(c[(c[a+16>>2]|0)+196>>2]|0)+(c[e+232>>2]<<6)+24>>3]+ +h[e+24>>3];c[j>>2]=c[k>>2];c[j+4>>2]=c[k+4>>2];c[j+8>>2]=c[k+8>>2];c[j+12>>2]=c[k+12>>2];c[j+16>>2]=c[k+16>>2];c[j+20>>2]=c[k+20>>2];c[j+24>>2]=c[k+24>>2];c[j+28>>2]=c[k+28>>2];mg(m,j,4,p);c[k>>2]=c[m>>2];c[k+4>>2]=c[m+4>>2];c[k+8>>2]=c[m+8>>2];c[k+12>>2]=c[m+12>>2];c[k+16>>2]=c[m+16>>2];c[k+20>>2]=c[m+20>>2];c[k+24>>2]=c[m+24>>2];c[k+28>>2]=c[m+28>>2];if(+h[k>>3]<+h[k+16>>3]?+h[i>>3]<+h[o>>3]:0){o=c[b>>2]|0;c[b>>2]=o+1;o=g+56+(o<<5)|0;c[o>>2]=c[k>>2];c[o+4>>2]=c[k+4>>2];c[o+8>>2]=c[k+8>>2];c[o+12>>2]=c[k+12>>2];c[o+16>>2]=c[k+16>>2];c[o+20>>2]=c[k+20>>2];c[o+24>>2]=c[k+24>>2];c[o+28>>2]=c[k+28>>2]}l=n;return}function Ig(a,b,d,e,f,g,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0.0;n=l;l=l+128|0;j=n+96|0;k=n+64|0;o=n+32|0;m=n;kg(o,a,b,e,0,f);c[g>>2]=c[o>>2];c[g+4>>2]=c[o+4>>2];c[g+8>>2]=c[o+8>>2];c[g+12>>2]=c[o+12>>2];c[g+16>>2]=c[o+16>>2];c[g+20>>2]=c[o+20>>2];c[g+24>>2]=c[o+24>>2];c[g+28>>2]=c[o+28>>2];c[k>>2]=c[o>>2];c[k+4>>2]=c[o+4>>2];c[k+8>>2]=c[o+8>>2];c[k+12>>2]=c[o+12>>2];c[k+16>>2]=c[o+16>>2];c[k+20>>2]=c[o+20>>2];c[k+24>>2]=c[o+24>>2];c[k+28>>2]=c[o+28>>2];c[g+48>>2]=1;if(!(i<<24>>24))Qz(d,f,2,g,0);else Nz(d,f,2,g,0);b=g+52|0;f=(c[b>>2]|0)+-1|0;o=k+24|0;h[o>>3]=+h[g+56+(f<<5)+24>>3];i=k+8|0;h[i>>3]=+h[g+56+(f<<5)+8>>3];e=c[e+16>>2]|0;p=+h[e+24>>3]-+h[(c[(c[a+16>>2]|0)+196>>2]|0)+(c[e+232>>2]<<6)+24>>3];c[j>>2]=c[k>>2];c[j+4>>2]=c[k+4>>2];c[j+8>>2]=c[k+8>>2];c[j+12>>2]=c[k+12>>2];c[j+16>>2]=c[k+16>>2];c[j+20>>2]=c[k+20>>2];c[j+24>>2]=c[k+24>>2];c[j+28>>2]=c[k+28>>2];mg(m,j,1,p);c[k>>2]=c[m>>2];c[k+4>>2]=c[m+4>>2];c[k+8>>2]=c[m+8>>2];c[k+12>>2]=c[m+12>>2];c[k+16>>2]=c[m+16>>2];c[k+20>>2]=c[m+20>>2];c[k+24>>2]=c[m+24>>2];c[k+28>>2]=c[m+28>>2];if(+h[k>>3]<+h[k+16>>3]?+h[i>>3]<+h[o>>3]:0){o=c[b>>2]|0;c[b>>2]=o+1;o=g+56+(o<<5)|0;c[o>>2]=c[k>>2];c[o+4>>2]=c[k+4>>2];c[o+8>>2]=c[k+8>>2];c[o+12>>2]=c[k+12>>2];c[o+16>>2]=c[k+16>>2];c[o+20>>2]=c[k+20>>2];c[o+24>>2]=c[k+24>>2];c[o+28>>2]=c[k+28>>2]}l=n;return}function Jg(a,b,c){a=a|0;b=+b;c=+c;h[a>>3]=b;h[a+8>>3]=c;return}function Kg(b,d,e,f,g,i,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0,z=0,A=0.0,B=0.0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0.0;Y=l;l=l+288|0;R=Y+256|0;Q=Y+240|0;P=Y+224|0;V=Y+280|0;W=Y+272|0;X=Y+32|0;S=Y+16|0;T=Y;m=Y+208|0;n=Y+192|0;o=c[e+(f<<2)>>2]|0;U=ww(g<<2)|0;k=0;while(1){if((k|0)>=(g|0))break;c[U+(k<<2)>>2]=c[e+(k+f<<2)>>2];k=k+1|0}sL(U,g,4,11);e=b+16|0;f=(c[e>>2]|0)+16|0;o=o+16|0;C=(c[o>>2]|0)+16|0;c[Q>>2]=c[f>>2];c[Q+4>>2]=c[f+4>>2];c[Q+8>>2]=c[f+8>>2];c[Q+12>>2]=c[f+12>>2];c[R>>2]=c[C>>2];c[R+4>>2]=c[C+4>>2];c[R+8>>2]=c[C+8>>2];c[R+12>>2]=c[C+12>>2];Bg(m,Q,R);c[S>>2]=c[m>>2];c[S+4>>2]=c[m+4>>2];c[S+8>>2]=c[m+8>>2];c[S+12>>2]=c[m+12>>2];C=d+16|0;f=(c[C>>2]|0)+16|0;o=(c[o>>2]|0)+56|0;c[Q>>2]=c[f>>2];c[Q+4>>2]=c[f+4>>2];c[Q+8>>2]=c[f+8>>2];c[Q+12>>2]=c[f+12>>2];c[R>>2]=c[o>>2];c[R+4>>2]=c[o+4>>2];c[R+8>>2]=c[o+8>>2];c[R+12>>2]=c[o+12>>2];Bg(n,Q,R);c[T>>2]=c[n>>2];c[T+4>>2]=c[n+4>>2];c[T+8>>2]=c[n+8>>2];c[T+12>>2]=c[n+12>>2];w=+h[(c[e>>2]|0)+96>>3]+ +h[S>>3];x=+h[T>>3]-+h[(c[C>>2]|0)+88>>3];u=x+w;v=u*.5;C=c[U>>2]|0;c[X>>2]=c[S>>2];c[X+4>>2]=c[S+4>>2];c[X+8>>2]=c[S+8>>2];c[X+12>>2]=c[S+12>>2];o=X+16|0;c[o>>2]=c[S>>2];c[o+4>>2]=c[S+4>>2];c[o+8>>2]=c[S+8>>2];c[o+12>>2]=c[S+12>>2];e=X+32|0;c[e>>2]=c[T>>2];c[e+4>>2]=c[T+4>>2];c[e+8>>2]=c[T+8>>2];c[e+12>>2]=c[T+12>>2];f=X+48|0;c[f>>2]=c[T>>2];c[f+4>>2]=c[T+4>>2];c[f+8>>2]=c[T+8>>2];c[f+12>>2]=c[T+12>>2];Kz(C,c[((c[C>>2]&3|0)==2?C:C+-48|0)+40>>2]|0,X,4,17224);C=c[(c[C+16>>2]|0)+96>>2]|0;h[C+56>>3]=v;z=S+8|0;r=+h[z>>3];s=+h[C+32>>3];h[C+64>>3]=(s+6.0)*.5+r;a[C+81>>0]=1;r=r+3.0;B=+h[C+24>>3];A=(u-B)*.5;B=(B+u)*.5;C=X+24|0;D=X+40|0;E=X+56|0;F=X+64|0;G=T+8|0;H=X+72|0;I=X+80|0;J=X+88|0;K=X+96|0;L=X+104|0;M=X+112|0;N=X+120|0;O=V+4|0;n=(i|0)==6&1;q=0.0;p=0.0;s=s+r;m=1;while(1){if((m|0)>=(j|0)){y=6;break}d=c[U+(m<<2)>>2]|0;if(!(m&1)){c[X>>2]=c[S>>2];c[X+4>>2]=c[S+4>>2];c[X+8>>2]=c[S+8>>2];c[X+12>>2]=c[S+12>>2];h[o>>3]=A;h[C>>3]=+h[z>>3];h[e>>3]=A;h[D>>3]=s;h[f>>3]=B;h[E>>3]=s;h[F>>3]=B;t=+h[G>>3];h[H>>3]=t;Z=+h[T>>3];h[I>>3]=Z;h[J>>3]=t;h[K>>3]=Z;Z=s+6.0;h[L>>3]=Z;h[M>>3]=+h[S>>3];h[N>>3]=Z;s=+h[(c[(c[d+16>>2]|0)+96>>2]|0)+32>>3];t=Z+s*.5;s=Z+s}else{k=d+16|0;b=c[(c[k>>2]|0)+96>>2]|0;if((m|0)==1){p=+h[b+24>>3];q=(p+u)*.5;p=(u-p)*.5}r=r+-6.0-+h[b+32>>3];c[X>>2]=c[S>>2];c[X+4>>2]=c[S+4>>2];c[X+8>>2]=c[S+8>>2];c[X+12>>2]=c[S+12>>2];h[o>>3]=+h[S>>3];t=r+-6.0;h[C>>3]=t;h[e>>3]=+h[T>>3];h[D>>3]=t;c[f>>2]=c[T>>2];c[f+4>>2]=c[T+4>>2];c[f+8>>2]=c[T+8>>2];c[f+12>>2]=c[T+12>>2];h[F>>3]=q;h[H>>3]=+h[G>>3];h[I>>3]=q;h[J>>3]=r;h[K>>3]=p;h[L>>3]=r;h[M>>3]=p;h[N>>3]=+h[z>>3];t=+h[(c[(c[k>>2]|0)+96>>2]|0)+32>>3]*.5+r}c[O>>2]=8;c[V>>2]=X;c[P>>2]=c[S>>2];c[P+4>>2]=c[S+4>>2];c[P+8>>2]=c[S+8>>2];c[P+12>>2]=c[S+12>>2];c[Q>>2]=c[T>>2];c[Q+4>>2]=c[T+4>>2];c[Q+8>>2]=c[T+8>>2];c[Q+12>>2]=c[T+12>>2];c[R>>2]=c[V>>2];c[R+4>>2]=c[V+4>>2];k=ky(P,Q,R,W,n)|0;b=c[W>>2]|0;if(!b)break;i=c[(c[d+16>>2]|0)+96>>2]|0;h[i+56>>3]=v;h[i+64>>3]=t;a[i+81>>0]=1;Kz(d,c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0,k,b,17224);m=m+1|0}a:do if((y|0)==6){v=(x+w*2.0)*.3333333333333333;u=(x*2.0+w)*.3333333333333333;while(1){if((m|0)>=(g|0))break;d=c[U+(m<<2)>>2]|0;if(!(m&1)){c[X>>2]=c[S>>2];c[X+4>>2]=c[S+4>>2];c[X+8>>2]=c[S+8>>2];c[X+12>>2]=c[S+12>>2];h[o>>3]=A;h[C>>3]=+h[z>>3];h[e>>3]=A;h[D>>3]=s;h[f>>3]=B;h[E>>3]=s;h[F>>3]=B;t=+h[G>>3];h[H>>3]=t;Z=+h[T>>3];h[I>>3]=Z;h[J>>3]=t;h[K>>3]=Z;Z=s+6.0;h[L>>3]=Z;h[M>>3]=+h[S>>3];s=Z;t=p;p=Z}else{y=(m|0)==1;t=y?v:p;q=y?u:q;p=r+-6.0;c[X>>2]=c[S>>2];c[X+4>>2]=c[S+4>>2];c[X+8>>2]=c[S+8>>2];c[X+12>>2]=c[S+12>>2];h[o>>3]=+h[S>>3];r=r+-12.0;h[C>>3]=r;h[e>>3]=+h[T>>3];h[D>>3]=r;c[f>>2]=c[T>>2];c[f+4>>2]=c[T+4>>2];c[f+8>>2]=c[T+8>>2];c[f+12>>2]=c[T+12>>2];h[F>>3]=q;h[H>>3]=+h[G>>3];h[I>>3]=q;h[J>>3]=p;h[K>>3]=t;h[L>>3]=p;h[M>>3]=t;r=p;p=+h[z>>3]}h[N>>3]=p;c[O>>2]=8;c[V>>2]=X;c[P>>2]=c[S>>2];c[P+4>>2]=c[S+4>>2];c[P+8>>2]=c[S+8>>2];c[P+12>>2]=c[S+12>>2];c[Q>>2]=c[T>>2];c[Q+4>>2]=c[T+4>>2];c[Q+8>>2]=c[T+8>>2];c[Q+12>>2]=c[T+12>>2];c[R>>2]=c[V>>2];c[R+4>>2]=c[V+4>>2];k=ky(P,Q,R,W,n)|0;b=c[W>>2]|0;if(!b)break a;Kz(d,c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0,k,b,17224);m=m+1|0;p=t}$I(U)}while(0);l=Y;return}function Lg(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0;g=l;l=l+16|0;f=g;j=(rn(b)|0)==0;j=j?17648:17640;a[f>>0]=a[j>>0]|0;a[f+1>>0]=a[j+1>>0]|0;a[f+2>>0]=a[j+2>>0]|0;a[f+3>>0]=a[j+3>>0]|0;f=hn(78335,f,0)|0;Oo(f,122277,280,1)|0;zm(f,0,80018,174185)|0;j=ww(96)|0;e=c[f+16>>2]|0;c[e+8>>2]=j;i=c[b+16>>2]|0;k=c[i+8>>2]|0;h[j>>3]=+h[k>>3];h[j+24>>3]=+h[k+24>>3];a[e+115>>0]=a[i+115>>0]|0;c[e+116>>2]=c[i+116>>2]&1^1;c[e+248>>2]=c[i+248>>2];c[e+252>>2]=c[i+252>>2];e=Em(to(b)|0,1,0)|0;while(1){if(!e)break;zm(f,1,c[e+8>>2]|0,c[e+12>>2]|0)|0;e=Em(to(b)|0,1,e)|0}e=Em(to(b)|0,2,0)|0;while(1){if(!e)break;zm(f,2,c[e+8>>2]|0,c[e+12>>2]|0)|0;e=Em(to(b)|0,2,e)|0}if(!(zm(f,2,96251,0)|0))zm(f,2,96251,174185)|0;if(!(zm(f,2,96242,0)|0))zm(f,2,96242,174185)|0;Qg(f,d);l=g;return f|0}function Mg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;e=l;l=l+16|0;d=e;a=oo(a,En(b)|0,1)|0;Oo(a,122241,304,1)|0;Nm(b,a)|0;if((Cy(b)|0)==2){f=b+16|0;b=xw((sJ(c[c[(c[f>>2]|0)+104>>2]>>2]|0)|0)+3|0)|0;c[d>>2]=c[c[(c[f>>2]|0)+104>>2]>>2];qL(b,78330,d)|0;Lm(a,86240,b)|0}l=e;return a|0}function Ng(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;c=bn(a,b,c,0,1)|0;Oo(c,122254,176,1)|0;Nm(d,c)|0;return c|0}function Og(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0.0;i=l;l=l+32|0;g=i+16|0;f=i;if(e|0){j=+h[b>>3];e=b+8|0;h[b>>3]=+h[e>>3];h[e>>3]=-j};c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];c[g>>2]=c[d>>2];c[g+4>>2]=c[d+4>>2];c[g+8>>2]=c[d+8>>2];c[g+12>>2]=c[d+12>>2];Bg(a,f,g);l=i;return}function Pg(a,b){a=a|0;b=b|0;c[42234]=c[b>>2];c[42238]=c[b+4>>2];c[42239]=c[b+8>>2];c[42219]=c[b+12>>2];c[42220]=c[b+16>>2];c[42226]=c[b+20>>2];c[42225]=c[b+24>>2];c[42224]=c[b+28>>2];c[42250]=c[b+32>>2];c[42242]=c[b+36>>2];c[42227]=c[b+40>>2];c[42237]=c[b+44>>2];c[42246]=c[b+48>>2];c[42245]=c[b+52>>2];c[42244]=c[b+56>>2];c[42249]=c[b+60>>2];c[42243]=c[b+64>>2];c[42228]=c[b+68>>2];c[42190]=c[b+72>>2];c[42191]=c[b+76>>2];c[42192]=c[b+80>>2];c[42202]=c[b+84>>2];c[42195]=c[b+88>>2];c[42196]=c[b+92>>2];c[42197]=c[b+96>>2];c[42199]=c[b+100>>2];c[42200]=c[b+104>>2];c[42203]=c[b+108>>2];c[42206]=c[b+112>>2];c[42204]=c[b+116>>2];c[42205]=c[b+120>>2];c[42208]=c[b+124>>2];c[42207]=c[b+128>>2];c[42209]=c[b+132>>2];c[42210]=c[b+136>>2];c[42201]=c[b+140>>2];c[42213]=c[b+144>>2];c[42185]=c[b+148>>2];c[42182]=c[b+152>>2];$I(b);Ff(a);mn(a)|0;return}function Qg(a,b){a=a|0;b=b|0;c[b>>2]=c[42234];c[b+4>>2]=c[42238];c[b+8>>2]=c[42239];c[b+12>>2]=c[42219];c[b+16>>2]=c[42220];c[b+20>>2]=c[42226];c[b+24>>2]=c[42225];c[b+28>>2]=c[42224];c[b+32>>2]=c[42250];c[b+36>>2]=c[42242];c[b+40>>2]=c[42227];c[b+44>>2]=c[42237];c[b+48>>2]=c[42246];c[b+52>>2]=c[42245];c[b+56>>2]=c[42244];c[b+60>>2]=c[42249];c[b+64>>2]=c[42243];c[b+68>>2]=c[42228];c[b+72>>2]=c[42190];c[b+76>>2]=c[42191];c[b+80>>2]=c[42192];c[b+84>>2]=c[42202];c[b+88>>2]=c[42195];c[b+92>>2]=c[42196];c[b+96>>2]=c[42197];c[b+100>>2]=c[42199];c[b+104>>2]=c[42200];c[b+108>>2]=c[42203];c[b+112>>2]=c[42206];c[b+116>>2]=c[42204];c[b+120>>2]=c[42205];c[b+124>>2]=c[42208];c[b+128>>2]=c[42207];c[b+132>>2]=c[42209];c[b+136>>2]=c[42210];c[b+140>>2]=c[42201];c[b+144>>2]=c[42213];c[b+152>>2]=c[42182];c[b+148>>2]=c[42185];c[42234]=0;c[42238]=zm(a,2,80259,0)|0;c[42239]=zm(a,2,80268,0)|0;b=zm(a,2,86614,0)|0;c[42219]=b;if(!b)c[42219]=zm(a,2,86614,174185)|0;c[42220]=0;c[42226]=0;c[42225]=zm(a,2,86494,0)|0;c[42224]=zm(a,2,86485,0)|0;c[42250]=zm(a,2,86790,0)|0;c[42242]=0;c[42227]=zm(a,2,86240,0)|0;c[42237]=zm(a,2,78340,0)|0;c[42246]=0;c[42245]=zm(a,2,86690,0)|0;c[42244]=zm(a,2,86676,0)|0;c[42249]=zm(a,2,86781,0)|0;c[42243]=0;c[42228]=0;c[42190]=zm(a,1,96049,0)|0;c[42191]=zm(a,1,96043,0)|0;c[42192]=zm(a,1,90671,0)|0;c[42202]=0;c[42195]=zm(a,1,86485,0)|0;c[42196]=zm(a,1,86494,0)|0;c[42197]=0;c[42199]=zm(a,1,86240,0)|0;c[42200]=0;c[42203]=0;c[42206]=zm(a,1,86446,0)|0;c[42204]=zm(a,1,86529,0)|0;c[42205]=zm(a,1,86535,0)|0;c[42208]=zm(a,1,86547,0)|0;c[42207]=zm(a,1,86385,0)|0;c[42209]=zm(a,1,86552,0)|0;c[42210]=zm(a,1,78352,0)|0;c[42201]=0;c[42213]=0;c[42185]=zm(a,0,86446,0)|0;return}function Rg(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0.0,g=0.0,i=0.0;d=c[(c[(c[a>>2]|0)+16>>2]|0)+96>>2]|0;a=c[(c[(c[b>>2]|0)+16>>2]|0)+96>>2]|0;b=(a|0)!=0;if(d)if(b?(f=+h[d+24>>3],i=+h[d+32>>3],e=+h[a+24>>3],g=+h[a+32>>3],!(f>e)):0)if(!(fg)a=-1;else a=i>2]|0)+116>>2]|0;if(!b)break;else a=b}b=c[a>>2]&3;d=c[(c[((b|0)==2?a:a+-48|0)+40>>2]|0)+16>>2]|0;e=c[d+232>>2]|0;a=c[(c[((b|0)==3?a:a+48|0)+40>>2]|0)+16>>2]|0;b=c[a+232>>2]|0;if((e|0)<=(b|0))if((e|0)<(b|0))a=1;else a=(c[d+236>>2]|0)<(c[a+236>>2]|0)&1;else a=0;return a|0}function Tg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=l;l=l+16|0;e=d+8|0;f=d;h=(c[a+16>>2]|0)+180|0;g=(c[b+16>>2]|0)+172|0;c[f>>2]=c[h>>2];c[f+4>>2]=c[h+4>>2];c[e>>2]=c[g>>2];c[e+4>>2]=c[g+4>>2];b=Ug(a,f,b,e)|0;l=d;return b|0}function Ug(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=c[b+4>>2]|0;a:do if((f|0)>0?(g=c[e+4>>2]|0,(g|0)>0):0)if((f|0)<(g|0)){f=c[b>>2]|0;e=0;while(1){b=c[f+(e<<2)>>2]|0;if(!b){b=0;break a}if((c[((c[b>>2]&3|0)==2?b:b+-48|0)+40>>2]|0)==(d|0))break;else e=e+1|0}}else{f=c[e>>2]|0;e=0;while(1){b=c[f+(e<<2)>>2]|0;if(!b){b=0;break a}if((c[((c[b>>2]&3|0)==3?b:b+48|0)+40>>2]|0)==(a|0))break;else e=e+1|0}}else b=0;while(0);return b|0}function Vg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=l;l=l+16|0;e=d+8|0;f=d;h=(c[a+16>>2]|0)+188|0;g=(c[b+16>>2]|0)+196|0;c[f>>2]=c[h>>2];c[f+4>>2]=c[h+4>>2];c[e>>2]=c[g>>2];c[e+4>>2]=c[g+4>>2];b=Ug(a,f,b,e)|0;l=d;return b|0}function Wg(a){a=a|0;var b=0,d=0,e=0,f=0;e=a+48|0;d=c[(c[((c[a>>2]&3|0)==3?a:e)+40>>2]|0)+16>>2]|0;b=c[d+180>>2]|0;if(!b)b=xw((c[d+184>>2]<<2)+8|0)|0;else b=zw(b,(c[d+184>>2]<<2)+8|0)|0;c[(c[(c[((c[a>>2]&3|0)==3?a:e)+40>>2]|0)+16>>2]|0)+180>>2]=b;f=c[(c[((c[a>>2]&3|0)==3?a:e)+40>>2]|0)+16>>2]|0;d=c[f+180>>2]|0;f=f+184|0;b=c[f>>2]|0;c[f>>2]=b+1;c[d+(b<<2)>>2]=a;e=c[(c[((c[a>>2]&3|0)==3?a:e)+40>>2]|0)+16>>2]|0;c[(c[e+180>>2]|0)+(c[e+184>>2]<<2)>>2]=0;e=a+-48|0;b=c[(c[((c[a>>2]&3|0)==2?a:e)+40>>2]|0)+16>>2]|0;d=c[b+172>>2]|0;if(!d)b=xw((c[b+176>>2]<<2)+8|0)|0;else b=zw(d,(c[b+176>>2]<<2)+8|0)|0;c[(c[(c[((c[a>>2]&3|0)==2?a:e)+40>>2]|0)+16>>2]|0)+172>>2]=b;b=c[(c[((c[a>>2]&3|0)==2?a:e)+40>>2]|0)+16>>2]|0;d=c[b+172>>2]|0;b=b+176|0;f=c[b>>2]|0;c[b>>2]=f+1;c[d+(f<<2)>>2]=a;f=c[(c[((c[a>>2]&3|0)==2?a:e)+40>>2]|0)+16>>2]|0;c[(c[f+172>>2]|0)+(c[f+176>>2]<<2)>>2]=0;return a|0}function Xg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;e=a+4|0;f=c[e>>2]|0;d=0;while(1){if((d|0)>=(f|0))break;g=c[a>>2]|0;h=g+(d<<2)|0;if((c[h>>2]|0)==(b|0)){i=4;break}else d=d+1|0}if((i|0)==4){i=f+-1|0;c[e>>2]=i;c[h>>2]=c[g+(i<<2)>>2];c[(c[a>>2]|0)+(i<<2)>>2]=0}return}function Yg(a){a=a|0;if(!a)ma(78393,78403,117,78412);else{Xg((c[(c[((c[a>>2]&3|0)==3?a:a+48|0)+40>>2]|0)+16>>2]|0)+180|0,a);Xg((c[(c[((c[a>>2]&3|0)==2?a:a+-48|0)+40>>2]|0)+16>>2]|0)+172|0,a);return}}function Zg(a){a=a|0;var b=0,d=0,e=0,f=0;e=a+48|0;d=c[(c[((c[a>>2]&3|0)==3?a:e)+40>>2]|0)+16>>2]|0;b=c[d+204>>2]|0;if(!b)b=xw((c[d+208>>2]<<2)+8|0)|0;else b=zw(b,(c[d+208>>2]<<2)+8|0)|0;c[(c[(c[((c[a>>2]&3|0)==3?a:e)+40>>2]|0)+16>>2]|0)+204>>2]=b;f=c[(c[((c[a>>2]&3|0)==3?a:e)+40>>2]|0)+16>>2]|0;b=c[f+204>>2]|0;f=f+208|0;d=c[f>>2]|0;c[f>>2]=d+1;c[b+(d<<2)>>2]=a;e=c[(c[((c[a>>2]&3|0)==3?a:e)+40>>2]|0)+16>>2]|0;c[(c[e+204>>2]|0)+(c[e+208>>2]<<2)>>2]=0;return}function _g(a){a=a|0;$g(a,(c[(c[((c[a>>2]&3|0)==3?a:a+48|0)+40>>2]|0)+16>>2]|0)+204|0);return}function $g(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=b+4|0;e=c[h>>2]|0;f=c[b>>2]|0;d=0;while(1){if((d|0)>=(e|0)){g=4;break}if((c[f+(d<<2)>>2]|0)==(a|0))break;else d=d+1|0}if((g|0)==4){if(!f)d=xw((e<<2)+8|0)|0;else d=zw(f,(e<<2)+8|0)|0;c[b>>2]=d;f=c[h>>2]|0;g=f+1|0;c[h>>2]=g;c[d+(f<<2)>>2]=a;c[(c[b>>2]|0)+(g<<2)>>2]=0}return}function ah(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=ww(96)|0;g=n+48|0;c[g>>2]=c[g>>2]|3;c[n>>2]=c[n>>2]&-4|2;h=ww(176)|0;m=n+16|0;c[m>>2]=h;c[((c[n>>2]&3|0)==3?n:g)+40>>2]=d;j=n+-48|0;c[((c[n>>2]&3|0)==2?n:j)+40>>2]=e;a[h+112>>0]=1;if(!f){c[h+156>>2]=1;b[h+154>>1]=1;b[h+168>>1]=1;b[h+170>>1]=1}else{c[n>>2]=c[n>>2]&15|c[f>>2]&-16;c[g>>2]=c[g>>2]&15|c[f>>2]&-16;l=f+16|0;i=c[l>>2]|0;b[h+168>>1]=b[i+168>>1]|0;b[h+154>>1]=b[i+154>>1]|0;c[h+156>>2]=c[i+156>>2];b[h+170>>1]=b[i+170>>1]|0;d=c[((c[n>>2]&3|0)==3?n:g)+40>>2]|0;e=c[f>>2]&3;k=f+48|0;if((d|0)!=(c[((e|0)==3?f:k)+40>>2]|0)){g=f+-48|0;if((d|0)==(c[((e|0)==2?f:g)+40>>2]|0)){h=h+16|0;d=i+56|0;e=h+40|0;do{c[h>>2]=c[d>>2];h=h+4|0;d=d+4|0}while((h|0)<(e|0))}}else{h=h+16|0;d=i+16|0;e=h+40|0;do{c[h>>2]=c[d>>2];h=h+4|0;d=d+4|0}while((h|0)<(e|0));g=f+-48|0}d=c[((c[n>>2]&3|0)==2?n:j)+40>>2]|0;e=c[f>>2]&3;if((d|0)!=(c[((e|0)==2?f:g)+40>>2]|0)){if((d|0)==(c[((e|0)==3?f:k)+40>>2]|0)){h=(c[m>>2]|0)+56|0;d=(c[l>>2]|0)+16|0;e=h+40|0;do{c[h>>2]=c[d>>2];h=h+4|0;d=d+4|0}while((h|0)<(e|0))}}else{h=(c[m>>2]|0)+56|0;d=(c[l>>2]|0)+56|0;e=h+40|0;do{c[h>>2]=c[d>>2];h=h+4|0;d=d+4|0}while((h|0)<(e|0))}d=(c[l>>2]|0)+172|0;if(!(c[d>>2]|0))c[d>>2]=n;c[(c[m>>2]|0)+116>>2]=f}return n|0}function bh(a,b,c){a=a|0;b=b|0;c=c|0;return Wg(ah(a,b,c)|0)|0}function ch(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;a=(c[a+16>>2]|0)+192|0;f=c[a>>2]|0;d=c[b+16>>2]|0;c[d+164>>2]=f;e=f;if(f|0)c[(c[e+16>>2]|0)+168>>2]=b;c[a>>2]=b;c[d+168>>2]=0;if((e|0)==(b|0))ma(78429,78403,215,78445);else return}function dh(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;if((a|0)==(b|0))ma(78455,78403,220,78462);f=c[b+16>>2]|0;d=f+164|0;if(c[d>>2]|0)ma(78475,78403,221,78462);e=(c[a+16>>2]|0)+164|0;c[d>>2]=c[e>>2];d=c[e>>2]|0;if(d|0)c[(c[d+16>>2]|0)+168>>2]=b;c[f+168>>2]=a;c[e>>2]=b;return}function eh(a,b){a=a|0;b=b|0;var d=0,e=0;if(!(fh(a,b)|0))ma(78494,78403,231,78515);b=c[b+16>>2]|0;d=c[b+164>>2]|0;e=d;b=b+168|0;if(d|0)c[(c[d+16>>2]|0)+168>>2]=c[b>>2];b=c[b>>2]|0;if(!b)c[(c[a+16>>2]|0)+192>>2]=e;else c[(c[b+16>>2]|0)+164>>2]=e;return}function fh(a,b){a=a|0;b=b|0;a=(c[a+16>>2]|0)+192|0;while(1){a=c[a>>2]|0;if((a|0)==0|(a|0)==(b|0))break;a=(c[a+16>>2]|0)+164|0}return a|0}function gh(b){b=b|0;var d=0,e=0,f=0,g=0;d=ww(64)|0;c[d>>2]=c[d>>2]&-4|1;e=d+16|0;c[e>>2]=ww(304)|0;c[d+24>>2]=to(b)|0;g=c[e>>2]|0;a[g+156>>0]=1;h[g+96>>3]=1.0;h[g+88>>3]=1.0;h[g+80>>3]=1.0;c[g+216>>2]=1;c[g+176>>2]=0;g=ww(20)|0;f=c[e>>2]|0;c[f+172>>2]=g;c[f+184>>2]=0;f=ww(20)|0;c[(c[e>>2]|0)+180>>2]=f;ch(b,d);b=(c[b+16>>2]|0)+232|0;c[b>>2]=(c[b>>2]|0)+1;return d|0}function hh(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=d+48|0;e=c[(c[((c[d>>2]&3|0)==3?d:g)+40>>2]|0)+16>>2]|0;f=c[e+188>>2]|0;if(!f)e=xw((c[e+192>>2]<<2)+8|0)|0;else e=zw(f,(c[e+192>>2]<<2)+8|0)|0;c[(c[(c[((c[d>>2]&3|0)==3?d:g)+40>>2]|0)+16>>2]|0)+188>>2]=e;h=c[(c[((c[d>>2]&3|0)==3?d:g)+40>>2]|0)+16>>2]|0;f=c[h+188>>2]|0;h=h+192|0;e=c[h>>2]|0;c[h>>2]=e+1;c[f+(e<<2)>>2]=d;g=c[(c[((c[d>>2]&3|0)==3?d:g)+40>>2]|0)+16>>2]|0;c[(c[g+188>>2]|0)+(c[g+192>>2]<<2)>>2]=0;g=d+-48|0;e=c[(c[((c[d>>2]&3|0)==2?d:g)+40>>2]|0)+16>>2]|0;f=c[e+196>>2]|0;if(!f)e=xw((c[e+200>>2]<<2)+8|0)|0;else e=zw(f,(c[e+200>>2]<<2)+8|0)|0;c[(c[(c[((c[d>>2]&3|0)==2?d:g)+40>>2]|0)+16>>2]|0)+196>>2]=e;e=c[(c[((c[d>>2]&3|0)==2?d:g)+40>>2]|0)+16>>2]|0;f=c[e+196>>2]|0;e=e+200|0;h=c[e>>2]|0;c[e>>2]=h+1;c[f+(h<<2)>>2]=d;h=c[(c[((c[d>>2]&3|0)==2?d:g)+40>>2]|0)+16>>2]|0;c[(c[h+196>>2]|0)+(c[h+200>>2]<<2)>>2]=0;a[(c[b+16>>2]|0)+240>>0]=1;a[(c[(Wf(b)|0)+16>>2]|0)+240>>0]=1;return}function ih(a){a=a|0;var b=0,d=0;if(!a)ma(78393,78403,269,78532);b=c[(c[a+16>>2]|0)+116>>2]|0;if(b|0?(d=(c[b+16>>2]|0)+172|0,(c[d>>2]|0)==(a|0)):0)c[d>>2]=0;Xg((c[(c[((c[a>>2]&3|0)==3?a:a+48|0)+40>>2]|0)+16>>2]|0)+188|0,a);Xg((c[(c[((c[a>>2]&3|0)==2?a:a+-48|0)+40>>2]|0)+16>>2]|0)+196|0,a);return}function jh(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=l;l=l+16|0;d=(c[a+16>>2]|0)+172|0;e=c[d>>2]|0;do if((e|0)!=(b|0))if(!e){c[d>>2]=b;kh(a,b);break}else ma(80440,78403,340,78570);else $l(0,78549,f)|0;while(0);l=f;return}function kh(a,d){a=a|0;d=d|0;var f=0,g=0,h=0,i=0;f=(c[d+16>>2]|0)+170|0;i=c[a+16>>2]|0;a=b[i+170>>1]|0;if((e[f>>1]|0)<(a&65535))b[f>>1]=a;g=i+168|0;h=i+154|0;f=i+156|0;a=d;while(1){if(!a)break;d=c[a+16>>2]|0;i=d+168|0;b[i>>1]=(e[i>>1]|0)+(e[g>>1]|0);i=d+154|0;b[i>>1]=(e[i>>1]|0)+(e[h>>1]|0);i=d+156|0;c[i>>2]=(c[i>>2]|0)+(c[f>>2]|0);a=c[d+172>>2]|0}return}function lh(d){d=d|0;var e=0,f=0,g=0,h=0;f=d+16|0;e=c[(c[f>>2]|0)+172>>2]|0;a:while(1){if(!e)break;mh(e,d);h=c[e+16>>2]|0;g=c[h+172>>2]|0;if(!(b[h+168>>1]|0))nh(e);while(1){if((a[(c[e+16>>2]|0)+112>>0]|0)!=1){e=g;continue a}e=c[(c[((c[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0)+16>>2]|0;if((a[e+156>>0]|0)!=1){e=g;continue a}if((c[e+184>>2]|0)!=1){e=g;continue a}e=c[c[e+180>>2]>>2]|0;mh(e,d)}}c[(c[f>>2]|0)+172>>2]=0;return}function mh(a,d){a=a|0;d=d|0;var f=0;f=c[d+16>>2]|0;d=c[a+16>>2]|0;a=d+168|0;b[a>>1]=(e[a>>1]|0)-(e[f+168>>1]|0);a=d+154|0;b[a>>1]=(e[a>>1]|0)-(e[f+154>>1]|0);d=d+156|0;c[d>>2]=(c[d>>2]|0)-(c[f+156>>2]|0);return}function nh(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;if(!a)ma(78393,78403,128,78583);g=a+48|0;d=0;while(1){b=c[a>>2]|0;e=(c[(c[((b&3|0)==3?a:g)+40>>2]|0)+16>>2]|0)+180|0;f=c[(c[e>>2]|0)+(d<<2)>>2]|0;if(!f)break;if((f|0)==(a|0))Xg(e,a);d=d+1|0}g=a+-48|0;f=0;while(1){d=(c[(c[((b&3|0)==2?a:g)+40>>2]|0)+16>>2]|0)+172|0;e=c[(c[d>>2]|0)+(f<<2)>>2]|0;if(!e)break;if((e|0)==(a|0)){Xg(d,a);b=c[a>>2]|0}f=f+1|0}return}function oh(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;p=l;l=l+1040|0;n=p+1032|0;o=p;m=p+8|0;k=d+16|0;d=c[k>>2]|0;j=b[d+236>>1]|0;while(1){if((j|0)>(b[d+238>>1]|0))break;i=c[d+196>>2]|0;h=i+(j<<6)|0;i=i+(j<<6)+4|0;g=0;d=0;while(1){if((g|0)>=(c[h>>2]|0))break;e=c[(c[i>>2]|0)+(g<<2)>>2]|0;f=e+16|0;if(c[(c[f>>2]|0)+112>>2]|0){if(!d){a[n>>0]=a[17644]|0;a[n+1>>0]=a[17645]|0;a[n+2>>0]=a[17646]|0;a[n+3>>0]=a[17647]|0;d=hn(78605,n,0)|0}c[o>>2]=g;qL(m,122187,o)|0;t=oo(d,m,1)|0;Oo(t,78608,24,1)|0;q=c[(c[f>>2]|0)+180>>2]|0;r=c[q>>2]|0;r=c[(c[(c[((c[r>>2]&3|0)==2?r:r+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0;q=c[q+4>>2]|0;q=c[(c[(c[((c[q>>2]&3|0)==2?q:q+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0;s=(r|0)>(q|0);f=c[t+16>>2]|0;c[f+12>>2]=s?q:r;c[f+16>>2]=s?r:q;c[f+20>>2]=e}g=g+1|0}if(d|0){if((nn(d)|0)>1)ph(d,h);mn(d)|0}j=j+1|0;d=c[k>>2]|0}l=p;return}function ph(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;d=0;h=eo(a)|0;a:while(1){if(!h)break;i=fo(a,h)|0;j=h+16|0;g=i;while(1){if(!g){h=i;continue a}f=c[g+16>>2]|0;e=c[j>>2]|0;if((c[f+16>>2]|0)>(c[e+12>>2]|0)){if((c[e+16>>2]|0)<=(c[f+12>>2]|0))bn(a,h,g,0,1)|0}else{bn(a,g,h,0,1)|0;d=1}g=fo(a,g)|0}}do if(d|0){h=Jp(a,78613,1)|0;j=ww((nn(a)|0)<<2)|0;i=ww((nn(a)|0)<<2)|0;f=b+4|0;e=eo(a)|0;b:while(1){if(!e){d=23;break}if((c[(c[e+16>>2]|0)+8>>2]|0)==0?pn(a,e,1,1)|0:0){c:do if(qh(a,e,h,i)|0){g=nn(h)|0;if((rh(a,h,j)|0)!=(g|0)){d=17;break b}sL(i,g,4,12);d=0;while(1){if((d|0)>=(g|0))break c;b=i+(d<<2)|0;k=c[j+(d<<2)>>2]|0;c[(c[k+16>>2]|0)+236>>2]=c[b>>2];c[(c[f>>2]|0)+(c[b>>2]<<2)>>2]=k;d=d+1|0}}while(0);th(h)}e=fo(a,e)|0}if((d|0)==17)ma(78618,78628,265,78639);else if((d|0)==23){$I(j);break}}while(0);return}function qh(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;h=c[b+16>>2]|0;c[h+8>>2]=1;h=c[(c[(c[h+20>>2]|0)+16>>2]|0)+236>>2]|0;c[e+((nn(d)|0)<<2)>>2]=h;jo(d,b,1)|0;h=Qm(a,b)|0;f=0;while(1){if(!h)break;j=c[h>>2]&3;g=c[((j|0)==2?h:h+-48|0)+40>>2]|0;i=c[g+16>>2]|0;f=f+((c[(c[(c[i+20>>2]|0)+16>>2]|0)+236>>2]|0)>(c[(c[(c[(c[(c[((j|0)==3?h:h+48|0)+40>>2]|0)+16>>2]|0)+20>>2]|0)+16>>2]|0)+236>>2]|0)&1)|0;if(!(c[i+8>>2]|0))f=(qh(a,g,d,e)|0)+f|0;h=Sm(a,h)|0}h=Tm(a,b)|0;while(1){if(!h)break;i=c[h>>2]&3;g=c[((i|0)==3?h:h+48|0)+40>>2]|0;j=c[g+16>>2]|0;f=f+((c[(c[(c[(c[(c[((i|0)==2?h:h+-48|0)+40>>2]|0)+16>>2]|0)+20>>2]|0)+16>>2]|0)+236>>2]|0)>(c[(c[(c[j+20>>2]|0)+16>>2]|0)+236>>2]|0)&1)|0;if(!(c[j+8>>2]|0))f=(qh(a,g,d,e)|0)+f|0;h=Um(a,h)|0}return f|0}function rh(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=0;while(1){e=uh(a,b)|0;if(!e)break;c[d+(f<<2)>>2]=c[(c[e+16>>2]|0)+20>>2];qo(b,e)|0;e=Qm(a,e)|0;while(1){if(!e)break;g=Sm(a,e)|0;en(a,e)|0;e=g}f=f+1|0}return f|0}function sh(a,b){a=a|0;b=b|0;return (c[a>>2]|0)-(c[b>>2]|0)|0}function th(a){a=a|0;var b=0,c=0;b=eo(a)|0;while(1){if(!b)break;c=fo(a,b)|0;qo(a,b)|0;b=c}return}function uh(a,b){a=a|0;b=b|0;var c=0;c=eo(b)|0;while(1){if(!c){c=0;break}if(!(pn(a,c,1,0)|0))break;c=fo(b,c)|0}return c|0}function vh(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;wh(b);i=b+16|0;f=0;e=0;while(1){if((f|0)>=(c[(c[i>>2]|0)+220>>2]|0))break;xh(b,f);f=f+1|0;e=(yh(b,0,d)|0)+e|0}zh(b);h=1;while(1){f=c[i>>2]|0;g=c[f+180>>2]|0;if((h|0)>(g|0))break;g=(Ah(c[(c[f+184>>2]|0)+(h<<2)>>2]|0,d)|0)+e|0;h=h+1|0;e=g}do if((g|0)>0){f=Jm(b,78653)|0;if(f|0?(JA(f)|0)<<24>>24==0:0)break;Zk(b);a[173897]=1;e=yh(b,2,d)|0}while(0);Bh(b,e);return}function wh(d){d=d|0;var e=0;if(0)yA();a[173897]=0;c[41927]=d;e=((on(Wf(d)|0)|0)<<2)+4|0;c[41926]=ww(e)|0;c[41925]=ww(e)|0;ri(d);e=d+16|0;if(b[(c[e>>2]|0)+136>>1]&16)si(d);Gk(d);ul(d,1);ti(d);Ih(d);e=c[e>>2]|0;c[41928]=b[e+236>>1];c[41929]=b[e+238>>1];return}function xh(a,d){a=a|0;d=d|0;var e=0,f=0,g=0;a=c[a+16>>2]|0;c[a+192>>2]=c[(c[a+216>>2]|0)+(d<<2)>>2];a:do if((d|0)>0){d=b[a+238>>1]|0;e=a+196|0;a=b[a+236>>1]|0;while(1){if((a|0)>(d|0))break a;f=c[e>>2]|0;g=f+(a<<6)+4|0;f=f+(a<<6)|0;c[g>>2]=(c[g>>2]|0)+(c[f>>2]<<2);c[f>>2]=0;a=a+1|0}}while(0);return}function yh(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+32|0;n=o;if((b|0)>1){e=Yh(0)|0;Zh(a)}else e=2147483647;m=c[13918]|0;k=b;f=0;b=e;while(1){if((k|0)>=3)break;f=c[42181]|0;if((k|0)==2)if((e|0)>(b|0)){$h(a);e=b}else e=b;else{e=(f|0)<4?f:4;if((Wf(a)|0)==(a|0))_h(a,k);if(!k)Jh(a);Kh(a);g=Yh(0)|0;if((g|0)>(b|0)){f=e;e=g}else{Zh(a);f=e;e=g;b=g}}g=0;j=0;while(1){if((j|0)>=(f|0))break;if(0){c[n>>2]=k;c[n+4>>2]=j;c[n+8>>2]=g;c[n+12>>2]=e;c[n+16>>2]=b;AL(m,79046,n)|0}i=g+1|0;if((e|0)==0|(g|0)>=(c[41930]|0))break;ai(a,j);e=Yh(0)|0;if((e|0)>(b|0))g=i;else{Zh(a);g=+h[20878]*+(b|0)>+(e|0)?0:i;b=e}j=j+1|0}if(!e){e=0;break}else k=k+1|0}if((e|0)>(b|0))$h(a);if((b|0)>0){bi(a,0);e=Yh(0)|0}else e=b;a:do if(d|0){b=0;while(1){if((b|0)>=(f|0))break a;ci(a);b=b+1|0}}while(0);l=o;return e|0}function zh(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+16|0;n=p;Xh(a);k=a+16|0;d=c[k>>2]|0;m=c[13918]|0;j=b[d+236>>1]|0;while(1){if((j|0)>(b[d+238>>1]|0))break;e=c[d+196>>2]|0;f=c[e+(j<<6)+8>>2]|0;c[e+(j<<6)>>2]=f;g=c[e+(j<<6)+12>>2]|0;c[e+(j<<6)+4>>2]=g;i=0;while(1){if((i|0)>=(f|0))break;h=c[g+(i<<2)>>2]|0;if(!h){o=6;break}c[(c[h+16>>2]|0)+236>>2]=i;i=i+1|0}if((o|0)==6){o=0;if(0){e=En(a)|0;d=c[(c[(c[k>>2]|0)+196>>2]|0)+(j<<6)>>2]|0;c[n>>2]=e;c[n+4>>2]=j;c[n+8>>2]=i;c[n+12>>2]=d;AL(m,78996,n)|0;d=c[k>>2]|0;e=c[d+196>>2]|0}c[e+(j<<6)>>2]=i}j=j+1|0}l=p;return}function Ah(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;Tk(a);Ih(a);Jh(a);Kh(a);f=a+16|0;d=yh(a,2,b)|0;e=1;while(1){g=c[f>>2]|0;if((e|0)>(c[g+180>>2]|0))break;d=(Ah(c[(c[g+184>>2]|0)+(e<<2)>>2]|0,b)|0)+d|0;e=e+1|0}Lh(a);return d|0}function Bh(d,e){d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0;q=l;l=l+16|0;p=q;f=c[41925]|0;if(f|0){$I(f);c[41925]=0}f=c[41926]|0;if(f|0){$I(f);c[41926]=0}o=d+16|0;f=1;while(1){g=c[o>>2]|0;if((f|0)>(c[g+180>>2]|0))break;Ch(c[(c[g+184>>2]|0)+(f<<2)>>2]|0);f=f+1|0}n=b[g+236>>1]|0;f=g;while(1){if((n|0)>(b[f+238>>1]|0))break;else m=0;while(1){f=c[f+196>>2]|0;if((m|0)>=(c[f+(n<<6)>>2]|0))break;k=(c[(c[f+(n<<6)+4>>2]|0)+(m<<2)>>2]|0)+16|0;f=c[k>>2]|0;c[f+236>>2]=m;f=c[f+188>>2]|0;a:do if(f|0){g=0;while(1){i=c[f+(g<<2)>>2]|0;if(!i)break a;j=i+16|0;if((a[(c[j>>2]|0)+112>>0]|0)==4){ih(i);$I(c[j>>2]|0);$I(i);g=g+-1|0;f=c[(c[k>>2]|0)+188>>2]|0}g=g+1|0}}while(0);m=m+1|0;f=c[o>>2]|0}Dh(c[f+(n<<6)+56>>2]|0);n=n+1|0;f=c[o>>2]|0}if(0){o=c[13918]|0;d=En(d)|0;r=+zA();c[p>>2]=d;c[p+4>>2]=e;h[p+8>>3]=r;AL(o,78664,p)|0}l=q;return}function Ch(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;g=a+16|0;d=1;while(1){f=c[g>>2]|0;if((d|0)>(c[f+180>>2]|0))break;Ch(c[(c[f+184>>2]|0)+(d<<2)>>2]|0);d=d+1|0}a:do if(c[f+268>>2]|0){e=b[f+236>>1]|0;d=f;while(1){if((e|0)>(b[d+238>>1]|0))break a;j=c[(c[d+268>>2]|0)+(e<<2)>>2]|0;i=Eh(a,j,-1)|0;j=Eh(a,j,1)|0;c[(c[(c[g>>2]|0)+268>>2]|0)+(e<<2)>>2]=i;k=c[(c[(c[(Wf(a)|0)+16>>2]|0)+196>>2]|0)+(e<<6)+4>>2]|0;i=c[(c[i+16>>2]|0)+236>>2]|0;f=c[g>>2]|0;h=c[f+196>>2]|0;c[h+(e<<6)+4>>2]=k+(i<<2);c[h+(e<<6)>>2]=(c[(c[j+16>>2]|0)+236>>2]|0)+1-i;e=e+1|0;d=f}}while(0);return}function Dh(a){a=a|0;if(a|0){$I(c[a+8>>2]|0);$I(a)}return}function Eh(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=b;while(1){b=Fh(b,c)|0;if(!b)break;if(Gh(a,b)|0){d=b;continue}e=(Hh(a,b)|0)==0;d=e?d:b}return d|0}function Fh(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;if(!a)ma(78703,78628,1023,78705);if((b|0)<0){a=c[a+16>>2]|0;e=c[a+236>>2]|0;if((e|0)>0){a=(c[(c[(c[41927]|0)+16>>2]|0)+196>>2]|0)+(c[a+232>>2]<<6)+4|0;d=e+-1|0;f=7}else g=0}else{a=c[a+16>>2]|0;e=c[a+236>>2]|0;a=(c[(c[(c[41927]|0)+16>>2]|0)+196>>2]|0)+(c[a+232>>2]<<6)+4|0;d=e+1|0;f=7}if((f|0)==7){a=c[(c[a>>2]|0)+(d<<2)>>2]|0;if(a)if((O((c[(c[a+16>>2]|0)+236>>2]|0)-e|0,b)|0)>0)g=a;else ma(78714,78628,1029,78705);else g=0}return g|0}function Gh(b,d){b=b|0;d=d|0;if(!(a[(c[d+16>>2]|0)+156>>0]|0))b=(Co(b,d)|0)!=0&1;else b=0;return b|0}function Hh(b,d){b=b|0;d=d|0;var e=0,f=0;d=c[d+16>>2]|0;if(((a[d+156>>0]|0)==1?(c[d+176>>2]|0)==1:0)?(c[d+184>>2]|0)==1:0){d=c[d+180>>2]|0;while(1){d=c[d>>2]|0;e=c[d+16>>2]|0;if(!(a[e+112>>0]|0))break;else d=e+116|0}if(Co(b,d)|0)d=1;else f=7}else f=7;if((f|0)==7)d=0;return d|0}function Ih(b){b=b|0;var d=0,e=0,f=0;f=l;l=l+16|0;e=f;d=c[42185]|0;a:do if((d|0)!=0|(c[42206]|0)!=0){d=GA(b,d,0)|0;if(d|0){switch(a[d>>0]|0){case 0:break a;case 111:{if(!(yJ(d,78916)|0)){Sh(b,1);break a}break}case 105:{if(!(yJ(d,83705)|0)){Sh(b,0);break a}break}default:{}}c[e>>2]=d;$l(1,78920,e)|0;break}d=Kp(b)|0;while(1){if(!d)break;if(!(Dj(d)|0))Ih(d);d=Lp(d)|0}if(c[42206]|0)Th(b)}while(0);l=f;return}function Jh(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=d+16|0;e=c[k>>2]|0;j=b[e+236>>1]|0;while(1){if((j|0)>(b[e+238>>1]|0))break;else{f=0;i=0}while(1){g=c[e+196>>2]|0;h=c[g+(j<<6)>>2]|0;if((i|0)>=(h|0))break;g=c[(c[(c[g+(j<<6)+4>>2]|0)+(i<<2)>>2]|0)+16>>2]|0;a[g+158>>0]=0;a[g+157>>0]=0;c[g+284>>2]=i;if((f|0)==0&(c[g+192>>2]|0)>0){f=Qh(h,h)|0;e=c[k>>2]|0;c[(c[e+196>>2]|0)+(j<<6)+56>>2]=f;f=1}i=i+1|0}a:do if(f){i=0;f=h;while(1){if((i|0)>=(f|0))break a;h=c[(c[g+(j<<6)+4>>2]|0)+(i<<2)>>2]|0;if(!(a[(c[h+16>>2]|0)+157>>0]|0)){Rh(d,h);e=c[k>>2]|0;f=c[e+196>>2]|0;g=f;f=c[f+(j<<6)>>2]|0}i=i+1|0}}while(0);j=j+1|0}return}function Kh(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;s=d+16|0;e=c[s>>2]|0;if(a[e+240>>0]|0){h=0;r=b[e+236>>1]|0;q=0;i=0;a:while(1){if((r|0)>(b[e+238>>1]|0))break;f=c[e+196>>2]|0;g=c[f+(r<<6)>>2]|0;if(!g){g=q;f=i}else{f=c[f+(r<<6)+4>>2]|0;o=c[(c[(c[f>>2]|0)+16>>2]|0)+236>>2]|0;e=0;while(1){if((e|0)>=(g|0))break;a[(c[(c[f+(e<<2)>>2]|0)+16>>2]|0)+157>>0]=0;e=e+1|0}e=(e<<2)+4|0;if(!h)p=xw(e)|0;else p=zw(i,e)|0;m=0;n=0;while(1){e=c[s>>2]|0;f=c[e+196>>2]|0;g=c[f+(r<<6)>>2]|0;if((g|0)<=(n|0))break;j=c[(c[f+(r<<6)+4>>2]|0)+(((c[e+116>>2]&1|0)==0?g+~n|0:n)<<2)>>2]|0;l=j+16|0;e=0;k=0;while(1){i=c[l>>2]|0;if((e|0)>=(c[i+200>>2]|0)){f=0;g=0;e=i;break}i=k+((Mh(d,c[(c[i+196>>2]|0)+(e<<2)>>2]|0)|0)!=0&1)|0;e=e+1|0;k=i}while(1){if((g|0)>=(c[e+192>>2]|0))break;i=f+((Mh(d,c[(c[e+188>>2]|0)+(g<<2)>>2]|0)|0)!=0&1)|0;f=i;g=g+1|0;e=c[l>>2]|0}if(f|k)if((k|0)==0&(a[e+157>>0]|0)==0)e=(Nh(d,j,p+(m<<2)|0,r)|0)+m|0;else e=m;else{c[p+(m<<2)>>2]=j;e=m+1|0}m=e;n=n+1|0}b:do if(m){c:do if(!(c[e+116>>2]&1)){f=p;e=p+(m<<2)|0;while(1){e=e+-4|0;if(f>>>0>=e>>>0){g=0;break c}n=c[f>>2]|0;c[f>>2]=c[e>>2];c[e>>2]=n;f=f+4|0}}else g=0;while(0);while(1){e=c[s>>2]|0;i=c[e+196>>2]|0;f=c[i+(r<<6)>>2]|0;if((g|0)>=(f|0)){m=0;g=i;break}n=c[p+(g<<2)>>2]|0;c[(c[i+(r<<6)+4>>2]|0)+(g<<2)>>2]=n;c[(c[n+16>>2]|0)+236>>2]=g+o;g=g+1|0}while(1){if((m|0)>=(f|0))break b;l=(c[(c[g+(r<<6)+4>>2]|0)+(m<<2)>>2]|0)+16|0;i=c[(c[l>>2]|0)+188>>2]|0;if(i){k=0;f=i;while(1){g=c[f+(k<<2)>>2]|0;e=c[s>>2]|0;if(!g)break;j=c[g>>2]&3;i=c[(c[(c[((j|0)==2?g:g+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0;j=c[(c[(c[((j|0)==3?g:g+48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0;if(!(c[e+116>>2]&1))if((i|0)<(j|0))t=36;else e=k;else if((i|0)>(j|0))t=36;else e=k;if((t|0)==36){t=0;if(Mh(d,g)|0){t=37;break a}ih(g);Oh(d,g);e=k+-1|0;f=c[(c[l>>2]|0)+188>>2]|0}k=e+1|0}f=c[e+196>>2]|0;g=f;f=c[f+(r<<6)>>2]|0}m=m+1|0}}while(0);a[(c[(c[(c[41927]|0)+16>>2]|0)+196>>2]|0)+(r<<6)+49>>0]=0;h=p;g=p;f=p}r=r+1|0;q=g;i=f}if((t|0)==37)ma(78762,78628,1561,78801);if(h|0)$I(q)}return}function Lh(a){a=a|0;var d=0,e=0;e=a+16|0;a=c[e>>2]|0;a:do if(c[a+268>>2]|0){d=b[a+236>>1]|0;while(1){if((d|0)>(b[a+238>>1]|0))break a;c[(c[a+268>>2]|0)+(d<<2)>>2]=c[c[(c[a+196>>2]|0)+(d<<6)+4>>2]>>2];d=d+1|0;a=c[e>>2]|0}}while(0);return}function Mh(a,b){a=a|0;b=b|0;if((c[(c[b+16>>2]|0)+156>>2]|0)!=0?(Ph(a,c[((c[b>>2]&3|0)==3?b:b+48|0)+40>>2]|0)|0)!=0:0)a=(Ph(a,c[((c[b>>2]&3|0)==2?b:b+-48|0)+40>>2]|0)|0)!=0&1;else a=0;return a|0}function Nh(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0;l=d+16|0;g=c[l>>2]|0;a[g+157>>0]=1;a:do if((c[g+192>>2]|0)>0){h=0;j=0;while(1){i=c[(c[g+188>>2]|0)+(j<<2)>>2]|0;if(!i)break a;if((Mh(b,i)|0)!=0?(k=c[((c[i>>2]&3|0)==2?i:i+-48|0)+40>>2]|0,(a[(c[k+16>>2]|0)+157>>0]|0)==0):0)h=(Nh(b,k,e+(h<<2)|0,f)|0)+h|0;j=j+1|0;g=c[l>>2]|0}}else h=0;while(0);if((c[g+232>>2]|0)==(f|0)){c[e+(h<<2)>>2]=d;return h+1|0}else ma(78814,78628,1490,78830);return 0}function Oh(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;i=c[d>>2]&3;j=c[((i|0)==2?d:d+-48|0)+40>>2]|0;f=c[(c[j+16>>2]|0)+188>>2]|0;a:do if(!f){e=d+48|0;m=15}else{l=d+48|0;g=((i|0)==3?d:l)+40|0;e=0;while(1){h=c[f+(e<<2)>>2]|0;if(!h){e=l;m=15;break a}if((c[((c[h>>2]&3|0)==2?h:h+-48|0)+40>>2]|0)==(c[g>>2]|0))break;else e=e+1|0}jh(d,h);e=(c[d+16>>2]|0)+172|0;if(!(c[e>>2]|0))c[e>>2]=h;e=c[h+16>>2]|0;if((a[e+112>>0]|0)==4?(k=e+116|0,(c[k>>2]|0)==0):0)c[k>>2]=d;e=c[(c[((c[d>>2]&3|0)==3?d:l)+40>>2]|0)+16>>2]|0;f=c[e+204>>2]|0;if(!f)e=xw((c[e+208>>2]<<2)+8|0)|0;else e=zw(f,(c[e+208>>2]<<2)+8|0)|0;c[(c[(c[((c[d>>2]&3|0)==3?d:l)+40>>2]|0)+16>>2]|0)+204>>2]=e;i=c[(c[((c[d>>2]&3|0)==3?d:l)+40>>2]|0)+16>>2]|0;j=c[i+204>>2]|0;i=i+208|0;k=c[i>>2]|0;c[i>>2]=k+1;c[j+(k<<2)>>2]=d;d=c[(c[((c[d>>2]&3|0)==3?d:l)+40>>2]|0)+16>>2]|0;c[(c[d+204>>2]|0)+(c[d+208>>2]<<2)>>2]=0}while(0);if((m|0)==15){m=ah(j,c[((i|0)==3?d:e)+40>>2]|0,d)|0;l=c[d+16>>2]|0;d=c[m+16>>2]|0;a[d+112>>0]=(a[l+112>>0]|0)==4?4:3;c[d+96>>2]=c[l+96>>2];hh(b,m)}return}function Ph(a,b){a=a|0;b=b|0;var c=0;c=Gh(a,b)|0;return Hh(a,b)|0|c|0}function Qh(a,b){a=a|0;b=b|0;var d=0;d=ww(12)|0;c[d>>2]=a;c[d+4>>2]=b;c[d+8>>2]=ww(O(b,a)|0)|0;return d|0}function Rh(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;o=d+16|0;l=c[o>>2]|0;k=c[(c[(c[b+16>>2]|0)+196>>2]|0)+(c[l+232>>2]<<6)+56>>2]|0;a[l+157>>0]=1;a[l+158>>0]=1;l=(c[(c[(Wf(b)|0)+16>>2]|0)+180>>2]|0)>0;e=c[o>>2]|0;f=c[e+188>>2]|0;a:do if(f){m=k+4|0;n=k+8|0;d=0;b:while(1){j=c[f+(d<<2)>>2]|0;if(!j){p=e;break a}if(l){if((Co(b,c[((c[j>>2]&3|0)==3?j:j+48|0)+40>>2]|0)|0)!=0?(Co(b,c[((c[j>>2]&3|0)==2?j:j+-48|0)+40>>2]|0)|0)!=0:0)q=7}else q=7;do if((q|0)==7){q=0;h=j+16|0;if(c[(c[h>>2]|0)+156>>2]|0){e=c[j>>2]&3;g=j+-48|0;r=c[(c[((e|0)==2?j:g)+40>>2]|0)+16>>2]|0;i=c[r+284>>2]|0;f=(i|0)<(c[k>>2]|0);if((a[r+158>>0]|0)==1){if(!f){q=10;break b}e=c[(c[(c[((e|0)==3?j:j+48|0)+40>>2]|0)+16>>2]|0)+284>>2]|0;f=c[m>>2]|0;if((e|0)>=(f|0)){q=12;break b}a[(c[n>>2]|0)+((O(f,i)|0)+e)>>0]=1;ih(j);d=d+-1|0;if((a[(c[h>>2]|0)+112>>0]|0)==4)break;Oh(b,j);break}else{if(!f){q=16;break b}e=c[(c[(c[((e|0)==3?j:j+48|0)+40>>2]|0)+16>>2]|0)+284>>2]|0;f=c[m>>2]|0;if((e|0)>=(f|0)){q=18;break b}a[(c[n>>2]|0)+((O(f,e)|0)+i)>>0]=1;e=c[((c[j>>2]&3|0)==2?j:g)+40>>2]|0;if(a[(c[e+16>>2]|0)+157>>0]|0)break;Rh(b,e);break}}}while(0);f=c[o>>2]|0;d=d+1|0;e=f;f=c[f+188>>2]|0}if((q|0)==10)ma(78840,78628,1251,78872);else if((q|0)==12)ma(78884,78628,1252,78872);else if((q|0)==16)ma(78840,78628,1260,78872);else if((q|0)==18)ma(78884,78628,1261,78872)}else p=e;while(0);a[p+158>>0]=0;return}function Sh(a,b){a=a|0;b=b|0;var c=0;c=eo(a)|0;while(1){if(!c)break;Uh(a,c,b);c=fo(a,c)|0}return}function Th(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;g=l;l=l+16|0;f=g;d=eo(b)|0;while(1){if(!d)break;e=GA(d,c[42206]|0,0)|0;a:do if(e|0){switch(a[e>>0]|0){case 0:break a;case 111:{if(!(yJ(e,78916)|0)){Uh(b,d,1);break a}break}case 105:{if(!(yJ(e,83705)|0)){Uh(b,d,0);break a}break}default:{}}h=En(d)|0;c[f>>2]=e;c[f+4>>2]=h;$l(1,78951,f)|0}while(0);d=fo(b,d)|0}l=g;return}function Uh(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;j=c[41926]|0;h=d+16|0;f=c[h>>2]|0;a:do if(!(c[f+212>>2]|0)){i=(e|0)!=0;b:do if(i){g=0;d=0;e=f;while(1){f=c[(c[e+180>>2]|0)+(g<<2)>>2]|0;if(!f)break b;if(!(Vh(f)|0)){c[j+(d<<2)>>2]=f;d=d+1|0;e=c[h>>2]|0}g=g+1|0}}else{g=0;d=0;e=f;while(1){f=c[(c[e+172>>2]|0)+(g<<2)>>2]|0;if(!f)break b;if(!(Vh(f)|0)){c[j+(d<<2)>>2]=f;d=d+1|0;e=c[h>>2]|0}g=g+1|0}}while(0);if((d|0)>=2){c[j+(d<<2)>>2]=0;sL(j,d,4,13);h=i?2:3;g=i?-1:1;f=1;while(1){d=c[j+(f<<2)>>2]|0;if(!d)break a;e=c[j+(f+-1<<2)>>2]|0;e=c[((c[e>>2]&3|0)==(h|0)?e:e+(g*48|0)|0)+40>>2]|0;d=c[((c[d>>2]&3|0)==(h|0)?d:d+(g*48|0)|0)+40>>2]|0;if(Vg(e,d)|0)break a;i=ah(e,d,0)|0;a[(c[i+16>>2]|0)+112>>0]=4;hh(b,i);f=f+1|0}}}while(0);return}function Vh(a){a=a|0;var b=0;while(1){b=c[(c[a+16>>2]|0)+116>>2]|0;if(!b)break;else a=b}b=c[a>>2]&3;return (c[(c[(c[((b|0)==3?a:a+48|0)+40>>2]|0)+16>>2]|0)+212>>2]|0)!=(c[(c[(c[((b|0)==2?a:a+-48|0)+40>>2]|0)+16>>2]|0)+212>>2]|0)|0}function Wh(a,b){a=a|0;b=b|0;return ((c[c[a>>2]>>2]|0)>>>4)-((c[c[b>>2]>>2]|0)>>>4)|0}function Xh(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;f=c[a+16>>2]|0;g=f+220|0;h=c[g>>2]|0;if((h|0)>=2){i=f+216|0;a=0;e=0;while(1){if((e|0)>=(h|0))break;d=c[(c[i>>2]|0)+(e<<2)>>2]|0;if(a|0)c[(c[a+16>>2]|0)+164>>2]=d;j=c[d+16>>2]|0;c[j+168>>2]=a;a=d;d=j;while(1){d=c[d+164>>2]|0;if(!d)break;a=d;d=c[d+16>>2]|0}e=e+1|0}c[g>>2]=1;c[f+192>>2]=c[c[f+216>>2]>>2];b[f+236>>1]=c[41928];b[f+238>>1]=c[41929]}return}function Yh(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=c[41927]|0;j=i+16|0;f=c[j>>2]|0;g=0;h=b[f+236>>1]|0;while(1){if((h|0)>=(b[f+238>>1]|0))break;d=c[f+196>>2]|0;if(!(a[d+(h<<6)+49>>0]|0)){e=pi(i,h)|0;d=c[j>>2]|0;f=c[d+196>>2]|0;c[f+(h<<6)+52>>2]=e;a[f+(h<<6)+49>>0]=1}else{e=c[d+(h<<6)+52>>2]|0;d=f}g=e+g|0;h=h+1|0;f=d}return g|0}function Zh(a){a=a|0;var d=0,e=0,f=0,g=0,i=0,j=0;a=c[a+16>>2]|0;g=b[a+238>>1]|0;i=a+196|0;a=b[a+236>>1]|0;while(1){if((a|0)>(g|0))break;f=c[i>>2]|0;e=c[f+(a<<6)>>2]|0;f=f+(a<<6)+4|0;d=0;while(1){if((d|0)>=(e|0))break;j=c[(c[(c[f>>2]|0)+(d<<2)>>2]|0)+16>>2]|0;h[j+16>>3]=+(c[j+236>>2]|0);d=d+1|0}a=a+1|0}return}function _h(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;r=l;l=l+16|0;m=r;n=d+16|0;o=AA(c[(c[n>>2]|0)+232>>2]|0)|0;j=c[n>>2]|0;f=j+192|0;g=f;while(1){g=c[g>>2]|0;if(!g)break;g=c[g+16>>2]|0;a[g+157>>0]=0;g=g+164|0}h=b[j+238>>1]|0;i=j+196|0;g=b[j+236>>1]|0;while(1){if((g|0)>(h|0))break;c[(c[i>>2]|0)+(g<<6)>>2]=0;g=g+1|0}i=(e|0)==0;while(1){g=c[f>>2]|0;if(!g)break;h=g+16|0;f=c[h>>2]|0;if((c[c[(i?f+172|0:f+180|0)>>2]>>2]|0)==0?(k=f+157|0,(a[k>>0]|0)==0):0){a[k>>0]=1;CA(o,g);while(1){f=DA(o)|0;if(!f)break;if((a[(c[f+16>>2]|0)+159>>0]|0)==7){Yk(d,f,e,o);continue}else{ni(d,f);oi(o,f,e);continue}}f=c[h>>2]|0}f=f+164|0}if(DA(o)|0)$l(1,79159,m)|0;f=c[n>>2]|0;j=b[f+236>>1]|0;while(1){if((j|0)>(b[f+238>>1]|0))break;a[(c[(c[(c[41927]|0)+16>>2]|0)+196>>2]|0)+(j<<6)+49>>0]=0;if((c[f+116>>2]&1|0)!=0?(p=c[f+196>>2]|0,q=c[p+(j<<6)>>2]|0,(q|0)>0):0){g=c[p+(j<<6)+4>>2]|0;h=q+-1|0;i=(h|0)/2|0;f=0;while(1){if((f|0)>(i|0))break;hi(c[g+(f<<2)>>2]|0,c[g+(h-f<<2)>>2]|0);f=f+1|0}f=c[n>>2]|0}j=j+1|0}if((Wf(d)|0)==(d|0)?(Yh(0)|0)>0:0)bi(d,0);BA(o);l=r;return}function $h(d){d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;n=d+16|0;d=c[n>>2]|0;f=b[d+236>>1]|0;e=b[d+238>>1]|0;l=e<<16>>16;m=d+196|0;g=f;while(1){if((g|0)>(l|0))break;k=c[m>>2]|0;j=c[k+(g<<6)>>2]|0;k=k+(g<<6)+4|0;i=0;while(1){if((i|0)>=(j|0))break;o=c[(c[(c[k>>2]|0)+(i<<2)>>2]|0)+16>>2]|0;c[o+236>>2]=~~+h[o+16>>3];i=i+1|0}g=g+1|0}while(1){if((f|0)>(e<<16>>16|0))break;a[(c[(c[(c[41927]|0)+16>>2]|0)+196>>2]|0)+(f<<6)+49>>0]=0;o=c[d+196>>2]|0;sL(c[o+(f<<6)+4>>2]|0,c[o+(f<<6)>>2]|0,4,14);o=c[n>>2]|0;f=f+1|0;e=b[o+238>>1]|0;d=o}return}function ai(a,d){a=a|0;d=d|0;var e=0,f=0,g=0;g=((d|0)%4|0|0)<2&1;e=c[a+16>>2]|0;if(!(d&1)){d=b[e+236>>1]|0;f=1;e=b[e+238>>1]|0;d=(d<<16>>16<=(b[(c[(c[41927]|0)+16>>2]|0)+236>>1]|0)&1)+(d<<16>>16)|0}else{d=b[e+238>>1]|0;f=-1;e=b[e+236>>1]|0;d=((d<<16>>16>=(b[(c[(c[41927]|0)+16>>2]|0)+238>>1]|0))<<31>>31)+(d<<16>>16)|0}e=f+e|0;while(1){if((d|0)==(e|0))break;ki(a,d,g,(ji(a,d,d-f|0)|0)&255);d=d+f|0}bi(a,g^1);return}function bi(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;k=d+16|0;g=c[k>>2]|0;i=b[g+236>>1]|0;j=b[g+238>>1]|0;h=g+196|0;f=i<<16>>16;while(1){if((f|0)>(j|0)){h=i;break}a[(c[h>>2]|0)+(f<<6)+48>>0]=1;f=f+1|0}while(1){f=0;h=h<<16>>16;while(1){if((h|0)>(b[g+238>>1]|0))break;if(a[(c[g+196>>2]|0)+(h<<6)+48>>0]|0){f=(ii(d,h,e)|0)+f|0;g=c[k>>2]|0}h=h+1|0}if((f|0)<=0)break;h=b[g+236>>1]|0}return}function ci(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;o=d+16|0;e=c[o>>2]|0;n=b[e+238>>1]|0;a:while(1){if((n|0)<(b[e+236>>1]|0)){e=16;break}f=c[e+196>>2]|0;a[f+(n<<6)+48>>0]=0;p=(n|0)>0;q=n+1|0;g=0;b:while(1){l=(c[f+(n<<6)>>2]|0)+-1|0;m=f+(n<<6)+4|0;k=f+(q<<6)|0;while(1){if((g|0)>=(l|0))break b;j=c[m>>2]|0;i=c[j+(g<<2)>>2]|0;g=g+1|0;j=c[j+(g<<2)>>2]|0;if((c[(c[i+16>>2]|0)+236>>2]|0)>=(c[(c[j+16>>2]|0)+236>>2]|0)){e=7;break a}if(di(d,i,j)|0)continue;if(p){f=ei(i,j)|0;h=ei(j,i)|0}else{f=0;h=0}if((c[k>>2]|0)>0){f=(fi(i,j)|0)+f|0;h=(fi(j,i)|0)+h|0}if((h|0)<=(f|0))break}gi(d,n,i,j);e=c[o>>2]|0;f=c[e+196>>2]|0}n=n+-1|0}if((e|0)==7)ma(79110,78628,721,79136);else if((e|0)==16)return}function di(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;j=c[d+16>>2]|0;i=c[j+212>>2]|0;f=c[e+16>>2]|0;g=c[f+212>>2]|0;h=(i|0)!=(g|0);do if(!(a[173897]|0))if((g|0)==0|((i|0)==0|h^1))k=9;else{if((a[j+159>>0]|0)==7?(a[j+156>>0]|0)==1:0){b=0;break}if((a[f+159>>0]|0)==7?(a[f+156>>0]|0)==1:0){b=0;break}b=1}else if(h)b=1;else k=9;while(0);if((k|0)==9){f=c[b+16>>2]|0;b=c[(c[f+196>>2]|0)+(c[j+232>>2]<<6)+56>>2]|0;if(!b)b=0;else{j=(c[f+116>>2]&1|0)==0;k=O(c[b+4>>2]|0,c[(c[(j?d:e)+16>>2]|0)+284>>2]|0)|0;b=a[(c[b+8>>2]|0)+((c[(c[(j?e:d)+16>>2]|0)+284>>2]|0)+k)>>0]|0}}return b|0}function ei(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0;l=a+16|0;j=c[(c[d+16>>2]|0)+172>>2]|0;d=0;while(1){a=c[j>>2]|0;if(!a)break;i=c[a+16>>2]|0;k=b[i+154>>1]|0;g=c[(c[(c[((c[a>>2]&3|0)==3?a:a+48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0;i=i+16|0;f=c[(c[l>>2]|0)+172>>2]|0;a=d;while(1){d=c[f>>2]|0;if(!d)break;e=(c[(c[(c[((c[d>>2]&3|0)==3?d:d+48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0)-g|0;if((e|0)<=0){if((e|0)==0?(m=c[d+16>>2]|0,+h[m+16>>3]>+h[i>>3]):0){d=m;n=9}}else{d=c[d+16>>2]|0;n=9}if((n|0)==9){n=0;a=(O(b[d+154>>1]|0,k)|0)+a|0}f=f+4|0}j=j+4|0;d=a}return d|0}function fi(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0;l=a+16|0;j=c[(c[d+16>>2]|0)+180>>2]|0;d=0;while(1){a=c[j>>2]|0;if(!a)break;i=c[a+16>>2]|0;k=b[i+154>>1]|0;g=c[(c[(c[((c[a>>2]&3|0)==2?a:a+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0;i=i+56|0;f=c[(c[l>>2]|0)+180>>2]|0;a=d;while(1){d=c[f>>2]|0;if(!d)break;e=(c[(c[(c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0)-g|0;if((e|0)<=0){if((e|0)==0?(m=c[d+16>>2]|0,+h[m+56>>3]>+h[i>>3]):0){d=m;n=9}}else{d=c[d+16>>2]|0;n=9}if((n|0)==9){n=0;a=(O(b[d+154>>1]|0,k)|0)+a|0}f=f+4|0}j=j+4|0;d=a}return d|0}function gi(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;i=a[(c[e+16>>2]|0)+156>>0]|0;if(i<<24>>24!=(a[(c[f+16>>2]|0)+156>>0]|0)){j=b+16|0;l=c[(c[j>>2]|0)+196>>2]|0;k=c[l+(d<<6)>>2]|0;l=l+(d<<6)+4|0;b=0;g=0;h=0;while(1){if((b|0)>=(k|0))break;o=(a[(c[(c[(c[l>>2]|0)+(b<<2)>>2]|0)+16>>2]|0)+156>>0]|0)==0;b=b+1|0;g=g+(o&1)|0;h=h+((o^1)&1)|0}i=i<<24>>24==0;h=(g|0)<(h|0)?(i?e:f):i?f:e;i=0;b=0;while(1){if((b|0)>=(k|0))break;i=(c[(c[l>>2]|0)+(b<<2)>>2]|0)==(h|0)?b:i;b=b+1|0}o=(a[(c[h+16>>2]|0)+156>>0]|0)==0&1;n=0;g=i;while(1){b=g+-1|0;if((g|0)<=0){m=0;b=i;break}if((a[(c[(c[(c[l>>2]|0)+(b<<2)>>2]|0)+16>>2]|0)+156>>0]|0)!=(o|0)){m=0;b=i;break}n=n+1|0;g=b}while(1){b=b+1|0;if((b|0)>=(k|0))break;if((a[(c[(c[(c[l>>2]|0)+(b<<2)>>2]|0)+16>>2]|0)+156>>0]|0)!=(o|0))break;m=m+1|0}hi(e,f);j=c[(c[j>>2]|0)+196>>2]|0;k=c[j+(d<<6)>>2]|0;j=j+(d<<6)+4|0;b=0;while(1){if((b|0)>=(k|0)){h=0;g=i;break}i=(c[(c[j>>2]|0)+(b<<2)>>2]|0)==(h|0)?b:i;b=b+1|0}while(1){b=g+-1|0;if((g|0)<=0){g=0;b=i;break}if((a[(c[(c[(c[j>>2]|0)+(b<<2)>>2]|0)+16>>2]|0)+156>>0]|0)!=(o|0)){g=0;b=i;break}h=h+1|0;g=b}while(1){b=b+1|0;if((b|0)>=(k|0))break;if((a[(c[(c[(c[j>>2]|0)+(b<<2)>>2]|0)+16>>2]|0)+156>>0]|0)!=(o|0))break;g=g+1|0}d=h-g|0;o=n-m|0;if((((d|0)>-1?d:0-d|0)|0)>(((o|0)>-1?o:0-o|0)|0))hi(e,f)}return}function hi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;f=c[a+16>>2]|0;e=c[f+232>>2]|0;f=f+236|0;d=c[f>>2]|0;g=b+16|0;h=c[(c[g>>2]|0)+236>>2]|0;c[f>>2]=h;f=(c[41927]|0)+16|0;c[(c[(c[(c[f>>2]|0)+196>>2]|0)+(e<<6)+4>>2]|0)+(h<<2)>>2]=a;c[(c[g>>2]|0)+236>>2]=d;c[(c[(c[(c[f>>2]|0)+196>>2]|0)+(e<<6)+4>>2]|0)+(d<<2)>>2]=b;return}function ii(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;q=d+16|0;n=c[(c[q>>2]|0)+196>>2]|0;a[n+(e<<6)+48>>0]=0;r=(e|0)>0;s=e+1|0;o=(f|0)!=0;p=e+-1|0;g=0;i=0;f=n;a:while(1){l=(c[f+(e<<6)>>2]|0)+-1|0;m=f+(e<<6)+4|0;h=f+(s<<6)|0;n=g;while(1){if((n|0)>=(l|0)){f=17;break a}k=c[m>>2]|0;j=c[k+(n<<2)>>2]|0;n=n+1|0;k=c[k+(n<<2)>>2]|0;if((c[(c[j+16>>2]|0)+236>>2]|0)>=(c[(c[k+16>>2]|0)+236>>2]|0)){f=5;break a}if(di(d,j,k)|0)continue;if(r){f=ei(j,k)|0;g=ei(k,j)|0}else{f=0;g=0}if((c[h>>2]|0)>0){f=(fi(j,k)|0)+f|0;g=(fi(k,j)|0)+g|0}if((f|0)>(g|0))break;if((f|0)==(g|0)&(o&(f|0)>0)){f=g;break}}hi(j,k);i=f-g+i|0;g=c[(c[(c[41927]|0)+16>>2]|0)+196>>2]|0;a[g+(e<<6)+49>>0]=0;h=c[q>>2]|0;f=c[h+196>>2]|0;a[f+(e<<6)+48>>0]=1;if((b[h+236>>1]|0)<(e|0)){a[g+(p<<6)+49>>0]=0;a[f+(p<<6)+48>>0]=1}if((b[h+238>>1]|0)<=(e|0)){g=n;continue}a[g+(s<<6)+49>>0]=0;a[f+(s<<6)+48>>0]=1;g=n}if((f|0)==5)ma(79110,78628,770,79144);else if((f|0)==17)return i|0;return 0}function ji(a,e,f){a=a|0;e=e|0;f=f|0;var g=0,i=0.0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;p=c[41925]|0;q=a+16|0;a=c[(c[q>>2]|0)+196>>2]|0;r=c[a+(e<<6)+4>>2]|0;n=(f|0)>(e|0);o=p+4|0;m=0;while(1){f=c[a+(e<<6)>>2]|0;if((m|0)>=(f|0)){a=0;j=0;break}l=(c[r+(m<<2)>>2]|0)+16|0;a=c[l>>2]|0;a:do if(n){k=c[a+180>>2]|0;a=0;j=0;while(1){f=c[k+(j<<2)>>2]|0;if(!f)break a;g=c[f+16>>2]|0;if((b[g+154>>1]|0)>0){c[p+(a<<2)>>2]=c[(c[(c[((c[f>>2]&3|0)==2?f:f+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]<<8|d[g+88>>0];a=a+1|0}j=j+1|0}}else{k=c[a+172>>2]|0;j=0;a=0;while(1){f=c[k+(j<<2)>>2]|0;if(!f)break a;g=c[f+16>>2]|0;if((b[g+154>>1]|0)>0){c[p+(a<<2)>>2]=c[(c[(c[((c[f>>2]&3|0)==3?f:f+48|0)+40>>2]|0)+16>>2]|0)+236>>2]<<8|d[g+48>>0];a=a+1|0}j=j+1|0}}while(0);b:do switch(a|0){case 0:{i=-1.0;break}case 1:{i=+(c[p>>2]|0);break}case 2:{i=+(((c[o>>2]|0)+(c[p>>2]|0)|0)/2|0|0);break}default:{sL(p,a,4,12);f=(a|0)/2|0;if(a&1|0){i=+(c[p+(f<<2)>>2]|0);break b}j=c[p+(f<<2)>>2]|0;g=(c[p+(a+-1<<2)>>2]|0)-j|0;a=c[p+(f+-1<<2)>>2]|0;f=a-(c[p>>2]|0)|0;if((f|0)==(g|0)){i=+((a+j|0)/2|0|0);break b}else{i=+(((O(f,j)|0)+(O(a,g)|0)|0)/(f+g|0)|0|0);break b}}}while(0);h[(c[l>>2]|0)+240>>3]=i;m=m+1|0;a=c[(c[q>>2]|0)+196>>2]|0}while(1){if((j|0)>=(f|0))break;g=c[r+(j<<2)>>2]|0;p=c[g+16>>2]|0;if((c[p+184>>2]|0)==0?(c[p+176>>2]|0)==0:0){a=(li(g)|0|a&255)&255;f=c[(c[(c[q>>2]|0)+196>>2]|0)+(e<<6)>>2]|0}j=j+1|0}return a|0}function ki(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,l=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0;o=c[(c[b+16>>2]|0)+196>>2]|0;s=c[o+(d<<6)+4>>2]|0;o=c[o+(d<<6)>>2]|0;q=(e|0)!=0;p=(f|e|0)==0;f=0;e=o;o=s+(o<<2)|0;while(1){n=e+-1|0;if((e|0)>0)e=s;else break;a:while(1){b:while(1){if(e>>>0>=o>>>0)break a;while(1){if(e>>>0>=o>>>0)break a;l=c[e>>2]|0;m=+h[(c[l+16>>2]|0)+240>>3];if(!(m<0.0))break;e=e+4|0}k=0;while(1){g=k<<24>>24==0;while(1){e=e+4|0;if(e>>>0>=o>>>0)break a;if(g){g=11;break}i=c[e>>2]|0;if(!(c[(c[i+16>>2]|0)+212>>2]|0)){g=13;break}}if((g|0)==11){i=c[e>>2]|0;j=i}else if((g|0)==13)j=i;if(di(b,l,j)|0)continue b;g=c[i+16>>2]|0;if(+h[g+240>>3]>=0.0)break;k=(c[g+212>>2]|0)==0?k:1}g=~~m;k=~~+h[(c[i+16>>2]|0)+240>>3];if((g|0)>(k|0)|q&(g|0)==(k|0))break}hi(l,j);f=f+1|0}e=n;o=p?o+-4|0:o}if(f|0?(r=c[(c[(c[41927]|0)+16>>2]|0)+196>>2]|0,a[r+(d<<6)+49>>0]=0,(d|0)>0):0)a[r+(d+-1<<6)+49>>0]=0;return}function li(a){a=a|0;var b=0.0,d=0,e=0,f=0,g=0;g=c[a+16>>2]|0;if((c[g+200>>2]|0)>0){f=c[g+196>>2]|0;a=c[f>>2]|0;a=c[((c[a>>2]&3|0)==3?a:a+48|0)+40>>2]|0;d=1;while(1){e=c[f+(d<<2)>>2]|0;if(!e)break;e=c[((c[e>>2]&3|0)==3?e:e+48|0)+40>>2]|0;a=(c[(c[e+16>>2]|0)+236>>2]|0)>(c[(c[a+16>>2]|0)+236>>2]|0)?e:a;d=d+1|0}b=+h[(c[a+16>>2]|0)+240>>3];if(!(b>=0.0))a=1;else{h[g+240>>3]=b+1.0;a=0}}else if((c[g+192>>2]|0)>0){e=c[g+188>>2]|0;d=c[e>>2]|0;a=1;d=c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0;while(1){f=c[e+(a<<2)>>2]|0;if(!f)break;f=c[((c[f>>2]&3|0)==2?f:f+-48|0)+40>>2]|0;a=a+1|0;d=(c[(c[f+16>>2]|0)+236>>2]|0)<(c[(c[d+16>>2]|0)+236>>2]|0)?f:d}b=+h[(c[d+16>>2]|0)+240>>3];if(b>0.0){h[g+240>>3]=b+-1.0;a=0}else a=1}else a=1;return a|0}function mi(a,b){a=a|0;b=b|0;return (c[(c[(c[a>>2]|0)+16>>2]|0)+236>>2]|0)-(c[(c[(c[b>>2]|0)+16>>2]|0)+236>>2]|0)|0}function ni(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+96|0;o=p+64|0;n=p+48|0;h=p+24|0;f=p;j=d+16|0;k=c[(c[j>>2]|0)+232>>2]|0;m=a+16|0;e=c[(c[m>>2]|0)+196>>2]|0;i=c[e+(k<<6)>>2]|0;do if((c[e+(k<<6)+8>>2]|0)>=1){c[(c[e+(k<<6)+4>>2]|0)+(i<<2)>>2]=d;c[(c[j>>2]|0)+236>>2]=i;a=c[m>>2]|0;f=c[a+196>>2]|0;e=f+(k<<6)|0;g=c[e>>2]|0;c[e>>2]=g+1;if((g|0)>=(c[f+(k<<6)+8>>2]|0))ma(79224,78628,1346,79260);g=c[(c[(c[(c[41927]|0)+16>>2]|0)+196>>2]|0)+(k<<6)+8>>2]|0;if((i|0)>(g|0)){m=En(d)|0;n=c[(c[j>>2]|0)+236>>2]|0;o=c[(c[(c[(c[41927]|0)+16>>2]|0)+196>>2]|0)+(k<<6)+8>>2]|0;c[h>>2]=1359;c[h+4>>2]=m;c[h+8>>2]=n;c[h+12>>2]=k;c[h+16>>2]=o;$l(1,79276,h)|0;break}e=b[a+236>>1]|0;a=b[a+238>>1]|0;if((k|0)<(e|0)|(k|0)>(a<<16>>16|0)){c[n>>2]=1364;c[n+4>>2]=k;c[n+8>>2]=e;c[n+12>>2]=a<<16>>16;$l(1,79349,n)|0;break}if(((c[f+(k<<6)+4>>2]|0)+(i<<2)|0)>>>0>((c[f+(k<<6)+12>>2]|0)+(g<<2)|0)>>>0){i=En(d)|0;n=c[(c[m>>2]|0)+196>>2]|0;m=(c[n+(k<<6)+4>>2]|0)+(c[(c[j>>2]|0)+236>>2]<<2)|0;n=(c[n+(k<<6)+12>>2]|0)+(c[(c[(c[(c[41927]|0)+16>>2]|0)+196>>2]|0)+(k<<6)+8>>2]<<2)|0;c[o>>2]=1370;c[o+4>>2]=k;c[o+8>>2]=i;c[o+12>>2]=m;c[o+16>>2]=k;c[o+20>>2]=k;c[o+24>>2]=n;$l(1,79410,o)|0}}else{n=En(a)|0;o=En(d)|0;c[f>>2]=1339;c[f+4>>2]=n;c[f+8>>2]=o;c[f+12>>2]=k;c[f+16>>2]=i;$l(1,79169,f)|0}while(0);l=p;return}function oi(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=d+16|0;a:do if(!e){g=0;while(1){d=c[h>>2]|0;if((g|0)>=(c[d+184>>2]|0))break a;d=c[(c[d+180>>2]|0)+(g<<2)>>2]|0;e=d+-48|0;f=(c[(c[((c[d>>2]&3|0)==2?d:e)+40>>2]|0)+16>>2]|0)+157|0;if(!(a[f>>0]|0)){a[f>>0]=1;CA(b,c[((c[d>>2]&3|0)==2?d:e)+40>>2]|0)}g=g+1|0}}else{g=0;while(1){d=c[h>>2]|0;if((g|0)>=(c[d+176>>2]|0))break a;d=c[(c[d+172>>2]|0)+(g<<2)>>2]|0;e=d+48|0;f=(c[(c[((c[d>>2]&3|0)==3?d:e)+40>>2]|0)+16>>2]|0)+157|0;if(!(a[f>>0]|0)){a[f>>0]=1;CA(b,c[((c[d>>2]&3|0)==3?d:e)+40>>2]|0)}g=g+1|0}}while(0);return}function pi(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=l;l=l+16|0;u=v;g=d+16|0;f=c[(c[g>>2]|0)+196>>2]|0;s=c[f+(e<<6)+4>>2]|0;t=e+1|0;d=c[(c[(c[(c[41927]|0)+16>>2]|0)+196>>2]|0)+(t<<6)>>2]|0;if((c[41931]|0)>(d|0))q=c[41932]|0;else{d=d+1|0;c[41931]=d;f=c[41932]|0;if(!f)d=xw(d<<2)|0;else d=zw(f,d<<2)|0;c[41932]=d;f=c[(c[g>>2]|0)+196>>2]|0;q=d}r=f+(t<<6)|0;d=0;while(1){if((d|0)>=(c[r>>2]|0))break;c[q+(d<<2)>>2]=0;d=d+1|0}p=f+(e<<6)|0;o=0;h=0;d=0;j=q;while(1){k=c[p>>2]|0;if((o|0)>=(k|0))break;n=c[(c[(c[s+(o<<2)>>2]|0)+16>>2]|0)+180>>2]|0;a:do if((h|0)>0){m=0;while(1){g=c[n+(m<<2)>>2]|0;if(!g)break a;k=g+16|0;i=c[(c[(c[((c[g>>2]&3|0)==2?g:g+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0;while(1){g=i+1|0;if((i|0)>=(h|0))break;i=g;d=(O(c[j+(g<<2)>>2]|0,b[(c[k>>2]|0)+154>>1]|0)|0)+d|0}m=m+1|0}}while(0);i=0;while(1){g=c[n+(i<<2)>>2]|0;if(!g)break;j=c[(c[(c[((c[g>>2]&3|0)==2?g:g+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0;m=q+(j<<2)|0;c[m>>2]=(c[m>>2]|0)+(b[(c[g+16>>2]|0)+154>>1]|0);h=(j|0)>(h|0)?j:h;i=i+1|0;j=q}o=o+1|0}i=f+(e<<6)+4|0;h=0;while(1){if((h|0)>=(k|0))break;g=c[(c[(c[i>>2]|0)+(h<<2)>>2]|0)+16>>2]|0;if(a[g+145>>0]|0){e=g+180|0;c[u>>2]=c[e>>2];c[u+4>>2]=c[e+4>>2];d=(qi(u,1)|0)+d|0}h=h+1|0}i=c[r>>2]|0;h=f+(t<<6)+4|0;g=0;while(1){if((g|0)>=(i|0))break;f=c[(c[(c[h>>2]|0)+(g<<2)>>2]|0)+16>>2]|0;if(a[f+145>>0]|0){t=f+172|0;c[u>>2]=c[t>>2];c[u+4>>2]=c[t+4>>2];d=(qi(u,-1)|0)+d|0}g=g+1|0}l=v;return d|0}function qi(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0;n=(d|0)<1;l=c[a>>2]|0;d=0;a=0;a:while(1){m=c[l+(d<<2)>>2]|0;if(!m)break;d=d+1|0;if(n){j=m+48|0;k=m+16|0;i=d;while(1){e=c[l+(i<<2)>>2]|0;if(!e)continue a;f=c[e+16>>2]|0;g=c[k>>2]|0;if((+h[f+56>>3]-+h[g+56>>3])*+((c[(c[(c[((c[e>>2]&3|0)==3?e:e+48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0)-(c[(c[(c[((c[m>>2]&3|0)==3?m:j)+40>>2]|0)+16>>2]|0)+236>>2]|0)|0)<0.0)a=(O(b[f+154>>1]|0,b[g+154>>1]|0)|0)+a|0;i=i+1|0}}else{j=m+-48|0;k=m+16|0;i=d;while(1){e=c[l+(i<<2)>>2]|0;if(!e)continue a;f=c[e+16>>2]|0;g=c[k>>2]|0;if((+h[f+16>>3]-+h[g+16>>3])*+((c[(c[(c[((c[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0)-(c[(c[(c[((c[m>>2]&3|0)==2?m:j)+40>>2]|0)+16>>2]|0)+236>>2]|0)|0)<0.0)a=(O(b[f+154>>1]|0,b[g+154>>1]|0)|0)+a|0;i=i+1|0}}}return a|0}function ri(a){a=a|0;var b=0.0,d=0.0;c[41930]=8;c[42181]=24;h[20878]=.995;a=Jm(a,79532)|0;if(a|0?(b=+tM(a),b>0.0):0){d=b*+(c[41930]|0);c[41930]=~~(d>1.0?d:1.0);b=b*+(c[42181]|0);c[42181]=~~(b>1.0?b:1.0)}return}function si(a){a=a|0;var d=0,e=0;e=(b[(c[a+16>>2]|0)+238>>1]|0)+2|0;d=ww(e<<2)|0;ui(a,d,e,0)|0;$I(d);return} +function Vq(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;g=(b|0)==2;d=(c[42039]|0)+24|0;while(1){d=c[d>>2]|0;if(!d)break;e=d+4|0;f=c[e>>2]|0;if(!((g?(a[f>>0]|0)==(a[83089]|0):0)?!(yJ(f,83089)|0):0)){h=zm(c[c[42039]>>2]|0,b,f,0)|0;c[e>>2]=h;if(!h)c[e>>2]=zm(c[c[42039]>>2]|0,b,f,174185)|0;c[d>>2]=266;cp(c[42038]|0,f)|0}d=d+12|0}return}function Wq(a){a=a|0;Xq(c[a>>2]|0);c[a+4>>2]=0;c[a>>2]=0;return}function Xq(a){a=a|0;var b=0;while(1){if(!a)break;b=c[a+12>>2]|0;switch(c[a>>2]|0){case 265:{Xq(c[a+4>>2]|0);break}case 266:case 267:{cp(c[42038]|0,c[a+8>>2]|0)|0;break}default:{}}_n(c[42038]|0,a);a=b}return}function Yq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=l;l=l+1040|0;f=h;g=h+8|0;d=sJ(a)|0;d=d+2+(sJ(b)|0)|0;if(d>>>0<1025)e=g;else e=_I(d)|0;c[f>>2]=a;c[f+4>>2]=b;qL(e,83126,f)|0;d=ap(c[42038]|0,e)|0;cp(c[42038]|0,a)|0;cp(c[42038]|0,b)|0;if((e|0)!=(g|0))$I(e);l=h;return d|0}function Zq(a,b){a=a|0;b=b|0;return Tq(259,a,b)|0}function _q(a){a=a|0;return Tq(265,a,0)|0}function $q(a){a=a|0;return Tq(262,a,0)|0}function ar(a){a=a|0;var b=0,d=0;b=(c[42039]|0)+24|0;while(1){b=c[b>>2]|0;if(!b)break;if((c[b>>2]|0)==266?(d=c[b+4>>2]|0,d|0):0)Dm(a,d,c[b+8>>2]|0)|0;b=b+12|0}return}function br(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=d+4|0;a:do if((c[d>>2]|0)==262){d=c[f>>2]|0;f=eo(d)|0;while(1){if(!f)break a;cr(a,b,jo(c[c[42039]>>2]|0,f,0)|0,0,e);f=fo(d,f)|0}}else while(1){f=c[f>>2]|0;if(!f)break a;d=jo(c[c[42039]>>2]|0,c[f+4>>2]|0,0)|0;cr(a,b,d,c[f+8>>2]|0,e);f=f+12|0}while(0);return}function cr(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;d=bn(c[c[42039]>>2]|0,a,d,f,1)|0;if(d|0){g=c[d>>2]&3;f=c[((g|0)==2?d:d+-48|0)+40>>2]|0;a=(f|0)==(a|0)?(c[((g|0)==3?d:d+48|0)+40>>2]|0)!=(f|0):0;dr(d,96242,a?e:b);dr(d,96251,a?b:e);ar(d)}return}function dr(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;if(d|0){e=zm(c[c[42039]>>2]|0,2,b,0)|0;if(!e)e=zm(c[c[42039]>>2]|0,2,b,174185)|0;Dm(a,e,d)|0}return}function er(a,b,d){a=a|0;b=b|0;d=d|0;c[42007]=b;c[42038]=a;c[41987]=0;a=d|0?d:17656;c[42041]=a;hp(a,b);Cq()|0;a=c[41987]|0;if(!a){Gp();a=c[41987]|0}return a|0}function fr(a,b){a=a|0;b=b|0;return er(0,a,b)|0}function gr(a,b){a=a|0;b=b|0;b=Kr(a,1,b)|0;if(!b)b=999;else{b=c[b+16>>2]|0;c[a+184>>2]=c[b+4>>2];c[a+172>>2]=c[b+12>>2];c[a+176>>2]=c[b>>2];c[a+180>>2]=c[b+16>>2];b=300}return b|0}function hr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;f=i;Oo(b,122277,280,1)|0;g=b+16|0;c[(c[g>>2]|0)+144>>2]=a;if((to(b)|0)!=(b|0))c[(c[(to(b)|0)+16>>2]|0)+144>>2]=a;e=Jm(b,83342)|0;d=a+172|0;if((e|0)!=0?(c[d>>2]=0,(gr(a,e)|0)==999):0){d=Lr(a,1,e)|0;c[f>>2]=e;c[f+4>>2]=d;$l(1,83869,f)|0;d=-1}else{e=c[d>>2]|0;if(!e)d=-1;else{Gv(1);ew(b,c[c[a+180>>2]>>2]&1);d=c[(c[g>>2]|0)+8>>2]|0;c[(c[(to(b)|0)+16>>2]|0)+8>>2]=d;Fz();d=c[e>>2]|0;if(d|0?(gb[d&127](b),h=c[e+4>>2]|0,h|0):0)c[(c[g>>2]|0)+148>>2]=h;Gv(0);d=0}}l=i;return d|0}function ir(a,b){a=a|0;b=b|0;var d=0,e=0;if(Oo(b,122277,0,1)|0){d=b+16|0;a=c[d>>2]|0;e=c[a+148>>2]|0;if(e){gb[e&127](b);a=c[d>>2]|0;c[a+148>>2]=0}if(c[a+8>>2]|0)jw(b)}return 0}function jr(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+16|0;j=k+8|0;i=k;d=c[b+76>>2]|0;f=c[b>>2]|0;if((d|0)!=0?(e=c[d>>2]|0,(e|0)!=0):0){gb[e&127](b);g=12}else g=4;do if((g|0)==4)if((c[b+40>>2]|0)==0?(h=b+36|0,(c[h>>2]|0)==0):0){if(a[f+13>>0]|0)kr(b);d=b+32|0;e=c[d>>2]|0;if(!e){c[h>>2]=c[13885];g=12;break}f=bM(e,91556)|0;c[h>>2]=f;if(!f){j=c[(c[b+12>>2]|0)+16>>2]|0;h=c[d>>2]|0;d=zJ(c[(kJ()|0)>>2]|0)|0;c[i>>2]=h;c[i+4>>2]=d;hb[j&31](83132,i);d=1}else g=12}else g=12;while(0);if((g|0)==12)if(!(c[b+152>>2]&1024))d=0;else{hb[c[(c[b+12>>2]|0)+16>>2]&31](83170,j);d=1}l=k;return d|0}function kr(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=l;l=l+112|0;e=h;g=h+4|0;d=c[b+24>>2]|0;if(!d)a[g>>0]=0;else{c[e>>2]=d+1;qL(g,83188,e)|0}e=c[b+20>>2]|0;e=e|0?e:83192;d=sJ(e)|0;i=sJ(g)|0;f=b+52|0;i=d+1+i+(sJ(c[f>>2]|0)|0)|0;d=i+11|0;if((c[42042]|0)>>>0<(i+1|0)>>>0){c[42042]=d;d=bJ(c[42043]|0,d)|0;c[42043]=d}else d=c[42043]|0;yK(d,e)|0;JL(c[42043]|0,g)|0;d=c[42043]|0;d=d+(sJ(d)|0)|0;a[d>>0]=46;a[d+1>>0]=0;d=HL(c[f>>2]|0)|0;f=c[42043]|0;while(1){e=IL(d,58)|0;if(!e)break;JL(f,e+1|0)|0;i=c[42043]|0;g=i+(sJ(i)|0)|0;a[g>>0]=46;a[g+1>>0]=0;a[e>>0]=0;f=i}JL(f,d)|0;$I(d);c[b+32>>2]=c[42043];l=h;return}function lr(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+16|0;g=h+8|0;f=h;if((b|0)!=0&(d|0)!=0){if(c[a+152>>2]&1024|0){hb[c[(c[a+12>>2]|0)+16>>2]&31](83170,f);Ma(1)}if((mr(a,b,d)|0)==(d|0))e=d;else{f=c[(c[a+12>>2]|0)+16>>2]|0;c[g>>2]=d;hb[f&31](83202,g);Ma(1)}}else e=0;l=h;return e|0}function mr(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+16|0;n=o;f=c[(c[b>>2]|0)+104>>2]|0;do if(!f){j=b+40|0;h=c[j>>2]|0;if(!h){e=YL(d,1,e,c[b+36>>2]|0)|0;break}f=b+44|0;i=b+48|0;g=c[i>>2]|0;do if(((c[f>>2]|0)+-1-g|0)>>>0>>0){g=e+4096+g&-4096;c[f>>2]=g;f=bJ(h,g)|0;c[j>>2]=f;if(!f){hb[c[(c[b+12>>2]|0)+16>>2]&31](83227,n);Ma(1)}else{k=f;m=c[i>>2]|0;break}}else{k=h;m=g}while(0);UN(k+m|0,d|0,e|0)|0;n=(c[i>>2]|0)+e|0;c[i>>2]=n;a[(c[j>>2]|0)+n>>0]=0}else e=bb[f&31](b,d,e)|0;while(0);l=o;return e|0}function nr(a,b){a=a|0;b=b|0;var c=0;c=sJ(b)|0;b=(lr(a,b,c)|0)==(c|0);return (b?1:-1)|0}function or(b,c){b=b|0;c=c|0;var d=0,e=0;d=l;l=l+16|0;e=d;a[e>>0]=c;b=(lr(b,e,1)|0)==1;l=d;return (b?c:-1)|0}function pr(b){b=b|0;var d=0;d=c[b+36>>2]|0;if(((d|0)!=0?(a[b+144>>0]|0)==0:0)?(c[(c[b>>2]|0)+104>>2]|0)==0:0)b=QL(d)|0;else b=0;return b|0}function qr(a){a=a|0;var b=0,d=0;b=c[a+76>>2]|0;if(b|0?(d=c[b+4>>2]|0,d|0):0)gb[d&127](a);pr(a)|0;return}function rr(a){a=a|0;var b=0,d=0,e=0;e=l;l=l+16|0;d=c[a+76>>2]|0;if(c[a+152>>2]&1024|0){hb[c[(c[a+12>>2]|0)+16>>2]&31](83254,e);Ma(1)}if((d|0)!=0?(b=c[d+8>>2]|0,(b|0)!=0):0)gb[b&127](a);else{pr(a)|0;sr(a)}l=e;return}function sr(b){b=b|0;var d=0,e=0,f=0;d=b+32|0;if((c[d>>2]|0?(e=b+36|0,f=c[e>>2]|0,(f|0)!=(c[13885]|0)):0)?(a[b+144>>0]|0)==0:0){if(f|0){ML(f)|0;c[e>>2]=0}c[d>>2]=0}return}function tr(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+1056|0;f=i;h=i+24|0;g=i+8|0;c[g>>2]=d;e=MK(h,1024,b,g)|0;if((e|0)>=0){if((e|0)>1023){e=xw(e+1|0)|0;c[g>>2]=d;f=e;e=rL(e,b,g)|0}else f=h;lr(a,f,e)|0;if((f|0)!=(h|0))$I(f)}else{c[f>>2]=zJ(c[(kJ()|0)>>2]|0)|0;$l(1,83271,f)|0}l=i;return}function ur(a,b){a=a|0;b=+b;var d=0,e=0,f=0;d=l;l=l+16|0;e=d;f=vr(e,b)|0;lr(a,f,c[e>>2]|0)|0;l=d;return}function vr(b,d){b=b|0;d=+d;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;if(!(d<-1.0e15))if(!(d>1.0e15)){d=d*1.0e4;f=~~((d<0.0?-.5:.5)+d);if(!f){f=123205;e=1}else{l=(f|0)<0;k=4;i=0;e=173952;f=l?0-f|0:f;while(1){if(!((f|0)!=0|(k|0)>0))break;g=(f|0)%10|0;j=(f|0)/10|0;h=e+-1|0;if((g|0)==0&i<<24>>24==0)f=0;else{a[h>>0]=g|48;f=1;e=h}if((k|0)==1)if(!(f<<24>>24))f=1;else{e=e+-1|0;a[e>>0]=46;f=1}k=k+-1|0;i=f;f=j}if(l){e=e+-1|0;a[e>>0]=45}f=e;e=173952-e|0}}else{f=83286;e=18}else{f=83285;e=19}c[b>>2]=e;return f|0}function wr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d;f=vr(e,+h[b>>3])|0;lr(a,f,c[e>>2]|0)|0;lr(a,87638,1)|0;b=vr(e,+h[b+8>>3])|0;lr(a,b,c[e>>2]|0)|0;l=d;return}function xr(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=l;l=l+16|0;f=g;e=0;while(1){h=b+(e<<4)|0;c[f>>2]=c[h>>2];c[f+4>>2]=c[h+4>>2];c[f+8>>2]=c[h+8>>2];c[f+12>>2]=c[h+12>>2];wr(a,f);e=e+1|0;if((e|0)>=(d|0))break;lr(a,87638,1)|0}l=g;return}function yr(a,b){a=a|0;b=b|0;var d=0;d=ww(392)|0;if(d|0){c[d>>2]=19212;c[d+16>>2]=22;c[d+32>>2]=a;c[d+36>>2]=b}return d|0}function zr(a){a=a|0;var b=0,d=0,e=0,f=0;b=ww(392)|0;d=b;e=a;f=d+40|0;do{c[d>>2]=c[e>>2];d=d+4|0;e=e+4|0}while((d|0)<(f|0));f=b+60|0;e=a+60|0;c[f>>2]=c[e>>2];c[f+4>>2]=c[e+4>>2];c[f+8>>2]=c[e+8>>2];c[f+12>>2]=c[e+12>>2];c[f+16>>2]=c[e+16>>2];f=b+80|0;e=a+80|0;c[f>>2]=c[e>>2];c[f+4>>2]=c[e+4>>2];c[f+8>>2]=c[e+8>>2];c[f+12>>2]=c[e+12>>2];c[f+16>>2]=c[e+16>>2];return b|0}function Ar(a){a=a|0;Hr(a);$I(a);return}function Br(a,b){a=a|0;b=b|0;var d=0,e=0;e=a+160|0;d=c[e>>2]|0;if(d){e=c[42044]|0;if(e){d=c[e+4>>2]|0;if(!d){d=ww(632)|0;c[(c[42044]|0)+4>>2]=d}}}else{d=ww(632)|0;c[e>>2]=d;c[a+164>>2]=d}c[42044]=d;c[d+32>>2]=b;c[d>>2]=a;return}function Cr(a,b){a=a|0;b=b|0;var d=0,e=0;e=a+160|0;d=c[e>>2]|0;if(d){e=c[42045]|0;if(e){d=c[e+4>>2]|0;if(!d){d=ww(632)|0;c[(c[42045]|0)+4>>2]=d}}}else{d=ww(632)|0;c[e>>2]=d;c[a+164>>2]=d}c[42045]=d;c[d+52>>2]=b;c[d>>2]=a;return (Kr(a,3,b)|0)!=0|0}function Dr(a){a=a|0;var b=0;b=c[a+160>>2]|0;c[a+164>>2]=b;return b|0}function Er(a){a=a|0;var b=0,d=0,e=0;a=a+164|0;b=c[a>>2]|0;d=c[b+4>>2]|0;if(d|0?(e=d+52|0,(c[e>>2]|0)==0):0)c[e>>2]=c[b+52>>2];c[a>>2]=d;return d|0}function Fr(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=a+8|0;f=b+10|0;if((c[e>>2]|0)>(b|0))a=c[a>>2]|0;else{c[e>>2]=f;f=zw(c[a>>2]|0,f<<2)|0;c[a>>2]=f;a=f}c[a+(b<<2)>>2]=d;return}function Gr(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0)$I(b);c[a>>2]=0;c[a+8>>2]=0;c[a+4>>2]=0;return}function Hr(a){a=a|0;var b=0,d=0,e=0;d=a+160|0;b=c[d>>2]|0;while(1){if(!b)break;e=c[b+4>>2]|0;Gr(b+604|0);Gr(b+592|0);$I(c[b+584>>2]|0);$I(c[b+588>>2]|0);$I(b);b=e}c[42045]=0;c[42044]=0;c[a+192>>2]=0;c[a+164>>2]=0;c[d>>2]=0;c[a+28>>2]=0;return}function Ir(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0;n=l;l=l+128|0;k=n+64|0;m=n;nL(k,e,63)|0;i=XJ(k,58)|0;if(i|0)a[i>>0]=0;b=b+60+(d<<2)|0;while(1){d=c[b>>2]|0;if(!d){d=b;b=0;break}nL(m,c[d+4>>2]|0,63)|0;d=XJ(m,58)|0;if(d|0)a[d>>0]=0;if((yJ(k,m)|0)<1){j=9;break}b=c[b>>2]|0}while(1){if((j|0)==9){d=b;b=c[b>>2]|0}if(!b)break;nL(m,c[b+4>>2]|0,63)|0;b=XJ(m,58)|0;if(b|0)a[b>>0]=0;if(yJ(k,m)|0)break;b=c[d>>2]|0;if((c[b+8>>2]|0)<=(f|0))break;j=9}m=xw(20)|0;c[m>>2]=c[d>>2];c[d>>2]=m;c[m+4>>2]=e;c[m+8>>2]=f;c[m+12>>2]=g;c[m+16>>2]=h;l=n;return 1}function Jr(a,b){a=a|0;b=b|0;b=l;l=l+16|0;$l(1,83366,b)|0;l=b;return 0}function Kr(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+144|0;r=s;o=s+80|0;p=s+16|0;n=(d+-3|0)>>>0<2?0:d;nL(o,e,63)|0;e=XJ(o,58)|0;if(e){f=e+1|0;a[e>>0]=0;e=XJ(f,58)|0;if(!e)m=0;else{a[e>>0]=0;m=e+1|0}}else{m=0;f=0}i=(f|0)!=0;j=(m|0)==0;k=(n|0)==(d|0);h=b+60+(d<<2)|0;a:while(1){e=c[h>>2]|0;if(!e){e=0;break}nL(p,c[e+4>>2]|0,63)|0;e=XJ(p,58)|0;if(!e)e=0;else{a[e>>0]=0;e=e+1|0}do if(!(yJ(p,o)|0)){g=(e|0)!=0;if(i&g?yJ(e,f)|0:0)break;if(!j?yJ(m,c[(c[(c[h>>2]|0)+12>>2]|0)+8>>2]|0)|0:0)break;if(k|g^1){q=16;break a}if(Kr(b,n,e)|0){q=16;break a}}while(0);h=c[h>>2]|0}do if((q|0)==16){e=c[h>>2]|0;if(e){f=e+16|0;if((c[f>>2]|0)==0?(Jr(0,0)|0,(c[f>>2]|0)==0):0){e=0;break}if((c[b+8>>2]|0)>0){q=c[13918]|0;o=c[e+4>>2]|0;p=c[(c[e+12>>2]|0)+8>>2]|0;c[r>>2]=c[19224+(d<<2)>>2];c[r+4>>2]=o;c[r+8>>2]=p;AL(q,83397,r)|0}}else e=0}while(0);c[b+80+(d<<2)>>2]=e;l=s;return e|0}function Lr(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;do if(!e)e=0;else{if(c[4811]|0){dm(168184,0,0);c[4811]=0}h=HL(e)|0;e=XJ(h,58)|0;if(e){a[e>>0]=0;f=b+60+(d<<2)|0;e=1;g=f;while(1){b=c[g>>2]|0;if(!b)break;d=HL(c[b+4>>2]|0)|0;b=XJ(d,58)|0;if(b|0)a[b>>0]=0;if(!((a[h>>0]|0)!=0?(jK(h,d)|0)!=0:0)){e=c[42047]|0;if(e>>>0>=(c[42048]|0)>>>0){em(168184,1)|0;e=c[42047]|0}c[42047]=e+1;a[e>>0]=32;gm(168184,c[(c[g>>2]|0)+4>>2]|0)|0;e=c[42047]|0;if(e>>>0>=(c[42048]|0)>>>0){em(168184,1)|0;e=c[42047]|0}c[42047]=e+1;a[e>>0]=58;gm(168184,c[(c[(c[g>>2]|0)+12>>2]|0)+8>>2]|0)|0;e=0}$I(d);g=c[g>>2]|0}$I(h);if(e<<24>>24){g=0;i=19}}else{$I(h);g=0;f=b+60+(d<<2)|0;e=1;i=19}if((i|0)==19){while(1){b=c[f>>2]|0;if(!b)break;d=HL(c[b+4>>2]|0)|0;b=XJ(d,58)|0;if(b|0)a[b>>0]=0;if(!((g|0)!=0?(jK(g,d)|0)==0:0)){e=c[42047]|0;if(e>>>0>=(c[42048]|0)>>>0){em(168184,1)|0;e=c[42047]|0}c[42047]=e+1;a[e>>0]=32;gm(168184,d)|0;e=0}g=d;f=c[f>>2]|0;i=19}if(e<<24>>24){e=174185;break}}e=c[42047]|0;if(e>>>0>=(c[42048]|0)>>>0){em(168184,1)|0;e=c[42047]|0}a[e>>0]=0;e=c[42046]|0;c[42047]=e}while(0);return e|0}function Mr(b){b=b|0;var d=0;if(!b)ma(96030,83414,573,83428);if(!(a[b>>0]|0))ma(96035,83414,574,83428);d=c[42050]|0;if(!d)b=0;else b=bb[c[d>>2]&31](d,b,512)|0;return b|0}function Nr(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+16|0;j=k+8|0;i=k;if(!b)ma(96091,83414,589,83445);g=b+8|0;e=c[g>>2]|0;if(!e)ma(96094,83414,590,83445);if(!(a[e>>0]|0))ma(96103,83414,591,83445);h=b+20|0;f=c[h>>2]|0;do if(!f){d=SA(e)|0;if(!d){c[i>>2]=c[g>>2];$l(0,83469,i)|0;d=0;break}i=bM(d,123632)|0;c[h>>2]=i;if(!i){c[j>>2]=zJ(c[(kJ()|0)>>2]|0)|0;c[j+4>>2]=d;$l(0,83494,j)|0;d=0;break}d=c[42051]|0;if((d|0)>49){a[b+17>>0]=1;d=1;break}else{c[42051]=d+1;d=1;break}}else{pM(f,0,0)|0;if(!(c[h>>2]|0))ma(83515,83414,614,83445);else d=1}while(0);l=k;return d|0}function Or(b){b=b|0;var d=0,e=0;if(a[b+17>>0]|0?(d=b+20|0,e=c[d>>2]|0,e|0):0){ML(e)|0;c[d>>2]=0}return}function Pr(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0.0,g=0.0;if(!b){e=-1;d=-1}else{e=c[b+48>>2]|0;f=+(e|0);if(!e){g=+h[d>>3];f=+h[d+8>>3]}else{h[d+8>>3]=f;h[d>>3]=f;g=f}e=~~(+((c[b+40>>2]|0)*72|0)/g);d=~~(+((c[b+44>>2]|0)*72|0)/f)}c[a>>2]=e;c[a+4>>2]=d;return}function Qr(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0,n=0.0;m=l;l=l+48|0;f=m+16|0;j=m;k=m+32|0;if((e|0)!=0?(a[e>>0]|0)!=0:0){if((0==0?(g=c[42178]|0,(c[42052]|0)!=(g|0)):0)?(c[42052]=g,i=c[42050]|0,i|0):0){Ll(i)|0;c[42050]=0}n=+h[(c[(c[d+16>>2]|0)+8>>2]|0)+24>>3];n=!(n>=1.0)?96.0:n;h[j+8>>3]=n;h[j>>3]=n;d=Rr(e)|0;c[f>>2]=c[j>>2];c[f+4>>2]=c[j+4>>2];c[f+8>>2]=c[j+8>>2];c[f+12>>2]=c[j+12>>2];Pr(k,d,f);d=c[k>>2]|0;f=c[k+4>>2]|0}else{d=-1;f=-1}c[b>>2]=d;c[b+4>>2]=f;l=m;return}function Rr(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+16|0;e=f;if(!a)ma(96030,83414,638,83521);if(!(c[42050]|0))c[42050]=Rl(19248,c[4353]|0)|0;b=Mr(a)|0;a:do if(!b){b=ww(64)|0;if(!b)b=0;else{d=b+8|0;c[d>>2]=ap(0,a)|0;if(!((Nr(b)|0)<<24>>24)){Sr(b);b=0;break}if(!(c[b+20>>2]|0))ma(83515,83414,653,83521);do switch(Tr(b)|0){case 0:{a=Qy(c[d>>2]|0)|0;c[b+52>>2]=a;if(!a){c[e>>2]=c[d>>2];$l(0,83538,e)|0;Sr(b);b=0;break a}break}case 2:{Ur(b);break}case 3:{Vr(b);break}case 1:{Wr(b);break}case 4:{Xr(b);break}case 6:{Yr(b);break}case 11:{Zr(b);break}case 8:{_r(b);break}case 5:{$r(b);break}case 12:{as(b);break}default:{}}while(0);Or(b);e=c[42050]|0;bb[c[e>>2]&31](e,b,1)|0}}else Or(b);while(0);l=f;return b|0}function Sr(a){a=a|0;var b=0;b=c[a+8>>2]|0;if(b|0)cp(0,b)|0;$I(a);return}function Tr(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=l;l=l+224|0;f=j+200|0;g=j;h=a+20|0;b=c[h>>2]|0;a:do if((b|0)!=0?(xN(f,1,20,b)|0)==20:0){d=0;while(1){if(d>>>0>=10){i=13;break a}if(!(eL(f,c[19284+(d<<4)>>2]|0,c[19284+(d<<4)+4>>2]|0)|0))break;d=d+1|0}e=a+28|0;c[e>>2]=c[19284+(d<<4)+12>>2];b=c[19284+(d<<4)+8>>2]|0;a=a+24|0;c[a>>2]=b;switch(d|0){case 7:break;case 8:{if(eL(f+8|0,83754,4)|0)break a;c[e>>2]=83759;c[a>>2]=11;b=11;break a}default:break a}while(1){if(!(hL(g,200,c[h>>2]|0)|0)){i=11;break}if(!(eL(g,83749,4)|0)){i=8;break}}if((i|0)==8){c[e>>2]=86879;c[a>>2]=8;b=8;break}else if((i|0)==11){b=c[a>>2]|0;break}}else i=13;while(0);if((i|0)==13){c[a+28>>2]=83764;c[a+24>>2]=0;b=0}l=j;return b|0}function Ur(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+16|0;b=f+4|0;d=f;c[a+48>>2]=0;e=a+20|0;pM(c[e>>2]|0,6,0)|0;if((js(c[e>>2]|0,2,b)|0)<<24>>24?(js(c[e>>2]|0,2,d)|0)<<24>>24:0){c[a+40>>2]=c[b>>2];c[a+44>>2]=c[d>>2]}l=f;return}function Vr(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+16|0;b=f+4|0;d=f;c[a+48>>2]=0;e=a+20|0;pM(c[e>>2]|0,16,0)|0;if((bs(c[e>>2]|0,4,b)|0)<<24>>24?(bs(c[e>>2]|0,4,d)|0)<<24>>24:0){c[a+40>>2]=c[b>>2];c[a+44>>2]=c[d>>2]}l=f;return}function Wr(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=l;l=l+16|0;b=h+12|0;d=h+8|0;e=h+4|0;f=h;c[a+48>>2]=0;g=a+20|0;pM(c[g>>2]|0,16,0)|0;if((((js(c[g>>2]|0,2,b)|0)<<24>>24?(js(c[g>>2]|0,2,d)|0)<<24>>24:0)?(js(c[g>>2]|0,2,e)|0)<<24>>24:0)?(js(c[g>>2]|0,2,f)|0)<<24>>24:0){c[a+40>>2]=c[b>>2]<<16|c[d>>2];c[a+44>>2]=c[e>>2]<<16|c[f>>2]}l=h;return}function Xr(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;b=m+16|0;e=m+12|0;f=m+8|0;h=m+4|0;i=m;c[a+48>>2]=0;j=a+20|0;while(1){if(!((bs(c[j>>2]|0,1,b)|0)<<24>>24))break;d=c[b>>2]|0;if((d|0)==255)continue;if(XJ(83737,d)|0)continue;if((d|0)==192){k=6;break}g=c[j>>2]|0;if((d|0)==194){k=11;break}if(!((bs(g,2,e)|0)<<24>>24))break;pM(c[j>>2]|0,(c[e>>2]|0)+-2|0,1)|0}if((k|0)==6){if(((bs(c[j>>2]|0,3,i)|0)<<24>>24?(bs(c[j>>2]|0,2,f)|0)<<24>>24:0)?(bs(c[j>>2]|0,2,h)|0)<<24>>24:0){c[a+44>>2]=c[f>>2];c[a+40>>2]=c[h>>2]}}else if((((k|0)==11?(bs(g,3,i)|0)<<24>>24:0)?(bs(c[j>>2]|0,2,f)|0)<<24>>24:0)?(bs(c[j>>2]|0,2,h)|0)<<24>>24:0){c[a+44>>2]=c[f>>2];c[a+40>>2]=c[h>>2]}l=m;return}function Yr(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+1056|0;j=m;b=m+32|0;e=m+28|0;f=m+24|0;g=m+20|0;h=m+16|0;c[a+48>>2]=72;i=a+20|0;pM(c[i>>2]|0,0,0)|0;while(1){if(!(hL(b,1024,c[i>>2]|0)|0))break;d=iL(b,83722)|0;if(!d)continue;c[j>>2]=e;c[j+4>>2]=f;c[j+8>>2]=g;c[j+12>>2]=h;if((dM(d,89345,j)|0)==4){k=5;break}}if((k|0)==5){j=c[e>>2]|0;c[a+32>>2]=j;k=c[f>>2]|0;c[a+36>>2]=k;c[a+40>>2]=(c[g>>2]|0)-j;c[a+44>>2]=(c[h>>2]|0)-k}l=m;return}function Zr(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;g=l;l=l+16|0;b=g+4|0;d=g;c[a+48>>2]=0;e=a+20|0;pM(c[e>>2]|0,15,0)|0;h=(CN(c[e>>2]|0)|0)==88;f=c[e>>2]|0;if(h){pM(f,24,0)|0;if((js(c[e>>2]|0,4,b)|0)<<24>>24?(js(c[e>>2]|0,4,d)|0)<<24>>24:0){c[a+40>>2]=c[b>>2];c[a+44>>2]=c[d>>2]}}else{pM(f,26,0)|0;if((js(c[e>>2]|0,2,b)|0)<<24>>24?(js(c[e>>2]|0,2,d)|0)<<24>>24:0){c[a+40>>2]=c[b>>2];c[a+44>>2]=c[d>>2]}}l=g;return}function _r(b){b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;F=l;l=l+352|0;C=F+80|0;B=F+72|0;E=F+64|0;D=F+56|0;A=F+48|0;d=F+40|0;s=F+32|0;t=F+24|0;u=F+16|0;v=F+8|0;w=F;x=F+328|0;y=F+128|0;z=F+96|0;if(!(c[42053]|0)){if(FM(168216,83607,1)|0){c[d>>2]=83607;$l(1,83634,d)|0}c[42053]=168216}m=b+20|0;pM(c[m>>2]|0,0,0)|0;n=z+12|0;o=z+20|0;p=z+8|0;q=z+16|0;r=z+4|0;d=0;g=0;f=0;e=0;a:while(1){if(!(hL(y,200,c[m>>2]|0)|0))break;if(g<<24>>24==0|d<<24>>24==0){i=y;k=e}else break;b:while(1){j=f;c:while(1){while(1){if(rN(168216,i,4,z,0)|0){f=j;e=k;continue a}a[i+(c[n>>2]|0)>>0]=0;a[i+(c[o>>2]|0)>>0]=0;e=i+(c[p>>2]|0)|0;f=i+(c[q>>2]|0)|0;i=i+((c[r>>2]|0)+1)|0;if(!(yJ(e,96043)|0))break;if(!(yJ(e,96049)|0))break c;if(yJ(e,83681)|0)continue;c[C>>2]=t;c[C+4>>2]=u;c[C+8>>2]=v;c[C+12>>2]=w;if((dM(f,83689,C)|0)==4)break b}c[A>>2]=s;c[A+4>>2]=x;if((dM(f,83671,A)|0)!=2){c[D>>2]=s;if((dM(f,86246,D)|0)==1){e=1;f=is(+h[s>>3],83678)|0}else{e=g;f=j}}else{e=1;f=is(+h[s>>3],x)|0}if(!(d<<24>>24)){d=0;g=e;j=f}else{g=e;e=k;continue a}}c[E>>2]=s;c[E+4>>2]=x;if((dM(f,83671,E)|0)!=2){c[B>>2]=s;if((dM(f,86246,B)|0)==1){d=1;e=is(+h[s>>3],83678)|0}else e=k}else{d=1;e=is(+h[s>>3],x)|0}if(!(g<<24>>24)){g=0;f=j;k=e}else{f=j;continue a}}d=1;g=1;f=~~(+h[v>>3]+1.0-+h[t>>3])>>>0;e=~~(+h[w>>3]+1.0-+h[u>>3])>>>0}c[b+48>>2]=0;c[b+40>>2]=f;c[b+44>>2]=e;l=F;return}function $r(a){a=a|0;var b=0,d=0,e=0,f=0.0,g=0.0;d=l;l=l+32|0;b=d;c[a+48>>2]=0;e=a+20|0;pM(c[e>>2]|0,0,0)|0;if(!(cs(c[e>>2]|0,b)|0)){g=+h[b>>3];c[a+32>>2]=~~g;f=+h[b+8>>3];c[a+36>>2]=~~f;c[a+40>>2]=~~(+h[b+16>>3]-g);c[a+44>>2]=~~(+h[b+24>>3]-f)}l=d;return}function as(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+16|0;b=f+4|0;d=f;c[a+48>>2]=0;e=a+20|0;pM(c[e>>2]|0,6,0)|0;if((bs(c[e>>2]|0,1,b)|0)<<24>>24?(bs(c[e>>2]|0,1,d)|0)<<24>>24:0){c[a+40>>2]=c[b>>2];c[a+44>>2]=c[d>>2]}l=f;return}function bs(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;c[d>>2]=0;e=0;while(1){if(e>>>0>=b>>>0){e=1;break}f=CN(a)|0;if(LL(a)|0){e=0;break}c[d>>2]=c[d>>2]<<8|f;e=e+1|0}return e|0}function cs(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=l;l=l+1040|0;d=h;e=h+16|0;while(1){if(!(hL(e,1024,a)|0)){a=1;break}f=iL(e,83597)|0;if(f|0){g=4;break}}if((g|0)==4){c[d+4>>2]=e;c[d>>2]=f+9;c[d+8>>2]=a;a=ds(d,b)|0}l=h;return a|0}function ds(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+1024|0;f=g;es(b);e=a[c[b>>2]>>0]|0;if(!(e<<24>>24))e=(fs(b)|0)&255;else e=e<<24>>24;if((((e|0)==91?(c[b>>2]=(c[b>>2]|0)+1,gs(b,f),(hs(f,d)|0)==0):0)?(gs(b,f),(hs(f,d+8|0)|0)==0):0)?(gs(b,f),(hs(f,d+16|0)|0)==0):0){gs(b,f);e=(hs(f,d+24|0)|0)!=0&1}else e=1;l=g;return e|0}function es(b){b=b|0;var d=0;d=c[b>>2]|0;while(1){d=a[d>>0]|0;if(!(d<<24>>24))d=(fs(b)|0)&255;else d=d<<24>>24;if(!((d&255)<<24>>24))break;if(!(YJ(d&255)|0))break;d=(c[b>>2]|0)+1|0;c[b>>2]=d}return}function fs(b){b=b|0;var d=0;d=b+4|0;if(!(hL(c[d>>2]|0,1024,c[b+8>>2]|0)|0))b=0;else{d=c[d>>2]|0;c[b>>2]=d;b=a[d>>0]|0}return b|0}function gs(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;es(b);e=0;f=c[b>>2]|0;while(1){f=a[f>>0]|0;if(!(f<<24>>24))g=(fs(b)|0)&255;else g=f<<24>>24;f=g<<24>>24;if(!f)break;if(!((f|0)==46|(f+-48|0)>>>0<10))break;a[d+e>>0]=g;e=e+1|0;f=(c[b>>2]|0)+1|0;c[b>>2]=f;if((e|0)==1023){e=1023;break}}a[d+e>>0]=0;return}function hs(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0;e=l;l=l+16|0;f=e;d=+uM(a,f);if((c[f>>2]|0)==(a|0))a=1;else{h[b>>3]=d;a=0}l=e;return a|0}function is(a,b){a=+a;b=b|0;var c=0.0;do if(!(yJ(b,83705)|0)){a=a*72.0;c=a;a=a>=0.0?.5:-.5}else{if(!(yJ(b,83708)|0)){a=a*.75;c=a;a=a>=0.0?.5:-.5;break}if(!(yJ(b,83711)|0)){a=a*12.0;c=a;a=a>=0.0?.5:-.5;break}if(yJ(b,83678)|0?yJ(b,83714)|0:0)if(!(yJ(b,83716)|0)){a=a*28.346456664;c=a;a=a>=0.0?.5:-.5;break}else{b=(yJ(b,83719)|0)==0;c=a*2.8346456663999997;return (b?~~(c+(c>=0.0?.5:-.5)):0)|0}c=a>=0.0?.5:-.5}while(0);return ~~(a+c)|0}function js(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;c[d>>2]=0;e=0;while(1){if(e>>>0>=b>>>0){e=1;break}f=CN(a)|0;if(LL(a)|0){e=0;break}c[d>>2]=c[d>>2]|f<<(e<<3);e=e+1|0}return e|0}function ks(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;a=c[b+20>>2]|0;if(a|0)ML(a)|0;if(c[b+52>>2]|0?(e=c[b+60>>2]|0,e|0):0)gb[e&127](b);$I(b);return}function ls(){var a=0;zm(0,1,86240,90527)|0;a=yr(0,1)|0;tE(a,0);return a|0}function ms(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0.0,n=0.0,o=0.0,p=0.0;k=l;l=l+304|0;j=k+24|0;i=k+8|0;f=k;g=k+40|0;if((gr(b,e)|0)!=999)if((hr(b,d)|0)==-1)b=-1;else{b=c[d+16>>2]|0;e=b+16|0;if(!(a[(c[b+8>>2]|0)+81>>0]|0)){p=+h[e>>3];o=+h[b+24>>3];n=+h[b+32>>3];m=+h[b+40>>3];c[j>>2]=~~(p+(p>=0.0?.5:-.5));c[j+4>>2]=~~(o+(o>=0.0?.5:-.5));c[j+8>>2]=~~(n+(n>=0.0?.5:-.5));c[j+12>>2]=~~(m+(m>=0.0?.5:-.5));qL(g,83918,j)|0}else{m=+h[b+24>>3];n=+h[e>>3];o=+h[b+40>>3];p=+h[b+32>>3];c[i>>2]=~~(m+(m>=0.0?.5:-.5));c[i+4>>2]=~~(n+(n>=0.0?.5:-.5));c[i+8>>2]=~~(o+(o>=0.0?.5:-.5));c[i+12>>2]=~~(p+(p>=0.0?.5:-.5));qL(g,83918,i)|0}Mm(d,87705,g,174185)|0;b=0}else{b=Lr(b,1,e)|0;c[f>>2]=e;c[f+4>>2]=b;$l(1,83869,f)|0;b=-1}l=k;return b|0}function ns(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;i=l;l=l+16|0;g=i;f=c[b+60>>2]|0;Cr(a,d)|0;b=c[a+164>>2]|0;c[b+56>>2]=cD(b,c[b+52>>2]|0)|0;if((Oo(f,122277,0,1)|0)!=0?(c[(c[f+16>>2]|0)+8>>2]|0)!=0:0)h=5;else if(!(c[b+152>>2]&67108864)){cm(83930,g);b=-1}else h=5;if((h|0)==5){c[b+36>>2]=e;if(!e){h=b+152|0;c[h>>2]=c[h>>2]|134217728}h=Hv(a,f)|0;eD(b);Hr(a);b=h}l=i;return b|0}function os(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;i=l;l=l+16|0;g=i;f=c[b+60>>2]|0;Cr(a,d)|0;b=c[a+164>>2]|0;c[b+56>>2]=cD(b,c[b+52>>2]|0)|0;if((Oo(f,122277,0,1)|0)!=0?(c[(c[f+16>>2]|0)+8>>2]|0)!=0:0)h=5;else if(!(c[b+152>>2]&67108864)){cm(83930,g);b=-1}else h=5;if((h|0)==5){Br(a,e);h=Hv(a,f)|0;eD(b);rr(b);Hr(a);b=h}l=i;return b|0}function ps(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+16|0;h=m+8|0;g=m;b=c[b+60>>2]|0;Cr(a,d)|0;j=c[a+164>>2]|0;c[j+56>>2]=cD(j,c[j+52>>2]|0)|0;if((Oo(b,122277,0,1)|0)!=0?(c[(c[b+16>>2]|0)+8>>2]|0)!=0:0)k=5;else if(!(c[j+152>>2]&67108864)){cm(83930,g);b=-1}else k=5;do if((k|0)==5){if(e|0?(i=_I(4096)|0,c[e>>2]=i,i|0):0){g=j+40|0;c[g>>2]=i;c[j+44>>2]=4096;d=j+48|0;c[d>>2]=0;b=Hv(a,b)|0;eD(j);if(!b){c[e>>2]=c[g>>2];c[f>>2]=c[d>>2]}Hr(a);break}$l(1,83951,h)|0;b=-1}while(0);l=m;return b|0}function qs(a,b){a=a|0;b=b|0;rE(a,0,b);return}function rs(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;if(!((a|0)!=0?(zs(a)|0)!=0:0))a=84007;e=sJ(a)|0;if((e|0)>=104){d=xw(e+25|0)|0;if(!d)d=0;else f=6}else f=6;if((f|0)==6){yK(d,a)|0;c[b>>2]=e}return d|0}function ss(a,b){a=a|0;b=b|0;jo(b,a,1)|0;return}function ts(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;c[b>>2]=d;c[b+4>>2]=d+4096;c[b+12>>2]=0;c[b+8>>2]=0;c[a>>2]=b;c[a+4>>2]=b;c[a+8>>2]=d;c[a+12>>2]=e;c[a+16>>2]=f;return}function us(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;xs(e,b);i=e+12|0;j=e+16|0;b=0;a:while(1){k=ys(e)|0;if(!k)break;b=b+1|0;f=c[i>>2]|0;if(f|0)hb[f&31](k,d);h=Vm(a,k)|0;while(1){if(!h)continue a;g=c[h>>2]&3;f=c[((g|0)==3?h:h+48|0)+40>>2]|0;if((f|0)==(k|0))f=c[((g|0)==2?h:h+-48|0)+40>>2]|0;if(!(ab[c[j>>2]&63](f,-1)|0))xs(e,f);h=Wm(a,h,k)|0}}return b|0}function vs(a){a=a|0;var b=0;a=c[(c[a>>2]|0)+12>>2]|0;while(1){if(!a)break;b=c[a+12>>2]|0;ws(a);a=b}return}function ws(a){a=a|0;$I(c[a>>2]|0);$I(a);return}function xs(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+16|0;j=k+8|0;f=k;g=a+8|0;i=a+4|0;d=c[i>>2]|0;if((c[g>>2]|0)==(c[d+4>>2]|0)){d=c[d+12>>2]|0;do if(!d){e=xw(16)|0;if(!e){$l(1,83988,f)|0;Ua(168248,1)}c[e+8>>2]=c[i>>2];c[e+12>>2]=0;d=xw(4e6)|0;c[e>>2]=d;if(!d){$l(1,83988,j)|0;Ua(168248,1)}else{c[e+4>>2]=d+4e6;c[(c[i>>2]|0)+12>>2]=e;h=e;break}}else h=d;while(0);c[i>>2]=h;c[g>>2]=c[h>>2]}ab[c[a+16>>2]&63](b,1)|0;j=c[g>>2]|0;c[g>>2]=j+4;c[j>>2]=b;l=k;return}function ys(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;f=a+8|0;b=c[f>>2]|0;d=a+4|0;e=c[d>>2]|0;if((b|0)==(c[e>>2]|0))if((e|0)==(c[a>>2]|0))b=0;else{b=c[e+8>>2]|0;c[d>>2]=b;b=c[b+4>>2]|0;c[f>>2]=b;g=4}else g=4;if((g|0)==4){b=b+-4|0;c[f>>2]=b;b=c[b>>2]|0}return b|0}function zs(b){b=b|0;var c=0;a:while(1){c=b;b=b+1|0;c=a[c>>0]|0;switch(c<<24>>24){case 95:continue a;case 0:{b=1;break a}default:{}}if(!(hK(c&255)|0)){b=0;break}}return b|0}function As(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=0;f=eo(a)|0;while(1){if(!f)break;e=Qm(b,f)|0;while(1){if(!e)break;if(jo(a,c[((c[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0,0)|0){fn(a,e,1)|0;d=d+1|0}e=Sm(b,e)|0}f=fo(a,f)|0}return d|0}function Bs(a){a=a|0;a=Mo(a,84012,0)|0;if(!a)ma(84017,84020,529,84029);else return c[a+8>>2]|0;return 0}function Cs(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;u=l;l=l+4320|0;s=u+24|0;r=u+8|0;q=u;t=u+4184|0;p=u+4160|0;f=u+40|0;if(nn(b)|0){To(b,0,84038,-12,0);To(b,1,84050,16,0);o=rs(e,f,t)|0;k=Ds(b)|0;m=xw((nn(k)|0)<<2)|0;ts(p,u+4144|0,u+48|0,23,22);h=eo(k)|0;n=p+16|0;i=o+(c[f>>2]|0)|0;j=c[13918]|0;e=0;while(1){if(!h)break;if(!(ab[c[n>>2]&63](h,-1)|0)){c[q>>2]=e;qL(i,84952,q)|0;v=Jp(k,o,1)|0;w=Jp(b,o,1)|0;Oo(w,84038,12,0)|0;a[(Mo(w,84038,0)|0)+8>>0]=1;f=us(k,h,v,p)|0;Fs(v,w);g=Gs(w)|0;Hs(b,w);c[m+(e<<2)>>2]=w;ro(k,v)|0;if(0){c[r>>2]=e;c[r+4>>2]=f;c[r+8>>2]=g;AL(j,84062,r)|0}e=e+1|0}h=fo(k,h)|0}if(0){r=nn(b)|0;v=on(b)|0;w=En(b)|0;c[s>>2]=r;c[s+4>>2]=v;c[s+8>>2]=e;c[s+12>>2]=w;AL(j,84092,s)|0}mn(k)|0;Uo(b,0,84038);Uo(b,1,84050);vs(p);f=zw(m,e<<2)|0;if((o|0)!=(t|0))$I(o)}else{f=0;e=0}c[d>>2]=e;l=u;return f|0}function Ds(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;h=i;a[h>>0]=a[17652]|0;a[h+1>>0]=a[17653]|0;a[h+2>>0]=a[17654]|0;a[h+3>>0]=a[17655]|0;h=hn(84139,h,0)|0;Ks(h,b);d=eo(b)|0;while(1){if(!d)break;if(!(c[(Mo(d,84050,0)|0)+12>>2]|0)){g=oo(h,En(d)|0,1)|0;Oo(g,84050,16,1)|0;c[(c[g+16>>2]|0)+12>>2]=d;c[(Mo(d,84050,0)|0)+12>>2]=g}d=fo(b,d)|0}e=eo(b)|0;while(1){if(!e)break;f=c[(Mo(e,84050,0)|0)+12>>2]|0;d=Qm(b,e)|0;while(1){if(!d)break;g=c[(Mo(c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0,84050,0)|0)+12>>2]|0;do if((g|0)!=(f|0))if(g>>>0>f>>>0){bn(h,f,g,0,1)|0;break}else{bn(h,g,f,0,1)|0;break}while(0);d=Sm(b,d)|0}e=fo(b,e)|0}l=i;return h|0}function Es(b,d){b=b|0;d=d|0;var e=0;b=(c[b+16>>2]|0)+8|0;e=a[b>>0]|0;if((d|0)>=0)a[b>>0]=d;return e|0}function Fs(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;e=eo(a)|0;while(1){if(!e)break;f=c[(c[e+16>>2]|0)+12>>2]|0;a:do if((c[f>>2]&3|0)==1)jo(b,f,1)|0;else{d=eo(f)|0;while(1){if(!d)break a;jo(b,d,1)|0;d=fo(f,d)|0}}while(0);e=fo(a,e)|0}return}function Gs(a){a=a|0;return As(a,c[a+60>>2]|0)|0}function Hs(a,b){a=a|0;b=b|0;Is(a,b,0);return}function Is(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;g=(d|0)==0;b=Kp(b)|0;while(1){if(!b)break;if((a[(Mo(b,84038,0)|0)+8>>0]|0)==0?(f=Js(b,c,d)|0,f|0):0){if(g)e=(WJ(En(b)|0,93039,7)|0)==0;else e=1;Is(b,f,e&1)}b=Lp(b)|0}return}function Js(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=0;g=eo(a)|0;while(1){if(!g)break;f=oo(b,En(g)|0,0)|0;if(f){if(!e)e=Jp(b,En(a)|0,1)|0;jo(e,f,1)|0}g=fo(a,g)|0}if((d|0)!=0&(e|0)==0)e=Jp(b,En(a)|0,1)|0;if(e|0?(As(e,a)|0,Nm(a,e)|0,(WJ(En(e)|0,93039,7)|0)==0):0)c[(Oo(e,84012,12,0)|0)+8>>2]=a;return e|0}function Ks(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;h=l;l=l+16|0;g=h;d=Kp(b)|0;e=c[13918]|0;while(1){if(!d)break;a:do if(!(WJ(En(d)|0,93039,7)|0)){f=oo(a,En(d)|0,1)|0;Oo(f,84050,16,1)|0;c[(c[f+16>>2]|0)+12>>2]=d;b=eo(d)|0;while(1){if(!b)break a;if(c[(Mo(b,84050,0)|0)+12>>2]|0){k=En(b)|0;j=En(d)|0;i=En(c[(Mo(b,84050,0)|0)+12>>2]|0)|0;c[g>>2]=k;c[g+4>>2]=j;c[g+8>>2]=i;AL(e,84142,g)|0}c[(Mo(b,84050,0)|0)+12>>2]=f;b=fo(d,b)|0}}else Ks(a,d);while(0);d=Lp(d)|0}l=h;return}function Ls(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0.0;n=+h[a>>3];j=~~(n+(n>=0.0?.5:-.5));n=+h[a+8>>3];a=~~(n+(n>=0.0?.5:-.5));n=+h[b>>3];g=~~(n+(n>=0.0?.5:-.5));n=+h[b+8>>3];f=~~(n+(n>=0.0?.5:-.5));l=g-j|0;i=((l|0)>-1?l:0-l|0)<<1;l=l>>31|1;m=f-a|0;k=((m|0)>-1?m:0-m|0)<<1;m=m>>31|1;a:do if((i|0)>(k|0)){e=0-i|0;d=k-(i>>1)|0;b=j;while(1){Dx(c,b,a);if((b|0)==(g|0))break a;j=(d|0)>-1;d=d+k+(j?e:0)|0;b=b+l|0;a=(j?m:0)+a|0}}else{e=0-k|0;d=j;b=i-(k>>1)|0;while(1){Dx(c,d,a);if((a|0)==(f|0))break a;k=(b|0)>-1;d=(k?l:0)+d|0;b=b+i+(k?e:0)|0;a=a+m|0}}while(0);return}function Ms(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+16|0;k=n;j=n+4|0;do if((a|0)<1)d=0;else{f=e+16|0;if((c[f>>2]|0)>>>0<4){d=Ns(a,b,d,e)|0;break}m=xw(a<<5)|0;d=0;while(1){if((d|0)==(a|0))break;g=c[b+(d<<2)>>2]|0;eB(g);h=m+(d<<5)|0;g=(c[g+16>>2]|0)+16|0;c[h>>2]=c[g>>2];c[h+4>>2]=c[g+4>>2];c[h+8>>2]=c[g+8>>2];c[h+12>>2]=c[g+12>>2];c[h+16>>2]=c[g+16>>2];c[h+20>>2]=c[g+20>>2];c[h+24>>2]=c[g+24>>2];c[h+28>>2]=c[g+28>>2];d=d+1|0}if((c[f>>2]|0)==4){h=e+28|0;a:do if(c[h>>2]&2|0){f=e+24|0;c[f>>2]=ww(a<<2)|0;d=0;while(1){if((d|0)==(a|0))break a;g=Jm(c[b+(d<<2)>>2]|0,84209)|0;if(g|0?(c[k>>2]=j,g=(dM(g,122187,k)|0)>0,i=c[j>>2]|0,g&(i|0)>-1):0)c[(c[f>>2]|0)+(d<<2)>>2]=i;d=d+1|0}}while(0);d=Os(a,m,e)|0;if(c[h>>2]&2)$I(c[e+24>>2]|0)}else d=0;$I(m)}while(0);l=n;return d|0}function Ns(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0.0,I=0.0,J=0.0,K=0.0;G=l;l=l+144|0;B=G+136|0;A=G+64|0;F=G+48|0;v=G+40|0;u=G;t=G+120|0;x=G+104|0;C=G+96|0;D=c[f+20>>2]|0;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;c[x+12>>2]=0;a:do if((b|0)>=1){o=(D|0)==0;E=c[13918]|0;p=t+4|0;q=t+8|0;r=t+12|0;y=x+4|0;w=x+8|0;z=x+12|0;n=0;g=0;while(1){if((n|0)==(b|0))break;s=c[d+(n<<2)>>2]|0;eB(s);if(!o?(a[D+n>>0]|0)!=0:0){m=c[s+16>>2]|0;H=+h[m+16>>3];i=~~(H+(H>=0.0?.5:-.5));c[t>>2]=i;H=+h[m+24>>3];j=~~(H+(H>=0.0?.5:-.5));c[p>>2]=j;H=+h[m+32>>3];k=~~(H+(H>=0.0?.5:-.5));c[q>>2]=k;H=+h[m+40>>3];m=~~(H+(H>=0.0?.5:-.5));c[r>>2]=m;if(!g){c[x>>2]=c[t>>2];c[x+4>>2]=c[t+4>>2];c[x+8>>2]=c[t+8>>2];c[x+12>>2]=c[t+12>>2]}else{c[x>>2]=c[((c[x>>2]|0)>(i|0)?t:x)>>2];c[y>>2]=c[((c[y>>2]|0)>(j|0)?t:x)+4>>2];c[w>>2]=c[((c[w>>2]|0)<(k|0)?t:x)+8>>2];c[z>>2]=c[((c[z>>2]|0)<(m|0)?t:x)+12>>2]}g=g+1|0}if(0>2){m=En(s)|0;s=c[s+16>>2]|0;K=+h[s+16>>3];J=+h[s+24>>3];I=+h[s+32>>3];H=+h[s+40>>3];c[u>>2]=m;h[u+8>>3]=K;h[u+16>>3]=J;h[u+24>>3]=I;h[u+32>>3]=H;AL(E,84276,u)|0}n=n+1|0}q=xw(b<<5)|0;g=0;while(1){if((g|0)==(b|0))break;u=q+(g<<5)|0;t=(c[(c[d+(g<<2)>>2]|0)+16>>2]|0)+16|0;c[u>>2]=c[t>>2];c[u+4>>2]=c[t+4>>2];c[u+8>>2]=c[t+8>>2];c[u+12>>2]=c[t+12>>2];c[u+16>>2]=c[t+16>>2];c[u+20>>2]=c[t+20>>2];c[u+24>>2]=c[t+24>>2];c[u+28>>2]=c[t+28>>2];g=g+1|0}o=f+8|0;p=Rs(b,q,c[o>>2]|0)|0;if(0){c[v>>2]=p;AL(E,84304,v)|0}if((p|0)>=1){n=(D|0)!=0;if(n){i=((c[w>>2]|0)+(c[x>>2]|0)|0)/2|0;g=((c[z>>2]|0)+(c[y>>2]|0)|0)/2|0}else{i=0;g=0}c[C+4>>2]=g;c[C>>2]=i;m=ww(b<<4)|0;k=f+16|0;g=0;while(1){if((g|0)>=(b|0))break;i=c[d+(g<<2)>>2]|0;j=m+(g<<4)|0;c[m+(g<<4)+12>>2]=g;if((c[k>>2]|0)==3){x=(c[i+16>>2]|0)+16|0;y=c[o>>2]|0;z=En(i)|0;c[A>>2]=c[x>>2];c[A+4>>2]=c[x+4>>2];c[A+8>>2]=c[x+8>>2];c[A+12>>2]=c[x+12>>2];c[A+16>>2]=c[x+16>>2];c[A+20>>2]=c[x+20>>2];c[A+24>>2]=c[x+24>>2];c[A+28>>2]=c[x+28>>2];c[B>>2]=c[C>>2];c[B+4>>2]=c[C+4>>2];Ss(A,j,p,y,B,z)}else{c[B>>2]=c[C>>2];c[B+4>>2]=c[C+4>>2];Ts(e,i,j,p,f,B)}g=g+1|0}j=ww(b<<2)|0;g=0;while(1){if((g|0)>=(b|0))break;c[j+(g<<2)>>2]=m+(g<<4);g=g+1|0}sL(j,b,4,23);k=xx()|0;g=ww(b<<3)|0;b:do if(n){i=0;while(1){if((i|0)>=(b|0)){i=0;break}if(a[D+i>>0]|0){e=c[j+(i<<2)>>2]|0;f=g+(c[e+12>>2]<<3)|0;c[B>>2]=c[C>>2];c[B+4>>2]=c[C+4>>2];Vs(e,k,f,B)}i=i+1|0}while(1){if((i|0)>=(b|0))break b;if(!(a[D+i>>0]|0)){C=c[j+(i<<2)>>2]|0;Ws(i,C,k,g+(c[C+12>>2]<<3)|0,p,c[o>>2]|0,q)}i=i+1|0}}else{i=0;while(1){if((i|0)>=(b|0))break b;D=c[j+(i<<2)>>2]|0;Ws(i,D,k,g+(c[D+12>>2]<<3)|0,p,c[o>>2]|0,q);i=i+1|0}}while(0);$I(j);i=0;while(1){if((i|0)>=(b|0))break;$I(c[m+(i<<4)+4>>2]|0);i=i+1|0}$I(m);Ax(k);$I(q);if(0>1){i=0;while(1){if((i|0)>=(b|0))break a;C=c[g+(i<<3)>>2]|0;D=c[g+(i<<3)+4>>2]|0;c[F>>2]=i;c[F+4>>2]=C;c[F+8>>2]=D;AL(E,84320,F)|0;i=i+1|0}}}else g=0}else g=0;while(0);l=G;return g|0}function Os(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0.0,j=0,k=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;z=l;l=l+16|0;g=z;x=ww(a<<3)|0;f=c[d+4>>2]|0;y=d+28|0;e=(f|0)>0;do if(!(c[y>>2]&1))if(e){k=1;w=(a+-1+f|0)/(f|0)|0;break}else{f=~~+N(+(+C(+(+(a|0)))));k=1;w=(a+-1+f|0)/(f|0)|0;break}else if(e){k=0;w=f;f=(a+-1+f|0)/(f|0)|0;break}else{f=~~+N(+(+C(+(+(a|0)))));k=0;w=f;f=(a+-1+f|0)/(f|0)|0;break}while(0);if(0){v=c[13918]|0;c[g>>2]=k|0?84215:84225;c[g+4>>2]=w;c[g+8>>2]=f;AL(v,84238,g)|0}t=ww((f<<3)+8|0)|0;u=ww((w<<3)+8|0)|0;v=ww(a*24|0)|0;j=d+8|0;e=0;g=v;while(1){if((e|0)>=(a|0))break;p=+h[b+(e<<5)+8>>3];o=+h[b+(e<<5)+24>>3];q=+((c[j>>2]|0)>>>0);h[g>>3]=+h[b+(e<<5)+16>>3]-+h[b+(e<<5)>>3]+q;h[g+8>>3]=o-p+q;c[g+16>>2]=e;e=e+1|0;g=g+24|0}s=ww(a<<2)|0;e=0;while(1){if((e|0)>=(a|0))break;c[s+(e<<2)>>2]=v+(e*24|0);e=e+1|0}e=c[d+24>>2]|0;if(!e){if(!(c[y>>2]&64))sL(s,a,4,25)}else{c[42101]=e;sL(s,a,4,24)}r=(k|0)==0;e=0;g=0;j=0;while(1){if((j|0)>=(a|0)){i=0.0;e=0;break}k=c[s+(j<<2)>>2]|0;d=t+(g<<3)|0;q=+h[d>>3];p=+h[k>>3];h[d>>3]=q>p?q:p;d=u+(e<<3)|0;p=+h[d>>3];q=+h[k+8>>3];h[d>>3]=p>q?p:q;if(r){e=e+1|0;d=(e|0)==(w|0);e=d?0:e;g=g+(d&1)|0}else{g=g+1|0;d=(g|0)==(f|0);e=e+(d&1)|0;g=d?0:g}j=j+1|0}while(1){if((e|0)>(f|0)){i=0.0;e=w;break}d=t+(e<<3)|0;q=+h[d>>3];h[d>>3]=i;i=q+i;e=e+1|0}while(1){if((e|0)<=0)break;d=e+-1|0;q=+h[u+(d<<3)>>3];h[u+(e<<3)>>3]=i;i=q+i;e=d}h[u>>3]=i;e=0;g=0;d=0;while(1){if((d|0)>=(a|0))break;k=c[(c[s+(d<<2)>>2]|0)+16>>2]|0;i=+h[b+(k<<5)>>3];m=-i;p=+h[b+(k<<5)+8>>3];q=-p;n=+h[b+(k<<5)+16>>3];o=+h[b+(k<<5)+24>>3];j=c[y>>2]|0;do if(!(j&4))if(!(j&8)){i=(m-n+ +h[t+(g<<3)>>3]+ +h[t+(g+1<<3)>>3])*.5;break}else{i=i-n+ +h[t+(g+1<<3)>>3];break}else i=+h[t+(g<<3)>>3];while(0);c[x+(k<<3)>>2]=~~i;do if(!(j&16))if(!(j&32)){i=(q-o+ +h[u+(e<<3)>>3]+ +h[u+(e+1<<3)>>3])*.5;break}else{i=+h[u+(e+1<<3)>>3];break}else i=p-o+ +h[u+(e<<3)>>3];while(0);c[x+(k<<3)+4>>2]=~~i;if(r){e=e+1|0;k=(e|0)==(w|0);e=k?0:e;g=g+(k&1)|0}else{g=g+1|0;k=(g|0)==(f|0);e=e+(k&1)|0;g=k?0:g}d=d+1|0}$I(v);$I(s);$I(t);$I(u);l=z;return x|0}function Ps(a,b){a=a|0;b=b|0;var d=0;d=c[42101]|0;a=c[d+(c[(c[a>>2]|0)+16>>2]<<2)>>2]|0;b=c[d+(c[(c[b>>2]|0)+16>>2]<<2)>>2]|0;return ((a|0)>(b|0)?1:((a|0)<(b|0))<<31>>31)|0}function Qs(a,b){a=a|0;b=b|0;var d=0.0,e=0.0;a=c[a>>2]|0;b=c[b>>2]|0;e=+h[a>>3]+ +h[a+8>>3];d=+h[b>>3]+ +h[b+8>>3];return (ed)<<31>>31)|0}function Rs(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,g=0.0,i=0.0,j=0.0,k=0,m=0,n=0.0,o=0.0,p=0,q=0,r=0,s=0;s=l;l=l+96|0;q=s+80|0;r=s+48|0;p=s+8|0;m=s;k=(a*100|0)+-1|0;e=+(d<<1|0);n=0.0;o=0.0;d=0;while(1){if((d|0)>=(a|0))break;j=+h[b+(d<<5)+16>>3]-+h[b+(d<<5)>>3]+e;i=+h[b+(d<<5)+24>>3]-+h[b+(d<<5)+8>>3]+e;n=n-j-i;o=o-i*j;d=d+1|0}i=+(k|0);j=n*n-i*4.0*o;if(!(j<0.0)){e=+C(+j);g=i*2.0;f=(e-n)/g;g=(-n-e)/g;d=~~f;d=(d|0)==0?1:d;if(0>2){m=c[13918]|0;YL(84463,27,1,m)|0;h[p>>3]=i;h[p+8>>3]=n;h[p+16>>3]=o;h[p+24>>3]=j;h[p+32>>3]=e;AL(m,84491,p)|0;c[r>>2]=d;h[r+8>>3]=f;c[r+16>>2]=~~g;h[r+24>>3]=g;AL(m,84517,r)|0;h[q>>3]=(f*i+n)*f+o;h[q+8>>3]=(g*i+n)*g+o;AL(m,84539,q)|0}}else{h[m>>3]=j;$l(1,84436,m)|0;d=-1}l=s;return d|0}function Ss(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0,m=0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0,u=0,v=0.0,w=0.0;u=l;l=l+32|0;t=u+16|0;s=u;p=+h[a>>3];q=+h[a+8>>3];n=+h[a+16>>3];o=+h[a+24>>3];r=xx()|0;j=c[f>>2]|0;a=j-e|0;k=c[f+4>>2]|0;i=k-e|0;j=e-~~(p+(p>=0.0?.5:-.5))+j+~~(n+(n>=0.0?.5:-.5))|0;k=e-~~(q+(q>=0.0?.5:-.5))+k+~~(o+(o>=0.0?.5:-.5))|0;if((a|0)>-1)f=(a|0)/(d|0)|0;else f=((a+1|0)/(d|0)|0)+-1|0;if((i|0)>-1)m=(i|0)/(d|0)|0;else m=((i+1|0)/(d|0)|0)+-1|0;if((j|0)>-1)j=(j|0)/(d|0)|0;else j=((j+1|0)/(d|0)|0)+-1|0;if((k|0)>-1)i=(k|0)/(d|0)|0;else i=((k+1|0)/(d|0)|0)+-1|0;while(1){if((f|0)>(j|0))break;else a=m;while(1){if((a|0)>(i|0))break;Dx(r,f,a);a=a+1|0}f=f+1|0}k=b+4|0;c[k>>2]=Hx(r)|0;j=Gx(r)|0;m=b+8|0;c[m>>2]=j;w=+(e<<1|0);v=+(d|0);i=~~+N(+((n+w-p)/v));a=~~+N(+((o+w-q)/v));c[b>>2]=a+i;a:do if(0>2){f=c[13918]|0;c[s>>2]=g;c[s+4>>2]=j;c[s+8>>2]=i;c[s+12>>2]=a;AL(f,84395,s)|0;a=0;while(1){if((a|0)>=(c[m>>2]|0))break a;g=c[k>>2]|0;s=c[g+(a<<3)+4>>2]|0;c[t>>2]=c[g+(a<<3)>>2];c[t+4>>2]=s;AL(f,84422,t)|0;a=a+1|0}}while(0);Ax(r);l=u;return}function Ts(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,O=0,P=0,Q=0.0,R=0.0;P=l;l=l+128|0;F=P+112|0;E=P+104|0;O=P+16|0;M=P;H=P+64|0;I=P+56|0;z=P+40|0;A=P+96|0;y=P+88|0;v=P+24|0;w=P+80|0;x=P+72|0;K=c[f+8>>2]|0;G=c[f+12>>2]|0;C=(a|0)==0?b:a;L=xx()|0;J=b+16|0;B=c[J>>2]|0;t=+h[B+16>>3];D=(c[g>>2]|0)-~~(t+(t>=0.0?.5:-.5))|0;t=+h[B+24>>3];B=(c[g+4>>2]|0)-~~(t+(t>=0.0?.5:-.5))|0;a:do if((c[f+16>>2]|0)==1){v=xw((nn(b)|0)<<2)|0;a=0;g=eo(b)|0;while(1){if(!g)break;x=g+16|0;c[v+(a<<2)>>2]=c[(c[x>>2]|0)+112>>2];c[(c[x>>2]|0)+112>>2]=0;a=a+1|0;g=fo(b,g)|0}o=D-K|0;p=B-K|0;q=D+K|0;r=B+K|0;n=1;while(1){a=c[J>>2]|0;if((n|0)>(c[a+180>>2]|0))break;m=c[(c[a+184>>2]|0)+(n<<2)>>2]|0;i=c[m+16>>2]|0;t=+h[i+16>>3];a=~~(t+(t>=0.0?.5:-.5));t=+h[i+24>>3];g=~~(t+(t>=0.0?.5:-.5));t=+h[i+32>>3];f=~~(t+(t>=0.0?.5:-.5));t=+h[i+40>>3];i=~~(t+(t>=0.0?.5:-.5));b:do if((f|0)>(a|0)&(i|0)>(g|0)){a=o+a|0;j=p+g|0;f=q+f|0;k=r+i|0;if((a|0)>-1)g=(a|0)/(e|0)|0;else g=((a+1|0)/(e|0)|0)+-1|0;if((j|0)>-1)j=(j|0)/(e|0)|0;else j=((j+1|0)/(e|0)|0)+-1|0;if((f|0)>-1)i=(f|0)/(e|0)|0;else i=((f+1|0)/(e|0)|0)+-1|0;if((k|0)>-1)f=(k|0)/(e|0)|0;else f=((k+1|0)/(e|0)|0)+-1|0;while(1){if((g|0)>(i|0))break;else a=j;while(1){if((a|0)>(f|0))break;Dx(L,g,a);a=a+1|0}g=g+1|0}a=eo(m)|0;while(1){if(!a)break b;c[(c[a+16>>2]|0)+212>>2]=m;a=fo(m,a)|0}}while(0);n=n+1|0}r=z+8|0;s=H+4|0;t=+(K|0);u=I+4|0;q=A+4|0;p=y+4|0;o=eo(b)|0;while(1){if(!o)break;PA(z,o);R=+h[z>>3];Q=+h[r>>3];m=D+~~(R+(R>=0.0?.5:-.5))|0;c[H>>2]=m;n=B+~~(Q+(Q>=0.0?.5:-.5))|0;c[s>>2]=n;g=o+16|0;a=c[g>>2]|0;c:do if(!(c[a+212>>2]|0)){c[I>>2]=~~((+h[a+96>>3]+ +h[a+88>>3])*.5+t);c[u>>2]=~~(+h[a+80>>3]*.5+t);c[E>>2]=c[H>>2];c[E+4>>2]=c[H+4>>2];c[F>>2]=c[I>>2];c[F+4>>2]=c[I+4>>2];Ys(A,E,F);a=c[A>>2]|0;f=c[q>>2]|0;c[E>>2]=c[H>>2];c[E+4>>2]=c[H+4>>2];c[F>>2]=c[I>>2];c[F+4>>2]=c[I+4>>2];Zs(y,E,F);i=c[y>>2]|0;j=c[p>>2]|0;if((a|0)>-1)g=(a|0)/(e|0)|0;else g=((a+1|0)/(e|0)|0)+-1|0;if((f|0)>-1)k=(f|0)/(e|0)|0;else k=((f+1|0)/(e|0)|0)+-1|0;if((i|0)>-1)i=(i|0)/(e|0)|0;else i=((i+1|0)/(e|0)|0)+-1|0;if((j|0)>-1)f=(j|0)/(e|0)|0;else f=((j+1|0)/(e|0)|0)+-1|0;while(1){if((g|0)>(i|0))break;else a=k;while(1){if((a|0)>(f|0))break;Dx(L,g,a);a=a+1|0}g=g+1|0}if((m|0)>-1)a=(m|0)/(e|0)|0;else a=((m+1|0)/(e|0)|0)+-1|0;c[H>>2]=a;if((n|0)>-1)a=(n|0)/(e|0)|0;else a=((n+1|0)/(e|0)|0)+-1|0;c[s>>2]=a;a=Qm(C,o)|0;while(1){if(!a)break c;c[F>>2]=c[H>>2];c[F+4>>2]=c[H+4>>2];_s(a,F,L,D,B,e,G);a=Sm(C,a)|0}}else{if((m|0)>-1)a=(m|0)/(e|0)|0;else a=((m+1|0)/(e|0)|0)+-1|0;c[H>>2]=a;if((n|0)>-1)a=(n|0)/(e|0)|0;else a=((n+1|0)/(e|0)|0)+-1|0;c[s>>2]=a;a=Qm(C,o)|0;while(1){if(!a)break c;if((c[(c[g>>2]|0)+212>>2]|0)!=(c[(c[(c[((c[a>>2]&3|0)==2?a:a+-48|0)+40>>2]|0)+16>>2]|0)+212>>2]|0)){c[F>>2]=c[H>>2];c[F+4>>2]=c[H+4>>2];_s(a,F,L,D,B,e,G)}a=Sm(C,a)|0}}while(0);o=fo(b,o)|0}a=0;g=eo(b)|0;while(1){if(!g)break;c[(c[g+16>>2]|0)+112>>2]=c[v+(a<<2)>>2];a=a+1|0;g=fo(b,g)|0}$I(v)}else{r=v+8|0;s=H+4|0;t=+(K|0);u=I+4|0;q=w+4|0;p=x+4|0;o=eo(b)|0;while(1){if(!o)break a;PA(v,o);Q=+h[v>>3];R=+h[r>>3];m=D+~~(Q+(Q>=0.0?.5:-.5))|0;c[H>>2]=m;n=B+~~(R+(R>=0.0?.5:-.5))|0;c[s>>2]=n;a=c[o+16>>2]|0;c[I>>2]=~~((+h[a+96>>3]+ +h[a+88>>3])*.5+t);c[u>>2]=~~(+h[a+80>>3]*.5+t);c[E>>2]=c[H>>2];c[E+4>>2]=c[H+4>>2];c[F>>2]=c[I>>2];c[F+4>>2]=c[I+4>>2];Ys(w,E,F);a=c[w>>2]|0;f=c[q>>2]|0;c[E>>2]=c[H>>2];c[E+4>>2]=c[H+4>>2];c[F>>2]=c[I>>2];c[F+4>>2]=c[I+4>>2];Zs(x,E,F);i=c[x>>2]|0;j=c[p>>2]|0;if((a|0)>-1)g=(a|0)/(e|0)|0;else g=((a+1|0)/(e|0)|0)+-1|0;if((f|0)>-1)k=(f|0)/(e|0)|0;else k=((f+1|0)/(e|0)|0)+-1|0;if((i|0)>-1)i=(i|0)/(e|0)|0;else i=((i+1|0)/(e|0)|0)+-1|0;if((j|0)>-1)f=(j|0)/(e|0)|0;else f=((j+1|0)/(e|0)|0)+-1|0;while(1){if((g|0)>(i|0))break;else a=k;while(1){if((a|0)>(f|0))break;Dx(L,g,a);a=a+1|0}g=g+1|0}if((m|0)>-1)a=(m|0)/(e|0)|0;else a=((m+1|0)/(e|0)|0)+-1|0;c[H>>2]=a;if((n|0)>-1)a=(n|0)/(e|0)|0;else a=((n+1|0)/(e|0)|0)+-1|0;c[s>>2]=a;a=Qm(C,o)|0;while(1){if(!a)break;c[F>>2]=c[H>>2];c[F+4>>2]=c[H+4>>2];_s(a,F,L,D,B,e,G);a=Sm(C,a)|0}o=fo(b,o)|0}}while(0);i=d+4|0;c[i>>2]=Hx(L)|0;j=d+8|0;c[j>>2]=Gx(L)|0;g=c[J>>2]|0;Q=+(K<<1|0);R=+(e|0);a=~~+N(+((+h[g+32>>3]+Q-+h[g+16>>3])/R));g=~~+N(+((+h[g+40>>3]+Q-+h[g+24>>3])/R));c[d>>2]=g+a;d:do if(0>2){f=c[13918]|0;d=En(b)|0;b=c[j>>2]|0;c[M>>2]=d;c[M+4>>2]=b;c[M+8>>2]=a;c[M+12>>2]=g;AL(f,84395,M)|0;a=0;while(1){if((a|0)>=(c[j>>2]|0))break d;b=c[i>>2]|0;M=c[b+(a<<3)+4>>2]|0;c[O>>2]=c[b+(a<<3)>>2];c[O+4>>2]=M;AL(f,84422,O)|0;a=a+1|0}}while(0);Ax(L);l=P;return}function Us(a,b){a=a|0;b=b|0;return (c[c[b>>2]>>2]|0)-(c[c[a>>2]>>2]|0)|0}function Vs(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;j=l;l=l+32|0;h=j+16|0;i=j;k=c[a+4>>2]|0;g=c[a+8>>2]|0;c[d>>2]=0-(c[e>>2]|0);f=d+4|0;c[f>>2]=0-(c[e+4>>2]|0);a=0;e=k;while(1){if((a|0)>=(g|0))break;c[h>>2]=c[e>>2];c[h+4>>2]=c[e+4>>2];Bx(b,h);a=a+1|0;e=e+8|0}if(0>1){k=c[13918]|0;b=c[d>>2]|0;d=c[f>>2]|0;c[i>>2]=g;c[i+4>>2]=b;c[i+8>>2]=d;AL(k,84369,i)|0}l=j;return}function Ws(a,b,d,e,f,g,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0,k=0,l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0;k=c[b+12>>2]|0;l=+h[i+(k<<5)>>3];m=+h[i+(k<<5)+8>>3];n=+h[i+(k<<5)+16>>3];o=+h[i+(k<<5)+24>>3];if(!((a|0)==0?(q=+(g<<1|0),p=+(f|0),(Xs((~~+N(+((q-l+n)/p))|0)/-2|0,(~~+N(+((q-m+o)/p))|0)/-2|0,b,d,e,f,i)|0)!=0):0))j=3;a:do if((j|0)==3?(Xs(0,0,b,d,e,f,i)|0)==0:0)if((~~+N(+(n-l))|0)<(~~+N(+(o-m))|0)){k=1;while(1){j=0-k|0;a=0;while(1){if((a|0)<=(j|0)){g=j;break}if(Xs(j,a,b,d,e,f,i)|0)break a;a=a+-1|0}while(1){if((g|0)>=(k|0))break;if(Xs(g,a,b,d,e,f,i)|0)break a;g=g+1|0}while(1){if((a|0)>=(k|0))break;if(Xs(g,a,b,d,e,f,i)|0)break a;a=a+1|0}while(1){if((g|0)<=(j|0))break;if(Xs(g,a,b,d,e,f,i)|0)break a;g=g+-1|0}while(1){if((a|0)<=0)break;if(!(Xs(g,a,b,d,e,f,i)|0))a=a+-1|0;else break a}k=k+1|0}}else{k=1;while(1){j=0-k|0;a=0;while(1){if((a|0)>=(k|0)){g=j;break}if(Xs(a,j,b,d,e,f,i)|0)break a;a=a+1|0}while(1){if((g|0)>=(k|0))break;if(Xs(a,g,b,d,e,f,i)|0)break a;g=g+1|0}while(1){if((a|0)<=(j|0))break;if(Xs(a,g,b,d,e,f,i)|0)break a;a=a+-1|0}while(1){if((g|0)<=(j|0))break;if(Xs(a,g,b,d,e,f,i)|0)break a;g=g+-1|0}while(1){if((a|0)>=0)break;if(!(Xs(a,g,b,d,e,f,i)|0))a=a+1|0;else break a}k=k+1|0}}while(0);return}function Xs(a,b,d,e,f,g,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0.0,x=0.0;t=l;l=l+48|0;r=t+32|0;s=t+8|0;q=t;m=d+4|0;o=c[d+8>>2]|0;p=q+4|0;j=c[m>>2]|0;k=0;while(1){if((k|0)>=(o|0)){n=5;break}v=j;u=c[v+4>>2]|0;c[q>>2]=(c[v>>2]|0)+a;c[p>>2]=u+b;c[r>>2]=c[q>>2];c[r+4>>2]=c[q+4>>2];if(Ex(e,r)|0){j=0;break}j=j+8|0;k=k+1|0}if((n|0)==5){d=c[d+12>>2]|0;x=+h[i+(d<<5)>>3];w=+h[i+(d<<5)+8>>3];c[f>>2]=(O(g,a)|0)-~~(x+(x>=0.0?.5:-.5));d=f+4|0;c[d>>2]=(O(g,b)|0)-~~(w+(w>=0.0?.5:-.5));j=c[m>>2]|0;k=0;while(1){if((k|0)>=(o|0))break;u=j;v=c[u+4>>2]|0;c[q>>2]=(c[u>>2]|0)+a;c[p>>2]=v+b;c[r>>2]=c[q>>2];c[r+4>>2]=c[q+4>>2];Bx(e,r);j=j+8|0;k=k+1|0}if(0>1){j=c[13918]|0;u=c[f>>2]|0;v=c[d>>2]|0;c[s>>2]=o;c[s+4>>2]=a;c[s+8>>2]=b;c[s+12>>2]=u;c[s+16>>2]=v;AL(j,84335,s)|0;j=1}else j=1}l=t;return j|0}function Ys(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=(c[b+4>>2]|0)-(c[d+4>>2]|0)|0;c[a>>2]=(c[b>>2]|0)-(c[d>>2]|0);c[a+4>>2]=e;return}function Zs(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=(c[d+4>>2]|0)+(c[b+4>>2]|0)|0;c[a>>2]=(c[d>>2]|0)+(c[b>>2]|0);c[a+4>>2]=e;return}function _s(a,b,d,e,f,g,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0.0,k=0.0,m=0,n=0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=l;l=l+112|0;x=A+96|0;w=A+80|0;r=A+48|0;s=A+32|0;y=A+16|0;z=A;n=A+64|0;h[y>>3]=+(c[b>>2]|0);t=y+8|0;h[t>>3]=+(c[b+4>>2]|0);a:do if((i|0)!=0?(u=a+16|0,m=c[(c[u>>2]|0)+8>>2]|0,(m|0)!=0):0){q=+(e|0);p=+(f|0);o=1.0/+(g|0);n=z+8|0;i=0;while(1){if((i|0)>=(c[m+4>>2]|0))break a;f=c[m>>2]|0;a=c[f+(i*48|0)>>2]|0;b=c[f+(i*48|0)+4>>2]|0;g=c[f+(i*48|0)+8>>2]|0;e=c[f+(i*48|0)+12>>2]|0;m=f+(i*48|0)+16|0;c[r>>2]=c[m>>2];c[r+4>>2]=c[m+4>>2];c[r+8>>2]=c[m+8>>2];c[r+12>>2]=c[m+12>>2];f=f+(i*48|0)+32|0;c[s>>2]=c[f>>2];c[s+4>>2]=c[f+4>>2];c[s+8>>2]=c[f+8>>2];c[s+12>>2]=c[f+12>>2];if(!g){c[y>>2]=c[a>>2];c[y+4>>2]=c[a+4>>2];c[y+8>>2]=c[a+8>>2];c[y+12>>2]=c[a+12>>2];m=a+16|0;c[z>>2]=c[m>>2];c[z+4>>2]=c[m+4>>2];c[z+8>>2]=c[m+8>>2];c[z+12>>2]=c[m+12>>2];m=2}else{c[y>>2]=c[r>>2];c[y+4>>2]=c[r+4>>2];c[y+8>>2]=c[r+8>>2];c[y+12>>2]=c[r+12>>2];c[z>>2]=c[a>>2];c[z+4>>2]=c[a+4>>2];c[z+8>>2]=c[a+8>>2];c[z+12>>2]=c[a+12>>2];m=1}j=+h[y>>3]+q;h[y>>3]=j;k=+h[t>>3]+p;h[t>>3]=k;if(!(j>=0.0))j=(j+1.0)*o+-1.0;else j=j*o;h[y>>3]=j;if(!(k>=0.0))j=(k+1.0)*o+-1.0;else j=k*o;h[t>>3]=j;j=+h[z>>3]+q;h[z>>3]=j;k=+h[n>>3]+p;h[n>>3]=k;if(!(j>=0.0))j=(j+1.0)*o+-1.0;else j=j*o;h[z>>3]=j;if(!(k>=0.0))j=(k+1.0)*o+-1.0;else j=k*o;h[n>>3]=j;c[w>>2]=c[y>>2];c[w+4>>2]=c[y+4>>2];c[w+8>>2]=c[y+8>>2];c[w+12>>2]=c[y+12>>2];c[x>>2]=c[z>>2];c[x+4>>2]=c[z+4>>2];c[x+8>>2]=c[z+8>>2];c[x+12>>2]=c[z+12>>2];Ls(w,x,d);while(1){if((m|0)>=(b|0))break;c[y>>2]=c[z>>2];c[y+4>>2]=c[z+4>>2];c[y+8>>2]=c[z+8>>2];c[y+12>>2]=c[z+12>>2];g=a+(m<<4)|0;c[z>>2]=c[g>>2];c[z+4>>2]=c[g+4>>2];c[z+8>>2]=c[g+8>>2];c[z+12>>2]=c[g+12>>2];j=+h[z>>3]+q;h[z>>3]=j;k=+h[n>>3]+p;h[n>>3]=k;if(!(j>=0.0))j=(j+1.0)*o+-1.0;else j=j*o;h[z>>3]=j;if(!(k>=0.0))j=(k+1.0)*o+-1.0;else j=k*o;h[n>>3]=j;c[w>>2]=c[y>>2];c[w+4>>2]=c[y+4>>2];c[w+8>>2]=c[y+8>>2];c[w+12>>2]=c[y+12>>2];c[x>>2]=c[z>>2];c[x+4>>2]=c[z+4>>2];c[x+8>>2]=c[z+8>>2];c[x+12>>2]=c[z+12>>2];Ls(w,x,d);m=m+1|0}if(e|0){c[y>>2]=c[z>>2];c[y+4>>2]=c[z+4>>2];c[y+8>>2]=c[z+8>>2];c[y+12>>2]=c[z+12>>2];c[z>>2]=c[s>>2];c[z+4>>2]=c[s+4>>2];c[z+8>>2]=c[s+8>>2];c[z+12>>2]=c[s+12>>2];j=+h[z>>3]+q;h[z>>3]=j;k=+h[n>>3]+p;h[n>>3]=k;if(!(j>=0.0))j=(j+1.0)*o+-1.0;else j=j*o;h[z>>3]=j;if(!(k>=0.0))j=(k+1.0)*o+-1.0;else j=k*o;h[n>>3]=j;c[w>>2]=c[y>>2];c[w+4>>2]=c[y+4>>2];c[w+8>>2]=c[y+8>>2];c[w+12>>2]=c[y+12>>2];c[x>>2]=c[z>>2];c[x+4>>2]=c[z+4>>2];c[x+8>>2]=c[z+8>>2];c[x+12>>2]=c[z+12>>2];Ls(w,x,d)}i=i+1|0;m=c[(c[u>>2]|0)+8>>2]|0}}else v=4;while(0);if((v|0)==4){PA(n,c[((c[a>>2]&3|0)==2?a:a+-48|0)+40>>2]|0);c[z>>2]=c[n>>2];c[z+4>>2]=c[n+4>>2];c[z+8>>2]=c[n+8>>2];c[z+12>>2]=c[n+12>>2];j=+h[z>>3]+ +(e|0);h[z>>3]=j;m=z+8|0;k=+h[m>>3]+ +(f|0);h[m>>3]=k;if(!(j>=0.0))j=(j+1.0)/+(g|0)+-1.0;else j=j/+(g|0);h[z>>3]=j;if(!(k>=0.0))j=(k+1.0)/+(g|0)+-1.0;else j=k/+(g|0);h[m>>3]=j;c[w>>2]=c[y>>2];c[w+4>>2]=c[y+4>>2];c[w+8>>2]=c[y+8>>2];c[w+12>>2]=c[y+12>>2];c[x>>2]=c[z>>2];c[x+4>>2]=c[z+4>>2];c[x+8>>2]=c[z+8>>2];c[x+12>>2]=c[z+12>>2];Ls(w,x,d)}l=A;return}function $s(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,l=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0,t=0;a:do if((a|0)<1)f=0-a|0;else{s=(e|0)==0;q=(f|0)==0;j=0;while(1){if((j|0)==(a|0)){f=0;break a}r=c[b+(j<<2)>>2]|0;g=s?r:e;k=c[d+(j<<3)>>2]|0;l=c[d+(j<<3)+4>>2]|0;m=+(k|0);n=m*.013888888888888888;o=+(l|0);p=o*.013888888888888888;i=eo(r)|0;while(1){if(!i)break;f=c[i+16>>2]|0;t=c[f+132>>2]|0;h[t>>3]=+h[t>>3]+n;t=t+8|0;h[t>>3]=+h[t>>3]+p;t=f+16|0;h[t>>3]=+h[t>>3]+m;t=f+24|0;h[t>>3]=+h[t>>3]+o;f=c[f+108>>2]|0;if(f|0){t=f+56|0;h[t>>3]=+h[t>>3]+m;t=f+64|0;h[t>>3]=+h[t>>3]+o}b:do if(!q){f=Qm(g,i)|0;while(1){if(!f)break b;at(f,k,l);f=Sm(g,f)|0}}while(0);i=fo(r,i)|0}bt(r,k,l);j=j+1|0}}while(0);return f|0}function at(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0.0,k=0,l=0.0,m=0,n=0;e=c[a+16>>2]|0;a=c[e+96>>2]|0;if(a|0){m=a+56|0;h[m>>3]=+h[m>>3]+ +(b|0);m=a+64|0;h[m>>3]=+h[m>>3]+ +(d|0)}a=c[e+108>>2]|0;if(a|0){m=a+56|0;h[m>>3]=+h[m>>3]+ +(b|0);m=a+64|0;h[m>>3]=+h[m>>3]+ +(d|0)}a=c[e+100>>2]|0;if(a|0){m=a+56|0;h[m>>3]=+h[m>>3]+ +(b|0);m=a+64|0;h[m>>3]=+h[m>>3]+ +(d|0)}a=c[e+104>>2]|0;if(a|0){m=a+56|0;h[m>>3]=+h[m>>3]+ +(b|0);m=a+64|0;h[m>>3]=+h[m>>3]+ +(d|0)}m=c[e+8>>2]|0;a:do if(m|0){l=+(b|0);j=+(d|0);b=c[m+4>>2]|0;a=0;while(1){if((a|0)>=(b|0))break a;k=c[m>>2]|0;d=c[k+(a*48|0)>>2]|0;f=c[k+(a*48|0)+4>>2]|0;g=c[k+(a*48|0)+8>>2]|0;i=c[k+(a*48|0)+12>>2]|0;e=0;while(1){if((e|0)>=(f|0))break;n=d+(e<<4)|0;h[n>>3]=+h[n>>3]+l;n=d+(e<<4)+8|0;h[n>>3]=+h[n>>3]+j;e=e+1|0}if(g|0){n=k+(a*48|0)+16|0;h[n>>3]=+h[n>>3]+l;n=k+(a*48|0)+24|0;h[n>>3]=+h[n>>3]+j}if(i|0){n=k+(a*48|0)+32|0;h[n>>3]=+h[n>>3]+l;n=k+(a*48|0)+40|0;h[n>>3]=+h[n>>3]+j}a=a+1|0}}while(0);return}function bt(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0.0,i=0.0,j=0,k=0.0,l=0.0,m=0,n=0.0,o=0;j=b+16|0;b=c[j>>2]|0;o=b+16|0;m=b+24|0;f=b+32|0;b=b+40|0;g=+(d|0);l=+h[f>>3]+g;i=+(e|0);n=+h[m>>3]+i;k=+h[b>>3]+i;h[o>>3]=+h[o>>3]+g;h[m>>3]=n;h[f>>3]=l;h[b>>3]=k;b=c[j>>2]|0;f=c[b+12>>2]|0;if((f|0)!=0?(a[f+81>>0]|0)!=0:0){o=f+56|0;h[o>>3]=+h[o>>3]+g;f=f+64|0;h[f>>3]=+h[f>>3]+i;f=1}else f=1;while(1){if((f|0)>(c[b+180>>2]|0))break;bt(c[(c[b+184>>2]|0)+(f<<2)>>2]|0,d,e);f=f+1|0;b=c[j>>2]|0}return}function ct(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=Ms(a,b,d,e)|0;if(!f)a=1;else{a=$s(a,b,f,d,c[e+12>>2]|0)|0;$I(f)}return a|0}function dt(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;p=l;l=l+32|0;o=p;n=ct(a,b,d,e)|0;if(!n){eB(d);m=(c[d+16>>2]|0)+16|0;c[o>>2]=c[m>>2];c[o+4>>2]=c[m+4>>2];c[o+8>>2]=c[m+8>>2];c[o+12>>2]=c[m+12>>2];c[o+16>>2]=c[m+16>>2];c[o+20>>2]=c[m+20>>2];c[o+24>>2]=c[m+24>>2];c[o+28>>2]=c[m+28>>2];f=o+8|0;g=o+16|0;i=o+24|0;e=0;while(1){if((e|0)>=(a|0))break;k=c[(c[b+(e<<2)>>2]|0)+16>>2]|0;j=c[k+180>>2]|0;k=k+184|0;d=1;while(1){if((d|0)>(j|0))break;r=(c[(c[(c[k>>2]|0)+(d<<2)>>2]|0)+16>>2]|0)+16|0;h[o>>3]=+h[(+h[o>>3]<+h[r>>3]?o:r)>>3];r=c[(c[(c[k>>2]|0)+(d<<2)>>2]|0)+16>>2]|0;q=r+16|0;h[f>>3]=+h[(+h[f>>3]<+h[r+24>>3]?o:q)+8>>3];h[g>>3]=+h[(+h[g>>3]>+h[r+32>>3]?o:q)+16>>3];h[i>>3]=+h[(+h[i>>3]>+h[r+40>>3]?o:q)+24>>3];d=d+1|0}e=e+1|0}c[m>>2]=c[o>>2];c[m+4>>2]=c[o+4>>2];c[m+8>>2]=c[o+8>>2];c[m+12>>2]=c[o+12>>2];c[m+16>>2]=c[o+16>>2];c[m+20>>2]=c[o+20>>2];c[m+24>>2]=c[o+24>>2];c[m+28>>2]=c[o+28>>2]}l=p;return n|0}function et(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;g=l;l=l+16|0;f=g;if(!e)ma(84553,84559,1400,84566);d=ft(a,d,d)|0;c[e+8>>2]=d;if(0){h=c[13918]|0;c[f>>2]=d;AL(h,84578,f)|0}c[e+12>>2]=0;c[e+20>>2]=0;gt(a,b,e)|0;l=g;return c[e+16>>2]|0}function ft(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;i=l;l=l+16|0;h=i;f=i+4|0;g=Jm(b,84708)|0;a:do if(g){c[h>>2]=f;h=(dM(g,122187,h)|0)==1;b=c[f>>2]|0;if(h&(b|0)>-1)d=b;else{switch(a[g>>0]|0){case 84:case 116:break;default:break a}d=e}}while(0);l=i;return d|0}function gt(a,b,c){a=a|0;b=b|0;c=c|0;return ht(Jm(a,84591)|0,b,c)|0}function ht(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0.0;u=l;l=l+64|0;r=u+40|0;q=u+32|0;t=u+24|0;s=u+16|0;m=u+8|0;k=u;i=u+48|0;j=u+44|0;if(!e)ma(84553,84559,1292,84600);o=e+28|0;c[o>>2]=0;p=e+16|0;c[p>>2]=d;n=e+4|0;c[n>>2]=0;c[e+24>>2]=0;a:do if(b|0?(f=a[b>>0]|0,f<<24>>24):0)switch(f<<24>>24|0){case 97:if(!(WJ(b,84618,5)|0)){c[p>>2]=4;m=it(b+5|0,e)|0;c[k>>2]=j;m=(dM(m,122187,k)|0)>0;d=c[j>>2]|0;if(!(m&(d|0)>0))break a;c[n>>2]=d;break a}else{if(WJ(b,84624,6)|0)break a;c[p>>2]=5;c[m>>2]=i;m=(dM(b+5|0,84631,m)|0)>0;v=+g[i>>2];g[e>>2]=m&v>0.0?v:1.0;break a}case 99:{if(f<<24>>24!=99)break a;if(yJ(b,93039)|0)break a;c[p>>2]=1;break a}case 103:{if(f<<24>>24!=103)break a;if(yJ(b,96286)|0)break a;c[p>>2]=3;break a}case 110:{if(f<<24>>24!=110)break a;if(yJ(b,96273)|0)break a;c[p>>2]=2;break a}default:break a}while(0);if(0){d=c[13918]|0;YL(84634,11,1,d)|0;c[s>>2]=jt(c[p>>2]|0)|0;AL(d,84646,s)|0;if((c[p>>2]|0)==5){h[t>>3]=+g[e>>2];AL(d,84659,t)|0}c[q>>2]=c[n>>2];AL(d,84672,q)|0;c[r>>2]=c[o>>2];AL(d,84685,r)|0}l=u;return c[p>>2]|0}function it(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;a:do if((a[b>>0]|0)==95){f=d+28|0;e=1;while(1){b=b+1|0;b:while(1){if(!e)break a;d=a[b>>0]|0;if(!(d<<24>>24))break a;switch(d<<24>>24|0){case 99:{g=10;break b}case 105:{g=9;break b}case 117:{g=11;break b}case 116:{g=12;break b}case 98:{d=32;break b}case 108:{g=7;break b}case 114:{g=8;break b}default:e=0}}if((g|0)==7){g=0;d=4}else if((g|0)==8){g=0;d=8}else if((g|0)==9){g=0;d=64}else if((g|0)==10){g=0;d=1}else if((g|0)==11){g=0;d=2}else if((g|0)==12){g=0;d=16}c[f>>2]=c[f>>2]|d}}while(0);return b|0}function jt(a){a=a|0;switch(a|0){case 1:{a=93039;break}case 2:{a=96273;break}case 3:{a=96286;break}case 4:{a=84618;break}case 5:{a=84624;break}default:a=84698}return a|0}function kt(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+96|0;k=n;m=n+80|0;do if(a){if(!e){e=aJ(1,20)|0;c[e+4>>2]=d>>>0>80?d:80}d=c[e>>2]|0;j=c[e+4>>2]|0;if(!d){h=100;d=a;i=aJ(100,j)|0}else{h=d+100|0;i=bJ(c[e+8>>2]|0,O(h,j)|0)|0;WN(i+(O(j,d)|0)|0,0,j*100|0)|0;d=a}while(1){d=lt(k,d,b,m)|0;if(!d)break;a=c[e>>2]|0;f=h<<1;g=O(h,j)|0;if((a|0)==(h|0)){i=bJ(i,O(f,j)|0)|0;WN(i+g|0,0,g|0)|0;a=c[e>>2]|0}else f=h;a=i+(O(a,j)|0)|0;g=k;h=a+80|0;do{c[a>>2]=c[g>>2];a=a+4|0;g=g+4|0}while((a|0)<(h|0));c[e>>2]=(c[e>>2]|0)+1;h=f}if(c[m>>2]|0){m=e+16|0;c[m>>2]=c[m>>2]|1}d=c[e>>2]|0;if(!d){$I(i);$I(e);e=0;break}else{c[e+8>>2]=bJ(i,O(d,j)|0)|0;break}}while(0);l=n;return e|0}function lt(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;j=l;l=l+80|0;h=j+64|0;i=j;c[f>>2]=0;do{g=a[d>>0]|0;d=d+1|0}while((YJ(g)|0)!=0);a:do switch(g|0){case 69:{c[b>>2]=0;d=mt(d,b+8|0)|0;if(!d){c[f>>2]=1;d=0;break a}if(e)c[b+72>>2]=c[e>>2];break}case 101:{c[b>>2]=1;d=mt(d,b+8|0)|0;if(!d){c[f>>2]=1;d=0;break a}if(e)c[b+72>>2]=c[e>>2];break}case 80:{c[b>>2]=2;d=nt(d,b+8|0)|0;if(!d){c[f>>2]=1;d=0;break a}if(e)c[b+72>>2]=c[e+4>>2];break}case 112:{c[b>>2]=3;d=nt(d,b+8|0)|0;if(!d){c[f>>2]=1;d=0;break a}if(e)c[b+72>>2]=c[e+4>>2];break}case 98:{c[b>>2]=4;d=nt(d,b+8|0)|0;if(!d){c[f>>2]=1;d=0;break a}if(e)c[b+72>>2]=c[e+8>>2];break}case 66:{c[b>>2]=5;d=nt(d,b+8|0)|0;if(!d){c[f>>2]=1;d=0;break a}if(e)c[b+72>>2]=c[e+8>>2];break}case 99:{d=ot(d,h)|0;if(!d){c[f>>2]=1;d=0;break a}g=pt(c[h>>2]|0,i)|0;c[h>>2]=g;if(!g){c[f>>2]=1;d=0;break a}if(!(c[i>>2]|0)){c[b>>2]=9;c[b+8>>2]=c[i+8>>2];if(!e)break a;c[b+72>>2]=c[e+24>>2];break a}else{c[b>>2]=14;f=b+8|0;g=i;h=f+64|0;do{c[f>>2]=c[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));if(!e)break a;c[b+72>>2]=c[e+40>>2];break a}}case 67:{d=ot(d,h)|0;if(!d){c[f>>2]=1;d=0;break a}g=pt(c[h>>2]|0,i)|0;c[h>>2]=g;if(!g){c[f>>2]=1;d=0;break a}if(!(c[i>>2]|0)){c[b>>2]=8;c[b+8>>2]=c[i+8>>2];if(!e)break a;c[b+72>>2]=c[e+20>>2];break a}else{c[b>>2]=13;f=b+8|0;g=i;h=f+64|0;do{c[f>>2]=c[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));if(!e)break a;c[b+72>>2]=c[e+40>>2];break a}}case 76:{c[b>>2]=6;d=nt(d,b+8|0)|0;if(!d){c[f>>2]=1;d=0;break a}if(e)c[b+72>>2]=c[e+12>>2];break}case 84:{c[b>>2]=7;d=qt(d,b+8|0)|0;if(!d){c[f>>2]=1;d=0;break a}d=qt(d,b+16|0)|0;if(!d){c[f>>2]=1;d=0;break a}d=rt(d,b+24|0)|0;if(!d){c[f>>2]=1;d=0;break a}d=qt(d,b+32|0)|0;if(!d){c[f>>2]=1;d=0;break a}d=ot(d,b+40|0)|0;if(!d){c[f>>2]=1;d=0;break a}if(e)c[b+72>>2]=c[e+16>>2];break}case 70:{c[b>>2]=10;d=qt(d,b+8|0)|0;if(!d){c[f>>2]=1;d=0;break a}d=ot(d,b+16|0)|0;if(!d){c[f>>2]=1;d=0;break a}if(e)c[b+72>>2]=c[e+28>>2];break}case 83:{c[b>>2]=11;d=ot(d,b+8|0)|0;if(!d){c[f>>2]=1;d=0;break a}if(e)c[b+72>>2]=c[e+32>>2];break}case 73:{c[b>>2]=12;d=mt(d,b+8|0)|0;if(!d){c[f>>2]=1;d=0;break a}d=ot(d,b+40|0)|0;if(!d){c[f>>2]=1;d=0;break a}if(e)c[b+72>>2]=c[e+36>>2];break}case 116:{c[b>>2]=15;d=st(d,b+8|0)|0;if(!d){c[f>>2]=1;d=0;break a}if(e)c[b+72>>2]=c[e+44>>2];break}case 0:{d=0;break}default:{c[f>>2]=1;d=0}}while(0);l=j;return d|0}function mt(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0;i=l;l=l+16|0;e=i;h[b>>3]=+uM(a,e);f=c[e>>2]|0;if(((f|0)!=(a|0)?(h[b+8>>3]=+uM(f,e),g=c[e>>2]|0,(f|0)!=(g|0)):0)?(h[b+16>>3]=+uM(g,e),d=c[e>>2]|0,(g|0)!=(d|0)):0){h[b+24>>3]=+uM(d,e);a=c[e>>2]|0;a=(d|0)==(a|0)?0:a}else a=0;l=i;return a|0}function nt(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0;k=l;l=l+16|0;j=k+4|0;g=k;a=tt(a,j)|0;do if(a){d=c[j>>2]|0;i=aJ(d,24)|0;c[b>>2]=d;e=i;f=0;while(1){if((f|0)>=(d|0)){d=9;break}h[e>>3]=+uM(a,g);d=c[g>>2]|0;if((a|0)==(d|0)){d=5;break}h[e+8>>3]=+uM(d,g);a=c[g>>2]|0;if((d|0)==(a|0)){d=7;break}h[e+16>>3]=0.0;e=e+24|0;d=c[b>>2]|0;f=f+1|0}if((d|0)==5){c[j>>2]=f;$I(i);a=0;break}else if((d|0)==7){c[j>>2]=f;$I(i);a=0;break}else if((d|0)==9){c[j>>2]=f;c[b+4>>2]=i;break}}else a=0;while(0);l=k;return a|0}function ot(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=l;l=l+16|0;i=j;b=tt(b,i)|0;f=c[i>>2]|0;do if(!((b|0)==0|(f|0)<1)){while(1){h=a[b>>0]|0;e=h<<24>>24==0;if(e^h<<24>>24!=45)b=b+1|0;else break}if(!e){h=aJ(f+1|0,1)|0;g=h;e=f;while(1){b=b+1|0;if((e|0)<=0){e=9;break}e=a[b>>0]|0;if(!(e<<24>>24)){e=8;break}a[g>>0]=e;e=(c[i>>2]|0)+-1|0;c[i>>2]=e;g=g+1|0}if((e|0)==8){$I(h);b=0;break}else if((e|0)==9){a[g>>0]=0;c[d>>2]=h;break}}else b=0}else b=0;while(0);l=j;return b|0}function pt(b,d){b=b|0;d=d|0;var e=0;e=a[b>>0]|0;switch(e|0){case 91:{b=ut(b+1|0,d)|0;break}case 40:{b=vt(b+1|0,d)|0;break}case 47:case 35:{c[d>>2]=0;c[d+8>>2]=b;break}default:if(!(hK(e)|0))b=0;else{c[d>>2]=0;c[d+8>>2]=b}}return b|0}function qt(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0;f=l;l=l+16|0;d=f;e=+uM(a,d);d=c[d>>2]|0;if((d|0)==(a|0))d=0;else h[b>>3]=e;l=f;return d|0}function rt(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=tt(a,e)|0;e=c[e>>2]|0;c[b>>2]=(e|0)<0?0:e|0?2:1;l=d;return a|0}function st(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[b>>2]=ZJ(a,e,10)|0;b=c[e>>2]|0;l=d;return ((b|0)==(a|0)?0:b)|0}function tt(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[b>>2]=CL(a,e,10)|0;b=c[e>>2]|0;l=d;return ((b|0)==(a|0)?0:b)|0}function ut(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+16|0;m=o;c[b>>2]=1;n=b+8|0;i=qt(a,n)|0;do if(((((i|0)!=0?(j=qt(i,b+16|0)|0,(j|0)!=0):0)?(e=qt(j,b+24|0)|0,(e|0)!=0):0)?(f=qt(e,b+32|0)|0,(f|0)!=0):0)?(k=b+40|0,d=tt(f,k)|0,(d|0)!=0):0){b=c[k>>2]|0;f=aJ(b,8)|0;e=0;while(1){if((e|0)>=(b|0)){d=13;break}d=qt(d,m)|0;if(!d){d=9;break}g[f+(e<<3)>>2]=+h[m>>3];d=ot(d,f+(e<<3)+4|0)|0;if(!d){d=12;break}e=e+1|0;b=c[k>>2]|0}if((d|0)==9){$I(f);a=0;break}else if((d|0)==12){$I(f);a=0;break}else if((d|0)==13){c[n+36>>2]=f;break}}else a=0;while(0);l=o;return a|0}function vt(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+16|0;n=p;c[b>>2]=2;k=qt(a,b+8|0)|0;do if(((((((k|0)!=0?(m=qt(k,b+16|0)|0,(m|0)!=0):0)?(e=qt(m,b+24|0)|0,(e|0)!=0):0)?(f=qt(e,b+32|0)|0,(f|0)!=0):0)?(i=qt(f,b+40|0)|0,(i|0)!=0):0)?(j=qt(i,b+48|0)|0,(j|0)!=0):0)?(o=b+56|0,d=tt(j,o)|0,(d|0)!=0):0){e=c[o>>2]|0;i=aJ(e,8)|0;f=0;while(1){if((f|0)>=(e|0)){d=15;break}d=qt(d,n)|0;if(!d){d=11;break}g[i+(f<<3)>>2]=+h[n>>3];d=ot(d,i+(f<<3)+4|0)|0;if(!d){d=14;break}f=f+1|0;e=c[o>>2]|0}if((d|0)==11){$I(i);a=0;break}else if((d|0)==14){$I(i);a=0;break}else if((d|0)==15){c[b+60>>2]=i;break}}else a=0;while(0);l=p;return a|0}function wt(a,b,c){a=a|0;b=b|0;c=c|0;return kt(a,b,c,0)|0}function xt(a){a=a|0;return wt(a,0,0)|0}function yt(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;e=c[a+12>>2]|0;if(a|0){f=c[a+8>>2]|0;g=a+4|0;h=(e|0)==0;b=0;while(1){if((b|0)>=(c[a>>2]|0))break;d=f+(O(c[g>>2]|0,b)|0)|0;if(!h)gb[e&127](d);zt(d);b=b+1|0}$I(f);$I(a)}return}function zt(a){a=a|0;switch(c[a>>2]|0){case 3:case 2:{$I(c[a+8+4>>2]|0);break}case 5:case 4:{$I(c[a+8+4>>2]|0);break}case 6:{$I(c[a+8+4>>2]|0);break}case 7:{$I(c[a+40>>2]|0);break}case 9:case 8:{$I(c[a+8>>2]|0);break}case 14:case 13:{At(a+8|0);break}case 10:{$I(c[a+16>>2]|0);break}case 11:{$I(c[a+8>>2]|0);break}case 12:{$I(c[a+40>>2]|0);break}default:{}}return}function At(a){a=a|0;var b=0,d=0,e=0;switch(c[a>>2]|0){case 1:{e=a+40|0;b=a+8+36|0;a=0;while(1){d=c[b>>2]|0;if((a|0)>=(c[e>>2]|0))break;$I(c[d+(a<<3)+4>>2]|0);a=a+1|0}$I(d);break}case 2:{e=a+56|0;d=a+60|0;a=0;while(1){b=c[d>>2]|0;if((a|0)>=(c[e>>2]|0))break;$I(c[b+(a<<3)+4>>2]|0);a=a+1|0}$I(b);break}default:{}}return}function Bt(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+16|0;k=o+4|0;n=o;c[d>>2]=0;c[e>>2]=(rn(so(b)|0)|0)!=0&1;f=c[42229]|0;a:do if(f|0?(h=Km(b,f)|0,i=a[h>>0]|0,i<<24>>24):0){f=19444;while(1){g=c[f>>2]|0;if(!g)break a;if(i<<24>>24==(a[g>>0]|0)?(yJ(h,g)|0)==0:0)break;f=f+12|0}c[d>>2]=c[f+4>>2];c[e>>2]=c[f+8>>2]}while(0);f=c[42240]|0;if((f|0?(c[e>>2]|0)==1:0)?(j=Km(b,f)|0,a[j>>0]|0):0)Ct(j,e);f=c[42241]|0;if((f|0?(c[d>>2]|0)==1:0)?(m=Km(b,f)|0,a[m>>0]|0):0)Ct(m,d);if(a[(c[b+16>>2]|0)+153>>0]|0){j=b+-48|0;i=so(c[((c[b>>2]&3|0)==2?b:j)+40>>2]|0)|0;m=c[b>>2]&3;Bt(bn(i,c[((m|0)==2?b:j)+40>>2]|0,c[((m|0)==3?b:b+48|0)+40>>2]|0,0,0)|0,k,n);c[e>>2]=c[k>>2]|c[e>>2];c[d>>2]=c[n>>2]|c[d>>2]}l=o;return}function Ct(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+16|0;m=o;k=o+4|0;j=0;e=0;a:while(1){c[d>>2]=e;g=(j|0)<4;h=(j|0)==3;i=(j|0)==0;while(1){if(!(g&(a[b>>0]|0)!=0))break a;c[k>>2]=0;f=Dt(b,k)|0;e=c[k>>2]|0;if(!e){n=5;break a}b=(e|0)==8;if(!(h&b)){if(!(i&b))break;if(a[f>>0]|0)break}c[k>>2]=0;b=f}e=c[d>>2]|e<<(j<<3);j=j+1|0;b=f}if((n|0)==5){c[m>>2]=b;$l(0,84713,m)|0}l=o;return}function Dt(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=l;l=l+16|0;e=f;c[e>>2]=0;d=Et(a,19504,e)|0;if((d|0)==(a|0)){while(1){d=Et(a,19520,e)|0;if((a|0)==(d|0))break;else a=d}d=Et(a,19568,e)|0}a=c[e>>2]|0;if((a|0)!=0&(a&15|0)==0){a=a|1;c[e>>2]=a}c[b>>2]=c[b>>2]|a;l=f;return d|0}function Et(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;while(1){e=c[b>>2]|0;if(!e)break;f=sJ(e)|0;if(!(WJ(a,e,f)|0)){g=4;break}b=b+8|0}if((g|0)==4){c[d>>2]=c[d>>2]|c[b+4>>2];a=a+f|0}return a|0}function Ft(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0,g=0,i=0;g=0;d=0.0;while(1){if((g|0)==4)break;f=b>>(g<<3)&15;e=1336;while(1){if(!(c[e+16>>2]|0))break;if((f|0)==(c[e>>2]|0)){i=6;break}e=e+24|0}if((i|0)==6){i=0;d=+h[e+8>>3]+d}g=g+1|0}return +(d*10.0*+FA(a,c[42233]|0,1.0,0.0))}function Gt(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=+e;f=+f;g=g|0;var i=0.0,j=0.0,k=0.0,m=0,n=0.0,o=0,p=0;p=l;l=l+96|0;m=p+80|0;o=p;k=f>4.0?f*.0875:.35;i=+h[d+8>>3];n=i*k;j=+h[d>>3];k=j*k;e=+h[b>>3];j=e+j;h[m>>3]=j;f=+h[b+8>>3];i=i+f;h[m+8>>3]=i;d=o+64|0;if(!(g&32)){c[d>>2]=c[m>>2];c[d+4>>2]=c[m+4>>2];c[d+8>>2]=c[m+8>>2];c[d+12>>2]=c[m+12>>2];c[o>>2]=c[m>>2];c[o+4>>2]=c[m+4>>2];c[o+8>>2]=c[m+8>>2];c[o+12>>2]=c[m+12>>2];m=o+32|0;c[m>>2]=c[b>>2];c[m+4>>2]=c[b+4>>2];c[m+8>>2]=c[b+8>>2];c[m+12>>2]=c[b+12>>2];f=i;e=j}else{c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];c[o>>2]=c[b>>2];c[o+4>>2]=c[b+4>>2];c[o+8>>2]=c[b+8>>2];c[o+12>>2]=c[b+12>>2];b=o+32|0;c[b>>2]=c[m>>2];c[b+4>>2]=c[m+4>>2];c[b+8>>2]=c[m+8>>2];c[b+12>>2]=c[m+12>>2]}h[o+16>>3]=e+n;h[o+24>>3]=f-k;h[o+48>>3]=e-n;h[o+56>>3]=f+k;do if(!(g&64))if(!(g&128)){ID(a,o+16|0,3,g>>>4&1^1);break}else{ID(a,o+32|0,3,g>>>4&1^1);break}else ID(a,o,3,g>>>4&1^1);while(0);l=p;return}function Ht(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=+e;f=+f;g=g|0;var i=0.0,j=0.0,k=0.0,m=0.0,n=0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0,x=0,y=0;x=l;l=l+160|0;n=x+144|0;w=x;q=e*4.0;y=(g&32|0)==0;q=!(q1.0)|y?0.0:(f+-1.0)*.05/e;u=+h[d+8>>3];r=-u;v=q*r;t=+h[d>>3];q=t*q;r=s*r;s=t*s;p=+h[b>>3];e=p+t;h[n>>3]=e;o=+h[b+8>>3];f=u+o;h[n+8>>3]=f;t=t*.5+p;u=u*.5+o;d=w+128|0;if(y){c[d>>2]=c[n>>2];c[d+4>>2]=c[n+4>>2];c[d+8>>2]=c[n+8>>2];c[d+12>>2]=c[n+12>>2];c[w>>2]=c[n>>2];c[w+4>>2]=c[n+4>>2];c[w+8>>2]=c[n+8>>2];c[w+12>>2]=c[n+12>>2];y=w+64|0;c[y>>2]=c[b>>2];c[y+4>>2]=c[b+4>>2];c[y+8>>2]=c[b+8>>2];c[y+12>>2]=c[b+12>>2];i=o;j=p;k=o;m=p;f=o;e=p}else{c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];c[w>>2]=c[b>>2];c[w+4>>2]=c[b+4>>2];c[w+8>>2]=c[b+8>>2];c[w+12>>2]=c[b+12>>2];y=w+64|0;c[y>>2]=c[n>>2];c[y+4>>2]=c[n+4>>2];c[y+8>>2]=c[n+8>>2];c[y+12>>2]=c[n+12>>2];i=f+s;j=e+r;k=f-s;m=e-r}h[w+16>>3]=e-v;h[w+24>>3]=f-q;h[w+32>>3]=t-r;h[w+40>>3]=u-s;h[w+48>>3]=m;h[w+56>>3]=k;h[w+80>>3]=j;h[w+88>>3]=i;h[w+96>>3]=t+r;h[w+104>>3]=u+s;h[w+112>>3]=e+v;h[w+120>>3]=f+q;do if(!(g&64))if(!(g&128)){ID(a,w,9,1);break}else{ID(a,w+48|0,6,1);break}else ID(a,w,6,1);while(0);l=x;return}function It(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=+e;f=+f;g=g|0;var i=0.0,j=0.0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0.0;q=l;l=l+64|0;p=q;t=+h[d+8>>3];s=+h[d>>3];k=+h[b>>3];e=k+s;m=+h[b+8>>3];f=m+t;i=k+s*.2;j=m+t*.2;k=k+s*.6;m=m+t*.6;h[p>>3]=i-t;h[p+8>>3]=j+s;n=p+16|0;h[n>>3]=i+t;o=p+24|0;h[o>>3]=j-s;h[p+32>>3]=k+t;h[p+40>>3]=m-s;h[p+48>>3]=k-t;h[p+56>>3]=m+s;if(!(g&64)){if(g&128|0){d=2;g=1;r=3}}else{d=3;g=0;r=3}if((r|0)==3){h[p+(g<<4)>>3]=i;h[p+(g<<4)+8>>3]=j;h[p+(d<<4)>>3]=k;h[p+(d<<4)+8>>3]=m}ID(a,p,4,1);c[p>>2]=c[b>>2];c[p+4>>2]=c[b+4>>2];c[p+8>>2]=c[b+8>>2];c[p+12>>2]=c[b+12>>2];h[n>>3]=e;h[o>>3]=f;LD(a,p,2);l=q;return}function Jt(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=+e;f=+f;g=g|0;var i=0.0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0.0,r=0.0,s=0.0,t=0.0;o=l;l=l+64|0;n=o;j=+h[d+8>>3];r=j*-.4;i=+h[d>>3];q=i*.4;t=+h[b>>3];e=t+i*.8;s=+h[b+8>>3];f=s+j*.8;i=t+i;j=s+j;h[n>>3]=t+r;k=n+8|0;h[k>>3]=s+q;d=n+16|0;h[d>>3]=t-r;m=n+24|0;h[m>>3]=s-q;h[n+32>>3]=e-r;h[n+40>>3]=f-q;h[n+48>>3]=e+r;h[n+56>>3]=f+q;if(!(g&64)){if(g&128|0){c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];d=2;p=5}}else{c[n>>2]=c[b>>2];c[n+4>>2]=c[b+4>>2];c[n+8>>2]=c[b+8>>2];c[n+12>>2]=c[b+12>>2];d=3;p=5}if((p|0)==5){h[n+(d<<4)>>3]=e;h[n+(d<<4)+8>>3]=f}ID(a,n,4,g>>>4&1^1);h[n>>3]=e;h[k>>3]=f;h[n+16>>3]=i;h[m>>3]=j;LD(a,n,2);l=o;return}function Kt(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=+e;f=+f;g=g|0;var i=0,j=0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0;j=l;l=l+80|0;i=j;n=+h[d+8>>3];k=n*-.3333333333333333;p=+h[d>>3];f=p*.3333333333333333;q=+h[b>>3];m=q+p*.5;o=+h[b+8>>3];e=o+n*.5;d=i+64|0;h[i+64>>3]=q+p;h[i+72>>3]=o+n;c[i>>2]=c[d>>2];c[i+4>>2]=c[d+4>>2];c[i+8>>2]=c[d+8>>2];c[i+12>>2]=c[d+12>>2];h[i+16>>3]=m+k;h[i+24>>3]=e+f;d=i+32|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];h[i+48>>3]=m-k;h[i+56>>3]=e-f;do if(!(g&64)){d=g>>>4&1^1;if(!(g&128)){ID(a,i,4,d);break}else{ID(a,i,3,d);break}}else ID(a,d,3,g>>>4&1^1);while(0);l=j;return}function Lt(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;var g=0,i=0,j=0.0,k=0.0,m=0.0;g=l;l=l+32|0;i=g;k=+h[c>>3];e=+h[c+8>>3];d=+C(+(e*e+k*k))*.5;m=+h[b>>3];k=k*.5;h[i>>3]=m+k-d;j=+h[b+8>>3];e=e*.5;h[i+8>>3]=j-d+e;h[i+16>>3]=m+d+k;h[i+24>>3]=j+d+e;HD(a,i,2,f>>>4&1^1);l=g;return}function Mt(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=+e;f=+f;g=g|0;var i=0.0,j=0.0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0,t=0;t=l;l=l+112|0;q=t+48|0;r=t+16|0;s=t;n=f>4.0?f*.125:.5;p=+h[b>>3];o=+h[d>>3];i=+h[b+8>>3];m=+h[d+8>>3];e=m*n;f=o*n;c[r>>2]=c[b>>2];c[r+4>>2]=c[b+4>>2];c[r+8>>2]=c[b+8>>2];c[r+12>>2]=c[b+12>>2];h[r+16>>3]=o+p;h[r+24>>3]=m+i;h[q>>3]=n*(o-m)+p;j=n*(m+o);k=j+i;h[q+8>>3]=k;h[q+48>>3]=j+p;i=n*(m-o)+i;h[q+56>>3]=i;o=e*-.95;m=o+f+p;n=f*1.3333333333333333;if(!(g&32)){e=e*1.3333333333333333;j=f*-.33333333333333326;i=i-e;f=k-e;e=m-n}else{e=e*1.3333333333333333;j=f*2.333333333333333;i=i+e;f=k+e;e=m+n}h[q+16>>3]=e;h[q+24>>3]=f;h[q+32>>3]=j-o+p;h[q+40>>3]=i;LD(a,r,2);if(!(g&64)){if(g&128|0)QA(s,q,3,.5,q,0)}else QA(s,q,3,.5,0,q);KD(a,q,4,0,0,0);l=t;return}function Nt(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=+e;f=+f;g=g|0;var i=0;g=l;l=l+32|0;i=g;e=+h[d>>3]+ +h[b>>3];f=+h[d+8>>3]+ +h[b+8>>3];c[i>>2]=c[b>>2];c[i+4>>2]=c[b+4>>2];c[i+8>>2]=c[b+8>>2];c[i+12>>2]=c[b+12>>2];h[i+16>>3]=e;h[i+24>>3]=f;LD(a,i,2);l=g;return}function Ot(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0.0,j=0,k=0,m=0,n=0,o=0.0,p=0.0,q=0,r=0,s=0;n=l;l=l+80|0;j=n+72|0;k=n+8|0;m=n;i=+Ft(a,g);i=i*i;h[m>>3]=i;c[f+12>>2]=g;g=f+32|0;a=e+3|0;f=b+(a<<4)|0;c[g>>2]=c[f>>2];c[g+4>>2]=c[f+4>>2];c[g+8>>2]=c[f+8>>2];c[g+12>>2]=c[f+12>>2];if((e|0)>(d|0)?(o=+h[b+(e<<4)>>3]-+h[f>>3],p=+h[b+(e<<4)+8>>3]-+h[b+(a<<4)+8>>3],p*p+o*o>2]=c[r>>2];c[s+4>>2]=c[r+4>>2];c[s+8>>2]=c[r+8>>2];c[s+12>>2]=c[r+12>>2];q=k+32|0;a=b+(e+1<<4)|0;c[q>>2]=c[a>>2];c[q+4>>2]=c[a+4>>2];c[q+8>>2]=c[a+8>>2];c[q+12>>2]=c[a+12>>2];f=k+16|0;d=b+(e+2<<4)|0;c[f>>2]=c[d>>2];c[f+4>>2]=c[d+4>>2];c[f+8>>2]=c[d+8>>2];c[f+12>>2]=c[d+12>>2];c[k>>2]=c[g>>2];c[k+4>>2]=c[g+4>>2];c[k+8>>2]=c[g+8>>2];c[k+12>>2]=c[g+12>>2];c[j>>2]=k;c[j+4>>2]=m;Gz(j,26,k,1);c[r>>2]=c[s>>2];c[r+4>>2]=c[s+4>>2];c[r+8>>2]=c[s+8>>2];c[r+12>>2]=c[s+12>>2];c[a>>2]=c[q>>2];c[a+4>>2]=c[q+4>>2];c[a+8>>2]=c[q+8>>2];c[a+12>>2]=c[q+12>>2];c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];c[d+8>>2]=c[f+8>>2];c[d+12>>2]=c[f+12>>2];m=b+(e+3<<4)|0;c[m>>2]=c[k>>2];c[m+4>>2]=c[k+4>>2];c[m+8>>2]=c[k+8>>2];c[m+12>>2]=c[k+12>>2];l=n;return e|0}function Pt(a,b){a=a|0;b=b|0;var d=0.0,e=0.0,f=0;f=c[a>>2]|0;d=+h[b>>3]-+h[f>>3];e=+h[b+8>>3]-+h[f+8>>3];return e*e+d*d<=+h[c[a+4>>2]>>3]|0}function Qt(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0.0,k=0,m=0,n=0,o=0,p=0.0,q=0.0,r=0,s=0;o=l;l=l+80|0;k=o+72|0;m=o+8|0;n=o;j=+Ft(a,g);j=j*j;h[n>>3]=j;c[f+8>>2]=g;f=f+16|0;a=b+(d<<4)|0;c[f>>2]=c[a>>2];c[f+4>>2]=c[a+4>>2];c[f+8>>2]=c[a+8>>2];c[f+12>>2]=c[a+12>>2];if(!((e|0)>(d|0)?(i=d+3|0,p=+h[a>>3]-+h[b+(i<<4)>>3],q=+h[b+(d<<4)+8>>3]-+h[b+(i<<4)+8>>3],q*q+p*p>2]=c[e>>2];c[m+4>>2]=c[e+4>>2];c[m+8>>2]=c[e+8>>2];c[m+12>>2]=c[e+12>>2];g=m+16|0;d=b+(i+2<<4)|0;c[g>>2]=c[d>>2];c[g+4>>2]=c[d+4>>2];c[g+8>>2]=c[d+8>>2];c[g+12>>2]=c[d+12>>2];r=m+32|0;a=b+(i+1<<4)|0;c[r>>2]=c[a>>2];c[r+4>>2]=c[a+4>>2];c[r+8>>2]=c[a+8>>2];c[r+12>>2]=c[a+12>>2];s=m+48|0;c[s>>2]=c[f>>2];c[s+4>>2]=c[f+4>>2];c[s+8>>2]=c[f+8>>2];c[s+12>>2]=c[f+12>>2];c[k>>2]=s;c[k+4>>2]=n;Gz(k,26,m,0);n=b+(i<<4)|0;c[n>>2]=c[s>>2];c[n+4>>2]=c[s+4>>2];c[n+8>>2]=c[s+8>>2];c[n+12>>2]=c[s+12>>2];c[a>>2]=c[r>>2];c[a+4>>2]=c[r+4>>2];c[a+8>>2]=c[r+8>>2];c[a+12>>2]=c[r+12>>2];c[d>>2]=c[g>>2];c[d+4>>2]=c[g+4>>2];c[d+8>>2]=c[g+8>>2];c[d+12>>2]=c[g+12>>2];c[e>>2]=c[m>>2];c[e+4>>2]=c[m+4>>2];c[e+8>>2]=c[m+8>>2];c[e+12>>2]=c[m+12>>2];l=o;return i|0}function Rt(a,b,d,e,f,g,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0.0,k=0.0,l=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0.0,t=0.0,u=0,v=0,w=0;u=(g|0)!=0;l=(i|0)!=0;if(!((e|0)==(d|0)&(u&l))){if(l){j=+Ft(a,i);k=+h[b+(e<<4)>>3];p=+h[b+(e<<4)+8>>3];l=e+3|0;r=b+(l<<4)|0;n=+h[r>>3];l=b+(l<<4)+8|0;o=+h[l>>3];t=k-n;s=p-o;t=+C(+(s*s+t*t))*.9;j=j>=t?t:j;if(p==o){m=(k>3]=k;h[b+(w<<4)+8>>3]=p;e=b+(e+2<<4)|0;h[r>>3]=m;h[l>>3]=j;c[e>>2]=c[r>>2];c[e+4>>2]=c[r+4>>2];c[e+8>>2]=c[r+8>>2];c[e+12>>2]=c[r+12>>2];c[f+12>>2]=i;h[f+32>>3]=n;h[f+40>>3]=o}if(u){m=+Ft(a,g);l=b+(d<<4)|0;k=+h[l>>3];j=+h[b+(d<<4)+8>>3];w=d+3|0;o=+h[b+(w<<4)>>3];p=+h[b+(w<<4)+8>>3];t=k-o;s=j-p;t=+C(+(s*s+t*t))*.9;m=m>=t?t:m;if(j==p){n=(k>3]=n;h[b+(w<<4)+8>>3]=m;c[l>>2]=c[v>>2];c[l+4>>2]=c[v+4>>2];c[l+8>>2]=c[v+8>>2];c[l+12>>2]=c[v+12>>2];v=d+2|0;h[b+(v<<4)>>3]=o;h[b+(v<<4)+8>>3]=p;v=16}}else{r=b+(e<<4)|0;s=+h[r>>3];t=+h[b+(e<<4)+8>>3];l=e+3|0;u=b+(l<<4)|0;k=+h[u>>3];l=b+(l<<4)+8|0;j=+h[l>>3];m=+Ft(a,g);q=+Ft(a,i);n=s-k;p=t-j;n=+C(+(p*p+n*n));w=!(q+m>=n);n=n*.3333333333333333;m=w?m:n;n=w?q:n;if(t==j){w=s>3]=q;h[b+(w<<4)+8>>3]=o;c[r>>2]=c[v>>2];c[r+4>>2]=c[v+4>>2];c[r+8>>2]=c[v+8>>2];c[r+12>>2]=c[v+12>>2];v=b+(e+2<<4)|0;h[u>>3]=p;h[l>>3]=m;c[v>>2]=c[u>>2];c[v+4>>2]=c[u+4>>2];c[v+8>>2]=c[u+8>>2];c[v+12>>2]=c[u+12>>2];c[f+12>>2]=i;h[f+32>>3]=s;h[f+40>>3]=t;v=16}if((v|0)==16){c[f+8>>2]=g;h[f+16>>3]=k;h[f+24>>3]=j}return}function St(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;var f=0.0,g=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0.0;n=+h[b>>3];k=+h[c>>3]-n;o=+h[b+8>>3];l=+h[c+8>>3]-o;j=d*10.0/(+C(+(k*k+l*l))+.0001);k=j*((k>=0.0?.0001:-.0001)+k);j=((l>=0.0?.0001:-.0001)+l)*j;l=k*.5;m=j*.5;i=n-m;f=o-l;n=m+n;l=o+l;o=i+k;m=f+j;k=n+k;j=l+j;g=o>k?o:k;g=n>g?n:g;d=m>j?m:j;d=l>d?l:d;k=o>3]=i>3]=f>3]=i>g?i:g;h[a+24>>3]=f>d?f:d;return}function Tt(a,b,d,e,f,g,i){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;g=+g;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0;q=l;l=l+48|0;m=q+32|0;k=q+16|0;p=q;n=(c[a+16>>2]|0)+12|0;o=c[n>>2]|0;c[n>>2]=b;GD(a,c[(c[a>>2]|0)+336>>2]|0);PD(a,g);t=+h[e>>3]-+h[d>>3];b=e+8|0;s=+h[b>>3]-+h[d+8>>3];r=10.0/(+C(+(t*t+s*s))+.0001);h[e>>3]=r*((t>=0.0?.0001:-.0001)+t);h[b>>3]=((s>=0.0?.0001:-.0001)+s)*r;b=0;while(1){if((b|0)>=4)break;j=i>>(b<<3)&255;if(!j)break;c[k>>2]=c[d>>2];c[k+4>>2]=c[d+4>>2];c[k+8>>2]=c[d+8>>2];c[k+12>>2]=c[d+12>>2];c[m>>2]=c[e>>2];c[m+4>>2]=c[e+4>>2];c[m+8>>2]=c[e+8>>2];c[m+12>>2]=c[e+12>>2];Ut(p,a,k,m,f,g,j);c[d>>2]=c[p>>2];c[d+4>>2]=c[p+4>>2];c[d+8>>2]=c[p+8>>2];c[d+12>>2]=c[p+12>>2];b=b+1|0}c[n>>2]=o;l=q;return}function Ut(a,b,d,e,f,g,i){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;g=+g;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0;q=l;l=l+32|0;m=q+16|0;k=q;n=i&15;j=1336;while(1){o=c[j>>2]|0;if(!o)break;if((n|0)==(o|0)){p=4;break}j=j+24|0}if((p|0)==4){r=+h[j+8>>3]*f;h[e>>3]=r*+h[e>>3];o=e+8|0;h[o>>3]=r*+h[o>>3];p=c[j+16>>2]|0;c[k>>2]=c[d>>2];c[k+4>>2]=c[d+4>>2];c[k+8>>2]=c[d+8>>2];c[k+12>>2]=c[d+12>>2];c[m>>2]=c[e>>2];c[m+4>>2]=c[e+4>>2];c[m+8>>2]=c[e+8>>2];c[m+12>>2]=c[e+12>>2];jb[p&15](b,k,m,f,g,i);h[d>>3]=+h[e>>3]+ +h[d>>3];p=d+8|0;h[p>>3]=+h[o>>3]+ +h[p>>3]};c[a>>2]=c[d>>2];c[a+4>>2]=c[d+4>>2];c[a+8>>2]=c[d+8>>2];c[a+12>>2]=c[d+12>>2];l=q;return}function Vt(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;g=i+8|0;f=i;d=Jm(b,84815)|0;if((d|0)!=0?(a[d>>0]|0)!=0:0){e=d;h=5}else{d=Jm(b,84827)|0;if((d|0)!=0?(a[d>>0]|0)!=0:0){e=d;h=5}else d=0}if((h|0)==5){d=wt(e,0,120)|0;if(!d){c[f>>2]=En(b)|0;$l(0,84834,f)|0;c[g>>2]=e;$l(3,84887,g)|0}}l=i;return d|0}function Wt(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=l;l=l+16|0;f=ww(304)|0;if(!f)$l(1,84895,g)|0;e=a+16|0;a=c[e>>2]|0;c[f>>2]=a;c[e>>2]=f;if(!a){c[f+144>>2]=3;c[f+148>>2]=0;h[f+152>>3]=1.0}else{b=f+16|0;d=a+16|0;e=b+40|0;do{c[b>>2]=c[d>>2];b=b+4|0;d=d+4|0}while((b|0)<(e|0));b=f+56|0;d=a+56|0;e=b+40|0;do{c[b>>2]=c[d>>2];b=b+4|0;d=d+4|0}while((b|0)<(e|0));c[f+144>>2]=c[a+144>>2];c[f+148>>2]=c[a+148>>2];h[f+152>>3]=+h[a+152>>3];c[f+136>>2]=c[a+136>>2];b=f+96|0;d=a+96|0;e=b+40|0;do{c[b>>2]=c[d>>2];b=b+4|0;d=d+4|0}while((b|0)<(e|0))}l=g;return f|0}function Xt(a){a=a|0;var b=0;a=a+16|0;b=c[a>>2]|0;if(!b)ma(84921,84925,117,84932);else{$I(c[b+212>>2]|0);$I(c[b+208>>2]|0);$I(c[b+216>>2]|0);$I(c[b+220>>2]|0);$I(c[b+224>>2]|0);$I(c[b+228>>2]|0);$I(c[b+232>>2]|0);$I(c[b+236>>2]|0);$I(c[b+240>>2]|0);$I(c[b+244>>2]|0);$I(c[b+248>>2]|0);$I(c[b+252>>2]|0);$I(c[b+256>>2]|0);$I(c[b+272>>2]|0);$I(c[b+284>>2]|0);$I(c[b+280>>2]|0);c[a>>2]=c[b>>2];$I(b);return}}function Yt(d,e,f,g,h,i,j){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0;l=c[d+16>>2]|0;k=c[d+152>>2]|0;if((e|0)!=0&(k&32768|0)!=0)c[l+192>>2]=e;if(((k&65536|0)!=0?(c[l+212>>2]=rw(i,j)|0,(f|0)!=0):0)?(a[f>>0]|0)!=0:0){c[l+208>>2]=rw(f,j)|0;d=1}else d=0;do if(k&4194304){if(g|0?a[g>>0]|0:0){c[l+228>>2]=rw(g,j)|0;d=l+260|0;b[d>>1]=b[d>>1]|1;d=1;break}e=c[l+192>>2]|0;if(e){c[l+228>>2]=HL(e)|0;d=1}}while(0);if((h|0)!=0&(k&8388608|0)!=0?(a[h>>0]|0)!=0:0){c[l+244>>2]=rw(h,j)|0;d=1}return d|0}function Zt(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;j=l;l=l+80|0;i=j;h=j+8|0;g=c[(c[b>>2]|0)+168>>2]|0;f=c[(c[(c[g+16>>2]|0)+8>>2]|0)+92>>2]|0;_t(b,e);b=Jm(d,86799)|0;if((b|0)!=0?(a[b>>0]|0)!=0:0){gm(e,b)|0;f=e+4|0;b=c[f>>2]|0;if(b>>>0>=(c[e+8>>2]|0)>>>0){em(e,1)|0;b=c[f>>2]|0}a[b>>0]=0;b=c[e>>2]|0;c[f>>2]=b}else{if((g|0)!=(d|0)&(f|0)!=0){gm(e,f)|0;f=e+4|0;b=c[f>>2]|0;if(b>>>0>=(c[e+8>>2]|0)>>>0){em(e,1)|0;b=c[f>>2]|0}c[f>>2]=b+1;a[b>>0]=95}switch(Do(d)|0){case 0:{f=(g|0)==(d|0)?96286:84946;b=(c[d>>2]|0)>>>4;break}case 1:{f=96273;b=(c[d>>2]|0)>>>4;break}case 2:{f=96237;b=(c[d>>2]|0)>>>4;break}default:{f=0;b=0}}gm(e,f)|0;c[i>>2]=b;qL(h,84952,i)|0;gm(e,h)|0;f=e+4|0;b=c[f>>2]|0;if(b>>>0>=(c[e+8>>2]|0)>>>0){em(e,1)|0;b=c[f>>2]|0}a[b>>0]=0;b=c[e>>2]|0;c[f>>2]=b}l=j;return b|0}function _t(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+144|0;h=i;g=i+8|0;e=c[b+160>>2]|0;if((e|0)>1?c[b+152>>2]&64|0:0){gm(d,c[(c[(c[b>>2]|0)+308>>2]|0)+(e<<2)>>2]|0)|0;f=d+4|0;e=c[f>>2]|0;if(e>>>0>=(c[d+8>>2]|0)>>>0){em(d,1)|0;e=c[f>>2]|0}c[f>>2]=e+1;a[e>>0]=95}f=c[b+196>>2]|0;e=c[b+200>>2]|0;if((f|0)>0|(e|0)>0){c[h>>2]=f;c[h+4>>2]=e;qL(g,84956,h)|0;gm(d,g)|0}l=i;return}function $t(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,i=0.0,j=0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0.0,s=0;s=l;l=l+48|0;p=s+16|0;f=s+32|0;q=s;r=+h[(c[a+16>>2]|0)+152>>3];o=au(d,0,f)|0;if((o+-1|0)>>>0>=2){e=+h[b+16>>3];k=(e+ +h[b>>3])*.5;h[q>>3]=k;i=+h[b+24>>3];m=(i+ +h[b+8>>3])*.5;h[q+8>>3]=m;k=e-k;m=i-m;n=r>.5;if(n)PD(a,.5);j=c[f>>2]|0;i=0.0;f=c[j+8>>2]|0;while(1){d=c[f>>2]|0;if(!d)break;b=f+4|0;if(+g[b>>2]==0.0)e=i;else{ED(a,d);if(!(c[f+12>>2]|0))e=6.283185307179586;else e=+g[b>>2]*6.283185307179586+i;c[p>>2]=c[q>>2];c[p+4>>2]=c[q+4>>2];c[p+8>>2]=c[q+8>>2];c[p+12>>2]=c[q+12>>2];b=$E(p,k,m,i,e)|0;KD(a,c[b>>2]|0,c[b+4>>2]|0,0,0,1);YI(b)}i=e;f=f+12|0}if(n)PD(a,r);bu(j)}l=s;return o|0}function au(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0.0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0;r=l;l=l+16|0;o=r+8|0;n=r;q=ww(12)|0;i=HL(b)|0;a:do if(!d){d=1;f=i;while(1){switch(a[f>>0]|0){case 0:break a;case 58:{d=d+1|0;break}default:{}}f=f+1|0}}while(0);c[q+4>>2]=i;p=ww((d*12|0)+12|0)|0;c[q+8>>2]=p;m=1.0;h=0;d=0;f=i;while(1){f=EL(f,93017)|0;if(!f){f=20;break}j=+cu(f);if(!(j>=0.0)){f=17;break}k=j-m;if(k>0.0)if((c[4920]|0)!=0?!(k<1.0e-05&k>-1.0e-05):0){c[n>>2]=b;$l(0,84967,n)|0;c[4920]=0;j=m;d=3}else j=m;k=m-j;if(j>0.0)a[p+(h*12|0)+8>>0]=1;if(a[f>>0]|0)c[p+(h*12|0)>>2]=f;f=h+1|0;g[p+(h*12|0)+4>>2]=j;if(k<1.0e-05&k>-1.0e-05){h=f;f=30;break}else{m=k;h=f;f=0}}b:do if((f|0)==17){if(!(c[4920]|0))d=1;else{c[o>>2]=b;$l(1,85002,o)|0;c[4920]=0;d=2}bu(q)}else if((f|0)==20)if(m>0.0){f=0;i=0;while(1){if((f|0)>=(h|0))break;o=i+(+g[p+(f*12|0)+4>>2]==0.0&1)|0;f=f+1|0;i=o}if((i|0)<=0){f=p+((h+-1|0)*12|0)+4|0;g[f>>2]=m+ +g[f>>2];f=30;break}j=m/+(i|0);f=0;while(1){if((f|0)>=(h|0)){f=30;break b}i=p+(f*12|0)+4|0;if(+g[i>>2]==0.0)g[i>>2]=j;f=f+1|0}}else f=30;while(0);if((f|0)==30){while(1){f=h+-1|0;if((h|0)<=0)break;if(+g[p+(f*12|0)+4>>2]>0.0)break;else h=f}c[p+(h*12|0)>>2]=0;c[q>>2]=h;c[e>>2]=q}l=r;return d|0}function bu(a){a=a|0;$I(c[a+4>>2]|0);$I(c[a+8>>2]|0);$I(a);return}function cu(b){b=b|0;var d=0.0,e=0,f=0,g=0;f=l;l=l+16|0;e=f;b=XJ(b,59)|0;if(!b)d=0.0;else{g=b+1|0;a[b>>0]=0;d=+uM(g,e);d=(d>=0.0?(c[e>>2]|0)!=(g|0):0)?d:-1.0}l=f;return +d}function du(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,i=0,j=0,k=0,m=0.0,n=0.0,o=0,p=0,q=0,r=0,s=0.0,t=0;t=l;l=l+80|0;i=t+64|0;r=t;s=+h[(c[a+16>>2]|0)+152>>3];q=au(d,0,i)|0;if((q+-1|0)>>>0>=2){if(!e){c[r>>2]=c[b>>2];c[r+4>>2]=c[b+4>>2];c[r+8>>2]=c[b+8>>2];c[r+12>>2]=c[b+12>>2];p=r+16|0;o=b+16|0;c[p>>2]=c[o>>2];c[p+4>>2]=c[o+4>>2];c[p+8>>2]=c[o+8>>2];c[p+12>>2]=c[o+12>>2];p=r+32|0;o=b+32|0;c[p>>2]=c[o>>2];c[p+4>>2]=c[o+4>>2];c[p+8>>2]=c[o+8>>2];c[p+12>>2]=c[o+12>>2];p=r+48|0;o=b+48|0;c[p>>2]=c[o>>2];c[p+4>>2]=c[o+4>>2];c[p+8>>2]=c[o+8>>2];c[p+12>>2]=c[o+12>>2]}else{p=b+32|0;c[r>>2]=c[p>>2];c[r+4>>2]=c[p+4>>2];c[r+8>>2]=c[p+8>>2];c[r+12>>2]=c[p+12>>2];p=r+16|0;o=b+48|0;c[p>>2]=c[o>>2];c[p+4>>2]=c[o+4>>2];c[p+8>>2]=c[o+8>>2];c[p+12>>2]=c[o+12>>2];p=r+32|0;c[p>>2]=c[b>>2];c[p+4>>2]=c[b+4>>2];c[p+8>>2]=c[b+8>>2];c[p+12>>2]=c[b+12>>2];p=r+48|0;o=b+16|0;c[p>>2]=c[o>>2];c[p+4>>2]=c[o+4>>2];c[p+8>>2]=c[o+8>>2];c[p+12>>2]=c[o+12>>2]}k=r+16|0;m=+h[k>>3];f=+h[r>>3];n=m-f;o=r+32|0;h[o>>3]=f;h[k>>3]=f;p=s>.5;if(p)PD(a,.5);i=c[i>>2]|0;j=r+48|0;e=c[i+8>>2]|0;while(1){d=c[e>>2]|0;if(!d)break;b=e+4|0;if(!(+g[b>>2]==0.0)){ED(a,d);if(!(c[e+12>>2]|0))f=m;else f=n*+g[b>>2]+ +h[r>>3];h[o>>3]=f;h[k>>3]=f;ID(a,r,4,1);f=+h[k>>3];h[j>>3]=f;h[r>>3]=f}e=e+12|0}if(p)PD(a,s);bu(i)}l=t;return q|0}function eu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=c[a+16>>2]|0;e=c[a+152>>2]|0;if(e&4259840|0){f=e&131072;g=f>>>16^2;c[d+264>>2]=g;h=d+268|0;c[h>>2]=g+2;g=d+272|0;$I(c[g>>2]|0);d=ww(c[h>>2]<<4)|0;c[g>>2]=d;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];g=d+16|0;b=b+16|0;c[g>>2]=c[b>>2];c[g+4>>2]=c[b+4>>2];c[g+8>>2]=c[b+8>>2];c[g+12>>2]=c[b+12>>2];if(!(e&8192))gD(a,d,d,2)|0;if(!f)_v(d)}return}function fu(a,b){a=a|0;b=b|0;var c=0,d=0.0,e=0,f=0,g=0,i=0.0,j=0.0,k=0.0,m=0.0,n=0.0,o=0,p=0,q=0;q=l;l=l+144|0;c=q+80|0;e=q+16|0;f=q;k=+h[b>>3];o=a+16|0;m=+h[o>>3];if(!(((((((((!(k>m)?(n=+h[a>>3],!(k>3],i=+h[a+24>>3],!(d>i)):0)?(j=+h[a+8>>3],!(d>3],!(k>m|k>3],!(k>i|k>3],!(k>m|k>3],!(k>i|k>3],!(k>m|k>3],!(n>i|n>3];if(!(d>+h[o>>3])){if(d<+h[a>>3]){c=a;p=16}}else{c=o;p=16}if((p|0)==16){p=0;h[c>>3]=d}d=+h[b+(e<<4)+8>>3];if(!(d>+h[f>>3])){if(d<+h[g>>3]){c=a;p=19}}else{c=o;p=19}if((p|0)==19){p=0;h[c+8>>3]=d}e=e+1|0}}while(0);l=q;return}function gu(a){a=a|0;var b=0,d=0,e=0,f=0,g=0.0,h=0,i=0;b=l;l=l+48|0;d=b+32|0;e=b+16|0;f=b;i=a+48|0;h=a+16|0;c[f>>2]=c[a>>2];c[f+4>>2]=c[a+4>>2];c[f+8>>2]=c[a+8>>2];c[f+12>>2]=c[a+12>>2];c[e>>2]=c[i>>2];c[e+4>>2]=c[i+4>>2];c[e+8>>2]=c[i+8>>2];c[e+12>>2]=c[i+12>>2];c[d>>2]=c[h>>2];c[d+4>>2]=c[h+4>>2];c[d+8>>2]=c[h+8>>2];c[d+12>>2]=c[h+12>>2];g=+dw(f,e,d);h=a+32|0;c[f>>2]=c[a>>2];c[f+4>>2]=c[a+4>>2];c[f+8>>2]=c[a+8>>2];c[f+12>>2]=c[a+12>>2];c[e>>2]=c[i>>2];c[e+4>>2]=c[i+4>>2];c[e+8>>2]=c[i+8>>2];c[e+12>>2]=c[i+12>>2];c[d>>2]=c[h>>2];c[d+4>>2]=c[h+4>>2];c[d+8>>2]=c[h+8>>2];c[d+12>>2]=c[h+12>>2];a=g<4.0&+dw(f,e,d)<4.0&1;l=b;return a|0}function hu(b,d){b=b|0;d=d|0;var e=0,f=0.0,g=0.0,i=0.0,j=0,k=0,m=0,n=0.0;m=l;l=l+16|0;k=m;j=c[b+152>>2]|0;n=+h[b+432>>3];i=+h[b+352>>3]*.013888888888888888;f=i*n;h[b+488>>3]=f;g=+h[b+440>>3];i=i*g;h[b+496>>3]=i;h[b+520>>3]=n*.013888888888888888;e=b+528|0;h[e>>3]=g*.013888888888888888;if(j&4096|c[42184]|0)h[e>>3]=g*-.013888888888888888;e=(c[b+360>>2]|0)==0;n=+((c[b+448>>2]|0)>>>0);g=+((c[b+452>>2]|0)>>>0);h[b+368>>3]=(e?n:g)/f;h[b+376>>3]=(e?g:n)/i;MD(b,GA(d,zm(d,0,86595,0)|0,174185)|0);c[b+160>>2]=0;iu(b,d);if(j&2|0)ju(b,d);e=eo(d)|0;while(1){if(!e)break;a[(c[e+16>>2]|0)+116>>0]=0;e=fo(d,e)|0}ku(b,k);while(1){if(!((lu(b)|0)<<24>>24))break;if((mu(b)|0)>1)lD(b);nu(b);while(1){if(!((ou(b)|0)<<24>>24))break;pu(b,d);qu(b)}if((mu(b)|0)>1)mD(b);ru(b,k)}su(b);l=m;return}function iu(a,b){a=a|0;b=b|0;var d=0;d=Wt(a)|0;c[d+4>>2]=0;c[d+8>>2]=b;c[d+12>>2]=0;rv(a,c[(c[b+16>>2]|0)+12>>2]|0,b);hD(a,b);return}function ju(b,c){b=b|0;c=c|0;var d=0,e=0,f=0,g=0;ED(b,119592);d=Jm(c,85423)|0;if(d|0?a[d>>0]|0:0)ED(b,d);d=Jm(c,86503)|0;if(d|0?a[d>>0]|0:0)CD(b,d);Dv(b,c);g=eo(c)|0;while(1){if(!g)break;d=Jm(g,122540)|0;if(d|0?a[d>>0]|0:0)CD(b,d);d=Jm(g,122531)|0;if(d|0?a[d>>0]|0:0)ED(b,d);d=Jm(g,86469)|0;do if(d|0?a[d>>0]|0:0){if(!(XJ(d,58)|0)){CD(b,d);break}e=HL(d)|0;d=e;while(1){d=EL(d,93017)|0;if(!d)break;if(!(a[d>>0]|0)){d=0;continue}CD(b,d);d=0}$I(e)}while(0);d=Jm(g,86503)|0;if(d|0?a[d>>0]|0:0)CD(b,d);f=Qm(c,g)|0;while(1){if(!f)break;d=Jm(f,122540)|0;do if(d|0?a[d>>0]|0:0){if(!(XJ(d,58)|0)){CD(b,d);break}e=HL(d)|0;d=e;while(1){d=EL(d,93017)|0;if(!d)break;if(!(a[d>>0]|0)){d=0;continue}CD(b,d);d=0}$I(e)}while(0);d=Jm(f,86503)|0;if(d|0?a[d>>0]|0:0)CD(b,d);f=Sm(c,f)|0}g=fo(c,g)|0}return}function ku(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;e=i+8|0;g=i;h=c[a>>2]|0;d=c[h+312>>2]|0;f=a+156|0;c[f>>2]=d;h=c[h+316>>2]|0;if(!h)if((d|0)>1?(c[a+152>>2]&64|0)==0:0){c[e>>2]=c[a+52>>2];$l(0,85598,e)|0;c[f>>2]=1;e=1;d=0}else{e=1;d=0}else{d=h+4|0;if((c[h>>2]|0)>1?(c[a+152>>2]&64|0)==0:0){c[g>>2]=c[a+52>>2];$l(0,85598,g)|0;c[h+8>>2]=(c[f>>2]|0)+1}e=c[d>>2]|0;d=h+8|0}c[a+160>>2]=e;c[b>>2]=d;l=i;return}function lu(a){a=a|0;return (c[a+160>>2]|0)<=(c[a+156>>2]|0)|0}function mu(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+316>>2]|0;return c[((b|0)==0?a+156|0:b)>>2]|0}function nu(a){a=a|0;var b=0,d=0;d=a+172|0;b=c[d+4>>2]|0;a=a+196|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function ou(a){a=a|0;var b=0,d=0;d=c[a+196>>2]|0;if(((d|0)>-1?(d|0)<(c[a+164>>2]|0):0)?(b=c[a+200>>2]|0,(b|0)>-1):0)a=(b|0)<(c[a+168>>2]|0)&1;else a=0;return a|0}function pu(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+176|0;k=p;f=p+48|0;m=p+32|0;n=c[d+16>>2]|0;o=c[d+152>>2]|0;if((c[d+160>>2]|0)<=1?(c[d+196>>2]|0)<=0:0)h=0;else{dm(m,128,f);g=n+212|0;h=c[g>>2]|0;_t(d,m);gm(m,h)|0;i=m+4|0;f=c[i>>2]|0;if(f>>>0>=(c[m+8>>2]|0)>>>0){em(m,1)|0;f=c[i>>2]|0}a[f>>0]=0;f=c[m>>2]|0;c[i>>2]=f;c[g>>2]=f}_E(Jm(e,85048)|0);uu(d);jD(d);CD(d,122106);ED(d,119592);do if(o&4259840|0){if((c[n+208>>2]|0)==0?(b[n+260>>1]&1)==0:0)break;if(o&655360){i=o&131072;c[n+264>>2]=i>>>16^2;f=ww((i>>>12^32)+32|0)|0;g=d+288|0;c[f>>2]=c[g>>2];c[f+4>>2]=c[g+4>>2];c[f+8>>2]=c[g+8>>2];c[f+12>>2]=c[g+12>>2];g=f+16|0;q=d+304|0;c[g>>2]=c[q>>2];c[g+4>>2]=c[q+4>>2];c[g+8>>2]=c[q+8>>2];c[g+12>>2]=c[q+12>>2];if(!i){_v(f);g=4}else g=2}else{f=0;g=0}if(!(o&8192))gD(d,f,f,g)|0;c[n+272>>2]=f;c[n+268>>2]=g}while(0);if(o&32768|0?(j=c[(c[e+16>>2]|0)+12>>2]|0,j|0):0)c[n+192>>2]=c[j>>2];g=(o&4|0)!=0;do if(!g){f=n+208|0;if((c[f>>2]|0)==0?(b[n+260>>1]&1)==0:0)break;q=d+256|0;c[k>>2]=c[q>>2];c[k+4>>2]=c[q+4>>2];c[k+8>>2]=c[q+8>>2];c[k+12>>2]=c[q+12>>2];c[k+16>>2]=c[q+16>>2];c[k+20>>2]=c[q+20>>2];c[k+24>>2]=c[q+24>>2];c[k+28>>2]=c[q+28>>2];eu(d,k);xD(d,c[f>>2]|0,c[n+228>>2]|0,c[n+244>>2]|0,c[n+212>>2]|0)}while(0);vu(d,e);f=c[(c[e+16>>2]|0)+12>>2]|0;if(f|0)qw(d,4,f);do if(!g){if((c[n+208>>2]|0)==0?(b[n+260>>1]&1)==0:0)break;yD(d)}while(0);wu(d,e,o);kD(d);if(h|0){hm(m);c[n+212>>2]=h}l=p;return}function qu(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;h=l;l=l+32|0;d=h+24|0;b=h+16|0;j=h+8|0;f=h;g=a+196|0;i=a+188|0;c[b>>2]=c[g>>2];c[b+4>>2]=c[g+4>>2];c[d>>2]=c[i>>2];c[d+4>>2]=c[i+4>>2];tu(j,b,d);i=c[j+4>>2]|0;e=g;c[e>>2]=c[j>>2];c[e+4>>2]=i;if(!((ou(a)|0)<<24>>24)){e=a+180|0;if(!(c[a+184>>2]|0))c[a+200>>2]=c[a+176>>2];else c[g>>2]=c[a+172>>2];c[b>>2]=c[g>>2];c[b+4>>2]=c[g+4>>2];c[d>>2]=c[e>>2];c[d+4>>2]=c[e+4>>2];tu(f,b,d);i=c[f+4>>2]|0;j=g;c[j>>2]=c[f>>2];c[j+4>>2]=i}l=h;return}function ru(a,b){a=a|0;b=b|0;var d=0;d=c[b>>2]|0;if(!d){d=a+160|0;c[d>>2]=(c[d>>2]|0)+1}else{c[a+160>>2]=c[d>>2];c[b>>2]=d+4}return}function su(a){a=a|0;iD(a);Xt(a);return}function tu(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=(c[d+4>>2]|0)+(c[b+4>>2]|0)|0;c[a>>2]=(c[d>>2]|0)+(c[b>>2]|0);c[a+4>>2]=e;return}function uu(a){a=a|0;var b=0.0,d=0.0,e=0.0,f=0,g=0.0,i=0,j=0,k=0,m=0,n=0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0.0;t=l;l=l+48|0;n=t+32|0;f=t+24|0;j=t+8|0;k=t+16|0;m=t;r=a+196|0;q=c[r>>2]|0;r=c[r+4>>2]|0;p=f;c[p>>2]=q;c[p+4>>2]=r;p=a+164|0;i=c[p>>2]|0;p=c[p+4>>2]|0;s=j;c[s>>2]=i;c[s+4>>2]=p;s=a+360|0;if(!(c[s>>2]|0)){k=q;j=r}else{c[n>>2]=c[f>>2];c[n+4>>2]=c[f+4>>2];Cv(k,n);r=k;k=c[r>>2]|0;r=c[r+4>>2]|0;p=f;c[p>>2]=k;c[p+4>>2]=r;c[n>>2]=c[j>>2];c[n+4>>2]=c[j+4>>2];Cv(m,n);p=m;i=c[p>>2]|0;p=c[p+4>>2]|0;c[j>>2]=i;c[j+4>>2]=p;j=r}d=+h[a+320>>3];g=d*+(k|0)-+h[a+240>>3];h[a+288>>3]=g;e=+h[a+328>>3];o=e*+(j|0)-+h[a+248>>3];h[a+296>>3]=o;h[a+304>>3]=d+g;h[a+312>>3]=e+o;f=a+472|0;if(!(c[(c[a+12>>2]|0)+28>>2]|0)){r=a+456|0;c[f>>2]=c[r>>2];c[f+4>>2]=c[r+4>>2];c[f+8>>2]=c[r+8>>2];c[f+12>>2]=c[r+12>>2]}else{q=a+456|0;c[f>>2]=c[((c[f>>2]|0)<(c[q>>2]|0)?f:q)>>2];r=a+476|0;c[r>>2]=c[((c[r>>2]|0)<(c[a+460>>2]|0)?f:q)+4>>2];r=a+480|0;c[r>>2]=c[((c[r>>2]|0)>(c[a+464>>2]|0)?f:q)+8>>2];r=a+484|0;c[r>>2]=c[((c[r>>2]|0)>(c[a+468>>2]|0)?f:q)+12>>2]}m=c[a+152>>2]|0;b=+h[a+336>>3];if(!(m&128)){b=(+(k|0)-+(i|0)*.5)*d+b;h[a+256>>3]=b;g=(+(j|0)-+(p|0)*.5)*e+ +h[a+344>>3];o=g;d=d+b;g=g+e}else{d=+h[a+368>>3]*.5;e=b-d;h[a+256>>3]=e;g=+h[a+344>>3];u=+h[a+376>>3]*.5;o=g-u;d=d+b;g=u+g;b=e}h[a+264>>3]=o;h[a+272>>3]=d;h[a+280>>3]=g;if(!(c[s>>2]|0)){e=+h[a+352>>3];h[a+504>>3]=+h[a+384>>3]/e-b;if(!(m&4096|c[42184])){d=+h[a+392>>3]/e;b=o}else{d=-g;b=+h[a+392>>3]/e}h[a+512>>3]=d-b}else{f=a+384|0;e=+h[a+352>>3];h[a+512>>3]=-g-+h[a+392>>3]/e;if(!(m&4096|c[42184]))d=+h[f>>3]/e;else{d=-d;b=+h[f>>3]/e}h[a+504>>3]=d-b}l=t;return}function vu(b,d){b=b|0;d=d|0;var e=0,f=0.0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+48|0;q=s;o=s+40|0;p=s+36|0;r=s+32|0;e=Jm(d,85423)|0;if(!e){j=1;e=121990}else{i=(a[e>>0]|0)==0;j=i&1;e=i?121990:e}h=c[b+152>>2]|0;i=(a[e>>0]|0)==116;if(!(h&256))if(i){m=(yJ(e,122171)|0)==0;k=m?121990:e;m=m?1:j;n=8}else{k=e;m=j;n=8}else if(!(i?!(yJ(e,122171)|0):0)){k=e;m=j;n=8}if((n|0)==8?!((m|0)!=0&(h&33554432|0)!=0):0)if(!((yv(k,o,p)|0)<<24>>24)){ED(b,k);CD(b,122171);r=b+256|0;c[q>>2]=c[r>>2];c[q+4>>2]=c[r+4>>2];c[q+8>>2]=c[r+8>>2];c[q+12>>2]=c[r+12>>2];c[q+16>>2]=c[r+16>>2];c[q+20>>2]=c[r+20>>2];c[q+24>>2]=c[r+24>>2];c[q+28>>2]=c[r+28>>2];JD(b,q,1)}else{c[r>>2]=0;i=c[o>>2]|0;ED(b,i);CD(b,122171);xv(d,r)|0;e=c[o+4>>2]|0;h=EA(d,c[42188]|0,0,0)|0;f=+g[p>>2];if(!e)FD(b,122106,h,f);else FD(b,e,h,f);r=(c[r>>2]|0)>>>1&1|2;p=b+256|0;c[q>>2]=c[p>>2];c[q+4>>2]=c[p+4>>2];c[q+8>>2]=c[p+8>>2];c[q+12>>2]=c[p+12>>2];c[q+16>>2]=c[p+16>>2];c[q+20>>2]=c[p+20>>2];c[q+24>>2]=c[p+24>>2];c[q+28>>2]=c[p+28>>2];JD(b,q,r);$I(i)}e=c[(c[(c[d+16>>2]|0)+8>>2]|0)+88>>2]|0;if(e|0)Av(b,e);l=s;return}function wu(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=(c[a>>2]|0)+28|0;c[g>>2]=(c[g>>2]|0)+1;g=(d&4|0)!=0;if(!g)xu(a,b,d);a:do if(!(d&1)){if(d&16|0){rD(a);f=eo(b)|0;while(1){if(!f)break;e=Qm(b,f)|0;while(1){if(!e)break;zu(a,e);e=Sm(b,e)|0}f=fo(b,f)|0}sD(a);pD(a);e=eo(b)|0;while(1){if(!e)break;yu(a,e);e=fo(b,e)|0}qD(a);break}if(!(d&8)){f=eo(b)|0;while(1){if(!f)break a;yu(a,f);e=Qm(b,f)|0;while(1){if(!e)break;yu(a,c[((c[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0);zu(a,e);e=Sm(b,e)|0}f=fo(b,f)|0}}pD(a);e=eo(b)|0;while(1){if(!e)break;if((Au(b,e)|0)<<24>>24)yu(a,e);e=fo(b,e)|0}qD(a);rD(a);f=eo(b)|0;while(1){if(!f)break;e=Qm(b,f)|0;while(1){if(!e)break;if((Bu(b,e)|0)<<24>>24)zu(a,e);e=Sm(b,e)|0}f=fo(b,f)|0}sD(a)}else{pD(a);e=eo(b)|0;while(1){if(!e)break;yu(a,e);e=fo(b,e)|0}qD(a);rD(a);f=eo(b)|0;while(1){if(!f)break;e=Qm(b,f)|0;while(1){if(!e)break;zu(a,e);e=Sm(b,e)|0}f=fo(b,f)|0}sD(a)}while(0);if(g)xu(a,b,d);return}function xu(e,f,i){e=e|0;f=f|0;i=i|0;var j=0,k=0,m=0,n=0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0;P=l;l=l+128|0;w=P+72|0;N=P+64|0;H=P+112|0;I=P;J=P+104|0;K=f+16|0;L=(i&4|0)!=0;M=e+16|0;x=I+32|0;y=I+16|0;A=I+8|0;B=I+24|0;C=I+48|0;D=I+40|0;E=I+56|0;F=(i&8|0)==0;G=J+4|0;v=1;while(1){j=c[K>>2]|0;if((v|0)>(c[j+180>>2]|0))break;u=c[(c[j+184>>2]|0)+(v<<2)>>2]|0;if((vv(e,u)|0)<<24>>24){if(L)xu(e,u,i);wv(e,u);r=c[M>>2]|0;s=r+208|0;if(!(c[s>>2]|0))t=(b[r+260>>1]&1)!=0;else t=1;_E(Jm(u,85048)|0);if(!(L|t^1)){q=(c[u+16>>2]|0)+16|0;c[w>>2]=c[q>>2];c[w+4>>2]=c[q+4>>2];c[w+8>>2]=c[q+8>>2];c[w+12>>2]=c[q+12>>2];c[w+16>>2]=c[q+16>>2];c[w+20>>2]=c[q+20>>2];c[w+24>>2]=c[q+24>>2];c[w+28>>2]=c[q+28>>2];eu(e,w);xD(e,c[s>>2]|0,c[r+228>>2]|0,c[r+244>>2]|0,c[r+212>>2]|0)}c[H>>2]=0;j=xv(u,H)|0;if(!j)p=0;else{GD(e,j);p=c[H>>2]&1}q=u+16|0;j=d[(c[q>>2]|0)+112>>0]|0;do if(!(j&1)){if(j&2|0){j=HA(u,0,91300)|0;k=HA(u,0,91308)|0;O=29;break}if(j&8|0){j=HA(u,0,91316)|0;k=HA(u,0,91324)|0;O=29;break}if(j&4|0){j=HA(u,0,91332)|0;k=HA(u,0,91340)|0;O=29;break}j=Jm(u,122540)|0;if(!j)k=0;else k=(a[j>>0]|0)==0?0:j;j=Jm(u,122531)|0;if(!j)j=k;else j=(a[j>>0]|0)==0?k:j;m=Jm(u,86469)|0;if(m)k=(a[m>>0]|0)==0?k:m;if(!((p|0)!=0&(k|0)!=0)){m=Jm(u,85423)|0;if(m|0?a[m>>0]|0:0){k=m;O=29;break}j=(j|0)==0?122106:j;n=(k|0)==0?119592:k;c[J>>2]=0;if(!p)k=0;else O=31}else O=29}else{j=HA(u,0,91284)|0;k=HA(u,0,91292)|0;O=29}while(0);if((O|0)==29){c[J>>2]=0;j=(j|0)==0?122106:j;n=(k|0)==0?119592:k;O=31}if((O|0)==31){O=0;if(!((yv(n,J,w)|0)<<24>>24)){ED(e,n);k=1}else{ED(e,c[J>>2]|0);k=c[G>>2]|0;m=EA(u,c[42188]|0,0,0)|0;o=+g[w>>2];if(!k)FD(e,122106,m,o);else FD(e,k,m,o);k=(c[H>>2]|0)>>>1&1|2}}m=c[42187]|0;if((m|0?(z=Km(u,m)|0,z|0):0)?a[z>>0]|0:0)PD(e,+FA(u,c[42187]|0,1.0,0.0));p=c[H>>2]|0;do if(p&4){m=EA(u,c[42186]|0,1,0)|0;if(m|k|0){n=c[q>>2]|0;Q=n+16|0;c[I>>2]=c[Q>>2];c[I+4>>2]=c[Q+4>>2];c[I+8>>2]=c[Q+8>>2];c[I+12>>2]=c[Q+12>>2];n=n+32|0;c[x>>2]=c[n>>2];c[x+4>>2]=c[n+4>>2];c[x+8>>2]=c[n+8>>2];c[x+12>>2]=c[n+12>>2];h[y>>3]=+h[x>>3];h[B>>3]=+h[A>>3];h[C>>3]=+h[I>>3];h[E>>3]=+h[D>>3];if(!m)CD(e,122171);else CD(e,j);zy(e,I,4,p,k)}}else{if(!(p&64)){if(EA(u,c[42186]|0,1,0)|0){CD(e,j);Q=(c[q>>2]|0)+16|0;c[w>>2]=c[Q>>2];c[w+4>>2]=c[Q+4>>2];c[w+8>>2]=c[Q+8>>2];c[w+12>>2]=c[Q+12>>2];c[w+16>>2]=c[Q+16>>2];c[w+20>>2]=c[Q+20>>2];c[w+24>>2]=c[Q+24>>2];c[w+28>>2]=c[Q+28>>2];JD(e,w,k);break}if(!k)break;CD(e,122171);Q=(c[q>>2]|0)+16|0;c[w>>2]=c[Q>>2];c[w+4>>2]=c[Q+4>>2];c[w+8>>2]=c[Q+8>>2];c[w+12>>2]=c[Q+12>>2];c[w+16>>2]=c[Q+16>>2];c[w+20>>2]=c[Q+20>>2];c[w+24>>2]=c[Q+24>>2];c[w+28>>2]=c[Q+28>>2];JD(e,w,k);break}Q=c[q>>2]|0;p=Q+16|0;c[I>>2]=c[p>>2];c[I+4>>2]=c[p+4>>2];c[I+8>>2]=c[p+8>>2];c[I+12>>2]=c[p+12>>2];Q=Q+32|0;c[x>>2]=c[Q>>2];c[x+4>>2]=c[Q+4>>2];c[x+8>>2]=c[Q+8>>2];c[x+12>>2]=c[Q+12>>2];h[y>>3]=+h[x>>3];h[B>>3]=+h[A>>3];h[C>>3]=+h[I>>3];h[E>>3]=+h[D>>3];if(!(EA(u,c[42186]|0,1,0)|0))CD(e,122171);else CD(e,j);if((du(e,I,n,0)|0)>1){c[N>>2]=En(u)|0;$l(3,85431,N)|0}Q=(c[q>>2]|0)+16|0;c[w>>2]=c[Q>>2];c[w+4>>2]=c[Q+4>>2];c[w+8>>2]=c[Q+8>>2];c[w+12>>2]=c[Q+12>>2];c[w+16>>2]=c[Q+16>>2];c[w+20>>2]=c[Q+20>>2];c[w+24>>2]=c[Q+24>>2];c[w+28>>2]=c[Q+28>>2];JD(e,w,0)}while(0);$I(c[J>>2]|0);j=c[(c[q>>2]|0)+12>>2]|0;if(j|0)qw(e,5,j);if(t){if(L){Q=(c[q>>2]|0)+16|0;c[w>>2]=c[Q>>2];c[w+4>>2]=c[Q+4>>2];c[w+8>>2]=c[Q+8>>2];c[w+12>>2]=c[Q+12>>2];c[w+16>>2]=c[Q+16>>2];c[w+20>>2]=c[Q+20>>2];c[w+24>>2]=c[Q+24>>2];c[w+28>>2]=c[Q+28>>2];eu(e,w);xD(e,c[s>>2]|0,c[r+228>>2]|0,c[r+244>>2]|0,c[r+212>>2]|0)}yD(e)}a:do if(!F){k=eo(u)|0;while(1){if(!k)break a;yu(e,k);j=Qm(u,k)|0;while(1){if(!j)break;zu(e,j);j=Sm(u,j)|0}k=fo(u,k)|0}}while(0);zv(e,f);if(!L)xu(e,u,i)}v=v+1|0}l=P;return}function yu(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;j=l;l=l+32|0;e=j;h=c[b>>2]|0;i=d+16|0;a:do if(((c[(c[i>>2]|0)+8>>2]|0?(nv(b,so(d)|0,d)|0)<<24>>24:0)?(k=b+256|0,c[e>>2]=c[k>>2],c[e+4>>2]=c[k+4>>2],c[e+8>>2]=c[k+8>>2],c[e+12>>2]=c[k+12>>2],c[e+16>>2]=c[k+16>>2],c[e+20>>2]=c[k+20>>2],c[e+24>>2]=c[k+24>>2],c[e+28>>2]=c[k+28>>2],(ov(d,e)|0)<<24>>24):0)?(f=(c[i>>2]|0)+116|0,g=c[h+28>>2]|0,(g|0)!=(a[f>>0]|0)):0){a[f>>0]=g;MD(b,En(d)|0);e=GA(d,c[42214]|0,174185)|0;if(a[e>>0]|0)MD(b,e);e=GA(d,c[42202]|0,174185)|0;b:do if(a[e>>0]|0){Eu(e)|0;e=168408;while(1){f=e;e=e+4|0;f=c[f>>2]|0;if(!f)break b;if((a[f>>0]|0)!=105)continue;if(!(yJ(f,119127)|0))break a}}while(0);pv(b,d);hb[c[(c[(c[(c[i>>2]|0)+8>>2]|0)+4>>2]|0)+20>>2]&31](b,d);e=c[(c[i>>2]|0)+108>>2]|0;if(e|0?a[e+81>>0]|0:0)qw(b,10,e);qv(b)}while(0);l=j;return}function zu(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+32|0;g=h;e=b+256|0;c[g>>2]=c[e>>2];c[g+4>>2]=c[e+4>>2];c[g+8>>2]=c[e+8>>2];c[g+12>>2]=c[e+12>>2];c[g+16>>2]=c[e+16>>2];c[g+20>>2]=c[e+20>>2];c[g+24>>2]=c[e+24>>2];c[g+28>>2]=c[e+28>>2];a:do if((Cu(d,g)|0)<<24>>24?(f=d+-48|0,(Du(b,d)|0)<<24>>24):0){i=d+48|0;e=sJ(En(c[((c[d>>2]&3|0)==3?d:i)+40>>2]|0)|0)|0;e=_I(e+3+(sJ(En(c[((c[d>>2]&3|0)==2?d:f)+40>>2]|0)|0)|0)|0)|0;yK(e,En(c[((c[d>>2]&3|0)==3?d:i)+40>>2]|0)|0)|0;i=(rn(so(c[((c[d>>2]&3|0)==2?d:f)+40>>2]|0)|0)|0)==0;g=e+(sJ(e)|0)|0;if(i){a[g>>0]=a[122549]|0;a[g+1>>0]=a[122550]|0;a[g+2>>0]=a[122551]|0}else{a[g>>0]=a[122546]|0;a[g+1>>0]=a[122547]|0;a[g+2>>0]=a[122548]|0}JL(e,En(c[((c[d>>2]&3|0)==2?d:f)+40>>2]|0)|0)|0;MD(b,e);$I(e);e=GA(d,c[42236]|0,174185)|0;if(a[e>>0]|0)MD(b,e);e=GA(d,c[42230]|0,174185)|0;b:do if(!(a[e>>0]|0))e=0;else{Eu(e)|0;e=168408;while(1){f=e;e=e+4|0;f=c[f>>2]|0;if(!f){e=168408;break b}if((a[f>>0]|0)!=105)continue;if(!(yJ(f,119127)|0))break a}}while(0);Fu(b,d,e);Gu(b,d,e);Hu(b)}while(0);l=h;return}function Au(a,b){a=a|0;b=b|0;var d=0,e=0;d=a+16|0;a=1;while(1){e=c[d>>2]|0;if((a|0)>(c[e+180>>2]|0)){a=1;break}if(!(Co(c[(c[e+184>>2]|0)+(a<<2)>>2]|0,b)|0))a=a+1|0;else{a=0;break}}return a|0}function Bu(a,b){a=a|0;b=b|0;var d=0,e=0;d=a+16|0;a=1;while(1){e=c[d>>2]|0;if((a|0)>(c[e+180>>2]|0)){a=1;break}if(!(Co(c[(c[e+184>>2]|0)+(a<<2)>>2]|0,b)|0))a=a+1|0;else{a=0;break}}return a|0}function Cu(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=l;l=l+64|0;i=j+32|0;f=j;g=b+16|0;b=c[g>>2]|0;e=c[b+8>>2]|0;if((e|0)!=0?(e=e+8|0,c[f>>2]=c[e>>2],c[f+4>>2]=c[e+4>>2],c[f+8>>2]=c[e+8>>2],c[f+12>>2]=c[e+12>>2],c[f+16>>2]=c[e+16>>2],c[f+20>>2]=c[e+20>>2],c[f+24>>2]=c[e+24>>2],c[f+28>>2]=c[e+28>>2],c[i>>2]=c[d>>2],c[i+4>>2]=c[d+4>>2],c[i+8>>2]=c[d+8>>2],c[i+12>>2]=c[d+12>>2],c[i+16>>2]=c[d+16>>2],c[i+20>>2]=c[d+20>>2],c[i+24>>2]=c[d+24>>2],c[i+28>>2]=c[d+28>>2],(mv(f,i)|0)!=0):0)b=1;else h=3;do if((h|0)==3){e=c[b+96>>2]|0;if(e){c[i>>2]=c[d>>2];c[i+4>>2]=c[d+4>>2];c[i+8>>2]=c[d+8>>2];c[i+12>>2]=c[d+12>>2];c[i+16>>2]=c[d+16>>2];c[i+20>>2]=c[d+20>>2];c[i+24>>2]=c[d+24>>2];c[i+28>>2]=c[d+28>>2];if((DB(e,i)|0)<<24>>24){b=1;break}b=c[g>>2]|0}b=c[b+108>>2]|0;if((b|0?a[b+81>>0]|0:0)?(c[i>>2]=c[d>>2],c[i+4>>2]=c[d+4>>2],c[i+8>>2]=c[d+8>>2],c[i+12>>2]=c[d+12>>2],c[i+16>>2]=c[d+16>>2],c[i+20>>2]=c[d+20>>2],c[i+24>>2]=c[d+24>>2],c[i+28>>2]=c[d+28>>2],(DB(b,i)|0)<<24>>24):0){b=1;break}b=0}while(0);l=j;return b|0}function Du(b,d){b=b|0;d=d|0;var e=0,f=0;a:do if((c[b+156>>2]|0)>=2?(e=GA(d,c[42235]|0,174185)|0,(iv(b,e)|0)<<24>>24==0):0)if(!(a[e>>0]|0)){e=0;while(1){if((e|0)>=2){e=0;break a}f=(e|0)==1;f=GA(c[((c[d>>2]&3|0)==((f?2:3)|0)?d:d+((f?-1:1)*48|0)|0)+40>>2]|0,c[42212]|0,174185)|0;if(!(a[f>>0]|0)){e=1;break a}if(!((iv(b,f)|0)<<24>>24))e=e+1|0;else{e=1;break}}}else e=0;else e=1;while(0);return e|0}function Eu(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+192|0;o=p+24|0;n=p+16|0;m=p+8|0;k=p;g=p+48|0;j=p+32|0;if(a[85305]|0){dm(168672,128,173952);a[85305]=0}dm(j,128,p+56|0);c[g>>2]=b;h=j+4|0;i=j+8|0;d=0;e=0;a:while(1){f=d;b:while(1)switch(gv(g,j)|0){case 0:{d=21;break a}case 40:if(!(f<<24>>24)){f=1;continue b}else{d=7;break a}case 41:if(!(f<<24>>24)){d=9;break a}else{f=0;continue b}default:break b}if(!(f<<24>>24)){if((e|0)==63){d=12;break}d=c[42169]|0;if(d>>>0>=(c[42170]|0)>>>0){em(168672,1)|0;d=c[42169]|0}c[42169]=d+1;a[d>>0]=0;c[168408+(e<<2)>>2]=c[42169];e=e+1|0}d=c[h>>2]|0;if(d>>>0>=(c[i>>2]|0)>>>0){em(j,1)|0;d=c[h>>2]|0}a[d>>0]=0;d=c[j>>2]|0;c[h>>2]=d;gm(168672,d)|0;d=c[42169]|0;if(d>>>0>=(c[42170]|0)>>>0){em(168672,1)|0;d=c[42169]|0}c[42169]=d+1;a[d>>0]=0;d=f}do if((d|0)==7){c[k>>2]=b;$l(1,85306,k)|0;c[42102]=0;hm(j)}else if((d|0)==9){c[m>>2]=b;$l(1,85340,m)|0;c[42102]=0;hm(j)}else if((d|0)==12){c[n>>2]=b;$l(0,85368,n)|0;c[42165]=0;hm(j)}else if((d|0)==21){if(f<<24>>24){c[o>>2]=b;$l(1,85391,o)|0;c[42102]=0;hm(j);break}c[168408+(e<<2)>>2]=0;hm(j);d=c[42169]|0;if(d>>>0>=(c[42170]|0)>>>0){em(168672,1)|0;d=c[42169]|0}a[d>>0]=0;c[42169]=c[42168]}while(0);l=p;return 168408}function Fu(d,f,g){d=d|0;f=f|0;g=g|0;var i=0,j=0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=l;l=l+160|0;y=A+24|0;w=A+20|0;v=A+16|0;o=A;p=A+32|0;x=c[d+152>>2]|0;c[y>>2]=0;c[w>>2]=0;c[v>>2]=0;z=Wt(d)|0;c[z+4>>2]=3;c[z+8>>2]=f;c[z+12>>2]=9;t=f+16|0;n=c[(c[t>>2]|0)+96>>2]|0;if((n|0?(a[n+82>>0]|0)==0:0)?(KA(Jm(f,85121)|0,0)|0)<<24>>24:0){n=z+260|0;b[n>>1]=b[n>>1]|512}if(g|0?c[(c[t>>2]|0)+8>>2]|0:0)GD(d,g);g=c[42251]|0;if((g|0?(i=Km(f,g)|0,i|0):0)?a[i>>0]|0:0)PD(d,+FA(f,c[42251]|0,1.0,0.0));do if(x&16777216|0){g=f+48|0;if((e[(c[(so(c[((c[f>>2]&3|0)==3?f:g)+40>>2]|0)|0)+16>>2]|0)+178>>1]|0)>2){m=+h[(c[(c[(c[((c[f>>2]&3|0)==3?f:g)+40>>2]|0)+16>>2]|0)+132>>2]|0)+16>>3]*72.0;h[z+176>>3]=+(~~(m+(m>=0.0?.5:-.5))|0);m=+h[(c[(c[(c[((c[f>>2]&3|0)==2?f:f+-48|0)+40>>2]|0)+16>>2]|0)+132>>2]|0)+16>>3]*72.0;h[z+184>>3]=+(~~(m+(m>=0.0?.5:-.5))|0);break}else{n=z+176|0;c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;c[n+12>>2]=0;break}}while(0);if(x&32768|0){n=c[t>>2]|0;g=c[n+96>>2]|0;if(!g)g=c[z+192>>2]|0;else{g=c[g>>2]|0;c[z+192>>2]=g}i=z+196|0;c[i>>2]=g;k=z+204|0;c[k>>2]=g;j=z+200|0;c[j>>2]=g;g=c[n+108>>2]|0;if(g|0)c[i>>2]=c[g>>2];g=c[n+104>>2]|0;if(g|0)c[j>>2]=c[g>>2];g=c[n+100>>2]|0;if(g|0)c[k>>2]=c[g>>2]}if(!(x&65536))j=0;else{dm(o,128,p);c[z+212>>2]=rw(Zt(d,f,o)|0,f)|0;hm(o);g=Jm(f,96264)|0;if((g|0)!=0?(a[g>>0]|0)!=0:0)q=31;else{g=Jm(f,96269)|0;if((g|0)!=0?(a[g>>0]|0)!=0:0)q=31;else i=0}if((q|0)==31)i=rw(g,f)|0;g=Jm(f,85134)|0;if((g|0)!=0?(a[g>>0]|0)!=0:0)q=36;else q=34;do if((q|0)==34){g=Jm(f,85143)|0;if(g|0?a[g>>0]|0:0){q=36;break}if(i|0){g=HL(i)|0;q=39}}while(0);if((q|0)==36){g=rw(g,f)|0;q=39}if((q|0)==39)c[z+208>>2]=g;g=Jm(f,85151)|0;if((g|0)!=0?(a[g>>0]|0)!=0:0)q=44;else q=42;do if((q|0)==42){g=Jm(f,85161)|0;if(g|0?a[g>>0]|0:0){q=44;break}if(i|0){g=HL(i)|0;q=47}}while(0);if((q|0)==44){g=rw(g,f)|0;q=47}if((q|0)==47)c[z+216>>2]=g;g=Jm(f,85170)|0;if((g|0)!=0?(a[g>>0]|0)!=0:0)q=52;else q=50;do if((q|0)==50){g=Jm(f,85179)|0;if(g|0?a[g>>0]|0:0){q=52;break}if(i|0)c[z+220>>2]=HL(i)|0}while(0);if((q|0)==52){c[z+220>>2]=rw(g,f)|0;q=z+260|0;b[q>>1]=b[q>>1]|128}g=Jm(f,85187)|0;if((g|0)!=0?(a[g>>0]|0)!=0:0)q=59;else q=57;do if((q|0)==57){g=Jm(f,85196)|0;if(g|0?a[g>>0]|0:0){q=59;break}if(i|0)c[z+224>>2]=HL(i)|0}while(0);if((q|0)==59){c[z+224>>2]=rw(g,f)|0;q=z+260|0;b[q>>1]=b[q>>1]|256}j=i}do if(x&8388608){g=Jm(f,85204)|0;if((g|0)!=0?(a[g>>0]|0)!=0:0)i=rw(g,f)|0;else i=0;g=Jm(f,85211)|0;if((g|0)!=0?(a[g>>0]|0)!=0:0){q=z+260|0;b[q>>1]=b[q>>1]|64;g=rw(g,f)|0;q=72}else q=70;if((q|0)==70?i|0:0){g=HL(i)|0;q=72}if((q|0)==72)c[z+244>>2]=g;g=Jm(f,85222)|0;if((g|0)!=0?(a[g>>0]|0)!=0:0){g=rw(g,f)|0;q=78}else q=76;if((q|0)==76?i|0:0){g=HL(i)|0;q=78}if((q|0)==78)c[z+248>>2]=g;g=Jm(f,85234)|0;if((g|0)!=0?(a[g>>0]|0)!=0:0){c[z+252>>2]=rw(g,f)|0;p=z+260|0;b[p>>1]=b[p>>1]|16}else q=82;if((q|0)==82?i|0:0)c[z+252>>2]=HL(i)|0;g=Jm(f,85245)|0;if(g|0?a[g>>0]|0:0){q=z+260|0;b[q>>1]=b[q>>1]|32;c[z+256>>2]=rw(g,f)|0;break}if(i)c[z+256>>2]=HL(i)|0;else i=0}else i=0;while(0);do if(x&4194304|0){g=Jm(f,96229)|0;if((g|0)!=0?(a[g>>0]|0)!=0:0)q=94;else q=92;do if((q|0)==92){g=Jm(f,85256)|0;if(g|0?a[g>>0]|0:0){q=94;break}g=c[z+192>>2]|0;if(g|0)c[z+228>>2]=HL(g)|0}while(0);if((q|0)==94){p=_u(g,f)|0;c[z+228>>2]=rw(p,f)|0;$I(p);p=z+260|0;b[p>>1]=b[p>>1]|1}g=Jm(f,85268)|0;if((g|0)!=0?(a[g>>0]|0)!=0:0){p=_u(g,f)|0;c[z+232>>2]=rw(p,f)|0;$I(p);p=z+260|0;b[p>>1]=b[p>>1]|8}else q=100;if((q|0)==100?(r=c[z+192>>2]|0,r|0):0)c[z+232>>2]=HL(r)|0;g=Jm(f,85281)|0;if((g|0)!=0?(a[g>>0]|0)!=0:0){r=_u(g,f)|0;c[z+236>>2]=rw(r,f)|0;$I(r);r=z+260|0;b[r>>1]=b[r>>1]|2}else q=105;if((q|0)==105?(s=c[z+200>>2]|0,s|0):0)c[z+236>>2]=HL(s)|0;g=Jm(f,85293)|0;if(g|0?a[g>>0]|0:0){s=_u(g,f)|0;c[z+240>>2]=rw(s,f)|0;$I(s);s=z+260|0;b[s>>1]=b[s>>1]|4;break}g=c[z+204>>2]|0;if(g|0)c[z+240>>2]=HL(g)|0}while(0);$I(j);$I(i);do if(x&4259840|0?(u=c[(c[t>>2]|0)+8>>2]|0,u|0):0){if(!(c[z+208>>2]|0)){if((x&524288|0)==0|(c[z+228>>2]|0)==0)break}else if(!(x&524288))break;m=+h[(c[d+16>>2]|0)+152>>3]*.5;m=m>2.0?m:2.0;i=c[u+4>>2]|0;g=0;while(1){if((g|0)>=(i|0))break;$u(y,w,v,(c[u>>2]|0)+(g*48|0)|0,m);g=g+1|0}j=c[v>>2]|0;c[z+276>>2]=j;k=c[w>>2]|0;c[z+280>>2]=k;if(!(x&8192)){g=0;i=0;while(1){if((i|0)>=(j|0))break;g=(c[k+(i<<2)>>2]|0)+g|0;i=i+1|0}y=c[y>>2]|0;gD(d,y,y,g)|0;g=y}else g=c[y>>2]|0;c[z+284>>2]=g;c[z+264>>2]=2;c[z+272>>2]=g;c[z+268>>2]=c[k>>2]}while(0);vD(d,f);g=c[z+208>>2]|0;if(!((g|0)==0?!(b[z+260>>1]&1):0))xD(d,g,c[z+228>>2]|0,c[z+244>>2]|0,c[z+212>>2]|0);l=A;return}function Gu(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0.0,N=0.0,O=0,P=0,Q=0,R=0,S=0;P=l;l=l+240|0;L=P+224|0;K=P+208|0;x=P+128|0;w=P+112|0;O=P+64|0;C=P+48|0;D=P+32|0;E=P+16|0;F=P;G=P+192|0;H=P+176|0;y=P+160|0;B=P+144|0;c[E>>2]=0;c[E+4>>2]=0;c[E+8>>2]=0;c[E+12>>2]=0;M=+h[(c[b+16>>2]|0)+152>>3];_E(Jm(e,85048)|0);J=e+16|0;a:do if(c[(c[J>>2]|0)+8>>2]|0){N=+FA(e,c[42233]|0,1.0,0.0);k=GA(e,c[42221]|0,174185)|0;v=(f|0)!=0;b:do if(v){g=f;while(1){i=g;g=g+4|0;i=c[i>>2]|0;if(!i){o=0;break b}if((a[i>>0]|0)!=116)continue;if(!(yJ(i,95939)|0)){o=1;break}}}else o=0;while(0);j=k;q=0;i=0;c:while(1){switch(a[j>>0]|0){case 0:break c;case 58:{g=q+1|0;break}case 59:{g=q;i=i+1|0;break}default:g=q}j=j+1|0;q=g}n=(q|0)!=0;if((i|0)!=0&n)if(!(Ou(b,e,f,k,q+1|0,N,M)|0))break;else m=122106;else m=k;g=d[(c[J>>2]|0)+115>>0]|0;if(!(g&1))if(!(g&2))if(!(g&8))if(!(g&4)){i=m;j=HA(e,c[42222]|0,m)|0}else{j=91340;g=91332;k=168892;i=168892;p=18}else{j=91324;g=91316;k=168892;i=168892;p=18}else{j=91308;g=91300;k=168892;i=168892;p=18}else{j=91292;g=91284;k=168892;i=168892;p=18}if((p|0)==18){i=c[i>>2]|0;i=HA(e,i,Pu(m,g)|0)|0;g=HA(e,c[k>>2]|0,j)|0;if((i|0)==(m|0)){i=m;j=g}else{CD(b,i);j=g}}if((j|0)!=(m|0))ED(b,j);if(o<<24>>24){i=(a[i>>0]|0)==0?122106:i;g=(a[j>>0]|0)==0?122106:j;CD(b,122171);ED(b,i);u=O;r=c[c[(c[J>>2]|0)+8>>2]>>2]|0;s=u+48|0;do{c[u>>2]=c[r>>2];u=u+4|0;r=r+4|0}while((u|0)<(s|0));J=eA(O,Qu(e)|0,M,0,0)|0;ID(b,c[J+8>>2]|0,c[J>>2]|0,1);Ru(J);CD(b,i);if((g|0)!=(i|0))ED(b,g);g=c[O+8>>2]|0;if(g|0){I=O+16|0;J=c[O>>2]|0;c[K>>2]=c[I>>2];c[K+4>>2]=c[I+4>>2];c[K+8>>2]=c[I+8>>2];c[K+12>>2]=c[I+12>>2];c[L>>2]=c[J>>2];c[L+4>>2]=c[J+4>>2];c[L+8>>2]=c[J+8>>2];c[L+12>>2]=c[J+12>>2];Tt(b,2,K,L,N,M,g)}g=c[O+12>>2]|0;if(!g)break;J=O+32|0;O=(c[O>>2]|0)+((c[O+4>>2]|0)+-1<<4)|0;c[K>>2]=c[J>>2];c[K+4>>2]=c[J+4>>2];c[K+8>>2]=c[J+8>>2];c[K+12>>2]=c[J+12>>2];c[L>>2]=c[O>>2];c[L+4>>2]=c[O+4>>2];c[L+8>>2]=c[O+8>>2];c[L+12>>2]=c[O+12>>2];Tt(b,3,K,L,N,M,g);break}g=c[J>>2]|0;if(!n){do if(!(a[g+115>>0]&3)){if(a[i>>0]|0){CD(b,i);ED(b,j);break}CD(b,122106);if(!(a[j>>0]|0)){ED(b,122106);break}else{ED(b,j);break}}while(0);k=b+152|0;m=O+4|0;n=O+8|0;o=O+12|0;p=O+32|0;q=O+16|0;j=0;while(1){g=c[(c[J>>2]|0)+8>>2]|0;if((j|0)>=(c[g+4>>2]|0))break a;u=O;r=(c[g>>2]|0)+(j*48|0)|0;s=u+48|0;do{c[u>>2]=c[r>>2];u=u+4|0;r=r+4|0}while((u|0)<(s|0));g=c[O>>2]|0;i=c[m>>2]|0;do if(!(c[k>>2]&16384)){KD(b,g,i,0,0,0);g=c[n>>2]|0;if(g|0){I=c[O>>2]|0;c[K>>2]=c[q>>2];c[K+4>>2]=c[q+4>>2];c[K+8>>2]=c[q+8>>2];c[K+12>>2]=c[q+12>>2];c[L>>2]=c[I>>2];c[L+4>>2]=c[I+4>>2];c[L+8>>2]=c[I+8>>2];c[L+12>>2]=c[I+12>>2];Tt(b,2,K,L,N,M,g)}g=c[o>>2]|0;if(g|0){I=(c[O>>2]|0)+((c[m>>2]|0)+-1<<4)|0;c[K>>2]=c[p>>2];c[K+4>>2]=c[p+4>>2];c[K+8>>2]=c[p+8>>2];c[K+12>>2]=c[p+12>>2];c[L>>2]=c[I>>2];c[L+4>>2]=c[I+4>>2];c[L+8>>2]=c[I+8>>2];c[L+12>>2]=c[I+12>>2];Tt(b,3,K,L,N,M,g)}if((c[(c[(c[J>>2]|0)+8>>2]|0)+4>>2]|0)>1){if(!(c[n>>2]|0)){if(!(v&(c[o>>2]|0)!=0))break}else if(!v)break;GD(b,f)}}else KD(b,g,i,c[n>>2]|0,c[o>>2]|0,0);while(0);j=j+1|0}}I=c[(c[g+8>>2]|0)+4>>2]|0;A=I*48|0;z=_I(A)|0;A=_I(A)|0;t=+(q+2|0)*.5;v=O+4|0;p=C+8|0;q=D+8|0;e=E+8|0;f=F+8|0;o=0;while(1){if((o|0)>=(I|0))break;u=O;r=(c[c[(c[J>>2]|0)+8>>2]>>2]|0)+(o*48|0)|0;s=u+48|0;do{c[u>>2]=c[r>>2];u=u+4|0;r=r+4|0}while((u|0)<(s|0));g=c[v>>2]|0;c[z+(o*48|0)+4>>2]=g;c[A+(o*48|0)+4>>2]=g;n=g<<4;m=_I(n)|0;c[z+(o*48|0)>>2]=m;n=_I(n)|0;c[A+(o*48|0)>>2]=n;k=c[O>>2]|0;c[F>>2]=c[k>>2];c[F+4>>2]=c[k+4>>2];c[F+8>>2]=c[k+8>>2];c[F+12>>2]=c[k+12>>2];k=0;while(1){if((k|0)>=(g+-1|0))break;c[C>>2]=c[F>>2];c[C+4>>2]=c[F+4>>2];c[C+8>>2]=c[F+8>>2];c[C+12>>2]=c[F+12>>2];g=k+1|0;j=(c[O>>2]|0)+(g<<4)|0;c[D>>2]=c[j>>2];c[D+4>>2]=c[j+4>>2];c[D+8>>2]=c[j+8>>2];c[D+12>>2]=c[j+12>>2];j=m+(k<<4)|0;if(!k){c[K>>2]=c[C>>2];c[K+4>>2]=c[C+4>>2];c[K+8>>2]=c[C+8>>2];c[K+12>>2]=c[C+12>>2];c[L>>2]=c[D>>2];c[L+4>>2]=c[D+4>>2];c[L+8>>2]=c[D+8>>2];c[L+12>>2]=c[D+12>>2];Su(G,K,L);c[j>>2]=c[G>>2];c[j+4>>2]=c[G+4>>2];c[j+8>>2]=c[G+8>>2];c[j+12>>2]=c[G+12>>2]}else{c[K>>2]=c[E>>2];c[K+4>>2]=c[E+4>>2];c[K+8>>2]=c[E+8>>2];c[K+12>>2]=c[E+12>>2];c[L>>2]=c[D>>2];c[L+4>>2]=c[D+4>>2];c[L+8>>2]=c[D+8>>2];c[L+12>>2]=c[D+12>>2];Su(H,K,L);c[j>>2]=c[H>>2];c[j+4>>2]=c[H+4>>2];c[j+8>>2]=c[H+8>>2];c[j+12>>2]=c[H+12>>2]}R=c[O>>2]|0;s=k+2|0;S=R+(s<<4)|0;c[E>>2]=c[S>>2];c[E+4>>2]=c[S+4>>2];c[E+8>>2]=c[S+8>>2];c[E+12>>2]=c[S+12>>2];u=k+3|0;R=R+(u<<4)|0;c[F>>2]=c[R>>2];c[F+4>>2]=c[R+4>>2];c[F+8>>2]=c[R+8>>2];c[F+12>>2]=c[R+12>>2];Q=m+(g<<4)|0;r=m+(s<<4)|0;c[w>>2]=c[C>>2];c[w+4>>2]=c[C+4>>2];c[w+8>>2]=c[C+8>>2];c[w+12>>2]=c[C+12>>2];c[x>>2]=c[D>>2];c[x+4>>2]=c[D+4>>2];c[x+8>>2]=c[D+8>>2];c[x+12>>2]=c[D+12>>2];c[K>>2]=c[S>>2];c[K+4>>2]=c[S+4>>2];c[K+8>>2]=c[S+8>>2];c[K+12>>2]=c[S+12>>2];c[L>>2]=c[R>>2];c[L+4>>2]=c[R+4>>2];c[L+8>>2]=c[R+8>>2];c[L+12>>2]=c[R+12>>2];Tu(y,w,x,K,L);c[r>>2]=c[y>>2];c[r+4>>2]=c[y+4>>2];c[r+8>>2]=c[y+8>>2];c[r+12>>2]=c[y+12>>2];c[Q>>2]=c[y>>2];c[Q+4>>2]=c[y+4>>2];c[Q+8>>2]=c[y+8>>2];c[Q+12>>2]=c[y+12>>2];h[n+(k<<4)>>3]=+h[C>>3]-+h[j>>3]*t;h[n+(k<<4)+8>>3]=+h[p>>3]-+h[m+(k<<4)+8>>3]*t;h[n+(g<<4)>>3]=+h[D>>3]-+h[Q>>3]*t;h[n+(g<<4)+8>>3]=+h[q>>3]-+h[m+(g<<4)+8>>3]*t;h[n+(s<<4)>>3]=+h[E>>3]-+h[r>>3]*t;h[n+(s<<4)+8>>3]=+h[e>>3]-+h[m+(s<<4)+8>>3]*t;k=u;g=c[v>>2]|0}S=m+(k<<4)|0;c[K>>2]=c[E>>2];c[K+4>>2]=c[E+4>>2];c[K+8>>2]=c[E+8>>2];c[K+12>>2]=c[E+12>>2];c[L>>2]=c[F>>2];c[L+4>>2]=c[F+4>>2];c[L+8>>2]=c[F+8>>2];c[L+12>>2]=c[F+12>>2];Su(B,K,L);c[S>>2]=c[B>>2];c[S+4>>2]=c[B+4>>2];c[S+8>>2]=c[B+8>>2];c[S+12>>2]=c[B+12>>2];h[n+(k<<4)>>3]=+h[F>>3]-+h[S>>3]*t;h[n+(k<<4)+8>>3]=+h[f>>3]-+h[m+(k<<4)+8>>3]*t;o=o+1|0}s=HL(i)|0;f=0;r=i;g=i;j=i;i=s;while(1){i=EL(i,93017)|0;if(!i)break;e=(a[i>>0]|0)==0?122106:i;if((e|0)!=(j|0))if(!(a[(c[J>>2]|0)+115>>0]&3)){CD(b,e);ED(b,e);j=e}else j=e;m=(f|0)==0;n=f>>>0<2;i=0;while(1){if((i|0)>=(I|0))break;o=c[A+(i*48|0)>>2]|0;p=c[z+(i*48|0)>>2]|0;q=c[A+(i*48|0)+4>>2]|0;k=0;while(1){if((k|0)>=(q|0))break;S=o+(k<<4)|0;h[S>>3]=+h[S>>3]+ +h[p+(k<<4)>>3];S=o+(k<<4)+8|0;h[S>>3]=+h[S>>3]+ +h[p+(k<<4)+8>>3];k=k+1|0}KD(b,o,q,0,0,0);i=i+1|0}f=f+1|0;r=m?e:r;g=n?e:g;i=0}i=c[O+8>>2]|0;if(!i)i=0;else{if(g){if(!(a[(c[J>>2]|0)+115>>0]&3)){CD(b,g);ED(b,g)}}else g=0;R=O+16|0;S=c[O>>2]|0;c[K>>2]=c[R>>2];c[K+4>>2]=c[R+4>>2];c[K+8>>2]=c[R+8>>2];c[K+12>>2]=c[R+12>>2];c[L>>2]=c[S>>2];c[L+4>>2]=c[S+4>>2];c[L+8>>2]=c[S+8>>2];c[L+12>>2]=c[S+12>>2];Tt(b,2,K,L,N,M,i);i=g}j=O+12|0;g=c[j>>2]|0;if(g|0){if((i|0)!=(r|0)?(a[(c[J>>2]|0)+115>>0]&3)==0:0){CD(b,r);ED(b,r);g=c[j>>2]|0}R=O+32|0;S=(c[O>>2]|0)+((c[v>>2]|0)+-1<<4)|0;c[K>>2]=c[R>>2];c[K+4>>2]=c[R+4>>2];c[K+8>>2]=c[R+8>>2];c[K+12>>2]=c[R+12>>2];c[L>>2]=c[S>>2];c[L+4>>2]=c[S+4>>2];c[L+8>>2]=c[S+8>>2];c[L+12>>2]=c[S+12>>2];Tt(b,3,K,L,N,M,g)}$I(s);g=0;while(1){if((g|0)>=(I|0))break;$I(c[z+(g*48|0)>>2]|0);$I(c[A+(g*48|0)>>2]|0);g=g+1|0}$I(z);$I(A)}while(0);l=P;return}function Hu(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;x=l;l=l+64|0;r=x+48|0;u=x+32|0;t=x+16|0;s=x;w=c[a+16>>2]|0;v=c[w+8>>2]|0;q=w+208|0;if(!((c[q>>2]|0)==0?!(b[w+260>>1]&1):0))d=3;a:do if((d|0)==3?(yD(a),p=w+276|0,e=c[p>>2]|0,e|0):0){h=w+280|0;d=c[h>>2]|0;i=w+268|0;j=w+284|0;k=w+272|0;m=w+228|0;n=w+244|0;o=w+212|0;f=c[d>>2]|0;g=1;while(1){if((g|0)>=(e|0))break a;c[i>>2]=c[d+(g<<2)>>2];c[k>>2]=(c[j>>2]|0)+(f<<4);xD(a,c[q>>2]|0,c[m>>2]|0,c[n>>2]|0,c[o>>2]|0);yD(a);y=c[h>>2]|0;f=(c[y+(g<<2)>>2]|0)+f|0;g=g+1|0;e=c[p>>2]|0;d=y}}while(0);c[w+268>>2]=0;c[w+272>>2]=0;q=v+16|0;d=c[q>>2]|0;e=c[d+8>>2]|0;if(!e)f=w+260|0;else{p=c[e>>2]|0;d=c[p>>2]|0;y=c[p+8>>2]|0;o=p+16|0;c[t>>2]=c[o>>2];c[t+4>>2]=c[o+4>>2];c[t+8>>2]=c[o+8>>2];c[t+12>>2]=c[o+12>>2];p=p+32|0;c[s>>2]=c[p>>2];c[s+4>>2]=c[p+4>>2];c[s+8>>2]=c[p+8>>2];c[s+12>>2]=c[p+12>>2];if(!y){c[u>>2]=c[d>>2];c[u+4>>2]=c[d+4>>2];c[u+8>>2]=c[d+8>>2];c[u+12>>2]=c[d+12>>2]}else{c[u>>2]=c[t>>2];c[u+4>>2]=c[t+4>>2];c[u+8>>2]=c[t+8>>2];c[u+12>>2]=c[t+12>>2]}f=w+260|0;p=b[f>>1]|0;o=c[w+220>>2]|0;c[r>>2]=c[u>>2];c[r+4>>2]=c[u+4>>2];c[r+8>>2]=c[u+8>>2];c[r+12>>2]=c[u+12>>2];Iu(a,r,(p<<8&65535)<<16>>16>>15&255,o,(p<<14&65535)<<16>>16>>15&255);p=c[(c[q>>2]|0)+8>>2]|0;o=c[p>>2]|0;p=(c[p+4>>2]|0)+-1|0;d=c[o+(p*48|0)>>2]|0;e=c[o+(p*48|0)+4>>2]|0;y=c[o+(p*48|0)+12>>2]|0;n=o+(p*48|0)+16|0;c[t>>2]=c[n>>2];c[t+4>>2]=c[n+4>>2];c[t+8>>2]=c[n+8>>2];c[t+12>>2]=c[n+12>>2];t=o+(p*48|0)+32|0;c[s>>2]=c[t>>2];c[s+4>>2]=c[t+4>>2];c[s+8>>2]=c[t+8>>2];c[s+12>>2]=c[t+12>>2];if(!y){y=d+(e+-1<<4)|0;c[u>>2]=c[y>>2];c[u+4>>2]=c[y+4>>2];c[u+8>>2]=c[y+8>>2];c[u+12>>2]=c[y+12>>2]}else{c[u>>2]=c[s>>2];c[u+4>>2]=c[s+4>>2];c[u+8>>2]=c[s+8>>2];c[u+12>>2]=c[s+12>>2]}d=b[f>>1]|0;y=c[w+224>>2]|0;c[r>>2]=c[u>>2];c[r+4>>2]=c[u+4>>2];c[r+8>>2]=c[u+8>>2];c[r+12>>2]=c[u+12>>2];Iu(a,r,(d<<7&65535)<<16>>16>>15&255,y,(d<<13&65535)<<16>>16>>15&255);d=c[q>>2]|0}e=c[d+96>>2]|0;g=(b[f>>1]<<12&65535)<<16>>16>>15<<16>>16;m=w+216|0;h=c[m>>2]|0;n=w+232|0;i=c[n>>2]|0;o=w+248|0;j=c[o>>2]|0;p=w+212|0;k=c[p>>2]|0;if(!((JA(GA(v,c[42231]|0,122100)|0)|0)<<24>>24))d=0;else d=c[(c[q>>2]|0)+8>>2]|0;Ju(a,e,11,g,h,i,j,k,d);j=c[(c[q>>2]|0)+108>>2]|0;k=(b[f>>1]<<12&65535)<<16>>16>>15<<16>>16;i=c[m>>2]|0;h=c[n>>2]|0;e=c[o>>2]|0;g=c[p>>2]|0;if(!((JA(GA(v,c[42231]|0,122100)|0)|0)<<24>>24))d=0;else d=c[(c[q>>2]|0)+8>>2]|0;Ju(a,j,11,k,i,h,e,g,d);Ju(a,c[(c[q>>2]|0)+100>>2]|0,7,(b[f>>1]<<13&65535)<<16>>16>>15<<16>>16,c[w+224>>2]|0,c[w+240>>2]|0,c[w+256>>2]|0,c[p>>2]|0,0);Ju(a,c[(c[q>>2]|0)+104>>2]|0,6,(b[f>>1]<<14&65535)<<16>>16>>15<<16>>16,c[w+220>>2]|0,c[w+236>>2]|0,c[w+252>>2]|0,c[p>>2]|0,0);wD(a);Xt(a);l=x;return}function Iu(a,d,e,f,g){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0;j=l;l=l+16|0;h=j;i=c[a+16>>2]|0;if(!(e<<24>>24))f=c[i+208>>2]|0;if(!(g<<24>>24==0?((f|0)==0?(b[i+260>>1]&1)==0:0):0)){c[h>>2]=c[d>>2];c[h+4>>2]=c[d+4>>2];c[h+8>>2]=c[d+8>>2];c[h+12>>2]=c[d+12>>2];Nu(a,h)}l=j;return}function Ju(b,d,e,f,g,h,i,j,k){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var m=0,n=0,o=0,p=0,q=0,r=0;r=l;l=l+16|0;o=r;q=c[b+152>>2]|0;if(d|0?a[d+81>>0]|0:0){if(!j)n=0;else{n=ww((sJ(j)|0)+11|0)|0;switch(e|0){case 11:{m=86240;break}case 7:{m=86656;break}case 6:{m=86666;break}default:ma(123205,84925,2730,85060)}c[o>>2]=j;c[o+4>>2]=m;qL(n,85076,o)|0}o=b+16|0;j=(c[o>>2]|0)+12|0;p=c[j>>2]|0;c[j>>2]=e;j=(f|0)!=0|(g|0)!=0;m=(q&4|0)==0;if(j&m){Ku(b,d);xD(b,g,h,i,n)}qw(b,e,d);if(k|0)Lu(b,d,k);if(j){if(!m){Ku(b,d);xD(b,g,h,i,n)}yD(b)}$I(n);c[(c[o>>2]|0)+12>>2]=p}l=r;return}function Ku(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0;d=c[a+16>>2]|0;e=c[a+152>>2]|0;if(e&4259840|0){f=e&131072;i=f>>>16^2;c[d+264>>2]=i;j=d+268|0;c[j>>2]=i+2;i=d+272|0;$I(c[i>>2]|0);d=ww(c[j>>2]<<4)|0;c[i>>2]=d;i=b+56|0;j=b+24|0;h[d>>3]=+h[i>>3]-+h[j>>3]*.5;g=b+64|0;b=b+32|0;h[d+8>>3]=+h[g>>3]-+h[b>>3]*.5;h[d+16>>3]=+h[j>>3]*.5+ +h[i>>3];h[d+24>>3]=+h[b>>3]*.5+ +h[g>>3];if(!(e&8192))gD(a,d,d,2)|0;if(!f)_v(d)}return}function Lu(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0.0;o=l;l=l+96|0;g=o+80|0;i=o+32|0;j=o+16|0;k=o;f=c[d>>2]|0;while(1){m=a[f>>0]|0;if(!(m<<24>>24))break;if(!(YJ(m&255)|0)){n=4;break}else f=f+1|0}if((n|0)==4){p=+h[d+24>>3];m=d+56|0;Mu(i,+h[m>>3]+p*.5,+h[d+64>>3]-+h[d+32>>3]*.5);n=i+16|0;Mu(j,+h[i>>3]-p,+h[i+8>>3]);c[n>>2]=c[j>>2];c[n+4>>2]=c[j+4>>2];c[n+8>>2]=c[j+8>>2];c[n+12>>2]=c[j+12>>2];n=i+32|0;c[g>>2]=c[m>>2];c[g+4>>2]=c[m+4>>2];c[g+8>>2]=c[m+8>>2];c[g+12>>2]=c[m+12>>2];WA(k,e,g);c[n>>2]=c[k>>2];c[n+4>>2]=c[k+4>>2];c[n+8>>2]=c[k+8>>2];c[n+12>>2]=c[k+12>>2];GD(b,c[(c[b>>2]|0)+336>>2]|0);CD(b,c[d+8>>2]|0);LD(b,i,3)}l=o;return}function Mu(a,b,c){a=a|0;b=+b;c=+c;h[a>>3]=b;h[a+8>>3]=c;return}function Nu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0.0,i=0.0,j=0,k=0;d=c[a+16>>2]|0;e=c[a+152>>2]|0;if(e&4259840|0){f=e&131072;j=f>>>16^2;c[d+264>>2]=j;k=d+268|0;c[k>>2]=j+2;j=d+272|0;$I(c[j>>2]|0);d=ww(c[k>>2]<<4)|0;c[j>>2]=d;i=+h[b>>3];h[d>>3]=i+-3.0;g=+h[b+8>>3];h[d+8>>3]=g+-3.0;h[d+16>>3]=i+3.0;h[d+24>>3]=g+3.0;if(!(e&8192))gD(a,d,d,2)|0;if(!f)_v(d)}return}function Ou(a,b,d,e,f,h,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=+h;i=+i;var j=0,k=0,m=0.0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;J=l;l=l+256|0;D=J+224|0;C=J+208|0;j=J+192|0;F=J+144|0;G=J+96|0;H=J+48|0;E=J;k=J+240|0;e=au(e,f,k)|0;if((e|0)>1){z=b+48|0;A=so(c[((c[b>>2]&3|0)==3?b:z)+40>>2]|0)|0;z=En(c[((c[b>>2]&3|0)==3?b:z)+40>>2]|0)|0;A=(rn(A)|0)!=0;B=En(c[((c[b>>2]&3|0)==2?b:b+-48|0)+40>>2]|0)|0;c[j>>2]=z;c[j+4>>2]=A?85095:85100;c[j+8>>2]=B;$l(3,85105,j)|0;if((e|0)==2)e=1;else I=4}else if((e|0)==1)e=1;else I=4;if((I|0)==4){B=b+16|0;r=c[k>>2]|0;s=r+8|0;t=H+4|0;u=F+8|0;v=F+12|0;w=(d|0)!=0;q=(d|0)==0;x=F+32|0;y=F+4|0;z=F+16|0;A=E+4|0;e=0;p=0;while(1){f=c[(c[B>>2]|0)+8>>2]|0;if((p|0)>=(c[f+4>>2]|0))break;j=F;f=(c[f>>2]|0)+(p*48|0)|0;b=j+48|0;do{c[j>>2]=c[f>>2];j=j+4|0;f=f+4|0}while((j|0)<(b|0));b=1;m=1.0;o=c[s>>2]|0;a:while(1){f=c[o>>2]|0;if(!f)break;k=o+4|0;n=+g[k>>2];do if(n<1.0e-05&n>-1.0e-05)f=b;else{CD(a,f);n=+g[k>>2];m=m-n;e=c[o>>2]|0;if(b|0){Yu(F,n,H,E);k=c[H>>2]|0;KD(a,k,c[t>>2]|0,0,0,0);$I(k);if(m<1.0e-05&m>-1.0e-05){I=11;break a}else{f=0;break}}if(m<1.0e-05&m>-1.0e-05){I=13;break a}j=G;f=E;b=j+48|0;do{c[j>>2]=c[f>>2];j=j+4|0;f=f+4|0}while((j|0)<(b|0));n=+g[k>>2];Yu(G,n/(m+n),H,E);$I(c[G>>2]|0);f=c[H>>2]|0;KD(a,f,c[t>>2]|0,0,0,0);$I(f);f=0}while(0);b=f;o=o+12|0}if((I|0)==11){I=0;$I(c[E>>2]|0)}else if((I|0)==13){I=0;o=c[E>>2]|0;KD(a,o,c[A>>2]|0,0,0,0);$I(o)}if(c[u>>2]|0){CD(a,c[c[s>>2]>>2]|0);ED(a,c[c[s>>2]>>2]|0);k=c[F>>2]|0;o=c[u>>2]|0;c[C>>2]=c[z>>2];c[C+4>>2]=c[z+4>>2];c[C+8>>2]=c[z+8>>2];c[C+12>>2]=c[z+12>>2];c[D>>2]=c[k>>2];c[D+4>>2]=c[k+4>>2];c[D+8>>2]=c[k+8>>2];c[D+12>>2]=c[k+12>>2];Tt(a,2,C,D,h,i,o)}if(c[v>>2]|0){CD(a,e);ED(a,e);k=(c[F>>2]|0)+((c[y>>2]|0)+-1<<4)|0;o=c[v>>2]|0;c[C>>2]=c[x>>2];c[C+4>>2]=c[x+4>>2];c[C+8>>2]=c[x+8>>2];c[C+12>>2]=c[x+12>>2];c[D>>2]=c[k>>2];c[D+4>>2]=c[k+4>>2];c[D+8>>2]=c[k+8>>2];c[D+12>>2]=c[k+12>>2];Tt(a,3,C,D,h,i,o)}do if((c[(c[(c[B>>2]|0)+8>>2]|0)+4>>2]|0)>1){if(!(c[u>>2]|0)){if(!(w&(c[v>>2]|0)!=0))break}else if(q)break;GD(a,d)}while(0);p=p+1|0}bu(r);e=0}l=J;return e|0}function Pu(b,d){b=b|0;d=d|0;var e=0,f=0;e=1;a:while(1){switch(a[b>>0]|0){case 0:break a;case 58:{e=e+1|0;break}default:{}}b=b+1|0}f=O((sJ(d)|0)+1|0,e)|0;b=f+10|0;if((c[42166]|0)<(f|0)){c[42166]=b;b=bJ(c[42167]|0,b)|0;c[42167]=b}else b=c[42167]|0;yK(b,d)|0;while(1){e=e+-1|0;b=c[42167]|0;if(!e)break;f=b+(sJ(b)|0)|0;a[f>>0]=58;a[f+1>>0]=0;JL(b,d)|0}return b|0}function Qu(b){b=b|0;var d=0,e=0;d=c[42229]|0;a:do if(!d)e=7;else{d=Km(b,d)|0;switch(a[d>>0]|0){case 110:if(!(yJ(d,120501)|0)){d=1;break a}else{e=7;break a}case 102:if(!(yJ(d,85082)|0)){d=2;break a}else{e=7;break a}case 98:{if(!(yJ(d,85090)|0)){d=3;break a}if(!(yJ(d,96056)|0)){d=4;break a}else{e=7;break a}}default:{e=7;break a}}}while(0);if((e|0)==7){d=(rn(so(c[((c[b>>2]&3|0)==2?b:b+-48|0)+40>>2]|0)|0)|0)!=0;d=d?2:1}return d|0}function Ru(a){a=a|0;if(a|0){$I(c[a+8>>2]|0);$I(a)}return}function Su(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0,f=0.0;e=+h[b>>3]-+h[c>>3];f=+h[b+8>>3]-+h[c+8>>3];d=2.0/+C(+(e*e+.0001+f*f));h[a>>3]=d*f;h[a+8>>3]=-(e*d);return}function Tu(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0.0,g=0.0,i=0.0,j=0.0;g=+h[c>>3]-+h[d>>3];i=+h[c+8>>3]-+h[d+8>>3];f=+C(+(i*i+g*g));if(f<.0001){j=+h[b>>3]-+h[e>>3];f=+h[b+8>>3]-+h[e+8>>3];i=f;g=j;f=+C(+(j*j+.0001+f*f))}j=2.0/f;h[a>>3]=i*j;h[a+8>>3]=-(j*g);return}function Uu(a,b,c){a=+a;b=+b;c=+c;return +(c*.5*(1.0-a/b))}function Vu(a,b,c){a=+a;b=+b;c=+c;return +(c*.5)}function Wu(a,b,c){a=+a;b=+b;c=+c;return +(c*.5*(a/b))}function Xu(a,b,c){a=+a;b=+b;c=+c;b=a/b;return +((!(b<=.5)?1.0-b:b)*c)}function Yu(a,b,d,e){a=a|0;b=+b;d=d|0;e=e|0;var f=0.0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0.0,r=0,s=0;p=l;l=l+16|0;o=p;n=c[a+4>>2]|0;j=(n+-1|0)/3|0;if((n+-4|0)>>>0<3){c[d+4>>2]=4;c[d>>2]=ww(64)|0;c[e+4>>2]=4;n=ww(64)|0;c[e>>2]=n;QA(o,c[a>>2]|0,3,b,c[d>>2]|0,n)}else{n=ww(j<<3)|0;g=0;i=c[a>>2]|0;f=0.0;while(1){if((g|0)>=(j|0))break;q=+Zu(i);h[n+(g<<3)>>3]=q;g=g+1|0;i=i+48|0;f=q+f}b=f*b;m=0;f=0.0;while(1){if((j|0)<=(m|0))break;f=+h[n+(m<<3)>>3]+f;if(f>=b)break;m=m+1|0}k=m*3|0;g=k+4|0;i=d+4|0;c[i>>2]=g;c[d>>2]=ww(g<<4)|0;g=((j-m|0)*3|0)+1|0;j=e+4|0;c[j>>2]=g;c[e>>2]=ww(g<<4)|0;g=0;while(1){if((g|0)>=(c[i>>2]|0))break;r=(c[d>>2]|0)+(g<<4)|0;s=(c[a>>2]|0)+(g<<4)|0;c[r>>2]=c[s>>2];c[r+4>>2]=c[s+4>>2];c[r+8>>2]=c[s+8>>2];c[r+12>>2]=c[s+12>>2];g=g+1|0}g=g+-4|0;i=0;while(1){if((i|0)>=(c[j>>2]|0))break;s=(c[e>>2]|0)+(i<<4)|0;r=(c[a>>2]|0)+(g<<4)|0;c[s>>2]=c[r>>2];c[s+4>>2]=c[r+4>>2];c[s+8>>2]=c[r+8>>2];c[s+12>>2]=c[r+12>>2];g=g+1|0;i=i+1|0}q=+h[n+(m<<3)>>3];QA(o,(c[a>>2]|0)+(k<<4)|0,3,(b-f+q)/q,(c[d>>2]|0)+(k<<4)|0,c[e>>2]|0);$I(n)}l=p;return}function Zu(a){a=a|0;var b=0.0,c=0.0,d=0.0,e=0.0,f=0.0;e=+h[a+16>>3];d=+h[a>>3]-e;f=+h[a+24>>3];b=+h[a+8>>3]-f;d=+C(+(b*b+d*d));b=+h[a+32>>3];e=e-b;c=+h[a+40>>3];f=f-c;d=+C(+(f*f+e*e))+d;b=b-+h[a+48>>3];c=c-+h[a+56>>3];return +(d+ +C(+(c*c+b*b)))}function _u(b,d){b=b|0;d=d|0;d=to(d)|0;if((a[(c[d+16>>2]|0)+115>>0]|0)==1)d=zB(b)|0;else d=wB(b,d)|0;return fv(d)|0}function $u(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;q=l;l=l+1664|0;m=q+1600|0;n=q+800|0;o=q;p=xw(24)|0;c[p+16>>2]=1;j=((c[e+4>>2]|0)+-1|0)/3|0;h=0;i=p;while(1){if((h|0)>=(j|0))break;k=h*3|0;g=0;while(1){if((g|0)==4)break;r=m+(g<<4)|0;s=(c[e>>2]|0)+(g+k<<4)|0;c[r>>2]=c[s>>2];c[r+4>>2]=c[s+4>>2];c[r+8>>2]=c[s+8>>2];c[r+12>>2]=c[s+12>>2];g=g+1|0}h=h+1|0;i=av(m,i)|0}g=0;h=0;i=p;while(1){if(!i){h=p;g=p;break}j=c[i+16>>2]|0;k=n+(g<<4)|0;e=o+(g<<4)|0;bv(h,i,j,k,e,f);g=g+1|0;if(!((g|0)==50|(j|0)==0)){h=i;i=j;continue}cv(a,b,d,g,n,o);c[n>>2]=c[k>>2];c[n+4>>2]=c[k+4>>2];c[n+8>>2]=c[k+8>>2];c[n+12>>2]=c[k+12>>2];c[o>>2]=c[e>>2];c[o+4>>2]=c[e+4>>2];c[o+8>>2]=c[e+8>>2];c[o+12>>2]=c[e+12>>2];h=i;g=1;i=j}while(1){if(!h)break;s=c[h+16>>2]|0;$I(g);h=s;g=s}l=q;return}function av(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=l;l=l+144|0;f=g+128|0;d=g+64|0;e=g;if(!(gu(a)|0)){QA(f,a,3,.5,d,e);d=av(e,av(d,b)|0)|0}else{d=b+16|0;if((c[d>>2]|0)==1){c[d>>2]=0;c[b>>2]=c[a>>2];c[b+4>>2]=c[a+4>>2];c[b+8>>2]=c[a+8>>2];c[b+12>>2]=c[a+12>>2]}d=a+48|0;c[f>>2]=c[d>>2];c[f+4>>2]=c[d+4>>2];c[f+8>>2]=c[d+8>>2];c[f+12>>2]=c[d+12>>2];d=ev(f,b)|0}l=g;return d|0}function bv(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=+g;var i=0.0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0.0;r=l;l=l+96|0;n=r+80|0;m=r+64|0;k=r+48|0;o=r+32|0;p=r+16|0;q=r;c[o>>2]=c[b>>2];c[o+4>>2]=c[b+4>>2];c[o+8>>2]=c[b+8>>2];c[o+12>>2]=c[b+12>>2];do if(a){c[p>>2]=c[a>>2];c[p+4>>2]=c[a+4>>2];c[p+8>>2]=c[a+8>>2];c[p+12>>2]=c[a+12>>2];if(!d){i=+h[o>>3];h[q>>3]=i*2.0-+h[p>>3];j=+h[o+8>>3];h[q+8>>3]=j*2.0-+h[p+8>>3];break}else{c[q>>2]=c[d>>2];c[q+4>>2]=c[d+4>>2];c[q+8>>2]=c[d+8>>2];c[q+12>>2]=c[d+12>>2];i=+h[o>>3];j=+h[o+8>>3];break}}else{c[q>>2]=c[d>>2];c[q+4>>2]=c[d+4>>2];c[q+8>>2]=c[d+8>>2];c[q+12>>2]=c[d+12>>2];i=+h[o>>3];h[p>>3]=i*2.0-+h[q>>3];j=+h[o+8>>3];h[p+8>>3]=j*2.0-+h[q+8>>3]}while(0);c[k>>2]=c[p>>2];c[k+4>>2]=c[p+4>>2];c[k+8>>2]=c[p+8>>2];c[k+12>>2]=c[p+12>>2];c[m>>2]=c[o>>2];c[m+4>>2]=c[o+4>>2];c[m+8>>2]=c[o+8>>2];c[m+12>>2]=c[o+12>>2];c[n>>2]=c[q>>2];c[n+4>>2]=c[q+4>>2];c[n+8>>2]=c[q+8>>2];c[n+12>>2]=c[q+12>>2];t=+dv(k,m,n);s=+E(+t)*g;g=+F(+t)*g;h[e>>3]=i+s;h[e+8>>3]=j+g;h[f>>3]=i-s;h[f+8>>3]=j-g;l=r;return}function cv(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;i=e<<1;j=c[d>>2]|0;h=0;k=0;while(1){if((h|0)>=(j|0))break;l=(c[(c[b>>2]|0)+(h<<2)>>2]|0)+k|0;h=h+1|0;k=l}l=j+1|0;c[d>>2]=l;l=zw(c[b>>2]|0,l<<2)|0;c[b>>2]=l;c[l+(h<<2)>>2]=i;c[a>>2]=zw(c[a>>2]|0,k+i<<4)|0;b=i+-1+k|0;h=0;while(1){if((h|0)>=(e|0))break;l=(c[a>>2]|0)+(h+k<<4)|0;j=f+(h<<4)|0;c[l>>2]=c[j>>2];c[l+4>>2]=c[j+4>>2];c[l+8>>2]=c[j+8>>2];c[l+12>>2]=c[j+12>>2];l=(c[a>>2]|0)+(b-h<<4)|0;j=g+(h<<4)|0;c[l>>2]=c[j>>2];c[l+4>>2]=c[j+4>>2];c[l+8>>2]=c[j+8>>2];c[l+12>>2]=c[j+12>>2];h=h+1|0}return}function dv(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0,f=0.0;f=+h[b+8>>3];d=+h[b>>3];e=+K(+(+h[c+8>>3]-f),+(+h[c>>3]-d));d=+K(+(+h[a+8>>3]-f),+(+h[a>>3]-d));e=e-d;return +((e>0.0?e+-6.283185307179586:e)*.5+d)}function ev(a,b){a=a|0;b=b|0;var d=0;d=xw(24)|0;c[d+16>>2]=0;c[d>>2]=c[a>>2];c[d+4>>2]=c[a+4>>2];c[d+8>>2]=c[a+8>>2];c[d+12>>2]=c[a+12>>2];c[b+16>>2]=d;return d|0}function fv(b){b=b|0;var c=0,d=0,e=0,f=0,g=0;c=b;f=b;a:while(1){e=0;while(1){d=c;c=c+1|0;d=a[d>>0]|0;if(!(d<<24>>24))break a;if(e<<24>>24){g=5;break}if(d<<24>>24!=92)break;else e=1}b:do if((g|0)==5){g=0;switch(d<<24>>24|0){case 114:{d=13;break b}case 108:case 110:{d=10;break b}default:break b}}while(0);a[f>>0]=d;f=f+1|0}a[f>>0]=0;return b|0}function gv(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=c[b>>2]|0;while(1){g=a[e>>0]|0;if(!(g<<24>>24)){f=0;break}f=g<<24>>24;if(!(g<<24>>24==44|(YJ(f)|0)!=0)){h=5;break}e=e+1|0}a:do if((h|0)==5){switch(f|0){case 0:{f=0;break a}case 41:case 40:{e=e+1|0;break a}default:{}}h=d+4|0;i=d+8|0;while(1){if((hv(g<<24>>24)|0)<<24>>24){f=1;break a}f=c[h>>2]|0;if(f>>>0>=(c[i>>2]|0)>>>0){em(d,1)|0;f=c[h>>2]|0}c[h>>2]=f+1;a[f>>0]=g;f=e+1|0;e=f;g=a[f>>0]|0}}while(0);c[b>>2]=e;return f|0}function hv(a){a=a|0;switch(a|0){case 0:case 44:case 41:case 40:{a=1;break}default:a=0}return a|0}function iv(a,b){a=a|0;b=b|0;return jv(c[a>>2]|0,c[a+160>>2]|0,c[a+156>>2]|0,b)|0}function jv(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+160|0;k=o+20|0;m=o+16|0;n=o;c[k>>2]=0;c[m>>2]=0;dm(n,128,o+24|0);gm(n,f)|0;g=n+4|0;f=c[g>>2]|0;if(f>>>0>=(c[n+8>>2]|0)>>>0){em(n,1)|0;f=c[g>>2]|0}a[f>>0]=0;h=c[n>>2]|0;c[g>>2]=h;i=b+300|0;j=b+296|0;f=0;g=h;a:while(1){if(f){f=1;break}f=GL(g,c[i>>2]|0,k)|0;if(!f){f=0;break}g=GL(f,c[j>>2]|0,m)|0;h=(g|0)!=0;if(h)f=GL(0,c[j>>2]|0,m)|0;else f=0;switch(((f|0)!=0&1)+(h&1)&3){case 2:{g=kv(b,g,0)|0;f=kv(b,f,e)|0;h=(g|0)>(f|0);f=(f&g|0)>-1&(((h?g:f)|0)>=(d|0)&((h?f:g)|0)<=(d|0));g=0;continue a}case 1:{f=(kv(b,g,d)|0)==(d|0);g=0;continue a}default:{f=0;g=0;continue a}}}hm(n);l=o;return f|0}function kv(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=a[d>>0]|0;if(!(h<<24>>24==97?(yJ(d,85419)|0)==0:0))f=3;a:do if((f|0)==3){if((lv(d)|0)<<24>>24){e=sM(d)|0;break}g=c[b+308>>2]|0;if(!g)e=-1;else{b=c[b+312>>2]|0;e=1;while(1){if((e|0)>(b|0)){e=-1;break a}f=c[g+(e<<2)>>2]|0;if(h<<24>>24==(a[f>>0]|0)?(yJ(d,f)|0)==0:0)break a;e=e+1|0}}}while(0);return e|0}function lv(b){b=b|0;var c=0;while(1){c=a[b>>0]|0;if(!(c<<24>>24)){b=1;break}if(((c&255)+-48|0)>>>0<10)b=b+1|0;else{b=0;break}}return b|0}function mv(a,b){a=a|0;b=b|0;if((+h[a+16>>3]>=+h[b>>3]?+h[b+16>>3]>=+h[a>>3]:0)?+h[a+24>>3]>=+h[b+8>>3]:0)a=+h[b+24>>3]>=+h[a+8>>3]&1;else a=0;return a|0}function nv(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;a:do if((c[b+156>>2]|0)>=2?(f=GA(e,c[42212]|0,174185)|0,(iv(b,f)|0)<<24>>24==0):0)if(!(a[f>>0]|0))if(!(Vm(d,e)|0))f=1;else{f=Vm(d,e)|0;while(1){if(!f){f=0;break a}g=GA(f,c[42235]|0,174185)|0;if(!(a[g>>0]|0)){f=1;break a}if((iv(b,g)|0)<<24>>24){f=1;break a}f=Wm(d,f,e)|0}}else f=0;else f=1;while(0);return f|0}function ov(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+64|0;e=d+32|0;f=d;a=(c[a+16>>2]|0)+48|0;c[f>>2]=c[a>>2];c[f+4>>2]=c[a+4>>2];c[f+8>>2]=c[a+8>>2];c[f+12>>2]=c[a+12>>2];c[f+16>>2]=c[a+16>>2];c[f+20>>2]=c[a+20>>2];c[f+24>>2]=c[a+24>>2];c[f+28>>2]=c[a+28>>2];c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];c[e+16>>2]=c[b+16>>2];c[e+20>>2]=c[b+20>>2];c[e+24>>2]=c[b+24>>2];c[e+28>>2]=c[b+28>>2];b=(mv(f,e)|0)&255;l=d;return b|0}function pv(a,d){a=a|0;d=d|0;var f=0.0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0.0,r=0,s=0,t=0,u=0.0,v=0.0;r=c[a+152>>2]|0;s=Wt(a)|0;c[s+4>>2]=2;c[s+8>>2]=d;c[s+12>>2]=8;if(r&16777216|0){if((e[(c[(so(d)|0)+16>>2]|0)+178>>1]|0)>2){f=+h[(c[(c[d+16>>2]|0)+132>>2]|0)+16>>3]*72.0;f=+(~~(f+(f>=0.0?.5:-.5))|0)}else f=0.0;h[s+168>>3]=f}k=d+16|0;rv(a,c[(c[k>>2]|0)+104>>2]|0,d);do if(r&4259840|0){if((c[s+208>>2]|0)==0?(b[s+260>>1]&1)==0:0)break;p=Cy(d)|0;l=c[k>>2]|0;f=+h[l+16>>3];q=+h[l+24>>3];l=sv(d)|0;a:do if((p|2|0)==3){n=c[(c[k>>2]|0)+12>>2]|0;if(!((tv(n)|0)<<24>>24))g=0;else g=(c[n+4>>2]|l|0)!=0;if(!((r&524288|0)==0|((n|0)==0|g))){i=n+8|0;o=c[i>>2]|0;o=(o|0)<3?1:o;j=n+4|0;m=c[j>>2]|0;m=(m|0)>1?m:1;p=c[n+44>>2]|0;g=Jm(d,87739)|0;if(!g)g=0;else g=sM(g)|0;g=(g+-4|0)>>>0>56?20:g;if(!(c[j>>2]|l)){c[s+264>>2]=0;i=ww(32)|0;g=c[k>>2]|0;v=+h[g+88>>3];h[i>>3]=f-v;u=+h[g+80>>3]*.5;h[i+8>>3]=q-u;h[i+16>>3]=v+f;h[i+24>>3]=u+q;g=2;break}i=c[i>>2]|0;if(((i|0)<3?+h[n+32>>3]==0.0:0)?+h[n+24>>3]==0.0:0){i=s+264|0;if(c[n>>2]|0){c[i>>2]=1;i=ww(32)|0;h[i>>3]=f;h[i+8>>3]=q;g=(m<<1)+-1|0;h[i+16>>3]=+h[p+(g<<4)>>3]+f;h[i+24>>3]=+h[p+(g<<4)+8>>3]+q;g=2;break}c[i>>2]=2;i=(m<<1)+-1|0;i=uv(+h[p+(i<<4)>>3],+h[p+(i<<4)+8>>3],g)|0;j=0;while(1){if((j|0)>=(g|0))break a;p=i+(j<<4)|0;h[p>>3]=+h[p>>3]+f;p=i+(j<<4)+8|0;h[p>>3]=+h[p>>3]+q;j=j+1|0}}m=O(i,m+-1|0)|0;c[s+264>>2]=2;if((i|0)<(g|0)){i=ww(o<<4)|0;g=0;while(1){if((g|0)>=(o|0)){g=o;break a}n=g+m|0;h[i+(g<<4)>>3]=+h[p+(n<<4)>>3]+f;h[i+(g<<4)+8>>3]=+h[p+(n<<4)+8>>3]+q;g=g+1|0}}else{l=(i|0)/(g|0)|0;i=ww(g<<4)|0;j=0;k=0;while(1){if((j|0)>=(g|0))break a;o=k+m|0;h[i+(j<<4)>>3]=+h[p+(o<<4)>>3]+f;h[i+(j<<4)+8>>3]=+h[p+(o<<4)+8>>3]+q;j=j+1|0;k=k+l|0}}}else t=31}else t=31;while(0);if((t|0)==31){c[s+264>>2]=0;i=ww(32)|0;g=c[k>>2]|0;h[i>>3]=f-+h[g+88>>3];v=+h[g+80>>3]*.5;h[i+8>>3]=q-v;h[i+16>>3]=+h[g+96>>3]+f;h[i+24>>3]=v+q;g=2}if(!(r&8192))gD(a,i,i,g)|0;c[s+272>>2]=i;c[s+268>>2]=g}while(0);_E(Jm(d,85048)|0);tD(a,d);return}function qv(a){a=a|0;uD(a);Xt(a);return}function rv(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+144|0;j=m;f=Jm(e,96264)|0;i=Jm(e,96229)|0;k=Jm(e,85204)|0;dm(j,128,m+16|0);if(!d)h=0;else h=c[d>>2]|0;if(!((f|0)!=0?(a[f>>0]|0)!=0:0))f=Jm(e,96269)|0;g=Zt(b,e,j)|0;if(!i)d=0;else d=_u(i,e)|0;Yt(b,h,f,d,k,g,e)|0;$I(d);hm(j);l=m;return}function sv(b){b=b|0;var d=0,e=0;b=HA(b,c[42202]|0,174185)|0;a:do if(!(a[b>>0]|0))b=0;else{Eu(b)|0;b=0;d=168408;while(1){e=c[d>>2]|0;if(!e)break a;e=(yJ(e,95923)|0)==0;b=e?1:b;d=d+4|0}}while(0);return b|0}function tv(a){a=a|0;var b=0.0;if(((c[a+8>>2]|0)==4?(b=+h[a+16>>3],((~~(b+(b>=0.0?.5:-.5))|0)%90|0|0)==0):0)?+h[a+24>>3]==0.0:0)a=+h[a+32>>3]==0.0&1;else a=0;return a|0}function uv(a,b,c){a=+a;b=+b;c=c|0;var d=0.0,e=0,f=0.0,g=0;f=6.283185307179586/+(c|0);g=ww(c<<4)|0;d=0.0;e=0;while(1){if((e|0)>=(c|0))break;h[g+(e<<4)>>3]=+E(+d)*a;h[g+(e<<4)+8>>3]=+F(+d)*b;d=d+f;e=e+1|0}return g|0}function vv(b,d){b=b|0;d=d|0;var e=0;a:do if((c[b+156>>2]|0)>=2?(e=GA(d,zm(d,0,86583,0)|0,174185)|0,(iv(b,e)|0)<<24>>24==0):0)if(!(a[e>>0]|0)){e=eo(d)|0;while(1){if(!e){e=0;break a}if((nv(b,d,e)|0)<<24>>24){e=1;break a}e=fo(d,e)|0}}else e=0;else e=1;while(0);return e|0}function wv(a,b){a=a|0;b=b|0;var d=0;d=Wt(a)|0;c[d+4>>2]=1;c[d+8>>2]=b;c[d+12>>2]=1;rv(a,c[(c[b+16>>2]|0)+12>>2]|0,b);nD(a,b);return}function xv(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;b=Jm(b,86479)|0;a:do if((b|0)!=0?(a[b>>0]|0)!=0:0){Eu(b)|0;e=168408;b=0;while(1){while(1){f=c[e>>2]|0;if(!f){e=168408;break a}if(!(yJ(f,95923)|0)){g=10;break}if(!(yJ(f,91378)|0)){f=e;g=12;break}if(!(yJ(f,91385)|0)){f=e;g=14;break}if(!(yJ(f,91360)|0)){f=e;g=16;break}e=e+4|0}if((g|0)==10){e=e+4|0;b=b|1;continue}else if((g|0)==12){while(1){h=f;f=f+4|0;g=c[f>>2]|0;c[h>>2]=g;if(!g)break;else g=12}b=b|3;continue}else if((g|0)==14){while(1){g=f;f=f+4|0;h=c[f>>2]|0;c[g>>2]=h;if(!h)break;else g=14}b=b|64;continue}else if((g|0)==16){while(1){g=f;f=f+4|0;h=c[f>>2]|0;c[g>>2]=h;if(!h)break;else g=16}b=b|4;continue}}}else{e=0;b=0}while(0);c[d>>2]=b;return e|0}function yv(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0;k=l;l=l+16|0;i=k;j=k+4|0;c[j>>2]=0;m=(au(b,0,j)|0)==0;j=c[j>>2]|0;if((m?(f=c[j>>2]|0,(f|0)>=2):0)?(h=j+8|0,(c[c[h>>2]>>2]|0)!=0):0){if((f|0)>2)$l(0,85446,i)|0;m=xw((sJ(b)|0)+1|0)|0;c[d>>2]=m;yK(m,c[c[h>>2]>>2]|0)|0;if(!(c[(c[h>>2]|0)+12>>2]|0))c[d+4>>2]=0;else{m=c[d>>2]|0;m=m+((sJ(m)|0)+1)|0;c[d+4>>2]=m;yK(m,c[(c[h>>2]|0)+12>>2]|0)|0}b=c[h>>2]|0;do if(!(a[b+8>>0]|0))if(!(a[b+20>>0]|0)){g[e>>2]=0.0;break}else{g[e>>2]=1.0-+g[b+16>>2];break}else c[e>>2]=c[b+4>>2];while(0);bu(j);b=1}else{c[d>>2]=0;bu(j);b=0}l=k;return b|0}function zv(a,b){a=a|0;b=b|0;oD(a,b);Xt(a);return}function Av(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,i=0,j=0,k=0.0,m=0.0,n=0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;x=l;l=l+96|0;p=x+48|0;s=x+16|0;w=x+8|0;v=x;t=x+80|0;c[t>>2]=1e3;f=xw(16e3)|0;u=a+256|0;e=1;j=1;i=0;q=0;r=c[b+8>>2]|0;while(1){if((q|0)>=(c[b>>2]|0))break;d=c[r>>2]|0;a:do switch(d|0){case 1:case 0:{n=r+80|0;c[s>>2]=c[n>>2];c[s+4>>2]=c[n+4>>2];c[s+8>>2]=c[n+8>>2];c[s+12>>2]=c[n+12>>2];c[s+16>>2]=c[n+16>>2];c[s+20>>2]=c[n+20>>2];c[s+24>>2]=c[n+24>>2];c[s+28>>2]=c[n+28>>2];c[p>>2]=c[u>>2];c[p+4>>2]=c[u+4>>2];c[p+8>>2]=c[u+8>>2];c[p+12>>2]=c[u+12>>2];c[p+16>>2]=c[u+16>>2];c[p+20>>2]=c[u+20>>2];c[p+24>>2]=c[u+24>>2];c[p+28>>2]=c[u+28>>2];if(!(mv(s,p)|0))d=j;else{z=r+8|0;A=r+24|0;h[f>>3]=+h[z>>3]-+h[A>>3];n=r+16|0;y=r+32|0;h[f+8>>3]=+h[n>>3]-+h[y>>3];h[f+16>>3]=+h[A>>3]+ +h[z>>3];h[f+24>>3]=+h[y>>3]+ +h[n>>3];HD(a,f,2,(d|0)==0?j:0);d=j}break}case 3:case 2:{A=r+80|0;c[s>>2]=c[A>>2];c[s+4>>2]=c[A+4>>2];c[s+8>>2]=c[A+8>>2];c[s+12>>2]=c[A+12>>2];c[s+16>>2]=c[A+16>>2];c[s+20>>2]=c[A+20>>2];c[s+24>>2]=c[A+24>>2];c[s+28>>2]=c[A+28>>2];c[p>>2]=c[u>>2];c[p+4>>2]=c[u+4>>2];c[p+8>>2]=c[u+8>>2];c[p+12>>2]=c[u+12>>2];c[p+16>>2]=c[u+16>>2];c[p+20>>2]=c[u+20>>2];c[p+24>>2]=c[u+24>>2];c[p+28>>2]=c[u+28>>2];if(!(mv(s,p)|0))d=j;else{d=r+8|0;f=Bv(f,t,c[d+4>>2]|0,c[d>>2]|0)|0;ID(a,f,c[d>>2]|0,(c[r>>2]|0)==2?j:0);d=j}break}case 5:case 4:{A=r+80|0;c[s>>2]=c[A>>2];c[s+4>>2]=c[A+4>>2];c[s+8>>2]=c[A+8>>2];c[s+12>>2]=c[A+12>>2];c[s+16>>2]=c[A+16>>2];c[s+20>>2]=c[A+20>>2];c[s+24>>2]=c[A+24>>2];c[s+28>>2]=c[A+28>>2];c[p>>2]=c[u>>2];c[p+4>>2]=c[u+4>>2];c[p+8>>2]=c[u+8>>2];c[p+12>>2]=c[u+12>>2];c[p+16>>2]=c[u+16>>2];c[p+20>>2]=c[u+20>>2];c[p+24>>2]=c[u+24>>2];c[p+28>>2]=c[u+28>>2];if(!(mv(s,p)|0))d=j;else{d=r+8|0;f=Bv(f,t,c[d+4>>2]|0,c[d>>2]|0)|0;KD(a,f,c[d>>2]|0,0,0,(c[r>>2]|0)==4?j&255:0);d=j}break}case 6:{A=r+80|0;c[s>>2]=c[A>>2];c[s+4>>2]=c[A+4>>2];c[s+8>>2]=c[A+8>>2];c[s+12>>2]=c[A+12>>2];c[s+16>>2]=c[A+16>>2];c[s+20>>2]=c[A+20>>2];c[s+24>>2]=c[A+24>>2];c[s+28>>2]=c[A+28>>2];c[p>>2]=c[u>>2];c[p+4>>2]=c[u+4>>2];c[p+8>>2]=c[u+8>>2];c[p+12>>2]=c[u+12>>2];c[p+16>>2]=c[u+16>>2];c[p+20>>2]=c[u+20>>2];c[p+24>>2]=c[u+24>>2];c[p+28>>2]=c[u+28>>2];if(!(mv(s,p)|0))d=j;else{d=r+8|0;f=Bv(f,t,c[d+4>>2]|0,c[d>>2]|0)|0;LD(a,f,c[d>>2]|0);d=j}break}case 7:{A=r+80|0;c[s>>2]=c[A>>2];c[s+4>>2]=c[A+4>>2];c[s+8>>2]=c[A+8>>2];c[s+12>>2]=c[A+12>>2];c[s+16>>2]=c[A+16>>2];c[s+20>>2]=c[A+20>>2];c[s+24>>2]=c[A+24>>2];c[s+28>>2]=c[A+28>>2];c[p>>2]=c[u>>2];c[p+4>>2]=c[u+4>>2];c[p+8>>2]=c[u+8>>2];c[p+12>>2]=c[u+12>>2];c[p+16>>2]=c[u+16>>2];c[p+20>>2]=c[u+20>>2];c[p+24>>2]=c[u+24>>2];c[p+28>>2]=c[u+28>>2];if(!(mv(s,p)|0))d=j;else{h[f>>3]=+h[r+8>>3];h[f+8>>3]=+h[r+16>>3];d=c[r+112>>2]|0;c[p>>2]=c[f>>2];c[p+4>>2]=c[f+4>>2];c[p+8>>2]=c[f+8>>2];c[p+12>>2]=c[f+12>>2];BD(a,p,d);d=j}break}case 8:{ED(a,c[r+8>>2]|0);d=1;break}case 9:{CD(a,c[r+8>>2]|0);d=1;break}case 13:{if((c[r+8>>2]|0)!=2){d=r+16|0;z=c[d+36>>2]|0;A=c[z+12>>2]|0;o=+g[z+8>>2];d=~~(+K(+(+h[r+40>>3]-+h[r+24>>3]),+(+h[r+32>>3]-+h[d>>3]))*57.29577951308232);ED(a,c[z+4>>2]|0);FD(a,A,d,o);d=2;break a}A=c[r+68>>2]|0;j=c[A+4>>2]|0;n=c[A+12>>2]|0;o=+g[A+8>>2];k=+h[r+40>>3];m=+h[r+16>>3];if(k==m?+h[r+48>>3]==+h[r+24>>3]:0)d=0;else d=~~(+H(+((m-k)/+h[r+32>>3]))*57.29577951308232);ED(a,j);FD(a,n,d,o);d=3;break}case 14:{$l(0,85512,v)|0;d=j;break}case 12:{if(!e){e=0;d=j}else{$l(0,85552,w)|0;e=0;d=j}break}case 11:{Eu(c[r+8>>2]|0)|0;GD(a,168408);i=168408;d=j;break}default:d=j}while(0);j=d;q=q+1|0;r=r+120|0}if(i|0)GD(a,c[(c[a>>2]|0)+336>>2]|0);$I(f);l=x;return}function Bv(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=c[b>>2]|0;f=g<<1;f=(f|0)>(e|0)?f:e;if((g|0)<(e|0)){a=zw(a,f<<4)|0;c[b>>2]=f}b=0;while(1){if((b|0)>=(e|0))break;h[a+(b<<4)>>3]=+h[d+(b*24|0)>>3];h[a+(b<<4)+8>>3]=+h[d+(b*24|0)+8>>3];b=b+1|0}return a|0}function Cv(a,b){a=a|0;b=b|0;var d=0;d=c[b>>2]|0;c[a>>2]=c[b+4>>2];c[a+4>>2]=d;return}function Dv(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=d+16|0;f=1;while(1){d=c[g>>2]|0;if((f|0)>(c[d+180>>2]|0))break;e=c[(c[d+184>>2]|0)+(f<<2)>>2]|0;Dv(b,e);d=Jm(e,122540)|0;if(d|0?a[d>>0]|0:0)CD(b,d);d=Jm(e,122531)|0;if(d|0?a[d>>0]|0:0)CD(b,d);d=Jm(e,85423)|0;if(d|0?a[d>>0]|0:0)CD(b,d);d=Jm(e,86469)|0;if(d|0?a[d>>0]|0:0)ED(b,d);d=Jm(e,86503)|0;if(d|0?a[d>>0]|0:0)CD(b,d);f=f+1|0}return}function Ev(a){a=a|0;var b=0,d=0,e=0;b=c[42172]|0;if(!b){b=Rl(19684,c[4345]|0)|0;c[42172]=b}if(!(bb[c[b>>2]&31](b,a,4)|0)){d=c[42172]|0;e=c[d>>2]|0;b=HL(a)|0;bb[e&31](d,b,1)|0;b=1}else b=0;return b|0}function Fv(a,b,c){a=a|0;b=b|0;c=c|0;$I(b);return}function Gv(a){a=a|0;var b=0;b=c[42173]|0;if(!a){if((b|0)>0?(b=b+-1|0,c[42173]=b,(b|0)==0):0){cL(1,c[42174]|0)|0;$I(c[42174]|0)}}else{c[42173]=b+1;if(!b){c[42174]=HL(cL(1,0)|0)|0;cL(1,134865)|0}}return}function Hv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0.0;u=l;l=l+96|0;r=u+72|0;q=u+56|0;p=u+48|0;t=u+32|0;s=u+24|0;e=u+8|0;d=u;if(0)yA();do if((Oo(b,122277,0,1)|0)!=0?(o=b+16|0,(c[(c[o>>2]|0)+8>>2]|0)!=0):0){Iv(b);Jv(a,b);Kv(a,b);Gv(1);j=a+56|0;k=a+184|0;m=a+192|0;n=a+28|0;i=Dr(a)|0;a:while(1){if(!i){g=33;break}d=c[j>>2]|0;if(!d){c[i+20>>2]=0;d=0}else{c[i+20>>2]=c[d+8>>2];d=c[d+12>>2]|0}c[i+24>>2]=d;c[i+12>>2]=a;c[i+28>>2]=c[k>>2];c[i+620>>2]=24748;c[i+624>>2]=14;if(!(c[(c[o>>2]|0)+8>>2]|0)){g=13;break}e=i+52|0;g=cD(i,c[e>>2]|0)|0;c[i+56>>2]=g;switch(g|0){case 999:{g=16;break a}case 21:{d=1;break}case 24:{d=520;break}default:d=Lv(b)|0}f=i+152|0;c[f>>2]=c[f>>2]|d;d=c[m>>2]|0;do if(!d)g=24;else{if(c[d+152>>2]&32|0?(yJ(c[e>>2]|0,c[d+52>>2]|0)|0)==0:0){d=c[42175]|0;if(!d){g=27;break}c[d+8>>2]=i;c[i+36>>2]=c[d+36>>2];g=29;break}eD(d);c[m>>2]=0;c[n>>2]=0;g=24}while(0);if((g|0)==24){c[42175]=0;g=27}if((g|0)==27?(g=0,(dD(i)|0)==0):0){c[m>>2]=i;g=29}if((g|0)==29){c[i+8>>2]=0;c[i+104>>2]=24860;Mv(i);Nv(i);Ov(i,b);Pv(i,b);Qv(i,b);if(!(c[f>>2]&128))hu(i,b);c[42175]=i}i=Er(a)|0}if((g|0)==13){$l(1,85710,s)|0;Gv(0);if(!0){d=-1;break}d=c[13918]|0;s=En(b)|0;v=+zA();c[t>>2]=s;h[t+8>>3]=v;AL(d,85681,t)|0;d=-1;break}else if((g|0)==16){c[p>>2]=c[e>>2];$l(1,85731,p)|0;Gv(0);if(!0){d=-1;break}d=c[13918]|0;t=En(b)|0;v=+zA();c[q>>2]=t;h[q+8>>3]=v;AL(d,85681,q)|0;d=-1;break}else if((g|0)==33){Gv(0);if(!0){d=0;break}d=c[13918]|0;t=En(b)|0;v=+zA();c[r>>2]=t;h[r+8>>3]=v;AL(d,85681,r)|0;d=0;break}}else g=5;while(0);if((g|0)==5){$l(1,85633,d)|0;if(!0)d=-1;else{d=c[13918]|0;t=En(b)|0;v=+zA();c[e>>2]=t;h[e+8>>3]=v;AL(d,85681,e)|0;d=-1}}l=u;return d|0}function Iv(a){a=a|0;var b=0;b=eo(a)|0;while(1){if(!b)break;Vv(a,b);b=fo(a,b)|0}return}function Jv(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0.0;o=l;l=l+32|0;k=o+24|0;f=o+16|0;j=o+8|0;n=o;c[b+168>>2]=d;g=b+293|0;a[g>>0]=0;e=Jm(d,90530)|0;if(e|0?(c[f>>2]=j,c[f+4>>2]=n,i=dM(e,90537,f)|0,(i|0)>0):0){p=+h[j>>3]*72.0;e=b+208|0;h[e>>3]=p;h[b+200>>3]=p;if((i|0)!=1)h[e>>3]=+h[n>>3]*72.0;a[g>>0]=1}f=b+292|0;a[f>>0]=0;e=Jm(d,86133)|0;if(e|0?(c[k>>2]=j,c[k+4>>2]=n,m=dM(e,90537,k)|0,(m|0)>0):0){p=+h[j>>3]*72.0;e=b+224|0;h[e>>3]=p;h[b+216>>3]=p;if((m|0)!=1)h[e>>3]=+h[n>>3]*72.0;a[f>>0]=1}e=b+294|0;a[e>>0]=0;f=b+232|0;g=d+16|0;n=(c[(c[g>>2]|0)+8>>2]|0)+48|0;c[f>>2]=c[n>>2];c[f+4>>2]=c[n+4>>2];c[f+8>>2]=c[n+8>>2];c[f+12>>2]=c[n+12>>2];f=c[(c[g>>2]|0)+8>>2]|0;if(+h[f+48>>3]>.001?+h[f+56>>3]>.001:0)a[e>>0]=1;c[b+288>>2]=a[f+81>>0]|0?90:0;e=b+196|0;c[e>>2]=86137;f=Jm(d,86140)|0;if(f|0?a[f>>0]|0:0)c[e>>2]=f;n=b+256|0;m=(c[g>>2]|0)+16|0;c[n>>2]=c[m>>2];c[n+4>>2]=c[m+4>>2];c[n+8>>2]=c[m+8>>2];c[n+12>>2]=c[m+12>>2];c[n+16>>2]=c[m+16>>2];c[n+20>>2]=c[m+20>>2];c[n+24>>2]=c[m+24>>2];c[n+28>>2]=c[m+28>>2];c[42186]=zm(d,0,86535,0)|0;c[42187]=zm(d,0,86520,0)|0;c[b+320>>2]=HA(0,c[42196]|0,93027)|0;h[b+328>>3]=+FA(0,c[42195]|0,14.0,1.0);c[b+336>>2]=19720;c[b+188>>2]=En(d)|0;l=o;return}function Kv(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=b+304|0;f=c[e>>2]|0;if(f|0){$I(f);c[e>>2]=0}f=b+308|0;e=c[f>>2]|0;if(e|0){$I(e);c[f>>2]=0}g=b+316|0;e=c[g>>2]|0;if(e|0){$I(e);c[g>>2]=0}e=Jm(d,85884)|0;if(e){c[b+312>>2]=Tv(b,d,e)|0;e=Jm(d,85891)|0;if(e|0?a[e>>0]|0:0)c[g>>2]=Uv(b,e)|0}else{c[f>>2]=0;c[b+312>>2]=1}return}function Lv(b){b=b|0;b=Jm(b,85852)|0;a:do if(!b)b=0;else switch(a[b>>0]|0){case 110:{if(!(yJ(b+1|0,85864)|0))b=1;else{b=0;break a}break}case 101:{if(!(yJ(b+1|0,85874)|0))b=16;else{b=0;break a}break}default:{b=0;break a}}while(0);return b|0}function Mv(b){b=b|0;var d=0.0,e=0;e=c[b>>2]|0;if(!(a[e+292>>0]|0)){if((c[b+56>>2]|0)==300)d=+h[(c[b+68>>2]|0)+8>>3];else d=4.0;h[b+248>>3]=d;h[b+240>>3]=d}else{b=b+240|0;e=e+216|0;c[b>>2]=c[e>>2];c[b+4>>2]=c[e+4>>2];c[b+8>>2]=c[e+8>>2];c[b+12>>2]=c[e+12>>2]}return}function Nv(b){b=b|0;var d=0;d=c[b>>2]|0;a:do if(!(a[d+293>>0]|0))switch(c[b+56>>2]|0){case 300:{d=b+416|0;b=(c[b+84>>2]|0)+8|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];break a}case 30:case 21:case 22:case 4:case 3:case 2:{h[b+424>>3]=36.0;h[b+416>>3]=36.0;break a}default:{d=b+416|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;break a}}else{b=b+416|0;d=d+200|0;c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];c[b+12>>2]=c[d+12>>2]}while(0);return}function Ov(b,d){b=b|0;d=d|0;var e=0.0,f=0;f=c[(c[b>>2]|0)+192>>2]|0;e=+h[(c[(c[d+16>>2]|0)+8>>2]|0)+24>>3];do if(!(e!=0.0)){if(f|0?a[f+128>>0]|0:0){b=b+432|0;f=f+112|0;c[b>>2]=c[f>>2];c[b+4>>2]=c[f+4>>2];c[b+8>>2]=c[f+8>>2];c[b+12>>2]=c[f+12>>2];break}d=b+432|0;if((c[b+56>>2]|0)==300){b=(c[b+84>>2]|0)+40|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];break}else{h[b+440>>3]=96.0;h[d>>3]=96.0;break}}else{h[b+440>>3]=e;h[b+432>>3]=e}while(0);return}function Pv(b,d){b=b|0;d=d|0;var e=0.0,f=0.0,g=0,i=0.0,j=0.0,k=0.0,m=0,n=0,o=0.0,p=0.0,q=0.0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=l;l=l+112|0;t=A+80|0;u=A+56|0;s=A+40|0;v=A+32|0;w=A+24|0;x=A+16|0;y=A+8|0;z=A;m=c[b>>2]|0;o=+h[m+272>>3];q=+h[m+280>>3];p=+h[m+256>>3];r=+h[m+264>>3];f=+h[b+240>>3];e=p-f;h[b+208>>3]=e;i=+h[b+248>>3];j=r-i;h[b+216>>3]=j;f=f+o;h[b+224>>3]=f;i=i+q;h[b+232>>3]=i;e=f-e;j=i-j;h[x>>3]=1.0;g=c[(c[d+16>>2]|0)+8>>2]|0;i=+h[g+64>>3];do if(i>.001?(k=+h[g+72>>3],k>.001):0){e=e==0.0?i:e;f=j==0.0?k:j;if(!(if&(i>e&(a[g+80>>0]|0)!=0)):0){k=e;j=f;i=1.0;break}n=i/e>3]=i;k=e;j=f}else{k=e;i=1.0}while(0);f=(p+o)*.5;h[y>>3]=f;e=(r+q)*.5;h[z>>3]=e;c[b+360>>2]=c[m+288>>2];k=i*k;h[v>>3]=k;j=i*j;h[w>>3]=j;g=Jm(d,85783)|0;if(g){m=_I((sJ(g)|0)+1|0)|0;n=_I((sJ(g)|0)+1|0)|0;c[s>>2]=v;c[s+4>>2]=w;c[s+8>>2]=x;c[s+12>>2]=m;do if((dM(g,85792,s)|0)==4){g=oo(c[d+60>>2]|0,m,0)|0;if(g|0){u=c[g+16>>2]|0;h[y>>3]=+h[u+16>>3];h[z>>3]=+h[u+24>>3]}}else{c[u>>2]=v;c[u+4>>2]=w;c[u+8>>2]=x;c[u+12>>2]=m;c[u+16>>2]=n;if((dM(g,85812,u)|0)!=4){c[t>>2]=v;c[t+4>>2]=w;c[t+8>>2]=x;c[t+12>>2]=y;c[t+16>>2]=z;dM(g,85832,t)|0;break}g=oo(c[d+60>>2]|0,m,0)|0;if(g|0){u=c[g+16>>2]|0;h[y>>3]=+h[u+16>>3];h[z>>3]=+h[u+24>>3]}}while(0);$I(m);$I(n);k=+h[v>>3];j=+h[w>>3];i=+h[x>>3];f=+h[y>>3];e=+h[z>>3]}h[b+368>>3]=k;h[b+376>>3]=j;h[b+352>>3]=i;h[b+336>>3]=f;h[b+344>>3]=e;l=A;return}function Qv(b,d){b=b|0;d=d|0;var e=0,f=0,g=0.0,i=0.0,j=0,k=0.0,m=0.0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0.0,P=0.0,Q=0.0;M=l;l=l+224|0;J=M+200|0;z=M+168|0;E=M+144|0;I=M+120|0;F=M+96|0;G=M+64|0;e=M+184|0;v=M+176|0;w=M+160|0;y=M+136|0;x=M+112|0;A=M+80|0;B=M+48|0;C=M+32|0;D=M+16|0;K=M+8|0;L=M;u=c[b>>2]|0;c[G>>2]=0;c[G+4>>2]=0;c[G+8>>2]=0;c[G+12>>2]=0;H=b+368|0;c[I>>2]=c[H>>2];c[I+4>>2]=c[H+4>>2];c[I+8>>2]=c[H+8>>2];c[I+12>>2]=c[H+12>>2];H=b+360|0;if(c[H>>2]|0){c[J>>2]=c[I>>2];c[J+4>>2]=c[I+4>>2];c[J+8>>2]=c[I+8>>2];c[J+12>>2]=c[I+12>>2];Rv(e,J);c[I>>2]=c[e>>2];c[I+4>>2]=c[e+4>>2];c[I+8>>2]=c[e+8>>2];c[I+12>>2]=c[e+12>>2]}t=b+416|0;c[F>>2]=c[t>>2];c[F+4>>2]=c[t+4>>2];c[F+8>>2]=c[t+8>>2];c[F+12>>2]=c[t+12>>2];if((a[u+294>>0]|0)!=0?(c[b+152>>2]&32|0)!=0:0){i=+h[u+232>>3]-+h[F>>3]*2.0;h[E>>3]=i;k=+h[u+240>>3]-+h[F+8>>3]*2.0;p=E+8|0;h[p>>3]=k;if(!(i<.0001)){o=+h[I>>3];e=~~(o/i);f=b+164|0;c[f>>2]=e;if(o-i*+(e|0)>.0001){e=e+1|0;c[f>>2]=e}}else{c[b+164>>2]=1;e=1}if(!(k<.0001)){g=+h[I+8>>3];f=~~(g/k);j=b+168|0;c[j>>2]=f;if(g-k*+(f|0)>.0001){f=f+1|0;c[j>>2]=f}}else{c[b+168>>2]=1;f=1;g=+h[I+8>>3]}c[b+204>>2]=O(f,e)|0;o=+h[(+h[I>>3]>3];h[I>>3]=o;e=p;f=I;m=+h[(g>3];g=o;j=21}else{if(c[b+68>>2]|0){e=c[b+84>>2]|0;i=+h[e+24>>3]-+h[F>>3]*2.0;i=i<0.0?0.0:i;h[E>>3]=i;o=+h[e+32>>3]-+h[F+8>>3]*2.0;e=E+8|0;h[e>>3]=o;if(o<0.0){f=E;j=17}else e=E}else{h[E+8>>3]=0.0;f=E;e=E;j=17}if((j|0)==17){h[e>>3]=0.0;e=f;i=+h[f>>3]}c[b+204>>2]=1;c[b+168>>2]=1;c[b+164>>2]=1;g=+h[I>>3];if(i>3]=g;i=g}e=E+8|0;k=+h[e>>3];m=+h[I+8>>3];if(k>3]=m;r=e;m=+h[e>>3]}n=+h[F>>3];s=b+432|0;k=+h[s>>3]*.013888888888888888*(n*2.0+i);c[b+448>>2]=~~(k+(k>=0.0?.5:-.5));q=F+8|0;k=+h[q>>3];t=b+440|0;o=+h[t>>3]*.013888888888888888*(k*2.0+m);c[b+452>>2]=~~(o+(o>=0.0?.5:-.5));j=b+188|0;p=b+180|0;e=b+172|0;f=u+196|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;Sv(v,b,a[c[f>>2]>>0]|0);u=v;v=c[u+4>>2]|0;e=p;c[e>>2]=c[u>>2];c[e+4>>2]=v;Sv(w,b,a[(c[f>>2]|0)+1>>0]|0);e=w;w=c[e>>2]|0;e=c[e+4>>2]|0;v=j;c[v>>2]=w;c[v+4>>2]=e;w=(c[p>>2]|0)+w|0;if(!((((w|0)>-1?w:0-w|0)|0)==1?(w=(c[b+184>>2]|0)+e|0,(((w|0)>-1?w:0-w|0)|0)==1):0)){Sv(y,b,66);v=y;y=c[v+4>>2]|0;w=p;c[w>>2]=c[v>>2];c[w+4>>2]=y;Sv(x,b,76);w=x;x=c[w+4>>2]|0;y=j;c[y>>2]=c[w>>2];c[y+4>>2]=x;c[z>>2]=c[f>>2];$l(0,85763,z)|0}if(a[(c[(c[d+16>>2]|0)+8>>2]|0)+82>>0]|0){if(i>g){m=(i-g)*.5;h[G>>3]=m}else m=0.0;i=+h[r>>3];o=+h[I+8>>3];if(i>o){i=(i-o)*.5;h[G+8>>3]=i}else i=0.0}else{i=0.0;m=0.0}if(!(c[H>>2]|0))j=1;else{c[J>>2]=c[I>>2];c[J+4>>2]=c[I+4>>2];c[J+8>>2]=c[I+8>>2];c[J+12>>2]=c[I+12>>2];Rv(A,J);c[I>>2]=c[A>>2];c[I+4>>2]=c[A+4>>2];c[I+8>>2]=c[A+8>>2];c[I+12>>2]=c[A+12>>2];c[J>>2]=c[E>>2];c[J+4>>2]=c[E+4>>2];c[J+8>>2]=c[E+8>>2];c[J+12>>2]=c[E+12>>2];Rv(B,J);c[E>>2]=c[B>>2];c[E+4>>2]=c[B+4>>2];c[E+8>>2]=c[B+8>>2];c[E+12>>2]=c[B+12>>2];c[J>>2]=c[F>>2];c[J+4>>2]=c[F+4>>2];c[J+8>>2]=c[F+8>>2];c[J+12>>2]=c[F+12>>2];Rv(C,J);c[F>>2]=c[C>>2];c[F+4>>2]=c[C+4>>2];c[F+8>>2]=c[C+8>>2];c[F+12>>2]=c[C+12>>2];c[J>>2]=c[G>>2];c[J+4>>2]=c[G+4>>2];c[J+8>>2]=c[G+8>>2];c[J+12>>2]=c[G+12>>2];Rv(D,J);c[G>>2]=c[D>>2];c[G+4>>2]=c[D+4>>2];c[G+8>>2]=c[D+8>>2];c[G+12>>2]=c[D+12>>2];n=+h[F>>3];m=+h[G>>3];k=+h[q>>3];i=+h[G+8>>3];g=+h[I>>3];j=(c[H>>2]|0)==0}o=m+n;h[b+384>>3]=o;P=i+k;h[b+392>>3]=P;N=m+n+g;h[b+400>>3]=N;Q=+h[I+8>>3];n=i+k+Q;h[b+408>>3]=n;m=+h[b+352>>3];h[b+320>>3]=g/m;h[b+328>>3]=Q/m;m=+h[s>>3];o=o*.013888888888888888*m;f=b+456|0;c[f>>2]=~~(o+(o>=0.0?.5:-.5));o=+h[t>>3];k=P*.013888888888888888*o;c[b+460>>2]=~~(k+(k>=0.0?.5:-.5));m=N*.013888888888888888*m;e=b+464|0;c[e>>2]=~~(m+(m>=0.0?.5:-.5));o=n*.013888888888888888*o;c[b+468>>2]=~~(o+(o>=0.0?.5:-.5));if(!j){c[J>>2]=c[f>>2];c[J+4>>2]=c[f+4>>2];Cv(K,J);I=K;K=c[I+4>>2]|0;b=f;c[b>>2]=c[I>>2];c[b+4>>2]=K;c[J>>2]=c[e>>2];c[J+4>>2]=c[e+4>>2];Cv(L,J);b=L;K=c[b+4>>2]|0;L=e;c[L>>2]=c[b>>2];c[L+4>>2]=K}l=M;return}function Rv(a,b){a=a|0;b=b|0;var c=0.0;c=+h[b>>3];h[a>>3]=+h[b+8>>3];h[a+8>>3]=c;return}function Sv(a,b,d){a=a|0;b=b|0;d=d|0;d=(d<<24>>24)+-66|0;switch(d>>>1|d<<31|0){case 9:{c[b+176>>2]=(c[b+168>>2]|0)+-1;b=0;d=-1;break}case 0:{b=0;d=1;break}case 5:{b=1;d=0;break}case 8:{c[b+172>>2]=(c[b+164>>2]|0)+-1;b=-1;d=0;break}default:{b=0;d=0}}c[a>>2]=b;c[a+4>>2]=d;return}function Tv(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;j=l;l=l+16|0;g=j;f=Jm(d,86004)|0;i=b+296|0;c[i>>2]=(f|0)==0?86013:f;d=Jm(d,86017)|0;f=b+300|0;d=(d|0)==0?86030:d;c[f>>2]=d;d=KL(c[i>>2]|0,d)|0;if(d|0){c[g>>2]=a[d>>0];$l(0,86032,g)|0;c[f>>2]=174185}d=HL(e)|0;c[b+304>>2]=d;h=b+308|0;f=0;b=0;while(1){e=EL(d,c[i>>2]|0)|0;if(!e)break;g=b+1|0;if((b|0)<(f|0))d=c[h>>2]|0;else{f=f+128|0;d=c[h>>2]|0;if(!d)d=xw(f<<2)|0;else d=zw(d,f<<2)|0;c[h>>2]=d}c[d+(g<<2)>>2]=e;b=g;d=0}if(b|0){i=zw(c[h>>2]|0,(b<<2)+8|0)|0;c[h>>2]=i;c[i>>2]=0;c[(c[h>>2]|0)+(b+1<<2)>>2]=0}l=j;return b|0}function Uv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+16|0;j=k;i=a+312|0;d=xw((c[i>>2]<<2)+8|0)|0;e=0;h=1;while(1){g=c[i>>2]|0;if((h|0)>(g|0))break;f=e+1|0;if((jv(a,h,g,b)|0)<<24>>24){c[d+(f<<2)>>2]=h;e=f}h=h+1|0}if(!e){c[j>>2]=b;$l(0,85903,j)|0;$I(d);d=0}else{c[d>>2]=e;c[d+(e+1<<2)>>2]=(c[i>>2]|0)+1}l=k;return d|0}function Vv(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0.0,g=0.0;d=c[b+16>>2]|0;g=+h[d+16>>3];h[d+48>>3]=g-+h[d+88>>3];e=+h[d+24>>3];f=+h[d+80>>3]*.5;h[d+56>>3]=e-f;h[d+64>>3]=+h[d+96>>3]+g;h[d+72>>3]=f+e;b=Qm(a,b)|0;while(1){if(!b)break;Wv(b);b=Sm(a,b)|0}return}function Wv(a){a=a|0;a=c[(c[a+16>>2]|0)+8>>2]|0;if(a|0)Xv(a);return}function Xv(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;C=l;l=l+240|0;v=C+192|0;u=C+176|0;w=C+64|0;x=C+32|0;y=C;z=C+144|0;A=C+112|0;B=a+4|0;if((c[B>>2]|0)<=0)ma(86171,84925,3994,86185);b=c[a>>2]|0;d=w;e=b;f=d+48|0;do{c[d>>2]=c[e>>2];d=d+4|0;e=e+4|0}while((d|0)<(f|0));d=v;e=b;f=d+48|0;do{c[d>>2]=c[e>>2];d=d+4|0;e=e+4|0}while((d|0)<(f|0));Yv(x,v);i=x+8|0;j=y+8|0;k=x+16|0;m=y+16|0;n=x+24|0;o=y+24|0;p=w+8|0;q=w+12|0;r=w+32|0;s=w+4|0;t=w+16|0;g=0;while(1){if((g|0)>=(c[B>>2]|0))break;if((g|0)>0){b=(c[a>>2]|0)+(g*48|0)|0;d=w;e=b;f=d+48|0;do{c[d>>2]=c[e>>2];d=d+4|0;e=e+4|0}while((d|0)<(f|0));d=v;e=b;f=d+48|0;do{c[d>>2]=c[e>>2];d=d+4|0;e=e+4|0}while((d|0)<(f|0));Yv(y,v);h[x>>3]=+h[(+h[x>>3]<+h[y>>3]?x:y)>>3];h[i>>3]=+h[(+h[i>>3]<+h[j>>3]?x:y)+8>>3];h[k>>3]=+h[(+h[k>>3]>+h[m>>3]?x:y)+16>>3];h[n>>3]=+h[(+h[n>>3]>+h[o>>3]?x:y)+24>>3]}b=c[p>>2]|0;if(b|0){f=c[w>>2]|0;c[u>>2]=c[t>>2];c[u+4>>2]=c[t+4>>2];c[u+8>>2]=c[t+8>>2];c[u+12>>2]=c[t+12>>2];c[v>>2]=c[f>>2];c[v+4>>2]=c[f+4>>2];c[v+8>>2]=c[f+8>>2];c[v+12>>2]=c[f+12>>2];St(z,u,v,1.0,b);c[y>>2]=c[z>>2];c[y+4>>2]=c[z+4>>2];c[y+8>>2]=c[z+8>>2];c[y+12>>2]=c[z+12>>2];c[y+16>>2]=c[z+16>>2];c[y+20>>2]=c[z+20>>2];c[y+24>>2]=c[z+24>>2];c[y+28>>2]=c[z+28>>2];h[x>>3]=+h[(+h[x>>3]<+h[y>>3]?x:y)>>3];h[i>>3]=+h[(+h[i>>3]<+h[j>>3]?x:y)+8>>3];h[k>>3]=+h[(+h[k>>3]>+h[m>>3]?x:y)+16>>3];h[n>>3]=+h[(+h[n>>3]>+h[o>>3]?x:y)+24>>3]}b=c[q>>2]|0;if(b|0){f=(c[w>>2]|0)+((c[s>>2]|0)+-1<<4)|0;c[u>>2]=c[r>>2];c[u+4>>2]=c[r+4>>2];c[u+8>>2]=c[r+8>>2];c[u+12>>2]=c[r+12>>2];c[v>>2]=c[f>>2];c[v+4>>2]=c[f+4>>2];c[v+8>>2]=c[f+8>>2];c[v+12>>2]=c[f+12>>2];St(A,u,v,1.0,b);c[y>>2]=c[A>>2];c[y+4>>2]=c[A+4>>2];c[y+8>>2]=c[A+8>>2];c[y+12>>2]=c[A+12>>2];c[y+16>>2]=c[A+16>>2];c[y+20>>2]=c[A+20>>2];c[y+24>>2]=c[A+24>>2];c[y+28>>2]=c[A+28>>2];h[x>>3]=+h[(+h[x>>3]<+h[y>>3]?x:y)>>3];h[i>>3]=+h[(+h[i>>3]<+h[j>>3]?x:y)+8>>3];h[k>>3]=+h[(+h[k>>3]>+h[m>>3]?x:y)+16>>3];h[n>>3]=+h[(+h[n>>3]>+h[o>>3]?x:y)+24>>3]}g=g+1|0}B=a+8|0;c[B>>2]=c[x>>2];c[B+4>>2]=c[x+4>>2];c[B+8>>2]=c[x+8>>2];c[B+12>>2]=c[x+12>>2];c[B+16>>2]=c[x+16>>2];c[B+20>>2]=c[x+20>>2];c[B+24>>2]=c[x+24>>2];c[B+28>>2]=c[x+28>>2];l=C;return}function Yv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0;n=l;l=l+48|0;i=n+32|0;j=n;k=c[b+4>>2]|0;if((k|0)<=0)ma(86201,84925,3968,86213);if(((k>>>0)%3|0|0)!=1)ma(86223,84925,3969,86213);m=j+16|0;d=c[b>>2]|0;c[m>>2]=c[d>>2];c[m+4>>2]=c[d+4>>2];c[m+8>>2]=c[d+8>>2];c[m+12>>2]=c[d+12>>2];c[j>>2]=c[d>>2];c[j+4>>2]=c[d+4>>2];c[j+8>>2]=c[d+8>>2];c[j+12>>2]=c[d+12>>2];e=i+8|0;f=j+8|0;g=j+24|0;b=1;while(1){if((b|0)>=(k|0))break;p=+h[d+(b<<4)+8>>3];t=b+1|0;o=+h[d+(t<<4)+8>>3];r=(+h[d+(t<<4)>>3]+ +h[d+(b<<4)>>3])*.5;h[i>>3]=r;p=(o+p)*.5;h[e>>3]=p;o=+h[(+h[j>>3]>3];h[j>>3]=o;s=+h[(+h[f>>3]>3];h[f>>3]=s;r=+h[(+h[m>>3]>r?m:i)>>3];h[m>>3]=r;p=+h[(+h[g>>3]>p?m:i)+8>>3];h[g>>3]=p;t=d+(b+2<<4)|0;c[i>>2]=c[t>>2];c[i+4>>2]=c[t+4>>2];c[i+8>>2]=c[t+8>>2];c[i+12>>2]=c[t+12>>2];q=+h[i>>3];h[j>>3]=+h[(o>3];o=+h[e>>3];h[f>>3]=+h[(s>3];h[m>>3]=+h[(r>q?m:i)>>3];h[g>>3]=+h[(p>o?m:i)+8>>3];b=b+3|0}c[a>>2]=c[j>>2];c[a+4>>2]=c[j+4>>2];c[a+8>>2]=c[j+8>>2];c[a+12>>2]=c[j+12>>2];c[a+16>>2]=c[j+16>>2];c[a+20>>2]=c[j+20>>2];c[a+24>>2]=c[j+24>>2];c[a+28>>2]=c[j+28>>2];l=n;return}function Zv(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0.0,f=0.0,g=0.0,i=0,j=0.0,k=0,l=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0;q=+h[a>>3];r=+h[c>>3];k=!(q>=r);if((!k?q<=+h[c+16>>3]:0)?(e=+h[a+8>>3],e>=+h[c+8>>3]):0)i=e<=+h[c+24>>3];else i=0;e=+h[b>>3];if((e>=r?e<=+h[c+16>>3]:0)?(f=+h[b+8>>3],f>=+h[c+8>>3]):0){d=f<=+h[c+24>>3];if(!(i^d))if(i&d)d=1;else l=11;else d=0}else if(i)d=0;else l=11;a:do if((l|0)==11){p=+h[a+8>>3];do if(q==e){r=+h[c+8>>3];if(!(k|p>=r^+h[b+8>>3]>=r^1)?q<=+h[c+16>>3]:0){d=0;break a}}else{j=+h[b+8>>3];if(p==j){if(!(q>=r^e>=r))break;if(!(p>=+h[c+8>>3]))break;if(!(p<=+h[c+24>>3]))break;else{d=0;break a}}o=(j-p)/(e-q);l=q>3];if(!(!(r>=g)|!(r<=e)|!(f>=m))?f<=+h[c+24>>3]:0){d=0;break a}n=+h[c+16>>3];f=(n-r)*o+f;if(f>=m?!(!(n<=e)|(n>=g?!(f<=+h[c+24>>3]):1)):0){d=0;break a}l=p=r?!(!(m<=f)|(!(m>=g)|!(e<=n))):0){d=0;break a}p=+h[c+24>>3];q=(p-m)/o+e;if(q>=r?!(!(p<=f)|(!(p>=g)|!(q<=n))):0){d=0;break a}}while(0);d=-1}while(0);return d|0}function _v(a){a=a|0;var b=0,c=0.0;b=a+16|0;c=+h[b>>3];h[a+32>>3]=c;h[a+48>>3]=c;h[a+40>>3]=+h[a+24>>3];h[a+56>>3]=+h[a+8>>3];h[b>>3]=+h[a>>3];return}function $v(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,g=0.0,i=0.0;if((c[42176]|0)!=(d|0)){TJ(+(d|0)*.15915494309189535,167112,167120);c[42176]=d}g=+h[b>>3];e=+h[20890];f=+h[b+8>>3];i=+h[20889];h[a>>3]=e*g-i*f;h[a+8>>3]=i*g+f*e;return}function aw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,g=0.0,i=0,j=0,k=0;k=l;l=l+16|0;f=k;e=+h[b>>3];i=b+8|0;g=+h[i>>3];a:do switch(d|0){case 0:{j=11;break}case 90:{h[b>>3]=g;e=-e;j=10;break}case 180:{e=-g;j=10;break}case 270:{h[b>>3]=g;j=10;break}default:{if((d|0)<0){c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];bw(a,f,0-d|0);break a}if((d|0)>360){c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];aw(a,f,(d>>>0)%360|0);break a}else{c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];$v(a,f,d);break a}}}while(0);if((j|0)==10){h[i>>3]=e;j=11}if((j|0)==11){c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2]}l=k;return}function bw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,g=0.0,i=0,j=0,k=0;k=l;l=l+16|0;f=k;e=+h[b>>3];i=b+8|0;g=+h[i>>3];a:do switch(d|0){case 0:{j=11;break}case 90:{h[b>>3]=-g;j=10;break}case 180:{e=-g;j=10;break}case 270:{h[b>>3]=g;j=10;break}default:{if((d|0)<0){c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];aw(a,f,0-d|0);break a}if((d|0)>360){c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];bw(a,f,(d>>>0)%360|0);break a}else{c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];$v(a,f,360-d|0);break a}}}while(0);if((j|0)==10){h[i>>3]=e;j=11}if((j|0)==11){c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2]}l=k;return}function cw(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0,f=0.0,g=0.0;g=+h[c>>3];d=+h[c+8>>3];f=d+ +h[b>>3];e=g+ +h[b+24>>3];d=d+ +h[b+16>>3];h[a>>3]=g+ +h[b+8>>3];h[a+8>>3]=f;h[a+16>>3]=e;h[a+24>>3]=d;return}function dw(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0,f=0.0,g=0.0;f=+h[a>>3];d=+h[b>>3]-f;g=+h[a+8>>3];e=+h[b+8>>3]-g;f=(+h[c+8>>3]-g)*d-(+h[c>>3]-f)*e;f=f*f;return +(f<1.0e-10?0.0:f/(e*e+d*d))}function ew(b,d){b=b|0;d=d|0;var e=0,f=0.0,g=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+16|0;g=n+8|0;i=n;e=ww(96)|0;m=b+16|0;c[(c[m>>2]|0)+8>>2]=e;e=Jm(b,86250)|0;if(!e){e=Na(86259)|0;if(e|0)k=3}else k=3;if((k|0)==3)Va(86271,e|0,1)|0;e=(fw(b)|0)&255;a[(c[m>>2]|0)+115>>0]=e;if(0==0?(e=Jm(b,86282)|0,c[42178]=e,(e|0)==0):0)c[42178]=c[42177];f=+FA(b,zm(b,0,86292,0)|0,0.0,0.0);h[c[(c[m>>2]|0)+8>>2]>>3]=f;e=Jm(b,86300)|0;a:do if(!e)e=0;else{switch(a[e>>0]|0){case 76:{if(!(yJ(e,86308)|0)){e=1;break a}break}case 66:{if(!(yJ(e,86311)|0)){e=2;break a}break}case 82:{e=(yJ(e,86314)|0)==0;e=e?3:0;break a}default:{e=0;break a}}e=0}while(0);c[(c[m>>2]|0)+116>>2]=e<<2|(d<<24>>24==0?0:e);f=+FA(b,zm(b,0,86317,0)|0,.25,.02);h[i>>3]=f;f=f*72.0;c[(c[m>>2]|0)+248>>2]=~~(f+(f>=0.0?.5:-.5));e=GA(b,zm(b,0,86325,0)|0,0)|0;if(e){c[g>>2]=i;if(dM(e,86246,g)|0){f=+h[i>>3];if(f<.02){h[i>>3]=.02;f=.02}}else{h[i>>3]=.5;f=.5}if(iL(e,86333)|0)a[(c[m>>2]|0)+276>>0]=1}else{h[i>>3]=.5;f=.5}f=f*72.0;c[(c[m>>2]|0)+252>>2]=~~(f+(f>=0.0?.5:-.5));i=(EA(b,zm(b,0,86341,0)|0,0,0)|0)&255;a[(c[m>>2]|0)+243>>0]=i;i=VA(GA(b,zm(b,0,86351,0)|0,0)|0,19732,19748)|0;c[(c[m>>2]|0)+244>>2]=i;gw(b);i=hw(b,86361,(c[(c[m>>2]|0)+8>>2]|0)+64|0)|0;e=c[(c[m>>2]|0)+8>>2]|0;a[e+80>>0]=i;hw(b,86366,e+48|0)|0;e=JA(Jm(b,86371)|0)|0;a[(c[(c[m>>2]|0)+8>>2]|0)+82>>0]=e;e=Jm(b,86378)|0;do if(!e){e=Jm(b,86385)|0;if(e|0){e=(a[e>>0]|32)<<24>>24==108&1;k=27;break}e=Jm(b,86397)|0;if(e|0){e=JA(e)|0;k=27}}else{e=(sM(e)|0)==90&1;k=27}while(0);if((k|0)==27)a[(c[(c[m>>2]|0)+8>>2]|0)+81>>0]=e;c[42180]=VA(Jm(b,86407)|0,19764,19780)|0;a[174080]=JA(Jm(b,86419)|0)|0;c[42182]=0;c[42183]=0;h[(c[(c[m>>2]|0)+8>>2]|0)+24>>3]=0.0;e=Jm(b,86431)|0;if((e|0)!=0?(a[e>>0]|0)!=0:0)k=32;else k=30;if(((k|0)==30?(j=Jm(b,86435)|0,j|0):0)?a[j>>0]|0:0){e=j;k=32}if((k|0)==32){f=+tM(e);h[(c[(c[m>>2]|0)+8>>2]|0)+24>>3]=f}iw(b);c[42185]=zm(b,0,86446,0)|0;c[42188]=zm(b,0,86455,0)|0;c[42189]=zm(b,0,90530,0)|0;c[42190]=zm(b,1,96049,0)|0;c[42191]=zm(b,1,96043,0)|0;c[42192]=zm(b,1,90671,0)|0;c[42193]=zm(b,1,122540,0)|0;c[42194]=zm(b,1,86469,0)|0;c[42202]=zm(b,1,86479,0)|0;c[42195]=zm(b,1,86485,0)|0;c[42196]=zm(b,1,86494,0)|0;c[42197]=zm(b,1,86503,0)|0;k=zm(b,1,86240,0)|0;c[42199]=k;if(!k)c[42199]=zm(b,1,86240,90527)|0;c[42200]=zm(b,1,86513,0)|0;c[42203]=zm(b,1,86341,0)|0;c[42217]=zm(b,1,86520,0)|0;c[42206]=zm(b,1,86446,0)|0;c[42198]=zm(b,1,90530,0)|0;c[42204]=zm(b,1,86529,0)|0;c[42205]=zm(b,1,86535,0)|0;c[42208]=zm(b,1,86547,0)|0;c[42207]=zm(b,1,86385,0)|0;c[42209]=zm(b,1,86552,0)|0;c[42210]=zm(b,1,86563,0)|0;c[42211]=zm(b,1,122089,0)|0;c[42201]=zm(b,1,86573,0)|0;c[42212]=zm(b,1,86583,0)|0;c[42213]=zm(b,1,86589,0)|0;c[42214]=zm(b,1,86595,0)|0;c[42215]=zm(b,1,86603,0)|0;c[42216]=zm(b,1,86612,0)|0;c[42218]=zm(b,1,86455,0)|0;c[42219]=zm(b,2,86614,0)|0;c[42221]=zm(b,2,122540,0)|0;c[42222]=zm(b,2,86469,0)|0;c[42224]=zm(b,2,86485,0)|0;c[42225]=zm(b,2,86494,0)|0;c[42226]=zm(b,2,86503,0)|0;c[42227]=zm(b,2,86240,0)|0;c[42228]=zm(b,2,86513,0)|0;c[42237]=zm(b,2,86621,0)|0;c[42229]=zm(b,2,86632,0)|0;c[42240]=zm(b,2,86636,0)|0;c[42241]=zm(b,2,86646,0)|0;c[42242]=zm(b,2,86656,0)|0;c[42243]=zm(b,2,86666,0)|0;c[42244]=zm(b,2,86676,0)|0;c[42245]=zm(b,2,86690,0)|0;c[42246]=zm(b,2,86704,0)|0;c[42247]=zm(b,2,86719,0)|0;c[42248]=zm(b,2,86733,0)|0;c[42220]=zm(b,2,86744,0)|0;c[42232]=zm(b,2,86341,0)|0;c[42230]=zm(b,2,86479,0)|0;c[42231]=zm(b,2,86751,0)|0;c[42233]=zm(b,2,86760,0)|0;c[42234]=zm(b,2,86770,0)|0;c[42235]=zm(b,2,86583,0)|0;c[42236]=zm(b,2,86595,0)|0;c[42249]=zm(b,2,86781,0)|0;c[42250]=zm(b,2,86790,0)|0;c[42251]=zm(b,2,86520,0)|0;e=Vt(b)|0;c[(c[(c[m>>2]|0)+8>>2]|0)+88>>2]=e;e=Jm(b,86799)|0;if(e|0?a[e>>0]|0:0){b=rw(e,b)|0;c[(c[(c[m>>2]|0)+8>>2]|0)+92>>2]=b}l=n;return}function fw(a){a=a|0;var b=0,d=0;d=l;l=l+16|0;b=d;a=HA(a,zm(a,0,86883,0)|0,86891)|0;if(((((((jK(a,86897)|0)!=0?(jK(a,86905)|0)!=0:0)?(jK(a,86912)|0)!=0:0)?(jK(a,86915)|0)!=0:0)?(jK(a,86926)|0)!=0:0)?(jK(a,86937)|0)!=0:0)?(jK(a,86947)|0)!=0:0)if((jK(a,86958)|0)!=0?(jK(a,86964)|0)!=0:0)if((jK(a,86891)|0)!=0?(jK(a,86969)|0)!=0:0){c[b>>2]=a;$l(0,86974,b)|0;a=0}else a=0;else a=2;else a=1;l=d;return a|0}function gw(b){b=b|0;var d=0.0,e=0,f=0;e=Jm(b,86841)|0;a:do if(e|0?(f=a[e>>0]|0,f<<24>>24):0)switch(f<<24>>24|0){case 97:{if(f<<24>>24!=97)break a;if(yJ(e,86847)|0)break a;c[(c[(c[b+16>>2]|0)+8>>2]|0)+84>>2]=4;break a}case 99:{if(f<<24>>24!=99)break a;if(yJ(e,86852)|0)break a;c[(c[(c[b+16>>2]|0)+8>>2]|0)+84>>2]=3;break a}case 101:{if(f<<24>>24!=101)break a;if(yJ(e,86861)|0)break a;c[(c[(c[b+16>>2]|0)+8>>2]|0)+84>>2]=5;break a}case 102:{if(f<<24>>24!=102)break a;if(yJ(e,86868)|0)break a;c[(c[(c[b+16>>2]|0)+8>>2]|0)+84>>2]=2;break a}default:{d=+tM(e);if(!(d>0.0))break a;b=c[(c[b+16>>2]|0)+8>>2]|0;c[b+84>>2]=1;h[b+16>>3]=d;break a}}while(0);return}function hw(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,g=0.0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+48|0;m=o+32|0;i=o+16|0;k=o+8|0;j=o;n=o+40|0;a[n>>0]=0;b=Jm(b,d)|0;do if(b){c[i>>2]=k;c[i+4>>2]=j;c[i+8>>2]=n;i=(dM(b,86825,i)|0)>1;g=+h[k>>3];f=+h[j>>3];if(i&g>0.0&f>0.0){g=g*72.0;h[e>>3]=+(~~(g+(g>=0.0?.5:-.5))|0);g=f*72.0;h[e+8>>3]=+(~~(g+(g>=0.0?.5:-.5))|0);b=(a[n>>0]|0)==33;break}a[n>>0]=0;c[m>>2]=k;c[m+4>>2]=n;m=(dM(b,86835,m)|0)>0;f=+h[k>>3];if(m&f>0.0){g=f*72.0;g=+(~~(g+(g>=0.0?.5:-.5))|0);h[e>>3]=g;h[e+8>>3]=g;b=(a[n>>0]|0)==33}else b=0}else b=0;while(0);l=o;return b&1|0}function iw(b){b=b|0;var d=0,e=0,f=0.0,g=0.0,i=0;d=Jm(b,86240)|0;do if(d|0?a[d>>0]|0:0){e=(c[(c[b+60>>2]|0)+16>>2]|0)+113|0;a[e>>0]=a[e>>0]|8;e=(dp(d)|0)!=0;g=+FA(b,zm(b,0,86485,0)|0,14.0,1.0);i=HA(b,zm(b,0,86494,0)|0,93027)|0;d=mw(b,d,e?2:0,g,i,HA(b,zm(b,0,86503,0)|0,122106)|0)|0;i=b+16|0;c[(c[i>>2]|0)+12>>2]=d;d=Jm(b,90662)|0;e=(d|0)!=0;do if((to(b)|0)==(b|0)){if(e?(a[d>>0]|0)==116:0){d=1;break}d=0}else{if(e?(a[d>>0]|0)==98:0){d=0;break}d=1}while(0);e=Jm(b,86802)|0;a:do if(e)switch(a[e>>0]|0){case 108:{d=d|2;break a}case 114:{d=d|4;break a}default:break a}while(0);a[(c[i>>2]|0)+275>>0]=d;if((to(b)|0)!=(b|0)){d=c[(c[i>>2]|0)+12>>2]|0;f=+h[d+24>>3]+16.0;g=+h[d+32>>3]+8.0;b=(c[(c[(to(b)|0)+16>>2]|0)+116>>2]&1|0)==0;d=c[i>>2]|0;e=a[d+275>>0]<<1&2;if(b){b=e&255;h[d+48+(b<<4)>>3]=f;h[d+48+(b<<4)+8>>3]=g;break}else{b=(e^3)&255;h[d+48+(b<<4)>>3]=g;h[d+48+(b<<4)+8>>3]=f;break}}}while(0);return}function jw(a){a=a|0;var b=0,d=0,e=0;e=a+16|0;d=c[e>>2]|0;b=c[d+8>>2]|0;do if(!b)b=d;else{d=c[b+88>>2]|0;if(d){yt(d);d=c[e>>2]|0;b=c[d+8>>2]|0;if(!b){b=d;break}}$I(c[b+92>>2]|0);b=c[e>>2]|0}while(0);$I(c[b+8>>2]|0);e=c[e>>2]|0;c[e+8>>2]=0;pw(c[e+12>>2]|0);Uo(a,0,122277);return}function kw(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;f=c[d>>2]|0;l=d+24|0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[l+12>>2]=0;if(a[f>>0]|0){i=xw((sJ(f)|0)+1|0)|0;a[i>>0]=0;j=d+12|0;e=i;a:while(1){b:while(1){h=f+1|0;g=a[f>>0]|0;if(!(g<<24>>24))break a;if(!(g<<24>>24==-1|((g&255)<161|(c[j>>2]|0)!=2))){a[e>>0]=g;h=a[h>>0]|0;g=e+2|0;a[e+1>>0]=h;if(!(h<<24>>24)){e=g;break a}else{e=g;f=f+2|0;continue}}switch(g<<24>>24){case 92:break b;case 10:{k=12;break b}default:{}}a[e>>0]=g;e=e+1|0;f=h}if((k|0)==12){k=0;f=e+1|0;a[e>>0]=0;lw(b,d,i,110);e=f;i=f;f=h;continue}g=a[h>>0]|0;switch(g<<24>>24|0){case 114:case 108:case 110:{g=e+1|0;a[e>>0]=0;lw(b,d,i,a[h>>0]|0);e=g;break}default:{a[e>>0]=g;e=e+1|0;g=i}}i=g;f=(a[h>>0]|0)==0?h:f+2|0}if((i|0)!=(e|0)){a[e>>0]=0;lw(b,d,i,110)}d=d+40|0;c[d>>2]=c[l>>2];c[d+4>>2]=c[l+4>>2];c[d+8>>2]=c[l+8>>2];c[d+12>>2]=c[l+12>>2]}return}function lw(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var i=0.0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+32|0;q=s+16|0;p=s;r=e+76|0;k=b[r>>1]|0;o=e+72|0;m=c[o>>2]|0;if(!m)n=ww((k*56|0)+112|0)|0;else n=yw(m,k+2|0,56,k+1|0)|0;c[o>>2]=n;k=b[r>>1]|0;m=n+(k*56|0)|0;c[m>>2]=f;a[n+(k*56|0)+48>>0]=g;if((f|0)!=0?(a[f>>0]|0)!=0:0){c[41782]=c[e+4>>2];h[20893]=+h[e+16>>3];g=c[d+144>>2]|0;c[n+(k*56|0)+4>>2]=bb[c[g>>2]&31](g,167128,1)|0;qA(p,d,m);j=+h[p>>3];h[q>>3]=j;i=+h[p+8>>3]}else{h[q>>3]=0.0;i=+(~~(+h[e+16>>3]*1.2)|0);h[n+(k*56|0)+40>>3]=i;j=0.0}b[r>>1]=(b[r>>1]|0)+1<<16>>16;r=e+24|0;h[r>>3]=+h[(+h[r>>3]>j?r:q)>>3];r=e+32|0;h[r>>3]=+h[r>>3]+i;l=s;return}function mw(b,e,f,g,i,j){b=b|0;e=e|0;f=f|0;g=+g;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+32|0;r=u+16|0;q=u+8|0;p=u;t=ww(88)|0;switch(Do(b)|0){case 0:{m=0;s=c[b+60>>2]|0;n=b;o=0;break}case 1:{m=0;s=to(so(b)|0)|0;n=0;o=b;break}case 2:{m=b;s=to(so(c[((c[b>>2]&3|0)==2?b:b+-48|0)+40>>2]|0)|0)|0;n=0;o=0;break}default:{m=0;s=0;n=0;o=0}}c[t+4>>2]=i;c[t+8>>2]=j;h[t+16>>3]=g;k=s+16|0;j=t+12|0;c[j>>2]=d[(c[k>>2]|0)+115>>0];a:do if(f&4){c[t>>2]=HL(e)|0;if(f&2|0)a[t+82>>0]=1}else switch(f|0){case 2:{c[t>>2]=HL(e)|0;a[t+82>>0]=1;if(!(UF(b,t)|0))break a;switch(Do(b)|0){case 0:{c[p>>2]=En(n)|0;$l(3,87017,p)|0;break a}case 1:{c[q>>2]=En(o)|0;$l(3,87039,q)|0;break a}case 2:{p=En(c[((c[m>>2]&3|0)==3?m:m+48|0)+40>>2]|0)|0;q=(rn(s)|0)!=0;s=En(c[((c[m>>2]&3|0)==2?m:m+-48|0)+40>>2]|0)|0;c[r>>2]=p;c[r+4>>2]=q?122546:122549;c[r+8>>2]=s;$l(3,87060,r)|0;break a}default:break a}}case 0:{i=nw(e,b,0)|0;c[t>>2]=i;if((c[j>>2]|0)==1)i=zB(i)|0;else i=wB(i,s)|0;$I(c[t>>2]|0);c[t>>2]=i;kw(c[(c[k>>2]|0)+144>>2]|0,t);break a}default:ma(87087,87103,166,87112)}while(0);l=u;return t|0}function nw(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;switch(Do(d)|0){case 0:{i=En(d)|0;g=sJ(i)|0;f=c[(c[d+16>>2]|0)+12>>2]|0;if(f){f=c[f>>2]|0;if(!b){v=0;t=2;u=2;s=2;h=2;y=87135;m=87132;j=90527;o=174185;q=174185;p=0;r=0;n=2;w=f;x=87129}else{v=0;t=2;u=2;s=2;h=2;y=87135;m=87132;j=90527;o=174185;q=174185;p=0;r=0;n=sJ(f)|0;w=f;x=87129}}else{v=0;t=2;u=2;s=2;h=2;y=87135;m=87132;j=90527;o=174185;q=174185;p=0;r=0;n=2;w=87123;x=87129}break}case 1:{i=En(so(d)|0)|0;g=sJ(i)|0;j=En(d)|0;h=sJ(j)|0;f=c[(c[d+16>>2]|0)+104>>2]|0;if(f){f=c[f>>2]|0;if(!b){v=0;t=2;u=2;s=2;y=87135;m=87132;o=174185;q=174185;p=0;r=0;n=2;w=f;x=87129}else{v=0;t=2;u=2;s=2;y=87135;m=87132;o=174185;q=174185;p=0;r=0;n=sJ(f)|0;w=f;x=87129}}else{v=0;t=2;u=2;s=2;y=87135;m=87132;o=174185;q=174185;p=0;r=0;n=2;w=87123;x=87129}break}case 2:{h=d+48|0;i=En(to(so(c[((c[d>>2]&3|0)==3?d:h)+40>>2]|0)|0)|0)|0;g=sJ(i)|0;l=En(c[((c[d>>2]&3|0)==3?d:h)+40>>2]|0)|0;k=sJ(l)|0;f=d+16|0;q=c[(c[f>>2]|0)+52>>2]|0;if(!q)r=0;else r=sJ(q)|0;m=En(c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0)|0;f=c[f>>2]|0;o=c[f+92>>2]|0;if(!o)p=0;else p=sJ(o)|0;j=sJ(m)|0;f=c[f+96>>2]|0;if(f){f=c[f>>2]|0;if(!b)n=2;else n=sJ(f)|0}else{n=2;f=87123}x=(rn(to(so(c[((c[d>>2]&3|0)==3?d:h)+40>>2]|0)|0)|0)|0)==0;v=1;t=k;u=j;s=k+2+(r|0?r+1|0:0)+j+(p|0?p+1|0:0)|0;h=2;y=l;j=90527;w=f;x=x?122549:122546;break}default:{v=0;t=2;u=2;s=2;h=2;g=2;y=87135;m=87132;j=90527;i=87126;o=174185;q=174185;p=0;r=0;n=2;w=87123;x=87129}}e=(e|0)==0;l=0;f=b;a:while(1){d=f+1|0;b:do switch(a[f>>0]|0){case 0:break a;case 92:{f=f+2|0;switch(a[d>>0]|0){case 78:{k=h;break b}case 71:{k=g;break b}case 69:{k=s;break b}case 72:{k=u;break b}case 84:{k=t;break b}case 76:{k=n;break b}case 92:{if(!e){k=1;break b}break}default:{}}k=2;break}default:{k=1;f=d}}while(0);l=l+k|0}s=xw(l+1|0)|0;n=(v|0)==0;l=(r|0)==0;d=(p|0)==0;f=s;g=b;c:while(1){k=g+1|0;h=a[g>>0]|0;switch(h<<24>>24){case 0:break c;case 92:break;default:{a[f>>0]=h;f=f+1|0;g=k;continue c}}h=g+2|0;g=a[k>>0]|0;switch(g<<24>>24|0){case 71:{g=i;while(1){b=a[g>>0]|0;a[f>>0]=b;if(!(b<<24>>24)){g=h;continue c}g=g+1|0;f=f+1|0}}case 78:{g=j;while(1){b=a[g>>0]|0;a[f>>0]=b;if(!(b<<24>>24)){g=h;continue c}g=g+1|0;f=f+1|0}}case 69:{if(n){g=h;continue c}else g=y;while(1){b=a[g>>0]|0;a[f>>0]=b;if(!(b<<24>>24))break;g=g+1|0;f=f+1|0}if(l)g=x;else{a[f>>0]=58;g=q;while(1){f=f+1|0;b=a[g>>0]|0;a[f>>0]=b;if(!(b<<24>>24)){g=x;break}else g=g+1|0}}while(1){b=a[g>>0]|0;a[f>>0]=b;if(!(b<<24>>24)){g=m;break}g=g+1|0;f=f+1|0}while(1){b=a[g>>0]|0;a[f>>0]=b;if(!(b<<24>>24))break;g=g+1|0;f=f+1|0}if(d){g=h;continue c}a[f>>0]=58;g=o;while(1){f=f+1|0;b=a[g>>0]|0;a[f>>0]=b;if(!(b<<24>>24)){g=h;continue c}else g=g+1|0}}case 84:{g=y;while(1){b=a[g>>0]|0;a[f>>0]=b;if(!(b<<24>>24)){g=h;continue c}g=g+1|0;f=f+1|0}}case 72:{g=m;while(1){b=a[g>>0]|0;a[f>>0]=b;if(!(b<<24>>24)){g=h;continue c}f=f+1|0;g=g+1|0}}case 76:{g=w;while(1){b=a[g>>0]|0;a[f>>0]=b;if(!(b<<24>>24)){g=h;continue c}f=f+1|0;g=g+1|0}}case 92:{if(!e){a[f>>0]=92;f=f+1|0;g=h;continue c}break}default:{}}a[f>>0]=92;a[f+1>>0]=g;f=f+2|0;g=h}a[f>>0]=0;return s|0}function ow(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;if(a|0){d=a;e=0;while(1){if((e|0)>=(b|0))break;if(!e)$I(c[d>>2]|0);g=c[d+8>>2]|0;if(g|0?(f=c[d+12>>2]|0,f|0):0)gb[f&127](g);d=d+56|0;e=e+1|0}$I(a)}return}function pw(d){d=d|0;var e=0;if(d|0){$I(c[d>>2]|0);e=d+72|0;if(a[d+82>>0]|0){e=c[e>>2]|0;if(e|0)FF(e,1)}else ow(c[e>>2]|0,b[d+76>>1]|0);$I(d)}return}function qw(d,e,f){d=d|0;e=e|0;f=f|0;var g=0.0,i=0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+32|0;q=u+16|0;r=u;k=c[d+16>>2]|0;s=k+12|0;t=c[s>>2]|0;c[s>>2]=e;if(!(a[f+82>>0]|0)){p=f+76|0;if((b[p>>1]|0)>=1){zD(d,0);CD(d,c[f+8>>2]|0);switch(a[f+80>>0]|0){case 116:{j=+h[f+64>>3];g=+h[f+48>>3]*.5+j;break}case 98:{j=+h[f+64>>3];g=+h[f+48>>3]*-.5+j+ +h[f+32>>3];break}default:{j=+h[f+64>>3];g=+h[f+32>>3]*.5+j}}g=g-+h[f+16>>3];o=r+8|0;h[o>>3]=g;if(b[k+260>>1]&512)h[o>>3]=g-j;m=f+72|0;n=f+56|0;i=f+40|0;e=0;while(1){if((e|0)>=(b[p>>1]|0))break;k=c[m>>2]|0;switch(a[k+(e*56|0)+48>>0]|0){case 108:{g=+h[n>>3]-+h[i>>3]*.5;break}case 114:{g=+h[i>>3]*.5+ +h[n>>3];break}default:g=+h[n>>3]}h[r>>3]=g;c[q>>2]=c[r>>2];c[q+4>>2]=c[r+4>>2];c[q+8>>2]=c[r+8>>2];c[q+12>>2]=c[r+12>>2];BD(d,q,k+(e*56|0)|0);h[o>>3]=+h[o>>3]-+h[(c[m>>2]|0)+(e*56|0)+40>>3];e=e+1|0}AD(d);i=18}}else{kF(d,c[f+72>>2]|0,f);i=18}if((i|0)==18)c[s>>2]=t;l=u;return}function rw(a,b){a=a|0;b=b|0;return nw(a,b,1)|0}function sw(a){a=a|0;return tw(a,0)|0}function tw(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;e=c[42252]|0;if(!e){c[42253]=64;e=xw(64)|0;c[42252]=e}j=d<<24>>24==0;i=0;f=0;h=b;while(1){if(!h)break;d=a[h>>0]|0;if(!(d<<24>>24))break;b=c[42253]|0;if((i|0)>(b+-8|0)){e=b<<1;c[42253]=e;e=zw(c[42252]|0,e)|0;c[42252]=e;e=e+i|0;d=a[h>>0]|0}a:do switch(d<<24>>24){case 38:{if(j?(uw(h)|0)!=0:0)k=18;else{f=5;d=87164}break}case 60:{f=4;d=87187;break}case 62:{f=4;d=87170;break}case 45:{f=5;d=87181;break}default:{if((f|0)!=0&d<<24>>24==32)if((a[f>>0]|0)==32){f=6;d=87157;break a}else{k=18;break a}switch(d<<24>>24){case 34:{f=6;d=87150;break a}case 39:{f=5;d=87175;break a}case 10:if(j){k=18;break a}else{f=5;d=87144;break a}default:{k=18;break a}}}}while(0);if((k|0)==18){k=0;d=j|d<<24>>24!=13;f=d?1:5;d=d?h:87138}g=e+f|0;b=f;while(1){if(!b)break;a[e>>0]=a[d>>0]|0;b=b+-1|0;d=d+1|0;e=e+1|0}b=h;i=f+i|0;e=g;h=h+1|0;f=b}a[e>>0]=0;return c[42252]|0}function uw(b){b=b|0;var c=0,d=0;d=b+1|0;c=a[d>>0]|0;a:do if(c<<24>>24==35){d=b+2|0;c=a[d>>0]|0;switch(c<<24>>24){case 88:case 120:break;default:{b=d;while(1){d=b+1|0;if((c+-48&255)>=10)break a;b=d;c=a[d>>0]|0}}}d=b+3|0;while(1){c=a[d>>0]|0;if((c+-48&255)>=10)switch(c<<24>>24){case 65:case 66:case 67:case 68:case 69:case 70:case 97:case 98:case 99:case 100:case 101:case 102:break;default:break a}d=d+1|0}}else while(1){b=d+1|0;if(((c&-33)+-65&255)>=26)break a;d=b;c=a[b>>0]|0}while(0);return c<<24>>24==59|0}function vw(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;d=c[42254]|0;if(!d){c[42255]=64;d=xw(64)|0;c[42254]=d;i=0}else i=0;while(1){if(!b)break;e=a[b>>0]|0;if(!(e<<24>>24))break;f=c[42255]|0;if((i|0)>(f+-8|0)){d=f<<1;c[42255]=d;d=zw(c[42254]|0,d)|0;c[42254]=d;d=d+i|0;e=a[b>>0]|0}switch(e<<24>>24){case 38:{if(!(uw(b)|0)){g=5;e=87164}else j=12;break}case 60:{g=4;e=87187;break}case 62:{g=4;e=87170;break}case 34:{g=6;e=87150;break}case 39:{g=5;e=87175;break}default:j=12}if((j|0)==12){j=0;g=1;e=b}h=d+g|0;f=g;while(1){if(!f)break;a[d>>0]=a[e>>0]|0;f=f+-1|0;e=e+1|0;d=d+1|0}i=g+i|0;d=h;b=b+1|0}a[d>>0]=0;return c[42254]|0}function ww(a){a=a|0;var b=0;if(!a)a=0;else{b=xw(a)|0;WN(b|0,0,a|0)|0;a=b}return a|0}function xw(a){a=a|0;if(a){a=_I(a)|0;if(!a){YL(96532,14,1,c[13918]|0)|0;a=0}}else a=0;return a|0}function yw(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=bJ(a,O(d,b)|0)|0;if(!((b|0)!=0&(a|0)==0)){if(b>>>0>e>>>0)WN(a+(O(e,d)|0)|0,0,O(b-e|0,d)|0)|0}else YL(96532,14,1,c[13918]|0)|0;return a|0}function zw(a,b){a=a|0;b=b|0;a=bJ(a,b)|0;if((b|0)!=0&(a|0)==0)YL(96532,14,1,c[13918]|0)|0;return a|0}function Aw(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0.0,m=0,n=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+80|0;r=u+40|0;q=u+32|0;n=u+24|0;m=u;s=4;t=_I(40)|0;c[t>>2]=0;f=u+68|0;g=u+64|0;if(0){o=0;ha(57,a|0,f|0,g|0);i=o;o=0;if((i|0)!=0&(p|0)!=0){j=TN(c[i>>2]|0,t|0,s|0)|0;if(!j)Ua(i|0,p|0);z=p}else j=-1;if((j|0)!=1){j=c[13918]|0;i=c[f>>2]|0;f=c[g>>2]|0;o=0;c[m>>2]=87236;c[m+4>>2]=i;c[m+8>>2]=f;c[m+12>>2]=d;c[m+16>>2]=b;aa(13,j|0,87192,m|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=TN(c[f>>2]|0,t|0,s|0)|0;if(!g)Ua(f|0,p|0);z=p}else g=-1;if((g|0)!=1){o=0;ea(1);f=o;o=0;if((f|0)!=0&(p|0)!=0){g=TN(c[f>>2]|0,t|0,s|0)|0;if(!g)Ua(f|0,p|0);z=p}else g=-1;if((g|0)!=1)j=6;else{f=z;j=15}}else{f=z;j=15}}else{f=z;j=15}}else j=6;do if((j|0)==6){o=0;f=_(20,a|0)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){i=TN(c[g>>2]|0,t|0,s|0)|0;if(!i)Ua(g|0,p|0);z=p}else i=-1;if((i|0)!=1){if(!f){o=0;ea(2);f=o;o=0;if((f|0)!=0&(p|0)!=0){g=TN(c[f>>2]|0,t|0,s|0)|0;if(!g)Ua(f|0,p|0);z=p}else g=-1;if((g|0)==1){f=z;j=15;break}}if((d|0)<1){o=0;ea(3);f=o;o=0;if((f|0)!=0&(p|0)!=0){g=TN(c[f>>2]|0,t|0,s|0)|0;if(!g)Ua(f|0,p|0);z=p}else g=-1;if((g|0)==1){f=z;j=15;break}f=0;break}else{c[42256]=(e|0)>-1?e:30;t=SN(169028,1,t|0,s|0)|0;s=z;o=0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=TN(c[f>>2]|0,t|0,s|0)|0;if(!g)Ua(f|0,p|0);z=p}else g=-1;if((g|0)==1){f=z;j=15;break}f=0;j=15;break}}else{f=z;j=15}}while(0);a:do if((j|0)==15){b:while(1){if(f|0){f=2;break a}o=0;ea(4);f=o;o=0;if((f|0)!=0&(p|0)!=0){g=TN(c[f>>2]|0,t|0,s|0)|0;if(!g)Ua(f|0,p|0);z=p}else g=-1;if((g|0)==1){f=z;j=15;continue}a=c[13918]|0;m=0;while(1){o=0;j=Z(1)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=TN(c[f>>2]|0,t|0,s|0)|0;if(!g)Ua(f|0,p|0);z=p}else g=-1;if((g|0)==1){f=z;j=15;continue b}if(!j)break;o=0;f=_(21,j|0)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){i=TN(c[g>>2]|0,t|0,s|0)|0;if(!i)Ua(g|0,p|0);z=p}else i=-1;if((i|0)==1){f=z;j=15;continue b}o=0;ga(24,j|0,f|0);f=o;o=0;if((f|0)!=0&(p|0)!=0){g=TN(c[f>>2]|0,t|0,s|0)|0;if(!g)Ua(f|0,p|0);z=p}else g=-1;if((g|0)==1){f=z;j=15;continue b}m=m+1|0;do if(((m|0)%100|0|0)==0&0!=0){f=(m|0)%1e3|0;if((f|0)==100){o=0;$(27,87236,a|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=TN(c[f>>2]|0,t|0,s|0)|0;if(!g)Ua(f|0,p|0);z=p}else g=-1;if((g|0)==1){f=z;j=15;continue b}o=0;c[n>>2]=m;aa(13,a|0,87254,n|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=TN(c[f>>2]|0,t|0,s|0)|0;if(!g)Ua(f|0,p|0);z=p}else g=-1;if((g|0)==1){f=z;j=15;continue b}break}o=0;c[q>>2]=m;aa(13,a|0,87254,q|0)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){i=TN(c[g>>2]|0,t|0,s|0)|0;if(!i)Ua(g|0,p|0);z=p}else i=-1;if((i|0)==1){f=z;j=15;continue b}if(!f){o=0;$(28,10,a|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=TN(c[f>>2]|0,t|0,s|0)|0;if(!g)Ua(f|0,p|0);z=p}else g=-1;if((g|0)==1){f=z;j=15;continue b}}}while(0);if((m|0)>=(d|0))break}switch(b|0){case 1:{o=0;ea(5);f=o;o=0;if((f|0)!=0&(p|0)!=0){g=TN(c[f>>2]|0,t|0,s|0)|0;if(!g)Ua(f|0,p|0);z=p}else g=-1;if((g|0)==1){f=z;j=15;continue b}break}case 2:{o=0;ea(6);f=o;o=0;if((f|0)!=0&(p|0)!=0){g=TN(c[f>>2]|0,t|0,s|0)|0;if(!g)Ua(f|0,p|0);z=p}else g=-1;if((g|0)==1){f=z;j=15;continue b}break}default:{o=0;ea(7);f=o;o=0;if((f|0)!=0&(p|0)!=0){g=TN(c[f>>2]|0,t|0,s|0)|0;if(!g)Ua(f|0,p|0);z=p}else g=-1;if((g|0)==1){f=z;j=15;continue b}o=0;ea(3);f=o;o=0;if((f|0)!=0&(p|0)!=0){g=TN(c[f>>2]|0,t|0,s|0)|0;if(!g)Ua(f|0,p|0);z=p}else g=-1;if((g|0)==1){f=z;j=15;continue b}}}if(!0){f=0;break a}if((m|0)>99){o=0;$(28,10,a|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=TN(c[f>>2]|0,t|0,s|0)|0;if(!g)Ua(f|0,p|0);z=p}else g=-1;if((g|0)==1){f=z;j=15;continue}}f=c[42296]|0;g=c[42297]|0;o=0;k=+X(1);i=o;o=0;if((i|0)!=0&(p|0)!=0){j=TN(c[i>>2]|0,t|0,s|0)|0;if(!j)Ua(i|0,p|0);z=p}else j=-1;if((j|0)==1){f=z;j=15;continue}o=0;c[r>>2]=87236;c[r+4>>2]=f;c[r+8>>2]=g;c[r+12>>2]=m;h[r+16>>3]=k;aa(13,a|0,87258,r|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=TN(c[f>>2]|0,t|0,s|0)|0;if(!g)Ua(f|0,p|0);z=p}else g=-1;if((g|0)==1){f=z;j=15}else break}f=0}while(0);$I(t|0);l=u;return f|0}function Bw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;a=(c[a+16>>2]|0)+192|0;e=0;h=0;while(1){a=c[a>>2]|0;if(!a)break;g=c[a+16>>2]|0;f=c[g+180>>2]|0;a=0;while(1){if(!(c[f+(a<<2)>>2]|0))break;a=a+1|0;e=e+1|0}a=g+164|0;h=h+1|0}c[b>>2]=h;c[d>>2]=e;return}function Cw(b){b=b|0;var d=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;c[42299]=b;c[42306]=0;c[42297]=0;c[42296]=0;i=b+16|0;b=(c[i>>2]|0)+192|0;h=0;f=0;while(1){b=c[b>>2]|0;if(!b)break;g=c[b+16>>2]|0;a[g+157>>0]=0;h=h+1|0;c[42296]=h;d=c[g+180>>2]|0;b=0;while(1){if(!(c[d+(b<<2)>>2]|0))break;k=f+1|0;c[42297]=k;b=b+1|0;f=k}b=g+164|0}b=c[42307]|0;if(!b)b=xw(h<<2)|0;else b=zw(b,h<<2)|0;c[42307]=b;c[42308]=0;b=c[42301]|0;if(!b)b=xw(c[42296]<<2)|0;else b=zw(b,c[42296]<<2)|0;c[42301]=b;c[42300]=0;d=1;b=(c[i>>2]|0)+192|0;while(1){b=c[b>>2]|0;if(!b)break;k=b+16|0;i=c[k>>2]|0;j=i+292|0;c[j>>2]=0;i=c[i+172>>2]|0;h=d;g=0;b=0;while(1){d=c[i+(g<<2)>>2]|0;if(!d)break;f=b+1|0;c[j>>2]=f;b=c[d+16>>2]|0;c[b+160>>2]=0;c[b+164>>2]=-1;if(!h)b=0;else{l=c[d>>2]&3;b=((c[(c[(c[((l|0)==2?d:d+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(c[(c[(c[((l|0)==3?d:d+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)|0)<(e[b+170>>1]|0|0)?0:h}h=b;g=g+1|0;b=f}b=ww((g<<2)+4|0)|0;d=c[k>>2]|0;c[d+264>>2]=b;c[d+268>>2]=0;d=c[d+180>>2]|0;b=0;do{l=b;b=b+1|0}while((c[d+(l<<2)>>2]|0)!=0);d=ww(b<<2)|0;b=c[k>>2]|0;c[b+272>>2]=d;c[b+276>>2]=0;d=h;b=b+164|0}return d|0}function Dw(){var a=0,b=0,d=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+16|0;n=o+8|0;k=o;m=AA(c[42296]|0)|0;a=(c[(c[42299]|0)+16>>2]|0)+192|0;while(1){b=c[a>>2]|0;if(!b){j=0;break}d=b+16|0;a=c[d>>2]|0;if(!(c[a+292>>2]|0)){CA(m,b);a=c[d>>2]|0}a=a+164|0}while(1){a=DA(m)|0;if(!a)break;i=a+16|0;a=c[i>>2]|0;f=a+232|0;c[f>>2]=0;d=c[a+172>>2]|0;b=0;h=0;while(1){g=c[d+(b<<2)>>2]|0;if(!g){f=0;break}g=(c[(c[(c[((c[g>>2]&3|0)==3?g:g+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)+(e[(c[g+16>>2]|0)+170>>1]|0)|0;g=(h|0)>(g|0)?h:g;c[f>>2]=g;b=b+1|0;h=g}while(1){b=c[(c[a+180>>2]|0)+(f<<2)>>2]|0;if(!b)break;d=b+-48|0;g=(c[(c[((c[b>>2]&3|0)==2?b:d)+40>>2]|0)+16>>2]|0)+292|0;h=c[g>>2]|0;c[g>>2]=h+-1;if((h|0)<2){CA(m,c[((c[b>>2]&3|0)==2?b:d)+40>>2]|0);a=c[i>>2]|0}f=f+1|0}j=j+1|0}a:do if((j|0)!=(c[42296]|0)){$l(1,87590,k)|0;a=(c[(c[42299]|0)+16>>2]|0)+192|0;while(1){b=c[a>>2]|0;if(!b)break a;d=b+16|0;a=c[d>>2]|0;if(c[a+292>>2]|0){k=En(b)|0;a=c[(c[d>>2]|0)+292>>2]|0;c[n>>2]=k;c[n+4>>2]=a;$l(3,87612,n)|0;a=c[d>>2]|0}a=a+164|0}}while(0);BA(m);l=o;return}function Ew(){var b=0,d=0,e=0;b=(c[(c[42299]|0)+16>>2]|0)+192|0;while(1){b=c[b>>2]|0;if(!b)break;e=b+16|0;b=c[e>>2]|0;d=c[b+264>>2]|0;if(d){$I(d);b=c[e>>2]|0}d=c[b+272>>2]|0;if(d){$I(d);b=c[e>>2]|0}a[b+157>>0]=0;b=b+164|0}return}function Fw(){var a=0,b=0,d=0,e=0,f=0;a=(c[(c[42299]|0)+16>>2]|0)+192|0;while(1){a=c[a>>2]|0;if(!a)break;a=c[a+16>>2]|0;c[a+280>>2]=0;a=a+164|0}f=ww(c[42296]<<2)|0;e=0;a=(c[(c[42299]|0)+16>>2]|0)+192|0;while(1){b=c[a>>2]|0;if(!b)break;d=b+16|0;a=c[d>>2]|0;if(!(c[a+280>>2]|0)){c[f+(e<<2)>>2]=Sw(b)|0;b=e+1|0;a=c[d>>2]|0}else b=e;e=b;a=a+164|0}a=Tw(f,e)|0;while(1){if((Uw(a)|0)<=1)break;Yw(a,c[(Xw(Ww(Vw(a)|0)|0)|0)+8>>2]|0)}$I(a);a=0;while(1){if((a|0)>=(e|0))break;$I(c[f+(a<<2)>>2]|0);a=a+1|0}$I(f);if((c[42300]|0)==((c[42296]|0)+-1|0)){Zw();return}else ma(87335,87365,523,87370)}function Gw(){var a=0,b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;i=c[42306]|0;f=c[42300]|0;j=c[42301]|0;k=c[42256]|0;b=0;a=0;g=i;while(1){if((g|0)>=(f|0)){h=8;break}e=c[j+(g<<2)>>2]|0;d=c[(c[e+16>>2]|0)+160>>2]|0;if((d|0)<0){if(!a)a=e;else a=(c[(c[a+16>>2]|0)+160>>2]|0)>(d|0)?e:a;b=b+1|0;if((b|0)>=(k|0))break}e=g+1|0;c[42306]=e;g=e}if((h|0)==8)if((i|0)>0){f=0;while(1){if((f|0)>=(i|0))break;d=c[j+(f<<2)>>2]|0;e=c[(c[d+16>>2]|0)+160>>2]|0;if((e|0)<0){if(!a)a=d;else a=(c[(c[a+16>>2]|0)+160>>2]|0)>(e|0)?d:a;b=b+1|0;if((b|0)>=(k|0))break}f=f+1|0}c[42306]=f}return a|0}function Hw(a){a=a|0;var b=0,d=0;b=c[a>>2]&3;d=c[((b|0)==3?a:a+48|0)+40>>2]|0;a=c[((b|0)==2?a:a+-48|0)+40>>2]|0;b=(c[(c[d+16>>2]|0)+288>>2]|0)<(c[(c[a+16>>2]|0)+288>>2]|0);a=b?d:a;c[42302]=0;c[42303]=2147483647;d=c[a+16>>2]|0;c[42304]=c[d+284>>2];c[42305]=c[d+288>>2];if(b)Rw(a);else Qw(a);return c[42302]|0}function Iw(a,b){a=a|0;b=b|0;var d=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+16|0;n=o;g=c[b>>2]&3;m=b+-48|0;j=b+48|0;k=b+16|0;g=(c[(c[(c[((g|0)==2?b:m)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(c[(c[(c[((g|0)==3?b:j)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(e[(c[k>>2]|0)+170>>1]|0)|0;do if((g|0)>0){d=c[a>>2]&3;h=c[((d|0)==3?a:a+48|0)+40>>2]|0;i=c[h+16>>2]|0;if(((c[i+276>>2]|0)+(c[i+268>>2]|0)|0)==1){Mw(h,g);break}d=c[((d|0)==2?a:a+-48|0)+40>>2]|0;f=c[d+16>>2]|0;if(((c[f+276>>2]|0)+(c[f+268>>2]|0)|0)==1){Mw(d,0-g|0);break}if((c[i+288>>2]|0)<(c[f+288>>2]|0)){Mw(h,g);break}else{Mw(d,0-g|0);break}}while(0);d=a+16|0;f=c[(c[d>>2]|0)+160>>2]|0;g=c[b>>2]&3;g=Nw(c[((g|0)==3?b:j)+40>>2]|0,c[((g|0)==2?b:m)+40>>2]|0,f,1)|0;i=c[b>>2]&3;if((Nw(c[((i|0)==2?b:m)+40>>2]|0,c[((i|0)==3?b:j)+40>>2]|0,f,0)|0)==(g|0)){c[(c[k>>2]|0)+160>>2]=0-f;c[(c[d>>2]|0)+160>>2]=0;Ow(a,b);n=c[g+16>>2]|0;Pw(g,c[n+280>>2]|0,c[n+284>>2]|0)|0;l=o;return}else{$l(1,87296,n)|0;Ua(169028,1)}}function Jw(){var b=0,d=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;Lw();m=ww((c[42298]<<2)+4|0)|0;d=c[42298]|0;b=0;while(1){if((b|0)>(d|0))break;c[m+(b<<2)>>2]=0;b=b+1|0}b=(c[(c[42299]|0)+16>>2]|0)+192|0;d=b;while(1){d=c[d>>2]|0;if(!d)break;d=c[d+16>>2]|0;if(!(a[d+156>>0]|0)){l=m+(c[d+232>>2]<<2)|0;c[l>>2]=(c[l>>2]|0)+1}d=d+164|0}while(1){b=c[b>>2]|0;if(!b)break;l=b+16|0;b=c[l>>2]|0;if(!(a[b+156>>0]|0)){h=c[42298]|0;f=c[b+172>>2]|0;k=0;j=0;d=0;while(1){g=c[f+(d<<2)>>2]|0;if(!g)break;n=c[g+16>>2]|0;i=(c[(c[(c[((c[g>>2]&3|0)==3?g:g+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)+(e[n+170>>1]|0)|0;k=(c[n+156>>2]|0)+k|0;j=(j|0)>(i|0)?j:i;d=d+1|0}g=c[b+180>>2]|0;i=0;d=0;while(1){f=c[g+(d<<2)>>2]|0;if(!f)break;o=c[f+16>>2]|0;n=(c[(c[(c[((c[f>>2]&3|0)==2?f:f+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(e[o+170>>1]|0)|0;i=(c[o+156>>2]|0)+i|0;h=(h|0)<(n|0)?h:n;d=d+1|0}d=(j|0)>0?j:0;if((k|0)==(i|0)){g=d;f=d;while(1){d=f+1|0;if((f|0)>=(h|0))break;g=(c[m+(d<<2)>>2]|0)<(c[m+(g<<2)>>2]|0)?d:g;f=d}o=b+232|0;n=m+(c[o>>2]<<2)|0;c[n>>2]=(c[n>>2]|0)+-1;n=m+(g<<2)|0;c[n>>2]=(c[n>>2]|0)+1;c[o>>2]=g}d=c[b+264>>2]|0;if(d){$I(d);b=c[l>>2]|0}d=c[b+272>>2]|0;if(d){$I(d);b=c[l>>2]|0}a[b+157>>0]=0}b=b+164|0}$I(m);return}function Kw(){var a=0,b=0,d=0,f=0,g=0,h=0;b=0;while(1){if((b|0)>=(c[42300]|0))break;a=c[(c[42301]|0)+(b<<2)>>2]|0;do if(((c[(c[a+16>>2]|0)+160>>2]|0)==0?(d=Hw(a)|0,d|0):0)?(f=c[d>>2]&3,f=(c[(c[(c[((f|0)==2?d:d+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(c[(c[(c[((f|0)==3?d:d+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(e[(c[d+16>>2]|0)+170>>1]|0)|0,(f|0)>=2):0){h=c[a>>2]&3;g=c[((h|0)==3?a:a+48|0)+40>>2]|0;a=c[((h|0)==2?a:a+-48|0)+40>>2]|0;if((c[(c[g+16>>2]|0)+288>>2]|0)<(c[(c[a+16>>2]|0)+288>>2]|0)){Mw(g,f>>>1);break}else{Mw(a,(f|0)/-2|0);break}}while(0);b=b+1|0}Ew();return}function Lw(){var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;h=i;c[h>>2]=0;c[h>>2]=2147483647;c[42298]=-2147483647;b=(c[(c[42299]|0)+16>>2]|0)+192|0;e=b;g=2147483647;f=-2147483647;while(1){d=c[e>>2]|0;if(!d)break;e=c[d+16>>2]|0;if(!(a[e+156>>0]|0)){j=c[e+232>>2]|0;d=(g|0)<(j|0)?g:j;c[h>>2]=d;f=(f|0)>(j|0)?f:j;c[42298]=f}else d=g;e=e+164|0;g=d}if(g|0){while(1){b=c[b>>2]|0;if(!b)break;b=c[b+16>>2]|0;j=b+232|0;c[j>>2]=(c[j>>2]|0)-g;b=b+164|0}c[42298]=f-g;c[h>>2]=0}l=i;return}function Mw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=a+16|0;a=c[f>>2]|0;e=a+232|0;c[e>>2]=(c[e>>2]|0)-b;e=0;while(1){d=c[(c[a+272>>2]|0)+(e<<2)>>2]|0;if(!d){e=0;break}if((d|0)!=(c[a+280>>2]|0)){Mw(c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0,b);a=c[f>>2]|0}e=e+1|0}while(1){d=c[(c[a+264>>2]|0)+(e<<2)>>2]|0;if(!d)break;if((d|0)!=(c[a+280>>2]|0)){Mw(c[((c[d>>2]&3|0)==3?d:d+48|0)+40>>2]|0,b);a=c[f>>2]|0}e=e+1|0}return}function Nw(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;g=(e|0)==0&1;h=0-d|0;f=c[(c[b+16>>2]|0)+288>>2]|0;b=a;while(1){a=c[b+16>>2]|0;if((c[a+284>>2]|0)<=(f|0)?(f|0)<=(c[a+288>>2]|0):0)break;a=c[a+280>>2]|0;i=a+48|0;j=(c[a+16>>2]|0)+160|0;c[j>>2]=(((b|0)==(c[((c[a>>2]&3|0)==3?a:i)+40>>2]|0)?e:g)|0?d:h)+(c[j>>2]|0);j=c[a>>2]&3;i=c[((j|0)==3?a:i)+40>>2]|0;a=c[((j|0)==2?a:a+-48|0)+40>>2]|0;b=(c[(c[i+16>>2]|0)+288>>2]|0)>(c[(c[a+16>>2]|0)+288>>2]|0)?i:a}return b|0}function Ow(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;i=a+16|0;e=(c[i>>2]|0)+164|0;c[(c[b+16>>2]|0)+164>>2]=c[e>>2];c[(c[42301]|0)+(c[e>>2]<<2)>>2]=b;c[(c[i>>2]|0)+164>>2]=-1;i=(c[((c[a>>2]&3|0)==3?a:a+48|0)+40>>2]|0)+16|0;e=c[i>>2]|0;g=e+276|0;f=c[g>>2]|0;j=f+-1|0;c[g>>2]=j;g=e+272|0;h=0;while(1){if((h|0)>=(f|0)){k=3;break}d=c[g>>2]|0;if((c[d+(h<<2)>>2]|0)==(a|0))break;h=h+1|0}if((k|0)==3)d=c[e+272>>2]|0;c[d+(h<<2)>>2]=c[d+(j<<2)>>2];c[(c[(c[i>>2]|0)+272>>2]|0)+(j<<2)>>2]=0;i=(c[((c[a>>2]&3|0)==2?a:a+-48|0)+40>>2]|0)+16|0;e=c[i>>2]|0;g=e+268|0;f=c[g>>2]|0;j=f+-1|0;c[g>>2]=j;g=e+264|0;h=0;while(1){if((h|0)>=(f|0)){k=8;break}d=c[g>>2]|0;if((c[d+(h<<2)>>2]|0)==(a|0))break;h=h+1|0}if((k|0)==8)d=c[e+264>>2]|0;c[d+(h<<2)>>2]=c[d+(j<<2)>>2];c[(c[(c[i>>2]|0)+264>>2]|0)+(j<<2)>>2]=0;k=(c[((c[b>>2]&3|0)==3?b:b+48|0)+40>>2]|0)+16|0;a=c[k>>2]|0;j=c[a+272>>2]|0;a=a+276|0;i=c[a>>2]|0;c[a>>2]=i+1;c[j+(i<<2)>>2]=b;k=c[k>>2]|0;c[(c[k+272>>2]|0)+(c[k+276>>2]<<2)>>2]=0;k=(c[((c[b>>2]&3|0)==2?b:b+-48|0)+40>>2]|0)+16|0;i=c[k>>2]|0;j=c[i+264>>2]|0;i=i+268|0;a=c[i>>2]|0;c[i>>2]=a+1;c[j+(a<<2)>>2]=b;k=c[k>>2]|0;c[(c[k+264>>2]|0)+(c[k+268>>2]<<2)>>2]=0;return}function Pw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=a+16|0;a=c[g>>2]|0;c[a+280>>2]=b;c[a+284>>2]=d;f=0;while(1){e=c[(c[a+272>>2]|0)+(f<<2)>>2]|0;if(!e){f=0;break}if((e|0)!=(b|0)){d=Pw(c[((c[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0,e,d)|0;a=c[g>>2]|0}f=f+1|0}while(1){e=c[(c[a+264>>2]|0)+(f<<2)>>2]|0;if(!e)break;if((e|0)!=(b|0)){d=Pw(c[((c[e>>2]&3|0)==3?e:e+48|0)+40>>2]|0,e,d)|0;a=c[g>>2]|0}f=f+1|0}c[a+288>>2]=d;return d+1|0}function Qw(a){a=a|0;var b=0,d=0,f=0,g=0,h=0,i=0,j=0;i=a+16|0;g=0;while(1){a=c[i>>2]|0;d=c[(c[a+180>>2]|0)+(g<<2)>>2]|0;if(!d){d=0;break}f=c[d+16>>2]|0;if((c[f+164>>2]|0)<0){a=c[d>>2]&3;b=c[(c[((a|0)==2?d:d+-48|0)+40>>2]|0)+16>>2]|0;j=c[b+288>>2]|0;if((c[42304]|0)>(j|0)|(j|0)>(c[42305]|0)?(h=(c[b+232>>2]|0)-(c[(c[(c[((a|0)==3?d:d+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(e[f+170>>1]|0)|0,(h|0)<(c[42303]|0)|(c[42302]|0)==0):0){c[42302]=d;c[42303]=h}}else{b=c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0;if((c[(c[b+16>>2]|0)+288>>2]|0)<(c[a+288>>2]|0))Qw(b)}g=g+1|0}while(1){b=c[(c[a+264>>2]|0)+(d<<2)>>2]|0;if(!((b|0)!=0&(c[42303]|0)>0))break;b=c[((c[b>>2]&3|0)==3?b:b+48|0)+40>>2]|0;if((c[(c[b+16>>2]|0)+288>>2]|0)<(c[a+288>>2]|0)){Qw(b);a=c[i>>2]|0}d=d+1|0}return}function Rw(a){a=a|0;var b=0,d=0,f=0,g=0,h=0,i=0,j=0;i=a+16|0;g=0;while(1){a=c[i>>2]|0;d=c[(c[a+172>>2]|0)+(g<<2)>>2]|0;if(!d){d=0;break}f=c[d+16>>2]|0;if((c[f+164>>2]|0)<0){a=c[d>>2]&3;b=c[(c[((a|0)==3?d:d+48|0)+40>>2]|0)+16>>2]|0;j=c[b+288>>2]|0;if((c[42304]|0)>(j|0)|(j|0)>(c[42305]|0)?(h=(c[(c[(c[((a|0)==2?d:d+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(c[b+232>>2]|0)-(e[f+170>>1]|0)|0,(h|0)<(c[42303]|0)|(c[42302]|0)==0):0){c[42302]=d;c[42303]=h}}else{b=c[((c[d>>2]&3|0)==3?d:d+48|0)+40>>2]|0;if((c[(c[b+16>>2]|0)+288>>2]|0)<(c[a+288>>2]|0))Rw(b)}g=g+1|0}while(1){b=c[(c[a+272>>2]|0)+(d<<2)>>2]|0;if(!((b|0)!=0&(c[42303]|0)>0))break;b=c[((c[b>>2]&3|0)==2?b:b+-48|0)+40>>2]|0;if((c[(c[b+16>>2]|0)+288>>2]|0)<(c[a+288>>2]|0)){Rw(b);a=c[i>>2]|0}d=d+1|0}return}function Sw(a){a=a|0;var b=0;b=ww(16)|0;c[b>>2]=a;c[b+4>>2]=gx(a,b)|0;c[b+12>>2]=b;return b|0}function Tw(a,b){a=a|0;b=b|0;var d=0,e=0;e=ww(8)|0;c[e>>2]=a;c[e+4>>2]=b;d=0;while(1){if((d|0)>=(b|0))break;c[(c[a+(d<<2)>>2]|0)+8>>2]=d;d=d+1|0}d=(b|0)/2|0;while(1){if((d|0)<=-1)break;Yw(e,d);d=d+-1|0}return e|0}function Uw(a){a=a|0;return c[a+4>>2]|0}function Vw(a){a=a|0;var b=0,d=0,e=0,f=0;f=c[a>>2]|0;b=c[f>>2]|0;c[b+8>>2]=-1;d=a+4|0;e=(c[d>>2]|0)+-1|0;c[f>>2]=c[f+(e<<2)>>2];f=c[a>>2]|0;c[(c[f>>2]|0)+8>>2]=0;c[f+(e<<2)>>2]=b;c[d>>2]=e;Yw(a,0);return b|0}function Ww(a){a=a|0;return fx(c[a>>2]|0,0,0)|0}function Xw(a){a=a|0;var b=0,d=0,f=0,g=0,h=0,i=0;b=a+16|0;if((c[(c[b>>2]|0)+164>>2]|0)>-1)ma(87384,87365,463,87398);g=a+48|0;d=bx(c[((c[a>>2]&3|0)==3?a:g)+40>>2]|0)|0;i=a+-48|0;f=bx(c[((c[a>>2]&3|0)==2?a:i)+40>>2]|0)|0;h=c[a>>2]&3;b=(c[(c[(c[((h|0)==2?a:i)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(c[(c[(c[((h|0)==3?a:g)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(e[(c[b>>2]|0)+170>>1]|0)|0;if((c[d+8>>2]|0)==-1)cx(c[d>>2]|0,0,b);else cx(c[f>>2]|0,0,0-b|0);dx(a);return ex(d,f)|0}function Yw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=c[a>>2]|0;g=c[a+4>>2]|0;while(1){a=b<<1;f=a+2|0;a=a|1;if(!((a|0)<(g|0)?(c[(c[h+(a<<2)>>2]|0)+4>>2]|0)<(c[(c[h+(b<<2)>>2]|0)+4>>2]|0):0))a=b;if((f|0)>=(g|0))break;d=h+(f<<2)|0;e=c[d>>2]|0;if((f|0)==(b|0)?1:(c[e+4>>2]|0)>=(c[(c[h+(a<<2)>>2]|0)+4>>2]|0))break;i=h+(b<<2)|0;a=c[i>>2]|0;c[i>>2]=e;c[d>>2]=a;c[(c[i>>2]|0)+8>>2]=b;c[a+8>>2]=f;b=f}return}function Zw(){Pw(c[(c[(c[42299]|0)+16>>2]|0)+192>>2]|0,0,1)|0;_w(c[(c[(c[42299]|0)+16>>2]|0)+192>>2]|0,0);return}function _w(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=a+16|0;d=0;while(1){a=c[f>>2]|0;e=c[(c[a+272>>2]|0)+(d<<2)>>2]|0;if(!e){e=0;break}if((e|0)!=(b|0))_w(c[((c[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0,e);d=d+1|0}while(1){d=c[(c[a+264>>2]|0)+(e<<2)>>2]|0;if(!d)break;if((d|0)!=(b|0)){_w(c[((c[d>>2]&3|0)==3?d:d+48|0)+40>>2]|0,d);a=c[f>>2]|0}e=e+1|0}if(b|0)$w(b);return}function $w(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;b=c[a>>2]&3;d=c[((b|0)==3?a:a+48|0)+40>>2]|0;e=c[d+16>>2]|0;if((c[e+280>>2]|0)==(a|0))i=1;else{e=c[((b|0)==2?a:a+-48|0)+40>>2]|0;i=-1;d=e;e=c[e+16>>2]|0}g=c[e+180>>2]|0;b=0;f=0;while(1){h=c[g+(f<<2)>>2]|0;if(!h)break;b=(ax(h,d,i)|0)+b|0;f=f+1|0}g=c[e+172>>2]|0;e=0;while(1){f=c[g+(e<<2)>>2]|0;if(!f)break;b=(ax(f,d,i)|0)+b|0;e=e+1|0}c[(c[a+16>>2]|0)+160>>2]=b;return}function ax(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=c[a>>2]&3;i=(h|0)==3?a:a+48|0;e=c[i+40>>2]|0;if((e|0)==(b|0))e=c[((h|0)==2?a:a+-48|0)+40>>2]|0;g=c[b+16>>2]|0;f=c[(c[e+16>>2]|0)+288>>2]|0;if((c[g+284>>2]|0)<=(f|0)?(f|0)<=(c[g+288>>2]|0):0){f=c[a+16>>2]|0;if((c[f+164>>2]|0)>-1)e=c[f+160>>2]|0;else e=0;g=1;e=e-(c[f+156>>2]|0)|0}else{g=0;e=c[(c[a+16>>2]|0)+156>>2]|0}i=(c[((d|0)>0?((h|0)==2?a:a+-48|0):i)+40>>2]|0)==(b|0)?1:-1;return (((g?i:0-i|0)|0)<0?0-e|0:e)|0}function bx(a){a=a|0;var b=0,d=0;a=c[(c[a+16>>2]|0)+280>>2]|0;while(1){b=a+12|0;d=c[b>>2]|0;if(!((d|0)!=(a|0)&(d|0)!=0))break;a=c[d+12>>2]|0;if(!a){a=d;continue}c[b>>2]=a}return a|0}function cx(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=a+16|0;e=c[h>>2]|0;g=e+232|0;c[g>>2]=(c[g>>2]|0)+d;g=0;while(1){f=c[(c[e+264>>2]|0)+(g<<2)>>2]|0;if(!f){g=0;break}f=c[((c[f>>2]&3|0)==3?f:f+48|0)+40>>2]|0;if((f|0)!=(b|0)){cx(f,a,d);e=c[h>>2]|0}g=g+1|0}while(1){f=c[(c[e+272>>2]|0)+(g<<2)>>2]|0;if(!f)break;f=c[((c[f>>2]&3|0)==2?f:f+-48|0)+40>>2]|0;if((f|0)!=(b|0)){cx(f,a,d);e=c[h>>2]|0}g=g+1|0}return}function dx(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=l;l=l+32|0;d=(c[b+16>>2]|0)+164|0;if((c[d>>2]|0)>-1){$l(1,87487,h)|0;Ua(169028,1)}g=c[42300]|0;c[d>>2]=g;d=c[42301]|0;c[42300]=g+1;c[d+(g<<2)>>2]=b;d=c[b>>2]|0;g=b+48|0;e=c[((d&3|0)==3?b:g)+40>>2]|0;if(!(a[(c[e+16>>2]|0)+157>>0]|0)){f=c[42307]|0;d=c[42308]|0;c[42308]=d+1;c[f+(d<<2)>>2]=e;d=c[b>>2]|0}f=b+-48|0;e=c[((d&3|0)==2?b:f)+40>>2]|0;if(!(a[(c[e+16>>2]|0)+157>>0]|0)){i=c[42307]|0;d=c[42308]|0;c[42308]=d+1;c[i+(d<<2)>>2]=e;d=c[b>>2]|0}i=(c[((d&3|0)==3?b:g)+40>>2]|0)+16|0;d=c[i>>2]|0;a[d+157>>0]=1;e=c[d+272>>2]|0;d=d+276|0;g=c[d>>2]|0;c[d>>2]=g+1;c[e+(g<<2)>>2]=b;g=c[i>>2]|0;c[(c[g+272>>2]|0)+(c[g+276>>2]<<2)>>2]=0;i=c[i>>2]|0;if(!(c[(c[i+180>>2]|0)+((c[i+276>>2]|0)+-1<<2)>>2]|0)){$l(1,87521,h+8|0)|0;Ua(169028,1)}i=(c[((c[b>>2]&3|0)==2?b:f)+40>>2]|0)+16|0;e=c[i>>2]|0;a[e+157>>0]=1;f=c[e+264>>2]|0;e=e+268|0;g=c[e>>2]|0;c[e>>2]=g+1;c[f+(g<<2)>>2]=b;b=c[i>>2]|0;c[(c[b+264>>2]|0)+(c[b+268>>2]<<2)>>2]=0;i=c[i>>2]|0;if(!(c[(c[i+172>>2]|0)+((c[i+268>>2]|0)+-1<<2)>>2]|0)){$l(1,87556,h+16|0)|0;Ua(169028,1)}else{l=h;return}}function ex(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;while(1){g=a+12|0;d=c[g>>2]|0;if((d|0)==0|(d|0)==(a|0))break;else a=d}while(1){f=b+12|0;d=c[f>>2]|0;if((d|0)==0|(d|0)==(b|0))break;else b=d}if((a|0)!=(b|0)){e=c[a+8>>2]|0;d=c[b+8>>2]|0;do if((e|0)>-1)if((d|0)==-1)h=a;else j=10;else if((d|0)>-1)if((e|0)==-1){h=b;break}else{j=10;break}else ma(87410,87365,327,87457);while(0);if((j|0)==10)h=(c[b+4>>2]|0)<(c[a+4>>2]|0)?a:b;c[f>>2]=h;c[g>>2]=h;c[h+4>>2]=(c[b+4>>2]|0)+(c[a+4>>2]|0);if((c[h+8>>2]|0)>-1)i=h;else ma(87468,87365,335,87457)}else i=a;return i|0}function fx(a,b,d){a=a|0;b=b|0;d=d|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;l=bx(a)|0;if(d){k=c[d>>2]&3;if(((c[(c[(c[((k|0)==2?d:d+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(c[(c[(c[((k|0)==3?d:d+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)|0)!=(e[(c[d+16>>2]|0)+170>>1]|0|0))f=3}else{d=0;f=3}a:do if((f|0)==3){k=a+16|0;j=0;while(1){f=c[k>>2]|0;i=c[(c[f+180>>2]|0)+(j<<2)>>2]|0;if(!i){j=0;break}f=i+16|0;g=i+-48|0;h=c[((c[i>>2]&3|0)==2?i:g)+40>>2]|0;do if((c[(c[f>>2]|0)+164>>2]|0)>-1){if((h|0)!=(b|0))d=fx(h,a,d)|0}else if((bx(h)|0)!=(l|0)){if(d|0?(m=c[i>>2]&3,h=c[d>>2]&3,((c[(c[(c[((m|0)==2?i:g)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(c[(c[(c[((m|0)==3?i:i+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(e[(c[f>>2]|0)+170>>1]|0)|0)>=((c[(c[(c[((h|0)==2?d:d+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(c[(c[(c[((h|0)==3?d:d+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(e[(c[d+16>>2]|0)+170>>1]|0)|0)):0)break;d=i}while(0);j=j+1|0}while(1){f=c[(c[f+172>>2]|0)+(j<<2)>>2]|0;if(!f)break a;g=f+16|0;h=f+48|0;i=c[((c[f>>2]&3|0)==3?f:h)+40>>2]|0;do if((c[(c[g>>2]|0)+164>>2]|0)>-1){if((i|0)!=(b|0))d=fx(i,a,d)|0}else if((bx(i)|0)!=(l|0)){if(d|0?(i=c[f>>2]&3,m=c[d>>2]&3,((c[(c[(c[((i|0)==2?f:f+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(c[(c[(c[((i|0)==3?f:h)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(e[(c[g>>2]|0)+170>>1]|0)|0)>=((c[(c[(c[((m|0)==2?d:d+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(c[(c[(c[((m|0)==3?d:d+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(e[(c[d+16>>2]|0)+170>>1]|0)|0)):0)break;d=f}while(0);j=j+1|0;f=c[k>>2]|0}}while(0);return d|0}function gx(a,b){a=a|0;b=b|0;var d=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;l=a+16|0;d=c[l>>2]|0;c[d+280>>2]=b;a=1;h=0;while(1){g=c[(c[d+172>>2]|0)+(h<<2)>>2]|0;if(!g){h=0;break}f=c[g+16>>2]|0;if(((c[f+164>>2]|0)<=-1?(i=c[g>>2]&3,j=g+48|0,k=c[(c[((i|0)==3?g:j)+40>>2]|0)+16>>2]|0,(c[k+280>>2]|0)==0):0)?((c[(c[(c[((i|0)==2?g:g+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(c[k+232>>2]|0)|0)==(e[f+170>>1]|0|0):0){dx(g);a=(gx(c[((c[g>>2]&3|0)==3?g:j)+40>>2]|0,b)|0)+a|0;d=c[l>>2]|0}h=h+1|0}while(1){f=c[(c[d+180>>2]|0)+(h<<2)>>2]|0;if(!f)break;g=c[f+16>>2]|0;if(((c[g+164>>2]|0)<=-1?(m=c[f>>2]&3,n=f+-48|0,o=c[(c[((m|0)==2?f:n)+40>>2]|0)+16>>2]|0,(c[o+280>>2]|0)==0):0)?((c[o+232>>2]|0)-(c[(c[(c[((m|0)==3?f:f+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)|0)==(e[g+170>>1]|0|0):0){dx(f);a=(gx(c[((c[f>>2]&3|0)==2?f:n)+40>>2]|0,b)|0)+a|0;d=c[l>>2]|0}h=h+1|0}return a|0}function hx(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=Jm(a,87620)|0;if(!d)d=30;else d=sM(d)|0;return Aw(a,b,c,d)|0}function ix(a){a=+a;return +((c[42184]|0)==0?a:+h[20895]-a)}function jx(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0.0,u=0;r=l;l=l+16|0;q=r;c[42309]=c[(c[(c[d+64>>2]|0)+8>>2]|0)+4>>2];kx(d);i=c[d+16>>2]|0;t=+h[i+32>>3];s=+h[i+40>>3];lx(e,87631,+h[b+352>>3]);lx(e,87638,t*.013888888888888888);lx(e,87638,s*.013888888888888888);mx(e);i=eo(d)|0;while(1){if(!i)break;g=i+16|0;if(!(a[(c[g>>2]|0)+118>>0]|0)){nx(e,87640,Xp(En(i)|0)|0);p=(c[g>>2]|0)+16|0;c[q>>2]=c[p>>2];c[q+4>>2]=c[p+4>>2];c[q+8>>2]=c[p+8>>2];c[q+12>>2]=c[p+12>>2];ox(e,q);if(!(a[(c[(c[g>>2]|0)+104>>2]|0)+82>>0]|0)){b=so(i)|0;b=px(b,c[c[(c[g>>2]|0)+104>>2]>>2]|0)|0}else b=Xp(Km(i,c[42199]|0)|0)|0;lx(e,87638,+h[(c[g>>2]|0)+32>>3]);lx(e,87638,+h[(c[g>>2]|0)+40>>3]);nx(e,87638,b);nx(e,87638,HA(i,c[42202]|0,95889)|0);nx(e,87638,c[c[(c[g>>2]|0)+8>>2]>>2]|0);nx(e,87638,HA(i,c[42193]|0,122106)|0);b=HA(i,c[42194]|0,174185)|0;if(!(a[b>>0]|0))b=HA(i,c[42193]|0,119592)|0;nx(e,87638,b);mx(e)}i=fo(d,i)|0}o=f<<24>>24==0;n=eo(d)|0;while(1){if(!n)break;m=Qm(d,n)|0;while(1){if(!m)break;if(o){f=174185;j=174185}else{j=Jm(m,96242)|0;f=Jm(m,96251)|0;f=f|0?f:174185;j=j|0?j:174185}p=m+16|0;b=c[p>>2]|0;k=c[b+8>>2]|0;a:do if(k){i=c[k+4>>2]|0;b=0;g=0;while(1){if((b|0)>=(i|0))break;u=(c[(c[k>>2]|0)+(b*48|0)+4>>2]|0)+g|0;b=b+1|0;g=u}nx(e,0,96237);qx(e,c[((c[m>>2]&3|0)==3?m:m+48|0)+40>>2]|0,j);qx(e,c[((c[m>>2]&3|0)==2?m:m+-48|0)+40>>2]|0,f);rx(e,g);f=0;while(1){b=c[p>>2]|0;g=c[b+8>>2]|0;if((f|0)>=(c[g+4>>2]|0))break a;i=c[g>>2]|0;g=c[i+(f*48|0)>>2]|0;i=c[i+(f*48|0)+4>>2]|0;b=0;while(1){if((b|0)>=(i|0))break;u=g+(b<<4)|0;c[q>>2]=c[u>>2];c[q+4>>2]=c[u+4>>2];c[q+8>>2]=c[u+8>>2];c[q+12>>2]=c[u+12>>2];ox(e,q);b=b+1|0}f=f+1|0}}while(0);if(c[b+96>>2]|0){u=so(c[((c[m>>2]&3|0)==3?m:m+48|0)+40>>2]|0)|0;nx(e,87638,px(u,c[c[(c[p>>2]|0)+96>>2]>>2]|0)|0);u=(c[(c[p>>2]|0)+96>>2]|0)+56|0;c[q>>2]=c[u>>2];c[q+4>>2]=c[u+4>>2];c[q+8>>2]=c[u+8>>2];c[q+12>>2]=c[u+12>>2];ox(e,q)}nx(e,87638,HA(m,c[42230]|0,95889)|0);nx(e,87638,HA(m,c[42221]|0,122106)|0);mx(e);m=Sm(d,m)|0}n=fo(d,n)|0}sx(87646,e);l=r;return}function kx(a){a=a|0;var b=0.0;if(c[42184]|0){a=c[a+16>>2]|0;b=+h[a+24>>3]+ +h[a+40>>3];h[20895]=b;h[20896]=b*.013888888888888888}return}function lx(a,b,c){a=a|0;b=b|0;c=+c;var d=0,e=0,f=0;f=l;l=l+1040|0;e=f;d=f+8|0;if(b|0)sx(b,a);h[e>>3]=c;qL(d,87652,e)|0;sx(d,a);l=f;return}function mx(b){b=b|0;a[174081]=10;ab[c[42309]&63](b,174081)|0;return}function nx(a,b,c){a=a|0;b=b|0;c=c|0;if(b|0)sx(b,a);sx(c,a);return}function ox(a,b){a=a|0;b=b|0;var d=0.0;lx(a,87638,+h[b>>3]*.013888888888888888);if(!(c[42184]|0))d=+h[b+8>>3];else d=+h[20895]-+h[b+8>>3];lx(a,87638,d*.013888888888888888);return}function px(a,b){a=a|0;b=b|0;var c=0;c=ap(a,b)|0;b=Xp(c)|0;cp(a,c)|0;return b|0}function qx(b,d,e){b=b|0;d=d|0;e=e|0;var f=0;if(!(a[(c[d+16>>2]|0)+118>>0]|0))d=Xp(En(d)|0)|0;else{f=so(d)|0;d=px(f,(XJ(En(d)|0,58)|0)+1|0)|0}nx(b,87638,d);if(e|0?a[e>>0]|0:0)nx(b,93017,Xp(e)|0);return}function rx(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+1040|0;f=d;e=d+8|0;sx(87638,a);c[f>>2]=b;qL(e,122187,f)|0;sx(e,a);l=d;return}function sx(a,b){a=a|0;b=b|0;ab[c[42309]&63](b,a)|0;return} +function FB(a,b){a=a|0;b=b|0;if((+h[a+16>>3]>=+h[b>>3]?+h[b+16>>3]>=+h[a>>3]:0)?+h[a+24>>3]>=+h[b+8>>3]:0)a=+h[b+24>>3]>=+h[a+8>>3]&1;else a=0;return a|0}function GB(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+96|0;k=n+64|0;j=n+48|0;i=n+32|0;f=n+16|0;g=n;m=a+4|0;d=c[m>>2]|0;if(!d)ma(94759,92694,1637,94767);e=c[a>>2]|0;c[g>>2]=c[e>>2];c[g+4>>2]=c[e+4>>2];c[g+8>>2]=c[e+8>>2];c[g+12>>2]=c[e+12>>2];e=1;while(1){if((e|0)>=(d|0)){h=7;break}d=(c[a>>2]|0)+(e<<4)|0;c[f>>2]=c[d>>2];c[f+4>>2]=c[d+4>>2];c[f+8>>2]=c[d+8>>2];c[f+12>>2]=c[d+12>>2];c[i>>2]=c[d>>2];c[i+4>>2]=c[d+4>>2];c[i+8>>2]=c[d+8>>2];c[i+12>>2]=c[d+12>>2];c[j>>2]=c[g>>2];c[j+4>>2]=c[g+4>>2];c[j+8>>2]=c[g+8>>2];c[j+12>>2]=c[g+12>>2];c[k>>2]=c[b>>2];c[k+4>>2]=c[b+4>>2];c[k+8>>2]=c[b+8>>2];c[k+12>>2]=c[b+12>>2];c[k+16>>2]=c[b+16>>2];c[k+20>>2]=c[b+20>>2];c[k+24>>2]=c[b+24>>2];c[k+28>>2]=c[b+28>>2];if((Zv(i,j,k)|0)!=-1){d=1;break};c[g>>2]=c[f>>2];c[g+4>>2]=c[f+4>>2];c[g+8>>2]=c[f+8>>2];c[g+12>>2]=c[f+12>>2];e=e+1|0;d=c[m>>2]|0}do if((h|0)==7){d=c[a+8>>2]|0;if(d|0?(g=a+16|0,h=c[a>>2]|0,c[i>>2]=c[g>>2],c[i+4>>2]=c[g+4>>2],c[i+8>>2]=c[g+8>>2],c[i+12>>2]=c[g+12>>2],c[j>>2]=c[h>>2],c[j+4>>2]=c[h+4>>2],c[j+8>>2]=c[h+8>>2],c[j+12>>2]=c[h+12>>2],c[k>>2]=c[b>>2],c[k+4>>2]=c[b+4>>2],c[k+8>>2]=c[b+8>>2],c[k+12>>2]=c[b+12>>2],c[k+16>>2]=c[b+16>>2],c[k+20>>2]=c[b+20>>2],c[k+24>>2]=c[b+24>>2],c[k+28>>2]=c[b+28>>2],(HB(i,j,d,k)|0)<<24>>24):0){d=1;break}d=c[a+12>>2]|0;if(d|0?(h=a+32|0,m=(c[a>>2]|0)+((c[m>>2]|0)+-1<<4)|0,c[i>>2]=c[h>>2],c[i+4>>2]=c[h+4>>2],c[i+8>>2]=c[h+8>>2],c[i+12>>2]=c[h+12>>2],c[j>>2]=c[m>>2],c[j+4>>2]=c[m+4>>2],c[j+8>>2]=c[m+8>>2],c[j+12>>2]=c[m+12>>2],c[k>>2]=c[b>>2],c[k+4>>2]=c[b+4>>2],c[k+8>>2]=c[b+8>>2],c[k+12>>2]=c[b+12>>2],c[k+16>>2]=c[b+16>>2],c[k+20>>2]=c[b+20>>2],c[k+24>>2]=c[b+24>>2],c[k+28>>2]=c[b+28>>2],(HB(i,j,d,k)|0)<<24>>24):0){d=1;break}d=0}while(0);l=n;return d|0}function HB(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0.0;m=l;l=l+160|0;g=m+144|0;f=m+128|0;n=m+96|0;i=m+64|0;j=m+32|0;k=m;o=+h[e+16>>3];c[f>>2]=c[a>>2];c[f+4>>2]=c[a+4>>2];c[f+8>>2]=c[a+8>>2];c[f+12>>2]=c[a+12>>2];c[g>>2]=c[b>>2];c[g+4>>2]=c[b+4>>2];c[g+8>>2]=c[b+8>>2];c[g+12>>2]=c[b+12>>2];St(n,f,g,1.0,d);if(((o>=+h[n>>3]?(c[f>>2]=c[a>>2],c[f+4>>2]=c[a+4>>2],c[f+8>>2]=c[a+8>>2],c[f+12>>2]=c[a+12>>2],c[g>>2]=c[b>>2],c[g+4>>2]=c[b+4>>2],c[g+8>>2]=c[b+8>>2],c[g+12>>2]=c[b+12>>2],St(i,f,g,1.0,d),+h[i+16>>3]>=+h[e>>3]):0)?(o=+h[e+24>>3],c[f>>2]=c[a>>2],c[f+4>>2]=c[a+4>>2],c[f+8>>2]=c[a+8>>2],c[f+12>>2]=c[a+12>>2],c[g>>2]=c[b>>2],c[g+4>>2]=c[b+4>>2],c[g+8>>2]=c[b+8>>2],c[g+12>>2]=c[b+12>>2],St(j,f,g,1.0,d),o>=+h[j+8>>3]):0)?(c[f>>2]=c[a>>2],c[f+4>>2]=c[a+4>>2],c[f+8>>2]=c[a+8>>2],c[f+12>>2]=c[a+12>>2],c[g>>2]=c[b>>2],c[g+4>>2]=c[b+4>>2],c[g+8>>2]=c[b+8>>2],c[g+12>>2]=c[b+12>>2],St(k,f,g,1.0,d),+h[k+24>>3]>=+h[e+8>>3]):0)f=1;else f=0;l=m;return f|0}function IB(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;f=g;a:do if((b|0)!=0?(e=a[b>>0]|0,e<<24>>24!=0):0){do switch(e<<24>>24|0){case 48:{d=2;break a}case 57:case 56:case 55:case 54:case 53:case 52:case 51:case 50:case 49:{d=10;break a}case 67:case 99:{e=b+1|0;if(!(jK(e,94782)|0)){d=4;break a}if(!(jK(e,94788)|0)){d=12;break a}break}case 70:case 102:{if(!(jK(b+1|0,94796)|0)){d=2;break a}break}case 76:case 108:{if(!(jK(b+1|0,94801)|0)){d=2;break a}break}case 78:case 110:{e=b+1|0;if(!(jK(e,94805)|0)){d=0;break a}if(!(jK(e,94809)|0)){d=2;break a}break}case 79:case 111:{if(!(jK(b+1|0,94811)|0)){d=8;break a}break}case 80:case 112:{if(!(jK(b+1|0,94816)|0)){d=6;break a}break}case 83:case 115:{if(!(jK(b+1|0,94824)|0)){d=10;break a}break}case 84:case 116:{if(!(jK(b+1|0,94830)|0)){d=10;break a}break}case 89:case 121:{if(!(jK(b+1|0,94834)|0)){d=10;break a}break}default:{}}while(0);c[f>>2]=b;$l(0,94837,f)|0}while(0);l=g;return d|0}function JB(d,f){d=d|0;f=f|0;var g=0;g=Jm(d,94878)|0;if(g)if(!(a[g>>0]|0))f=0;else f=IB(g,f)|0;d=(c[d+16>>2]|0)+136|0;b[d>>1]=f|e[d>>1];return}function KB(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;var f=0.0,g=0.0,i=0.0,j=0.0,k=0.0,m=0,n=0,o=0.0,p=0,q=0.0,r=0,s=0.0,t=0,u=0,v=0,w=0;v=l;l=l+32|0;p=v+16|0;r=v;t=e&1;u=e&2;a:do if((c|0)==2){s=+h[a+16>>3];f=+h[a>>3];j=+h[a+24>>3];i=+h[a+8>>3];f=f-(s-f);h[p>>3]=f;h[r>>3]=s;i=i-(j-i);h[p+8>>3]=i;h[r+8>>3]=j}else{g=+h[a>>3];h[r>>3]=g;h[p>>3]=g;j=+h[a+8>>3];m=r+8|0;h[m>>3]=j;n=p+8|0;h[n>>3]=j;e=0;f=g;i=j;while(1){if((e|0)>=(c|0)){s=g;break a}w=a+(e<<4)|0;q=+h[w>>3];k=+h[(q>3];h[p>>3]=k;s=+h[a+(e<<4)+8>>3];o=+h[(s>3];h[n>>3]=o;q=+h[(q>g?w:r)>>3];h[r>>3]=q;s=+h[(s>j?w:r)+8>>3];h[m>>3]=s;e=e+1|0;f=k;i=o;g=q;j=s}}while(0);g=(s-f)*.5;q=g+f;o=(j-i)*.5;k=o+i;if(!t){f=j-k;j=d;i=+F(+j);j=+E(+j);if(!u){g=i*f-k;f=-k-o*i}else{f=i*f;g=k-f;f=f+k}h[b+8>>3]=g;h[b+24>>3]=f;d=j*(s-q);h[b>>3]=q-d;h[b+16>>3]=d+q}else{d=+C(+(o*o+g*g));h[b+8>>3]=u|0?k:-k;h[b>>3]=q;h[b+16>>3]=d*.25;h[b+24>>3]=d}l=v;return}function LB(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0;e=a+16|0;f=c[e>>2]|0;if(!(b<<24>>24)){d=+h[f+32>>3]*36.0;h[f+88>>3]=d;a=f+40|0}else{d=+h[f+40>>3]*36.0;h[f+88>>3]=d;a=f+32|0}h[f+96>>3]=d;h[(c[e>>2]|0)+80>>3]=+h[a>>3]*72.0;return}function MB(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0;y=l;l=l+16|0;j=y+8|0;x=4;w=_I(40)|0;c[w>>2]=0;s=y;o=0;e=_(22,b|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=TN(c[f>>2]|0,w|0,x|0)|0;if(!g)Ua(f|0,p|0);z=p}else g=-1;a:do if((g|0)!=1){o=0;v=_(23,e<<3|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){e=TN(c[f>>2]|0,w|0,x|0)|0;if(!e)Ua(f|0,p|0);z=p}else e=-1;if((e|0)!=1){if(!(a[174080]|0))t=0;else{o=0;e=Z(2)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=TN(c[f>>2]|0,w|0,x|0)|0;if(!g)Ua(f|0,p|0);z=p}else g=-1;if((g|0)==1){n=0;k=0;m=0;j=0;i=0;d=v;h=v;e=z;g=0;u=74;break}t=e}o=0;e=$(31,b|0,94886)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=TN(c[f>>2]|0,w|0,x|0)|0;if(!g)Ua(f|0,p|0);z=p}else g=-1;if((g|0)!=1){c[42367]=0;b:do if(e|0?(i=a[e>>0]|0,i<<24>>24):0){h=e;f=i;g=0;while(1){i=h+1|0;if(!(f<<24>>24))break b;switch(f<<24>>24|0){case 99:{e=8;u=16;break}case 105:{e=18;u=16;break}case 109:{e=1;u=16;break}case 114:{e=4;u=16;break}case 115:{e=2;u=16;break}default:e=g}if((u|0)==16){u=0;e=g|e;c[42367]=e}h=i;f=a[i>>0]|0;g=e}}while(0);if(d|0){o=0;aa(11,0,94890,j|0)|0;e=o;o=0;if((e|0)!=0&(p|0)!=0){f=TN(c[e>>2]|0,w|0,x|0)|0;if(!f)Ua(e|0,p|0);z=p}else f=-1;if((f|0)==1){n=0;k=t;m=0;j=0;i=0;d=v;h=v;e=z;g=0;u=74;break}}o=0;r=$(32,b|0,0)|0;e=o;o=0;if((e|0)!=0&(p|0)!=0){f=TN(c[e>>2]|0,w|0,x|0)|0;if(!f)Ua(e|0,p|0);z=p}else f=-1;if((f|0)!=1){m=c[r+16>>2]|0;if(c[42367]&2|0){o=0;ga(25,c[13918]|0,m|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=TN(c[e>>2]|0,w|0,x|0)|0;if(!f)Ua(e|0,p|0);z=p}else f=-1;if((f|0)==1){n=0;k=t;m=0;j=0;i=r;d=v;h=v;e=z;g=0;u=74;break}}o=0;g=_(24,b|0)|0;e=o;o=0;if((e|0)!=0&(p|0)!=0){f=TN(c[e>>2]|0,w|0,x|0)|0;if(!f)Ua(e|0,p|0);z=p}else f=-1;if((f|0)!=1){n=0;while(1){if(!g)break;o=0;e=$(33,b|0,g|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){h=TN(c[f>>2]|0,w|0,x|0)|0;if(!h)Ua(f|0,p|0);z=p}else h=-1;if((h|0)==1){k=t;m=0;j=0;i=r;d=v;h=v;e=z;g=0;u=74;break a}i=n;while(1){if(!e)break;if(!((c[42179]|0)==2?(c[(c[e+16>>2]|0)+8>>2]|0)!=0:0))u=32;c:do if((u|0)==32){u=0;do if(a[174080]|0){k=c[e>>2]&3;j=(c[c[((k|0)==3?e:e+48|0)+40>>2]>>2]|0)>>>4;k=(c[c[((k|0)==2?e:e+-48|0)+40>>2]>>2]|0)>>>4;if(j>>>0>k>>>0){o=0;f=aa(15,t|0,k|0,j|0)|0;h=o;o=0;if((h|0)!=0&(p|0)!=0){d=TN(c[h>>2]|0,w|0,x|0)|0;if(!d)Ua(h|0,p|0);z=p}else d=-1;if((d|0)==1){k=t;m=0;j=0;i=r;d=v;h=v;e=z;g=0;u=74;break a}if(f|0)break c;o=0;ha(59,t|0,k|0,j|0);f=o;o=0;if((f|0)!=0&(p|0)!=0){h=TN(c[f>>2]|0,w|0,x|0)|0;if(!h)Ua(f|0,p|0);z=p}else h=-1;if((h|0)==1){k=t;m=0;j=0;i=r;d=v;h=v;e=z;g=0;u=74;break a}break}else{o=0;f=aa(15,t|0,j|0,k|0)|0;h=o;o=0;if((h|0)!=0&(p|0)!=0){d=TN(c[h>>2]|0,w|0,x|0)|0;if(!d)Ua(h|0,p|0);z=p}else d=-1;if((d|0)==1){k=t;m=0;j=0;i=r;d=v;h=v;e=z;g=0;u=74;break a}if(f|0)break c;o=0;ha(59,t|0,j|0,k|0);f=o;o=0;if((f|0)!=0&(p|0)!=0){h=TN(c[f>>2]|0,w|0,x|0)|0;if(!h)Ua(f|0,p|0);z=p}else h=-1;if((h|0)==1){k=t;m=0;j=0;i=r;d=v;h=v;e=z;g=0;u=74;break a}break}}while(0);c[v+(i<<3)+4>>2]=e;o=0;d=_(25,e|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){h=TN(c[f>>2]|0,w|0,x|0)|0;if(!h)Ua(f|0,p|0);z=p}else h=-1;if((h|0)==1){k=t;m=0;j=0;i=r;d=v;h=v;e=z;g=0;u=74;break a}c[v+(i<<3)>>2]=d;i=i+1|0}while(0);o=0;e=$(34,b|0,e|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){h=TN(c[f>>2]|0,w|0,x|0)|0;if(!h)Ua(f|0,p|0);z=p}else h=-1;if((h|0)==1){k=t;m=0;j=0;i=r;d=v;h=v;e=z;g=0;u=74;break a}}o=0;g=$(35,b|0,g|0)|0;e=o;o=0;if((e|0)!=0&(p|0)!=0){f=TN(c[e>>2]|0,w|0,x|0)|0;if(!f)Ua(e|0,p|0);z=p}else f=-1;if((f|0)==1){k=t;m=0;j=0;i=r;d=v;h=v;e=z;g=0;u=74;break a}n=i}o=0;j=_(26,n<<3|0)|0;e=o;o=0;if((e|0)!=0&(p|0)!=0){f=TN(c[e>>2]|0,w|0,x|0)|0;if(!f)Ua(e|0,p|0);z=p}else f=-1;if((f|0)!=1){o=0;ja(25,v|0,n|0,8,36);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=TN(c[e>>2]|0,w|0,x|0)|0;if(!f)Ua(e|0,p|0);z=p}else f=-1;if((f|0)!=1){g=c[m>>2]|0;o=0;fa(87,g+2|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=TN(c[e>>2]|0,w|0,x|0)|0;if(!f)Ua(e|0,p|0);z=p}else f=-1;if((f|0)!=1){i=c[m+16>>2]|0;d=i+(g*40|0)|0;i=i+((g+1|0)*40|0)|0;q=c[13918]|0;h=0;while(1){if((h|0)>=(n|0))break;if((h|0)>0?c[42367]&16|0:0){o=0;ga(25,q|0,m|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=TN(c[e>>2]|0,w|0,x|0)|0;if(!f)Ua(e|0,p|0);z=p}else f=-1;if((f|0)==1){k=t;m=j;i=r;d=v;h=v;e=z;g=q;u=74;break a}}e=c[v+(h<<3)+4>>2]|0;k=c[e>>2]&3;g=c[(c[(c[((k|0)==3?e:e+48|0)+40>>2]|0)+16>>2]|0)+112>>2]|0;e=c[(c[(c[((k|0)==2?e:e+-48|0)+40>>2]|0)+16>>2]|0)+112>>2]|0;if((g|0)==(e|0)){o=0;ja(26,m|0,g|0,i|0,d|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=TN(c[e>>2]|0,w|0,x|0)|0;if(!f)Ua(e|0,p|0);z=p}else f=-1;if((f|0)==1){k=t;m=j;i=r;d=v;h=v;e=z;g=q;u=74;break a}}else{o=0;ha(60,m|0,e|0,i|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=TN(c[e>>2]|0,w|0,x|0)|0;if(!f)Ua(e|0,p|0);z=p}else f=-1;if((f|0)==1){k=t;m=j;i=r;d=v;h=v;e=z;g=q;u=74;break a}o=0;ha(60,m|0,g|0,d|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=TN(c[e>>2]|0,w|0,x|0)|0;if(!f)Ua(e|0,p|0);z=p}else f=-1;if((f|0)==1){k=t;m=j;i=r;d=v;h=v;e=z;g=q;u=74;break a}}o=0;e=aa(16,m|0,i|0,d|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=TN(c[f>>2]|0,w|0,x|0)|0;if(!g)Ua(f|0,p|0);z=p}else g=-1;if((g|0)==1){k=t;m=j;i=r;d=v;h=v;e=z;g=q;u=74;break a}if(e|0){k=t;m=j;i=r;d=v;h=v;break a}e=j+(h<<3)|0;o=0;ja(27,s|0,m|0,d|0,i|0);f=o;o=0;if((f|0)!=0&(p|0)!=0){g=TN(c[f>>2]|0,w|0,x|0)|0;if(!g)Ua(f|0,p|0);z=p}else g=-1;if((g|0)==1){k=t;m=j;i=r;d=v;h=v;e=z;g=q;u=74;break a}g=s;k=c[g+4>>2]|0;c[e>>2]=c[g>>2];c[e+4>>2]=k;o=0;fa(88,m|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=TN(c[e>>2]|0,w|0,x|0)|0;if(!f)Ua(e|0,p|0);z=p}else f=-1;if((f|0)==1){k=t;m=j;i=r;d=v;h=v;e=z;g=q;u=74;break a}h=h+1|0}o=0;ea(8);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=TN(c[e>>2]|0,w|0,x|0)|0;if(!f)Ua(e|0,p|0);z=p}else f=-1;if((f|0)!=1){o=0;e=_(27,r|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=TN(c[f>>2]|0,w|0,x|0)|0;if(!g)Ua(f|0,p|0);z=p}else g=-1;if((g|0)!=1){c[r+20>>2]=e;o=0;e=_(28,r|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=TN(c[f>>2]|0,w|0,x|0)|0;if(!g)Ua(f|0,p|0);z=p}else g=-1;if((g|0)!=1){c[r+24>>2]=e;o=0;ha(61,n|0,j|0,r|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=TN(c[e>>2]|0,w|0,x|0)|0;if(!f)Ua(e|0,p|0);z=p}else f=-1;if((f|0)!=1){w=SN(169472,1,w|0,x|0)|0;x=z;o=0;e=o;o=0;if((e|0)!=0&(p|0)!=0){f=TN(c[e>>2]|0,w|0,x|0)|0;if(!f)Ua(e|0,p|0);z=p}else f=-1;if((f|0)!=1){k=t;m=j;i=r;d=v;h=v;e=0;g=q;u=74}else{k=t;m=j;i=r;d=v;h=v;e=z;g=q;u=74}}else{k=t;m=j;i=r;d=v;h=v;e=z;g=q;u=74}}else{k=t;m=j;i=r;d=v;h=v;e=z;g=q;u=74}}else{k=t;m=j;i=r;d=v;h=v;e=z;g=q;u=74}}else{k=t;m=j;i=r;d=v;h=v;e=z;g=q;u=74}}else{k=t;m=j;i=r;d=v;h=v;e=z;g=0;u=74}}else{k=t;m=j;i=r;d=v;h=v;e=z;g=0;u=74}}else{k=t;m=0;i=r;d=v;h=v;e=z;g=0;u=74}}else{n=0;k=t;m=0;j=0;i=r;d=v;h=v;e=z;g=0;u=74}}else{n=0;k=t;m=0;j=0;i=r;d=v;h=v;e=z;g=0;u=74}}else{n=0;k=t;m=0;j=0;i=0;d=v;h=v;e=z;g=0;u=74}}else{n=0;k=0;m=0;j=0;i=0;d=0;h=v;e=z;g=0;u=74}}else{n=0;k=0;m=0;j=0;i=0;d=0;h=0;e=z;g=0;u=74}while(0);d:while(1){if((u|0)==74){u=0;if(e|0){q=g;continue}o=0;fa(89,i|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=TN(c[e>>2]|0,w|0,x|0)|0;if(!f)Ua(e|0,p|0);z=p}else f=-1;if((f|0)==1){A=g;f=h;q=d;r=i;s=j;t=m;v=k;u=n;e=z;g=A;h=f;d=q;i=r;j=s;m=t;k=v;n=u;u=74;continue}if(c[42367]&4|0){o=0;ka(7,g|0,i|0,n|0,m|0,d|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=TN(c[e>>2]|0,w|0,x|0)|0;if(!f)Ua(e|0,p|0);z=p}else f=-1;if((f|0)==1){f=g;q=h;r=d;s=i;t=j;v=m;A=k;u=n;e=z;g=f;h=q;d=r;i=s;j=t;m=v;k=A;n=u;u=74;continue}}o=0;la(10,b|0,i|0,n|0,m|0,d|0,0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=TN(c[e>>2]|0,w|0,x|0)|0;if(!f)Ua(e|0,p|0);z=p}else f=-1;if((f|0)==1){f=g;q=h;r=d;s=i;t=j;v=m;A=k;u=n;e=z;g=f;h=q;d=r;i=s;j=t;m=v;k=A;n=u;u=74;continue}q=g}if(!(a[174080]|0))e=0;else{o=0;fa(90,k|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=TN(c[e>>2]|0,w|0,x|0)|0;if(!f)Ua(e|0,p|0);z=p}else f=-1;if((f|0)==1){e=z;g=q;u=74;continue}e=0}while(1){if((e|0)>=(n|0))break;o=0;fa(91,c[m+(e<<3)+4>>2]|0);f=o;o=0;if((f|0)!=0&(p|0)!=0){g=TN(c[f>>2]|0,w|0,x|0)|0;if(!g)Ua(f|0,p|0);z=p}else g=-1;if((g|0)==1){e=z;g=q;u=74;continue d}e=e+1|0}o=0;fa(91,j|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=TN(c[e>>2]|0,w|0,x|0)|0;if(!f)Ua(e|0,p|0);z=p}else f=-1;if((f|0)==1){e=z;g=q;u=74;continue}o=0;fa(92,i|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=TN(c[e>>2]|0,w|0,x|0)|0;if(!f)Ua(e|0,p|0);z=p}else f=-1;if((f|0)==1){e=z;g=q;u=74;continue}o=0;fa(91,h|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=TN(c[e>>2]|0,w|0,x|0)|0;if(!f)Ua(e|0,p|0);z=p}else f=-1;if((f|0)==1){e=z;g=q;u=74}else break}$I(w|0);l=y;return}function NB(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0;q=l;l=l+64|0;p=q+32|0;o=q+16|0;j=q;k=q+48|0;XL(95757,a)|0;XL(95768,a)|0;m=b+16|0;n=j+8|0;i=k+4|0;g=0;while(1){if((g|0)>=(c[b>>2]|0))break;d=c[m>>2]|0;e=c[d+(g*40|0)+20>>2]|0;f=c[d+(g*40|0)+24>>2]|0;if((e|0)==(f|0)){GC(j,e);d=~~+h[j>>3];e=~~+h[n>>3]}else{IC(k,(c[e>>2]&1|0)==0?e:f,d+(g*40|0)|0);d=c[k>>2]|0;e=c[i>>2]|0}c[o>>2]=g;c[o+4>>2]=d;c[o+8>>2]=e;AL(a,95788,o)|0;g=g+1|0}f=b+4|0;e=b+20|0;d=0;while(1){if((d|0)>=(c[f>>2]|0))break;o=c[e>>2]|0;b=c[o+(d*24|0)+16>>2]|0;r=+h[o+(d*24|0)>>3];c[p>>2]=c[o+(d*24|0)+12>>2];c[p+4>>2]=b;h[p+8>>3]=r;AL(a,95808,p)|0;d=d+1|0}XL(95830,a)|0;l=q;return}function OB(a){a=a|0;var b=0.0,d=0.0,e=0,f=0;f=c[a>>2]&3;e=c[(c[((f|0)==3?a:a+48|0)+40>>2]|0)+16>>2]|0;a=c[(c[((f|0)==2?a:a+-48|0)+40>>2]|0)+16>>2]|0;b=+h[e+16>>3]-+h[a+16>>3];d=+h[e+24>>3]-+h[a+24>>3];return ~~(d*d+b*b)|0}function PB(a,b){a=a|0;b=b|0;return (c[a>>2]|0)-(c[b>>2]|0)|0}function QB(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+32|0;j=n;GC(n+16|0,d);k=d+32|0;m=d+36|0;g=0;while(1){if((g|0)>=(c[k>>2]|0))break;h=c[(c[m>>2]|0)+(g<<2)>>2]|0;do if(!(a[h+36>>0]|0)){i=c[h+20>>2]|0;if((i|0)==(d|0)){EC(j,h,c[h+24>>2]|0);ZC(b,f,h,0.0)|0;break}else{EC(j,h,i);ZC(b,e,h,0.0)|0;break}}while(0);g=g+1|0}c[b>>2]=(c[b>>2]|0)+2;l=n;return}function RB(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+32|0;h=k;GC(k+16|0,b);i=b+32|0;j=b+36|0;f=0;while(1){if((f|0)>=(c[i>>2]|0))break;g=c[(c[j>>2]|0)+(f<<2)>>2]|0;e=c[g+20>>2]|0;if((e|0)==(b|0))e=c[g+24>>2]|0;EC(h,g,e);ZC(a,d,g,0.0)|0;f=f+1|0}c[a>>2]=(c[a>>2]|0)+1;c[d+24>>2]=b;c[d+20>>2]=b;l=k;return}function SB(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0.0,m=0.0,n=0,o=0.0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0.0,x=0.0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;H=l;l=l+128|0;C=H+64|0;n=H+48|0;D=H+32|0;E=H+16|0;F=H;g=0;i=e;while(1){if(!i)break;g=g+1|0;i=c[i+8>>2]|0}B=ww((g*56|0)+-112|0)|0;c[C+52>>2]=0;c[C+48>>2]=0;A=e+8|0;e=c[A>>2]|0;i=c[e+8>>2]|0;g=c[e+20>>2]|0;if(c[g>>2]&1)g=c[e+24>>2]|0;EC(n,e,g);j=e;q=e;p=0.0;o=+h[n>>3];z=0;m=0.0;x=+h[n+8>>3];while(1){y=i+8|0;if(!(c[y>>2]|0))break;v=FC(j,i)|0;vG(d,v,c[q+12>>2]|0);t=q+36|0;u=i+36|0;if((a[t>>0]|0)==(a[u>>0]|0))if((c[y>>2]|0)==(f|0)){EC(E,i,v);e=E;G=12}else{j=q;e=z;k=x}else{GC(D,v);e=D;G=12}if((G|0)==12){G=0;w=+h[e>>3];k=+h[e+8>>3];e=a[t>>0]|0;s=e<<24>>24==0;r=(q|0)==(c[A>>2]|0);if(s){if(!(a[u>>0]|0))e=0;else e=(c[i+20>>2]|0)==(v|0)?4:2;n=v+48|0;q=g+48|0;j=g+40|0;g=r?0:p>o?4:2}else{if(e<<24>>24==(a[u>>0]|0))e=0;else e=(c[i+20>>2]|0)==(v|0)?1:3;n=v+40|0;q=g+40|0;j=g+48|0;g=r?0:m>x?1:3}HC(C,s&1,+h[j>>3],+h[q>>3],+h[n>>3],g,e);q=z+1|0;g=B+(z*56|0)|0;e=C;j=g+56|0;do{c[g>>2]=c[e>>2];g=g+4|0;e=e+4|0}while((g|0)<(j|0));if((a[t>>0]|0)!=(a[u>>0]|0)?(c[y>>2]|0)==(f|0):0){EC(F,i,v);n=(a[u>>0]|0)==0;e=v+40|0;g=v+48|0;p=+h[(n?g:e)>>3];HC(C,n&1,+h[(n?e:g)>>3],p,p,n?(o>w?4:2):x>k?1:3,0);n=z+2|0;g=B+(q*56|0)|0;e=C;j=g+56|0;do{c[g>>2]=c[e>>2];g=g+4|0;e=e+4|0}while((g|0)<(j|0));g=v;j=i;p=o;o=w;e=n;m=x}else{g=v;j=i;p=o;o=w;e=q;m=x}}v=i;i=c[y>>2]|0;q=j;z=e;x=k;j=v}i=bJ(B,z*56|0)|0;e=z+-1|0;g=0;while(1){if((g|0)>=(z|0))break;if((g|0)>0)c[i+(g*56|0)+48>>2]=i+((g+-1|0)*56|0);if((g|0)<(e|0)){G=g+1|0;c[i+(g*56|0)+52>>2]=i+(G*56|0);g=G;continue}else{g=g+1|0;continue}}c[b>>2]=z;c[b+4>>2]=i;l=H;return}function TB(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,i=0,j=0,k=0;j=Rl(24676,c[4345]|0)|0;k=a+8|0;i=0;while(1){if((i|0)>=(c[a>>2]|0))break;b=(c[k>>2]|0)+(i*72|0)|0;if(!(c[b>>2]&4)){while(1){d=c[(c[b+36>>2]|0)+8>>2]|0;if(!d)break;d=c[d+20>>2]|0;if(!d)break;if(!(c[d>>2]&1))b=d;else break}g=ww(40)|0;c[g+36>>2]=b;h[g+8>>3]=+h[b+40>>3];f=b;d=c[b>>2]|0;while(1){c[f>>2]=d|4;d=c[c[f+36>>2]>>2]|0;if(!d)break;e=c[d+24>>2]|0;if(!e)break;d=c[e>>2]|0;if(d&1|0)break;else f=e}h[g+16>>3]=+h[f+56>>3];zC(j,g,+h[b+48>>3])}i=i+1|0}return j|0}function UB(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,i=0,j=0,k=0;j=Rl(24676,c[4345]|0)|0;k=a+8|0;i=0;while(1){if((i|0)>=(c[a>>2]|0))break;b=(c[k>>2]|0)+(i*72|0)|0;if(!(c[b>>2]&2)){while(1){d=c[(c[b+36>>2]|0)+12>>2]|0;if(!d)break;d=c[d+20>>2]|0;if(!d)break;if(!(c[d>>2]&1))b=d;else break}g=ww(40)|0;c[g+36>>2]=b;h[g+8>>3]=+h[b+48>>3];f=b;d=c[b>>2]|0;while(1){c[f>>2]=d|2;d=c[(c[f+36>>2]|0)+4>>2]|0;if(!d)break;e=c[d+24>>2]|0;if(!e)break;d=c[e>>2]|0;if(d&1|0)break;else f=e}h[g+16>>3]=+h[f+64>>3];zC(j,g,+h[b+40>>3])}i=i+1|0}return j|0}function VB(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;j=e+20|0;i=e+24|0;e=0;while(1){if((e|0)>=(b|0))break;g=c[d+(e<<3)>>2]|0;h=c[d+(e<<3)+4>>2]|0;f=0;while(1){if((f|0)>=(g|0))break;k=h+(f*56|0)|0;yC(cC(c[((a[k>>0]|0)==0?j:i)>>2]|0,k)|0,k);f=f+1|0}e=e+1|0}return}function WB(a){a=a|0;var b=0,d=0;d=a+20|0;eC(c[d>>2]|0);b=a+24|0;eC(c[b>>2]|0);fC(c[d>>2]|0);fC(c[b>>2]|0);gC(c[d>>2]|0,a);gC(c[b>>2]|0,a);hC(c[d>>2]|0);hC(c[b>>2]|0);return}function XB(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.0,B=0.0,C=0.0,D=0,E=0.0;z=l;l=l+224|0;n=z+176|0;m=z+208|0;x=z+160|0;y=z+128|0;k=z+96|0;t=z+64|0;u=z;o=z+32|0;v=u+8|0;h[v>>3]=1797693134862315708145274.0e284;h[u>>3]=1797693134862315708145274.0e284;w=u+24|0;h[w>>3]=-1797693134862315708145274.0e284;p=u+16|0;h[p>>3]=-1797693134862315708145274.0e284;XL(95005,a)|0;c[n>>2]=10;c[n+4>>2]=10;AL(a,95411,n)|0;XL(123076,a)|0;i=b+4|0;j=b+12|0;q=t+8|0;r=t+16|0;s=t+24|0;g=0;while(1){if((g|0)>=(c[i>>2]|0))break;D=(c[j>>2]|0)+(g*72|0)+40|0;c[t>>2]=c[D>>2];c[t+4>>2]=c[D+4>>2];c[t+8>>2]=c[D+8>>2];c[t+12>>2]=c[D+12>>2];c[t+16>>2]=c[D+16>>2];c[t+20>>2]=c[D+20>>2];c[t+24>>2]=c[D+24>>2];c[t+28>>2]=c[D+28>>2];C=+h[q>>3];B=+h[r>>3];A=+h[s>>3];h[k>>3]=+h[t>>3];h[k+8>>3]=C;h[k+16>>3]=B;h[k+24>>3]=A;AL(a,123095,k)|0;g=g+1|0}g=0;while(1){if((g|0)>=(d|0))break;D=c[f+(g<<3)+4>>2]|0;k=e+(g<<3)|0;c[m>>2]=c[k>>2];c[m+4>>2]=c[k+4>>2];c[n>>2]=c[u>>2];c[n+4>>2]=c[u+4>>2];c[n+8>>2]=c[u+8>>2];c[n+12>>2]=c[u+12>>2];c[n+16>>2]=c[u+16>>2];c[n+20>>2]=c[u+20>>2];c[n+24>>2]=c[u+24>>2];c[n+28>>2]=c[u+28>>2];dC(o,a,D,m,b,n);c[u>>2]=c[o>>2];c[u+4>>2]=c[o+4>>2];c[u+8>>2]=c[o+8>>2];c[u+12>>2]=c[o+12>>2];c[u+16>>2]=c[o+16>>2];c[u+20>>2]=c[o+20>>2];c[u+24>>2]=c[o+24>>2];c[u+28>>2]=c[o+28>>2];g=g+1|0}XL(95428,a)|0;i=b+8|0;g=0;while(1){if((g|0)>=(c[b>>2]|0))break;D=(c[i>>2]|0)+(g*72|0)+40|0;c[t>>2]=c[D>>2];c[t+4>>2]=c[D+4>>2];c[t+8>>2]=c[D+8>>2];c[t+12>>2]=c[D+12>>2];c[t+16>>2]=c[D+16>>2];c[t+20>>2]=c[D+20>>2];c[t+24>>2]=c[D+24>>2];c[t+28>>2]=c[D+28>>2];E=+h[t>>3];A=+h[q>>3];B=+h[r>>3];C=+h[s>>3];h[y>>3]=E;h[y+8>>3]=A;h[y+16>>3]=B;h[y+24>>3]=C;AL(a,123132,y)|0;h[u>>3]=+h[(+h[u>>3]>3];h[v>>3]=+h[(+h[v>>3]>3];h[p>>3]=+h[(+h[p>>3]>B?u:t)+16>>3];h[w>>3]=+h[(+h[w>>3]>C?u:t)+24>>3];g=g+1|0}v=~~(+h[v>>3]+10.0);y=~~(+h[p>>3]+10.0);D=~~(+h[w>>3]+10.0);c[x>>2]=~~(+h[u>>3]+10.0);c[x+4>>2]=v;c[x+8>>2]=y;c[x+12>>2]=D;AL(a,95453,x)|0;l=z;return}function YB(b,d,e,f,g,i){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0.0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0;N=l;l=l+112|0;F=N+88|0;E=N+72|0;M=N+32|0;I=N+16|0;J=N;K=N+56|0;L=N+40|0;G=c[13918]|0;w=(i|0)==0;x=J+8|0;y=I+8|0;v=0;m=0;n=0;o=0;p=0;i=0;while(1){if((v|0)>=(e|0))break;z=c[g+(v<<3)+4>>2]|0;A=z+48|0;u=(c[(c[((c[z>>2]&3|0)==3?z:A)+40>>2]|0)+16>>2]|0)+16|0;B=z+16|0;C=(c[B>>2]|0)+16|0;c[E>>2]=c[u>>2];c[E+4>>2]=c[u+4>>2];c[E+8>>2]=c[u+8>>2];c[E+12>>2]=c[u+12>>2];c[F>>2]=c[C>>2];c[F+4>>2]=c[C+4>>2];c[F+8>>2]=c[C+8>>2];c[F+12>>2]=c[C+12>>2];ZB(K,E,F);c[I>>2]=c[K>>2];c[I+4>>2]=c[K+4>>2];c[I+8>>2]=c[K+8>>2];c[I+12>>2]=c[K+12>>2];C=z+-48|0;u=(c[(c[((c[z>>2]&3|0)==2?z:C)+40>>2]|0)+16>>2]|0)+16|0;t=(c[B>>2]|0)+56|0;c[E>>2]=c[u>>2];c[E+4>>2]=c[u+4>>2];c[E+8>>2]=c[u+8>>2];c[E+12>>2]=c[u+12>>2];c[F>>2]=c[t>>2];c[F+4>>2]=c[t+4>>2];c[F+8>>2]=c[t+8>>2];c[F+12>>2]=c[t+12>>2];ZB(L,E,F);c[J>>2]=c[L>>2];c[J+4>>2]=c[L+4>>2];c[J+8>>2]=c[L+8>>2];c[J+12>>2]=c[L+12>>2];t=c[f+(v<<3)>>2]|0;u=c[f+(v<<3)+4>>2]|0;s=t*3|0;D=s+1|0;if((s|0)>=(n|0)){if(m|0)$I(i);p=xw(D<<4)|0;m=p;n=D;o=p;i=p}if(!(a[u>>0]|0)){k=+($B(u,d)|0);j=+h[I>>3]}else{j=+_B(u,d);k=+h[y>>3]}r=m+16|0;h[m+16>>3]=j;h[m+24>>3]=k;c[p>>2]=c[r>>2];c[p+4>>2]=c[r+4>>2];c[p+8>>2]=c[r+8>>2];c[p+12>>2]=c[r+12>>2];r=1;q=u;s=2;while(1){if((r|0)>=(t|0))break;q=u+(r*56|0)|0;if(!(a[q>>0]|0))k=+($B(q,d)|0);else j=+_B(q,d);O=m+(s+2<<4)|0;Q=m+(s+1<<4)|0;P=m+(s<<4)|0;h[P>>3]=j;h[m+(s<<4)+8>>3]=k;c[Q>>2]=c[P>>2];c[Q+4>>2]=c[P+4>>2];c[Q+8>>2]=c[P+8>>2];c[Q+12>>2]=c[P+12>>2];c[O>>2]=c[P>>2];c[O+4>>2]=c[P+4>>2];c[O+8>>2]=c[P+8>>2];c[O+12>>2]=c[P+12>>2];r=r+1|0;s=s+3|0}if(!(a[q>>0]|0)){k=+($B(q,d)|0);j=+h[J>>3]}else{j=+_B(q,d);k=+h[x>>3]}Q=m+(s<<4)|0;O=s+1|0;P=m+(O<<4)|0;h[P>>3]=j;h[m+(O<<4)+8>>3]=k;c[Q>>2]=c[P>>2];c[Q+4>>2]=c[P+4>>2];c[Q+8>>2]=c[P+8>>2];c[Q+12>>2]=c[P+12>>2];if(0>1){P=En(c[((c[z>>2]&3|0)==3?z:A)+40>>2]|0)|0;Q=En(c[((c[z>>2]&3|0)==2?z:C)+40>>2]|0)|0;c[M>>2]=P;c[M+4>>2]=Q;AL(G,94964,M)|0}Kz(z,c[((c[z>>2]&3|0)==2?z:C)+40>>2]|0,m,D,24664);if((!w?(H=c[(c[B>>2]|0)+96>>2]|0,H|0):0)?(a[H+81>>0]|0)==0:0){c[E>>2]=c[I>>2];c[E+4>>2]=c[I+4>>2];c[E+8>>2]=c[I+8>>2];c[E+12>>2]=c[I+12>>2];c[F>>2]=c[J>>2];c[F+4>>2]=c[J+4>>2];c[F+8>>2]=c[J+8>>2];c[F+12>>2]=c[J+12>>2];dA(b,z,E,F)}v=v+1|0}$I(o);l=N;return}function ZB(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;h[b>>3]=+h[b>>3]+ +h[d>>3];e=b+8|0;h[e>>3]=+h[e>>3]+ +h[d+8>>3];c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];return}function _B(a,b){a=a|0;b=b|0;var d=0.0,e=0;b=cC(c[b+24>>2]|0,a)|0;e=c[b+36>>2]|0;d=+h[e+40>>3];return +((+h[e+56>>3]-d)*(+(c[a+44>>2]|0)/+((c[b+24>>2]|0)+1|0))+d)}function $B(a,b){a=a|0;b=b|0;var d=0.0,e=0;e=cC(c[b+20>>2]|0,a)|0;b=c[e+36>>2]|0;d=+h[b+48>>3];return ~~((1.0-+(c[a+44>>2]|0)/+((c[e+24>>2]|0)+1|0))*(+h[b+64>>3]-d)+d)|0}function aC(a){a=a|0;return 0}function bC(a){a=a|0;return 0}function cC(a,b){a=a|0;b=b|0;a=bb[c[a>>2]&31](a,b+8|0,512)|0;if(!a)ma(94977,94983,423,94991);a=c[a+16>>2]|0;a=bb[c[a>>2]&31](a,b+16|0,512)|0;if(!a)ma(95002,94983,425,94991);else return a|0;return 0}function dC(b,d,e,f,g,i){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0,k=0.0,m=0,n=0,o=0,p=0.0,q=0.0,r=0.0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0.0,C=0.0,D=0.0;z=l;l=l+32|0;y=z+16|0;u=z+8|0;m=z;j=c[(c[(c[((c[e>>2]&3|0)==3?e:e+48|0)+40>>2]|0)+16>>2]|0)+112>>2]|0;t=c[f+4>>2]|0;if(!(a[t>>0]|0)){k=+h[j+56>>3];s=+h[j+40>>3];j=$B(t,g)|0;k=(s+k)*.5}else{k=+h[j+64>>3];s=+h[j+48>>3];j=~~((s+k)*.5);k=+_B(t,g)}A=~~k;p=+h[i>>3];r=+(A|0);p=p>3]=p;v=i+8|0;q=+h[v>>3];s=+(j|0);q=q>3]=q;w=i+16|0;k=+h[w>>3];r=k>r?k:r;h[w>>3]=r;x=i+24|0;k=+h[x>>3];s=k>s?k:s;h[x>>3]=s;c[m>>2]=A;c[m+4>>2]=j;AL(d,95504,m)|0;o=c[f>>2]|0;m=t;n=1;f=A;while(1){if((n|0)>=(o|0))break;m=t+(n*56|0)|0;if(!(a[m>>0]|0))j=$B(m,g)|0;else f=~~+_B(m,g);B=+(f|0);D=p>3]=D;k=+(j|0);C=q>3]=C;B=r>B?r:B;h[w>>3]=B;k=s>k?s:k;h[x>>3]=k;c[u>>2]=f;c[u+4>>2]=j;AL(d,95526,u)|0;n=n+1|0;p=D;q=C;r=B;s=k}j=c[(c[(c[((c[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0)+16>>2]|0)+112>>2]|0;if(!(a[m>>0]|0)){k=+h[j+56>>3];D=+h[j+40>>3];j=$B(m,g)|0;k=(D+k)*.5}else{k=+h[j+64>>3];D=+h[j+48>>3];j=~~((D+k)*.5);k=+_B(m,g)}A=~~k;C=+(A|0);h[i>>3]=p>3]=q>3]=r>C?r:C;h[x>>3]=s>D?s:D;c[y>>2]=A;c[y+4>>2]=j;AL(d,95540,y)|0;c[b>>2]=c[i>>2];c[b+4>>2]=c[i+4>>2];c[b+8>>2]=c[i+8>>2];c[b+12>>2]=c[i+12>>2];c[b+16>>2]=c[i+16>>2];c[b+20>>2]=c[i+20>>2];c[b+24>>2]=c[i+24>>2];c[b+28>>2]=c[i+28>>2];l=z;return}function eC(a){a=a|0;var b=0;a=Pl(a)|0;while(1){if(!a)break;b=Pl(c[a+16>>2]|0)|0;while(1){if(!b)break;c[b+32>>2]=JC(c[b+24>>2]|0)|0;b=c[b>>2]|0}a=c[a>>2]|0}return}function fC(a){a=a|0;var b=0;a=Pl(a)|0;while(1){if(!a)break;b=Pl(c[a+16>>2]|0)|0;while(1){if(!b)break;if(c[b+24>>2]|0)xC(b);b=c[b>>2]|0}a=c[a>>2]|0}return}function gC(a,b){a=a|0;b=b|0;var d=0;d=Pl(a)|0;while(1){if(!d)break;a=Pl(c[d+16>>2]|0)|0;while(1){if(!a)break;lC(a,b);a=c[a>>2]|0}d=c[d>>2]|0}return}function hC(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,i=0;e=Pl(a)|0;while(1){if(!e)break;i=e+8|0;f=Pl(c[e+16>>2]|0)|0;while(1){if(!f)break;a=f+24|0;a:do if(c[a>>2]|0){if(c[42367]&8|0)iC(f,~~+h[i>>3]);g=f+32|0;OC(c[g>>2]|0);b=c[a>>2]|0;d=f+28|0;a=0;while(1){if((a|0)>=(b|0))break a;c[(c[(c[d>>2]|0)+(a<<2)>>2]|0)+44>>2]=(c[(c[(c[g>>2]|0)+4>>2]|0)+(a*12|0)+4>>2]|0)+1;a=a+1|0}}while(0);f=c[f>>2]|0}e=c[e>>2]|0}return}function iC(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0.0,m=0.0;j=l;l=l+32|0;d=j;g=a+24|0;a:do if((c[g>>2]|0)>=2){i=c[13918]|0;m=+h[a+8>>3];k=+h[a+16>>3];c[d>>2]=b;h[d+8>>3]=m;h[d+16>>3]=k;AL(i,95561,d)|0;f=a+32|0;a=a+28|0;b=0;while(1){if((b|0)>=(c[g>>2]|0))break a;e=c[(c[(c[f>>2]|0)+4>>2]|0)+(b*12|0)+8>>2]|0;b:do if(Tl(e)|0){jC(i,c[(c[a>>2]|0)+(b<<2)>>2]|0);XL(95581,i)|0;d=bb[c[e>>2]&31](e,0,128)|0;while(1){if(!d)break b;XL(95586,i)|0;jC(i,c[(c[a>>2]|0)+(c[d>>2]<<2)>>2]|0);XL(134901,i)|0;d=bb[c[e>>2]&31](e,d,8)|0}}while(0);b=b+1|0}}while(0);l=j;return}function jC(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0.0,k=0.0,m=0.0;g=l;l=l+80|0;f=g+40|0;e=g;if(!(a[d>>0]|0)){m=+h[d+16>>3];j=+h[d+8>>3];k=+h[d+24>>3];i=kC(c[d+32>>2]|0)|0;e=kC(c[d+36>>2]|0)|0;h[f>>3]=m;h[f+8>>3]=j;h[f+16>>3]=k;h[f+24>>3]=j;c[f+32>>2]=i;c[f+36>>2]=e;AL(b,95592,f)|0}else{k=+h[d+8>>3];j=+h[d+16>>3];m=+h[d+24>>3];f=kC(c[d+32>>2]|0)|0;i=kC(c[d+36>>2]|0)|0;h[e>>3]=k;h[e+8>>3]=j;h[e+16>>3]=k;h[e+24>>3]=m;c[e+32>>2]=f;c[e+36>>2]=i;AL(b,95592,e)|0}l=g;return}function kC(a){a=a|0;switch(a|0){case 0:{a=95643;break}case 1:{a=95638;break}case 2:{a=95631;break}case 3:{a=95624;break}case 4:{a=95616;break}default:a=0}return a|0}function lC(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=l;l=l+16|0;r=w+8|0;t=w;u=c[a+32>>2]|0;v=c[a+28>>2]|0;p=a+24|0;m=r+4|0;n=t+4|0;j=0;a=c[p>>2]|0;a:while(1){q=j+1|0;if((q|0)>=(a|0))break;o=v+(j<<2)|0;k=q;while(1){if((k|0)>=(a|0)){j=q;continue a}b:do if(((NC(u,j,k)|0)==0?(NC(u,k,j)|0)==0:0)?(s=v+(k<<2)|0,mC(c[o>>2]|0,c[s>>2]|0)|0):0){f=c[o>>2]|0;a=c[f+48>>2]|0;i=c[s>>2]|0;d=c[i+48>>2]|0;e=(d|0)==0;if(a)if(e)a=1;else a=+h[a+8>>3]!=+h[d+8>>3];else a=e^1;g=a&1;nC(r,f,i,0,g);a=c[r>>2]|0;i=c[m>>2]|0;f=g^1;nC(t,c[o>>2]|0,c[s>>2]|0,1,f);d=c[t>>2]|0;e=c[n>>2]|0;switch(i|0){case -1:{oC(c[s>>2]|0,c[o>>2]|0,g,0,a,b);oC(c[s>>2]|0,c[o>>2]|0,f,1,d,b);if((e|0)!=1)break b;pC(c[o>>2]|0,c[s>>2]|0,f,b);break b}case 0:switch(e|0){case -1:{oC(c[s>>2]|0,c[o>>2]|0,g,0,a,b);oC(c[s>>2]|0,c[o>>2]|0,f,1,d,b);break b}case 0:{oC(c[o>>2]|0,c[s>>2]|0,0,g,a,b);oC(c[o>>2]|0,c[s>>2]|0,1,f,d,b);break b}case 1:{oC(c[o>>2]|0,c[s>>2]|0,0,g,a,b);oC(c[o>>2]|0,c[s>>2]|0,1,f,d,b);break b}default:break b}case 1:{oC(c[o>>2]|0,c[s>>2]|0,0,g,a,b);oC(c[o>>2]|0,c[s>>2]|0,1,f,d,b);if((e|0)!=-1)break b;pC(c[o>>2]|0,c[s>>2]|0,f,b);break b}default:break b}}while(0);k=k+1|0;a=c[p>>2]|0}}l=w;return}function mC(a,b){a=a|0;b=b|0;if(!(+h[a+8>>3]==+h[b+8>>3]))ma(95714,94983,843,95745);if((+h[a+16>>3]==+h[b+16>>3]?+h[a+24>>3]==+h[b+24>>3]:0)?(c[a+32>>2]|0)==(c[b+32>>2]|0):0)a=(c[a+36>>2]|0)==(c[b+36>>2]|0)&1;else a=0;return a|0}function nC(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=0;while(1){b=qC(b,e)|0;if(!b){h=0;break}d=qC(d,f)|0;if(!d){i=6;break}if(!(mC(b,d)|0)){i=7;break}g=g+1|0}if((i|0)==6)ma(123205,94983,871,95663);else if((i|0)==7)h=sC(b,rC(b,d)|0,g+1|0,1-e|0)|0;c[a>>2]=g;c[a+4>>2]=h;return}function oC(b,d,e,f,g,i){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0;o=i+20|0;n=i+24|0;i=cC(c[((a[b>>0]|0)==0?o:n)>>2]|0,b)|0;LC(c[i+32>>2]|0,c[b+40>>2]|0,c[d+40>>2]|0);k=1;while(1){if((k|0)>(g|0))break;l=qC(b,e)|0;m=qC(d,f)|0;do if(!(a[b>>0]|0)){j=cC(c[n>>2]|0,l)|0;if(+h[l+8>>3]==+h[b+16>>3]){p=(c[b+32>>2]|0)==1;i=(NC(c[i+32>>2]|0,c[b+40>>2]|0,c[d+40>>2]|0)|0)!=0;b=c[j+32>>2]|0;if(p)if(i){LC(b,c[m+40>>2]|0,c[l+40>>2]|0);i=j;break}else{LC(b,c[l+40>>2]|0,c[m+40>>2]|0);i=j;break}else if(i){LC(b,c[l+40>>2]|0,c[m+40>>2]|0);i=j;break}else{LC(b,c[m+40>>2]|0,c[l+40>>2]|0);i=j;break}}else{p=(c[b+36>>2]|0)==1;i=(NC(c[i+32>>2]|0,c[b+40>>2]|0,c[d+40>>2]|0)|0)!=0;b=c[j+32>>2]|0;if(p)if(i){LC(b,c[l+40>>2]|0,c[m+40>>2]|0);i=j;break}else{LC(b,c[m+40>>2]|0,c[l+40>>2]|0);i=j;break}else if(i){LC(b,c[m+40>>2]|0,c[l+40>>2]|0);i=j;break}else{LC(b,c[l+40>>2]|0,c[m+40>>2]|0);i=j;break}}}else{j=cC(c[o>>2]|0,l)|0;if(+h[l+8>>3]==+h[b+16>>3]){p=(c[b+32>>2]|0)==2;i=(NC(c[i+32>>2]|0,c[b+40>>2]|0,c[d+40>>2]|0)|0)!=0;b=c[j+32>>2]|0;if(p)if(i){LC(b,c[l+40>>2]|0,c[m+40>>2]|0);i=j;break}else{LC(b,c[m+40>>2]|0,c[l+40>>2]|0);i=j;break}else if(i){LC(b,c[m+40>>2]|0,c[l+40>>2]|0);i=j;break}else{LC(b,c[l+40>>2]|0,c[m+40>>2]|0);i=j;break}}else{p=(c[b+36>>2]|0)==2;i=(NC(c[i+32>>2]|0,c[b+40>>2]|0,c[d+40>>2]|0)|0)!=0;b=c[j+32>>2]|0;if(p)if(i){LC(b,c[m+40>>2]|0,c[l+40>>2]|0);i=j;break}else{LC(b,c[l+40>>2]|0,c[m+40>>2]|0);i=j;break}else if(i){LC(b,c[l+40>>2]|0,c[m+40>>2]|0);i=j;break}else{LC(b,c[m+40>>2]|0,c[l+40>>2]|0);i=j;break}}}while(0);b=l;d=m;k=k+1|0}return}function pC(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0;while(1){if(!(mC(b,d)|0))break;g=qC(b,1)|0;d=qC(d,e)|0;b=g}g=c[(cC(c[((a[b>>0]|0)==0?f+20|0:f+24|0)>>2]|0,b)|0)+32>>2]|0;MC(g,c[b+40>>2]|0,c[d+40>>2]|0);return}function qC(a,b){a=a|0;b=b|0;if(!a)ma(95650,94983,798,95654);else return c[((b|0)==0?a+48|0:a+52|0)>>2]|0;return 0}function rC(b,c){b=b|0;c=c|0;var d=0,e=0,f=0;f=l;l=l+16|0;e=f;d=a[b>>0]|0;if(d<<24>>24==(a[c>>0]|0)?!(+h[b+8>>3]!=+h[c+8>>3]):0){if(!(d<<24>>24))b=tC(b,c,3,1)|0;else b=tC(b,c,4,2)|0;l=f;return b|0}$l(1,95676,e)|0;Ua(169472,1);return 0}function sC(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0;j=1;while(1){if((j|0)>(e|0))break;i=qC(b,f)|0;g=+h[i+8>>3]==+h[b+16>>3];do if(!(a[b>>0]|0))if(g){g=(c[b+32>>2]|0)==1;break}else{g=(c[b+36>>2]|0)==3;break}else if(g){g=(c[b+32>>2]|0)==4;break}else{g=(c[b+36>>2]|0)==2;break}while(0);b=i;j=j+1|0;d=g?0-d|0:d}return d|0}function tC(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0.0,i=0.0,j=0.0,k=0.0,l=0,m=0,n=0,o=0;j=+h[a+24>>3];k=+h[b+16>>3];do if(!(j>3],i=+h[b+24>>3],!(g>i)):0){if(k>2]|0;return ((d|0)==(c[b+32>>2]|0)?0:(d|0)==(e|0)?1:-1)|0}else{d=c[a+32>>2]|0;b=(d|0)==(c[b+36>>2]|0)?0:(d|0)==(e|0)?1:-1;break}if(!(j==i))if(j>2]|0)==(d|0);d=wC(c[b+32>>2]|0,c[a+32>>2]|0,d,e)|0;return (o?d:0-d|0)|0}else{o=(c[b+36>>2]|0)==(e|0);b=wC(c[a+32>>2]|0,c[b+32>>2]|0,d,e)|0;b=o?b:0-b|0;break}o=c[a+32>>2]|0;n=c[b+32>>2]|0;if((o|0)==(n|0)){b=c[b+36>>2]|0;if((c[a+36>>2]|0)==(b|0)){b=0;break}}else b=c[b+36>>2]|0;m=(n|0)==(d|0);if((n|0)==(b|0)){if(m){b=1;break}if((n|0)==(e|0)){b=-1;break}if((o|0)!=(d|0)?(c[a+36>>2]|0)!=(d|0):0){b=1;break}if((o|0)!=(e|0)?(c[a+36>>2]|0)!=(e|0):0){b=-1;break}b=0;break}f=(b|0)==(e|0);if(m&f){b=(c[a+36>>2]|0)==(e|0);if((o|0)==(d|0)){if(!b){b=-1;break}}else if(b){b=1;break}b=0;break}l=(b|0)==(d|0);if((n|0)==(e|0)&l){b=(o|0)==(e|0);if((c[a+36>>2]|0)==(d|0)){if(!b){b=-1;break}}else if(b){b=1;break}b=0;break}if(!n){if(l){b=vC(o,c[a+36>>2]|0,d)|0;break}if(f){b=0-(vC(o,c[a+36>>2]|0,e)|0)|0;break}}f=c[a+36>>2]|0;if(m&(b|0)==0){b=vC(f,o,d)|0;break}else{b=0-(vC(f,o,e)|0)|0;break}}else b=0;while(0);return b|0}function uC(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0.0,j=0.0;i=+h[a+24>>3];j=+h[b+24>>3];do if(i>2]|0;if((a|0)==(d|0)?(c[b+32>>2]|0)==(e|0):0){a=-1;break}if((a|0)==(e|0)?(c[b+32>>2]|0)==(d|0):0){a=1;break}a=0}else{f=c[b+32>>2]|0;g=(f|0)==(e|0);if(i==j)if(g){a=wC(c[a+36>>2]|0,c[b+36>>2]|0,d,e)|0;break}else{a=0-(wC(c[b+36>>2]|0,c[a+36>>2]|0,d,e)|0)|0;break}if(g?(c[b+36>>2]|0)==(e|0):0){a=-1;break}if((f|0)==(d|0)?(c[b+36>>2]|0)==(d|0):0){a=1;break}a=0}while(0);return a|0}function vC(a,b,c){a=a|0;b=b|0;c=c|0;return ((a|0)==(c|0)?((b|0)==(c|0))<<31>>31:1)|0}function wC(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;if((a|0)==(d|0)){b=(a|0)==0;if(b)return 0;else b=b&1}return ((a|0)!=0|(b|0)!=(c|0))<<31>>31|0}function xC(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;g=c[a+28>>2]|0;h=c[a+24>>2]|0;d=c[a+32>>2]|0;a=0;a:while(1){e=a+1|0;if((e|0)>=(h|0))break;f=g+(a<<2)|0;b=e;while(1){if((b|0)==(h|0)){a=e;continue a}switch(rC(c[f>>2]|0,c[g+(b<<2)>>2]|0)|0){case 1:{LC(d,a,b);break}case -1:{LC(d,b,a);break}default:{}}b=b+1|0}}return}function yC(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=a+24|0;e=c[f>>2]|0;d=e+1|0;c[f>>2]=d;c[b+40>>2]=e;e=a+28|0;a=c[e>>2]|0;if(!a)a=xw(d<<2)|0;else a=zw(a,d<<2)|0;c[e>>2]=a;c[a+((c[f>>2]|0)+-1<<2)>>2]=b;return}function zC(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,g=0;g=l;l=l+16|0;f=g;h[f>>3]=d;e=bb[c[a>>2]&31](a,f,512)|0;if(!e){e=ww(24)|0;h[e+8>>3]=+h[f>>3];c[e+16>>2]=Rl(24712,c[4345]|0)|0;bb[c[a>>2]&31](a,e,1)|0}f=c[e+16>>2]|0;bb[c[f>>2]&31](f,b,1)|0;l=g;return}function AC(a,b,d){a=a|0;b=b|0;d=d|0;KC(c[b+32>>2]|0);$I(c[b+28>>2]|0);$I(b);return}function BC(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0.0;e=+h[b>>3];f=+h[c>>3];if(!(e>f))if(e>3]>=+h[c+8>>3])<<31>>31;else a=0;else a=!(+h[b+8>>3]<=+h[c+8>>3])&1;return a|0}function CC(a,b,d){a=a|0;b=b|0;d=d|0;Ll(c[b+16>>2]|0)|0;$I(b);return}function DC(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0.0;f=+h[b>>3];e=+h[c>>3];return (f>e?1:(f>31)|0}function EC(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,g=0.0,i=0,j=0;i=(a[d+36>>0]|0)!=0;j=e+40|0;do if((c[d+24>>2]|0)==(e|0)){f=+h[j>>3];if(i){g=(+h[e+64>>3]+ +h[e+48>>3])*.5;break}else{g=+h[e+48>>3];f=(+h[e+56>>3]+f)*.5;break}}else if(i){g=(+h[e+64>>3]+ +h[e+48>>3])*.5;f=+h[e+56>>3];break}else{g=+h[e+64>>3];f=(+h[e+56>>3]+ +h[j>>3])*.5;break}while(0);h[b>>3]=f;h[b+8>>3]=g;return}function FC(a,b){a=a|0;b=b|0;var d=0;d=c[a+20>>2]|0;if((d|0)!=(c[b+20>>2]|0)?(d|0)!=(c[b+24>>2]|0):0)d=c[a+24>>2]|0;return d|0}function GC(a,b){a=a|0;b=b|0;var c=0.0;c=(+h[b+64>>3]+ +h[b+48>>3])*.5;h[a>>3]=(+h[b+56>>3]+ +h[b+40>>3])*.5;h[a+8>>3]=c;return}function HC(b,d,e,f,g,i,j){b=b|0;d=d|0;e=+e;f=+f;g=+g;i=i|0;j=j|0;var k=0,l=0;a[b>>0]=d;h[b+8>>3]=e;if(f>3]=f;h[b+16>>3]=e;c[b+36>>2]=d;c[b+32>>2]=l;a[b+1>>0]=k;return}function IC(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=c[b+36>>2]|0;do if((c[e+4>>2]|0)!=(d|0)){if((c[e+12>>2]|0)==(d|0)){e=~~((+h[b+56>>3]+ +h[b+40>>3])*.5);d=~~+h[b+48>>3];break}if((c[e+8>>2]|0)==(d|0)){e=~~+h[b+40>>3];d=~~((+h[b+64>>3]+ +h[b+48>>3])*.5);break}if((c[e>>2]|0)==(d|0)){e=~~+h[b+56>>3];d=~~((+h[b+64>>3]+ +h[b+48>>3])*.5)}else{e=0;d=0}}else{e=~~((+h[b+56>>3]+ +h[b+40>>3])*.5);d=~~+h[b+64>>3]}while(0);c[a>>2]=e;c[a+4>>2]=d;return}function JC(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;d=ww(8)|0;c[d>>2]=a;e=d+4|0;c[e>>2]=ww(a*12|0)|0;b=0;while(1){if((b|0)>=(a|0))break;g=gG()|0;f=c[e>>2]|0;c[f+(b*12|0)+8>>2]=g;c[f+(b*12|0)>>2]=0;b=b+1|0}return d|0}function KC(a){a=a|0;var b=0,d=0,e=0;d=a+4|0;b=0;while(1){e=c[d>>2]|0;if((b|0)>=(c[a>>2]|0))break;Ll(c[e+(b*12|0)+8>>2]|0)|0;b=b+1|0}$I(e);$I(a);return}function LC(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=c[(c[a+4>>2]|0)+(b*12|0)+8>>2]|0;bb[c[d>>2]&31](d,f,1)|0;l=e;return}function MC(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e;c[f>>2]=d;a=a+4|0;g=c[(c[a>>2]|0)+(b*12|0)+8>>2]|0;bb[c[g>>2]&31](g,f,2)|0;c[f>>2]=b;d=c[(c[a>>2]|0)+(d*12|0)+8>>2]|0;bb[c[d>>2]&31](d,f,2)|0;l=e;return}function NC(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=c[(c[a+4>>2]|0)+(b*12|0)+8>>2]|0;d=(bb[c[d>>2]&31](d,f,512)|0)!=0&1;l=e;return d|0}function OC(a){a=a|0;var b=0,d=0,e=0,f=0;b=c[a>>2]|0;switch(b|0){case 0:break;case 1:{c[(c[a+4>>2]|0)+4>>2]=0;break}default:{e=PC(b)|0;f=a+4|0;d=0;b=0;while(1){if((d|0)>=(c[a>>2]|0)){b=0;break}if(!(c[(c[f>>2]|0)+(d*12|0)>>2]|0))b=QC(a,d,b,e)|0;d=d+1|0}while(1){d=RC(e)|0;if((d|0)<=-1)break;c[(c[f>>2]|0)+(d*12|0)+4>>2]=b;b=b+1|0}SC(e)}}return}function PC(a){a=a|0;var b=0;b=ww(8)|0;c[b+4>>2]=ww(a<<2)|0;c[b>>2]=-1;return b|0}function QC(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=a+4|0;g=c[i>>2]|0;j=g+(b*12|0)|0;c[j>>2]=1;g=c[g+(b*12|0)+8>>2]|0;h=g+4|0;d=d+1|0;g=Pl(g)|0;while(1){if(!g)break;f=c[(c[h>>2]|0)+8>>2]|0;if((f|0)<0)f=c[g+8>>2]|0;else f=g+(0-f)|0;f=c[f>>2]|0;if(!(c[(c[i>>2]|0)+(f*12|0)>>2]|0))d=QC(a,f,d,e)|0;g=c[g>>2]|0}c[j>>2]=2;TC(e,b);return d+1|0}function RC(a){a=a|0;var b=0,d=0;b=c[a>>2]|0;if((b|0)==-1)a=-1;else{d=c[(c[a+4>>2]|0)+(b<<2)>>2]|0;c[a>>2]=b+-1;a=d}return a|0}function SC(a){a=a|0;$I(c[a+4>>2]|0);$I(a);return}function TC(a,b){a=a|0;b=b|0;var d=0;d=(c[a>>2]|0)+1|0;c[a>>2]=d;c[(c[a+4>>2]|0)+(d<<2)>>2]=b;return}function UC(a){a=a|0;var d=0,e=0,f=0;e=c[a>>2]|0;c[a+8>>2]=e;c[a+12>>2]=c[a+4>>2];d=a+16|0;a=0;while(1){if((a|0)>=(e|0))break;f=c[d>>2]|0;b[f+(a*40|0)+18>>1]=b[f+(a*40|0)+16>>1]|0;a=a+1|0}return}function VC(a){a=a|0;var d=0,e=0,f=0;d=c[a+8>>2]|0;c[a>>2]=d;c[a+4>>2]=c[a+12>>2];e=a+16|0;a=0;while(1){if((a|0)>=(d|0))break;f=c[e>>2]|0;b[f+(a*40|0)+16>>1]=b[f+(a*40|0)+18>>1]|0;a=a+1|0}d=d+2|0;while(1){if((a|0)>=(d|0))break;b[(c[e>>2]|0)+(a*40|0)+16>>1]=0;a=a+1|0}return}function WC(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=ww(((c[a>>2]|0)*6|0)+(b<<1)<<2)|0;c[a+20>>2]=ww((((c[a>>2]|0)*3|0)+b|0)*24|0)|0;e=c[a>>2]|0;f=a+16|0;a=0;while(1){if((a|0)>=(e|0))break;c[(c[f>>2]|0)+(a*40|0)+28>>2]=d;d=d+24|0;a=a+1|0}e=e+2|0;while(1){if((a|0)>=(e|0))break;c[(c[f>>2]|0)+(a*40|0)+28>>2]=d;d=d+(b<<2)|0;a=a+1|0}return}function XC(a){a=a|0;var b=0;b=ww(24)|0;c[b>>2]=0;c[b+16>>2]=ww(a*40|0)|0;return b|0}function YC(a){a=a|0;var b=0,d=0;d=c[a+16>>2]|0;b=c[a>>2]|0;c[d+(b*40|0)+32>>2]=b;c[a>>2]=b+1;return d+(b*40|0)|0}function ZC(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0,g=0;g=a+4|0;f=c[g>>2]|0;c[g>>2]=f+1;g=c[a+20>>2]|0;a=g+(f*24|0)|0;c[g+(f*24|0)+12>>2]=c[b+32>>2];c[g+(f*24|0)+16>>2]=c[d+32>>2];h[a>>3]=e;c[g+(f*24|0)+8>>2]=0;_C(b,f);_C(d,f);return a|0}function _C(a,d){a=a|0;d=d|0;var e=0,f=0;e=a+16|0;f=b[e>>1]|0;c[(c[a+28>>2]|0)+(f<<16>>16<<2)>>2]=d;b[e>>1]=f+1<<16>>16;return}function $C(a){a=a|0;var b=0;b=a+16|0;$I(c[(c[b>>2]|0)+28>>2]|0);$I(c[b>>2]|0);$I(c[a+20>>2]|0);$I(a);return}function aD(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0;g=c[a>>2]|0;i=a+16|0;f=0;while(1){if((f|0)>=(g|0))break;c[(c[i>>2]|0)+(f*40|0)>>2]=-2147483648;f=f+1|0}oG();a:do if(!(rG(d)|0)){c[d+8>>2]=0;c[d>>2]=0;d=a+20|0;b:while(1){g=tG()|0;if(!g){f=0;break a}c[g>>2]=0-(c[g>>2]|0);if((g|0)==(e|0)){f=0;break a}i=g+16|0;j=g+28|0;f=0;while(1){if((f|0)>=(b[i>>1]|0))continue b;k=(c[d>>2]|0)+((c[(c[j>>2]|0)+(f<<2)>>2]|0)*24|0)|0;l=bD(a,k,g)|0;m=c[l>>2]|0;do if((m|0)<0){n=~~-(+h[k>>3]+ +(c[g>>2]|0));if((m|0)==-2147483648){c[l>>2]=n;if(rG(l)|0){f=1;break a}c[l+8>>2]=g;c[l+12>>2]=k;break}else{if((m|0)>=(n|0))break;uG(l,n);c[l+8>>2]=g;c[l+12>>2]=k;break}}while(0);f=f+1|0}}}else f=1;while(0);return f|0}function bD(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=c[b+12>>2]|0;if((e|0)==(c[d+32>>2]|0))e=c[b+16>>2]|0;return (c[a+16>>2]|0)+(e*40|0)|0}function cD(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;g=c[a>>2]|0;Kr(g,3,b)|0;b=c[g+92>>2]|0;do if(b){d=c[b+16>>2]|0;h=c[d+12>>2]|0;c[a+76>>2]=h;e=c[d+16>>2]|0;c[a+84>>2]=e;f=a+80|0;c[f>>2]=c[d>>2];c[a+88>>2]=c[b+4>>2];d=a+152|0;e=c[d>>2]|c[e>>2];c[d>>2]=e;b=c[g+80>>2]|0;if(!b){c[a+60>>2]=0;b=999;break}else{g=c[b+16>>2]|0;c[a+60>>2]=c[g+12>>2];i=c[g+16>>2]|0;c[a+68>>2]=i;c[a+72>>2]=c[b+4>>2];c[d>>2]=e|c[i>>2];c[a+64>>2]=c[((h|0)==0?f:g)>>2];b=300;break}}else b=999;while(0);return b|0}function dD(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(!(jr(a)|0))if((b|0)!=0?(d=c[b>>2]|0,(d|0)!=0):0){gb[d&127](a);a=0}else a=0;else a=1;return a|0}function eD(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+4>>2]|0,d|0):0)gb[d&127](a);c[(c[a>>2]|0)+24>>2]=0;rr(a);return}function fD(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,g=0.0,i=0.0;e=+h[b+504>>3];f=+h[b+512>>3];i=+h[b+352>>3];if(!(c[b+360>>2]|0)){g=+h[d>>3]+e;d=d+8|0;e=f}else g=-(f+ +h[d+8>>3]);f=+h[b+528>>3]*i*(+h[d>>3]+e);h[a>>3]=+h[b+520>>3]*i*g;h[a+8>>3]=f;return}function gD(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,g=0.0,i=0.0,j=0.0,k=0.0;f=+h[a+504>>3];g=+h[a+512>>3];i=+h[a+352>>3];j=+h[a+520>>3]*i;i=+h[a+528>>3]*i;a:do if(!(c[a+360>>2]|0)){a=0;while(1){if((a|0)>=(e|0))break a;h[d+(a<<4)>>3]=(+h[b+(a<<4)>>3]+f)*j;h[d+(a<<4)+8>>3]=(+h[b+(a<<4)+8>>3]+g)*i;a=a+1|0}}else{a=0;while(1){if((a|0)>=(e|0))break a;k=-(j*(+h[b+(a<<4)+8>>3]+g));h[d+(a<<4)+8>>3]=(+h[b+(a<<4)>>3]+f)*i;h[d+(a<<4)>>3]=k;a=a+1|0}}while(0);return d|0}function hD(a,b){a=a|0;b=b|0;var d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+8>>2]|0,d|0):0)gb[d&127](a);return}function iD(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+12>>2]|0,d|0):0)gb[d&127](a);qr(a);return}function jD(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+24>>2]|0,d|0):0)gb[d&127](a);return}function kD(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+28>>2]|0,d|0):0)gb[d&127](a);return}function lD(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+16>>2]|0,d|0):0){b=c[a+160>>2]|0;kb[d&31](a,c[(c[(c[a>>2]|0)+308>>2]|0)+(b<<2)>>2]|0,b,c[a+156>>2]|0)}return}function mD(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+20>>2]|0,d|0):0)gb[d&127](a);return}function nD(a,b){a=a|0;b=b|0;var d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+32>>2]|0,d|0):0)gb[d&127](a);return}function oD(a,b){a=a|0;b=b|0;var d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+36>>2]|0,d|0):0)gb[d&127](a);return}function pD(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+40>>2]|0,d|0):0)gb[d&127](a);return}function qD(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+44>>2]|0,d|0):0)gb[d&127](a);return}function rD(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+48>>2]|0,d|0):0)gb[d&127](a);return}function sD(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+52>>2]|0,d|0):0)gb[d&127](a);return}function tD(a,b){a=a|0;b=b|0;var d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+56>>2]|0,d|0):0)gb[d&127](a);return}function uD(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+60>>2]|0,d|0):0)gb[d&127](a);return}function vD(a,b){a=a|0;b=b|0;var d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+64>>2]|0,d|0):0)gb[d&127](a);return}function wD(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+68>>2]|0,d|0):0)gb[d&127](a);return}function xD(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;g=c[a+60>>2]|0;if(g|0?(h=c[g+72>>2]|0,h|0):0)lb[h&7](a,b,d,e,f);return}function yD(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+76>>2]|0,d|0):0)gb[d&127](a);return}function zD(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a+60>>2]|0;if(d|0?(e=c[d+80>>2]|0,e|0):0)hb[e&31](a,b);return}function AD(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+84>>2]|0,d|0):0)gb[d&127](a);return}function BD(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;k=l;l=l+48|0;f=k+32|0;h=k;i=k+16|0;j=c[b+60>>2]|0;m=c[e>>2]|0;do if(m|0?a[m>>0]|0:0){m=c[b+16>>2]|0;if(m|0?(c[m+144>>2]|0)==0:0)break;if(!(c[b+152>>2]&8192)){c[f>>2]=c[d>>2];c[f+4>>2]=c[d+4>>2];c[f+8>>2]=c[d+8>>2];c[f+12>>2]=c[d+12>>2];fD(i,b,f);c[h>>2]=c[i>>2];c[h+4>>2]=c[i+4>>2];c[h+8>>2]=c[i+8>>2];c[h+12>>2]=c[i+12>>2]}else{c[h>>2]=c[d>>2];c[h+4>>2]=c[d+4>>2];c[h+8>>2]=c[d+8>>2];c[h+12>>2]=c[d+12>>2]}if(j|0?(g=c[j+88>>2]|0,g|0):0){c[f>>2]=c[h>>2];c[f+4>>2]=c[h+4>>2];c[f+8>>2]=c[h+8>>2];c[f+12>>2]=c[h+12>>2];ib[g&127](b,f,e)}}while(0);l=k;return}function CD(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;f=c[b+60>>2]|0;g=(c[b+16>>2]|0)+16|0;i=XJ(d,58)|0;h=(i|0)!=0;if(h)a[i>>0]=0;if(f|0?(DD(c[b+68>>2]|0,d,g),e=c[f+92>>2]|0,e|0):0)hb[e&31](b,g);if(h)a[i>>0]=58;return}function DD(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+32|0;g=k+16|0;j=k+8|0;i=k;c[d>>2]=b;c[d+32>>2]=5;e=SE(b)|0;f=c[a+16>>2]|0;if(!((f|0)!=0?(wM(e,f,c[a+20>>2]|0,4,37)|0)!=0:0))h=3;a:do if((h|0)==3){switch(TE(b,d,c[a+24>>2]|0)|0){case 0:break a;case 1:break;default:{$l(1,95868,g)|0;break a}}a=xw((sJ(b)|0)+16|0)|0;c[i>>2]=b;qL(a,95833,i)|0;if(Ev(a)|0){c[j>>2]=b;$l(0,95842,j)|0}$I(a)}while(0);l=k;return}function ED(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;f=c[b+60>>2]|0;g=(c[b+16>>2]|0)+56|0;i=XJ(d,58)|0;h=(i|0)!=0;if(h)a[i>>0]=0;if(f|0?(DD(c[b+68>>2]|0,d,g),e=c[f+92>>2]|0,e|0):0)hb[e&31](b,g);if(h)a[i>>0]=58;return}function FD(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0,h=0,i=0,j=0;h=c[a+60>>2]|0;i=a+16|0;j=(c[i>>2]|0)+96|0;if(h|0?(DD(c[a+68>>2]|0,b,j),f=c[h+92>>2]|0,f|0):0)hb[f&31](a,j);j=c[i>>2]|0;c[j+136>>2]=d;g[j+140>>2]=e;return}function GD(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,m=0;m=l;l=l+16|0;k=m;j=c[b+60>>2]|0;b=c[b+16>>2]|0;c[b+160>>2]=d;a:do if((d|0)!=0&(j|0)!=0){j=b+144|0;i=b+152|0;g=b+148|0;b=d;b:while(1){f=b+4|0;b=c[b>>2]|0;if(!b)break a;c:do switch(a[b>>0]|0){case 115:{if(!(yJ(b,95889)|0)){c[j>>2]=3;b=f;continue b}if(!(yJ(b,95910)|0)){e=115;while(1){d=b+1|0;if(!(e<<24>>24))break;b=d;e=a[d>>0]|0}h[i>>3]=+tM(d);b=f;continue b}break}case 100:{if(!(yJ(b,122119)|0)){c[j>>2]=1;b=f;continue b}if(!(yJ(b,122112)|0)){c[j>>2]=2;b=f;continue b}break}case 105:{if(yJ(b,119127)|0?yJ(b,95895)|0:0)break c;c[j>>2]=0;b=f;continue b}case 98:{if(!(yJ(b,95905)|0)){h[i>>3]=2.0;b=f;continue b}break}case 102:{if(!(yJ(b,95923)|0)){c[g>>2]=1;b=f;continue b}break}case 117:{if(!(yJ(b,95930)|0)){c[g>>2]=0;b=f;continue b}break}case 116:{if(!(yJ(b,95939)|0)){b=f;continue b}break}default:{}}while(0);c[k>>2]=b;$l(0,95947,k)|0;b=f}}while(0);l=m;return}function HD(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0;j=l;l=l+32|0;g=j;d=c[a+60>>2]|0;if((d|0?(i=d+96|0,f=c[i>>2]|0,f|0):0)?c[(c[a+16>>2]|0)+144>>2]|0:0){d=b+16|0;h[g>>3]=(+h[d>>3]+ +h[b>>3])*.5;h[g+8>>3]=(+h[b+24>>3]+ +h[b+8>>3])*.5;b=g+16|0;c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];c[b+12>>2]=c[d+12>>2];if(!(c[a+152>>2]&8192)){gD(a,g,g,2)|0;f=c[i>>2]|0}ib[f&127](a,g,e)}l=j;return}function ID(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+48|0;m=o;f=c[a+60>>2]|0;if((f|0?(n=f+100|0,c[n>>2]|0):0)?(k=a+16|0,j=c[k>>2]|0,c[j+144>>2]|0):0){if(!(e&4)){f=e;g=0}else{f=e&-5;e=j+16|0;g=m;h=e;i=g+40|0;do{c[g>>2]=c[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(i|0));g=e;h=j+56|0;i=g+40|0;do{c[g>>2]=c[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(i|0));g=1}if(!(c[a+152>>2]&8192)){e=d+10|0;if((c[42407]|0)<(d|0)){c[42407]=e;e=zw(c[42408]|0,e<<4)|0;c[42408]=e}else e=c[42408]|0;gD(a,b,e,d)|0;kb[c[n>>2]&31](a,e,d,f)}else kb[c[n>>2]&31](a,b,d,f);if(g|0){g=(c[k>>2]|0)+16|0;h=m;i=g+40|0;do{c[g>>2]=c[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(i|0))}}l=o;return}function JD(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+64|0;f=e;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];g=f+32|0;b=b+16|0;c[g>>2]=c[b>>2];c[g+4>>2]=c[b+4>>2];c[g+8>>2]=c[b+8>>2];c[g+12>>2]=c[b+12>>2];h[f+16>>3]=+h[f>>3];h[f+24>>3]=+h[f+40>>3];h[f+48>>3]=+h[g>>3];h[f+56>>3]=+h[f+8>>3];ID(a,f,4,d);l=e;return}function KD(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0;i=c[a+60>>2]|0;do if((i|0?(j=i+104|0,h=c[j>>2]|0,h|0):0)?c[(c[a+16>>2]|0)+144>>2]|0:0){if(c[a+152>>2]&8192|0){mb[h&15](a,b,d,e,f,g&255);break}h=d+10|0;if((c[42407]|0)<(d|0)){c[42407]=h;h=zw(c[42408]|0,h<<4)|0;c[42408]=h}else h=c[42408]|0;gD(a,b,h,d)|0;mb[c[j>>2]&15](a,h,d,e,f,g&255)}while(0);return}function LD(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=c[a+60>>2]|0;do if((e|0?(g=e+108|0,f=c[g>>2]|0,f|0):0)?c[(c[a+16>>2]|0)+144>>2]|0:0){if(c[a+152>>2]&8192|0){ib[f&127](a,b,d);break}e=d+10|0;if((c[42407]|0)<(d|0)){c[42407]=e;e=zw(c[42408]|0,e<<4)|0;c[42408]=e}else e=c[42408]|0;gD(a,b,e,d)|0;ib[c[g>>2]&127](a,e,d)}while(0);return}function MD(b,d){b=b|0;d=d|0;var e=0,f=0;e=c[b+60>>2]|0;if((d|0?!((e|0)==0|(a[d>>0]|0)==0):0)?(f=c[e+112>>2]|0,f|0):0)hb[f&31](b,d);return}function ND(b,d,e,f,g,i){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0.0,k=0.0,m=0,n=0,o=0.0,p=0.0,q=0.0,r=0.0,s=0,t=0.0,u=0.0,v=0.0,w=0.0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;F=l;l=l+112|0;B=F+64|0;E=F;n=F+96|0;x=F+48|0;y=F+32|0;C=c[b+60>>2]|0;if(!b)ma(96061,96e3,691,96011);if(!d)ma(96030,96e3,692,96011);if(!(a[d>>0]|0))ma(96035,96e3,693,96011);D=Mr(d)|0;if(!D){if((C|0)!=0&(Qy(d)|0)!=0?(m=c[C+116>>2]|0,m|0):0)lb[m&7](b,d,e,f,g&255)}else{s=b+432|0;c[B>>2]=c[s>>2];c[B+4>>2]=c[s+4>>2];c[B+8>>2]=c[s+8>>2];c[B+12>>2]=c[s+12>>2];Pr(n,D,B);s=c[n>>2]|0;m=c[n+4>>2]|0;if(!((s|0)<1&(m|0)<1)){n=E+16|0;c[n>>2]=c[e>>2];c[n+4>>2]=c[e+4>>2];c[n+8>>2]=c[e+8>>2];c[n+12>>2]=c[e+12>>2];c[E>>2]=c[e>>2];c[E+4>>2]=c[e+4>>2];c[E+8>>2]=c[e+8>>2];c[E+12>>2]=c[e+12>>2];z=E+8|0;A=E+24|0;d=1;while(1){if((d|0)>=(f|0))break;G=e+(d<<4)|0;v=+h[G>>3];h[E>>3]=+h[(+h[E>>3]>3];w=+h[e+(d<<4)+8>>3];h[z>>3]=+h[(+h[z>>3]>3];h[n>>3]=+h[(+h[n>>3]>v?n:G)>>3];h[A>>3]=+h[(+h[A>>3]>w?n:G)+8>>3];d=d+1|0}k=+h[n>>3];j=+h[E>>3];t=k-j;u=+h[A>>3];v=+h[z>>3];w=u-v;o=+(m|0);p=+(s|0);q=t/p;r=w/o;a:do switch(OD(i)|0){case 1:if(q>3]=j;k=k-t;h[n>>3]=k}if(o>3]=v+w;h[A>>3]=u-w}if(!(c[b+152>>2]&8192)){c[B>>2]=c[E>>2];c[B+4>>2]=c[E+4>>2];c[B+8>>2]=c[E+8>>2];c[B+12>>2]=c[E+12>>2];fD(x,b,B);c[E>>2]=c[x>>2];c[E+4>>2]=c[x+4>>2];c[E+8>>2]=c[x+8>>2];c[E+12>>2]=c[x+12>>2];c[B>>2]=c[n>>2];c[B+4>>2]=c[n+4>>2];c[B+8>>2]=c[n+8>>2];c[B+12>>2]=c[n+12>>2];fD(y,b,B);c[n>>2]=c[y>>2];c[n+4>>2]=c[y+4>>2];c[n+8>>2]=c[y+8>>2];c[n+12>>2]=c[y+12>>2];k=+h[n>>3];j=+h[E>>3]}if(j>k){h[E>>3]=k;h[n>>3]=j}j=+h[z>>3];k=+h[A>>3];if(j>k){h[z>>3]=k;h[A>>3]=j}if(C|0){G=c[b+72>>2]|0;c[B>>2]=c[E>>2];c[B+4>>2]=c[E+4>>2];c[B+8>>2]=c[E+8>>2];c[B+12>>2]=c[E+12>>2];c[B+16>>2]=c[E+16>>2];c[B+20>>2]=c[E+20>>2];c[B+24>>2]=c[E+24>>2];c[B+28>>2]=c[E+28>>2];QD(b,D,B,g,G)}}}l=F;return}function OD(b){b=b|0;if(a[b>>0]|0)if(jK(b,96043)|0)if(jK(b,96049)|0)if(!(jK(b,96056)|0))b=4;else b=(JA(b)|0)<<24>>24!=0&1;else b=3;else b=2;else b=0;return b|0}function PD(a,b){a=a|0;b=+b;if(c[a+60>>2]|0)h[(c[a+16>>2]|0)+152>>3]=b;return}function QD(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+176|0;k=n+8|0;j=n;h=n+40|0;if(!b)ma(96061,96065,52,96079);if(!d)ma(96091,96065,53,96079);i=c[d+8>>2]|0;if(!i)ma(96094,96065,54,96079);if(!(a[i>>0]|0))ma(96103,96065,55,96079);yK(h,c[d+28>>2]|0)|0;i=h+(sJ(h)|0)|0;a[i>>0]=58;a[i+1>>0]=0;JL(h,g)|0;if((RD(b,h)|0)==999){c[j>>2]=h;$l(0,96115,j)|0}g=c[b+92>>2]|0;if(g|0?(m=c[g>>2]|0,m|0):0){c[k>>2]=c[e>>2];c[k+4>>2]=c[e+4>>2];c[k+8>>2]=c[e+8>>2];c[k+12>>2]=c[e+12>>2];c[k+16>>2]=c[e+16>>2];c[k+20>>2]=c[e+20>>2];c[k+24>>2]=c[e+24>>2];c[k+28>>2]=c[e+28>>2];kb[m&31](b,d,k,f)}l=n;return}function RD(a,b){a=a|0;b=b|0;b=Kr(c[a>>2]|0,4,b)|0;if(!b)b=999;else{b=c[b+16>>2]|0;c[a+92>>2]=c[b+12>>2];c[a+96>>2]=c[b>>2];b=300}return b|0}function SD(a){a=a|0;return 1}function TD(b){b=b|0;var c=0;a[b+536>>0]=0;c=b+336|0;h[c>>3]=+h[c>>3]+10.0/+h[b+352>>3];a[b+537>>0]=1;return 0}function UD(b){b=b|0;var c=0;a[b+536>>0]=0;c=b+336|0;h[c>>3]=+h[c>>3]-10.0/+h[b+352>>3];a[b+537>>0]=1;return 0}function VD(b){b=b|0;var c=0;a[b+536>>0]=0;c=b+344|0;h[c>>3]=+h[c>>3]-10.0/+h[b+352>>3];a[b+537>>0]=1;return 0}function WD(b){b=b|0;var c=0;a[b+536>>0]=0;c=b+344|0;h[c>>3]=+h[c>>3]+10.0/+h[b+352>>3];a[b+537>>0]=1;return 0}function XD(b){b=b|0;var c=0;a[b+536>>0]=0;c=b+352|0;h[c>>3]=+h[c>>3]*1.1;a[b+537>>0]=1;return 0}function YD(b){b=b|0;var c=0;a[b+536>>0]=0;c=b+352|0;h[c>>3]=+h[c>>3]*.9090909090909091;a[b+537>>0]=1;return 0}function ZD(b){b=b|0;var d=0,e=0,f=0,g=0.0,i=0.0;e=b+536|0;d=(a[e>>0]|0)==0;a[e>>0]=d&1;if(d){d=c[b+448>>2]|0;e=c[b+452>>2]|0;i=+(d>>>0);g=+(e>>>0);f=i/+(d|0)>3]=(f?i:g)/+((f?d:e)|0);e=b+336|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;a[b+537>>0]=1}return 0}function _D(b){b=b|0;var d=0,e=0;d=c[(c[b>>2]|0)+168>>2]|0;e=b+580|0;if(!(c[e>>2]|0)){c[e>>2]=d;e=(c[d+16>>2]|0)+112|0;a[e>>0]=a[e>>0]|2;oE(b,d)}hu(b,d);a[b+540>>0]=1;return}function $D(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0.0,i=0.0,j=0,k=0;k=l;l=l+16|0;f=k;switch(d|0){case 1:{c[f>>2]=c[e>>2];c[f+4>>2]=c[e+4>>2];c[f+8>>2]=c[e+8>>2];c[f+12>>2]=c[e+12>>2];hE(b,f);nE(b);a[b+538>>0]=1;a[b+541>>0]=1;j=13;break}case 2:{a[b+538>>0]=1;a[b+541>>0]=2;j=13;break}case 3:{c[f>>2]=c[e>>2];c[f+4>>2]=c[e+4>>2];c[f+8>>2]=c[e+8>>2];c[f+12>>2]=c[e+12>>2];hE(b,f);a[b+538>>0]=1;a[b+541>>0]=3;j=13;break}case 4:{a[b+536>>0]=0;if(!(c[b+360>>2]|0)){f=b+352|0;i=+h[f>>3];d=b+336|0;h[d>>3]=(+h[e>>3]-+((c[b+448>>2]|0)>>>0)*.5)*.10000000000000009/(+h[b+520>>3]*i)+ +h[d>>3];g=+h[e+8>>3]-+((c[b+452>>2]|0)>>>0)*.5;d=b+528|0}else{f=b+352|0;i=+h[f>>3];d=b+336|0;h[d>>3]=+h[d>>3]-(+h[e+8>>3]-+((c[b+452>>2]|0)>>>0)*.5)*.10000000000000009/(+h[b+528>>3]*i);g=+h[e>>3]-+((c[b+448>>2]|0)>>>0)*.5;d=b+520|0}j=b+344|0;h[j>>3]=g*.10000000000000009/(+h[d>>3]*i)+ +h[j>>3];h[f>>3]=i*1.1;j=13;break}case 5:{a[b+536>>0]=0;j=b+352|0;i=+h[j>>3]*.9090909090909091;h[j>>3]=i;if(!(c[b+360>>2]|0)){f=b+336|0;h[f>>3]=+h[f>>3]-(+h[e>>3]-+((c[b+448>>2]|0)>>>0)*.5)*.10000000000000009/(+h[b+520>>3]*i);g=+h[e+8>>3]-+((c[b+452>>2]|0)>>>0)*.5;f=b+528|0}else{f=b+336|0;h[f>>3]=(+h[e+8>>3]-+((c[b+452>>2]|0)>>>0)*.5)*.10000000000000009/(+h[b+528>>3]*i)+ +h[f>>3];g=+h[e>>3]-+((c[b+448>>2]|0)>>>0)*.5;f=b+520|0}j=b+344|0;h[j>>3]=+h[j>>3]-g*.10000000000000009/(+h[f>>3]*i);j=13;break}default:{}}if((j|0)==13)a[b+537>>0]=1;b=b+560|0;c[b>>2]=c[e>>2];c[b+4>>2]=c[e+4>>2];c[b+8>>2]=c[e+8>>2];c[b+12>>2]=c[e+12>>2];l=k;return}function aE(b,c,d){b=b|0;c=c|0;d=d|0;a[b+538>>0]=0;a[b+541>>0]=0;return}function bE(b,d){b=b|0;d=d|0;var e=0,f=0.0,g=0.0,i=0,j=0.0,k=0;k=l;l=l+16|0;e=k;i=b+560|0;j=(+h[d>>3]-+h[i>>3])/+h[b+520>>3];g=(+h[d+8>>3]-+h[b+568>>3])/+h[b+528>>3];if(!(+B(+j)<.0001&+B(+g)<.0001)){switch(a[b+541>>0]|0){case 0:{c[e>>2]=c[d>>2];c[e+4>>2]=c[d+4>>2];c[e+8>>2]=c[d+8>>2];c[e+12>>2]=c[d+12>>2];hE(b,e);break}case 2:{f=+h[b+352>>3];if(!(c[b+360>>2]|0)){e=b+336|0;h[e>>3]=+h[e>>3]-j/f;e=b+344|0;h[e>>3]=+h[e>>3]-g/f}else{e=b+336|0;h[e>>3]=+h[e>>3]-g/f;e=b+344|0;h[e>>3]=+h[e>>3]+j/f}a[b+537>>0]=1;break}default:{}}c[i>>2]=c[d>>2];c[i+4>>2]=c[d+4>>2];c[i+8>>2]=c[d+8>>2];c[i+12>>2]=c[d+12>>2]}l=k;return}function cE(a,b,c){a=a|0;b=b|0;c=c|0;return}function dE(a){a=a|0;return}function eE(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;j=c[b>>2]|0;if(d){d=bM(d,123632)|0;if(d|0){i=fr(d,0)|0;ML(d)|0;f=5}}else{i=fr(c[13853]|0,0)|0;f=5}if((f|0)==5?i|0:0){g=j+168|0;d=c[g>>2]|0;if(d|0){f=c[j+172>>2]|0;if((f|0)!=0?(h=c[f+4>>2]|0,(h|0)!=0):0){gb[h&127](d);d=c[g>>2]|0}jw(d);mn(c[g>>2]|0)|0}To(i,0,122277,280,1);To(i,1,122241,304,1);To(i,2,122254,176,1);c[g>>2]=i;c[(c[i+16>>2]|0)+144>>2]=j;if((ms(j,i,e)|0)!=-1){c[b+580>>2]=0;c[b+576>>2]=0;a[b+537>>0]=1}}return}function fE(a,b){a=a|0;b=b|0;a=c[a>>2]|0;ms(a,c[a+168>>2]|0,b)|0;return}function gE(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;g=c[a>>2]|0;f=g+160|0;e=c[f>>2]|0;if((e|0)!=0?(c[g+164>>2]|0)==0:0){i=g+192|0;h=c[i>>2]|0;c[f>>2]=0;c[i>>2]=0;f=h}else{f=0;e=0}os(g,c[g+168>>2]|0,b,d)|0;if(e|0){i=c[a>>2]|0;c[i+160>>2]=e;c[i+192>>2]=f}return}function hE(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,i=0.0,j=0.0,k=0.0,m=0;f=l;l=l+80|0;e=f+48|0;g=f;m=f+32|0;c[e>>2]=c[d>>2];c[e+4>>2]=c[d+4>>2];c[e+8>>2]=c[d+8>>2];c[e+12>>2]=c[d+12>>2];iE(m,b,e);k=+h[m>>3];j=+h[m+8>>3];i=1.0/+h[b+352>>3];h[g+16>>3]=i+k;h[g+24>>3]=i+j;h[g>>3]=k-i;h[g+8>>3]=j-i;d=c[(c[b>>2]|0)+168>>2]|0;c[e>>2]=c[g>>2];c[e+4>>2]=c[g+4>>2];c[e+8>>2]=c[g+8>>2];c[e+12>>2]=c[g+12>>2];c[e+16>>2]=c[g+16>>2];c[e+20>>2]=c[g+20>>2];c[e+24>>2]=c[g+24>>2];c[e+28>>2]=c[g+28>>2];d=jE(d,e)|0;e=b+576|0;if((d|0)!=(c[e>>2]|0)){kE(b);c[e>>2]=d;lE(b);a[b+537>>0]=1}l=f;return}function iE(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,g=0.0,i=0;if(!(c[b+360>>2]|0)){e=+h[b+352>>3];f=+h[d+8>>3];g=e;i=b+528|0;e=+h[d>>3]/(+h[b+520>>3]*e)-+h[b+504>>3]}else{e=+h[b+352>>3];f=-+h[d>>3];g=e;i=b+520|0;e=+h[d+8>>3]/(+h[b+528>>3]*e)-+h[b+504>>3]}g=f/(+h[i>>3]*g)-+h[b+512>>3];h[a>>3]=e;h[a+8>>3]=g;return}function jE(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=l;l=l+32|0;f=g;e=eo(a)|0;a:while(1){if(!e){e=9;break}d=Qm(a,e)|0;while(1){if(!d)break;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];c[f+16>>2]=c[b+16>>2];c[f+20>>2]=c[b+20>>2];c[f+24>>2]=c[b+24>>2];c[f+28>>2]=c[b+28>>2];if((EB(d,f)|0)<<24>>24){e=6;break a}d=Sm(a,d)|0}e=fo(a,e)|0}do if((e|0)!=6)if((e|0)==9){d=go(a)|0;while(1){if(!d)break;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];c[f+16>>2]=c[b+16>>2];c[f+20>>2]=c[b+20>>2];c[f+24>>2]=c[b+24>>2];c[f+28>>2]=c[b+28>>2];if((BB(d,f)|0)<<24>>24){e=12;break}d=ho(a,d)|0}if((e|0)==12)break;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];c[f+16>>2]=c[b+16>>2];c[f+20>>2]=c[b+20>>2];c[f+24>>2]=c[b+24>>2];c[f+28>>2]=c[b+28>>2];d=mE(a,f)|0;if(!d){d=a;break}else break}while(0);l=g;return d|0}function kE(b){b=b|0;var d=0;d=c[b+576>>2]|0;a:do if(d|0)switch(Do(d)|0){case 0:{d=(c[d+16>>2]|0)+112|0;a[d>>0]=a[d>>0]&-2;break a}case 1:{d=(c[d+16>>2]|0)+117|0;a[d>>0]=a[d>>0]&-2;break a}case 2:{d=(c[d+16>>2]|0)+115|0;a[d>>0]=a[d>>0]&-2;break a}default:break a}while(0);c[b+584>>2]=0;return}function lE(b){b=b|0;var d=0,e=0;e=b+584|0;d=c[e>>2]|0;if(d|0){$I(d);c[e>>2]=0}d=c[b+576>>2]|0;a:do if(d|0)switch(Do(d)|0){case 0:{b=(c[d+16>>2]|0)+112|0;a[b>>0]=a[b>>0]|1;b=zm(d,0,96229,0)|0;if(!b)break a;c[e>>2]=rw(Km(d,b)|0,d)|0;break a}case 1:{b=(c[d+16>>2]|0)+117|0;a[b>>0]=a[b>>0]|1;b=zm(so(d)|0,1,96229,0)|0;if(!b)break a;c[e>>2]=rw(Km(d,b)|0,d)|0;break a}case 2:{b=(c[d+16>>2]|0)+115|0;a[b>>0]=a[b>>0]|1;b=zm(so(c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0)|0,2,96229,0)|0;if(!b)break a;c[e>>2]=rw(Km(d,b)|0,d)|0;break a}default:break a}while(0);return}function mE(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0.0,o=0.0;m=l;l=l+32|0;e=m;g=c[a+16>>2]|0;i=c[g+180>>2]|0;j=g+184|0;d=1;while(1){if((d|0)>(i|0)){k=4;break}f=c[(c[j>>2]|0)+(d<<2)>>2]|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];c[e+16>>2]=c[b+16>>2];c[e+20>>2]=c[b+20>>2];c[e+24>>2]=c[b+24>>2];c[e+28>>2]=c[b+28>>2];f=mE(f,e)|0;if(!f)d=d+1|0;else{a=f;break}}do if((k|0)==4){o=+h[g+24>>3];n=+h[g+40>>3];if(((+h[b+16>>3]>=+h[g+16>>3]?+h[g+32>>3]>=+h[b>>3]:0)?+h[b+24>>3]>=o:0)?n>=+h[b+8>>3]:0)break;a=0}while(0);l=m;return a|0}function nE(b){b=b|0;var d=0,e=0,f=0;f=b+580|0;d=c[f>>2]|0;a:do if(d|0)switch(Do(d)|0){case 0:{e=(c[d+16>>2]|0)+112|0;a[e>>0]=a[e>>0]&-7|4;break a}case 1:{e=(c[d+16>>2]|0)+117|0;a[e>>0]=a[e>>0]&-7|4;break a}case 2:{e=(c[d+16>>2]|0)+115|0;a[e>>0]=a[e>>0]&-7|4;break a}default:break a}while(0);d=b+588|0;e=c[d>>2]|0;if(e|0){$I(e);c[d>>2]=0}d=c[b+576>>2]|0;c[f>>2]=d;b:do if(d|0)switch(Do(d)|0){case 0:{f=(c[d+16>>2]|0)+112|0;a[f>>0]=a[f>>0]|2;oE(b,d);break b}case 1:{f=(c[d+16>>2]|0)+117|0;a[f>>0]=a[f>>0]|2;pE(b,d);break b}case 2:{f=(c[d+16>>2]|0)+115|0;a[f>>0]=a[f>>0]|2;qE(b,d);break b}default:break b}while(0);return}function oE(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=a+592|0;do if((to(b)|0)==(b|0))if(!(rn(b)|0)){Fr(d,0,96286);break}else{Fr(d,0,96278);break}else Fr(d,0,96292);while(0);Fr(d,1,En(b)|0);c[a+596>>2]=2;f=a+604|0;d=0;e=2;while(1){d=Em(b,0,d)|0;if(!d)break;Fr(f,e,c[d+8>>2]|0);Fr(f,e+1|0,Km(b,d)|0);Fr(f,e+2|0,0);e=e+3|0}c[a+608>>2]=e;d=zm(b,0,96264,0)|0;if(!d){d=zm(b,0,96269,0)|0;if(d|0)g=11}else g=11;if((g|0)==11)c[a+588>>2]=rw(Km(b,d)|0,b)|0;return}function pE(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;f=a+592|0;Fr(f,0,96273);Fr(f,1,En(b)|0);c[a+596>>2]=2;f=a+604|0;g=to(so(b)|0)|0;e=2;d=0;while(1){d=Em(g,1,d)|0;if(!d)break;Fr(f,e,c[d+8>>2]|0);Fr(f,e|1,Km(b,d)|0);e=e+2|0}c[a+608>>2]=e;d=zm(so(b)|0,1,96264,0)|0;if(!d){d=zm(so(b)|0,1,96269,0)|0;if(d|0)h=6}else h=6;if((h|0)==6)c[a+588>>2]=rw(Km(b,d)|0,b)|0;return}function qE(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;h=a+592|0;Fr(h,0,96237);k=b+48|0;Fr(h,1,En(c[((c[b>>2]&3|0)==3?b:k)+40>>2]|0)|0);k=(rn(so(c[((c[b>>2]&3|0)==3?b:k)+40>>2]|0)|0)|0)!=0;Fr(h,3,k?122546:122549);k=b+-48|0;Fr(h,4,En(c[((c[b>>2]&3|0)==2?b:k)+40>>2]|0)|0);c[a+596>>2]=7;i=a+604|0;j=to(so(c[((c[b>>2]&3|0)==2?b:k)+40>>2]|0)|0)|0;g=7;d=0;a:while(1){while(1){d=Em(j,2,d)|0;if(!d)break a;e=d+8|0;f=c[e>>2]|0;if(!(yJ(f,96242)|0)){l=5;break}if(!(yJ(f,96251)|0)){l=7;break}if(yJ(f,96260)|0)break;Fr(h,6,Km(b,d)|0)}if((l|0)==5){l=0;Fr(h,2,Km(b,d)|0)}else if((l|0)==7){l=0;Fr(h,5,Km(b,d)|0)}Fr(i,g,c[e>>2]|0);Fr(i,g+1|0,Km(b,d)|0);g=g+2|0}c[a+608>>2]=g;d=zm(so(c[((c[b>>2]&3|0)==2?b:k)+40>>2]|0)|0,2,96264,0)|0;if(!d){d=zm(so(c[((c[b>>2]&3|0)==2?b:k)+40>>2]|0)|0,2,96269,0)|0;if(d|0)l=13}else l=13;if((l|0)==13)c[a+588>>2]=rw(Km(b,d)|0,b)|0;return}function rE(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=sE(a,b,c[d>>2]|0)|0;d=c[d+4>>2]|0;while(1){f=c[d+4>>2]|0;if(!f)break;b=0;while(1){e=c[f+(b*20|0)+4>>2]|0;if(!e)break;Ir(a,c[d>>2]|0,e,c[f+(b*20|0)+8>>2]|0,g,f+(b*20|0)|0)|0;b=b+1|0}d=d+8|0}return}function sE(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=xw(12)|0;if(!b)b=0;else b=HL(b)|0;c[e+4>>2]=b;c[e+8>>2]=HL(d)|0;d=a+100|0;c[e>>2]=c[d>>2];c[d>>2]=e;return e|0}function tE(b,c){b=b|0;c=c|0;uE(b);a[b+44>>0]=0;vE(b)|0;uA(b)|0;return}function uE(b){b=b|0;var d=0,e=0;d=c[b+32>>2]|0;a:do if(d|0)while(1){e=c[d>>2]|0;if(!e)break a;if((a[e>>0]|0)==103?iL(e,96301)|0:0)rE(b,0,c[d+4>>2]|0);d=d+8|0}while(0);return}function vE(a){a=a|0;var b=0;b=Kr(a,2,96314)|0;if(!b)a=999;else{c[a+148>>2]=c[(c[b+16>>2]|0)+12>>2];a=300}return a|0}function wE(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;a=c[a+148>>2]|0;if((a|0)!=0?(e=c[a>>2]|0,(e|0)!=0):0)a=ab[e&63](b,d)|0;else a=0;return a|0}function xE(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;return (c[b>>2]|0)-(c[d>>2]|0)|0}function yE(a){a=a|0;var b=0.0,d=0.0;a=c[a+16>>2]|0;d=+h[a+16>>3];b=+h[a+24>>3];return (zE(~~(d>b?d:b)>>>0)|0)+1|0}function zE(a){a=a|0;var b=0,c=0;if(!a)a=-1;else{c=a>>>0>65535;a=c?a>>>16:a;c=c?16:0;b=a>>>0>255;a=b?a>>>8:a;c=b?c|8:c;b=a>>>0>15;a=b?a>>>4:a;c=b?c|4:c;b=a>>>0>3;a=(b?c|2:c)+((b?a>>>2:a)>>>0>1&1)|0}return a|0}function AE(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0.0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;r=l;l=l+32|0;q=r;p=BE(b,d,e,f,g)|0;e=CE(p)|0;if((e|0)>=0){n=q+16|0;o=q+24|0;m=q+8|0;k=g+32|0;e=0;g=0;while(1){if((g|0)>=(d|0))break;f=b+(g*40|0)+32|0;do if(c[f>>2]|0){DE(q,p,b+(g*40|0)|0);i=+h[n>>3];j=+h[o>>3];if(!(c[q>>2]|0)){a[(c[f>>2]|0)+36>>0]=1;break}if(+h[m>>3]==0.0){f=c[f>>2]|0;h[f+16>>3]=i;h[f+24>>3]=j;a[f+36>>0]=1;break}if((a[k>>0]|0)==1){f=c[f>>2]|0;h[f+16>>3]=i;h[f+24>>3]=j;a[f+36>>0]=1}else e=1}while(0);g=g+1|0}EE(p)}l=r;return e|0}function BE(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;g=ww(28)|0;j=Rl(24896,c[4348]|0)|0;h=g+20|0;c[h>>2]=j;do if(j){j=kH()|0;c[g+24>>2]=j;if(!j){YL(96532,14,1,c[13918]|0)|0;i=6;break}else{c[g>>2]=a;c[g+4>>2]=b;c[g+8>>2]=d;c[g+12>>2]=e;c[g+16>>2]=f;break}}else{YL(96532,14,1,c[13918]|0)|0;i=6}while(0);if((i|0)==6){a=c[h>>2]|0;if(a|0)Ll(a)|0;a=c[g+24>>2]|0;if(a|0)mH(a)|0;$I(g);g=0}return g|0}function CE(a){a=a|0;var b=0;b=NE(a)|0;if((b|0)>=0){OE(a);PE(a);b=Ll(c[a+20>>2]|0)|0}return b|0}function DE(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,g=0,i=0.0,j=0,k=0.0,m=0,n=0,o=0,p=0,q=0.0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0.0,L=0,M=0;M=l;l=l+464|0;J=M+416|0;L=M+400|0;G=M+384|0;m=M+352|0;n=M+320|0;o=M+288|0;p=M+256|0;r=M+224|0;s=M+192|0;t=M+160|0;u=M+128|0;v=M+96|0;x=M+64|0;y=M+32|0;H=M;z=c[d+32>>2]|0;e=+h[z>>3];C=d+16|0;A=(e*2.0+ +h[C>>3])*.125;D=z+8|0;I=d+24|0;i=+h[I>>3];K=(+h[D>>3]*2.0+i)*.5;if(!z)ma(96325,96335,445,96345);f=J;g=f+36|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));B=z+16|0;h[B>>3]=+h[d>>3]-e;E=d+8|0;F=z+24|0;h[F>>3]=i+ +h[E>>3];FE(m,b,d,J);j=c[m>>2]|0;f=c[m+4>>2]|0;e=+h[m+8>>3];m=m+16|0;c[L>>2]=c[m>>2];c[L+4>>2]=c[m+4>>2];c[L+8>>2]=c[m+8>>2];c[L+12>>2]=c[m+12>>2];a:do if(!j){c[a>>2]=0;c[a+4>>2]=f;h[a+8>>3]=e;a=a+16|0;c[a>>2]=c[L>>2];c[a+4>>2]=c[L+4>>2];c[a+8>>2]=c[L+8>>2];c[a+12>>2]=c[L+12>>2]}else{h[F>>3]=+h[E>>3];FE(n,b,d,J);g=c[n>>2]|0;m=c[n+4>>2]|0;i=+h[n+8>>3];n=n+16|0;c[G>>2]=c[n>>2];c[G+4>>2]=c[n+4>>2];c[G+8>>2]=c[n+8>>2];c[G+12>>2]=c[n+12>>2];if(!g){c[a>>2]=0;c[a+4>>2]=m;h[a+8>>3]=i;a=a+16|0;c[a>>2]=c[G>>2];c[a+4>>2]=c[G+4>>2];c[a+8>>2]=c[G+8>>2];c[a+12>>2]=c[G+12>>2];break}if(i>2]=c[G>>2];c[L+4>>2]=c[G+4>>2];c[L+8>>2]=c[G+8>>2];c[L+12>>2]=c[G+12>>2];f=m;e=i}else g=j;h[F>>3]=+h[E>>3]-+h[D>>3];FE(o,b,d,J);m=c[o>>2]|0;j=c[o+4>>2]|0;i=+h[o+8>>3];o=o+16|0;c[G>>2]=c[o>>2];c[G+4>>2]=c[o+4>>2];c[G+8>>2]=c[o+8>>2];c[G+12>>2]=c[o+12>>2];if(!m){c[a>>2]=0;c[a+4>>2]=j;h[a+8>>3]=i;a=a+16|0;c[a>>2]=c[G>>2];c[a+4>>2]=c[G+4>>2];c[a+8>>2]=c[G+8>>2];c[a+12>>2]=c[G+12>>2];break}if(i>2]=c[G>>2];c[L+4>>2]=c[G+4>>2];c[L+8>>2]=c[G+8>>2];c[L+12>>2]=c[G+12>>2];f=j;e=i}else m=g;h[B>>3]=+h[d>>3];h[F>>3]=+h[I>>3]+ +h[E>>3];FE(p,b,d,J);g=c[p>>2]|0;j=c[p+4>>2]|0;i=+h[p+8>>3];p=p+16|0;c[G>>2]=c[p>>2];c[G+4>>2]=c[p+4>>2];c[G+8>>2]=c[p+8>>2];c[G+12>>2]=c[p+12>>2];if(!g){c[a>>2]=0;c[a+4>>2]=j;h[a+8>>3]=i;a=a+16|0;c[a>>2]=c[G>>2];c[a+4>>2]=c[G+4>>2];c[a+8>>2]=c[G+8>>2];c[a+12>>2]=c[G+12>>2];break}if(i>2]=c[G>>2];c[L+4>>2]=c[G+4>>2];c[L+8>>2]=c[G+8>>2];c[L+12>>2]=c[G+12>>2];m=g;f=j;e=i}h[F>>3]=+h[E>>3]-+h[D>>3];FE(r,b,d,J);g=c[r>>2]|0;j=c[r+4>>2]|0;i=+h[r+8>>3];r=r+16|0;c[G>>2]=c[r>>2];c[G+4>>2]=c[r+4>>2];c[G+8>>2]=c[r+8>>2];c[G+12>>2]=c[r+12>>2];if(!g){c[a>>2]=0;c[a+4>>2]=j;h[a+8>>3]=i;a=a+16|0;c[a>>2]=c[G>>2];c[a+4>>2]=c[G+4>>2];c[a+8>>2]=c[G+8>>2];c[a+12>>2]=c[G+12>>2];break}if(i>2]=c[G>>2];c[L+4>>2]=c[G+4>>2];c[L+8>>2]=c[G+8>>2];c[L+12>>2]=c[G+12>>2];m=g;f=j;e=i}h[B>>3]=+h[C>>3]+ +h[d>>3];h[F>>3]=+h[I>>3]+ +h[E>>3];FE(s,b,d,J);g=c[s>>2]|0;j=c[s+4>>2]|0;i=+h[s+8>>3];s=s+16|0;c[G>>2]=c[s>>2];c[G+4>>2]=c[s+4>>2];c[G+8>>2]=c[s+8>>2];c[G+12>>2]=c[s+12>>2];if(!g){c[a>>2]=0;c[a+4>>2]=j;h[a+8>>3]=i;a=a+16|0;c[a>>2]=c[G>>2];c[a+4>>2]=c[G+4>>2];c[a+8>>2]=c[G+8>>2];c[a+12>>2]=c[G+12>>2];break}if(i>2]=c[G>>2];c[L+4>>2]=c[G+4>>2];c[L+8>>2]=c[G+8>>2];c[L+12>>2]=c[G+12>>2];m=g;f=j;e=i}h[F>>3]=+h[E>>3];FE(t,b,d,J);g=c[t>>2]|0;j=c[t+4>>2]|0;i=+h[t+8>>3];t=t+16|0;c[G>>2]=c[t>>2];c[G+4>>2]=c[t+4>>2];c[G+8>>2]=c[t+8>>2];c[G+12>>2]=c[t+12>>2];if(!g){c[a>>2]=0;c[a+4>>2]=j;h[a+8>>3]=i;a=a+16|0;c[a>>2]=c[G>>2];c[a+4>>2]=c[G+4>>2];c[a+8>>2]=c[G+8>>2];c[a+12>>2]=c[G+12>>2];break}if(i>2]=c[G>>2];c[L+4>>2]=c[G+4>>2];c[L+8>>2]=c[G+8>>2];c[L+12>>2]=c[G+12>>2];m=g;f=j;e=i}h[F>>3]=+h[E>>3]-+h[D>>3];FE(u,b,d,J);g=c[u>>2]|0;j=c[u+4>>2]|0;i=+h[u+8>>3];u=u+16|0;c[G>>2]=c[u>>2];c[G+4>>2]=c[u+4>>2];c[G+8>>2]=c[u+8>>2];c[G+12>>2]=c[u+12>>2];if(!g){c[a>>2]=0;c[a+4>>2]=j;h[a+8>>3]=i;a=a+16|0;c[a>>2]=c[G>>2];c[a+4>>2]=c[G+4>>2];c[a+8>>2]=c[G+8>>2];c[a+12>>2]=c[G+12>>2];break}if(i>2]=c[G>>2];c[L+4>>2]=c[G+4>>2];c[L+8>>2]=c[G+8>>2];c[L+12>>2]=c[G+12>>2];f=j;e=i}else g=m;j=(c[J+28>>2]|0)==0;do if(!(c[J+24>>2]|0))if(j){if(c[J+32>>2]|0){w=38;break}if(!((c[J+12>>2]|0)==0&(c[J>>2]|0)==0))w=38}else w=46;else if(j)w=38;else w=46;while(0);b:do if((w|0)==38)if(!(c[J+32>>2]|0)){h[B>>3]=+h[d>>3]-+h[z>>3];p=v+4|0;r=v+8|0;s=v+16|0;m=F;j=E;i=+h[I>>3];c:while(1){while(1){h[m>>3]=+h[j>>3]+i;if(!(+h[B>>3]<=+h[C>>3]+ +h[d>>3])){w=46;break b}FE(v,b,d,J);n=c[v>>2]|0;o=c[p>>2]|0;k=+h[r>>3];c[G>>2]=c[s>>2];c[G+4>>2]=c[s+4>>2];c[G+8>>2]=c[s+8>>2];c[G+12>>2]=c[s+12>>2];if(!n)break c;if(k>2]=c[G>>2];c[L+4>>2]=c[G+4>>2];c[L+8>>2]=c[G+8>>2];c[L+12>>2]=c[G+12>>2];m=B;j=B;i=A;g=n;f=o;e=k}c[a>>2]=0;c[a+4>>2]=o;h[a+8>>3]=k;a=a+16|0;c[a>>2]=c[G>>2];c[a+4>>2]=c[G+4>>2];c[a+8>>2]=c[G+8>>2];c[a+12>>2]=c[G+12>>2];break a}else w=46;while(0);d:do if((w|0)==46)if((c[J+12>>2]|0)==0&(c[J>>2]|0)==0){h[B>>3]=+h[d>>3]-+h[z>>3];k=+h[E>>3];n=x+4|0;o=x+8|0;p=x+16|0;i=k;k=+h[I>>3]+k;while(1){h[F>>3]=k;if(!(k>=i-+h[D>>3]))break d;FE(x,b,d,J);j=c[x>>2]|0;m=c[n>>2]|0;i=+h[o>>3];c[G>>2]=c[p>>2];c[G+4>>2]=c[p+4>>2];c[G+8>>2]=c[p+8>>2];c[G+12>>2]=c[p+12>>2];if(!j)break;if(i>2]=c[G>>2];c[L+4>>2]=c[G+4>>2];c[L+8>>2]=c[G+8>>2];c[L+12>>2]=c[G+12>>2];g=j;f=m;e=i}i=+h[E>>3];k=+h[F>>3]-K}c[a>>2]=0;c[a+4>>2]=m;h[a+8>>3]=i;a=a+16|0;c[a>>2]=c[G>>2];c[a+4>>2]=c[G+4>>2];c[a+8>>2]=c[G+8>>2];c[a+12>>2]=c[G+12>>2];break a}while(0);i=+h[d>>3];k=+h[C>>3]+i;h[B>>3]=k;q=+h[D>>3];h[F>>3]=+h[E>>3]-q;j=c[J+4>>2]|0;do if(!(c[J+8>>2]|0)){m=c[J>>2]|0;if(!((j|0)==0&(m|0)==0)){w=59;break}if(c[J+20>>2]|0){j=0;m=0;w=59;break}if(c[J+32>>2]|0){j=0;m=0;w=59}}else{m=c[J>>2]|0;w=59}while(0);e:do if((w|0)==59){f:do if((j|0)==0&(m|0)==0){h[B>>3]=k;p=y+4|0;r=y+8|0;s=y+16|0;m=F;j=E;i=q;g:while(1){while(1){h[m>>3]=+h[j>>3]-i;i=+h[d>>3];if(!(+h[B>>3]>=i-+h[z>>3]))break f;FE(y,b,d,J);n=c[y>>2]|0;o=c[p>>2]|0;k=+h[r>>3];c[G>>2]=c[s>>2];c[G+4>>2]=c[s+4>>2];c[G+8>>2]=c[s+8>>2];c[G+12>>2]=c[s+12>>2];if(!n)break g;if(k>2]=c[G>>2];c[L+4>>2]=c[G+4>>2];c[L+8>>2]=c[G+8>>2];c[L+12>>2]=c[G+12>>2];m=B;j=B;i=A;g=n;f=o;e=k}c[a>>2]=0;c[a+4>>2]=o;h[a+8>>3]=k;a=a+16|0;c[a>>2]=c[G>>2];c[a+4>>2]=c[G+4>>2];c[a+8>>2]=c[G+8>>2];c[a+12>>2]=c[G+12>>2];break a}while(0);if(c[J+20>>2]|0)break;if(c[J+32>>2]|0)break;h[B>>3]=+h[C>>3]+i;i=+h[E>>3];n=H+4|0;o=H+8|0;p=H+16|0;k=i;i=i-+h[D>>3];while(1){h[F>>3]=i;if(!(i<=+h[I>>3]+k))break e;FE(H,b,d,J);j=c[H>>2]|0;m=c[n>>2]|0;i=+h[o>>3];c[G>>2]=c[p>>2];c[G+4>>2]=c[p+4>>2];c[G+8>>2]=c[p+8>>2];c[G+12>>2]=c[p+12>>2];if(!j)break;if(i>2]=c[G>>2];c[L+4>>2]=c[G+4>>2];c[L+8>>2]=c[G+8>>2];c[L+12>>2]=c[G+12>>2];g=j;f=m;e=i}k=+h[E>>3];i=+h[F>>3]+K}c[a>>2]=0;c[a+4>>2]=m;h[a+8>>3]=i;a=a+16|0;c[a>>2]=c[G>>2];c[a+4>>2]=c[G+4>>2];c[a+8>>2]=c[G+8>>2];c[a+12>>2]=c[G+12>>2];break a}while(0);c[a>>2]=g;c[a+4>>2]=f;h[a+8>>3]=e;a=a+16|0;c[a>>2]=c[L>>2];c[a+4>>2]=c[L+4>>2];c[a+8>>2]=c[L+8>>2];c[a+12>>2]=c[L+12>>2]}while(0);l=M;return}function EE(a){a=a|0;mH(c[a+24>>2]|0)|0;$I(a);return}function FE(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0.0,j=0,k=0,m=0,n=0.0,o=0,p=0,q=0,r=0.0,s=0,t=0;t=l;l=l+48|0;q=t+32|0;s=t+16|0;p=t;g=c[e+32>>2]|0;if(!g)ma(96325,96335,382,96354);o=g+16|0;c[p>>2]=c[o>>2];c[p+4>>2]=c[o+4>>2];c[p+8>>2]=c[o+8>>2];c[p+12>>2]=c[o+12>>2];o=d+4|0;m=0;g=0;while(1){if((m|0)>=(c[o>>2]|0))break;j=c[d>>2]|0;k=j+(m*40|0)|0;do if((k|0)!=(e|0)){if(+h[j+(m*40|0)+16>>3]>0.0?+h[j+(m*40|0)+24>>3]>0.0:0)break;g=g+((GE(e,k)|0)!=0&1)|0}while(0);m=m+1|0}HE(e,q);m=c[d+24>>2]|0;m=oH(m,c[m>>2]|0,q)|0;if(!m){c[b>>2]=g;h[b+8>>3]=0.0;s=b+16|0;c[s>>2]=c[p>>2];c[s+4>>2]=c[p+4>>2];c[s+8>>2]=c[p+8>>2];c[s+12>>2]=c[p+12>>2]}else{k=m;i=0.0;while(1){if(!k)break;j=c[(c[k+4>>2]|0)+16>>2]|0;if((j|0)!=(e|0)){IE(j,s);n=+JE(q,s);if(n>0.0){g=g+1|0;i=+KE(e,j,q,n,f)+i}d=c[j+32>>2]|0;if(((d|0)!=0?(a[d+36>>0]|0)!=0:0)?(HE(j,s),r=+JE(q,s),r>0.0):0){g=g+1|0;i=+LE(e,j,q,r,f)+i}}k=c[k>>2]|0}jH(m);c[b>>2]=g;h[b+8>>3]=i;s=b+16|0;c[s>>2]=c[p>>2];c[s+4>>2]=c[p+4>>2];c[s+8>>2]=c[p+8>>2];c[s+12>>2]=c[p+12>>2]}l=t;return}function GE(a,b){a=a|0;b=b|0;var d=0.0,e=0.0,f=0.0,g=0.0;a=c[a+32>>2]|0;if(+h[b+16>>3]==0.0?+h[b+24>>3]==0.0:0){if((((a|0)!=0?(d=+h[b>>3],e=+h[a+16>>3],d>e):0)?d<+h[a>>3]+e:0)?(f=+h[b+8>>3],g=+h[a+24>>3],f>g):0)a=f<+h[a+8>>3]+g&1;else a=0;return a|0}ma(96391,96335,219,96428);return 0}function HE(a,b){a=a|0;b=b|0;var d=0.0,e=0.0;a=c[a+32>>2]|0;e=+h[a+16>>3];c[b>>2]=~~e;d=+h[a+24>>3];c[b+4>>2]=~~d;c[b+8>>2]=~~(+h[a>>3]+e);c[b+12>>2]=~~(+h[a+8>>3]+d);return}function IE(a,b){a=a|0;b=b|0;var d=0.0,e=0.0;e=+h[a>>3];c[b>>2]=~~e;d=+h[a+8>>3];c[b+4>>2]=~~d;c[b+8>>2]=~~(+h[a+16>>3]+e);c[b+12>>2]=~~(+h[a+24>>3]+d);return}function JE(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;i=c[a+8>>2]|0;j=c[b>>2]|0;if((((i|0)>=(j|0)?(k=c[a>>2]|0,l=c[b+8>>2]|0,(k|0)<=(l|0)):0)?(e=c[a+12>>2]|0,f=c[b+4>>2]|0,(e|0)>=(f|0)):0)?(g=c[a+4>>2]|0,h=c[b+12>>2]|0,(g|0)<=(h|0)):0)d=(+(c[((e|0)<(h|0)?a:b)+12>>2]|0)-+(c[((g|0)>(f|0)?a:b)+4>>2]|0))*(+(c[((i|0)<(l|0)?a:b)+8>>2]|0)-+(c[((k|0)>(j|0)?a:b)>>2]|0));else d=0.0;return +d}function KE(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;var g=0.0,h=0.0,i=0,j=0;j=l;l=l+16|0;i=j;a=ME(a,b)|0;f=f+(((a|0)<0?5:a)<<2)|0;a=c[f>>2]|0;if(!a){c[f>>2]=b;g=e}else{IE(a,i);g=+JE(d,i);g=g>e?g:0.0;a=c[f>>2]|0;if((c[a+32>>2]|0)!=0?(HE(a,i),h=+JE(d,i),h>e):0)g=h>g?h:g;if(!(g>0.0)){c[f>>2]=b;g=e}}l=j;return +g}function LE(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;var g=0.0,h=0.0,i=0,j=0;j=l;l=l+16|0;i=j;a=ME(a,b)|0;f=f+(((a|0)<0?5:a)<<2)|0;a=c[f>>2]|0;if(!a){c[f>>2]=b;g=e}else{IE(a,i);g=+JE(d,i);g=g>e?g:0.0;a=c[f>>2]|0;if((c[a+32>>2]|0)!=0?(HE(a,i),h=+JE(d,i),h>e):0)g=h>g?h:g;if(!(g>0.0)){c[f>>2]=b;g=e}}l=j;return +g}function ME(b,d){b=b|0;d=d|0;var e=0,f=0,g=0.0,i=0.0,j=0.0,k=0.0;e=c[b+32>>2]|0;f=c[d+32>>2]|0;if((e|0)==(f|0))ma(96370,96335,276,96380);do if((a[e+36>>0]|0)!=0?(a[f+36>>0]|0)!=0:0){j=+h[b>>3];if(j==0.0?+h[b+8>>3]==0.0:0){e=-1;break}k=+h[d>>3];i=+h[d+8>>3];if(!(k==0.0&i==0.0)){g=+h[b+8>>3];if(ij?2:1;break}e=kg){if(e){e=6;break}e=k>j?8:7;break}if(!e)if(k>j)e=5;else e=-1;else e=3}else e=-1}else e=-1;while(0);return e|0}function NE(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;k=l;l=l+32|0;d=k+24|0;e=k+16|0;f=k;g=yE(a)|0;h=a+4|0;i=e+4|0;j=a+20|0;b=0;while(1){if((b|0)>=(c[h>>2]|0)){b=0;break}m=ww(32)|0;o=(c[a>>2]|0)+(b*40|0)|0;n=m+12|0;c[m+28>>2]=o;QE(f,o);c[n>>2]=c[f>>2];c[n+4>>2]=c[f+4>>2];c[n+8>>2]=c[f+8>>2];c[n+12>>2]=c[f+12>>2];n=c[n>>2]|0;c[e>>2]=(((c[m+20>>2]|0)-n|0)/2|0)+n;n=c[m+16>>2]|0;c[i>>2]=(((c[m+24>>2]|0)-n|0)/2|0)+n;c[d>>2]=c[e>>2];c[d+4>>2]=c[e+4>>2];c[m+8>>2]=RE(d,g)|0;n=c[j>>2]|0;if(!(bb[c[n>>2]&31](n,m,1)|0)){b=-1;break}else b=b+1|0}l=k;return b|0}function OE(a){a=a|0;var b=0,d=0,e=0;d=a+20|0;e=c[d>>2]|0;b=a+24|0;a=bb[c[e>>2]&31](e,0,128)|0;while(1){if(!a)break;e=c[b>>2]|0;pH(e,a+12|0,c[a+28>>2]|0,e,0)|0;e=c[d>>2]|0;a=bb[c[e>>2]&31](e,a,8)|0}return}function PE(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;e=a+20|0;f=Tl(c[e>>2]|0)|0;d=0;while(1){if(!(Tl(c[e>>2]|0)|0))break;g=c[e>>2]|0;a=c[(c[g+8>>2]|0)+4>>2]|0;if(!a){h=8;break}b=c[(c[g+4>>2]|0)+8>>2]|0;if((b|0)<0)a=c[a+8>>2]|0;else a=a+(0-b)|0;if(!a){h=8;break}bb[c[g>>2]&31](g,a,4096)|0;$I(a);d=d+1|0}if((h|0)==8)ma(96441,96335,616,96444);if((f|0)==(d|0))return;else ma(96456,96335,623,96444)}function QE(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0.0,g=0.0,i=0,j=0,k=0,l=0.0;d=c[b+32>>2]|0;if(!d){e=0.0;f=0.0}else{e=+h[d>>3];f=+h[d+8>>3]}l=+h[b>>3];k=~~+A(+(l-e));g=+h[b+8>>3];j=~~+A(+(g-f));i=~~+N(+(l+e+ +h[b+16>>3]));if((i|0)==2147483647)ma(96468,96335,264,96495);d=~~+N(+(g+f+ +h[b+24>>3]));if((d|0)==2147483647)ma(96505,96335,266,96495);else{c[a>>2]=k;c[a+4>>2]=j;c[a+8>>2]=i;c[a+12>>2]=d;return}}function RE(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;f=0;e=c[a>>2]|0;d=c[a+4>>2]|0;while(1){a=b+-1|0;if((b|0)<=0)break;i=e>>>a&1;b=d>>>a&1;g=b+-1|0;h=g&(e^d);g=g&0-i;f=i<<1|f<<2|i^b;b=a;e=h^e^g;d=h^d^g}return f|0}function SE(b){b=b|0;var d=0,e=0,f=0,g=0;d=sJ(b)|0;if(d>>>0>=(c[42409]|0)>>>0){d=d+11|0;c[42409]=d;d=zw(c[42410]|0,d)|0;c[42410]=d;if(!d)d=0;else e=4}else{d=c[42410]|0;e=4}if((e|0)==4){g=d;while(1){e=a[b>>0]|0;if(!(e<<24>>24))break;f=e&255;if(lK(f)|0)e=(kK(f)|0)&255;a[g>>0]=e;g=g+1|0;b=b+1|0}a[g>>0]=0}return d|0}function TE(b,e,f){b=b|0;e=e|0;f=f|0;var g=0.0,i=0,j=0.0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0.0;F=l;l=l+144|0;s=F+96|0;p=F+80|0;v=F+124|0;t=F+72|0;w=F+64|0;x=F+56|0;C=F+48|0;D=F+40|0;E=F+32|0;y=F+24|0;z=F+16|0;A=F+8|0;B=F;i=F+120|0;m=F+116|0;n=F+112|0;o=F+108|0;c[e+32>>2]=f;r=b;while(1)if((a[r>>0]|0)==32)r=r+1|0;else break;c[o>>2]=255;b=a[r>>0]|0;a:do if(b<<24>>24==35){c[p>>2]=i;c[p+4>>2]=m;c[p+8>>2]=n;c[p+12>>2]=o;if((dM(r,96547,p)|0)<=2){b=a[r>>0]|0;q=12;break}switch(f|0){case 0:{G=+((c[i>>2]|0)>>>0)*.00392156862745098;h[C>>3]=G;g=+((c[m>>2]|0)>>>0)*.00392156862745098;h[D>>3]=g;j=+((c[n>>2]|0)>>>0)*.00392156862745098;h[E>>3]=j;k=+((c[o>>2]|0)>>>0)*.00392156862745098;UE(G,g,j,t,w,x);h[e>>3]=+h[t>>3];h[e+8>>3]=+h[w>>3];h[e+16>>3]=+h[x>>3];h[e+24>>3]=k;b=0;break a}case 1:{a[e>>0]=c[i>>2];a[e+1>>0]=c[m>>2];a[e+2>>0]=c[n>>2];a[e+3>>0]=c[o>>2];b=0;break a}case 3:{j=+((c[i>>2]|0)>>>0)*.00392156862745098;h[C>>3]=j;k=+((c[m>>2]|0)>>>0)*.00392156862745098;h[D>>3]=k;G=+((c[n>>2]|0)>>>0)*.00392156862745098;h[E>>3]=G;VE(j,k,G,y,z,A,B);a[e>>0]=~~+h[y>>3]*255;a[e+1>>0]=~~+h[z>>3]*255;a[e+2>>0]=~~+h[A>>3]*255;a[e+3>>0]=~~+h[B>>3]*255;b=0;break a}case 2:{c[e>>2]=(((c[i>>2]|0)*65535|0)>>>0)/255|0;c[e+4>>2]=(((c[m>>2]|0)*65535|0)>>>0)/255|0;c[e+8>>2]=(((c[n>>2]|0)*65535|0)>>>0)/255|0;c[e+12>>2]=(((c[o>>2]|0)*65535|0)>>>0)/255|0;b=0;break a}case 4:{h[e>>3]=+((c[i>>2]|0)>>>0)*.00392156862745098;h[e+8>>3]=+((c[m>>2]|0)>>>0)*.00392156862745098;h[e+16>>3]=+((c[n>>2]|0)>>>0)*.00392156862745098;h[e+24>>3]=+((c[o>>2]|0)>>>0)*.00392156862745098;b=0;break a}default:{b=0;break a}}}else q=12;while(0);b:do if((q|0)==12){if(!(b<<24>>24!=46?((b&255)+-48|0)>>>0>=10:0)){b=sJ(r)|0;if(b>>>0>=(c[42411]|0)>>>0){b=b+11|0;c[42411]=b;b=zw(c[42412]|0,b)|0;c[42412]=b;if(!b){b=-1;break}}else b=c[42412]|0;m=b;i=r;c:while(1){n=i+1|0;i=a[i>>0]|0;switch(i<<24>>24){case 0:break c;case 44:{i=32;break}default:{}}a[m>>0]=i;m=m+1|0;i=n}a[m>>0]=0;c[s>>2]=t;c[s+4>>2]=w;c[s+8>>2]=x;if((dM(b,96561,s)|0)==3){k=+h[t>>3];k=k<1.0?k:1.0;k=k>0.0?k:0.0;h[t>>3]=k;j=+h[w>>3];j=j<1.0?j:1.0;j=j>0.0?j:0.0;h[w>>3]=j;g=+h[x>>3];g=g<1.0?g:1.0;g=g>0.0?g:0.0;h[x>>3]=g;switch(f|0){case 0:{h[e>>3]=k;h[e+8>>3]=j;h[e+16>>3]=g;h[e+24>>3]=1.0;b=0;break b}case 1:{WE(k,j,g,C,D,E);a[e>>0]=~~(+h[C>>3]*255.0);a[e+1>>0]=~~(+h[D>>3]*255.0);a[e+2>>0]=~~(+h[E>>3]*255.0);a[e+3>>0]=-1;b=0;break b}case 3:{WE(k,j,g,C,D,E);VE(+h[C>>3],+h[D>>3],+h[E>>3],y,z,A,B);a[e>>0]=~~+h[y>>3]*255;a[e+1>>0]=~~+h[z>>3]*255;a[e+2>>0]=~~+h[A>>3]*255;a[e+3>>0]=~~+h[B>>3]*255;b=0;break b}case 2:{WE(k,j,g,C,D,E);c[e>>2]=~~(+h[C>>3]*65535.0);c[e+4>>2]=~~(+h[D>>3]*65535.0);c[e+8>>2]=~~(+h[E>>3]*65535.0);c[e+12>>2]=65535;b=0;break b}case 4:{WE(k,j,g,C,D,E);h[e>>3]=+h[C>>3];h[e+8>>3]=+h[D>>3];h[e+16>>3]=+h[E>>3];h[e+24>>3]=1.0;b=0;break b}default:{b=0;break b}}}}i=XE(r)|0;c[v>>2]=i;if(!i)b=-1;else{b=c[42413]|0;if(!(((b|0)!=0?(u=c[b>>2]|0,(a[u>>0]|0)==(a[i>>0]|0)):0)?(yJ(u,i)|0)==0:0)){b=wM(v,24932,2491,12,38)|0;c[42413]=b;if(!b)switch(f|0){case 0:{c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;h[e+24>>3]=1.0;b=1;break b}case 1:{a[e+2>>0]=0;a[e+1>>0]=0;a[e>>0]=0;a[e+3>>0]=-1;b=1;break b}case 3:{c[e>>2]=0;b=1;break b}case 2:{c[e+8>>2]=0;c[e+4>>2]=0;c[e>>2]=0;c[e+12>>2]=65535;b=1;break b}case 4:{c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;h[e+24>>3]=1.0;b=1;break b}default:{b=1;break b}}}switch(f|0){case 0:{h[e>>3]=+(d[b+4>>0]|0)*.00392156862745098;h[e+8>>3]=+(d[b+5>>0]|0)*.00392156862745098;h[e+16>>3]=+(d[b+6>>0]|0)*.00392156862745098;h[e+24>>3]=+(d[b+10>>0]|0)*.00392156862745098;b=0;break b}case 1:{a[e>>0]=a[b+7>>0]|0;a[e+1>>0]=a[b+8>>0]|0;a[e+2>>0]=a[b+9>>0]|0;a[e+3>>0]=a[b+10>>0]|0;b=0;break b}case 3:{j=+(d[b+7>>0]|0)*.00392156862745098;h[C>>3]=j;k=+(d[b+8>>0]|0)*.00392156862745098;h[D>>3]=k;G=+(d[b+9>>0]|0)*.00392156862745098;h[E>>3]=G;VE(j,k,G,y,z,A,B);a[e>>0]=~~+h[y>>3]*255;a[e+1>>0]=~~+h[z>>3]*255;a[e+2>>0]=~~+h[A>>3]*255;a[e+3>>0]=~~+h[B>>3]*255;b=0;break b}case 2:{c[e>>2]=(d[b+7>>0]|0)*257;c[e+4>>2]=(d[b+8>>0]|0)*257;c[e+8>>2]=(d[b+9>>0]|0)*257;c[e+12>>2]=(d[b+10>>0]|0)*257;b=0;break b}case 4:{h[e>>3]=+(d[b+7>>0]|0)*.00392156862745098;h[e+8>>3]=+(d[b+8>>0]|0)*.00392156862745098;h[e+16>>3]=+(d[b+9>>0]|0)*.00392156862745098;h[e+24>>3]=+(d[b+10>>0]|0)*.00392156862745098;b=0;break b}default:{b=0;break b}}}}while(0);l=F;return b|0}function UE(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;var g=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0;i=bc?b:c;m=ma?a:i);g=i/m;if(m>0.0)if(g>0.0){j=(m-a)/i;k=(m-b)/i;l=(m-c)/i;do if(!(m==a)){if(m==b){a=j+2.0-l;break}if(m==c)a=k+4.0-j;else a=0.0}else a=(b-c)/i;while(0);a=a*60.0;if(a<0.0)a=a+360.0}else a=0.0;else{g=0.0;a=0.0}h[d>>3]=a*.002777777777777778;h[f>>3]=m;h[e>>3]=g;return}function VE(a,b,c,d,e,f,g){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;g=g|0;h[d>>3]=1.0-a;h[e>>3]=1.0-b;h[f>>3]=1.0-c;b=+h[d>>3];c=+h[e>>3];c=b>3]=c;b=+h[f>>3];c=b>3]=c;h[d>>3]=+h[d>>3]-c;h[e>>3]=+h[e>>3]-+h[g>>3];h[f>>3]=+h[f>>3]-+h[g>>3];return}function WE(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;var g=0.0,i=0.0,j=0.0,k=0,l=0;a:do if(!(b<=0.0)){i=!(a>=1.0)?a*6.0:0.0;l=~~i;i=i-+(l|0);a=(1.0-b)*c;j=(1.0-i*b)*c;b=(1.0-(1.0-i)*b)*c;switch(l|0){case 0:{g=a;i=b;a=c;k=8;break a}case 1:{g=a;i=c;a=j;k=8;break a}case 2:{g=b;i=c;k=8;break a}case 3:{g=c;i=j;k=8;break a}case 4:{g=c;i=a;a=b;k=8;break a}case 5:{g=j;i=a;a=c;k=8;break a}default:break a}}else{g=c;i=c;a=c;k=8}while(0);if((k|0)==8){h[d>>3]=a;h[e>>3]=i;h[f>>3]=g}return}function XE(b){b=b|0;var d=0,e=0;d=a[b>>0]|0;if(((d<<24>>24!=98?(e=b+1|0,!(d<<24>>24==119|(WJ(e,122058,4)|0)==0)):0)?!(d<<24>>24==108|(WJ(e,122063,4)|0)==0):0)?(WJ(e,122068,8)|0)!=0:0){do if(d<<24>>24==47){d=XJ(e,47)|0;if(!d)b=e;else{if((a[e>>0]|0)!=47){e=(qK(122077,e,4)|0)==0;b=e?d+1|0:b;break}d=c[42414]|0;if((d|0?a[d>>0]|0:0)?qK(122077,d,3)|0:0){b=ZE(d,b+2|0)|0;break}b=b+2|0}}else{d=c[42414]|0;if(((d|0)!=0?(a[d>>0]|0)!=0:0)?(qK(122077,d,3)|0)!=0:0)b=ZE(d,b)|0}while(0);b=SE(b)|0}return b|0}function YE(a,b){a=a|0;b=b|0;return jK(c[a>>2]|0,c[b>>2]|0)|0}function ZE(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=l;l=l+16|0;e=f;g=sJ(a)|0;g=(sJ(b)|0)+g|0;d=g+13|0;if((g+3|0)>>>0<(c[42415]|0)>>>0)d=c[42416]|0;else{c[42415]=d;d=zw(c[42416]|0,d)|0;c[42416]=d}c[e>>2]=a;c[e+4>>2]=b;qL(d,122082,e)|0;l=f;return c[42416]|0}function _E(a){a=a|0;c[42414]=a;return}function $E(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;var f=0,g=0;f=l;l=l+208|0;g=f;aF(g,+h[a>>3],+h[a+8>>3],b,c,d,e);a=bF(g)|0;l=f;return a|0}function aF(a,b,c,d,e,f,g){a=a|0;b=+b;c=+c;d=+d;e=+e;f=+f;g=+g;var i=0,j=0;h[a>>3]=b;h[a+8>>3]=c;j=a+16|0;h[j>>3]=d;i=a+24|0;h[i>>3]=e;h[a+32>>3]=0.0;c=+K(+(+F(+f)/e),+(+E(+f)/d));h[a+56>>3]=c;e=+K(+(+F(+g)/e),+(+E(+g)/d));h[a+40>>3]=1.0;h[a+48>>3]=0.0;e=e-+A(+((e-c)*.15915494309189535))*6.283185307179586;h[a+64>>3]=g-f>3.141592653589793&e-c<3.141592653589793?e+6.283185307179586:e;hF(a);iF(a);jF(a);g=+h[j>>3];g=(g-+h[i>>3])/g;h[a+168>>3]=g;h[a+176>>3]=(2.0-g)*g;g=1.0-g;h[a+184>>3]=g;h[a+192>>3]=g*g;return}function bF(a){a=a|0;var b=0,c=0.0,d=0,e=0.0,f=0.0,g=0.0,i=0.0,j=0,k=0,l=0,m=0,n=0.0,o=0.0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0;q=ww(8)|0;f=+h[a+56>>3];e=+h[a+64>>3]-f;p=1;b=0;while(1){o=e/+(p|0);if(!(b<<24>>24==0&(p|0)<1024))break;a:do if(!(o<=1.5707963267948966))b=0;else{c=f;d=0;b=1;while(1){if(!(b<<24>>24!=0&(d|0)<(p|0)))break a;n=c+o;b=+cF(a,c,n)<=1.0e-05&1;c=n;d=d+1|0}}while(0);p=p<<1}i=+E(+f);u=+F(+f);d=a+16|0;s=+h[d>>3];v=s*i;j=a+24|0;c=+h[j>>3];g=c*u;i=c*i;c=+h[a>>3];k=a+40|0;t=+h[k>>3];l=a+48|0;r=+h[l>>3];e=t*v+c-r*g;m=a+8|0;n=+h[m>>3];g=r*v+t*g+n;s=-(u*s);dF(q,c,n);eF(q,e,g);n=+G(+(o*.5));n=+F(+o)*.3333333333333333*(+C(+(n*n*3.0+4.0))+-1.0);c=f;f=g;g=r*s+t*i;i=t*s-r*i;b=0;while(1){if((b|0)>=(p|0))break;r=c+o;u=+E(+r);v=+F(+r);x=+h[d>>3];z=x*u;w=+h[j>>3];t=w*v;u=w*u;w=+h[k>>3];y=+h[l>>3];s=w*z+ +h[a>>3]-y*t;t=y*z+w*t+ +h[m>>3];x=-(v*x);v=w*x-y*u;u=y*x+w*u;fF(q,e+i*n,f+g*n,s-v*n,t-u*n,s,t);c=r;e=s;f=t;g=u;i=v;b=b+1|0}gF(q);return q|0}function cF(a,b,c){a=a|0;b=+b;c=+c;var d=0.0,e=0.0,f=0.0,g=0.0,i=0.0;d=c+b;i=+h[a+16>>3];e=+h[a+24>>3]/i;g=+E(+d);f=+E(+(d*2.0));d=+E(+(d*3.0));a=e<.25?10328:10584;return +(((e*.001+4.98)*e+.207)/(e+.0067)*i*+L(+(((+h[a+32>>3]*e+ +h[a+40>>3])*e+ +h[a+48>>3])/(+h[a+56>>3]+e)*g+((+h[a>>3]*e+ +h[a+8>>3])*e+ +h[a+16>>3])/(+h[a+24>>3]+e)+((+h[a+64>>3]*e+ +h[a+72>>3])*e+ +h[a+80>>3])/(+h[a+88>>3]+e)*f+((+h[a+96>>3]*e+ +h[a+104>>3])*e+ +h[a+112>>3])/(+h[a+120>>3]+e)*d+(((+h[a+160>>3]*e+ +h[a+168>>3])*e+ +h[a+176>>3])/(+h[a+184>>3]+e)*g+((+h[a+128>>3]*e+ +h[a+136>>3])*e+ +h[a+144>>3])/(+h[a+152>>3]+e)+((+h[a+192>>3]*e+ +h[a+200>>3])*e+ +h[a+208>>3])/(+h[a+216>>3]+e)*f+((+h[a+224>>3]*e+ +h[a+232>>3])*e+ +h[a+240>>3])/(+h[a+248>>3]+e)*d)*(c-b))))}function dF(a,b,d){a=a|0;b=+b;d=+d;var e=0;c[42417]=100;e=ww(1600)|0;c[a>>2]=e;h[e>>3]=b;h[e+8>>3]=d;c[a+4>>2]=1;return}function eF(a,b,d){a=a|0;b=+b;d=+d;var e=0,f=0;f=c[a>>2]|0;e=(c[a+4>>2]|0)+-1|0;fF(a,+h[f+(e<<4)>>3],+h[f+(e<<4)+8>>3],b,d,b,d);return}function fF(a,b,d,e,f,g,i){a=a|0;b=+b;d=+d;e=+e;f=+f;g=+g;i=+i;var j=0,k=0,l=0,m=0;l=a+4|0;j=c[l>>2]|0;k=c[42417]|0;if((j+3|0)<(k|0))a=c[a>>2]|0;else{c[42417]=k<<1;j=bJ(c[a>>2]|0,k<<5)|0;c[a>>2]=j;a=j;j=c[l>>2]|0}h[a+(j<<4)>>3]=b;m=j+1|0;h[a+(j<<4)+8>>3]=d;h[a+(m<<4)>>3]=e;k=j+2|0;h[a+(m<<4)+8>>3]=f;h[a+(k<<4)>>3]=g;c[l>>2]=j+3;h[a+(k<<4)+8>>3]=i;return}function gF(a){a=a|0;var b=0;b=c[a>>2]|0;eF(a,+h[b>>3],+h[b+8>>3]);c[a>>2]=bJ(c[a>>2]|0,c[a+4>>2]<<4)|0;c[42417]=0;return}function hF(a){a=a|0;var b=0.0,c=0.0,d=0.0,e=0.0;d=+h[a+16>>3];b=+h[a+24>>3];b=+C(+(d*d-b*b));d=b*+h[a+40>>3];b=b*+h[a+48>>3];e=+h[a>>3];h[a+104>>3]=e-d;c=+h[a+8>>3];h[a+112>>3]=c-b;h[a+120>>3]=e+d;h[a+128>>3]=c+b;return}function iF(a){a=a|0;var b=0.0,c=0.0,d=0.0,e=0.0,f=0.0,g=0.0,i=0.0,j=0.0;d=+h[a+16>>3];i=+h[a+56>>3];j=+E(+i)*d;b=+h[a+24>>3];i=+F(+i)*b;g=+h[a+64>>3];d=+E(+g)*d;b=+F(+g)*b;g=+h[a>>3];c=+h[a+40>>3];e=+h[a+48>>3];h[a+72>>3]=c*j+g-e*i;f=+h[a+8>>3];h[a+80>>3]=e*j+f+c*i;h[a+88>>3]=g+c*d-e*b;h[a+96>>3]=f+e*d+c*b;return}function jF(a){a=a|0;var b=0.0,c=0.0,d=0.0,e=0.0,f=0.0,g=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0,n=0;k=+h[a+24>>3];l=+h[a+16>>3];e=k/l;m=+h[a+48>>3];n=+B(+m)<.1;j=+h[a+40>>3];do if(n){b=m/j;c=+J(+(b*e));d=-c;if(j<0.0){b=+J(+(b/e));e=d;d=3.141592653589793-c;c=4.71238898038469-b;b=1.5707963267948966-b;break}else{b=+J(+(b/e));e=-3.141592653589793-c;c=1.5707963267948966-b;b=-1.5707963267948966-b;break}}else{b=j/m;c=+J(+(b/e));d=c+1.5707963267948966;if(m<0.0){b=+J(+(b*e));e=c+-1.5707963267948966;c=b+3.141592653589793;break}else{b=+J(+(b*e));e=d;d=c+4.71238898038469;c=b;b=b+-3.141592653589793;break}}while(0);g=+h[a+56>>3];e=e-+A(+((e-g)*.15915494309189535))*6.283185307179586;b=b-+A(+((b-g)*.15915494309189535))*6.283185307179586;f=d-+A(+((d-g)*.15915494309189535))*6.283185307179586;g=c-+A(+((c-g)*.15915494309189535))*6.283185307179586;i=+h[a+64>>3];if(!(e<=i)){e=+h[a+72>>3];c=+h[a+88>>3];c=e>3]-k*+F(+e)*m;h[a+136>>3]=c;if(!(b<=i)){e=+h[a+80>>3];d=+h[a+96>>3];d=e>3]+ +F(+b)*k*j;h[a+144>>3]=d;if(!(f<=i)){f=+h[a+72>>3];b=+h[a+88>>3];b=f>b?f:b}else b=+E(+f)*l*j+ +h[a>>3]-k*+F(+f)*m;h[a+152>>3]=b-c;if(!(g<=i)){m=+h[a+80>>3];b=+h[a+96>>3];b=m>b?m:b}else b=+E(+g)*l*m+ +h[a+8>>3]+ +F(+g)*k*j;h[a+160>>3]=b-d;return}function kF(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0.0,i=0,j=0,k=0.0,m=0,n=0;n=l;l=l+80|0;m=n;lF(b);k=+h[e+56>>3];g=+h[e+64>>3];switch(a[e+80>>0]|0){case 116:{g=(+h[e+48>>3]-+mF(d))*.5+g;f=4;break}case 98:{g=g-(+h[e+48>>3]-+mF(d))*.5;f=4;break}default:{}}if((f|0)==4)g=g+-1.0;h[m>>3]=k;h[m+8>>3]=g;c[m+20>>2]=c[e+8>>2];c[m+16>>2]=c[e+4>>2];h[m+32>>3]=+h[e+16>>3];j=b+16|0;f=Jm(c[(c[j>>2]|0)+8>>2]|0,122089)|0;e=m+56|0;c[e>>2]=f;i=m+60|0;c[i>>2]=c[(c[j>>2]|0)+212>>2];j=m+64|0;a[j>>0]=0;if(!((f|0)!=0?(a[f>>0]|0)!=0:0))c[e>>2]=122100;if((a[d+4>>0]|0)==1){e=c[d>>2]|0;GD(b,c[(c[b>>2]|0)+336>>2]|0);f=c[e+24>>2]|0;if(!f)CD(b,122106);else CD(b,f);oF(b,e,m);if(a[j>>0]|0)$I(c[i>>2]|0)}else nF(b,c[d>>2]|0,m);pF(b);l=n;return}function lF(a){a=a|0;var d=0,e=0,f=0;d=Wt(a)|0;e=c[d>>2]|0;a=c[e+4>>2]|0;c[d+4>>2]=a;c[d+12>>2]=c[e+12>>2];switch(a|0){case 2:{a=e+8|0;f=6;break}case 0:{a=e+8|0;f=6;break}case 1:{a=e+8|0;f=6;break}case 3:{a=e+8|0;f=6;break}default:{}}if((f|0)==6)c[d+8>>2]=c[a>>2];c[d+208>>2]=c[e+208>>2];c[d+228>>2]=c[e+228>>2];c[d+244>>2]=c[e+244>>2];f=d+260|0;b[f>>1]=b[f>>1]&-2|b[e+260>>1]&1;return}function mF(b){b=b|0;var d=0.0,e=0,f=0;switch(a[b+4>>0]|0){case 1:{e=c[b>>2]|0;b=e+72|0;e=e+56|0;f=5;break}case 3:{e=c[b>>2]|0;b=e+24|0;e=e+8|0;f=5;break}case 2:{e=c[b>>2]|0;b=e+32|0;e=e+16|0;f=5;break}default:d=0.0}if((f|0)==5)d=+h[b>>3]-+h[e>>3];return +d}function nF(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,m=0,n=0,o=0.0,p=0.0,q=0,r=0,s=0;n=l;l=l+96|0;j=n+64|0;i=n+32|0;g=n+16|0;k=n;m=b[e+4>>1]|0;if(m<<16>>16>=1){r=e+8|0;p=+h[e+24>>3];o=+h[r>>3];h[k>>3]=(o+p)*.5+ +h[f>>3];h[k+8>>3]=(+h[e+16>>3]+ +h[e+32>>3])*.5+ +h[f+8>>3];q=c[e>>2]|0;s=f+16|0;f=a[e+6>>0]|0;c[g>>2]=c[k>>2];c[g+4>>2]=c[k+4>>2];c[g+8>>2]=c[k+8>>2];c[g+12>>2]=c[k+12>>2];c[i>>2]=c[s>>2];c[i+4>>2]=c[s+4>>2];c[i+8>>2]=c[s+8>>2];c[i+12>>2]=c[s+12>>2];c[i+16>>2]=c[s+16>>2];c[i+20>>2]=c[s+20>>2];c[i+24>>2]=c[s+24>>2];c[i+28>>2]=c[s+28>>2];c[j>>2]=c[r>>2];c[j+4>>2]=c[r+4>>2];c[j+8>>2]=c[r+8>>2];c[j+12>>2]=c[r+12>>2];c[j+16>>2]=c[r+16>>2];c[j+20>>2]=c[r+20>>2];c[j+24>>2]=c[r+24>>2];c[j+28>>2]=c[r+28>>2];BF(d,m<<16>>16,q,g,(p-o)*.5,i,j,f)}l=n;return}function oF(e,f,g){e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0,m=0.0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=l;l=l+176|0;t=y+96|0;v=y+64|0;w=y+136|0;p=y;q=y+128|0;r=f+48|0;c[v>>2]=c[r>>2];c[v+4>>2]=c[r+4>>2];c[v+8>>2]=c[r+8>>2];c[v+12>>2]=c[r+12>>2];c[v+16>>2]=c[r+16>>2];c[v+20>>2]=c[r+20>>2];c[v+24>>2]=c[r+24>>2];c[v+28>>2]=c[r+28>>2];m=+h[g>>3];n=+h[g+8>>3];r=f+84|0;i=c[r>>2]|0;if(!(c[f>>2]|0))x=(c[f+8>>2]|0)!=0;else x=1;u=f+108|0;j=c[u>>2]|0;if(j|0)qF(g,j,167296);h[v>>3]=+h[v>>3]+m;s=v+16|0;h[s>>3]=+h[s>>3]+m;s=v+8|0;h[s>>3]=+h[s>>3]+n;s=v+24|0;h[s>>3]=+h[s>>3]+n;if(x?(c[e+152>>2]&4|0)==0:0){c[t>>2]=c[v>>2];c[t+4>>2]=c[v+4>>2];c[t+8>>2]=c[v+8>>2];c[t+12>>2]=c[v+12>>2];c[t+16>>2]=c[v+16>>2];c[t+20>>2]=c[v+20>>2];c[t+24>>2]=c[v+24>>2];c[t+28>>2]=c[v+28>>2];s=rF(e,g,f,t,w)|0}else s=0;o=f+42|0;j=b[o>>1]|0;if(!(j&32)){k=c[f+20>>2]|0;if(k){j=sF(e,k,c[f+28>>2]|0,j&65535,q)|0;if(!(b[o>>1]&4)){c[t>>2]=c[v>>2];c[t+4>>2]=c[v+4>>2];c[t+8>>2]=c[v+8>>2];c[t+12>>2]=c[v+12>>2];c[t+16>>2]=c[v+16>>2];c[t+20>>2]=c[v+20>>2];c[t+24>>2]=c[v+24>>2];c[t+28>>2]=c[v+28>>2];JD(e,t,j)}else{o=d[f+33>>0]|0;c[t>>2]=c[v>>2];c[t+4>>2]=c[v+4>>2];c[t+8>>2]=c[v+8>>2];c[t+12>>2]=c[v+12>>2];c[t+16>>2]=c[v+16>>2];c[t+20>>2]=c[v+20>>2];c[t+24>>2]=c[v+24>>2];c[t+28>>2]=c[v+28>>2];zy(e,tF(p,t,o)|0,4,4,j)}$I(c[q>>2]|0)}while(1){j=c[i>>2]|0;if(!j)break;uF(e,j,g);i=i+4|0}i=c[r>>2]|0;PD(e,1.0);j=f+24|0;while(1){k=i+4|0;i=c[i>>2]|0;if(!i)break;if(!(a[i+100>>0]|0)){i=k;continue}vF(e,i,g,c[j>>2]|0,c[k>>2]|0);i=k}if(a[f+33>>0]|0){c[t>>2]=c[v>>2];c[t+4>>2]=c[v+4>>2];c[t+8>>2]=c[v+8>>2];c[t+12>>2]=c[v+12>>2];c[t+16>>2]=c[v+16>>2];c[t+20>>2]=c[v+20>>2];c[t+24>>2]=c[v+24>>2];c[t+28>>2]=c[v+28>>2];wF(e,f,t)}}if(s|0)xF(e,w);if((x?c[e+152>>2]&4|0:0)?(c[t>>2]=c[v>>2],c[t+4>>2]=c[v+4>>2],c[t+8>>2]=c[v+8>>2],c[t+12>>2]=c[v+12>>2],c[t+16>>2]=c[v+16>>2],c[t+20>>2]=c[v+20>>2],c[t+24>>2]=c[v+24>>2],c[t+28>>2]=c[v+28>>2],rF(e,g,f,t,w)|0):0)xF(e,w);if(c[u>>2]|0)yF(g,167296);l=y;return}function pF(a){a=a|0;var b=0;b=c[a+16>>2]|0;c[b+208>>2]=0;c[b+228>>2]=0;c[b+244>>2]=0;c[b+212>>2]=0;Xt(a);return}function qF(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,g=0,i=0;i=a+16|0;f=c[i>>2]|0;if(f|0){if(!(c[b>>2]|0)){f=0;g=d}else{c[d>>2]=f;f=c[b>>2]|0;g=i}c[g>>2]=f}f=c[a+20>>2]|0;if(f|0){g=b+4|0;if(!(c[g>>2]|0)){f=0;g=d}else{c[d+4>>2]=f;f=c[g>>2]|0;g=i}c[g+4>>2]=f}e=+h[a+32>>3];if(e>=0.0){f=b+16|0;if(!(+h[f>>3]>=0.0))e=-1.0;else{h[d+16>>3]=e;e=+h[f>>3];d=i}h[d+16>>3]=e}return}function rF(d,e,f,g,h){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+224|0;n=u+8|0;k=u;t=u+40|0;j=u+184|0;i=u+56|0;m=c[d+16>>2]|0;o=m+208|0;c[h>>2]=c[o>>2];p=m+228|0;c[h+4>>2]=c[p>>2];q=m+244|0;c[h+8>>2]=c[q>>2];r=m+212|0;c[h+12>>2]=c[r>>2];s=m+260|0;a[h+16>>0]=(b[s>>1]<<15&65535)<<16>>16>>15;h=c[f+16>>2]|0;if((h|0)!=0?(a[h>>0]|0)!=0:0)i=0;else{dm(t,128,i);i=e+60|0;h=c[i>>2]|0;if(!h){h=HL(Zt(d,c[m+8>>2]|0,t)|0)|0;c[i>>2]=h;a[e+64>>0]=1}gm(t,h)|0;i=c[42418]|0;c[42418]=i+1;c[k>>2]=i;qL(j,122183,k)|0;gm(t,j)|0;i=t+4|0;h=c[i>>2]|0;if(h>>>0>=(c[t+8>>2]|0)>>>0){em(t,1)|0;h=c[i>>2]|0}a[h>>0]=0;h=c[t>>2]|0;c[i>>2]=h;i=1}h=Yt(d,0,c[f>>2]|0,c[f+12>>2]|0,c[f+8>>2]|0,h,c[m+8>>2]|0)|0;if(i)hm(t);do if(h|0){if((c[o>>2]|0)==0?(b[s>>1]&1)==0:0)break;c[n>>2]=c[g>>2];c[n+4>>2]=c[g+4>>2];c[n+8>>2]=c[g+8>>2];c[n+12>>2]=c[g+12>>2];c[n+16>>2]=c[g+16>>2];c[n+20>>2]=c[g+20>>2];c[n+24>>2]=c[g+24>>2];c[n+28>>2]=c[g+28>>2];eu(d,n);xD(d,c[o>>2]|0,c[p>>2]|0,c[q>>2]|0,c[r>>2]|0)}while(0);l=u;return h|0}function sF(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0.0,i=0,j=0;j=l;l=l+16|0;i=j;if(!((yv(b,f,i)|0)<<24>>24)){ED(a,b);b=1}else{ED(a,c[f>>2]|0);b=c[f+4>>2]|0;h=+g[i>>2];if(!b)FD(a,122106,d,h);else FD(a,b,d,h);b=e>>>1&1|2}CD(a,122171);l=j;return b|0}function tF(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0.0,g=0.0,i=0.0,j=0.0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];e=a+32|0;b=b+16|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];if((d|0)>1){j=+(d|0)*.5;i=+h[a>>3]+j;h[a>>3]=i;d=a+8|0;g=+h[d>>3]+j;h[d>>3]=g;f=+h[e>>3]-j;h[e>>3]=f;e=a+40|0;j=+h[e>>3]-j;h[e>>3]=j}else{f=+h[e>>3];g=+h[a+8>>3];i=+h[a>>3];j=+h[a+40>>3]}h[a+16>>3]=f;h[a+24>>3]=g;h[a+48>>3]=i;h[a+56>>3]=j;return a|0}function uF(e,f,g){e=e|0;f=f|0;g=g|0;var i=0,j=0.0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=l;l=l+176|0;r=v+96|0;s=v+136|0;t=v+64|0;p=v;q=v+128|0;u=f+48|0;c[t>>2]=c[u>>2];c[t+4>>2]=c[u+4>>2];c[t+8>>2]=c[u+8>>2];c[t+12>>2]=c[u+12>>2];c[t+16>>2]=c[u+16>>2];c[t+20>>2]=c[u+20>>2];c[t+24>>2]=c[u+24>>2];c[t+28>>2]=c[u+28>>2];j=+h[g>>3];k=+h[g+8>>3];if(!(c[f>>2]|0))u=(c[f+8>>2]|0)!=0;else u=1;h[t>>3]=+h[t>>3]+j;o=t+16|0;h[o>>3]=+h[o>>3]+j;o=t+8|0;h[o>>3]=+h[o>>3]+k;o=t+24|0;h[o>>3]=+h[o>>3]+k;if(u?(c[e+152>>2]&4|0)==0:0){c[r>>2]=c[t>>2];c[r+4>>2]=c[t+4>>2];c[r+8>>2]=c[t+8>>2];c[r+12>>2]=c[t+12>>2];c[r+16>>2]=c[t+16>>2];c[r+20>>2]=c[t+20>>2];c[r+24>>2]=c[t+24>>2];c[r+28>>2]=c[t+28>>2];o=rF(e,g,f,r,s)|0}else o=0;n=f+42|0;i=b[n>>1]|0;a:do if(!(i&32)){m=c[f+20>>2]|0;if(m|0){i=sF(e,m,c[f+28>>2]|0,i&65535,q)|0;if(!(b[n>>1]&4)){c[r>>2]=c[t>>2];c[r+4>>2]=c[t+4>>2];c[r+8>>2]=c[t+8>>2];c[r+12>>2]=c[t+12>>2];c[r+16>>2]=c[t+16>>2];c[r+20>>2]=c[t+20>>2];c[r+24>>2]=c[t+24>>2];c[r+28>>2]=c[t+28>>2];JD(e,r,i)}else{n=d[f+33>>0]|0;c[r>>2]=c[t>>2];c[r+4>>2]=c[t+4>>2];c[r+8>>2]=c[t+8>>2];c[r+12>>2]=c[t+12>>2];c[r+16>>2]=c[t+16>>2];c[r+20>>2]=c[t+20>>2];c[r+24>>2]=c[t+24>>2];c[r+28>>2]=c[t+28>>2];zy(e,tF(p,r,n)|0,4,4,i)}$I(c[q>>2]|0)}if(a[f+33>>0]|0){c[r>>2]=c[t>>2];c[r+4>>2]=c[t+4>>2];c[r+8>>2]=c[t+8>>2];c[r+12>>2]=c[t+12>>2];c[r+16>>2]=c[t+16>>2];c[r+20>>2]=c[t+20>>2];c[r+24>>2]=c[t+24>>2];c[r+28>>2]=c[t+28>>2];wF(e,f,r)}i=f+88|0;switch(a[f+92>>0]|0){case 1:{oF(e,c[i>>2]|0,g);break a}case 3:{AF(e,c[i>>2]|0,g);break a}default:{nF(e,c[i>>2]|0,g);break a}}}while(0);if(o|0)xF(e,s);if((u?c[e+152>>2]&4|0:0)?(c[r>>2]=c[t>>2],c[r+4>>2]=c[t+4>>2],c[r+8>>2]=c[t+8>>2],c[r+12>>2]=c[t+12>>2],c[r+16>>2]=c[t+16>>2],c[r+20>>2]=c[t+20>>2],c[r+24>>2]=c[t+24>>2],c[r+28>>2]=c[t+28>>2],rF(e,g,f,r,s)|0):0)xF(e,s);l=v;return}function vF(f,g,i,j,k){f=f|0;g=g|0;i=i|0;j=j|0;k=k|0;var m=0.0,n=0,o=0.0,p=0.0,q=0,r=0.0,s=0.0,t=0.0,u=0.0,v=0,w=0,x=0.0,y=0,z=0,A=0,B=0,C=0;A=l;l=l+32|0;y=A+16|0;z=A;r=+h[i>>3];x=+h[i+8>>3];q=(j|0)==0?122106:j;ED(f,q);CD(f,q);t=+h[g+48>>3];o=+h[g+56>>3];u=+h[g+64>>3];p=+h[g+72>>3];s=t+r;r=u+r;x=o+x;q=g+100|0;i=a[q>>0]|0;if((i&1)!=0?(n=c[g+96>>2]|0,((e[g+80>>1]|0)+(e[g+84>>1]|0)|0)<(c[n+104>>2]|0)):0){i=b[g+86>>1]|0;do if(i<<16>>16)if(((e[g+82>>1]|0)+(i&65535)|0)==(c[n+100>>2]|0)){B=a[n+32>>0]|0;C=(B<<24>>24)/2|0;j=(C<<24>>24)+(d[n+33>>0]|0)|0;i=j;j=j&255;m=x-+(C<<24>>24);n=B;break}else{n=a[n+32>>0]|0;i=0;j=((n<<24>>24)/2|0)<<24>>24;m=x;break}else{C=a[n+32>>0]|0;j=((C<<24>>24)/2|0)<<24>>24;i=j+(d[n+33>>0]|0)|0;m=x;n=C}while(0);h[z+8>>3]=m-+(j|0);h[z>>3]=r+ +(((n<<24>>24)/2|0)<<24>>24);c[y>>2]=c[z>>2];c[y+4>>2]=c[z+4>>2];c[y+8>>2]=c[z+8>>2];c[y+12>>2]=c[z+12>>2];zF(f,y,0.0,p-o+ +(i&255|0)+ +(n<<24>>24));i=a[q>>0]|0}if(i&2?(v=b[g+86>>1]|0,w=c[g+96>>2]|0,((e[g+82>>1]|0)+(v&65535)|0)<(c[w+100>>2]|0)):0){i=b[g+84>>1]|0;do if(!(i<<16>>16)){i=a[w+32>>0]|0;C=(i<<24>>24)/2|0;n=(C<<24>>24)+(d[w+33>>0]|0)|0;j=n&255;n=n&255;m=+(C<<24>>24);h[z>>3]=s-m-+(n|0);if((c[w+104>>2]|0)==(e[g+80>>1]|0)){j=n<<1&255;break}if((k|0)!=0?(b[k+86>>1]|0)!=v<<16>>16:0)j=~~(+(j&255)-u+ +h[w+64>>3]-m)&255}else{if(((e[g+80>>1]|0)+(i&65535)|0)==(c[w+104>>2]|0)){i=a[w+32>>0]|0;C=(i<<24>>24)/2|0;j=(C&255)+(d[w+33>>0]|0)&255;h[z>>3]=s-+(C<<24>>24);break}i=a[w+32>>0]|0;m=+(((i<<24>>24)/2|0)<<24>>24);h[z>>3]=s-m;if((k|0)!=0?(b[k+86>>1]|0)!=v<<16>>16:0)j=~~(+h[w+64>>3]-u-m)&255;else j=0}while(0);h[z+8>>3]=x-+(((i<<24>>24)/2|0)<<24>>24);c[y>>2]=c[z>>2];c[y+4>>2]=c[z+4>>2];c[y+8>>2]=c[z+8>>2];c[y+12>>2]=c[z+12>>2];zF(f,y,u-t+ +(j&255)+ +(i<<24>>24),0.0)}l=A;return}function wF(e,f,g){e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0.0;p=l;l=l+160|0;o=p+112|0;n=p;j=p+144|0;m=c[f+24>>2]|0;CD(e,(m|0)==0?122106:m);m=f+42|0;i=b[m>>1]|0;if(!(i&384))GD(e,c[(c[e>>2]|0)+336>>2]|0);else{c[j+4>>2]=0;c[j>>2]=0;i=i&65535;if(!(i&256)){if(i&128|0){i=122112;k=4}}else{i=122119;k=4}if((k|0)==4)c[j>>2]=i;GD(e,j)}k=f+33|0;PD(e,+(d[k>>0]|0));a:do if(!(b[m>>1]&4)){i=b[f+36>>1]&15360;if(!(i<<16>>16)){i=a[k>>0]|0;if((i&255)>1){q=+(i&255)*.5;h[g>>3]=+h[g>>3]+q;n=g+8|0;h[n>>3]=+h[n>>3]+q;n=g+16|0;h[n>>3]=+h[n>>3]-q;n=g+24|0;h[n>>3]=+h[n>>3]-q};c[o>>2]=c[g>>2];c[o+4>>2]=c[g+4>>2];c[o+8>>2]=c[g+8>>2];c[o+12>>2]=c[g+12>>2];c[o+16>>2]=c[g+16>>2];c[o+20>>2]=c[g+20>>2];c[o+24>>2]=c[g+24>>2];c[o+28>>2]=c[g+28>>2];JD(e,o,0);break}j=n+16|0;m=d[k>>0]|0;c[o>>2]=c[g>>2];c[o+4>>2]=c[g+4>>2];c[o+8>>2]=c[g+8>>2];c[o+12>>2]=c[g+12>>2];c[o+16>>2]=c[g+16>>2];c[o+20>>2]=c[g+20>>2];c[o+24>>2]=c[g+24>>2];c[o+28>>2]=c[g+28>>2];tF(j,o,m)|0;do switch(((i&65535)+-1024|0)>>>10&4194303|0){case 7:{LD(e,j,2);break a}case 3:{LD(e,n+32|0,2);break a}case 1:{LD(e,n+48|0,2);break a}case 0:{g=n+64|0;c[n>>2]=c[g>>2];c[n+4>>2]=c[g+4>>2];c[n+8>>2]=c[g+8>>2];c[n+12>>2]=c[g+12>>2];LD(e,n,2);break a}case 11:{LD(e,j,3);break a}case 5:{LD(e,n+32|0,3);break a}case 2:{g=n+80|0;c[g>>2]=c[j>>2];c[g+4>>2]=c[j+4>>2];c[g+8>>2]=c[j+8>>2];c[g+12>>2]=c[j+12>>2];LD(e,n+48|0,3);break a}case 8:{g=n+64|0;c[n>>2]=c[g>>2];c[n+4>>2]=c[g+4>>2];c[n+8>>2]=c[g+8>>2];c[n+12>>2]=c[g+12>>2];LD(e,n,3);break a}case 13:{LD(e,j,4);break a}case 6:{g=n+80|0;c[g>>2]=c[j>>2];c[g+4>>2]=c[j+4>>2];c[g+8>>2]=c[j+8>>2];c[g+12>>2]=c[j+12>>2];LD(e,n+32|0,4);break a}case 10:{g=n+80|0;c[g>>2]=c[j>>2];c[g+4>>2]=c[j+4>>2];c[g+8>>2]=c[j+8>>2];c[g+12>>2]=c[j+12>>2];g=n+96|0;o=n+32|0;c[g>>2]=c[o>>2];c[g+4>>2]=c[o+4>>2];c[g+8>>2]=c[o+8>>2];c[g+12>>2]=c[o+12>>2];LD(e,n+48|0,4);break a}case 12:{g=n+64|0;c[n>>2]=c[g>>2];c[n+4>>2]=c[g+4>>2];c[n+8>>2]=c[g+8>>2];c[n+12>>2]=c[g+12>>2];LD(e,n,4);break a}case 9:{LD(e,j,2);LD(e,n+48|0,2);break a}case 4:{g=n+64|0;c[n>>2]=c[g>>2];c[n+4>>2]=c[g+4>>2];c[n+8>>2]=c[g+8>>2];c[n+12>>2]=c[g+12>>2];LD(e,n,2);LD(e,n+32|0,2);break a}default:break a}while(0)}else{m=d[k>>0]|0;c[o>>2]=c[g>>2];c[o+4>>2]=c[g+4>>2];c[o+8>>2]=c[g+8>>2];c[o+12>>2]=c[g+12>>2];c[o+16>>2]=c[g+16>>2];c[o+20>>2]=c[g+20>>2];c[o+24>>2]=c[g+24>>2];c[o+28>>2]=c[g+28>>2];zy(e,tF(n,o,m)|0,4,4,0)}while(0);l=p;return}function xF(d,e){d=d|0;e=e|0;var f=0,g=0,h=0;h=c[d+16>>2]|0;f=h+208|0;if((c[f>>2]|0)==0?(b[h+260>>1]&1)==0:0)d=0;else{yD(d);d=c[f>>2]|0}if((d|0)!=(c[e>>2]|0)){$I(d);c[f>>2]=c[e>>2]}d=h+228|0;f=c[d>>2]|0;g=e+4|0;if((f|0)!=(c[g>>2]|0)){$I(f);c[d>>2]=c[g>>2]}d=h+244|0;f=c[d>>2]|0;g=e+8|0;if((f|0)!=(c[g>>2]|0)){$I(f);c[d>>2]=c[g>>2]}d=h+212|0;f=c[d>>2]|0;g=e+12|0;if((f|0)!=(c[g>>2]|0)){$I(f);c[d>>2]=c[g>>2]}h=h+260|0;b[h>>1]=b[h>>1]&-2|a[e+16>>0]&1;return}function yF(a,b){a=a|0;b=b|0;var d=0.0,e=0;e=c[b>>2]|0;if(e|0)c[a+16>>2]=e;e=c[b+4>>2]|0;if(e|0)c[a+20>>2]=e;d=+h[b+16>>3];if(d>=0.0)h[a+32>>3]=d;return}function zF(a,b,d,e){a=a|0;b=b|0;d=+d;e=+e;var f=0,g=0,i=0;f=l;l=l+64|0;g=f+32|0;i=f;c[i>>2]=c[b>>2];c[i+4>>2]=c[b+4>>2];c[i+8>>2]=c[b+8>>2];c[i+12>>2]=c[b+12>>2];h[i+16>>3]=+h[b>>3]+d;h[i+24>>3]=+h[b+8>>3]+e;c[g>>2]=c[i>>2];c[g+4>>2]=c[i+4>>2];c[g+8>>2]=c[i+8>>2];c[g+12>>2]=c[i+12>>2];c[g+16>>2]=c[i+16>>2];c[g+20>>2]=c[i+20>>2];c[g+24>>2]=c[i+24>>2];c[g+28>>2]=c[i+28>>2];JD(a,g,1);l=f;return}function AF(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0.0,k=0.0,m=0.0,n=0.0;i=l;l=l+64|0;g=i;k=+h[e>>3];n=k+ +h[d>>3];m=+h[e+8>>3];j=m+ +h[d+8>>3];k=k+ +h[d+16>>3];m=m+ +h[d+24>>3];h[g>>3]=k;h[g+8>>3]=m;h[g+32>>3]=n;h[g+40>>3]=j;h[g+16>>3]=n;h[g+24>>3]=m;h[g+48>>3]=k;h[g+56>>3]=j;f=c[d+36>>2]|0;if(!f)f=c[e+56>>2]|0;e=c[d+32>>2]|0;if(!e)ma(122126,122134,623,122146);if(!(a[e>>0]|0))ma(122160,122134,624,122146);else{ND(b,e,g,4,1,f);l=i;return}}function BF(d,e,f,g,i,j,k,m){d=d|0;e=e|0;f=f|0;g=g|0;i=+i;j=j|0;k=k|0;m=m|0;var n=0.0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0.0,J=0,K=0,L=0,M=0.0,N=0.0,O=0,P=0,Q=0,R=0;R=l;l=l+128|0;K=R+104|0;O=R+48|0;P=R+16|0;L=R;J=L;c[J>>2]=0;c[J+4>>2]=0;M=+h[g>>3];N=M-i;I=M+i;J=L+8|0;h[J>>3]=(+h[k+24>>3]-+h[k+8>>3])*.5+ +h[g+8>>3];zD(d,1);D=P+16|0;E=P+4|0;F=P+24|0;G=O+4|0;H=O+16|0;s=(m|0)==0;t=O+24|0;u=O+8|0;v=O+32|0;w=O+40|0;x=O+48|0;y=j+16|0;z=j+4|0;A=P+8|0;q=0;while(1){if((q|0)>=(e|0))break;switch(a[f+(q*24|0)+6>>0]|0){case 108:{i=N;break}case 114:{i=I-+h[f+(q*24|0)+8>>3];break}default:i=M-+h[f+(q*24|0)+8>>3]*.5}h[g>>3]=i;B=f+(q*24|0)+16|0;h[J>>3]=+h[J>>3]-+h[B>>3];C=f+(q*24|0)+4|0;p=c[f+(q*24|0)>>2]|0;r=0;while(1){if((r|0)>=(b[C>>1]|0))break;o=p+4|0;m=c[o>>2]|0;if(m){h[D>>3]=+h[(+h[m+16>>3]>0.0?m:j)+16>>3];c[P>>2]=c[((c[m>>2]|0)==0?j:m)>>2];k=c[((c[m+4>>2]|0)==0?j:m)+4>>2]|0;c[E>>2]=k;m=c[m+24>>2]&127;if(!m)Q=12;else m=c[F>>2]&-128|m}else{h[D>>3]=+h[y>>3];c[P>>2]=c[j>>2];k=c[z>>2]|0;c[E>>2]=k;Q=12}if((Q|0)==12){Q=0;m=c[F>>2]&-128}c[F>>2]=m;CD(d,k);c[O>>2]=c[p>>2];c[G>>2]=P;h[H>>3]=+h[p+16>>3];if(s)n=1.0;else n=+h[p+24>>3];h[t>>3]=n;c[A>>2]=c[(c[o>>2]|0)+8>>2];c[u>>2]=c[p+8>>2];o=p+32|0;h[v>>3]=+h[o>>3];h[w>>3]=+h[B>>3];a[x>>0]=108;h[L>>3]=i;c[K>>2]=c[L>>2];c[K+4>>2]=c[L+4>>2];c[K+8>>2]=c[L+8>>2];c[K+12>>2]=c[L+12>>2];BD(d,K,O);n=+h[o>>3]+i;h[g>>3]=n;p=p+56|0;r=r+1|0;i=n}q=q+1|0}AD(d);l=R;return}function CF(a){a=a|0;$I(c[a>>2]|0);$I(c[a+4>>2]|0);$I(c[a+8>>2]|0);$I(c[a+16>>2]|0);$I(c[a+12>>2]|0);$I(c[a+20>>2]|0);$I(c[a+24>>2]|0);return}function DF(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;if(a|0){j=a+4|0;e=0;g=c[a>>2]|0;while(1){if((e|0)>=(b[j>>1]|0))break;k=g+4|0;d=0;f=c[g>>2]|0;while(1){if((d|0)>=(b[k>>1]|0))break;$I(c[f>>2]|0);h=c[f+8>>2]|0;if(h|0?(i=c[f+12>>2]|0,i|0):0)gb[i&127](h);d=d+1|0;f=f+56|0}e=e+1|0;g=g+24|0}d=c[a>>2]|0;if(d|0)$I(d);$I(a)}return}function EF(a){a=a|0;$I(c[a+32>>2]|0);$I(a);return}function FF(b,d){b=b|0;d=d|0;switch(a[b+4>>0]|0){case 1:{GF(c[b>>2]|0);break}case 3:{EF(c[b>>2]|0);break}default:DF(c[b>>2]|0)}if(d|0)$I(b);return}function GF(a){a=a|0;var b=0,d=0,e=0;e=a+84|0;if((c[a+100>>2]|0)==-1)Ll(c[e>>2]|0)|0;else{b=c[e>>2]|0;$I(c[a+92>>2]|0);$I(c[a+96>>2]|0);while(1){d=c[b>>2]|0;if(!d)break;HF(d);b=b+4|0}$I(c[e>>2]|0)}CF(a);$I(a);return}function HF(a){a=a|0;FF(a+88|0,0);CF(a);$I(a);return}function IF(b,e,f){b=b|0;e=e|0;f=f|0;var g=0;b=c[(c[(c[b+16>>2]|0)+104>>2]|0)+72>>2]|0;if((a[b+4>>0]|0)!=2?(g=JF(c[b>>2]|0,e)|0,(g|0)!=0):0){c[f>>2]=d[g+35>>0];b=g+48|0}else b=0;return b|0}function JF(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a+4>>2]|0;if(!((d|0)!=0?(jK(d,b)|0)==0:0))e=3;a:do if((e|0)==3){d=c[a+84>>2]|0;while(1){a=c[d>>2]|0;if(!a){a=0;break a}a=KF(a,b)|0;if(!a)d=d+4|0;else break}}while(0);return a|0}function KF(b,d){b=b|0;d=d|0;var e=0;e=c[b+4>>2]|0;if(!((e|0)!=0?(jK(e,d)|0)==0:0))if((a[b+92>>0]|0)==1)b=JF(c[b+88>>2]|0,d)|0;else b=0;return b|0}function LF(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return 0}function MF(d){d=d|0;var f=0.0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;p=d+92|0;c[p>>2]=ww((c[d+100>>2]<<2)+4|0)|0;n=ww((c[d+104>>2]<<2)+4|0)|0;c[d+96>>2]=n;o=d+32|0;m=c[d+84>>2]|0;while(1){l=c[m>>2]|0;if(!l)break;d=b[l+82>>1]|0;f=+h[l+72>>3];if(d<<16>>16==1)i=~~f;else{i=~~((f-+(O((a[o>>0]|0)+-1|0,(d&65535)+-1|0)|0))/+(d&65535));i=(i|0)>1?i:1}j=b[l+80>>1]|0;f=+h[l+64>>3];if(j<<16>>16==1)k=~~f;else{k=~~((f-+(O((a[o>>0]|0)+-1|0,(j&65535)+-1|0)|0))/+(j&65535));k=(k|0)>1?k:1}q=e[l+86>>1]|0;g=(d&65535)+q|0;d=q;while(1){if((d|0)>=(g|0))break;q=(c[p>>2]|0)+(d<<2)|0;r=c[q>>2]|0;c[q>>2]=(r|0)>(i|0)?r:i;d=d+1|0}d=e[l+84>>1]|0;g=(j&65535)+d|0;while(1){if((d|0)>=(g|0))break;r=n+(d<<2)|0;q=c[r>>2]|0;c[r>>2]=(q|0)>(k|0)?q:k;d=d+1|0}m=m+4|0}return}function NF(a){a=a|0;var b=0,d=0;d=l;l=l+16|0;b=d;if(a>>>0<21)a=c[54824+(a<<2)>>2]|0;else{c[b>>2]=a;qL(174085,122187,b)|0;a=174085}l=d;return a|0}function OF(a,b,d){a=a|0;b=b|0;d=d|0;var f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;k=a+104|0;l=a+100|0;j=d+16|0;f=0;g=0;while(1){if((f|0)>(c[k>>2]|0))break;i=oo(d,NF(f)|0,1)|0;Oo(i,122241,304,1)|0;m=i+16|0;c[(c[m>>2]|0)+176>>2]=0;o=ww((c[l>>2]<<2)+4|0)|0;n=c[m>>2]|0;c[n+172>>2]=o;c[n+184>>2]=0;n=ww((c[l>>2]<<2)+4|0)|0;c[(c[m>>2]|0)+180>>2]=n;if(!g)c[(c[j>>2]|0)+192>>2]=i;else c[(c[g+16>>2]|0)+164>>2]=i;f=f+1|0;g=i}j=b+16|0;f=0;g=0;while(1){if((f|0)>(c[l>>2]|0))break;i=oo(b,NF(f)|0,1)|0;Oo(i,122241,304,1)|0;o=i+16|0;c[(c[o>>2]|0)+176>>2]=0;m=ww((c[k>>2]<<2)+4|0)|0;n=c[o>>2]|0;c[n+172>>2]=m;c[n+184>>2]=0;n=ww((c[k>>2]<<2)+4|0)|0;c[(c[o>>2]|0)+180>>2]=n;if(!g)c[(c[j>>2]|0)+192>>2]=i;else c[(c[g+16>>2]|0)+164>>2]=i;f=f+1|0;g=i}f=c[a+84>>2]|0;while(1){g=c[f>>2]|0;if(!g)break;o=g+84|0;n=oo(d,NF(e[o>>1]|0)|0,0)|0;o=oo(d,NF((e[g+80>>1]|0)+(e[o>>1]|0)|0)|0,0)|0;PF(d,n,o,~~+h[g+64>>3]);o=g+86|0;n=oo(b,NF(e[o>>1]|0)|0,0)|0;o=oo(b,NF((e[g+82>>1]|0)+(e[o>>1]|0)|0)|0,0)|0;PF(b,n,o,~~+h[g+72>>3]);f=f+4|0}QF(d);QF(b);return}function PF(a,d,f,g){a=a|0;d=d|0;f=f|0;g=g|0;var h=0,i=0;h=bn(a,d,f,0,0)|0;if(!h){i=bn(a,d,f,0,1)|0;Oo(i,122254,176,1)|0;b[(c[i+16>>2]|0)+170>>1]=g;d=d+16|0;a=c[d>>2]|0;h=c[a+180>>2]|0;if(!h)a=xw((c[a+184>>2]<<2)+8|0)|0;else a=zw(h,(c[a+184>>2]<<2)+8|0)|0;g=c[d>>2]|0;c[g+180>>2]=a;g=g+184|0;h=c[g>>2]|0;c[g>>2]=h+1;c[a+(h<<2)>>2]=i;d=c[d>>2]|0;c[(c[d+180>>2]|0)+(c[d+184>>2]<<2)>>2]=0;d=f+16|0;a=c[d>>2]|0;h=c[a+172>>2]|0;if(!h)a=xw((c[a+176>>2]<<2)+8|0)|0;else a=zw(h,(c[a+176>>2]<<2)+8|0)|0;g=c[d>>2]|0;c[g+172>>2]=a;g=g+176|0;f=c[g>>2]|0;c[g>>2]=f+1;c[a+(f<<2)>>2]=i;i=c[d>>2]|0;c[(c[i+172>>2]|0)+(c[i+176>>2]<<2)>>2]=0}else{i=(c[h+16>>2]|0)+170|0;f=e[i>>1]|0;b[i>>1]=(f|0)>(g|0)?f:g}return}function QF(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0;d=c[(c[a+16>>2]|0)+192>>2]|0;while(1){f=d+16|0;h=c[(c[f>>2]|0)+164>>2]|0;if(!h)break;if(bn(a,d,h,0,0)|0){d=h;continue}g=bn(a,d,h,0,1)|0;Oo(g,122254,176,1)|0;b[(c[g+16>>2]|0)+170>>1]=0;d=c[f>>2]|0;e=c[d+180>>2]|0;if(!e)d=xw((c[d+184>>2]<<2)+8|0)|0;else d=zw(e,(c[d+184>>2]<<2)+8|0)|0;i=c[f>>2]|0;c[i+180>>2]=d;i=i+184|0;e=c[i>>2]|0;c[i>>2]=e+1;c[d+(e<<2)>>2]=g;f=c[f>>2]|0;c[(c[f+180>>2]|0)+(c[f+184>>2]<<2)>>2]=0;f=h+16|0;d=c[f>>2]|0;e=c[d+172>>2]|0;if(!e)d=xw((c[d+176>>2]<<2)+8|0)|0;else d=zw(e,(c[d+176>>2]<<2)+8|0)|0;e=c[f>>2]|0;c[e+172>>2]=d;e=e+176|0;i=c[e>>2]|0;c[e>>2]=i+1;c[d+(i<<2)>>2]=g;d=c[f>>2]|0;c[(c[d+172>>2]|0)+(c[d+176>>2]<<2)>>2]=0;d=h}return}function RF(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=a+92|0;e=0;f=0;b=c[(c[(c[b+16>>2]|0)+192>>2]|0)+16>>2]|0;while(1){b=c[b+164>>2]|0;if(!b)break;b=c[b+16>>2]|0;h=b+232|0;c[(c[g>>2]|0)+(f<<2)>>2]=(c[h>>2]|0)-e;e=c[h>>2]|0;f=f+1|0}a=a+96|0;e=0;f=0;b=c[(c[(c[d+16>>2]|0)+192>>2]|0)+16>>2]|0;while(1){b=c[b+164>>2]|0;if(!b)break;b=c[b+16>>2]|0;h=b+232|0;c[(c[a>>2]|0)+(f<<2)>>2]=(c[h>>2]|0)-e;e=c[h>>2]|0;f=f+1|0}return}function SF(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;h=l;l=l+16|0;g=h+4|0;d=h;c[d>>2]=c[4411];e=c[b+100>>2]|0;if((e|0)!=1?(f=b+104|0,(c[f>>2]|0)!=1):0){c[b+92>>2]=ww((e<<2)+4|0)|0;c[b+96>>2]=ww((c[f>>2]<<2)+4|0)|0;a[g>>0]=a[d>>0]|0;a[g+1>>0]=a[d+1>>0]|0;a[g+2>>0]=a[d+2>>0]|0;a[g+3>>0]=a[d+3>>0]|0;f=hn(122267,g,0)|0;a[g>>0]=a[d>>0]|0;a[g+1>>0]=a[d+1>>0]|0;a[g+2>>0]=a[d+2>>0]|0;a[g+3>>0]=a[d+3>>0]|0;g=hn(122272,g,0)|0;Oo(f,122277,280,1)|0;Oo(g,122277,280,1)|0;OF(b,f,g);hx(f,2,2147483647)|0;hx(g,2,2147483647)|0;RF(b,f,g);TF(f,g)}else MF(b);l=h;return}function TF(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=(c[b+16>>2]|0)+192|0;while(1){d=c[d>>2]|0;if(!d)break;f=d+16|0;d=c[f>>2]|0;e=c[d+172>>2]|0;if(e){$I(e);d=c[f>>2]|0}e=c[d+180>>2]|0;if(e){$I(e);d=c[f>>2]|0}d=d+164|0}mn(a)|0;mn(b)|0;return}function UF(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0.0,r=0.0;p=l;l=l+272|0;n=p+104|0;o=p+136|0;j=p+72|0;k=p;g=p+144|0;c[k+48>>2]=b;switch(Do(b)|0){case 0:{e=c[b+60>>2]|0;break}case 1:{e=so(b)|0;break}case 2:{e=so(c[((c[b>>2]&3|0)==2?b:b+-48|0)+40>>2]|0)|0;break}default:{}}i=k+52|0;c[i>>2]=e;m=c[e+60>>2]|0;h[k+32>>3]=+h[d+16>>3];c[k+16>>2]=c[d+4>>2];c[k+20>>2]=c[d+8>>2];c[k+40>>2]=0;f=cI(c[d>>2]|0,o,k)|0;if(!f){dm(n,128,g);a[d+82>>0]=0;e=HL(VF(b,n)|0)|0;c[d>>2]=e;if((c[d+12>>2]|0)==1)e=zB(e)|0;else e=wB(e,c[i>>2]|0)|0;$I(c[d>>2]|0);c[d>>2]=e;kw(c[(c[m+16>>2]|0)+144>>2]|0,d);hm(n);e=c[o>>2]|0}else{e=f+4|0;if((a[e>>0]|0)==1){if((c[(c[f>>2]|0)+24>>2]|0)==0?WF(b)|0:0){i=HL(WF(b)|0)|0;c[(c[f>>2]|0)+24>>2]=i}m=XF(m,c[f>>2]|0,0,k)|0;c[o>>2]=c[o>>2]|m;m=c[f>>2]|0;r=+h[m+64>>3]*.5;q=+h[m+72>>3]*.5;YF(j,-r,-q,r,q);m=c[f>>2]|0;c[n>>2]=c[j>>2];c[n+4>>2]=c[j+4>>2];c[n+8>>2]=c[j+8>>2];c[n+12>>2]=c[j+12>>2];c[n+16>>2]=c[j+16>>2];c[n+20>>2]=c[j+20>>2];c[n+24>>2]=c[j+24>>2];c[n+28>>2]=c[j+28>>2];ZF(m,n,15)}else{_F(c[(c[m+16>>2]|0)+144>>2]|0,c[f>>2]|0,k);n=c[f>>2]|0;q=+h[n+24>>3]*.5;r=+h[n+32>>3]*.5;YF(j,-q,-r,q,r);n=(c[f>>2]|0)+8|0;c[n>>2]=c[j>>2];c[n+4>>2]=c[j+4>>2];c[n+8>>2]=c[j+8>>2];c[n+12>>2]=c[j+12>>2];c[n+16>>2]=c[j+16>>2];c[n+20>>2]=c[j+20>>2];c[n+24>>2]=c[j+24>>2];c[n+28>>2]=c[j+28>>2]}h[d+24>>3]=+h[j+16>>3]-+h[j>>3];h[d+32>>3]=+h[j+24>>3]-+h[j+8>>3];c[d+72>>2]=f;if((a[e>>0]|0)==1){$I(c[d>>2]|0);c[d>>2]=HL(122290)|0}e=c[o>>2]|0}l=p;return e|0}function VF(b,d){b=b|0;d=d|0;var e=0;a:do switch(Do(b)|0){case 0:{gm(d,En(b)|0)|0;break}case 1:{gm(d,En(b)|0)|0;break}case 2:{gm(d,En(c[((c[b>>2]&3|0)==3?b:b+48|0)+40>>2]|0)|0)|0;e=b+-48|0;gm(d,En(c[((c[b>>2]&3|0)==2?b:e)+40>>2]|0)|0)|0;if(!(rn(so(c[((c[b>>2]&3|0)==2?b:e)+40>>2]|0)|0)|0)){gm(d,122549)|0;break a}else{gm(d,122546)|0;break a}}default:{}}while(0);e=d+4|0;b=c[e>>2]|0;if(b>>>0>=(c[d+8>>2]|0)>>>0){em(d,1)|0;b=c[e>>2]|0}a[b>>0]=0;d=c[d>>2]|0;c[e>>2]=d;return d|0}function WF(b){b=b|0;var c=0,d=0;c=Jm(b,122531)|0;if(!((c|0)!=0?(a[c>>0]|0)!=0:0))d=3;do if((d|0)==3){c=Jm(b,122540)|0;if(c|0?a[c>>0]|0:0)break;c=0}while(0);return c|0}function XF(f,g,i,j){f=f|0;g=g|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=l;l=l+16|0;u=w+8|0;t=w;v=g+108|0;k=c[v>>2]|0;if(k|0)qF(j,k,167328);c[g+80>>2]=i;k=cG(f,g,j)|0;r=g+36|0;f=b[r>>1]|0;if(!(f&128))a[g+32>>0]=2;i=g+33|0;if(!(f&32))a[i>>0]=1;SF(g);n=c[g+104>>2]|0;p=a[g+32>>0]|0;f=O(n+1|0,p)|0;o=d[i>>0]<<1;q=c[g+100>>2]|0;p=O(q+1|0,p)|0;m=g+96|0;f=o+f|0;i=0;while(1){if((i|0)>=(n|0))break;f=(c[(c[m>>2]|0)+(i<<2)>>2]|0)+f|0;i=i+1|0}n=g+92|0;i=p+o|0;m=0;while(1){if((m|0)>=(q|0))break;i=(c[(c[n>>2]|0)+(m<<2)>>2]|0)+i|0;m=m+1|0}n=g+38|0;do if(b[r>>1]&1){r=b[n>>1]|0;m=r&65535;if(r<<16>>16?(s=b[g+40>>1]|0,s<<16>>16):0){if(!((f|0)>(m|0)|(i|0)>(s&65535|0))){i=0;f=0;break}$l(0,122331,t)|0;k=1;i=0;f=0;break}$l(0,122365,u)|0;k=1}while(0);u=e[n>>1]|0;h[g+64>>3]=+(((f|0)>(u|0)?f:u)|0);u=e[g+40>>1]|0;h[g+72>>3]=+(((i|0)>(u|0)?i:u)|0);if(c[v>>2]|0)yF(j,167328);l=w;return k|0}function YF(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;h[a>>3]=b;h[a+8>>3]=c;h[a+16>>3]=d;h[a+24>>3]=e;return}function ZF(e,f,g){e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0,m=0.0,n=0.0,o=0,p=0,q=0.0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0.0,K=0;I=l;l=l+64|0;G=I+32|0;H=I;E=c[e+84>>2]|0;k=c[e+80>>2]|0;if((k|0?(i=c[k+24>>2]|0,i|0):0)?(j=e+24|0,(c[j>>2]|0)==0):0)c[j>>2]=HL(i)|0;F=e+48|0;i=f+16|0;n=+h[i>>3];m=+h[f>>3];k=~~(n-m-+(~~+h[e+64>>3]|0));if((k|0)<=-1)ma(122298,122134,1761,122308);o=f+24|0;y=+h[o>>3];p=f+8|0;q=+h[p>>3];r=+(~~+h[e+72>>3]|0);s=~~(y-q-r);if((s|0)<=-1)ma(122321,122134,1764,122308);t=b[e+36>>1]|0;j=t&65535;a:do if(j&1){b:do if((k|0)>0)switch(j&6){case 4:{h[i>>3]=m+r;break b}case 2:{J=+(k|0);h[i>>3]=n+J;m=m+J;h[f>>3]=m;break b}default:{J=+(k>>>1|0);m=m+J;h[f>>3]=m;h[i>>3]=n-J;break b}}while(0);if((s|0)>0)switch(t&24){case 16:{y=q+r;h[o>>3]=y;s=0;i=0;break a}case 8:{J=+(s|0);y=y+J;h[o>>3]=y;h[p>>3]=q+J;s=0;i=0;break a}default:{J=+(s>>>1|0);h[p>>3]=q+J;y=y-J;h[o>>3]=y;s=0;i=0;break a}}else{s=0;i=0}}else i=k;while(0);n=+(d[e+33>>0]|0);C=e+32|0;u=a[C>>0]|0;q=+(u<<24>>24);D=e+104|0;k=c[D>>2]|0;t=(i|0)/(k|0)|0;o=i-(O(t,k)|0)|0;o=~~(((o|0)>-1?.5:-.5)+ +(o|0));B=e+96|0;p=u<<24>>24;i=~~(m+n+q);j=0;while(1){if((j|0)>(k|0))break;A=(c[B>>2]|0)+(j<<2)|0;k=c[A>>2]|0;c[A>>2]=i;i=i+t+((j|0)<(o|0)&1)+k+p|0;j=j+1|0;k=c[D>>2]|0}A=e+100|0;k=c[A>>2]|0;t=(s|0)/(k|0)|0;p=s-(O(t,k)|0)|0;p=~~(((p|0)>-1?.5:-.5)+ +(p|0));z=e+92|0;o=u<<24>>24;i=~~(y-n-q);j=0;while(1){if((j|0)>(k|0))break;x=(c[z>>2]|0)+(j<<2)|0;k=c[x>>2]|0;c[x>>2]=i;i=i-t+(((j|0)<(p|0))<<31>>31)-k-o|0;j=j+1|0;k=c[A>>2]|0}u=(g|0)==0;v=H+16|0;w=H+24|0;x=H+8|0;i=E;while(1){o=c[i>>2]|0;if(!o)break;k=b[o+84>>1]|0;if(u){j=0;p=b[o+80>>1]|0;s=b[o+86>>1]|0;t=b[o+82>>1]|0}else{j=k<<16>>16==0?8:0;s=b[o+86>>1]|0;j=s<<16>>16==0?j|4:j;p=b[o+80>>1]|0;t=b[o+82>>1]|0;j=(((p&65535)+(k&65535)|0)==(c[D>>2]|0)?j|2:j)|((t&65535)+(s&65535)|0)==(c[A>>2]|0)}K=c[B>>2]|0;k=k&65535;h[H>>3]=+(c[K+(k<<2)>>2]|0);E=a[C>>0]|0;h[v>>3]=+((c[K+((p&65535)+k<<2)>>2]|0)-E|0);p=c[z>>2]|0;h[w>>3]=+(c[p+((s&65535)<<2)>>2]|0);h[x>>3]=+((c[p+((t&65535)+(s&65535)<<2)>>2]|0)+E|0);c[G>>2]=c[H>>2];c[G+4>>2]=c[H+4>>2];c[G+8>>2]=c[H+8>>2];c[G+12>>2]=c[H+12>>2];c[G+16>>2]=c[H+16>>2];c[G+20>>2]=c[H+20>>2];c[G+24>>2]=c[H+24>>2];c[G+28>>2]=c[H+28>>2];$F(o,G,j&g);i=i+4|0}a[e+35>>0]=g;c[F>>2]=c[f>>2];c[F+4>>2]=c[f+4>>2];c[F+8>>2]=c[f+8>>2];c[F+12>>2]=c[f+12>>2];c[F+16>>2]=c[f+16>>2];c[F+20>>2]=c[f+20>>2];c[F+24>>2]=c[f+24>>2];c[F+28>>2]=c[f+28>>2];l=I;return}function _F(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0.0,k=0.0,m=0,n=0,o=0.0,p=0.0,q=0.0,r=0,s=0.0,t=0.0,u=0.0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0.0,Q=0.0,R=0.0;O=l;l=l+112|0;H=O+48|0;I=O+16|0;J=O;c[I>>2]=0;c[I+4>>2]=0;c[I+8>>2]=0;c[I+12>>2]=0;c[I+16>>2]=0;c[I+20>>2]=0;c[I+24>>2]=0;c[I+28>>2]=0;K=e+4|0;L=f+16|0;M=f+32|0;N=I+16|0;r=b[K>>1]|0;n=r<<16>>16;g=0;j=-1.0;m=0;while(1){if((m|0)>=(n|0)){g=1;break}i=c[e>>2]|0;if((b[i+(m*24|0)+4>>1]|0)>1){g=0;break}i=c[(c[i+(m*24|0)>>2]|0)+4>>2]|0;if(!i){k=+h[M>>3];h[N>>3]=k;i=L}else{if(c[i+24>>2]&127|0){g=0;break}k=+h[(+h[i+16>>3]>0.0?i:L)+16>>3];h[N>>3]=k;i=(c[i>>2]|0)==0?L:i}i=c[i>>2]|0;c[I>>2]=i;if(!(j==-1.0)){if(k!=j){g=0;break}}else j=k;if(g){if(yJ(i,g)|0){g=0;break}}else g=i;m=m+1|0}a[e+6>>0]=g;E=f+48|0;F=f+20|0;G=I+4|0;w=f+40|0;x=I+24|0;y=d+144|0;z=H+4|0;v=J+8|0;A=H+16|0;B=H+24|0;C=H+8|0;D=H+12|0;f=(g|0)==0;j=0.0;s=0.0;t=0.0;u=0.0;n=0;g=r;while(1){if((n|0)>=(g<<16>>16|0))break;k=0.0;q=0.0;m=0;p=0.0;j=0.0;i=c[e>>2]|0;while(1){if((m|0)>=(b[i+(n*24|0)+4>>1]|0))break;c[H>>2]=rw(c[(c[i+(n*24|0)>>2]|0)+(m*56|0)>>2]|0,c[E>>2]|0)|0;i=(c[e>>2]|0)+(n*24|0)|0;g=c[(c[i>>2]|0)+(m*56|0)+4>>2]|0;if(!g){h[N>>3]=+h[M>>3];c[I>>2]=c[L>>2];c[G>>2]=c[F>>2];c[x>>2]=c[x>>2]&-128|c[w>>2]&127}else{g=c[g+24>>2]&127;if(!g)g=c[w>>2]&127;c[x>>2]=c[x>>2]&-128|g;r=c[(c[i>>2]|0)+(m*56|0)+4>>2]|0;h[N>>3]=+h[(+h[r+16>>3]>0.0?r:L)+16>>3];c[I>>2]=c[((c[r>>2]|0)==0?L:r)>>2];c[G>>2]=c[((c[r+4>>2]|0)==0?L:r)+4>>2]}i=c[y>>2]|0;c[z>>2]=bb[c[i>>2]&31](i,I,1)|0;qA(J,d,H);Q=+h[J>>3];o=+h[v>>3];$I(c[(c[(c[e>>2]|0)+(n*24|0)>>2]|0)+(m*56|0)>>2]|0);i=c[e>>2]|0;r=c[i+(n*24|0)>>2]|0;c[r+(m*56|0)>>2]=c[H>>2];h[r+(m*56|0)+32>>3]=Q;h[r+(m*56|0)+16>>3]=+h[A>>3];h[r+(m*56|0)+24>>3]=+h[B>>3];c[r+(m*56|0)+4>>2]=c[z>>2];c[r+(m*56|0)+8>>2]=c[C>>2];c[r+(m*56|0)+12>>2]=c[D>>2];P=+h[N>>3];R=+h[B>>3];k=R>k?R:k;q=Q+q;m=m+1|0;p=P>p?P:p;j=o>j?o:j}h[i+(n*24|0)+8>>3]=q;g=(n|0)==0;do if(f)if(g){o=p;k=p-k;g=i;break}else{o=p;k=t-u+p-k;g=i+(n*24|0)|0;break}else{o=j;k=g?p:j;g=i+(n*24|0)|0}while(0);h[g+16>>3]=k;s=q>s?q:s;t=o+t;u=+h[i+(n*24|0)+16>>3]+u;n=n+1|0;g=b[K>>1]|0}h[e+24>>3]=s;h[e+32>>3]=g<<16>>16==1?j:t;l=O;return}function $F(e,f,g){e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0.0,A=0.0;y=l;l=l+64|0;v=y+32|0;x=y;j=e+24|0;if((c[j>>2]|0)==0?(i=c[(c[e+96>>2]|0)+24>>2]|0,i|0):0)c[j>>2]=HL(i)|0;t=e+36|0;w=b[t>>1]|0;i=w&65535;a:do if(i&1){k=+h[e+64>>3];q=+h[e+72>>3];j=f+16|0;m=+h[j>>3];o=+h[f>>3];n=m-o-k;b:do if(n>0.0)switch(i&6){case 4:{m=o+k;h[j>>3]=m;k=o;break b}case 2:{m=n+m;h[j>>3]=m;k=o+n;h[f>>3]=k;break b}default:{p=n*.5;k=p+o;h[f>>3]=k;m=m-p;h[j>>3]=m;break b}}else k=o;while(0);i=f+24|0;p=+h[i>>3];j=f+8|0;n=+h[j>>3];o=p-n-q;if(o>0.0)switch(w&24){case 16:{o=n+q;h[i>>3]=o;break a}case 8:{q=o+p;h[i>>3]=q;n=n+o;h[j>>3]=n;o=q;break a}default:{o=o*.5;n=o+n;h[j>>3]=n;o=p-o;h[i>>3]=o;break a}}else o=p}else{k=+h[f>>3];n=+h[f+8>>3];m=+h[f+16>>3];o=+h[f+24>>3]}while(0);s=e+48|0;c[s>>2]=c[f>>2];c[s+4>>2]=c[f+4>>2];c[s+8>>2]=c[f+8>>2];c[s+12>>2]=c[f+12>>2];c[s+16>>2]=c[f+16>>2];c[s+20>>2]=c[f+20>>2];c[s+24>>2]=c[f+24>>2];c[s+28>>2]=c[f+28>>2];a[e+35>>0]=g;A=+(d[e+33>>0]|0);z=+(d[e+34>>0]|0);p=k+A+z;h[x>>3]=p;q=n+A+z;s=x+8|0;h[s>>3]=q;n=m-A-z;f=x+16|0;h[f>>3]=n;o=o-A-z;r=x+24|0;h[r>>3]=o;j=e+88|0;switch(a[e+92>>0]|0){case 1:{w=c[j>>2]|0;c[v>>2]=c[x>>2];c[v+4>>2]=c[x+4>>2];c[v+8>>2]=c[x+8>>2];c[v+12>>2]=c[x+12>>2];c[v+16>>2]=c[x+16>>2];c[v+20>>2]=c[x+20>>2];c[v+24>>2]=c[x+24>>2];c[v+28>>2]=c[x+28>>2];ZF(w,v,g);break}case 3:{i=c[j>>2]|0;k=+h[i+24>>3];m=n-p-+h[i+16>>3];c:do if(m>0.0)switch(w&6){case 4:{h[f>>3]=n-m;break c}case 2:{h[x>>3]=m+p;break c}default:break c}while(0);k=o-q-k;d:do if(k>0.0)switch(w&24){case 16:{h[r>>3]=o-k;break d}case 8:{h[s>>3]=k+q;break d}default:break d}while(0);c[v>>2]=c[x>>2];c[v+4>>2]=c[x+4>>2];c[v+8>>2]=c[x+8>>2];c[v+12>>2]=c[x+12>>2];c[v+16>>2]=c[x+16>>2];c[v+20>>2]=c[x+20>>2];c[v+24>>2]=c[x+24>>2];c[v+28>>2]=c[x+28>>2];aG(i,v);break}default:{i=c[j>>2]|0;k=+h[i+32>>3];m=n-p-+h[i+24>>3];e:do if(m>0.0?(u=w&6,u<<16>>16!=6):0)switch(u&7){case 4:{h[f>>3]=n-m;break e}case 2:{h[x>>3]=m+p;break e}default:{A=m*.5;h[x>>3]=A+p;h[f>>3]=n-A;break e}}while(0);k=o-q-k;f:do if(k>0.0)switch(w&24){case 16:{h[r>>3]=o-k;break f}case 8:{h[s>>3]=k+q;break f}default:{A=k*.5;h[s>>3]=A+q;h[r>>3]=o-A;break f}}while(0);w=i+8|0;c[w>>2]=c[x>>2];c[w+4>>2]=c[x+4>>2];c[w+8>>2]=c[x+8>>2];c[w+12>>2]=c[x+12>>2];c[w+16>>2]=c[x+16>>2];c[w+20>>2]=c[x+20>>2];c[w+24>>2]=c[x+24>>2];c[w+28>>2]=c[x+28>>2];x=b[t>>1]&768;bG(c[j>>2]|0,(x&1023)==512?108:(x&1023)==256?114:110)}}l=y;return}function aG(a,b){a=a|0;b=b|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];c[a+24>>2]=c[b+24>>2];c[a+28>>2]=c[b+28>>2];return}function bG(d,e){d=d|0;e=e|0;var f=0,g=0,h=0;g=b[d+4>>1]|0;f=0;while(1){if((f|0)>=(g|0))break;h=(c[d>>2]|0)+(f*24|0)+6|0;if(!(a[h>>0]|0))a[h>>0]=e;f=f+1|0}return}function cG(d,f,g){d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;l=f+84|0;t=c[l>>2]|0;u=xx()|0;v=gG()|0;i=0;h=0;k=Pl(t)|0;while(1){if(!k)break;j=Pl(c[k+8>>2]|0)|0;while(1){if(!j)break;j=c[j>>2]|0;i=i+1|0}h=h+1|0;if(a[k+12>>0]|0)kG(v,h);k=c[k>>2]|0}h=ww((i<<2)+4|0)|0;c[l>>2]=h;i=0;j=0;k=0;q=0;r=Pl(t)|0;while(1){if(!r)break;s=q&65535;p=0;o=Pl(c[r+8>>2]|0)|0;while(1){if(!o)break;n=c[o+8>>2]|0;c[h>>2]=n;k=dG(d,n,f,g)|0|k;l=eG(u,q,p,n)|0;b[n+86>>1]=s;b[n+84>>1]=l;l=l+(e[n+80>>1]|0)|0;m=q+(e[n+82>>1]|0)|0;if(lG(v,m)|0){p=n+100|0;a[p>>0]=a[p>>0]|2}p=l;h=h+4|0;o=c[o>>2]|0;i=(l|0)>(i|0)?l:i;j=(m|0)>(j|0)?m:j}q=q+1|0;r=c[r>>2]|0}c[f+100>>2]=j;c[f+104>>2]=i;Ll(t)|0;Ll(v)|0;Ax(u);return k|0}function dG(f,g,i,j){f=f|0;g=g|0;i=i|0;j=j|0;var k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0.0;u=l;l=l+16|0;t=u+8|0;s=u;c[g+96>>2]=i;q=g+36|0;o=b[q>>1]|0;if(!(o&64)){if(!(b[i+36>>1]&64))n=2;else n=a[i+34>>0]|0;a[g+34>>0]=n}if(!(o&32)){n=a[i+88>>0]|0;if(n<<24>>24<=-1)if(!(b[i+36>>1]&32))n=1;else n=a[i+33>>0]|0;a[g+33>>0]=n}n=g+88|0;p=g+92|0;switch(a[p>>0]|0){case 1:{o=XF(f,c[n>>2]|0,g,j)|0;i=c[n>>2]|0;n=o;o=i+64|0;i=i+72|0;break}case 3:{o=fG(c[n>>2]|0,j)|0;i=c[n>>2]|0;n=o;o=i+16|0;i=i+24|0;break}default:{_F(c[(c[f+16>>2]|0)+144>>2]|0,c[n>>2]|0,j);i=c[n>>2]|0;n=0;o=i+24|0;i=i+32|0}}k=+((d[g+33>>0]|0)+(d[g+34>>0]|0)<<1|0);m=+h[o>>3]+k;k=+h[i>>3]+k;i=g+38|0;do if(b[q>>1]&1){o=b[i>>1]|0;if(o<<16>>16?(r=b[g+40>>1]|0,r<<16>>16):0){if(!(m>+(o&65535)|k>+(r&65535))){m=0.0;k=0.0;break}if((a[p>>0]|0)==3){m=0.0;k=0.0;break}$l(0,122416,s)|0;n=1;m=0.0;k=0.0;break}$l(0,122449,t)|0;n=1}while(0);v=+(e[i>>1]|0);h[g+64>>3]=m>v?m:v;m=+(e[g+40>>1]|0);h[g+72>>3]=k>m?k:m;l=u;return n|0}function eG(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var f=0,g=0,h=0,i=0,j=0;j=d+80|0;i=(e[j>>1]|0)+-1|0;h=0;a:while(1){f=c;while(1){if(h)break a;g=i+f|0;while(1){if((g|0)<(f|0)){c=f;h=1;continue a}if(Fx(a,g,b)|0)break;g=g+-1|0}f=g+1|0}}h=d+82|0;f=c;while(1){if((f|0)<(c+(e[j>>1]|0)|0))g=b;else break;while(1){if((g|0)>=((e[h>>1]|0)+b|0))break;Dx(a,f,g);g=g+1|0}f=f+1|0}return c|0}function fG(b,d){b=b|0;d=d|0;var e=0.0,f=0.0,g=0,i=0,j=0,k=0,m=0;m=l;l=l+16|0;j=m;i=m+8|0;d=d+52|0;g=b+32|0;Qr(i,c[d>>2]|0,c[g>>2]|0);k=c[i>>2]|0;i=c[i+4>>2]|0;if((i&k|0)==-1){c[j>>2]=c[g>>2];$l(1,122499,j)|0;d=1;f=0.0;e=0.0}else{a[(c[(c[d>>2]|0)+16>>2]|0)+114>>0]=1;d=0;f=+(i|0);e=+(k|0)}c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;h[b+16>>3]=e;h[b+24>>3]=f;l=m;return d|0}function gG(){return Rl(54908,c[4345]|0)|0}function hG(a,b,d){a=a|0;b=b|0;d=d|0;d=ww(12)|0;c[d>>2]=c[b>>2];return d|0}function iG(a,b,c){a=a|0;b=b|0;c=c|0;$I(b);return}function jG(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;b=c[b>>2]|0;e=c[d>>2]|0;return ((b|0)>(e|0)?1:((b|0)<(e|0))<<31>>31)|0}function kG(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;bb[c[a>>2]&31](a,e,1)|0;l=d;return}function lG(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;b=(bb[c[a>>2]&31](a,e,512)|0)!=0&1;l=d;return b|0}function mG(a){a=a|0;var b=0;if(!(c[42419]|0)){b=ww((a<<2)+4|0)|0;c[42419]=b;c[b>>2]=169680;c[42430]=a}c[42431]=0;return}function nG(){$I(c[42419]|0);c[42419]=0;c[42431]=0;return}function oG(){c[42431]=0;return}function pG(){var a=0,b=0,d=0;b=c[42431]|0;d=c[42419]|0;a=1;while(1){if((a|0)>(b|0)){a=5;break}if((c[(c[d+(a<<2)>>2]|0)+4>>2]|0)==(a|0))a=a+1|0;else{a=4;break}}if((a|0)==4)ma(123205,122552,59,122558);else if((a|0)==5)return}function qG(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;f=c[42419]|0;g=c[f+(a<<2)>>2]|0;h=c[g>>2]|0;while(1){b=(a|0)/2|0;d=c[f+(b<<2)>>2]|0;e=f+(a<<2)|0;if((c[d>>2]|0)>=(h|0))break;c[e>>2]=d;c[d+4>>2]=a;a=b}c[e>>2]=g;c[g+4>>2]=a;return}function rG(a){a=a|0;var b=0,d=0;d=l;l=l+16|0;b=c[42431]|0;if((b|0)==(c[42430]|0)){$l(1,122566,d)|0;a=1}else{b=b+1|0;c[42431]=b;c[(c[42419]|0)+(b<<2)>>2]=a;qG(b);pG();a=0}l=d;return a|0}function sG(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;e=c[42419]|0;f=c[e+(a<<2)>>2]|0;g=c[f>>2]|0;h=c[42431]|0;i=(h|0)/2|0;while(1){if((a|0)>(i|0))break;d=a<<1;b=c[e+(d<<2)>>2]|0;if((d|0)<(h|0)){l=d|1;j=c[e+(l<<2)>>2]|0;k=(c[b>>2]|0)<(c[j>>2]|0);d=k?l:d;b=k?j:b}if((g|0)>=(c[b>>2]|0))break;c[e+(a<<2)>>2]=b;c[b+4>>2]=a;a=d}c[e+(a<<2)>>2]=f;c[f+4>>2]=a;return}function tG(){var a=0,b=0,d=0,e=0;b=c[42431]|0;if(!b)a=0;else{e=c[42419]|0;d=e+4|0;a=c[d>>2]|0;c[d>>2]=c[e+(b<<2)>>2];b=b+-1|0;c[42431]=b;if(b|0)sG(1);pG()}return a|0}function uG(a,b){a=a|0;b=b|0;c[a>>2]=b;qG(c[a+4>>2]|0);pG();return}function vG(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;m=b+16|0;j=c[m>>2]|0;j=(a[j+((c[e+12>>2]|0)*40|0)+36>>0]|0)!=(a[j+((c[e+16>>2]|0)*40|0)+36>>0]|0);k=~~((+h[d+64>>3]+-3.0-+h[d+48>>3])*.5);l=~~((+h[d+56>>3]+-3.0-+h[d+40>>3])*.5);g=(k|0)<(l|0)?k:l;n=d+4|0;f=0;while(1){b=c[n>>2]|0;if((f|0)>=(b|0)){g=f;break}i=c[d+8+(f<<2)>>2]|0;o=c[m>>2]|0;if((a[o+((c[i+12>>2]|0)*40|0)+36>>0]|0)==(a[o+((c[i+16>>2]|0)*40|0)+36>>0]|0)){g=f;break}wG(i,g);f=f+1|0}while(1){if((g|0)>=(b|0))break;f=c[d+8+(g<<2)>>2]|0;if(j|(f|0)==(e|0)){wG(f,a[(c[m>>2]|0)+((c[f+12>>2]|0)*40|0)+36>>0]|0?k:l);b=c[n>>2]|0}g=g+1|0}return}function wG(a,b){a=a|0;b=b|0;var d=0,e=0;d=a+8|0;e=c[d>>2]|0;c[d>>2]=e+1;if((e|0)>=(b|0)){c[d>>2]=0;h[a>>3]=+h[a>>3]+16384.0}return}function xG(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0,z=0.0,A=0.0,B=0.0,C=0,D=0,E=0.0;x=l;l=l+112|0;u=x+64|0;t=x+96|0;m=x+32|0;v=x;w=ww(28)|0;b=nn(a)|0;s=w+4|0;c[s>>2]=b;b=ww(b*72|0)|0;r=w+12|0;c[r>>2]=b;e=v+8|0;h[e>>3]=1797693134862315708145274.0e284;h[v>>3]=1797693134862315708145274.0e284;f=v+24|0;h[f>>3]=-1797693134862315708145274.0e284;g=v+16|0;h[g>>3]=-1797693134862315708145274.0e284;i=m+16|0;j=m+8|0;k=m+24|0;d=eo(a)|0;n=1797693134862315708145274.0e284;o=1797693134862315708145274.0e284;p=-1797693134862315708145274.0e284;q=-1797693134862315708145274.0e284;while(1){if(!d)break;C=d+16|0;D=c[C>>2]|0;z=(+h[D+96>>3]+ +h[D+88>>3])*.5;z=z<1.0?1.0:z;y=+h[D+80>>3]*.5;y=y<1.0?1.0:y;E=+h[D+16>>3];B=E-z;h[m>>3]=B;z=E+z;h[i>>3]=z;E=+h[D+24>>3];A=E-y;h[j>>3]=A;y=E+y;h[k>>3]=y;B=+h[(n>3];h[v>>3]=B;A=+h[(o>3];h[e>>3]=A;z=+h[(p>z?v:m)+16>>3];h[g>>3]=z;y=+h[(q>y?v:m)+24>>3];h[f>>3]=y;D=b+40|0;c[D>>2]=c[m>>2];c[D+4>>2]=c[m+4>>2];c[D+8>>2]=c[m+8>>2];c[D+12>>2]=c[m+12>>2];c[D+16>>2]=c[m+16>>2];c[D+20>>2]=c[m+20>>2];c[D+24>>2]=c[m+24>>2];c[D+28>>2]=c[m+28>>2];c[b>>2]=c[b>>2]|1;c[(c[C>>2]|0)+112>>2]=b;b=b+72|0;d=fo(a,d)|0;n=B;o=A;p=z;q=y}h[v>>3]=n+-36.0;h[e>>3]=o+-36.0;h[g>>3]=p+36.0;h[f>>3]=q+36.0;D=c[r>>2]|0;f=c[s>>2]|0;c[u>>2]=c[v>>2];c[u+4>>2]=c[v+4>>2];c[u+8>>2]=c[v+8>>2];c[u+12>>2]=c[v+12>>2];c[u+16>>2]=c[v+16>>2];c[u+20>>2]=c[v+20>>2];c[u+24>>2]=c[v+24>>2];c[u+28>>2]=c[v+28>>2];f=HG(D,f,t,u)|0;if(c[42367]&1|0){r=c[r>>2]|0;C=c[s>>2]|0;D=c[t>>2]|0;c[u>>2]=c[v>>2];c[u+4>>2]=c[v+4>>2];c[u+8>>2]=c[v+8>>2];c[u+12>>2]=c[v+12>>2];c[u+16>>2]=c[v+16>>2];c[u+20>>2]=c[v+20>>2];c[u+24>>2]=c[v+24>>2];c[u+28>>2]=c[v+28>>2];yG(r,C,u,f,D)}e=w+8|0;c[e>>2]=ww((c[t>>2]|0)*72|0)|0;c[w>>2]=c[t>>2];d=c[t>>2]|0;b=0;while(1){if((b|0)>=(d|0))break;D=(c[e>>2]|0)+(b*72|0)+40|0;C=f+(b<<5)|0;c[D>>2]=c[C>>2];c[D+4>>2]=c[C+4>>2];c[D+8>>2]=c[C+8>>2];c[D+12>>2]=c[C+12>>2];c[D+16>>2]=c[C+16>>2];c[D+20>>2]=c[C+20>>2];c[D+24>>2]=c[C+24>>2];c[D+28>>2]=c[C+28>>2];b=b+1|0}$I(f);c[u>>2]=c[v>>2];c[u+4>>2]=c[v+4>>2];c[u+8>>2]=c[v+8>>2];c[u+12>>2]=c[v+12>>2];c[u+16>>2]=c[v+16>>2];c[u+20>>2]=c[v+20>>2];c[u+24>>2]=c[v+24>>2];c[u+28>>2]=c[v+28>>2];c[w+16>>2]=zG(w,u)|0;l=x;return w|0}function yG(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0.0,i=0,j=0,k=0.0,m=0.0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0.0,v=0.0;q=l;l=l+128|0;p=q+96|0;o=q+64|0;j=q+32|0;r=q+16|0;s=q;m=+h[d+16>>3];n=+h[d>>3];k=+h[d+24>>3];g=+h[d+8>>3];i=c[13918]|0;XL(122581,i)|0;c[s>>2]=10;c[s+4>>2]=10;c[s+8>>2]=~~(m+10.0-n);c[s+12>>2]=~~(k+10.0-g);AL(i,123011,s)|0;h[r>>3]=10.0-n;h[r+8>>3]=10.0-g;AL(i,123059,r)|0;XL(123076,i)|0;d=0;while(1){if((d|0)>=(b|0))break;v=+h[a+(d*72|0)+48>>3];u=+h[a+(d*72|0)+56>>3];t=+h[a+(d*72|0)+64>>3];h[j>>3]=+h[a+(d*72|0)+40>>3];h[j+8>>3]=v;h[j+16>>3]=u;h[j+24>>3]=t;AL(i,123095,j)|0;d=d+1|0}XL(123113,i)|0;d=0;while(1){if((d|0)>=(f|0))break;t=+h[e+(d<<5)+8>>3];u=+h[e+(d<<5)+16>>3];v=+h[e+(d<<5)+24>>3];h[o>>3]=+h[e+(d<<5)>>3];h[o+8>>3]=t;h[o+16>>3]=u;h[o+24>>3]=v;AL(i,123132,o)|0;d=d+1|0}XL(123150,i)|0;h[p>>3]=n;h[p+8>>3]=g;h[p+16>>3]=m;h[p+24>>3]=k;AL(i,123132,p)|0;XL(122897,i)|0;l=q;return}function zG(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;A=l;l=l+32|0;t=A+16|0;k=A;w=c[a>>2]|0;y=XC(w<<2|2)|0;z=Rl(54944,c[4345]|0)|0;v=Rl(54980,c[4345]|0)|0;w=ww(w<<7)|0;f=ww(c[a>>2]<<4)|0;x=a+8|0;g=b+16|0;i=k+8|0;j=b+24|0;m=b+8|0;d=0;while(1){if((d|0)>=(c[a>>2]|0))break;n=c[x>>2]|0;o=n+(d*72|0)|0;c[n+(d*72|0)+32>>2]=4;p=n+(d*72|0)+36|0;c[p>>2]=f+(d<<2<<2);q=n+(d*72|0)+40|0;e=+h[n+(d*72|0)+56>>3];if(e<+h[g>>3]){h[k>>3]=e;h[i>>3]=+h[n+(d*72|0)+48>>3];c[t>>2]=c[k>>2];c[t+4>>2]=c[k+4>>2];c[t+8>>2]=c[k+8>>2];c[t+12>>2]=c[k+12>>2];s=AG(y,z,t,w,1)|0;c[s+20>>2]=o;c[c[p>>2]>>2]=s}e=+h[n+(d*72|0)+64>>3];if(e<+h[j>>3]){h[k>>3]=+h[q>>3];h[i>>3]=e;c[t>>2]=c[k>>2];c[t+4>>2]=c[k+4>>2];c[t+8>>2]=c[k+8>>2];c[t+12>>2]=c[k+12>>2];s=AG(y,v,t,w,0)|0;c[s+20>>2]=o;c[(c[p>>2]|0)+4>>2]=s}if(+h[q>>3]>+h[b>>3]){c[t>>2]=c[q>>2];c[t+4>>2]=c[q+4>>2];c[t+8>>2]=c[q+8>>2];c[t+12>>2]=c[q+12>>2];s=AG(y,z,t,w,1)|0;c[s+24>>2]=o;c[(c[p>>2]|0)+8>>2]=s}if(+h[n+(d*72|0)+48>>3]>+h[m>>3]){c[t>>2]=c[q>>2];c[t+4>>2]=c[q+4>>2];c[t+8>>2]=c[q+8>>2];c[t+12>>2]=c[q+12>>2];s=AG(y,v,t,w,0)|0;c[s+24>>2]=o;c[(c[p>>2]|0)+12>>2]=s}d=d+1|0}o=ww(c[y>>2]<<2)|0;r=a+4|0;s=a+12|0;p=t+8|0;m=0;q=0;n=0;while(1){d=c[r>>2]|0;if((n|0)>=(d|0)){b=0;break}g=c[s>>2]|0;i=g+(n*72|0)|0;j=g+(n*72|0)+36|0;c[j>>2]=o+(m<<2);b=g+(n*72|0)+40|0;c[t>>2]=c[b>>2];c[t+4>>2]=c[b+4>>2];c[t+8>>2]=c[b+8>>2];c[t+12>>2]=c[b+12>>2];b=g+(n*72|0)+56|0;k=g+(n*72|0)+32|0;d=bb[c[v>>2]&31](v,t,512)|0;while(1){if(!d)break;if(!(+h[d+8>>3]<+h[b>>3]))break;C=c[d>>2]|0;B=c[j>>2]|0;f=c[k>>2]|0;c[k>>2]=f+1;c[B+(f<<2)>>2]=C;c[(c[d>>2]|0)+24>>2]=i;d=bb[c[v>>2]&31](v,d,8)|0}f=g+(n*72|0)+64|0;d=bb[c[z>>2]&31](z,t,512)|0;while(1){if(!d){u=20;break}e=+h[f>>3];if(!(+h[d+16>>3]>2]|0;B=c[j>>2]|0;C=c[k>>2]|0;c[k>>2]=C+1;c[B+(C<<2)>>2]=b;c[(c[d>>2]|0)+24>>2]=i;d=bb[c[z>>2]&31](z,d,8)|0}if((u|0)==20){u=0;e=+h[f>>3]}h[p>>3]=e;b=g+(n*72|0)+56|0;d=bb[c[v>>2]&31](v,t,512)|0;while(1){if(!d){u=25;break}e=+h[b>>3];if(!(+h[d+8>>3]>2]|0;B=c[j>>2]|0;C=c[k>>2]|0;c[k>>2]=C+1;c[B+(C<<2)>>2]=D;c[(c[d>>2]|0)+20>>2]=i;d=bb[c[v>>2]&31](v,d,8)|0}if((u|0)==25){u=0;e=+h[b>>3]}h[t>>3]=e;h[p>>3]=+h[g+(n*72|0)+48>>3];d=bb[c[z>>2]&31](z,t,512)|0;while(1){if(!d)break;if(!(+h[d+16>>3]<+h[f>>3]))break;B=c[d>>2]|0;C=c[j>>2]|0;D=c[k>>2]|0;c[k>>2]=D+1;c[C+(D<<2)>>2]=B;c[(c[d>>2]|0)+20>>2]=i;d=bb[c[z>>2]&31](z,d,8)|0}D=c[k>>2]|0;m=D+m|0;q=(D|0)>(q|0)?D:q;n=n+1|0}while(1){if((b|0)>=(d|0))break;BG((c[s>>2]|0)+(b*72|0)|0);b=b+1|0;d=c[r>>2]|0}d=c[y>>2]|0;D=c[y+16>>2]|0;c[D+(d*40|0)+32>>2]=d;d=d+1|0;c[D+(d*40|0)+32>>2]=d;WC(y,q);d=0;while(1){if((d|0)>=(c[a>>2]|0))break;CG((c[x>>2]|0)+(d*72|0)|0,y);d=d+1|0}Ll(z)|0;Ll(v)|0;$I(w);DG(y);UC(y);l=A;return y|0}function AG(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0;h=bb[c[d>>2]&31](d,e,512)|0;do if(!h){b=YC(b)|0;if(!f)ma(122994,122942,291,123001);else{h=c[b+32>>2]|0;i=f+(h<<5)|0;f=f+(h<<5)+8|0;c[f>>2]=c[e>>2];c[f+4>>2]=c[e+4>>2];c[f+8>>2]=c[e+8>>2];c[f+12>>2]=c[e+12>>2];c[i>>2]=b;a[b+36>>0]=g;bb[c[d>>2]&31](d,i,1)|0;break}}else i=h;while(0);return c[i>>2]|0}function BG(b){b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0;a:do if((+h[b+64>>3]+-3.0-+h[b+48>>3])*.5<2.0){i=c[b+32>>2]|0;j=b+36|0;g=0;while(1){if((g|0)>=(i|0))break a;d=c[(c[j>>2]|0)+(g<<2)>>2]|0;b:do if(a[d+36>>0]|0){f=c[d+20>>2]|0;if((f|0)==(b|0)){e=c[d+24>>2]|0;d=e;e=c[e>>2]|0;do{c[d>>2]=e|8;d=c[c[d+36>>2]>>2]|0;if(!d)break b;d=c[d+24>>2]|0;e=c[d>>2]|0}while(!(e&1|0))}else{e=f;d=c[f>>2]|0;do{c[e>>2]=d|8;d=c[(c[e+36>>2]|0)+8>>2]|0;if(!d)break b;e=c[d+20>>2]|0;d=c[e>>2]|0}while(!(d&1|0))}}while(0);g=g+1|0}}while(0);c:do if((+h[b+56>>3]+-3.0-+h[b+40>>3])*.5<2.0){i=c[b+32>>2]|0;j=b+36|0;g=0;while(1){if((g|0)>=(i|0))break c;d=c[(c[j>>2]|0)+(g<<2)>>2]|0;d:do if(!(a[d+36>>0]|0)){f=c[d+20>>2]|0;if((f|0)==(b|0)){e=c[d+24>>2]|0;d=e;e=c[e>>2]|0;do{c[d>>2]=e|16;d=c[(c[d+36>>2]|0)+4>>2]|0;if(!d)break d;d=c[d+24>>2]|0;e=c[d>>2]|0}while(!(e&1|0))}else{e=f;d=c[f>>2]|0;do{c[e>>2]=d|16;d=c[(c[e+36>>2]|0)+12>>2]|0;if(!d)break d;e=c[d+20>>2]|0;d=c[e>>2]|0}while(!(d&1|0))}}while(0);g=g+1|0}}while(0);return}function CG(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0,g=0.0,i=0.0,j=0,k=0,l=0,m=0,n=0,o=0,p=0.0,q=0;g=+h[a+56>>3]-+h[a+40>>3];i=+h[a+64>>3]-+h[a+48>>3];f=(i+g)*.5+500.0;if((i+-3.0)*.5<2.0){l=(c[a>>2]&8|0)==0;f=l?16384.0:f;p=l?16384.0:g}else p=g;if((g+-3.0)*.5<2.0){l=(c[a>>2]&16|0)==0;i=l?16384.0:i;f=l?16384.0:f}l=a+36|0;d=c[l>>2]|0;e=c[d+8>>2]|0;if((e|0)!=0?(j=c[d+4>>2]|0,(j|0)!=0):0){j=ZC(b,e,j,f)|0;e=a+4|0;d=c[e>>2]|0;c[e>>2]=d+1;c[a+8+(d<<2)>>2]=j;d=c[l>>2]|0}e=c[d+4>>2]|0;if((e|0)!=0?(k=c[d>>2]|0,(k|0)!=0):0){k=ZC(b,e,k,f)|0;j=a+4|0;d=c[j>>2]|0;c[j>>2]=d+1;c[a+8+(d<<2)>>2]=k;d=c[l>>2]|0}e=c[d+8>>2]|0;if((e|0)!=0?(m=c[d+12>>2]|0,(m|0)!=0):0){m=ZC(b,e,m,f)|0;k=a+4|0;d=c[k>>2]|0;c[k>>2]=d+1;c[a+8+(d<<2)>>2]=m;d=c[l>>2]|0}e=c[d+12>>2]|0;if((e|0)!=0?(n=c[d>>2]|0,(n|0)!=0):0){n=ZC(b,e,n,f)|0;m=a+4|0;d=c[m>>2]|0;c[m>>2]=d+1;c[a+8+(d<<2)>>2]=n;d=c[l>>2]|0}e=c[d+4>>2]|0;if((e|0)!=0?(o=c[d+12>>2]|0,(o|0)!=0):0){o=ZC(b,e,o,i)|0;n=a+4|0;d=c[n>>2]|0;c[n>>2]=d+1;c[a+8+(d<<2)>>2]=o;d=c[l>>2]|0}e=c[d+8>>2]|0;if(e|0?(q=c[d>>2]|0,q|0):0){b=ZC(b,e,q,p)|0;o=a+4|0;q=c[o>>2]|0;c[o>>2]=q+1;c[a+8+(q<<2)>>2]=b}return}function DG(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=l;l=l+16|0;i=j+8|0;h=j;f=a+16|0;g=c[13918]|0;e=0;while(1){if((e|0)>=(c[a>>2]|0)){b=10;break}b=c[f>>2]|0;d=b+(e*40|0)+20|0;if((c[d>>2]|0)==0?(c[h>>2]=e,AL(g,122907,h)|0,(c[d>>2]|0)==0):0){b=5;break}b=b+(e*40|0)+24|0;if((c[b>>2]|0)==0?(c[i>>2]=e,AL(g,122959,i)|0,(c[b>>2]|0)==0):0){b=8;break}e=e+1|0}if((b|0)==5)ma(122929,122942,311,122949);else if((b|0)==8)ma(122981,122942,313,122949);else if((b|0)==10){l=j;return}}function EG(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0.0;e=+h[b+8>>3];f=+h[c+8>>3];if(!(e>f))if(!(e>3];e=+h[c>>3];if(f>e)a=1;else a=(f>31}else a=-1;else a=1;return a|0}function FG(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0.0;e=+h[b>>3];f=+h[c>>3];if(!(e>f))if(!(e>3];e=+h[c+8>>3];if(f>e)a=1;else a=(f>31}else a=-1;else a=1;return a|0}function GG(a){a=a|0;var b=0,d=0;d=a+8|0;$I(c[(c[d>>2]|0)+36>>2]|0);b=a+12|0;$I(c[(c[b>>2]|0)+36>>2]|0);$I(c[d>>2]|0);$I(c[b>>2]|0);$C(c[a+16>>2]|0);Ll(c[a+20>>2]|0)|0;Ll(c[a+24>>2]|0)|0;$I(a);return}function HG(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+32|0;h=p;i=b<<2;f=i+4|0;i=i+5|0;o=xw(i*56|0)|0;i=ww(i<<2)|0;g=f*5|1;j=xw(g*72|0)|0;m=g<<5;k=ww(m)|0;m=ww(m)|0;c[h>>2]=c[e>>2];c[h+4>>2]=c[e+4>>2];c[h+8>>2]=c[e+8>>2];c[h+12>>2]=c[e+12>>2];c[h+16>>2]=c[e+16>>2];c[h+20>>2]=c[e+20>>2];c[h+24>>2]=c[e+24>>2];c[h+28>>2]=c[e+28>>2];IG(a,b,h,o,0);zM(173);JG(f,i);TG(f,o,i,g,j)|0;n=KG(f,o,j,0,k)|0;c[h>>2]=c[e>>2];c[h+4>>2]=c[e+4>>2];c[h+8>>2]=c[e+8>>2];c[h+12>>2]=c[e+12>>2];c[h+16>>2]=c[e+16>>2];c[h+20>>2]=c[e+20>>2];c[h+24>>2]=c[e+24>>2];c[h+28>>2]=c[e+28>>2];IG(a,b,h,o,1);JG(f,i);TG(f,o,i,g,j)|0;f=KG(f,o,j,1,m)|0;g=ww(O(n<<5,f)|0)|0;b=0;a=0;while(1){if((b|0)>=(f|0))break;h=m+(b<<5)|0;e=0;while(1){if((e|0)>=(n|0))break;q=a+((LG(g+(a<<5)|0,h,k+(e<<5)|0)|0)!=0&1)|0;e=e+1|0;a=q}b=b+1|0}q=zw(g,a<<5)|0;$I(o);$I(i);$I(j);$I(k);$I(m);c[d>>2]=a;l=p;return q|0}function IG(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;j=l;l=l+96|0;h=j+64|0;i=j;c[h>>2]=c[d>>2];c[h+4>>2]=c[d+4>>2];c[h+8>>2]=c[d+8>>2];c[h+12>>2]=c[d+12>>2];c[h+16>>2]=c[d+16>>2];c[h+20>>2]=c[d+20>>2];c[h+24>>2]=c[d+24>>2];c[h+28>>2]=c[d+28>>2];RG(h,f,1,i);d=SG(e,1,i)|0;g=0;while(1){if((g|0)>=(b|0))break;k=a+(g*72|0)+40|0;c[h>>2]=c[k>>2];c[h+4>>2]=c[k+4>>2];c[h+8>>2]=c[k+8>>2];c[h+12>>2]=c[k+12>>2];c[h+16>>2]=c[k+16>>2];c[h+20>>2]=c[k+20>>2];c[h+24>>2]=c[k+24>>2];c[h+28>>2]=c[k+28>>2];RG(h,f,0,i);d=SG(e,d,i)|0;g=g+1|0}l=j;return}function JG(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=0;while(1){if((d|0)>(a|0))break;c[b+(d<<2)>>2]=d;d=d+1|0}g=a+1|0;d=1;while(1){if((d|0)>(a|0))break;h=~~(+BM()*+(g-d|0)+ +(d|0));e=b+(d<<2)|0;f=b+(h<<2)|0;if((d|0)!=(h|0)){h=c[e>>2]|0;c[e>>2]=c[f>>2];c[f>>2]=h}d=d+1|0}return}function KG(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;g=a*5|0;j=g+1|0;l=ww(j<<2)|0;c[42432]=ww(j<<4)|0;c[42433]=ww((a*56|0)+56|0)|0;j=ww(a<<2)|0;c[42434]=j;k=0;while(1){if((k|0)>(g|0))break;if(MG(d+(k*72|0)|0,b)|0)break;k=k+1|0}h=c[42432]|0;i=c[42433]|0;g=1;while(1){if((g|0)>(a|0))break;c[h+(g<<4)+8>>2]=c[b+(g*56|0)+48>>2];m=b+(g*56|0)+44|0;c[h+(g<<4)+4>>2]=c[m>>2];c[h+(g<<4)>>2]=g;n=i+(g*56|0)|0;o=b+(g*56|0)|0;c[n>>2]=c[o>>2];c[n+4>>2]=c[o+4>>2];c[n+8>>2]=c[o+8>>2];c[n+12>>2]=c[o+12>>2];c[i+(g*56|0)+16>>2]=c[m>>2];c[i+(g*56|0)+32>>2]=g;c[i+(g*56|0)+48>>2]=1;g=g+1|0}c[42435]=a;c[42436]=0;c[j>>2]=1;g=c[d+(k*72|0)+40>>2]|0;if((g|0)<=0){g=c[d+(k*72|0)+48>>2]|0;if((g|0)>0)g=NG(l,f,0,b,d,0,k,g,e,2)|0;else g=0}else g=NG(l,f,0,b,d,0,k,g,e,1)|0;$I(l);$I(c[42432]|0);$I(c[42433]|0);$I(c[42434]|0);return g|0}function LG(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0,f=0.0,g=0.0;g=+h[(+h[b>>3]>+h[c>>3]?b:c)>>3];f=+h[(+h[b+16>>3]<+h[c+16>>3]?b:c)+16>>3];h[a+16>>3]=f;h[a>>3]=g;e=+h[(+h[b+8>>3]>+h[c+8>>3]?b:c)+8>>3];d=+h[(+h[b+24>>3]<+h[c+24>>3]?b:c)+24>>3];h[a+24>>3]=d;h[a+8>>3]=e;return !(g>=f)&!(e>=d)&1|0}function MG(a,b){a=a|0;b=b|0;var d=0.0,e=0.0,f=0;f=c[a+4>>2]|0;do if((c[a+68>>2]|0)!=2?!((f|0)<1|(c[a>>2]|0)<1):0){if(!((c[a+40>>2]|0)<1?(c[a+44>>2]|0)<1:0)){if((c[a+48>>2]|0)>=1){a=0;break}if((c[a+52>>2]|0)>=1){a=0;break}}d=+h[b+(f*56|0)+24>>3];e=+h[b+(f*56|0)+8>>3];if(!(d>e+1.0e-07))if(d>3]>+h[b+(f*56|0)>>3]&1;else a=1}else a=0;while(0);return a|0}function NG(a,b,d,e,f,g,i,j,k,l){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0.0,J=0,K=0.0,L=0,M=0,N=0,O=0,P=0;D=(k|0)==0;C=i;a:while(1){y=f+(C*72|0)|0;if((C|0)<1)break;i=a+(C<<2)|0;if(c[i>>2]|0)break;c[i>>2]=1;v=f+(C*72|0)+8|0;t=f+(C*72|0)+16|0;p=+h[t>>3];w=f+(C*72|0)+24|0;x=f+(C*72|0)+32|0;o=+h[x>>3];if((p>o?(A=c[y>>2]|0,I=+h[e+(A*56|0)>>3],I==+h[e+(A*56|0)+16>>3]):0)?(A=c[f+(C*72|0)+4>>2]|0,K=+h[e+(A*56|0)>>3],K==+h[e+(A*56|0)+16>>3]):0){i=b+(d<<5)|0;if(D){h[i>>3]=I;q=p;p=K}else{h[i>>3]=o;q=-I;o=-K}h[b+(d<<5)+8>>3]=o;h[b+(d<<5)+16>>3]=p;h[b+(d<<5)+24>>3]=q;d=d+1|0}i=f+(C*72|0)+40|0;z=c[i>>2]|0;do if((z|0)<1?(L=f+(C*72|0)+44|0,(c[L>>2]|0)<1):0){i=f+(C*72|0)+48|0;n=f+(C*72|0)+52|0;if((c[i>>2]|0)>0?(M=c[n>>2]|0,(M|0)>0):0){m=c[f+(M*72|0)>>2]|0;l=c[y>>2]|0;if((M|0)==(j|0)){l=OG(g,l,m)|0;d=NG(a,b,d,e,f,g,c[n>>2]|0,C,k,1)|0;g=l;l=1;break}else{l=OG(g,m,l)|0;d=NG(a,b,d,e,f,g,c[i>>2]|0,C,k,1)|0;g=l;i=n;l=1;break}}d=NG(a,b,d,e,f,g,z,C,k,2)|0;d=NG(a,b,d,e,f,g,c[L>>2]|0,C,k,2)|0;d=NG(a,b,d,e,f,g,c[i>>2]|0,C,k,1)|0;i=n;l=1}else P=19;while(0);do if((P|0)==19){P=0;A=f+(C*72|0)+48|0;r=c[A>>2]|0;if((r|0)<1?(N=f+(C*72|0)+52|0,(c[N>>2]|0)<1):0){n=f+(C*72|0)+44|0;if((z|0)>0?(O=c[n>>2]|0,(O|0)>0):0){m=c[f+(C*72|0)+4>>2]|0;l=c[f+(z*72|0)+4>>2]|0;if((O|0)==(j|0)){l=OG(g,l,m)|0;d=NG(a,b,d,e,f,g,c[n>>2]|0,C,k,2)|0;g=l;l=2;break}else{l=OG(g,m,l)|0;d=NG(a,b,d,e,f,g,c[i>>2]|0,C,k,2)|0;g=l;i=n;l=2;break}}d=NG(a,b,d,e,f,g,z,C,k,2)|0;d=NG(a,b,d,e,f,g,c[n>>2]|0,C,k,2)|0;d=NG(a,b,d,e,f,g,c[A>>2]|0,C,k,1)|0;i=N;l=1;break}u=f+(C*72|0)+44|0;s=c[u>>2]|0;m=(s|0)>0;if((z|0)>0){if(m){if((r|0)>0?(E=f+(C*72|0)+52|0,F=c[E>>2]|0,(F|0)>0):0){n=c[f+(F*72|0)>>2]|0;m=c[f+(z*72|0)+4>>2]|0;if(!((l|0)==2&(F|0)==(j|0))?!((l|0)==1&(s|0)==(j|0)):0){l=OG(g,n,m)|0;d=NG(a,b,d,e,f,g,c[i>>2]|0,C,k,2)|0;d=NG(a,b,d,e,f,g,c[A>>2]|0,C,k,1)|0;d=NG(a,b,d,e,f,l,c[u>>2]|0,C,k,2)|0;g=l;i=E;l=1;break}l=OG(g,m,n)|0;d=NG(a,b,d,e,f,g,c[u>>2]|0,C,k,2)|0;d=NG(a,b,d,e,f,g,c[E>>2]|0,C,k,1)|0;d=NG(a,b,d,e,f,l,c[i>>2]|0,C,k,2)|0;g=l;i=A;l=1;break}m=c[y>>2]|0;if(+B(+(+h[x>>3]-+h[e+(m*56|0)+24>>3]))<=1.0e-07?+B(+(+h[w>>3]-+h[e+(m*56|0)+16>>3]))<=1.0e-07:0){n=c[f+(z*72|0)+4>>2]|0;m=c[e+(m*56|0)+44>>2]|0;if((l|0)==1&(z|0)==(j|0)){l=OG(g,m,n)|0;d=NG(a,b,d,e,f,g,c[i>>2]|0,C,k,2)|0;d=NG(a,b,d,e,f,l,c[A>>2]|0,C,k,1)|0;d=NG(a,b,d,e,f,l,c[u>>2]|0,C,k,2)|0;g=l;i=f+(C*72|0)+52|0;l=1;break}else{l=OG(g,n,m)|0;d=NG(a,b,d,e,f,g,c[u>>2]|0,C,k,2)|0;d=NG(a,b,d,e,f,g,c[A>>2]|0,C,k,1)|0;d=NG(a,b,d,e,f,g,c[f+(C*72|0)+52>>2]|0,C,k,1)|0;g=l;l=2;break}}n=c[f+(C*72|0)+4>>2]|0;m=c[f+(z*72|0)+4>>2]|0;if((l|0)==1&(s|0)==(j|0)){l=OG(g,m,n)|0;d=NG(a,b,d,e,f,g,c[u>>2]|0,C,k,2)|0;d=NG(a,b,d,e,f,l,c[f+(C*72|0)+52>>2]|0,C,k,1)|0;d=NG(a,b,d,e,f,l,c[A>>2]|0,C,k,1)|0;g=l;l=2;break}else{l=OG(g,n,m)|0;d=NG(a,b,d,e,f,g,c[i>>2]|0,C,k,2)|0;d=NG(a,b,d,e,f,g,c[A>>2]|0,C,k,1)|0;d=NG(a,b,d,e,f,g,c[f+(C*72|0)+52>>2]|0,C,k,1)|0;g=l;i=u;l=2;break}}}else if(!m)break a;if((r|0)>0?(G=f+(C*72|0)+52|0,H=c[G>>2]|0,(H|0)>0):0){n=c[y>>2]|0;if(+B(+(+h[t>>3]-+h[e+(n*56|0)+8>>3]))<=1.0e-07?+B(+(+h[v>>3]-+h[e+(n*56|0)>>3]))<=1.0e-07:0){m=c[f+(H*72|0)>>2]|0;if((l|0)==2&(r|0)==(j|0)){l=OG(g,m,n)|0;d=NG(a,b,d,e,f,g,c[A>>2]|0,C,k,1)|0;d=NG(a,b,d,e,f,l,c[i>>2]|0,C,k,2)|0;d=NG(a,b,d,e,f,l,c[f+(C*72|0)+44>>2]|0,C,k,2)|0;g=l;i=G;l=1;break}else{l=OG(g,n,m)|0;d=NG(a,b,d,e,f,g,c[f+(C*72|0)+44>>2]|0,C,k,2)|0;d=NG(a,b,d,e,f,g,c[G>>2]|0,C,k,1)|0;d=NG(a,b,d,e,f,g,c[i>>2]|0,C,k,2)|0;g=l;i=A;l=1;break}}m=c[f+(H*72|0)>>2]|0;n=c[e+((c[f+(C*72|0)+4>>2]|0)*56|0)+44>>2]|0;if((l|0)==2&(H|0)==(j|0)){l=OG(g,n,m)|0;d=NG(a,b,d,e,f,g,c[G>>2]|0,C,k,1)|0;d=NG(a,b,d,e,f,l,c[f+(C*72|0)+44>>2]|0,C,k,2)|0;d=NG(a,b,d,e,f,l,c[i>>2]|0,C,k,2)|0;g=l;i=A;l=1;break}else{l=OG(g,m,n)|0;d=NG(a,b,d,e,f,g,c[i>>2]|0,C,k,2)|0;d=NG(a,b,d,e,f,g,c[A>>2]|0,C,k,1)|0;d=NG(a,b,d,e,f,g,c[f+(C*72|0)+44>>2]|0,C,k,2)|0;g=l;i=G;l=1;break}}o=+h[t>>3];n=c[y>>2]|0;if(((+B(+(o-+h[e+(n*56|0)+8>>3]))<=1.0e-07?+B(+(+h[v>>3]-+h[e+(n*56|0)>>3]))<=1.0e-07:0)?(J=c[f+(C*72|0)+4>>2]|0,+B(+(+h[x>>3]-+h[e+(J*56|0)+8>>3]))<=1.0e-07):0)?+B(+(+h[w>>3]-+h[e+(J*56|0)>>3]))<=1.0e-07:0)if((l|0)==1){l=OG(g,n,J)|0;d=NG(a,b,d,e,f,g,c[i>>2]|0,C,k,2)|0;d=NG(a,b,d,e,f,g,c[f+(C*72|0)+44>>2]|0,C,k,2)|0;d=NG(a,b,d,e,f,l,c[f+(C*72|0)+52>>2]|0,C,k,1)|0;g=l;i=A;l=1;break}else{l=OG(g,J,n)|0;d=NG(a,b,d,e,f,g,c[f+(C*72|0)+52>>2]|0,C,k,1)|0;d=NG(a,b,d,e,f,g,c[A>>2]|0,C,k,1)|0;d=NG(a,b,d,e,f,l,c[i>>2]|0,C,k,2)|0;g=l;i=f+(C*72|0)+44|0;l=2;break}j=c[f+(C*72|0)+4>>2]|0;if(((+B(+(o-+h[e+(j*56|0)+24>>3]))<=1.0e-07?+B(+(+h[v>>3]-+h[e+(j*56|0)+16>>3]))<=1.0e-07:0)?+B(+(+h[x>>3]-+h[e+(n*56|0)+24>>3]))<=1.0e-07:0)?+B(+(+h[w>>3]-+h[e+(n*56|0)+16>>3]))<=1.0e-07:0){m=c[e+(j*56|0)+44>>2]|0;j=c[e+(n*56|0)+44>>2]|0;if((l|0)==1){l=OG(g,j,m)|0;d=NG(a,b,d,e,f,g,c[i>>2]|0,C,k,2)|0;d=NG(a,b,d,e,f,g,c[f+(C*72|0)+44>>2]|0,C,k,2)|0;d=NG(a,b,d,e,f,l,c[f+(C*72|0)+52>>2]|0,C,k,1)|0;g=l;i=A;l=1;break}else{l=OG(g,m,j)|0;d=NG(a,b,d,e,f,g,c[f+(C*72|0)+52>>2]|0,C,k,1)|0;d=NG(a,b,d,e,f,g,c[A>>2]|0,C,k,1)|0;d=NG(a,b,d,e,f,l,c[i>>2]|0,C,k,2)|0;g=l;i=f+(C*72|0)+44|0;l=2;break}}d=NG(a,b,d,e,f,g,z,C,k,2)|0;d=NG(a,b,d,e,f,g,c[A>>2]|0,C,k,1)|0;d=NG(a,b,d,e,f,g,c[f+(C*72|0)+44>>2]|0,C,k,2)|0;i=f+(C*72|0)+52|0;l=1}while(0);j=C;C=c[i>>2]|0}return d|0}function OG(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;f=l;l=l+16|0;r=f+4|0;i=f;e=(c[42436]|0)+1|0;c[42436]=e;m=c[42433]|0;PG(b,d,r,i);r=c[r>>2]|0;h=c[m+(b*56|0)+32+(r<<2)>>2]|0;i=c[m+(d*56|0)+32+(c[i>>2]<<2)>>2]|0;n=c[42435]|0;g=n+1|0;n=n+2|0;c[42435]=n;q=c[42432]|0;c[q+(g<<4)>>2]=b;c[q+(n<<4)>>2]=d;o=q+(h<<4)+4|0;p=q+(g<<4)+4|0;c[p>>2]=c[o>>2];c[q+(c[o>>2]<<4)+8>>2]=g;c[q+(g<<4)+8>>2]=n;c[q+(n<<4)+4>>2]=g;j=q+(i<<4)+8|0;c[q+(n<<4)+8>>2]=c[j>>2];c[q+(c[j>>2]<<4)+4>>2]=n;c[o>>2]=i;c[j>>2]=h;j=m+(b*56|0)+48|0;o=c[j>>2]|0;i=m+(d*56|0)+48|0;k=c[i>>2]|0;c[m+(b*56|0)+16+(r<<2)>>2]=d;c[m+(b*56|0)+32+(o<<2)>>2]=g;c[m+(b*56|0)+16+(o<<2)>>2]=c[q+(c[p>>2]<<4)>>2];c[m+(d*56|0)+32+(k<<2)>>2]=n;c[m+(d*56|0)+16+(k<<2)>>2]=b;c[j>>2]=(c[j>>2]|0)+1;c[i>>2]=(c[i>>2]|0)+1;d=c[42434]|0;c[d+(a<<2)>>2]=h;c[d+(e<<2)>>2]=g;l=f;return e|0}function PG(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0.0,h=0,i=0,j=0.0,k=0.0,l=0,m=0,n=0;l=c[42433]|0;m=l+(a*56|0)|0;n=l+(b*56|0)|0;f=0;g=-4.0;i=0;while(1){if((i|0)==4)break;h=c[l+(a*56|0)+16+(i<<2)>>2]|0;if((h|0)>=1?(j=+QG(m,l+(h*56|0)|0,n),j>g):0){f=i;g=j}i=i+1|0}c[d>>2]=f;f=0;i=0;g=-4.0;while(1){if((i|0)==4)break;h=c[l+(b*56|0)+16+(i<<2)>>2]|0;if((h|0)>=1?(k=+QG(n,l+(h*56|0)|0,m),k>g):0){f=i;g=k}i=i+1|0}c[e>>2]=f;return}function QG(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0,f=0.0,g=0.0,i=0.0;g=+h[a>>3];i=+h[b>>3]-g;d=+h[a+8>>3];f=+h[b+8>>3]-d;g=+h[c>>3]-g;d=+h[c+8>>3]-d;e=d*f+g*i;if(!(d*i-g*f>=0.0))d=-e/(+C(+(d*d+g*g))*+C(+(f*f+i*i)))+-2.0;else d=e/(+C(+(d*d+g*g))*+C(+(f*f+i*i)));return +d}function RG(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0.0,l=0.0;c[e>>2]=c[a>>2];c[e+4>>2]=c[a+4>>2];c[e+8>>2]=c[a+8>>2];c[e+12>>2]=c[a+12>>2];i=e+32|0;j=a+16|0;c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];c[i+12>>2]=c[j+12>>2];if(!d){f=a+8|0;g=j;i=a+24|0;d=a}else{f=a+24|0;g=a;i=a+8|0;d=j}k=+h[g>>3];l=+h[i>>3];h[e+16>>3]=+h[d>>3];h[e+24>>3]=l;h[e+48>>3]=k;h[e+56>>3]=+h[f>>3];a:do if(b|0){d=0;while(1){if((d|0)==4)break a;j=e+(d<<4)+8|0;l=+h[j>>3];b=e+(d<<4)|0;h[j>>3]=+h[b>>3];h[b>>3]=-l;d=d+1|0}}while(0);return}function SG(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;h=b+3|0;i=b+1|0;j=b+2|0;k=a+(b*56|0)+44|0;l=a+(h*56|0)+44|0;e=0;f=b;while(1){if((f|0)>(h|0))break;do if((f|0)!=(b|0))if((f|0)==(h|0)){c[l>>2]=b;g=j;break}else{c[a+(f*56|0)+44>>2]=f+1;g=f+-1|0;break}else{c[k>>2]=i;g=h}while(0);c[a+(f*56|0)+48>>2]=g;c[a+(f*56|0)+32>>2]=0;n=a+(f*56|0)|0;m=d+(e<<4)|0;c[n>>2]=c[m>>2];c[n+4>>2]=c[m+4>>2];c[n+8>>2]=c[m+8>>2];c[n+12>>2]=c[m+12>>2];VN(a+(g*56|0)+16|0,m|0,16)|0;e=e+1|0;f=f+1|0}return b+4|0}function TG(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;c[42437]=e<<1;c[42438]=e;k=ww(e*80|0)|0;c[42439]=1;c[42440]=1;WN(f|0,0,e*72|0)|0;g=UG(c[d+4>>2]|0,b,f,k)|0;e=1;while(1){if((e|0)>(a|0))break;c[b+(e*56|0)+40>>2]=g;c[b+(e*56|0)+36>>2]=g;e=e+1|0}j=VG(a)|0;g=2;i=1;while(1){if((i|0)>(j|0))break;e=WG(a,i+-1|0)|0;h=WG(a,i)|0;while(1){if((e|0)>=(h|0)){e=1;break}XG(c[d+(g<<2)>>2]|0,b,f,k);e=e+1|0;g=g+1|0}while(1){if((e|0)>(a|0))break;YG(e,b,f,k);e=e+1|0}i=i+1|0}e=WG(a,j)|0;while(1){if((e|0)>=(a|0))break;XG(c[d+(g<<2)>>2]|0,b,f,k);g=g+1|0;e=e+1|0}$I(k);return c[42439]|0}function UG(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;f=bH()|0;c[e+(f*40|0)>>2]=2;s=e+(f*40|0)+8|0;k=b+(a*56|0)|0;l=b+(a*56|0)+16|0;fH(s,k,l);n=bH()|0;c[e+(f*40|0)+36>>2]=n;c[e+(n*40|0)>>2]=3;c[e+(n*40|0)+28>>2]=f;j=bH()|0;c[e+(f*40|0)+32>>2]=j;c[e+(j*40|0)>>2]=2;r=e+(j*40|0)+8|0;gH(r,k,l);c[e+(j*40|0)+28>>2]=f;l=bH()|0;c[e+(j*40|0)+32>>2]=l;c[e+(l*40|0)>>2]=3;c[e+(l*40|0)+28>>2]=j;k=bH()|0;c[e+(j*40|0)+36>>2]=k;c[e+(k*40|0)>>2]=1;c[e+(k*40|0)+4>>2]=a;c[e+(k*40|0)+28>>2]=j;j=bH()|0;c[e+(k*40|0)+32>>2]=j;c[e+(j*40|0)>>2]=3;c[e+(j*40|0)+28>>2]=k;g=bH()|0;c[e+(k*40|0)+36>>2]=g;c[e+(g*40|0)>>2]=3;c[e+(g*40|0)+28>>2]=k;k=aH(d)|0;i=aH(d)|0;m=aH(d)|0;o=aH(d)|0;p=d+(k*72|0)+8|0;q=d+(i*72|0)+8|0;t=d+(o*72|0)+24|0;c[t>>2]=c[s>>2];c[t+4>>2]=c[s+4>>2];c[t+8>>2]=c[s+8>>2];c[t+12>>2]=c[s+12>>2];VN(q|0,s|0,16)|0;c[p>>2]=c[q>>2];c[p+4>>2]=c[q+4>>2];c[p+8>>2]=c[q+8>>2];c[p+12>>2]=c[q+12>>2];p=d+(k*72|0)+24|0;q=d+(i*72|0)+24|0;s=d+(m*72|0)+8|0;c[s>>2]=c[r>>2];c[s+4>>2]=c[r+4>>2];c[s+8>>2]=c[r+8>>2];c[s+12>>2]=c[r+12>>2];VN(q|0,r|0,16)|0;c[p>>2]=c[q>>2];c[p+4>>2]=c[q+4>>2];c[p+8>>2]=c[q+8>>2];c[p+12>>2]=c[q+12>>2];h[d+(o*72|0)+16>>3]=1073741824.0;h[d+(o*72|0)+8>>3]=1073741824.0;h[d+(m*72|0)+32>>3]=-1073741824.0;h[d+(m*72|0)+24>>3]=-1073741824.0;c[d+(i*72|0)>>2]=a;c[d+(k*72|0)+4>>2]=a;c[d+(i*72|0)+40>>2]=o;c[d+(k*72|0)+40>>2]=o;c[d+(i*72|0)+48>>2]=m;c[d+(k*72|0)+48>>2]=m;c[d+(m*72|0)+40>>2]=k;c[d+(o*72|0)+48>>2]=k;c[d+(m*72|0)+44>>2]=i;c[d+(o*72|0)+52>>2]=i;c[d+(k*72|0)+56>>2]=j;c[d+(i*72|0)+56>>2]=g;c[d+(m*72|0)+56>>2]=l;c[d+(o*72|0)+56>>2]=n;c[d+(i*72|0)+68>>2]=1;c[d+(k*72|0)+68>>2]=1;c[d+(o*72|0)+68>>2]=1;c[d+(m*72|0)+68>>2]=1;c[e+(n*40|0)+24>>2]=o;c[e+(l*40|0)+24>>2]=m;c[e+(j*40|0)+24>>2]=k;c[e+(g*40|0)+24>>2]=i;c[b+(a*56|0)+32>>2]=1;return f|0}function VG(a){a=a|0;var b=0.0;b=+(a|0);a=0;while(1){if(!(b>=1.0))break;b=+DJ(b);a=a+1|0}return a+-1|0}function WG(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;d=+(a|0);c=d;a=0;while(1){if((a|0)>=(b|0))break;c=+DJ(c);a=a+1|0}return ~~+N(+(d/c))|0}function XG(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0.0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0.0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0;W=l;l=l+96|0;S=W+32|0;f=W+16|0;T=W;s=S;k=b+(a*56|0)|0;r=s+56|0;do{c[s>>2]=c[k>>2];s=s+4|0;k=k+4|0}while((s|0)<(r|0));U=S+16|0;V=S+24|0;i=+h[V>>3];H=S+8|0;j=+h[H>>3];do if(!(i>j+1.0e-07)){if(!(i>3]>+h[S>>3]:0){G=4;break}G=($G(a,b,1)|0)==0;f=c[S+36>>2]|0;if(G){n=0;G=7}else{f=ZG(S,U,f,b,e)|0;G=20}}else G=4;while(0);if((G|0)==4){c[f>>2]=c[S>>2];c[f+4>>2]=c[S+4>>2];c[f+8>>2]=c[S+8>>2];c[f+12>>2]=c[S+12>>2];c[S>>2]=c[U>>2];c[S+4>>2]=c[U+4>>2];c[S+8>>2]=c[U+8>>2];c[S+12>>2]=c[U+12>>2];c[U>>2]=c[f>>2];c[U+4>>2]=c[f+4>>2];c[U+8>>2]=c[f+8>>2];c[U+12>>2]=c[f+12>>2];E=S+36|0;F=c[E>>2]|0;G=S+40|0;f=c[G>>2]|0;c[E>>2]=f;c[G>>2]=F;if(!($G(a,b,2)|0)){n=1;G=7}else{f=ZG(S,U,f,b,e)|0;G=19}}if((G|0)==7){m=ZG(S,U,f,b,e)|0;f=aH(d)|0;c[d+(f*72|0)+68>>2]=1;s=d+(f*72|0)|0;k=d+(m*72|0)|0;r=s+72|0;do{c[s>>2]=c[k>>2];s=s+4|0;k=k+4|0}while((s|0)<(r|0));q=+h[H>>3];h[d+(f*72|0)+16>>3]=q;h[d+(m*72|0)+32>>3]=q;q=+h[S>>3];h[d+(f*72|0)+8>>3]=q;h[d+(m*72|0)+24>>3]=q;c[d+(m*72|0)+48>>2]=f;c[d+(m*72|0)+52>>2]=0;c[d+(f*72|0)+40>>2]=m;c[d+(f*72|0)+44>>2]=0;g=c[d+(f*72|0)+48>>2]|0;if((g|0)>0){k=d+(g*72|0)+40|0;if((c[k>>2]|0)==(m|0))c[k>>2]=f;g=d+(g*72|0)+44|0;if((c[g>>2]|0)==(m|0))c[g>>2]=f}g=c[d+(f*72|0)+52>>2]|0;if((g|0)>0){k=d+(g*72|0)+40|0;if((c[k>>2]|0)==(m|0))c[k>>2]=f;g=d+(g*72|0)+44|0;if((c[g>>2]|0)==(m|0))c[g>>2]=f}E=bH()|0;G=bH()|0;F=d+(m*72|0)+56|0;D=c[F>>2]|0;c[e+(D*40|0)>>2]=2;C=e+(D*40|0)+8|0;c[C>>2]=c[S>>2];c[C+4>>2]=c[S+4>>2];c[C+8>>2]=c[S+8>>2];c[C+12>>2]=c[S+12>>2];c[e+(D*40|0)+4>>2]=a;c[e+(D*40|0)+32>>2]=G;c[e+(D*40|0)+36>>2]=E;c[e+(E*40|0)>>2]=3;c[e+(E*40|0)+24>>2]=m;c[e+(E*40|0)+28>>2]=D;c[e+(G*40|0)>>2]=3;c[e+(G*40|0)+24>>2]=f;c[e+(G*40|0)+28>>2]=D;c[F>>2]=E;c[d+(f*72|0)+56>>2]=G;if(n)G=19;else G=20}if((G|0)==19)if(!($G(a,b,1)|0)){g=1;G=21}else{g=1;G=32}else if((G|0)==20)if(!($G(a,b,2)|0)){g=0;G=21}else{g=0;G=32}if((G|0)==21){o=ZG(U,S,c[S+40>>2]|0,b,e)|0;n=aH(d)|0;c[d+(n*72|0)+68>>2]=1;s=d+(n*72|0)|0;k=d+(o*72|0)|0;r=s+72|0;do{c[s>>2]=c[k>>2];s=s+4|0;k=k+4|0}while((s|0)<(r|0));q=+h[V>>3];h[d+(n*72|0)+16>>3]=q;h[d+(o*72|0)+32>>3]=q;q=+h[U>>3];h[d+(n*72|0)+8>>3]=q;h[d+(o*72|0)+24>>3]=q;c[d+(o*72|0)+48>>2]=n;c[d+(o*72|0)+52>>2]=0;c[d+(n*72|0)+40>>2]=o;c[d+(n*72|0)+44>>2]=0;k=c[d+(n*72|0)+48>>2]|0;if((k|0)>0){m=d+(k*72|0)+40|0;if((c[m>>2]|0)==(o|0))c[m>>2]=n;k=d+(k*72|0)+44|0;if((c[k>>2]|0)==(o|0))c[k>>2]=n}k=c[d+(n*72|0)+52>>2]|0;if((k|0)>0){m=d+(k*72|0)+40|0;if((c[m>>2]|0)==(o|0))c[m>>2]=n;k=d+(k*72|0)+44|0;if((c[k>>2]|0)==(o|0))c[k>>2]=n}D=bH()|0;F=bH()|0;E=d+(o*72|0)+56|0;C=c[E>>2]|0;c[e+(C*40|0)>>2]=2;A=e+(C*40|0)+8|0;c[A>>2]=c[U>>2];c[A+4>>2]=c[U+4>>2];c[A+8>>2]=c[U+8>>2];c[A+12>>2]=c[U+12>>2];c[e+(C*40|0)+4>>2]=a;c[e+(C*40|0)+32>>2]=F;c[e+(C*40|0)+36>>2]=D;c[e+(D*40|0)>>2]=3;c[e+(D*40|0)+24>>2]=o;c[e+(D*40|0)+28>>2]=C;c[e+(F*40|0)>>2]=3;c[e+(F*40|0)+24>>2]=n;c[e+(F*40|0)+28>>2]=C;c[E>>2]=D;c[d+(n*72|0)+56>>2]=F;F=f;f=0}else if((G|0)==32){F=f;o=ZG(U,S,c[S+40>>2]|0,b,e)|0;f=1}a:do if((F|0)>0){D=d+(o*72|0)+24|0;E=d+(o*72|0)+32|0;C=(f|0)!=0;y=g?b+(a*56|0)+48|0:b+(a*56|0)+44|0;z=T+8|0;g=0;f=0;x=F;b:while(1){k=d+(x*72|0)|0;v=d+(x*72|0)+24|0;if(!(cH(v,D)|0))break a;m=d+(x*72|0)+56|0;u=c[m>>2]|0;n=bH()|0;p=bH()|0;c[e+(u*40|0)>>2]=1;c[e+(u*40|0)+4>>2]=a;c[e+(u*40|0)+32>>2]=n;c[e+(u*40|0)+36>>2]=p;c[e+(n*40|0)>>2]=3;c[e+(n*40|0)+24>>2]=x;c[e+(n*40|0)+28>>2]=u;c[e+(p*40|0)>>2]=3;w=aH(d)|0;c[e+(p*40|0)+24>>2]=w;A=d+(w*72|0)|0;c[d+(w*72|0)+68>>2]=1;c[e+(p*40|0)+28>>2]=u;g=(x|0)==(F|0)?w:g;u=d+(x*72|0)+32|0;if(+B(+(+h[u>>3]-+h[E>>3]))<=1.0e-07?+B(+(+h[v>>3]-+h[D>>3]))<=1.0e-07:0)f=w;s=A;r=s+72|0;do{c[s>>2]=c[k>>2];s=s+4|0;k=k+4|0}while((s|0)<(r|0));c[m>>2]=n;c[d+(w*72|0)+56>>2]=p;t=d+(x*72|0)+48|0;m=d+(x*72|0)+52|0;k=(c[m>>2]|0)<1;do if((c[t>>2]|0)<1){if(k)break b;s=d+(x*72|0)+40|0;k=c[s>>2]|0;do if((k|0)>0?(M=d+(x*72|0)+44|0,N=c[M>>2]|0,(N|0)>0):0){r=d+(x*72|0)+60|0;k=c[r>>2]|0;if((k|0)<=0){c[d+(w*72|0)+40>>2]=N;c[d+(w*72|0)+44>>2]=-1;c[M>>2]=-1;c[d+(N*72|0)+48>>2]=w;break}if((c[d+(x*72|0)+64>>2]|0)==1){c[d+(w*72|0)+40>>2]=N;c[M>>2]=-1;c[d+(w*72|0)+44>>2]=k;c[d+((c[s>>2]|0)*72|0)+48>>2]=x;p=w;n=N}else{c[d+(w*72|0)+44>>2]=-1;t=d+(w*72|0)+40|0;c[t>>2]=c[M>>2];n=c[s>>2]|0;c[M>>2]=n;c[s>>2]=k;c[d+(k*72|0)+48>>2]=x;p=x;k=c[t>>2]|0}c[d+(n*72|0)+48>>2]=p;c[d+(k*72|0)+48>>2]=w;c[d+(w*72|0)+60>>2]=0;c[r>>2]=0}else G=77;while(0);do if((G|0)==77){G=0;n=d+(k*72|0)+48|0;p=c[n>>2]|0;k=d+(k*72|0)+52|0;if((p|0)>0?(c[k>>2]|0)>0:0){k=c[d+(p*72|0)+4>>2]|0;if((k|0)>0?(_G(k,b,U)|0)==0:0){c[d+(w*72|0)+44>>2]=-1;c[d+(x*72|0)+44>>2]=-1;c[s>>2]=-1;c[d+((c[d+(w*72|0)+40>>2]|0)*72|0)+52>>2]=w;break}c[d+(x*72|0)+44>>2]=-1;c[d+(w*72|0)+44>>2]=-1;c[d+(w*72|0)+40>>2]=-1;c[d+((c[s>>2]|0)*72|0)+48>>2]=x;break}c[n>>2]=x;c[k>>2]=w}while(0);if(+B(+(+h[u>>3]-+h[E>>3]))<=1.0e-07?C&+B(+(+h[v>>3]-+h[D>>3]))<=1.0e-07:0){k=c[y>>2]|0;if((k|0)>0?(_G(k,b,S)|0)!=0:0){c[d+((c[m>>2]|0)*72|0)+40>>2]=x;n=d+(w*72|0)+52|0;k=w}else{c[d+((c[d+(w*72|0)+52>>2]|0)*72|0)+44>>2]=w;n=m;k=x}c[n>>2]=-1;c[d+(k*72|0)+48>>2]=-1;k=c[m>>2]|0;break}k=c[m>>2]|0;m=d+(k*72|0)+40|0;n=c[m>>2]|0;p=d+(k*72|0)+44|0;if((n|0)>0?(O=c[p>>2]|0,P=(n|0)==(x|0),(O|0)>0):0){c[d+(k*72|0)+60>>2]=P?O:n;c[d+(k*72|0)+64>>2]=P?1:2}c[m>>2]=x;c[p>>2]=w}else{if(!k){i=+h[u>>3];j=+h[H>>3];q=i-j;if(!(+B(+q)<=1.0e-07)){h[z>>3]=i;i=+h[S>>3];h[T>>3]=(+h[U>>3]-i)*(q/(+h[V>>3]-j))+i;s=(dH(T,v)|0)!=0}else s=+h[v>>3]>+h[S>>3];r=d+(x*72|0)+40|0;k=c[r>>2]|0;do if((k|0)>0?(Q=d+(x*72|0)+44|0,R=c[Q>>2]|0,(R|0)>0):0){p=d+(x*72|0)+60|0;k=c[p>>2]|0;if((k|0)<=0){c[d+(w*72|0)+40>>2]=R;c[d+(w*72|0)+44>>2]=-1;c[Q>>2]=-1;c[d+(R*72|0)+48>>2]=w;break}if((c[d+(x*72|0)+64>>2]|0)==1){c[d+(w*72|0)+40>>2]=R;c[Q>>2]=-1;c[d+(w*72|0)+44>>2]=k;c[d+((c[r>>2]|0)*72|0)+48>>2]=x;n=w;m=R}else{c[d+(w*72|0)+44>>2]=-1;X=d+(w*72|0)+40|0;c[X>>2]=c[Q>>2];m=c[r>>2]|0;c[Q>>2]=m;c[r>>2]=k;c[d+(k*72|0)+48>>2]=x;n=x;k=c[X>>2]|0}c[d+(m*72|0)+48>>2]=n;c[d+(k*72|0)+48>>2]=w;c[d+(w*72|0)+60>>2]=0;c[p>>2]=0}else G=106;while(0);do if((G|0)==106){G=0;m=d+(k*72|0)+48|0;n=c[m>>2]|0;k=d+(k*72|0)+52|0;if((n|0)>0?(c[k>>2]|0)>0:0){k=c[d+(n*72|0)+4>>2]|0;if((k|0)>0?(_G(k,b,U)|0)==0:0){c[d+(w*72|0)+44>>2]=-1;c[d+(x*72|0)+44>>2]=-1;c[r>>2]=-1;c[d+((c[d+(w*72|0)+40>>2]|0)*72|0)+52>>2]=w;break}c[d+(x*72|0)+44>>2]=-1;c[d+(w*72|0)+44>>2]=-1;c[d+(w*72|0)+40>>2]=-1;c[d+((c[r>>2]|0)*72|0)+48>>2]=x;break}c[m>>2]=x;c[k>>2]=w}while(0);if(+B(+(+h[u>>3]-+h[E>>3]))<=1.0e-07?C&+B(+(+h[v>>3]-+h[D>>3]))<=1.0e-07:0){k=c[t>>2]|0;c[d+(k*72|0)+40>>2]=x;c[d+(k*72|0)+44>>2]=-1;k=d+(x*72|0)+52|0;X=c[k>>2]|0;c[d+(X*72|0)+40>>2]=w;c[d+(X*72|0)+44>>2]=-1;c[d+(w*72|0)+48>>2]=X;c[d+(w*72|0)+52>>2]=-1;c[k>>2]=-1;k=-1}else G=116;do if((G|0)==116){G=0;k=c[t>>2]|0;c[d+(k*72|0)+40>>2]=x;m=d+(k*72|0)+44|0;if(s){c[m>>2]=w;X=d+(x*72|0)+52|0;v=c[X>>2]|0;c[d+(v*72|0)+40>>2]=w;c[d+(v*72|0)+44>>2]=-1;c[X>>2]=-1;break}else{c[m>>2]=-1;k=d+(x*72|0)+52|0;X=c[k>>2]|0;c[d+(X*72|0)+40>>2]=x;c[d+(X*72|0)+44>>2]=w;c[d+(w*72|0)+48>>2]=X;c[d+(w*72|0)+52>>2]=-1;k=c[k>>2]|0;break}}while(0);break}s=d+(x*72|0)+40|0;k=c[s>>2]|0;do if((k|0)>0?(I=d+(x*72|0)+44|0,J=c[I>>2]|0,(J|0)>0):0){r=d+(x*72|0)+60|0;k=c[r>>2]|0;if((k|0)<=0){c[d+(w*72|0)+40>>2]=J;c[d+(w*72|0)+44>>2]=-1;c[I>>2]=-1;c[d+(J*72|0)+48>>2]=w;break}if((c[d+(x*72|0)+64>>2]|0)==1){c[d+(w*72|0)+40>>2]=J;c[I>>2]=-1;c[d+(w*72|0)+44>>2]=k;c[d+((c[s>>2]|0)*72|0)+48>>2]=x;p=w;n=J}else{c[d+(w*72|0)+44>>2]=-1;X=d+(w*72|0)+40|0;c[X>>2]=c[I>>2];n=c[s>>2]|0;c[I>>2]=n;c[s>>2]=k;c[d+(k*72|0)+48>>2]=x;p=x;k=c[X>>2]|0}c[d+(n*72|0)+48>>2]=p;c[d+(k*72|0)+48>>2]=w;c[d+(w*72|0)+60>>2]=0;c[r>>2]=0}else G=51;while(0);do if((G|0)==51){G=0;n=d+(k*72|0)+48|0;p=c[n>>2]|0;k=d+(k*72|0)+52|0;if((p|0)>0?(c[k>>2]|0)>0:0){k=c[d+(p*72|0)+4>>2]|0;if((k|0)>0?(_G(k,b,U)|0)==0:0){c[d+(w*72|0)+44>>2]=-1;c[d+(x*72|0)+44>>2]=-1;c[s>>2]=-1;c[d+((c[d+(w*72|0)+40>>2]|0)*72|0)+52>>2]=w;break}c[d+(x*72|0)+44>>2]=-1;c[d+(w*72|0)+44>>2]=-1;c[d+(w*72|0)+40>>2]=-1;c[d+((c[s>>2]|0)*72|0)+48>>2]=x;break}c[n>>2]=x;c[k>>2]=w}while(0);if(+B(+(+h[u>>3]-+h[E>>3]))<=1.0e-07?C&+B(+(+h[v>>3]-+h[D>>3]))<=1.0e-07:0){k=c[y>>2]|0;if((k|0)>0?(_G(k,b,S)|0)!=0:0){c[d+((c[t>>2]|0)*72|0)+40>>2]=x;m=d+(w*72|0)+52|0;k=w}else{c[d+((c[d+(w*72|0)+48>>2]|0)*72|0)+44>>2]=w;k=x}c[m>>2]=-1;c[d+(k*72|0)+48>>2]=-1;k=c[t>>2]|0;break}k=c[t>>2]|0;m=d+(k*72|0)+40|0;n=c[m>>2]|0;p=d+(k*72|0)+44|0;if((n|0)>0?(K=c[p>>2]|0,L=(n|0)==(x|0),(K|0)>0):0){c[d+(k*72|0)+60>>2]=L?K:n;c[d+(k*72|0)+64>>2]=L?1:2}c[m>>2]=x;c[p>>2]=w}while(0);c[A>>2]=a;c[d+(x*72|0)+4>>2]=a;if((k|0)>0)x=k;else break a}YL(123235,19,1,c[13918]|0)|0}else{g=0;f=0}while(0);eH(a,F,o,1,d,e);eH(a,g,f,2,d,e);c[b+(a*56|0)+32>>2]=1;l=W;return}function YG(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;if(!(c[b+(a*56|0)+32>>2]|0)){f=b+(a*56|0)|0;g=b+(a*56|0)+16|0;h=b+(a*56|0)+36|0;c[h>>2]=c[d+((ZG(f,g,c[h>>2]|0,b,e)|0)*72|0)+56>>2];a=b+(a*56|0)+40|0;c[a>>2]=c[d+((ZG(g,f,c[a>>2]|0,b,e)|0)*72|0)+56>>2]}return}function ZG(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0.0,i=0,j=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0,p=0.0,q=0,r=0;o=a+8|0;q=b+8|0;a:while(1){b:do switch(c[f+(d*40|0)>>2]|0){case 3:{r=3;break a}case 2:{g=+h[o>>3];i=f+(d*40|0)+8|0;j=+h[f+(d*40|0)+16>>3];k=j+1.0e-07;do if(!(g>k)){l=j+-1.0e-07;if(!(g>3]>+h[i>>3]:0)break;if(+B(+(g-j))<=1.0e-07?(m=+h[i>>3],+B(+(+h[a>>3]-m))<=1.0e-07):0){g=+h[q>>3];do if(!(g>k)){if(!(g>3]>m:0)break;d=f+(d*40|0)+32|0;break b}while(0);d=f+(d*40|0)+36|0;break b}d=f+(d*40|0)+32|0;break b}while(0);d=f+(d*40|0)+36|0;break}case 1:{g=+h[o>>3];i=c[f+(d*40|0)+4>>2]|0;if(+B(+(g-+h[e+(i*56|0)+8>>3]))<=1.0e-07?(n=+h[a>>3],+B(+(n-+h[e+(i*56|0)>>3]))<=1.0e-07):0)j=n;else r=19;do if((r|0)==19){r=0;if(+B(+(g-+h[e+(i*56|0)+24>>3]))<=1.0e-07?(p=+h[a>>3],+B(+(p-+h[e+(i*56|0)+16>>3]))<=1.0e-07):0){j=p;break}if(!(_G(i,e,a)|0)){d=f+(d*40|0)+36|0;break b}else{d=f+(d*40|0)+32|0;break b}}while(0);if(!(+B(+(g-+h[q>>3]))<=1.0e-07))if(!(_G(i,e,b)|0)){d=f+(d*40|0)+36|0;break b}else{d=f+(d*40|0)+32|0;break b}else if(+h[b>>3]>2]|0}if((r|0)==3)return c[f+(d*40|0)+24>>2]|0;else if((r|0)==31){YL(123169,35,1,c[13918]|0)|0;ma(123205,123207,349,123219)}return 0}function _G(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0,f=0,g=0.0,i=0,j=0,k=0.0;f=b+(a*56|0)+16|0;g=+h[b+(a*56|0)+24>>3];i=b+(a*56|0)|0;e=+h[b+(a*56|0)+8>>3];do if(!(g>e+1.0e-07)){if(!(g>3]>+h[i>>3]:0){j=4;break}d=+h[c+8>>3];if(+B(+(g-d))<=1.0e-07){d=+h[c>>3]<+h[f>>3]?1.0:-1.0;break}if(!(+B(+(e-d))<=1.0e-07)){k=+h[f>>3];d=(+h[i>>3]-k)*(d-g)-(+h[c>>3]-k)*(e-g);break}else{d=+h[c>>3]<+h[i>>3]?1.0:-1.0;break}}else j=4;while(0);do if((j|0)==4){d=+h[c+8>>3];if(+B(+(g-d))<=1.0e-07){d=+h[c>>3]<+h[f>>3]?1.0:-1.0;break}if(!(+B(+(e-d))<=1.0e-07)){k=+h[i>>3];d=(+h[f>>3]-k)*(d-e)-(+h[c>>3]-k)*(g-e);break}else{d=+h[c>>3]<+h[i>>3]?1.0:-1.0;break}}while(0);return d>0.0|0}function $G(a,b,d){a=a|0;b=b|0;d=d|0;return c[b+((c[((d|0)==1?b+(a*56|0)+48|0:b+(a*56|0)+44|0)>>2]|0)*56|0)+32>>2]|0}function aH(a){a=a|0;var b=0,d=0,e=0;e=l;l=l+16|0;d=e;b=c[42439]|0;if((b|0)<(c[42438]|0)){c[a+(b*72|0)>>2]=-1;c[a+(b*72|0)+4>>2]=-1;c[a+(b*72|0)+68>>2]=1;c[42439]=b+1;l=e;return b|0}else{e=c[13918]|0;c[d>>2]=b;AL(e,123294,d)|0;ma(123205,123207,88,123332)}return 0}function bH(){var a=0;a=c[42440]|0;if((a|0)<(c[42437]|0)){c[42440]=a+1;return a|0}else{YL(123255,30,1,c[13918]|0)|0;ma(123205,123207,72,123286)}return 0}function cH(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;c=+h[a+8>>3];d=+h[b+8>>3];if(!(c>d+1.0e-07))if(c>3]>=+h[b>>3]&1;else a=1;return a|0}function dH(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;c=+h[a+8>>3];d=+h[b+8>>3];if(!(cd+1.0e-07)a=0;else a=+h[a>>3]<+h[b>>3]&1;else a=1;return a|0}function eH(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;q=f+(d*72|0)+24|0;p=(e|0)==1;a:while(1){o=f+(b*72|0)+24|0;j=f+(b*72|0)+48|0;k=f+(b*72|0)+52|0;l=f+(b*72|0)|0;m=f+(b*72|0)+4|0;n=f+(b*72|0)+56|0;if((b|0)<=0)break;while(1){if(!(cH(o,q)|0))break a;d=c[j>>2]|0;e=(d|0)>0;do if(p){if(e?(c[f+(d*72|0)+4>>2]|0)==(a|0):0)break;d=c[k>>2]|0;if((d|0)<=0){b=d;continue a}if((c[f+(d*72|0)+4>>2]|0)!=(a|0)){b=d;continue a}}else{if(e?(c[f+(d*72|0)>>2]|0)==(a|0):0)break;d=c[k>>2]|0;if((d|0)<=0){b=d;continue a}if((c[f+(d*72|0)>>2]|0)!=(a|0)){b=d;continue a}}while(0);if((c[l>>2]|0)!=(c[f+(d*72|0)>>2]|0)){b=d;continue a}if((c[m>>2]|0)!=(c[f+(d*72|0)+4>>2]|0)){b=d;continue a}r=c[f+(d*72|0)+56>>2]|0;e=c[g+(r*40|0)+28>>2]|0;h=g+(e*40|0)+32|0;i=c[n>>2]|0;if((c[h>>2]|0)==(r|0))c[h>>2]=i;else c[g+(e*40|0)+36>>2]=i;e=c[f+(d*72|0)+48>>2]|0;c[j>>2]=e;do if((e|0)>0){h=f+(e*72|0)+40|0;if((c[h>>2]|0)==(d|0)){c[h>>2]=b;break}e=f+(e*72|0)+44|0;if((c[e>>2]|0)==(d|0))c[e>>2]=b}while(0);e=c[f+(d*72|0)+52>>2]|0;c[k>>2]=e;do if((e|0)>0){h=f+(e*72|0)+40|0;if((c[h>>2]|0)==(d|0)){c[h>>2]=b;break}e=f+(e*72|0)+44|0;if((c[e>>2]|0)==(d|0))c[e>>2]=b}while(0);r=f+(d*72|0)+24|0;c[o>>2]=c[r>>2];c[o+4>>2]=c[r+4>>2];c[o+8>>2]=c[r+8>>2];c[o+12>>2]=c[r+12>>2];c[f+(d*72|0)+68>>2]=2}}return}function fH(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0;e=+h[b+8>>3];f=+h[d+8>>3];do if(!(e>f+1.0e-07)){if(!(+B(+(e-f))<=1.0e-07)){c[a>>2]=c[d>>2];c[a+4>>2]=c[d+4>>2];c[a+8>>2]=c[d+8>>2];c[a+12>>2]=c[d+12>>2];break}if(+h[b>>3]>+h[d>>3]+1.0e-07){c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];break}else{c[a>>2]=c[d>>2];c[a+4>>2]=c[d+4>>2];c[a+8>>2]=c[d+8>>2];c[a+12>>2]=c[d+12>>2];break}}else{c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2]}while(0);return}function gH(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0;e=+h[b+8>>3];f=+h[d+8>>3];do if(!(e>2]=c[d>>2];c[a+4>>2]=c[d+4>>2];c[a+8>>2]=c[d+8>>2];c[a+12>>2]=c[d+12>>2];break}if(+h[b>>3]<+h[d>>3]){c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];break}else{c[a>>2]=c[d>>2];c[a+4>>2]=c[d+4>>2];c[a+8>>2]=c[d+8>>2];c[a+12>>2]=c[d+12>>2];break}}else{c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2]}while(0);return}function hH(a){a=a|0;var b=0;b=ww(8)|0;if(b|0){c[b+4>>2]=a;c[b>>2]=0}return b|0}function iH(a,b){a=a|0;b=b|0;if(b){b=hH(b)|0;c[b>>2]=a;a=b}return a|0}function jH(a){a=a|0;var b=0;do{b=a;a=c[a>>2]|0;$I(b)}while((a|0)!=0);return}function kH(){var a=0;a=ww(1992)|0;if(a|0)c[a>>2]=lH(a)|0;return a|0}function lH(a){a=a|0;var b=0;b=rH(a)|0;c[b+4>>2]=0;a=a+1972|0;c[a>>2]=(c[a>>2]|0)+1;return b|0}function mH(a){a=a|0;nH(a,c[a>>2]|0);$I(c[a>>2]|0);$I(a);return 0}function nH(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;g=a+1980|0;h=a+1912|0;i=a+1936|0;a:do if((c[b+4>>2]|0)>0){d=0;while(1){if((d|0)==64)break a;e=b+8+(d*20|0)+16|0;f=c[e>>2]|0;if(f|0?(nH(a,f),$I(c[e>>2]|0),xH(b,d),c[g>>2]=(c[g>>2]|0)+-1,c[h>>2]|0):0)c[i>>2]=(c[i>>2]|0)+1;d=d+1|0}}else{d=0;while(1){if((d|0)==64)break a;if(c[b+8+(d*20|0)+16>>2]|0?(xH(b,d),c[g>>2]=(c[g>>2]|0)+-1,c[h>>2]|0):0)c[i>>2]=(c[i>>2]|0)+1;d=d+1|0}}while(0);return}function oH(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;if(!b)ma(123690,123340,194,123348);e=c[b+4>>2]|0;if((e|0)<=-1)ma(123360,123340,195,123348);if(!d)ma(123632,123340,196,123348);i=a+1952|0;c[i>>2]=(c[i>>2]|0)+1;a:do if((e|0)>0){i=0;e=0;while(1){if((i|0)==64)break a;f=b+8+(i*20|0)+16|0;if((c[f>>2]|0)!=0?(CH(d,b+8+(i*20|0)|0)|0)!=0:0){g=oH(a,c[f>>2]|0,d)|0;if(!e)e=g;else{f=e;while(1){h=c[f>>2]|0;if(!h)break;else f=h}c[f>>2]=g}}i=i+1|0}}else{g=0;e=0;while(1){if((g|0)==64)break a;f=b+8+(g*20|0)|0;if((c[b+8+(g*20|0)+16>>2]|0)!=0?(CH(d,f)|0)!=0:0)e=iH(e,f)|0;g=g+1|0}}while(0);return e|0}function pH(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+64|0;k=p+52|0;m=p+32|0;n=p+16|0;o=p;c[k>>2]=0;if(!((b|0)!=0&(e|0)!=0))ma(123546,123340,247,123374);if((f|0)>-1?(j=c[e>>2]|0,(c[j+4>>2]|0)>=(f|0)):0){g=0;while(1){if((g|0)>=2)break;if((c[b+(g<<2)>>2]|0)>(c[b+(g+2<<2)>>2]|0)){h=8;break}else g=g+1|0}if((h|0)==8)ma(123421,123340,250,123374);i=a+1912|0;g=a+1908|0;h=c[g>>2]|0;if(c[i>>2]|0){q=h|0?a+1924|0:a+1916|0;c[q>>2]=(c[q>>2]|0)+1}if(!h){q=a+1964|0;c[q>>2]=(c[q>>2]|0)+1}if(!(qH(a,b,d,j,k,f)|0))g=0;else{if(c[i>>2]|0){q=c[g>>2]|0?a+1948|0:a+1944|0;c[q>>2]=(c[q>>2]|0)+1}g=rH(a)|0;q=a+1976|0;c[q>>2]=(c[q>>2]|0)+1;q=c[e>>2]|0;c[g+4>>2]=(c[q+4>>2]|0)+1;uH(n,q);c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];c[m+8>>2]=c[n+8>>2];c[m+12>>2]=c[n+12>>2];q=m+16|0;c[q>>2]=c[e>>2];wH(a,m,g,0)|0;uH(o,c[k>>2]|0);c[m>>2]=c[o>>2];c[m+4>>2]=c[o+4>>2];c[m+8>>2]=c[o+8>>2];c[m+12>>2]=c[o+12>>2];c[q>>2]=c[k>>2];wH(a,m,g,0)|0;c[e>>2]=g;g=a+1980|0;c[g>>2]=(c[g>>2]|0)+2;g=1}l=p;return g|0}ma(123386,123340,248,123374);return 0}function qH(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l;l=l+80|0;m=q+52|0;n=q+48|0;o=q+32|0;p=q+16|0;k=q;c[n>>2]=0;if(!((b|0)!=0&(e|0)!=0&(f|0)!=0))ma(123464,123340,311,123478);if((g|0)>-1?(i=e+4|0,h=c[i>>2]|0,(h|0)>=(g|0)):0){if(c[a+1912>>2]|0){h=c[a+1908>>2]|0?a+1948|0:a+1944|0;c[h>>2]=(c[h>>2]|0)+1;h=c[i>>2]|0}do if((h|0)>(g|0)){i=vH(b,e)|0;h=e+8+(i*20|0)+16|0;i=e+8+(i*20|0)|0;if(!(qH(a,b,d,c[h>>2]|0,n,g)|0)){BH(o,b,i);c[i>>2]=c[o>>2];c[i+4>>2]=c[o+4>>2];c[i+8>>2]=c[o+8>>2];c[i+12>>2]=c[o+12>>2];j=0;break}else{uH(p,c[h>>2]|0);c[i>>2]=c[p>>2];c[i+4>>2]=c[p+4>>2];c[i+8>>2]=c[p+8>>2];c[i+12>>2]=c[p+12>>2];j=c[n>>2]|0;c[m+16>>2]=j;uH(k,j);c[m>>2]=c[k>>2];c[m+4>>2]=c[k+4>>2];c[m+8>>2]=c[k+8>>2];c[m+12>>2]=c[k+12>>2];j=a+1980|0;c[j>>2]=(c[j>>2]|0)+1;j=wH(a,m,e,f)|0;break}}else if((h|0)==(g|0)){c[m>>2]=c[b>>2];c[m+4>>2]=c[b+4>>2];c[m+8>>2]=c[b+8>>2];c[m+12>>2]=c[b+12>>2];c[m+16>>2]=d;j=a+1980|0;c[j>>2]=(c[j>>2]|0)+1;j=wH(a,m,e,f)|0;break}else ma(123523,123340,341,123478);while(0);l=q;return j|0}ma(123491,123340,312,123478);return 0}function rH(a){a=a|0;a=a+1968|0;c[a>>2]=(c[a>>2]|0)+1;a=_I(1288)|0;sH(a);return a|0}function sH(a){a=a|0;var b=0;c[a>>2]=0;c[a+4>>2]=-1;b=0;while(1){if((b|0)==64)break;tH(a+8+(b*20|0)|0);b=b+1|0}return}function tH(a){a=a|0;yH(a);c[a+16>>2]=0;return}function uH(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+32|0;g=i+16|0;h=i;if(!b)ma(123690,123529,99,123536);yH(g);d=1;f=0;while(1){if((f|0)==64)break;do if(c[b+8+(f*20|0)+16>>2]|0){e=b+8+(f*20|0)|0;if(!d){BH(h,g,e);c[g>>2]=c[h>>2];c[g+4>>2]=c[h+4>>2];c[g+8>>2]=c[h+8>>2];c[g+12>>2]=c[h+12>>2];d=0;break}else{c[g>>2]=c[e>>2];c[g+4>>2]=c[e+4>>2];c[g+8>>2]=c[e+8>>2];c[g+12>>2]=c[e+12>>2];d=0;break}}while(0);f=f+1|0}c[a>>2]=c[g>>2];c[a+4>>2]=c[g+4>>2];c[a+8>>2]=c[g+8>>2];c[a+12>>2]=c[g+12>>2];l=i;return}function vH(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;k=l;l=l+32|0;i=k+16|0;j=k;if(!((a|0)!=0&(b|0)!=0))ma(123546,123529,125,123553);d=0;e=0;f=0;g=1;h=0;while(1){if((h|0)==64)break;if(c[b+8+(h*20|0)+16>>2]|0){n=b+8+(h*20|0)|0;p=AH(n)|0;BH(j,a,n);c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];c[i+12>>2]=c[j+12>>2];n=(AH(i)|0)-p|0;m=(g|0)!=0|(n|0)<(f|0);o=m|(p|0)<(e|0)&(n|0)==(f|0);d=o?h:d;e=o?p:e;f=o?n:f;g=m?0:g}h=h+1|0}l=k;return d|0}function wH(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;if(!b)ma(123712,123529,167,123564);if(!d)ma(123690,123529,168,123564);do if((c[d>>2]|0)<64){a=0;while(1){if((a|0)>=64){e=10;break}if(!(c[d+8+(a*20|0)+16>>2]|0)){e=8;break}a=a+1|0}if((e|0)==8){f=d+8+(a*20|0)|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];c[f+16>>2]=c[b+16>>2];f=0;g=d;break}else if((e|0)==10)ma(123574,123529,178,123564)}else{if(c[a+1912>>2]|0){h=c[a+1908>>2]|0?a+1948|0:a+1944|0;c[h>>2]=(c[h>>2]|0)+1}if(!e)ma(123587,123529,187,123564);else{DH(a,d,b,e);f=1;g=(c[d+4>>2]|0)==0?a+1972|0:a+1976|0;break}}while(0);c[g>>2]=(c[g>>2]|0)+1;return f|0}function xH(a,b){a=a|0;b=b|0;if(!((a|0)!=0&b>>>0<64))ma(123591,123529,201,123619);if(!(c[a+8+(b*20|0)+16>>2]|0))ma(124113,123529,202,123619);else{tH(a+8+(b*20|0)|0);c[a>>2]=(c[a>>2]|0)+-1;return}}function yH(a){a=a|0;var b=0;b=0;while(1){if((b|0)==4)break;c[a+(b<<2)>>2]=0;b=b+1|0}return}function zH(a){a=a|0;var b=0,d=0,e=0;e=l;l=l+16|0;d=e;c[d>>2]=1;c[d+8>>2]=-1;b=1;while(1){if((b|0)==2)break;c[d+(b+2<<2)>>2]=0;c[d+(b<<2)>>2]=0;b=b+1|0}c[a>>2]=c[d>>2];c[a+4>>2]=c[d+4>>2];c[a+8>>2]=c[d+8>>2];c[a+12>>2]=c[d+12>>2];l=e;return}function AH(a){a=a|0;var b=0,d=0,e=0;if(!a)ma(123632,123634,128,123646);a:do if((c[a>>2]|0)>(c[a+8>>2]|0))b=0;else{b=1;d=0;while(1){if((d|0)==2)break a;e=O(c[a+(d+2<<2)>>2]|0,b)|0;b=e-(c[a+(d<<2)>>2]|0)|0;d=d+1|0}}while(0);return b|0}function BH(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;g=l;l=l+16|0;f=g;if(!((b|0)!=0&(d|0)!=0))ma(123655,123634,195,123663);do if((c[b>>2]|0)>(c[b+8>>2]|0)){c[a>>2]=c[d>>2];c[a+4>>2]=c[d+4>>2];c[a+8>>2]=c[d+8>>2];c[a+12>>2]=c[d+12>>2]}else{if((c[d>>2]|0)>(c[d+8>>2]|0)){c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];break}else e=0;while(1){if((e|0)==2)break;j=c[b+(e<<2)>>2]|0;h=c[d+(e<<2)>>2]|0;c[f+(e<<2)>>2]=(j|0)<(h|0)?j:h;h=e+2|0;j=c[b+(h<<2)>>2]|0;i=c[d+(h<<2)>>2]|0;c[f+(h<<2)>>2]=(j|0)>(i|0)?j:i;e=e+1|0}c[a>>2]=c[f>>2];c[a+4>>2]=c[f+4>>2];c[a+8>>2]=c[f+8>>2];c[a+12>>2]=c[f+12>>2]}while(0);l=g;return}function CH(a,b){a=a|0;b=b|0;var d=0,e=0;if((a|0)!=0&(b|0)!=0)d=0;else ma(123675,123634,216,123682);while(1){if((d|0)>=2){d=1;break}e=d+2|0;if((c[a+(d<<2)>>2]|0)>(c[b+(e<<2)>>2]|0)){d=0;break}if((c[b+(d<<2)>>2]|0)>(c[a+(e<<2)>>2]|0)){d=0;break}else d=d+1|0}return d|0}function DH(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0;if(!b)ma(123690,123692,40,123702);if(!d)ma(123712,123692,41,123702);j=a+1912|0;if(c[j>>2]|0){i=c[a+1908>>2]|0?a+1932|0:a+1928|0;c[i>>2]=(c[i>>2]|0)+1}h=b+4|0;i=c[h>>2]|0;EH(a,b,d);d=a+1324|0;FH(a);f=AH(a+1852|0)|0;f=(AH(a+1868|0)|0)+f|0;if(c[j>>2]|0?(f|0)!=0&(c[a+1908>>2]|0)==0:0){j=a+1960|0;g[j>>2]=+((c[a+1320>>2]|0)>>>0)/+(f|0)+ +g[j>>2]}j=rH(a)|0;c[e>>2]=j;c[h>>2]=i;c[j+4>>2]=i;GH(a,b,j,d);if(((c[c[e>>2]>>2]|0)+(c[b>>2]|0)|0)==65)return;else ma(123714,123692,86,123702)}function EH(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;h=l;l=l+16|0;g=h;if(!b)ma(123690,123692,106,124101);if(!d)ma(123712,123692,107,124101);else e=0;while(1){if((e|0)>=64)break;if(!(c[b+8+(e*20|0)+16>>2]|0)){f=7;break}j=b+8+(e*20|0)|0;i=a+4+(e*20|0)|0;c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];c[i+12>>2]=c[j+12>>2];c[i+16>>2]=c[j+16>>2];e=e+1|0}if((f|0)==7)ma(124113,123692,111,124101);e=a+4|0;j=a+1284|0;c[j>>2]=c[d>>2];c[j+4>>2]=c[d+4>>2];c[j+8>>2]=c[d+8>>2];c[j+12>>2]=c[d+12>>2];c[j+16>>2]=c[d+16>>2];d=a+1304|0;c[d>>2]=c[e>>2];c[d+4>>2]=c[e+4>>2];c[d+8>>2]=c[e+8>>2];c[d+12>>2]=c[e+12>>2];e=1;while(1){if((e|0)==65)break;BH(g,d,a+4+(e*20|0)|0);c[d>>2]=c[g>>2];c[d+4>>2]=c[g+4>>2];c[d+8>>2]=c[g+8>>2];c[d+12>>2]=c[g+12>>2];e=e+1|0}c[a+1320>>2]=AH(d)|0;sH(b);l=h;return}function FH(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;u=l;l=l+48|0;i=u+32|0;k=u+16|0;m=u;HH(a);IH(a);q=a+1844|0;s=a+1848|0;t=a+1892|0;n=a+1852|0;o=a+1884|0;p=a+1868|0;j=a+1888|0;f=0;e=0;while(1){d=c[q>>2]|0;b=c[s>>2]|0;if((b+d|0)>=65)break;h=65-(c[t>>2]|0)|0;if((d|0)<(h|0)&(b|0)<(h|0)){g=-1;h=0}else{r=12;break}while(1){if((h|0)==65)break;if(!(c[a+1584+(h<<2)>>2]|0)){v=a+4+(h*20|0)|0;BH(k,v,n);c[i>>2]=c[k>>2];c[i+4>>2]=c[k+4>>2];c[i+8>>2]=c[k+8>>2];c[i+12>>2]=c[k+12>>2];b=AH(i)|0;d=c[o>>2]|0;BH(m,v,p);c[i>>2]=c[m>>2];c[i+4>>2]=c[m+4>>2];c[i+8>>2]=c[m+8>>2];c[i+12>>2]=c[m+12>>2];v=AH(i)|0;b=v-(c[j>>2]|0)+(d-b)|0;d=(b|0)>-1;b=d?b:0-b|0;d=(d^1)&1;if((b|0)<=(g|0))if((b|0)==(g|0)){v=(c[a+1844+(d<<2)>>2]|0)<(c[a+1844+(f<<2)>>2]|0);b=g;d=v?d:f;e=v?h:e}else{b=g;d=f}else e=h}else{b=g;d=f}g=b;h=h+1|0;f=d}JH(a,e,f)}if((r|0)==12){b=(d|0)>=(65-(c[t>>2]|0)|0)&1;d=0;while(1){if((d|0)==65)break;if(!(c[a+1584+(d<<2)>>2]|0))JH(a,d,b);d=d+1|0}d=c[q>>2]|0;b=c[s>>2]|0}if((b+d|0)!=65)ma(123857,123692,210,123943);v=c[t>>2]|0;if((d|0)<(v|0)|(b|0)<(v|0))ma(123954,123692,212,123943);else{l=u;return}}function GH(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;if(!b)ma(123690,123692,297,123754);if(!d)ma(123764,123692,298,123754);if(!e)ma(123766,123692,299,123754);else f=0;while(1){if((f|0)>=65){e=14;break}e=c[a+1324+(f<<2)>>2]|0;if(e>>>0>=2){e=9;break}switch(e|0){case 0:{wH(a,a+4+(f*20|0)|0,b,0)|0;break}case 1:{wH(a,a+4+(f*20|0)|0,d,0)|0;break}default:{}}f=f+1|0}if((e|0)==9)ma(123768,123692,303,123754);else if((e|0)==14)return}function HH(a){a=a|0;var b=0,d=0,e=0,f=0;d=l;l=l+16|0;e=d;c[a+1848>>2]=0;c[a+1844>>2]=0;b=a+1852|0;f=a+1868|0;zH(e);c[f>>2]=c[e>>2];c[f+4>>2]=c[e+4>>2];c[f+8>>2]=c[e+8>>2];c[f+12>>2]=c[e+12>>2];c[b>>2]=c[e>>2];c[b+4>>2]=c[e+4>>2];c[b+8>>2]=c[e+8>>2];c[b+12>>2]=c[e+12>>2];c[a+1888>>2]=0;c[a+1884>>2]=0;b=0;while(1){if((b|0)==65)break;c[a+1584+(b<<2)>>2]=0;c[a+1324+(b<<2)>>2]=-1;b=b+1|0}l=d;return}function IH(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;o=l;l=l+304|0;k=o+32|0;m=o+16|0;n=o;b=0;while(1){if((b|0)==65)break;c[k+(b<<2)>>2]=AH(a+4+(b*20|0)|0)|0;b=b+1|0}b=0;d=0;e=0;g=0;a:while(1){if((g|0)==64)break;i=g+1|0;j=a+4+(g*20|0)|0;h=k+(g<<2)|0;f=i;while(1){if((f|0)==65){g=i;continue a}BH(n,j,a+4+(f*20|0)|0);c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];c[m+8>>2]=c[n+8>>2];c[m+12>>2]=c[n+12>>2];p=AH(m)|0;p=p-(c[h>>2]|0)-(c[k+(f<<2)>>2]|0)|0;q=p>>>0>e>>>0;r=q?f:b;f=f+1|0;b=r;d=q?g:d;e=q?p:e}}JH(a,d,0);JH(a,b,1);l=o;return}function JH(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;h=i;e=a+1584+(b<<2)|0;if(c[e>>2]|0)ma(124057,123692,257,124092);c[a+1324+(b<<2)>>2]=d;c[e>>2]=1;g=a+1844+(d<<2)|0;f=a+1852+(d<<4)|0;e=a+4+(b*20|0)|0;if(!(c[g>>2]|0)){c[f>>2]=c[e>>2];c[f+4>>2]=c[e+4>>2];c[f+8>>2]=c[e+8>>2];c[f+12>>2]=c[e+12>>2]}else{BH(h,e,f);c[f>>2]=c[h>>2];c[f+4>>2]=c[h+4>>2];c[f+8>>2]=c[h+8>>2];c[f+12>>2]=c[h+12>>2]}c[a+1884+(d<<2)>>2]=AH(f)|0;c[g>>2]=(c[g>>2]|0)+1;l=i;return}function KH(){var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=l;l=l+1200|0;r=t+800|0;g=t;c[42441]=0;c[42442]=-2;f=r;i=200;n=g;p=0;q=0;o=r;a:while(1){b[o>>1]=p;if((f+(i<<1)+-2|0)>>>0>o>>>0)k=i;else{m=o-f>>1;e=m+1|0;if(i>>>0>9999){s=95;break}k=i<<1;k=k>>>0<1e4?k:1e4;h=_I(k*6|3)|0;if(h){UN(h|0,f|0,e<<1|0)|0;i=h+(k>>>1<<2)|0;UN(i|0,n|0,e<<2|0)|0;if((f|0)==(r|0)){e=0;f=h}else{$I(f);e=0;f=h}}else{e=4;i=n}j=(e|0)==0;h=f+(m<<1)|0;switch((j?((f+(k<<1)+-2|0)>>>0>h>>>0?0:9):e)&15){case 9:{e=1;s=96;break a}case 4:{s=95;break a}case 0:{g=j?i+(m<<2)|0:g;n=i;o=j?h:o;break}default:{e=0;break a}}}if((p|0)==31){e=0;s=96;break}e=b[58358+(p<<1)>>1]|0;j=e<<16>>16;do if(e<<16>>16!=-82){h=c[42442]|0;if((h|0)==-2){h=hI()|0;c[42442]=h}if((h|0)>=1)if(h>>>0<296)i=d[124132+h>>0]|0;else i=2;else{c[42442]=0;i=0}h=i+j|0;if(h>>>0<=271?(i|0)==(a[124428+h>>0]|0):0){p=a[124700+h>>0]|0;e=p<<24>>24;if(p<<24>>24<1){h=0-e|0;s=23;break}else{c[42442]=-2;g=g+4|0;c[g>>2]=0;j=(q|0)==0?0:q+-1|0;h=o;break}}else s=22}else s=22;while(0);if((s|0)==22){s=0;p=a[124972+p>>0]|0;h=p&255;if(!(p<<24>>24)){h=c[42442]|0;b:do switch(q|0){case 0:{c[42441]=(c[42441]|0)+1;dI(125369);h=o;break}case 3:if((h|0)<1)if(!h){e=1;s=96;break a}else{h=o;break b}else{c[42442]=-2;h=o;break b}default:h=o}while(0);while(1){if(e<<16>>16==8)break;if((h|0)==(f|0)){e=1;s=96;break a}e=h+-2|0;g=g+-4|0;h=e;e=b[58358+(b[e>>1]<<1)>>1]|0}g=g+4|0;c[g>>2]=0;e=1;j=3}else s=23}do if((s|0)==23){s=0;j=d[125088+h>>0]|0;e=c[g+(1-j<<2)>>2]|0;do switch(h|0){case 4:{s=26;break a}case 2:{c[42443]=LH(c[g+-4>>2]|0,2)|0;break}case 3:{c[42443]=LH(c[g+-4>>2]|0,1)|0;break}case 5:{e=NH()|0;break}case 8:{OH(c[42444]|0);break}case 9:{PH(c[g>>2]|0);break}case 18:{QH(c[g>>2]|0);break}case 19:{RH();break}case 20:{QH(c[g>>2]|0);break}case 21:{RH();break}case 22:{QH(c[g>>2]|0);break}case 23:{RH();break}case 24:{QH(c[g>>2]|0);break}case 25:{RH();break}case 26:{QH(c[g>>2]|0);break}case 27:{RH();break}case 28:{QH(c[g>>2]|0);break}case 29:{RH();break}case 30:{QH(c[g>>2]|0);break}case 31:{RH();break}case 32:{QH(c[g>>2]|0);break}case 33:{RH();break}case 34:{e=c[g+-4>>2]|0;break}case 35:{e=c[g>>2]|0;break}case 38:{e=c[42444]|0;i=c[e+4>>2]|0;if(i>>>0>=(c[e+8>>2]|0)>>>0){em(e,1)|0;i=c[42444]|0;e=i;i=c[i+4>>2]|0}a[i>>0]=0;p=c[e>>2]|0;c[e+4>>2]=p;if(SH(p)|0){s=51;break a}c[(c[g>>2]|0)+80>>2]=c[42445];e=Rl(55016,c[4344]|0)|0;c[(c[g>>2]|0)+84>>2]=e;c[42445]=c[g>>2];c[(c[g>>2]|0)+108>>2]=c[c[42446]>>2];e=c[g>>2]|0;break}case 39:{e=c[42444]|0;i=c[e+4>>2]|0;if(i>>>0>=(c[e+8>>2]|0)>>>0){em(e,1)|0;i=c[42444]|0;e=i;i=c[i+4>>2]|0}a[i>>0]=0;p=c[e>>2]|0;c[e+4>>2]=p;if(SH(p)|0){s=56;break a}e=c[42445]|0;c[42445]=c[e+80>>2];break}case 40:{e=c[g>>2]|0;break}case 41:{e=c[g+-4>>2]|0;break}case 42:{e=c[g+-4>>2]|0;break}case 43:{e=c[g+-4>>2]|0;break}case 44:{e=c[g+-4>>2]|0;break}case 45:{e=c[g+-4>>2]|0;break}case 48:{e=c[g>>2]|0;break}case 49:{e=c[g>>2]|0;break}case 50:{a[(c[g+-8>>2]|0)+12>>0]=1;e=c[g>>2]|0;break}case 51:{TH();break}case 52:{e=UH()|0;break}case 53:{e=c[g>>2]|0;break}case 54:{e=c[g>>2]|0;break}case 55:{e=(c[g+-8>>2]|0)+100|0;a[e>>0]=a[e>>0]|1;e=c[g>>2]|0;break}case 56:{VH(c[g+-4>>2]|0,c[g>>2]|0,1);break}case 57:{e=c[g+-12>>2]|0;break}case 58:{VH(c[g+-4>>2]|0,c[g>>2]|0,2);break}case 59:{e=c[g+-12>>2]|0;break}case 60:{VH(c[g+-4>>2]|0,c[g>>2]|0,3);break}case 61:{e=c[g+-12>>2]|0;break}case 62:{VH(c[g>>2]|0,NH()|0,2);break}case 63:{e=c[g+-8>>2]|0;break}case 64:{e=c[g+-4>>2]|0;break}case 65:{e=c[g>>2]|0;break}default:{}}while(0);i=0-j|0;p=g+(i<<2)|0;i=o+(i<<1)|0;g=p+4|0;c[p+4>>2]=e;e=(d[125260+h>>0]|0)+-41|0;p=b[i>>1]|0;h=p+(b[58590+(e<<1)>>1]|0)|0;if(h>>>0<272?(a[124428+h>>0]|0)==(p|0):0){e=a[124700+h>>0]|0;j=q;h=i;break}e=a[125330+e>>0]|0;j=q;h=i}while(0);i=k;p=e;q=j;o=h+2|0}if((s|0)==26){MH();e=1;s=96}else if((s|0)==51){dI(125158);MH();e=1;s=96}else if((s|0)==56){dI(125209);MH();e=1;s=96}else if((s|0)==95){dI(125382);e=2;s=96}if((s|0)==96)if((f|0)!=(r|0))$I(f);l=t;return e|0}function LH(b,d){b=b|0;d=d|0;var e=0;e=ww(8)|0;a[e+4>>0]=d;c[e>>2]=b;return e|0}function MH(){var a=0,b=0;a=c[42445]|0;b=c[42443]|0;if(b|0){FF(b,1);c[42443]=0}c[13767]=62;while(1){if(!a)break;b=c[a+80>>2]|0;ZH(a);a=b}c[13767]=51;c[13776]=63;b=c[42448]|0;bb[c[b>>2]&31](b,0,64)|0;c[13776]=51;c[13785]=64;b=c[42449]|0;bb[c[b>>2]&31](b,0,64)|0;c[13785]=51;aI();return}function NH(){var a=0,d=0,e=0,f=0,g=0,h=0;e=c[42449]|0;f=ww(40)|0;if(Tl(c[42448]|0)|0)PH(0);a=Tl(e)|0;b[f+4>>1]=a;a:do if(!a)a=e;else{c[f>>2]=ww(a*24|0)|0;a=0;d=bb[c[e>>2]&31](e,0,128)|0;while(1){if(!d){a=e;break a}g=(c[f>>2]|0)+(a*24|0)|0;h=d+8|0;c[g>>2]=c[h>>2];c[g+4>>2]=c[h+4>>2];c[g+8>>2]=c[h+8>>2];c[g+12>>2]=c[h+12>>2];c[g+16>>2]=c[h+16>>2];c[g+20>>2]=c[h+20>>2];a=a+1|0;d=bb[c[e>>2]&31](e,d,8)|0}}while(0);bb[c[a>>2]&31](e,0,64)|0;return f|0}function OH(b){b=b|0;var d=0,e=0,f=0;e=ww(64)|0;f=b+4|0;d=c[f>>2]|0;if(d>>>0>=(c[b+8>>2]|0)>>>0){em(b,1)|0;d=c[f>>2]|0}a[d>>0]=0;b=c[b>>2]|0;c[f>>2]=b;c[e+8>>2]=HL(b)|0;c[e+12>>2]=c[c[42446]>>2];f=c[42448]|0;bb[c[f>>2]&31](f,e,1)|0;return}function PH(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;i=ww(32)|0;j=c[42448]|0;e=Tl(j)|0;k=i+8|0;a[i+14>>0]=d;a:do if(!e){c[k>>2]=ww(56)|0;b[i+12>>1]=1;h=HL(174185)|0;k=c[k>>2]|0;c[k>>2]=h;c[k+4>>2]=c[c[42446]>>2]}else{b[i+12>>1]=e;c[k>>2]=ww(e*56|0)|0;d=0;e=Pl(j)|0;while(1){if(!e)break a;f=(c[k>>2]|0)+(d*56|0)|0;g=e+8|0;h=f+56|0;do{c[f>>2]=c[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));d=d+1|0;e=c[e>>2]|0}}while(0);bb[c[j>>2]&31](j,0,64)|0;k=c[42449]|0;bb[c[k>>2]&31](k,i,1)|0;return}function QH(a){a=a|0;var b=0,d=0.0,e=0,f=0,g=0,i=0,j=0;j=l;l=l+32|0;g=j;i=ww(8)|0;f=c[c[42446]>>2]|0;c[g>>2]=c[a>>2];c[g+4>>2]=c[a+4>>2];c[g+8>>2]=c[a+8>>2];c[g+12>>2]=c[a+12>>2];c[g+16>>2]=c[a+16>>2];c[g+20>>2]=c[a+20>>2];c[g+24>>2]=c[a+24>>2];c[g+28>>2]=c[a+28>>2];if(f|0){a=g+4|0;if((c[a>>2]|0)==0?(b=c[f+4>>2]|0,b|0):0)c[a>>2]=b;a=g+16|0;if(+h[a>>3]<0.0?(d=+h[f+16>>3],d>=0.0):0)h[a>>3]=d;if((c[g>>2]|0)==0?(e=c[f>>2]|0,e|0):0)c[g>>2]=e;a=c[f+24>>2]&127;if(a|0){f=g+24|0;e=c[f>>2]|0;c[f>>2]=e&127|a|e&-128}}f=c[(c[42447]|0)+144>>2]|0;c[i>>2]=bb[c[f>>2]&31](f,g,1)|0;c[i+4>>2]=c[42446];c[42446]=i;l=j;return}function RH(){var a=0,b=0;b=c[42446]|0;a=c[b+4>>2]|0;$I(b);c[42446]=a;return}function SH(b){b=b|0;var c=0;while(1){c=a[b>>0]|0;if(!(c<<24>>24)){b=0;break}if(c<<24>>24==32)b=b+1|0;else{b=1;break}}return b|0}function TH(){var b=0,d=0,e=0;e=Rl(55052,c[4344]|0)|0;b=c[42445]|0;d=ww(16)|0;c[d+8>>2]=e;if(a[b+112>>0]&2)a[d+12>>0]=1;e=c[b+84>>2]|0;bb[c[e>>2]&31](e,d,1)|0;return}function UH(){var a=0;a=c[(c[42445]|0)+84>>2]|0;return bb[c[a>>2]&31](a,0,256)|0}function VH(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;g=ww(16)|0;f=c[42445]|0;h=c[f+84>>2]|0;h=c[(bb[c[h>>2]&31](h,0,256)|0)+8>>2]|0;c[g+8>>2]=b;bb[c[h>>2]&31](h,g,1)|0;a[b+92>>0]=e;if(a[f+112>>0]&1)a[b+100>>0]=1;c[b+88>>2]=d;return}function WH(a,b,c){a=a|0;b=b|0;c=c|0;$I(b);return}function XH(a,b,d){a=a|0;b=b|0;d=d|0;Ll(c[b+8>>2]|0)|0;$I(b);return}function YH(a,b,d){a=a|0;b=b|0;d=d|0;bI(c[b+8>>2]|0);$I(b);return}function ZH(a){a=a|0;Ll(c[a+84>>2]|0)|0;CF(a);$I(a);return}function _H(a,b,d){a=a|0;b=b|0;d=d|0;$I(c[b+8>>2]|0);$I(b);return}function $H(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0;g=d+12|0;a=b[g>>1]|0;if(a<<16>>16){h=d+8|0;e=0;f=c[h>>2]|0;while(1){if((e|0)>=(a<<16>>16|0))break;$I(c[f>>2]|0);e=e+1|0;f=f+56|0;a=b[g>>1]|0}$I(c[h>>2]|0)}$I(d);return}function aI(){var a=0,b=0;a=c[42446]|0;while(1){b=c[a+4>>2]|0;if(!b)break;$I(a);a=b}return}function bI(b){b=b|0;var d=0;d=b+88|0;switch(a[b+92>>0]|0){case 1:{ZH(c[d>>2]|0);break}case 2:{DF(c[d>>2]|0);break}default:{}}CF(b);$I(b);return}function cI(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=l;l=l+160|0;e=f+8|0;g=f;c[g>>2]=0;c[g+4>>2]=0;c[42446]=g;c[42445]=0;c[42443]=0;c[42447]=c[(c[(c[d+52>>2]|0)+16>>2]|0)+144>>2];c[42448]=Rl(55088,c[4344]|0)|0;c[42449]=Rl(55124,c[4344]|0)|0;dm(e,128,f+24|0);c[42444]=e;if(!(fI(a,e,d)|0)){KH()|0;c[b>>2]=gI()|0;a=c[42443]|0}else{c[b>>2]=2;a=0}Ll(c[42448]|0)|0;Ll(c[42449]|0)|0;c[42448]=0;c[42449]=0;c[42446]=0;hm(e);l=f;return a|0}function dI(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if(!(a[169800]|0)){a[169800]=1;c[d>>2]=b;c[d+4>>2]=0;$l(1,125399,d)|0;eI()}else{l=e;return}}function eI(){Ta()}function fI(a,b,d){a=a|0;b=b|0;d=d|0;a=l;l=l+16|0;if(!(c[42451]|0)){$l(0,125415,a)|0;c[42451]=(c[42451]|0)+1}l=a;return 1}function gI(){return 1}function hI(){return -1}function iI(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+64|0;m=u+48|0;k=u+32|0;s=4;j=_I(40)|0;c[j>>2]=0;n=u+16|0;q=u;r=c[d>>2]|0;i=c[d+4>>2]|0;s=SN(169808,1,j|0,s|0)|0;j=z;o=0;d=o;o=0;if((d|0)!=0&(p|0)!=0){g=TN(c[d>>2]|0,s|0,j|0)|0;if(!g)Ua(d|0,p|0);z=p}else g=-1;if((g|0)==1)d=z;else d=0;while(1){if(d|0){d=-1;break}o=0;c[m>>2]=c[e>>2];c[m+4>>2]=c[e+4>>2];c[m+8>>2]=c[e+8>>2];c[m+12>>2]=c[e+12>>2];ga(26,n|0,m|0);d=o;o=0;if((d|0)!=0&(p|0)!=0){g=TN(c[d>>2]|0,s|0,j|0)|0;if(!g)Ua(d|0,p|0);z=p}else g=-1;if((g|0)==1){d=z;continue};c[e>>2]=c[n>>2];c[e+4>>2]=c[n+4>>2];c[e+8>>2]=c[n+8>>2];c[e+12>>2]=c[n+12>>2];h=e+16|0;o=0;c[m>>2]=c[h>>2];c[m+4>>2]=c[h+4>>2];c[m+8>>2]=c[h+8>>2];c[m+12>>2]=c[h+12>>2];ga(26,q|0,m|0);d=o;o=0;if((d|0)!=0&(p|0)!=0){g=TN(c[d>>2]|0,s|0,j|0)|0;if(!g)Ua(d|0,p|0);z=p}else g=-1;if((g|0)==1){d=z;continue};c[h>>2]=c[q>>2];c[h+4>>2]=c[q+4>>2];c[h+8>>2]=c[q+8>>2];c[h+12>>2]=c[q+12>>2];c[42491]=0;o=0;fa(93,4);d=o;o=0;if((d|0)!=0&(p|0)!=0){g=TN(c[d>>2]|0,s|0,j|0)|0;if(!g)Ua(d|0,p|0);z=p}else g=-1;if((g|0)==1){d=z;continue}g=c[42492]|0;d=c[42491]|0;c[42491]=d+1;d=g+(d<<4)|0;c[d>>2]=c[r>>2];c[d+4>>2]=c[r+4>>2];c[d+8>>2]=c[r+8>>2];c[d+12>>2]=c[r+12>>2];o=0;c[k>>2]=c[e>>2];c[k+4>>2]=c[e+4>>2];c[k+8>>2]=c[e+8>>2];c[k+12>>2]=c[e+12>>2];c[m>>2]=c[h>>2];c[m+4>>2]=c[h+4>>2];c[m+8>>2]=c[h+8>>2];c[m+12>>2]=c[h+12>>2];d=da(1,a|0,b|0,r|0,i|0,k|0,m|0)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){h=TN(c[g>>2]|0,s|0,j|0)|0;if(!h)Ua(g|0,p|0);z=p}else h=-1;if((h|0)==1)d=z;else{t=8;break}}if((t|0)==8)if((d|0)==-1)d=-1;else{c[f+4>>2]=c[42491];c[f>>2]=c[42492];d=0}$I(s|0);l=u;return d|0}function jI(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0.0,g=0.0,i=0.0;d=+h[b>>3];e=b+8|0;f=+h[e>>3];i=f*f+d*d;g=+C(+i);if(i>1.0e-06){h[b>>3]=d/g;h[e>>3]=f/g};c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];return}function kI(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+32|0;e=f+16|0;d=f;if((c[42495]|0)<(a|0)){b=c[42492]|0;if(!b){e=_I(a<<4)|0;c[42492]=e;if(!e){e=c[13918]|0;c[d>>2]=125476;c[d+4>>2]=531;c[d+8>>2]=125611;AL(e,125484,d)|0;Ua(169808,1)}}else{d=bJ(b,a<<4)|0;c[42492]=d;if(!d){d=c[13918]|0;c[e>>2]=125476;c[e+4>>2]=537;c[e+8>>2]=125629;AL(d,125484,e)|0;Ua(169808,1)}}c[42495]=a}l=f;return}function lI(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0.0,k=0,m=0.0,n=0,o=0.0,p=0.0,q=0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0.0,U=0.0,V=0.0,W=0.0;R=l;l=l+336|0;J=R+320|0;I=R+304|0;w=R+144|0;q=R+128|0;G=R+112|0;H=R+96|0;Q=R+80|0;A=R+64|0;C=R+48|0;K=R+32|0;L=R+16|0;M=R;x=R+288|0;y=R+272|0;z=R+256|0;B=R+240|0;D=R+224|0;E=R+208|0;N=R+192|0;O=R+176|0;P=R+160|0;i=c[42494]|0;do if((c[42493]|0)<(e|0)){if(!i){i=_I(e*40|0)|0;c[42494]=i;if(!i){i=-1;break}}else{i=bJ(i,e*40|0)|0;c[42494]=i;if(!i){i=-1;break}}c[42493]=e;k=6}else k=6;while(0);if((k|0)==6){h[i>>3]=0.0;k=1;j=0.0;while(1){if((k|0)>=(e|0))break;n=d+(k<<4)|0;F=d+(k+-1<<4)|0;c[I>>2]=c[n>>2];c[I+4>>2]=c[n+4>>2];c[I+8>>2]=c[n+8>>2];c[I+12>>2]=c[n+12>>2];c[J>>2]=c[F>>2];c[J+4>>2]=c[F+4>>2];c[J+8>>2]=c[F+8>>2];c[J+12>>2]=c[F+12>>2];v=+mI(I,J)+j;h[i+(k*40|0)>>3]=v;k=k+1|0;j=v}F=e+-1|0;n=i+(F*40|0)|0;k=1;while(1){if((k|0)>=(e|0))break;S=i+(k*40|0)|0;h[S>>3]=+h[S>>3]/+h[n>>3];k=k+1|0}k=0;while(1){if((k|0)>=(e|0))break;S=i+(k*40|0)+8|0;n=i+(k*40|0)|0;v=+nI(+h[n>>3]);c[J>>2]=c[f>>2];c[J+4>>2]=c[f+4>>2];c[J+8>>2]=c[f+8>>2];c[J+12>>2]=c[f+12>>2];oI(x,J,v);c[S>>2]=c[x>>2];c[S+4>>2]=c[x+4>>2];c[S+8>>2]=c[x+8>>2];c[S+12>>2]=c[x+12>>2];S=i+(k*40|0)+24|0;v=+pI(+h[n>>3]);c[J>>2]=c[g>>2];c[J+4>>2]=c[g+4>>2];c[J+8>>2]=c[g+8>>2];c[J+12>>2]=c[g+12>>2];oI(y,J,v);c[S>>2]=c[y>>2];c[S+4>>2]=c[y+4>>2];c[S+8>>2]=c[y+8>>2];c[S+12>>2]=c[y+12>>2];k=k+1|0}c[I>>2]=c[f>>2];c[I+4>>2]=c[f+4>>2];c[I+8>>2]=c[f+8>>2];c[I+12>>2]=c[f+12>>2];c[J>>2]=c[g>>2];c[J+4>>2]=c[g+4>>2];c[J+8>>2]=c[g+8>>2];c[J+12>>2]=c[g+12>>2];qI(d,e,i,I,J,G,A,H,C);c[q>>2]=c[G>>2];c[q+4>>2]=c[G+4>>2];c[q+8>>2]=c[G+8>>2];c[q+12>>2]=c[G+12>>2];c[w>>2]=c[A>>2];c[w+4>>2]=c[A+4>>2];c[w+8>>2]=c[A+8>>2];c[w+12>>2]=c[A+12>>2];c[I>>2]=c[H>>2];c[I+4>>2]=c[H+4>>2];c[I+8>>2]=c[H+8>>2];c[I+12>>2]=c[H+12>>2];c[J>>2]=c[C>>2];c[J+4>>2]=c[C+4>>2];c[J+8>>2]=c[C+8>>2];c[J+12>>2]=c[C+12>>2];if(!(rI(a,b,q,w,I,J,d,e)|0)){c[J>>2]=c[A>>2];c[J+4>>2]=c[A+4>>2];c[J+8>>2]=c[A+8>>2];c[J+12>>2]=c[A+12>>2];oI(z,J,.3333333333333333);c[I>>2]=c[G>>2];c[I+4>>2]=c[G+4>>2];c[I+8>>2]=c[G+8>>2];c[I+12>>2]=c[G+12>>2];c[J>>2]=c[z>>2];c[J+4>>2]=c[z+4>>2];c[J+8>>2]=c[z+8>>2];c[J+12>>2]=c[z+12>>2];sI(B,I,J);v=+h[B>>3];u=+h[B+8>>3];c[J>>2]=c[C>>2];c[J+4>>2]=c[C+4>>2];c[J+8>>2]=c[C+8>>2];c[J+12>>2]=c[C+12>>2];oI(D,J,.3333333333333333);c[I>>2]=c[H>>2];c[I+4>>2]=c[H+4>>2];c[I+8>>2]=c[H+8>>2];c[I+12>>2]=c[H+12>>2];c[J>>2]=c[D>>2];c[J+4>>2]=c[D+4>>2];c[J+8>>2]=c[D+8>>2];c[J+12>>2]=c[D+12>>2];tI(E,I,J);t=+h[E>>3];p=+h[E+8>>3];q=c[42494]|0;r=+h[G>>3];s=+h[H>>3];o=+h[G+8>>3];m=+h[H+8>>3];n=Q+8|0;i=-1;j=-1.0;k=1;while(1){if((k|0)>=(F|0))break;T=+h[q+(k*40|0)>>3];U=+uI(T);V=+nI(T);W=+pI(T);T=+vI(T);h[Q>>3]=V*v+r*U+W*t+s*T;h[n>>3]=W*p+V*u+o*U+m*T;S=d+(k<<4)|0;c[I>>2]=c[Q>>2];c[I+4>>2]=c[Q+4>>2];c[I+8>>2]=c[Q+8>>2];c[I+12>>2]=c[Q+12>>2];c[J>>2]=c[S>>2];c[J+4>>2]=c[S+4>>2];c[J+8>>2]=c[S+8>>2];c[J+12>>2]=c[S+12>>2];T=+mI(I,J);S=T>j;i=S?k:i;j=S?T:j;k=k+1|0}S=d+(i<<4)|0;Q=d+(i+-1<<4)|0;c[I>>2]=c[S>>2];c[I+4>>2]=c[S+4>>2];c[I+8>>2]=c[S+8>>2];c[I+12>>2]=c[S+12>>2];c[J>>2]=c[Q>>2];c[J+4>>2]=c[Q+4>>2];c[J+8>>2]=c[Q+8>>2];c[J+12>>2]=c[Q+12>>2];tI(N,I,J);c[J>>2]=c[N>>2];c[J+4>>2]=c[N+4>>2];c[J+8>>2]=c[N+8>>2];c[J+12>>2]=c[N+12>>2];jI(L,J);Q=i+1|0;N=d+(Q<<4)|0;c[I>>2]=c[N>>2];c[I+4>>2]=c[N+4>>2];c[I+8>>2]=c[N+8>>2];c[I+12>>2]=c[N+12>>2];c[J>>2]=c[S>>2];c[J+4>>2]=c[S+4>>2];c[J+8>>2]=c[S+8>>2];c[J+12>>2]=c[S+12>>2];tI(O,I,J);c[J>>2]=c[O>>2];c[J+4>>2]=c[O+4>>2];c[J+8>>2]=c[O+8>>2];c[J+12>>2]=c[O+12>>2];jI(M,J);c[I>>2]=c[L>>2];c[I+4>>2]=c[L+4>>2];c[I+8>>2]=c[L+8>>2];c[I+12>>2]=c[L+12>>2];c[J>>2]=c[M>>2];c[J+4>>2]=c[M+4>>2];c[J+8>>2]=c[M+8>>2];c[J+12>>2]=c[M+12>>2];sI(P,I,J);c[J>>2]=c[P>>2];c[J+4>>2]=c[P+4>>2];c[J+8>>2]=c[P+8>>2];c[J+12>>2]=c[P+12>>2];jI(K,J);c[I>>2]=c[f>>2];c[I+4>>2]=c[f+4>>2];c[I+8>>2]=c[f+8>>2];c[I+12>>2]=c[f+12>>2];c[J>>2]=c[K>>2];c[J+4>>2]=c[K+4>>2];c[J+8>>2]=c[K+8>>2];c[J+12>>2]=c[K+12>>2];lI(a,b,d,Q,I,J)|0;c[I>>2]=c[K>>2];c[I+4>>2]=c[K+4>>2];c[I+8>>2]=c[K+8>>2];c[I+12>>2]=c[K+12>>2];c[J>>2]=c[g>>2];c[J+4>>2]=c[g+4>>2];c[J+8>>2]=c[g+8>>2];c[J+12>>2]=c[g+12>>2];lI(a,b,S,e-i|0,I,J)|0;i=0}else i=0}l=R;return i|0}function mI(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;c=+h[b>>3]-+h[a>>3];d=+h[b+8>>3]-+h[a+8>>3];return +(+C(+(d*d+c*c)))}function nI(a){a=+a;var b=0.0;b=1.0-a;return +(b*b*(a*3.0))}function oI(a,b,d){a=a|0;b=b|0;d=+d;var e=0;h[b>>3]=+h[b>>3]*d;e=b+8|0;h[e>>3]=+h[e>>3]*d;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];return}function pI(a){a=+a;return +(a*a*3.0*(1.0-a))}function qI(a,b,d,e,f,g,i,j,k){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;j=j|0;k=k|0;var m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,B=0,C=0,D=0,E=0,F=0,G=0,H=0.0,I=0.0,J=0,K=0,L=0,M=0;G=l;l=l+128|0;B=G+112|0;v=G+80|0;u=G;r=G+96|0;s=G+64|0;t=G+48|0;C=G+32|0;D=G+16|0;E=a+(b+-1<<4)|0;q=0;w=0.0;x=0.0;y=0.0;z=0.0;A=0.0;while(1){if((q|0)>=(b|0))break;K=d+(q*40|0)+8|0;c[v>>2]=c[K>>2];c[v+4>>2]=c[K+4>>2];c[v+8>>2]=c[K+8>>2];c[v+12>>2]=c[K+12>>2];c[B>>2]=c[K>>2];c[B+4>>2]=c[K+4>>2];c[B+8>>2]=c[K+8>>2];c[B+12>>2]=c[K+12>>2];H=+BI(v,B)+x;J=d+(q*40|0)+24|0;c[v>>2]=c[K>>2];c[v+4>>2]=c[K+4>>2];c[v+8>>2]=c[K+8>>2];c[v+12>>2]=c[K+12>>2];c[B>>2]=c[J>>2];c[B+4>>2]=c[J+4>>2];c[B+8>>2]=c[J+8>>2];c[B+12>>2]=c[J+12>>2];p=+BI(v,B)+A;c[v>>2]=c[J>>2];c[v+4>>2]=c[J+4>>2];c[v+8>>2]=c[J+8>>2];c[v+12>>2]=c[J+12>>2];c[B>>2]=c[J>>2];c[B+4>>2]=c[J+4>>2];c[B+8>>2]=c[J+8>>2];c[B+12>>2]=c[J+12>>2];o=+BI(v,B)+y;L=a+(q<<4)|0;M=d+(q*40|0)|0;I=+CI(+h[M>>3]);c[B>>2]=c[a>>2];c[B+4>>2]=c[a+4>>2];c[B+8>>2]=c[a+8>>2];c[B+12>>2]=c[a+12>>2];oI(s,B,I);I=+DI(+h[M>>3]);c[B>>2]=c[E>>2];c[B+4>>2]=c[E+4>>2];c[B+8>>2]=c[E+8>>2];c[B+12>>2]=c[E+12>>2];oI(t,B,I);c[v>>2]=c[s>>2];c[v+4>>2]=c[s+4>>2];c[v+8>>2]=c[s+8>>2];c[v+12>>2]=c[s+12>>2];c[B>>2]=c[t>>2];c[B+4>>2]=c[t+4>>2];c[B+8>>2]=c[t+8>>2];c[B+12>>2]=c[t+12>>2];sI(r,v,B);c[v>>2]=c[L>>2];c[v+4>>2]=c[L+4>>2];c[v+8>>2]=c[L+8>>2];c[v+12>>2]=c[L+12>>2];c[B>>2]=c[r>>2];c[B+4>>2]=c[r+4>>2];c[B+8>>2]=c[r+8>>2];c[B+12>>2]=c[r+12>>2];tI(u,v,B);c[v>>2]=c[K>>2];c[v+4>>2]=c[K+4>>2];c[v+8>>2]=c[K+8>>2];c[v+12>>2]=c[K+12>>2];c[B>>2]=c[u>>2];c[B+4>>2]=c[u+4>>2];c[B+8>>2]=c[u+8>>2];c[B+12>>2]=c[u+12>>2];I=+BI(v,B)+w;c[v>>2]=c[J>>2];c[v+4>>2]=c[J+4>>2];c[v+8>>2]=c[J+8>>2];c[v+12>>2]=c[J+12>>2];c[B>>2]=c[u>>2];c[B+4>>2]=c[u+4>>2];c[B+8>>2]=c[u+8>>2];c[B+12>>2]=c[u+12>>2];q=q+1|0;w=I;x=H;y=o;z=+BI(v,B)+z;A=p}o=y*x-A*A;p=o>=0.0?o:-o;if(!(p>=1.0e-06?(m=(y*w-A*z)/o,n=(x*z-A*w)/o,!(p<1.0e-06|m<=0.0|n<=0.0)):0))F=6;if((F|0)==6){c[v>>2]=c[a>>2];c[v+4>>2]=c[a+4>>2];c[v+8>>2]=c[a+8>>2];c[v+12>>2]=c[a+12>>2];c[B>>2]=c[E>>2];c[B+4>>2]=c[E+4>>2];c[B+8>>2]=c[E+8>>2];c[B+12>>2]=c[E+12>>2];m=+mI(v,B)*.3333333333333333;n=m};c[g>>2]=c[a>>2];c[g+4>>2]=c[a+4>>2];c[g+8>>2]=c[a+8>>2];c[g+12>>2]=c[a+12>>2];c[B>>2]=c[e>>2];c[B+4>>2]=c[e+4>>2];c[B+8>>2]=c[e+8>>2];c[B+12>>2]=c[e+12>>2];oI(C,B,m);c[i>>2]=c[C>>2];c[i+4>>2]=c[C+4>>2];c[i+8>>2]=c[C+8>>2];c[i+12>>2]=c[C+12>>2];c[j>>2]=c[E>>2];c[j+4>>2]=c[E+4>>2];c[j+8>>2]=c[E+8>>2];c[j+12>>2]=c[E+12>>2];c[B>>2]=c[f>>2];c[B+4>>2]=c[f+4>>2];c[B+8>>2]=c[f+8>>2];c[B+12>>2]=c[f+12>>2];oI(D,B,n);c[k>>2]=c[D>>2];c[k+4>>2]=c[D+4>>2];c[k+8>>2]=c[D+8>>2];c[k+12>>2]=c[D+12>>2];l=G;return}function rI(a,b,d,e,f,g,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;j=j|0;var k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0.0,s=0.0,t=0,u=0.0,v=0,w=0.0,x=0,y=0.0,z=0,A=0,B=0,C=0,D=0.0,E=0;C=l;l=l+64|0;B=C;z=(j|0)==2;y=+h[d>>3];u=+h[d+8>>3];v=B+8|0;w=+h[e>>3];x=B+16|0;p=+h[e+8>>3];q=B+24|0;r=+h[f>>3];s=+h[g>>3];t=B+32|0;o=+h[f+8>>3];n=+h[g+8>>3];e=B+40|0;f=B+48|0;g=B+56|0;d=1;k=4.0;m=4.0;while(1){h[B>>3]=y;h[v>>3]=u;D=m*.3333333333333333;h[x>>3]=D*w+y;h[q>>3]=D*p+u;D=k*.3333333333333333;h[t>>3]=r-D*s;h[e>>3]=o-D*n;h[f>>3]=r;h[g>>3]=o;if(d?(D=+wI(B,4),D<+wI(i,j)+-.001):0){d=0;break}if(xI(a,b,B)|0){A=5;break}if(m==0.0&k==0.0){A=9;break}E=m>.01;d=0;k=E?k*.5:0.0;m=E?m*.5:0.0}a:do if((A|0)==5){kI((c[42491]|0)+4|0);e=c[42492]|0;d=1;while(1){if((d|0)==4){d=1;break a}E=c[42491]|0;h[e+(E<<4)>>3]=+h[B+(d<<4)>>3];D=+h[B+(d<<4)+8>>3];c[42491]=E+1;h[e+(E<<4)+8>>3]=D;d=d+1|0}}else if((A|0)==9)if(z){kI((c[42491]|0)+4|0);e=c[42492]|0;d=1;while(1){if((d|0)==4){d=1;break a}E=c[42491]|0;h[e+(E<<4)>>3]=+h[B+(d<<4)>>3];D=+h[B+(d<<4)+8>>3];c[42491]=E+1;h[e+(E<<4)+8>>3]=D;d=d+1|0}}else d=0;while(0);l=C;return d|0}function sI(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;h[b>>3]=+h[b>>3]+ +h[d>>3];e=b+8|0;h[e>>3]=+h[e>>3]+ +h[d+8>>3];c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];return}function tI(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;h[b>>3]=+h[b>>3]-+h[d>>3];e=b+8|0;h[e>>3]=+h[e>>3]-+h[d+8>>3];c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];return}function uI(a){a=+a;a=1.0-a;return +(a*a*a)}function vI(a){a=+a;return +(a*a*a)}function wI(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0.0,f=0.0,g=0;c=0.0;d=1;while(1){if((d|0)>=(b|0))break;g=d+-1|0;e=+h[a+(d<<4)>>3]-+h[a+(g<<4)>>3];f=+h[a+(d<<4)+8>>3]-+h[a+(g<<4)+8>>3];c=+C(+(f*f+e*e))+c;d=d+1|0}return +c}function xI(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0,u=0,v=0.0,w=0,x=0.0,y=0,z=0,A=0,B=0,C=0,D=0.0,E=0.0;C=l;l=l+64|0;t=C+32|0;u=C;w=u+16|0;y=d+16|0;z=d+32|0;A=d+48|0;B=d+8|0;g=d+24|0;i=d+40|0;j=d+56|0;k=u+8|0;m=u+24|0;f=0;a:while(1){if((f|0)>=(b|0)){e=1;break}n=a+(f<<5)|0;c[u>>2]=c[n>>2];c[u+4>>2]=c[n+4>>2];c[u+8>>2]=c[n+8>>2];c[u+12>>2]=c[n+12>>2];n=a+(f<<5)+16|0;c[w>>2]=c[n>>2];c[w+4>>2]=c[n+4>>2];c[w+8>>2]=c[n+8>>2];c[w+12>>2]=c[n+12>>2];n=yI(d,u,t)|0;b:do if((n|0)!=4){o=+h[u>>3];p=+h[k>>3];q=+h[w>>3];r=+h[m>>3];e=0;while(1){if((e|0)>=(n|0))break b;s=+h[t+(e<<3)>>3];if((!(s<1.0e-06|s>.999999)?(x=s*s*s,E=s*3.0,D=1.0-s,s=E*s*D,v=D*D,E=v*E,D=v*D,v=+h[y>>3]*E+ +h[d>>3]*D+ +h[z>>3]*s+ +h[A>>3]*x,x=+h[g>>3]*E+ +h[B>>3]*D+ +h[i>>3]*s+ +h[j>>3]*x,s=v-o,D=x-p,!(D*D+s*s<.001)):0)?(E=v-q,D=x-r,!(D*D+E*E<.001)):0){e=0;break a}e=e+1|0}}while(0);f=f+1|0}l=C;return e|0}function yI(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0,i=0,j=0.0,k=0,m=0,n=0,o=0,p=0.0,q=0.0,r=0,s=0,t=0,u=0,v=0;v=l;l=l+96|0;s=v+48|0;t=v+24|0;k=v;u=v+80|0;p=+h[b>>3];g=+h[b+16>>3]-p;q=+h[b+8>>3];j=+h[b+24>>3]-q;c[u>>2]=0;a:do if(!(g==0.0)){j=j/g;m=a+16|0;n=a+32|0;o=a+48|0;zI(+h[a+8>>3]-+h[a>>3]*j,+h[a+24>>3]-+h[m>>3]*j,+h[a+40>>3]-+h[n>>3]*j,+h[a+56>>3]-+h[o>>3]*j,s);h[s>>3]=j*p-q+ +h[s>>3];e=VI(s,t)|0;if((e|0)==4)b=4;else{f=s+8|0;i=s+16|0;k=s+24|0;g=1.0/g;b=0;while(1){if((b|0)>=(e|0))break;j=+h[t+(b<<3)>>3];if(j>=0.0&j<=1.0?(zI(+h[a>>3],+h[m>>3],+h[n>>3],+h[o>>3],s),q=(+h[s>>3]-p+((+h[k>>3]*j+ +h[i>>3])*j+ +h[f>>3])*j)*g,q>=0.0&q<=1.0):0)AI(j,d,u);b=b+1|0}b=c[u>>2]|0}}else{zI(+h[a>>3],+h[a+16>>3],+h[a+32>>3],+h[a+48>>3],s);h[s>>3]=+h[s>>3]-p;r=VI(s,t)|0;if(!(j==0.0)){if((r|0)==4){b=4;break}m=a+8|0;n=a+24|0;o=a+40|0;e=a+56|0;f=s+8|0;i=s+16|0;k=s+24|0;g=1.0/j;b=0;while(1){if((b|0)>=(r|0))break;j=+h[t+(b<<3)>>3];if(j>=0.0&j<=1.0?(zI(+h[m>>3],+h[n>>3],+h[o>>3],+h[e>>3],s),p=(+h[s>>3]-q+((+h[k>>3]*j+ +h[i>>3])*j+ +h[f>>3])*j)*g,p>=0.0&p<=1.0):0)AI(j,d,u);b=b+1|0}b=c[u>>2]|0;break}zI(+h[a+8>>3],+h[a+24>>3],+h[a+40>>3],+h[a+56>>3],s);h[s>>3]=+h[s>>3]-q;i=VI(s,k)|0;b=(i|0)==4;b:do if((r|0)==4){if(b){b=4;break a}else b=0;while(1){if((b|0)>=(i|0))break b;AI(+h[k+(b<<3)>>3],d,u);b=b+1|0}}else{if(b){b=0;while(1){if((b|0)>=(r|0))break b;AI(+h[t+(b<<3)>>3],d,u);b=b+1|0}}else e=0;while(1){if((e|0)>=(r|0))break b;f=t+(e<<3)|0;b=0;while(1){if((b|0)>=(i|0))break;g=+h[f>>3];if(g==+h[k+(b<<3)>>3])AI(g,d,u);b=b+1|0}e=e+1|0}}while(0);b=c[u>>2]|0}while(0);l=v;return b|0}function zI(a,b,c,d,e){a=+a;b=+b;c=+c;d=+d;e=e|0;h[e+24>>3]=d-a+(b-c)*3.0;h[e+16>>3]=(c+a)*3.0-b*6.0;h[e+8>>3]=(b-a)*3.0;h[e>>3]=a;return}function AI(a,b,d){a=+a;b=b|0;d=d|0;var e=0;if(a>=0.0&a<=1.0){e=c[d>>2]|0;h[b+(e<<3)>>3]=a;c[d>>2]=e+1}return}function BI(a,b){a=a|0;b=b|0;return +(+h[b+8>>3]*+h[a+8>>3]+ +h[b>>3]*+h[a>>3])}function CI(a){a=+a;var b=0.0;b=1.0-a;return +(b*b*(b+a*3.0))}function DI(a){a=+a;return +(a*a*((1.0-a)*3.0+a))} +function tx(d,f,g){d=d|0;f=f|0;g=g|0;var i=0,j=0,k=0,m=0.0,n=0,o=0.0,p=0,q=0.0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0;Y=l;l=l+2288|0;W=Y+208|0;V=Y+192|0;U=Y+176|0;T=Y+160|0;S=Y+144|0;R=Y+128|0;P=Y+112|0;O=Y+96|0;N=Y+80|0;M=Y+64|0;L=Y+56|0;K=Y+48|0;X=Y+32|0;Q=Y+24|0;J=Y;G=Y+1264|0;H=Y+224|0;I=d+16|0;C=(e[(c[I>>2]|0)+178>>1]|0)>2;Gv(1);kx(d);dm(H,1024,Y+240|0);uB(d,1,87657,174185)|0;uB(d,1,87661,174185)|0;c[42191]=uB(d,1,96043,174185)|0;c[42190]=uB(d,1,96049,174185)|0;uB(d,2,87657,174185)|0;i=a[(c[I>>2]|0)+113>>0]|0;if(i&16){uB(d,1,87667,174185)|0;i=a[(c[I>>2]|0)+113>>0]|0}if(i&1){uB(d,2,87671,174185)|0;i=a[(c[I>>2]|0)+113>>0]|0}if(i&32){uB(d,2,87667,174185)|0;i=a[(c[I>>2]|0)+113>>0]|0}if(i&2){uB(d,2,87674,174185)|0;i=a[(c[I>>2]|0)+113>>0]|0}if(i&4){uB(d,2,87682,174185)|0;i=a[(c[I>>2]|0)+113>>0]|0}if(!(i&8)){v=0;w=0;x=0}else{x=uB(d,0,87671,174185)|0;w=uB(d,0,87690,174185)|0;v=uB(d,0,87697,174185)|0}z=uB(d,0,87705,174185)|0;A=H+4|0;B=H+8|0;u=0;i=0;y=eo(d)|0;while(1){if(!y)break;t=y+16|0;k=c[t>>2]|0;o=+h[k+16>>3];j=(c[42184]|0)==0;if(C){if(j)m=+h[k+24>>3];else m=+h[20895]-+h[k+24>>3];q=+h[(c[k+132>>2]|0)+16>>3]*72.0;h[J>>3]=o;h[J+8>>3]=m;h[J+16>>3]=q;qL(G,87708,J)|0;gm(H,G)|0;j=3;while(1){if((j|0)>=(e[(c[I>>2]|0)+178>>1]|0))break;h[Q>>3]=+h[(c[(c[t>>2]|0)+132>>2]|0)+(j<<3)>>3]*72.0;qL(G,87723,Q)|0;gm(H,G)|0;j=j+1|0}j=c[A>>2]|0;if(j>>>0>=(c[B>>2]|0)>>>0){em(H,1)|0;j=c[A>>2]|0}a[j>>0]=0;s=c[H>>2]|0;c[A>>2]=s;Lm(y,87657,s)|0;s=y}else{if(j)m=+h[k+24>>3];else m=+h[20895]-+h[k+24>>3];h[X>>3]=o;h[X+8>>3]=m;qL(G,87729,X)|0;Lm(y,87657,G)|0;s=y}h[K>>3]=+h[(c[t>>2]|0)+80>>3]*.013888888888888888;qL(G,87652,K)|0;Dm(s,c[42190]|0,G)|0;j=c[t>>2]|0;h[L>>3]=(+h[j+96>>3]+ +h[j+88>>3])*.013888888888888888;qL(G,87652,L)|0;Dm(s,c[42191]|0,G)|0;j=c[t>>2]|0;k=c[j+108>>2]|0;if((k|0)!=0?(a[k+81>>0]|0)!=0:0){q=+h[k+64>>3];q=(c[42184]|0)==0?q:+h[20895]-q;h[M>>3]=+h[k+56>>3];h[M+8>>3]=q;qL(G,87729,M)|0;Lm(s,87667,G)|0;j=c[t>>2]|0}if(yJ(c[c[j+8>>2]>>2]|0,91264)|0){if(c[42215]|0?(Py(y)|0)<<24>>24:0){k=c[(c[t>>2]|0)+12>>2]|0;r=k+8|0;j=c[r>>2]|0;if((j|0)<3){j=Jm(s,87739)|0;if(!j)j=8;else j=sM(j)|0;j=(j|0)<3?8:j}p=k+44|0;q=1.0/+(j|0);n=0;while(1){if((n|0)>=(j|0))break;if((n|0)>0){k=c[A>>2]|0;if(k>>>0>=(c[B>>2]|0)>>>0){em(H,1)|0;k=c[A>>2]|0}c[A>>2]=k+1;a[k>>0]=32}if((c[r>>2]|0)>2){k=c[p>>2]|0;if(!(c[42184]|0))m=+h[k+(n<<4)+8>>3]*.013888888888888888;else m=+h[20896]-+h[k+(n<<4)+8>>3]*.013888888888888888;h[N>>3]=+h[k+(n<<4)>>3]*.013888888888888888;h[N+8>>3]=m;qL(G,87752,N)|0}else{k=c[t>>2]|0;m=q*+(n|0)*6.283185307179586;o=+h[k+32>>3]*.5*+E(+m);if(!(c[42184]|0))m=+h[k+40>>3]*.5*+F(+m);else m=+h[20896]-+h[k+40>>3]*.5*+F(+m);h[O>>3]=o;h[O+8>>3]=m;qL(G,87752,O)|0}gm(H,G)|0;n=n+1|0}k=c[42215]|0;j=c[A>>2]|0;if(j>>>0>=(c[B>>2]|0)>>>0){em(H,1)|0;j=c[A>>2]|0}a[j>>0]=0;t=c[H>>2]|0;c[A>>2]=t;Dm(s,k,t)|0}}else{ux(y,c[j+12>>2]|0,H);im(H)|0;j=c[A>>2]|0;if(j>>>0>=(c[B>>2]|0)>>>0){em(H,1)|0;j=c[A>>2]|0}a[j>>0]=0;t=c[H>>2]|0;c[A>>2]=t;Lm(s,87661,t)|0}a:do if((c[42182]|0)>0){t=Qm(d,y)|0;j=u;while(1){if(!t)break a;s=t+16|0;k=c[s>>2]|0;do if((a[k+112>>0]|0)!=6?(D=c[k+8>>2]|0,(D|0)!=0):0){r=0;k=D;while(1){if((r|0)>=(c[k+4>>2]|0))break;if((r|0)>0){k=c[A>>2]|0;if(k>>>0>=(c[B>>2]|0)>>>0){em(H,1)|0;k=c[A>>2]|0}c[A>>2]=k+1;a[k>>0]=59;k=c[(c[s>>2]|0)+8>>2]|0}k=c[k>>2]|0;if(c[k+(r*48|0)+8>>2]|0){if(!(c[42184]|0))m=+h[k+(r*48|0)+24>>3];else m=+h[20895]-+h[k+(r*48|0)+24>>3];h[P>>3]=+h[k+(r*48|0)+16>>3];h[P+8>>3]=m;qL(G,87762,P)|0;gm(H,G)|0;i=1;k=c[c[(c[s>>2]|0)+8>>2]>>2]|0}if(c[k+(r*48|0)+12>>2]|0){if(!(c[42184]|0))m=+h[k+(r*48|0)+40>>3];else m=+h[20895]-+h[k+(r*48|0)+40>>3];h[R>>3]=+h[k+(r*48|0)+32>>3];h[R+8>>3]=m;qL(G,87775,R)|0;gm(H,G)|0;j=1}p=0;while(1){k=c[(c[s>>2]|0)+8>>2]|0;n=c[k>>2]|0;if((p|0)>=(c[n+(r*48|0)+4>>2]|0))break;if((p|0)>0){k=c[A>>2]|0;if(k>>>0>=(c[B>>2]|0)>>>0){em(H,1)|0;k=c[A>>2]|0}c[A>>2]=k+1;a[k>>0]=32;k=c[c[(c[s>>2]|0)+8>>2]>>2]|0}else k=n;u=c[k+(r*48|0)>>2]|0;q=+h[u+(p<<4)+8>>3];q=(c[42184]|0)==0?q:+h[20895]-q;h[S>>3]=+h[u+(p<<4)>>3];h[S+8>>3]=q;qL(G,87729,S)|0;gm(H,G)|0;p=p+1|0}r=r+1|0}k=c[A>>2]|0;if(k>>>0>=(c[B>>2]|0)>>>0){em(H,1)|0;k=c[A>>2]|0}a[k>>0]=0;k=c[H>>2]|0;c[A>>2]=k;Lm(t,87657,k)|0;k=c[s>>2]|0;n=c[k+96>>2]|0;if(n){q=+h[n+64>>3];q=(c[42184]|0)==0?q:+h[20895]-q;h[T>>3]=+h[n+56>>3];h[T+8>>3]=q;qL(G,87729,T)|0;Lm(t,87671,G)|0;k=c[s>>2]|0}n=c[k+108>>2]|0;do if(n){if(!(a[n+81>>0]|0))break;q=+h[n+64>>3];q=(c[42184]|0)==0?q:+h[20895]-q;h[U>>3]=+h[n+56>>3];h[U+8>>3]=q;qL(G,87729,U)|0;Lm(t,87667,G)|0;k=c[s>>2]|0}while(0);n=c[k+100>>2]|0;if(n){q=+h[n+64>>3];q=(c[42184]|0)==0?q:+h[20895]-q;h[V>>3]=+h[n+56>>3];h[V+8>>3]=q;qL(G,87729,V)|0;Lm(t,87674,G)|0;k=c[s>>2]|0}k=c[k+104>>2]|0;if(!k)break;q=+h[k+64>>3];q=(c[42184]|0)==0?q:+h[20895]-q;h[W>>3]=+h[k+56>>3];h[W+8>>3]=q;qL(G,87729,W)|0;Lm(t,87682,G)|0}while(0);t=Sm(d,t)|0}}else j=u;while(0);u=j;y=fo(d,y)|0}vx(d,z,x,w,v);hm(H);if(b[(c[I>>2]|0)+136>>1]&1)oB(d);c[f>>2]=i;c[g>>2]=u;Gv(0);l=Y;return}function ux(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0.0,g=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0.0;n=l;l=l+1056|0;k=n;j=n+32|0;m=b+48|0;if(!(c[m>>2]|0)){e=c[a+16>>2]|0;i=+h[e+16>>3];if(!(c[42184]|0)){g=+h[e+24>>3];f=g+ +h[b+24>>3];g=g+ +h[b+40>>3]}else{g=+h[e+24>>3];f=+h[20895]-+h[b+24>>3]-g;g=+h[20895]-+h[b+40>>3]-g}o=i+ +h[b+32>>3];h[k>>3]=i+ +h[b+16>>3];h[k+8>>3]=f;h[k+16>>3]=o;h[k+24>>3]=g;qL(j,87813,k)|0;gm(d,j)|0}b=b+56|0;e=0;while(1){if((e|0)>=(c[m>>2]|0))break;ux(a,c[(c[b>>2]|0)+(e<<2)>>2]|0,d);e=e+1|0}l=n;return}function vx(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0;s=l;l=l+1088|0;o=s+56|0;q=s+48|0;p=s+32|0;j=s;n=s+64|0;r=b+16|0;i=c[r>>2]|0;if(!(c[42184]|0)){k=+h[i+24>>3];m=+h[i+40>>3]}else{m=+h[20895];k=m-+h[i+24>>3];m=m-+h[i+40>>3]}t=+h[i+32>>3];h[j>>3]=+h[i+16>>3];h[j+8>>3]=k;h[j+16>>3]=t;h[j+24>>3]=m;qL(n,87788,j)|0;Dm(b,d,n)|0;i=c[(c[r>>2]|0)+12>>2]|0;if((i|0)!=0?(a[c[i>>2]>>0]|0)!=0:0){t=+h[i+64>>3];t=(c[42184]|0)==0?t:+h[20895]-t;h[p>>3]=+h[i+56>>3];h[p+8>>3]=t;qL(n,87729,p)|0;Dm(b,e,n)|0;i=c[(c[r>>2]|0)+12>>2]|0;t=+h[i+32>>3];h[q>>3]=+h[i+24>>3]*.013888888888888888;qL(n,87808,q)|0;Dm(b,f,n)|0;h[o>>3]=t*.013888888888888888;qL(n,87808,o)|0;Dm(b,g,n)|0;i=1}else i=1;while(1){j=c[r>>2]|0;if((i|0)>(c[j+180>>2]|0))break;vx(c[(c[j+184>>2]|0)+(i<<2)>>2]|0,d,e,f,g);i=i+1|0}l=s;return}function wx(a){a=a|0;var b=0;b=l;l=l+16|0;tx(a,b,b+4|0);l=b;return}function xx(){return Rl(19796,c[4345]|0)|0}function yx(a,b,c){a=a|0;b=b|0;c=c|0;$I(b);return}function zx(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=c[b>>2]|0;e=c[d>>2]|0;if((a|0)<=(e|0))if((a|0)<(e|0))a=-1;else{b=c[b+4>>2]|0;d=c[d+4>>2]|0;return ((b|0)>(d|0)?1:((b|0)<(d|0))<<31>>31)|0}else a=1;return a|0}function Ax(a){a=a|0;Ll(a)|0;return}function Bx(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];b=Cx(e)|0;if((bb[c[a>>2]&31](a,b,1)|0)!=(b|0))$I(b);l=d;return}function Cx(a){a=a|0;var b=0,d=0,e=0;b=ww(16)|0;e=a;d=c[e+4>>2]|0;a=b+8|0;c[a>>2]=c[e>>2];c[a+4>>2]=d;return b|0}function Dx(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+8|0;g=e;c[g>>2]=b;c[g+4>>2]=d;c[f>>2]=c[g>>2];c[f+4>>2]=c[g+4>>2];b=Cx(f)|0;if((bb[c[a>>2]&31](a,b,1)|0)!=(b|0))$I(b);l=e;return}function Ex(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=l;l=l+16|0;e=d;g=b;f=c[g+4>>2]|0;b=e+8|0;c[b>>2]=c[g>>2];c[b+4>>2]=f;b=(bb[c[a>>2]&31](a,e,4)|0)!=0&1;l=d;return b|0}function Fx(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f+8>>2]=b;c[f+12>>2]=d;d=(bb[c[a>>2]&31](a,f,4)|0)!=0&1;l=e;return d|0}function Gx(a){a=a|0;return Tl(a)|0}function Hx(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;d=ww((Tl(a)|0)<<3)|0;b=d;a=Pl(a)|0;while(1){if(!a)break;g=a+8|0;f=c[g+4>>2]|0;e=b;c[e>>2]=c[g>>2];c[e+4>>2]=f;b=b+8|0;a=c[a>>2]|0}return d|0}function Ix(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0.0,g=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=l;l=l+160|0;q=t+144|0;d=t+48|0;j=t+128|0;k=t+112|0;m=t+96|0;n=t+80|0;o=t+32|0;p=t+16|0;r=t;s=a+16|0;a=c[s>>2]|0;e=+h[a+16>>3];f=+h[a+24>>3];g=+h[a+32>>3];i=+h[a+40>>3];if((b+-1|0)>>>0<2){Jx(j,e,i);c[q>>2]=c[j>>2];c[q+4>>2]=c[j+4>>2];c[q+8>>2]=c[j+8>>2];c[q+12>>2]=c[j+12>>2];Kx(d,q);p=d+16|0;Jx(k,g,f);c[q>>2]=c[k>>2];c[q+4>>2]=c[k+4>>2];c[q+8>>2]=c[k+8>>2];c[q+12>>2]=c[k+12>>2];Kx(m,q);c[p>>2]=c[m>>2];c[p+4>>2]=c[m+4>>2];c[p+8>>2]=c[m+8>>2];c[p+12>>2]=c[m+12>>2]}else{Jx(n,e,f);c[q>>2]=c[n>>2];c[q+4>>2]=c[n+4>>2];c[q+8>>2]=c[n+8>>2];c[q+12>>2]=c[n+12>>2];Kx(d,q);n=d+16|0;Jx(o,g,i);c[q>>2]=c[o>>2];c[q+4>>2]=c[o+4>>2];c[q+8>>2]=c[o+8>>2];c[q+12>>2]=c[o+12>>2];Kx(p,q);c[n>>2]=c[p>>2];c[n+4>>2]=c[p+4>>2];c[n+8>>2]=c[p+8>>2];c[n+12>>2]=c[p+12>>2]}a=(c[s>>2]|0)+16|0;c[a>>2]=c[d>>2];c[a+4>>2]=c[d+4>>2];c[a+8>>2]=c[d+8>>2];c[a+12>>2]=c[d+12>>2];c[a+16>>2]=c[d+16>>2];c[a+20>>2]=c[d+20>>2];c[a+24>>2]=c[d+24>>2];c[a+28>>2]=c[d+28>>2];a=c[(c[s>>2]|0)+12>>2]|0;if(!a)a=1;else{a=a+56|0;c[q>>2]=c[a>>2];c[q+4>>2]=c[a+4>>2];c[q+8>>2]=c[a+8>>2];c[q+12>>2]=c[a+12>>2];Kx(r,q);c[a>>2]=c[r>>2];c[a+4>>2]=c[r+4>>2];c[a+8>>2]=c[r+8>>2];c[a+12>>2]=c[r+12>>2];a=1}while(1){d=c[s>>2]|0;if((a|0)>(c[d+180>>2]|0))break;Ix(c[(c[d+184>>2]|0)+(a<<2)>>2]|0,b);a=a+1|0}l=t;return}function Jx(a,b,c){a=a|0;b=+b;c=+c;h[a>>3]=b;h[a+8>>3]=c;return}function Kx(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=l;l=l+32|0;g=d+16|0;e=d;f=(c[42310]|0)*90|0;c[g>>2]=c[b>>2];c[g+4>>2]=c[b+4>>2];c[g+8>>2]=c[b+8>>2];c[g+12>>2]=c[b+12>>2];bw(e,g,f);c[b>>2]=c[e>>2];c[b+4>>2]=c[e+4>>2];c[b+8>>2]=c[e+8>>2];c[b+12>>2]=c[e+12>>2];h[b>>3]=+h[b>>3]-+h[20897];e=b+8|0;h[e>>3]=+h[e>>3]-+h[20898];c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];l=d;return}function Lx(b,d){b=b|0;d=d|0;var e=0,f=0.0,g=0,i=0,j=0.0,k=0.0,m=0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=l;l=l+1168|0;s=w+144|0;v=w+96|0;u=w+64|0;t=w+48|0;o=w+32|0;p=w+16|0;q=w;c[t>>2]=0;c[t+4>>2]=0;c[t+8>>2]=0;c[t+12>>2]=0;r=b+16|0;m=c[(c[r>>2]|0)+116>>2]|0;c[42310]=m&3;m=m&1;a[174083]=m;if(!(m<<24>>24))Nx(b);else Mx(b);Ox(b);m=c[r>>2]|0;e=c[m+12>>2]|0;do if(e|0?(a[e+81>>0]|0)==0:0){g=e+24|0;c[t>>2]=c[g>>2];c[t+4>>2]=c[g+4>>2];c[t+8>>2]=c[g+8>>2];c[t+12>>2]=c[g+12>>2];n=+h[t>>3]+16.0;h[t>>3]=n;g=t+8|0;f=+h[g>>3]+8.0;h[g>>3]=f;g=(a[m+275>>0]&1)!=0;if(a[174083]|0){if(g){i=m+32|0;h[i>>3]=+h[i>>3]+f}else{i=m+16|0;h[i>>3]=+h[i>>3]-f}g=m+40|0;f=+h[g>>3];i=m+24|0;j=+h[i>>3];k=f-j;if(!(n>k))break;n=(n-k)*.5;h[i>>3]=j-n;h[g>>3]=f+n;break}i=(c[42310]|0)==0;do if(g)if(i){i=m+40|0;h[i>>3]=+h[i>>3]+f;break}else{i=m+24|0;h[i>>3]=+h[i>>3]-f;break}else if(i){i=m+24|0;h[i>>3]=+h[i>>3]-f;break}else{i=m+40|0;h[i>>3]=+h[i>>3]+f;break}while(0);g=m+32|0;f=+h[g>>3];i=m+16|0;j=+h[i>>3];k=f-j;if(n>k){n=(n-k)*.5;h[i>>3]=j-n;h[g>>3]=f+n}}while(0);if(d){switch(c[42310]|0){case 0:{q=m+16|0;c[41794]=c[q>>2];c[41795]=c[q+4>>2];c[41796]=c[q+8>>2];c[41797]=c[q+12>>2];break}case 1:{Jx(o,-+h[m+40>>3],+h[m+16>>3]);c[41794]=c[o>>2];c[41795]=c[o+4>>2];c[41796]=c[o+8>>2];c[41797]=c[o+12>>2];break}case 2:{Jx(p,+h[m+16>>3],-+h[m+40>>3]);c[41794]=c[p>>2];c[41795]=c[p+4>>2];c[41796]=c[p+8>>2];c[41797]=c[p+12>>2];break}case 3:{Jx(q,+h[m+24>>3],+h[m+16>>3]);c[41794]=c[q>>2];c[41795]=c[q+4>>2];c[41796]=c[q+8>>2];c[41797]=c[q+12>>2];break}default:{}}Px(b);e=c[(c[r>>2]|0)+12>>2]|0}if(e|0?(a[e+81>>0]|0)==0:0){c[s>>2]=c[t>>2];c[s+4>>2]=c[t+4>>2];c[s+8>>2]=c[t+8>>2];c[s+12>>2]=c[t+12>>2];Qx(b,s)}if(!0){l=w;return}if(!(a[174083]|0)){n=+h[20898];k=+h[20897];h[v>>3]=n;h[v+8>>3]=k;h[v+16>>3]=n;h[v+24>>3]=k;h[v+32>>3]=-k;h[v+40>>3]=-n;qL(s,88049,v)|0}else{k=+h[20897];n=+h[20898];h[u>>3]=k;h[u+8>>3]=n;h[u+16>>3]=k;h[u+24>>3]=n;qL(s,87834,u)|0}HL(s)|0;Ta()}function Mx(b){b=b|0;var d=0,e=0.0,f=0.0,g=0,i=0,j=0;j=b+16|0;if(((to(b)|0)!=(b|0)?(g=c[j>>2]|0,i=c[g+12>>2]|0,(i|0)!=0):0)?(a[i+81>>0]|0)==0:0){d=a[g+275>>0]|0;if(!(d&1)){f=+h[g+16>>3]+ +h[g+96>>3]*.5;b=g+104|0}else{f=+h[g+32>>3]-+h[g+64>>3]*.5;b=g+72|0}e=+h[b>>3];b=d<<24>>24;do if(!(b&4))if(!(b&2)){e=(+h[g+40>>3]+ +h[g+24>>3])*.5;break}else{e=+h[g+40>>3]-e*.5;break}else e=+h[g+24>>3]+e*.5;while(0);h[i+56>>3]=f;h[i+64>>3]=e;a[(c[(c[j>>2]|0)+12>>2]|0)+81>>0]=1;b=1}else b=1;while(1){d=c[j>>2]|0;if((b|0)>(c[d+180>>2]|0))break;Mx(c[(c[d+184>>2]|0)+(b<<2)>>2]|0);b=b+1|0}return}function Nx(b){b=b|0;var d=0,e=0.0,f=0.0,g=0.0,i=0,j=0,k=0;k=b+16|0;if(((to(b)|0)!=(b|0)?(i=c[k>>2]|0,j=c[i+12>>2]|0,(j|0)!=0):0)?(a[j+81>>0]|0)==0:0){d=a[i+275>>0]|0;if(!(d&1)){g=+h[i+24>>3]+ +h[i+56>>3]*.5;b=i+48|0}else{g=+h[i+40>>3]-+h[i+88>>3]*.5;b=i+80|0}f=+h[b>>3];b=d<<24>>24;do if(!(b&4)){e=+h[i+16>>3];if(!(b&2)){e=(+h[i+32>>3]+e)*.5;break}else{e=e+f*.5;break}}else e=+h[i+32>>3]-f*.5;while(0);h[j+56>>3]=e;h[j+64>>3]=g;a[(c[(c[k>>2]|0)+12>>2]|0)+81>>0]=1;b=1}else b=1;while(1){d=c[k>>2]|0;if((b|0)>(c[d+180>>2]|0))break;Nx(c[(c[d+184>>2]|0)+(b<<2)>>2]|0);b=b+1|0}return}function Ox(e){e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0;S=l;l=l+544|0;L=S+504|0;R=S+416|0;Q=S+376|0;K=S+352|0;J=S+312|0;I=S+288|0;H=S+248|0;M=S+200|0;B=S+152|0;O=S+96|0;p=S+488|0;C=S+456|0;D=S+424|0;E=S+384|0;F=S+360|0;G=S+320|0;w=S+296|0;x=S+256|0;y=S+232|0;z=S+168|0;A=S+136|0;f=S+56|0;N=S+16|0;P=S;o=e+16|0;u=c[o>>2]|0;g=b[u+136>>1]&14;u=d[u+113>>0]|0;if(!((u&54|0)==0?(u&1|0)==0|(c[42183]|0)!=0:0)){u=g<<16>>16==0;n=eo(e)|0;h=0;j=0;i=0;while(1){if(!n)break;g=c[(c[n+16>>2]|0)+108>>2]|0;do if(g)if(!(a[g+81>>0]|0)){i=i+1|0;break}else{h=h+1|0;break}while(0);m=Qm(e,n)|0;g=j;while(1){if(!m)break;k=c[m+16>>2]|0;j=c[k+108>>2]|0;do if(j){if(a[j+81>>0]|0){h=h+1|0;break}if(!u)g=g+((c[k+8>>2]|0)!=0&1)|0}while(0);j=c[k+100>>2]|0;do if(j){if(a[j+81>>0]|0){h=h+1|0;break}if(!u)g=g+((c[k+8>>2]|0)!=0&1)|0}while(0);j=c[k+104>>2]|0;do if(j){if(a[j+81>>0]|0){h=h+1|0;break}if(!u)g=g+((c[k+8>>2]|0)!=0&1)|0}while(0);j=c[k+96>>2]|0;do if(j){if(a[j+81>>0]|0){h=h+1|0;break}if(!u)g=g+((c[k+8>>2]|0)!=0&1)|0}while(0);m=Sm(e,m)|0}n=fo(e,n)|0;j=g}if(!(a[(c[o>>2]|0)+113>>0]&8))o=0;else o=Sx(e)|0;t=j+i|0;if(t|0){q=h+j+o+(nn(e)|0)|0;r=ww(q*40|0)|0;s=ww(t*40|0)|0;Jx(M,2147483647.0,2147483647.0);g=M+16|0;Jx(p,-2147483647.0,-2147483647.0);c[g>>2]=c[p>>2];c[g+4>>2]=c[p+4>>2];c[g+8>>2]=c[p+8>>2];c[g+12>>2]=c[p+12>>2];g=s;i=r;n=eo(e)|0;while(1){if(!n)break;c[L>>2]=c[M>>2];c[L+4>>2]=c[M+4>>2];c[L+8>>2]=c[M+8>>2];c[L+12>>2]=c[M+12>>2];c[L+16>>2]=c[M+16>>2];c[L+20>>2]=c[M+20>>2];c[L+24>>2]=c[M+24>>2];c[L+28>>2]=c[M+28>>2];Tx(C,n,i,L);c[M>>2]=c[C>>2];c[M+4>>2]=c[C+4>>2];c[M+8>>2]=c[C+8>>2];c[M+12>>2]=c[C+12>>2];c[M+16>>2]=c[C+16>>2];c[M+20>>2]=c[C+20>>2];c[M+24>>2]=c[C+24>>2];c[M+28>>2]=c[C+28>>2];h=c[(c[n+16>>2]|0)+108>>2]|0;do if(h)if(!(a[h+81>>0]|0)){c[L>>2]=c[B>>2];c[L+4>>2]=c[B+4>>2];c[L+8>>2]=c[B+8>>2];c[L+12>>2]=c[B+12>>2];Vx(h,i,g,0,L);g=g+40|0;break}else{i=i+40|0;c[L>>2]=c[M>>2];c[L+4>>2]=c[M+4>>2];c[L+8>>2]=c[M+8>>2];c[L+12>>2]=c[M+12>>2];c[L+16>>2]=c[M+16>>2];c[L+20>>2]=c[M+20>>2];c[L+24>>2]=c[M+24>>2];c[L+28>>2]=c[M+28>>2];Ux(D,h,i,L);c[M>>2]=c[D>>2];c[M+4>>2]=c[D+4>>2];c[M+8>>2]=c[D+8>>2];c[M+12>>2]=c[D+12>>2];c[M+16>>2]=c[D+16>>2];c[M+20>>2]=c[D+20>>2];c[M+24>>2]=c[D+24>>2];c[M+28>>2]=c[D+28>>2];break}while(0);m=Qm(e,n)|0;i=i+40|0;while(1){if(!m)break;k=m+16|0;h=c[k>>2]|0;j=c[h+96>>2]|0;a:do if(!j)v=52;else{do if(!(a[j+81>>0]|0)){if(!u?c[h+8>>2]|0:0){aA(F,e,m);c[L>>2]=c[F>>2];c[L+4>>2]=c[F+4>>2];c[L+8>>2]=c[F+8>>2];c[L+12>>2]=c[F+12>>2];Vx(j,i,g,1,L);g=g+40|0;break}c[H>>2]=c[j>>2];$l(0,88861,H)|0;break a}else{c[L>>2]=c[M>>2];c[L+4>>2]=c[M+4>>2];c[L+8>>2]=c[M+8>>2];c[L+12>>2]=c[M+12>>2];c[L+16>>2]=c[M+16>>2];c[L+20>>2]=c[M+20>>2];c[L+24>>2]=c[M+24>>2];c[L+28>>2]=c[M+28>>2];Ux(E,j,i,L);c[M>>2]=c[E>>2];c[M+4>>2]=c[E+4>>2];c[M+8>>2]=c[E+8>>2];c[M+12>>2]=c[E+12>>2];c[M+16>>2]=c[E+16>>2];c[M+20>>2]=c[E+20>>2];c[M+24>>2]=c[E+24>>2];c[M+28>>2]=c[E+28>>2]}while(0);i=i+40|0;h=c[k>>2]|0;v=52}while(0);b:do if((v|0)==52){v=0;j=c[h+104>>2]|0;if(j){do if(!(a[j+81>>0]|0)){if(!u?c[h+8>>2]|0:0){Wx(w,m);c[L>>2]=c[w>>2];c[L+4>>2]=c[w+4>>2];c[L+8>>2]=c[w+8>>2];c[L+12>>2]=c[w+12>>2];Vx(j,i,g,1,L);g=g+40|0;break}c[I>>2]=c[j>>2];$l(0,88896,I)|0;break b}else{c[L>>2]=c[M>>2];c[L+4>>2]=c[M+4>>2];c[L+8>>2]=c[M+8>>2];c[L+12>>2]=c[M+12>>2];c[L+16>>2]=c[M+16>>2];c[L+20>>2]=c[M+20>>2];c[L+24>>2]=c[M+24>>2];c[L+28>>2]=c[M+28>>2];Ux(G,j,i,L);c[M>>2]=c[G>>2];c[M+4>>2]=c[G+4>>2];c[M+8>>2]=c[G+8>>2];c[M+12>>2]=c[G+12>>2];c[M+16>>2]=c[G+16>>2];c[M+20>>2]=c[G+20>>2];c[M+24>>2]=c[G+24>>2];c[M+28>>2]=c[G+28>>2]}while(0);i=i+40|0;h=c[k>>2]|0}j=c[h+100>>2]|0;if(j){do if(!(a[j+81>>0]|0)){if(!u?c[h+8>>2]|0:0){Xx(y,m);c[L>>2]=c[y>>2];c[L+4>>2]=c[y+4>>2];c[L+8>>2]=c[y+8>>2];c[L+12>>2]=c[y+12>>2];Vx(j,i,g,1,L);g=g+40|0;break}c[J>>2]=c[j>>2];$l(0,88936,J)|0;break b}else{c[L>>2]=c[M>>2];c[L+4>>2]=c[M+4>>2];c[L+8>>2]=c[M+8>>2];c[L+12>>2]=c[M+12>>2];c[L+16>>2]=c[M+16>>2];c[L+20>>2]=c[M+20>>2];c[L+24>>2]=c[M+24>>2];c[L+28>>2]=c[M+28>>2];Ux(x,j,i,L);c[M>>2]=c[x>>2];c[M+4>>2]=c[x+4>>2];c[M+8>>2]=c[x+8>>2];c[M+12>>2]=c[x+12>>2];c[M+16>>2]=c[x+16>>2];c[M+20>>2]=c[x+20>>2];c[M+24>>2]=c[x+24>>2];c[M+28>>2]=c[x+28>>2]}while(0);i=i+40|0;h=c[k>>2]|0}j=c[h+108>>2]|0;if(j){do if(!(a[j+81>>0]|0)){if(!u?c[h+8>>2]|0:0){aA(A,e,m);c[L>>2]=c[A>>2];c[L+4>>2]=c[A+4>>2];c[L+8>>2]=c[A+8>>2];c[L+12>>2]=c[A+12>>2];Vx(j,i,g,1,L);g=g+40|0;break}c[K>>2]=c[j>>2];$l(0,88976,K)|0;break b}else{c[L>>2]=c[M>>2];c[L+4>>2]=c[M+4>>2];c[L+8>>2]=c[M+8>>2];c[L+12>>2]=c[M+12>>2];c[L+16>>2]=c[M+16>>2];c[L+20>>2]=c[M+20>>2];c[L+24>>2]=c[M+24>>2];c[L+28>>2]=c[M+28>>2];Ux(z,j,i,L);c[M>>2]=c[z>>2];c[M+4>>2]=c[z+4>>2];c[M+8>>2]=c[z+8>>2];c[M+12>>2]=c[z+12>>2];c[M+16>>2]=c[z+16>>2];c[M+20>>2]=c[z+20>>2];c[M+24>>2]=c[z+24>>2];c[M+28>>2]=c[z+28>>2]}while(0);i=i+40|0}}while(0);m=Sm(e,m)|0}n=fo(e,n)|0}if(o|0){c[f>>2]=c[M>>2];c[f+4>>2]=c[M+4>>2];c[f+8>>2]=c[M+8>>2];c[f+12>>2]=c[M+12>>2];c[f+16>>2]=c[M+16>>2];c[f+20>>2]=c[M+20>>2];c[f+24>>2]=c[M+24>>2];c[f+28>>2]=c[M+28>>2];c[f+32>>2]=i;h=L;g=h+40|0;do{c[h>>2]=c[f>>2];h=h+4|0;f=f+4|0}while((h|0)<(g|0));Yx(N,e,L);c[M>>2]=c[N>>2];c[M+4>>2]=c[N+4>>2];c[M+8>>2]=c[N+8>>2];c[M+12>>2]=c[N+12>>2];c[M+16>>2]=c[N+16>>2];c[M+20>>2]=c[N+20>>2];c[M+24>>2]=c[N+24>>2];c[M+28>>2]=c[N+28>>2]}a[O+32>>0]=IA(e,zm(e,0,89012,0)|0,1)|0;c[O>>2]=c[M>>2];c[O+4>>2]=c[M+4>>2];c[O+8>>2]=c[M+8>>2];c[O+12>>2]=c[M+12>>2];c[O+16>>2]=c[M+16>>2];c[O+20>>2]=c[M+20>>2];c[O+24>>2]=c[M+24>>2];c[O+28>>2]=c[M+28>>2];AE(r,q,s,t,O)|0;if(0)Zx(r,q,s,t,O);f=0;g=0;h=s;while(1){if((g|0)>=(t|0))break;if(a[h+36>>0]|0){O=c[h+32>>2]|0;a[O+81>>0]=1;N=O+56|0;_x(P,h);c[N>>2]=c[P>>2];c[N+4>>2]=c[P+4>>2];c[N+8>>2]=c[P+8>>2];c[N+12>>2]=c[P+12>>2];cB(e,O);f=f+1|0}g=g+1|0;h=h+40|0}if(!0){if((f|0)!=(t|0)){c[R>>2]=f;c[R+4>>2]=t;$l(0,89057,R)|0}}else{R=c[13918]|0;c[Q>>2]=f;c[Q+4>>2]=t;AL(R,89024,Q)|0}$I(r);$I(s)}}l=S;return}function Px(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,i=0,j=0;i=l;l=l+48|0;e=i+32|0;f=i+16|0;g=i;if(+h[20897]!=0.0|+h[20898]!=0.0|(c[42310]|0)!=0){d=eo(a)|0;while(1){if(!d)break;if(c[42310]|0)LB(d,0);b=d+16|0;j=(c[b>>2]|0)+16|0;c[e>>2]=c[j>>2];c[e+4>>2]=c[j+4>>2];c[e+8>>2]=c[j+8>>2];c[e+12>>2]=c[j+12>>2];Kx(f,e);c[j>>2]=c[f>>2];c[j+4>>2]=c[f+4>>2];c[j+8>>2]=c[f+8>>2];c[j+12>>2]=c[f+12>>2];b=c[(c[b>>2]|0)+108>>2]|0;if(b|0){j=b+56|0;c[e>>2]=c[j>>2];c[e+4>>2]=c[j+4>>2];c[e+8>>2]=c[j+8>>2];c[e+12>>2]=c[j+12>>2];Kx(g,e);c[j>>2]=c[g>>2];c[j+4>>2]=c[g+4>>2];c[j+8>>2]=c[g+8>>2];c[j+12>>2]=c[g+12>>2]}a:do if((c[42182]|0)==1){b=Qm(a,d)|0;while(1){if(!b)break a;Rx(b);b=Sm(a,b)|0}}while(0);d=fo(a,d)|0}Ix(a,c[(c[a+16>>2]|0)+116>>2]&3)}l=i;return}function Qx(b,d){b=b|0;d=d|0;var e=0.0,f=0.0,g=0,i=0,j=0;i=b+16|0;j=c[i>>2]|0;g=a[j+275>>0]|0;b=g<<24>>24;do if(!(b&4)){e=+h[j+16>>3];if(!(b&2)){f=(+h[j+32>>3]+e)*.5;break}else{f=+h[d>>3]*.5+e;break}}else f=+h[j+32>>3]-+h[d>>3]*.5;while(0);if(!(g&1))e=+h[d+8>>3]*.5+ +h[j+24>>3];else e=+h[j+40>>3]-+h[d+8>>3]*.5;j=c[j+12>>2]|0;h[j+56>>3]=f;h[j+64>>3]=e;a[(c[(c[i>>2]|0)+12>>2]|0)+81>>0]=1;return}function Rx(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;s=l;l=l+144|0;q=s+120|0;e=s+16|0;i=s+104|0;j=s+88|0;k=s+72|0;m=s+56|0;n=s+40|0;o=s+24|0;r=s;p=b+16|0;d=c[p>>2]|0;f=c[d+8>>2]|0;if(!f){if((a[174080]|0)==0?(a[d+112>>0]|0)!=6:0){q=En(c[((c[b>>2]&3|0)==3?b:b+48|0)+40>>2]|0)|0;r=En(c[((c[b>>2]&3|0)==2?b:b+-48|0)+40>>2]|0)|0;c[e>>2]=q;c[e+4>>2]=r;$l(1,88844,e)|0}}else{h=0;b=f;while(1){if((h|0)>=(c[b+4>>2]|0))break;g=c[b>>2]|0;b=c[g+(h*48|0)>>2]|0;e=c[g+(h*48|0)+4>>2]|0;f=c[g+(h*48|0)+8>>2]|0;g=c[g+(h*48|0)+12>>2]|0;d=0;while(1){if((d|0)>=(e|0))break;t=b+(d<<4)|0;c[q>>2]=c[t>>2];c[q+4>>2]=c[t+4>>2];c[q+8>>2]=c[t+8>>2];c[q+12>>2]=c[t+12>>2];Kx(i,q);c[t>>2]=c[i>>2];c[t+4>>2]=c[i+4>>2];c[t+8>>2]=c[i+8>>2];c[t+12>>2]=c[i+12>>2];d=d+1|0}if(f|0){t=(c[c[(c[p>>2]|0)+8>>2]>>2]|0)+(h*48|0)+16|0;c[q>>2]=c[t>>2];c[q+4>>2]=c[t+4>>2];c[q+8>>2]=c[t+8>>2];c[q+12>>2]=c[t+12>>2];Kx(j,q);c[t>>2]=c[j>>2];c[t+4>>2]=c[j+4>>2];c[t+8>>2]=c[j+8>>2];c[t+12>>2]=c[j+12>>2]}if(g|0){t=(c[c[(c[p>>2]|0)+8>>2]>>2]|0)+(h*48|0)+32|0;c[q>>2]=c[t>>2];c[q+4>>2]=c[t+4>>2];c[q+8>>2]=c[t+8>>2];c[q+12>>2]=c[t+12>>2];Kx(k,q);c[t>>2]=c[k>>2];c[t+4>>2]=c[k+4>>2];c[t+8>>2]=c[k+8>>2];c[t+12>>2]=c[k+12>>2]}d=c[p>>2]|0;h=h+1|0;b=c[d+8>>2]|0}b=c[d+96>>2]|0;if(b){d=b+56|0;c[q>>2]=c[d>>2];c[q+4>>2]=c[d+4>>2];c[q+8>>2]=c[d+8>>2];c[q+12>>2]=c[d+12>>2];Kx(m,q);c[d>>2]=c[m>>2];c[d+4>>2]=c[m+4>>2];c[d+8>>2]=c[m+8>>2];c[d+12>>2]=c[m+12>>2];d=c[p>>2]|0}b=c[d+108>>2]|0;if(b){d=b+56|0;c[q>>2]=c[d>>2];c[q+4>>2]=c[d+4>>2];c[q+8>>2]=c[d+8>>2];c[q+12>>2]=c[d+12>>2];Kx(n,q);c[d>>2]=c[n>>2];c[d+4>>2]=c[n+4>>2];c[d+8>>2]=c[n+8>>2];c[d+12>>2]=c[n+12>>2];d=c[p>>2]|0}b=c[d+100>>2]|0;if(b){d=b+56|0;c[q>>2]=c[d>>2];c[q+4>>2]=c[d+4>>2];c[q+8>>2]=c[d+8>>2];c[q+12>>2]=c[d+12>>2];Kx(o,q);c[d>>2]=c[o>>2];c[d+4>>2]=c[o+4>>2];c[d+8>>2]=c[o+8>>2];c[d+12>>2]=c[o+12>>2];d=c[p>>2]|0}d=c[d+104>>2]|0;if(d|0){t=d+56|0;c[q>>2]=c[t>>2];c[q+4>>2]=c[t+4>>2];c[q+8>>2]=c[t+8>>2];c[q+12>>2]=c[t+12>>2];Kx(r,q);c[t>>2]=c[r>>2];c[t+4>>2]=c[r+4>>2];c[t+8>>2]=c[r+8>>2];c[t+12>>2]=c[r+12>>2]}}l=s;return}function Sx(b){b=b|0;var d=0,e=0,f=0;f=b+16|0;if((to(b)|0)!=(b|0)?(d=c[(c[f>>2]|0)+12>>2]|0,(d|0)!=0):0){e=1;b=(a[d+81>>0]|0)!=0&1}else{e=1;b=0}while(1){d=c[f>>2]|0;if((e|0)>(c[d+180>>2]|0))break;d=(Sx(c[(c[d+184>>2]|0)+(e<<2)>>2]|0)|0)+b|0;e=e+1|0;b=d}return b|0}function Tx(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0.0,k=0.0,m=0,n=0;g=l;l=l+32|0;i=g;n=(a[174083]|0)==0;d=d+16|0;m=c[d>>2]|0;k=+h[(n?m+32|0:m+40|0)>>3];h[e+16>>3]=k*72.0;j=+h[(n?m+40|0:m+32|0)>>3];h[e+24>>3]=j*72.0;d=(c[d>>2]|0)+16|0;c[e>>2]=c[d>>2];c[e+4>>2]=c[d+4>>2];c[e+8>>2]=c[d+8>>2];c[e+12>>2]=c[d+12>>2];h[e>>3]=+h[e>>3]-k*36.0;d=e+8|0;h[d>>3]=+h[d>>3]-j*36.0;c[i>>2]=c[f>>2];c[i+4>>2]=c[f+4>>2];c[i+8>>2]=c[f+8>>2];c[i+12>>2]=c[f+12>>2];c[i+16>>2]=c[f+16>>2];c[i+20>>2]=c[f+20>>2];c[i+24>>2]=c[f+24>>2];c[i+28>>2]=c[f+28>>2];$x(b,e,i);l=g;return}function Ux(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0.0,k=0.0,m=0,n=0;g=l;l=l+32|0;i=g;n=(a[174083]|0)==0;m=d+24|0;k=+h[(n?m:d+32|0)>>3];h[e+16>>3]=k;j=+h[(n?d+32|0:m)>>3];h[e+24>>3]=j;d=d+56|0;c[e>>2]=c[d>>2];c[e+4>>2]=c[d+4>>2];c[e+8>>2]=c[d+8>>2];c[e+12>>2]=c[d+12>>2];h[e>>3]=+h[e>>3]-k*.5;d=e+8|0;h[d>>3]=+h[d>>3]-j*.5;c[i>>2]=c[f>>2];c[i+4>>2]=c[f+4>>2];c[i+8>>2]=c[f+8>>2];c[i+12>>2]=c[f+12>>2];c[i+16>>2]=c[f+16>>2];c[i+20>>2]=c[f+20>>2];c[i+24>>2]=c[f+24>>2];c[i+28>>2]=c[f+28>>2];$x(b,e,i);l=g;return}function Vx(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;if(f|0){f=d+16|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[d>>2]=c[g>>2];c[d+4>>2]=c[g+4>>2];c[d+8>>2]=c[g+8>>2];c[d+12>>2]=c[g+12>>2]}if(!(a[174083]|0)){g=b+24|0;c[e>>2]=c[g>>2];c[e+4>>2]=c[g+4>>2];c[e+8>>2]=c[g+8>>2];c[e+12>>2]=c[g+12>>2]}else{h[e>>3]=+h[b+32>>3];h[e+8>>3]=+h[b+24>>3]}c[e+32>>2]=b;a[e+36>>0]=0;c[d+32>>2]=e;return}function Wx(a,b){a=a|0;b=b|0;b=$z(b)|0;do if(b){b=c[b>>2]|0;if(!(c[b+8>>2]|0)){b=c[b>>2]|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];break}else{b=b+16|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];break}}else{c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;c[a+12>>2]=0}while(0);return}function Xx(a,b){a=a|0;b=b|0;var d=0;b=$z(b)|0;do if(b){d=c[b>>2]|0;b=(c[b+4>>2]|0)+-1|0;if(!(c[d+(b*48|0)+12>>2]|0)){d=(c[d+(b*48|0)>>2]|0)+((c[d+(b*48|0)+4>>2]|0)+-1<<4)|0;c[a>>2]=c[d>>2];c[a+4>>2]=c[d+4>>2];c[a+8>>2]=c[d+8>>2];c[a+12>>2]=c[d+12>>2];break}else{d=d+(b*48|0)+32|0;c[a>>2]=c[d>>2];c[a+4>>2]=c[d+4>>2];c[a+8>>2]=c[d+8>>2];c[a+12>>2]=c[d+12>>2];break}}else{c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;c[a+12>>2]=0}while(0);return}function Yx(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l;l=l+112|0;k=q+72|0;n=q+32|0;o=q;p=d+16|0;j=1;while(1){f=c[p>>2]|0;if((j|0)>(c[f+180>>2]|0))break;f=c[(c[f+184>>2]|0)+(j<<2)>>2]|0;g=k;h=e;i=g+40|0;do{c[g>>2]=c[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(i|0));Yx(n,f,k);g=e;h=n;i=g+40|0;do{c[g>>2]=c[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(i|0));j=j+1|0}if(((to(d)|0)!=(d|0)?(m=c[(c[p>>2]|0)+12>>2]|0,m|0):0)?a[m+81>>0]|0:0){p=e+32|0;n=c[p>>2]|0;c[k>>2]=c[e>>2];c[k+4>>2]=c[e+4>>2];c[k+8>>2]=c[e+8>>2];c[k+12>>2]=c[e+12>>2];c[k+16>>2]=c[e+16>>2];c[k+20>>2]=c[e+20>>2];c[k+24>>2]=c[e+24>>2];c[k+28>>2]=c[e+28>>2];Ux(o,m,n,k);c[e>>2]=c[o>>2];c[e+4>>2]=c[o+4>>2];c[e+8>>2]=c[o+8>>2];c[e+12>>2]=c[o+12>>2];c[e+16>>2]=c[o+16>>2];c[e+20>>2]=c[o+20>>2];c[e+24>>2]=c[o+24>>2];c[e+28>>2]=c[o+28>>2];c[p>>2]=(c[p>>2]|0)+40}g=b;h=e;i=g+40|0;do{c[g>>2]=c[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(i|0));l=q;return}function Zx(a,b,e,f,g){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;var i=0.0,j=0.0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+160|0;r=s+96|0;p=s+48|0;o=s;q=c[13918]|0;n=d[g+32>>0]|0;i=+h[g>>3];j=+h[g+8>>3];k=+h[g+16>>3];m=+h[g+24>>3];c[o>>2]=b;c[o+4>>2]=f;c[o+8>>2]=n;h[o+16>>3]=i;h[o+24>>3]=j;h[o+32>>3]=k;h[o+40>>3]=m;AL(q,89099,o)|0;a:do if(0>=2){YL(89159,8,1,q)|0;o=0;while(1){if((o|0)>=(b|0))break;g=c[a+32>>2]|0;i=+h[a>>3];j=+h[a+8>>3];k=+h[a+16>>3];m=+h[a+24>>3];if(!g)n=174185;else n=c[c[g+32>>2]>>2]|0;c[p>>2]=o;h[p+8>>3]=i;h[p+16>>3]=j;h[p+24>>3]=k;h[p+32>>3]=m;c[p+40>>2]=g;c[p+44>>2]=n;AL(q,89168,p)|0;o=o+1|0;a=a+40|0}YL(89211,8,1,q)|0;g=0;while(1){if((g|0)>=(f|0))break a;b=d[e+36>>0]|0;i=+h[e+16>>3];j=+h[e+24>>3];k=+h[e>>3];m=+h[e+8>>3];p=c[c[e+32>>2]>>2]|0;c[r>>2]=g;c[r+4>>2]=e;c[r+8>>2]=b;h[r+16>>3]=i;h[r+24>>3]=j;h[r+32>>3]=k;h[r+40>>3]=m;c[r+48>>2]=p;AL(q,89220,r)|0;e=e+40|0;g=g+1|0}}while(0);l=s;return}function _x(a,b){a=a|0;b=b|0;var c=0.0;c=+h[b+8>>3]*.5+ +h[b+24>>3];h[a>>3]=+h[b>>3]*.5+ +h[b+16>>3];h[a+8>>3]=c;return}function $x(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0.0,j=0.0;e=l;l=l+16|0;f=e;j=+h[b>>3];h[d>>3]=+h[(+h[d>>3]>3];g=d+8|0;i=+h[b+8>>3];h[g>>3]=+h[(+h[g>>3]>3];j=+h[b+16>>3]+j;h[f>>3]=j;i=+h[b+24>>3]+i;h[f+8>>3]=i;g=d+16|0;h[g>>3]=+h[(+h[g>>3]>j?g:f)>>3];b=d+24|0;h[b>>3]=+h[(+h[b>>3]>i?g:f)+8>>3];c[a>>2]=c[d>>2];c[a+4>>2]=c[d+4>>2];c[a+8>>2]=c[d+8>>2];c[a+12>>2]=c[d+12>>2];c[a+16>>2]=c[d+16>>2];c[a+20>>2]=c[d+20>>2];c[a+24>>2]=c[d+24>>2];c[a+28>>2]=c[d+28>>2];l=e;return}function ay(a){a=a|0;Lx(a,1);return}function by(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;e=l;l=l+16|0;d=e;b=SA(Jm(a,90560)|0)|0;if(b){b=cy(b)|0;if(b|0){f=c[b+40>>2]|0;d=c[b+44>>2]|0;g=a+16|0;a=c[g>>2]|0;h[a+32>>3]=+(f|0)*.013888888888888888;h[a+40>>3]=+(d|0)*.013888888888888888;a=ww(12)|0;c[(c[g>>2]|0)+12>>2]=a;c[a>>2]=c[b+12>>2];c[a+4>>2]=((f|0)/-2|0)-(c[b+32>>2]|0);c[a+8>>2]=((d|0)/-2|0)-(c[b+36>>2]|0)}}else{c[d>>2]=En(a)|0;$l(0,89268,d)|0}l=e;return}function cy(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+1152|0;i=p+24|0;h=p+8|0;e=p;f=p+120|0;j=p+44|0;k=p+40|0;m=p+36|0;n=p+32|0;o=p+28|0;d=c[42311]|0;if(!d){d=Rl(19832,c[4345]|0)|0;c[42311]=d}d=bb[c[d>>2]&31](d,b,512)|0;do if(!d){g=bM(b,123632)|0;if(!g){c[e>>2]=b;$l(0,89317,e)|0;d=0;break}else{d=0;e=0}while(1){if(!(hL(f,1024,g)|0)){f=11;break}c[h>>2]=k;c[h+4>>2]=m;c[h+8>>2]=n;c[h+12>>2]=o;q=(dM(f,89345,h)|0)==4;e=q?1:e;if((a[f>>0]|0)!=37){q=(iL(f,89374)|0)==0;d=q?d:1}if((e|0)!=0&(d|0)!=0){f=12;break}}if((f|0)==11)if(!e){c[i>>2]=b;$l(0,89379,i)|0;d=0}else f=12;if((f|0)==12){q=xw(64)|0;k=c[k>>2]|0;c[q+32>>2]=k;m=c[m>>2]|0;c[q+40>>2]=(c[n>>2]|0)-k;c[q+36>>2]=(c[o>>2]|0)-m;c[q+8>>2]=b;o=c[42312]|0;c[42312]=o+1;c[q+12>>2]=o;$L(AN(g)|0,j)|0;o=c[j+36>>2]|0;n=xw(o+1|0)|0;c[q+52>>2]=n;pM(g,0,0)|0;xN(n,o,1,g)|0;a[n+o>>0]=0;o=c[42311]|0;bb[c[o>>2]&31](o,q,1)|0;a[q+16>>0]=d;d=q}ML(g)|0}while(0);l=p;return d|0}function dy(a,b,d){a=a|0;b=b|0;d=d|0;$I(c[b+52>>2]|0);return}function ey(a){a=a|0;$I(c[(c[a+16>>2]|0)+12>>2]|0);return}function fy(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+16|0;m=n+8|0;k=n;j=(d|0)!=0;a:do if(j){h=0;f=0;b:while(1)while(1){if(h)break a;g=c[d+(f<<2)>>2]|0;if(!g){i=6;break a}f=f+1|0;if(!(a[g>>0]|0)){h=1;continue b}}}else i=6;while(0);c:do if((i|0)==6)while(1){f=c[e>>2]|0;if(!f)break c;nr(b,f)|0;nr(b,134901)|0;e=e+4|0;i=6}while(0);d:do if(j){h=0;while(1){f=c[d+(h<<2)>>2]|0;if(!f)break d;do if(a[f>>0]|0){e=SA(f)|0;if(!e){c[k>>2]=f;$l(0,89418,k)|0;break}g=bM(e,123632)|0;if(!g){c[m>>2]=e;$l(0,89446,m)|0;break}while(1){f=RA(g)|0;if(!f)break;nr(b,f)|0}nr(b,134901)|0;ML(g)|0}while(0);h=h+1|0}}while(0);l=n;return}function gy(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;d=c[d+52>>2]|0;a:while(1){e=a[d>>0]|0;b:do switch(e<<24>>24){case 0:break a;case 37:{if((a[d+1>>0]|0)==37){e=d+2|0;if((((qK(e,89474,3)|0)!=0?(qK(e,89478,5)|0)!=0:0)?(qK(e,89484,3)|0)!=0:0)?(qK(e,89488,7)|0)!=0:0){e=37;break b}else g=37;c:while(1){switch(g<<24>>24){case 13:{f=10;break c}case 10:case 0:{f=12;break c}default:{}}g=d+1|0;d=g;g=a[g>>0]|0}if((f|0)==10){e=d+1|0;if((a[e>>0]|0)==10){d=d+2|0;continue a}}else if((f|0)==12)e=d+1|0;d=g<<24>>24==0?d:e;continue a}else e=37;break}default:{}}while(0);d:while(1){switch(e<<24>>24){case 10:case 13:case 0:break d;default:{}}or(b,e<<24>>24)|0;g=d+1|0;d=g;e=a[g>>0]|0}f=d+1|0;if(e<<24>>24==13?(a[f>>0]|0)==10:0)d=d+2|0;else d=e<<24>>24==0?d:f;or(b,10)|0}return}function hy(b){b=b|0;var d=0,e=0,f=0,g=0;f=l;l=l+16|0;e=f;d=c[42311]|0;a:do if(d|0){d=bb[c[d>>2]&31](d,0,128)|0;while(1){if(!d)break a;if(!(a[d+16>>0]|0)){c[e>>2]=c[d+12>>2];tr(b,89496,e);nr(b,89514)|0;gy(b,d);nr(b,89532)|0;nr(b,89547)|0}g=c[42311]|0;d=bb[c[g>>2]&31](g,d,8)|0}}while(0);l=f;return}function iy(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=l;l=l+16|0;e=g;a:do switch(d|0){case 0:{f=b;break}case 1:{f=AB(b)|0;break}default:{switch(jy(b)|0){case 2:break;case 1:{f=AB(b)|0;break a}default:{f=b;break a}}if(!(c[42313]|0)){$l(0,89559,e)|0;c[42313]=1;f=b}else f=b}}while(0);if(!(c[42314]|0))dm(169256,0,0);d=c[42315]|0;if(d>>>0>=(c[42316]|0)>>>0){em(169256,1)|0;d=c[42315]|0}c[42315]=d+1;a[d>>0]=40;e=f;b:while(1){switch(a[e>>0]|0){case 0:break b;case 92:case 41:case 40:{d=c[42315]|0;if(d>>>0>=(c[42316]|0)>>>0){em(169256,1)|0;d=c[42315]|0}c[42315]=d+1;a[d>>0]=92;break}default:{}}d=c[42315]|0;if(d>>>0>=(c[42316]|0)>>>0){em(169256,1)|0;d=c[42315]|0}h=a[e>>0]|0;c[42315]=d+1;a[d>>0]=h;e=e+1|0}d=c[42315]|0;if(d>>>0>=(c[42316]|0)>>>0){em(169256,1)|0;d=c[42315]|0}c[42315]=d+1;a[d>>0]=41;if((f|0)!=(b|0))$I(f);d=c[42315]|0;if(d>>>0>=(c[42316]|0)>>>0){em(169256,1)|0;d=c[42315]|0}a[d>>0]=0;h=c[42314]|0;c[42315]=h;l=g;return h|0}function jy(b){b=b|0;var c=0,d=0;c=0;a:while(1){while(1){d=a[b>>0]|0;if(!(d<<24>>24))break a;if((d&255)<127)b=b+1|0;else break}if((d&-4)<<24>>24==-64){c=1;b=b+2|0}else{c=2;break}}return c|0}function ky(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;n=l;l=l+96|0;i=n+80|0;j=n+72|0;m=n+64|0;g=n+32|0;k=n;h[g>>3]=+h[a>>3];h[g+8>>3]=+h[a+8>>3];h[g+16>>3]=+h[b>>3];h[g+24>>3]=+h[b+8>>3];do if((EI(d,g,j)|0)>=0){if(!f){b=d+4|0;a=c[b>>2]|0;f=c[42319]|0;if((a|0)>(c[42318]|0)){if(!f)a=xw(a<<5)|0;else a=zw(f,a<<5)|0;c[42319]=a;g=c[b>>2]|0;c[42318]=g;f=a}else g=a;b=c[d>>2]|0;a=0;while(1){if((a|0)>=(g|0))break;o=f+(a<<5)|0;d=b+(a<<4)|0;c[o>>2]=c[d>>2];c[o+4>>2]=c[d+4>>2];c[o+8>>2]=c[d+8>>2];c[o+12>>2]=c[d+12>>2];o=f+(a<<5)+16|0;d=a+1|0;p=b+(((d|0)%(g|0)|0)<<4)|0;c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];c[o+8>>2]=c[p+8>>2];c[o+12>>2]=c[p+12>>2];a=d}c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;c[k+16>>2]=0;c[k+20>>2]=0;c[k+24>>2]=0;c[k+28>>2]=0;c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];if((iI(f,g,i,k,m)|0)<0){a=0;break}}else{c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];ZI(i,m)}a=m+4|0;if(!(ly(c[a>>2]|0)|0)){g=c[a>>2]|0;a=c[42320]|0;f=c[m>>2]|0;b=0;while(1){if((b|0)>=(g|0))break;p=a+(b<<4)|0;o=f+(b<<4)|0;c[p>>2]=c[o>>2];c[p+4>>2]=c[o+4>>2];c[p+8>>2]=c[o+8>>2];c[p+12>>2]=c[o+12>>2];b=b+1|0}c[e>>2]=g}else a=0}else a=0;while(0);l=n;return a|0}function ly(a){a=a|0;var b=0,d=0,e=0;e=l;l=l+16|0;d=e;b=c[42321]|0;do if((b|0)<(a|0)){a=a+300-((a|0)%300|0)+b|0;b=zw(c[42320]|0,a<<4)|0;c[42320]=b;if(!b){$l(1,89649,d)|0;a=1;break}else{c[42321]=a;a=0;break}}else a=0;while(0);l=e;return a|0}function my(){var a=0,b=0,d=0;b=l;l=l+16|0;a=b;d=c[42322]|0;c[42322]=d+1;do if((d|0)<=0){d=xw(4800)|0;c[42320]=d;if(!d){$l(1,89672,a)|0;a=1;break}c[42321]=300;c[42323]=0;c[42324]=0;if(0){yA();a=0}else a=0}else a=0;while(0);l=b;return a|0}function ny(){var a=0,b=0,d=0,e=0.0,f=0,g=0;b=l;l=l+16|0;a=b;d=c[42322]|0;c[42322]=d+-1;if((d|0)<=1?($I(c[42320]|0),0):0){d=c[13918]|0;g=c[42323]|0;f=c[42324]|0;e=+zA();c[a>>2]=g;c[a+4>>2]=f;h[a+8>>3]=e;AL(d,89710,a)|0}l=b;return}function oy(a,b){a=a|0;b=b|0;return py(a,b,0)|0}function py(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0;L=l;l=l+176|0;G=L+168|0;K=L+128|0;x=L+120|0;v=L+112|0;i=L+104|0;s=L+88|0;n=L+72|0;g=L+64|0;t=L+160|0;I=L+152|0;y=L+144|0;u=L+32|0;w=L;J=L+136|0;c[42323]=(c[42323]|0)+1;H=c[b+80>>2]|0;c[42324]=(c[42324]|0)+H;f=b+88|0;while(1){C=c[f>>2]|0;if(!C){D=4;break}f=c[C+16>>2]|0;if(!(a[f+112>>0]|0)){D=5;break}else f=f+116|0}do if((D|0)==4){$l(1,89753,g)|0;f=0}else if((D|0)==5){B=c[b+84>>2]|0;if(!(qy(H,B,b)|0)){g=H<<3;if((g|0)>(c[42325]|0)){f=c[42326]|0;if(!f)f=xw(H<<7)|0;else f=zw(f,H<<7)|0;c[42326]=f;c[42325]=g}a:do if((H|0)>1?+h[B+8>>3]>+h[B+40>>3]:0){f=0;while(1){if((f|0)==(H|0)){p=1;break a}z=B+(f<<5)+24|0;m=+h[z>>3];A=B+(f<<5)+8|0;h[z>>3]=-+h[A>>3];h[A>>3]=-m;f=f+1|0}}else p=0;while(0);r=c[C>>2]&3;z=C+48|0;f=c[((r|0)==3?C:z)+40>>2]|0;A=C+-48|0;if((f|0)==(c[((r|0)==2?C:A)+40>>2]|0)){c[i>>2]=En(f)|0;$l(1,89860,i)|0;f=0;break}o=H+-1|0;q=c[42326]|0;r=q;f=0;j=0;b:while(1){if((j|0)>=(H|0)){j=o;n=f;break}if((j|0)>0)g=+h[B+(j<<5)+8>>3]>+h[B+(j+-1<<5)+8>>3]?-1:1;else g=0;if((j|0)<(o|0))i=+h[B+(j+1<<5)+8>>3]>+h[B+(j<<5)+8>>3]?1:-1;else i=0;c:do if((g|0)!=(i|0))if((g|0)==1|(i|0)==-1){g=B+(j<<5)|0;h[q+(f<<4)>>3]=+h[g>>3];i=f+1|0;h[q+(f<<4)+8>>3]=+h[B+(j<<5)+24>>3];h[q+(i<<4)>>3]=+h[g>>3];g=B+(j<<5)+8|0;D=29;break}else{g=B+(j<<5)+16|0;h[q+(f<<4)>>3]=+h[g>>3];i=f+1|0;h[q+(f<<4)+8>>3]=+h[B+(j<<5)+8>>3];h[q+(i<<4)>>3]=+h[g>>3];g=B+(j<<5)+24|0;D=29;break}else{switch(g|0){case -1:break c;case 0:break;default:{D=28;break b}}g=B+(j<<5)|0;h[q+(f<<4)>>3]=+h[g>>3];i=f+1|0;h[q+(f<<4)+8>>3]=+h[B+(j<<5)+24>>3];h[q+(i<<4)>>3]=+h[g>>3];g=B+(j<<5)+8|0;D=29}while(0);if((D|0)==29){D=0;h[q+(i<<4)+8>>3]=+h[g>>3];f=f+2|0}j=j+1|0}if((D|0)==28){c[n>>2]=g;c[n+4>>2]=g;c[n+8>>2]=480;$l(1,89795,n)|0;f=0;break}d:while(1){if((j|0)<=-1)break;if((j|0)<(o|0))f=+h[B+(j<<5)+8>>3]>+h[B+(j+1<<5)+8>>3]?-1:1;else f=0;if((j|0)>0)g=+h[B+(j+-1<<5)+8>>3]>+h[B+(j<<5)+8>>3]?1:-1;else g=0;e:do if((f|0)!=(g|0))if((f|0)==1|(g|0)==-1){f=B+(j<<5)|0;h[q+(n<<4)>>3]=+h[f>>3];g=n+1|0;h[q+(n<<4)+8>>3]=+h[B+(j<<5)+24>>3];h[q+(g<<4)>>3]=+h[f>>3];f=B+(j<<5)+8|0;i=2;break}else{f=B+(j<<5)+16|0;h[q+(n<<4)>>3]=+h[f>>3];g=n+1|0;h[q+(n<<4)+8>>3]=+h[B+(j<<5)+8>>3];h[q+(g<<4)>>3]=+h[f>>3];f=B+(j<<5)+24|0;i=2;break}else switch(f|0){case 0:{f=B+(j<<5)+16|0;h[q+(n<<4)>>3]=+h[f>>3];g=n+1|0;h[q+(n<<4)+8>>3]=+h[B+(j<<5)+8>>3];h[q+(g<<4)>>3]=+h[f>>3];f=B+(j<<5)+24|0;i=2;break e}case -1:{N=B+(j<<5)+16|0;h[q+(n<<4)>>3]=+h[N>>3];f=B+(j<<5)+8|0;i=n+1|0;h[q+(n<<4)+8>>3]=+h[f>>3];h[q+(i<<4)>>3]=+h[N>>3];N=B+(j<<5)+24|0;M=n+2|0;h[q+(i<<4)+8>>3]=+h[N>>3];i=B+(j<<5)|0;h[q+(M<<4)>>3]=+h[i>>3];g=n+3|0;h[q+(M<<4)+8>>3]=+h[N>>3];h[q+(g<<4)>>3]=+h[i>>3];i=4;break e}default:{D=42;break d}}while(0);h[q+(g<<4)+8>>3]=+h[f>>3];j=j+-1|0;n=n+i|0}if((D|0)==42){c[s>>2]=f;c[s+4>>2]=f;c[s+8>>2]=513;$l(1,89795,s)|0;f=0;break}f:do if(!p)f=0;else{f=0;while(1){if((f|0)>=(H|0)){f=0;break}M=B+(f<<5)+24|0;m=+h[M>>3];N=B+(f<<5)+8|0;h[M>>3]=-+h[N>>3];h[N>>3]=-m;f=f+1|0}while(1){if((f|0)>=(n|0)){f=0;break f}N=q+(f<<4)+8|0;h[N>>3]=-+h[N>>3];f=f+1|0}}while(0);while(1){if((f|0)>=(H|0))break;h[B+(f<<5)>>3]=2147483647.0;h[B+(f<<5)+16>>3]=-2147483648.0;f=f+1|0}c[t>>2]=r;i=t+4|0;c[i>>2]=n;h[u>>3]=+h[b>>3];h[u+8>>3]=+h[b+8>>3];h[u+16>>3]=+h[b+40>>3];h[u+24>>3]=+h[b+48>>3];if((EI(t,u,I)|0)<0){$l(1,89899,v)|0;f=0;break}if(!e){g=c[i>>2]|0;f=c[42319]|0;if((g|0)>(c[42318]|0)){if(!f)f=xw(g<<5)|0;else f=zw(f,g<<5)|0;c[42319]=f;g=c[i>>2]|0;c[42318]=g}j=c[42326]|0;i=0;while(1){if((i|0)>=(g|0))break;M=f+(i<<5)|0;N=j+(i<<4)|0;c[M>>2]=c[N>>2];c[M+4>>2]=c[N+4>>2];c[M+8>>2]=c[N+8>>2];c[M+12>>2]=c[N+12>>2];M=f+(i<<5)+16|0;N=i+1|0;v=j+(((N|0)%(g|0)|0)<<4)|0;c[M>>2]=c[v>>2];c[M+4>>2]=c[v+4>>2];c[M+8>>2]=c[v+8>>2];c[M+12>>2]=c[v+12>>2];i=N}if(!(a[b+29>>0]|0)){k=0.0;m=0.0}else{m=+h[b+16>>3];k=+E(+m);m=+F(+m)}h[w+8>>3]=m;h[w>>3]=k;if(!(a[b+69>>0]|0)){k=0.0;m=0.0}else{m=+h[b+56>>3];k=-+E(+m);m=-+F(+m)}h[w+24>>3]=m;h[w+16>>3]=k;c[G>>2]=c[I>>2];c[G+4>>2]=c[I+4>>2];if((iI(f,g,G,w,y)|0)<0){$l(1,89938,x)|0;f=0;break}}else{c[G>>2]=c[I>>2];c[G+4>>2]=c[I+4>>2];ZI(G,y)}n=y+4|0;if(!(ly(c[n>>2]|0)|0)){f=0;while(1){if((f|0)>=(H|0))break;h[B+(f<<5)>>3]=2147483647.0;h[B+(f<<5)+16>>3]=-2147483648.0;f=f+1|0}i=c[n>>2]|0;j=c[42320]|0;g=c[y>>2]|0;f=0;while(1){if((f|0)>=(i|0)){i=1;f=10;g=0;break}N=j+(f<<4)|0;M=g+(f<<4)|0;c[N>>2]=c[M>>2];c[N+4>>2]=c[M+4>>2];c[N+8>>2]=c[M+8>>2];c[N+12>>2]=c[M+12>>2];f=f+1|0}while(1){if(!((g|0)<15&i<<24>>24!=0))break;ry(B,H,c[42320]|0,c[n>>2]|0,f);j=0;while(1){if((j|0)>=(H|0))break;if(+h[B+(j<<5)>>3]==2147483647.0){D=82;break}if(+h[B+(j<<5)+16>>3]==-2147483648.0){D=82;break}j=j+1|0}if((D|0)==82){D=0;N=f<<1;f=N;g=(N|0)>(2147483647/(H|0)|0|0)?15:g}i=(j|0)==(H|0)?0:i;g=g+1|0}if(i<<24>>24){M=En(c[((c[C>>2]&3|0)==3?C:z)+40>>2]|0)|0;N=En(c[((c[C>>2]&3|0)==2?C:A)+40>>2]|0)|0;c[K>>2]=M;c[K+4>>2]=N;$l(0,89976,K)|0;c[G>>2]=c[I>>2];c[G+4>>2]=c[I+4>>2];ZI(G,J);ry(B,H,c[J>>2]|0,c[J+4>>2]|0,10);$I(c[J>>2]|0)}c[d>>2]=c[n>>2];f=c[42320]|0}else f=0}else f=0}while(0);l=L;return f|0}function qy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0.0,g=0.0,i=0,j=0,k=0,m=0.0,n=0.0,o=0,p=0.0,q=0.0,r=0.0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0.0,L=0,M=0,N=0,O=0.0,P=0,Q=0,R=0;R=l;l=l+32|0;I=R+16|0;H=R+8|0;k=R;e=0;j=0;while(1){if((j|0)>=(a|0))break;i=b+(j<<5)|0;s=+h[b+(j<<5)+8>>3]-+h[b+(j<<5)+24>>3];if(!((s>=0.0?s:-s)<.01)?(s=+h[i>>3]-+h[b+(j<<5)+16>>3],!((s>=0.0?s:-s)<.01)):0){if((e|0)!=(j|0)){P=b+(e<<5)|0;c[P>>2]=c[i>>2];c[P+4>>2]=c[i+4>>2];c[P+8>>2]=c[i+8>>2];c[P+12>>2]=c[i+12>>2];c[P+16>>2]=c[i+16>>2];c[P+20>>2]=c[i+20>>2];c[P+24>>2]=c[i+24>>2];c[P+28>>2]=c[i+28>>2]}e=e+1|0}j=j+1|0}J=b+16|0;do if(!(+h[b>>3]>+h[J>>3])?(L=b+8|0,N=b+24|0,!(+h[L>>3]>+h[N>>3])):0){P=e+-1|0;M=c[13918]|0;w=0;while(1){if((w|0)>=(P|0))break;D=w+1|0;E=b+(D<<5)|0;f=+h[E>>3];F=b+(D<<5)+16|0;g=+h[F>>3];if(f>g){Q=16;break}A=b+(D<<5)+8|0;m=+h[A>>3];B=b+(D<<5)+24|0;n=+h[B>>3];if(m>n){Q=16;break}G=b+(w<<5)+16|0;v=+h[G>>3]>3]>g;a=u&1;z=b+(w<<5)+24|0;t=+h[z>>3]>3]>n;i=k&1;x=a+e+j+i|0;o=(x|0)!=0;if(!(0==0|o^1)){c[I>>2]=w;c[I+4>>2]=D;AL(M,90176,I)|0;sy(d)}a:do if(o){if(!v)if(!u)if(!t){if(k){k=0;o=e;e=B;i=y;Q=24}}else{k=i;j=0;o=e;e=A;i=z;Q=24}else{k=i;a=0;o=e;e=F;i=C;Q=24}else{k=i;o=0;e=E;i=G;Q=24}if((Q|0)==24){Q=0;w=~~+h[i>>3];h[i>>3]=+h[e>>3];h[e>>3]=+(w|0);i=k;e=o}o=x+-1|0;k=0;while(1){if((k|0)>=(o|0))break a;do if((e|0)!=1){if((a|0)==1){s=+(~~((+h[F>>3]+ +h[C>>3])*.5+.5)|0);h[F>>3]=s;h[C>>3]=s;a=0;break}if((j|0)==1){s=+(~~((+h[A>>3]+ +h[z>>3])*.5+.5)|0);h[A>>3]=s;h[z>>3]=s;j=0;break}if((i|0)==1){s=+(~~((+h[B>>3]+ +h[y>>3])*.5+.5)|0);h[B>>3]=s;h[y>>3]=s;i=0}}else{s=+(~~((+h[E>>3]+ +h[G>>3])*.5+.5)|0);h[E>>3]=s;h[G>>3]=s;e=0}while(0);k=k+1|0}}while(0);p=+h[C>>3];q=+h[G>>3];r=+h[E>>3];s=+h[F>>3];i=ty(~~p,~~q,~~r,~~s)|0;n=+h[y>>3];m=+h[z>>3];g=+h[A>>3];f=+h[B>>3];e=ty(~~n,~~m,~~g,~~f)|0;if(!((i|0)!=0&(e|0)!=0)){w=D;continue}if((i|0)<(e|0)){B=q-p>s-r;w=q>3]=B?(w?r:s):w?q:p;w=D;continue}else{B=m-n>f-g;w=m>3]=B?(w?g:f):w?m:n;w=D;continue}}if((Q|0)==16){c[H>>2]=D;$l(1,90130,H)|0;sy(d);e=1;break}f=+h[d>>3];g=+h[b>>3];if(!(((!(f+h[J>>3]):0)?(K=+h[d+8>>3],!(K<+h[L>>3])):0)?!(K>+h[N>>3]):0)){if(0){YL(90219,42,1,M)|0;sy(d);g=+h[b>>3];f=+h[d>>3]}if(f>3]=g;else g=f;f=+h[J>>3];if(g>f)h[d>>3]=f;e=d+8|0;g=+h[e>>3];f=+h[L>>3];if(g>3]=f;g=f}f=+h[N>>3];if(g>f)h[e>>3]=f}i=d+40|0;f=+h[i>>3];e=b+(P<<5)|0;g=+h[e>>3];if(((!(f+h[b+(P<<5)+16>>3]):0)?(O=+h[d+48>>3],!(O<+h[b+(P<<5)+8>>3])):0)?!(O>+h[b+(P<<5)+24>>3]):0){e=0;break}if(0){YL(90262,39,1,M)|0;sy(d);g=+h[e>>3];f=+h[i>>3]}if(f>3]=g;f=g}g=+h[b+(P<<5)+16>>3];if(f>g)h[i>>3]=g;e=d+48|0;f=+h[e>>3];g=+h[b+(P<<5)+8>>3];if(f>3]=g;else g=f;f=+h[b+(P<<5)+24>>3];if(g>f){h[e>>3]=f;e=0}else e=0}else Q=12;while(0);if((Q|0)==12){$l(1,90085,k)|0;sy(d);e=1}l=R;return e|0}function ry(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,l=0,m=0.0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0;s=O(e,b)|0;t=1.0/+(s|0);e=0;a:while(1){u=e+3|0;if((u|0)>=(d|0))break;o=c+(e<<4)|0;p=c+(e<<4)+8|0;r=e+1|0;q=c+(r<<4)|0;r=c+(r<<4)+8|0;j=e+2|0;i=c+(j<<4)|0;j=c+(j<<4)+8|0;k=c+(u<<4)|0;l=c+(u<<4)+8|0;g=0;while(1){if((g|0)>(s|0)){e=u;continue a}v=t*+(g|0);m=+h[o>>3];n=+h[p>>3];y=+h[q>>3];w=+h[r>>3];z=+h[i>>3];x=+h[j>>3];m=(y-m)*v+m;n=(w-n)*v+n;y=(z-y)*v+y;w=(x-w)*v+w;m=(y-m)*v+m;n=(w-n)*v+n;m=((z-y+(+h[k>>3]-z)*v)*v+y-m)*v+m;n=((x-w+(+h[l>>3]-x)*v)*v+w-n)*v+n;f=0;while(1){if((f|0)>=(b|0))break;if(n<=+h[a+(f<<5)+24>>3]+.0001?n>=+h[a+(f<<5)+8>>3]+-.0001:0){e=a+(f<<5)|0;if(+h[e>>3]>m)h[e>>3]=m;e=a+(f<<5)+16|0;if(+h[e>>3]>3]=m}f=f+1|0}g=g+1|0}}return}function sy(b){b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0.0,o=0.0,p=0.0,q=0.0,r=0;m=l;l=l+112|0;j=m+80|0;k=m+48|0;i=m+8|0;g=m;e=c[13918]|0;f=b+80|0;c[g>>2]=c[f>>2];AL(e,90302,g)|0;g=b+84|0;d=0;while(1){if((d|0)>=(c[f>>2]|0))break;r=c[g>>2]|0;q=+h[r+(d<<5)>>3];p=+h[r+(d<<5)+8>>3];o=+h[r+(d<<5)+16>>3];n=+h[r+(d<<5)+24>>3];c[i>>2]=d;h[i+8>>3]=q;h[i+16>>3]=p;h[i+24>>3]=o;h[i+32>>3]=n;AL(e,90313,i)|0;d=d+1|0}q=+h[b+8>>3];p=+h[b+16>>3];r=a[b+29>>0]|0?90344:90356;h[k>>3]=+h[b>>3];h[k+8>>3]=q;h[k+16>>3]=p;c[k+24>>2]=r;AL(e,90372,k)|0;p=+h[b+48>>3];q=+h[b+56>>3];r=a[b+69>>0]|0?90344:90356;h[j>>3]=+h[b+40>>3];h[j+8>>3]=p;h[j+16>>3]=q;c[j+24>>2]=r;AL(e,90423,j)|0;l=m;return}function ty(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;do if((b|0)>(c|0)&(d|0)>(a|0)){if(!((c|0)>(a|0)|(d|0)<(a|0))){a=d-a|0;break}if((b|0)<(c|0)|(b|0)>(d|0)){b=b-a|0;a=d-c|0;a=(b|0)<(a|0)?b:a;break}else{a=b-c|0;break}}else a=0;while(0);return a|0}function uy(a,b){a=a|0;b=b|0;return py(a,b,1)|0}function vy(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0.0,M=0.0,N=0.0,P=0,Q=0;K=l;l=l+304|0;A=K+272|0;z=K+208|0;G=K+96|0;H=K+32|0;I=K+16|0;J=K;r=K+192|0;y=K+176|0;i=K+160|0;B=K+296|0;D=K+288|0;j=c[d>>2]|0;w=c[j>>2]&3;k=j+-48|0;E=c[((w|0)==2?j:k)+40>>2]|0;t=G+16|0;w=(c[(c[((w|0)==3?j:j+48|0)+40>>2]|0)+16>>2]|0)+16|0;x=j+16|0;F=(c[x>>2]|0)+16|0;c[z>>2]=c[w>>2];c[z+4>>2]=c[w+4>>2];c[z+8>>2]=c[w+8>>2];c[z+12>>2]=c[w+12>>2];c[A>>2]=c[F>>2];c[A+4>>2]=c[F+4>>2];c[A+8>>2]=c[F+8>>2];c[A+12>>2]=c[F+12>>2];wy(r,z,A);c[G>>2]=c[r>>2];c[G+4>>2]=c[r+4>>2];c[G+8>>2]=c[r+8>>2];c[G+12>>2]=c[r+12>>2];c[t>>2]=c[r>>2];c[t+4>>2]=c[r+4>>2];c[t+8>>2]=c[r+8>>2];c[t+12>>2]=c[r+12>>2];c[I>>2]=c[r>>2];c[I+4>>2]=c[r+4>>2];c[I+8>>2]=c[r+8>>2];c[I+12>>2]=c[r+12>>2];r=G+32|0;F=G+48|0;w=(c[E+16>>2]|0)+16|0;x=(c[x>>2]|0)+56|0;c[z>>2]=c[w>>2];c[z+4>>2]=c[w+4>>2];c[z+8>>2]=c[w+8>>2];c[z+12>>2]=c[w+12>>2];c[A>>2]=c[x>>2];c[A+4>>2]=c[x+4>>2];c[A+8>>2]=c[x+8>>2];c[A+12>>2]=c[x+12>>2];wy(y,z,A);c[F>>2]=c[y>>2];c[F+4>>2]=c[y+4>>2];c[F+8>>2]=c[y+8>>2];c[F+12>>2]=c[y+12>>2];c[r>>2]=c[y>>2];c[r+4>>2]=c[y+4>>2];c[r+8>>2]=c[y+8>>2];c[r+12>>2]=c[y+12>>2];c[J>>2]=c[y>>2];c[J+4>>2]=c[y+4>>2];c[J+8>>2]=c[y+8>>2];c[J+12>>2]=c[y+12>>2];a:do if((e|0)!=1&(a[174080]|0)==0){m=+h[G>>3];n=+h[F>>3];L=m-n;o=+h[G+8>>3];p=+h[G+56>>3];s=o-p;q=s*s;if(q+L*L<1.0e-06){c[t>>2]=c[G>>2];c[t+4>>2]=c[G+4>>2];c[t+8>>2]=c[G+8>>2];c[t+12>>2]=c[G+12>>2];c[r>>2]=c[F>>2];c[r+4>>2]=c[F+4>>2];c[r+8>>2]=c[F+8>>2];c[r+12>>2]=c[F+12>>2];y=G+24|0;x=G+40|0;n=0.0;m=0.0}else{M=n-m;L=+C(+(q+M*M));w=c[(c[(c[b+60>>2]|0)+16>>2]|0)+248>>2]|0;N=+((O(w,e+-1|0)|0)/2|0|0);q=s*N/L;h[t>>3]=q+m;m=M*N/L;y=G+24|0;h[y>>3]=m+o;h[r>>3]=q+n;x=G+40|0;h[x>>3]=p+m;m=+(0-w|0);n=M*m/L;m=s*m/L}f=(f|0)==6;u=D+4|0;v=B+4|0;j=0;while(1){if((j|0)>=(e|0))break a;w=c[d+(j<<2)>>2]|0;k=w+-48|0;b:do if((c[((c[w>>2]&3|0)==2?w:k)+40>>2]|0)==(E|0)){c[I>>2]=c[G>>2];c[I+4>>2]=c[G+4>>2];c[I+8>>2]=c[G+8>>2];c[I+12>>2]=c[G+12>>2];c[J>>2]=c[F>>2];c[J+4>>2]=c[F+4>>2];c[J+8>>2]=c[F+8>>2];c[J+12>>2]=c[F+12>>2];i=0;while(1){if((i|0)==4)break b;P=H+(i<<4)|0;Q=G+(i<<4)|0;c[P>>2]=c[Q>>2];c[P+4>>2]=c[Q+4>>2];c[P+8>>2]=c[Q+8>>2];c[P+12>>2]=c[Q+12>>2];i=i+1|0}}else{c[I>>2]=c[F>>2];c[I+4>>2]=c[F+4>>2];c[I+8>>2]=c[F+8>>2];c[I+12>>2]=c[F+12>>2];c[J>>2]=c[G>>2];c[J+4>>2]=c[G+4>>2];c[J+8>>2]=c[G+8>>2];c[J+12>>2]=c[G+12>>2];i=0;while(1){if((i|0)==4)break b;Q=H+(3-i<<4)|0;P=G+(i<<4)|0;c[Q>>2]=c[P>>2];c[Q+4>>2]=c[P+4>>2];c[Q+8>>2]=c[P+8>>2];c[Q+12>>2]=c[P+12>>2];i=i+1|0}}while(0);if(f){c[u>>2]=4;c[D>>2]=z;i=0;while(1){if((i|0)==4)break;Q=z+(i<<4)|0;P=H+(i<<4)|0;c[Q>>2]=c[P>>2];c[Q+4>>2]=c[P+4>>2];c[Q+8>>2]=c[P+8>>2];c[Q+12>>2]=c[P+12>>2];i=i+1|0}c[A>>2]=c[D>>2];c[A+4>>2]=c[D+4>>2];ZI(A,B);Kz(w,c[((c[w>>2]&3|0)==2?w:k)+40>>2]|0,c[B>>2]|0,c[v>>2]|0,g)}else Kz(w,c[((c[w>>2]&3|0)==2?w:k)+40>>2]|0,H,4,g);c[z>>2]=c[I>>2];c[z+4>>2]=c[I+4>>2];c[z+8>>2]=c[I+8>>2];c[z+12>>2]=c[I+12>>2];c[A>>2]=c[J>>2];c[A+4>>2]=c[J+4>>2];c[A+8>>2]=c[J+8>>2];c[A+12>>2]=c[J+12>>2];dA(b,w,z,A);h[t>>3]=+h[t>>3]+m;h[y>>3]=+h[y>>3]+n;h[r>>3]=+h[r>>3]+m;h[x>>3]=+h[x>>3]+n;j=j+1|0}}else{if((f|0)==4){xy(i,b);c[A>>2]=c[i>>2];c[A+4>>2]=c[i+4>>2];c[A+8>>2]=c[i+8>>2];c[A+12>>2]=c[i+12>>2];yy(G,A)}Kz(j,c[((c[j>>2]&3|0)==2?j:k)+40>>2]|0,G,4,g);c[z>>2]=c[I>>2];c[z+4>>2]=c[I+4>>2];c[z+8>>2]=c[I+8>>2];c[z+12>>2]=c[I+12>>2];c[A>>2]=c[J>>2];c[A+4>>2]=c[J+4>>2];c[A+8>>2]=c[J+8>>2];c[A+12>>2]=c[J+12>>2];dA(b,j,z,A)}while(0);l=K;return}function wy(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=+h[c+8>>3]+ +h[b+8>>3];h[a>>3]=+h[c>>3]+ +h[b>>3];h[a+8>>3]=d;return}function xy(a,b){a=a|0;b=b|0;b=c[b+16>>2]|0;h[20899]=(+h[b+32>>3]+ +h[b+16>>3])*.5;h[20900]=(+h[b+40>>3]+ +h[b+24>>3])*.5;c[a>>2]=c[41798];c[a+4>>2]=c[41799];c[a+8>>2]=c[41800];c[a+12>>2]=c[41801];return}function yy(a,b){a=a|0;b=b|0;var c=0.0,d=0.0,e=0.0,f=0.0,g=0.0,i=0.0;f=+h[a>>3];d=+h[a+48>>3];i=(d+f)*.5;g=+h[a+8>>3];c=+h[a+56>>3];e=(c+g)*.5;f=d-f;g=c-g;f=+C(+(g*g+f*f))*.2;g=+h[b>>3]-i;c=+h[b+8>>3]-e;d=+C(+(c*c+g*g));if(!(d==0.0)){g=i-g/d*f;i=e-c/d*f;h[a+32>>3]=g;h[a+16>>3]=g;h[a+40>>3]=i;h[a+24>>3]=i}return}function zy(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,m=0.0,n=0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,D=0,E=0,F=0.0,G=0,H=0.0,I=0.0,J=0.0;E=l;l=l+208|0;t=E+192|0;s=E+176|0;B=E+32|0;w=E+16|0;x=E;y=E+160|0;z=E+144|0;u=E+128|0;v=E+112|0;g=e&2130706432;A=(e&8|0)==0?((g|0)==0?4:g):8;if((A|0)==436207616)Ay(a,b,d,f);else{D=ww((d<<6)+64|0)|0;p=d+-1|0;q=x+8|0;r=w+8|0;o=12.0;e=0;while(1){if((e|0)>=(d|0))break;n=b+(e<<4)|0;c[w>>2]=c[n>>2];c[w+4>>2]=c[n+4>>2];c[w+8>>2]=c[n+8>>2];c[w+12>>2]=c[n+12>>2];if((e|0)<(p|0)){e=e+1|0;n=b+(e<<4)|0;c[x>>2]=c[n>>2];c[x+4>>2]=c[n+4>>2];c[x+8>>2]=c[n+8>>2];c[x+12>>2]=c[n+12>>2]}else{c[x>>2]=c[b>>2];c[x+4>>2]=c[b+4>>2];c[x+8>>2]=c[b+8>>2];c[x+12>>2]=c[b+12>>2];e=e+1|0}m=+h[x>>3]-+h[w>>3];F=+h[q>>3]-+h[r>>3];m=+C(+(F*F+m*m))*.3333333333333333;o=o=(d|0))break;g=b+(i<<4)|0;c[w>>2]=c[g>>2];c[w+4>>2]=c[g+4>>2];c[w+8>>2]=c[g+8>>2];c[w+12>>2]=c[g+12>>2];if((i|0)<(p|0)){g=b+(i+1<<4)|0;c[x>>2]=c[g>>2];c[x+4>>2]=c[g+4>>2];c[x+8>>2]=c[g+8>>2];c[x+12>>2]=c[g+12>>2]}else{c[x>>2]=c[b>>2];c[x+4>>2]=c[b+4>>2];c[x+8>>2]=c[b+8>>2];c[x+12>>2]=c[b+12>>2]}m=+h[x>>3]-+h[w>>3];F=+h[q>>3]-+h[r>>3];m=o/+C(+(F*F+m*m));m=k?m*.3333333333333333:j?m*.5:m;g=D+(e<<4)|0;if(n){c[s>>2]=c[w>>2];c[s+4>>2]=c[w+4>>2];c[s+8>>2]=c[w+8>>2];c[s+12>>2]=c[w+12>>2];c[t>>2]=c[x>>2];c[t+4>>2]=c[x+4>>2];c[t+8>>2]=c[x+8>>2];c[t+12>>2]=c[x+12>>2];By(y,m*.5,s,t);c[g>>2]=c[y>>2];c[g+4>>2]=c[y+4>>2];c[g+8>>2]=c[y+8>>2];c[g+12>>2]=c[y+12>>2]}else{c[g>>2]=c[w>>2];c[g+4>>2]=c[w+4>>2];c[g+8>>2]=c[w+8>>2];c[g+12>>2]=c[w+12>>2]}g=D+(e+1<<4)|0;c[s>>2]=c[w>>2];c[s+4>>2]=c[w+4>>2];c[s+8>>2]=c[w+8>>2];c[s+12>>2]=c[w+12>>2];c[t>>2]=c[x>>2];c[t+4>>2]=c[x+4>>2];c[t+8>>2]=c[x+8>>2];c[t+12>>2]=c[x+12>>2];By(z,m,s,t);c[g>>2]=c[z>>2];c[g+4>>2]=c[z+4>>2];c[g+8>>2]=c[z+8>>2];c[g+12>>2]=c[z+12>>2];g=e+3|0;G=D+(e+2<<4)|0;c[s>>2]=c[w>>2];c[s+4>>2]=c[w+4>>2];c[s+8>>2]=c[w+8>>2];c[s+12>>2]=c[w+12>>2];c[t>>2]=c[x>>2];c[t+4>>2]=c[x+4>>2];c[t+8>>2]=c[x+8>>2];c[t+12>>2]=c[x+12>>2];By(u,1.0-m,s,t);c[G>>2]=c[u>>2];c[G+4>>2]=c[u+4>>2];c[G+8>>2]=c[u+8>>2];c[G+12>>2]=c[u+12>>2];if(n){G=D+(g<<4)|0;c[s>>2]=c[w>>2];c[s+4>>2]=c[w+4>>2];c[s+8>>2]=c[w+8>>2];c[s+12>>2]=c[w+12>>2];c[t>>2]=c[x>>2];c[t+4>>2]=c[x+4>>2];c[t+8>>2]=c[x+8>>2];c[t+12>>2]=c[x+12>>2];By(v,1.0-m*.5,s,t);c[G>>2]=c[v>>2];c[G+4>>2]=c[v+4>>2];c[G+8>>2]=c[v+8>>2];c[G+12>>2]=c[v+12>>2];e=e+4|0}else e=g;i=i+1|0}k=D+(e<<4)|0;c[k>>2]=c[D>>2];c[k+4>>2]=c[D+4>>2];c[k+8>>2]=c[D+8>>2];c[k+12>>2]=c[D+12>>2];k=D+(e+1<<4)|0;j=D+16|0;c[k>>2]=c[j>>2];c[k+4>>2]=c[j+4>>2];c[k+8>>2]=c[j+8>>2];c[k+12>>2]=c[j+12>>2];e=D+(e+2<<4)|0;k=D+32|0;c[e>>2]=c[k>>2];c[e+4>>2]=c[k+4>>2];c[e+8>>2]=c[k+8>>2];c[e+12>>2]=c[k+12>>2];e=A&2147483647;a:do if((e|0)<201326592){if((e|0)>=83886080){if((e|0)<134217728){if((e|0)<100663296){switch(e|0){case 83886080:break;default:break a}if((d|0)==4){G=ww(192)|0;c[G>>2]=c[b>>2];c[G+4>>2]=c[b+4>>2];c[G+8>>2]=c[b+8>>2];c[G+12>>2]=c[b+12>>2];p=G+16|0;t=b+16|0;c[p>>2]=c[t>>2];c[p+4>>2]=c[t+4>>2];c[p+8>>2]=c[t+8>>2];c[p+12>>2]=c[t+12>>2];p=D+48|0;t=D+64|0;o=+h[t>>3];n=G+32|0;h[n>>3]=o;q=D+56|0;r=D+72|0;H=+h[r>>3];z=G+40|0;h[z>>3]=H;F=+h[p>>3]+o-+h[k>>3];u=G+48|0;h[u>>3]=F;J=+h[q>>3]+H-+h[D+40>>3];x=G+56|0;h[x>>3]=J;I=+h[t>>3]+F-+h[p>>3];p=G+64|0;h[p>>3]=I;m=+h[r>>3]+J-+h[q>>3];q=G+72|0;h[q>>3]=m;r=G+80|0;h[r>>3]=o+I-F;h[G+88>>3]=H+m-J;t=D+96|0;v=D+80|0;J=+h[v>>3];d=G+144|0;h[d>>3]=J;w=D+104|0;s=D+88|0;m=+h[s>>3];h[G+152>>3]=m;H=+h[t>>3]+J-+h[D+112>>3];y=G+128|0;h[y>>3]=H;F=+h[w>>3]+m-+h[D+120>>3];A=G+136|0;h[A>>3]=F;I=+h[v>>3]+H-+h[t>>3];t=G+112|0;h[t>>3]=I;o=+h[s>>3]+F-+h[w>>3];w=G+120|0;h[w>>3]=o;s=G+96|0;h[s>>3]=J+I-H;v=G+104|0;h[v>>3]=m+o-F;k=G+160|0;j=b+32|0;c[k>>2]=c[j>>2];c[k+4>>2]=c[j+4>>2];c[k+8>>2]=c[j+8>>2];c[k+12>>2]=c[j+12>>2];k=G+176|0;b=b+48|0;c[k>>2]=c[b>>2];c[k+4>>2]=c[b+4>>2];c[k+8>>2]=c[b+8>>2];c[k+12>>2]=c[b+12>>2];ID(a,G,12,f);c[B>>2]=c[n>>2];c[B+4>>2]=c[n+4>>2];c[B+8>>2]=c[n+8>>2];c[B+12>>2]=c[n+12>>2];F=+h[n>>3];o=+h[u>>3];F=F+F-o;u=B+16|0;h[u>>3]=F;m=+h[z>>3];H=+h[x>>3];m=m+m-H;x=B+24|0;h[x>>3]=m;z=B+32|0;h[z>>3]=+h[p>>3]+F-o;b=B+40|0;h[b>>3]=+h[q>>3]+m-H;f=B+48|0;c[f>>2]=c[r>>2];c[f+4>>2]=c[r+4>>2];c[f+8>>2]=c[r+8>>2];c[f+12>>2]=c[r+12>>2];LD(a,B,4);c[B>>2]=c[s>>2];c[B+4>>2]=c[s+4>>2];c[B+8>>2]=c[s+8>>2];c[B+12>>2]=c[s+12>>2];H=+h[s>>3];m=+h[t>>3];H=H-(m-H);h[u>>3]=H;o=+h[v>>3];F=+h[w>>3];o=o-(F-o);h[x>>3]=o;h[z>>3]=+h[y>>3]+H-m;h[b>>3]=+h[A>>3]+o-F;c[f>>2]=c[d>>2];c[f+4>>2]=c[d+4>>2];c[f+8>>2]=c[d+8>>2];c[f+12>>2]=c[d+12>>2];LD(a,B,4);$I(G);break}else ma(90472,90483,737,90492)}if((e|0)<117440512){switch(e|0){case 100663296:break;default:break a}y=d+5|0;G=ww(y<<4)|0;z=b+16|0;H=+h[z>>3];H=(+h[b>>3]-H)*.625+H;h[G>>3]=H;A=b+40|0;J=+h[A>>3];d=b+24|0;v=D+48|0;w=D+56|0;x=D+72|0;J=(+h[d>>3]-J)*.5+J+(+h[w>>3]-+h[x>>3])*1.5;h[G+8>>3]=J;I=+h[z>>3];I=(+h[b>>3]-I)*.25+I;h[G+16>>3]=I;h[G+24>>3]=J;h[G+32>>3]=I;F=+h[A>>3];h[G+40>>3]=(+h[d>>3]-F)*.5+F;I=(+h[k>>3]-+h[v>>3])*.5+I;h[G+48>>3]=I;F=+h[A>>3];h[G+56>>3]=(+h[d>>3]-F)*.5+F;h[G+64>>3]=I;I=+h[A>>3];I=(+h[d>>3]-I)*.5+I+(+h[w>>3]-+h[x>>3]);h[G+72>>3]=I;h[G+80>>3]=H;h[G+88>>3]=I;h[G+96>>3]=H;I=I-(+h[w>>3]-+h[x>>3])*.25;h[G+104>>3]=I;h[G+112>>3]=+h[k>>3]+H-+h[v>>3];h[G+120>>3]=(+h[w>>3]-+h[x>>3])*.5+I;h[G+128>>3]=+h[G>>3];h[G+136>>3]=(+h[w>>3]-+h[x>>3])*.25+J;ID(a,G,y,f);h[B>>3]=+h[z>>3];J=+h[A>>3];h[B+8>>3]=(+h[d>>3]-J)*.5+J;h[B+16>>3]=+h[b>>3];h[B+24>>3]=(+h[b+8>>3]-+h[b+56>>3])*.5+J;LD(a,B,2);$I(G);break}else{switch(e|0){case 117440512:break;default:break a}d=d+1|0;G=ww(d<<4)|0;h[G>>3]=+h[j>>3];z=D+56|0;A=D+72|0;h[G+8>>3]=+h[D+24>>3]-(+h[z>>3]-+h[A>>3])*.5;h[G+16>>3]=+h[D+48>>3];J=+h[z>>3];h[G+24>>3]=J-(J-+h[A>>3])*.5;h[G+32>>3]=+h[b+32>>3];B=b+40|0;h[G+40>>3]=(+h[z>>3]-+h[A>>3])*.5+ +h[B>>3];h[G+48>>3]=+h[j>>3];h[G+56>>3]=(+h[z>>3]-+h[A>>3])*.5+ +h[B>>3];J=+h[b+8>>3];h[G+72>>3]=J-(J-+h[b+56>>3])*.5;h[G+64>>3]=+h[b>>3];ID(a,G,d,f);$I(G);break}}if((e|0)<167772160)if((e|0)<150994944){switch(e|0){case 134217728:break;default:break a}y=d+4|0;G=ww(y<<4)|0;z=b+16|0;F=+h[z>>3];x=D+48|0;F=(+h[b>>3]-F)*.5+F+(+h[k>>3]-+h[x>>3])*.25;h[G>>3]=F;A=b+40|0;J=+h[A>>3];d=b+24|0;J=(+h[d>>3]-J)*.5+J;h[G+8>>3]=J;h[G+16>>3]=F;v=D+56|0;w=D+72|0;H=(+h[v>>3]-+h[w>>3])*.5+J;h[G+24>>3]=H;F=(+h[k>>3]-+h[x>>3])*.5+F;h[G+32>>3]=F;h[G+40>>3]=H;h[G+48>>3]=F;F=(+h[v>>3]-+h[w>>3])*.5+H;h[G+56>>3]=F;I=+h[z>>3];I=(+h[b>>3]-I)*.5+I+(+h[k>>3]-+h[x>>3])*-.75;h[G+64>>3]=I;h[G+72>>3]=F;h[G+80>>3]=I;h[G+88>>3]=H;I=+h[z>>3];I=(+h[b>>3]-I)*.5+I+(+h[k>>3]-+h[x>>3])*-.25;h[G+96>>3]=I;h[G+104>>3]=H;h[G+112>>3]=I;h[G+120>>3]=J;ID(a,G,y,f);h[B>>3]=+h[z>>3];J=+h[A>>3];h[B+8>>3]=(+h[d>>3]-J)*.5+J;h[B+16>>3]=+h[b>>3];h[B+24>>3]=(+h[b+8>>3]-+h[b+56>>3])*.5+J;LD(a,B,2);$I(G);break}else{switch(e|0){case 150994944:break;default:break a}y=d+2|0;G=ww(y<<4)|0;z=b+16|0;H=+h[z>>3];x=D+48|0;H=(+h[b>>3]-H)*.5+H+(+h[k>>3]-+h[x>>3])*.75;h[G>>3]=H;A=b+40|0;J=+h[A>>3];d=b+24|0;J=(+h[d>>3]-J)*.5+J;h[G+8>>3]=J;h[G+16>>3]=H;v=D+56|0;w=D+72|0;H=(+h[v>>3]-+h[w>>3])*.25+J;h[G+24>>3]=H;I=+h[z>>3];h[G+32>>3]=(+h[b>>3]-I)*.5+I+(+h[k>>3]-+h[x>>3])*.25;I=(+h[v>>3]-+h[w>>3])*.5+H;h[G+40>>3]=I;F=+h[z>>3];h[G+48>>3]=(+h[b>>3]-F)*.5+F+(+h[k>>3]-+h[x>>3])*-.25;h[G+56>>3]=I;I=+h[z>>3];I=(+h[b>>3]-I)*.5+I+(+h[k>>3]-+h[x>>3])*-.75;h[G+64>>3]=I;h[G+72>>3]=H;h[G+80>>3]=I;h[G+88>>3]=J;ID(a,G,y,f);h[B>>3]=+h[z>>3];J=+h[A>>3];h[B+8>>3]=(+h[d>>3]-J)*.5+J;h[B+16>>3]=+h[b>>3];h[B+24>>3]=(+h[b+8>>3]-+h[b+56>>3])*.5+J;LD(a,B,2);$I(G);break}else if((e|0)<184549376){switch(e|0){case 167772160:break;default:break a}y=d+1|0;G=ww(y<<4)|0;z=b+16|0;H=+h[z>>3];v=D+48|0;H=+h[k>>3]+H+(+h[b>>3]-H)*.5-+h[v>>3];h[G>>3]=H;A=b+40|0;J=+h[A>>3];d=b+24|0;w=D+56|0;x=D+72|0;J=(+h[d>>3]-J)*.5+J+(+h[w>>3]-+h[x>>3])*.25;h[G+8>>3]=J;H=H-+h[k>>3]+ +h[v>>3];h[G+16>>3]=H;h[G+24>>3]=+h[w>>3]+J-+h[x>>3];h[G+32>>3]=H;H=(+h[w>>3]-+h[x>>3])*.5+J;h[G+40>>3]=H;I=+h[z>>3];I=(+h[b>>3]-I)*.25+I;h[G+48>>3]=I;h[G+56>>3]=H;h[G+64>>3]=I;h[G+72>>3]=J;ID(a,G,y,f);h[B>>3]=+h[z>>3];J=+h[A>>3];h[B+8>>3]=(+h[d>>3]-J)*.5+J;h[B+16>>3]=+h[b>>3];h[B+24>>3]=(+h[b+8>>3]-+h[b+56>>3])*.5+J;LD(a,B,2);$I(G);break}else{switch(e|0){case 184549376:break;default:break a}z=d+4|0;G=ww(z<<4)|0;y=b+16|0;H=+h[y>>3];I=+h[b>>3]-H;u=D+48|0;I=I*.125+H+(+h[k>>3]-+h[u>>3]+I)*.5;h[G>>3]=I;w=b+40|0;H=+h[w>>3];x=b+24|0;d=D+56|0;v=D+72|0;H=(+h[x>>3]-H)*.5+H+(+h[d>>3]-+h[v>>3])*.25;h[G+8>>3]=H;J=+h[y>>3];J=(+h[b>>3]-J)*.375+J;h[G+16>>3]=J;h[G+24>>3]=H;h[G+32>>3]=J;H=(+h[d>>3]-+h[v>>3])*.5+H;h[G+40>>3]=H;J=J-(+h[k>>3]-+h[u>>3])*.5;h[G+48>>3]=J;h[G+56>>3]=H;A=G+64|0;h[A>>3]=J;J=+h[w>>3];J=(+h[x>>3]-J)*.5+J+(+h[d>>3]-+h[v>>3])*-.25;h[G+72>>3]=J;H=I-(+h[k>>3]-+h[u>>3])*.5;h[G+80>>3]=H;h[G+88>>3]=J;h[G+96>>3]=H;J=J-(+h[d>>3]-+h[v>>3])*.5;h[G+104>>3]=J;v=G+112|0;h[v>>3]=I;h[G+120>>3]=J;ID(a,G,z,f);h[B>>3]=+h[y>>3];J=+h[w>>3];y=B+8|0;h[y>>3]=(+h[x>>3]-J)*.5+J;z=B+16|0;h[z>>3]=+h[A>>3];A=b+8|0;d=b+56|0;f=B+24|0;h[f>>3]=(+h[A>>3]-+h[d>>3])*.5+J;LD(a,B,2);h[B>>3]=+h[v>>3];J=+h[w>>3];h[y>>3]=(+h[x>>3]-J)*.5+J;h[z>>3]=+h[b>>3];h[f>>3]=(+h[A>>3]-+h[d>>3])*.5+J;LD(a,B,2);$I(G);break}}if((e|0)<33554432){if((e|0)<8){switch(e|0){case 4:break;default:break a}i=xw((d*96|0)+32|0)|0;e=0;g=0;while(1){j=g|1;k=i+(g<<4)|0;if((e|0)>=(d|0))break;b=e<<2;G=D+(b<<4)|0;c[k>>2]=c[G>>2];c[k+4>>2]=c[G+4>>2];c[k+8>>2]=c[G+8>>2];c[k+12>>2]=c[G+12>>2];G=i+(j<<4)|0;B=D+((b|1)<<4)|0;c[G>>2]=c[B>>2];c[G+4>>2]=c[B+4>>2];c[G+8>>2]=c[B+8>>2];c[G+12>>2]=c[B+12>>2];G=i+(g+2<<4)|0;c[G>>2]=c[B>>2];c[G+4>>2]=c[B+4>>2];c[G+8>>2]=c[B+8>>2];c[G+12>>2]=c[B+12>>2];G=i+(g+3<<4)|0;B=D+((b|2)<<4)|0;c[G>>2]=c[B>>2];c[G+4>>2]=c[B+4>>2];c[G+8>>2]=c[B+8>>2];c[G+12>>2]=c[B+12>>2];G=i+(g+4<<4)|0;c[G>>2]=c[B>>2];c[G+4>>2]=c[B+4>>2];c[G+8>>2]=c[B+8>>2];c[G+12>>2]=c[B+12>>2];G=i+(g+5<<4)|0;b=D+((b|3)<<4)|0;c[G>>2]=c[b>>2];c[G+4>>2]=c[b+4>>2];c[G+8>>2]=c[b+8>>2];c[G+12>>2]=c[b+12>>2];e=e+1|0;g=g+6|0}c[k>>2]=c[i>>2];c[k+4>>2]=c[i+4>>2];c[k+8>>2]=c[i+8>>2];c[k+12>>2]=c[i+12>>2];d=i+(j<<4)|0;G=i+16|0;c[d>>2]=c[G>>2];c[d+4>>2]=c[G+4>>2];c[d+8>>2]=c[G+8>>2];c[d+12>>2]=c[G+12>>2];KD(a,G,j,0,0,f&255);$I(i);break}if((e|0)<16777216){switch(e|0){case 8:break;default:break a}ID(a,b,d,f);g=B+16|0;e=0;while(1){if((e|0)>=(d|0))break a;G=e*3|0;f=D+(G+2<<4)|0;c[B>>2]=c[f>>2];c[B+4>>2]=c[f+4>>2];c[B+8>>2]=c[f+8>>2];c[B+12>>2]=c[f+12>>2];G=D+(G+4<<4)|0;c[g>>2]=c[G>>2];c[g+4>>2]=c[G+4>>2];c[g+8>>2]=c[G+8>>2];c[g+12>>2]=c[G+12>>2];LD(a,B,2);e=e+1|0}}switch(e|0){case 16777216:break;default:break a}g=d+1|0;i=ww(g<<4)|0;e=1;while(1){if((e|0)>=(d|0))break;G=i+(e<<4)|0;A=b+(e<<4)|0;c[G>>2]=c[A>>2];c[G+4>>2]=c[A+4>>2];c[G+8>>2]=c[A+8>>2];c[G+12>>2]=c[A+12>>2];e=e+1|0}b=d*3|0;A=D+(b+1<<4)|0;c[i>>2]=c[A>>2];c[i+4>>2]=c[A+4>>2];c[i+8>>2]=c[A+8>>2];c[i+12>>2]=c[A+12>>2];d=i+(d<<4)|0;G=D+(b+-1<<4)|0;c[d>>2]=c[G>>2];c[d+4>>2]=c[G+4>>2];c[d+8>>2]=c[G+8>>2];c[d+12>>2]=c[G+12>>2];ID(a,i,g,f);$I(i);c[B>>2]=c[G>>2];c[B+4>>2]=c[G+4>>2];c[B+8>>2]=c[G+8>>2];c[B+12>>2]=c[G+12>>2];G=B+16|0;c[G>>2]=c[A>>2];c[G+4>>2]=c[A+4>>2];c[G+8>>2]=c[A+8>>2];c[G+12>>2]=c[A+12>>2];f=B+32|0;h[f>>3]=+h[B>>3]+ +h[G>>3]-+h[D+(b<<4)>>3];h[B+40>>3]=+h[B+8>>3]+ +h[B+24>>3]-+h[D+(b<<4)+8>>3];LD(a,G,2);c[G>>2]=c[f>>2];c[G+4>>2]=c[f+4>>2];c[G+8>>2]=c[f+8>>2];c[G+12>>2]=c[f+12>>2];LD(a,B,2);break}else{if((e|0)<50331648){switch(e|0){case 33554432:break;default:break a}g=d+2|0;i=ww(g<<4)|0;c[i>>2]=c[b>>2];c[i+4>>2]=c[b+4>>2];c[i+8>>2]=c[b+8>>2];c[i+12>>2]=c[b+12>>2];j=i+16|0;c[j>>2]=c[k>>2];c[j+4>>2]=c[k+4>>2];c[j+8>>2]=c[k+8>>2];c[j+12>>2]=c[k+12>>2];j=D+48|0;d=D+64|0;h[i+32>>3]=(+h[j>>3]-+h[d>>3])*.3333333333333333+ +h[k>>3];G=D+56|0;e=D+72|0;h[i+40>>3]=(+h[G>>3]-+h[e>>3])*.3333333333333333+ +h[D+40>>3];J=+h[j>>3];h[i+48>>3]=(J-+h[d>>3])*.3333333333333333+J;J=+h[G>>3];h[i+56>>3]=(J-+h[e>>3])*.3333333333333333+J;e=4;while(1){if((e|0)>=(g|0))break;G=i+(e<<4)|0;d=b+(e+-2<<4)|0;c[G>>2]=c[d>>2];c[G+4>>2]=c[d+4>>2];c[G+8>>2]=c[d+8>>2];c[G+12>>2]=c[d+12>>2];e=e+1|0}ID(a,i,g,f);$I(i);c[B>>2]=c[j>>2];c[B+4>>2]=c[j+4>>2];c[B+8>>2]=c[j+8>>2];c[B+12>>2]=c[j+12>>2];G=B+16|0;c[G>>2]=c[k>>2];c[G+4>>2]=c[k+4>>2];c[G+8>>2]=c[k+8>>2];c[G+12>>2]=c[k+12>>2];LD(a,B,2);break}if((e|0)>=67108864){switch(e|0){case 67108864:break;default:break a}if((d|0)==4){G=ww(96)|0;c[G>>2]=c[b>>2];c[G+4>>2]=c[b+4>>2];c[G+8>>2]=c[b+8>>2];c[G+12>>2]=c[b+12>>2];d=G+16|0;c[d>>2]=c[k>>2];c[d+4>>2]=c[k+4>>2];c[d+8>>2]=c[k+8>>2];c[d+12>>2]=c[k+12>>2];d=G+32|0;A=D+64|0;c[d>>2]=c[A>>2];c[d+4>>2]=c[A+4>>2];c[d+8>>2]=c[A+8>>2];c[d+12>>2]=c[A+12>>2];d=G+48|0;b=b+32|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];b=G+64|0;d=D+128|0;c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];c[b+12>>2]=c[d+12>>2];b=G+80|0;z=D+160|0;c[b>>2]=c[z>>2];c[b+4>>2]=c[z+4>>2];c[b+8>>2]=c[z+8>>2];c[b+12>>2]=c[z+12>>2];ID(a,G,6,f);$I(G);h[B>>3]=+h[D+176>>3]+ +h[j>>3]-+h[D>>3];h[B+8>>3]=+h[D+184>>3]+ +h[D+24>>3]-+h[D+8>>3];G=B+16|0;c[G>>2]=c[A>>2];c[G+4>>2]=c[A+4>>2];c[G+8>>2]=c[A+8>>2];c[G+12>>2]=c[A+12>>2];LD(a,B,2);c[G>>2]=c[d>>2];c[G+4>>2]=c[d+4>>2];c[G+8>>2]=c[d+8>>2];c[G+12>>2]=c[d+12>>2];LD(a,B,2);c[G>>2]=c[D>>2];c[G+4>>2]=c[D+4>>2];c[G+8>>2]=c[D+8>>2];c[G+12>>2]=c[D+12>>2];LD(a,B,2);break}else ma(90472,90483,714,90492)}switch(e|0){case 50331648:break;default:break a}g=d+3|0;i=ww(g<<4)|0;c[i>>2]=c[b>>2];c[i+4>>2]=c[b+4>>2];c[i+8>>2]=c[b+8>>2];c[i+12>>2]=c[b+12>>2];J=+h[b>>3];h[i+16>>3]=J-(J-+h[j>>3])*.25;e=D+56|0;J=(+h[e>>3]-+h[D+72>>3])*.3333333333333333+ +h[b+8>>3];h[i+24>>3]=J;I=+h[b>>3];h[i+32>>3]=I-(I-+h[j>>3])*2.0;h[i+40>>3]=J;J=+h[b>>3];h[i+48>>3]=J-(J-+h[j>>3])*2.25;h[i+56>>3]=+h[e>>3];h[i+64>>3]=+h[D+48>>3];h[i+72>>3]=+h[e>>3];e=4;while(1){if((e|0)>=(g|0))break;G=i+(e<<4)|0;d=b+(e+-3<<4)|0;c[G>>2]=c[d>>2];c[G+4>>2]=c[d+4>>2];c[G+8>>2]=c[d+8>>2];c[G+12>>2]=c[d+12>>2];e=e+1|0}ID(a,i,g,f);$I(i);break}}else if((e|0)<318767104){if((e|0)<251658240){if((e|0)<218103808){switch(e|0){case 201326592:break;default:break a}G=d<<4;u=ww(G)|0;v=b+16|0;J=+h[v>>3];h[u>>3]=J;z=b+40|0;I=+h[z>>3];A=b+24|0;y=D+48|0;w=D+56|0;x=D+72|0;I=(+h[A>>3]-I)*.5+I+(+h[w>>3]-+h[x>>3])*.125;h[u+8>>3]=I;H=(+h[k>>3]-+h[y>>3])*2.0+J;h[u+16>>3]=H;h[u+24>>3]=I;h[u+32>>3]=H;I=(+h[w>>3]-+h[x>>3])*.5+I;h[u+40>>3]=I;h[u+48>>3]=J;h[u+56>>3]=I;ID(a,u,d,f);$I(u);G=ww(G)|0;I=+h[k>>3]+ +h[v>>3]-+h[y>>3];h[G>>3]=I;J=+h[z>>3];J=(+h[A>>3]-J)*.5+J+(+h[w>>3]-+h[x>>3])*-.625;h[G+8>>3]=J;H=+h[k>>3]-+h[y>>3]+I;y=G+16|0;h[y>>3]=H;h[G+24>>3]=J;h[G+32>>3]=H;J=(+h[w>>3]-+h[x>>3])*.5+J;h[G+40>>3]=J;h[G+48>>3]=I;h[G+56>>3]=J;ID(a,G,d,f);h[B>>3]=+h[y>>3];J=+h[z>>3];h[B+8>>3]=(+h[A>>3]-J)*.5+J;h[B+16>>3]=+h[b>>3];h[B+24>>3]=(+h[b+8>>3]-+h[b+56>>3])*.5+J;LD(a,B,2);$I(G);break}if((e|0)<234881024){switch(e|0){case 218103808:break;default:break a}G=d<<4;w=ww(G)|0;J=+h[b>>3];h[w>>3]=J;y=b+40|0;I=+h[y>>3];z=b+24|0;x=D+56|0;A=D+72|0;I=(+h[z>>3]-I)*.5+I+(+h[x>>3]-+h[A>>3])*.125;h[w+8>>3]=I;h[w+16>>3]=J;H=(+h[x>>3]-+h[A>>3])*.5+I;h[w+24>>3]=H;J=J-(+h[x>>3]-+h[A>>3])*2.0;h[w+32>>3]=J;h[w+40>>3]=H;h[w+48>>3]=J;h[w+56>>3]=I;ID(a,w,d,f);$I(w);G=ww(G)|0;I=+h[b>>3]-+h[k>>3]+ +h[D+48>>3];h[G>>3]=I;J=+h[y>>3];J=(+h[z>>3]-J)*.5+J+(+h[x>>3]-+h[A>>3])*-.625;h[G+8>>3]=J;h[G+16>>3]=I;H=(+h[x>>3]-+h[A>>3])*.5+J;h[G+24>>3]=H;I=I-(+h[x>>3]-+h[A>>3]);h[G+32>>3]=I;h[G+40>>3]=H;A=G+48|0;h[A>>3]=I;h[G+56>>3]=J;ID(a,G,d,f);h[B>>3]=+h[b+16>>3];J=+h[y>>3];h[B+8>>3]=(+h[z>>3]-J)*.5+J;h[B+16>>3]=+h[A>>3];h[B+24>>3]=(+h[b+8>>3]-+h[b+56>>3])*.5+J;LD(a,B,2);$I(G);break}else{switch(e|0){case 234881024:break;default:break a}G=d<<4;y=ww(G)|0;u=b+16|0;I=+h[u>>3];v=D+48|0;I=(+h[b>>3]-I)*.5+I+(+h[k>>3]-+h[v>>3])*-1.125;h[y>>3]=I;w=b+40|0;J=+h[w>>3];x=b+24|0;A=D+56|0;z=D+72|0;J=(+h[x>>3]-J)*.5+J+(+h[A>>3]-+h[z>>3])*.125;h[y+8>>3]=J;H=+h[k>>3]-+h[v>>3]+I;h[y+16>>3]=H;h[y+24>>3]=J;h[y+32>>3]=H;J=(+h[A>>3]-+h[z>>3])*.5+J;h[y+40>>3]=J;h[y+48>>3]=I;h[y+56>>3]=J;ID(a,y,d,f);$I(y);y=ww(G)|0;J=+h[u>>3];J=(+h[b>>3]-J)*.5+J+(+h[k>>3]-+h[v>>3])*-1.125;h[y>>3]=J;I=+h[w>>3];I=(+h[x>>3]-I)*.5+I+(+h[A>>3]-+h[z>>3])*-.625;h[y+8>>3]=I;H=+h[k>>3]-+h[v>>3]+J;h[y+16>>3]=H;h[y+24>>3]=I;h[y+32>>3]=H;I=(+h[A>>3]-+h[z>>3])*.5+I;h[y+40>>3]=I;h[y+48>>3]=J;h[y+56>>3]=I;ID(a,y,d,f);$I(y);y=ww(G)|0;I=+h[u>>3];I=(+h[b>>3]-I)*.5+I+(+h[k>>3]-+h[v>>3])*.125;h[y>>3]=I;J=+h[w>>3];J=(+h[x>>3]-J)*.5+J+(+h[A>>3]-+h[z>>3])*-.625;h[y+8>>3]=J;H=+h[k>>3]-+h[v>>3]+I;h[y+16>>3]=H;h[y+24>>3]=J;h[y+32>>3]=H;J=(+h[A>>3]-+h[z>>3])*.5+J;h[y+40>>3]=J;h[y+48>>3]=I;h[y+56>>3]=J;ID(a,y,d,f);$I(y);G=ww(G)|0;J=+h[u>>3];J=(+h[b>>3]-J)*.5+J+(+h[k>>3]-+h[v>>3])*.125;h[G>>3]=J;I=+h[w>>3];I=(+h[x>>3]-I)*.5+I+(+h[A>>3]-+h[z>>3])*.125;h[G+8>>3]=I;H=+h[k>>3]-+h[v>>3]+J;y=G+16|0;h[y>>3]=H;h[G+24>>3]=I;h[G+32>>3]=H;I=(+h[A>>3]-+h[z>>3])*.5+I;h[G+40>>3]=I;h[G+48>>3]=J;h[G+56>>3]=I;ID(a,G,d,f);h[B>>3]=+h[y>>3];I=+h[w>>3];y=B+8|0;h[y>>3]=(+h[x>>3]-I)*.5+I;z=B+16|0;h[z>>3]=+h[b>>3];A=b+8|0;d=b+56|0;f=B+24|0;h[f>>3]=(+h[A>>3]-+h[d>>3])*.5+I;LD(a,B,2);I=+h[u>>3];h[B>>3]=(+h[b>>3]-I)*.5+I+(+h[k>>3]-+h[v>>3])*-1.125;J=+h[w>>3];h[y>>3]=(+h[x>>3]-J)*.5+J;h[z>>3]=I;h[f>>3]=(+h[A>>3]-+h[d>>3])*.5+J;LD(a,B,2);$I(G);break}}if((e|0)<285212672)if((e|0)<268435456){switch(e|0){case 251658240:break;default:break a}G=d<<4;u=ww(G)|0;v=b+16|0;J=+h[v>>3];y=D+48|0;J=J-+h[k>>3]+(+h[b>>3]-J)*.5+ +h[y>>3];h[u>>3]=J;w=b+40|0;I=+h[w>>3];x=b+24|0;A=D+56|0;z=D+72|0;I=(+h[x>>3]-I)*.5+I+(+h[A>>3]-+h[z>>3])*.125;h[u+8>>3]=I;H=(+h[k>>3]-+h[y>>3])*2.0+J;h[u+16>>3]=H;h[u+24>>3]=I;h[u+32>>3]=H;I=(+h[A>>3]-+h[z>>3])*.5+I;h[u+40>>3]=I;h[u+48>>3]=J;h[u+56>>3]=I;ID(a,u,d,f);$I(u);G=ww(G)|0;I=+h[v>>3];I=I-+h[k>>3]+(+h[b>>3]-I)*.5+ +h[y>>3];h[G>>3]=I;J=+h[w>>3];J=(+h[x>>3]-J)*.5+J+(+h[A>>3]-+h[z>>3])*-.625;h[G+8>>3]=J;H=(+h[k>>3]-+h[y>>3])*2.0+I;y=G+16|0;h[y>>3]=H;h[G+24>>3]=J;h[G+32>>3]=H;J=(+h[A>>3]-+h[z>>3])*.5+J;h[G+40>>3]=J;h[G+48>>3]=I;h[G+56>>3]=J;ID(a,G,d,f);h[B>>3]=+h[y>>3];J=+h[w>>3];y=B+8|0;h[y>>3]=(+h[x>>3]-J)*.5+J;z=B+16|0;h[z>>3]=+h[b>>3];A=b+8|0;d=b+56|0;f=B+24|0;h[f>>3]=(+h[A>>3]-+h[d>>3])*.5+J;LD(a,B,2);h[B>>3]=+h[v>>3];J=+h[w>>3];h[y>>3]=(+h[x>>3]-J)*.5+J;h[z>>3]=+h[G>>3];h[f>>3]=(+h[A>>3]-+h[d>>3])*.5+J;LD(a,B,2);$I(G);break}else{switch(e|0){case 268435456:break;default:break a}G=ww(d<<4)|0;h[G>>3]=+h[b>>3];v=D+48|0;x=D+56|0;y=D+72|0;h[G+8>>3]=+h[D+24>>3]-(+h[x>>3]-+h[y>>3])*.5;h[G+16>>3]=+h[v>>3];J=+h[x>>3];h[G+24>>3]=J-(J-+h[y>>3])*.5;h[G+32>>3]=+h[b+32>>3];z=b+40|0;h[G+40>>3]=(+h[x>>3]-+h[y>>3])*.5+ +h[z>>3];h[G+48>>3]=+h[b>>3];h[G+56>>3]=(+h[x>>3]-+h[y>>3])*.5+ +h[z>>3];ID(a,G,d,f);w=b+16|0;J=(+h[k>>3]-+h[v>>3])*.25;I=J+ +h[w>>3];h[B>>3]=I;H=+h[z>>3];u=b+24|0;F=+h[x>>3]-+h[y>>3];H=(+h[u>>3]-H)*.5+H+F*.125;A=B+8|0;h[A>>3]=H;d=B+16|0;h[d>>3]=J+I;f=B+24|0;h[f>>3]=H-F*.25;LD(a,B,2);F=(+h[k>>3]-+h[v>>3])*.25;H=F+ +h[w>>3];h[B>>3]=H;I=+h[z>>3];J=+h[x>>3]-+h[y>>3];I=(+h[u>>3]-I)*.5+I+J*-.125;h[A>>3]=I;h[d>>3]=F+H;h[f>>3]=J*.25+I;LD(a,B,2);I=(+h[k>>3]-+h[v>>3])*.25;h[B>>3]=I+ +h[w>>3];J=(+h[x>>3]-+h[y>>3])*.75+ +h[z>>3];h[A>>3]=J;h[d>>3]=+h[b>>3]-I;h[f>>3]=J;LD(a,B,2);$I(G);break}else if((e|0)<301989888){switch(e|0){case 285212672:break;default:break a}y=ww(d<<4)|0;v=b+16|0;I=+h[v>>3];z=D+48|0;I=(+h[k>>3]-+h[z>>3]+(+h[b>>3]-I))*.5+I;h[y>>3]=I;w=b+40|0;F=+h[w>>3];x=b+24|0;F=(+h[k>>3]-+h[z>>3]+(+h[x>>3]-F))*.5+F;h[y+8>>3]=F;h[y+16>>3]=I;I=+h[w>>3];o=+h[k>>3]-+h[z>>3];I=(+h[x>>3]-I-o)*.5+I;h[y+24>>3]=I;J=+h[v>>3];J=(+h[b>>3]-J-o)*.5+J;h[y+32>>3]=J;h[y+40>>3]=I;h[y+48>>3]=J;h[y+56>>3]=F;ID(a,y,d,f);$I(y);F=+h[v>>3];F=(+h[b>>3]-F)*.5+F;J=+h[k>>3]-+h[z>>3];I=J*.75;o=F+I;h[B>>3]=o;H=+h[w>>3];H=(+h[x>>3]-H)*.5+H;I=H+I;y=B+8|0;h[y>>3]=I;A=B+16|0;h[A>>3]=o;J=J*-.75;H=H+J;G=B+24|0;h[G>>3]=H;J=F+J;h[B+32>>3]=J;h[B+40>>3]=H;h[B+48>>3]=J;h[B+56>>3]=I;d=B+64|0;c[d>>2]=c[B>>2];c[d+4>>2]=c[B+4>>2];c[d+8>>2]=c[B+8>>2];c[d+12>>2]=c[B+12>>2];LD(a,B,5);I=+h[v>>3];J=+h[b>>3];h[B>>3]=(J-I)*.5+I+(+h[k>>3]-+h[z>>3])*.75;I=+h[w>>3];h[y>>3]=(+h[x>>3]-I)*.5+I;h[A>>3]=J;d=b+8|0;f=b+56|0;h[G>>3]=(+h[d>>3]-+h[f>>3])*.5+I;LD(a,B,2);I=+h[v>>3];h[B>>3]=I;J=+h[w>>3];h[y>>3]=(+h[x>>3]-J)*.5+J;h[A>>3]=(+h[b>>3]-I)*.5+I+(+h[k>>3]-+h[z>>3])*-.75;h[G>>3]=(+h[d>>3]-+h[f>>3])*.5+J;LD(a,B,2);break}else{switch(e|0){case 301989888:break;default:break a}A=d+12|0;G=ww(A<<4)|0;x=b+16|0;m=+h[x>>3];s=D+48|0;m=(+h[b>>3]-m)*.5+m+(+h[k>>3]-+h[s>>3])*.25;h[G>>3]=m;y=b+40|0;F=+h[y>>3];z=b+24|0;v=D+56|0;w=D+72|0;F=(+h[v>>3]-+h[w>>3]+(+h[z>>3]-F))*.5+F;u=G+8|0;h[u>>3]=F;h[G+16>>3]=m;F=(+h[v>>3]-+h[w>>3])*.125+F;t=G+24|0;h[t>>3]=F;H=m-(+h[k>>3]-+h[s>>3])*.125;d=G+32|0;h[d>>3]=H;o=(+h[v>>3]-+h[w>>3])*.125+F;h[G+40>>3]=o;h[G+48>>3]=m;I=(+h[v>>3]-+h[w>>3])*.125+o;h[G+56>>3]=I;h[G+64>>3]=m;m=(+h[v>>3]-+h[w>>3])*.125+I;h[G+72>>3]=m;h[G+80>>3]=H;h[G+88>>3]=m;H=+h[x>>3];H=(+h[b>>3]-H)*.5+H;h[G+96>>3]=H;h[G+104>>3]=I;J=H-(+h[k>>3]-+h[s>>3])*.125;h[G+112>>3]=J;h[G+120>>3]=m;J=J-(+h[k>>3]-+h[s>>3])*.125;h[G+128>>3]=J;h[G+136>>3]=m;h[G+144>>3]=J;h[G+152>>3]=I;I=(+h[k>>3]-+h[s>>3])*.125+J;h[G+160>>3]=I;h[G+168>>3]=o;h[G+176>>3]=J;h[G+184>>3]=F;h[G+192>>3]=J;J=+h[u>>3];h[G+200>>3]=J;h[G+208>>3]=I;h[G+216>>3]=J;u=G+224|0;h[u>>3]=H;h[G+232>>3]=+h[t>>3];h[G+240>>3]=+h[d>>3];h[G+248>>3]=J;ID(a,G,A,f);J=+h[u>>3];h[B>>3]=J;H=+h[y>>3];H=(+h[z>>3]-H)*.5+H;A=B+8|0;h[A>>3]=H;d=B+16|0;h[d>>3]=J;f=B+24|0;h[f>>3]=(+h[v>>3]-+h[w>>3])*.125+H;LD(a,B,2);H=+h[u>>3];h[B>>3]=H;J=+h[y>>3];I=+h[v>>3]-+h[w>>3];J=(+h[z>>3]-J)*.5+J+I*.25;h[A>>3]=J;h[d>>3]=H;h[f>>3]=I*.125+J;LD(a,B,2);h[B>>3]=+h[x>>3];J=+h[y>>3];h[A>>3]=(+h[z>>3]-J)*.5+J;h[d>>3]=+h[b>>3];h[f>>3]=(+h[b+8>>3]-+h[b+56>>3])*.5+J;LD(a,B,2);$I(G);break}}else{if((e|0)<369098752){if((e|0)<335544320){switch(e|0){case 318767104:break;default:break a}A=d+4|0;G=ww(A<<4)|0;x=b+16|0;H=+h[x>>3];d=D+48|0;H=(+h[b>>3]-H)*.5+H+(+h[k>>3]-+h[d>>3])*.125;h[G>>3]=H;y=b+40|0;J=+h[y>>3];z=b+24|0;v=D+56|0;w=D+72|0;J=(+h[v>>3]-+h[w>>3]+(+h[z>>3]-J))*.5+J;h[G+8>>3]=J;o=(+h[k>>3]-+h[d>>3])*.125+H;h[G+16>>3]=o;I=(+h[v>>3]-+h[w>>3])*.125+J;h[G+24>>3]=I;h[G+32>>3]=o;o=(+h[v>>3]-+h[w>>3])*.25+I;h[G+40>>3]=o;h[G+48>>3]=H;F=(+h[v>>3]-+h[w>>3])*.125+o;h[G+56>>3]=F;H=H-(+h[k>>3]-+h[d>>3])*.25;h[G+64>>3]=H;h[G+72>>3]=F;F=H-(+h[k>>3]-+h[d>>3])*.125;h[G+80>>3]=F;h[G+88>>3]=o;h[G+96>>3]=F;h[G+104>>3]=I;h[G+112>>3]=H;h[G+120>>3]=J;ID(a,G,A,f);J=+h[x>>3];J=(+h[b>>3]-J)*.5+J;h[B>>3]=J;H=+h[y>>3];H=(+h[z>>3]-H)*.5+H;A=B+8|0;h[A>>3]=H;d=B+16|0;h[d>>3]=J;f=B+24|0;h[f>>3]=(+h[v>>3]-+h[w>>3])*.125+H;LD(a,B,2);H=+h[x>>3];H=(+h[b>>3]-H)*.5+H;h[B>>3]=H;J=+h[y>>3];I=+h[v>>3]-+h[w>>3];J=(+h[z>>3]-J)*.5+J+I*.25;h[A>>3]=J;h[d>>3]=H;h[f>>3]=I*.125+J;LD(a,B,2);h[B>>3]=+h[x>>3];J=+h[y>>3];h[A>>3]=(+h[z>>3]-J)*.5+J;h[d>>3]=+h[b>>3];h[f>>3]=(+h[b+8>>3]-+h[b+56>>3])*.5+J;LD(a,B,2);$I(G);break}if((e|0)<352321536){switch(e|0){case 335544320:break;default:break a}x=d+12|0;G=ww(x<<4)|0;y=b+16|0;m=+h[y>>3];u=D+48|0;m=(+h[b>>3]-m)*.5+m+(+h[k>>3]-+h[u>>3])*.25;h[G>>3]=m;z=b+40|0;F=+h[z>>3];A=b+24|0;s=D+56|0;t=D+72|0;F=(+h[s>>3]-+h[t>>3]+(+h[A>>3]-F))*.5+F;d=G+8|0;h[d>>3]=F;h[G+16>>3]=m;F=(+h[s>>3]-+h[t>>3])*.125+F;v=G+24|0;h[v>>3]=F;I=m-(+h[k>>3]-+h[u>>3])*.125;w=G+32|0;h[w>>3]=I;o=(+h[s>>3]-+h[t>>3])*.125+F;h[G+40>>3]=o;h[G+48>>3]=m;H=(+h[s>>3]-+h[t>>3])*.125+o;h[G+56>>3]=H;h[G+64>>3]=m;m=(+h[s>>3]-+h[t>>3])*.125+H;h[G+72>>3]=m;h[G+80>>3]=I;h[G+88>>3]=m;I=+h[y>>3];I=(+h[b>>3]-I)*.5+I;h[G+96>>3]=I;h[G+104>>3]=H;J=I-(+h[k>>3]-+h[u>>3])*.125;h[G+112>>3]=J;h[G+120>>3]=m;J=J-(+h[k>>3]-+h[u>>3])*.125;h[G+128>>3]=J;h[G+136>>3]=m;h[G+144>>3]=J;h[G+152>>3]=H;H=(+h[k>>3]-+h[u>>3])*.125+J;h[G+160>>3]=H;h[G+168>>3]=o;h[G+176>>3]=J;h[G+184>>3]=F;h[G+192>>3]=J;J=+h[d>>3];h[G+200>>3]=J;h[G+208>>3]=H;h[G+216>>3]=J;d=G+224|0;h[d>>3]=I;h[G+232>>3]=+h[v>>3];h[G+240>>3]=+h[w>>3];h[G+248>>3]=J;ID(a,G,x,f);c[B>>2]=c[d>>2];c[B+4>>2]=c[d+4>>2];c[B+8>>2]=c[d+8>>2];c[B+12>>2]=c[d+12>>2];d=B+16|0;h[d>>3]=+h[B>>3];J=+h[z>>3];f=B+24|0;h[f>>3]=(+h[A>>3]-J)*.5+J;LD(a,B,2);h[B>>3]=+h[y>>3];J=+h[z>>3];h[B+8>>3]=(+h[A>>3]-J)*.5+J;h[d>>3]=+h[b>>3];h[f>>3]=(+h[b+8>>3]-+h[b+56>>3])*.5+J;LD(a,B,2);$I(G);break}else{switch(e|0){case 352321536:break;default:break a}A=d+4|0;G=ww(A<<4)|0;x=b+16|0;I=+h[x>>3];w=D+48|0;I=(+h[b>>3]-I)*.5+I+(+h[k>>3]-+h[w>>3])*.125;h[G>>3]=I;y=b+40|0;J=+h[y>>3];z=b+24|0;u=D+56|0;v=D+72|0;J=(+h[u>>3]-+h[v>>3]+(+h[z>>3]-J))*.5+J;d=G+8|0;h[d>>3]=J;o=(+h[k>>3]-+h[w>>3])*.125+I;h[G+16>>3]=o;H=(+h[u>>3]-+h[v>>3])*.125+J;h[G+24>>3]=H;h[G+32>>3]=o;o=(+h[u>>3]-+h[v>>3])*.25+H;h[G+40>>3]=o;h[G+48>>3]=I;F=(+h[u>>3]-+h[v>>3])*.125+o;h[G+56>>3]=F;I=I-(+h[k>>3]-+h[w>>3])*.25;h[G+64>>3]=I;h[G+72>>3]=F;F=I-(+h[k>>3]-+h[w>>3])*.125;h[G+80>>3]=F;h[G+88>>3]=o;h[G+96>>3]=F;h[G+104>>3]=H;h[G+112>>3]=I;h[G+120>>3]=J;ID(a,G,A,f);J=+h[x>>3];J=(+h[b>>3]-J)*.5+J;h[B>>3]=J;A=B+8|0;h[A>>3]=+h[d>>3];d=B+16|0;h[d>>3]=J;J=+h[y>>3];f=B+24|0;h[f>>3]=(+h[z>>3]-J)*.5+J;LD(a,B,2);h[B>>3]=+h[x>>3];J=+h[y>>3];h[A>>3]=(+h[z>>3]-J)*.5+J;h[d>>3]=+h[b>>3];h[f>>3]=(+h[b+8>>3]-+h[b+56>>3])*.5+J;LD(a,B,2);$I(G);break}}if((e|0)<402653184)if((e|0)<385875968){switch(e|0){case 369098752:break;default:break a}d=d+5|0;G=ww(d<<4)|0;B=D+48|0;h[G>>3]=+h[j>>3]-(+h[k>>3]-+h[B>>3])*.5;y=D+56|0;A=D+72|0;h[G+8>>3]=+h[D+24>>3]-(+h[y>>3]-+h[A>>3])*.5;h[G+16>>3]=+h[B>>3];J=+h[y>>3];h[G+24>>3]=J-(J-+h[A>>3])*.5;h[G+32>>3]=+h[b+32>>3];z=b+40|0;h[G+40>>3]=+h[z>>3];J=+h[k>>3];h[G+48>>3]=(J-+h[B>>3])*.5+J;h[G+56>>3]=+h[z>>3];J=+h[k>>3];h[G+64>>3]=(J-+h[B>>3])*.5+J;h[G+72>>3]=(+h[y>>3]-+h[A>>3])*.5+ +h[z>>3];h[G+80>>3]=+h[j>>3]-(+h[k>>3]-+h[B>>3])*.5;h[G+88>>3]=(+h[y>>3]-+h[A>>3])*.5+ +h[z>>3];h[G+96>>3]=+h[j>>3]-(+h[k>>3]-+h[B>>3])*.5;z=b+56|0;h[G+104>>3]=+h[z>>3];A=b+8|0;J=+h[A>>3];h[G+120>>3]=J-(J-+h[z>>3])*.5;h[G+112>>3]=+h[b>>3];h[G+136>>3]=+h[A>>3];h[G+128>>3]=+h[j>>3]-(+h[k>>3]-+h[B>>3])*.5;ID(a,G,d,f);$I(G);break}else{switch(e|0){case 385875968:break;default:break a}d=d+3|0;G=ww(d<<4)|0;B=D+48|0;h[G>>3]=+h[j>>3]-(+h[k>>3]-+h[B>>3])*.5;y=D+56|0;A=D+72|0;h[G+8>>3]=+h[D+24>>3]-(+h[y>>3]-+h[A>>3])*.5;h[G+16>>3]=+h[B>>3];J=+h[y>>3];h[G+24>>3]=J-(J-+h[A>>3])*.5;h[G+32>>3]=+h[b+32>>3];z=b+40|0;h[G+40>>3]=(+h[y>>3]-+h[A>>3])*.5+ +h[z>>3];h[G+48>>3]=+h[j>>3]-(+h[k>>3]-+h[B>>3])*.5;h[G+56>>3]=(+h[y>>3]-+h[A>>3])*.5+ +h[z>>3];h[G+64>>3]=+h[j>>3]-(+h[k>>3]-+h[B>>3])*.5;z=b+56|0;h[G+72>>3]=+h[z>>3];A=b+8|0;J=+h[A>>3];h[G+88>>3]=J-(J-+h[z>>3])*.5;h[G+80>>3]=+h[b>>3];h[G+104>>3]=+h[A>>3];h[G+96>>3]=+h[j>>3]-(+h[k>>3]-+h[B>>3])*.5;ID(a,G,d,f);$I(G);break}else if((e|0)<419430400){switch(e|0){case 402653184:break;default:break a}d=d+3|0;G=ww(d<<4)|0;h[G>>3]=+h[b>>3];y=b+8|0;z=D+48|0;A=D+56|0;B=D+72|0;h[G+8>>3]=+h[y>>3]-(+h[A>>3]-+h[B>>3])*.5;J=+h[k>>3];h[G+16>>3]=(J-+h[z>>3])*.5+J;h[G+24>>3]=+h[y>>3]-(+h[A>>3]-+h[B>>3])*.5;J=+h[k>>3];h[G+32>>3]=(J-+h[z>>3])*.5+J;h[G+40>>3]=+h[D+40>>3];h[G+48>>3]=+h[b+16>>3];J=+h[b+24>>3];y=b+40|0;h[G+56>>3]=J-(J-+h[y>>3])*.5;J=+h[k>>3];h[G+64>>3]=(J-+h[z>>3])*.5+J;h[G+72>>3]=+h[y>>3];h[G+88>>3]=(+h[A>>3]-+h[B>>3])*.5+ +h[y>>3];J=+h[k>>3];h[G+80>>3]=(J-+h[z>>3])*.5+J;h[G+104>>3]=(+h[A>>3]-+h[B>>3])*.5+ +h[b+56>>3];h[G+96>>3]=+h[b>>3];ID(a,G,d,f);$I(G);break}else{switch(e|0){case 419430400:break;default:break a}d=d+5|0;G=ww(d<<4)|0;h[G>>3]=+h[b>>3];B=b+8|0;A=D+48|0;y=D+56|0;z=D+72|0;h[G+8>>3]=+h[B>>3]-(+h[y>>3]-+h[z>>3])*.5;J=+h[k>>3];h[G+16>>3]=(J-+h[A>>3])*.5+J;h[G+24>>3]=+h[B>>3]-(+h[y>>3]-+h[z>>3])*.5;J=+h[k>>3];h[G+32>>3]=(J-+h[A>>3])*.5+J;h[G+40>>3]=+h[D+40>>3];h[G+48>>3]=+h[b+16>>3];J=+h[b+24>>3];B=b+40|0;h[G+56>>3]=J-(J-+h[B>>3])*.5;J=+h[k>>3];h[G+64>>3]=(J-+h[A>>3])*.5+J;h[G+72>>3]=+h[B>>3];h[G+88>>3]=(+h[y>>3]-+h[z>>3])*.5+ +h[B>>3];J=+h[k>>3];h[G+80>>3]=(J-+h[A>>3])*.5+J;B=b+56|0;h[G+104>>3]=(+h[y>>3]-+h[z>>3])*.5+ +h[B>>3];h[G+96>>3]=+h[j>>3]-(+h[k>>3]-+h[A>>3])*.5;h[G+112>>3]=+h[j>>3]-(+h[k>>3]-+h[A>>3])*.5;h[G+120>>3]=+h[B>>3];h[G+128>>3]=+h[b+48>>3];h[G+136>>3]=+h[B>>3];ID(a,G,d,f);$I(G);break}}while(0);$I(D)}l=E;return}function Ay(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0.0;f=l;l=l+112|0;g=f;k=+h[b+8>>3]*2.0;c[g>>2]=c[b>>2];c[g+4>>2]=c[b+4>>2];c[g+8>>2]=c[b+8>>2];c[g+12>>2]=c[b+12>>2];h[g+16>>3]=+h[b+16>>3];h[g+24>>3]=k-+h[b+24>>3];h[g+32>>3]=+h[b+32>>3];h[g+40>>3]=k-+h[b+40>>3];h[g+48>>3]=+h[b+48>>3];h[g+56>>3]=k-+h[b+56>>3];h[g+64>>3]=+h[b+64>>3];h[g+72>>3]=k-+h[b+72>>3];h[g+80>>3]=+h[b+80>>3];h[g+88>>3]=k-+h[b+88>>3];i=g+96|0;j=b+96|0;c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];c[i+12>>2]=c[j+12>>2];KD(a,b,d,0,0,e&255);KD(a,g,7,0,0,0);l=f;return}function By(a,b,c,d){a=a|0;b=+b;c=c|0;d=d|0;var e=0.0,f=0.0;f=+h[c>>3];e=+h[c+8>>3];e=(+h[d+8>>3]-e)*b+e;h[a>>3]=(+h[d>>3]-f)*b+f;h[a+8>>3]=e;return}function Cy(a){a=a|0;a=c[(c[a+16>>2]|0)+8>>2]|0;if(a){a=c[c[a+4>>2]>>2]|0;if((a|0)!=75)if((a|0)==78)a=2;else return ((a|0)==77?3:(a|0)==80?4:0)|0;else a=1}else a=0;return a|0}function Dy(b){b=b|0;var d=0,e=0,f=0.0,g=0,i=0,j=0,k=0.0,m=0.0,n=0.0,o=0.0,p=0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0,D=0,G=0,H=0,I=0,J=0,L=0,M=0,N=0,P=0.0,Q=0.0,R=0,S=0,T=0.0,U=0.0,V=0.0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0.0;aa=l;l=l+144|0;J=aa+112|0;N=aa+104|0;G=aa+96|0;H=aa+88|0;i=aa+80|0;Y=aa+64|0;_=aa+48|0;R=aa+40|0;S=aa+32|0;j=aa+24|0;p=aa+16|0;D=aa+136|0;A=aa+128|0;L=aa;$=ww(48)|0;Z=b+16|0;W=c[(c[(c[Z>>2]|0)+8>>2]|0)+8>>2]|0;g=(W|0)==1552;X=c[W>>2]|0;d=c[W+4>>2]|0;e=c[W+8>>2]|0;m=+h[W+16>>3];n=+h[W+32>>3];o=+h[W+24>>3];X=X|(JA(Jm(b,90545)|0)|0)&255;do if(!g){if(!X){W=c[Z>>2]|0;k=+h[W+32>>3]*72.0;f=+h[W+40>>3]*72.0;f=+(~~(f+(f>=0.0?.5:-.5))|0);k=+(~~(k+(k>=0.0?.5:-.5))|0);break}k=+Ny(b);if(k>0.0)f=k;else{W=c[Z>>2]|0;f=+h[W+32>>3];k=+h[W+40>>3];k=(f=0.0?.5:-.5))|0);f=k}}else{f=0.0;k=0.0}while(0);W=EA(b,c[42205]|0,d,0)|0;V=+FA(b,c[42207]|0,0.0,-360.0)+m;if(!e){U=+FA(b,c[42208]|0,0.0,-100.0);I=EA(b,c[42204]|0,4,0)|0;T=+FA(b,c[42209]|0,0.0,-100.0)}else{I=e;U=n;T=o}d=c[(c[Z>>2]|0)+104>>2]|0;e=d+24|0;c[Y>>2]=c[e>>2];c[Y+4>>2]=c[e+4>>2];c[Y+8>>2]=c[e+8>>2];c[Y+12>>2]=c[e+12>>2];q=+h[Y>>3];if(q>0.0){if(!g)M=11}else if(!(g|!(+h[Y+8>>3]>0.0)))M=11;if((M|0)==11){d=Jm(b,90530)|0;do if(d){h[p>>3]=0.0;h[j>>3]=0.0;c[i>>2]=j;c[i+4>>2]=p;d=dM(d,90537,i)|0;m=+h[j>>3];if(m<0.0){h[j>>3]=0.0;m=0.0}n=+h[p>>3];if(n<0.0){h[p>>3]=0.0;o=0.0}else o=n;if((d|0)<=0){n=q+16.0;h[Y>>3]=n;m=8.0;break}m=m*72.0;m=+(~~(m+(m>=0.0?.5:-.5))<<1|0);n=q+m;h[Y>>3]=n;if((d|0)!=1){m=o*72.0;m=+(~~(m+(m>=0.0?.5:-.5))<<1|0)}}else{n=q+16.0;h[Y>>3]=n;m=8.0}while(0);d=Y+8|0;h[d>>3]=+h[d>>3]+m;d=c[(c[Z>>2]|0)+104>>2]|0;q=n}s=+h[d+24>>3];m=+h[c[(c[(so(b)|0)+16>>2]|0)+8>>2]>>3];if(m>0.0){P=m*72.0;P=+(~~(P+(P>=0.0?.5:-.5))|0);Q=+Oy(q,P);h[Y>>3]=Q;p=Y+8|0;h[p>>3]=+Oy(+h[p>>3],P)}else Q=q;d=c[(c[Z>>2]|0)+8>>2]|0;do if(!(a[d+12>>0]|0)){e=Jm(b,93847)|0;if((e|0)!=0?(a[e>>0]|0)!=0:0){Qr(A,so(b)|0,e);d=c[A>>2]|0;g=c[A+4>>2]|0;if((g&d|0)==-1){d=En(b)|0;c[G>>2]=e;c[G+4>>2]=d;$l(0,90621,G)|0;e=0;d=0;break}else{a[(c[(so(b)|0)+16>>2]|0)+114>>0]=1;e=d+2|0;d=g+2|0;break}}else{e=0;d=0}}else{d=c[d>>2]|0;if((a[d>>0]|0)==99?(yJ(d,90553)|0)==0:0){e=Jm(b,90560)|0;Qr(D,so(b)|0,e);d=c[D>>2]|0;g=c[D+4>>2]|0;if((g&d|0)==-1){d=En(b)|0;c[H>>2]=e|0?e:90570;c[H+4>>2]=d;$l(0,90576,H)|0;e=0;d=0;break}else{a[(c[(so(b)|0)+16>>2]|0)+114>>0]=1;e=d+2|0;d=g+2|0;break}}else{e=0;d=0}}while(0);P=+(e|0);h[_>>3]=Q>P?Q:P;P=+h[Y+8>>3];r=+(d|0);d=_+8|0;h[d>>3]=P>r?P:r;e=(I|0)<3&(T!=0.0|U!=0.0)?120:I;g=Jm(b,90662)|0;if(!g)i=99;else{i=a[g>>0]|0;i=i<<24>>24==116?116:i<<24>>24==98?98:99}g=c[Z>>2]|0;a[(c[g+104>>2]|0)+80>>0]=i;if((e|0)==4?(T==0.0?((~~(V+(V>=0.0?.5:-.5))|0)%90|0|0)==0:0)&U==0.0:0)p=1;else M=39;do if((M|0)==39){g=c[(c[(c[g+8>>2]|0)+8>>2]|0)+44>>2]|0;if(g|0){p=c[g>>2]|0;c[J>>2]=c[_>>2];c[J+4>>2]=c[_+4>>2];c[J+8>>2]=c[_+8>>2];c[J+12>>2]=c[_+12>>2];hb[p&31](L,J);c[_>>2]=c[L>>2];c[_+4>>2]=c[L+4>>2];c[_+8>>2]=c[L+8>>2];c[_+12>>2]=c[L+12>>2];p=0;break}m=+h[d>>3];n=m*1.4142135623730951;if(f>n&i<<24>>24==99){o=m/f;o=+C(+(1.0/(1.0-o*o)));o=+h[_>>3]*o;h[_>>3]=o}else{o=+h[_>>3]*1.4142135623730951;h[_>>3]=o;h[d>>3]=n;m=n}if((e|0)>2){z=+E(+(3.141592653589793/+(e|0)));h[_>>3]=o/z;h[d>>3]=m/z;p=0}else p=0}while(0);m=+h[d>>3];g=GA(b,c[42210]|0,122100)|0;if((a[g>>0]|0)==115?(yJ(g,90671)|0)==0:0){h[_>>3]=k;h[d>>3]=f;N=$+40|0;c[N>>2]=c[N>>2]|2048}else{if(!((JA(g)|0)<<24>>24)){z=+h[_>>3];k=k>z?k:z;h[_>>3]=k;z=+h[d>>3];f=f>z?f:z}else{M=c[(c[Z>>2]|0)+104>>2]|0;if(!(!(k<+h[M+24>>3])?!(f<+h[M+32>>3]):0)){L=En(b)|0;M=En(so(b)|0)|0;c[N>>2]=L;c[N+4>>2]=M;$l(0,90677,N)|0}h[_>>3]=k}h[d>>3]=f}if(!X){z=f;y=k}else{y=k>f?k:f;h[d>>3]=y;h[_>>3]=y;z=y}do if(!((JA(GA(b,c[42201]|0,122100)|0)|0)<<24>>24)){if(p){f=+h[(Q>+h[_>>3]?Y:_)>>3];break}f=+h[d>>3];if(P>3]*+C(+(1.0-P*P/(f*f)));f=Q>f?Q:f}else f=Q}else f=Q;while(0);g=c[(c[Z>>2]|0)+104>>2]|0;h[g+40>>3]=s-q+f;A=$+40|0;if(!(c[A>>2]&2048)){x=+h[d>>3]-m;h[g+48>>3]=(P1;g=j?W:1;a:do if((e|0)<3){g=ww(g<<5)|0;k=+h[_>>3]*.5;f=+h[d>>3]*.5;h[g>>3]=-k;h[g+8>>3]=-f;h[g+16>>3]=k;h[g+24>>3]=f;if(j){e=1;i=2;while(1){if((e|0)==(W|0))break;y=k+4.0;z=f+4.0;h[g+(i<<4)>>3]=-y;h[g+(i<<4)+8>>3]=-z;S=i|1;h[g+(S<<4)>>3]=y;h[g+(S<<4)+8>>3]=z;e=e+1|0;i=i+2|0;k=y;f=z}h[_>>3]=k*2.0;h[d>>3]=f*2.0;e=2}else e=2}else{g=ww(O(g<<4,e)|0)|0;i=c[(c[(c[(c[Z>>2]|0)+8>>2]|0)+8>>2]|0)+44>>2]|0;b:do if(!i){q=6.283185307179586/+(e|0);t=q*.5;r=+F(+t);s=+RJ(+B(+U)+ +B(+T),1.0);t=T*1.4142135623730951/+E(+t);u=U*.5;TJ((q+-3.141592653589793)*.5,R,S);v=V*.017453292519943295;k=0.0;f=0.0;m=0.0;i=0;n=+h[S>>3]*.5;o=+h[R>>3]*.5;while(1){if((i|0)>=(e|0))break b;m=m+q;TJ(m,R,S);n=+h[S>>3]*r+n;o=+h[R>>3]*r+o;x=(o*t+s)*n+u*o;TJ(+K(+o,+x)+v,R,S);x=+RJ(x,o);w=+h[S>>3]*x*+h[_>>3];x=+h[R>>3]*x*+h[d>>3];ba=+B(+w);f=ba>f?ba:f;ba=+B(+x);k=ba>k?ba:k;h[g+(i<<4)>>3]=w;h[g+(i<<4)+8>>3]=x;if(p)break;else i=i+1|0}ba=-w;h[g+16>>3]=ba;h[g+24>>3]=x;h[g+32>>3]=ba;ba=-x;h[g+40>>3]=ba;h[g+48>>3]=w;h[g+56>>3]=ba}else{hb[c[i+4>>2]&31](g,_);k=+h[d>>3]*.5;f=+h[_>>3]*.5}while(0);f=f*2.0;k=k*2.0;y=y>f?y:f;h[_>>3]=y;ba=z>k?z:k;h[d>>3]=ba;f=y/f;k=ba/k;i=0;while(1){if((i|0)>=(e|0))break;N=g+(i<<4)|0;b=g+(i<<4)+8|0;ba=+h[b>>3]*k;h[N>>3]=+h[N>>3]*f;h[b>>3]=ba;i=i+1|0}if(j){j=e+-1|0;k=+h[g>>3];m=+h[g+8>>3];f=+K(+(m-+h[g+(j<<4)+8>>3]),+(k-+h[g+(j<<4)>>3]));j=0;c:while(1){if((j|0)>=(e|0))break;p=j+1|0;i=(p|0)%(e|0)|0;n=+h[g+(i<<4)>>3];o=+h[g+(i<<4)+8>>3];q=+K(+(o-m),+(n-k));z=(f+3.141592653589793-q)*.5;ba=4.0/+F(+z);TJ(f-z,R,S);h[R>>3]=+h[R>>3]*ba;h[S>>3]=+h[S>>3]*ba;i=1;f=m;while(1){if((i|0)==(W|0)){f=q;j=p;k=n;m=o;continue c}z=+h[S>>3]+k;ba=+h[R>>3]+f;b=(O(i,e)|0)+j|0;h[g+(b<<4)>>3]=z;h[g+(b<<4)+8>>3]=ba;i=i+1|0;k=z;f=ba}}j=O(e,W+-1|0)|0;i=0;while(1){if((i|0)>=(e|0))break a;S=i+j|0;z=+h[g+(S<<4)+8>>3];y=+B(+(+h[g+(S<<4)>>3]))*2.0;ba=+h[_>>3];h[_>>3]=y>ba?y:ba;z=+B(+z)*2.0;ba=+h[d>>3];h[d>>3]=z>ba?z:ba;i=i+1|0}}}while(0);c[$>>2]=X;c[$+4>>2]=W;c[$+8>>2]=e;h[$+16>>3]=V;h[$+32>>3]=U;h[$+24>>3]=T;c[$+44>>2]=g;f=+h[_>>3];if(!(c[A>>2]&2048)){e=c[Z>>2]|0;h[e+32>>3]=f*.013888888888888888}else{e=c[Z>>2]|0;h[e+32>>3]=+h[(Q>f?Y:_)>>3]*.013888888888888888;d=(P>+h[d>>3]?Y:_)+8|0}h[e+40>>3]=+h[d>>3]*.013888888888888888;c[e+12>>2]=$;l=aa;return}function Ey(a){a=a|0;var b=0,d=0,e=0,f=0,g=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+64|0;j=o+40|0;e=o+32|0;k=o+16|0;n=o;d=(c[(c[(so(a)|0)+16>>2]|0)+116>>2]|0)>>>2&1^1;m=a+16|0;f=c[c[(c[m>>2]|0)+104>>2]>>2]|0;c[42327]=f;f=sJ(f)|0;f=ww(((f|0)>1?f:1)+1|0)|0;b=Gy(a,d,1,f)|0;if(!b){c[e>>2]=c[c[(c[m>>2]|0)+104>>2]>>2];$l(1,90506,e)|0;c[42327]=90527;b=Gy(a,d,1,f)|0}$I(f);Hy(j,a,b);d=c[m>>2]|0;i=+h[d+32>>3]*72.0;i=+(~~(i+(i>=0.0?.5:-.5))|0);h[n>>3]=i;g=+h[d+40>>3]*72.0;g=+(~~(g+(g>=0.0?.5:-.5))|0);d=n+8|0;h[d>>3]=g;if(!((JA(GA(a,c[42210]|0,122100)|0)|0)<<24>>24)){i=+h[(+h[b>>3]>i?b:n)>>3];h[n>>3]=i;e=b+8|0;g=+h[(+h[e>>3]>g?b:n)+8>>3];h[d>>3]=g;d=e;e=b}else{d=b+8|0;e=b}a=(JA(GA(a,c[42201]|0,122100)|0)|0)&255;c[j>>2]=c[n>>2];c[j+4>>2]=c[n+4>>2];c[j+8>>2]=c[n+8>>2];c[j+12>>2]=c[n+12>>2];Iy(b,j,a);Jy(k,i*-.5,g*.5);c[j>>2]=c[k>>2];c[j+4>>2]=c[k+4>>2];c[j+8>>2]=c[k+8>>2];c[j+12>>2]=c[k+12>>2];Ky(b,j,15);n=c[m>>2]|0;h[n+32>>3]=+h[e>>3]*.013888888888888888;h[n+40>>3]=(+h[d>>3]+1.0)*.013888888888888888;c[n+12>>2]=b;l=o;return}function Fy(a){a=a|0;var b=0.0,d=0,e=0.0,f=0.0,g=0,i=0,j=0,k=0,l=0.0,m=0;j=ww(48)|0;k=a+16|0;g=c[(c[(c[(c[k>>2]|0)+8>>2]|0)+8>>2]|0)+4>>2]|0;f=+FA(a,c[42191]|0,1797693134862315708145274.0e284,0.0);b=+FA(a,c[42190]|0,1797693134862315708145274.0e284,0.0);f=f0.0?(f>.0003?f:.0003):f;i=c[k>>2]|0;h[i+40>>3]=f;h[i+32>>3]=f;b=f*72.0;g=EA(a,c[42205]|0,g,0)|0;i=ww((g|0)<1?32:g<<5)|0;f=f*36.0;e=-f;h[i>>3]=e;h[i+8>>3]=e;h[i+16>>3]=f;h[i+24>>3]=f;if((g|0)>1){a=1;d=2;e=f;b=f;while(1){if((a|0)==(g|0))break;l=e+4.0;f=b+4.0;h[i+(d<<4)>>3]=-l;h[i+(d<<4)+8>>3]=-f;m=d|1;h[i+(m<<4)>>3]=l;h[i+(m<<4)+8>>3]=f;a=a+1|0;d=d+2|0;e=l;b=f}b=e*2.0}c[j>>2]=1;c[j+4>>2]=g;c[j+8>>2]=2;m=j+16|0;c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;c[m+12>>2]=0;c[m+16>>2]=0;c[m+20>>2]=0;c[j+44>>2]=i;l=b*.013888888888888888;m=c[k>>2]|0;h[m+32>>3]=l;h[m+40>>3]=l;c[m+12>>2]=j;return}function Gy(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;g=ww(72)|0;n=c[(c[b+16>>2]|0)+104>>2]|0;m=0;i=1;j=c[42327]|0;a:while(1){k=a[j>>0]|0;switch(k<<24>>24){case 0:break a;case 92:{j=j+1|0;k=a[j>>0]|0;switch(k<<24>>24){case 124:case 125:case 123:case 92:{l=m;break}default:E=4}break}default:E=4}if((E|0)==4){E=0;switch(k<<24>>24){case 123:{l=m+1|0;break}case 125:{l=m+-1|0;break}default:{l=m;i=i+((m|0)==0&k<<24>>24==124&1)|0}}if((l|0)<0)break}m=l;j=j+1|0}B=g+56|0;c[B>>2]=ww(i<<2)|0;a[g+64>>0]=d;y=(d|0)==0&1;z=n+82|0;A=f+1|0;v=(e|0)!=0;w=n+16|0;x=n+4|0;u=n+8|0;k=0;m=0;d=0;t=0;l=0;e=0;n=f;i=0;j=0;b:while(1){p=k;k=0;c:while(1){d:while(1){s=e;e:while(1){r=k;o=i;f:while(1){q=m;g:while(1){while(1){if(t){E=78;break b}m=c[42327]|0;i=a[m>>0]|0;if((i+-1&255)>=31)break;c[42327]=m+1}switch(i<<24>>24|0){case 92:{E=53;break d}case 0:case 124:case 125:break e;case 60:break f;case 62:break g;case 123:break;default:{k=d;i=m;break d}}i=m+1|0;c[42327]=i;if(l|0){E=34;break b}if(!(a[i>>0]|0)){E=34;break b}e=Gy(b,y,0,f)|0;c[(c[B>>2]|0)+(q<<2)>>2]=e;if(!e){E=36;break b}else{q=q+1|0;l=4}}if(a[z>>0]|0){k=d;i=m;break d}if(!(l&16)){E=27;break b}if(o>>>0>A>>>0?(C=o+-1|0,(C|0)!=(s|0)):0)i=(a[C>>0]|0)==32?C:o;else i=o;a[i>>0]=0;r=HL(f)|0;c[42327]=(c[42327]|0)+1;m=q;l=l&-17;o=i}if(l&6|0){E=22;break b}if(a[z>>0]|0){k=d;i=m;break d}c[42327]=m+1;m=q;l=l|18;k=r;s=f;i=f}if(!((l&16|0)==0&(v|i<<24>>24!=0))){E=38;break b}if(!(l&4)){k=ww(72)|0;c[(c[B>>2]|0)+(q<<2)>>2]=k;m=q+1|0}else{k=p;m=q}if(r|0)c[k+60>>2]=r;if(!(l&5)){a[f+j>>0]=32;l=l|1;j=j+1|0}i=f+j|0;if(l&1){if((j|0)>1?(D=i+-1|0,(D|0)!=(n|0)):0)i=(a[D>>0]|0)==32?D:i;a[i>>0]=0;n=HL(f)|0;c[k+52>>2]=mw(b,n,a[z>>0]|0?2:0,+h[w>>3],c[x>>2]|0,c[u>>2]|0)|0;a[k+64>>0]=1;n=f;j=0}i=c[42327]|0;switch(a[i>>0]|0){case 0:{t=1;e=s;i=o;continue b}case 125:{E=51;break b}default:{}}c[42327]=i+1;p=k;l=0;k=0;e=s;i=o}h:do if((E|0)==53){E=0;k=f+j|0;i=m+1|0;switch(a[i>>0]|0){case 0:{k=d;i=m;break h}case 62:case 60:case 124:case 125:case 123:{k=d;break}case 32:{if(!(a[z>>0]|0))k=1;else E=55;break}default:E=55}if((E|0)==55){E=0;a[k>>0]=92;k=d;l=l|9;j=j+1|0}c[42327]=i}while(0);d=f+j|0;if(l&4|0?(a[i>>0]|0)!=32:0){E=59;break b}if(!(l&24))l=(a[i>>0]|0)==32?l:l|9;if(!(l&8))if(!(l&16))e=s;else{m=a[i>>0]|0;d=(k|0)!=0;if(!(d|m<<24>>24!=32))if((o|0)!=(f|0))if((a[o+-1>>0]|0)==32)m=o;else E=73;else m=f;else E=73;if((E|0)==73){E=0;a[o>>0]=m;m=o+1|0;i=c[42327]|0}e=d?m+-1|0:s;o=m}else{m=a[i>>0]|0;e=(k|0)!=0;if(!((!(e|m<<24>>24!=32)?(a[d+-1>>0]|0)==32:0)?(a[z>>0]|0)==0:0)){a[d>>0]=m;j=j+1|0}if(e){e=s;n=f+j+-1|0}else e=s}i=i+1|0;c[42327]=i;while(1){if((a[i>>0]|0)>=0){m=q;d=k;k=r;i=o;continue c}s=i+1|0;c[42327]=s;a[f+j>>0]=a[i>>0]|0;j=j+1|0;i=s}}}if((E|0)==22){Ly(g,r);g=0}else if((E|0)==27){Ly(g,r);g=0}else if((E|0)==34){Ly(g,r);g=0}else if((E|0)==36){Ly(g,r);g=0}else if((E|0)==38){Ly(g,r);g=0}else if((E|0)==51){c[42327]=i+1;c[g+48>>2]=m}else if((E|0)==59){Ly(g,r);g=0}else if((E|0)==78)c[g+48>>2]=q;return g|0}function Hy(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,g=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+64|0;k=u+48|0;m=u+40|0;n=u+32|0;t=u+16|0;s=u;j=c[e+52>>2]|0;a:do if(!j){n=t+8|0;o=e+48|0;p=e+56|0;q=e+64|0;r=s+8|0;c[t>>2]=0;c[t+4>>2]=0;c[t+8>>2]=0;c[t+12>>2]=0;j=0;while(1){if((j|0)>=(c[o>>2]|0))break a;Hy(s,d,c[(c[p>>2]|0)+(j<<2)>>2]|0);if(!(a[q>>0]|0)){h[n>>3]=+h[n>>3]+ +h[r>>3];k=t;m=+h[t>>3]>+h[s>>3]?t:s}else{h[t>>3]=+h[t>>3]+ +h[s>>3];k=n;m=(+h[n>>3]>+h[r>>3]?t:s)+8|0}h[k>>3]=+h[m>>3];j=j+1|0}}else{g=+h[j+24>>3];f=+h[j+32>>3];if(g>0.0|f>0.0){j=Jm(d,90530)|0;do if(j){c[k>>2]=m;c[k+4>>2]=n;j=dM(j,90537,k)|0;if((j|0)<=0){i=8.0;g=g+16.0;break}i=+h[m>>3]*72.0;i=+(~~(i+(i>=0.0?.5:-.5))<<1|0);g=g+i;if((j|0)!=1){i=+h[n>>3]*72.0;i=+(~~(i+(i>=0.0?.5:-.5))<<1|0)}}else{i=8.0;g=g+16.0}while(0);f=i+f}h[t>>3]=g;h[t+8>>3]=f}while(0);c[e>>2]=c[t>>2];c[e+4>>2]=c[t+4>>2];c[e+8>>2]=c[t+8>>2];c[e+12>>2]=c[t+12>>2];c[b>>2]=c[t>>2];c[b+4>>2]=c[t+4>>2];c[b+8>>2]=c[t+8>>2];c[b+12>>2]=c[t+12>>2];l=u;return}function Iy(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,g=0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0.0,r=0.0,s=0;s=l;l=l+32|0;o=s+16|0;p=s;q=+h[d>>3];i=q-+h[b>>3];r=+h[d+8>>3];f=r-+h[b+8>>3];c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];c[b+12>>2]=c[d+12>>2];d=c[b+52>>2]|0;if(!((e|0)!=0|(d|0)==0)){n=d+40|0;h[n>>3]=+h[n>>3]+i;n=d+48|0;h[n>>3]=+h[n>>3]+f}m=b+48|0;d=c[m>>2]|0;a:do if(d|0){n=b+64|0;f=((a[n>>0]|0)==0?f:i)/+(d|0);k=b+56|0;j=0;while(1){if((j|0)>=(d|0))break a;b=c[(c[k>>2]|0)+(j<<2)>>2]|0;g=j+1|0;d=~~(f*+(g|0))-~~(f*+(j|0))|0;if(!(a[n>>0]|0))Jy(p,q,+h[b+8>>3]+ +(d|0));else Jy(p,+h[b>>3]+ +(d|0),r);c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];c[o+8>>2]=c[p+8>>2];c[o+12>>2]=c[p+12>>2];Iy(b,o,e);j=g;d=c[m>>2]|0}}while(0);l=s;return}function Jy(a,b,c){a=a|0;b=+b;c=+c;h[a>>3]=b;h[a+8>>3]=c;return}function Ky(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0.0;q=l;l=l+48|0;j=q+32|0;n=q+16|0;m=q;a[b+65>>0]=e;k=b+16|0;s=+h[d>>3];p=d+8|0;r=+h[p>>3];Jy(n,s,r-+h[b+8>>3]);c[k>>2]=c[n>>2];c[k+4>>2]=c[n+4>>2];c[k+8>>2]=c[n+8>>2];c[k+12>>2]=c[n+12>>2];k=b+32|0;Jy(m,+h[b>>3]+s,r);c[k>>2]=c[m>>2];c[k+4>>2]=c[m+4>>2];c[k+8>>2]=c[m+8>>2];c[k+12>>2]=c[m+12>>2];k=c[b+48>>2]|0;m=k+-1|0;n=(e|0)==0;o=b+56|0;i=b+64|0;g=0;while(1){if((g|0)>=(k|0))break;do if(!n){b=(g|0)==0;f=(g|0)==(m|0);if(!(a[i>>0]|0))if(b){b=f?15:14;break}else{b=f?11:10;break}else if(b){b=f?15:13;break}else{b=f?7:5;break}}else b=0;while(0);f=c[(c[o>>2]|0)+(g<<2)>>2]|0;c[j>>2]=c[d>>2];c[j+4>>2]=c[d+4>>2];c[j+8>>2]=c[d+8>>2];c[j+12>>2]=c[d+12>>2];Ky(f,j,b&e);if(!(a[i>>0]|0))h[p>>3]=+h[p>>3]-+h[(c[(c[o>>2]|0)+(g<<2)>>2]|0)+8>>3];else h[d>>3]=+h[c[(c[o>>2]|0)+(g<<2)>>2]>>3]+ +h[d>>3];g=g+1|0}l=q;return}function Ly(a,b){a=a|0;b=b|0;My(a);$I(b);return}function My(a){a=a|0;var b=0,d=0,e=0;d=a+48|0;e=a+56|0;b=0;while(1){if((b|0)>=(c[d>>2]|0))break;My(c[(c[e>>2]|0)+(b<<2)>>2]|0);b=b+1|0}$I(c[a+60>>2]|0);pw(c[a+52>>2]|0);$I(c[e>>2]|0);$I(a);return}function Ny(a){a=a|0;var b=0.0,d=0.0;d=+FA(a,c[42191]|0,0.0,.01);b=+FA(a,c[42190]|0,0.0,.02);b=(d>b?d:b)*72.0;return +(+(~~(b+(b>=0.0?.5:-.5))|0))}function Oy(a,b){a=+a;b=+b;var c=0;c=~~(a/b);return +(+((+(c|0)*b+1.0e-05>2]|0)+8>>2]|0;if(!a)a=0;else a=(c[c[a+4>>2]>>2]|0)==75&1;return a|0}function Qy(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;f=c[42328]|0;a:do if(!f)d=0;else{g=c[42329]|0;e=0;while(1){if((e|0)>=(g|0)){d=0;break a}d=c[f+(e<<2)>>2]|0;h=c[d>>2]|0;if((a[h>>0]|0)==(a[b>>0]|0)?(yJ(h,b)|0)==0:0)break a;e=e+1|0}}while(0);return d|0}function Ry(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;if(SA(Jm(d,90560)|0)|0)if((a[b>>0]|0)==101?(yJ(b,90725)|0)==0:0){d=101;g=6}else{b=90553;g=4}else g=4;if((g|0)==4){d=a[b>>0]|0;if(d<<24>>24==99)if(!(yJ(b,90553)|0))g=11;else{d=99;g=6}else g=6}a:do if((g|0)==6){e=19868;while(1){f=c[e>>2]|0;if(!f){g=11;break a}if((a[f>>0]|0)==d<<24>>24?(yJ(f,b)|0)==0:0){b=e;break a}e=e+16|0}}while(0);if((g|0)==11)b=Sy(b)|0;return b|0}function Sy(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;h=l;l=l+16|0;g=h;d=Qy(b)|0;if(!d){f=c[42329]|0;d=f+1|0;c[42329]=d;e=c[42328]|0;if(!e)d=xw(d<<2)|0;else d=zw(e,d<<2)|0;c[42328]=d;d=ww(16)|0;c[(c[42328]|0)+(f<<2)>>2]=d;c[d>>2]=c[4967];c[d+4>>2]=c[4968];c[d+8>>2]=c[4969];c[d+12>>2]=c[4970];e=HL(b)|0;c[d>>2]=e;do if(!0){if((a[b>>0]|0)==99?(yJ(b,90553)|0)==0:0){e=1;break}c[g>>2]=c[4967];c[g+4>>2]=e;$l(0,90730,g)|0;e=0}else e=1;while(0);a[d+12>>0]=e}l=h;return d|0}function Ty(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;d=+h[b>>3]*.5257311121191336;c=+h[b+8>>3]*.8944271909999159;c=d>c?d:c;h[a>>3]=c*4.97979656976556;h[a+8>>3]=c*4.73606797749979;return}function Uy(a,b){a=a|0;b=b|0;var c=0.0,d=0.0,e=0.0,f=0,g=0.0,i=0.0,j=0.0,k=0,l=0,m=0.0;d=+h[b>>3];k=b+8|0;e=+h[k>>3];c=e/d;if(!(c>.9510565162951536))if(c<.9510565162951536){j=d;e=d*.9510565162951536}else j=d;else j=e*1.0514622242382672;d=j*.5257311121191336;g=j*.20081141588622725;i=j*.05020285397155681;c=.3141592653589793;f=0;while(1){if((f|0)>=10)break;h[a+(f<<4)>>3]=+E(+c)*d;h[a+(f<<4)+8>>3]=+F(+c)*d-i;m=c+.6283185307179586;l=f|1;h[a+(l<<4)>>3]=+E(+m)*g;h[a+(l<<4)+8>>3]=+F(+m)*g-i;c=c+1.2566370614359172;f=f+2|0}h[b>>3]=j;h[k>>3]=e;return}function Vy(a){a=a|0;a=c[(c[a+16>>2]|0)+12>>2]|0;if(a|0){$I(c[a+44>>2]|0);$I(a)}return}function Wy(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+80|0;k=o+40|0;g=o;n=o+64|0;h=o+56|0;if(!(a[e>>0]|0)){g=4144;h=b+40|0;do{c[b>>2]=c[g>>2];b=b+4|0;g=g+4|0}while((b|0)<(h|0))}else{i=(f|0)==0?91400:f;c[n>>2]=15;j=d+16|0;f=c[j>>2]|0;do if(a[(c[f+104>>2]|0)+82>>0]|0){f=IF(d,e,n)|0;if(!f){f=c[j>>2]|0;m=8;break}if(iz(d,f,g,i,c[n>>2]|0,0)|0){c[k>>2]=En(d)|0;c[k+4>>2]=e;c[k+8>>2]=i;$l(0,91402,k)|0}}else m=8;while(0);if((m|0)==8){if((c[(c[f+8>>2]|0)+8>>2]|0)==1600)h=0;else{c[h>>2]=d;c[h+4>>2]=0}if(iz(d,0,g,e,c[n>>2]|0,h)|0)jz(d,e)}c[g+36>>2]=0;h=b+40|0;do{c[b>>2]=c[g>>2];b=b+4|0;g=g+4|0}while((b|0)<(h|0))}l=o;return}function Xy(a,b){a=a|0;b=b|0;var d=0.0,e=0.0,f=0,g=0,i=0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0;r=l;l=l+112|0;n=r+96|0;m=r+80|0;p=r+64|0;k=r+48|0;q=r+32|0;o=r;f=r+16|0;if(!a){c[42332]=0;a=0}else{g=c[a+4>>2]|0;a=c[a>>2]|0;i=(c[(c[(so(a)|0)+16>>2]|0)+116>>2]&3)*90|0;c[n>>2]=c[b>>2];c[n+4>>2]=c[b+4>>2];c[n+8>>2]=c[b+8>>2];c[n+12>>2]=c[b+12>>2];bw(f,n,i);c[q>>2]=c[f>>2];c[q+4>>2]=c[f+4>>2];c[q+8>>2]=c[f+8>>2];c[q+12>>2]=c[f+12>>2];a:do if(g){d=+h[g+8>>3];e=+h[g+24>>3];s=+h[q>>3];if((+h[g>>3]<=s?s<=+h[g+16>>3]:0)?(j=+h[q+8>>3],d<=j):0)a=j<=e&1;else a=0}else{if((a|0)==(c[42332]|0)){f=c[42333]|0;g=c[42335]|0;i=c[42334]|0}else{g=c[(c[a+16>>2]|0)+12>>2]|0;c[42336]=g;i=c[g+44>>2]|0;c[42334]=i;f=c[g+8>>2]|0;c[42333]=f;g=O((c[g+4>>2]|0)+-1|0,f)|0;g=(g|0)>0?g:0;c[42335]=g;c[42332]=a}a=0;b=0;while(1){if((a|0)>=(f|0)){a=1;break a}t=i+(g+a<<4)|0;c[o>>2]=c[t>>2];c[o+4>>2]=c[t+4>>2];c[o+8>>2]=c[t+8>>2];c[o+12>>2]=c[t+12>>2];t=i+(g+((a+4|0)%(f|0)|0)<<4)|0;c[k>>2]=c[q>>2];c[k+4>>2]=c[q+4>>2];c[k+8>>2]=c[q+8>>2];c[k+12>>2]=c[q+12>>2];c[p>>2]=c[41802];c[p+4>>2]=c[41803];c[p+8>>2]=c[41804];c[p+12>>2]=c[41805];c[m>>2]=c[o>>2];c[m+4>>2]=c[o+4>>2];c[m+8>>2]=c[o+8>>2];c[m+12>>2]=c[o+12>>2];c[n>>2]=c[t>>2];c[n+4>>2]=c[t+4>>2];c[n+8>>2]=c[t+8>>2];c[n+12>>2]=c[t+12>>2];b=b+((hz(k,p,m,n)|0)==0&1)|0;if((b|0)==2){a=0;break}else a=a+2|0}}while(0)}l=r;return a|0}function Yy(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;e=c[b+16>>2]|0;if((a[(c[e+104>>2]|0)+82>>0]|0)!=0?(a[e+145>>0]|0)!=0:0)b=LF(b,d,0,f,g)|0;else b=0;return b|0}function Zy(e,f){e=e|0;f=f|0;var i=0,j=0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0.0,C=0.0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,P=0,Q=0,R=0;P=l;l=l+48|0;H=P+24|0;G=P+16|0;A=P+8|0;z=P;L=P+32|0;n=P+28|0;M=c[e+16>>2]|0;N=M+208|0;i=c[N>>2]|0;if((i|0)==0?(b[M+260>>1]&1)==0:0)J=0;else E=4;if((E|0)==4)if(!(c[e+152>>2]&4)){xD(e,i,c[M+228>>2]|0,c[M+244>>2]|0,c[M+212>>2]|0);J=1}else J=1;I=f+16|0;i=c[I>>2]|0;r=c[i+12>>2]|0;F=c[r+44>>2]|0;K=c[r+8>>2]|0;r=c[r+4>>2]|0;if((c[42330]|0)<(K|0)){i=K+5|0;c[42330]=i;j=c[42331]|0;if(!j)i=xw(i<<4)|0;else i=zw(j,i<<4)|0;c[42331]=i;i=c[I>>2]|0}D=(c[i+104>>2]|0)+56|0;i=i+16|0;c[D>>2]=c[i>>2];c[D+4>>2]=c[i+4>>2];c[D+8>>2]=c[i+8>>2];c[D+12>>2]=c[i+12>>2];D=c[I>>2]|0;B=+h[D+32>>3]*72.0;B=(+h[D+96>>3]+ +h[D+88>>3])/+(~~(B+(B>=0.0?.5:-.5))|0);C=+h[D+40>>3]*72.0;C=+h[D+80>>3]/+(~~(C+(C>=0.0?.5:-.5))|0);D=_y(e,f)|0;c[L>>2]=0;i=d[(c[I>>2]|0)+117>>0]|0;do if(!(i&1)){if(i&2|0){s=HA(f,0,91300)|0;CD(e,s);ED(e,HA(f,0,91308)|0);j=0;i=1;break}if(i&8|0){s=HA(f,0,91316)|0;CD(e,s);ED(e,HA(f,0,91324)|0);j=0;i=1;break}if(i&4|0){s=HA(f,0,91332)|0;CD(e,s);ED(e,HA(f,0,91340)|0);j=0;i=1;break}if(!(D&1))if(!(D&576)){j=0;i=0}else{j=$y(f)|0;i=1}else{j=$y(f)|0;if(!((yv(j,L,n)|0)<<24>>24)){ED(e,j);i=1}else{ED(e,c[L>>2]|0);i=c[L+4>>2]|0;m=EA(f,c[42218]|0,0,0)|0;k=+g[n>>2];if(!i)FD(e,122106,m,k);else FD(e,i,m,k);i=(D&2)>>>1|2}}s=az(e,f)|0}else{s=HA(f,0,91284)|0;CD(e,s);ED(e,HA(f,0,91292)|0);j=0;i=1}while(0);m=c[(c[I>>2]|0)+8>>2]|0;if(a[m+12>>0]|0){m=c[m>>2]|0;if((a[m>>0]|0)==99){m=(yJ(m,90553)|0)==0;E=33}else u=1}else{m=1;E=33}if((E|0)==33){m=m^1;if((r|0)!=0|i<<24>>24==0|m)u=m;else{CD(e,122171);r=1;u=0}}v=(K|0)<3;w=(D&512|0)!=0;y=(D&8|0)==0;x=(D&64|0)==0;p=(D&1024|0)==0;q=(D&2130706444|0)==0;t=0;while(1){if((t|0)>=(r|0))break;n=O(t,K)|0;o=c[42331]|0;m=0;while(1){if((m|0)>=(K|0))break;R=m+n|0;k=+h[F+(R<<4)+8>>3];Q=c[I>>2]|0;h[o+(m<<4)>>3]=+h[Q+16>>3]+ +h[F+(R<<4)>>3]*B;h[o+(m<<4)+8>>3]=+h[Q+24>>3]+k*C;m=m+1|0}do if(v){if(w&(t|0)==0?(XJ(j,58)|0)!=0:0)if(($t(e,o,j)|0)>1){c[z>>2]=En(f)|0;$l(3,91348,z)|0;i=0}else i=0;HD(e,c[42331]|0,K,i&255);if(!y)bz(e,f)}else{if(!x){if((t|0)==0?(du(e,o,j,1)|0)>1:0){c[A>>2]=En(f)|0;$l(3,91348,A)|0}ID(e,c[42331]|0,K,0);break}if(!p){CD(e,122171);ID(e,c[42331]|0,K,i&255);CD(e,s);LD(e,(c[42331]|0)+32|0,2);break}i=i&255;if(q){ID(e,o,K,i);break}else{zy(e,o,K,D,i);break}}while(0);t=t+1|0;i=0}m=c[(c[I>>2]|0)+8>>2]|0;if(!(a[m+12>>0]|0)){m=Jm(f,93847)|0;if(m|0?a[m>>0]|0:0){o=m;E=65}}else{m=c[m>>2]|0;if((a[m>>0]|0)==99?(yJ(m,90553)|0)==0:0){m=Jm(f,90560)|0;if(m|0?a[m>>0]|0:0){o=m;E=65}}else{o=m;E=65}}if((E|0)==65){n=c[42331]|0;m=0;while(1){if((m|0)>=(K|0))break;k=+h[F+(m<<4)+8>>3];R=c[I>>2]|0;h[n+(m<<4)>>3]=+h[R+16>>3]+ +h[F+(m<<4)>>3]*B;h[n+(m<<4)+8>>3]=+h[R+24>>3]+k*C;m=m+1|0}m=i&255;do if(!(u|i<<24>>24==0)){if(v){if(w&(t|0)==0?(XJ(j,58)|0)!=0:0)if(($t(e,n,j)|0)>1){c[G>>2]=En(f)|0;$l(3,91348,G)|0;i=0}else i=0;HD(e,c[42331]|0,K,i&255);if(y)break;bz(e,f);break}if(x)if(!(D&12)){ID(e,n,K,m);break}else{zy(e,n,K,D,m);break}else{if((du(e,n,j,1)|0)>1){c[H>>2]=En(f)|0;$l(3,91348,H)|0}ID(e,c[42331]|0,K,0);break}}while(0);R=c[42331]|0;ND(e,o,R,K,i,GA(f,c[42211]|0,122100)|0)}$I(c[L>>2]|0);qw(e,10,c[(c[I>>2]|0)+104>>2]|0);if(J){if(c[e+152>>2]&4|0)xD(e,c[N>>2]|0,c[M+228>>2]|0,c[M+244>>2]|0,c[M+212>>2]|0);yD(e)}l=P;return}function _y(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+16|0;f=h;e=ez(d,f)|0;if(e|0)GD(b,e);e=c[42217]|0;if((e|0?(g=Km(d,e)|0,g|0):0)?a[g>>0]|0:0)PD(b,+FA(d,c[42217]|0,1.0,0.0));l=h;return c[f>>2]|0}function $y(a){a=a|0;return dz(a,119592)|0}function az(b,d){b=b|0;d=d|0;d=HA(d,c[42193]|0,174185)|0;d=a[d>>0]|0?d:122106;CD(b,d);return d|0}function bz(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0,g=0,i=0.0,j=0,k=0,m=0;d=l;l=l+96|0;j=d+80|0;k=d+64|0;e=d+32|0;m=d+16|0;g=d;b=c[b+16>>2]|0;f=+h[b+80>>3];h[m+8>>3]=f*.375;i=+h[b+96>>3];h[m>>3]=i*.6614;b=b+16|0;c[k>>2]=c[m>>2];c[k+4>>2]=c[m+4>>2];c[k+8>>2]=c[m+8>>2];c[k+12>>2]=c[m+12>>2];c[j>>2]=c[b>>2];c[j+4>>2]=c[b+4>>2];c[j+8>>2]=c[b+8>>2];c[j+12>>2]=c[b+12>>2];cz(g,k,j);c[e>>2]=c[g>>2];c[e+4>>2]=c[g+4>>2];c[e+8>>2]=c[g+8>>2];c[e+12>>2]=c[g+12>>2];g=e+8|0;b=e+24|0;h[b>>3]=+h[g>>3];h[e+16>>3]=+h[e>>3]-i*1.3228;LD(a,e,2);f=+h[g>>3]-f*.75;h[g>>3]=f;h[b>>3]=f;LD(a,e,2);l=d;return}function cz(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=+h[c+8>>3]+ +h[b+8>>3];h[a>>3]=+h[c>>3]+ +h[b>>3];h[a+8>>3]=d;return}function dz(b,d){b=b|0;d=d|0;var e=0;e=HA(b,c[42194]|0,174185)|0;if(!(a[e>>0]|0)){e=HA(b,c[42193]|0,174185)|0;return ((a[e>>0]|0)==0?d:e)|0}else return e|0;return 0}function ez(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;e=HA(b,c[42202]|0,174185)|0;a:do if(!(a[e>>0]|0)){g=0;e=0}else{g=Eu(e)|0;h=g;e=0;b:while(1){f=c[h>>2]|0;if(!f)break a;switch(a[f>>0]|0){case 102:{if(!(yJ(f,95923)|0)){h=h+4|0;e=e|1;continue b}break}case 114:{if(!(yJ(f,91360)|0)){f=h;do{j=f;f=f+4|0;i=c[f>>2]|0;c[j>>2]=i}while((i|0)!=0);j=h;e=e|4;h=j;continue b}if(!(yJ(f,91378)|0)){f=h;do{i=f;f=f+4|0;j=c[f>>2]|0;c[i>>2]=j}while((j|0)!=0);j=h;e=e|3;h=j;continue b}break}case 100:{if(!(yJ(f,91368)|0)){f=h;do{i=f;f=f+4|0;j=c[f>>2]|0;c[i>>2]=j}while((j|0)!=0);j=h;e=e|8;h=j;continue b}break}case 105:{if(!(yJ(f,119127)|0)){h=h+4|0;e=e|32;continue b}break}case 115:{if((yJ(f,91385)|0)==0?fz(b)|0:0){f=h;do{i=f;f=f+4|0;j=c[f>>2]|0;c[i>>2]=j}while((j|0)!=0);j=h;e=e|64;h=j;continue b}break}case 119:{if((yJ(f,91393)|0)==0?gz(b)|0:0){f=h;do{i=f;f=f+4|0;j=c[f>>2]|0;c[i>>2]=j}while((j|0)!=0);j=h;e=e|512;h=j;continue b}break}default:{}}h=h+4|0}}while(0);f=c[(c[(c[b+16>>2]|0)+8>>2]|0)+8>>2]|0;if(f)e=c[f+40>>2]|e;c[d>>2]=e;return g|0}function fz(a){a=a|0;var b=0.0;a=c[(c[(c[a+16>>2]|0)+8>>2]|0)+8>>2]|0;if((((a|0)!=0?(c[a+8>>2]|0)==4:0)?(b=+h[a+16>>3],((~~(b+(b>=0.0?.5:-.5))|0)%90|0|0)==0):0)?+h[a+24>>3]==0.0:0)a=+h[a+32>>3]==0.0&1;else a=0;return a|0}function gz(a){a=a|0;a=c[(c[(c[a+16>>2]|0)+8>>2]|0)+8>>2]|0;if(!a)a=0;else a=(c[a+8>>2]|0)<3&1;return a|0}function hz(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0.0,g=0.0,i=0.0;i=+h[c+8>>3];g=-(+h[d+8>>3]-i);f=+h[c>>3];e=+h[d>>3]-f;f=e*i+f*g;return (+h[a+8>>3]*e+ +h[a>>3]*g-f>=0.0^+h[b>>3]*g-f+ +h[b+8>>3]*e>=0.0^1)&1|0}function iz(b,d,e,f,g,i){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0.0,k=0.0,m=0,n=0,o=0,p=0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;G=l;l=l+192|0;B=G+176|0;E=G+160|0;m=G+144|0;z=G+128|0;A=G+112|0;n=G+96|0;o=G+80|0;p=G+64|0;v=G+48|0;w=G+32|0;x=G+16|0;D=G;if(!d){c[E>>2]=0;c[E+4>>2]=0;c[E+8>>2]=0;c[E+12>>2]=0;m=(c[(c[(so(b)|0)+16>>2]|0)+116>>2]&1|0)==0;C=c[b+16>>2]|0;q=+h[C+80>>3]*.5;j=+h[C+88>>3];t=m?q:j;q=m?j:q;m=0;C=E;j=0.0;k=-q;r=t;F=E+8|0;s=0.0;t=-t}else{k=+h[d>>3];t=+h[d+8>>3];q=+h[d+16>>3];r=+h[d+24>>3];Jy(m,(q+k)*.5,(r+t)*.5);c[E>>2]=c[m>>2];c[E+4>>2]=c[m+4>>2];c[E+8>>2]=c[m+8>>2];c[E+12>>2]=c[m+12>>2];H=E+8|0;m=1;C=E;j=+h[E>>3];F=H;s=+h[H>>3]}u=(q>r?q:r)*4.0;a:do if((f|0)!=0?(y=a[f>>0]|0,y<<24>>24!=0):0){f=f+1|0;switch(y<<24>>24|0){case 99:{p=1;g=0;f=0;n=0;j=0.0;o=0;break a}case 101:{if(a[f>>0]|0){p=1;g=0;f=0;n=0;j=0.0;o=1;break a}if(!i)h[C>>3]=q;else{kz(z,i,s,u);c[E>>2]=c[z>>2];c[E+4>>2]=c[z+4>>2];c[E+8>>2]=c[z+8>>2];c[E+12>>2]=c[z+12>>2]}p=0;g=g&2;f=0;n=1;j=0.0;o=0;m=1;break a}case 115:{h[F>>3]=t;switch(a[f>>0]|0){case 0:{if(!i)h[C>>3]=j;else{kz(A,i,-u,j);c[E>>2]=c[A>>2];c[E+4>>2]=c[A+4>>2];c[E+8>>2]=c[A+8>>2];c[E+12>>2]=c[A+12>>2]}p=0;g=g&1;f=0;n=1;j=-1.5707963267948966;o=0;m=1;break a}case 101:{if(!i)h[C>>3]=q;else{kz(n,i,-u,u);c[E>>2]=c[n>>2];c[E+4>>2]=c[n+4>>2];c[E+8>>2]=c[n+8>>2];c[E+12>>2]=c[n+12>>2]}p=0;g=g&3;f=0;n=1;j=-.7853981633974483;o=0;m=1;break a}case 119:{if(!i)h[C>>3]=k;else{u=-u;kz(o,i,u,u);c[E>>2]=c[o>>2];c[E+4>>2]=c[o+4>>2];c[E+8>>2]=c[o+8>>2];c[E+12>>2]=c[o+12>>2]}p=0;g=g&9;f=0;n=1;j=-2.356194490192345;o=0;m=1;break a}default:{h[F>>3]=s;p=1;g=0;f=0;n=0;j=0.0;o=1;break a}}}case 119:{if(a[f>>0]|0){p=1;g=0;f=0;n=0;j=0.0;o=1;break a}if(!i)h[C>>3]=k;else{kz(p,i,s,-u);c[E>>2]=c[p>>2];c[E+4>>2]=c[p+4>>2];c[E+8>>2]=c[p+8>>2];c[E+12>>2]=c[p+12>>2]}p=0;g=g&8;f=0;n=1;j=3.141592653589793;o=0;m=1;break a}case 110:{h[F>>3]=r;switch(a[f>>0]|0){case 0:{if(!i)h[C>>3]=j;else{kz(v,i,u,j);c[E>>2]=c[v>>2];c[E+4>>2]=c[v+4>>2];c[E+8>>2]=c[v+8>>2];c[E+12>>2]=c[v+12>>2]}p=0;g=g&4;f=0;n=1;j=1.5707963267948966;o=0;m=1;break a}case 101:{if(!i)h[C>>3]=q;else{kz(w,i,u,u);c[E>>2]=c[w>>2];c[E+4>>2]=c[w+4>>2];c[E+8>>2]=c[w+8>>2];c[E+12>>2]=c[w+12>>2]}p=0;g=g&6;f=0;n=1;j=.7853981633974483;o=0;m=1;break a}case 119:{if(!i)h[C>>3]=k;else{kz(x,i,u,-u);c[E>>2]=c[x>>2];c[E+4>>2]=c[x+4>>2];c[E+8>>2]=c[x+8>>2];c[E+12>>2]=c[x+12>>2]}p=0;g=g&12;f=0;n=1;j=2.356194490192345;o=0;m=1;break a}default:{h[F>>3]=s;p=1;g=0;f=0;n=0;j=0.0;o=1;break a}}}case 95:{p=1;f=1;n=0;j=0.0;o=0;break a}default:{p=1;g=0;f=0;n=0;j=0.0;o=1;break a}}}else{p=1;g=0;f=0;n=0;j=0.0;o=0}while(0);H=(c[(c[(so(b)|0)+16>>2]|0)+116>>2]&3)*90|0;c[B>>2]=c[E>>2];c[B+4>>2]=c[E+4>>2];c[B+8>>2]=c[E+8>>2];c[B+12>>2]=c[E+12>>2];aw(D,B,H);c[E>>2]=c[D>>2];c[E+4>>2]=c[D+4>>2];c[E+8>>2]=c[D+8>>2];c[E+12>>2]=c[D+12>>2];if(!(f<<24>>24))g=lz(g,c[(c[(so(b)|0)+16>>2]|0)+116>>2]&3)|0;a[e+33>>0]=g;c[e+24>>2]=d;k=+h[C>>3];h[e>>3]=+(~~(k+(k>=0.0?.5:-.5))|0);k=+h[F>>3];h[e+8>>3]=+(~~(k+(k>=0.0?.5:-.5))|0);h[e+16>>3]=+mz(j,c[(c[(so(b)|0)+16>>2]|0)+116>>2]&3);k=+h[C>>3];j=+h[F>>3];if(k==0.0&j==0.0)g=-128;else{u=+K(+j,+k);t=u+4.71238898038469;g=~~((!(t>=6.283185307179586)?t:u+-1.5707963267948966)*40.74366543152521)&255}a[e+32>>0]=g;a[e+29>>0]=n;a[e+28>>0]=m;a[e+30>>0]=p;a[e+31>>0]=f;l=G;return o|0}function jz(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=En(a)|0;c[e+4>>2]=b;$l(0,91463,e)|0;l=d;return}function kz(a,b,d,e){a=a|0;b=b|0;d=+d;e=+e;var f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+128|0;g=p+112|0;j=p+48|0;k=p+16|0;m=p+32|0;n=p;o=c[b>>2]|0;i=c[(c[(so(o)|0)+16>>2]|0)+116>>2]&3;h[k>>3]=e;h[k+8>>3]=d;f=(i|0)!=0;if(f){c[g>>2]=c[k>>2];c[g+4>>2]=c[k+4>>2];c[g+8>>2]=c[k+8>>2];c[g+12>>2]=c[k+12>>2];aw(m,g,i*90|0);c[k>>2]=c[m>>2];c[k+4>>2]=c[m+4>>2];c[k+8>>2]=c[m+8>>2];c[k+12>>2]=c[m+12>>2]}m=j+48|0;q=j+32|0;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;c[j+16>>2]=0;c[j+20>>2]=0;c[j+24>>2]=0;c[j+28>>2]=0;c[q>>2]=c[k>>2];c[q+4>>2]=c[k+4>>2];c[q+8>>2]=c[k+8>>2];c[q+12>>2]=c[k+12>>2];c[m>>2]=c[k>>2];c[m+4>>2]=c[k+4>>2];c[m+8>>2]=c[k+8>>2];c[m+12>>2]=c[k+12>>2];Gz(b,c[(c[(c[(c[o+16>>2]|0)+8>>2]|0)+4>>2]|0)+12>>2]|0,j,1);if(f){c[g>>2]=c[j>>2];c[g+4>>2]=c[j+4>>2];c[g+8>>2]=c[j+8>>2];c[g+12>>2]=c[j+12>>2];bw(n,g,i*90|0);c[j>>2]=c[n>>2];c[j+4>>2]=c[n+4>>2];c[j+8>>2]=c[n+8>>2];c[j+12>>2]=c[n+12>>2]};c[a>>2]=c[j>>2];c[a+4>>2]=c[j+4>>2];c[a+8>>2]=c[j+8>>2];c[a+12>>2]=c[j+12>>2];l=p;return}function lz(a,b){a=a|0;b=b|0;a:do switch(b|0){case 3:switch(a|0){case 4:{a=2;break a}case 1:{a=8;break a}case 8:{a=1;break a}case 2:{a=4;break a}default:break a}case 2:switch(a|0){case 4:{a=1;break a}case 1:{a=4;break a}default:break a}case 1:switch(a|0){case 4:{a=2;break a}case 1:{a=8;break a}case 8:{a=4;break a}case 2:{a=1;break a}default:break a}default:{}}while(0);return a|0}function mz(a,b){a=+a;b=b|0;switch(b|0){case 3:{if(!(a==3.141592653589793))if(!(a==2.356194490192345))if(!(a==1.5707963267948966))if(!(a==0.0))if(!(a==-.7853981633974483)){if(a==-1.5707963267948966)a=3.141592653589793}else a=2.356194490192345;else a=1.5707963267948966;else a=0.0;else a=-.7853981633974483;else a=-1.5707963267948966;break}case 2:{a=-a;break}case 1:{a=a+-1.5707963267948966;break}default:{}}return +a}function nz(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0.0,g=0.0,i=0,j=0,k=0;e=l;l=l+32|0;k=e+16|0;i=e;a=c[a>>2]|0;j=(c[(c[(so(a)|0)+16>>2]|0)+116>>2]&3)*90|0;c[k>>2]=c[b>>2];c[k+4>>2]=c[b+4>>2];c[k+8>>2]=c[b+8>>2];c[k+12>>2]=c[b+12>>2];bw(i,k,j);d=+h[i>>3];g=+h[i+8>>3];a=c[a+16>>2]|0;f=+h[a+80>>3]*.5;if(!(!(g>=-f)|!(g<=f))?d>=-+h[a+88>>3]:0)a=d<=+h[a+96>>3]&1;else a=0;l=e;return a|0}function oz(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0.0;n=l;l=l+32|0;m=n;i=c[a+16>>2]|0;j=i+208|0;g=c[j>>2]|0;if(!g)k=(b[i+260>>1]&1)!=0;else k=1;e=d+16|0;d=c[e>>2]|0;f=c[d+12>>2]|0;if(f|0){if(k?(c[a+152>>2]&4|0)==0:0){xD(a,g,c[i+228>>2]|0,c[i+244>>2]|0,c[i+212>>2]|0);d=c[e>>2]|0}g=c[a+36>>2]|0;p=+h[d+24>>3]+ +(c[f+8>>2]|0);o=c[f>>2]|0;h[m>>3]=+h[d+16>>3]+ +(c[f+4>>2]|0);h[m+8>>3]=p;c[m+16>>2]=o;AL(g,91494,m)|0;g=c[e>>2]|0;m=(c[g+104>>2]|0)+56|0;g=g+16|0;c[m>>2]=c[g>>2];c[m+4>>2]=c[g+4>>2];c[m+8>>2]=c[g+8>>2];c[m+12>>2]=c[g+12>>2];qw(a,10,c[(c[e>>2]|0)+104>>2]|0);if(k){if(c[a+152>>2]&4|0)xD(a,c[j>>2]|0,c[i+228>>2]|0,c[i+244>>2]|0,c[i+212>>2]|0);yD(a)}}l=n;return}function pz(a){a=a|0;My(c[(c[a+16>>2]|0)+12>>2]|0);return}function qz(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0;m=l;l=l+64|0;k=m+40|0;h=m;if(!(a[f>>0]|0)){h=4144;g=b+40|0;do{c[b>>2]=c[h>>2];b=b+4|0;h=h+4|0}while((b|0)<(g|0))}else{g=(g|0)==0?91400:g;i=c[(c[e+16>>2]|0)+12>>2]|0;j=wz(i,f)|0;if(!j){if(iz(e,i+16|0,h,f,15,0)|0)jz(e,f)}else if(iz(e,j+16|0,h,g,d[j+65>>0]|0,0)|0){c[k>>2]=En(e)|0;c[k+4>>2]=f;c[k+8>>2]=g;$l(0,91402,k)|0}g=b+40|0;do{c[b>>2]=c[h>>2];b=b+4|0;h=h+4|0}while((b|0)<(g|0))}l=m;return}function rz(a,b){a=a|0;b=b|0;var d=0.0,e=0.0,f=0,g=0,i=0,j=0.0,k=0,m=0,n=0.0;k=l;l=l+32|0;m=k+16|0;i=k;f=c[a+4>>2]|0;a=c[a>>2]|0;g=(c[(c[(so(a)|0)+16>>2]|0)+116>>2]&3)*90|0;c[m>>2]=c[b>>2];c[m+4>>2]=c[b+4>>2];c[m+8>>2]=c[b+8>>2];c[m+12>>2]=c[b+12>>2];bw(i,m,g);c[b>>2]=c[i>>2];c[b+4>>2]=c[i+4>>2];c[b+8>>2]=c[i+8>>2];c[b+12>>2]=c[i+12>>2];if(!f){f=c[(c[a+16>>2]|0)+12>>2]|0;g=f+16|0;a=f+24|0;i=f+32|0;f=f+40|0}else{g=f;a=f+8|0;i=f+16|0;f=f+24|0}e=+h[a>>3];d=+h[f>>3];n=+h[b>>3];if((+h[g>>3]<=n?n<=+h[i>>3]:0)?(j=+h[b+8>>3],e<=j):0)a=j<=d&1;else a=0;l=k;return a|0}function sz(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0.0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0,u=0,v=0.0;u=l;l=l+80|0;r=u+64|0;q=u+32|0;t=u;a:do if(!(a[d+28>>0]|0))e=0;else{i=+h[d>>3];p=b+16|0;m=c[(c[p>>2]|0)+12>>2]|0;k=m+48|0;m=m+56|0;d=0;while(1){if((d|0)>=(c[k>>2]|0))break a;n=(c[(c[(so(b)|0)+16>>2]|0)+116>>2]&1|0)==0;o=c[(c[m>>2]|0)+(d<<2)>>2]|0;j=+(~~+h[(n?o+16|0:o+24|0)>>3]|0);if(i>=j?(s=+(~~+h[(n?o+32|0:o+40|0)>>3]|0),i<=s):0)break;d=d+1|0}if(!(c[(c[(so(b)|0)+16>>2]|0)+116>>2]&1)){t=c[p>>2]|0;v=+h[t+16>>3];h[f>>3]=v+j;j=+h[t+24>>3];i=+h[t+80>>3];h[f+8>>3]=j-i*.5;h[f+16>>3]=v+s}else{o=(c[(c[m>>2]|0)+(d<<2)>>2]|0)+16|0;b=(c[p>>2]|0)+16|0;c[q>>2]=c[o>>2];c[q+4>>2]=c[o+4>>2];c[q+8>>2]=c[o+8>>2];c[q+12>>2]=c[o+12>>2];c[q+16>>2]=c[o+16>>2];c[q+20>>2]=c[o+20>>2];c[q+24>>2]=c[o+24>>2];c[q+28>>2]=c[o+28>>2];c[r>>2]=c[b>>2];c[r+4>>2]=c[b+4>>2];c[r+8>>2]=c[b+8>>2];c[r+12>>2]=c[b+12>>2];cw(t,q,r);c[f>>2]=c[t>>2];c[f+4>>2]=c[t+4>>2];c[f+8>>2]=c[t+8>>2];c[f+12>>2]=c[t+12>>2];c[f+16>>2]=c[t+16>>2];c[f+20>>2]=c[t+20>>2];c[f+24>>2]=c[t+24>>2];c[f+28>>2]=c[t+28>>2];t=c[p>>2]|0;i=+h[t+80>>3];j=+h[t+24>>3]}h[f+24>>3]=i*.5+j;c[g>>2]=1}while(0);l=u;return e|0}function tz(d,e){d=d|0;e=e|0;var f=0,i=0,j=0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0.0;w=l;l=l+144|0;n=w+96|0;p=w+64|0;r=w;s=w+128|0;t=c[d+16>>2]|0;u=t+208|0;f=c[u>>2]|0;if(!f)v=(b[t+260>>1]&1)!=0;else v=1;m=e+16|0;q=c[m>>2]|0;o=c[q+12>>2]|0;j=o+16|0;c[p>>2]=c[j>>2];c[p+4>>2]=c[j+4>>2];c[p+8>>2]=c[j+8>>2];c[p+12>>2]=c[j+12>>2];c[p+16>>2]=c[j+16>>2];c[p+20>>2]=c[j+20>>2];c[p+24>>2]=c[j+24>>2];c[p+28>>2]=c[j+28>>2];x=+h[q+16>>3];h[p>>3]=+h[p>>3]+x;k=+h[q+24>>3];q=p+8|0;h[q>>3]=+h[q>>3]+k;q=p+16|0;h[q>>3]=+h[q>>3]+x;j=p+24|0;h[j>>3]=+h[j>>3]+k;if(v?(c[d+152>>2]&4|0)==0:0)xD(d,f,c[t+228>>2]|0,c[t+244>>2]|0,c[t+212>>2]|0);f=_y(d,e)|0;az(d,e)|0;c[s>>2]=0;if(!(f&1))i=0;else{i=$y(e)|0;if(!((yv(i,s,n)|0)<<24>>24)){ED(d,i);i=1}else{ED(d,c[s>>2]|0);i=c[s+4>>2]|0;j=EA(e,c[42218]|0,0,0)|0;k=+g[n>>2];if(!i)FD(d,122106,j,k);else FD(d,i,j,k);i=f>>>1&1|2}}j=c[c[(c[m>>2]|0)+8>>2]>>2]|0;if((a[j>>0]|0)==77){m=(yJ(j,91271)|0)==0;f=m?f|4:f}if(!(f&2130706444)){c[n>>2]=c[p>>2];c[n+4>>2]=c[p+4>>2];c[n+8>>2]=c[p+8>>2];c[n+12>>2]=c[p+12>>2];c[n+16>>2]=c[p+16>>2];c[n+20>>2]=c[p+20>>2];c[n+24>>2]=c[p+24>>2];c[n+28>>2]=c[p+28>>2];JD(d,n,i)}else{c[r>>2]=c[p>>2];c[r+4>>2]=c[p+4>>2];c[r+8>>2]=c[p+8>>2];c[r+12>>2]=c[p+12>>2];p=r+32|0;c[p>>2]=c[q>>2];c[p+4>>2]=c[q+4>>2];c[p+8>>2]=c[q+8>>2];c[p+12>>2]=c[q+12>>2];h[r+16>>3]=+h[p>>3];h[r+24>>3]=+h[r+8>>3];h[r+48>>3]=+h[r>>3];h[r+56>>3]=+h[r+40>>3];zy(d,r,4,f,i)}uz(d,e,o);$I(c[s>>2]|0);if(v){if(c[d+152>>2]&4|0)xD(d,c[u>>2]|0,c[t+228>>2]|0,c[t+244>>2]|0,c[t+212>>2]|0);yD(d)}l=w;return}function uz(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+144|0;p=u+128|0;o=u+112|0;q=u+16|0;r=u;g=u+96|0;i=u+80|0;s=u+64|0;t=u+48|0;j=e+52|0;f=c[j>>2]|0;if(!f)f=d+16|0;else{n=f+56|0;m=e+16|0;f=e+32|0;c[o>>2]=c[m>>2];c[o+4>>2]=c[m+4>>2];c[o+8>>2]=c[m+8>>2];c[o+12>>2]=c[m+12>>2];c[p>>2]=c[f>>2];c[p+4>>2]=c[f+4>>2];c[p+8>>2]=c[f+8>>2];c[p+12>>2]=c[f+12>>2];vz(g,o,p);f=d+16|0;m=(c[f>>2]|0)+16|0;c[o>>2]=c[g>>2];c[o+4>>2]=c[g+4>>2];c[o+8>>2]=c[g+8>>2];c[o+12>>2]=c[g+12>>2];c[p>>2]=c[m>>2];c[p+4>>2]=c[m+4>>2];c[p+8>>2]=c[m+8>>2];c[p+12>>2]=c[m+12>>2];cz(i,o,p);c[n>>2]=c[i>>2];c[n+4>>2]=c[i+4>>2];c[n+8>>2]=c[i+8>>2];c[n+12>>2]=c[i+12>>2];qw(b,10,c[j>>2]|0);az(b,d)|0}k=(c[f>>2]|0)+16|0;c[r>>2]=c[k>>2];c[r+4>>2]=c[k+4>>2];c[r+8>>2]=c[k+8>>2];c[r+12>>2]=c[k+12>>2];k=e+48|0;m=e+64|0;n=q+16|0;j=e+56|0;e=q+16|0;i=0;while(1){if((i|0)>=(c[k>>2]|0))break;if((i|0)>0){f=(c[j>>2]|0)+(i<<2)|0;g=c[f>>2]|0;if(!(a[m>>0]|0)){g=g+32|0;c[n>>2]=c[g>>2];c[n+4>>2]=c[g+4>>2];c[n+8>>2]=c[g+8>>2];c[n+12>>2]=c[g+12>>2];h[q>>3]=+h[(c[f>>2]|0)+16>>3];f=n;g=0}else{g=g+16|0;c[q>>2]=c[g>>2];c[q+4>>2]=c[g+4>>2];c[q+8>>2]=c[g+8>>2];c[q+12>>2]=c[g+12>>2];h[e>>3]=+h[q>>3];f=(c[f>>2]|0)+32|0;g=1}h[q+(g<<4)+8>>3]=+h[f+8>>3];c[o>>2]=c[q>>2];c[o+4>>2]=c[q+4>>2];c[o+8>>2]=c[q+8>>2];c[o+12>>2]=c[q+12>>2];c[p>>2]=c[r>>2];c[p+4>>2]=c[r+4>>2];c[p+8>>2]=c[r+8>>2];c[p+12>>2]=c[r+12>>2];cz(s,o,p);c[q>>2]=c[s>>2];c[q+4>>2]=c[s+4>>2];c[q+8>>2]=c[s+8>>2];c[q+12>>2]=c[s+12>>2];c[o>>2]=c[n>>2];c[o+4>>2]=c[n+4>>2];c[o+8>>2]=c[n+8>>2];c[o+12>>2]=c[n+12>>2];c[p>>2]=c[r>>2];c[p+4>>2]=c[r+4>>2];c[p+8>>2]=c[r+8>>2];c[p+12>>2]=c[r+12>>2];cz(t,o,p);c[n>>2]=c[t>>2];c[n+4>>2]=c[t+4>>2];c[n+8>>2]=c[t+8>>2];c[n+12>>2]=c[t+12>>2];LD(b,q,2)}uz(b,d,c[(c[j>>2]|0)+(i<<2)>>2]|0);i=i+1|0}l=u;return}function vz(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=(+h[c+8>>3]+ +h[b+8>>3])*.5;h[a>>3]=(+h[c>>3]+ +h[b>>3])*.5;h[a+8>>3]=d;return}function wz(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=c[b+60>>2]|0;if(!(((e|0)!=0?(a[e>>0]|0)==(a[d>>0]|0):0)?(yJ(e,d)|0)==0:0))f=4;a:do if((f|0)==4){g=b+56|0;f=c[b+48>>2]|0;e=0;while(1){if((e|0)>=(f|0)){b=0;break a}b=wz(c[(c[g>>2]|0)+(e<<2)>>2]|0,d)|0;if(!b)e=e+1|0;else break}}while(0);return b|0}function xz(a,b){a=a|0;b=b|0;var d=0;d=b+8|0;h[d>>3]=+h[d>>3]*1.375;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];return}function yz(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0.0,g=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0;k=+h[b>>3];f=k*.5;m=+h[b+8>>3];i=m*.5;h[a>>3]=f;e=m*.40909090909090906;h[a+8>>3]=e;h[a+16>>3]=f;g=m*.4592530909090909;h[a+24>>3]=g;j=k*.275892;h[a+32>>3]=j;h[a+40>>3]=i;h[a+48>>3]=0.0;h[a+56>>3]=i;k=k*-.275892;h[a+64>>3]=k;h[a+72>>3]=i;l=-f;h[a+80>>3]=l;h[a+88>>3]=g;d=a+96|0;h[d>>3]=l;h[a+104>>3]=e;b=a+112|0;c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];c[b+12>>2]=c[d+12>>2];b=a+128|0;h[b>>3]=l;h[a+136>>3]=m*-.40909090909090906;d=a+144|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];h[a+160>>3]=l;g=-g;h[a+168>>3]=g;h[a+176>>3]=k;i=-i;h[a+184>>3]=i;h[a+192>>3]=0.0;h[a+200>>3]=i;h[a+208>>3]=j;h[a+216>>3]=i;h[a+224>>3]=f;h[a+232>>3]=g;d=a+240|0;h[d>>3]=f;h[a+248>>3]=-e;b=a+256|0;c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];c[b+12>>2]=c[d+12>>2];b=a+288|0;d=a+272|0;c[d>>2]=c[a>>2];c[d+4>>2]=c[a+4>>2];c[d+8>>2]=c[a+8>>2];c[d+12>>2]=c[a+12>>2];c[b>>2]=c[a>>2];c[b+4>>2]=c[a+4>>2];c[b+8>>2]=c[a+8>>2];c[b+12>>2]=c[a+12>>2];return}function zz(a,b){a=a|0;b=b|0;var d=0.0,e=0.0,f=0.0,g=0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;x=l;l=l+144|0;u=x+112|0;t=x+96|0;v=x+80|0;s=x+64|0;w=x+32|0;q=x+16|0;r=x;g=x+48|0;do if(a){j=c[a+4>>2]|0;k=c[a>>2]|0;o=(c[(c[(so(k)|0)+16>>2]|0)+116>>2]&3)*90|0;c[u>>2]=c[b>>2];c[u+4>>2]=c[b+4>>2];c[u+8>>2]=c[b+8>>2];c[u+12>>2]=c[b+12>>2];bw(g,u,o);c[w>>2]=c[g>>2];c[w+4>>2]=c[g+4>>2];c[w+8>>2]=c[g+8>>2];c[w+12>>2]=c[g+12>>2];if(j|0){d=+h[w>>3];if(!(+h[j>>3]<=d)){a=0;break}if(!(d<=+h[j+16>>3])){a=0;break}d=+h[w+8>>3];if(!(+h[j+8>>3]<=d)){a=0;break}a=d<=+h[j+24>>3];break}if((k|0)==(c[42337]|0)){d=+h[20903];e=+h[20904];i=+h[20905]}else{a=k+16|0;b=c[(c[a>>2]|0)+12>>2]|0;c[42338]=b;c[42339]=c[b+44>>2];c[42340]=c[b+8>>2];if(!(c[b+40>>2]&2048)){n=(c[(c[(so(k)|0)+16>>2]|0)+116>>2]&1|0)==0;o=c[a>>2]|0;h[(n?167248:167256)>>3]=+h[o+96>>3]+ +h[o+88>>3];h[(n?167256:167248)>>3]=+h[o+80>>3];i=+h[o+32>>3]*72.0;f=+h[o+40>>3]*72.0;f=+(~~(f+(f>=0.0?.5:-.5))|0);i=+(~~(i+(i>=0.0?.5:-.5))|0)}else{bB(u,b);i=+h[u+16>>3]-+h[u>>3];f=+h[u+24>>3]-+h[u+8>>3];o=(c[(c[(so(k)|0)+16>>2]|0)+116>>2]&1|0)==0;h[(o?167248:167256)>>3]=i;h[(o?167256:167248)>>3]=f}d=+h[20906];if(d==0.0){h[20906]=1.0;d=1.0}e=+h[20907];if(e==0.0){h[20907]=1.0;e=1.0}d=i/d;h[20903]=d;e=f/e;h[20904]=e;i=i*.5;h[20905]=i;h[20908]=f*.5;o=O((c[(c[42338]|0)+4>>2]|0)+-1|0,c[42340]|0)|0;c[42341]=(o|0)>0?o:0;c[42337]=k}f=+h[w>>3]*d;h[w>>3]=f;o=w+8|0;d=+h[o>>3]*e;h[o>>3]=d;if(!(+B(+f)>i)?(e=+B(+d),p=+h[20908],!(e>p)):0){o=c[42340]|0;if((o|0)<3){a=+RJ(f/i,d/p)<1.0;break}b=(c[42342]|0)%(o|0)|0;a=(b+1|0)%(o|0)|0;k=c[42339]|0;m=c[42341]|0;n=k+(m+b<<4)|0;c[q>>2]=c[n>>2];c[q+4>>2]=c[n+4>>2];c[q+8>>2]=c[n+8>>2];c[q+12>>2]=c[n+12>>2];n=k+(m+a<<4)|0;c[r>>2]=c[n>>2];c[r+4>>2]=c[n+4>>2];c[r+8>>2]=c[n+8>>2];c[r+12>>2]=c[n+12>>2];c[s>>2]=c[w>>2];c[s+4>>2]=c[w+4>>2];c[s+8>>2]=c[w+8>>2];c[s+12>>2]=c[w+12>>2];c[v>>2]=c[41818];c[v+4>>2]=c[41819];c[v+8>>2]=c[41820];c[v+12>>2]=c[41821];c[t>>2]=c[q>>2];c[t+4>>2]=c[q+4>>2];c[t+8>>2]=c[q+8>>2];c[t+12>>2]=c[q+12>>2];c[u>>2]=c[n>>2];c[u+4>>2]=c[n+4>>2];c[u+8>>2]=c[n+8>>2];c[u+12>>2]=c[n+12>>2];if(hz(s,v,t,u)|0){c[s>>2]=c[w>>2];c[s+4>>2]=c[w+4>>2];c[s+8>>2]=c[w+8>>2];c[s+12>>2]=c[w+12>>2];c[v>>2]=c[q>>2];c[v+4>>2]=c[q+4>>2];c[v+8>>2]=c[q+8>>2];c[v+12>>2]=c[q+12>>2];c[t>>2]=c[r>>2];c[t+4>>2]=c[r+4>>2];c[t+8>>2]=c[r+8>>2];c[t+12>>2]=c[r+12>>2];c[u>>2]=c[41818];c[u+4>>2]=c[41819];c[u+8>>2]=c[41820];c[u+12>>2]=c[41821];n=(hz(s,v,t,u)|0)!=0;if(n?(c[s>>2]=c[w>>2],c[s+4>>2]=c[w+4>>2],c[s+8>>2]=c[w+8>>2],c[s+12>>2]=c[w+12>>2],c[v>>2]=c[r>>2],c[v+4>>2]=c[r+4>>2],c[v+8>>2]=c[r+8>>2],c[v+12>>2]=c[r+12>>2],c[t>>2]=c[41818],c[t+4>>2]=c[41819],c[t+8>>2]=c[41820],c[t+12>>2]=c[41821],c[u>>2]=c[q>>2],c[u+4>>2]=c[q+4>>2],c[u+8>>2]=c[q+8>>2],c[u+12>>2]=c[q+12>>2],(hz(s,v,t,u)|0)!=0):0){a=1;break}else{j=b;b=1}while(1){if((b|0)>=(o|0)){b=31;break}if(n){g=a;a=(a+1|0)%(o|0)|0}else{g=(j+-1+o|0)%(o|0)|0;a=j}q=k+(m+g<<4)|0;r=k+(m+a<<4)|0;c[s>>2]=c[w>>2];c[s+4>>2]=c[w+4>>2];c[s+8>>2]=c[w+8>>2];c[s+12>>2]=c[w+12>>2];c[v>>2]=c[41818];c[v+4>>2]=c[41819];c[v+8>>2]=c[41820];c[v+12>>2]=c[41821];c[t>>2]=c[q>>2];c[t+4>>2]=c[q+4>>2];c[t+8>>2]=c[q+8>>2];c[t+12>>2]=c[q+12>>2];c[u>>2]=c[r>>2];c[u+4>>2]=c[r+4>>2];c[u+8>>2]=c[r+8>>2];c[u+12>>2]=c[r+12>>2];if(!(hz(s,v,t,u)|0)){b=30;break}else{j=g;b=b+1|0}}if((b|0)==30){c[42342]=g;a=0;break}else if((b|0)==31){c[42342]=j;a=1;break}}else a=0}else a=0}else{c[42337]=0;a=0}while(0);l=x;return a&1|0}function Az(a,b){a=a|0;b=b|0;var d=0.0,e=0.0,f=0,g=0.0,i=0,j=0,k=0;j=l;l=l+32|0;f=j+16|0;i=j;if(a){a=c[a>>2]|0;k=(c[(c[(so(a)|0)+16>>2]|0)+116>>2]&3)*90|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];bw(i,f,k);g=+h[i>>3];e=+h[i+8>>3];if((a|0)==(c[42345]|0))d=+h[20911];else{i=c[(c[a+16>>2]|0)+12>>2]|0;k=(c[i+4>>2]<<1)+-2|0;d=+h[(c[i+44>>2]|0)+((((k|0)>0?k:0)|1)<<4)>>3];h[20911]=d;c[42345]=a}if(+B(+g)>d|+B(+e)>d)a=0;else a=+RJ(g,e)<=d&1}else{c[42345]=0;a=0}l=j;return a|0}function Bz(e,f){e=e|0;f=f|0;var g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0,v=0,w=0;t=l;l=l+16|0;j=t;r=c[e+16>>2]|0;s=r+208|0;g=c[s>>2]|0;if((g|0)==0?(b[r+260>>1]&1)==0:0)q=0;else if(!(c[e+152>>2]&4)){xD(e,g,c[r+228>>2]|0,c[r+244>>2]|0,c[r+212>>2]|0);q=1}else q=1;n=f+16|0;k=c[(c[n>>2]|0)+12>>2]|0;o=c[k+44>>2]|0;p=c[k+8>>2]|0;k=c[k+4>>2]|0;if((c[42343]|0)<(p|0)){g=p+2|0;c[42343]=g;i=c[42344]|0;if(!i)g=xw(g<<4)|0;else g=zw(i,g<<4)|0;c[42344]=g}ez(f,j)|0;if(!(c[j>>2]&32))GD(e,21040);else GD(e,21036);g=c[42217]|0;if(g|0)PD(e,+FA(f,g,1.0,0.0));g=d[(c[n>>2]|0)+117>>0]|0;do if(!(g&1)){if(g&2|0){CD(e,HA(f,0,91300)|0);g=HA(f,0,91308)|0;ED(e,g);break}if(g&8|0){CD(e,HA(f,0,91316)|0);g=HA(f,0,91324)|0;ED(e,g);break}if(!(g&4)){g=dz(f,122106)|0;ED(e,g);az(e,f)|0;break}else{CD(e,HA(f,0,91332)|0);g=HA(f,0,91340)|0;ED(e,g);break}}else{CD(e,HA(f,0,91284)|0);g=HA(f,0,91292)|0;ED(e,g)}while(0);if(!k)if(!(a[g>>0]|0))i=1;else{CD(e,g);i=1}else i=k;j=1;f=0;while(1){if((f|0)>=(i|0))break;k=O(f,p)|0;m=c[42344]|0;g=0;while(1){if((g|0)>=(p|0))break;w=g+k|0;u=+h[o+(w<<4)+8>>3];v=c[n>>2]|0;h[m+(g<<4)>>3]=+h[v+16>>3]+ +h[o+(w<<4)>>3];h[m+(g<<4)+8>>3]=+h[v+24>>3]+u;g=g+1|0}HD(e,m,p,j);j=0;f=f+1|0}if(q){if(c[e+152>>2]&4|0)xD(e,c[s>>2]|0,c[r+228>>2]|0,c[r+244>>2]|0,c[r+212>>2]|0);yD(e)}l=t;return}function Cz(a,b,e,f){a=a|0;b=b|0;e=e|0;f=f|0;var g=0,h=0;g=l;l=l+48|0;h=g;e=Dz(b,e,f)|0;c[h+36>>2]=c[f+36>>2];iz(b,c[f+24>>2]|0,h,e,d[f+33>>0]|0,0)|0;b=h;e=a+40|0;do{c[a>>2]=c[b>>2];a=a+4|0;b=b+4|0}while((a|0)<(e|0));l=g;return}function Dz(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0.0,j=0.0,k=0,m=0.0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.0,B=0.0,C=0;z=l;l=l+32|0;y=z;g=z+24|0;k=z+16|0;x=c[(c[(c[(so(b)|0)+60>>2]|0)+16>>2]|0)+116>>2]&3;f=b+16|0;w=(c[f>>2]|0)+16|0;c[y>>2]=c[w>>2];c[y+4>>2]=c[w+4>>2];c[y+8>>2]=c[w+8>>2];c[y+12>>2]=c[w+12>>2];Ez(g,y,x);w=(c[d+16>>2]|0)+16|0;c[y>>2]=c[w>>2];c[y+4>>2]=c[w+4>>2];c[y+8>>2]=c[w+8>>2];c[y+12>>2]=c[w+12>>2];Ez(k,y,x);x=a[e+33>>0]|0;y=x&255;a:do switch(x<<24>>24){case 0:case 15:{d=0;break}default:{d=c[e+24>>2]|0;if(!d){x=(c[(c[(so(b)|0)+16>>2]|0)+116>>2]&1|0)==0;w=c[f>>2]|0;B=+h[w+80>>3]*.5;A=-B;m=+h[w+88>>3];j=-m;n=x?j:A;i=x?m:B;m=x?B:m;j=x?A:j}else{n=+h[d>>3];i=+h[d+16>>3];m=+h[d+24>>3];j=+h[d+8>>3]}x=c[g>>2]|0;v=c[g+4>>2]|0;w=c[k>>2]|0;s=c[k+4>>2]|0;t=~~j;u=~~((i+n)*.5);r=~~i;q=~~((m+j)*.5);p=~~m;o=~~n;g=0;k=0;d=0;e=0;b=0;while(1){if((k|0)==4)break a;if(1<>2]|0;else f=g}else f=g;g=f;k=k+1|0}}}while(0);l=z;return d|0}function Ez(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0;switch(d|0){case 0:{f=+h[b>>3];e=+h[b+8>>3];break}case 2:{f=+h[b>>3];e=-+h[b+8>>3];break}case 1:{f=-+h[b+8>>3];e=+h[b>>3];break}case 3:{f=+h[b+8>>3];e=+h[b>>3];break}default:{f=0.0;e=0.0}}c[a>>2]=~~(f+(f>=0.0?.5:-.5));c[a+4>>2]=~~(e+(e>=0.0?.5:-.5));return}function Fz(){var a=0,b=0,d=0;a=l;l=l+32|0;b=a+16|0;d=a;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];c[b+12>>2]=c[d+12>>2];zz(0,b)|0;c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];c[b+12>>2]=c[d+12>>2];Az(0,b)|0;c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];c[b+12>>2]=c[d+12>>2];Xy(0,b)|0;l=a;return}function Gz(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,g=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0.0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;z=l;l=l+192|0;s=z+176|0;x=z+112|0;y=z+48|0;t=z+32|0;u=z+24|0;v=z+16|0;w=z;if(!(e<<24>>24)){k=d+48|0;c[t>>2]=c[k>>2];c[t+4>>2]=c[k+4>>2];c[t+8>>2]=c[k+8>>2];c[t+12>>2]=c[k+12>>2];k=u;m=v;n=x;o=0}else{c[t>>2]=c[d>>2];c[t+4>>2]=c[d+4>>2];c[t+8>>2]=c[d+8>>2];c[t+12>>2]=c[d+12>>2];k=v;m=u;n=0;o=x}h[u>>3]=0.0;h[v>>3]=1.0;q=t+8|0;f=0.0;g=1.0;j=0;p=+h[t>>3];while(1){r=+h[q>>3];f=(f+g)*.5;QA(w,d,3,f,n,o);c[t>>2]=c[w>>2];c[t+4>>2]=c[w+4>>2];c[t+8>>2]=c[w+8>>2];c[t+12>>2]=c[w+12>>2];c[s>>2]=c[w>>2];c[s+4>>2]=c[w+4>>2];c[s+8>>2]=c[w+8>>2];c[s+12>>2]=c[w+12>>2];a:do if(!((ab[b&63](a,s)|0)<<24>>24)){e=0;while(1){if((e|0)==4){e=k;j=1;break a}j=y+(e<<4)|0;A=x+(e<<4)|0;c[j>>2]=c[A>>2];c[j+4>>2]=c[A+4>>2];c[j+8>>2]=c[A+8>>2];c[j+12>>2]=c[A+12>>2];e=e+1|0}}else e=m;while(0);h[e>>3]=f;i=+h[t>>3];p=p-i;if(!((p>=0.0?p:-p)>.5)?(r=r-+h[q>>3],!((r>=0.0?r:-r)>.5)):0)break;f=+h[u>>3];g=+h[v>>3];p=i}b:do if(!(j<<24>>24)){e=0;while(1){if((e|0)==4)break b;A=d+(e<<4)|0;y=x+(e<<4)|0;c[A>>2]=c[y>>2];c[A+4>>2]=c[y+4>>2];c[A+8>>2]=c[y+8>>2];c[A+12>>2]=c[y+12>>2];e=e+1|0}}else{e=0;while(1){if((e|0)==4)break b;A=d+(e<<4)|0;x=y+(e<<4)|0;c[A>>2]=c[x>>2];c[A+4>>2]=c[x+4>>2];c[A+8>>2]=c[x+8>>2];c[A+12>>2]=c[x+12>>2];e=e+1|0}}while(0);l=z;return}function Hz(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0.0;m=l;l=l+48|0;d=m+16|0;e=m;f=m+32|0;g=a+16|0;i=c[g>>2]|0;j=c[i+8>>2]|0;if(j|0?(k=j+4|0,c[(c[k>>2]|0)+12>>2]|0):0){c[f>>2]=a;c[f+4>>2]=0;n=+h[i+96>>3];h[e>>3]=+h[b>>3]-+h[i+16>>3];h[e+8>>3]=+h[b+8>>3]-+h[i+24>>3];k=c[(c[k>>2]|0)+12>>2]|0;c[d>>2]=c[e>>2];c[d+4>>2]=c[e+4>>2];c[d+8>>2]=c[e+8>>2];c[d+12>>2]=c[e+12>>2];k=ab[k&63](f,d)|0;h[(c[g>>2]|0)+96>>3]=n;Iz(f,a,b,k)}l=m;return}function Iz(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0.0,m=0,n=0;n=l;l=l+64|0;m=n;j=b+16|0;g=c[j>>2]|0;k=+h[g+96>>3];i=g+16|0;f=g+24|0;b=0;while(1){if((b|0)==4)break;h[m+(b<<4)>>3]=+h[d+(b<<4)>>3]-+h[i>>3];h[m+(b<<4)+8>>3]=+h[d+(b<<4)+8>>3]-+h[f>>3];b=b+1|0}Gz(a,c[(c[(c[g+8>>2]|0)+4>>2]|0)+12>>2]|0,m,e);b=0;while(1){if((b|0)==4)break;e=c[j>>2]|0;h[d+(b<<4)>>3]=+h[e+16>>3]+ +h[m+(b<<4)>>3];h[d+(b<<4)+8>>3]=+h[e+24>>3]+ +h[m+(b<<4)+8>>3];b=b+1|0}h[(c[j>>2]|0)+96>>3]=k;l=n;return}function Jz(b,d){b=b|0;d=d|0;var e=0,f=0;while(1){f=b+16|0;b=c[f>>2]|0;if(!(a[b+112>>0]|0))break;b=c[b+116>>2]|0}b=c[b+8>>2]|0;if(!b){b=ww(40)|0;c[(c[f>>2]|0)+8>>2]=b}e=c[b>>2]|0;if(!e)b=xw(((c[b+4>>2]|0)*48|0)+48|0)|0;else b=zw(e,((c[b+4>>2]|0)*48|0)+48|0)|0;f=c[(c[f>>2]|0)+8>>2]|0;c[f>>2]=b;f=f+4|0;e=c[f>>2]|0;c[f>>2]=e+1;f=b+(e*48|0)|0;c[f>>2]=ww(d<<4)|0;c[b+(e*48|0)+4>>2]=d;b=b+(e*48|0)+8|0;e=b+40|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(e|0));return f|0}function Kz(b,e,f,g,i){b=b|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0.0,F=0.0;D=l;l=l+96|0;A=D+16|0;u=D;x=D+92|0;y=D+88|0;v=D+80|0;m=c[((c[b>>2]&3|0)==3?b:b+48|0)+40>>2]|0;z=so(m)|0;B=Jz(b,g)|0;n=b;while(1){o=c[n+16>>2]|0;if(!(a[o+112>>0]|0))break;n=c[o+116>>2]|0}if((a[i+8>>0]|0)==0?(j=c[m+16>>2]|0,k=c[e+16>>2]|0,(c[j+232>>2]|0)==(c[k+232>>2]|0)):0){p=(c[j+236>>2]|0)>(c[k+236>>2]|0);w=p?m:e;m=p?e:m}else w=e;if((m|0)==(c[((c[n>>2]&3|0)==3?n:n+48|0)+40>>2]|0)){j=o+80|0;k=o+40|0;p=d[o+86>>0]|0;e=d[o+46>>0]|0}else{j=o+40|0;k=o+80|0;p=d[o+46>>0]|0;e=d[o+86>>0]|0}o=c[j>>2]|0;j=c[k>>2]|0;if(((e|0)!=0?(r=m+16|0,q=c[(c[r>>2]|0)+8>>2]|0,(q|0)!=0):0)?(c[(c[q+4>>2]|0)+12>>2]|0)!=0:0){c[v>>2]=m;c[v+4>>2]=j;j=g+-4|0;e=u+8|0;k=0;while(1){if((k|0)>=(j|0))break;n=k+3|0;q=c[r>>2]|0;h[u>>3]=+h[f+(n<<4)>>3]-+h[q+16>>3];h[e>>3]=+h[f+(n<<4)+8>>3]-+h[q+24>>3];q=c[(c[(c[q+8>>2]|0)+4>>2]|0)+12>>2]|0;c[A>>2]=c[u>>2];c[A+4>>2]=c[u+4>>2];c[A+8>>2]=c[u+8>>2];c[A+12>>2]=c[u+12>>2];if(!((ab[q&63](v,A)|0)<<24>>24))break;else k=n}c[x>>2]=k;Iz(v,m,f+(k<<4)|0,1)}else{c[x>>2]=0;k=0}if(((p|0)!=0?(t=w+16|0,s=c[(c[t>>2]|0)+8>>2]|0,(s|0)!=0):0)?(c[(c[s+4>>2]|0)+12>>2]|0)!=0:0){c[v>>2]=w;c[v+4>>2]=o;m=g+-4|0;e=u+8|0;j=m;while(1){if((j|0)<=0)break;g=c[t>>2]|0;h[u>>3]=+h[f+(j<<4)>>3]-+h[g+16>>3];h[e>>3]=+h[f+(j<<4)+8>>3]-+h[g+24>>3];g=c[(c[(c[g+8>>2]|0)+4>>2]|0)+12>>2]|0;c[A>>2]=c[u>>2];c[A+4>>2]=c[u+4>>2];c[A+8>>2]=c[u+8>>2];c[A+12>>2]=c[u+12>>2];if(!((ab[g&63](v,A)|0)<<24>>24))break;j=j+-3|0}c[y>>2]=j;Iz(v,w,f+(j<<4)|0,0)}else{m=g+-4|0;c[y>>2]=m;j=m}while(1){if((k|0)>=(m|0))break;e=k+3|0;E=+h[f+(k<<4)>>3]-+h[f+(e<<4)>>3];F=+h[f+(k<<4)+8>>3]-+h[f+(e<<4)+8>>3];if(F*F+E*E<1.0e-06)k=e;else break}c[x>>2]=k;while(1){if((j|0)<=0)break;v=j+3|0;F=+h[f+(j<<4)>>3]-+h[f+(v<<4)>>3];E=+h[f+(j<<4)+8>>3]-+h[f+(v<<4)+8>>3];if(!(E*E+F*F<1.0e-06))break;j=j+-3|0}c[y>>2]=j;Lz(b,w,f,x,y,B,i);r=c[x>>2]|0;n=c[y>>2]|0;m=n+4|0;n=n+3|0;o=A+16|0;p=A+32|0;q=A+48|0;k=z+16|0;j=r;while(1){if((j|0)>=(m|0))break;z=(c[B>>2]|0)+(j-r<<4)|0;e=f+(j<<4)|0;c[z>>2]=c[e>>2];c[z+4>>2]=c[e+4>>2];c[z+8>>2]=c[e+8>>2];c[z+12>>2]=c[e+12>>2];c[A>>2]=c[e>>2];c[A+4>>2]=c[e+4>>2];c[A+8>>2]=c[e+8>>2];c[A+12>>2]=c[e+12>>2];e=j+1|0;if((j|0)>=(n|0)){C=38;break}y=(c[B>>2]|0)+(e-r<<4)|0;z=f+(e<<4)|0;c[y>>2]=c[z>>2];c[y+4>>2]=c[z+4>>2];c[y+8>>2]=c[z+8>>2];c[y+12>>2]=c[z+12>>2];c[o>>2]=c[z>>2];c[o+4>>2]=c[z+4>>2];c[o+8>>2]=c[z+8>>2];c[o+12>>2]=c[z+12>>2];z=j+2|0;y=(c[B>>2]|0)+(z-r<<4)|0;z=f+(z<<4)|0;c[y>>2]=c[z>>2];c[y+4>>2]=c[z+4>>2];c[y+8>>2]=c[z+8>>2];c[y+12>>2]=c[z+12>>2];c[p>>2]=c[z>>2];c[p+4>>2]=c[z+4>>2];c[p+8>>2]=c[z+8>>2];c[p+12>>2]=c[z+12>>2];z=j+3|0;y=f+(z<<4)|0;c[q>>2]=c[y>>2];c[q+4>>2]=c[y+4>>2];c[q+8>>2]=c[y+8>>2];c[q+12>>2]=c[y+12>>2];fu((c[k>>2]|0)+16|0,A);j=z}c[B+4>>2]=m-r;l=D;return}function Lz(b,d,e,f,g,h,i){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+16|0;m=p+4|0;n=p;o=b;while(1){j=c[(c[o+16>>2]|0)+116>>2]|0;if(!j)break;else o=j}if(!(a[i+8>>0]|0))j=($a[c[i>>2]&31](o)|0)&255;else j=0;Bt(o,m,n);k=i+4|0;if(($a[c[k>>2]&31](d)|0)<<24>>24)c[n>>2]=0;if(($a[c[k>>2]&31](c[((c[b>>2]&3|0)==3?b:b+48|0)+40>>2]|0)|0)<<24>>24)c[m>>2]=0;if(j|0){d=c[m>>2]|0;c[m>>2]=c[n>>2];c[n>>2]=d}if(!(a[i+9>>0]|0)){j=c[m>>2]|0;if(j|0)c[f>>2]=Qt(o,e,c[f>>2]|0,c[g>>2]|0,h,j)|0;j=c[n>>2]|0;if(j|0)c[g>>2]=Ot(o,e,c[f>>2]|0,c[g>>2]|0,h,j)|0}else{k=c[n>>2]|0;j=c[m>>2]|0;if(j|k|0)Rt(o,e,c[f>>2]|0,c[g>>2]|0,h,j,k)}l=p;return}function Mz(a,b){a=a|0;b=b|0;var d=0,e=0;if(+h[b>>3]<+h[b+16>>3]?+h[b+8>>3]<+h[b+24>>3]:0){d=c[a+84>>2]|0;e=a+80|0;a=c[e>>2]|0;c[e>>2]=a+1;a=d+(a<<5)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];c[a+24>>2]=c[b+24>>2];c[a+28>>2]=c[b+28>>2]}return}function Nz(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0,z=0.0;x=l;l=l+112|0;u=x+72|0;o=x+56|0;n=x+16|0;q=x;j=c[d>>2]&3;p=d+48|0;w=c[((j|0)==3?d:p)+40>>2]|0;t=d+16|0;r=c[t>>2]|0;i=r+16|0;if(a[r+47>>0]|0){Cz(n,w,c[((j|0)==2?d:d+-48|0)+40>>2]|0,i);j=n;n=i+40|0;do{c[i>>2]=c[j>>2];i=i+4|0;j=j+4|0}while((i|0)<(n|0))}r=w+16|0;j=c[r>>2]|0;i=c[j+8>>2]|0;if(!i)n=0;else n=c[(c[i+4>>2]|0)+16>>2]|0;i=j+16|0;j=(c[t>>2]|0)+16|0;c[o>>2]=c[i>>2];c[o+4>>2]=c[i+4>>2];c[o+8>>2]=c[i+8>>2];c[o+12>>2]=c[i+12>>2];c[u>>2]=c[j>>2];c[u+4>>2]=c[j+4>>2];c[u+8>>2]=c[j+8>>2];c[u+12>>2]=c[j+12>>2];Oz(q,o,u);c[b>>2]=c[q>>2];c[b+4>>2]=c[q+4>>2];c[b+8>>2]=c[q+8>>2];c[b+12>>2]=c[q+12>>2];if(!(g<<24>>24)){i=c[t>>2]|0;if(!(a[i+45>>0]|0))i=0;else{k=+h[i+32>>3];v=9}}else{k=+Pz(c[((c[d>>2]&3|0)==3?d:p)+40>>2]|0);v=9}if((v|0)==9){h[b+16>>3]=k;i=1}a[b+29>>0]=i;c[b+80>>2]=0;c[b+88>>2]=d;q=f+32|0;c[q>>2]=c[b>>2];c[q+4>>2]=c[b+4>>2];c[q+8>>2]=c[b+8>>2];c[q+12>>2]=c[b+12>>2];switch(e|0){case 1:{j=c[r>>2]|0;if((a[j+156>>0]|0)==0?(q=a[(c[t>>2]|0)+49>>0]|0,s=q&255,q<<24>>24!=0):0){c[u>>2]=c[f>>2];c[u+4>>2]=c[f+4>>2];c[u+8>>2]=c[f+8>>2];c[u+12>>2]=c[f+12>>2];c[u+16>>2]=c[f+16>>2];c[u+20>>2]=c[f+20>>2];c[u+24>>2]=c[f+24>>2];c[u+28>>2]=c[f+28>>2];do if(!(s&4)){if(s&1|0){c[f+48>>2]=1;i=u+24|0;h[i>>3]=+h[(+h[i>>3]>+h[b+8>>3]?u+16|0:b)+8>>3];i=f+56|0;c[i>>2]=c[u>>2];c[i+4>>2]=c[u+4>>2];c[i+8>>2]=c[u+8>>2];c[i+12>>2]=c[u+12>>2];c[i+16>>2]=c[u+16>>2];c[i+20>>2]=c[u+20>>2];c[i+24>>2]=c[u+24>>2];c[i+28>>2]=c[u+28>>2];i=1;break}i=f+48|0;if(!(s&8)){c[i>>2]=2;h[u>>3]=+h[b>>3];h[u+8>>3]=+h[j+24>>3]-+h[j+80>>3]*.5;h[u+24>>3]=+h[b+8>>3];i=f+56|0;c[i>>2]=c[u>>2];c[i+4>>2]=c[u+4>>2];c[i+8>>2]=c[u+8>>2];c[i+12>>2]=c[u+12>>2];c[i+16>>2]=c[u+16>>2];c[i+20>>2]=c[u+20>>2];c[i+24>>2]=c[u+24>>2];c[i+28>>2]=c[u+28>>2];i=1;break}else{c[i>>2]=8;h[u+16>>3]=+h[b>>3];h[u+8>>3]=+h[j+24>>3]-+h[j+80>>3]*.5;h[u+24>>3]=+h[b+8>>3];i=f+56|0;c[i>>2]=c[u>>2];c[i+4>>2]=c[u+4>>2];c[i+8>>2]=c[u+8>>2];c[i+12>>2]=c[u+12>>2];c[i+16>>2]=c[u+16>>2];c[i+20>>2]=c[u+20>>2];c[i+24>>2]=c[u+24>>2];c[i+28>>2]=c[u+28>>2];i=1;break}}else{c[f+48>>2]=4;k=+h[u>>3];if(+h[b>>3]<+h[j+16>>3]){z=k+-1.0;y=+h[b+8>>3];b=u+16|0;k=+h[b>>3];m=+h[j+80>>3]*.5+ +h[j+24>>3];m=m+ +((c[(c[(so(w)|0)+16>>2]|0)+252>>2]|0)/2|0|0);i=c[r>>2]|0;h[b>>3]=+h[i+16>>3]-+h[i+88>>3];h[u+24>>3]=y;h[u+8>>3]=+h[i+24>>3]-+h[i+80>>3]*.5;h[u>>3]=z;h[f+56>>3]=z;h[f+64>>3]=y;h[f+72>>3]=k;h[f+80>>3]=m;i=f+88|0;c[i>>2]=c[u>>2];c[i+4>>2]=c[u+4>>2];c[i+8>>2]=c[u+8>>2];c[i+12>>2]=c[u+12>>2];c[i+16>>2]=c[u+16>>2];c[i+20>>2]=c[u+20>>2];c[i+24>>2]=c[u+24>>2];c[i+28>>2]=c[u+28>>2];i=2;break}else{m=+h[b+8>>3];i=u+16|0;y=+h[i>>3]+1.0;z=+h[j+80>>3]*.5+ +h[j+24>>3];z=z+ +((c[(c[(so(w)|0)+16>>2]|0)+252>>2]|0)/2|0|0);b=c[r>>2]|0;h[u>>3]=+h[b+96>>3]+ +h[b+16>>3];h[u+24>>3]=m;h[u+8>>3]=+h[b+24>>3]-+h[b+80>>3]*.5;h[i>>3]=y;h[f+56>>3]=k;h[f+64>>3]=m;h[f+72>>3]=y;h[f+80>>3]=z;i=f+88|0;c[i>>2]=c[u>>2];c[i+4>>2]=c[u+4>>2];c[i+8>>2]=c[u+8>>2];c[i+12>>2]=c[u+12>>2];c[i+16>>2]=c[u+16>>2];c[i+20>>2]=c[u+20>>2];c[i+24>>2]=c[u+24>>2];c[i+28>>2]=c[u+28>>2];i=2;break}}while(0);c[f+52>>2]=i;while(1){i=c[d+16>>2]|0;if(!(a[i+112>>0]|0))break;d=c[i+116>>2]|0}a[((w|0)==(c[((c[d>>2]&3|0)==3?d:d+48|0)+40>>2]|0)?i+16|0:i+56|0)+30>>0]=0}else{j=1;v=47}break}case 2:{s=a[(c[t>>2]|0)+49>>0]|0;j=s&255;if(!(s<<24>>24))v=46;else{c[u>>2]=c[f>>2];c[u+4>>2]=c[f+4>>2];c[u+8>>2]=c[f+8>>2];c[u+12>>2]=c[f+12>>2];c[u+16>>2]=c[f+16>>2];c[u+20>>2]=c[f+20>>2];c[u+24>>2]=c[f+24>>2];c[u+28>>2]=c[f+28>>2];do if(!(j&4)){if(j&1|0)if((c[f+48>>2]|0)==4){i=c[r>>2]|0;z=+h[i+24>>3]-+h[i+80>>3]*.5;i=u+16|0;y=+h[i>>3]+1.0;k=+h[b>>3];m=z-+((c[(c[(so(w)|0)+16>>2]|0)+252>>2]|0)/2|0|0);b=c[r>>2]|0;h[u>>3]=+h[b+96>>3]+ +h[b+16>>3];h[u+8>>3]=z;h[u+24>>3]=+h[b+80>>3]*.5+ +h[b+24>>3];h[i>>3]=y;h[f+56>>3]=k;h[f+64>>3]=m;h[f+72>>3]=y;h[f+80>>3]=z;i=f+88|0;c[i>>2]=c[u>>2];c[i+4>>2]=c[u+4>>2];c[i+8>>2]=c[u+8>>2];c[i+12>>2]=c[u+12>>2];c[i+16>>2]=c[u+16>>2];c[i+20>>2]=c[u+20>>2];c[i+24>>2]=c[u+24>>2];c[i+28>>2]=c[u+28>>2];i=2;break}else{i=u+24|0;h[i>>3]=+h[(+h[i>>3]>+h[b+8>>3]?u+16|0:b)+8>>3];i=f+56|0;c[i>>2]=c[u>>2];c[i+4>>2]=c[u+4>>2];c[i+8>>2]=c[u+8>>2];c[i+12>>2]=c[u+12>>2];c[i+16>>2]=c[u+16>>2];c[i+20>>2]=c[u+20>>2];c[i+24>>2]=c[u+24>>2];c[i+28>>2]=c[u+28>>2];i=1;break}k=+h[b>>3];if(!(j&8)){h[u>>3]=k;e=c[r>>2]|0;k=+h[e+24>>3];m=+h[e+80>>3]*.5;if((c[f+48>>2]|0)==4){h[u+24>>3]=m+k;k=+h[b+8>>3];i=u}else{h[u+8>>3]=k-m;k=+h[b+8>>3]+1.0;i=u+16|0}h[i+8>>3]=k;i=f+56|0;c[i>>2]=c[u>>2];c[i+4>>2]=c[u+4>>2];c[i+8>>2]=c[u+8>>2];c[i+12>>2]=c[u+12>>2];c[i+16>>2]=c[u+16>>2];c[i+20>>2]=c[u+20>>2];c[i+24>>2]=c[u+24>>2];c[i+28>>2]=c[u+28>>2];i=1;break}else{i=u+16|0;h[i>>3]=k+1.0;e=c[r>>2]|0;k=+h[e+24>>3];m=+h[e+80>>3]*.5;if((c[f+48>>2]|0)==4){h[u+24>>3]=m+k;k=+h[b+8>>3]+-1.0;i=u}else{h[u+8>>3]=k-m;k=+h[b+8>>3]+1.0}h[i+8>>3]=k;i=f+56|0;c[i>>2]=c[u>>2];c[i+4>>2]=c[u+4>>2];c[i+8>>2]=c[u+8>>2];c[i+12>>2]=c[u+12>>2];c[i+16>>2]=c[u+16>>2];c[i+20>>2]=c[u+20>>2];c[i+24>>2]=c[u+24>>2];c[i+28>>2]=c[u+28>>2];i=1;break}}else{i=u+8|0;h[i>>3]=+h[(+h[i>>3]<+h[b+8>>3]?u:b)+8>>3];i=f+56|0;c[i>>2]=c[u>>2];c[i+4>>2]=c[u+4>>2];c[i+8>>2]=c[u+8>>2];c[i+12>>2]=c[u+12>>2];c[i+16>>2]=c[u+16>>2];c[i+20>>2]=c[u+20>>2];c[i+24>>2]=c[u+24>>2];c[i+28>>2]=c[u+28>>2];i=1}while(0);c[f+52>>2]=i;while(1){i=c[d+16>>2]|0;if(!(a[i+112>>0]|0))break;d=c[i+116>>2]|0}a[((w|0)==(c[((c[d>>2]&3|0)==3?d:d+48|0)+40>>2]|0)?i+16|0:i+56|0)+30>>0]=0;c[f+48>>2]=j}break}default:v=46}if((v|0)==46){j=c[f+48>>2]|0;v=47}a:do if((v|0)==47){if(n){d=f+56|0;i=f+52|0;j=db[n&3](w,(c[t>>2]|0)+16|0,j,d,i)|0;if(j){c[f+48>>2]=j;break}}else{i=f+52|0;d=f+56|0};c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];c[d+8>>2]=c[f+8>>2];c[d+12>>2]=c[f+12>>2];c[d+16>>2]=c[f+16>>2];c[d+20>>2]=c[f+20>>2];c[d+24>>2]=c[f+24>>2];c[d+28>>2]=c[f+28>>2];c[i>>2]=1;switch(e|0){case 8:{ma(123205,91558,569,91568);break}case 2:{h[((c[f+48>>2]|0)==4?f+56|0:f+72|0)+8>>3]=+h[b+8>>3];break a}case 1:{h[f+80>>3]=+h[b+8>>3];c[f+48>>2]=1;break a}default:break a}}while(0);l=x;return}function Oz(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=+h[c+8>>3]+ +h[b+8>>3];h[a>>3]=+h[c>>3]+ +h[b>>3];h[a+8>>3]=d;return}function Pz(a){a=a|0;var b=0.0,d=0,e=0,f=0.0,g=0,i=0,j=0,k=0.0,l=0.0;i=c[a+16>>2]|0;j=c[i+172>>2]|0;f=0.0;g=0;while(1){a=c[j+(g<<2)>>2]|0;if(!a)break;f=+h[(c[(c[((c[a>>2]&3|0)==3?a:a+48|0)+40>>2]|0)+16>>2]|0)+16>>3]+f;g=g+1|0}e=c[i+180>>2]|0;b=0.0;a=0;while(1){d=c[e+(a<<2)>>2]|0;if(!d)break;b=+h[(c[(c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0)+16>>2]|0)+16>>3]+b;a=a+1|0}k=+h[i+16>>3];l=+h[i+24>>3];j=c[j>>2]|0;f=+K(+(l-+h[(c[(c[((c[j>>2]&3|0)==3?j:j+48|0)+40>>2]|0)+16>>2]|0)+24>>3]),+(k-f/+(g|0)));j=c[e>>2]|0;return +((+K(+(+h[(c[(c[((c[j>>2]&3|0)==2?j:j+-48|0)+40>>2]|0)+16>>2]|0)+24>>3]-l),+(b/+(a|0)-k))+f)*.5)}function Qz(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.0,B=0.0;z=l;l=l+112|0;w=z+72|0;p=z+56|0;n=z+16|0;t=z;j=c[d>>2]&3;r=d+-48|0;y=c[((j|0)==2?d:r)+40>>2]|0;u=d+16|0;s=c[u>>2]|0;i=s+56|0;if(a[s+87>>0]|0){Cz(n,y,c[((j|0)==3?d:d+48|0)+40>>2]|0,i);j=n;n=i+40|0;do{c[i>>2]=c[j>>2];i=i+4|0;j=j+4|0}while((i|0)<(n|0))}s=y+16|0;j=c[s>>2]|0;i=c[j+8>>2]|0;if(!i)o=0;else o=c[(c[i+4>>2]|0)+16>>2]|0;n=b+40|0;i=j+16|0;j=(c[u>>2]|0)+56|0;c[p>>2]=c[i>>2];c[p+4>>2]=c[i+4>>2];c[p+8>>2]=c[i+8>>2];c[p+12>>2]=c[i+12>>2];c[w>>2]=c[j>>2];c[w+4>>2]=c[j+4>>2];c[w+8>>2]=c[j+8>>2];c[w+12>>2]=c[j+12>>2];Oz(t,p,w);c[n>>2]=c[t>>2];c[n+4>>2]=c[t+4>>2];c[n+8>>2]=c[t+8>>2];c[n+12>>2]=c[t+12>>2];if(!(g<<24>>24)){i=c[u>>2]|0;if(!(a[i+85>>0]|0))q=0;else{h[b+56>>3]=+h[i+72>>3];q=1}}else{m=+Pz(c[((c[d>>2]&3|0)==2?d:r)+40>>2]|0)+3.141592653589793;h[b+56>>3]=m;if(m<6.283185307179586)q=1;else ma(91578,91558,606,91602)}a[b+69>>0]=q;t=f+32|0;c[t>>2]=c[n>>2];c[t+4>>2]=c[n+4>>2];c[t+8>>2]=c[n+8>>2];c[t+12>>2]=c[n+12>>2];switch(e|0){case 1:{j=c[s>>2]|0;if((a[j+156>>0]|0)==0?(t=a[(c[u>>2]|0)+89>>0]|0,v=t&255,t<<24>>24!=0):0){c[w>>2]=c[f>>2];c[w+4>>2]=c[f+4>>2];c[w+8>>2]=c[f+8>>2];c[w+12>>2]=c[f+12>>2];c[w+16>>2]=c[f+16>>2];c[w+20>>2]=c[f+20>>2];c[w+24>>2]=c[f+24>>2];c[w+28>>2]=c[f+28>>2];do if(!(v&4))if(!(v&1)){i=f+48|0;if(!(v&8)){c[i>>2]=2;h[w>>3]=+h[n>>3];h[w+24>>3]=+h[j+80>>3]*.5+ +h[j+24>>3];h[w+8>>3]=+h[b+48>>3];i=f+56|0;c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[i+8>>2]=c[w+8>>2];c[i+12>>2]=c[w+12>>2];c[i+16>>2]=c[w+16>>2];c[i+20>>2]=c[w+20>>2];c[i+24>>2]=c[w+24>>2];c[i+28>>2]=c[w+28>>2];i=1;break}else{c[i>>2]=8;h[w+16>>3]=+h[n>>3];h[w+24>>3]=+h[j+80>>3]*.5+ +h[j+24>>3];h[w+8>>3]=+h[b+48>>3];i=f+56|0;c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[i+8>>2]=c[w+8>>2];c[i+12>>2]=c[w+12>>2];c[i+16>>2]=c[w+16>>2];c[i+20>>2]=c[w+20>>2];c[i+24>>2]=c[w+24>>2];c[i+28>>2]=c[w+28>>2];i=1;break}}else{c[f+48>>2]=1;k=+h[w>>3];if(+h[n>>3]<+h[j+16>>3]){B=k+-1.0;m=+h[b+48>>3];b=w+16|0;k=+h[b>>3];A=+h[j+80>>3]*-.5+ +h[j+24>>3];A=A-+((c[(c[(so(y)|0)+16>>2]|0)+252>>2]|0)/2|0|0);i=c[s>>2]|0;h[b>>3]=+h[i+16>>3]-+h[i+88>>3];h[w+8>>3]=m;h[w+24>>3]=+h[i+80>>3]*.5+ +h[i+24>>3];h[w>>3]=B;h[f+56>>3]=B;h[f+64>>3]=A;h[f+72>>3]=k;h[f+80>>3]=m;i=f+88|0;c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[i+8>>2]=c[w+8>>2];c[i+12>>2]=c[w+12>>2];c[i+16>>2]=c[w+16>>2];c[i+20>>2]=c[w+20>>2];c[i+24>>2]=c[w+24>>2];c[i+28>>2]=c[w+28>>2];i=2;break}else{B=+h[b+48>>3];i=w+16|0;A=+h[i>>3]+1.0;m=+h[j+80>>3]*-.5+ +h[j+24>>3];m=m-+((c[(c[(so(y)|0)+16>>2]|0)+252>>2]|0)/2|0|0);b=c[s>>2]|0;h[w>>3]=+h[b+96>>3]+ +h[b+16>>3];h[w+8>>3]=B;h[w+24>>3]=+h[b+80>>3]*.5+ +h[b+24>>3];h[i>>3]=A;h[f+56>>3]=k;h[f+64>>3]=m;h[f+72>>3]=A;h[f+80>>3]=B;i=f+88|0;c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[i+8>>2]=c[w+8>>2];c[i+12>>2]=c[w+12>>2];c[i+16>>2]=c[w+16>>2];c[i+20>>2]=c[w+20>>2];c[i+24>>2]=c[w+24>>2];c[i+28>>2]=c[w+28>>2];i=2;break}}else{c[f+48>>2]=4;i=w+8|0;h[i>>3]=+h[(+h[i>>3]<+h[b+48>>3]?w:n)+8>>3];i=f+56|0;c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[i+8>>2]=c[w+8>>2];c[i+12>>2]=c[w+12>>2];c[i+16>>2]=c[w+16>>2];c[i+20>>2]=c[w+20>>2];c[i+24>>2]=c[w+24>>2];c[i+28>>2]=c[w+28>>2];i=1}while(0);c[f+52>>2]=i;while(1){i=c[d+16>>2]|0;if(!(a[i+112>>0]|0))break;d=c[i+116>>2]|0}a[((y|0)==(c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0)?i+56|0:i+16|0)+30>>0]=0;c[f+48>>2]=v}else{j=4;x=47}break}case 2:{v=a[(c[u>>2]|0)+89>>0]|0;j=v&255;if(!(v<<24>>24))x=46;else{c[w>>2]=c[f>>2];c[w+4>>2]=c[f+4>>2];c[w+8>>2]=c[f+8>>2];c[w+12>>2]=c[f+12>>2];c[w+16>>2]=c[f+16>>2];c[w+20>>2]=c[f+20>>2];c[w+24>>2]=c[f+24>>2];c[w+28>>2]=c[f+28>>2];do if(!(j&4)){if(j&1|0)if((c[f+48>>2]|0)==4){k=+h[w>>3]+-1.0;i=c[s>>2]|0;B=+h[i+24>>3]-+h[i+80>>3]*.5;A=+h[n>>3];m=B-+((c[(c[(so(y)|0)+16>>2]|0)+252>>2]|0)/2|0|0);i=c[s>>2]|0;h[w+16>>3]=+h[i+16>>3]+-2.0-+h[i+88>>3];h[w+8>>3]=B;h[w+24>>3]=+h[i+80>>3]*.5+ +h[i+24>>3];h[w>>3]=k;h[f+56>>3]=k;h[f+64>>3]=m;h[f+72>>3]=A;h[f+80>>3]=B;i=f+88|0;c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[i+8>>2]=c[w+8>>2];c[i+12>>2]=c[w+12>>2];c[i+16>>2]=c[w+16>>2];c[i+20>>2]=c[w+20>>2];c[i+24>>2]=c[w+24>>2];c[i+28>>2]=c[w+28>>2];i=2;break}else{i=w+24|0;h[i>>3]=+h[(+h[i>>3]>+h[b+8>>3]?w+16|0:b)+8>>3];i=f+56|0;c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[i+8>>2]=c[w+8>>2];c[i+12>>2]=c[w+12>>2];c[i+16>>2]=c[w+16>>2];c[i+20>>2]=c[w+20>>2];c[i+24>>2]=c[w+24>>2];c[i+28>>2]=c[w+28>>2];i=1;break}k=+h[n>>3];if(!(j&8)){h[w>>3]=k+-1.0;e=c[s>>2]|0;k=+h[e+24>>3];m=+h[e+80>>3]*.5;if((c[f+48>>2]|0)==4){h[w+24>>3]=m+k;k=+h[b+48>>3]+-1.0;i=w}else{h[w+8>>3]=k-m;k=+h[b+48>>3];i=w+16|0}h[i+8>>3]=k;i=f+56|0;c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[i+8>>2]=c[w+8>>2];c[i+12>>2]=c[w+12>>2];c[i+16>>2]=c[w+16>>2];c[i+20>>2]=c[w+20>>2];c[i+24>>2]=c[w+24>>2];c[i+28>>2]=c[w+28>>2];i=1;break}else{i=w+16|0;h[i>>3]=k+1.0;e=c[s>>2]|0;k=+h[e+24>>3];m=+h[e+80>>3]*.5;if((c[f+48>>2]|0)==4){h[w+24>>3]=m+k;k=+h[b+48>>3]+-1.0;i=w}else{h[w+8>>3]=k-m;k=+h[b+48>>3]+1.0}h[i+8>>3]=k;i=f+56|0;c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[i+8>>2]=c[w+8>>2];c[i+12>>2]=c[w+12>>2];c[i+16>>2]=c[w+16>>2];c[i+20>>2]=c[w+20>>2];c[i+24>>2]=c[w+24>>2];c[i+28>>2]=c[w+28>>2];i=1;break}}else{i=w+8|0;h[i>>3]=+h[(+h[i>>3]<+h[b+48>>3]?w:n)+8>>3];i=f+56|0;c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[i+8>>2]=c[w+8>>2];c[i+12>>2]=c[w+12>>2];c[i+16>>2]=c[w+16>>2];c[i+20>>2]=c[w+20>>2];c[i+24>>2]=c[w+24>>2];c[i+28>>2]=c[w+28>>2];i=1}while(0);c[f+52>>2]=i;while(1){i=c[d+16>>2]|0;if(!(a[i+112>>0]|0))break;d=c[i+116>>2]|0}a[((y|0)==(c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0)?i+56|0:i+16|0)+30>>0]=0;c[f+48>>2]=j}break}default:x=46}if((x|0)==46){j=c[f+48>>2]|0;x=47}a:do if((x|0)==47){if(o){d=f+56|0;i=f+52|0;j=db[o&3](y,(c[u>>2]|0)+56|0,j,d,i)|0;if(j){c[f+48>>2]=j;break}}else{i=f+52|0;d=f+56|0};c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];c[d+8>>2]=c[f+8>>2];c[d+12>>2]=c[f+12>>2];c[d+16>>2]=c[f+16>>2];c[d+20>>2]=c[f+20>>2];c[d+24>>2]=c[f+24>>2];c[d+28>>2]=c[f+28>>2];c[i>>2]=1;switch(e|0){case 8:{ma(123205,91558,765,91602);break}case 2:{h[((c[f+48>>2]|0)==4?f+56|0:f+72|0)+8>>3]=+h[b+48>>3];break a}case 1:{h[f+64>>3]=+h[b+48>>3];c[f+48>>2]=4;break a}default:break a}}while(0);l=z;return}function Rz(b){b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0;g=c[b+16>>2]|0;i=c[g+96>>2]|0;if((a[g+44>>0]|0)==0?(a[g+84>>0]|0)==0:0)j=6;else{d=a[g+49>>0]|0;e=d&255;if(((e&8|0)==0?(f=a[g+89>>0]|0,(f&8)==0):0)?((e&5|0)==0?1:d<<24>>24!=f<<24>>24):0)j=6;else b=0}if((j|0)==6)if(!i)b=18;else{b=(c[(c[(so(c[((c[b>>2]&3|0)==2?b:b+-48|0)+40>>2]|0)|0)+16>>2]|0)+116>>2]&1|0)!=0;b=~~(+h[(b?i+32|0:i+24|0)>>3]+18.0)}return b|0}function Sz(b,d,e,f,g,h,i){b=b|0;d=d|0;e=e|0;f=f|0;g=+g;h=+h;i=i|0;var j=0,k=0,l=0,m=0;b=c[(c[d+(e<<2)>>2]|0)+16>>2]|0;if((a[b+44>>0]|0)==0?(a[b+84>>0]|0)==0:0)l=6;else l=3;do if((l|0)==3){j=a[b+49>>0]|0;k=j&255;if(!(k&8)){m=a[b+89>>0]|0;if((m&8)==0?((k&5|0)==0?1:j<<24>>24!=m<<24>>24):0){l=6;break}if(!(a[b+89>>0]&8)){if(k&4|0){Uz(d,e,f,g,h,i);break}if(!(k&1))ma(123205,91558,1231,91610);else{Wz(d,e,f,g,h,i);break}}}if((j&2)==0?(a[b+89>>0]&2)==0:0){Vz(d,e,f,g,h,i);break}Uz(d,e,f,g,h,i)}while(0);if((l|0)==6)Tz(d,e,f,g,h,i);return}function Tz(b,e,f,g,i,j){b=b|0;e=e|0;f=f|0;g=+g;i=+i;j=j|0;var k=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0.0,w=0,x=0,y=0,z=0.0,A=0,B=0,C=0.0,D=0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0.0,R=0.0,S=0;P=l;l=l+16080|0;L=P+80|0;M=P+64|0;N=P+48|0;O=P+32|0;J=P+16|0;K=P;B=c[b+(e<<2)>>2]|0;n=i*.5/+(f|0);n=n>2.0?n:2.0;D=(c[((c[B>>2]&3|0)==3?B:B+48|0)+40>>2]|0)+16|0;A=c[D>>2]|0;C=+h[A+16>>3];H=+h[A+24>>3];B=c[B+16>>2]|0;m=+h[B+16>>3];E=m+C;F=+h[B+24>>3]+H;i=+h[B+56>>3];G=i+C;H=+h[B+64>>3]+H;k=!(F>=H)?-1:1;p=+h[A+96>>3];switch(Xz(d[B+49>>0]|0,d[B+89>>0]|0)|0){case 65:case 32:{if(F==H)k=0-k|0;break}default:{}}Q=(p-m)*3.0;m=(p-i)*3.0;v=n*+(k|0);u=L+8|0;w=L+16|0;x=L+32|0;y=L+48|0;z=(H+F)*.5;A=L+64|0;B=L+80|0;s=L+96|0;t=L+104|0;r=0;o=0.0;i=p;n=p=(f|0))break;q=e+1|0;e=c[b+(e<<2)>>2]|0;p=i+g;n=n+g;m=m+g;o=o+v;h[L>>3]=E;h[u>>3]=F;Q=o+F;Yz(M,n*.3333333333333333+E,Q);c[w>>2]=c[M>>2];c[w+4>>2]=c[M+4>>2];c[w+8>>2]=c[M+8>>2];c[w+12>>2]=c[M+12>>2];R=p+C;Yz(N,R,Q);c[x>>2]=c[N>>2];c[x+4>>2]=c[N+4>>2];c[x+8>>2]=c[N+8>>2];c[x+12>>2]=c[N+12>>2];Yz(O,R,z);c[y>>2]=c[O>>2];c[y+4>>2]=c[O+4>>2];c[y+8>>2]=c[O+8>>2];c[y+12>>2]=c[O+12>>2];Q=H-o;Yz(J,R,Q);c[A>>2]=c[J>>2];c[A+4>>2]=c[J+4>>2];c[A+8>>2]=c[J+8>>2];c[A+12>>2]=c[J+12>>2];Yz(K,m*.3333333333333333+G,Q);c[B>>2]=c[K>>2];c[B+4>>2]=c[K+4>>2];c[B+8>>2]=c[K+8>>2];c[B+12>>2]=c[K+12>>2];h[s>>3]=G;h[t>>3]=H;k=e+16|0;if((c[(c[k>>2]|0)+96>>2]|0)!=0?(S=(c[(c[(so(c[((c[e>>2]&3|0)==3?e:e+48|0)+40>>2]|0)|0)+16>>2]|0)+116>>2]&1|0)==0,k=c[(c[k>>2]|0)+96>>2]|0,I=+h[(S?k+24|0:k+32|0)>>3],S=c[D>>2]|0,h[k+56>>3]=I*.5+p+ +h[S+16>>3],h[k+64>>3]=+h[S+24>>3],a[k+81>>0]=1,I>g):0)i=I+i;else i=p;Kz(e,c[((c[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0,L,7,j);e=q;r=r+1|0}l=P;return}function Uz(b,e,f,g,i,j){b=b|0;e=e|0;f=f|0;g=+g;i=+i;j=j|0;var k=0.0,m=0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.0,B=0,C=0,D=0.0,E=0,F=0.0,G=0.0,H=0.0,I=0.0,J=0.0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0.0,S=0;Q=l;l=l+16080|0;M=Q+80|0;N=Q+64|0;O=Q+48|0;P=Q+32|0;K=Q+16|0;L=Q;C=c[b+(e<<2)>>2]|0;q=g*.5/+(f|0);q=q>2.0?q:2.0;E=(c[((c[C>>2]&3|0)==3?C:C+48|0)+40>>2]|0)+16|0;m=c[E>>2]|0;H=+h[m+16>>3];D=+h[m+24>>3];C=c[C+16>>2]|0;k=+h[C+16>>3];p=+h[C+24>>3];F=k+H;G=p+D;g=+h[C+56>>3];o=+h[C+64>>3];H=g+H;I=o+D;n=!(F>=H)?-1.0:1.0;s=+h[m+80>>3]*.5;switch(Xz(d[C+49>>0]|0,d[C+89>>0]|0)|0){case 15:{k=(q-g+ +h[m+96>>3])*n;break}case 38:{k=(g+q+ +h[m+88>>3])*n;break}case 41:{k=(q-k+ +h[m+96>>3])*n;break}case 48:{k=(q-k+ +h[m+96>>3])*n;break}case 58:case 57:case 51:case 47:case 37:case 14:{k=n*.3333333333333333*(k-g+ +h[m+88>>3]+ +h[m+96>>3]);break}case 73:{k=(k+q+ +h[m+88>>3])*n;break}case 83:{k=(+h[m+88>>3]+k)*n;break}case 84:{k=((k-g+ +h[m+88>>3]+ +h[m+96>>3])*.5+q)*n;break}case 85:case 75:case 74:{k=((k-g+ +h[m+88>>3]+ +h[m+96>>3])*.5+q*2.0)*n;break}default:k=0.0}p=(s-p)*3.0;o=(s-o)*3.0;q=n*q;w=M+8|0;x=M+16|0;y=M+32|0;z=M+48|0;A=(H+F)*.5;B=M+64|0;C=M+80|0;u=M+96|0;v=M+104|0;t=0;g=s;p=s=(f|0))break;r=e+1|0;e=c[b+(e<<2)>>2]|0;o=g+i;p=p+i;n=n+i;k=k+q;h[M>>3]=F;h[w>>3]=G;s=k+F;Yz(N,s,p*.3333333333333333+G);c[x>>2]=c[N>>2];c[x+4>>2]=c[N+4>>2];c[x+8>>2]=c[N+8>>2];c[x+12>>2]=c[N+12>>2];R=o+D;Yz(O,s,R);c[y>>2]=c[O>>2];c[y+4>>2]=c[O+4>>2];c[y+8>>2]=c[O+8>>2];c[y+12>>2]=c[O+12>>2];Yz(P,A,R);c[z>>2]=c[P>>2];c[z+4>>2]=c[P+4>>2];c[z+8>>2]=c[P+8>>2];c[z+12>>2]=c[P+12>>2];s=H-k;Yz(K,s,R);c[B>>2]=c[K>>2];c[B+4>>2]=c[K+4>>2];c[B+8>>2]=c[K+8>>2];c[B+12>>2]=c[K+12>>2];Yz(L,s,n*.3333333333333333+I);c[C>>2]=c[L>>2];c[C+4>>2]=c[L+4>>2];c[C+8>>2]=c[L+8>>2];c[C+12>>2]=c[L+12>>2];h[u>>3]=H;h[v>>3]=I;m=e+16|0;if((c[(c[m>>2]|0)+96>>2]|0)!=0?(S=(c[(c[(so(c[((c[e>>2]&3|0)==3?e:e+48|0)+40>>2]|0)|0)+16>>2]|0)+116>>2]&1|0)==0,m=c[(c[m>>2]|0)+96>>2]|0,J=+h[(S?m+32|0:m+24|0)>>3],S=c[E>>2]|0,h[m+64>>3]=J*.5+o+ +h[S+24>>3],h[m+56>>3]=+h[S+16>>3],a[m+81>>0]=1,J>i):0)g=J+g;else g=o;Kz(e,c[((c[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0,M,7,j);e=r;t=t+1|0}l=Q;return}function Vz(b,e,f,g,i,j){b=b|0;e=e|0;f=f|0;g=+g;i=+i;j=j|0;var k=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0.0,w=0,x=0,y=0,z=0.0,A=0,B=0,C=0.0,D=0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0.0,R=0.0,S=0;P=l;l=l+16080|0;L=P+80|0;M=P+64|0;N=P+48|0;O=P+32|0;J=P+16|0;K=P;B=c[b+(e<<2)>>2]|0;n=i*.5/+(f|0);n=n>2.0?n:2.0;D=(c[((c[B>>2]&3|0)==3?B:B+48|0)+40>>2]|0)+16|0;A=c[D>>2]|0;C=+h[A+16>>3];H=+h[A+24>>3];B=c[B+16>>2]|0;m=+h[B+16>>3];E=m+C;F=+h[B+24>>3]+H;i=+h[B+56>>3];G=i+C;H=+h[B+64>>3]+H;k=!(F>=H)?-1:1;p=+h[A+88>>3];switch(Xz(d[B+49>>0]|0,d[B+89>>0]|0)|0){case 67:case 12:{if(F==H)k=0-k|0;break}default:{}}Q=(m+p)*3.0;m=(i+p)*3.0;v=n*+(k|0);u=L+8|0;w=L+16|0;x=L+32|0;y=L+48|0;z=(H+F)*.5;A=L+64|0;B=L+80|0;s=L+96|0;t=L+104|0;r=0;o=0.0;i=p;n=p=(f|0))break;q=e+1|0;e=c[b+(e<<2)>>2]|0;p=i+g;n=n+g;m=m+g;o=o+v;h[L>>3]=E;h[u>>3]=F;Q=o+F;Yz(M,E-n*.3333333333333333,Q);c[w>>2]=c[M>>2];c[w+4>>2]=c[M+4>>2];c[w+8>>2]=c[M+8>>2];c[w+12>>2]=c[M+12>>2];R=C-p;Yz(N,R,Q);c[x>>2]=c[N>>2];c[x+4>>2]=c[N+4>>2];c[x+8>>2]=c[N+8>>2];c[x+12>>2]=c[N+12>>2];Yz(O,R,z);c[y>>2]=c[O>>2];c[y+4>>2]=c[O+4>>2];c[y+8>>2]=c[O+8>>2];c[y+12>>2]=c[O+12>>2];Q=H-o;Yz(J,R,Q);c[A>>2]=c[J>>2];c[A+4>>2]=c[J+4>>2];c[A+8>>2]=c[J+8>>2];c[A+12>>2]=c[J+12>>2];Yz(K,G-m*.3333333333333333,Q);c[B>>2]=c[K>>2];c[B+4>>2]=c[K+4>>2];c[B+8>>2]=c[K+8>>2];c[B+12>>2]=c[K+12>>2];h[s>>3]=G;h[t>>3]=H;k=e+16|0;if((c[(c[k>>2]|0)+96>>2]|0)!=0?(S=(c[(c[(so(c[((c[e>>2]&3|0)==3?e:e+48|0)+40>>2]|0)|0)+16>>2]|0)+116>>2]&1|0)==0,k=c[(c[k>>2]|0)+96>>2]|0,I=+h[(S?k+24|0:k+32|0)>>3],S=c[D>>2]|0,h[k+56>>3]=I*-.5-p+ +h[S+16>>3],h[k+64>>3]=+h[S+24>>3],a[k+81>>0]=1,I>g):0)i=I+i;else i=p;Kz(e,c[((c[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0,L,7,j);e=q;r=r+1|0}l=P;return}function Wz(b,e,f,g,i,j){b=b|0;e=e|0;f=f|0;g=+g;i=+i;j=j|0;var k=0.0,m=0.0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0.0,w=0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0,C=0,D=0,E=0,F=0.0,G=0,H=0,I=0.0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0.0,R=0.0,S=0;P=l;l=l+16080|0;L=P+80|0;M=P+64|0;N=P+48|0;O=P+32|0;J=P+16|0;K=P;C=c[b+(e<<2)>>2]|0;B=g*.5/+(f|0);w=(c[((c[C>>2]&3|0)==3?C:C+48|0)+40>>2]|0)+16|0;D=c[w>>2]|0;z=+h[D+16>>3];v=+h[D+24>>3];C=c[C+16>>2]|0;m=+h[C+24>>3];x=+h[C+16>>3]+z;y=m+v;n=+h[C+64>>3];z=+h[C+56>>3]+z;A=n+v;u=!(x>=z)?-1:1;o=+h[D+80>>3]*.5;C=(Xz(d[C+49>>0]|0,d[C+89>>0]|0)|0)==67;m=(m+o)*3.0;n=(n+o)*3.0;B=(B>2.0?B:2.0)*+((C?0-u|0:u)|0);u=L+8|0;C=L+16|0;D=L+32|0;E=L+48|0;F=(z+x)*.5;G=L+64|0;H=L+80|0;s=L+96|0;t=L+104|0;g=o;k=0.0;m=o=(f|0))break;r=e+1|0;p=c[b+(e<<2)>>2]|0;o=g+i;m=m+i;n=n+i;k=k+B;h[L>>3]=x;h[u>>3]=y;Q=k+x;Yz(M,Q,y-m*.3333333333333333);c[C>>2]=c[M>>2];c[C+4>>2]=c[M+4>>2];c[C+8>>2]=c[M+8>>2];c[C+12>>2]=c[M+12>>2];R=v-o;Yz(N,Q,R);c[D>>2]=c[N>>2];c[D+4>>2]=c[N+4>>2];c[D+8>>2]=c[N+8>>2];c[D+12>>2]=c[N+12>>2];Yz(O,F,R);c[E>>2]=c[O>>2];c[E+4>>2]=c[O+4>>2];c[E+8>>2]=c[O+8>>2];c[E+12>>2]=c[O+12>>2];Q=z-k;Yz(J,Q,R);c[G>>2]=c[J>>2];c[G+4>>2]=c[J+4>>2];c[G+8>>2]=c[J+8>>2];c[G+12>>2]=c[J+12>>2];Yz(K,Q,A-n*.3333333333333333);c[H>>2]=c[K>>2];c[H+4>>2]=c[K+4>>2];c[H+8>>2]=c[K+8>>2];c[H+12>>2]=c[K+12>>2];h[s>>3]=z;h[t>>3]=A;e=p+16|0;if((c[(c[e>>2]|0)+96>>2]|0)!=0?(S=(c[(c[(so(c[((c[p>>2]&3|0)==3?p:p+48|0)+40>>2]|0)|0)+16>>2]|0)+116>>2]&1|0)==0,e=c[(c[e>>2]|0)+96>>2]|0,I=+h[(S?e+32|0:e+24|0)>>3],S=c[w>>2]|0,h[e+64>>3]=I*-.5-o+ +h[S+24>>3],h[e+56>>3]=+h[S+16>>3],a[e+81>>0]=1,I>i):0)g=I+g;else g=o;Kz(p,c[((c[p>>2]&3|0)==2?p:p+-48|0)+40>>2]|0,L,7,j);e=r;q=q+1|0}l=P;return}function Xz(a,b){a=a|0;b=b|0;var d=0;d=0;while(1){if((d|0)>=8){b=-1;break}if((c[21064+(d<<2)>>2]|0)==(b|0)){b=d;break}d=d+1|0}d=0;while(1){if((d|0)>=8){d=-1;break}if((c[21064+(d<<2)>>2]|0)==(a|0))break;d=d+1|0}if((d|b|0)<0)d=0;else d=c[21096+(d<<5)+(b<<2)>>2]|0;return d|0}function Yz(a,b,c){a=a|0;b=+b;c=+c;h[a>>3]=b;h[a+8>>3]=c;return}function Zz(b){b=b|0;var d=0,e=0;if((c[42248]|0)!=0|(c[42247]|0)!=0){d=b+16|0;e=c[(c[d>>2]|0)+100>>2]|0;if((e|0?(a[e+81>>0]|0)==0:0)?_z(b,1)|0:0){e=so(c[((c[b>>2]&3|0)==3?b:b+48|0)+40>>2]|0)|0;cB(e,c[(c[d>>2]|0)+100>>2]|0)}e=c[(c[d>>2]|0)+104>>2]|0;if((e|0?(a[e+81>>0]|0)==0:0)?_z(b,0)|0:0){e=so(c[((c[b>>2]&3|0)==3?b:b+48|0)+40>>2]|0)|0;cB(e,c[(c[d>>2]|0)+104>>2]|0)}}return}function _z(b,d){b=b|0;d=d|0;var e=0,f=0.0,g=0.0,i=0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0;q=l;l=l+96|0;o=q+32|0;m=q+16|0;n=q;i=b+16|0;do if((a[(c[i>>2]|0)+112>>0]|0)!=6){e=c[42248]|0;if(!((e|0)!=0?(a[(Km(b,e)|0)>>0]|0)!=0:0)){e=c[42247]|0;if(!e){e=0;break}if(!(a[(Km(b,e)|0)>>0]|0)){e=0;break}}d=d<<24>>24==0;p=c[i>>2]|0;p=c[(d?p+104|0:p+100|0)>>2]|0;e=$z(b)|0;if(e){k=c[e>>2]|0;do if(d){if(c[k+8>>2]|0){e=c[k>>2]|0;j=+h[e>>3];g=+h[k+16>>3];e=e+8|0;f=+h[k+24>>3];break}e=c[k>>2]|0;g=+h[e>>3];f=+h[e+8>>3];e=0;while(1){if((e|0)==4)break;n=o+(e<<4)|0;i=(c[k>>2]|0)+(e<<4)|0;c[n>>2]=c[i>>2];c[n+4>>2]=c[i+4>>2];c[n+8>>2]=c[i+8>>2];c[n+12>>2]=c[i+12>>2];e=e+1|0}QA(m,o,3,.1,0,0);j=+h[m>>3];e=m+8|0}else{d=(c[e+4>>2]|0)+-1|0;i=k+(d*48|0)|0;if(c[k+(d*48|0)+12>>2]|0){o=c[i>>2]|0;e=(c[k+(d*48|0)+4>>2]|0)+-1|0;j=+h[o+(e<<4)>>3];g=+h[k+(d*48|0)+32>>3];e=o+(e<<4)+8|0;f=+h[k+(d*48|0)+40>>3];break}m=c[i>>2]|0;d=k+(d*48|0)+4|0;e=(c[d>>2]|0)+-1|0;g=+h[m+(e<<4)>>3];f=+h[m+(e<<4)+8>>3];e=0;while(1){if((e|0)==4)break;m=o+(e<<4)|0;k=(c[i>>2]|0)+(e+-4+(c[d>>2]|0)<<4)|0;c[m>>2]=c[k>>2];c[m+4>>2]=c[k+4>>2];c[m+8>>2]=c[k+8>>2];c[m+12>>2]=c[k+12>>2];e=e+1|0}QA(n,o,3,.9,0,0);j=+h[n>>3];e=n+8|0}while(0);r=+K(+(+h[e>>3]-f),+(j-g));r=+FA(b,c[42248]|0,-25.0,-180.0)*.017453292519943295+r;j=+FA(b,c[42247]|0,1.0,0.0)*10.0;h[p+56>>3]=j*+E(+r)+g;h[p+64>>3]=+F(+r)*j+f;a[p+81>>0]=1;e=1}else e=0}else e=0;while(0);l=q;return e|0}function $z(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;h=l;l=l+16|0;f=h;d=b;while(1){e=c[d+16>>2]|0;d=c[e+8>>2]|0;if(d|0)break;if(!(a[e+112>>0]|0)){g=5;break}d=c[e+116>>2]|0}if((g|0)==5){g=En(c[((c[b>>2]&3|0)==3?b:b+48|0)+40>>2]|0)|0;d=En(c[((c[b>>2]&3|0)==2?b:b+-48|0)+40>>2]|0)|0;c[f>>2]=g;c[f+4>>2]=d;$l(1,91623,f)|0;d=0}l=h;return d|0}function aA(a,d,e){a=a|0;d=d|0;e=e|0;var f=0.0,g=0.0,i=0.0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0.0;s=l;l=l+96|0;m=s+80|0;n=s+64|0;o=s+48|0;p=s+32|0;q=s+16|0;r=s;k=b[(c[d+16>>2]|0)+136>>1]|0;d=e+16|0;bA(c[(c[d>>2]|0)+8>>2]|0,p,q);f=+h[p>>3];g=+h[q>>3];t=f-g;i=+h[p+8>>3];j=+h[q+8>>3];u=i-j;a:do if(u*u+t*t<1.0e-06){c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];c[o+8>>2]=c[p+8>>2];c[o+12>>2]=c[p+12>>2]}else switch(k&14){case 4:case 10:{h[n>>3]=(g+f)*.5;h[n+8>>3]=(j+i)*.5;q=c[(c[d>>2]|0)+8>>2]|0;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];c[m+8>>2]=c[n+8>>2];c[m+12>>2]=c[n+12>>2];WA(r,q,m);c[o>>2]=c[r>>2];c[o+4>>2]=c[r+4>>2];c[o+8>>2]=c[r+8>>2];c[o+12>>2]=c[r+12>>2];break a}default:{cA(o,c[(c[d>>2]|0)+8>>2]|0,p,q);break a}}while(0);c[a>>2]=c[o>>2];c[a+4>>2]=c[o+4>>2];c[a+8>>2]=c[o+8>>2];c[a+12>>2]=c[o+12>>2];l=s;return}function bA(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;h=l;l=l+32|0;g=h+16|0;f=h;j=c[a>>2]|0;e=c[j>>2]|0;i=c[j+8>>2]|0;k=j+16|0;c[g>>2]=c[k>>2];c[g+4>>2]=c[k+4>>2];c[g+8>>2]=c[k+8>>2];c[g+12>>2]=c[k+12>>2];j=j+32|0;c[f>>2]=c[j>>2];c[f+4>>2]=c[j+4>>2];c[f+8>>2]=c[j+8>>2];c[f+12>>2]=c[j+12>>2];if(!i){c[b>>2]=c[e>>2];c[b+4>>2]=c[e+4>>2];c[b+8>>2]=c[e+8>>2];c[b+12>>2]=c[e+12>>2]}else{c[b>>2]=c[g>>2];c[b+4>>2]=c[g+4>>2];c[b+8>>2]=c[g+8>>2];c[b+12>>2]=c[g+12>>2]}i=c[a>>2]|0;j=(c[a+4>>2]|0)+-1|0;e=c[i+(j*48|0)>>2]|0;a=c[i+(j*48|0)+4>>2]|0;k=c[i+(j*48|0)+12>>2]|0;b=i+(j*48|0)+16|0;c[g>>2]=c[b>>2];c[g+4>>2]=c[b+4>>2];c[g+8>>2]=c[b+8>>2];c[g+12>>2]=c[b+12>>2];j=i+(j*48|0)+32|0;c[f>>2]=c[j>>2];c[f+4>>2]=c[j+4>>2];c[f+8>>2]=c[j+8>>2];c[f+12>>2]=c[j+12>>2];if(!k){k=e+(a+-1<<4)|0;c[d>>2]=c[k>>2];c[d+4>>2]=c[k+4>>2];c[d+8>>2]=c[k+8>>2];c[d+12>>2]=c[k+12>>2]}else{c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];c[d+8>>2]=c[f+8>>2];c[d+12>>2]=c[f+12>>2]}l=h;return}function cA(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0.0,i=0,j=0,k=0,l=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0.0;r=c[b+4>>2]|0;g=0.0;f=0;while(1){if((f|0)>=(r|0))break;l=c[b>>2]|0;k=c[l+(f*48|0)>>2]|0;l=c[l+(f*48|0)+4>>2]|0;i=3;j=0;while(1){if((i|0)>=(l|0))break;q=+h[k+(j<<4)>>3]-+h[k+(i<<4)>>3];p=+h[k+(j<<4)+8>>3]-+h[k+(i<<4)+8>>3];i=i+3|0;j=j+3|0;g=+C(+(p*p+q*q))+g}f=f+1|0}l=0;g=g*.5;a:while(1){if((l|0)>=(r|0)){f=15;break}k=c[b>>2]|0;j=c[k+(l*48|0)>>2]|0;k=c[k+(l*48|0)+4>>2]|0;f=3;i=0;while(1){if((f|0)>=(k|0))break;m=+h[j+(i<<4)>>3];p=+h[j+(i<<4)+8>>3];n=+h[j+(f<<4)>>3];o=+h[j+(f<<4)+8>>3];q=m-n;s=p-o;q=+C(+(s*s+q*q));if(q>=g){f=12;break a}f=f+3|0;i=i+3|0;g=g-q}l=l+1|0}if((f|0)==12){h[d>>3]=m;h[d+8>>3]=p;h[e>>3]=n;h[e+8>>3]=o;s=q-g;h[a>>3]=(s*m+n*g)/q;h[a+8>>3]=(s*p+o*g)/q;return}else if((f|0)==15)ma(123523,91558,1316,91685)}function dA(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Zz(b);return}function eA(b,d,e,f,g){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;var i=0.0,j=0.0,k=0.0,l=0.0,m=0.0,n=0,o=0,p=0.0,q=0.0,r=0.0,s=0,t=0.0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0.0,C=0.0,D=0,G=0,H=0,I=0,J=0,K=0,L=0;J=fA(b)|0;I=c[J+4>>2]|0;K=c[J>>2]|0;H=I+-1|0;B=+h[K+(H<<6)+16>>3];C=+(I|0);D=(g|0)==2;G=(f|0)!=0;n=0;j=0.0;i=0.0;l=0.0;m=0.0;while(1){if((n|0)>=(I|0))break;b=~~+gA(+(n+-1|0),C);A=n+1|0;L=~~+gA(+(A|0),C);o=K+(n<<6)|0;m=+h[o>>3];z=K+(n<<6)+8|0;l=+h[z>>3];s=K+(n<<6)+16|0;t=+h[s>>3];u=K+(n<<6)+24|0;v=K+(n<<6)+32|0;w=K+(n<<6)+40|0;x=K+(n<<6)+48|0;y=K+(n<<6)+56|0;k=+hA(+h[K+(L<<6)+8>>3]-l,+h[K+(L<<6)>>3]-m);q=+hA(+h[K+(b<<6)+8>>3]-l,+h[K+(b<<6)>>3]-m);r=+Za[d&7](t,B,e);b=(n|0)==0;do if(b|(n|0)==(H|0))if(b){i=k+1.5707963267948966;if(!D){b=0;p=i;j=r;break}b=0;p=i;j=r;l=l-+F(+k)*r;m=m-+E(+k)*r;break}else{i=q+-1.5707963267948966;if(!D){b=0;p=i;j=r;break}b=0;p=i;j=r;l=l-+F(+q)*r;m=m-+E(+q)*r;break}else{p=k-q;p=1.5707963267948966-(p<0.0?p+6.283185307179586:p)*.5;j=+E(+p);j=j==0.0?0.0:r/j;i=k+1.5707963267948966;k=p+i;if(G|j>r*10.0){q=+gA(q+-1.5707963267948966,6.283185307179586);b=1;p=+gA(i,6.283185307179586);j=r;i=q}else{b=0;p=k;i=k}}while(0);h[o>>3]=m;h[z>>3]=l;h[s>>3]=t;a[u>>0]=108;h[v>>3]=i;h[w>>3]=j;c[x>>2]=b;h[y>>3]=p;n=A}o=ww(12)|0;b=0;while(1){if((b|0)>=(I|0))break;m=+h[K+(b<<6)>>3];l=+h[K+(b<<6)+8>>3];i=+h[K+(b<<6)+32>>3];j=+h[K+(b<<6)+40>>3];L=c[K+(b<<6)+48>>2]|0;k=+h[K+(b<<6)+56>>3];iA(o,+E(+i)*j+m,+F(+i)*j+l);if(L|0)jA(m,l,j,1,i,k,f,o);b=b+1|0}n=(g|0)==1;k=i+3.141592653589793;if(n)kA(o,m,l,j,i,k);else{iA(o,+E(+k)*j+m,+F(+k)*j+l);i=k}b=I+-2|0;k=m;while(1){if((b|0)<=-1)break;m=+h[K+(b<<6)>>3];l=+h[K+(b<<6)+8>>3];j=+h[K+(b<<6)+40>>3];L=c[K+(b<<6)+48>>2]|0;i=+h[K+(b<<6)+32>>3]+3.141592653589793;k=+h[K+(b<<6)+56>>3]+3.141592653589793;iA(o,+E(+k)*j+m,+F(+k)*j+l);if(L|0)jA(m,l,j,0,i,k,f,o);b=b+-1|0;k=m}if(n)kA(o,k,l,j,i,i+3.141592653589793);lA(J);return o|0}function fA(a){a=a|0;var b=0.0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0;q=l;l=l+144|0;i=q+128|0;h=q+112|0;j=q+96|0;k=q+64|0;m=q;n=q+80|0;o=mA()|0;p=c[a+4>>2]|0;f=c[a>>2]|0;c[i>>2]=c[f>>2];c[i+4>>2]=c[f+4>>2];c[i+8>>2]=c[f+8>>2];c[i+12>>2]=c[f+12>>2];nA(o,i,0.0);g=m+48|0;c[g>>2]=c[f>>2];c[g+4>>2]=c[f+4>>2];c[g+8>>2]=c[f+8>>2];c[g+12>>2]=c[f+12>>2];d=0;b=0.0;a:while(1){e=d+3|0;if((e|0)>=(p|0))break;c[m>>2]=c[g>>2];c[m+4>>2]=c[g+4>>2];c[m+8>>2]=c[g+8>>2];c[m+12>>2]=c[g+12>>2];a=1;while(1){if((a|0)==4)break;r=m+(a<<4)|0;s=f+(a+d<<4)|0;c[r>>2]=c[s>>2];c[r+4>>2]=c[s+4>>2];c[r+8>>2]=c[s+8>>2];c[r+12>>2]=c[s+12>>2];a=a+1|0}c[j>>2]=c[m>>2];c[j+4>>2]=c[m+4>>2];c[j+8>>2]=c[m+8>>2];c[j+12>>2]=c[m+12>>2];a=1;while(1){if((a|0)==21){d=e;continue a}QA(n,m,3,+(a|0)*.05,0,0);c[k>>2]=c[n>>2];c[k+4>>2]=c[n+4>>2];c[k+8>>2]=c[n+8>>2];c[k+12>>2]=c[n+12>>2];c[h>>2]=c[j>>2];c[h+4>>2]=c[j+4>>2];c[h+8>>2]=c[j+8>>2];c[h+12>>2]=c[j+12>>2];c[i>>2]=c[n>>2];c[i+4>>2]=c[n+4>>2];c[i+8>>2]=c[n+8>>2];c[i+12>>2]=c[n+12>>2];t=+oA(h,i)+b;c[i>>2]=c[k>>2];c[i+4>>2]=c[k+4>>2];c[i+8>>2]=c[k+8>>2];c[i+12>>2]=c[k+12>>2];nA(o,i,t);c[j>>2]=c[k>>2];c[j+4>>2]=c[k+4>>2];c[j+8>>2]=c[k+8>>2];c[j+12>>2]=c[k+12>>2];a=a+1|0;b=t}}pA(o);l=q;return o|0}function gA(a,b){a=+a;b=+b;var c=0.0;c=a-+A(+(a/b))*b;return +(!(a<0.0)&!(a>=b)?a:c)}function hA(a,b){a=+a;b=+b;if(!(a==0.0&b==0.0)){a=+K(+a,+b);if(!(a>=0.0))a=a+6.283185307179586}else a=0.0;return +a}function iA(a,b,d){a=a|0;b=+b;d=+d;var e=0,f=0;e=c[a>>2]|0;f=a+4|0;if((e|0)<(c[f>>2]|0))f=c[a+8>>2]|0;else{c[f>>2]=2e3;e=a+8|0;f=zw(c[e>>2]|0,32e3)|0;c[e>>2]=f;e=c[a>>2]|0}c[a>>2]=e+1;h[f+(e<<4)>>3]=b;h[f+(e<<4)+8>>3]=d;return}function jA(a,b,c,d,e,f,g,h){a=+a;b=+b;c=+c;d=d|0;e=+e;f=+f;g=g|0;h=h|0;var i=0.0;d=(d|0)==0;i=d?e:f;do if((g|0)==1){e=(d?f:e)-i;e=!(e<=1.7453292519943296e-03)?e:e+6.283185307179586;if(e<3.141592653589793){kA(h,a,b,c,e+i,i);break}else{iA(h,+E(+i)*c+a,+F(+i)*c+a);break}}else iA(h,+E(+i)*c+a,+F(+i)*c+a);while(0);return}function kA(a,b,c,d,e,f){a=a|0;b=+b;c=+c;d=+d;e=+e;f=+f;var g=0,h=0.0;iA(a,+E(+e)*d+b,+F(+e)*d+c);a:do if(!(d==0.0)){while(1){if(!(f>e))break;f=f+-6.283185307179586}f=e-f;while(1){if(!(f>6.283185307179586))break;f=f+-6.283185307179586}f=f*.05263157894736842;g=1;while(1){if((g|0)==20)break a;h=e-f*+(g|0);iA(a,+E(+h)*d+b,+F(+h)*d+c);g=g+1|0}}while(0);return}function lA(a){a=a|0;$I(c[a>>2]|0);$I(a);return}function mA(){var a=0;a=ww(12)|0;c[a+4>>2]=0;c[a+8>>2]=2e3;c[a>>2]=ww(128e3)|0;return a|0}function nA(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,g=0,i=0;i=a+4|0;e=c[i>>2]|0;f=a+8|0;g=c[f>>2]|0;if((e|0)<(g|0))a=c[a>>2]|0;else{c[f>>2]=g<<1;e=zw(c[a>>2]|0,g<<7)|0;c[a>>2]=e;a=e;e=c[i>>2]|0}h[a+(e<<6)>>3]=+h[b>>3];h[a+(e<<6)+8>>3]=+h[b+8>>3];c[i>>2]=e+1;h[a+(e<<6)+16>>3]=d;return}function oA(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;c=+h[a>>3]-+h[b>>3];d=+h[a+8>>3]-+h[b+8>>3];return +(+C(+(d*d+c*c)))}function pA(a){a=a|0;var b=0;b=c[a+4>>2]|0;if((c[a+8>>2]|0)>(b|0))c[a>>2]=zw(c[a>>2]|0,b<<6)|0;return}function qA(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+16|0;j=k+8|0;i=k;g=k+12|0;c[g>>2]=0;h=c[d+4>>2]|0;if(!h)ma(91702,91713,203,91724);e=c[h>>2]|0;if(!e)ma(91738,91713,206,91724);f=h+8|0;if(!(c[f>>2]|0))c[f>>2]=rA(e)|0;if(!0)e=0;else{e=(Ev(c[h>>2]|0)|0)==0;e=e?0:g}if(!((wE(b,d,e)|0)<<24>>24))sA(d,e);do if(e|0){f=c[g>>2]|0;b=c[13918]|0;e=c[h>>2]|0;if(!f){c[j>>2]=e;AL(b,91781,j)|0;break}else{c[i>>2]=e;c[i+4>>2]=f;AL(b,91749,i)|0;break}}while(0);j=d+32|0;c[a>>2]=c[j>>2];c[a+4>>2]=c[j+4>>2];c[a+8>>2]=c[j+8>>2];c[a+12>>2]=c[j+12>>2];l=k;return}function rA(a){a=a|0;var b=0;b=c[42346]|0;if((b|0)!=0?(jK(b,a)|0)==0:0)a=c[42355]|0;else{$I(b);c[42346]=HL(a)|0;a=wM(169384,21352,35,36,29)|0;c[42355]=a}return a|0}function sA(b,d){b=b|0;d=d|0;var e=0,f=0.0,g=0,i=0.0,j=0,k=0.0;j=c[b+4>>2]|0;e=c[j>>2]|0;i=+h[j+16>>3];j=b+32|0;h[j>>3]=0.0;h[b+40>>3]=i*1.2;h[b+16>>3]=0.0;h[b+24>>3]=i*.1;c[b+8>>2]=0;c[b+12>>2]=0;if(qK(e,91815,4)|0)if((qK(e,91820,5)|0)!=0?(qK(e,91826,9)|0)!=0:0){g=4184;e=91836}else{g=8280;e=91872}else{g=6232;e=91853}if(d|0)c[d>>2]=e;e=c[b>>2]|0;if(e|0){f=0.0;while(1){b=a[e>>0]|0;if(!(b<<24>>24))break;k=f+ +h[g+((b&255)<<3)>>3];h[j>>3]=k;e=e+1|0;f=k}h[j>>3]=f*i}return}function tA(a,b){a=a|0;b=b|0;return jK(c[a>>2]|0,c[b>>2]|0)|0}function uA(a){a=a|0;var b=0;b=a+108|0;c[b>>2]=0;c[a+112>>2]=32;c[a+116>>2]=-1;c[a+120>>2]=14;c[a+124>>2]=58;c[a+128>>2]=20;c[a+132>>2]=0;c[a+136>>2]=0;c[a+140>>2]=0;b=Rl(b,c[4345]|0)|0;c[a+144>>2]=b;return b|0}function vA(a,b,d){a=a|0;b=b|0;d=d|0;d=aJ(1,32)|0;a=c[b>>2]|0;if(a|0)c[d>>2]=HL(a)|0;a=c[b+4>>2]|0;if(a|0)c[d+4>>2]=HL(a)|0;c[d+24>>2]=c[b+24>>2]&127;h[d+16>>3]=+h[b+16>>3];c[d+8>>2]=c[b+8>>2];return d|0}function wA(a,b,d){a=a|0;b=b|0;d=d|0;$I(c[b>>2]|0);$I(c[b+4>>2]|0);$I(b);return}function xA(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,g=0.0,i=0,j=0;a=c[b>>2]|0;e=c[d>>2]|0;i=(e|0)==0;if(!a)if(i)j=5;else a=-1;else if(!i){a=yJ(a,e)|0;if(!a)j=5}else a=1;do if((j|0)==5){a=c[b+4>>2]|0;e=c[d+4>>2]|0;i=(e|0)==0;if(!a){if(!i){a=-1;break}}else{if(i){a=1;break}a=yJ(a,e)|0;if(a|0)break}a=(c[b+24>>2]&127)-(c[d+24>>2]&127)|0;if(!a){g=+h[b+16>>3];f=+h[d+16>>3];if(gf&1}}while(0);return a|0}function yA(){Wa(169424)|0;return}function zA(){var a=0,b=0;b=l;l=l+16|0;a=b;Wa(a|0)|0;l=b;return +(+((c[a+4>>2]|0)+(c[a>>2]|0)-(c[42356]|0)-(c[42357]|0)|0)*.016666666666666666)}function AA(a){a=a|0;var b=0,d=0;b=ww(16)|0;a=(a|0)>2?a:2;d=ww(a<<2)|0;c[b>>2]=d;c[b+12>>2]=d;c[b+8>>2]=d;c[b+4>>2]=d+(a<<2);return b|0}function BA(a){a=a|0;$I(c[a>>2]|0);$I(a);return}function CA(a,b){a=a|0;b=b|0;var d=0,e=0;d=a+12|0;e=c[d>>2]|0;c[d>>2]=e+4;c[e>>2]=b;if((c[d>>2]|0)>>>0>=(c[a+4>>2]|0)>>>0)c[d>>2]=c[a>>2];return}function DA(a){a=a|0;var b=0,d=0,e=0;d=a+8|0;b=c[d>>2]|0;if((b|0)!=(c[a+12>>2]|0)){e=b+4|0;c[d>>2]=e;b=c[b>>2]|0;if(e>>>0>=(c[a+4>>2]|0)>>>0)c[d>>2]=c[a>>2]}else b=0;return b|0}function EA(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;i=l;l=l+16|0;g=i;if(((d|0)!=0?(h=Km(b,d)|0,(h|0)!=0):0)?(a[h>>0]|0)!=0:0){d=CL(h,g,10)|0;e=(h|0)==(c[g>>2]|0)?e:(d|0)<(f|0)?f:d}l=i;return e|0}function FA(b,d,e,f){b=b|0;d=d|0;e=+e;f=+f;var g=0,h=0,i=0,j=0.0;i=l;l=l+16|0;g=i;if(((b|0)!=0&(d|0)!=0?(h=Km(b,d)|0,(h|0)!=0):0)?(a[h>>0]|0)!=0:0){j=+uM(h,g);e=(h|0)==(c[g>>2]|0)?e:j>0]|0)!=0:0)d=b;return d|0}function IA(a,b,c){a=a|0;b=b|0;c=c|0;if(!b)a=c&255;else a=JA(Km(a,b)|0)|0;return a|0}function JA(a){a=a|0;return KA(a,0)|0}function KA(b,c){b=b|0;c=c|0;var d=0;if((b|0)!=0?(d=a[b>>0]|0,d<<24>>24!=0):0)if((jK(b,122100)|0)!=0?(jK(b,92682)|0)!=0:0)if((jK(b,92685)|0)!=0?(jK(b,92690)|0)!=0:0){if(((d<<24>>24)+-48|0)>>>0<10)c=(sM(b)|0)&255}else c=1;else c=0;return c|0}function LA(a){a=a|0;var b=0,d=0;while(1){b=(c[a+16>>2]|0)+220|0;d=c[b>>2]|0;if(!((d|0)!=(a|0)&(d|0)!=0))break;a=c[(c[d+16>>2]|0)+220>>2]|0;if(!a){a=d;continue}c[b>>2]=a}return a|0}function MA(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;if((a|0)!=(b|0)){d=c[a+16>>2]|0;e=d+220|0;if(!(c[e>>2]|0)){c[e>>2]=a;c[d+216>>2]=1}else a=LA(a)|0;d=c[b+16>>2]|0;e=d+220|0;if(!(c[e>>2]|0)){c[e>>2]=b;c[d+216>>2]=1}else{d=LA(b)|0;b=d;d=c[d+16>>2]|0}g=a+16|0;e=c[g>>2]|0;f=b+16|0;h=(c[e+120>>2]|0)>(c[d+120>>2]|0);a=h?b:a;c[(h?e:d)+220>>2]=a;e=(c[(h?f:g)>>2]|0)+216|0;c[e>>2]=(c[e>>2]|0)+(c[(c[(h?g:f)>>2]|0)+216>>2]|0)}return a|0}function NA(b){b=b|0;b=c[b+16>>2]|0;c[b+216>>2]=1;c[b+220>>2]=0;a[b+159>>0]=0;return}function OA(a,b){a=a|0;b=b|0;if((LA(a)|0)==(a|0)){a=c[a+16>>2]|0;c[a+220>>2]=b;b=(c[b+16>>2]|0)+216|0;c[b>>2]=(c[b>>2]|0)+(c[a+216>>2]|0);return}else ma(92702,92694,194,92718)}function PA(a,b){a=a|0;b=b|0;var d=0.0;b=c[(c[b+16>>2]|0)+132>>2]|0;d=+h[b+8>>3]*72.0;h[a>>3]=+h[b>>3]*72.0;h[a+8>>3]=d;return}function QA(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;g=g|0;var i=0,j=0,k=0,m=0.0,n=0,o=0,p=0;o=l;l=l+576|0;n=o;i=0;while(1){if((i|0)>(d|0))break;k=n+(i<<4)|0;j=b+(i<<4)|0;c[k>>2]=c[j>>2];c[k+4>>2]=c[j+4>>2];c[k+8>>2]=c[j+8>>2];c[k+12>>2]=c[j+12>>2];i=i+1|0}m=1.0-e;i=1;while(1){if((i|0)>(d|0))break;j=d-i|0;k=i+-1|0;b=0;while(1){if((b|0)>(j|0))break;p=b+1|0;h[n+(i*96|0)+(b<<4)>>3]=+h[n+(k*96|0)+(p<<4)>>3]*e+ +h[n+(k*96|0)+(b<<4)>>3]*m;h[n+(i*96|0)+(b<<4)+8>>3]=+h[n+(k*96|0)+(p<<4)+8>>3]*e+ +h[n+(k*96|0)+(b<<4)+8>>3]*m;b=p}i=i+1|0}a:do if(f|0){i=0;while(1){if((i|0)>(d|0))break a;p=f+(i<<4)|0;k=n+(i*96|0)|0;c[p>>2]=c[k>>2];c[p+4>>2]=c[k+4>>2];c[p+8>>2]=c[k+8>>2];c[p+12>>2]=c[k+12>>2];i=i+1|0}}while(0);b:do if(g|0){i=0;while(1){if((i|0)>(d|0))break b;p=g+(i<<4)|0;f=n+((d-i|0)*96|0)+(i<<4)|0;c[p>>2]=c[f>>2];c[p+4>>2]=c[f+4>>2];c[p+8>>2]=c[f+8>>2];c[p+12>>2]=c[f+12>>2];i=i+1|0}}while(0);p=n+(d*96|0)|0;c[a>>2]=c[p>>2];c[a+4>>2]=c[p+4>>2];c[a+8>>2]=c[p+8>>2];c[a+12>>2]=c[p+12>>2];l=o;return}function RA(b){b=b|0;var d=0,e=0,f=0,g=0;e=0;do{d=c[42360]|0;f=d+1024|0;if((d-e|0)<1024){c[42360]=f;f=zw(c[42361]|0,f)|0;c[42361]=f;d=c[42360]|0}else f=c[42361]|0;d=hL(f+e|0,d-e|0,b)|0;if(!d){g=6;break}e=(sJ(d)|0)+e|0;d=c[42361]|0}while((a[d+(e+-1)>>0]|0)!=10);if((g|0)==6)d=c[42361]|0;return ((e|0)>0?d:0)|0}function SA(b){b=b|0;var d=0,e=0,f=0;f=l;l=l+16|0;do if((b|0)!=0?(a[b>>0]|0)!=0:0)if(!0){d=c[42178]|0;e=c[42363]|0;if((c[42362]|0)==(d|0))d=e;else{if(e){$I(c[e>>2]|0);$I(c[42363]|0);c[42363]=0;d=c[42178]|0}c[42362]=d;if(!d)break;if(!(a[d>>0]|0))break;d=TA(d)|0;c[42363]=d}if(!((a[b>>0]|0)!=47&(d|0)!=0))break;b=UA(d,c[42364]|0,b)|0;break}else S();else b=0;while(0);l=f;return b|0}function TA(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;e=0;f=0;g=0;b=HL(a)|0;d=0;while(1){b=EL(b,93017)|0;if(!b)break;a=(g<<2)+8|0;if(!f)a=xw(a)|0;else a=zw(d,a)|0;c[a+(g<<2)>>2]=b;f=sJ(b)|0;e=e>>>0>f>>>0?e:f;f=a;g=g+1|0;b=0;d=a}c[f+(g<<2)>>2]=0;c[42364]=e;return f|0}function UA(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=l;l=l+16|0;e=g;h=c[42365]|0;c[42365]=bJ(h,b+2+(sJ(d)|0)|0)|0;while(1){b=c[a>>2]|0;if(!b){a=0;break}h=c[42365]|0;c[e>>2]=b;c[e+4>>2]=93015;c[e+8>>2]=d;qL(h,93008,e)|0;if(!(aM(c[42365]|0,4)|0)){f=4;break}else a=a+4|0}if((f|0)==4)a=c[42365]|0;l=g;return a|0}function VA(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;g=(b|0)==0;f=0;while(1){h=c[d+(f<<2)>>2]|0;if(!h)break;if((!g?(a[b>>0]|0)==(a[h>>0]|0):0)?(yJ(b,h)|0)==0:0)break;f=f+1|0}return c[e+(f<<2)>>2]|0}function WA(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0,i=0.0,j=0.0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;z=l;l=l+80|0;x=z+16|0;y=z;u=c[b+4>>2]|0;v=c[b>>2]|0;w=d+8|0;f=0;e=-1;g=1.e+38;b=-1;while(1){if((f|0)>=(u|0))break;s=c[v+(f*48|0)>>2]|0;t=c[v+(f*48|0)+4>>2]|0;r=0;while(1){if((r|0)>=(t|0))break;q=+h[s+(r<<4)>>3]-+h[d>>3];p=+h[s+(r<<4)+8>>3]-+h[w>>3];q=p*p+q*q;A=(e|0)==-1|q>2]|0;e=e+(((e|0)==((c[v+(b*48|0)+4>>2]|0)+-1|0))<<31>>31)|0;e=e-((e|0)%3|0)|0;b=0;while(1){if((b|0)==4)break;C=b+e|0;h[x+(b<<4)>>3]=+h[f+(C<<4)>>3];h[x+(b<<4)+8>>3]=+h[f+(C<<4)+8>>3];b=b+1|0}q=+h[d>>3];k=+h[x>>3]-q;o=+h[w>>3];p=+h[x+8>>3]-o;j=+h[x+48>>3]-q;n=+h[x+56>>3]-o;b=y+8|0;g=1.0;i=0.0;j=n*n+j*j;k=p*p+k*k;while(1){p=(g+i)*.5;QA(y,x,3,p,0,0);m=+h[y>>3];n=+h[b>>3];if(+B(+(k-j))<1.0)break;if(+B(+(g-i))<1.0e-05)break;C=k>3]=m;h[a+8>>3]=n;l=z;return}function XA(b){b=b|0;var d=0.0,e=0,f=0,g=0,i=0,j=0,k=0,l=0;d=+FA(b,c[42191]|0,.75,.01);g=b+16|0;h[(c[g>>2]|0)+32>>3]=d;d=+FA(b,c[42190]|0,.5,.02);h[(c[g>>2]|0)+40>>3]=d;l=Ry(HA(b,c[42192]|0,93019)|0,b)|0;c[(c[g>>2]|0)+8>>2]=l;l=Km(b,c[42199]|0)|0;d=+FA(b,c[42195]|0,14.0,1.0);e=HA(b,c[42196]|0,93027)|0;f=HA(b,c[42197]|0,122106)|0;i=(dp(l)|0)!=0;k=(Cy(b)|0)==2;i=mw(b,l,(k?4:0)|(i?2:0),d,e,f)|0;c[(c[g>>2]|0)+104>>2]=i;i=c[42200]|0;if((i|0?(j=Km(b,i)|0,j|0):0)?a[j>>0]|0:0){l=(dp(j)|0)!=0;l=mw(b,j,l?2:0,d,e,f)|0;c[(c[g>>2]|0)+108>>2]=l;l=(c[(so(b)|0)+16>>2]|0)+113|0;a[l>>0]=a[l>>0]|16}k=(EA(b,c[42203]|0,0,0)|0)&255;l=c[g>>2]|0;a[l+144>>0]=k;gb[c[c[(c[l+8>>2]|0)+4>>2]>>2]&127](b);return}function YA(b){b=b|0;var d=0,e=0,f=0,g=0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=l;l=l+112|0;m=v+96|0;n=v+80|0;s=v+40|0;u=v;r=b+48|0;p=so(c[((c[b>>2]&3|0)==3?b:r)+40>>2]|0)|0;g=m+8|0;c[g>>2]=0;o=n+8|0;c[o>>2]=0;d=c[42227]|0;if(((d|0)!=0?(e=Km(b,d)|0,(e|0)!=0):0)?(a[e>>0]|0)!=0:0){ZA(b,m);t=(dp(e)|0)!=0;i=+h[m>>3];f=c[g>>2]|0;d=c[m+12>>2]|0;e=mw(b,e,t?2:0,i,f,d)|0;t=b+16|0;c[(c[t>>2]|0)+96>>2]=e;e=(c[p+16>>2]|0)+113|0;a[e>>0]=a[e>>0]|1;e=JA(GA(b,c[42237]|0,122100)|0)|0;a[(c[t>>2]|0)+114>>0]=e;t=1;e=f}else{t=0;d=0;i=0.0;e=0}f=c[42228]|0;if((f|0?(j=Km(b,f)|0,j|0):0)?a[j>>0]|0:0){if(!e){ZA(b,m);i=+h[m>>3];e=c[g>>2]|0;d=c[m+12>>2]|0}g=(dp(j)|0)!=0;j=mw(b,j,g?2:0,i,e,d)|0;c[(c[b+16>>2]|0)+108>>2]=j;j=(c[p+16>>2]|0)+113|0;a[j>>0]=a[j>>0]|32}d=c[42242]|0;if(((d|0)!=0?(k=Km(b,d)|0,(k|0)!=0):0)?(a[k>>0]|0)!=0:0){_A(b,m,n);j=(dp(k)|0)!=0;i=+h[n>>3];d=c[o>>2]|0;e=c[n+12>>2]|0;k=mw(b,k,j?2:0,i,d,e)|0;c[(c[b+16>>2]|0)+100>>2]=k;k=(c[p+16>>2]|0)+113|0;a[k>>0]=a[k>>0]|2}else{e=0;i=0.0;d=0}f=c[42243]|0;if((f|0?(q=Km(b,f)|0,q|0):0)?a[q>>0]|0:0){if(!d){_A(b,m,n);e=c[n+12>>2]|0;i=+h[n>>3];d=c[o>>2]|0}o=(dp(q)|0)!=0;q=mw(b,q,o?2:0,i,d,e)|0;c[(c[b+16>>2]|0)+104>>2]=q;q=(c[p+16>>2]|0)+113|0;a[q>>0]=a[q>>0]|4}d=Jm(b,96242)|0;d=d|0?d:174185;if(a[d>>0]|0)a[(c[(c[((c[b>>2]&3|0)==3?b:r)+40>>2]|0)+16>>2]|0)+145>>0]=1;g=b+16|0;f=(c[g>>2]|0)+16|0;e=c[((c[b>>2]&3|0)==3?b:r)+40>>2]|0;$A(s,c[(c[(c[(c[e+16>>2]|0)+8>>2]|0)+4>>2]|0)+8>>2]|0,e,d);d=s;e=f+40|0;do{c[f>>2]=c[d>>2];f=f+4|0;d=d+4|0}while((f|0)<(e|0));if((aB(b,c[42249]|0)|0)<<24>>24)a[(c[g>>2]|0)+46>>0]=0;d=Jm(b,96251)|0;d=d|0?d:174185;if(!(a[d>>0]|0))e=b+-48|0;else{e=b+-48|0;a[(c[(c[((c[b>>2]&3|0)==2?b:e)+40>>2]|0)+16>>2]|0)+145>>0]=1}f=(c[g>>2]|0)+56|0;e=c[((c[b>>2]&3|0)==2?b:e)+40>>2]|0;$A(u,c[(c[(c[(c[e+16>>2]|0)+8>>2]|0)+4>>2]|0)+8>>2]|0,e,d);d=u;e=f+40|0;do{c[f>>2]=c[d>>2];f=f+4|0;d=d+4|0}while((f|0)<(e|0));if((aB(b,c[42250]|0)|0)<<24>>24)a[(c[g>>2]|0)+86>>0]=0;l=v;return t|0}function ZA(a,b){a=a|0;b=b|0;h[b>>3]=+FA(a,c[42224]|0,14.0,1.0);c[b+8>>2]=HA(a,c[42225]|0,93027)|0;c[b+12>>2]=HA(a,c[42226]|0,122106)|0;return}function _A(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=b+8|0;if(!(c[e>>2]|0))ZA(a,b);h[d>>3]=+FA(a,c[42244]|0,+h[b>>3],1.0);c[d+8>>2]=HA(a,c[42245]|0,c[e>>2]|0)|0;c[d+12>>2]=HA(a,c[42246]|0,c[b+12>>2]|0)|0;return}function $A(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+128|0;k=m+80|0;h=m+40|0;g=m;if((f|0)!=0?(j=XJ(f,58)|0,(j|0)!=0):0){a[j>>0]=0;i=j+1|0;kb[d&31](h,e,f,i);e=k;g=h;d=e+36|0;do{c[e>>2]=c[g>>2];e=e+4|0;g=g+4|0}while((e|0)<(d|0));a[j>>0]=58;f=i}else{kb[d&31](g,e,f,0);e=k;d=e+36|0;do{c[e>>2]=c[g>>2];e=e+4|0;g=g+4|0}while((e|0)<(d|0))}e=b;g=k;d=e+36|0;do{c[e>>2]=c[g>>2];e=e+4|0;g=g+4|0}while((e|0)<(d|0));c[b+36>>2]=f;l=m;return}function aB(b,c){b=b|0;c=c|0;var d=0;if(((c|0)!=0?(d=Km(b,c)|0,(d|0)!=0):0)?(a[d>>0]|0)!=0:0)b=(JA(d)|0)<<24>>24==0&1;else b=0;return b|0}function bB(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0.0,o=0.0;k=l;l=l+32|0;i=k;j=c[b+8>>2]|0;d=c[b+4>>2]|0;d=(c[b+44>>2]|0)+((O((d|0)>1?d+-1|0:0,j)|0)<<4)|0;e=i+16|0;c[e>>2]=c[d>>2];c[e+4>>2]=c[d+4>>2];c[e+8>>2]=c[d+8>>2];c[e+12>>2]=c[d+12>>2];c[i>>2]=c[d>>2];c[i+4>>2]=c[d+4>>2];c[i+8>>2]=c[d+8>>2];c[i+12>>2]=c[d+12>>2];f=i+8|0;g=i+24|0;b=1;while(1){if((b|0)>=(j|0))break;m=d+(b<<4)|0;o=+h[m>>3];h[i>>3]=+h[(+h[i>>3]>3];n=+h[m+8>>3];h[f>>3]=+h[(+h[f>>3]>3];h[e>>3]=+h[(+h[e>>3]>o?e:m)>>3];h[g>>3]=+h[(+h[g>>3]>n?e:m)+8>>3];b=b+1|0}c[a>>2]=c[i>>2];c[a+4>>2]=c[i+4>>2];c[a+8>>2]=c[i+8>>2];c[a+12>>2]=c[i+12>>2];c[a+16>>2]=c[i+16>>2];c[a+20>>2]=c[i+20>>2];c[a+24>>2]=c[i+24>>2];c[a+28>>2]=c[i+28>>2];l=k;return}function cB(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=l;l=l+64|0;g=d+32|0;e=d;f=c[a+16>>2]|0;a=f+16|0;f=c[f+116>>2]&1;c[g>>2]=c[a>>2];c[g+4>>2]=c[a+4>>2];c[g+8>>2]=c[a+8>>2];c[g+12>>2]=c[a+12>>2];c[g+16>>2]=c[a+16>>2];c[g+20>>2]=c[a+20>>2];c[g+24>>2]=c[a+24>>2];c[g+28>>2]=c[a+28>>2];dB(e,g,b,f);c[a>>2]=c[e>>2];c[a+4>>2]=c[e+4>>2];c[a+8>>2]=c[e+8>>2];c[a+12>>2]=c[e+12>>2];c[a+16>>2]=c[e+16>>2];c[a+20>>2]=c[e+20>>2];c[a+24>>2]=c[e+24>>2];c[a+28>>2]=c[e+28>>2];l=d;return}function dB(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,g=0.0,i=0.0,j=0,k=0.0,l=0.0,m=0.0;g=+h[d+56>>3];l=+h[d+64>>3];j=e<<24>>24==0;k=+h[d+24>>3];i=+h[d+32>>3];m=(j?k:i)*.5;f=g-m;g=m+g;if(f<+h[b>>3])h[b>>3]=f;e=b+16|0;if(g>+h[e>>3])h[e>>3]=g;g=(j?i:k)*.5;f=l-g;g=g+l;e=b+8|0;if(f<+h[e>>3])h[e>>3]=f;e=b+24|0;if(g>+h[e>>3])h[e>>3]=g;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];c[a+24>>2]=c[b+24>>2];c[a+28>>2]=c[b+28>>2];return}function eB(b){b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0.0,N=0.0,O=0.0,P=0.0;L=l;l=l+448|0;H=L+416|0;t=L+384|0;u=L+304|0;K=L+256|0;G=L+192|0;B=L+144|0;C=L+96|0;d=L+400|0;e=L+368|0;f=L+352|0;g=L+336|0;v=L+288|0;w=L+224|0;x=L+160|0;y=L+112|0;z=L+64|0;A=L+32|0;I=L;J=b+16|0;if((nn(b)|0)==0?(c[(c[J>>2]|0)+180>>2]|0)==0:0){fB(d,0.0,0.0);c[K>>2]=c[d>>2];c[K+4>>2]=c[d+4>>2];c[K+8>>2]=c[d+8>>2];c[K+12>>2]=c[d+12>>2];K=K+16|0;fB(e,0.0,0.0);c[K>>2]=c[e>>2];c[K+4>>2]=c[e+4>>2];c[K+8>>2]=c[e+8>>2];c[K+12>>2]=c[e+12>>2]}else{fB(f,2147483647.0,2147483647.0);c[K>>2]=c[f>>2];c[K+4>>2]=c[f+4>>2];c[K+8>>2]=c[f+8>>2];c[K+12>>2]=c[f+12>>2];F=K+16|0;fB(g,-2147483647.0,-2147483647.0);c[F>>2]=c[g>>2];c[F+4>>2]=c[g+4>>2];c[F+8>>2]=c[g+8>>2];c[F+12>>2]=c[g+12>>2];o=C+8|0;p=u+16|0;D=K+8|0;q=u+8|0;E=K+24|0;r=u+24|0;s=B+8|0;n=eo(b)|0;while(1){if(!n)break;PA(B,n);d=n+16|0;m=c[d>>2]|0;h[C>>3]=(+h[m+96>>3]+ +h[m+88>>3])*.5;h[o>>3]=+h[m+80>>3]*.5;c[t>>2]=c[B>>2];c[t+4>>2]=c[B+4>>2];c[t+8>>2]=c[B+8>>2];c[t+12>>2]=c[B+12>>2];c[H>>2]=c[C>>2];c[H+4>>2]=c[C+4>>2];c[H+8>>2]=c[C+8>>2];c[H+12>>2]=c[C+12>>2];gB(u,t,H);c[t>>2]=c[B>>2];c[t+4>>2]=c[B+4>>2];c[t+8>>2]=c[B+8>>2];c[t+12>>2]=c[B+12>>2];c[H>>2]=c[C>>2];c[H+4>>2]=c[C+4>>2];c[H+8>>2]=c[C+8>>2];c[H+12>>2]=c[C+12>>2];hB(v,t,H);c[p>>2]=c[v>>2];c[p+4>>2]=c[v+4>>2];c[p+8>>2]=c[v+8>>2];c[p+12>>2]=c[v+12>>2];h[K>>3]=+h[(+h[K>>3]<+h[u>>3]?K:u)>>3];h[D>>3]=+h[(+h[D>>3]<+h[q>>3]?K:u)+8>>3];h[F>>3]=+h[(+h[F>>3]>+h[p>>3]?K:u)+16>>3];h[E>>3]=+h[(+h[E>>3]>+h[r>>3]?K:u)+24>>3];d=c[(c[d>>2]|0)+108>>2]|0;if(d|0?a[d+81>>0]|0:0){m=c[(c[J>>2]|0)+116>>2]&1;c[H>>2]=c[K>>2];c[H+4>>2]=c[K+4>>2];c[H+8>>2]=c[K+8>>2];c[H+12>>2]=c[K+12>>2];c[H+16>>2]=c[K+16>>2];c[H+20>>2]=c[K+20>>2];c[H+24>>2]=c[K+24>>2];c[H+28>>2]=c[K+28>>2];dB(w,H,d,m);c[K>>2]=c[w>>2];c[K+4>>2]=c[w+4>>2];c[K+8>>2]=c[w+8>>2];c[K+12>>2]=c[w+12>>2];c[K+16>>2]=c[w+16>>2];c[K+20>>2]=c[w+20>>2];c[K+24>>2]=c[w+24>>2];c[K+28>>2]=c[w+28>>2]}m=Qm(b,n)|0;while(1){if(!m)break;k=m+16|0;d=c[k>>2]|0;j=d+8|0;e=c[j>>2]|0;if(e|0){i=0;while(1){if((i|0)<(c[e+4>>2]|0))g=0;else break;while(1){f=c[e>>2]|0;if((g|0)>=(c[f+(i*48|0)+4>>2]|0))break;e=(c[f+(i*48|0)>>2]|0)+(g<<4)|0;c[B>>2]=c[e>>2];c[B+4>>2]=c[e+4>>2];c[B+8>>2]=c[e+8>>2];c[B+12>>2]=c[e+12>>2];N=+h[B>>3];h[K>>3]=+h[(+h[K>>3]>3];M=+h[s>>3];h[D>>3]=+h[(+h[D>>3]>3];h[F>>3]=+h[(+h[F>>3]>N?F:B)>>3];h[E>>3]=+h[(+h[E>>3]>M?F:B)+8>>3];g=g+1|0;e=c[j>>2]|0}i=i+1|0}e=c[d+96>>2]|0;if((e|0)!=0?(a[e+81>>0]|0)!=0:0){d=c[(c[J>>2]|0)+116>>2]&1;c[H>>2]=c[K>>2];c[H+4>>2]=c[K+4>>2];c[H+8>>2]=c[K+8>>2];c[H+12>>2]=c[K+12>>2];c[H+16>>2]=c[K+16>>2];c[H+20>>2]=c[K+20>>2];c[H+24>>2]=c[K+24>>2];c[H+28>>2]=c[K+28>>2];dB(x,H,e,d);c[K>>2]=c[x>>2];c[K+4>>2]=c[x+4>>2];c[K+8>>2]=c[x+8>>2];c[K+12>>2]=c[x+12>>2];c[K+16>>2]=c[x+16>>2];c[K+20>>2]=c[x+20>>2];c[K+24>>2]=c[x+24>>2];c[K+28>>2]=c[x+28>>2];d=c[k>>2]|0}e=c[d+100>>2]|0;if((e|0)!=0?(a[e+81>>0]|0)!=0:0){d=c[(c[J>>2]|0)+116>>2]&1;c[H>>2]=c[K>>2];c[H+4>>2]=c[K+4>>2];c[H+8>>2]=c[K+8>>2];c[H+12>>2]=c[K+12>>2];c[H+16>>2]=c[K+16>>2];c[H+20>>2]=c[K+20>>2];c[H+24>>2]=c[K+24>>2];c[H+28>>2]=c[K+28>>2];dB(y,H,e,d);c[K>>2]=c[y>>2];c[K+4>>2]=c[y+4>>2];c[K+8>>2]=c[y+8>>2];c[K+12>>2]=c[y+12>>2];c[K+16>>2]=c[y+16>>2];c[K+20>>2]=c[y+20>>2];c[K+24>>2]=c[y+24>>2];c[K+28>>2]=c[y+28>>2];d=c[k>>2]|0}e=c[d+104>>2]|0;if((e|0)!=0?(a[e+81>>0]|0)!=0:0){d=c[(c[J>>2]|0)+116>>2]&1;c[H>>2]=c[K>>2];c[H+4>>2]=c[K+4>>2];c[H+8>>2]=c[K+8>>2];c[H+12>>2]=c[K+12>>2];c[H+16>>2]=c[K+16>>2];c[H+20>>2]=c[K+20>>2];c[H+24>>2]=c[K+24>>2];c[H+28>>2]=c[K+28>>2];dB(z,H,e,d);c[K>>2]=c[z>>2];c[K+4>>2]=c[z+4>>2];c[K+8>>2]=c[z+8>>2];c[K+12>>2]=c[z+12>>2];c[K+16>>2]=c[z+16>>2];c[K+20>>2]=c[z+20>>2];c[K+24>>2]=c[z+24>>2];c[K+28>>2]=c[z+28>>2];d=c[k>>2]|0}d=c[d+108>>2]|0;if(d|0?a[d+81>>0]|0:0){k=c[(c[J>>2]|0)+116>>2]&1;c[H>>2]=c[K>>2];c[H+4>>2]=c[K+4>>2];c[H+8>>2]=c[K+8>>2];c[H+12>>2]=c[K+12>>2];c[H+16>>2]=c[K+16>>2];c[H+20>>2]=c[K+20>>2];c[H+24>>2]=c[K+24>>2];c[H+28>>2]=c[K+28>>2];dB(A,H,d,k);c[K>>2]=c[A>>2];c[K+4>>2]=c[A+4>>2];c[K+8>>2]=c[A+8>>2];c[K+12>>2]=c[A+12>>2];c[K+16>>2]=c[A+16>>2];c[K+20>>2]=c[A+20>>2];c[K+24>>2]=c[A+24>>2];c[K+28>>2]=c[A+28>>2]}}m=Sm(b,m)|0}n=fo(b,n)|0}d=c[J>>2]|0;f=c[d+180>>2]|0;g=d+184|0;i=G+8|0;j=G+16|0;k=G+24|0;e=1;while(1){if((e|0)>(f|0))break;P=+h[(c[(c[(c[g>>2]|0)+(e<<2)>>2]|0)+16>>2]|0)+16>>3];h[G>>3]=P;C=c[(c[(c[g>>2]|0)+(e<<2)>>2]|0)+16>>2]|0;O=+h[C+24>>3];h[i>>3]=O;M=+h[C+32>>3];h[j>>3]=M;N=+h[C+40>>3];h[k>>3]=N;h[K>>3]=+h[(+h[K>>3]>3];h[D>>3]=+h[(+h[D>>3]>3];h[F>>3]=+h[(+h[F>>3]>M?K:G)+16>>3];h[E>>3]=+h[(+h[E>>3]>N?K:G)+24>>3];e=e+1|0}e=c[d+12>>2]|0;if((e|0)!=0?(a[e+81>>0]|0)!=0:0){d=c[d+116>>2]&1;c[H>>2]=c[K>>2];c[H+4>>2]=c[K+4>>2];c[H+8>>2]=c[K+8>>2];c[H+12>>2]=c[K+12>>2];c[H+16>>2]=c[K+16>>2];c[H+20>>2]=c[K+20>>2];c[H+24>>2]=c[K+24>>2];c[H+28>>2]=c[K+28>>2];dB(I,H,e,d);c[K>>2]=c[I>>2];c[K+4>>2]=c[I+4>>2];c[K+8>>2]=c[I+8>>2];c[K+12>>2]=c[I+12>>2];c[K+16>>2]=c[I+16>>2];c[K+20>>2]=c[I+20>>2];c[K+24>>2]=c[I+24>>2];c[K+28>>2]=c[I+28>>2];d=c[J>>2]|0}J=d+16|0;c[J>>2]=c[K>>2];c[J+4>>2]=c[K+4>>2];c[J+8>>2]=c[K+8>>2];c[J+12>>2]=c[K+12>>2];c[J+16>>2]=c[K+16>>2];c[J+20>>2]=c[K+20>>2];c[J+24>>2]=c[K+24>>2];c[J+28>>2]=c[K+28>>2]}l=L;return}function fB(a,b,c){a=a|0;b=+b;c=+c;h[a>>3]=b;h[a+8>>3]=c;return}function gB(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=+h[b+8>>3]-+h[c+8>>3];h[a>>3]=+h[b>>3]-+h[c>>3];h[a+8>>3]=d;return}function hB(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=+h[c+8>>3]+ +h[b+8>>3];h[a>>3]=+h[c>>3]+ +h[b>>3];h[a+8>>3]=d;return}function iB(a){a=a|0;if((c[a+60>>2]|0)==(a|0))a=1;else a=(qK(En(a)|0,93039,7)|0)==0&1;return a|0}function jB(a){a=a|0;var b=0;b=Rl(22612,c[4345]|0)|0;mB(a,b);return b|0}function kB(a,b){a=a|0;b=b|0;a=bb[c[a>>2]&31](a,b,512)|0;if(!a)a=0;else a=c[a+12>>2]|0;return a|0}function lB(a,b,c){a=a|0;b=b|0;c=c|0;c=bn(so(b)|0,b,c,0,1)|0;Oo(c,122254,176,1)|0;Nm(a,c)|0;return c|0}function mB(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;g=h;f=a+16|0;e=1;while(1){a=c[f>>2]|0;if((e|0)>(c[a+180>>2]|0))break;a=c[(c[a+184>>2]|0)+(e<<2)>>2]|0;d=En(a)|0;if(!(bb[c[b>>2]&31](b,d,512)|0)){i=ww(16)|0;c[i+8>>2]=d;c[i+12>>2]=a;bb[c[b>>2]&31](b,i,1)|0}else{c[g>>2]=d;$l(0,93062,g)|0}mB(a,b);e=e+1|0}l=h;return}function nB(a,b,c){a=a|0;b=b|0;c=c|0;$I(b);return}function oB(a){a=a|0;var b=0,c=0,d=0;d=Jp(a,93047,1)|0;Oo(d,122277,280,1)|0;b=eo(a)|0;while(1){if(!b)break;c=Qm(a,b)|0;while(1){if(!c)break;pB(c,d);c=Sm(a,c)|0}b=fo(a,b)|0}b=eo(d)|0;while(1){if(!b)break;c=fo(d,b)|0;qB(b);ro(a,b)|0;b=c}mn(d)|0;return}function pB(b,d){b=b|0;d=d|0;var e=0,f=0;e=c[b>>2]&3;f=c[((e|0)==3?b:b+48|0)+40>>2]|0;e=c[((e|0)==2?b:b+-48|0)+40>>2]|0;if(!((a[(c[f+16>>2]|0)+118>>0]|0)==0?!(a[(c[e+16>>2]|0)+118>>0]|0):0)){f=rB(f,d)|0;e=lB(b,f,rB(e,d)|0)|0;f=c[b+16>>2]|0;d=f+8|0;e=c[e+16>>2]|0;c[e+8>>2]=c[d>>2];c[d>>2]=0;d=f+96|0;c[e+96>>2]=c[d>>2];c[d>>2]=0;d=f+108|0;c[e+108>>2]=c[d>>2];c[d>>2]=0;d=f+100|0;c[e+100>>2]=c[d>>2];c[d>>2]=0;f=f+104|0;c[e+104>>2]=c[f>>2];c[f>>2]=0;sB(b)}return}function qB(a){a=a|0;var b=0,d=0,e=0;e=a+16|0;b=c[e>>2]|0;d=c[b+132>>2]|0;if(d){$I(d);b=c[e>>2]|0}d=c[b+8>>2]|0;if(d){gb[c[(c[d+4>>2]|0)+4>>2]&127](a);b=c[e>>2]|0}pw(c[b+104>>2]|0);pw(c[(c[e>>2]|0)+108>>2]|0);Qo(a,122241)|0;return}function rB(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=so(b)|0;a:do if(a[(c[b+16>>2]|0)+118>>0]|0){jo(d,b,1)|0;b=XJ(En(b)|0,58)|0;if(!b)ma(96030,92694,1225,93114);d=b+1|0;b=oo(f,d,0)|0;if(!b){b=oo(f,d,1)|0;Oo(b,122241,304,1)|0;d=Em(f,1,0)|0;while(1){if(!d)break a;g=Km(b,d)|0;e=c[d+12>>2]|0;if((g|0)!=(e|0))Dm(b,d,e)|0;d=Em(f,1,d)|0}}}while(0);return b|0}function sB(a){a=a|0;var b=0;b=a+16|0;$I(c[(c[b>>2]|0)+144>>2]|0);tB(a);pw(c[(c[b>>2]|0)+96>>2]|0);pw(c[(c[b>>2]|0)+108>>2]|0);pw(c[(c[b>>2]|0)+100>>2]|0);pw(c[(c[b>>2]|0)+104>>2]|0);Qo(a,122254)|0;return}function tB(a){a=a|0;var b=0,d=0,e=0;e=a+16|0;a=c[e>>2]|0;b=c[a+8>>2]|0;if(b){d=0;while(1){a=c[b>>2]|0;if((d|0)>=(c[b+4>>2]|0))break;$I(c[a+(d*48|0)>>2]|0);d=d+1|0;b=c[(c[e>>2]|0)+8>>2]|0}$I(a);$I(c[(c[e>>2]|0)+8>>2]|0);a=c[e>>2]|0}c[a+8>>2]=0;return}function uB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=zm(a,b,c,0)|0;if(!e)e=zm(a,b,c,d)|0;return e|0}function vB(a,b){a=a|0;b=b|0;return yJ(c[a>>2]|0,c[b>>2]|0)|0}function wB(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l;l=l+1072|0;k=q+8|0;j=q;i=q+16|0;o=q+24|0;c[i>>2]=b;if((c[42366]|0)!=(d|0)){c[42366]=d;a[174084]=0}dm(o,1024,q+40|0);p=o+4|0;n=o+8|0;while(1){f=b+1|0;c[i>>2]=f;e=a[b>>0]|0;if(!(e<<24>>24))break;do if((e&255)<192)if(e<<24>>24==38){f=yB(i)|0;if(!f)e=38;else{if(f>>>0<127){e=f&255;break}b=c[p>>2]|0;e=b>>>0>=(c[n>>2]|0)>>>0;if(f>>>0<2047){if(e){em(o,1)|0;b=c[p>>2]|0}c[p>>2]=b+1;a[b>>0]=f>>>6|192;e=(f&63|128)&255;break}if(e){em(o,1)|0;b=c[p>>2]|0}c[p>>2]=b+1;a[b>>0]=f>>>12|224;b=c[p>>2]|0;if(b>>>0>=(c[n>>2]|0)>>>0){em(o,1)|0;b=c[p>>2]|0}c[p>>2]=b+1;a[b>>0]=f>>>6&63|128;e=(f&63|128)&255}}else{h=0;m=9}else if((e&255)>=224)if((e&255)>=240)if((e&255)<248){h=3;m=9}else{if(!(a[174084]|0)){c[j>>2]=En(d)|0;$l(0,94529,j)|0;a[174084]=1}h=-1;e=xB(e,o)|0;m=9}else{h=2;m=9}else{h=1;m=9}while(0);do if((m|0)==9){m=0;g=0;while(1){if((g|0)>=(h|0)){m=34;break}if((a[f>>0]&-64)<<24>>24!=-128)break;b=c[p>>2]|0;if(b>>>0>=(c[n>>2]|0)>>>0){em(o,1)|0;b=c[p>>2]|0}c[p>>2]=b+1;a[b>>0]=e;g=g+1|0;e=a[f>>0]|0;f=f+1|0}if((m|0)==34){m=0;c[i>>2]=f;break}c[i>>2]=f;if(!(a[174084]|0)){g=En(d)|0;c[k>>2]=h+1;c[k+4>>2]=g;$l(0,94650,k)|0;a[174084]=1}e=xB(e,o)|0}while(0);b=c[p>>2]|0;if(b>>>0>=(c[n>>2]|0)>>>0){em(o,1)|0;b=c[p>>2]|0}c[p>>2]=b+1;a[b>>0]=e;b=c[i>>2]|0}b=c[p>>2]|0;if(b>>>0>=(c[n>>2]|0)>>>0){em(o,1)|0;b=c[p>>2]|0}a[b>>0]=0;n=c[o>>2]|0;c[p>>2]=n;p=HL(n)|0;hm(o);l=q;return p|0}function xB(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;j=l;l=l+16|0;g=j;a[g>>0]=b;a[g+1>>0]=0;g=zB(g)|0;h=d+4|0;i=d+8|0;e=sJ(g)|0;f=g;while(1){if((e|0)<=1)break;b=c[h>>2]|0;if(b>>>0>=(c[i>>2]|0)>>>0){em(d,1)|0;b=c[h>>2]|0}k=a[f>>0]|0;c[h>>2]=b+1;a[b>>0]=k;e=e+-1|0;f=f+1|0}k=a[f>>0]|0;$I(g);l=j;return k|0}function yB(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+32|0;h=i;d=i+8|0;e=c[b>>2]|0;a:do if((a[e>>0]|0)!=35){c[h>>2]=d;g=0;b:while(1){if((g|0)>=8){d=0;break a}f=a[e+g>>0]|0;switch(f<<24>>24){case 0:{d=0;break a}case 59:break b;default:{}}a[d>>0]=f;d=d+1|0;g=g+1|0}a[d>>0]=0;d=wM(h,22648,252,8,30)|0;if(!d)d=0;else{e=e+(g+1)|0;d=c[d+4>>2]|0}}else{h=a[e+1>>0]|0;d=h&255;c:do if((h|32)<<24>>24==120){h=0;g=2;while(1){if((g|0)>=8){f=h;break c}f=a[e+g>>0]|0;d=f&255;if((f+-65&255)>=6)if((f+-97&255)>=6)if((f+-48&255)<10)f=-48;else{f=h;break c}else f=-87;else f=-55;d=f+d|0;h=d+(h<<4)|0;g=g+1|0}}else{f=0;g=1;while(1){if((g|0)>=8)break c;h=a[e+g>>0]|0;d=h&255;if((h+-48&255)>=10)break c;f=(f*10|0)+-48+d|0;g=g+1|0}}while(0);d=(d|0)==59;e=d?e+(g+1)|0:e;d=d?f:0}while(0);c[b>>2]=e;l=i;return d|0}function zB(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+1056|0;g=k;i=k+8|0;c[g>>2]=b;dm(i,1024,k+24|0);j=i+4|0;h=i+8|0;while(1){c[g>>2]=b+1;d=a[b>>0]|0;if(!(d<<24>>24))break;b=d&255;if(d<<24>>24==38){b=yB(g)|0;if(!b){b=38;f=6}else f=5}else f=5;do if((f|0)==5){f=0;if(b>>>0<127)f=6;else{d=c[j>>2]|0;e=d>>>0>=(c[h>>2]|0)>>>0;if(b>>>0<2047){if(e){em(i,1)|0;d=c[j>>2]|0}c[j>>2]=d+1;a[d>>0]=b>>>6|192;d=c[j>>2]|0;if(d>>>0>=(c[h>>2]|0)>>>0){em(i,1)|0;d=c[j>>2]|0}b=b&63|128;break}if(e){em(i,1)|0;d=c[j>>2]|0}c[j>>2]=d+1;a[d>>0]=b>>>12|224;d=c[j>>2]|0;if(d>>>0>=(c[h>>2]|0)>>>0){em(i,1)|0;d=c[j>>2]|0}c[j>>2]=d+1;a[d>>0]=b>>>6&63|128;d=c[j>>2]|0;if(d>>>0>=(c[h>>2]|0)>>>0){em(i,1)|0;d=c[j>>2]|0}b=b&63|128}}while(0);if((f|0)==6){d=c[j>>2]|0;if(d>>>0>=(c[h>>2]|0)>>>0){em(i,1)|0;d=c[j>>2]|0}}c[j>>2]=d+1;a[d>>0]=b;b=c[g>>2]|0}b=c[j>>2]|0;if(b>>>0>=(c[h>>2]|0)>>>0){em(i,1)|0;b=c[j>>2]|0}a[b>>0]=0;h=c[i>>2]|0;c[j>>2]=h;j=HL(h)|0;hm(i);l=k;return j|0}function AB(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+1040|0;g=i;dm(g,1024,i+16|0);h=g+4|0;f=g+8|0;while(1){d=b+1|0;e=a[b>>0]|0;if(!(e<<24>>24))break;if((e&255)<127){b=c[h>>2]|0;if(b>>>0>=(c[f>>2]|0)>>>0){em(g,1)|0;b=c[h>>2]|0}c[h>>2]=b+1;a[b>>0]=e;b=d;continue}else{e=a[d>>0]&63|e<<6&255;d=c[h>>2]|0;if(d>>>0>=(c[f>>2]|0)>>>0){em(g,1)|0;d=c[h>>2]|0}c[h>>2]=d+1;a[d>>0]=e;b=b+2|0;continue}}b=c[h>>2]|0;if(b>>>0>=(c[f>>2]|0)>>>0){em(g,1)|0;b=c[h>>2]|0}a[b>>0]=0;f=c[g>>2]|0;c[h>>2]=f;h=HL(f)|0;hm(g);l=i;return h|0}function BB(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+80|0;e=n+48|0;d=n+32|0;f=n+64|0;g=n+16|0;i=n;j=b+16|0;k=a+16|0;m=c[k>>2]|0;if(((+h[j>>3]>=+h[m+48>>3]?+h[m+64>>3]>=+h[b>>3]:0)?+h[b+24>>3]>=+h[m+56>>3]:0)?+h[m+72>>3]>=+h[b+8>>3]:0){m=m+16|0;c[d>>2]=c[j>>2];c[d+4>>2]=c[j+4>>2];c[d+8>>2]=c[j+8>>2];c[d+12>>2]=c[j+12>>2];c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];CB(g,d,e);c[d>>2]=c[m>>2];c[d+4>>2]=c[m+4>>2];c[d+8>>2]=c[m+8>>2];c[d+12>>2]=c[m+12>>2];c[e>>2]=c[g>>2];c[e+4>>2]=c[g+4>>2];c[e+8>>2]=c[g+8>>2];c[e+12>>2]=c[g+12>>2];gB(i,d,e);c[f>>2]=a;c[f+4>>2]=0;d=c[(c[(c[(c[k>>2]|0)+8>>2]|0)+4>>2]|0)+12>>2]|0;c[e>>2]=c[i>>2];c[e+4>>2]=c[i+4>>2];c[e+8>>2]=c[i+8>>2];c[e+12>>2]=c[i+12>>2];d=ab[d&63](f,e)|0}else d=0;l=n;return d|0}function CB(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=(+h[c+8>>3]+ +h[b+8>>3])*.5;h[a>>3]=(+h[c>>3]+ +h[b>>3])*.5;h[a+8>>3]=d;return}function DB(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0.0,g=0,i=0.0,j=0,k=0,m=0,n=0;e=l;l=l+80|0;j=e+64|0;k=e+48|0;m=e;n=e+32|0;g=e+16|0;h[m>>3]=+h[a+24>>3]*.5;h[m+8>>3]=+h[a+32>>3]*.5;a=a+56|0;c[k>>2]=c[a>>2];c[k+4>>2]=c[a+4>>2];c[k+8>>2]=c[a+8>>2];c[k+12>>2]=c[a+12>>2];c[j>>2]=c[m>>2];c[j+4>>2]=c[m+4>>2];c[j+8>>2]=c[m+8>>2];c[j+12>>2]=c[m+12>>2];gB(n,k,j);i=+h[n>>3];f=+h[n+8>>3];c[k>>2]=c[a>>2];c[k+4>>2]=c[a+4>>2];c[k+8>>2]=c[a+8>>2];c[k+12>>2]=c[a+12>>2];c[j>>2]=c[m>>2];c[j+4>>2]=c[m+4>>2];c[j+8>>2]=c[m+8>>2];c[j+12>>2]=c[m+12>>2];hB(g,k,j);d=+h[g+8>>3];if((+h[b+16>>3]>=i?+h[g>>3]>=+h[b>>3]:0)?+h[b+24>>3]>=f:0)a=d>=+h[b+8>>3]&1;else a=0;l=e;return a|0}function EB(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+80|0;k=n+48|0;j=n;h=a+16|0;a=c[h>>2]|0;i=c[a+8>>2]|0;a:do if((i|0)!=0?(g=i+8|0,c[j>>2]=c[g>>2],c[j+4>>2]=c[g+4>>2],c[j+8>>2]=c[g+8>>2],c[j+12>>2]=c[g+12>>2],c[j+16>>2]=c[g+16>>2],c[j+20>>2]=c[g+20>>2],c[j+24>>2]=c[g+24>>2],c[j+28>>2]=c[g+28>>2],c[k>>2]=c[b>>2],c[k+4>>2]=c[b+4>>2],c[k+8>>2]=c[b+8>>2],c[k+12>>2]=c[b+12>>2],c[k+16>>2]=c[b+16>>2],c[k+20>>2]=c[b+20>>2],c[k+24>>2]=c[b+24>>2],c[k+28>>2]=c[b+28>>2],(FB(j,k)|0)!=0):0){d=i+4|0;a=0;while(1){if((a|0)>=(c[d>>2]|0))break;e=j;f=(c[i>>2]|0)+(a*48|0)|0;g=e+48|0;do{c[e>>2]=c[f>>2];e=e+4|0;f=f+4|0}while((e|0)<(g|0));c[k>>2]=c[b>>2];c[k+4>>2]=c[b+4>>2];c[k+8>>2]=c[b+8>>2];c[k+12>>2]=c[b+12>>2];c[k+16>>2]=c[b+16>>2];c[k+20>>2]=c[b+20>>2];c[k+24>>2]=c[b+24>>2];c[k+28>>2]=c[b+28>>2];if(!((GB(j,k)|0)<<24>>24))a=a+1|0;else{a=1;break a}}a=c[h>>2]|0;m=7}else m=7;while(0);do if((m|0)==7){a=c[a+96>>2]|0;if(a|0?(c[k>>2]=c[b>>2],c[k+4>>2]=c[b+4>>2],c[k+8>>2]=c[b+8>>2],c[k+12>>2]=c[b+12>>2],c[k+16>>2]=c[b+16>>2],c[k+20>>2]=c[b+20>>2],c[k+24>>2]=c[b+24>>2],c[k+28>>2]=c[b+28>>2],(DB(a,k)|0)<<24>>24):0){a=1;break}a=0}while(0);l=n;return a|0} +function ti(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;h=a+16|0;i=ww((b[(c[h>>2]|0)+238>>1]<<2)+8|0)|0;g=eo(a)|0;while(1){if(!g)break;f=i+(c[(c[g+16>>2]|0)+232>>2]<<2)|0;c[f>>2]=(c[f>>2]|0)+1;f=Qm(a,g)|0;while(1){if(!f)break;j=c[f>>2]&3;d=c[(c[(c[((j|0)==3?f:f+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0;j=c[(c[(c[((j|0)==2?f:f+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0;k=(d|0)>(j|0);e=k?d:j;d=k?j:d;while(1){d=d+1|0;if((d|0)>=(e|0))break;k=i+(d<<2)|0;c[k>>2]=(c[k>>2]|0)+1}f=Sm(a,f)|0}g=fo(a,g)|0}f=ww((b[(c[h>>2]|0)+238>>1]<<6)+128|0)|0;e=c[h>>2]|0;c[e+196>>2]=f;d=b[e+236>>1]|0;while(1){if((d|0)>(b[e+238>>1]|0))break;j=i+(d<<2)|0;e=c[j>>2]|0;c[f+(d<<6)>>2]=e;c[f+(d<<6)+8>>2]=e;j=ww((c[j>>2]<<2)+4|0)|0;e=c[h>>2]|0;k=c[e+196>>2]|0;c[k+(d<<6)+4>>2]=j;c[k+(d<<6)+12>>2]=j;d=d+1|0;f=k}$I(i);return}function ui(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,l=0,m=0;m=a+16|0;i=1;while(1){g=c[m>>2]|0;if((i|0)>(c[g+180>>2]|0))break;l=ui(c[(c[g+184>>2]|0)+(i<<2)>>2]|0,d,e,f)|0;i=i+1|0;f=l}a:do if((Wf(a)|0)!=(a|0)){WN(d|0,0,e<<2|0)|0;g=eo(a)|0;while(1){if(!g)break;k=g+16|0;c[d+(c[(c[k>>2]|0)+232>>2]<<2)>>2]=1;i=Qm(a,g)|0;while(1){if(!i)break;l=i+-48|0;j=c[(c[k>>2]|0)+232>>2]|0;while(1){e=j+1|0;if((j|0)>=(c[(c[(c[((c[i>>2]&3|0)==2?i:l)+40>>2]|0)+16>>2]|0)+232>>2]|0))break;c[d+(e<<2)>>2]=1;j=e}i=Sm(a,i)|0}g=fo(a,g)|0}g=c[m>>2]|0;i=b[g+236>>1]|0;while(1){if((i|0)>(b[g+238>>1]|0))break a;if(!(c[d+(i<<2)>>2]|0)){if(!f)f=Jp(Wf(a)|0,79522,1)|0;g=oo(f,0,1)|0;Oo(g,122241,304,1)|0;l=g+16|0;j=c[l>>2]|0;c[j+232>>2]=i;h[j+96>>3]=.5;h[j+88>>3]=.5;h[j+80>>3]=1.0;c[j+216>>2]=1;c[j+176>>2]=0;j=ww(20)|0;k=c[l>>2]|0;c[k+172>>2]=j;c[k+184>>2]=0;k=ww(20)|0;c[(c[l>>2]|0)+180>>2]=k;jo(a,g,1)|0;g=c[m>>2]|0}i=i+1|0}}while(0);return f|0}function vi(a){a=a|0;var b=0,d=0;Lh(a);b=a+16|0;a=1;while(1){d=c[b>>2]|0;if((a|0)>(c[d+180>>2]|0))break;vi(c[(c[d+184>>2]|0)+(a<<2)>>2]|0);a=a+1|0}return}function wi(a){a=a|0;var b=0,d=0;b=c[a>>2]&3;d=xi(c[((b|0)==3?a:a+48|0)+40>>2]|0)|0;b=c[17236+(d*12|0)+((xi(c[((b|0)==2?a:a+-48|0)+40>>2]|0)|0)<<2)>>2]|0;a=(c[a+16>>2]|0)+156|0;c[a>>2]=O(c[a>>2]|0,b)|0;return}function xi(b){b=b|0;b=c[b+16>>2]|0;if((a[b+156>>0]|0)==1)b=2;else b=(a[b+160>>0]|0)<2&1;return b|0}function yi(b,d){b=b|0;d=d|0;if(c[(c[b+16>>2]|0)+192>>2]|0){Zk(b);zi(b);if(a[174080]|0)ll(b);Ai(b);if(Dl(b)|0)zi(b);Bi(b);if(hx(b,2,Ci(b)|0)|0?(Di(b),hx(b,2,Ci(b)|0)|0):0)ma(79540,79568,134,79579);Ei(b);Fi(b,d);Gi(b)}return}function zi(d){d=d|0;var e=0,f=0,g=0,i=0,j=0.0,k=0.0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0,z=0.0;v=d+16|0;e=c[v>>2]|0;w=c[e+196>>2]|0;t=b[e+236>>1]|0;while(1){if((t|0)>(b[e+238>>1]|0))break;n=w+(t<<6)|0;o=w+(t<<6)+4|0;p=w+(t<<6)+40|0;q=w+(t<<6)+24|0;r=w+(t<<6)+32|0;s=w+(t<<6)+16|0;m=0;while(1){if((m|0)>=(c[n>>2]|0))break;l=(c[(c[o>>2]|0)+(m<<2)>>2]|0)+16|0;e=c[l>>2]|0;j=+h[e+80>>3]*.5;i=c[e+204>>2]|0;a:do if(i){g=0;while(1){f=c[i+(g<<2)>>2]|0;if(!f)break a;x=c[f>>2]&3;if((c[((x|0)==3?f:f+48|0)+40>>2]|0)==(c[((x|0)==2?f:f+-48|0)+40>>2]|0)?(u=c[(c[f+16>>2]|0)+96>>2]|0,(u|0)!=0):0){k=+h[u+32>>3]*.5;j=j>k?j:k}g=g+1|0}}while(0);if(+h[p>>3]>3]=j;h[p>>3]=j}if(+h[r>>3]>3]=j;h[r>>3]=j}f=c[e+212>>2]|0;if(f|0){if((f|0)==(d|0))g=0;else{g=EA(f,c[42189]|0,8,0)|0;e=c[l>>2]|0}i=c[e+232>>2]|0;f=c[f+16>>2]|0;e=f+128|0;j=j+ +(g|0);if((i|0)==(b[f+236>>1]|0)){k=+h[e>>3];h[e>>3]=k>j?k:j}e=f+120|0;if((i|0)==(b[f+238>>1]|0)){k=+h[e>>3];h[e>>3]=k>j?k:j}}m=m+1|0}t=t+1|0;e=c[v>>2]|0}m=fj(d)|0;g=c[v>>2]|0;e=b[g+238>>1]|0;h[(c[(c[c[w+(e<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]=+h[w+(e<<6)+16>>3];f=b[g+236>>1]|0;i=g+252|0;k=0.0;while(1){l=e+-1|0;if((e|0)<=(f|0))break;y=+h[w+(l<<6)+32>>3]+ +h[w+(e<<6)+40>>3]+ +(c[i>>2]|0);j=+h[w+(e<<6)+24>>3]+8.0+ +h[w+(l<<6)+16>>3];j=y>j?y:j;if((c[w+(l<<6)>>2]|0)>0)h[(c[(c[c[w+(l<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]=+h[(c[(c[c[w+(e<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]+j;k=k>j?k:j;e=l}b:do if((m|0)!=0?(c[g+116>>2]&1|0)!=0:0){gj(d,0);g=c[v>>2]|0;if(a[g+276>>0]|0){e=b[g+238>>1]|0;f=b[g+236>>1]|0;j=+h[(c[(c[c[w+(e<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3];k=0.0;while(1){i=e+-1|0;if((e|0)<=(f|0))break b;z=+h[(c[(c[c[w+(i<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3];y=z-j;j=z;k=k>y?k:y;e=i}}}while(0);c:do if(a[g+276>>0]|0){i=b[g+236>>1]|0;f=b[g+238>>1]|0;while(1){e=f+-1|0;if((f|0)<=(i|0))break c;if((c[w+(e<<6)>>2]|0)<=0){f=e;continue}h[(c[(c[c[w+(e<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]=+h[(c[(c[c[w+(f<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]+k;f=e}}while(0);e=g+192|0;while(1){e=c[e>>2]|0;if(!e)break;e=c[e+16>>2]|0;h[e+24>>3]=+h[(c[(c[c[w+(c[e+232>>2]<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3];e=e+164|0}return}function Ai(a){a=a|0;var b=0,d=0,e=0;bj(a);b=(c[a+16>>2]|0)+192|0;while(1){b=c[b>>2]|0;if(!b)break;e=b+16|0;b=c[e>>2]|0;d=c[b+224>>2]|0;if(d){cj(a,d);b=c[e>>2]|0}d=c[b+228>>2]|0;if(!d)d=b;else{cj(a,d);d=c[e>>2]|0}e=c[d+204>>2]|0;if(e|0){b=0;while(1)if(!(c[e+(b<<2)>>2]|0))break;else b=b+1|0}b=d+164|0}return}function Bi(a){a=a|0;Pi(a);Qi(a);Ri(a);Si(a);Ti(a);return}function Ci(a){a=a|0;var b=0,c=0.0;b=Jm(a,79768)|0;if(!b)a=2147483647;else{c=+tM(b);a=~~(c*+(nn(a)|0))}return a|0}function Di(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;r=d+16|0;e=c[r>>2]|0;q=b[e+236>>1]|0;while(1){p=b[e+238>>1]|0;if((q|0)>(p|0)){s=19;break}n=c[e+196>>2]|0;o=n+(q<<6)|0;m=c[o>>2]|0;n=n+(q<<6)+4|0;l=0;f=0;a:while(1){if((l|0)>=(m|0)){s=14;break}f=c[(c[n>>2]|0)+(l<<2)>>2]|0;h=c[f+16>>2]|0;i=c[h+256>>2]|0;b:do if(i|0){g=0;while(1){j=c[i+(g<<2)>>2]|0;if(!j)break b;k=c[j>>2]&3;if((c[(c[(c[((k|0)==2?j:j+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)>(q|0))break a;if((c[(c[(c[((k|0)==3?j:j+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)>(q|0))break a;else g=g+1|0}}while(0);h=c[h+248>>2]|0;c:do if(h|0){g=0;while(1){i=c[h+(g<<2)>>2]|0;if(!i)break c;j=c[i>>2]&3;if((c[(c[(c[((j|0)==3?i:i+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)>(q|0))break a;if((c[(c[(c[((j|0)==2?i:i+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)>(q|0))break a;else g=g+1|0}}while(0);l=l+1|0}if((s|0)==14){s=0;if(f){f=c[c[n>>2]>>2]|0;e=c[c[o+(((q|0)<(p|0)?1:-1)<<6)+4>>2]>>2]|0;if(!e){s=16;break}o=gh(d)|0;p=o+16|0;a[(c[p>>2]|0)+156>>0]=2;Ni(o,f,0.0,0)|0;Ni(o,e,0.0,0)|0;c[(c[p>>2]|0)+232>>2]=c[(c[((c[(c[f+16>>2]|0)+232>>2]|0)<(c[(c[e+16>>2]|0)+232>>2]|0)?f:e)+16>>2]|0)+232>>2];e=c[r>>2]|0}}q=q+1|0}if((s|0)==16)ma(79676,79568,111,79679);else if((s|0)==19)return}function Ei(a){a=a|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0;a=c[a+16>>2]|0;i=c[a+196>>2]|0;e=b[a+238>>1]|0;a=b[a+236>>1]|0;while(1){if((a|0)>(e|0))break;f=c[i+(a<<6)>>2]|0;g=i+(a<<6)+4|0;d=0;while(1){if((d|0)>=(f|0))break;k=c[(c[(c[g>>2]|0)+(d<<2)>>2]|0)+16>>2]|0;j=k+232|0;h[k+16>>3]=+(c[j>>2]|0);c[j>>2]=a;d=d+1|0}a=a+1|0}return}function Fi(a,d){a=a|0;d=d|0;var e=0,f=0.0,g=0,i=0.0,j=0,k=0,l=0.0,m=0,n=0,o=0,p=0;Hi(a,a);g=a+16|0;k=c[g>>2]|0;a:do if((b[k+238>>1]|0)>0?(j=c[k+8>>2]|0,e=c[j+84>>2]|0,e|0):0){o=~~(+h[k+32>>3]-+h[k+16>>3]);m=~~(+h[k+40>>3]-+h[k+24>>3]);p=(c[k+116>>2]&1|0)==0;n=p?m:o;m=p?o:m;if((e|0)==4){e=Ii(a)|0;k=c[g>>2]|0;j=c[k+8>>2]|0}else e=(e|0)==2&1;b:do if(!(e<<24>>24)){switch(c[j+84>>2]|0){case 5:{f=+h[j+64>>3];if(f<=0.0)break a;i=f/+h[k+32>>3];l=+h[j+72>>3]/+h[k+40>>3];f=i1.0&l>1.0){l=f;break b}else break a}case 1:break;default:break a}i=+h[j+16>>3];f=+(n|0)/+(m|0);if(f>3];if(f<=0.0)break a;i=f/+(m|0);f=+h[j+72>>3]/+(n|0);if(i<1.0|f<1.0)if(i>2]&1|0)==0;i=e?f:l;f=e?l:f;e=k+192|0;while(1){e=c[e>>2]|0;if(!e)break;e=c[e+16>>2]|0;p=e+16|0;l=+h[p>>3]*f;h[p>>3]=+(~~(l+(l>=0.0?.5:-.5))|0);p=e+24|0;l=+h[p>>3]*i;h[p>>3]=+(~~(l+(l>=0.0?.5:-.5))|0);e=e+164|0}Ji(a,f,i)}while(0);if(d|0)Ki(a,d);return}function Gi(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;h=b+16|0;b=(c[h>>2]|0)+192|0;while(1){b=c[b>>2]|0;if(!b)break;g=b+16|0;d=0;while(1){b=c[g>>2]|0;f=c[b+180>>2]|0;e=c[f+(d<<2)>>2]|0;if(!e)break;$I(c[e+16>>2]|0);$I(e);d=d+1|0}if(f){$I(f);b=c[g>>2]|0}d=c[b+172>>2]|0;if(d){$I(d);b=c[g>>2]|0}f=b+256|0;e=c[f+4>>2]|0;b=b+180|0;c[b>>2]=c[f>>2];c[b+4>>2]=e;b=c[g>>2]|0;e=b+248|0;f=c[e+4>>2]|0;b=b+172|0;c[b>>2]=c[e>>2];c[b+4>>2]=f;b=(c[g>>2]|0)+164|0}b=0;d=c[(c[h>>2]|0)+192>>2]|0;a:while(1){g=(b|0)==0;f=b+16|0;b=d;while(1){if(!b)break a;e=c[b+16>>2]|0;d=c[e+164>>2]|0;if((a[e+156>>0]|0)!=2)continue a;if(g)c[(c[h>>2]|0)+192>>2]=d;else c[(c[f>>2]|0)+164>>2]=d;$I(e);$I(b);b=d}}c[(c[(c[(c[h>>2]|0)+192>>2]|0)+16>>2]|0)+168>>2]=0;return}function Hi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;e=a+16|0;d=1;while(1){f=c[e>>2]|0;if((d|0)>(c[f+180>>2]|0))break;Hi(c[(c[f+184>>2]|0)+(d<<2)>>2]|0,b);d=d+1|0}Mi(a,b);return}function Ii(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,i=0,j=0.0,k=0.0,m=0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0;s=l;l=l+80|0;e=s+64|0;d=s+48|0;f=s+16|0;m=s;r=s+32|0;a=a+16|0;b=c[(c[a>>2]|0)+8>>2]|0;t=b+48|0;c[f>>2]=c[t>>2];c[f+4>>2]=c[t+4>>2];c[f+8>>2]=c[t+8>>2];c[f+12>>2]=c[t+12>>2];if((!(+h[f>>3]<.001)?(g=f+8|0,!(+h[g>>3]<.001)):0)?(i=b+32|0,c[m>>2]=c[i>>2],c[m+4>>2]=c[i+4>>2],c[m+8>>2]=c[i+8>>2],c[m+12>>2]=c[i+12>>2],c[d>>2]=c[f>>2],c[d+4>>2]=c[f+4>>2],c[d+8>>2]=c[f+8>>2],c[d+12>>2]=c[f+12>>2],c[e>>2]=c[i>>2],c[e+4>>2]=c[i+4>>2],c[e+8>>2]=c[i+8>>2],c[e+12>>2]=c[i+12>>2],Li(r,d,e),c[f>>2]=c[r>>2],c[f+4>>2]=c[r+4>>2],c[f+8>>2]=c[r+8>>2],c[f+12>>2]=c[r+12>>2],c[d>>2]=c[r>>2],c[d+4>>2]=c[r+4>>2],c[d+8>>2]=c[r+8>>2],c[d+12>>2]=c[r+12>>2],c[e>>2]=c[m>>2],c[e+4>>2]=c[m+4>>2],c[e+8>>2]=c[m+8>>2],c[e+12>>2]=c[m+12>>2],Li(f,d,e),i=c[a>>2]|0,j=+h[i+32>>3],k=+h[i+40>>3],n=+h[f>>3],o=n/j,p=+h[g>>3],q=p/k,!(o>=1.0&q>=1.0)):0){o=o.5?o:.5;q=+N(+(o*k/p))*p/k;p=+N(+(o*j/n))*n/j*j;a=c[i+8>>2]|0;h[a+64>>3]=p;h[a+72>>3]=q*k;a=1}else a=0;l=s;return a|0}function Ji(a,b,d){a=a|0;b=+b;d=+d;var e=0,f=0;e=a+16|0;a=1;while(1){f=c[e>>2]|0;if((a|0)>(c[f+180>>2]|0))break;Ji(c[(c[f+184>>2]|0)+(a<<2)>>2]|0,b,d);a=a+1|0}e=f+16|0;h[e>>3]=+h[e>>3]*b;e=f+24|0;h[e>>3]=+h[e>>3]*d;e=f+32|0;h[e>>3]=+h[e>>3]*b;f=f+40|0;h[f>>3]=+h[f>>3]*d;return}function Ki(a,b){a=a|0;b=b|0;var d=0.0,e=0.0,f=0,g=0,i=0.0,j=0,k=0,m=0,n=0;m=l;l=l+32|0;j=m+24|0;g=m+16|0;f=m;n=c[a+16>>2]|0;e=+h[n+32>>3]-+h[n+16>>3];d=+h[n+40>>3]-+h[n+24>>3];i=e/d;if(0){n=c[13918]|0;h[f>>3]=i;h[f+8>>3]=e*.0001*d;AL(n,79592,f)|0;c[g>>2]=lk(a)|0;AL(n,79617,g)|0}d=+h[b>>3];do if(!(i>d*1.1)){a=b+24|0;if(!(i<=d*.8)){c[a>>2]=0;k=9;break}c[a>>2]=-1;if(0){YL(79627,34,1,c[13918]|0)|0;k=9}}else{c[b+24>>2]=~~(d*+((c[b+20>>2]|0)-(c[b+16>>2]|0)|0)/i);k=9}while(0);if((k|0)==9?0:0){n=c[13918]|0;c[j>>2]=c[b+24>>2];AL(n,79662,j)|0}l=m;return}function Li(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=+h[b+8>>3]-+h[c+8>>3];h[a>>3]=+h[b>>3]-+h[c>>3];h[a+8>>3]=d;return}function Mi(d,e){d=d|0;e=e|0;var f=0,g=0.0,i=0.0,j=0,k=0,l=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0.0;s=(Wf(d)|0)==(d|0);v=d+16|0;w=c[v>>2]|0;a:do if(s){f=b[w+236>>1]|0;d=b[w+238>>1]|0;q=d<<16>>16;r=w+196|0;s=w+196|0;p=f<<16>>16;i=-2147483647.0;g=2147483647.0;while(1){if((p|0)>(q|0))break;j=c[r>>2]|0;o=c[j+(p<<6)>>2]|0;if((o|0)!=0?(t=c[j+(p<<6)+4>>2]|0,u=c[t>>2]|0,(u|0)!=0):0){l=1;j=u;while(1){j=c[j+16>>2]|0;k=a[j+156>>0]|0;if(!((l|0)<(o|0)&k<<24>>24!=0))break;j=c[t+(l<<2)>>2]|0;l=l+1|0}if(!(k<<24>>24)){m=+h[j+16>>3]-+h[j+88>>3];n=g>2]|0)+(p<<6)+4>>2]|0;k=o+-2|0;j=o+-1|0;while(1){j=c[(c[l+(j<<2)>>2]|0)+16>>2]|0;if(!(a[j+156>>0]|0))break;else{j=k;k=k+-1|0}}x=+h[j+96>>3]+ +h[j+16>>3];i=i>x?i:x;g=n?g:m}}p=p+1|0}k=c[w+180>>2]|0;l=w+184|0;j=1;while(1){if((j|0)>(k|0))break a;u=c[(c[(c[l>>2]|0)+(j<<2)>>2]|0)+16>>2]|0;x=+h[u+16>>3]+-8.0;m=+h[u+32>>3]+8.0;j=j+1|0;i=i>m?i:m;g=g>2]|0)+16>>2]|0)+232>>2]|0);g=+(c[(c[(c[w+256>>2]|0)+16>>2]|0)+232>>2]|0);f=b[w+236>>1]|0;d=b[w+238>>1]|0}while(0);e=c[(c[e+16>>2]|0)+196>>2]|0;m=+h[(c[(c[c[e+(d<<16>>16<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]-+h[w+120>>3];x=+h[w+128>>3]+ +h[(c[(c[c[e+(f<<16>>16<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3];h[w+16>>3]=g;h[w+24>>3]=m;e=c[v>>2]|0;h[e+32>>3]=i;h[e+40>>3]=x;return}function Ni(a,d,e,f){a=a|0;d=d|0;e=+e;f=f|0;var g=0,h=0,i=0,j=0;i=ww(96)|0;j=i+48|0;c[j>>2]=c[j>>2]|3;c[i>>2]=c[i>>2]&-4|2;g=ww(176)|0;h=i+16|0;c[h>>2]=g;c[((c[i>>2]&3|0)==3?i:j)+40>>2]=a;c[((c[i>>2]&3|0)==2?i:i+-48|0)+40>>2]=d;if(e>65535.0){Oi(e);e=65535.0;g=c[h>>2]|0}b[g+170>>1]=~~(e+(e>=0.0?.5:-.5));c[g+156>>2]=f;Wg(i)|0;return i|0}function Oi(a){a=+a;var b=0,d=0;b=l;l=l+16|0;d=b;h[d>>3]=a;c[d+8>>2]=65535;$l(1,79692,d)|0;l=b;return}function Pi(a){a=a|0;var b=0,d=0,e=0,f=0;a=(c[a+16>>2]|0)+192|0;while(1){a=c[a>>2]|0;if(!a)break;f=a+16|0;e=c[f>>2]|0;a=e+172|0;d=c[a+4>>2]|0;e=e+248|0;c[e>>2]=c[a>>2];c[e+4>>2]=d;e=c[f>>2]|0;d=e+180|0;a=c[d+4>>2]|0;e=e+256|0;c[e>>2]=c[d>>2];c[e+4>>2]=a;e=c[f>>2]|0;a=c[e+180>>2]|0;d=0;while(1)if(!(c[a+(d<<2)>>2]|0))break;else d=d+1|0;b=c[e+172>>2]|0;a=0;while(1)if(!(c[b+(a<<2)>>2]|0))break;else a=a+1|0;c[e+176>>2]=0;a=ww((a+d<<2)+16|0)|0;e=c[f>>2]|0;c[e+172>>2]=a;c[e+184>>2]=0;e=ww(16)|0;a=c[f>>2]|0;c[a+180>>2]=e;a=a+164|0}return}function Qi(d){d=d|0;var f=0,g=0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0.0,q=0,r=0,s=0,t=0.0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.0,B=0.0;z=l;l=l+16|0;w=z;x=d+16|0;u=c[x>>2]|0;y=c[u+196>>2]|0;d=(a[(c[(c[d+60>>2]|0)+16>>2]|0)+113>>0]&1)!=0;v=c[u+248>>2]|0;c[w>>2]=v;c[w+4>>2]=d?5:v;v=b[u+236>>1]|0;d=u;while(1){if((v|0)>(b[d+238>>1]|0))break;r=y+(v<<6)+4|0;c[(c[(c[c[r>>2]>>2]|0)+16>>2]|0)+232>>2]=0;s=y+(v<<6)|0;t=+(c[w+((v&1)<<2)>>2]|0);p=0.0;k=0;a:while(1){if((k|0)>=(c[s>>2]|0))break;f=c[r>>2]|0;m=c[f+(k<<2)>>2]|0;u=m+16|0;d=c[u>>2]|0;i=+h[d+96>>3];h[d+240>>3]=i;if((c[d+208>>2]|0)>0){j=0;f=0;while(1){g=c[(c[d+204>>2]|0)+(j<<2)>>2]|0;if(!g)break;q=c[g>>2]&3;if((c[((q|0)==3?g:g+48|0)+40>>2]|0)==(c[((q|0)==2?g:g+-48|0)+40>>2]|0)){f=(Rz(g)|0)+f|0;d=c[u>>2]|0}j=j+1|0}q=d+96|0;i=+h[q>>3]+ +(f|0);h[q>>3]=i;f=c[r>>2]|0}q=k+1|0;f=c[f+(q<<2)>>2]|0;if(f){o=f+16|0;i=i+t+ +h[(c[o>>2]|0)+88>>3];Ni(m,f,i,0)|0;d=~~(i+p);c[(c[o>>2]|0)+232>>2]=d;p=+(d|0);d=c[u>>2]|0}f=c[d+112>>2]|0;if(f){j=c[d+256>>2]|0;k=c[j>>2]|0;j=c[j+4>>2]|0;d=(c[(c[(c[((c[k>>2]&3|0)==2?k:k+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0)>(c[(c[(c[((c[j>>2]&3|0)==2?j:j+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0);g=d?j:k;j=d?k:j;k=f+16|0;d=c[k>>2]|0;i=+((O(c[(c[x>>2]|0)+248>>2]|0,e[d+170>>1]|0)|0)/2|0|0);o=c[g>>2]&3;f=c[((o|0)==2?g:g+-48|0)+40>>2]|0;g=c[((o|0)==3?g:g+48|0)+40>>2]|0;if(!($i(g,f)|0))Ni(f,g,+(~~(+h[(c[f+16>>2]|0)+96>>3]+i+ +h[(c[g+16>>2]|0)+88>>3])|0),c[d+156>>2]|0)|0;d=c[j>>2]&3;f=c[((d|0)==3?j:j+48|0)+40>>2]|0;d=c[((d|0)==2?j:j+-48|0)+40>>2]|0;if(!($i(d,f)|0)){Ni(f,d,+(~~(+h[(c[f+16>>2]|0)+96>>3]+i+ +h[(c[d+16>>2]|0)+88>>3])|0),c[(c[k>>2]|0)+156>>2]|0)|0;o=0}else o=0}else o=0;while(1){d=c[u>>2]|0;if((o|0)>=(c[d+192>>2]|0)){k=q;continue a}m=c[(c[d+188>>2]|0)+(o<<2)>>2]|0;k=c[m>>2]&3;g=c[((k|0)==3?m:m+48|0)+40>>2]|0;k=c[((k|0)==2?m:m+-48|0)+40>>2]|0;j=(c[(c[g+16>>2]|0)+236>>2]|0)<(c[(c[k+16>>2]|0)+236>>2]|0);f=j?g:k;g=j?k:g;i=+h[(c[g+16>>2]|0)+88>>3]+ +h[(c[f+16>>2]|0)+96>>3];k=m+16|0;j=~~(i+ +(O(c[(c[x>>2]|0)+248>>2]|0,e[(c[k>>2]|0)+170>>1]|0)|0));n=Tg(f,g)|0;if(!n){d=c[k>>2]|0;if(!(c[d+96>>2]|0))Ni(f,g,+(j|0),c[d+156>>2]|0)|0}else{A=+(j|0);d=c[k>>2]|0;B=+h[d+136>>3];i=i+ +(c[(c[x>>2]|0)+248>>2]|0)+ +(~~(B+(B>=0.0?.5:-.5))|0);f=~~(i65535){Oi(+(f|0));f=65535;d=c[k>>2]|0}k=c[n+16>>2]|0;j=k+170|0;g=e[j>>1]|0;b[j>>1]=(f|0)<(g|0)?g:f;k=k+156|0;c[k>>2]=c[(c[((c[k>>2]|0)>(c[d+156>>2]|0)?n:m)+16>>2]|0)+156>>2]}o=o+1|0}}v=v+1|0;d=c[x>>2]|0}l=z;return}function Ri(b){b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0;d=(c[b+16>>2]|0)+192|0;while(1){d=c[d>>2]|0;if(!d)break;g=d+16|0;d=c[g>>2]|0;e=c[d+256>>2]|0;a:do if(e){f=0;while(1){e=c[e+(f<<2)>>2]|0;if(!e)break a;n=gh(b)|0;d=n+16|0;a[(c[d>>2]|0)+156>>0]=2;l=e+16|0;k=c[l>>2]|0;i=~~(+h[k+56>>3]-+h[k+16>>3]);m=(i|0)>0;j=m?0:0-i|0;i=m?i:0;m=e+48|0;Ni(n,c[((c[e>>2]&3|0)==3?e:m)+40>>2]|0,+(i+1|0),c[k+156>>2]|0)|0;k=e+-48|0;Ni(n,c[((c[e>>2]&3|0)==2?e:k)+40>>2]|0,+(j+1|0),c[(c[l>>2]|0)+156>>2]|0)|0;l=c[e>>2]&3;i=(c[(c[(c[((l|0)==3?e:m)+40>>2]|0)+16>>2]|0)+232>>2]|0)-i|0;e=(c[(c[(c[((l|0)==2?e:k)+40>>2]|0)+16>>2]|0)+232>>2]|0)-j|0;c[(c[d>>2]|0)+232>>2]=((i|0)<(e|0)?i:e)+-1;d=c[g>>2]|0;f=f+1|0;e=c[d+256>>2]|0}}while(0);d=d+164|0}return}function Si(a){a=a|0;if((c[(c[a+16>>2]|0)+180>>2]|0)>0){Wi(a);Xi(a);Yi(a);Zi(a)}return}function Ti(a){a=a|0;var b=0.0,d=0.0,e=0,f=0;e=a+16|0;f=c[(c[e>>2]|0)+8>>2]|0;if((c[f+84>>2]|0)==3?(b=+h[f+64>>3],d=+h[f+72>>3],!(d*b<=1.0)):0){Ui(a);f=c[e>>2]|0;d=(c[f+116>>2]&1|0)==0?b:d;Ni(c[f+256>>2]|0,c[f+260>>2]|0,d<65535.0?d:65535.0,1e3)|0}return}function Ui(a){a=a|0;var d=0,e=0,f=0.0,g=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+16|0;m=n;e=EA(a,c[42189]|0,8,0)|0;Vi(a);i=a+16|0;g=c[i>>2]|0;j=c[g+256>>2]|0;k=c[g+260>>2]|0;f=+(e|0);e=b[g+236>>1]|0;while(1){if((e|0)>(b[g+238>>1]|0))break;d=c[g+196>>2]|0;do if(c[d+(e<<6)>>2]|0){d=c[c[d+(e<<6)+4>>2]>>2]|0;if(!d){c[m>>2]=En(a)|0;c[m+4>>2]=e;$l(1,79776,m)|0;break}else{Ni(j,d,+h[(c[d+16>>2]|0)+88>>3]+f+ +h[g+96>>3],0)|0;g=c[i>>2]|0;d=c[g+196>>2]|0;d=c[(c[d+(e<<6)+4>>2]|0)+((c[d+(e<<6)>>2]|0)+-1<<2)>>2]|0;Ni(d,k,+h[(c[d+16>>2]|0)+96>>3]+f+ +h[g+64>>3],0)|0;break}}while(0);e=e+1|0;g=c[i>>2]|0}l=n;return}function Vi(b){b=b|0;var d=0,e=0,f=0;d=b+16|0;if(!(c[(c[d>>2]|0)+256>>2]|0)){f=gh(Wf(b)|0)|0;a[(c[f+16>>2]|0)+156>>0]=2;e=gh(Wf(b)|0)|0;a[(c[e+16>>2]|0)+156>>0]=2;if((c[(c[d>>2]|0)+12>>2]|0?(Wf(b)|0)!=(b|0):0)?(c[(c[(to(b)|0)+16>>2]|0)+116>>2]&1|0)==0:0){b=c[d>>2]|0;Ni(f,e,+(~~+h[b+48+((+h[b+48>>3]>+h[b+80>>3]?0:2)<<4)>>3]|0),0)|0}d=c[d>>2]|0;c[d+256>>2]=f;c[d+260>>2]=e}return}function Wi(a){a=a|0;var b=0,d=0;do if((Wf(a)|0)!=(a|0)){Ui(a);a=a+16|0;b=c[a>>2]|0;b=Tg(c[b+256>>2]|0,c[b+260>>2]|0)|0;if(!b){d=c[a>>2]|0;Ni(c[d+256>>2]|0,c[d+260>>2]|0,1.0,128)|0;break}else{d=(c[b+16>>2]|0)+156|0;c[d>>2]=(c[d>>2]|0)+128;break}}else a=a+16|0;while(0);b=1;while(1){d=c[a>>2]|0;if((b|0)>(c[d+180>>2]|0))break;Wi(c[(c[d+184>>2]|0)+(b<<2)>>2]|0);b=b+1|0}return}function Xi(d){d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0.0,n=0,o=0;k=EA(d,c[42189]|0,8,0)|0;o=d+16|0;e=c[o>>2]|0;m=+(k|0);k=b[e+236>>1]|0;while(1){if((k|0)>(b[e+238>>1]|0)){f=1;break}e=c[e+196>>2]|0;a:do if(c[e+(k<<6)>>2]|0?(l=c[c[e+(k<<6)+4>>2]>>2]|0,l|0):0){i=l+16|0;f=c[(c[i>>2]|0)+236>>2]|0;while(1){if((f|0)<=0)break;f=f+-1|0;j=c[(c[(c[(c[(Wf(d)|0)+16>>2]|0)+196>>2]|0)+(k<<6)+4>>2]|0)+(f<<2)>>2]|0;g=j+16|0;e=c[g>>2]|0;if(!(a[e+156>>0]|0)){n=10;break}if(_i(d,j)|0){n=9;break}}if((n|0)==9){e=c[g>>2]|0;n=10}if((n|0)==10){n=0;Ni(j,c[(c[o>>2]|0)+256>>2]|0,+h[e+96>>3]+m,0)|0}f=(c[(c[(c[o>>2]|0)+196>>2]|0)+(k<<6)>>2]|0)+(c[(c[i>>2]|0)+236>>2]|0)|0;while(1){if((f|0)>=(c[(c[(c[(Wf(d)|0)+16>>2]|0)+196>>2]|0)+(k<<6)>>2]|0))break a;i=c[(c[(c[(c[(Wf(d)|0)+16>>2]|0)+196>>2]|0)+(k<<6)+4>>2]|0)+(f<<2)>>2]|0;g=i+16|0;e=c[g>>2]|0;if(!(a[e+156>>0]|0))break;if(!(_i(d,i)|0))f=f+1|0;else{n=15;break}}if((n|0)==15){n=0;e=c[g>>2]|0}Ni(c[(c[o>>2]|0)+260>>2]|0,i,+h[e+88>>3]+m,0)|0}while(0);k=k+1|0;e=c[o>>2]|0}while(1){if((f|0)>(c[e+180>>2]|0))break;Xi(c[(c[e+184>>2]|0)+(f<<2)>>2]|0);f=f+1|0;e=c[o>>2]|0}return}function Yi(a){a=a|0;var b=0,d=0.0,e=0,f=0,g=0;e=EA(a,c[42189]|0,8,0)|0;Vi(a);b=a+16|0;d=+(e|0);a=1;while(1){e=c[b>>2]|0;if((a|0)>(c[e+180>>2]|0))break;e=c[(c[e+184>>2]|0)+(a<<2)>>2]|0;Vi(e);f=c[b>>2]|0;g=e+16|0;Ni(c[f+256>>2]|0,c[(c[g>>2]|0)+256>>2]|0,+h[f+96>>3]+d,0)|0;f=c[b>>2]|0;Ni(c[(c[g>>2]|0)+260>>2]|0,c[f+260>>2]|0,+h[f+64>>3]+d,0)|0;Yi(e);a=a+1|0}return}function Zi(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0.0,n=0,o=0;d=EA(a,c[42189]|0,8,0)|0;n=a+16|0;a=1;while(1){f=c[n>>2]|0;e=c[f+180>>2]|0;if((a|0)>(e|0))break;Vi(c[(c[f+184>>2]|0)+(a<<2)>>2]|0);a=a+1|0}m=+(d|0);l=1;a=e;d=f;while(1){if((l|0)>(a|0))break;k=l+1|0;j=k;while(1){e=c[d+184>>2]|0;f=c[e+(l<<2)>>2]|0;if((j|0)>(a|0))break;e=c[e+(j<<2)>>2]|0;g=(b[(c[f+16>>2]|0)+236>>1]|0)>(b[(c[e+16>>2]|0)+236>>1]|0);i=g?e:f;e=g?f:e;f=c[i+16>>2]|0;g=c[e+16>>2]|0;o=b[g+236>>1]|0;h=o<<16>>16;if((b[f+238>>1]|0)>=o<<16>>16){a=(c[(c[(c[c[(c[f+196>>2]|0)+(h<<6)+4>>2]>>2]|0)+16>>2]|0)+236>>2]|0)<(c[(c[(c[c[(c[g+196>>2]|0)+(h<<6)+4>>2]>>2]|0)+16>>2]|0)+236>>2]|0);Ni(c[(c[(a?i:e)+16>>2]|0)+260>>2]|0,c[(c[(a?e:i)+16>>2]|0)+256>>2]|0,m,0)|0;a=c[n>>2]|0;d=a;a=c[a+180>>2]|0}j=j+1|0}Zi(f);d=c[n>>2]|0;l=k;a=c[d+180>>2]|0}return}function _i(b,d){b=b|0;d=d|0;var e=0;d=c[d+16>>2]|0;if((a[d+156>>0]|0)==1){d=c[c[d+256>>2]>>2]|0;while(1){e=c[(c[d+16>>2]|0)+116>>2]|0;if(!e)break;else d=e}if(!(Co(b,c[((c[d>>2]&3|0)==3?d:d+48|0)+40>>2]|0)|0))d=(Co(b,c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0)|0)==0&1;else d=0}else d=0;return d|0}function $i(a,b){a=a|0;b=b|0;return aj(a,b)|0}function aj(a,b){a=a|0;b=b|0;var d=0,e=0;a:do if((a|0)==(b|0))a=1;else{d=c[(c[a+16>>2]|0)+180>>2]|0;a=0;while(1){e=c[d+(a<<2)>>2]|0;if(!e){a=0;break a}if(!(aj(c[((c[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0,b)|0))a=a+1|0;else{a=1;break}}}while(0);return a|0}function bj(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=d+16|0;d=c[k>>2]|0;j=b[d+236>>1]|0;while(1){if((j|0)>(b[d+238>>1]|0))break;h=c[d+196>>2]|0;g=c[h+(j<<6)>>2]|0;h=h+(j<<6)+4|0;i=0;f=0;while(1){if((f|0)>=(g|0))break;e=c[(c[(c[h>>2]|0)+(f<<2)>>2]|0)+16>>2]|0;c[e+236>>2]=i;if((a[e+159>>0]|0)==6)e=c[e+216>>2]|0;else e=1;i=e+i|0;f=f+1|0}if((i|0)>(g|0)){d=c[h>>2]|0;if(!d)d=xw((i<<2)+4|0)|0;else d=zw(d,(i<<2)+4|0)|0;f=c[(c[k>>2]|0)+196>>2]|0;c[f+(j<<6)+4>>2]=d;e=c[f+(j<<6)>>2]|0;while(1){d=e+-1|0;if((e|0)<=0)break;h=c[f+(j<<6)+4>>2]|0;e=c[h+(d<<2)>>2]|0;c[h+(c[(c[e+16>>2]|0)+236>>2]<<2)>>2]=e;e=d;f=c[(c[k>>2]|0)+196>>2]|0}c[f+(j<<6)>>2]=i;c[(c[f+(j<<6)+4>>2]|0)+(i<<2)>>2]=0;d=c[k>>2]|0}j=j+1|0}return}function cj(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;o=l;l=l+48|0;n=o+32|0;m=o+8|0;d=o+24|0;k=o+16|0;j=o;e=b+16|0;f=c[e>>2]|0;a:do if((c[f+216>>2]|0)>=2){c[m>>2]=~~(+h[f+16>>3]-+h[f+88>>3]);c[m+4>>2]=~~+h[f+24>>3];c[n>>2]=c[m>>2];c[n+4>>2]=c[m+4>>2];dj(d,b,n);g=d;i=c[g+4>>2]|0;d=m;c[d>>2]=c[g>>2];c[d+4>>2]=i;d=c[e>>2]|0;if((c[d+184>>2]|0)>0){j=c[c[d+180>>2]>>2]|0;d=(c[d+236>>2]|0)+1|0;j=Tm(a,c[((c[j>>2]&3|0)==2?j:j+-48|0)+40>>2]|0)|0;while(1){if(!j)break a;i=(c[j>>2]&3|0)==2?j:j+-48|0;e=i+48|0;f=c[((c[i>>2]&3|0)==3?i:e)+40>>2]|0;if((f|0)!=(b|0)?(LA(f)|0)==(b|0):0){f=c[((c[i>>2]&3|0)==3?i:e)+40>>2]|0;c[n>>2]=c[m>>2];c[n+4>>2]=c[m+4>>2];ej(k,a,f,n,d);f=k;e=c[f+4>>2]|0;g=m;c[g>>2]=c[f>>2];c[g+4>>2]=e;lh(i);g=i+-48|0;e=c[(c[((c[i>>2]&3|0)==2?i:g)+40>>2]|0)+16>>2]|0;f=c[e+172>>2]|0;if(!f)e=xw((c[e+176>>2]<<2)+8|0)|0;else e=zw(f,(c[e+176>>2]<<2)+8|0)|0;c[(c[(c[((c[i>>2]&3|0)==2?i:g)+40>>2]|0)+16>>2]|0)+172>>2]=e;p=c[(c[((c[i>>2]&3|0)==2?i:g)+40>>2]|0)+16>>2]|0;e=c[p+172>>2]|0;p=p+176|0;f=c[p>>2]|0;c[p>>2]=f+1;c[e+(f<<2)>>2]=i;i=c[(c[((c[i>>2]&3|0)==2?i:g)+40>>2]|0)+16>>2]|0;c[(c[i+172>>2]|0)+(c[i+176>>2]<<2)>>2]=0;d=d+1|0}j=Um(a,j)|0}}else{i=c[c[d+172>>2]>>2]|0;d=(c[d+236>>2]|0)+1|0;i=Qm(a,c[((c[i>>2]&3|0)==3?i:i+48|0)+40>>2]|0)|0;while(1){if(!i)break a;e=i+-48|0;f=c[((c[i>>2]&3|0)==2?i:e)+40>>2]|0;if((f|0)!=(b|0)?(LA(f)|0)==(b|0):0){f=c[((c[i>>2]&3|0)==2?i:e)+40>>2]|0;c[n>>2]=c[m>>2];c[n+4>>2]=c[m+4>>2];ej(j,a,f,n,d);f=j;e=c[f+4>>2]|0;g=m;c[g>>2]=c[f>>2];c[g+4>>2]=e;lh(i);g=i+48|0;e=c[(c[((c[i>>2]&3|0)==3?i:g)+40>>2]|0)+16>>2]|0;f=c[e+180>>2]|0;if(!f)e=xw((c[e+184>>2]<<2)+8|0)|0;else e=zw(f,(c[e+184>>2]<<2)+8|0)|0;c[(c[(c[((c[i>>2]&3|0)==3?i:g)+40>>2]|0)+16>>2]|0)+180>>2]=e;f=c[(c[((c[i>>2]&3|0)==3?i:g)+40>>2]|0)+16>>2]|0;k=c[f+180>>2]|0;f=f+184|0;p=c[f>>2]|0;c[f>>2]=p+1;c[k+(p<<2)>>2]=i;p=c[(c[((c[i>>2]&3|0)==3?i:g)+40>>2]|0)+16>>2]|0;c[(c[p+180>>2]|0)+(c[p+184>>2]<<2)>>2]=0;d=d+1|0}i=Sm(a,i)|0}}}while(0);l=o;return}function dj(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0.0;LB(b,c[(c[(so(b)|0)+16>>2]|0)+116>>2]&1);e=c[b+16>>2]|0;h[e+24>>3]=+(c[d+4>>2]|0);f=+h[e+88>>3]+ +(c[d>>2]|0);h[e+16>>3]=f;f=f+ +h[e+96>>3];c[d>>2]=~~(f+ +(c[(c[(so(b)|0)+16>>2]|0)+248>>2]|0));e=d;b=c[e+4>>2]|0;d=a;c[d>>2]=c[e>>2];c[d+4>>2]=b;return}function ej(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;i=l;l=l+16|0;h=i;b=Wf(b)|0;g=LA(d)|0;if((g|0)!=(d|0))dh(g,d);j=c[d+16>>2]|0;c[j+236>>2]=f;g=c[(c[g+16>>2]|0)+232>>2]|0;c[j+232>>2]=g;c[(c[(c[(c[b+16>>2]|0)+196>>2]|0)+(g<<6)+4>>2]|0)+(f<<2)>>2]=d;c[h>>2]=c[e>>2];c[h+4>>2]=c[e+4>>2];dj(a,d,h);l=i;return}function fj(a){a=a|0;var d=0.0,e=0.0,f=0,g=0,i=0,j=0.0,k=0,l=0,m=0,n=0.0;m=c[(c[(Wf(a)|0)+16>>2]|0)+196>>2]|0;if((Wf(a)|0)==(a|0))j=8.0;else j=+(EA(a,c[42189]|0,8,0)|0);l=a+16|0;g=c[l>>2]|0;f=0;k=1;e=+h[g+120>>3];d=+h[g+128>>3];while(1){if((k|0)>(c[g+180>>2]|0))break;i=c[(c[g+184>>2]|0)+(k<<2)>>2]|0;f=fj(i)|0|f;i=c[i+16>>2]|0;g=c[l>>2]|0;if((b[i+238>>1]|0)==(b[g+238>>1]|0)){n=+h[i+120>>3]+j;e=e>n?e:n}if((b[i+236>>1]|0)==(b[g+236>>1]|0)){n=+h[i+128>>3]+j;d=d>n?d:n}k=k+1|0}if((Wf(a)|0)!=(a|0)?(c[(c[l>>2]|0)+12>>2]|0)!=0:0)if(!(c[(c[(to(a)|0)+16>>2]|0)+116>>2]&1)){k=c[l>>2]|0;f=1;e=+h[k+56>>3]+e;d=+h[k+88>>3]+d}else f=1;k=c[l>>2]|0;h[k+120>>3]=e;h[k+128>>3]=d;if((Wf(a)|0)!=(a|0)){l=c[l>>2]|0;a=m+(b[l+236>>1]<<6)+24|0;n=+h[a>>3];h[a>>3]=n>d?n:d;m=m+(b[l+238>>1]<<6)+16|0;n=+h[m>>3];h[m>>3]=n>e?n:e}return f|0}function gj(a,d){a=a|0;d=d|0;var e=0,f=0.0,g=0.0,i=0,j=0,k=0.0,l=0,m=0,n=0,o=0,p=0.0,q=0.0;o=c[(c[(Wf(a)|0)+16>>2]|0)+196>>2]|0;if((Wf(a)|0)==(a|0))e=0;else e=EA(a,c[42189]|0,8,0)|0;l=a+16|0;i=c[l>>2]|0;m=e+d|0;k=+(e|0);j=1;f=+h[i+128>>3];g=+h[i+120>>3];e=i;while(1){if((j|0)>(c[e+180>>2]|0))break;i=c[(c[e+184>>2]|0)+(j<<2)>>2]|0;gj(i,m);i=c[i+16>>2]|0;e=c[l>>2]|0;if((b[i+238>>1]|0)==(b[e+238>>1]|0)){q=+h[i+120>>3]+k;g=g>q?g:q}if((b[i+236>>1]|0)==(b[e+236>>1]|0)){q=+h[i+128>>3]+k;f=f>q?f:q}j=j+1|0}h[e+120>>3]=g;h[e+128>>3]=f;if(((Wf(a)|0)!=(a|0)?(n=c[l>>2]|0,c[n+12>>2]|0):0)?(p=-g-f+ +h[n+48+((+h[n+104>>3]>+h[n+72>>3]?3:1)<<4)+8>>3]-+h[(c[(c[c[o+(b[n+236>>1]<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]+ +h[(c[(c[c[o+(b[n+238>>1]<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3],p>0.0):0)hj(a,~~p,d);if((Wf(a)|0)!=(a|0)){n=c[l>>2]|0;m=o+(b[n+236>>1]<<6)+24|0;q=+h[m>>3];p=+h[n+128>>3];h[m>>3]=q>p?q:p;o=o+(b[n+238>>1]<<6)+16|0;p=+h[o>>3];q=+h[n+120>>3];h[o>>3]=p>q?p:q}return}function hj(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0.0,i=0.0,j=0.0,k=0,l=0,m=0,n=0.0,o=0.0,p=0,q=0,r=0;k=c[(Wf(a)|0)+16>>2]|0;q=c[k+196>>2]|0;p=c[a+16>>2]|0;a=b[p+238>>1]|0;f=b[p+236>>1]|0;l=(d+1|0)/2|0;m=p+120|0;n=+h[m>>3];o=+(l|0);i=+(e|0);e=~~(o+i+n-+h[q+(a<<6)+16>>3]);if((e|0)>0){g=+(e|0);while(1){if((a|0)<(f|0))break;if((c[q+(a<<6)>>2]|0)>0){r=(c[(c[c[q+(a<<6)+4>>2]>>2]|0)+16>>2]|0)+24|0;h[r>>3]=+h[r>>3]+g}a=a+-1|0}j=+h[p+128>>3];a=e;g=j+ +(d-l|0)}else{j=+h[p+128>>3];a=d-l|0;g=j}a=~~(+(a|0)+i+g-+h[q+(f<<6)+24>>3]);a:do if((a|0)>0){e=b[k+236>>1]|0;g=+(a|0);while(1){a=f+-1|0;if((f|0)<=(e|0))break a;if((c[q+(a<<6)>>2]|0)<=0){f=a;continue}f=(c[(c[c[q+(a<<6)+4>>2]>>2]|0)+16>>2]|0)+24|0;h[f>>3]=+h[f>>3]+g;f=a}}while(0);h[p+128>>3]=j+ +(d-l|0);h[m>>3]=n+o;return}function ij(b,d){b=b|0;d=d|0;var e=0,f=0;e=c[b+16>>2]|0;f=a[e+84>>0]|0;b=c[d+16>>2]|0;do if(f<<24>>24==(a[b+84>>0]|0)){if(+h[e+56>>3]==+h[b+56>>3]){if(!(f<<24>>24==0?1:+h[e+64>>3]==+h[b+64>>3])){b=0;break}}else if(f<<24>>24){b=0;break}if(+h[e+16>>3]==+h[b+16>>3]?+h[e+24>>3]==+h[b+24>>3]:0){b=1;break}b=(a[e+44>>0]|0)==0&1}else b=0;while(0);return b|0}function jj(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=a+16|0;d=c[i>>2]|0;b[d+236>>1]=32767;b[d+238>>1]=-1;d=0;h=eo(a)|0;while(1){e=c[i>>2]|0;if(!h)break;f=e+238|0;g=c[(c[h+16>>2]|0)+232>>2]|0;if((g|0)>(b[f>>1]|0))b[f>>1]=g;e=e+236|0;if((g|0)<(b[e>>1]|0))b[e>>1]=g;if(!d)d=h;else d=(g|0)<(c[(c[d+16>>2]|0)+232>>2]|0)?h:d;h=fo(a,h)|0}c[e+264>>2]=d;return}function kj(a){a=a|0;var b=0,d=0,e=0,f=0,g=0.0;b=Jm(a,79821)|0;if(!b)b=2147483647;else{g=+tM(b);b=~~(g*+(nn(a)|0))}e=a+16|0;d=0;while(1){f=c[e>>2]|0;if((d|0)>=(c[f+220>>2]|0))break;c[f+192>>2]=c[(c[f+216>>2]|0)+(d<<2)>>2];hx(a,(c[f+180>>2]|0)==0&1,b)|0;d=d+1|0}return}function lj(a,d){a=a|0;d=d|0;var e=0,f=0,g=0;f=l;l=l+16|0;e=f;if(!(Jm(a,79830)|0))nj(a,d);else{g=(c[a+16>>2]|0)+136|0;b[g>>1]=b[g>>1]|16;mj(a,d)}if(0){g=c[13918]|0;a=c[a+16>>2]|0;d=b[a+236>>1]|0;c[e>>2]=b[a+238>>1];c[e+4>>2]=d;AL(g,79838,e)|0}l=f;return}function mj(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0.0;i=l;l=l+16|0;h=i;c[41933]=0;a[h>>0]=a[17644]|0;a[h+1>>0]=a[17645]|0;a[h+2>>0]=a[17646]|0;a[h+3>>0]=a[17647]|0;h=hn(80048,h,0)|0;Oo(h,80077,280,1)|0;Ao(h,17332,17272);oj(b);e=Jm(b,79821)|0;if(!e)f=2147483647;else{j=+tM(e);f=~~(j*+(nn(b)|0))}Ej(b,0);Fj(b,h);Gj(b,h);Hj(b,h,0,0);Ij(h);g=Jj(h)|0;Kj(h);if(d|0){yk(h);mk(h)}e=Jm(b,87620)|0;if(!e)e=-1;else e=sM(e)|0;Aw(h,1,f,e)|0;Lj(b,h,g);mn(h)|0;l=i;return}function nj(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;g=l;l=l+32|0;f=g+16|0;e=g+8|0;d=g;oj(a);do if(!b){pj(a,a);Bk(a);qj(d,a);h=d;d=c[h+4>>2]|0;b=e;c[b>>2]=c[h>>2];c[b+4>>2]=d;ul(a,0);b=0}else{yk(a);mk(a);pj(a,a);Bk(a);qj(d,a);i=d;d=c[i+4>>2]|0;h=e;c[h>>2]=c[i>>2];c[h+4>>2]=d;ul(a,0);h=c[a+16>>2]|0;if((c[h+220>>2]|0)<=1?(c[h+180>>2]|0)<=0:0)break;c[b+32>>2]=1;b=0}while(0);jk(a);c[f>>2]=c[e>>2];c[f+4>>2]=c[e+4>>2];if(rj(a,f)|0)ul(a,0);if(!b)kj(a);else nk(a,b);sj(a,b);tj(a);l=g;return}function oj(d){d=d|0;var f=0,g=0,h=0;if(a[(c[(c[d+60>>2]|0)+16>>2]|0)+113>>0]&1){g=eo(d)|0;while(1){if(!g)break;f=Qm(d,g)|0;while(1){if(!f)break;h=(c[f+16>>2]|0)+170|0;b[h>>1]=(e[h>>1]|0)<<1;f=Sm(d,f)|0}g=fo(d,g)|0}h=(c[d+16>>2]|0)+252|0;c[h>>2]=((c[h>>2]|0)+1|0)/2|0}return}function pj(a,b){a=a|0;b=b|0;var d=0;b=Kp(b)|0;while(1){if(!b)break;d=Bj(b)|0;do if(d)if((d|0)==7&(c[42180]|0)==100){xj(a,b);break}else{Cj(a,b,d);break}else pj(a,b);while(0);b=Lp(b)|0}return}function qj(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;i=d+16|0;e=c[i>>2]|0;d=c[e+228>>2]|0;e=c[e+224>>2]|0;f=(e|0)==0;if(!d)if(f){j=0;k=0}else g=4;else if(f)g=5;else g=4;if((g|0)==4){d=LA(e)|0;e=c[i>>2]|0;c[e+224>>2]=d;d=c[e+228>>2]|0;if(!d){h=0;d=e;g=12}else g=5}do if((g|0)==5){d=LA(d)|0;e=c[i>>2]|0;c[e+228>>2]=d;if(d){e=d+16|0;d=c[e>>2]|0;f=(a[d+159>>0]|0)==5&1;while(1){d=c[c[d+180>>2]>>2]|0;if(!d){g=11;break}h=c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0;if((h|0)!=(LA(h)|0)){g=9;break}ik(d);d=c[e>>2]|0}if((g|0)==9)ma(79941,79881,346,79973);else if((g|0)==11){h=f;d=c[i>>2]|0;g=12;break}}else{h=0;d=e;g=12}}while(0);a:do if((g|0)==12){d=c[d+224>>2]|0;if(!d){j=0;k=h}else{e=d+16|0;d=c[e>>2]|0;f=(a[d+159>>0]|0)==3&1;while(1){d=c[c[d+172>>2]>>2]|0;if(!d){j=f;k=h;break a}i=c[((c[d>>2]&3|0)==3?d:d+48|0)+40>>2]|0;if((i|0)!=(LA(i)|0))break;ik(d);d=c[e>>2]|0}ma(79986,79881,353,79973)}}while(0);c[b>>2]=j;c[b+4>>2]=k;return}function rj(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;j=a+16|0;i=c[j>>2]|0;if((c[i+228>>2]|0)==0?(c[i+224>>2]|0)==0:0)d=0;else e=3;a:do if((e|0)==3){g=eo(a)|0;i=d+4|0;h=c[d>>2]&65535;d=0;while(1){if(!g)break a;if((g|0)==(LA(g)|0)){f=g+16|0;e=c[f>>2]|0;if((c[e+184>>2]|0)==0?(k=c[(c[j>>2]|0)+228>>2]|0,!((k|0)==0|(g|0)==(k|0))):0){d=bh(g,k,0)|0;e=c[d+16>>2]|0;b[e+170>>1]=c[i>>2];c[e+156>>2]=0;e=c[f>>2]|0}if((c[e+176>>2]|0)==0?(l=c[(c[j>>2]|0)+224>>2]|0,!((l|0)==0|(g|0)==(l|0))):0){d=bh(l,g,0)|0;f=c[d+16>>2]|0;b[f+170>>1]=h;c[f+156>>2]=0}}g=fo(a,g)|0}}while(0);return (d|0)!=0|0}function sj(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;g=eo(d)|0;k=d+16|0;f=c[k>>2]|0;a:do if(g){b[f+236>>1]=32767;b[f+238>>1]=-1;j=(e|0)==0;while(1){if(!g)break;f=LA(g)|0;i=c[g+16>>2]|0;e=c[i+232>>2]|0;do if((f|0)!=(g|0)){if(!j)if(!e)e=0;else break;e=e+(c[(c[f+16>>2]|0)+232>>2]|0)|0;c[i+232>>2]=e}while(0);f=c[k>>2]|0;h=f+238|0;if((e|0)>(b[h>>1]|0))b[h>>1]=e;f=f+236|0;if((e|0)<(b[f>>1]|0))b[f>>1]=e;switch(a[i+159>>0]|0){case 6:case 0:break;default:NA(g)}g=fo(d,g)|0}if((Wf(d)|0)==(d|0)){if((c[42180]|0)==100)e=1;else{wj(d);break}while(1){f=c[k>>2]|0;if((e|0)>(c[f+180>>2]|0))break a;vj(c[(c[f+184>>2]|0)+(e<<2)>>2]|0);e=e+1|0}}}else{b[f+238>>1]=0;b[f+236>>1]=0}while(0);return}function tj(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;j=b+16|0;e=0;while(1){d=c[j>>2]|0;if((e|0)>=(c[d+220>>2]|0))break;i=c[(c[d+216>>2]|0)+(e<<2)>>2]|0;c[d+192>>2]=i;d=i;while(1){if(!d)break;i=d+16|0;uj((c[i>>2]|0)+172|0);uj((c[i>>2]|0)+180|0);i=c[i>>2]|0;a[i+157>>0]=0;d=c[i+164>>2]|0}e=e+1|0}i=eo(b)|0;while(1){if(!i)break;h=Qm(b,i)|0;while(1){if(!h)break;f=h+16|0;d=c[f>>2]|0;g=c[d+172>>2]|0;if((g|0)!=0?(k=g+16|0,(h|0)==(c[(c[k>>2]|0)+116>>2]|0)):0){d=eo(b)|0;while(1){if(!d)break;e=Qm(b,d)|0;while(1){if(!e)break;if((h|0)!=(e|0)?(l=(c[e+16>>2]|0)+172|0,m=c[l>>2]|0,(m|0)!=0&(g|0)==(m|0)):0)c[l>>2]=0;e=Sm(b,e)|0}d=fo(b,d)|0}$I(c[k>>2]|0);$I(g);d=c[f>>2]|0}c[d+172>>2]=0;h=Sm(b,h)|0}i=fo(b,i)|0}$I(c[(c[j>>2]|0)+216>>2]|0);m=c[j>>2]|0;c[m+216>>2]=0;c[m+220>>2]=0;return}function uj(a){a=a|0;var b=0,d=0;d=a+4|0;b=c[d>>2]|0;while(1){if((b|0)<=-1)break;c[(c[a>>2]|0)+(b<<2)>>2]=0;b=b+-1|0}c[d>>2]=0;return}function vj(a){a=a|0;var d=0,f=0,g=0;d=a+16|0;f=c[d>>2]|0;g=c[(c[(c[f+264>>2]|0)+16>>2]|0)+232>>2]|0;a=f+236|0;b[a>>1]=g+(e[a>>1]|0);a=f+238|0;b[a>>1]=g+(e[a>>1]|0);a=1;while(1){if((a|0)>(c[f+180>>2]|0))break;vj(c[(c[f+184>>2]|0)+(a<<2)>>2]|0);a=a+1|0;f=c[d>>2]|0}return}function wj(b){b=b|0;var d=0;d=Kp(Wf(b)|0)|0;while(1){if(!d)break;if((a[(c[d+16>>2]|0)+274>>0]|0)==7)xj(b,d);d=Lp(d)|0}return}function xj(a,b){a=a|0;b=b|0;var d=0;d=(c[b+16>>2]|0)+200|0;do if((c[d>>2]|0)==0?(c[d>>2]=a,yj(a,b),eo(b)|0):0){zj(a,b);if((c[42180]|0)==100){nj(b,0);Aj(b);break}else{jj(b);break}}while(0);return}function yj(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;h=b+16|0;g=eo(d)|0;while(1){if(!g)break;i=fo(d,g)|0;j=g+16|0;if(!(a[(c[j>>2]|0)+159>>0]|0))f=1;else{ro(d,g)|0;g=i;continue}while(1){e=c[h>>2]|0;b=c[e+180>>2]|0;if((f|0)>=(b|0))break;if(Co(c[(c[e+184>>2]|0)+(f<<2)>>2]|0,g)|0){k=7;break}f=f+1|0}if((k|0)==7){k=0;b=c[(c[h>>2]|0)+180>>2]|0}if((f|0)<(b|0))ro(d,g)|0;c[(c[j>>2]|0)+212>>2]=0;g=i}e=eo(d)|0;while(1){if(!e)break;b=Qm(Wf(d)|0,e)|0;while(1){if(!b)break;if(Co(d,c[((c[b>>2]&3|0)==2?b:b+-48|0)+40>>2]|0)|0)fn(d,b,1)|0;b=Sm(Wf(d)|0,b)|0}e=fo(d,e)|0}return}function zj(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;e=a+16|0;d=c[e>>2]|0;g=d+180|0;a=c[g>>2]|0;f=a+1|0;c[g>>2]=f;d=c[d+184>>2]|0;if(!d)a=ww((a<<2)+8|0)|0;else a=yw(d,a+2|0,4,f)|0;c[(c[e>>2]|0)+184>>2]=a;c[a+(f<<2)>>2]=b;iw(b);return}function Aj(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;g=c[b+16>>2]|0;d=g+192|0;h=0;while(1){d=c[d>>2]|0;if(!d)break;f=c[d+16>>2]|0;if(!(c[f+232>>2]|0))e=(a[f+156>>0]|0)==0?d:h;else e=h;d=f+164|0;h=e}if(!h)ma(79866,79881,238,79888);c[g+264>>2]=h;d=eo(b)|0;while(1){if(!d){d=13;break}e=d+16|0;if(!((d|0)==(h|0)?1:(c[(c[e>>2]|0)+216>>2]|0)<2)){d=11;break}MA(d,h)|0;a[(c[e>>2]|0)+159>>0]=7;d=fo(b,d)|0}if((d|0)==11)ma(79903,79881,242,79888);else if((d|0)==13)return}function Bj(b){b=b|0;var d=0;if(!(Dj(b)|0)){d=VA(Jm(b,80018)|0,17284,17308)|0;a[(c[b+16>>2]|0)+274>>0]=d;b=d}else b=7;return b|0}function Cj(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;g=eo(d)|0;a:do if(g|0){j=e&255;i=g+16|0;f=g;h=j;while(1){a[(c[f+16>>2]|0)+159>>0]=h;f=fo(d,f)|0;if(!f)break;MA(g,f)|0;h=a[(c[i>>2]|0)+159>>0]|0}switch(e|0){case 3:case 2:{b=b+16|0;f=c[b>>2]|0;h=c[f+224>>2]|0;if(h){g=MA(h,g)|0;f=c[b>>2]|0}c[f+224>>2]=g;break}case 5:case 4:{b=b+16|0;f=c[b>>2]|0;h=c[f+228>>2]|0;if(h){g=MA(h,g)|0;f=c[b>>2]|0}c[f+228>>2]=g;break}default:break a}switch(e|0){case 3:{f=f+224|0;break}case 5:{f=f+228|0;break}default:break a}a[(c[(c[f>>2]|0)+16>>2]|0)+159>>0]=j}while(0);return}function Dj(a){a=a|0;return (WJ(En(a)|0,93039,7)|0)==0|0}function Ej(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+16|0;g=m;if(!(Zj(b)|0)){do if(iB(b)|0)if(!d){c[(c[b+16>>2]|0)+204>>2]=0;d=b;break}else{c[(c[b+16>>2]|0)+204>>2]=(c[(c[d+16>>2]|0)+204>>2]|0)+1;_j(b,d);d=b;break}while(0);e=Kp(b)|0;while(1){if(!e)break;Ej(e,d);e=Lp(e)|0}a:do if(iB(b)|0){e=eo(b)|0;while(1){if(!e)break a;f=(c[e+16>>2]|0)+212|0;if(!(c[f>>2]|0))c[f>>2]=b;e=fo(b,e)|0}}while(0);switch($j(b)|0){case 3:{d=d+16|0;a[(c[d>>2]|0)+241>>0]=1;k=19;break}case 2:{d=d+16|0;k=19;break}case 5:{d=d+16|0;a[(c[d>>2]|0)+242>>0]=1;k=21;break}case 4:{d=d+16|0;k=21;break}case 1:{ak(b)|0;break}case 6:break;default:{e=En(b)|0;f=Jm(b,80018)|0;c[g>>2]=e;c[g+4>>2]=f;$l(0,80201,g)|0}}if((k|0)==19){k=ak(b)|0;k=bk(k,c[(c[d>>2]|0)+208>>2]|0)|0;c[(c[d>>2]|0)+208>>2]=k}else if((k|0)==21){k=ak(b)|0;k=bk(k,c[(c[d>>2]|0)+212>>2]|0)|0;c[(c[d>>2]|0)+212>>2]=k}if((iB(b)|0?(h=b+16|0,i=c[h>>2]|0,j=c[i+208>>2]|0,j|0):0)?(j|0)==(c[i+212>>2]|0):0){j=ak(b)|0;k=c[h>>2]|0;c[k+208>>2]=j;c[k+212>>2]=j}}l=m;return}function Fj(a,b){a=a|0;b=b|0;var d=0,e=0;c[41933]=0;d=eo(a)|0;while(1){if(!d)break;if((Mj(d)|0)==(d|0)){e=Pj(b,En(d)|0)|0;c[(c[d+16>>2]|0)+148>>2]=e}d=fo(a,d)|0}d=eo(a)|0;while(1){if(!d)break;b=d+16|0;if(!(c[(c[b>>2]|0)+148>>2]|0)){e=c[(c[(Mj(d)|0)+16>>2]|0)+148>>2]|0;c[(c[b>>2]|0)+148>>2]=e}d=fo(a,d)|0}return}function Gj(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;h=eo(a)|0;while(1){if(!h)break;d=c[(c[h+16>>2]|0)+148>>2]|0;i=Qm(a,h)|0;while(1){if(!i)break;do if((Uj(i)|0)==0?(j=i+-48|0,k=c[(c[(Mj(c[((c[i>>2]&3|0)==2?i:j)+40>>2]|0)|0)+16>>2]|0)+148>>2]|0,(d|0)!=(k|0)):0){f=c[i>>2]&3;g=i+48|0;e=((f|0)==3?i:g)+40|0;f=c[(c[(c[((f|0)==2?i:j)+40>>2]|0)+16>>2]|0)+212>>2]|0;if(!(Vj(i)|0)){if((Tj(c[(c[(c[e>>2]|0)+16>>2]|0)+212>>2]|0)|0)==0?(Tj(f)|0)==0:0){Wj(b,d,k,i);break}Xj(b,d,k,i);break}else{f=Mj(c[e>>2]|0)|0;e=c[i>>2]&3;if((f|0)!=(c[(c[(c[(c[(c[((e|0)==3?i:g)+40>>2]|0)+16>>2]|0)+212>>2]|0)+16>>2]|0)+212>>2]|0)?(g=Mj(c[((e|0)==2?i:j)+40>>2]|0)|0,(g|0)!=(c[(c[(c[(c[(c[((c[i>>2]&3|0)==2?i:j)+40>>2]|0)+16>>2]|0)+212>>2]|0)+16>>2]|0)+208>>2]|0)):0)e=k;else{e=d;d=k}Wj(b,d,e,i);break}}while(0);i=Sm(a,i)|0}h=fo(a,h)|0}return}function Hj(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;if((iB(a)|0)!=0?(Tj(a)|0)!=0:0){g=eo(a)|0;while(1){if(!g)break;if(!(Tm(a,g)|0)){f=c[(c[(Mj(g)|0)+16>>2]|0)+148>>2]|0;if(!d)d=Pj(b,80099)|0;bn(b,d,f,0,1)|0}if(!(Qm(a,g)|0)){f=c[(c[(Mj(g)|0)+16>>2]|0)+148>>2]|0;if(!e)e=Pj(b,80104)|0;bn(b,f,e,0,1)|0}g=fo(a,g)|0}if((e|0)!=0&(d|0)!=0){Sj(bn(b,d,e,0,1)|0,0,1e3);f=d}else f=d}else f=d;d=Kp(a)|0;while(1){if(!d)break;Hj(d,b,f,e);d=Lp(d)|0}return}function Ij(b){b=b|0;var d=0,e=0;d=eo(b)|0;while(1){if(!d)break;e=c[d+16>>2]|0;a[e+158>>0]=0;a[e+157>>0]=0;d=fo(b,d)|0}d=eo(b)|0;while(1){if(!d)break;Qj(b,d);d=fo(b,d)|0}return}function Jj(a){a=a|0;var b=0,d=0,e=0,f=0;b=eo(a)|0;while(1){if(!b)break;c[(c[b+16>>2]|0)+128>>2]=0;b=fo(a,b)|0}b=0;e=eo(a)|0;while(1){if(!e)break;d=b+1|0;if(!(c[(c[e+16>>2]|0)+128>>2]|0)){Oj(a,e,d);b=d}e=fo(a,e)|0}a:do if((b|0)>1){f=Pj(a,80093)|0;d=1;e=eo(a)|0;while(1){if(!e)break a;if((c[(c[e+16>>2]|0)+128>>2]|0)==(d|0)){bn(a,f,e,0,1)|0;d=d+1|0}e=fo(a,e)|0}}while(0);return b|0}function Kj(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;g=eo(a)|0;while(1){if(!g)break;h=g+16|0;f=Qm(a,g)|0;while(1){if(!f)break;b=c[h>>2]|0;d=c[b+180>>2]|0;if(!d)b=xw((c[b+184>>2]<<2)+8|0)|0;else b=zw(d,(c[b+184>>2]<<2)+8|0)|0;d=c[h>>2]|0;c[d+180>>2]=b;d=d+184|0;e=c[d>>2]|0;c[d>>2]=e+1;c[b+(e<<2)>>2]=f;e=c[h>>2]|0;c[(c[e+180>>2]|0)+(c[e+184>>2]<<2)>>2]=0;e=f+-48|0;b=c[(c[((c[f>>2]&3|0)==2?f:e)+40>>2]|0)+16>>2]|0;d=c[b+172>>2]|0;if(!d)b=xw((c[b+176>>2]<<2)+8|0)|0;else b=zw(d,(c[b+176>>2]<<2)+8|0)|0;c[(c[(c[((c[f>>2]&3|0)==2?f:e)+40>>2]|0)+16>>2]|0)+172>>2]=b;i=c[(c[((c[f>>2]&3|0)==2?f:e)+40>>2]|0)+16>>2]|0;b=c[i+172>>2]|0;i=i+176|0;d=c[i>>2]|0;c[i>>2]=d+1;c[b+(d<<2)>>2]=f;e=c[(c[((c[f>>2]&3|0)==2?f:e)+40>>2]|0)+16>>2]|0;c[(c[e+172>>2]|0)+(c[e+176>>2]<<2)>>2]=0;f=Sm(a,f)|0}g=fo(a,g)|0}return}function Lj(a,d,f){a=a|0;d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;n=a+16|0;o=c[n>>2]|0;b[o+236>>1]=32767;b[o+238>>1]=-1;a:do if((f|0)>1){h=ww((f<<2)+4|0)|0;g=f+1|0;f=1;while(1){if((f|0)==(g|0)){m=h;o=h;break a}c[h+(f<<2)>>2]=32767;f=f+1|0}}else{m=0;o=0}while(0);i=(m|0)==0;h=eo(a)|0;while(1){if(!h)break;j=c[(c[(c[(Mj(h)|0)+16>>2]|0)+148>>2]|0)+16>>2]|0;k=c[j+232>>2]|0;l=c[h+16>>2]|0;c[l+232>>2]=k;f=c[n>>2]|0;g=f+238|0;if((k|0)>(b[g>>1]|0))b[g>>1]=k;f=f+236|0;if((k|0)<(b[f>>1]|0))b[f>>1]=k;if(!i){j=c[j+128>>2]|0;c[l+128>>2]=j;l=m+(j<<2)|0;j=c[l>>2]|0;c[l>>2]=(j|0)<(k|0)?j:k}h=fo(a,h)|0}j=(m|0)!=0;b:do if(!j){m=b[(c[n>>2]|0)+236>>1]|0;g=m<<16>>16;if(m<<16>>16>0){f=eo(a)|0;while(1){if(!f)break;m=(c[f+16>>2]|0)+232|0;c[m>>2]=(c[m>>2]|0)-g;f=fo(a,f)|0}f=c[n>>2]|0;n=f+236|0;b[n>>1]=(e[n>>1]|0)-g;f=f+238|0;b[f>>1]=(e[f>>1]|0)-g;f=0}else f=0}else{f=eo(a)|0;while(1){if(!f){f=1;break b}l=c[f+16>>2]|0;n=l+232|0;c[n>>2]=(c[n>>2]|0)-(c[m+(c[l+128>>2]<<2)>>2]|0);f=fo(a,f)|0}}while(0);Nj(a,f);i=eo(d)|0;while(1){if(!i)break;g=i+16|0;f=c[g>>2]|0;h=c[f+172>>2]|0;if(h){$I(h);f=c[g>>2]|0}f=c[f+180>>2]|0;if(f|0)$I(f);i=fo(d,i)|0}$I(c[(c[(eo(a)|0)+16>>2]|0)+112>>2]|0);f=eo(a)|0;while(1){if(!f)break;c[(c[f+16>>2]|0)+112>>2]=0;f=fo(a,f)|0}if(j)$I(o);return}function Mj(a){a=a|0;var b=0,d=0,e=0;b=a+16|0;d=(c[b>>2]|0)+152|0;e=c[d>>2]|0;if(e){if((e|0)!=(a|0)){e=Mj(e)|0;c[(c[b>>2]|0)+152>>2]=e;return e|0}}else c[d>>2]=a;return a|0}function Nj(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=a+16|0;e=1;while(1){f=c[i>>2]|0;if((e|0)>(c[f+180>>2]|0))break;Nj(c[(c[f+184>>2]|0)+(e<<2)>>2]|0,0);e=e+1|0}if((d|0)!=0|(c[f+200>>2]|0)!=0){b[f+236>>1]=32767;b[f+238>>1]=-1;e=0;h=eo(a)|0;while(1){if(!h)break;g=c[(c[h+16>>2]|0)+232>>2]|0;d=c[i>>2]|0;f=d+238|0;if((g|0)>(b[f>>1]|0))b[f>>1]=g;d=d+236|0;if((g|0)<(b[d>>1]|0)){b[d>>1]=g;e=h}h=fo(a,h)|0}c[(c[i>>2]|0)+264>>2]=e}return}function Oj(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=(c[b+16>>2]|0)+128|0;a:do if(!(c[e>>2]|0)){c[e>>2]=d;e=Qm(a,b)|0;while(1){if(!e)break;Oj(a,c[((c[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0,d);e=Sm(a,e)|0}e=Tm(a,b)|0;while(1){if(!e)break a;Oj(a,c[((c[e>>2]&3|0)==3?e:e+48|0)+40>>2]|0,d);e=Um(a,e)|0}}while(0);return}function Pj(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=oo(a,b,1)|0;b=f+16|0;c[(c[b>>2]|0)+176>>2]=0;e=ww(20)|0;d=c[b>>2]|0;c[d+172>>2]=e;c[d+184>>2]=0;d=ww(20)|0;b=c[b>>2]|0;c[b+180>>2]=d;d=c[41933]|0;e=b+168|0;if(!d){c[e>>2]=0;c[(c[a+16>>2]|0)+192>>2]=f}else{c[e>>2]=d;c[(c[d+16>>2]|0)+164>>2]=f}c[41933]=f;c[b+164>>2]=0;return f|0}function Qj(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=d+16|0;e=c[h>>2]|0;f=e+157|0;if(!(a[f>>0]|0)){a[f>>0]=1;a[e+158>>0]=1;d=Qm(b,d)|0;while(1){if(!d)break;e=Sm(b,d)|0;f=c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0;g=c[f+16>>2]|0;if(a[g+158>>0]|0){Rj(b,d);d=e;continue}if(a[g+157>>0]|0){d=e;continue}Qj(b,f);d=e}a[(c[h>>2]|0)+158>>0]=0}return}function Rj(a,b){a=a|0;b=b|0;var d=0,f=0,g=0;d=c[b>>2]&3;g=b+-48|0;f=b+48|0;d=bn(a,c[((d|0)==2?b:g)+40>>2]|0,c[((d|0)==3?b:f)+40>>2]|0,0,0)|0;if(!d){d=c[b>>2]&3;d=bn(a,c[((d|0)==2?b:g)+40>>2]|0,c[((d|0)==3?b:f)+40>>2]|0,0,1)|0}g=c[b+16>>2]|0;Sj(d,e[g+170>>1]|0,c[g+156>>2]|0);ro(a,b)|0;return}function Sj(a,d,f){a=a|0;d=d|0;f=f|0;var g=0,h=0;a=c[a+16>>2]|0;g=a+170|0;h=e[g>>1]|0;b[g>>1]=(h|0)>(d|0)?h:d;d=a+156|0;c[d>>2]=(c[d>>2]|0)+f;return}function Tj(a){a=a|0;return (KA(Jm(a,80109)|0,0)|0)&255|0}function Uj(b){b=b|0;var d=0,e=0;d=c[42234]|0;if((((d|0)!=0?(e=Km(b,d)|0,(e|0)!=0):0)?(a[e>>0]|0)!=0:0)?(JA(e)|0)<<24>>24==0:0)b=1;else b=0;return b|0}function Vj(a){a=a|0;var b=0,d=0;d=c[a>>2]&3;b=c[(c[(c[((d|0)==3?a:a+48|0)+40>>2]|0)+16>>2]|0)+212>>2]|0;a=c[(c[(c[((d|0)==2?a:a+-48|0)+40>>2]|0)+16>>2]|0)+212>>2]|0;if((b|0)==(a|0))return 1;else{d=Yj(b,a)|0;return ((d|0)==(b|0)|(d|0)==(a|0))&1|0}return 0}function Wj(a,b,d,f){a=a|0;b=b|0;d=d|0;f=f|0;var g=0,h=0,i=0,j=0;j=l;l=l+16|0;h=j;g=bn(a,b,d,0,0)|0;if(!g){g=bn(a,d,b,0,0)|0;if(!g){g=bn(a,b,d,0,1)|0;if(!g){b=En(b)|0;f=En(d)|0;c[h>>2]=b;c[h+4>>2]=f;$l(1,80126,h)|0}else i=4}else i=4}else i=4;if((i|0)==4){i=c[f+16>>2]|0;Sj(g,e[i+170>>1]|0,c[i+156>>2]|0)}l=j;return}function Xj(a,d,f,g){a=a|0;d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0;m=l;l=l+112|0;j=m;i=m+4|0;h=Tm(a,d)|0;while(1){if(!h){k=6;break}n=Qm(a,c[((c[h>>2]&3|0)==3?h:h+48|0)+40>>2]|0)|0;if(n|0?(c[((c[n>>2]&3|0)==2?n:n+-48|0)+40>>2]|0)==(f|0):0)break;h=Um(a,h)|0}if((k|0)==6){n=c[41934]|0;c[41934]=n+1;c[j>>2]=n;qL(i,80117,j)|0;i=Pj(a,i)|0;n=bn(a,i,d,0,1)|0;i=bn(a,i,f,0,1)|0;f=c[g+16>>2]|0;k=f+156|0;n=(c[n+16>>2]|0)+156|0;c[n>>2]=(c[n>>2]|0)+((c[k>>2]|0)*1e3|0);n=c[i+16>>2]|0;j=n+170|0;b[j>>1]=b[(c[((e[j>>1]|0)>(e[f+170>>1]|0)?i:g)+16>>2]|0)+170>>1]|0;n=n+156|0;c[n>>2]=(c[n>>2]|0)+(c[k>>2]|0)}l=m;return}function Yj(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;a:while(1){e=a+16|0;while(1){if((a|0)==(b|0))break a;f=c[e>>2]|0;d=c[b+16>>2]|0;if((c[f+204>>2]|0)>=(c[d+204>>2]|0))break;b=c[d+200>>2]|0}a=c[f+200>>2]|0}return a|0}function Zj(a){a=a|0;return (eo(a)|0)==0|0}function _j(a,b){a=a|0;b=b|0;c[(c[a+16>>2]|0)+200>>2]=b;zj(b,a);yj(b,a);return}function $j(b){b=b|0;var c=0;b=Jm(b,80018)|0;if((b|0)!=0?(a[b>>0]|0)!=0:0)if(yJ(b,80028)|0)if(yJ(b,80032)|0)if(yJ(b,80039)|0)if(yJ(b,80043)|0)if(!(yJ(b,80023)|0))b=1;else c=8;else b=5;else b=4;else b=3;else b=2;else c=8;if((c|0)==8)b=6;return b|0}function ak(a){a=a|0;var b=0,c=0;c=eo(a)|0;a:do if(!c)b=0;else{b=Mj(c)|0;while(1){c=fo(a,c)|0;if(!c)break a;bk(b,c)|0}}while(0);return b|0}function bk(a,b){a=a|0;b=b|0;if(b){a=Mj(a)|0;c[(c[(Mj(b)|0)+16>>2]|0)+152>>2]=a}return a|0}function ck(a,b,d){a=a|0;b=b|0;d=d|0;Oo(b,80077,c[d>>2]|0,1)|0;return}function dk(a,b,d){a=a|0;b=b|0;d=d|0;Oo(b,80244,c[d+4>>2]|0,1)|0;return}function ek(a,b,d){a=a|0;b=b|0;d=d|0;Oo(b,80229,c[d+8>>2]|0,1)|0;return}function fk(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+240|0;m=p+120|0;n=p;c[42238]=zm(b,2,80259,0)|0;k=zm(b,2,80268,0)|0;c[42239]=k;a:do if((k|0)!=0|(c[42238]|0)!=0){k=eo(b)|0;while(1){if(!k)break a;j=0;d=0;i=Vm(b,k)|0;while(1){if(!i){f=0;break}e=c[i>>2]|0;g=e&3;f=c[((g|0)==2?i:i+-48|0)+40>>2]|0;h=i+48|0;b:do if((f|0)!=(c[((g|0)==3?i:h)+40>>2]|0)){g=c[42238]|0;do if((f|0)==(k|0)&(g|0)!=0){f=Km(i,g)|0;if(!(a[f>>0]|0)){e=c[i>>2]|0;break}else{e=j;d=gk(m,d,k,i,f)|0;break b}}while(0);f=c[42239]|0;if((f|0?(c[((e&3|0)==3?i:h)+40>>2]|0)==(k|0):0)?(o=Km(i,f)|0,(a[o>>0]|0)!=0):0)e=gk(n,j,k,i,o)|0;else e=j}else e=j;while(0);j=e;i=Wm(b,i,k)|0}while(1){if((f|0)>=(d|0)){e=0;break}e=m+(f*24|0)+4|0;if((c[m+(f*24|0)+8>>2]|0)>1)hk(k,e);e=c[e>>2]|0;if(e|0)$I(e);f=f+1|0}while(1){if((e|0)>=(j|0))break;d=n+(e*24|0)+4|0;if((c[n+(e*24|0)+8>>2]|0)>1)hk(k,d);d=c[d>>2]|0;if(d|0)$I(d);e=e+1|0}k=fo(b,k)|0}}while(0);l=p;return}function gk(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;p=l;l=l+16|0;k=p;m=p+12|0;n=p+8|0;o=0;while(1){if((o|0)>=(d|0)){j=10;break}j=c[b+(o*24|0)>>2]|0;if((a[j>>0]|0)==(a[g>>0]|0)?(yJ(j,g)|0)==0:0){j=5;break}o=o+1|0}do if((j|0)==5){k=b+(o*24|0)+4|0;j=c[k>>2]|0;if(!j){j=b+(o*24|0)+8|0;g=j;j=xw((c[j>>2]<<2)+8|0)|0}else{q=b+(o*24|0)+8|0;g=q;j=zw(j,(c[q>>2]<<2)+8|0)|0}c[k>>2]=j;r=c[g>>2]|0;q=r+1|0;c[g>>2]=q;c[j+(r<<2)>>2]=f;c[(c[k>>2]|0)+(q<<2)>>2]=0;j=13}else if((j|0)==10)if((d|0)>4){r=En(e)|0;c[k>>2]=5;c[k+4>>2]=r;$l(1,80277,k)|0;break}else{s=b+(o*24|0)+8|0;c[s>>2]=0;k=ww(8)|0;r=b+(o*24|0)+4|0;c[r>>2]=k;q=c[s>>2]|0;j=q+1|0;c[s>>2]=j;c[k+(q<<2)>>2]=f;c[(c[r>>2]|0)+(j<<2)>>2]=0;c[b+(o*24|0)>>2]=g;c[b+(o*24|0)+12>>2]=0;h[b+(o*24|0)+16>>3]=0.0;d=d+1|0;j=13;break}while(0);if((j|0)==13){Bt(f,m,n);j=(c[((c[f>>2]&3|0)==2?f:f+-48|0)+40>>2]|0)==(e|0)?c[n>>2]|0:c[m>>2]|0;if(j){r=b+(o*24|0)+12|0;s=c[r>>2]|0;c[r>>2]=s+1;if(!s)i=+Ft(f,j);else i=0.0;h[b+(o*24|0)+16>>3]=i}}l=p;return d|0}function hk(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0.0,k=0.0,m=0.0,n=0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0;x=l;l=l+80|0;t=x+68|0;u=x+64|0;r=x;v=d+4|0;n=c[v>>2]|0;w=b+16|0;i=0;p=0.0;q=0.0;while(1){if((i|0)>=(n|0))break;f=c[(c[d>>2]|0)+(i<<2)>>2]|0;g=c[f>>2]&3;e=c[((g|0)==2?f:f+-48|0)+40>>2]|0;if((e|0)==(b|0))e=c[((g|0)==3?f:f+48|0)+40>>2]|0;g=c[e+16>>2]|0;s=c[w>>2]|0;k=+h[g+16>>3]-+h[s+16>>3];m=+h[g+24>>3]-+h[s+24>>3];o=+RJ(k,m);i=i+1|0;p=k/o+p;q=m/o+q}j=+RJ(p,q);s=c[w>>2]|0;k=+h[s+16>>3];m=+h[s+24>>3];y=+h[s+96>>3]+ +h[s+88>>3];o=+h[s+80>>3];s=y>o+ +(c[(c[(so(b)|0)+16>>2]|0)+252>>2]|0);e=c[w>>2]|0;if(s)o=+h[e+96>>3]+ +h[e+88>>3];else{o=+h[e+80>>3];o=o+ +(c[(c[(so(b)|0)+16>>2]|0)+252>>2]|0);e=c[w>>2]|0}y=+h[e+16>>3]+o*(p/j);j=+h[e+24>>3]+o*(q/j);h[r>>3]=k;n=r+8|0;h[n>>3]=m;h[r+16>>3]=(y+k*2.0)*.3333333333333333;h[r+24>>3]=(j+m*2.0)*.3333333333333333;h[r+32>>3]=(y*2.0+k)*.3333333333333333;h[r+40>>3]=(j*2.0+m)*.3333333333333333;h[r+48>>3]=y;h[r+56>>3]=j;Hz(b,r);s=c[w>>2]|0;j=+h[r>>3]-+h[s+16>>3];k=+h[n>>3]-+h[s+24>>3];j=+(~~(j+(j>=0.0?.5:-.5))|0);k=+(~~(k+(k>=0.0?.5:-.5))|0);y=+h[s+88>>3];s=~~((y+j)*256.0/(+h[s+96>>3]+y))&255;r=0;while(1){if((r|0)>=(c[v>>2]|0))break;n=c[(c[d>>2]|0)+(r<<2)>>2]|0;Bt(n,t,u);while(1){if(!n)break;else g=n;while(1){if(!g){i=n;break}e=c[g>>2]|0;i=g+-48|0;if((c[((e&3|0)==2?g:i)+40>>2]|0)==(b|0)){e=c[g+16>>2]|0;h[e+56>>3]=j;h[e+64>>3]=k;h[e+72>>3]=0.0;c[e+80>>2]=0;a[e+84>>0]=1;a[e+85>>0]=0;a[e+86>>0]=0;a[e+87>>0]=0;a[e+88>>0]=s;a[e+89>>0]=0;c[e+92>>2]=0;e=c[g>>2]|0}f=g+16|0;if((c[((e&3|0)==3?g:g+48|0)+40>>2]|0)==(b|0)){e=c[f>>2]|0;h[e+16>>3]=j;h[e+24>>3]=k;h[e+32>>3]=0.0;c[e+40>>2]=0;a[e+44>>0]=1;a[e+45>>0]=0;a[e+46>>0]=0;a[e+47>>0]=0;a[e+48>>0]=s;a[e+49>>0]=0;c[e+52>>2]=0}if((a[(c[f>>2]|0)+112>>0]|0)!=1){g=0;continue}e=c[(c[((c[g>>2]&3|0)==2?g:i)+40>>2]|0)+16>>2]|0;if((a[e+156>>0]|0)!=1){g=0;continue}if((c[e+184>>2]|0)!=1){g=0;continue}g=c[c[e+180>>2]>>2]|0}while(1){if(!i)break;e=c[i>>2]|0;if((c[((e&3|0)==2?i:i+-48|0)+40>>2]|0)==(b|0)){e=c[i+16>>2]|0;h[e+56>>3]=j;h[e+64>>3]=k;h[e+72>>3]=0.0;c[e+80>>2]=0;a[e+84>>0]=1;a[e+85>>0]=0;a[e+86>>0]=0;a[e+87>>0]=0;a[e+88>>0]=s;a[e+89>>0]=0;c[e+92>>2]=0;e=c[i>>2]|0}f=i+48|0;g=i+16|0;if((c[((e&3|0)==3?i:f)+40>>2]|0)==(b|0)){e=c[g>>2]|0;h[e+16>>3]=j;h[e+24>>3]=k;h[e+32>>3]=0.0;c[e+40>>2]=0;a[e+44>>0]=1;a[e+45>>0]=0;a[e+46>>0]=0;a[e+47>>0]=0;a[e+48>>0]=s;a[e+49>>0]=0;c[e+52>>2]=0}if((a[(c[g>>2]|0)+112>>0]|0)!=1){i=0;continue}e=c[(c[((c[i>>2]&3|0)==3?i:f)+40>>2]|0)+16>>2]|0;if((a[e+156>>0]|0)!=1){i=0;continue}if((c[e+176>>2]|0)!=1){i=0;continue}i=c[c[e+172>>2]>>2]|0}n=c[(c[n+16>>2]|0)+172>>2]|0}r=r+1|0}a[(c[w>>2]|0)+145>>0]=1;l=x;return}function ik(a){a=a|0;var b=0,d=0,e=0;Yg(a);b=c[a>>2]&3;d=a+-48|0;e=a+48|0;b=Tg(c[((b|0)==2?a:d)+40>>2]|0,c[((b|0)==3?a:e)+40>>2]|0)|0;if(!b){b=c[a>>2]&3;bh(c[((b|0)==2?a:d)+40>>2]|0,c[((b|0)==3?a:e)+40>>2]|0,a)|0}else jh(a,b);return}function jk(b){b=b|0;var d=0,e=0,f=0,g=0;f=b+16|0;e=0;while(1){b=c[f>>2]|0;if((e|0)>=(c[b+220>>2]|0))break;d=c[(c[b+216>>2]|0)+(e<<2)>>2]|0;c[b+192>>2]=d;b=d;d=b;while(1){if(!d)break;g=c[d+16>>2]|0;a[g+157>>0]=0;d=c[g+164>>2]|0}while(1){if(!b)break;kk(b);b=c[(c[b+16>>2]|0)+164>>2]|0}e=e+1|0}return}function kk(b){b=b|0;var d=0,e=0,f=0,g=0;g=b+16|0;d=c[g>>2]|0;b=d+157|0;if(!(a[b>>0]|0)){a[b>>0]=1;a[d+158>>0]=1;b=0;while(1){f=c[(c[d+180>>2]|0)+(b<<2)>>2]|0;if(!f)break;d=c[((c[f>>2]&3|0)==2?f:f+-48|0)+40>>2]|0;e=c[d+16>>2]|0;if(!(a[e+158>>0]|0)){if(!(a[e+157>>0]|0))kk(d)}else{ik(f);b=b+-1|0}b=b+1|0;d=c[g>>2]|0}a[d+158>>0]=0}return}function lk(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;e=eo(a)|0;b=0;while(1){if(!e)break;d=Qm(a,e)|0;while(1){if(!d)break;g=c[d>>2]&3;h=c[(c[(c[((g|0)==2?d:d+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0;g=c[(c[(c[((g|0)==3?d:d+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0;f=h-g|0;d=Sm(a,d)|0;b=((h|0)==(g|0)?0:((f|0)>-1?f:0-f|0)+-1|0)+b|0}e=fo(a,e)|0}return b|0}function mk(b){b=b|0;var d=0,e=0,f=0,g=0;e=eo(b)|0;while(1){if(!e)break;g=c[e+16>>2]|0;f=c[g+176>>2]|0;g=g+172|0;d=0;while(1){if((d|0)>=(f|0))break;a[(c[(c[(c[g>>2]|0)+(d<<2)>>2]|0)+16>>2]|0)+112>>0]=0;d=d+1|0}e=fo(b,e)|0}return}function nk(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0.0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l;l=l+16|0;o=q;j=c[b+24>>2]|0;ok(a);k=(j|0)==-1;m=b+8|0;i=k^1;n=c[13918]|0;f=1797693134862315708145274.0e284;g=0;while(1){if(!(k|(g|0)<(j|0)))break;d=eo(a)|0;while(1){if(!d)break;c[(c[d+16>>2]|0)+232>>2]=0;d=fo(a,d)|0}kj(a);e=+pk(a);h[m>>3]=e;if(0){h[o>>3]=e;AL(n,80329,o)|0;e=+h[m>>3]}if(!(!(e<=+h[b>>3])&(!(f<=e)|i))){p=9;break}qk(a);f=e;g=g+1|0}if((p|0)==9){p=b+20|0;c[b+16>>2]=c[p>>2];c[p>>2]=g}kj(a);rk(a);sk();h[m>>3]=+pk(a);l=q;return}function ok(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,i=0,j=0,k=0,l=0.0,m=0.0,n=0;c[41938]=xw((nn(a)|0)*24|0)|0;c[41937]=0;b=eo(a)|0;while(1){if(!b)break;c[(c[b+16>>2]|0)+120>>2]=-1;b=fo(a,b)|0}i=eo(a)|0;while(1){if(!i)break;j=i+16|0;do if(!(c[(c[j>>2]|0)+216>>2]|0)){f=ww(4)|0;g=c[41938]|0;k=c[41937]|0;c[g+(k*24|0)>>2]=f;c[f>>2]=i;c[g+(k*24|0)+4>>2]=1;j=c[j>>2]|0;h[g+(k*24|0)+8>>3]=+h[j+32>>3];h[g+(k*24|0)+16>>3]=+h[j+40>>3];c[j+120>>2]=k;c[41937]=k+1}else{g=LA(i)|0;k=g+16|0;b=c[k>>2]|0;d=c[b+120>>2]|0;if((d|0)>-1){g=c[41938]|0;f=c[g+(d*24|0)>>2]|0;e=g+(d*24|0)+4|0;k=c[e>>2]|0;c[e>>2]=k+1;c[f+(k<<2)>>2]=i;k=c[j>>2]|0;j=g+(d*24|0)+8|0;h[j>>3]=+h[j>>3]+ +h[k+32>>3];j=g+(d*24|0)+16|0;l=+h[j>>3];m=+h[k+40>>3];h[j>>3]=l>2]=d;break}d=ww(c[b+216>>2]<<2)|0;e=c[41938]|0;f=c[41937]|0;b=e+(f*24|0)|0;c[b>>2]=d;c[d>>2]=g;if((g|0)==(i|0)){h[e+(f*24|0)+8>>3]=+h[(c[k>>2]|0)+32>>3];d=1;b=i}else{c[(c[b>>2]|0)+4>>2]=i;n=c[k>>2]|0;b=c[j>>2]|0;h[e+(f*24|0)+8>>3]=+h[b+32>>3]+ +h[n+32>>3];d=2;b=+h[n+40>>3]<+h[b+40>>3]?i:g}c[e+(f*24|0)+4>>2]=d;h[e+(f*24|0)+16>>3]=+h[(c[b+16>>2]|0)+40>>3];c[(c[k>>2]|0)+120>>2]=f;c[(c[j>>2]|0)+120>>2]=f;c[41937]=f+1}while(0);i=fo(a,i)|0}return}function pk(a){a=a|0;var b=0.0,d=0.0,e=0,f=0,g=0,i=0.0,j=0.0;rk(a);g=c[41935]|0;e=c[a+16>>2]|0;b=+(O(c[e+252>>2]|0,g+-1|0)|0);f=c[41936]|0;e=e+248|0;a=0;d=0.0;while(1){if((a|0)>=(g|0))break;i=+h[f+(a*40|0)+24>>3]+ +(O(c[e>>2]|0,c[f+(a*40|0)+16>>2]|0)|0);j=+h[f+(a*40|0)+32>>3]+b;a=a+1|0;b=j;d=d=(nn(a)|0))break;c[(c[41939]|0)+(b<<2)>>2]=b;b=b+1|0}rk(a);tk(a);uk(a);return}function rk(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,i=0,j=0.0,k=0,l=0;c[41935]=0;b=c[41936]|0;if(b|0){e=0;while(1){if((e|0)>=(c[41937]|0))break;d=c[b+(e*40|0)+4>>2]|0;if(d){$I(d);b=c[41936]|0}d=c[b+(e*40|0)+8>>2]|0;if(d){$I(d);b=c[41936]|0}e=e+1|0}$I(b)}c[41936]=ww((c[41937]|0)*40|0)|0;b=0;while(1){d=c[41937]|0;if((b|0)>=(d|0))break;k=ww(d<<2)|0;c[(c[41936]|0)+(b*40|0)+4>>2]=k;k=ww(c[41937]<<2)|0;l=c[41936]|0;c[l+(b*40|0)+8>>2]=k;c[l+(b*40|0)>>2]=b;c[l+(b*40|0)+12>>2]=0;c[l+(b*40|0)+16>>2]=0;l=l+(b*40|0)+24|0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[l+12>>2]=0;b=b+1|0}e=eo(a)|0;while(1){if(!e)break;d=Qm(a,e)|0;while(1){if(!d)break;i=c[d>>2]|0;f=d+-48|0;g=c[41936]|0;b=c[(c[(c[((i&3|0)==3?d:d+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0;while(1){b=b+1|0;if((b|0)>=(c[(c[(c[((i&3|0)==2?d:f)+40>>2]|0)+16>>2]|0)+232>>2]|0))break;i=g+(b*40|0)+16|0;c[i>>2]=(c[i>>2]|0)+1;i=c[d>>2]|0}d=Sm(a,d)|0}e=fo(a,e)|0}i=c[41937]|0;k=c[41938]|0;l=c[41936]|0;d=a+16|0;b=0;while(1){if((b|0)>=(i|0))break;e=(c[c[k+(b*24|0)>>2]>>2]|0)+16|0;f=c[(c[e>>2]|0)+232>>2]|0;if((f|0)>=(c[41935]|0))c[41935]=f+1;g=l+(f*40|0)+24|0;j=+h[g>>3];h[g>>3]=j+ +h[k+(b*24|0)+8>>3]*72.0+(j>0.0?+(c[(c[d>>2]|0)+248>>2]|0):0.0);g=l+(f*40|0)+32|0;j=+h[k+(b*24|0)+16>>3]*72.0;if(+h[g>>3]>3]=j;c[(c[l+(f*40|0)+4>>2]|0)+(c[l+(f*40|0)+12>>2]<<2)>>2]=k+(b*24|0);a=l+((c[(c[e>>2]|0)+232>>2]|0)*40|0)+12|0;c[a>>2]=(c[a>>2]|0)+1;b=b+1|0}return}function sk(){var a=0,b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;k=c[41935]|0;l=c[41936]|0;j=0;b=0;a=0;while(1){if((j|0)>=(k|0))break;d=l+(j*40|0)|0;i=c[l+(j*40|0)+12>>2]|0;e=(b|0)==0;a:do if(i)if(!e){if((c[d>>2]|0)>(a|0)){f=l+(j*40|0)+4|0;d=0;while(1){if((d|0)>=(i|0))break a;g=c[(c[f>>2]|0)+(d<<2)>>2]|0;h=c[g+4>>2]|0;e=0;while(1){if((e|0)>=(h|0))break;m=(c[(c[(c[g>>2]|0)+(e<<2)>>2]|0)+16>>2]|0)+232|0;c[m>>2]=(c[m>>2]|0)-b;e=e+1|0}d=d+1|0}}}else b=0;else{if(e)a=c[d>>2]|0;b=b+1|0}while(0);j=j+1|0}return}function tk(a){a=a|0;var b=0;b=c[41939]|0;sL(b,nn(a)|0,4,15);return}function uk(b){b=b|0;var d=0.0,e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0.0,n=0,o=0,p=0,q=0,r=0.0,s=0;j=c[41935]|0;k=c[41936]|0;g=c[41939]|0;i=0;while(1){if((i|0)>=(j|0)){e=0;d=0.0;break}e=c[g+(i<<2)>>2]|0;f=i+1|0;if((c[k+(e*40|0)+12>>2]|0)<2)i=f;else{l=4;break}}if((l|0)==4)if((j|0)>(f|0))d=+h[k+((c[g+(f<<2)>>2]|0)*40|0)+24>>3];else d=0.0;a:do if((i|0)!=(j|0)){sL(c[k+(e*40|0)+4>>2]|0,c[k+(e*40|0)+12>>2]|0,4,16);g=c[41936]|0;r=+h[g+(e*40|0)+24>>3];r=!(d<=r*.25)&!(d>=r*.75)?d:r*.5;s=c[g+(e*40|0)+12>>2]|0;q=b+16|0;n=0;o=0;d=0.0;f=0;p=0;while(1){if((p|0)>=(f+s|0))break a;do if(!(c[(c[g+(e*40|0)+8>>2]|0)+(p<<2)>>2]|0)){l=c[(c[g+(e*40|0)+4>>2]|0)+(p<<2)>>2]|0;b=l+8|0;m=+h[b>>3]*72.0+d+(d>0.0?+(c[(c[q>>2]|0)+248>>2]|0):0.0);i=(o|0)!=0;if(!(i&!(m<=r))){j=i?n:l;i=i?o:1;d=m;break}j=n+4|0;k=l+4|0;i=0;while(1){if((i|0)<(c[j>>2]|0))g=0;else break;while(1){if((g|0)>=(c[k>>2]|0))break;a[(c[(bh(c[(c[n>>2]|0)+(i<<2)>>2]|0,c[(c[l>>2]|0)+(g<<2)>>2]|0,0)|0)+16>>2]|0)+112>>0]=1;g=g+1|0}i=i+1|0}g=c[41936]|0;c[(c[g+(e*40|0)+8>>2]|0)+(p<<2)>>2]=1;j=g+(e*40|0)+12|0;c[j>>2]=(c[j>>2]|0)+-1;j=g+(e*40|0)+16|0;c[j>>2]=(c[j>>2]|0)+1;j=g+(e*40|0)+24|0;h[j>>3]=+h[b>>3]*-72.0-+(c[(c[q>>2]|0)+248>>2]|0)+ +h[j>>3];j=n;i=o}else{j=n;i=o;f=f+1|0}while(0);n=j;o=i;p=p+1|0}}while(0);return}function vk(a,b){a=a|0;b=b|0;a=wk(c[a>>2]|0)|0;b=wk(c[b>>2]|0)|0;return ((b|0)<(a|0)&1)-((b|0)>(a|0)&1)|0}function wk(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;f=a+4|0;d=0;b=0;while(1){if((d|0)>=(c[f>>2]|0))break;e=c[(c[a>>2]|0)+(d<<2)>>2]|0;g=so(e)|0;e=Qm(g,e)|0;while(1){if(!e)break;e=Sm(g,e)|0;b=b+1|0}d=d+1|0}return b|0}function xk(a,b){a=a|0;b=b|0;var d=0.0,e=0.0,f=0;f=c[41936]|0;e=+h[f+((c[b>>2]|0)*40|0)+24>>3];d=+h[f+((c[a>>2]|0)*40|0)+24>>3];return (e>d&1)-(e>2]|0)+216>>2]=0;b=fo(a,b)|0}return}function zk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=l;l=l+32|0;f=g+16|0;e=g+8|0;d=g+20|0;c[d>>2]=5;a=Jm(a,84624)|0;if(a|0?(c[e>>2]=g,c[e+4>>2]=d,(dM(a,80344,e)|0)>=1):0)$l(0,80351,f)|0;c[b+24>>2]=0;c[b+32>>2]=0;l=g;return 0}function Ak(b){b=b|0;var d=0,e=0;d=c[42234]|0;if((((d|0)!=0?(e=Km(b,d)|0,(e|0)!=0):0)?(a[e>>0]|0)!=0:0)?(JA(e)|0)<<24>>24==0:0)b=1;else b=0;return b|0}function Bk(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;Wk(a);b=eo(a)|0;while(1){if(!b)break;d=Qm(a,b)|0;while(1){if(!d)break;do if(((c[(c[d+16>>2]|0)+172>>2]|0)==0?(Ak(d)|0)==0:0)?(e=d+48|0,f=LA(c[((c[d>>2]&3|0)==3?d:e)+40>>2]|0)|0,g=d+-48|0,h=LA(c[((c[d>>2]&3|0)==2?d:g)+40>>2]|0)|0,(f|0)!=(h|0)):0){if((c[(c[f+16>>2]|0)+212>>2]|0)==0?(c[(c[h+16>>2]|0)+212>>2]|0)==0:0){i=Tg(f,h)|0;if(!i){bh(f,h,d)|0;break}else{jh(d,i);break}}i=c[d>>2]&3;Ck(a,c[((i|0)==3?d:e)+40>>2]|0,c[((i|0)==2?d:g)+40>>2]|0,d)}while(0);d=Sm(a,d)|0}b=fo(a,b)|0}return}function Ck(b,d,f,g){b=b|0;d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;j=c[g>>2]&3;h=c[(c[((j|0)==3?g:g+48|0)+40>>2]|0)+16>>2]|0;i=c[h+212>>2]|0;if(!i)k=0;else k=(c[h+232>>2]|0)-(c[(c[(c[(c[i+16>>2]|0)+264>>2]|0)+16>>2]|0)+232>>2]|0)|0;h=c[(c[((j|0)==2?g:g+-48|0)+40>>2]|0)+16>>2]|0;i=c[h+212>>2]|0;if(!i)h=0;else h=(c[(c[(c[(c[i+16>>2]|0)+264>>2]|0)+16>>2]|0)+232>>2]|0)-(c[h+232>>2]|0)|0;j=g+16|0;k=h+k+(e[(c[j>>2]|0)+170>>1]|0)|0;b=gh(b)|0;a[(c[b+16>>2]|0)+156>>0]=2;i=LA(d)|0;d=LA(f)|0;f=Ni(b,i,(k|0)>0?0.0:+(0-k|0),(c[(c[j>>2]|0)+156>>2]|0)*10|0)|0;c[(c[(Ni(b,d,+(((k|0)>0?k:0)|0),c[(c[j>>2]|0)+156>>2]|0)|0)+16>>2]|0)+116>>2]=g;c[(c[f+16>>2]|0)+116>>2]=g;return}function Dk(a,d,f,g){a=a|0;d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;j=c[d>>2]&3;i=(j|0)==3?d:d+48|0;j=(j|0)==2?d:d+-48|0;j=c[(c[(c[((c[(c[(c[i+40>>2]|0)+16>>2]|0)+232>>2]|0)>(c[(c[(c[j+40>>2]|0)+16>>2]|0)+232>>2]|0)?i:j)+40>>2]|0)+16>>2]|0)+232>>2]|0;i=d+16|0;d=(c[i>>2]|0)+172|0;if(c[d>>2]|0)ma(80440,80462,148,80471);c[d>>2]=f;h=(g|0)==0;do{d=c[i>>2]|0;if(h)g=c[f+16>>2]|0;else{g=c[f+16>>2]|0;k=g+168|0;b[k>>1]=(e[k>>1]|0)+(e[d+168>>1]|0)}k=g+154|0;b[k>>1]=(e[k>>1]|0)+(e[d+154>>1]|0);g=g+156|0;c[g>>2]=(c[g>>2]|0)+(c[d+156>>2]|0);d=f+-48|0;g=c[((c[f>>2]&3|0)==2?f:d)+40>>2]|0;if((c[(c[g+16>>2]|0)+232>>2]|0)==(j|0))break;Ek(a,g);f=c[c[(c[(c[((c[f>>2]&3|0)==2?f:d)+40>>2]|0)+16>>2]|0)+180>>2]>>2]|0}while((f|0)!=0);return}function Ek(a,b){a=a|0;b=b|0;var d=0.0;d=+((c[(c[a+16>>2]|0)+248>>2]|0)/2|0|0);b=c[b+16>>2]|0;a=b+88|0;h[a>>3]=+h[a>>3]+d;b=b+96|0;h[b>>3]=+h[b>>3]+d;return}function Fk(a,b){a=a|0;b=b|0;var d=0,e=0;if(((((a|0)!=0&(b|0)!=0?(e=c[a>>2]&3,d=c[b>>2]&3,(c[((e|0)==3?a:a+48|0)+40>>2]|0)==(c[((d|0)==3?b:b+48|0)+40>>2]|0)):0)?(c[((e|0)==2?a:a+-48|0)+40>>2]|0)==(c[((d|0)==2?b:b+-48|0)+40>>2]|0):0)?(c[(c[a+16>>2]|0)+96>>2]|0)==(c[(c[b+16>>2]|0)+96>>2]|0):0)?(ij(a,b)|0)!=0:0)a=1;else a=0;return a|0}function Gk(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=b+16|0;d=c[r>>2]|0;c[d+192>>2]=0;c[d+232>>2]=0;Wk(b);d=1;while(1){e=c[r>>2]|0;if((d|0)>(c[e+180>>2]|0))break;Xk(b,c[(c[e+184>>2]|0)+(d<<2)>>2]|0);d=d+1|0}h=eo(b)|0;while(1){if(!h)break;g=Qm(b,h)|0;while(1){if(!g)break;d=c[g>>2]|0;e=(c[(c[((d&3|0)==2?g:g+-48|0)+40>>2]|0)+16>>2]|0)+160|0;f=a[e>>0]|0;if(f<<24>>24<3){a[e>>0]=f+1<<24>>24;d=c[g>>2]|0}d=(c[(c[((d&3|0)==3?g:g+48|0)+40>>2]|0)+16>>2]|0)+160|0;e=a[d>>0]|0;if(e<<24>>24<3)a[d>>0]=e+1<<24>>24;g=Sm(b,g)|0}h=fo(b,h)|0}m=eo(b)|0;while(1){if(!m)break;if((c[(c[m+16>>2]|0)+212>>2]|0)==0?(m|0)==(LA(m)|0):0){ch(b,m);l=(c[r>>2]|0)+232|0;c[l>>2]=(c[l>>2]|0)+1}d=0;l=Qm(b,m)|0;while(1){if(!l)break;k=l+16|0;h=c[k>>2]|0;a:do if(!(c[h+172>>2]|0)){if(Hk(l)|0){if(!(Fk(d,l)|0)){Ik(b,l);d=l;break}e=c[(c[d+16>>2]|0)+172>>2]|0;if(e|0){Dk(b,l,e,0);Zg(l);break}k=c[l>>2]&3;if((c[(c[(c[((k|0)==3?l:l+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)!=(c[(c[(c[((k|0)==2?l:l+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0))break;jh(l,d);Zg(l);break}if(d){i=c[l>>2]&3;e=l+48|0;f=c[((i|0)==3?l:e)+40>>2]|0;g=c[d>>2]&3;if((f|0)==(c[((g|0)==3?d:d+48|0)+40>>2]|0)?(n=c[((i|0)==2?l:l+-48|0)+40>>2]|0,(n|0)==(c[((g|0)==2?d:d+-48|0)+40>>2]|0)):0){if((c[(c[f+16>>2]|0)+232>>2]|0)==(c[(c[n+16>>2]|0)+232>>2]|0)){jh(l,d);Zg(l);break}if(((c[h+96>>2]|0)==0?(o=d+16|0,(c[(c[o>>2]|0)+96>>2]|0)==0):0)?(ij(l,d)|0)!=0:0)if(!(a[174080]|0)){Dk(b,l,c[(c[o>>2]|0)+172>>2]|0,1);Zg(l);break}else{a[(c[k>>2]|0)+112>>0]=6;break}else i=e}else i=e}else i=l+48|0;h=c[l>>2]&3;e=c[((h|0)==3?l:i)+40>>2]|0;j=l+-48|0;if((e|0)==(c[((h|0)==2?l:j)+40>>2]|0)){Zg(l);d=l;break}e=LA(e)|0;f=LA(c[((c[l>>2]&3|0)==2?l:j)+40>>2]|0)|0;h=c[l>>2]&3;if((c[((h|0)==3?l:i)+40>>2]|0)==(e|0)?(c[((h|0)==2?l:j)+40>>2]|0)==(f|0):0){g=c[(c[e+16>>2]|0)+232>>2]|0;h=c[(c[f+16>>2]|0)+232>>2]|0;if((g|0)==(h|0)){hh(b,l);d=l;break}if((h|0)>(g|0)){Jk(b,e,f,l);d=l;break}e=bn(b,f,e,0,0)|0;do if(e|0?(p=c[e>>2]&3,q=c[((p|0)==2?e:e+-48|0)+40>>2]|0,(q|0)!=(c[((c[l>>2]&3|0)==2?l:j)+40>>2]|0)):0){f=e+16|0;if(!(c[(c[f>>2]|0)+172>>2]|0))Jk(b,c[((p|0)==3?e:e+48|0)+40>>2]|0,q,e);if((c[(c[k>>2]|0)+96>>2]|0)==0?(c[(c[f>>2]|0)+96>>2]|0)==0:0){if(!(ij(l,e)|0))break;if(!(a[174080]|0)){Zg(l);Dk(b,l,c[(c[f>>2]|0)+172>>2]|0,1);break a}else{a[(c[k>>2]|0)+112>>0]=6;a[(c[f>>2]|0)+153>>0]=1;break a}}}while(0);d=c[l>>2]&3;Jk(b,c[((d|0)==2?l:j)+40>>2]|0,c[((d|0)==3?l:i)+40>>2]|0,l);d=l}}else d=l;while(0);l=Sm(b,l)|0}m=fo(b,m)|0}if((Wf(b)|0)!=(b|0)){d=c[(c[r>>2]|0)+216>>2]|0;if(!d)d=xw(4)|0;else d=zw(d,4)|0;r=c[r>>2]|0;c[r+216>>2]=d;c[d>>2]=c[r+192>>2]}return}function Hk(b){b=b|0;var d=0;d=c[b>>2]&3;if((a[(c[(c[((d|0)==3?b:b+48|0)+40>>2]|0)+16>>2]|0)+159>>0]|0)==7)b=1;else b=(a[(c[(c[((d|0)==2?b:b+-48|0)+40>>2]|0)+16>>2]|0)+159>>0]|0)==7&1;return b|0}function Ik(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;f=Mk(c[((c[d>>2]&3|0)==3?d:d+48|0)+40>>2]|0)|0;g=Mk(c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0)|0;i=(c[(c[f+16>>2]|0)+232>>2]|0)>(c[(c[g+16>>2]|0)+232>>2]|0);e=i?f:g;f=i?g:f;g=f+16|0;i=e+16|0;a:do if((c[(c[g>>2]|0)+212>>2]|0)!=(c[(c[i>>2]|0)+212>>2]|0)){h=Tg(f,e)|0;if(h|0){Dk(b,d,h,1);break}if((c[(c[g>>2]|0)+232>>2]|0)!=(c[(c[i>>2]|0)+232>>2]|0)){Jk(b,f,e,d);e=(c[d+16>>2]|0)+172|0;while(1){e=c[e>>2]|0;if(!e)break a;f=e+-48|0;if((c[(c[(c[((c[e>>2]&3|0)==2?e:f)+40>>2]|0)+16>>2]|0)+232>>2]|0)>(c[(c[i>>2]|0)+232>>2]|0))break a;a[(c[e+16>>2]|0)+112>>0]=5;e=c[(c[(c[((c[e>>2]&3|0)==2?e:f)+40>>2]|0)+16>>2]|0)+180>>2]|0}}}while(0);return}function Jk(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;k=e+16|0;f=c[k>>2]|0;if(!(c[f+96>>2]|0))j=-1;else j=((c[(c[d+16>>2]|0)+232>>2]|0)+(c[(c[b+16>>2]|0)+232>>2]|0)|0)/2|0;if(c[f+172>>2]|0)ma(80483,80462,89,80508);i=d+16|0;h=c[(c[b+16>>2]|0)+232>>2]|0;while(1){g=h+1|0;f=c[(c[i>>2]|0)+232>>2]|0;if((h|0)>=(f|0))break;if((g|0)<(f|0)){if((g|0)==(j|0))f=Kk(a,e)|0;else f=Lk(a)|0;c[(c[f+16>>2]|0)+232>>2]=g}else f=d;wi(bh(b,f,e)|0);h=g;b=f}if(!(c[(c[k>>2]|0)+172>>2]|0))ma(80519,80462,103,80508);else return}function Kk(b,d){b=b|0;d=d|0;var e=0.0,f=0.0,g=0,i=0,j=0.0;i=d+16|0;g=c[(c[i>>2]|0)+96>>2]|0;e=+h[g+24>>3];f=+h[g+32>>3];g=gh(b)|0;d=g+16|0;c[(c[d>>2]|0)+104>>2]=c[(c[i>>2]|0)+96>>2];j=+(c[(c[(to(g)|0)+16>>2]|0)+248>>2]|0);h[(c[d>>2]|0)+88>>3]=j;if(!(a[(c[i>>2]|0)+114>>0]|0)){b=(c[(c[(to(b)|0)+16>>2]|0)+116>>2]&1|0)==0;i=c[d>>2]|0;h[i+80>>3]=b?f:e;h[i+96>>3]=b?e:f}return g|0}function Lk(a){a=a|0;var b=0;b=gh(a)|0;Ek(a,b);return b|0}function Mk(b){b=b|0;var d=0;d=c[b+16>>2]|0;if((a[d+159>>0]|0)==7)b=c[(c[(c[(c[d+212>>2]|0)+16>>2]|0)+268>>2]|0)+(c[d+232>>2]<<2)>>2]|0;else b=LA(b)|0;return b|0}function Nk(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;j=Wf(a)|0;h=eo(a)|0;while(1){if(!h)break;b=Vm(j,h)|0;i=0;while(1){if(!b)break;l=Wm(j,b,h)|0;if(Co(a,b)|0){k=i;b=l;i=k;continue}k=(c[b>>2]&3|0)==2?b:b+-48|0;m=(Fk(i,k)|0)==0;e=c[k>>2]&3;b=c[((e|0)==3?k:k+48|0)+40>>2]|0;d=c[(c[b+16>>2]|0)+232>>2]|0;e=c[((e|0)==2?k:k+-48|0)+40>>2]|0;f=c[(c[e+16>>2]|0)+232>>2]|0;g=(d|0)==(f|0);if(!m){c[(c[k+16>>2]|0)+172>>2]=g?i:0;b=c[(c[i+16>>2]|0)+172>>2]|0;if(!b){m=i;b=l;i=m;continue}Dk(a,k,b,0);_g(k);m=i;b=l;i=m;continue}if(!g)if((f|0)>(d|0)){Ok(b,e,k);b=l;i=k;continue}else{Ok(e,b,k);b=l;i=k;continue}b=Vg(b,e)|0;if(!b){hh(j,k);b=l;i=k;continue}if((k|0)==(b|0)){m=i;b=l;i=m;continue}_g(k);if(c[(c[k+16>>2]|0)+172>>2]|0){m=i;b=l;i=m;continue}jh(k,b);m=i;b=l;i=m}h=fo(a,h)|0}return}function Ok(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=Pk(a)|0;e=Pk(b)|0;Qk(f,e,d,c[(c[d+16>>2]|0)+172>>2]|0,(f|0)==(a|0)&(e|0)==(b|0)?1:5);return}function Pk(b){b=b|0;var d=0,e=0,f=0;d=c[b+16>>2]|0;e=c[d+212>>2]|0;if((e|0)!=0?(f=c[e+16>>2]|0,(a[f+272>>0]|0)==0):0)b=c[(c[f+268>>2]|0)+(c[d+232>>2]<<2)>>2]|0;return b|0}function Qk(d,e,f,g,h){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0;n=d+16|0;k=c[(c[n>>2]|0)+232>>2]|0;o=e+16|0;i=c[(c[o>>2]|0)+232>>2]|0;if((i|0)<=(k|0))ma(80544,80572,81,80582);m=c[g>>2]&3;if(!((c[((m|0)==3?g:g+48|0)+40>>2]|0)==(d|0)?(c[((m|0)==2?g:g+-48|0)+40>>2]|0)==(e|0):0))l=5;a:do if((l|0)==5){if((b[(c[g+16>>2]|0)+168>>1]|0)>1){c[(c[f+16>>2]|0)+172>>2]=0;if(((i-k|0)==1?(j=Tg(d,e)|0,j|0):0)?ij(f,j)|0:0){jh(f,j);if(a[(c[n>>2]|0)+156>>0]|0)break;if(a[(c[o>>2]|0)+156>>0]|0)break;Zg(f);break}m=h&255;h=d;l=c[(c[n>>2]|0)+232>>2]|0;while(1){i=c[(c[o>>2]|0)+232>>2]|0;if((l|0)>=(i|0))break a;if((l|0)<(i+-1|0)){i=Wf(d)|0;j=g+-48|0;i=Rk(i,c[((c[g>>2]&3|0)==2?g:j)+40>>2]|0)|0;k=g}else{i=e;j=g+-48|0;k=g}a[(c[(bh(h,i,f)|0)+16>>2]|0)+112>>0]=m;n=(c[g+16>>2]|0)+168|0;b[n>>1]=(b[n>>1]|0)+-1<<16>>16;h=i;l=l+1|0;g=c[c[(c[(c[((c[k>>2]&3|0)==2?g:j)+40>>2]|0)+16>>2]|0)+180>>2]>>2]|0}}do if((i-k|0)==1){g=Tg(d,e)|0;if(g|0?ij(f,g)|0:0){c[(c[f+16>>2]|0)+172>>2]=g;m=c[g+16>>2]|0;a[m+112>>0]=h;m=m+168|0;b[m>>1]=(b[m>>1]|0)+1<<16>>16;if(a[(c[n>>2]|0)+156>>0]|0)break;if(a[(c[o>>2]|0)+156>>0]|0)break;Zg(f);break}c[(c[f+16>>2]|0)+172>>2]=0;g=bh(d,e,f)|0;a[(c[g+16>>2]|0)+112>>0]=h}while(0);i=c[(c[o>>2]|0)+232>>2]|0;if((i-(c[(c[n>>2]|0)+232>>2]|0)|0)>1){if((c[((c[g>>2]&3|0)==3?g:g+48|0)+40>>2]|0)==(d|0))l=i;else{n=f+16|0;c[(c[n>>2]|0)+172>>2]=0;l=bh(d,c[((c[g>>2]&3|0)==2?g:g+-48|0)+40>>2]|0,f)|0;c[(c[n>>2]|0)+172>>2]=l;Yg(g);g=l;l=c[(c[o>>2]|0)+232>>2]|0}while(1){i=c[g>>2]&3;j=c[((i|0)==2?g:g+-48|0)+40>>2]|0;k=c[j+16>>2]|0;if((c[k+232>>2]|0)==(l|0))break;g=c[c[k+180>>2]>>2]|0}if((j|0)!=(e|0)){a[(c[(bh(c[((i|0)==3?g:g+48|0)+40>>2]|0,e,f)|0)+16>>2]|0)+112>>0]=h;Yg(g)}}}while(0);return}function Rk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=b+16|0;b=c[d>>2]|0;e=c[b+232>>2]|0;Sk(a,e,c[b+236>>2]|0,2);b=gh(a)|0;d=c[d>>2]|0;f=c[b+16>>2]|0;h[f+88>>3]=+h[d+88>>3];h[f+96>>3]=+h[d+96>>3];c[f+232>>2]=c[d+232>>2];d=(c[d+236>>2]|0)+1|0;c[f+236>>2]=d;c[(c[(c[(c[a+16>>2]|0)+196>>2]|0)+(e<<6)+4>>2]|0)+(d<<2)>>2]=b;return b|0}function Sk(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;h=a+16|0;f=c[(c[h>>2]|0)+196>>2]|0;i=c[f+(b<<6)+4>>2]|0;a:do if((e|0)<1){d=d-e|0;while(1){g=d+1|0;a=c[f+(b<<6)>>2]|0;if((g|0)>=(a|0))break;a=c[i+(g<<2)>>2]|0;f=d+e|0;c[(c[a+16>>2]|0)+236>>2]=f;c[i+(f<<2)>>2]=a;d=g;f=c[(c[h>>2]|0)+196>>2]|0}g=e+-1|0;d=g+a|0;while(1){if((d|0)>=(a|0))break a;c[i+(d<<2)>>2]=0;f=c[(c[h>>2]|0)+196>>2]|0;d=d+1|0;a=c[f+(b<<6)>>2]|0}}else{g=e+-1|0;a=c[f+(b<<6)>>2]|0;while(1){a=a+-1|0;if((a|0)<=(d|0))break;j=c[i+(a<<2)>>2]|0;f=g+a|0;c[(c[j+16>>2]|0)+236>>2]=f;c[i+(f<<2)>>2]=j}f=e+d|0;a=d;while(1){a=a+1|0;if((a|0)>=(f|0))break;c[i+(a<<2)>>2]=0}a=c[(c[h>>2]|0)+196>>2]|0;f=a;a=c[a+(b<<6)>>2]|0}while(0);c[f+(b<<6)>>2]=g+a;return}function Tk(a){a=a|0;var b=0;Gk(a);b=c[a+16>>2]|0;c[b+220>>2]=1;c[c[b+216>>2]>>2]=c[b+192>>2];ti(a);_h(a,0);Uk(a);Nk(a);Vk(a);return}function Uk(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;k=Wf(d)|0;l=d+16|0;f=c[l>>2]|0;j=b[f+236>>1]|0;e=j<<16>>16;m=k+16|0;if(j<<16>>16>0)a[(c[(c[m>>2]|0)+196>>2]|0)+(e+-1<<6)+49>>0]=0;j=e;while(1){if((j|0)>(b[f+238>>1]|0))break;i=c[(c[(c[(c[f+268>>2]|0)+(j<<2)>>2]|0)+16>>2]|0)+236>>2]|0;Sk(k,j,i,c[(c[f+196>>2]|0)+(j<<6)>>2]|0);g=0;h=i;while(1){f=c[l>>2]|0;e=c[f+196>>2]|0;if((g|0)>=(c[e+(j<<6)>>2]|0))break;e=c[(c[e+(j<<6)+4>>2]|0)+(g<<2)>>2]|0;c[(c[(c[(c[m>>2]|0)+196>>2]|0)+(j<<6)+4>>2]|0)+(h<<2)>>2]=e;f=c[e+16>>2]|0;c[f+236>>2]=h;if((a[f+156>>0]|0)==1)c[e+24>>2]=to(k)|0;eh(d,e);ch(k,e);f=(c[m>>2]|0)+232|0;c[f>>2]=(c[f>>2]|0)+1;g=g+1|0;h=h+1|0}h=c[(c[m>>2]|0)+196>>2]|0;c[e+(j<<6)+4>>2]=(c[h+(j<<6)+4>>2]|0)+(i<<2);a[h+(j<<6)+49>>0]=0;j=j+1|0}e=c[m>>2]|0;if((j|0)<(b[e+238>>1]|0))a[(c[e+196>>2]|0)+(j<<6)+49>>0]=0;a[f+272>>0]=1;return}function Vk(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=a+16|0;d=c[i>>2]|0;h=b[d+236>>1]|0;while(1){if((h|0)>(b[d+238>>1]|0))break;f=c[(c[d+268>>2]|0)+(h<<2)>>2]|0;g=f+16|0;while(1){d=c[g>>2]|0;e=c[c[d+180>>2]>>2]|0;if(!e)break;Yg(e)}while(1){d=c[c[d+172>>2]>>2]|0;if(!d)break;Yg(d);d=c[g>>2]|0}eh(Wf(a)|0,f);c[(c[(c[i>>2]|0)+268>>2]|0)+(h<<2)>>2]=0;h=h+1|0;d=c[i>>2]|0}return}function Wk(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+16|0;n=o;f=eo(b)|0;while(1){if(!f)break;e=f+16|0;d=c[e>>2]|0;if((a[d+159>>0]|0)==7){NA(f);d=c[e>>2]|0}c[d+212>>2]=0;f=fo(b,f)|0}m=b+16|0;k=1;while(1){d=c[m>>2]|0;if((k|0)>(c[d+180>>2]|0))break;h=c[(c[d+184>>2]|0)+(k<<2)>>2]|0;i=h+16|0;d=eo(h)|0;a:while(1){if(!d)break;j=fo(h,d)|0;e=d+16|0;if(a[(c[e>>2]|0)+159>>0]|0){f=En(d)|0;g=En(b)|0;c[n>>2]=f;c[n+4>>2]=g;$l(0,80591,n)|0;ro(h,d)|0;d=j;continue}OA(d,c[(c[i>>2]|0)+264>>2]|0);g=c[e>>2]|0;c[g+212>>2]=h;a[g+159>>0]=7;g=Qm(h,d)|0;while(1){if(!g){d=j;continue a}d=c[(c[g+16>>2]|0)+172>>2]|0;b:do if(d|0)do{e=d+-48|0;f=c[(c[((c[d>>2]&3|0)==2?d:e)+40>>2]|0)+16>>2]|0;if((a[f+156>>0]|0)!=1)break b;c[f+212>>2]=h;d=c[c[(c[(c[((c[d>>2]&3|0)==2?d:e)+40>>2]|0)+16>>2]|0)+180>>2]>>2]|0}while((d|0)!=0);while(0);g=Sm(h,g)|0}}k=k+1|0}l=o;return}function Xk(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;k=e+16|0;g=ww((b[(c[k>>2]|0)+238>>1]<<2)+8|0)|0;f=c[k>>2]|0;c[f+268>>2]=g;g=0;h=b[f+236>>1]|0;while(1){if((h|0)>(b[f+238>>1]|0))break;f=gh(d)|0;c[(c[(c[k>>2]|0)+268>>2]|0)+(h<<2)>>2]=f;j=c[f+16>>2]|0;c[j+232>>2]=h;a[j+159>>0]=7;c[j+212>>2]=e;if(g|0){j=(c[(bh(g,f,0)|0)+16>>2]|0)+154|0;b[j>>1]=(b[j>>1]|0)*1e3}g=f;h=h+1|0;f=c[k>>2]|0}j=eo(e)|0;while(1){f=c[k>>2]|0;if(!j)break;h=(c[(c[f+268>>2]|0)+(c[(c[j+16>>2]|0)+232>>2]<<2)>>2]|0)+16|0;f=(c[h>>2]|0)+216|0;c[f>>2]=(c[f>>2]|0)+1;f=Qm(e,j)|0;while(1){if(!f)break;i=c[f>>2]|0;d=f+-48|0;g=c[(c[(c[((i&3|0)==3?f:f+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0;while(1){if((g|0)>=(c[(c[(c[((i&3|0)==2?f:d)+40>>2]|0)+16>>2]|0)+232>>2]|0))break;i=(c[(c[c[(c[h>>2]|0)+180>>2]>>2]|0)+16>>2]|0)+168|0;b[i>>1]=(b[i>>1]|0)+1<<16>>16;g=g+1|0;i=c[f>>2]|0}f=Sm(e,f)|0}j=fo(e,j)|0}d=b[f+238>>1]|0;i=f+268|0;f=b[f+236>>1]|0;while(1){if((f|0)>(d|0))break;g=(c[(c[(c[i>>2]|0)+(f<<2)>>2]|0)+16>>2]|0)+216|0;h=c[g>>2]|0;if((h|0)>1)c[g>>2]=h+-1;f=f+1|0}return}function Yk(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;k=(c[(c[e+16>>2]|0)+212>>2]|0)+16|0;e=c[k>>2]|0;j=f+1|0;if((j|0)!=(a[e+273>>0]|0)){i=b[e+236>>1]|0;while(1){h=b[e+238>>1]|0;if((i|0)>(h<<16>>16|0))break;ni(d,c[(c[e+268>>2]|0)+(i<<2)>>2]|0);i=i+1|0;e=c[k>>2]|0}i=b[e+236>>1]|0;while(1){if((i|0)>(h<<16>>16|0))break;oi(g,c[(c[e+268>>2]|0)+(i<<2)>>2]|0,f);d=c[k>>2]|0;i=i+1|0;h=b[d+238>>1]|0;e=d}a[e+273>>0]=j}return}function Zk(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;h=eo(b)|0;while(1){if(!h)break;c[(c[h+16>>2]|0)+212>>2]=0;g=Qm(b,h)|0;while(1){if(!g)break;d=c[(c[g+16>>2]|0)+172>>2]|0;a:do if(d|0)do{e=d+-48|0;f=c[(c[((c[d>>2]&3|0)==2?d:e)+40>>2]|0)+16>>2]|0;if((a[f+156>>0]|0)!=1)break a;c[f+212>>2]=0;d=c[c[(c[(c[((c[d>>2]&3|0)==2?d:e)+40>>2]|0)+16>>2]|0)+180>>2]>>2]|0}while((d|0)!=0);while(0);g=Sm(b,g)|0}h=fo(b,h)|0}_k(b);return}function _k(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;e=b+16|0;d=1;while(1){f=c[e>>2]|0;if((d|0)>(c[f+180>>2]|0))break;_k(c[(c[f+184>>2]|0)+(d<<2)>>2]|0);d=d+1|0}i=eo(b)|0;while(1){if(!i)break;d=(c[i+16>>2]|0)+212|0;if(!(c[d>>2]|0))c[d>>2]=b;h=Qm(b,i)|0;while(1){if(!h)break;d=c[(c[h+16>>2]|0)+172>>2]|0;a:do if(d|0)do{e=c[d>>2]|0;g=d+-48|0;f=c[(c[((e&3|0)==2?d:g)+40>>2]|0)+16>>2]|0;if((a[f+156>>0]|0)!=1)break a;f=f+212|0;if(!(c[f>>2]|0)){c[f>>2]=b;e=c[d>>2]|0}d=c[c[(c[(c[((e&3|0)==2?d:g)+40>>2]|0)+16>>2]|0)+180>>2]>>2]|0}while((d|0)!=0);while(0);h=Sm(b,h)|0}i=fo(b,i)|0}return}function $k(a){a=a|0;var b=0,c=0,d=0;d=jB(a)|0;c=eo(a)|0;while(1){if(!c)break;b=Qm(a,c)|0;while(1){if(!b)break;al(b,d);b=Sm(a,b)|0}c=fo(a,c)|0}Ll(d)|0;return}function al(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0;M=l;l=l+320|0;H=M+296|0;G=M+280|0;x=M+136|0;w=M+120|0;n=M+104|0;i=M+88|0;f=M+80|0;E=M+16|0;z=M;j=M+264|0;k=M+248|0;m=M+232|0;o=M+216|0;A=M+200|0;B=M+184|0;y=M+168|0;D=M+152|0;g=bl(Jm(a,80645)|0,b)|0;q=bl(Jm(a,80651)|0,b)|0;r=(q|0)!=0;b=(g|0)!=0;do if(b|r?(L=a+16|0,e=c[(c[L>>2]|0)+8>>2]|0,e|0):0){if((c[e+4>>2]|0)>1){K=En(c[((c[a>>2]&3|0)==3?a:a+48|0)+40>>2]|0)|0;L=En(c[((c[a>>2]&3|0)==2?a:a+-48|0)+40>>2]|0)|0;c[f>>2]=K;c[f+4>>2]=L;$l(0,80657,f)|0;break}I=c[e>>2]|0;e=c[I+4>>2]|0;p=c[a>>2]&3;s=a+-48|0;t=c[((p|0)==2?a:s)+40>>2]|0;u=a+48|0;p=c[((p|0)==3?a:u)+40>>2]|0;J=xw(48)|0;v=I+12|0;c[J+12>>2]=c[v>>2];C=I+8|0;c[J+8>>2]=c[C>>2];do if(b){h=(c[g+16>>2]|0)+16|0;g=(c[t+16>>2]|0)+16|0;c[H>>2]=c[g>>2];c[H+4>>2]=c[g+4>>2];c[H+8>>2]=c[g+8>>2];c[H+12>>2]=c[g+12>>2];if(!(cl(H,h)|0)){o=En(c[((c[a>>2]&3|0)==3?a:u)+40>>2]|0)|0;F=En(c[((c[a>>2]&3|0)==2?a:s)+40>>2]|0)|0;K=Jm(a,80645)|0;c[i>>2]=o;c[i+4>>2]=F;c[i+8>>2]=K;$l(0,80698,i)|0;K=26;break}b=c[I>>2]|0;c[H>>2]=c[b>>2];c[H+4>>2]=c[b+4>>2];c[H+8>>2]=c[b+8>>2];c[H+12>>2]=c[b+12>>2];if(cl(H,h)|0){F=(c[p+16>>2]|0)+16|0;c[H>>2]=c[F>>2];c[H+4>>2]=c[F+4>>2];c[H+8>>2]=c[F+8>>2];c[H+12>>2]=c[F+12>>2];if(cl(H,h)|0){o=En(c[((c[a>>2]&3|0)==3?a:u)+40>>2]|0)|0;F=En(c[((c[a>>2]&3|0)==2?a:s)+40>>2]|0)|0;K=Jm(a,80645)|0;c[n>>2]=o;c[n+4>>2]=F;c[n+8>>2]=K;$l(0,80741,n)|0;K=26;break}if(!(c[C>>2]|0))ma(80783,80794,369,80805);o=I+16|0;c[G>>2]=c[b>>2];c[G+4>>2]=c[b+4>>2];c[G+8>>2]=c[b+8>>2];c[G+12>>2]=c[b+12>>2];c[H>>2]=c[o>>2];c[H+4>>2]=c[o+4>>2];c[H+8>>2]=c[o+8>>2];c[H+12>>2]=c[o+12>>2];dl(z,G,H,h);F=(c[I>>2]|0)+48|0;c[F>>2]=c[z>>2];c[F+4>>2]=c[z+4>>2];c[F+8>>2]=c[z+8>>2];c[F+12>>2]=c[z+12>>2];F=(c[I>>2]|0)+16|0;c[G>>2]=c[z>>2];c[G+4>>2]=c[z+4>>2];c[G+8>>2]=c[z+8>>2];c[G+12>>2]=c[z+12>>2];c[H>>2]=c[o>>2];c[H+4>>2]=c[o+4>>2];c[H+8>>2]=c[o+8>>2];c[H+12>>2]=c[o+12>>2];el(j,G,H);c[F>>2]=c[j>>2];c[F+4>>2]=c[j+4>>2];c[F+8>>2]=c[j+8>>2];c[F+12>>2]=c[j+12>>2];F=c[I>>2]|0;b=F+16|0;c[G>>2]=c[b>>2];c[G+4>>2]=c[b+4>>2];c[G+8>>2]=c[b+8>>2];c[G+12>>2]=c[b+12>>2];c[H>>2]=c[o>>2];c[H+4>>2]=c[o+4>>2];c[H+8>>2]=c[o+8>>2];c[H+12>>2]=c[o+12>>2];el(k,G,H);c[F>>2]=c[k>>2];c[F+4>>2]=c[k+4>>2];c[F+8>>2]=c[k+8>>2];c[F+12>>2]=c[k+12>>2];F=c[I>>2]|0;b=F+32|0;F=F+16|0;c[G>>2]=c[F>>2];c[G+4>>2]=c[F+4>>2];c[G+8>>2]=c[F+8>>2];c[G+12>>2]=c[F+12>>2];c[H>>2]=c[z>>2];c[H+4>>2]=c[z+4>>2];c[H+8>>2]=c[z+8>>2];c[H+12>>2]=c[z+12>>2];el(m,G,H);c[b>>2]=c[m>>2];c[b+4>>2]=c[m+4>>2];c[b+8>>2]=c[m+8>>2];c[b+12>>2]=c[m+12>>2];b=c[v>>2]|0;if(!b){F=3;break}F=(Ot(a,c[I>>2]|0,0,0,J,b)|0)+3|0;break}g=e+-1|0;b=0;while(1){if((b|0)>=(g|0))break;if(fl((c[I>>2]|0)+(b<<4)|0,h)|0)break;b=b+3|0}e=c[v>>2]|0;f=(e|0)!=0;if((b|0)==(g|0))if(f){F=J+32|0;m=I+32|0;n=(c[I>>2]|0)+(g<<4)|0;c[G>>2]=c[m>>2];c[G+4>>2]=c[m+4>>2];c[G+8>>2]=c[m+8>>2];c[G+12>>2]=c[m+12>>2];c[H>>2]=c[n>>2];c[H+4>>2]=c[n+4>>2];c[H+8>>2]=c[n+8>>2];c[H+12>>2]=c[n+12>>2];dl(o,G,H,h);c[F>>2]=c[o>>2];c[F+4>>2]=c[o+4>>2];c[F+8>>2]=c[o+8>>2];c[F+12>>2]=c[o+12>>2];F=g;break}else ma(80822,80794,387,80805);else{if(f)b=Ot(a,c[I>>2]|0,0,b,J,e)|0;F=b+3|0;break}}else K=26;while(0);if((K|0)==26){b=e+-1|0;if(!(c[v>>2]|0))F=b;else{F=J+32|0;o=I+32|0;c[F>>2]=c[o>>2];c[F+4>>2]=c[o+4>>2];c[F+8>>2]=c[o+8>>2];c[F+12>>2]=c[o+12>>2];F=b}}do if(r){f=(c[q+16>>2]|0)+16|0;r=(c[p+16>>2]|0)+16|0;c[H>>2]=c[r>>2];c[H+4>>2]=c[r+4>>2];c[H+8>>2]=c[r+8>>2];c[H+12>>2]=c[r+12>>2];if(!(cl(H,f)|0)){G=En(c[((c[a>>2]&3|0)==3?a:u)+40>>2]|0)|0;H=En(c[((c[a>>2]&3|0)==2?a:s)+40>>2]|0)|0;K=Jm(a,80651)|0;c[w>>2]=G;c[w+4>>2]=H;c[w+8>>2]=K;$l(0,80833,w)|0;K=52;break}b=(c[I>>2]|0)+(F<<4)|0;c[H>>2]=c[b>>2];c[H+4>>2]=c[b+4>>2];c[H+8>>2]=c[b+8>>2];c[H+12>>2]=c[b+12>>2];if(cl(H,f)|0){E=(c[t+16>>2]|0)+16|0;c[H>>2]=c[E>>2];c[H+4>>2]=c[E+4>>2];c[H+8>>2]=c[E+8>>2];c[H+12>>2]=c[E+12>>2];if(cl(H,f)|0){G=En(c[((c[a>>2]&3|0)==3?a:u)+40>>2]|0)|0;H=En(c[((c[a>>2]&3|0)==2?a:s)+40>>2]|0)|0;K=Jm(a,80651)|0;c[x>>2]=G;c[x+4>>2]=H;c[x+8>>2]=K;$l(0,80876,x)|0;K=52;break}if(!(c[v>>2]|0))ma(80822,80794,429,80805);x=J+32|0;c[G>>2]=c[b>>2];c[G+4>>2]=c[b+4>>2];c[G+8>>2]=c[b+8>>2];c[G+12>>2]=c[b+12>>2];c[H>>2]=c[x>>2];c[H+4>>2]=c[x+4>>2];c[H+8>>2]=c[x+8>>2];c[H+12>>2]=c[x+12>>2];dl(z,G,H,f);d=F+-3|0;E=(c[I>>2]|0)+(d<<4)|0;c[E>>2]=c[z>>2];c[E+4>>2]=c[z+4>>2];c[E+8>>2]=c[z+8>>2];c[E+12>>2]=c[z+12>>2];E=F+-1|0;b=(c[I>>2]|0)+(E<<4)|0;c[G>>2]=c[z>>2];c[G+4>>2]=c[z+4>>2];c[G+8>>2]=c[z+8>>2];c[G+12>>2]=c[z+12>>2];c[H>>2]=c[x>>2];c[H+4>>2]=c[x+4>>2];c[H+8>>2]=c[x+8>>2];c[H+12>>2]=c[x+12>>2];el(A,G,H);c[b>>2]=c[A>>2];c[b+4>>2]=c[A+4>>2];c[b+8>>2]=c[A+8>>2];c[b+12>>2]=c[A+12>>2];b=c[I>>2]|0;D=b+(F<<4)|0;b=b+(E<<4)|0;c[G>>2]=c[b>>2];c[G+4>>2]=c[b+4>>2];c[G+8>>2]=c[b+8>>2];c[G+12>>2]=c[b+12>>2];c[H>>2]=c[x>>2];c[H+4>>2]=c[x+4>>2];c[H+8>>2]=c[x+8>>2];c[H+12>>2]=c[x+12>>2];el(B,G,H);c[D>>2]=c[B>>2];c[D+4>>2]=c[B+4>>2];c[D+8>>2]=c[B+8>>2];c[D+12>>2]=c[B+12>>2];D=c[I>>2]|0;b=D+(F+-2<<4)|0;E=D+(E<<4)|0;c[G>>2]=c[E>>2];c[G+4>>2]=c[E+4>>2];c[G+8>>2]=c[E+8>>2];c[G+12>>2]=c[E+12>>2];c[H>>2]=c[z>>2];c[H+4>>2]=c[z+4>>2];c[H+8>>2]=c[z+8>>2];c[H+12>>2]=c[z+12>>2];el(y,G,H);c[b>>2]=c[y>>2];c[b+4>>2]=c[y+4>>2];c[b+8>>2]=c[y+8>>2];c[b+12>>2]=c[y+12>>2];b=c[C>>2]|0;if(!b)break;d=Qt(a,c[I>>2]|0,d,d,J,b)|0;break}e=F;while(1){if((e|0)>0)b=0;else break;while(1){if((b|0)==4)break;B=E+(b<<4)|0;A=(c[I>>2]|0)+(e-b<<4)|0;c[B>>2]=c[A>>2];c[B+4>>2]=c[A+4>>2];c[B+8>>2]=c[A+8>>2];c[B+12>>2]=c[A+12>>2];b=b+1|0}if(fl(E,f)|0){b=0;K=43;break}e=e+-3|0}a:do if((K|0)==43)while(1){K=0;if((b|0)==4)break a;K=(c[I>>2]|0)+(e-b<<4)|0;B=E+(b<<4)|0;c[K>>2]=c[B>>2];c[K+4>>2]=c[B+4>>2];c[K+8>>2]=c[B+8>>2];c[K+12>>2]=c[B+12>>2];b=b+1|0;K=43}while(0);if(e|0){d=e+-3|0;b=c[C>>2]|0;if(!b)break;d=Qt(a,c[I>>2]|0,d,F+-3|0,J,b)|0;break}if(!(c[C>>2]|0))ma(80783,80794,452,80805);else{d=J+16|0;E=I+16|0;a=c[I>>2]|0;c[G>>2]=c[E>>2];c[G+4>>2]=c[E+4>>2];c[G+8>>2]=c[E+8>>2];c[G+12>>2]=c[E+12>>2];c[H>>2]=c[a>>2];c[H+4>>2]=c[a+4>>2];c[H+8>>2]=c[a+8>>2];c[H+12>>2]=c[a+12>>2];dl(D,G,H,f);c[d>>2]=c[D>>2];c[d+4>>2]=c[D+4>>2];c[d+8>>2]=c[D+8>>2];c[d+12>>2]=c[D+12>>2];d=0;break}}else K=52;while(0);if((K|0)==52)if(!(c[C>>2]|0))d=0;else{d=J+16|0;K=I+16|0;c[d>>2]=c[K>>2];c[d+4>>2]=c[K+4>>2];c[d+8>>2]=c[K+8>>2];c[d+12>>2]=c[K+12>>2];d=0}b=F-d+1|0;e=J+4|0;c[e>>2]=b;c[J>>2]=xw(b<<4)|0;b=0;while(1){if((b|0)>=(c[e>>2]|0))break;K=(c[J>>2]|0)+(b<<4)|0;a=(c[I>>2]|0)+(d<<4)|0;c[K>>2]=c[a>>2];c[K+4>>2]=c[a+4>>2];c[K+8>>2]=c[a+8>>2];c[K+12>>2]=c[a+12>>2];d=d+1|0;b=b+1|0}$I(c[I>>2]|0);$I(I);c[c[(c[L>>2]|0)+8>>2]>>2]=J}while(0);l=M;return}function bl(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((b|0)!=0?(a[b>>0]|0)!=0:0){d=kB(d,b)|0;if(!d){c[e>>2]=b;$l(0,80996,e)|0;d=0}}else d=0;l=f;return d|0}function cl(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;d=+h[a>>3];if((+h[b>>3]<=d?d<=+h[b+16>>3]:0)?(c=+h[a+8>>3],+h[b+8>>3]<=c):0)a=c<=+h[b+24>>3]&1;else a=0;return a|0}function dl(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,g=0.0,i=0,j=0.0,k=0.0,m=0.0,n=0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0,v=0,w=0,x=0,y=0.0,z=0,A=0,B=0,C=0;C=l;l=l+464|0;n=C+48|0;B=C+32|0;u=C+16|0;v=C;w=C+364|0;x=C+264|0;z=C+164|0;A=C+64|0;q=+h[b>>3];r=+h[b+8>>3];s=+h[d>>3];t=+h[d+8>>3];c[u>>2]=c[e>>2];c[u+4>>2]=c[e+4>>2];c[u+8>>2]=c[e+8>>2];c[u+12>>2]=c[e+12>>2];e=e+16|0;c[v>>2]=c[e>>2];c[v+4>>2]=c[e+4>>2];c[v+8>>2]=c[e+8>>2];c[v+12>>2]=c[e+12>>2];k=+h[u>>3];if((s=+h[u+8>>3]):0)?f<=+h[v+8>>3]:0){o=f;p=k}else i=4;do if((i|0)==4){j=+h[v>>3];if(s>j){g=r+ +(~~((j-q)*(r-t)/(q-s))|0);f=+h[u+8>>3];if(g>=f?g<=+h[v+8>>3]:0){o=g;p=j;break}}else f=+h[u+8>>3];if(t=k)|!(m<=j))):0){o=f;p=m;break}f=+h[v+8>>3];if(t>f?(y=q+ +(~~((f-r)*(q-s)/(r-t))|0),!(!(y>=k)|!(y<=j))):0){o=f;p=y;break};c[n>>2]=c[b>>2];c[n+4>>2]=c[b+4>>2];c[n+8>>2]=c[b+8>>2];c[n+12>>2]=c[b+12>>2];w=kl(n,w)|0;c[n>>2]=c[d>>2];c[n+4>>2]=c[d+4>>2];c[n+8>>2]=c[d+8>>2];c[n+12>>2]=c[d+12>>2];x=kl(n,x)|0;c[n>>2]=c[u>>2];c[n+4>>2]=c[u+4>>2];c[n+8>>2]=c[u+8>>2];c[n+12>>2]=c[u+12>>2];z=kl(n,z)|0;c[n>>2]=c[v>>2];c[n+4>>2]=c[v+4>>2];c[n+8>>2]=c[v+8>>2];c[n+12>>2]=c[v+12>>2];A=kl(n,A)|0;c[B>>2]=w;c[B+4>>2]=x;c[B+8>>2]=z;c[B+12>>2]=A;$l(1,80918,B)|0;ma(123205,80794,78,80970)}while(0);h[a>>3]=p;h[a+8>>3]=o;l=C;return}function el(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=(+h[c+8>>3]+ +h[b+8>>3])*.5;h[a>>3]=(+h[c>>3]+ +h[b>>3])*.5;h[a+8>>3]=d;return}function fl(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0.0,g=0,i=0,j=0,k=0,m=0;m=l;l=l+80|0;j=m+16|0;k=m;e=0;while(1){if((e|0)==4)break;i=j+(e<<4)|0;g=a+(e<<4)|0;c[i>>2]=c[g>>2];c[i+4>>2]=c[g+4>>2];c[i+8>>2]=c[g+8>>2];c[i+12>>2]=c[g+12>>2];e=e+1|0}e=b+8|0;i=b+24|0;d=+gl(a,0.0,1.0,+h[b>>3],+h[e>>3],+h[i>>3]);if(d>=0.0&d<2.0)QA(k,j,3,d,a,0);else d=2.0;g=b+16|0;f=+gl(a,0.0,d>1.0?1.0:d,+h[g>>3],+h[e>>3],+h[i>>3]);if(f>=0.0&f1.0?1.0:d,+h[e>>3],+h[b>>3],+h[g>>3]);if(f>=0.0&f1.0?1.0:d,+h[i>>3],+h[b>>3],+h[g>>3]);if(f>=0.0&f>3]-d))<=.005){b=+h[a+56>>3];b=!(b>=e)|!(b<=f)?-1.0:c;break a}break}default:{}}QA(i,a,3,.5,j,k);g=(c+b)*.5;b=+gl(j,b,g,d,e,f);if(!(b>=0.0))b=+gl(k,g,c,d,e,f)}while(0);l=m;return +b}function hl(a,b,c,d,e,f){a=a|0;b=+b;c=+c;d=+d;e=+e;f=+f;var g=0.0,i=0,j=0,k=0,m=0;m=l;l=l+144|0;j=m+80|0;k=m+16|0;i=m;a:do if(!(b==c)){switch(il(a,d)|0){case 0:{b=-1.0;break a}case 1:{if(+B(+(+h[a+56>>3]-d))<=.005){b=+h[a+48>>3];b=!(b>=e)|!(b<=f)?-1.0:c;break a}break}default:{}}QA(i,a,3,.5,j,k);g=(c+b)*.5;b=+hl(j,b,g,d,e,f);if(!(b>=0.0))b=+hl(k,g,c,d,e,f)}while(0);l=m;return +b}function il(a,b){a=a|0;b=+b;var c=0,d=0,e=0,f=0.0,g=0,i=0;f=+h[a+8>>3];e=fb&1;c=1;d=e;e=(e|0)==0&1;while(1){if((c|0)==4)break;f=+h[a+(c<<4)+8>>3];i=fb&1;g=e+((d|0)!=0&(i|0)!=(d|0)&1)|0;c=c+1|0;d=i;e=g}return e|0}function jl(a,b){a=a|0;b=+b;var c=0,d=0,e=0,f=0.0,g=0,i=0;f=+h[a>>3];e=fb&1;c=1;d=e;e=(e|0)==0&1;while(1){if((c|0)==4)break;f=+h[a+(c<<4)>>3];i=fb&1;g=e+((d|0)!=0&(i|0)!=(d|0)&1)|0;c=c+1|0;d=i;e=g}return e|0}function kl(a,b){a=a|0;b=b|0;var c=0,d=0,e=0.0;c=l;l=l+16|0;d=c;e=+h[a+8>>3];h[d>>3]=+h[a>>3];h[d+8>>3]=e;qL(b,80984,d)|0;l=c;return b|0}function ll(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0;v=l;l=l+16|0;s=v;u=4;t=_I(40)|0;c[t>>2]=0;r=a+16|0;e=c[r>>2]|0;a:do if(((b[e+238>>1]|0)-(b[e+236>>1]|0)|0)>=2){m=1;d=e;e=c[e+196>>2]|0;b:while(1){n=m+1|0;if(!(c[e+(n<<6)>>2]|0)){q=15;break}else k=0;while(1){h=c[e+(m<<6)>>2]|0;if((k|0)>=(h|0)){m=n;continue b}j=c[(c[e+(m<<6)+4>>2]|0)+(k<<2)>>2]|0;o=0;d=_(18,j|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=TN(c[f>>2]|0,t|0,u|0)|0;if(!g)Ua(f|0,p|0);z=p}else g=-1;if((g|0)==1){d=z;break b}if(d<<24>>24){i=k;d=h;while(1){g=i+1|0;if((g|0)>=(d|0))break;o=0;d=$(17,j|0,c[(c[e+(m<<6)+4>>2]|0)+(g<<2)>>2]|0)|0;e=o;o=0;if((e|0)!=0&(p|0)!=0){f=TN(c[e>>2]|0,t|0,u|0)|0;if(!f)Ua(e|0,p|0);z=p}else f=-1;if((f|0)==1){d=z;break b}if(!(d<<24>>24))break;d=c[(c[r>>2]|0)+196>>2]|0;i=g;e=d;d=c[d+(m<<6)>>2]|0}if((g-k|0)>1){o=0;ka(6,a|0,m|0,k|0,i|0,1);d=o;o=0;if((d|0)!=0&(p|0)!=0){e=TN(c[d>>2]|0,t|0,u|0)|0;if(!e)Ua(d|0,p|0);z=p}else e=-1;if((e|0)==1){d=z;break b}}}e=c[r>>2]|0;k=k+1|0;d=e;e=c[e+196>>2]|0}}c:do if((q|0)==15){while(1){if((m|0)>0)k=0;else break;while(1){e=c[d+196>>2]|0;h=c[e+(m<<6)>>2]|0;if((k|0)>=(h|0))break;j=c[(c[e+(m<<6)+4>>2]|0)+(k<<2)>>2]|0;o=0;d=_(19,j|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=TN(c[f>>2]|0,t|0,u|0)|0;if(!g)Ua(f|0,p|0);z=p}else g=-1;if((g|0)==1){d=z;break c}if(d<<24>>24){i=k;d=h;while(1){g=i+1|0;if((g|0)>=(d|0))break;o=0;d=$(18,j|0,c[(c[e+(m<<6)+4>>2]|0)+(g<<2)>>2]|0)|0;e=o;o=0;if((e|0)!=0&(p|0)!=0){f=TN(c[e>>2]|0,t|0,u|0)|0;if(!f)Ua(e|0,p|0);z=p}else f=-1;if((f|0)==1){d=z;break c}if(!(d<<24>>24))break;d=c[(c[r>>2]|0)+196>>2]|0;i=g;e=d;d=c[d+(m<<6)>>2]|0}if((g-k|0)>1){o=0;ka(6,a|0,m|0,k|0,i|0,0);d=o;o=0;if((d|0)!=0&(p|0)!=0){e=TN(c[d>>2]|0,t|0,u|0)|0;if(!e)Ua(d|0,p|0);z=p}else e=-1;if((e|0)==1){d=z;break c}}}k=k+1|0;d=c[r>>2]|0}m=m+-1|0;q=15}t=SN(167760,1,t|0,u|0)|0;u=z;o=0;d=o;o=0;if((d|0)!=0&(p|0)!=0){e=TN(c[d>>2]|0,t|0,u|0)|0;if(!e)Ua(d|0,p|0);z=p}else e=-1;if((e|0)==1)d=z;else d=0}while(0);d:while(1){if(d){o=0;aa(11,3,81024,s|0)|0;d=o;o=0;if((d|0)!=0&(p|0)!=0){e=TN(c[d>>2]|0,t|0,u|0)|0;if(!e)Ua(d|0,p|0);z=p}else e=-1;if((e|0)==1){d=z;continue}else break}else f=1;while(1){d=c[r>>2]|0;if((f|0)>(c[d+180>>2]|0))break a;o=0;fa(85,c[(c[d+184>>2]|0)+(f<<2)>>2]|0);d=o;o=0;if((d|0)!=0&(p|0)!=0){e=TN(c[d>>2]|0,t|0,u|0)|0;if(!e)Ua(d|0,p|0);z=p}else e=-1;if((e|0)==1){d=z;continue d}f=f+1|0}}}while(0);$I(t|0);l=v;return}function ml(b){b=b|0;b=c[b+16>>2]|0;if(((a[b+156>>0]|0)==1?(c[b+176>>2]|0)==1:0)?(c[b+184>>2]|0)==1:0)b=(c[b+104>>2]|0)==0&1;else b=0;return b|0}function nl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+80|0;h=i+40|0;g=i;e=c[c[(c[a+16>>2]|0)+172>>2]>>2]|0;a=c[c[(c[b+16>>2]|0)+172>>2]>>2]|0;if(((ml(b)|0)<<24>>24!=0?(c[((c[e>>2]&3|0)==3?e:e+48|0)+40>>2]|0)==(c[((c[a>>2]&3|0)==3?a:a+48|0)+40>>2]|0):0)?(tl(e,a)|0)<<24>>24!=0:0){d=(c[a+16>>2]|0)+16|0;f=g;a=(c[e+16>>2]|0)+16|0;b=f+40|0;do{c[f>>2]=c[a>>2];f=f+4|0;a=a+4|0}while((f|0)<(b|0));f=h;a=d;b=f+40|0;do{c[f>>2]=c[a>>2];f=f+4|0;a=a+4|0}while((f|0)<(b|0));a=(Xf(g,h)|0)==0&1}else a=0;l=i;return a|0}function ol(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=a+16|0;q=c[(c[(c[(c[t>>2]|0)+196>>2]|0)+(b<<6)+4>>2]|0)+(d<<2)>>2]|0;p=d+1|0;m=(f|0)==1;n=q+16|0;l=p;while(1){if((l|0)>(e|0)){g=e;s=p;break}o=c[(c[(c[(c[t>>2]|0)+196>>2]|0)+(b<<6)+4>>2]|0)+(l<<2)>>2]|0;k=o+16|0;a:do if(m)while(1){d=c[k>>2]|0;j=c[c[d+180>>2]>>2]|0;if(!j)break a;h=c[(c[n>>2]|0)+180>>2]|0;i=j+-48|0;f=0;while(1){d=c[h+(f<<2)>>2]|0;if(!d){r=8;break}if((c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0)==(c[((c[j>>2]&3|0)==2?j:i)+40>>2]|0))break;else f=f+1|0}if((r|0)==8){r=0;d=bh(q,c[((c[j>>2]&3|0)==2?j:i)+40>>2]|0,j)|0}while(1){f=c[c[(c[k>>2]|0)+172>>2]>>2]|0;if(!f)break;jh(f,d);Yg(f)}Yg(j)}else while(1){d=c[k>>2]|0;j=c[c[d+172>>2]>>2]|0;if(!j)break a;h=c[(c[n>>2]|0)+172>>2]|0;i=j+48|0;f=0;while(1){d=c[h+(f<<2)>>2]|0;if(!d){r=17;break}if((c[((c[d>>2]&3|0)==3?d:d+48|0)+40>>2]|0)==(c[((c[j>>2]&3|0)==3?j:i)+40>>2]|0))break;else f=f+1|0}if((r|0)==17){r=0;d=bh(c[((c[j>>2]&3|0)==3?j:i)+40>>2]|0,q,j)|0}while(1){f=c[c[(c[k>>2]|0)+180>>2]>>2]|0;if(!f)break;jh(f,d);Yg(f)}Yg(j)}while(0);if((c[d+176>>2]|0)!=(0-(c[d+184>>2]|0)|0)){r=23;break}eh(a,o);l=l+1|0}if((r|0)==23)ma(81160,81204,115,81211);while(1){g=g+1|0;d=c[(c[t>>2]|0)+196>>2]|0;f=d+(b<<6)|0;if((g|0)>=(c[f>>2]|0))break;e=c[d+(b<<6)+4>>2]|0;r=c[e+(g<<2)>>2]|0;c[e+(s<<2)>>2]=r;c[(c[r+16>>2]|0)+236>>2]=s;s=s+1|0}c[f>>2]=s;c[(c[d+(b<<6)+4>>2]|0)+(s<<2)>>2]=0;return}function pl(b){b=b|0;b=c[b+16>>2]|0;if(((a[b+156>>0]|0)==1?(c[b+184>>2]|0)==1:0)?(c[b+176>>2]|0)==1:0)b=(c[b+104>>2]|0)==0&1;else b=0;return b|0}function ql(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+80|0;h=i+40|0;g=i;e=c[c[(c[a+16>>2]|0)+180>>2]>>2]|0;a=c[c[(c[b+16>>2]|0)+180>>2]>>2]|0;if(((pl(b)|0)<<24>>24!=0?(c[((c[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0)==(c[((c[a>>2]&3|0)==2?a:a+-48|0)+40>>2]|0):0)?(tl(e,a)|0)<<24>>24!=0:0){d=(c[a+16>>2]|0)+56|0;f=g;a=(c[e+16>>2]|0)+56|0;b=f+40|0;do{c[f>>2]=c[a>>2];f=f+4|0;a=a+4|0}while((f|0)<(b|0));f=h;a=d;b=f+40|0;do{c[f>>2]=c[a>>2];f=f+4|0;a=a+4|0}while((f|0)<(b|0));a=(Xf(g,h)|0)==0&1}else a=0;l=i;return a|0}function rl(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;r=l;l=l+32|0;p=r+16|0;o=r;m=d+16|0;f=c[m>>2]|0;e=b[f+236>>1]|0;while(1){if((e|0)>(b[f+238>>1]|0))break;c[(c[f+268>>2]|0)+(e<<2)>>2]=0;e=e+1|0;f=c[m>>2]|0}jj(d);j=eo(d)|0;while(1){if(!j)break;sl(d,j);i=Qm(d,j)|0;while(1){if(!i)break;else f=i;while(1){e=c[(c[f+16>>2]|0)+172>>2]|0;if(!e)break;else f=e}h=i+-48|0;while(1){e=f+-48|0;g=c[((c[f>>2]&3|0)==2?f:e)+40>>2]|0;if((c[(c[g+16>>2]|0)+232>>2]|0)>=(c[(c[(c[((c[i>>2]&3|0)==2?i:h)+40>>2]|0)+16>>2]|0)+232>>2]|0))break;sl(d,g);f=c[c[(c[(c[((c[f>>2]&3|0)==2?f:e)+40>>2]|0)+16>>2]|0)+180>>2]>>2]|0}i=Sm(d,i)|0}j=fo(d,j)|0}e=c[m>>2]|0;i=b[e+236>>1]|0;while(1){if((i|0)>(b[e+238>>1]|0)){k=1;n=e;break}e=c[(c[e+268>>2]|0)+(i<<2)>>2]|0;j=c[(c[(c[(Wf(d)|0)+16>>2]|0)+196>>2]|0)+(i<<6)+4>>2]|0;f=e+16|0;if((c[j+(c[(c[f>>2]|0)+236>>2]<<2)>>2]|0)!=(e|0)){q=17;break}h=c[(c[(c[(Wf(d)|0)+16>>2]|0)+196>>2]|0)+(i<<6)+4>>2]|0;e=c[m>>2]|0;f=c[e+196>>2]|0;c[f+(i<<6)+4>>2]=h+(c[(c[(c[(c[e+268>>2]|0)+(i<<2)>>2]|0)+16>>2]|0)+236>>2]<<2);e=-1;h=0;a:while(1){if((h|0)>=(c[f+(i<<6)>>2]|0))break;f=c[(c[f+(i<<6)+4>>2]|0)+(h<<2)>>2]|0;if(!f)break;g=c[f+16>>2]|0;b:do if(!(a[g+156>>0]|0))if(!(Co(d,f)|0))break a;else e=h;else{f=c[c[g+172>>2]>>2]|0;while(1){if(!f)break b;g=c[(c[f+16>>2]|0)+116>>2]|0;if(!g)break;else f=g}if(Co(d,c[((c[f>>2]&3|0)==3?f:f+48|0)+40>>2]|0)|0){j=(Co(d,c[((c[f>>2]&3|0)==2?f:f+-48|0)+40>>2]|0)|0)==0;e=j?e:h}}while(0);h=h+1|0;f=c[(c[m>>2]|0)+196>>2]|0}if((e|0)==-1){c[p>>2]=En(d)|0;c[p+4>>2]=i;$l(0,81124,p)|0}j=c[m>>2]|0;c[(c[j+196>>2]|0)+(i<<6)>>2]=e+1;i=i+1|0;e=j}if((q|0)==17){p=En(e)|0;q=c[(c[f>>2]|0)+236>>2]|0;c[o>>2]=p;c[o+4>>2]=q;c[o+8>>2]=i;$l(1,81066,o)|0;Ua(167760,1)}while(1){if((k|0)>(c[n+180>>2]|0))break;rl(c[(c[n+184>>2]|0)+(k<<2)>>2]|0);k=k+1|0;n=c[m>>2]|0}l=r;return}function sl(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[b+16>>2]|0;a=(c[(c[a+16>>2]|0)+268>>2]|0)+(c[d+232>>2]<<2)|0;e=c[a>>2]|0;if(!((e|0)!=0?(c[(c[e+16>>2]|0)+236>>2]|0)<=(c[d+236>>2]|0):0))c[a>>2]=b;return}function tl(b,d){b=b|0;d=d|0;var e=0,f=0;while(1){f=c[b+16>>2]|0;if(!(a[f+112>>0]|0))break;b=c[f+116>>2]|0}while(1){e=c[d+16>>2]|0;if(!(a[e+112>>0]|0))break;d=c[e+116>>2]|0}if((a[f+153>>0]|0)==0?(a[e+153>>0]|0)==0:0){f=c[d>>2]&3;e=c[b>>2]&3;b=(O((c[(c[(c[((e|0)==3?b:b+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(c[(c[(c[((e|0)==2?b:b+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)|0,(c[(c[(c[((f|0)==3?d:d+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(c[(c[(c[((f|0)==2?d:d+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)|0)|0)>0&1}else b=0;return b|0}function ul(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+544|0;j=k+528|0;vl(j,k+512|0,k);e=(a[173898]|0)+1<<24>>24;a[173898]=e<<24>>24==0?1:e;e=c[b+16>>2]|0;c[e+220>>2]=0;c[e+232>>2]=0;e=(d|0)>0;d=eo(b)|0;while(1){if(!d)break;if(e?(h=c[d+16>>2]|0,i=c[h+212>>2]|0,(i|0)!=0):0){g=c[(c[(c[i+16>>2]|0)+268>>2]|0)+(c[h+232>>2]<<2)>>2]|0;f=7}else f=6;if((f|0)==6?(f=0,(d|0)==(LA(d)|0)):0){g=d;f=7}if((f|0)==7?(0,(a[(c[g+16>>2]|0)+157>>0]|0)!=(a[173898]|0)):0){wl(b);xl(j,b,g);yl(b)}d=fo(b,d)|0}zl(j);l=k;return}function vl(a,b,d){a=a|0;b=b|0;d=d|0;c[b>>2]=d;c[b+4>>2]=d+512;c[b+12>>2]=0;c[b+8>>2]=0;c[a>>2]=b;c[a+4>>2]=b;c[a+8>>2]=d;return}function wl(a){a=a|0;c[(c[a+16>>2]|0)+192>>2]=0;c[41979]=0;return}function xl(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l;l=l+32|0;p=q;Al(b,e);k=p+8|0;m=p+16|0;n=p+24|0;a:while(1){o=Bl(b)|0;if(!o)break;e=o+16|0;if((a[(c[e>>2]|0)+157>>0]|0)==(a[173898]|0))continue;Cl(d,o);h=c[e>>2]|0;g=h+180|0;j=c[g+4>>2]|0;i=p;c[i>>2]=c[g>>2];c[i+4>>2]=j;i=h+172|0;j=c[i+4>>2]|0;g=k;c[g>>2]=c[i>>2];c[g+4>>2]=j;g=h+188|0;j=c[g+4>>2]|0;i=m;c[i>>2]=c[g>>2];c[i+4>>2]=j;h=h+196|0;i=c[h+4>>2]|0;j=n;c[j>>2]=c[h>>2];c[j+4>>2]=i;j=3;while(1){if((j|0)<=-1)continue a;e=c[p+(j<<3)>>2]|0;b:do if(e|0){i=(c[p+(j<<3)+4>>2]|0)+-1|0;h=e+(i<<2)|0;while(1){if((i|0)<=-1)break b;f=c[h>>2]|0;g=c[f>>2]&3;e=c[((g|0)==2?f:f+-48|0)+40>>2]|0;if((e|0)==(o|0))e=c[((g|0)==3?f:f+48|0)+40>>2]|0;if((a[(c[e+16>>2]|0)+157>>0]|0)!=(a[173898]|0)?(e|0)==(LA(e)|0):0)Al(b,e);h=h+-4|0;i=i+-1|0}}while(0);j=j+-1|0}}l=q;return}function yl(a){a=a|0;var b=0,d=0,e=0,f=0;d=a+16|0;b=c[d>>2]|0;f=b+220|0;e=c[f>>2]|0;a=e+1|0;c[f>>2]=a;b=c[b+216>>2]|0;if(!b)a=xw(a<<2)|0;else a=zw(b,a<<2)|0;f=c[d>>2]|0;c[f+216>>2]=a;c[a+(e<<2)>>2]=c[f+192>>2];return}function zl(a){a=a|0;var b=0;a=c[(c[a>>2]|0)+12>>2]|0;while(1){if(!a)break;b=c[a+12>>2]|0;$I(c[a>>2]|0);$I(a);a=b}return}function Al(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+16|0;h=k+8|0;g=k;j=b+8|0;f=c[j>>2]|0;i=b+4|0;b=c[i>>2]|0;if((f|0)==(c[b+4>>2]|0)){f=c[b+12>>2]|0;if(!f){f=ww(16)|0;if(!f)$l(1,83988,g)|0;c[f+8>>2]=c[i>>2];c[f+12>>2]=0;b=ww(4e6)|0;c[f>>2]=b;if(!b){$l(1,81224,h)|0;b=c[f>>2]|0}c[f+4>>2]=b+4e6;c[(c[i>>2]|0)+12>>2]=f}c[i>>2]=f;f=c[f>>2]|0;c[j>>2]=f}a[(c[e+16>>2]|0)+157>>0]=(d[173898]|0)+1;c[j>>2]=f+4;c[f>>2]=e;l=k;return}function Bl(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;f=a+8|0;b=c[f>>2]|0;d=a+4|0;e=c[d>>2]|0;if((b|0)==(c[e>>2]|0))if((e|0)==(c[a>>2]|0))b=0;else{b=c[e+8>>2]|0;c[d>>2]=b;b=c[b+4>>2]|0;c[f>>2]=b;g=4}else g=4;if((g|0)==4){b=b+-4|0;c[f>>2]=b;b=c[b>>2]|0}return b|0}function Cl(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=c[b+16>>2]|0;g=f+232|0;c[g>>2]=(c[g>>2]|0)+1;g=c[d+16>>2]|0;a[g+157>>0]=a[173898]|0;b=c[41979]|0;e=g+168|0;if(!b){c[e>>2]=0;c[f+192>>2]=d}else{c[e>>2]=b;c[(c[b+16>>2]|0)+164>>2]=d}c[41979]=d;c[g+164>>2]=0;return}function Dl(b){b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0.0,o=0.0;m=b+16|0;d=(c[m>>2]|0)+192|0;while(1){d=c[d>>2]|0;if(!d)break;g=d+16|0;d=c[g>>2]|0;e=c[d+188>>2]|0;a:do if(!e)f=0;else{f=0;while(1){e=c[e+(f<<2)>>2]|0;if(!e){f=0;break a}El(e);d=c[g>>2]|0;f=f+1|0;e=c[d+188>>2]|0}}while(0);while(1){if((f|0)>=(c[d+208>>2]|0))break;e=c[(c[d+204>>2]|0)+(f<<2)>>2]|0;l=c[e>>2]&3;if((c[(c[(c[((l|0)==2?e:e+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)==(c[(c[(c[((l|0)==3?e:e+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)){El(e);d=c[g>>2]|0}f=f+1|0}d=d+164|0}l=c[m>>2]|0;d=c[l+196>>2]|0;if(!((c[d+56>>2]|0)==0?(c[l+180>>2]|0)<=0:0))i=13;b:do if((i|0)==13){i=c[d+4>>2]|0;g=0;c:while(1){d=c[i+(g<<2)>>2]|0;if(!d)break b;e=c[(c[d+16>>2]|0)+196>>2]|0;d=0;while(1){f=c[e+(d<<2)>>2]|0;if(!f)break;l=c[f+16>>2]|0;if(c[l+96>>2]|0?(a[l+113>>0]|0)==0:0)break c;d=d+1|0}g=g+1|0}Fl(b)}while(0);vi(b);e=0;d=(c[m>>2]|0)+192|0;while(1){d=c[d>>2]|0;if(!d)break;l=d+16|0;d=c[l>>2]|0;f=c[d+188>>2]|0;d:do if(f){k=0;while(1){g=c[f+(k<<2)>>2]|0;if(!g){k=0;break}i=c[g+16>>2]|0;j=c[i+96>>2]|0;do if(j)if(!(a[i+113>>0]|0)){Gl(g);f=c[l>>2]|0;e=1;d=f;f=c[f+188>>2]|0;break}else{h[i+136>>3]=+h[((c[(c[m>>2]|0)+116>>2]&1|0)==0?j+24|0:j+32|0)>>3];break}while(0);k=k+1|0}while(1){if((k|0)>=(c[d+208>>2]|0))break d;i=c[(c[d+204>>2]|0)+(k<<2)>>2]|0;j=c[i>>2]&3;g=c[((j|0)==3?i:i+48|0)+40>>2]|0;j=c[((j|0)==2?i:i+-48|0)+40>>2]|0;do if(!((g|0)==(j|0)?1:(c[(c[g+16>>2]|0)+232>>2]|0)!=(c[(c[j+16>>2]|0)+232>>2]|0))){f=i;do{j=c[f+16>>2]|0;f=c[j+172>>2]|0}while((f|0)!=0);f=a[j+113>>0]|0;g=c[i+16>>2]|0;a[g+113>>0]=f;g=c[g+96>>2]|0;if(g)if(!(f<<24>>24)){Gl(i);e=1;d=c[l>>2]|0;break}else{o=+h[((c[(c[m>>2]|0)+116>>2]&1|0)==0?g+24|0:g+32|0)>>3];j=j+136|0;n=+h[j>>3];h[j>>3]=o>n?o:n;break}}while(0);k=k+1|0}}while(0);d=d+164|0}if(e|0){oh(b);Ch(b)}return e|0}function El(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;d=c[b>>2]&3;i=c[((d|0)==3?b:b+48|0)+40>>2]|0;f=i+16|0;g=c[(c[f>>2]|0)+236>>2]|0;d=c[(c[(c[((d|0)==2?b:b+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0;h=(g|0)<(d|0);e=h?d:g;i=c[(c[(Wf(i)|0)+16>>2]|0)+196>>2]|0;f=i+(c[(c[f>>2]|0)+232>>2]<<6)+4|0;d=h?g:d;a:while(1){d=d+1|0;if((d|0)>=(e|0))break;g=c[(c[(c[f>>2]|0)+(d<<2)>>2]|0)+16>>2]|0;switch(a[g+156>>0]|0){case 0:break a;case 1:break;default:continue a}if(c[g+104>>2]|0)break}if((d|0)==(e|0))do{i=c[b+16>>2]|0;a[i+113>>0]=1;b=c[i+172>>2]|0}while((b|0)!=0);return}function Fl(a){a=a|0;var d=0,e=0,f=0,g=0;g=a+16|0;a=c[g>>2]|0;if(b[a+236>>1]|0)ma(81281,81264,190,81300);d=(b[a+238>>1]|0)+3|0;a=c[a+196>>2]|0;if(!a)a=xw(d<<6)|0;else a=zw(a,d<<6)|0;d=a+64|0;a=c[g>>2]|0;c[a+196>>2]=d;a=b[a+238>>1]|0;while(1){if((a|0)<=-1)break;f=a+-1|0;e=d+(a<<6)|0;a=d+(f<<6)|0;d=e+64|0;do{c[e>>2]=c[a>>2];e=e+4|0;a=a+4|0}while((e|0)<(d|0));a=f;d=c[(c[g>>2]|0)+196>>2]|0}c[d+(a<<6)+8>>2]=0;c[d+(a<<6)>>2]=0;e=ww(8)|0;g=c[g>>2]|0;f=c[g+196>>2]|0;c[f+(a<<6)+12>>2]=e;c[f+(a<<6)+4>>2]=e;c[f+(a<<6)+56>>2]=0;h[f+(a<<6)+24>>3]=1.0;h[f+(a<<6)+16>>3]=1.0;h[f+(a<<6)+40>>3]=1.0;h[f+(a<<6)+32>>3]=1.0;g=g+236|0;b[g>>1]=(b[g>>1]|0)+-1<<16>>16;return}function Gl(b){b=b|0;var d=0,e=0,f=0.0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0.0,q=0.0,r=0.0;j=b+16|0;if(c[(c[j>>2]|0)+96>>2]|0){m=b+48|0;k=Wf(c[((c[b>>2]&3|0)==3?b:m)+40>>2]|0)|0;d=c[(c[(c[((c[b>>2]&3|0)==3?b:m)+40>>2]|0)+16>>2]|0)+232>>2]|0;l=Hl(k,b)|0;n=k+16|0;e=c[n>>2]|0;g=c[e+196>>2]|0;o=d+-1|0;i=c[c[g+(o<<6)+4>>2]>>2]|0;if(!i)f=+h[g+(d<<6)+24>>3]+ +h[(c[(c[c[g+(d<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]+ +(c[e+252>>2]|0);else f=+h[(c[i+16>>2]|0)+24>>3]-+h[g+(o<<6)+16>>3];d=Il(k,o,l)|0;k=c[(c[j>>2]|0)+96>>2]|0;q=+h[k+24>>3];p=+h[k+32>>3];j=(c[(c[n>>2]|0)+116>>2]&1|0)==0;r=j?p:q;g=d+16|0;e=c[g>>2]|0;h[e+80>>3]=r;l=~~(r*.5);p=(j?q:p)*.5;h[e+96>>3]=p;h[e+88>>3]=p;c[e+104>>2]=k;h[e+24>>3]=+(l+~~f|0);e=bh(d,c[((c[b>>2]&3|0)==3?b:m)+40>>2]|0,b)|0;e=c[e+16>>2]|0;h[e+16>>3]=-+h[(c[g>>2]|0)+88>>3];h[e+56>>3]=+h[(c[(c[((c[b>>2]&3|0)==3?b:m)+40>>2]|0)+16>>2]|0)+96>>3];a[e+112>>0]=4;e=b+-48|0;d=bh(d,c[((c[b>>2]&3|0)==2?b:e)+40>>2]|0,b)|0;g=c[g>>2]|0;d=c[d+16>>2]|0;h[d+16>>3]=+h[g+96>>3];h[d+56>>3]=+h[(c[(c[((c[b>>2]&3|0)==2?b:e)+40>>2]|0)+16>>2]|0)+88>>3];a[d+112>>0]=4;d=c[(c[n>>2]|0)+196>>2]|0;e=d+(o<<6)+16|0;f=+(l|0);if(+h[e>>3]>3]=f;d=d+(o<<6)+24|0;if(+h[d>>3]>3]=f;c[g+112>>2]=b}return}function Hl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+32|0;j=n+8|0;f=n+4|0;g=n;d=c[b>>2]&3;e=c[((d|0)==3?b:b+48|0)+40>>2]|0;k=(c[(c[e+16>>2]|0)+232>>2]|0)+-1|0;a=c[(c[a+16>>2]|0)+196>>2]|0;h=c[a+(k<<6)+4>>2]|0;a=c[a+(k<<6)>>2]|0;k=j+8|0;c[k>>2]=-1;c[j>>2]=-1;m=j+12|0;c[m>>2]=a;i=j+4|0;c[i>>2]=a;Jl(e,c[((d|0)==2?b:b+-48|0)+40>>2]|0,f,g);f=c[f>>2]|0;g=c[g>>2]|0;d=0;e=a;b=-1;while(1){if((d|0)>=(e|0))break;e=e+-1|0;Kl(c[h+(d<<2)>>2]|0,j,f,g);if((d|0)!=(e|0))Kl(c[h+(e<<2)>>2]|0,j,f,g);a=c[i>>2]|0;b=c[j>>2]|0;if((a-b|0)<2)break;else d=d+1|0}if((b|0)>(a|0))a=(c[m>>2]|0)+(c[k>>2]|0)|0;else a=a+b|0;l=n;return (a+1|0)/2|0|0}function Il(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;g=a+16|0;f=c[(c[g>>2]|0)+196>>2]|0;e=f+(b<<6)|0;f=c[f+(b<<6)+4>>2]|0;if(!f)f=xw((c[e>>2]<<2)+8|0)|0;else f=zw(f,(c[e>>2]<<2)+8|0)|0;e=c[(c[g>>2]|0)+196>>2]|0;c[e+(b<<6)+4>>2]=f;e=c[e+(b<<6)>>2]|0;while(1){if((e|0)<=(d|0))break;h=e+-1|0;i=c[f+(h<<2)>>2]|0;c[f+(e<<2)>>2]=i;i=(c[i+16>>2]|0)+236|0;c[i>>2]=(c[i>>2]|0)+1;e=h}h=gh(a)|0;i=f+(d<<2)|0;c[i>>2]=h;h=c[h+16>>2]|0;c[h+236>>2]=d;c[h+232>>2]=b;g=(c[(c[g>>2]|0)+196>>2]|0)+(b<<6)|0;h=(c[g>>2]|0)+1|0;c[g>>2]=h;c[f+(h<<2)>>2]=0;return c[i>>2]|0}function Jl(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;a=c[(c[a+16>>2]|0)+236>>2]|0;b=c[(c[b+16>>2]|0)+236>>2]|0;f=(a|0)>(b|0);c[d>>2]=f?b:a;c[e>>2]=f?a:b;return}function Kl(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;m=l;l=l+16|0;h=m+4|0;g=m;b=c[b+16>>2]|0;do if((a[b+156>>0]|0)==1){k=c[b+236>>2]|0;if(c[b+176>>2]|0){i=c[b+180>>2]|0;b=0;g=0;h=0;while(1){j=c[i+(h<<2)>>2]|0;if(!j)break;n=c[(c[(c[((c[j>>2]&3|0)==2?j:j+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0;j=(n|0)>(e|0);b=j?((n|0)<(f|0)?b:1):b;g=j?g:1;h=h+1|0}if(g<<24>>24!=0&b<<24>>24==0){c[d>>2]=k+1;break}if(!(g<<24>>24==0&b<<24>>24!=0))break;c[d+4>>2]=k+-1;break}if((c[b+184>>2]|0)!=2)ma(81244,81264,63,81271);i=c[b+180>>2]|0;n=c[i>>2]|0;i=c[i+4>>2]|0;Jl(c[((c[n>>2]&3|0)==2?n:n+-48|0)+40>>2]|0,c[((c[i>>2]&3|0)==2?i:i+-48|0)+40>>2]|0,h,g);i=c[g>>2]|0;if((i|0)<=(e|0)){c[d>>2]=k;c[d+8>>2]=k;break}b=c[h>>2]|0;if((b|0)>=(f|0)){c[d+4>>2]=k;c[d+12>>2]=k;break}g=(b|0)<(e|0);h=(i|0)>(f|0);if(!(h&g)){if(!(!g?!((i|0)<(f|0)&(b|0)==(e|0)):0))c[d+8>>2]=k;if(!h?!((i|0)==(f|0)&(b|0)>(e|0)):0)break;c[d+12>>2]=k}}while(0);l=m;return}function Ll(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;do if((a|0)!=0?(c[a+24>>2]|0)<=0:0){h=c[a+4>>2]|0;g=h+32|0;b=c[g>>2]|0;if(b){b=cb[b&31](a,2,0,h)|0;if((b|0)<0){b=-1;break}}else b=0;if(c[a+28>>2]|0)Xl(a,0)|0;f=(b|0)==0;if(f){bb[c[c[a+16>>2]>>2]&31](a,0,64)|0;if((Tl(a)|0)>0){b=-1;break}d=a+8|0;b=c[d>>2]|0;if((c[b+12>>2]|0)>0){e=a+12|0;cb[c[e>>2]&31](a,c[b+8>>2]|0,0,h)|0;b=c[d>>2]|0}else e=a+12|0;cb[c[e>>2]&31](a,b,0,h)|0}b=c[a+20>>2]|0;if(b){if(f&(b|0)==1)cb[c[a+12>>2]&31](a,a,0,h)|0}else $I(a);b=c[g>>2]|0;if(!b)b=0;else{cb[b&31](a,6,0,h)|0;b=0}}else b=-1;while(0);return b|0}function Ml(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;f=a+4|0;n=c[f>>2]|0;a:do if(n)if(b){m=c[c[a+16>>2]>>2]|0;g=a+8|0;if(c[c[g>>2]>>2]&4096|0)Sl(a,0)|0;e=c[n+32>>2]|0;if(e|0?(cb[e&31](a,3,b,n)|0)<0:0){b=0;break}c[f>>2]=b;e=c[b+28>>2]|0;c[a+12>>2]=(e|0)==0?19:e;e=c[c[g>>2]>>2]|0;if(!(e&112)){do if(!(e&2))if(!(e&3))if(!(d&1))break;else{b=n;break a}else if((d&3|0)==3){b=n;break a}else break;else if(d&2|0){b=n;break a}while(0);h=Pl(a)|0;e=c[g>>2]|0;l=c[e>>2]|0;c[e>>2]=l&-4097;c[e+4>>2]=0;c[e+16>>2]=0;b:do if(l&3|0){l=c[e+8>>2]|0;f=l+(c[e+12>>2]<<2)|0;e=l;while(1){if(e>>>0>=f>>>0)break b;c[e>>2]=0;e=e+4|0}}while(0);i=(d&2|0)==0;j=b+8|0;k=b+4|0;l=b+24|0;while(1){if(!h){b=n;break a}d=c[h>>2]|0;if(i){e=c[j>>2]|0;if((e|0)<0)e=c[h+8>>2]|0;else e=h+(0-e)|0;g=c[k>>2]|0;e=e+(c[b>>2]|0)|0;if((g|0)<0)e=c[e>>2]|0;f=c[l>>2]|0;if(!f)e=Vl(0,e,g)|0;else e=bb[f&31](a,e,b)|0;c[h+4>>2]=e}bb[m&31](a,h,32)|0;h=d}}else b=n}else b=n;else{c[f>>2]=b;n=c[b+28>>2]|0;c[a+12>>2]=(n|0)==0?19:n}while(0);return b|0}function Nl(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;a=(c|0)==0;do if(!b)if(a)a=0;else a=_I(c)|0;else if(a){$I(b);a=0;break}else{a=bJ(b,c)|0;break}while(0);return a|0}function Ol(a){a=a|0;var b=0,d=0,e=0;e=a+8|0;b=c[e>>2]|0;d=c[b>>2]|0;a:do if(!(d&12)){if(!(d&3)){d=b+8|0;a=c[d>>2]|0;c[d>>2]=0;break}a=Pl(a)|0;d=c[e>>2]|0;b=c[d+8>>2]|0;d=b+(c[d+12>>2]<<2)|0;while(1){if(b>>>0>=d>>>0)break a;c[b>>2]=0;b=b+4|0}}else a=c[b+4>>2]|0;while(0);e=c[e>>2]|0;c[e>>2]=c[e>>2]&-4097;c[e+16>>2]=0;c[e+4>>2]=0;return a|0}function Pl(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+8|0;a=c[g>>2]|0;b=c[a>>2]|0;if(!(b&4096)){a:do if(!(b&3)){if(b&112|0){a=c[a+8>>2]|0;break}a=c[a+4>>2]|0;if(!a)a=0;else{while(1){b=a+4|0;d=c[b>>2]|0;if(!d){e=a;break}c[b>>2]=c[d>>2];c[d>>2]=a;a=d}while(1){b=c[e>>2]|0;if(!b)break a;d=c[b+4>>2]|0;if(!d){e=b;continue}while(1){c[b+4>>2]=c[d>>2];c[d>>2]=b;b=c[d+4>>2]|0;if(!b)break;else{f=d;d=b;b=f}}c[e>>2]=d;e=d}}}else{e=c[a+8>>2]|0;f=e+(c[a+12>>2]<<2)|0;b=0;a=0;while(1){if(e>>>0>=f>>>0)break a;d=c[e>>2]|0;if(d){if(!b){b=d;a=d}else c[b>>2]=d;while(1){d=c[b>>2]|0;if(!d)break;else b=d}c[e>>2]=b}e=e+4|0}}while(0);g=c[g>>2]|0;c[g+4>>2]=a;c[g>>2]=c[g>>2]|4096}else a=c[a+4>>2]|0;return a|0}function Ql(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;s=a+8|0;if(c[c[s>>2]>>2]&4096|0)Sl(a,0)|0;r=c[a+4>>2]|0;m=c[r>>2]|0;n=c[r+4>>2]|0;q=r+8|0;u=c[q>>2]|0;o=c[r+20>>2]|0;p=a+20|0;f=c[p>>2]&-32769;c[p>>2]=f;a:do if(!b){if(d&384|0){f=c[s>>2]|0;e=c[f+8>>2]|0;if(!e){e=0;break}if(d&256){e=c[e+4>>2]|0;c[f+4>>2]=e;if(!e){e=0;break}}else c[f+4>>2]=e;if((u|0)<0){e=c[e+8>>2]|0;break}else{e=e+(0-u)|0;break}}if(d&4098|0){e=c[s>>2]|0;if(c[e>>2]&144|0){e=0;break}e=c[e+8>>2]|0;if(!e){e=0;break}else{h=e;t=84;break}}if(!(d&64))e=0;else{i=r+16|0;b:do if((c[i>>2]|0)!=0|(u|0)<0){j=a+12|0;k=(u|0)<0;f=0-u|0;e=c[(c[s>>2]|0)+8>>2]|0;while(1){if(!e)break b;g=c[e>>2]|0;h=c[i>>2]|0;if(h|0){if(k)b=c[e+8>>2]|0;else b=e+f|0;ib[h&127](a,b,r)}if((c[q>>2]|0)>=0){e=g;continue}cb[c[j>>2]&31](a,e,0,r)|0;e=g}}while(0);e=c[s>>2]|0;c[e+4>>2]=0;c[e+8>>2]=0;c[(c[s>>2]|0)+16>>2]=0;e=0}}else{if(d&2049|0){g=r+12|0;e=c[g>>2]|0;h=(d&1|0)==0;if(!(h|(e|0)==0)){e=bb[e&31](a,b,r)|0;if(!e){e=0;break}else f=e}else f=b;do if((u|0)>-1)h=f+u|0;else{e=cb[c[a+12>>2]&31](a,0,12,r)|0;if(e|0){c[e+8>>2]=f;h=e;break}if(!(c[g>>2]|0)){e=0;break a}e=c[r+16>>2]|0;if(h|(e|0)==0){e=0;break a}ib[e&127](a,f,r);e=0;break a}while(0);g=c[s>>2]|0;e=c[g>>2]|0;do if(!(e&128)){if(!(e&16))if(!(e&32)){t=51;break}else{t=48;break}f=c[g+4>>2]|0;e=(f|0)!=0;if(!(d&8192)){if(!e){t=48;break}if((f|0)==(c[g+8>>2]|0)){t=48;break}r=f+4|0;a=c[r>>2]|0;c[h+4>>2]=a;c[a>>2]=h;c[h>>2]=f;c[r>>2]=h;break}else{if(!e){t=51;break}e=c[f>>2]|0;if(!e){t=51;break}c[h>>2]=e;c[e+4>>2]=h;c[h+4>>2]=f;c[f>>2]=h;break}}else if(!(d&8192))t=48;else t=51;while(0);if((t|0)==48){e=c[g+8>>2]|0;c[h>>2]=e;if(!e)e=h;else c[h+4>>2]=c[e+4>>2];c[e+4>>2]=h;c[(c[s>>2]|0)+8>>2]=h}else if((t|0)==51){f=g+8|0;e=c[f>>2]|0;if(!e){c[f>>2]=h;e=h}else{r=e+4|0;c[c[r>>2]>>2]=h;c[h+4>>2]=c[r>>2]}c[e+4>>2]=h;c[h>>2]=0}e=c[s>>2]|0;f=e+16|0;g=c[f>>2]|0;if((g|0)>-1)c[f>>2]=g+1;c[e+4>>2]=h;if((u|0)<0){e=c[h+8>>2]|0;break}else{e=h+(0-u)|0;break}}h=c[s>>2]|0;do if(!(d&512)){e=c[h+4>>2]|0;if(e|0){if((u|0)<0)g=c[e+8>>2]|0;else g=e+(0-u)|0;if((g|0)==(b|0))break}e=b+m|0;if((n|0)<0){b=c[e>>2]|0;t=68}else{b=e;t=68}}else t=68;while(0);if((t|0)==68){g=(u|0)<0;i=(n|0)<0;j=(o|0)==0;k=(n|0)<1;l=0-u|0;e=h+8|0;do{e=c[e>>2]|0;if(!e){e=0;break a}if(g)f=c[e+8>>2]|0;else f=e+l|0;f=f+m|0;if(i)f=c[f>>2]|0;do if(j)if(k){f=yJ(b,f)|0;break}else{f=eL(b,f,n)|0;break}else f=cb[o&31](a,b,f,r)|0;while(0)}while((f|0)!=0);f=c[p>>2]|0}c[p>>2]=f|32768;if(!(d&4098)){do if(!(d&8)){f=c[s>>2]|0;if(!(d&16)){c[f+4>>2]=e;break}if((e|0)==(c[f+8>>2]|0)){c[f+4>>2]=0;e=0;break a}else{e=e+4|0;t=108;break}}else{f=c[s>>2]|0;t=108}while(0);if((t|0)==108){e=c[e>>2]|0;c[f+4>>2]=e;if(!e){e=0;break}}if((u|0)<0){e=c[e+8>>2]|0;break}else{e=e+(0-u)|0;break}}else{h=e;t=84}}while(0);if((t|0)==84){e=c[h>>2]|0;if(e){c[e+4>>2]=c[h+4>>2];e=c[h>>2]|0}f=(c[s>>2]|0)+8|0;g=c[f>>2]|0;if((h|0)==(g|0)){c[f>>2]=e;e=c[(c[s>>2]|0)+8>>2]|0;if(e|0)c[e+4>>2]=c[h+4>>2]}else{f=h+4|0;c[c[f>>2]>>2]=e;e=g+4|0;if((h|0)==(c[e>>2]|0))c[e>>2]=c[f>>2]}e=c[s>>2]|0;f=e+4|0;if((h|0)==(c[f>>2]|0))g=c[h>>2]|0;else g=0;c[f>>2]=g;t=e+16|0;c[t>>2]=(c[t>>2]|0)+-1;if((u|0)<0)e=c[h+8>>2]|0;else e=h+(0-u)|0;f=c[r+16>>2]|0;if(!((d&2|0)==0|(f|0)==0))ib[f&127](a,e,r);if((c[q>>2]|0)<0)cb[c[a+12>>2]&31](a,h,0,r)|0}return e|0}function Rl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=l;l=l+16|0;g=j;a:do if((a|0)!=0&(b|0)!=0?(f=_I(40)|0,(f|0)!=0):0){c[f>>2]=0;c[f+16>>2]=0;c[f+4>>2]=0;Ml(f,a,0)|0;d=f+20|0;i=a+32|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;d=c[i>>2]|0;do if(d){c[g>>2]=0;d=cb[d&31](f,1,g,a)|0;if((d|0)>=0)if(d){e=c[g>>2]|0;if(e|0)if(!(c[b+4>>2]&c[e>>2])){d=f;h=12;break}else{d=f;break}d=a+28|0;if(!(c[d>>2]|0)){d=f;h=12}else{$I(f);e=cb[c[d>>2]&31](0,0,40,a)|0;if(!e){d=0;break a}c[e>>2]=0;c[e+16>>2]=0;c[e+4>>2]=0;Ml(e,a,0)|0;c[e+20>>2]=1;c[e+24>>2]=0;c[e+32>>2]=0;c[e+28>>2]=0;d=e;f=e;h=11}}else{d=f;h=11}else{d=f;h=12}}else{d=f;h=11}while(0);if((h|0)==11){e=cb[c[d+12>>2]&31](d,0,28,a)|0;c[g>>2]=e;if(!e){d=f;h=12}else{c[e>>2]=c[b+4>>2];g=e+4|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;c[g+16>>2]=0;c[g+20>>2]=0}}if((h|0)==12){$I(d);d=0;break}c[d+8>>2]=e;c[d>>2]=c[b>>2];c[d+16>>2]=b;e=c[i>>2]|0;if(e)cb[e&31](d,5,f,a)|0}else d=0;while(0);l=j;return d|0}function Sl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;f=c[c[a+16>>2]>>2]|0;j=a+8|0;g=c[j>>2]|0;h=c[g>>2]|0;d=h&4096;if(!b)if(!d)b=-1;else{e=d;b=c[g+4>>2]|0;i=5}else if(!(c[g+16>>2]|0)){e=0;i=5}else b=-1;a:do if((i|0)==5){c[g>>2]=h&-4097;if(!(h&3)){d=g+4|0;if(!(h&12)){c[d>>2]=0;d=g+8|0}c[d>>2]=b;if(e|0){b=0;break}c[(c[j>>2]|0)+16>>2]=-1;b=0;break}c[g+4>>2]=0;if(!e){c[g+16>>2]=0;while(1){if(!b){b=0;break a}j=c[b>>2]|0;bb[f&31](a,b,32)|0;b=j}}e=c[g+8>>2]|0;a=e+(c[g+12>>2]<<2)|0;while(1){if(e>>>0>=a>>>0){b=0;break a}d=c[e>>2]|0;if(d){c[e>>2]=b;b=c[d>>2]|0;c[d>>2]=0}e=e+4|0}}while(0);return b|0}function Tl(a){a=a|0;var b=0,d=0,e=0;b=a+8|0;d=c[b>>2]|0;if(c[d>>2]&4096){Sl(a,0)|0;d=c[b>>2]|0}e=d+16|0;a=c[e>>2]|0;do if((a|0)<0){b=c[d>>2]|0;if(b&12|0){a=Ul(c[d+4>>2]|0)|0;c[e>>2]=a;break}if(b&112){a=0;b=d+8|0;while(1){b=c[b>>2]|0;if(!b)break;a=a+1|0}c[e>>2]=a}}while(0);return a|0}function Ul(a){a=a|0;var b=0;if(!a)return 0;else{b=Ul(c[a+4>>2]|0)|0;return b+1+(Ul(c[a>>2]|0)|0)|0}return 0}function Vl(b,c,e){b=b|0;c=c|0;e=e|0;var f=0,g=0,h=0;g=c;if((e|0)>=1){h=c+e+-1|0;g=(h>>>0>>0?c:h)+(1-g)&-2;f=c;while(1){if(f>>>0>=h>>>0)break;b=O(((d[f>>0]|0)<<8)+b+(d[f+1>>0]|0)|0,17109811)|0;f=f+2|0}f=c+g|0;if(f>>>0>h>>>0)c=e;else{c=e;b=O(((d[f>>0]|0)<<8)+b|0,17109811)|0}}else{while(1){f=a[c>>0]|0;if(!(f<<24>>24))break;h=a[c+1>>0]|0;e=O(((f&255)<<8)+b+(h&255)|0,17109811)|0;b=e;c=c+(h<<24>>24?2:1)|0}c=c-g|0}return O(b+c|0,17109811)|0}function Wl(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;G=l;l=l+128|0;z=G+120|0;r=G;F=a+8|0;e=c[F>>2]|0;if(c[e>>2]&4096){Sl(a,0)|0;e=c[F>>2]|0}E=c[a+4>>2]|0;A=c[E>>2]|0;B=c[E+4>>2]|0;x=E+8|0;D=c[x>>2]|0;C=c[E+20>>2]|0;t=a+20|0;c[t>>2]=c[t>>2]&-32769;h=c[e+4>>2]|0;a:do if(!b)if((d&448|0)==0|(h|0)==0)e=0;else{if(!(d&64)){b:do if(!(d&256)){e=h;while(1){f=e+4|0;g=c[f>>2]|0;if(!g)break b;c[f>>2]=c[g>>2];c[g>>2]=e;e=g}}else{e=h;while(1){f=c[e>>2]|0;if(!f)break b;a=f+4|0;c[e>>2]=c[a>>2];c[a>>2]=e;e=f}}while(0);c[(c[F>>2]|0)+4>>2]=e;if((D|0)<0){e=c[e+8>>2]|0;break}else{e=e+(0-D)|0;break}}b=E+16|0;if((c[b>>2]|0)!=0|(D|0)<0){j=a+12|0;k=(D|0)<0;i=0-D|0;e=h;do{h=e;while(1){e=h+4|0;f=c[e>>2]|0;if(!f)break;c[e>>2]=c[f>>2];c[f>>2]=h;h=f}e=c[h>>2]|0;f=c[b>>2]|0;if(f|0){if(k)g=c[h+8>>2]|0;else g=h+i|0;ib[f&127](a,g,E)}if((c[x>>2]|0)<0)cb[c[j>>2]&31](a,h,0,E)|0}while((e|0)!=0);e=c[F>>2]|0}c[e+16>>2]=0;c[e+4>>2]=0;e=0}else{y=a+16|0;u=(d&4098|0)==0;c:do if(u|(c[(c[y>>2]|0)+4>>2]|0)!=8)v=45;else{k=(B|0)<0;e=b+A|0;if(k)e=c[e>>2]|0;i=(C|0)==0;j=(B|0)<1;g=bb[c[a>>2]&31](a,b,4)|0;while(1){if(!g){v=45;break c}f=g+A|0;if(k)f=c[f>>2]|0;do if(i)if(j){f=yJ(e,f)|0;break}else{f=eL(e,f,B)|0;break}else f=cb[C&31](a,e,f,E)|0;while(0);if(f|0){v=45;break c}if((g|0)==(b|0))break;g=bb[c[a>>2]&31](a,g,8)|0}h=c[(c[F>>2]|0)+4>>2]|0;c[z>>2]=c[h+4>>2];c[z+4>>2]=c[h>>2];e=z;v=180}while(0);d:do if((v|0)==45){do if(!(d&2565)){if(d&32|0){if((D|0)<0)g=c[b+8>>2]|0;else g=b+(0-D)|0;e=g+A|0;if((B|0)<0)f=c[e>>2]|0;else f=e;if(!h){e=b;f=z;h=z;v=198;break}else{e=b;s=f;j=b;v=64;break}}if(h){if((D|0)<0)e=c[h+8>>2]|0;else e=h+(0-D)|0;if((e|0)!=(b|0)){f=b+A|0;if((B|0)<0){g=b;e=0;s=c[f>>2]|0;j=0;v=64}else{g=b;e=0;s=f;j=0;v=64}}else{e=0;g=b;f=z;k=z;j=0;v=141}}else{e=0;g=b;f=z;h=z;v=198}}else{if(!(d&512)){e=b+A|0;if((B|0)<0)f=c[e>>2]|0;else f=e}else f=b;if(!h){e=0;g=b;f=z;h=z;v=198}else{g=b;e=0;s=f;j=0;v=64}}while(0);e:do if((v|0)==64){f:do if((c[(c[y>>2]|0)+4>>2]|0)==4?(q=c[(c[F>>2]|0)+24>>2]|0,!((d&516|0)==0|(q|0)==0)):0){b=(D|0)<0;m=(B|0)<0;n=(C|0)==0;o=(B|0)<1;p=0-D|0;k=0;f=h;while(1){if((k|0)>=(q|0)){f=z;k=z;m=0;break}if(b)i=c[f+8>>2]|0;else i=f+p|0;i=i+A|0;if(m)i=c[i>>2]|0;do if(n)if(o){i=yJ(s,i)|0;break}else{i=eL(s,i,B)|0;break}else i=cb[C&31](a,s,i,E)|0;while(0);if(!i){v=80;break}c[r+(k<<2)>>2]=i;f=c[((i|0)<0?f+4|0:f)>>2]|0;if(!f){e=0;break a}else k=k+1|0}if((v|0)==80)if(b){e=c[f+8>>2]|0;break a}else{e=f+p|0;break a}while(1){if((m|0)>=(q|0))break f;do if((c[r+(m<<2)>>2]|0)<0){i=h+4|0;b=c[i>>2]|0;if((c[r+((m|1)<<2)>>2]|0)<0){c[i>>2]=c[b>>2];c[b>>2]=h;c[f+4>>2]=b;f=b;h=k;i=b+4|0;break}else{c[k>>2]=b;c[f+4>>2]=h;f=h;h=b;i=b;break}}else{i=c[h>>2]|0;if((c[r+((m|1)<<2)>>2]|0)>0){p=i+4|0;c[h>>2]=c[p>>2];c[p>>2]=h;c[k>>2]=i;h=i;break}else{c[f+4>>2]=i;c[k>>2]=h;f=i;i=i+4|0;break}}while(0);k=h;m=m+2|0;h=c[i>>2]|0}}else{f=z;k=z}while(0);n=(D|0)<0;o=(B|0)<0;p=(C|0)!=0;q=(B|0)<1;r=0-D|0;i=h;g:while(1){h=i;while(1){if(n)i=c[h+8>>2]|0;else i=h+r|0;i=i+A|0;if(o)i=c[i>>2]|0;do if(!p)if(q){i=yJ(s,i)|0;break}else{i=eL(s,i,B)|0;break}else i=cb[C&31](a,s,i,E)|0;while(0);if(!i){v=140;break g}if((i|0)>=0)break;b=h+4|0;m=c[b>>2]|0;if(!m){v=121;break g}if(n)i=c[m+8>>2]|0;else i=m+r|0;i=i+A|0;if(o)i=c[i>>2]|0;do if(!p)if(q){i=yJ(s,i)|0;break}else{i=eL(s,i,B)|0;break}else i=cb[C&31](a,s,i,E)|0;while(0);if((i|0)>=0){v=118;break}c[b>>2]=c[m>>2];c[m>>2]=h;c[f+4>>2]=m;h=c[m+4>>2]|0;if(!h){f=m;h=k;v=198;break e}else f=m}if((v|0)==118){v=0;if(!i){v=119;break}c[k>>2]=m;c[f+4>>2]=h;i=c[m>>2]|0;if(!i){f=h;h=m;v=198;break e}else{f=h;k=m;continue}}b=c[h>>2]|0;if(!b){v=139;break}if(n)i=c[b+8>>2]|0;else i=b+r|0;i=i+A|0;if(o)i=c[i>>2]|0;do if(!p)if(q){i=yJ(s,i)|0;break}else{i=eL(s,i,B)|0;break}else i=cb[C&31](a,s,i,E)|0;while(0);if((i|0)>0){i=b+4|0;c[h>>2]=c[i>>2];c[i>>2]=h;c[k>>2]=b;i=c[b>>2]|0;if(!i){h=b;v=198;break e}else{k=b;continue}}if(!i){v=137;break}c[f+4>>2]=b;c[k>>2]=h;i=c[b+4>>2]|0;if(!i){f=b;v=198;break e}else{f=b;k=h}}if((v|0)==119){c[f+4>>2]=h;f=h;h=m;v=141;break}else if((v|0)==121){c[f+4>>2]=h;f=h;h=k;v=198;break}else if((v|0)==137){c[k>>2]=h;k=h;h=b;v=141;break}else if((v|0)==139){c[k>>2]=h;v=198;break}else if((v|0)==140)if(!h){h=k;v=198;break}else{v=141;break}}while(0);do if((v|0)==141){c[t>>2]=c[t>>2]|32768;i=h+4|0;c[k>>2]=c[i>>2];c[f+4>>2]=c[h>>2];if(!(d&516)){if(d&8|0){c[i>>2]=c[z>>2];c[h>>2]=0;c[z>>2]=h;v=169;break}if(d&16|0){v=z+4|0;c[h>>2]=c[v>>2];c[i>>2]=0;c[v>>2]=h;v=175;break}if(!u){e=f;v=180;break d}if(d&2049|0){if(c[(c[y>>2]|0)+4>>2]&4|0){e=h;break}c[i>>2]=0;e=z+4|0;c[h>>2]=c[e>>2];c[e>>2]=h;e=h;v=205;break}if(!(d&32)){e=0;break a}if(!(c[(c[y>>2]|0)+4>>2]&4)){c[e+4>>2]=0;x=z+4|0;c[e>>2]=c[x>>2];c[x>>2]=j;e=(c[F>>2]|0)+16|0;c[e>>2]=(c[e>>2]|0)+1;e=h;break}e=c[E+16>>2]|0;if(e|0)ib[e&127](a,g,E);if((c[x>>2]|0)<0){cb[c[a+12>>2]&31](a,j,0,E)|0;e=h}else e=h}else e=h}else if((v|0)==198){c[f+4>>2]=0;c[h>>2]=0;if(!(d&8))if(!(d&16)){if(d&516|0){e=f;break d}if(!(d&2049)){if(!(d&32)){g=0;e=f;break d}x=(c[F>>2]|0)+16|0;c[x>>2]=(c[x>>2]|0)+1}else{e=0;v=205}}else v=175;else v=169}while(0);if((v|0)==169){h=z+4|0;e=c[h>>2]|0;if(!e){e=f;break}while(1){f=e+4|0;g=c[f>>2]|0;if(!g)break;c[f>>2]=c[g>>2];c[g>>2]=e;e=g}c[h>>2]=c[e>>2]}else if((v|0)==175){e=c[z>>2]|0;if(!e){e=f;break}while(1){f=c[e>>2]|0;if(!f)break;x=f+4|0;c[e>>2]=c[x>>2];c[x>>2]=e;e=f}c[z>>2]=c[e+4>>2]}else if((v|0)==205){i=E+12|0;h=c[i>>2]|0;j=(d&1|0)==0;if(!(j|(h|0)==0))g=bb[h&31](a,g,E)|0;do if(g){if((D|0)>-1){e=g+D|0;v=215;break}e=cb[c[a+12>>2]&31](a,0,12,E)|0;if(e|0){c[e+8>>2]=g;break}if((c[i>>2]|0)!=0?(w=c[E+16>>2]|0,!(j|(w|0)==0)):0){ib[w&127](a,g,E);v=215}else v=215}else v=215;while(0);if((v|0)==215)if(!e){e=f;break}f=(c[F>>2]|0)+16|0;g=c[f>>2]|0;if((g|0)>-1)c[f>>2]=g+1}c[e+4>>2]=c[z>>2];c[e>>2]=c[z+4>>2];h:do if(!((d&516|0)==0?1:(c[(c[y>>2]|0)+4>>2]&8|0)==0)){m=(D|0)<0;if(m)f=c[e+8>>2]|0;else f=e+(0-D)|0;n=(B|0)<0;f=f+A|0;if(n)f=c[f>>2]|0;j=(C|0)==0;k=(B|0)<1;b=0-D|0;while(1){i=e+4|0;g=c[i>>2]|0;if(!g)break h;while(1){h=c[g>>2]|0;if(!h)break;z=h+4|0;c[g>>2]=c[z>>2];c[z>>2]=g;g=h}c[i>>2]=g;if(m)h=c[g+8>>2]|0;else h=g+b|0;h=h+A|0;if(n)h=c[h>>2]|0;do if(j)if(k){h=yJ(f,h)|0;break}else{h=eL(f,h,B)|0;break}else h=cb[C&31](a,f,h,E)|0;while(0);if(h|0)break h;c[i>>2]=c[g>>2];c[g>>2]=e;e=g}}while(0);c[(c[F>>2]|0)+4>>2]=e;if((D|0)<0){e=c[e+8>>2]|0;break a}else{e=e+(0-D)|0;break a}}while(0);if((v|0)==180){if((D|0)<0)g=c[h+8>>2]|0;else g=h+(0-D)|0;f=c[E+16>>2]|0;if(!((d&2|0)==0|(f|0)==0))ib[f&127](a,g,E);if((c[x>>2]|0)<0)cb[c[a+12>>2]&31](a,h,0,E)|0;a=(c[F>>2]|0)+16|0;E=c[a>>2]|0;c[a>>2]=(E|0)<1?-1:E+-1|0}do{f=e+4|0;e=c[f>>2]|0}while((e|0)!=0);c[f>>2]=c[z>>2];c[(c[F>>2]|0)+4>>2]=c[z+4>>2];e=d&2|0?g:0}while(0);l=G;return e|0}function Xl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;if(c[c[a+8>>2]>>2]&4096|0)Sl(a,0)|0;f=(b|0)!=0;if(f){if(c[c[b+8>>2]>>2]&4096|0)Sl(b,0)|0;if((c[b+16>>2]|0)==(c[a+16>>2]|0)){d=b;e=7}else b=0}else{d=0;e=7}a:do if((e|0)==7){while(1){if(!d)break;if((d|0)==(a|0)){b=0;break a}d=c[d+28>>2]|0;e=7}d=a+28|0;e=c[d>>2]|0;if(e|0){g=e+24|0;c[g>>2]=(c[g>>2]|0)+-1}c[a+32>>2]=0;c[d>>2]=0;if(f){c[d>>2]=b;c[a>>2]=12;g=b+24|0;c[g>>2]=(c[g>>2]|0)+1;break}else{c[a>>2]=c[c[a+16>>2]>>2];b=e;break}}while(0);return b|0}function Yl(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;a:do if(!(d&99)){if((d&516|0)==0?(e=c[(c[a+16>>2]|0)+4>>2]|0,!((d&384|0)!=0&(e&12|0)==0)):0){if(e&12|0){if(!(d&408)){e=0;break}o=(d&136|0)!=0;p=(d&272|0)!=0;l=0;f=0;e=0;n=a;while(1){if(!n)break;m=bb[c[c[n+16>>2]>>2]&31](n,b,d)|0;do if(!m)g=l;else{h=c[n+4>>2]|0;i=c[h+4>>2]|0;j=c[h+20>>2]|0;g=m+(c[h>>2]|0)|0;if((i|0)<0)k=c[g>>2]|0;else k=g;if(e|0){do if(!j)if((i|0)<1){g=yJ(k,f)|0;break}else{g=eL(k,f,i)|0;break}else g=cb[j&31](n,k,f,h)|0;while(0);if(!(o&(g|0)<0|p&(g|0)>0)){g=l;break}}g=n;f=k;e=m}while(0);l=g;n=c[n+28>>2]|0}c[a+32>>2]=l;break}if(!(d&24)){e=0;break}j=a+32|0;f=c[j>>2]|0;if(f){e=c[(c[f+4>>2]|0)+8>>2]|0;g=c[(c[f+8>>2]|0)+4>>2]|0;if((e|0)<0)e=c[g+8>>2]|0;else e=g+(0-e)|0;if((e|0)==(b|0))e=b;else{f=a;h=32}}else{f=a;h=32}do if((h|0)==32){while(1){if(!f){h=33;break}e=bb[c[c[f+16>>2]>>2]&31](f,b,4)|0;if(e|0){h=36;break}f=c[f+28>>2]|0;h=32}if((h|0)==33){c[j>>2]=0;e=0;break a}else if((h|0)==36){c[j>>2]=f;break}}while(0);i=(d<<4&128^128)+128|0;e=bb[c[c[f+16>>2]>>2]&31](f,e,d)|0;while(1){h=f+16|0;while(1){if(!e)break;else g=a;while(1){if((g|0)==(f|0))break a;if(bb[c[c[g+16>>2]>>2]&31](g,e,4)|0)break;g=c[g+28>>2]|0}e=bb[c[c[h>>2]>>2]&31](f,e,d)|0}f=c[f+28>>2]|0;c[j>>2]=f;if(!f){e=0;break a}e=bb[c[c[f+16>>2]>>2]&31](f,0,i)|0}}else f=a;while(1){if(!f){f=0;e=0;break}e=bb[c[c[f+16>>2]>>2]&31](f,b,d)|0;if(e|0)break;f=c[f+28>>2]|0}c[a+32>>2]=f}else e=bb[c[c[a+16>>2]>>2]&31](a,b,d)|0;while(0);return e|0}function Zl(a){a=a|0;var b=0;b=c[41980]|0;c[41980]=a;return b|0}function _l(a){a=a|0;var b=0;b=c[41981]|0;c[41981]=a;return b|0}function $l(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=am(a,b,f)|0;l=e;return d|0}function am(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;g=l;l=l+16|0;e=g;f=(a|0)==3;h=f?c[41983]|0:(a|0)==2?1:a;c[41983]=h;i=c[41984]|0;c[41984]=i>>>0>h>>>0?i:h;do if(h>>>0<(c[41981]|0)>>>0){a=c[41982]|0;if(!a){a=BN()|0;c[41982]=a;if(!a){a=1;break}}if(!f){EN(a)|0;a=c[41982]|0}NK(a,b,d)|0;a=0}else{if(c[41980]|0){bm(a,b,d);a=0;break}if(f)a=c[13918]|0;else{i=c[13918]|0;c[e>>2]=(a|0)==1?81312:81318;AL(i,81326,e)|0;a=i}NK(a,b,d)|0;a=0}while(0);l=g;return a|0}function bm(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;if((c[41985]|0)==0?(f=_I(c[4354]|0)|0,c[41985]=f,(f|0)==0):0)XL(81331,c[13918]|0)|0;else e=4;do if((e|0)==4){if((a|0)!=3){$a[c[41980]&31]((a|0)==1?81312:81318)|0;$a[c[41980]&31](81990)|0}while(1){a=MK(c[41985]|0,c[4354]|0,b,d)|0;e=c[4354]|0;if((a|0)>-1&(a|0)<(e|0)){e=7;break}e=e<<1;f=a+1|0;f=(e|0)>(f|0)?e:f;c[4354]=f;if(!(bJ(c[41985]|0,f)|0)){e=9;break}}if((e|0)==7){$a[c[41980]&31](c[41985]|0)|0;break}else if((e|0)==9){XL(81331,c[13918]|0)|0;break}}while(0);return}function cm(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;am(1,a,e)|0;l=d;return}function dm(b,d,e){b=b|0;d=d|0;e=e|0;var f=0;if(!e){e=(d|0)==0?1024:d;d=e;e=_I(e)|0;f=1}else f=0;c[b+12>>2]=f;c[b>>2]=e;c[b+8>>2]=e+d;c[b+4>>2]=e;a[e>>0]=0;return}function em(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=a+8|0;f=c[a>>2]|0;g=(c[h>>2]|0)-f|0;e=g<<1;g=g+b|0;e=g>>>0>e>>>0?g:e;g=a+4|0;b=f;f=(c[g>>2]|0)-f|0;d=a+12|0;if(!(c[d>>2]|0)){i=_I(e)|0;UN(i|0,b|0,f|0)|0;c[d>>2]=1;b=i}else b=bJ(b,e)|0;c[a>>2]=b;c[g>>2]=b+f;c[h>>2]=b+e;return 0}function fm(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=a+4|0;e=c[f>>2]|0;if((e+d|0)>>>0>(c[a+8>>2]|0)>>>0){em(a,d)|0;e=c[f>>2]|0}UN(e|0,b|0,d|0)|0;c[f>>2]=(c[f>>2]|0)+d;return d|0}function gm(a,b){a=a|0;b=b|0;return fm(a,b,sJ(b)|0)|0}function hm(a){a=a|0;if(c[a+12>>2]|0)$I(c[a>>2]|0);return}function im(a){a=a|0;var b=0,e=0;b=a+4|0;e=c[b>>2]|0;if(e>>>0>(c[a>>2]|0)>>>0){c[b>>2]=e+-1;a=d[e>>0]|0}else a=-1;return a|0}function jm(a,b,d){a=a|0;b=b|0;d=d|0;cp(c[41987]|0,c[b+8>>2]|0)|0;cp(c[41987]|0,c[b+12>>2]|0)|0;_n(c[41987]|0,b);return}function km(a,b){a=a|0;b=b|0;var c=0;c=Mo(a,81379,0)|0;if((b|0)!=0&(c|0)==0){lm(a);c=Mo(a,81379,0)|0}return c|0}function lm(a){a=a|0;var b=0,c=0,d=0;d=to(a)|0;xq(d,d,86,0,1)|0;c=eo(d)|0;while(1){if(!c)break;nm(a,c);b=Qm(d,c)|0;while(1){if(!b)break;om(a,b);b=Sm(d,b)|0}c=fo(d,c)|0}return}function mm(b){b=b|0;var c=0;c=b+24|0;a[c>>0]=a[c>>0]|64;tm(b);c=Mp(b)|0;qm((c|0)==0?b:c,b);return}function nm(a,b){a=a|0;b=b|0;var d=0;d=pm(b)|0;if(!((d|0)!=0?(c[d+8>>2]|0)!=0:0))qm(a,b);return}function om(a,b){a=a|0;b=b|0;var d=0;d=pm(b)|0;if(!((d|0)!=0?(c[d+8>>2]|0)!=0:0))qm(a,b);return}function pm(a){a=a|0;return Mo(a,81367,0)|0}function qm(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=Oo(b,81367,16,0)|0;f=rm(a,c[b>>2]&3)|0;e=d+8|0;a:do if(!(c[e>>2]|0)){a=to(a)|0;c[e>>2]=rm(a,c[b>>2]&3)|0;a=sm(b)|0;d=d+12|0;c[d>>2]=Zn(so(b)|0,((a|0)>4?a:4)<<2)|0;a=bb[c[f>>2]&31](f,0,128)|0;while(1){if(!a)break a;e=so(b)|0;e=ap(e,c[a+12>>2]|0)|0;c[(c[d>>2]|0)+(c[a+16>>2]<<2)>>2]=e;a=bb[c[f>>2]&31](f,a,8)|0}}while(0);return}function rm(a,b){a=a|0;b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;a=km(a,0)|0;a:do if(!a)a=0;else switch(b|0){case 0:{a=c[a+16>>2]|0;break a}case 1:{a=c[a+8>>2]|0;break a}case 2:case 3:{a=c[a+12>>2]|0;break a}default:{c[d>>2]=b;$l(1,81392,d)|0;a=0;break a}}while(0);l=e;return a|0}function sm(a){a=a|0;var b=0;b=to(so(a)|0)|0;a=rm(b,c[a>>2]&3)|0;if(!a)a=0;else a=Tl(a)|0;return a|0}function tm(a){a=a|0;var b=0,d=0,e=0,f=0;d=Oo(a,81379,20,0)|0;e=d+8|0;c[e>>2]=Qp(a,17420,c[4353]|0)|0;f=d+12|0;c[f>>2]=Qp(a,17420,c[4353]|0)|0;d=d+16|0;c[d>>2]=Qp(a,17420,c[4353]|0)|0;b=Mp(a)|0;if(!b){b=c[41986]|0;if(!((b|0)==0|(b|0)==(a|0))){b=km(b,0)|0;um(c[b+8>>2]|0,c[e>>2]|0,a,1);um(c[b+12>>2]|0,c[f>>2]|0,a,2);um(c[b+16>>2]|0,c[d>>2]|0,a,0)}}else{a=km(b,0)|0;Xl(c[e>>2]|0,c[a+8>>2]|0)|0;Xl(c[f>>2]|0,c[a+12>>2]|0)|0;Xl(c[d>>2]|0,c[a+16>>2]|0)|0}return}function um(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;g=bb[c[b>>2]&31](b,0,128)|0;while(1){if(!g)break;h=vm(e,c[g+8>>2]|0,c[g+12>>2]|0,c[g+16>>2]|0,f)|0;a[h+22>>0]=a[g+22>>0]|0;a[h+21>>0]=a[g+21>>0]|0;bb[c[d>>2]&31](d,h,1)|0;g=bb[c[b>>2]&31](b,g,8)|0}return}function vm(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0;h=Zn(b,24)|0;a[h+20>>0]=g;c[h+8>>2]=ap(b,d)|0;c[h+12>>2]=ap(b,e)|0;c[h+16>>2]=f;return h|0}function wm(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+32|0;e=d;c[e+8>>2]=b;b=bb[c[a>>2]&31](a,e,4)|0;l=d;return b|0}function xm(a,b){a=a|0;b=b|0;var c=0;c=Xl(a,0)|0;b=wm(a,b)|0;Xl(a,c)|0;return b|0}function ym(a,b){a=a|0;b=b|0;a=pm(a)|0;if(!a)a=0;else a=wm(c[a+8>>2]|0,b)|0;return a|0}function zm(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=l;l=l+16|0;g=h;if(!b){b=c[41986]|0;if(!b){a[g>>0]=a[17456]|0;a[g+1>>0]=a[17457]|0;a[g+2>>0]=a[17458]|0;a[g+3>>0]=a[17459]|0;b=hn(0,g,0)|0;c[41986]=b}}if(!f)b=Bm(b,d,e)|0;else b=Am(b,d,e,f)|0;l=h;return b|0}function Am(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;i=to(a)|0;km(a,1)|0;g=rm(a,b)|0;f=xm(g,d)|0;a:do if(!f){f=wm(g,d)|0;if(f|0){f=vm(a,d,e,c[f+16>>2]|0,b)|0;bb[c[g>>2]&31](g,f,1)|0;h=16;break}g=rm(i,b)|0;f=vm(a,d,e,Tl(g)|0,b)|0;bb[c[g>>2]&31](g,f,1)|0;switch(b|0){case 0:{xq(i,i,52,f,1)|0;h=16;break a}case 1:{d=eo(i)|0;while(1){if(!d){h=16;break a}Cm(a,d,f);d=fo(i,d)|0}}case 2:case 3:{g=eo(i)|0;while(1){if(!g){h=16;break a}d=Qm(i,g)|0;while(1){if(!d)break;Cm(a,d,f);d=Sm(i,d)|0}g=fo(i,g)|0}}default:break a}}else{h=f+12|0;cp(a,c[h>>2]|0)|0;c[h>>2]=ap(a,e)|0;h=16}while(0);if((h|0)==16)if((b|0)==0&(f|0)!=0)Dm(a,f,e)|0;wo(a,a,f);return f|0}function Bm(a,b,c){a=a|0;b=b|0;c=c|0;a=rm(a,b)|0;if(!a)a=0;else a=wm(a,c)|0;return a|0}function Cm(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;b=pm(b)|0;f=d+16|0;e=c[f>>2]|0;if((e|0)>3){g=c[a+64>>2]|0;b=b+12|0;e=e<<2;c[b>>2]=cb[c[(c[g>>2]|0)+8>>2]&31](c[g+12>>2]|0,c[b>>2]|0,e,e+4|0)|0}else b=b+12|0;g=ap(a,c[d+12>>2]|0)|0;c[(c[b>>2]|0)+(c[f>>2]<<2)>>2]=g;return}function Dm(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=so(a)|0;g=(pm(a)|0)+12|0;i=b+16|0;cp(h,c[(c[g>>2]|0)+(c[i>>2]<<2)>>2]|0)|0;f=ap(h,d)|0;c[(c[g>>2]|0)+(c[i>>2]<<2)>>2]=f;do if(!(c[a>>2]&3)){e=c[(km(h,0)|0)+16>>2]|0;f=b+8|0;g=xm(e,c[f>>2]|0)|0;if(!g){i=vm(h,c[f>>2]|0,d,c[i>>2]|0,c[a>>2]&3)|0;bb[c[e>>2]&31](e,i,1)|0;break}else{i=g+12|0;cp(h,c[i>>2]|0)|0;c[i>>2]=ap(h,d)|0;break}}while(0);wo(h,a,b);return 0}function Em(a,b,d){a=a|0;b=b|0;d=d|0;a=rm(a,b)|0;do if(a){b=c[a>>2]|0;if(!d){a=bb[b&31](a,0,128)|0;break}else{a=bb[b&31](a,d,8)|0;break}}else a=0;while(0);return a|0}function Fm(a){a=a|0;var b=0;c[41987]=a;b=pm(a)|0;if(b|0){Gm(a,b);Qo(a,c[b>>2]|0)|0}b=km(a,0)|0;if(b)if(((Sp(a,c[b+8>>2]|0)|0)==0?(Sp(a,c[b+12>>2]|0)|0)==0:0)?(Sp(a,c[b+16>>2]|0)|0)==0:0){Qo(a,c[b>>2]|0)|0;b=0}else b=1;else b=0;return b|0}function Gm(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=so(a)|0;e=sm(a)|0;b=b+12|0;a=0;while(1){d=c[b>>2]|0;if((a|0)>=(e|0))break;cp(f,c[d+(a<<2)>>2]|0)|0;a=a+1|0}_n(f,d);return}function Hm(a){a=a|0;var b=0;b=pm(a)|0;if(b|0){Gm(a,b);Qo(a,81367)|0}return}function Im(a){a=a|0;var b=0;b=pm(a)|0;if(b|0){Gm(a,b);Qo(a,81367)|0}return}function Jm(a,b){a=a|0;b=b|0;b=ym(a,b)|0;if(!b)b=0;else{a=c[(pm(a)|0)+12>>2]|0;b=c[a+(c[b+16>>2]<<2)>>2]|0}return b|0}function Km(a,b){a=a|0;b=b|0;a=c[(pm(a)|0)+12>>2]|0;return c[a+(c[b+16>>2]<<2)>>2]|0}function Lm(a,b,c){a=a|0;b=b|0;c=c|0;b=ym(a,b)|0;if(!b)b=-1;else{Dm(a,b,c)|0;b=0}return b|0}function Mm(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=so(a)|0;f=zm(f,c[a>>2]&3,b,0)|0;if(!f){f=so(a)|0;f=zm(f,c[a>>2]&3,b,e)|0}Dm(a,f,d)|0;return 0}function Nm(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=so(a)|0;f=c[a>>2]|0;a:do if(!((c[b>>2]^f)&3)){d=1;e=0;while(1){e=Em(g,f&3,e)|0;if(!e)break a;d=ym(b,c[e+8>>2]|0)|0;if(!d){d=1;break a}f=Km(a,e)|0;Dm(b,d,f)|0;if(dp(f)|0)ep(Km(b,d)|0);d=0;f=c[a>>2]|0}}else d=1;while(0);return d|0}function Om(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;a=c[b+40>>2]|0;f=c[d+40>>2]|0;if((a|0)==(f|0)){e=(c[b>>2]|0)>>>4;a=(c[d>>2]|0)>>>4;if(e>>>0>=a>>>0)if(e>>>0>a>>>0)a=1;else g=6;else a=-1}else{e=(c[a>>2]|0)>>>4;a=(c[f>>2]|0)>>>4;if(e>>>0>=a>>>0)if(e>>>0>a>>>0)a=1;else g=6;else a=-1}if((g|0)==6)a=0;return a|0}function Pm(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;a=(c[b+40>>2]|0)+8|0;g=c[a>>2]|0;a=c[a+4>>2]|0;f=(c[d+40>>2]|0)+8|0;e=c[f>>2]|0;f=c[f+4>>2]|0;do if(!(a>>>0>>0|(a|0)==(f|0)&g>>>0>>0))if(a>>>0>f>>>0|(a|0)==(f|0)&g>>>0>e>>>0)a=1;else{e=b+8|0;a=c[e>>2]|0;e=c[e+4>>2]|0;if(!((a|0)==0&(e|0)==0)?(i=d+8|0,h=c[i>>2]|0,i=c[i+4>>2]|0,!((h|0)==0&(i|0)==0)):0){if(e>>>0>>0|(e|0)==(i|0)&a>>>0>>0){a=-1;break}if(e>>>0>i>>>0|(e|0)==(i|0)&a>>>0>h>>>0){a=1;break}}a=0}else a=-1;while(0);return a|0}function Qm(a,b){a=a|0;b=b|0;var d=0;b=Rm(a,b)|0;if(!b)b=0;else{d=a+44|0;a=b+32|0;Sl(c[d>>2]|0,c[a>>2]|0)|0;b=c[d>>2]|0;b=bb[c[b>>2]&31](b,0,128)|0;c[a>>2]=Ol(c[d>>2]|0)|0}return b|0}function Rm(a,b){a=a|0;b=b|0;var d=0,e=0;e=l;l=l+48|0;d=e;if((c[b+24>>2]|0)==(a|0))a=b+28|0;else{c[d+16>>2]=b;a=c[a+40>>2]|0;a=bb[c[a>>2]&31](a,d,4)|0}l=e;return a|0}function Sm(a,b){a=a|0;b=b|0;var d=0,e=0;d=Rm(a,c[((c[b>>2]&3|0)==3?b:b+48|0)+40>>2]|0)|0;if(!d)a=0;else{e=a+44|0;d=d+32|0;Sl(c[e>>2]|0,c[d>>2]|0)|0;a=c[e>>2]|0;a=bb[c[a>>2]&31](a,b,8)|0;c[d>>2]=Ol(c[e>>2]|0)|0}return a|0}function Tm(a,b){a=a|0;b=b|0;var d=0;b=Rm(a,b)|0;if(!b)b=0;else{d=a+44|0;a=b+28|0;Sl(c[d>>2]|0,c[a>>2]|0)|0;b=c[d>>2]|0;b=bb[c[b>>2]&31](b,0,128)|0;c[a>>2]=Ol(c[d>>2]|0)|0}return b|0}function Um(a,b){a=a|0;b=b|0;var d=0,e=0;d=Rm(a,c[((c[b>>2]&3|0)==2?b:b+-48|0)+40>>2]|0)|0;if(!d)a=0;else{e=a+44|0;d=d+28|0;Sl(c[e>>2]|0,c[d>>2]|0)|0;a=c[e>>2]|0;a=bb[c[a>>2]&31](a,b,8)|0;c[d>>2]=Ol(c[e>>2]|0)|0}return a|0}function Vm(a,b){a=a|0;b=b|0;var c=0;c=Qm(a,b)|0;if(!c)c=Tm(a,b)|0;return c|0}function Wm(a,b,d){a=a|0;b=b|0;d=d|0;a:do if((c[b>>2]&3|0)==2){b=Sm(a,b)|0;if(!b){b=0;do{if(!b)b=Tm(a,d)|0;else b=Um(a,b)|0;if(!b){b=0;break a}}while((c[b+40>>2]|0)==(d|0))}}else do{b=Um(a,b)|0;if(!b){b=0;break a}}while((c[b+40>>2]|0)==(d|0));while(0);return b|0}function Xm(a,b,e){a=a|0;b=b|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+32|0;f=h+16|0;g=h;if((tn(a)|0)!=0?(c[g>>2]=0,c[g+4>>2]=0,c[g+8>>2]=0,c[g+12>>2]=0,c[f>>2]=c[g>>2],c[f+4>>2]=c[g+4>>2],c[f+8>>2]=c[g+8>>2],c[f+12>>2]=c[g+12>>2],($m(a,b,e,f)|0)!=0):0)f=0;else f=((d[a+24>>0]|0)>>>2&1^1)&255|(b|0)!=(e|0);l=h;return f|0}function Ym(a,b){a=a|0;b=b|0;_m(a,b);return}function Zm(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0;jo(b,d,1)|0;jo(b,e,1)|0;h=Zn(b,96)|0;i=h+48|0;l=ln(b,2)|0;j=c[i>>2]|0;k=c[h>>2]|0;m=h+8|0;c[m>>2]=f;c[m+4>>2]=g;m=h+56|0;c[m>>2]=f;c[m+4>>2]=g;g=l<<4;c[h>>2]=k&12|g|2;c[i>>2]=j&12|g|3;c[h+88>>2]=d;c[h+40>>2]=e;_m(b,h);if(a[b+24>>0]&64){Oo(h,81367,16,0)|0;om(b,h)}uo(b,h);return h|0}function _m(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;i=l;l=l+16|0;d=i;h=c[b>>2]&3;g=(h|0)==2?b:b+-48|0;h=(h|0)==3?b:b+48|0;e=c[h+40>>2]|0;f=c[g+40>>2]|0;while(1){if(!a)break;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];if($m(a,e,f,d)|0)break;j=Rm(a,e)|0;m=a+44|0;an(c[m>>2]|0,j+32|0,g);k=a+48|0;an(c[k>>2]|0,j+24|0,g);j=Rm(a,f)|0;an(c[m>>2]|0,j+28|0,h);an(c[k>>2]|0,j+20|0,h);a=Mp(a)|0}l=i;return}function $m(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+48|0;f=h;if(!((b|0)==0|(d|0)==0)?(c[f>>2]=c[e>>2],c[f+4>>2]=c[e+4>>2],c[f+8>>2]=c[e+8>>2],c[f+12>>2]=c[e+12>>2],c[f+40>>2]=b,g=Rm(a,d)|0,(g|0)!=0):0){e=a+48|0;g=g+20|0;Sl(c[e>>2]|0,c[g>>2]|0)|0;a=c[e>>2]|0;a=bb[c[a>>2]&31](a,f,4)|0;c[g>>2]=Ol(c[e>>2]|0)|0}else a=0;l=h;return a|0}function an(a,b,d){a=a|0;b=b|0;d=d|0;Sl(a,c[b>>2]|0)|0;bb[c[a>>2]&31](a,d,1)|0;c[b>>2]=Ol(a)|0;return}function bn(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+48|0;i=n+24|0;k=n+16|0;j=n;do if(!(Bn(a,2,e,k,0)|0))if(!e){if(f|0?(tn(a)|0)==0:0){m=18;break};c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;m=7}else m=17;else{o=j;c[o>>2]=0;c[o+4>>2]=0;o=k;g=c[o+4>>2]|0;m=j+8|0;c[m>>2]=c[o>>2];c[m+4>>2]=g;c[j>>2]=2;m=7}while(0);a:do if((m|0)==7){c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];c[i+12>>2]=c[j+12>>2];g=$m(a,b,d,i)|0;b:do if(!g){if(sn(a)|0?(c[i>>2]=c[j>>2],c[i+4>>2]=c[j+4>>2],c[i+8>>2]=c[j+8>>2],c[i+12>>2]=c[j+12>>2],h=$m(a,d,b,i)|0,h|0):0){g=h;break}do if(f|0){g=to(a)|0;c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];c[i+12>>2]=c[j+12>>2];g=$m(g,b,d,i)|0;if(!g){if(!(sn(a)|0))break;g=to(a)|0;c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];c[i+12>>2]=c[j+12>>2];g=$m(g,d,b,i)|0;if(!g)break}Ym(a,g);break b}while(0);m=17;break a}while(0)}while(0);if((m|0)==17)if(!f)g=0;else m=18;if((m|0)==18)if((Xm(a,b,d)|0)!=0?(Bn(a,2,e,k,1)|0)!=0:0){g=k;g=Zm(a,b,d,c[g>>2]|0,c[g+4>>2]|0)|0;Fn(a,2,g)}else g=0;l=n;return g|0}function cn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;d=(c[b>>2]&3|0)==3;g=d?b+-48|0:b;d=d?b:b+48|0;b=c[g+40>>2]|0;h=Rm(a,c[d+40>>2]|0)|0;f=a+44|0;dn(c[f>>2]|0,h+32|0,g);e=a+48|0;dn(c[e>>2]|0,h+24|0,g);b=Rm(a,b)|0;dn(c[f>>2]|0,b+28|0,d);dn(c[e>>2]|0,b+20|0,d);return}function dn(a,b,d){a=a|0;b=b|0;d=d|0;Sl(a,c[b>>2]|0)|0;bb[c[a>>2]&31](a,d,2)|0;c[b>>2]=Ol(a)|0;return}function en(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;f=e;d=(c[d>>2]&3|0)==2?d:d+-48|0;g=c[d>>2]&3;h=c[((g|0)==3?d:d+48|0)+40>>2]|0;g=c[((g|0)==2?d:d+-48|0)+40>>2]|0;c[f>>2]=c[d>>2];c[f+4>>2]=c[d+4>>2];c[f+8>>2]=c[d+8>>2];c[f+12>>2]=c[d+12>>2];if($m(b,h,g,f)|0){if((to(b)|0)==(b|0)){if(a[b+24>>0]&64)Im(d);yo(b,d);Wo(d);h=d+8|0;Dn(b,2,c[h>>2]|0,c[h+4>>2]|0)}if(!(xq(b,d,53,0,0)|0))if((to(b)|0)==(b|0)){_n(b,d);d=0}else d=0;else d=-1}else d=-1;l=e;return d|0}function fn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+16|0;e=h;f=jo(a,c[((c[b>>2]&3|0)==3?b:b+48|0)+40>>2]|0,d)|0;g=jo(a,c[((c[b>>2]&3|0)==2?b:b+-48|0)+40>>2]|0,d)|0;do if((f|0)!=0&(g|0)!=0){c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];e=$m(a,f,g,e)|0;f=(e|0)==0;if(!((d|0)!=0&f)){if(f)break}else{_m(a,b);e=b}d=c[e>>2]&3;l=h;return ((d|0)==(c[b>>2]&3|0)?e:e+(((d|0)==3?-1:1)*48|0)|0)|0}while(0);l=h;return 0}function gn(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;b=b+8|0;e=d+8|0;e=JN(c[b>>2]|0,c[b+4>>2]|0,c[e>>2]|0,c[e+4>>2]|0)|0;return ((e|0)==0?0:e>>31|1)|0}function hn(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;h=l;l=l+16|0;g=h;j=jn(e)|0;f=ab[c[(c[j>>2]|0)+4>>2]&63](c[j+12>>2]|0,72)|0;c[f>>2]=c[f>>2]&-4;i=f+64|0;c[i>>2]=j;k=f+24|0;d=c[d>>2]|0;c[k>>2]=d;a[k>>0]=d&255|8;c[f+60>>2]=f;e=ab[c[c[j+4>>2]>>2]&63](f,e)|0;c[(c[i>>2]|0)+16>>2]=e;if(Bn(f,0,b,g,1)|0){i=g;j=c[i+4>>2]|0;k=f+8|0;c[k>>2]=c[i>>2];c[k+4>>2]=j}k=kn(f)|0;Fn(k,0,f);l=h;return k|0}function jn(b){b=b|0;var d=0,e=0,f=0,g=0;d=(b|0)!=0;if(d){e=c[b>>2]|0;e=(e|0)==0?17792:e}else e=17792;g=$a[c[e>>2]&31](b)|0;f=ab[c[e+4>>2]&63](g,80)|0;c[f>>2]=e;c[f+12>>2]=g;if(d){g=c[b+4>>2]|0;c[f+4>>2]=(g|0)==0?17668:g;b=c[b+8>>2]|0;b=(b|0)==0?17768:b}else{c[f+4>>2]=17668;b=17768}c[f+8>>2]=b;a[f+52>>0]=1;return f|0}function kn(b){b=b|0;var d=0,e=0;c[b+36>>2]=Qp(b,17848,c[4353]|0)|0;c[b+40>>2]=Qp(b,17812,c[4353]|0)|0;d=(to(b)|0)==(b|0);c[b+44>>2]=Qp(b,d?17460:17496,c[4353]|0)|0;d=(to(b)|0)==(b|0);c[b+48>>2]=Qp(b,d?17532:17568,c[4353]|0)|0;c[b+52>>2]=Qp(b,17604,c[4353]|0)|0;d=Mp(b)|0;if(!((d|0)!=0?(e=ln(d,0)|0,c[b>>2]=c[b>>2]&15|e<<4,e=c[d+52>>2]|0,bb[c[e>>2]&31](e,b,1)|0,!(a[d+24>>0]&64)):0))mm(b);uo(b,b);return b|0}function ln(a,b){a=a|0;b=b|0;var d=0;d=(c[a+64>>2]|0)+24+(b<<3)|0;b=d;b=IN(c[b>>2]|0,c[b+4>>2]|0,1,0)|0;a=z;c[d>>2]=b;c[d+4>>2]=a;z=a;return b|0}function mn(b){b=b|0;var d=0,e=0,f=0,g=0;f=Mp(b)|0;g=(f|0)==0;if(g?(d=b+64|0,(c[(c[c[d>>2]>>2]|0)+16>>2]|0)!=0):0){yo(b,b);g=b+8|0;Dn(b,0,c[g>>2]|0,c[g+4>>2]|0);d=c[d>>2]|0;gb[c[(c[d>>2]|0)+16>>2]&127](c[d+12>>2]|0);d=0}else e=4;do if((e|0)==4){d=Kp(b)|0;while(1){if(!d)break;e=Lp(d)|0;mn(d)|0;d=e}d=eo(b)|0;while(1){if(!d)break;e=fo(b,d)|0;qo(b,d)|0;d=e}On(b);yo(b,b);if(((((Sp(b,c[b+40>>2]|0)|0)==0?(Sp(b,c[b+36>>2]|0)|0)==0:0)?(Sp(b,c[b+48>>2]|0)|0)==0:0)?(Sp(b,c[b+44>>2]|0)|0)==0:0)?(Sp(b,c[b+52>>2]|0)|0)==0:0){if(a[b+24>>0]&64?Fm(b)|0:0){d=-1;break}Wo(b);e=b+8|0;Dn(b,0,c[e>>2]|0,c[e+4>>2]|0);if(!g){Np(f,b)|0;_n(f,b);d=0;break}d=b+64|0;while(1){e=c[d>>2]|0;f=c[e+48>>2]|0;if(!f)break;Bo(b,c[f>>2]|0)|0}gb[c[(c[e+4>>2]|0)+20>>2]&127](c[e+16>>2]|0);if(!(Xo(b)|0)){d=c[d>>2]|0;g=c[d+12>>2]|0;f=(c[d>>2]|0)+12|0;hb[c[f>>2]&31](g,b);hb[c[f>>2]&31](g,d);d=0}else d=-1}else d=-1}while(0);return d|0}function nn(a){a=a|0;return Tl(c[a+40>>2]|0)|0}function on(a){a=a|0;var b=0,c=0,d=0;b=0;c=eo(a)|0;while(1){if(!c)break;d=(pn(a,c,0,1)|0)+b|0;b=d;c=fo(a,c)|0}return b|0}function pn(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=Rm(a,b)|0;if(f){if(!e)b=0;else b=qn(c[a+44>>2]|0,f+32|0)|0;if(d)b=(qn(c[a+44>>2]|0,f+28|0)|0)+b|0}else b=0;return b|0}function qn(a,b){a=a|0;b=b|0;var d=0;Sl(a,c[b>>2]|0)|0;d=Tl(a)|0;c[b>>2]=Ol(a)|0;return d|0}function rn(b){b=b|0;return a[b+24>>0]&1|0}function sn(a){a=a|0;return (rn(a)|0)==0|0}function tn(a){a=a|0;return (d[a+24>>0]|0)>>>1&1|0}function un(a,b){a=a|0;b=b|0;return a|0}function vn(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;if(!d){f=1328;d=c[f>>2]|0;f=c[f+4>>2]|0;c[e>>2]=d;c[e+4>>2]=f;f=IN(d|0,f|0,2,0)|0;e=1328;c[e>>2]=f;c[e+4>>2]=z}else{if(!f)a=Zo(a,d)|0;else a=ap(a,d)|0;c[e>>2]=a;c[e+4>>2]=0}return 1}function wn(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return 0}function xn(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;if((c&1|0)==0&0==0)cp(a,c)|0;return}function yn(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ((c&1|0)==0&0==0?c:0)|0}function zn(a){a=a|0;return}function An(a,b,c){a=a|0;b=b|0;c=c|0;return}function Bn(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0;i=(e|0)!=0;do if(i){if((a[e>>0]|0)!=37?(h=c[b+64>>2]|0,h=db[c[(c[h+4>>2]|0)+4>>2]&3](c[h+16>>2]|0,d,e,f,g)|0,h|0):0)break;h=Gn(b,d,e,f)|0;if(!h)j=5}else j=5;while(0);if((j|0)==5)if(g){h=c[b+64>>2]|0;h=db[c[(c[h+4>>2]|0)+4>>2]&3](c[h+16>>2]|0,d,0,f,g)|0;if(i&(h|0)!=0){j=f;Hn(b,d,e,c[j>>2]|0,c[j+4>>2]|0)}}else h=0;return h|0}function Cn(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=c[a+64>>2]|0;return cb[c[(c[a+4>>2]|0)+8>>2]&31](c[a+16>>2]|0,b,d,e)|0}function Dn(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;Mn(a,b,d,e)|0;a=c[a+64>>2]|0;kb[c[(c[a+4>>2]|0)+12>>2]&31](c[a+16>>2]|0,b,d,e);return}function En(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=l;l=l+16|0;g=h;d=so(a)|0;f=a+8|0;b=f;b=Kn(d,c[a>>2]&3,c[b>>2]|0,c[b+4>>2]|0)|0;do if(!b){b=c[d+64>>2]|0;d=c[(c[b+4>>2]|0)+16>>2]|0;if(d|0?(e=f,e=cb[d&31](c[b+16>>2]|0,c[a>>2]&3,c[e>>2]|0,c[e+4>>2]|0)|0,e|0):0){b=e;break}if((c[a>>2]&3|0)==2)b=0;else{e=c[f>>2]|0;f=c[f+4>>2]|0;c[g>>2]=37;b=g+8|0;c[b>>2]=e;c[b+4>>2]=f;qL(173899,81419,g)|0;b=173899}}while(0);l=h;return b|0}function Fn(a,b,d){a=a|0;b=b|0;d=d|0;a=c[a+64>>2]|0;ib[c[(c[a+4>>2]|0)+24>>2]&127](c[a+16>>2]|0,b,d);return}function Gn(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;i=l;l=l+32|0;h=i;b=c[(c[a+64>>2]|0)+56+(((b|0)==3?2:b)<<2)>>2]|0;if(((b|0)!=0?(f=Zo(a,d)|0,(f|0)!=0):0)?(c[h+24>>2]=f,g=bb[c[b>>2]&31](b,h,4)|0,(g|0)!=0):0){d=g+16|0;h=c[d+4>>2]|0;b=e;c[b>>2]=c[d>>2];c[b+4>>2]=h;b=1}else b=0;l=i;return b|0}function Hn(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=Zn(a,32)|0;g=h+16|0;c[g>>2]=e;c[g+4>>2]=f;c[h+24>>2]=ap(a,d)|0;e=(b|0)==3?2:b;g=a+64|0;d=c[g>>2]|0;b=c[d+56+(e<<2)>>2]|0;if(!b){f=Qp(a,17696,c[4353]|0)|0;c[(c[g>>2]|0)+56+(e<<2)>>2]=f;b=c[g>>2]|0}else{f=b;b=d}b=c[b+68+(e<<2)>>2]|0;if(!b){b=Qp(a,17732,c[4353]|0)|0;c[(c[g>>2]|0)+68+(e<<2)>>2]=b}bb[c[f>>2]&31](f,h,1)|0;bb[c[b>>2]&31](b,h,1)|0;return}function In(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=b+16|0;b=c[a>>2]|0;a=c[a+4>>2]|0;d=d+16|0;e=c[d>>2]|0;d=c[d+4>>2]|0;return (a>>>0>d>>>0|(a|0)==(d|0)&b>>>0>e>>>0?1:(a>>>0>>0|(a|0)==(d|0)&b>>>0>>0)<<31>>31)|0}function Jn(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;b=c[b+24>>2]|0;e=c[d+24>>2]|0;return (b>>>0>e>>>0?1:(b>>>0>>0)<<31>>31)|0}function Kn(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=Ln(a,b,d,e)|0;if(!a)a=0;else a=c[a+24>>2]|0;return a|0}function Ln(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+32|0;f=g;a=c[(c[a+64>>2]|0)+68+(((b|0)==3?2:b)<<2)>>2]|0;if(!a)a=0;else{b=f+16|0;c[b>>2]=d;c[b+4>>2]=e;a=bb[c[a>>2]&31](a,f,4)|0}l=g;return a|0}function Mn(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=(b|0)==3?2:b;b=Ln(a,f,d,e)|0;if(!b)b=0;else{e=a+64|0;d=c[(c[e>>2]|0)+56+(f<<2)>>2]|0;bb[c[d>>2]&31](d,b,2)|0;e=c[(c[e>>2]|0)+68+(f<<2)>>2]|0;bb[c[e>>2]&31](e,b,2)|0;cp(a,c[b+24>>2]|0)|0;_n(a,b);b=1}return b|0}function Nn(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;c[41987]=b;g=c[b+64>>2]|0;f=0;while(1){if((f|0)==3)break;h=g+56+(f<<2)|0;d=c[h>>2]|0;a:do if(d|0){d=bb[c[d>>2]&31](d,0,128)|0;while(1){if(!d)break a;e=c[h>>2]|0;e=bb[c[e>>2]&31](e,d,8)|0;if((a[c[d+24>>2]>>0]|0)!=37){d=e;continue}i=d+16|0;Mn(b,f,c[i>>2]|0,c[i+4>>2]|0)|0;d=e}}while(0);f=f+1|0}return}function On(a){a=a|0;c[41987]=a;a=a+64|0;Pn((c[a>>2]|0)+56|0);Pn((c[a>>2]|0)+68|0);return}function Pn(a){a=a|0;var b=0,d=0,e=0;b=0;while(1){if((b|0)==3)break;d=a+(b<<2)|0;e=c[d>>2]|0;if(e|0){Ll(e)|0;c[d>>2]=0}b=b+1|0}return}function Qn(a,b,c){a=a|0;b=b|0;c=c|0;if(!(hL(b,c,a)|0))a=0;else a=sJ(b)|0;return a|0}function Rn(a,b){a=a|0;b=b|0;return XL(b,a)|0}function Sn(a){a=a|0;return QL(a)|0}function Tn(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+32|0;e=b+12|0;d=b;c[4446]=c[4443];c[4447]=c[4444];c[e>>2]=a;c[e+4>>2]=sJ(a)|0;c[e+8>>2]=0;c[d>>2]=17792;c[d+4>>2]=17668;c[d+8>>2]=17780;a=fr(e,d)|0;gp(0);l=b;return a|0}function Un(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;if((e|0)!=0?(h=b+8|0,f=c[h>>2]|0,(f|0)<(c[b+4>>2]|0)):0){i=(c[b>>2]|0)+f|0;b=0;g=a[i>>0]|0;f=d;d=i;while(1){d=d+1|0;a[f>>0]=g;b=b+1|0;if(!(g<<24>>24!=10&(b|0)<(e|0)))break;g=a[d>>0]|0;if(!(g<<24>>24))break;else f=f+1|0}c[h>>2]=(c[h>>2]|0)+b}else b=0;return b|0}function Vn(a){a=a|0;return 0}function Wn(a,b){a=a|0;b=b|0;a=_I(b)|0;WN(a|0,0,b|0)|0;return a|0}function Xn(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;a=bJ(b,d)|0;if(d>>>0>c>>>0)WN(a+c|0,0,d-c|0)|0;return a|0}function Yn(a,b){a=a|0;b=b|0;$I(b);return}function Zn(a,b){a=a|0;b=b|0;var d=0;d=l;l=l+16|0;a=c[a+64>>2]|0;a=ab[c[(c[a>>2]|0)+4>>2]&63](c[a+12>>2]|0,b)|0;if(!a)$l(1,81425,d)|0;l=d;return a|0}function _n(a,b){a=a|0;b=b|0;if(b|0){a=c[a+64>>2]|0;hb[c[(c[a>>2]|0)+12>>2]&31](c[a+12>>2]|0,b)}return}function $n(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=(c[b+16>>2]|0)+8|0;b=c[a>>2]|0;a=c[a+4>>2]|0;d=(c[d+16>>2]|0)+8|0;e=c[d>>2]|0;d=c[d+4>>2]|0;return (a>>>0>>0|(a|0)==(d|0)&b>>>0>>0?-1:(a>>>0>d>>>0|(a|0)==(d|0)&b>>>0>e>>>0)&1)|0}function ao(a,b,d){a=a|0;b=b|0;d=d|0;a=c[b+16>>2]|0;if((a+28|0)!=(b|0))_n(c[a+24>>2]|0,b);return}function bo(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;b=(c[c[b+16>>2]>>2]|0)>>>4;e=(c[c[d+16>>2]>>2]|0)>>>4;return (b>>>0>>0?-1:b>>>0>e>>>0&1)|0}function co(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=167040;c[e>>2]=b;c[e+4>>2]=d;c[41992]=167032;a=c[a+40>>2]|0;a=bb[c[a>>2]&31](a,167952,4)|0;if(!a)a=0;else a=c[a+16>>2]|0;return a|0}function eo(a){a=a|0;a=c[a+36>>2]|0;a=bb[c[a>>2]&31](a,0,128)|0;if(!a)a=0;else a=c[a+16>>2]|0;return a|0}function fo(a,b){a=a|0;b=b|0;var d=0;b=Rm(a,b)|0;if((b|0)!=0?(d=c[a+36>>2]|0,d=bb[c[d>>2]&31](d,b,8)|0,(d|0)!=0):0)b=c[d+16>>2]|0;else b=0;return b|0}function go(a){a=a|0;a=c[a+36>>2]|0;a=bb[c[a>>2]&31](a,0,256)|0;if(!a)a=0;else a=c[a+16>>2]|0;return a|0}function ho(a,b){a=a|0;b=b|0;var d=0;b=Rm(a,b)|0;if((b|0)!=0?(d=c[a+36>>2]|0,d=bb[c[d>>2]&31](d,b,16)|0,(d|0)!=0):0)b=c[d+16>>2]|0;else b=0;return b|0}function io(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=co(a,b,c)|0;do if((d|0)!=0&(e|0)==0){e=to(a)|0;if((e|0)!=(a|0)?(f=co(e,b,c)|0,f|0):0){jo(a,f,1)|0;e=f;break}if(!(Cn(a,1,b,c)|0))e=0;else{e=ln(a,1)|0;e=ko(a,b,c,e,z)|0;lo(a,e);mo(a,e)}}while(0);return e|0}function jo(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=to(a)|0;if((e|0)==(c[b+24>>2]|0)){e=b+8|0;e=co(a,c[e>>2]|0,c[e+4>>2]|0)|0;if((d|0)!=0&(e|0)==0){e=Mp(a)|0;if(!e)e=0;else{d=jo(e,b,d)|0;no(a,d);return d|0}}}else e=0;return e|0}function ko(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0;g=Zn(b,64)|0;h=c[g>>2]|0;i=g+8|0;c[i>>2]=d;c[i+4>>2]=e;c[g>>2]=h&12|f<<4|1;c[g+24>>2]=to(b)|0;if(a[(to(b)|0)+24>>0]&64)Oo(g,81367,16,0)|0;return g|0}function lo(a,b){a=a|0;b=b|0;do{no(a,b);a=Mp(a)|0}while((a|0)!=0);return}function mo(b,c){b=b|0;c=c|0;if(a[(to(b)|0)+24>>0]&64)nm(b,c);uo(b,c);return}function no(a,b){a=a|0;b=b|0;var d=0,e=0;e=a+40|0;Tl(c[e>>2]|0)|0;if((to(a)|0)==(a|0))d=b+28|0;else d=Zn(a,36)|0;c[d+16>>2]=b;e=c[e>>2]|0;bb[c[e>>2]&31](e,d,1)|0;e=c[a+36>>2]|0;bb[c[e>>2]&31](e,d,1)|0;return}function oo(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=l;l=l+16|0;g=j;h=to(a)|0;if(Bn(a,1,b,g,0)|0){e=g;e=co(a,c[e>>2]|0,c[e+4>>2]|0)|0;if(!e)if(!((d|0)==0|(h|0)==(a|0))?(f=g,f=co(h,c[f>>2]|0,c[f+4>>2]|0)|0,(f|0)!=0):0)e=jo(a,f,1)|0;else i=6}else i=6;if((i|0)==6)if((d|0)!=0?(Bn(a,1,b,g,1)|0)!=0:0){i=g;h=c[i>>2]|0;i=c[i+4>>2]|0;e=ln(a,1)|0;e=ko(a,h,i,e,z)|0;lo(a,e);mo(a,e);Fn(a,1,e)}else e=0;l=j;return e|0}function po(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;c[42001]=b;d=Vm(a,b)|0;while(1){if(!d)break;e=Wm(a,d,b)|0;cn(a,d,0);d=e}e=c[a+40>>2]|0;bb[c[e>>2]&31](e,167988,2)|0;e=c[a+36>>2]|0;bb[c[e>>2]&31](e,167988,2)|0;return}function qo(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=d+8|0;e=f;if(co(b,c[e>>2]|0,c[e+4>>2]|0)|0){if((to(b)|0)==(b|0)){e=Vm(b,d)|0;while(1){if(!e)break;g=Wm(b,e,d)|0;en(b,e)|0;e=g}if(a[b+24>>0]&64)Hm(d);yo(b,d);Wo(d);g=f;Dn(b,1,c[g>>2]|0,c[g+4>>2]|0)}if(!(xq(b,d,54,0,0)|0))if((to(b)|0)==(b|0)){_n(b,d);e=0}else e=0;else e=-1}else e=-1;return e|0}function ro(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=l;l=l+16|0;e=h;d=c[b>>2]|0;do if(!(d&3))if((Mp(b)|0)==(a|0)){d=c[b>>2]|0;g=5;break}else{$l(1,81451,e)|0;f=-1;break}else g=5;while(0);a:do if((g|0)==5)switch(d&3){case 1:{f=qo(a,b)|0;break a}case 2:case 3:{f=en(a,b)|0;break a}case 0:{f=mn(b)|0;break a}default:{}}while(0);l=h;return f|0}function so(a){a=a|0;var b=0;switch(c[a>>2]&3){case 2:case 3:{b=c[(c[a+40>>2]|0)+24>>2]|0;break}case 1:{b=c[a+24>>2]|0;break}case 0:{b=a;break}default:{}}return b|0}function to(a){a=a|0;var b=0;switch(c[a>>2]&3){case 2:case 3:{b=(c[a+40>>2]|0)+24|0;break}case 1:{b=a+24|0;break}case 0:{b=a+60|0;break}default:{}}return c[b>>2]|0}function uo(b,d){b=b|0;d=d|0;var e=0;e=c[b+64>>2]|0;if(!(a[e+52>>0]|0))Eo(b,d,100,0);else vo(b,d,c[e+48>>2]|0);return}function vo(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;a:do if(d|0){vo(a,b,c[d+8>>2]|0);switch(c[b>>2]&3){case 0:{e=c[d>>2]|0;break}case 1:{e=(c[d>>2]|0)+12|0;break}case 2:{e=(c[d>>2]|0)+24|0;break}default:break a}e=c[e>>2]|0;if(e|0)ib[e&127](a,b,c[d+4>>2]|0)}while(0);return}function wo(b,d,e){b=b|0;d=d|0;e=e|0;var f=0;f=c[b+64>>2]|0;if(!(a[f+52>>0]|0))Eo(b,d,101,e);else xo(b,d,e,c[f+48>>2]|0);return}function xo(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;a:do if(e|0){xo(a,b,d,c[e+8>>2]|0);switch(c[b>>2]&3){case 0:{f=(c[e>>2]|0)+4|0;break}case 1:{f=(c[e>>2]|0)+16|0;break}case 2:{f=(c[e>>2]|0)+28|0;break}default:break a}f=c[f>>2]|0;if(f|0)kb[f&31](a,b,c[e+4>>2]|0,d)}while(0);return}function yo(b,d){b=b|0;d=d|0;var e=0;e=c[b+64>>2]|0;if(!(a[e+52>>0]|0))Eo(b,d,102,0);else zo(b,d,c[e+48>>2]|0);return}function zo(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;a:do if(d|0){zo(a,b,c[d+8>>2]|0);switch(c[b>>2]&3){case 0:{e=(c[d>>2]|0)+8|0;break}case 1:{e=(c[d>>2]|0)+20|0;break}case 2:{e=(c[d>>2]|0)+32|0;break}default:break a}e=c[e>>2]|0;if(e|0)ib[e&127](a,b,c[d+4>>2]|0)}while(0);return}function Ao(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=Zn(a,12)|0;c[e>>2]=b;c[e+4>>2]=d;d=(c[a+64>>2]|0)+48|0;c[e+8>>2]=c[d>>2];c[d>>2]=e;return}function Bo(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;e=(c[a+64>>2]|0)+48|0;d=c[e>>2]|0;a:do if(!d)d=-1;else{if((c[d>>2]|0)!=(b|0)){while(1){if(!d){d=-1;break a}e=d+8|0;f=c[e>>2]|0;if((c[f>>2]|0)==(b|0))break;else d=f}if(f)c[e>>2]=c[f+8>>2]}else c[e>>2]=c[d+8>>2];_n(a,d);d=0}while(0);return d|0}function Co(a,b){a=a|0;b=b|0;var d=0;d=to(a)|0;a:do if((d|0)==(to(b)|0))switch(c[b>>2]&3){case 0:{while(1){if((b|0)==(a|0)){b=1;break a}b=Mp(b)|0;if(!b){b=0;break}}break}case 1:{b=b+8|0;b=(io(a,c[b>>2]|0,c[b+4>>2]|0,0)|0)!=0;break a}default:{b=(fn(a,b,0)|0)!=0;break a}}else b=0;while(0);return b&1|0}function Do(a){a=a|0;return c[a>>2]&3|0}function Eo(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+16|0;g=h;f=Oo(a,81475,44,0)|0;switch(c|0){case 100:{e=Fo(f,b,100)|0;if(!(Go(e,b)|0))Ho(e,a,b,d)|0;break}case 101:{if(((Go(Fo(f,b,100)|0,b)|0)==0?(Go(Fo(f,b,102)|0,b)|0)==0:0)?(e=Fo(f,b,101)|0,(Go(e,b)|0)==0):0)Ho(e,a,b,d)|0;break}case 102:{Io(Fo(f,b,100)|0,b);Io(Fo(f,b,101)|0,b);e=Fo(f,b,102)|0;if(!(Go(e,b)|0))Ho(e,a,b,d)|0;break}default:$l(1,81487,g)|0}l=h;return}function Fo(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;e=g;a:do switch(c[b>>2]&3){case 0:switch(d|0){case 100:{d=a+8|0;break a}case 101:{d=a+20|0;break a}case 102:{d=a+32|0;break a}default:{f=14;break a}}case 1:switch(d|0){case 100:{d=a+12|0;break a}case 101:{d=a+24|0;break a}case 102:{d=a+36|0;break a}default:{f=14;break a}}case 2:switch(d|0){case 100:{d=a+16|0;break a}case 101:{d=a+28|0;break a}case 102:{d=a+40|0;break a}default:{f=14;break a}}default:f=14}while(0);if((f|0)==14){$l(1,81521,e)|0;d=0}a=c[d>>2]|0;if(!a){a=so(b)|0;a=Qp(a,17884,c[4353]|0)|0;c[d>>2]=a}l=g;return a|0}function Go(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+32|0;e=d;f=Jo(b)|0;b=e+8|0;c[b>>2]=f;c[b+4>>2]=z;b=bb[c[a>>2]&31](a,e,4)|0;l=d;return b|0}function Ho(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=Zn(so(d)|0,32)|0;c[f+20>>2]=d;g=Jo(d)|0;d=f+8|0;c[d>>2]=g;c[d+4>>2]=z;c[f+16>>2]=b;if(e|0){g=Zn(b,8)|0;c[f+24>>2]=g;c[g>>2]=e}bb[c[a>>2]&31](a,f,1)|0;return f|0}function Io(a,b){a=a|0;b=b|0;b=Go(a,b)|0;if(b|0)bb[c[a>>2]&31](a,b,2)|0;return}function Jo(a){a=a|0;a=a+8|0;z=c[a+4>>2]|0;return c[a>>2]|0}function Ko(a,b,d){a=a|0;b=b|0;d=d|0;Lo(b);_n(c[b+16>>2]|0,b);return}function Lo(a){a=a|0;var b=0,d=0;b=a+16|0;a=c[a+24>>2]|0;while(1){if(!a)break;d=c[a+4>>2]|0;_n(c[b>>2]|0,a);a=d}return}function Mo(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+16|0;i=k;h=c[b+16>>2]|0;f=h;while(1){if(!f){f=0;break}g=c[f>>2]|0;if((g|0)==(d|0)){j=7;break}if((a[d>>0]|0)==(a[g>>0]|0)?(yJ(d,g)|0)==0:0){j=7;break}f=c[f+4>>2]|0;if((f|0)==(h|0)){f=0;break}}do if((j|0)==7){if(!(c[b>>2]&4)){if((f|0)==(h|0)&(e|0)==0){f=h;break}No(b,f,e);break}if(e)if((h|0)==(f|0))f=h;else $l(1,81546,i)|0}while(0);l=k;return f|0}function No(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;c[a+16>>2]=b;e=c[a>>2]|0;d=d<<2&4;c[a>>2]=e&-5|d;if(e&2|0){e=(e&3|0)==3?-1:1;c[a+(e*48|0)+16>>2]=b;e=a+(e*48|0)|0;c[e>>2]=c[e>>2]&-5|d}return}function Oo(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=so(a)|0;f=Mo(a,b,0)|0;a:do if((d|0)!=0&(f|0)==0){d=Zn(h,d)|0;c[d>>2]=ap(h,b)|0;switch(c[a>>2]&3){case 0:{Po(a,d);g=d;break a}case 1:{Po(a,d);g=d;break a}case 2:case 3:{Po(a,d);g=d;break a}default:{}}}else g=f;while(0);if(e|0)Mo(a,b,1)|0;return g|0}function Po(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[a+16>>2]|0;do if(d){e=d+4|0;f=c[e>>2]|0;if((f|0)==(d|0)){c[e>>2]=b;e=d;d=b;break}else{c[b+4>>2]=f;e=b;break}}else{e=b;d=b}while(0);c[d+4>>2]=e;if(!(c[a>>2]&4))No(a,b,0);return}function Qo(a,b){a=a|0;b=b|0;var d=0,e=0;e=so(a)|0;d=Mo(a,b,0)|0;if(!d)b=-1;else{Ro(a,d);if(!(c[a>>2]&3)){So(e,a,d);b=d}else{xq(to(e)|0,a,55,d,0)|0;b=d}cp(e,c[d>>2]|0)|0;_n(e,b);b=0}return b|0}function Ro(a,b){a=a|0;b=b|0;var d=0;a=c[a+16>>2]|0;do{d=a+4|0;a=c[d>>2]|0}while((a|0)!=(b|0));c[d>>2]=c[b+4>>2];return}function So(a,b,d){a=a|0;b=b|0;d=d|0;if((c[b+16>>2]|0)==(d|0)){a=c[d+4>>2]|0;No(b,(a|0)==(d|0)?0:a,0)}return}function To(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;f=(d|0)>-1;g=f?d:0-d|0;a:do switch(b|0){case 0:{Oo(a,c,g,e)|0;if(!f){b=Kp(a)|0;while(1){if(!b)break a;To(b,0,c,d,e);b=Lp(b)|0}}break}case 3:case 2:case 1:{d=(b|0)==1;b=eo(a)|0;while(1){if(!b)break a;b:do if(d)Oo(b,c,g,e)|0;else{f=Qm(a,b)|0;while(1){if(!f)break b;Oo(f,c,g,e)|0;f=Sm(a,f)|0}}while(0);b=fo(a,b)|0}}default:{}}while(0);return}function Uo(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;a:do switch(b|0){case 0:{xq(a,a,56,c,1)|0;break}case 3:case 2:case 1:{e=(b|0)==1;d=eo(a)|0;while(1){if(!d)break a;b:do if(e)Qo(d,c)|0;else{b=Qm(a,d)|0;while(1){if(!b)break b;Qo(b,c)|0;b=Sm(a,b)|0}}while(0);d=fo(a,d)|0}}default:{}}while(0);return}function Vo(a,b,c){a=a|0;b=b|0;c=c|0;Qo(b,c)|0;return}function Wo(a){a=a|0;var b=0,d=0,e=0;d=so(a)|0;b=a+16|0;a=c[b>>2]|0;if(a|0)do{e=a;a=c[a+4>>2]|0;cp(d,c[e>>2]|0)|0;_n(d,e)}while((a|0)!=(c[b>>2]|0));c[b>>2]=0;return}function Xo(a){a=a|0;return Sp(a,Yo(a)|0)|0}function Yo(a){a=a|0;var b=0,d=0;if(!a)d=168024;else d=(c[a+64>>2]|0)+20|0;b=c[d>>2]|0;if(!b){b=Qp(a,17920,c[4353]|0)|0;c[d>>2]=b;a=167096;c[a>>2]=-2147483648;c[a+4>>2]=0;a=167104;c[a>>2]=2147483647;c[a+4>>2]=-1}return b|0}function Zo(a,b){a=a|0;b=b|0;return _o(Yo(a)|0,b)|0}function _o(a,b){a=a|0;b=b|0;a=$o(a,b)|0;if(!a)a=0;else a=c[a+16>>2]|0;return a|0}function $o(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+32|0;e=d;c[e+16>>2]=b;b=bb[c[a>>2]&31](a,e,4)|0;l=d;return b|0}function ap(a,b){a=a|0;b=b|0;var d=0,e=0;if(!b)d=0;else{e=Yo(a)|0;d=$o(e,b)|0;if(!d){d=(sJ(b)|0)+24|0;if(!a)d=_I(d)|0;else d=Zn(a,d)|0;a=d+8|0;c[a>>2]=1;c[a+4>>2]=0;a=d+20|0;yK(a,b)|0;c[d+16>>2]=a;bb[c[e>>2]&31](e,d,1)|0}else{e=d+8|0;b=e;b=IN(c[b>>2]|0,c[b+4>>2]|0,1,0)|0;c[e>>2]=b;c[e+4>>2]=z}d=c[d+16>>2]|0}return d|0}function bp(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;if(!b)d=0;else{e=Yo(a)|0;d=$o(e,b)|0;if(!d){d=(sJ(b)|0)+24|0;if(!a)d=_I(d)|0;else d=Zn(a,d)|0;g=167096;f=c[g+4>>2]|0;a=d+8|0;c[a>>2]=c[g>>2]|1;c[a+4>>2]=f;a=d+20|0;yK(a,b)|0;c[d+16>>2]=a;bb[c[e>>2]&31](e,d,1)|0}else{g=d+8|0;f=g;f=IN(c[f>>2]|0,c[f+4>>2]|0,1,0)|0;c[g>>2]=f;c[g+4>>2]=z}d=c[d+16>>2]|0}return d|0}function cp(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;if((b|0)!=0?(d=Yo(a)|0,e=$o(d,b)|0,(e|0)!=0):0)if((c[e+16>>2]|0)==(b|0)?(b=e+8|0,g=b,g=IN(c[g>>2]|0,c[g+4>>2]|0,-1,-1)|0,f=z,b,c[b>>2]=g,c[b+4>>2]=f,b=167104,(g|0)==0&(f|0)==0|(c[b>>2]|0)==0&(c[b+4>>2]|0)==0):0){Rp(a,d,e)|0;a=0}else a=0;else a=-1;return a|0}function dp(a){a=a|0;var b=0;if(!a)a=0;else{a=a+-12|0;b=167096;a=c[b>>2]&c[a>>2]}return a|0}function ep(a){a=a|0;var b=0,d=0,e=0;if(a|0){d=167096;a=a+-12|0;e=a;b=c[e+4>>2]|c[d+4>>2];c[a>>2]=c[e>>2]|c[d>>2];c[a+4>>2]=b}return}function fp(a){a=a|0;c[4489]=a;return}function gp(a){a=a|0;c[42011]=a;c[4489]=1;return}function hp(a,b){a=a|0;b=b|0;c[42012]=a;c[42013]=b;c[42014]=0;return}function ip(){var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;if(!(c[42015]|0)){c[42015]=1;if(!(c[42016]|0))c[42016]=1;if(!(c[42007]|0))c[42007]=c[13853];if(!(c[42008]|0))c[42008]=c[13885];k=c[42017]|0;if(!((k|0)!=0?(c[k>>2]|0)!=0:0)){jp();k=kp(c[42007]|0,16384)|0;c[c[42017]>>2]=k}lp()}a:while(1){j=c[42018]|0;a[j>>0]=a[173931]|0;e=(c[(c[c[42017]>>2]|0)+28>>2]|0)+(c[42016]|0)|0;f=j;b:while(1){h=f;while(1){f=c[17960+(d[h>>0]<<2)>>2]|0;if(b[56680+(e<<1)>>1]|0){c[42019]=e;c[42020]=h}c:while(1){g=f&255;do{f=g+(b[56866+(e<<1)>>1]|0)|0;if((e|0)==(b[57076+(f<<1)>>1]|0))break c;k=b[57612+(e<<1)>>1]|0;e=k<<16>>16}while(k<<16>>16<=92);f=c[18984+(g<<2)>>2]|0}e=b[57822+(f<<1)>>1]|0;f=h+1|0;if((b[56866+(e<<1)>>1]|0)==219)break;else h=f}d:while(1){k=j;e:while(1){e=b[56680+(e<<1)>>1]|0;if(!(e<<16>>16)){e=b[56680+(c[42019]<<1)>>1]|0;f=c[42020]|0}else e=e<<16>>16;c[42009]=j;i=f;c[42010]=i-k;a[173931]=a[f>>0]|0;a[f>>0]=0;c[42018]=f;f:while(1){switch(e|0){case 1:{m=27;break a}case 12:{m=53;break a}case 13:{m=55;break a}case 14:{m=57;break a}case 15:{m=61;break a}case 16:{m=65;break a}case 17:{m=67;break a}case 18:{m=69;break a}case 19:{m=72;break a}case 20:{m=75;break a}case 21:{m=78;break a}case 23:{m=86;break a}case 33:{m=118;break a}case 39:case 38:case 37:case 36:{l=0;break a}case 2:{m=29;break b}case 3:{m=32;break b}case 4:{m=35;break b}case 5:{m=37;break b}case 6:{m=39;break b}case 7:{m=42;break b}case 8:{m=44;break b}case 9:{m=47;break b}case 10:{m=49;break b}case 11:{m=51;break b}case 22:{m=83;break b}case 24:{m=89;break b}case 25:{m=92;break b}case 26:{m=95;break b}case 27:{m=98;break b}case 28:{m=101;break b}case 29:{m=104;break b}case 30:{m=109;break b}case 31:{m=112;break b}case 32:{m=115;break b}case 34:{m=121;break b}case 0:break f;case 35:break;default:{m=134;break a}}h=c[42009]|0;a[f>>0]=a[173931]|0;e=c[42017]|0;g=c[e>>2]|0;if(!(c[g+44>>2]|0)){n=c[g+16>>2]|0;c[42022]=n;c[g>>2]=c[42007];g=c[e>>2]|0;c[g+44>>2]=1;e=n}else e=c[42022]|0;if((c[42018]|0)>>>0<=((c[g+4>>2]|0)+e|0)>>>0){m=128;break e}switch(up()|0){case 0:{m=132;break d}case 2:{m=133;break e}case 1:break;default:continue a}c[42018]=c[42009];e=(((c[42016]|0)+-1|0)/2|0)+36|0}a[f>>0]=a[173931]|0;f=c[42020]|0;e=c[42019]|0}if((m|0)==128){m=0;g=i-h|0;h=c[42009]|0;f=h+(g+-1)|0;c[42018]=f;e=sp()|0;i=tp(e)|0;j=c[42009]|0;if(!i)continue;else{m=129;break}}else if((m|0)==133){m=0;f=(c[(c[c[42017]>>2]|0)+4>>2]|0)+(c[42022]|0)|0;c[42018]=f;e=sp()|0;j=c[42009]|0;continue}}if((m|0)==129){m=0;f=h+g|0;c[42018]=f;e=i;continue}else if((m|0)==132){m=0;f=(c[42009]|0)+(i-h+-1)|0;c[42018]=f;e=sp()|0;j=c[42009]|0;continue}}switch(m|0){case 29:{m=0;e=c[42010]|0;if(e|0)c[(c[c[42017]>>2]|0)+28>>2]=(a[(c[42009]|0)+(e+-1)>>0]|0)==10&1;c[4489]=(c[4489]|0)+1;continue a}case 32:{m=0;e=c[42010]|0;if(e|0)c[(c[c[42017]>>2]|0)+28>>2]=(a[(c[42009]|0)+(e+-1)>>0]|0)==10&1;c[42016]=3;continue a}case 35:{m=0;e=c[42010]|0;if(!e)continue a;c[(c[c[42017]>>2]|0)+28>>2]=(a[(c[42009]|0)+(e+-1)>>0]|0)==10&1;continue a}case 37:{m=0;e=c[42010]|0;if(!e)continue a;c[(c[c[42017]>>2]|0)+28>>2]=(a[(c[42009]|0)+(e+-1)>>0]|0)==10&1;continue a}case 39:{m=0;e=c[42010]|0;if(e|0)c[(c[c[42017]>>2]|0)+28>>2]=(a[(c[42009]|0)+(e+-1)>>0]|0)==10&1;c[42016]=1;continue a}case 42:{m=0;e=c[42010]|0;if(!e)continue a;c[(c[c[42017]>>2]|0)+28>>2]=(a[(c[42009]|0)+(e+-1)>>0]|0)==10&1;continue a}case 44:{m=0;e=c[42010]|0;if(e|0)c[(c[c[42017]>>2]|0)+28>>2]=(a[(c[42009]|0)+(e+-1)>>0]|0)==10&1;mp();continue a}case 47:{m=0;e=c[42010]|0;if(!e)continue a;c[(c[c[42017]>>2]|0)+28>>2]=(a[(c[42009]|0)+(e+-1)>>0]|0)==10&1;continue a}case 49:{m=0;e=c[42010]|0;if(!e)continue a;c[(c[c[42017]>>2]|0)+28>>2]=(a[(c[42009]|0)+(e+-1)>>0]|0)==10&1;continue a}case 51:{m=0;e=c[42010]|0;if(!e)continue a;c[(c[c[42017]>>2]|0)+28>>2]=(a[(c[42009]|0)+(e+-1)>>0]|0)==10&1;continue a}case 83:{m=0;e=c[42010]|0;if(e|0)c[(c[c[42017]>>2]|0)+28>>2]=(a[(c[42009]|0)+(e+-1)>>0]|0)==10&1;c[42016]=5;op();continue a}case 89:{m=0;e=c[42010]|0;if(e|0)c[(c[c[42017]>>2]|0)+28>>2]=(a[(c[42009]|0)+(e+-1)>>0]|0)==10&1;qp(83714);continue a}case 92:{m=0;e=c[42010]|0;if(e|0)c[(c[c[42017]>>2]|0)+28>>2]=(a[(c[42009]|0)+(e+-1)>>0]|0)==10&1;qp(81579);continue a}case 95:{m=0;e=c[42010]|0;if(e|0)c[(c[c[42017]>>2]|0)+28>>2]=(a[(c[42009]|0)+(e+-1)>>0]|0)==10&1;c[4489]=(c[4489]|0)+1;continue a}case 98:{m=0;f=c[42010]|0;e=c[42009]|0;if(f|0)c[(c[c[42017]>>2]|0)+28>>2]=(a[e+(f+-1)>>0]|0)==10&1;qp(e);continue a}case 101:{m=0;e=c[42010]|0;if(e|0)c[(c[c[42017]>>2]|0)+28>>2]=(a[(c[42009]|0)+(e+-1)>>0]|0)==10&1;c[42016]=7;c[42021]=1;op();continue a}case 104:{m=0;e=c[42010]|0;if(e|0)c[(c[c[42017]>>2]|0)+28>>2]=(a[(c[42009]|0)+(e+-1)>>0]|0)==10&1;n=(c[42021]|0)+-1|0;c[42021]=n;if(!n){m=108;break a}qp(c[42009]|0);continue a}case 109:{m=0;f=c[42010]|0;e=c[42009]|0;if(f|0)c[(c[c[42017]>>2]|0)+28>>2]=(a[e+(f+-1)>>0]|0)==10&1;c[42021]=(c[42021]|0)+1;qp(e);continue a}case 112:{m=0;f=c[42010]|0;e=c[42009]|0;if(f|0)c[(c[c[42017]>>2]|0)+28>>2]=(a[e+(f+-1)>>0]|0)==10&1;qp(e);c[4489]=(c[4489]|0)+1;continue a}case 115:{m=0;f=c[42010]|0;e=c[42009]|0;if(f|0)c[(c[c[42017]>>2]|0)+28>>2]=(a[e+(f+-1)>>0]|0)==10&1;qp(e);continue a}case 121:{m=0;f=c[42010]|0;e=c[42009]|0;if(f|0)c[(c[c[42017]>>2]|0)+28>>2]=(a[e+(f+-1)>>0]|0)==10&1;YL(e,f,1,c[42008]|0)|0;continue a}}}switch(m|0){case 27:{e=c[42010]|0;if(!e)l=-1;else{c[(c[c[42017]>>2]|0)+28>>2]=(a[(c[42009]|0)+(e+-1)>>0]|0)==10&1;l=-1}break}case 53:{e=c[42010]|0;if(!e)l=259;else{c[(c[c[42017]>>2]|0)+28>>2]=(a[(c[42009]|0)+(e+-1)>>0]|0)==10&1;l=259}break}case 55:{e=c[42010]|0;if(!e)l=260;else{c[(c[c[42017]>>2]|0)+28>>2]=(a[(c[42009]|0)+(e+-1)>>0]|0)==10&1;l=260}break}case 57:{e=c[42010]|0;if(e|0)c[(c[c[42017]>>2]|0)+28>>2]=(a[(c[42009]|0)+(e+-1)>>0]|0)==10&1;if(!(c[42014]|0)){c[42014]=258;l=258}else l=258;break}case 61:{e=c[42010]|0;if(e|0)c[(c[c[42017]>>2]|0)+28>>2]=(a[(c[42009]|0)+(e+-1)>>0]|0)==10&1;if(!(c[42014]|0)){c[42014]=261;l=261}else l=261;break}case 65:{e=c[42010]|0;if(!e)l=263;else{c[(c[c[42017]>>2]|0)+28>>2]=(a[(c[42009]|0)+(e+-1)>>0]|0)==10&1;l=263}break}case 67:{e=c[42010]|0;if(!e)l=262;else{c[(c[c[42017]>>2]|0)+28>>2]=(a[(c[42009]|0)+(e+-1)>>0]|0)==10&1;l=262}break}case 69:{e=c[42010]|0;if(e|0)c[(c[c[42017]>>2]|0)+28>>2]=(a[(c[42009]|0)+(e+-1)>>0]|0)==10&1;l=(c[42014]|0)==261?264:45;break}case 72:{e=c[42010]|0;if(e|0)c[(c[c[42017]>>2]|0)+28>>2]=(a[(c[42009]|0)+(e+-1)>>0]|0)==10&1;l=(c[42014]|0)==258?264:45;break}case 75:{f=c[42010]|0;e=c[42009]|0;if(f|0)c[(c[c[42017]>>2]|0)+28>>2]=(a[e+(f+-1)>>0]|0)==10&1;c[42037]=ap(c[41987]|0,e)|0;l=267;break}case 78:{e=c[42010]|0;if(e|0)c[(c[c[42017]>>2]|0)+28>>2]=(a[(c[42009]|0)+(e+-1)>>0]|0)==10&1;if(np()|0){m=(c[42010]|0)+-1|0;a[f>>0]=a[173931]|0;n=j+m|0;c[42018]=n;c[42009]=j;c[42010]=m;a[173931]=a[n>>0]|0;a[n>>0]=0;c[42018]=n}c[42037]=ap(c[41987]|0,c[42009]|0)|0;l=267;break}case 86:{e=c[42010]|0;if(e|0)c[(c[c[42017]>>2]|0)+28>>2]=(a[(c[42009]|0)+(e+-1)>>0]|0)==10&1;c[42016]=1;pp();l=268;break}case 108:{c[42016]=1;rp();l=268;break}case 118:{f=c[42010]|0;e=c[42009]|0;if(f|0)c[(c[c[42017]>>2]|0)+28>>2]=(a[e+(f+-1)>>0]|0)==10&1;l=a[e>>0]|0;break}case 134:{vp(81582);break}}return l|0}function jp(){var a=0,b=0,d=0;b=c[42017]|0;do if(!b){a=Cp(4)|0;c[42017]=a;if(!a)vp(81940);else{c[a>>2]=0;a=1;d=9;break}}else{a=c[42028]|0;if(0>=(a+-1|0)>>>0){a=a+8|0;b=wp(b,a<<2)|0;c[42017]=b;if(!b)vp(81940);else{d=b+(c[42028]<<2)|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[d+20>>2]=0;c[d+24>>2]=0;c[d+28>>2]=0;d=9;break}}}while(0);if((d|0)==9)c[42028]=a;return}function kp(a,b){a=a|0;b=b|0;var d=0;d=Cp(48)|0;if(!d)vp(81895);c[d+12>>2]=b;b=Cp(b+2|0)|0;c[d+4>>2]=b;if(!b)vp(81895);else{c[d+20>>2]=1;yp(d,a);return d|0}return 0}function lp(){var b=0,d=0;d=c[42017]|0;b=c[d>>2]|0;c[42022]=c[b+16>>2];b=c[b+8>>2]|0;c[42018]=b;c[42009]=b;c[42007]=c[c[d>>2]>>2];a[173931]=a[b>>0]|0;return}function mp(){var b=0,d=0,e=0,f=0,g=0,h=0,i=0;g=l;l=l+32|0;f=g;d=g+16|0;e=g+12|0;h=c[42009]|0;b=h+1|0;i=(WJ(b,81879,4)|0)==0;b=i?h+5|0:b;c[f>>2]=e;c[f+4>>2]=g+20;c[f+8>>2]=d;f=dM(b,81884,f)|0;if((f|0)>0?(c[4489]=(c[e>>2]|0)+-1,(f|0)!=1):0){d=b+(c[d>>2]|0)|0;b=d;a:while(1){e=a[b>>0]|0;switch(e<<24>>24){case 0:case 34:break a;default:{}}b=b+1|0}if((b|0)!=(d|0)&e<<24>>24==34){a[b>>0]=0;Bp(d,b-d|0)}}l=g;return}function np(){var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;j=l;l=l+2080|0;i=j+8|0;f=j;b=j+1056|0;d=j+32|0;h=j+16|0;k=a[(c[42009]|0)+((c[42010]|0)+-1)>>0]|0;e=k<<24>>24==46;if(e|((k&255)+-48|0)>>>0<10)if(e?(Ap()|0)!=0:0)g=4;else b=0;else g=4;if((g|0)==4){k=c[42011]|0;dm(h,1024,b);gm(h,81790)|0;gm(h,c[42009]|0)|0;c[f>>2]=c[4489];qL(d,81834,f)|0;gm(h,d)|0;gm(h,(k|0)==0?81784:k)|0;gm(h,81851)|0;d=h+4|0;b=c[d>>2]|0;if(b>>>0>=(c[h+8>>2]|0)>>>0){em(h,1)|0;b=c[d>>2]|0}a[b>>0]=0;b=c[h>>2]|0;c[d>>2]=b;c[i>>2]=b;$l(0,81876,i)|0;hm(h);b=1}l=j;return b|0}function op(){var b=0;b=c[42023]|0;if(!b){b=_I(1024)|0;c[42023]=b;c[42025]=b+1024}c[42024]=b;a[b>>0]=0;return}function pp(){c[42037]=ap(c[41987]|0,c[42023]|0)|0;a[c[42023]>>0]=0;return}function qp(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;e=c[42024]|0;d=c[42023]|0;if(e>>>0>d>>>0){e=e+-1|0;f=3}a:while(1){if((f|0)==3)c[42024]=e;f=c[42025]|0;g=f;do{h=b;b=b+1|0;h=a[h>>0]|0;i=e;e=e+1|0;a[i>>0]=h;if(!(h<<24>>24))break a}while(e>>>0>>0);c[42024]=e;f=d;i=g-f<<1;d=bJ(d,i)|0;c[42023]=d;c[42025]=d+i;e=d+(e-f)|0;f=3}c[42024]=e;return}function rp(){c[42037]=bp(c[41987]|0,c[42023]|0)|0;a[c[42023]>>0]=0;return}function sp(){var d=0,e=0,f=0,g=0,h=0;h=c[42018]|0;g=c[42009]|0;e=(c[(c[c[42017]>>2]|0)+28>>2]|0)+(c[42016]|0)|0;while(1){if(g>>>0>=h>>>0)break;d=a[g>>0]|0;if(!(d<<24>>24))d=1;else d=c[17960+((d&255)<<2)>>2]|0;if(b[56680+(e<<1)>>1]|0){c[42019]=e;c[42020]=g}a:while(1){f=d&255;do{d=f+(b[56866+(e<<1)>>1]|0)|0;if((e|0)==(b[57076+(d<<1)>>1]|0))break a;d=b[57612+(e<<1)>>1]|0;e=d<<16>>16}while(d<<16>>16<=92);d=c[18984+(f<<2)>>2]|0}g=g+1|0;e=b[57822+(d<<1)>>1]|0}return e|0}function tp(a){a=a|0;var d=0;if(b[56680+(a<<1)>>1]|0){d=c[42018]|0;c[42019]=a;c[42020]=d}while(1){d=(b[56866+(a<<1)>>1]|0)+1|0;if((a|0)==(b[57076+(d<<1)>>1]|0))break;a=b[57612+(a<<1)>>1]|0}d=b[57822+(d<<1)>>1]|0;return (d<<16>>16==92?0:d<<16>>16)|0}function up(){var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;j=c[42017]|0;g=c[j>>2]|0;i=c[g+4>>2]|0;f=c[42009]|0;l=c[42018]|0;k=l;if(l>>>0>(i+((c[42022]|0)+1)|0)>>>0)vp(81637);h=k-f|0;if(!(c[g+40>>2]|0))b=(h|0)==1?1:2;else{l=h+-1|0;h=i;g=0;while(1){if((g|0)>=(l|0))break;a[h>>0]=a[f>>0]|0;h=h+1|0;f=f+1|0;g=g+1|0}f=c[j>>2]|0;do if((c[f+44>>2]|0)==2){c[42022]=0;c[f+16>>2]=0;e=f;m=17}else{while(1){i=f+12|0;h=c[i>>2]|0;g=h-l+-1|0;if(g|0){m=16;break}g=f+4|0;j=c[g>>2]|0;if(!(c[f+20>>2]|0)){m=12;break}f=h<<1;f=(f|0)==0?(h>>>3)+h|0:f;c[i>>2]=f;f=wp(j,f+2|0)|0;c[g>>2]=f;if(!f)break;j=f+(k-j)|0;c[42018]=j;f=c[c[42017]>>2]|0;k=j}if((m|0)==12)c[g>>2]=0;else if((m|0)==16){d=bb[c[c[(c[42012]|0)+8>>2]>>2]&31](c[42013]|0,(c[f+4>>2]|0)+l|0,g>>>0<8192?g:8192)|0;e=c[c[42017]>>2]|0;c[42022]=d;c[e+16>>2]=d;if(!d){m=17;break}else{b=0;break}}vp(81693)}while(0);do if((m|0)==17)if(!l){xp(c[42007]|0);b=1;d=c[42022]|0;e=c[c[42017]>>2]|0;break}else{c[e+44>>2]=2;b=2;d=0;break}while(0);f=d+l|0;do if(f>>>0>(c[e+12>>2]|0)>>>0){m=wp(c[e+4>>2]|0,f+(d>>>1)|0)|0;d=c[42017]|0;c[(c[d>>2]|0)+4>>2]=m;d=c[(c[d>>2]|0)+4>>2]|0;if(!d)vp(81737);else{n=c[42022]|0;o=d;break}}else{n=d;o=c[e+4>>2]|0}while(0);n=n+l|0;c[42022]=n;a[o+n>>0]=0;o=c[42017]|0;a[(c[(c[o>>2]|0)+4>>2]|0)+((c[42022]|0)+1)>>0]=0;c[42009]=c[(c[o>>2]|0)+4>>2]}return b|0}function vp(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=c[13918]|0;c[b>>2]=a;AL(d,81633,b)|0;Ma(2)}function wp(a,b){a=a|0;b=b|0;return bJ(a,b)|0}function xp(a){a=a|0;var b=0,d=0,e=0;d=c[42017]|0;if((d|0)!=0?(b=c[d>>2]|0,(b|0)!=0):0)e=4;else{jp();b=kp(c[42007]|0,16384)|0;d=c[42017]|0;c[d>>2]=b;if(!d)b=0;else e=4}yp(b,a);lp();return}function yp(a,b){a=a|0;b=b|0;var d=0;d=c[(kJ()|0)>>2]|0;zp(a);c[a>>2]=b;c[a+40>>2]=1;b=c[42017]|0;if(!b)b=0;else b=c[b>>2]|0;if((b|0)!=(a|0)){c[a+32>>2]=1;c[a+36>>2]=0}c[a+24>>2]=0;c[(kJ()|0)>>2]=d;return}function zp(b){b=b|0;var d=0;if(b|0){c[b+16>>2]=0;d=b+4|0;a[c[d>>2]>>0]=0;a[(c[d>>2]|0)+1>>0]=0;c[b+8>>2]=c[d>>2];c[b+28>>2]=1;c[b+44>>2]=0;d=c[42017]|0;if(!d)d=0;else d=c[d>>2]|0;if((d|0)==(b|0))lp()}return}function Ap(){var b=0,d=0;d=c[42009]|0;b=(c[42010]|0)+-2|0;while(1){if((b|0)<=-1){b=0;break}if((a[d+b>>0]|0)==46){b=1;break}else b=b+-1|0}return b|0}function Bp(a,b){a=a|0;b=b|0;var d=0;d=c[42026]|0;if((d|0)<(b|0)){if(!d)d=_I(b+1|0)|0;else d=bJ(c[42027]|0,b+1|0)|0;c[42027]=d;c[42026]=b}else d=c[42027]|0;yK(d,a)|0;c[42011]=c[42027];return}function Cp(a){a=a|0;return _I(a)|0}function Dp(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+2112|0;k=m+32|0;i=m+24|0;h=m+16|0;g=m+8|0;f=m;d=m+56|0;j=m+40|0;dm(j,1024,m+1080|0);e=c[42011]|0;if(e|0){gm(j,e)|0;gm(j,81990)|0}gm(j,b)|0;c[f>>2]=c[4489];qL(d,81993,f)|0;gm(j,d)|0;a:do if(!(a[c[42009]>>0]|0))switch(((c[42016]|0)+-1|0)/2|0|0){case 2:{c[g>>2]=16384;qL(d,82013,g)|0;gm(j,d)|0;b=c[42023]|0;if(!(a[b>>0]|0))break a;i=sJ(b)|0;gm(j,82075)|0;b=c[42023]|0;if((i|0)>80)a[b+80>>0]=0;gm(j,b)|0;break a}case 3:{c[h>>2]=16384;qL(d,82094,h)|0;gm(j,d)|0;b=c[42023]|0;if(!(a[b>>0]|0))break a;i=sJ(b)|0;gm(j,82162)|0;b=c[42023]|0;if((i|0)>80)a[b+80>>0]=0;gm(j,b)|0;break a}case 1:{c[i>>2]=16384;qL(d,82181,i)|0;gm(j,d)|0;break a}default:break a}else{gm(j,82005)|0;gm(j,c[42009]|0)|0;d=j+4|0;b=c[d>>2]|0;if(b>>>0>=(c[j+8>>2]|0)>>>0){em(j,1)|0;b=c[d>>2]|0}c[d>>2]=b+1;a[b>>0]=39}while(0);e=j+4|0;b=c[e>>2]|0;d=j+8|0;if(b>>>0>=(c[d>>2]|0)>>>0){em(j,1)|0;b=c[e>>2]|0}c[e>>2]=b+1;a[b>>0]=10;b=c[e>>2]|0;if(b>>>0>=(c[d>>2]|0)>>>0){em(j,1)|0;b=c[e>>2]|0}a[b>>0]=0;i=c[j>>2]|0;c[e>>2]=i;c[k>>2]=i;$l(1,81876,k)|0;hm(j);l=m;return}function Ep(){Fp(c[42009]|0);return}function Fp(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;j=c[42018]|0;a[j>>0]=a[173931]|0;i=c[42017]|0;e=c[i>>2]|0;d=c[e+4>>2]|0;if(j>>>0<(d+2|0)>>>0){f=d+((c[42022]|0)+2)|0;g=d+((c[e+12>>2]|0)+2)|0;k=d;h=e;while(1){if(f>>>0<=k>>>0)break;e=f+-1|0;k=g+-1|0;a[k>>0]=a[e>>0]|0;h=c[i>>2]|0;f=e;g=k;k=c[h+4>>2]|0}e=g-f|0;d=j+e|0;j=c[h+12>>2]|0;c[42022]=j;c[h+16>>2]=j;if(d>>>0<(k+2|0)>>>0)vp(82240);else{l=b+e|0;m=d}}else{l=b;m=j}b=m+-1|0;a[b>>0]=64;c[42009]=l;a[173931]=a[b>>0]|0;c[42018]=b;return}function Gp(){var a=0;a=c[42017]|0;if(!a)a=0;else a=c[a>>2]|0;zp(a);return}function Hp(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+80|0;f=e;g=a+52|0;Tp(a,c[g>>2]|0,17604);a=f+8|0;c[a>>2]=b;c[a+4>>2]=d;d=c[g>>2]|0;d=bb[c[d>>2]&31](d,f,4)|0;l=e;return d|0}function Ip(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=Hp(b,d,e)|0;if(!f){f=Zn(b,72)|0;c[f+64>>2]=c[b+64>>2];g=f+24|0;h=c[b+24>>2]|0;c[g>>2]=h;a[g>>0]=h&255&-9;c[f+56>>2]=b;c[f+60>>2]=c[b+60>>2];b=f+8|0;c[b>>2]=d;c[b+4>>2]=e;kn(f)|0}return f|0}function Jp(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;f=g;if(!(((b|0)!=0?(Bn(a,0,b,f,0)|0)!=0:0)?(e=f,e=Hp(a,c[e>>2]|0,c[e+4>>2]|0)|0,(e|0)!=0):0))if((d|0)!=0?(Bn(a,0,b,f,1)|0)!=0:0){e=f;e=Ip(a,c[e>>2]|0,c[e+4>>2]|0)|0;Fn(a,0,e)}else e=0;l=g;return e|0}function Kp(a){a=a|0;a=c[a+52>>2]|0;return bb[c[a>>2]&31](a,0,128)|0}function Lp(a){a=a|0;var b=0;b=Mp(a)|0;if(!b)a=0;else{b=c[b+52>>2]|0;a=bb[c[b>>2]&31](b,a,8)|0}return a|0}function Mp(a){a=a|0;return c[a+56>>2]|0}function Np(a,b){a=a|0;b=b|0;a=c[a+52>>2]|0;return bb[c[a>>2]&31](a,b,2)|0}function Op(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=c[42029]|0;e=(b|0)!=0;do if(!a)if(e){$I(b);a=0;break}else{a=_I(d)|0;break}else if(e){_n(a,b);a=0;break}else{a=Zn(a,d)|0;break}while(0);return a|0}function Pp(a,b,d){a=a|0;b=b|0;d=d|0;a=c[42029]|0;if(!a)$I(b);else _n(a,b);return}function Qp(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=b+28|0;f=c[e>>2]|0;c[e>>2]=2;c[42029]=a;d=Rl(b,d)|0;c[e>>2]=f;c[42029]=0;return d|0}function Rp(a,b,d){a=a|0;b=b|0;d=d|0;c[42029]=a;return bb[c[b>>2]&31](b,d,2)|0}function Sp(a,b){a=a|0;b=b|0;var d=0,e=0;d=(Ml(b,0,0)|0)+28|0;e=c[d>>2]|0;c[d>>2]=2;c[42029]=a;if(!(Ll(b)|0)){c[d>>2]=e;c[42029]=0;a=0}else a=1;return a|0}function Tp(a,b,c){a=a|0;b=b|0;c=c|0;if(c|0?(Ml(b,0,0)|0)!=(c|0):0)Ml(b,c,0)|0;return}function Up(a,b){a=a|0;b=b|0;if(!(dp(a)|0))b=Wp(a,b)|0;else Vp(a,b)|0;return b|0}function Vp(b,c){b=b|0;c=c|0;var d=0,e=0,f=0;a[c>>0]=60;e=c;while(1){d=e+1|0;f=a[b>>0]|0;if(!(f<<24>>24))break;a[d>>0]=f;b=b+1|0;e=d}a[d>>0]=62;a[e+2>>0]=0;return c|0}function Wp(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;a:do if((b|0)!=0?(a[b>>0]|0)!=0:0){a[d>>0]=34;l=a[b>>0]|0;q=0;g=((l+-45&255)<2|((l&255)+-48|0)>>>0<10)&1;h=0;i=0;j=0;e=d+1|0;f=b+1|0;b:while(1){k=e;while(1){if(!(l<<24>>24))break b;e=l&255;c:do if(l<<24>>24==34){a[k>>0]=92;m=g;n=1;k=k+1|0}else{if(!g){n=l<<24>>24>-1&(l<<24>>24!=95&(hK(e)|0)==0);m=0;n=n?1:h;break}switch(l<<24>>24){case 45:{n=(j|0)==0;m=n?g:0;n=n?h:1;break c}case 46:{n=(i|0)==0;m=n?g:0;n=n?h:1;i=i+1|0;break c}default:{n=(e+-48|0)>>>0<10;m=n?g:0;n=n?h:1;break c}}}while(0);e=k+1|0;a[k>>0]=l;p=f+1|0;o=a[f>>0]|0;j=j+1|0;f=c[4795]|0;if(!f){g=m;h=n;k=e;f=p;l=o;continue}g=o&255;h=o<<24>>24!=0;if((q&h?!(l<<24>>24==92|l<<24>>24>-1&((l+-45&255)>1&(hK(l<<24>>24)|0)==0)^1):0)?!(o<<24>>24>-1&((o+-45&255)>1&(hK(g)|0)==0)):0)break;if((j|0)<(f|0)|h^1){g=m;h=n;k=e;f=p;l=o;continue}if(l<<24>>24==92|l<<24>>24>-1&((hK(l<<24>>24)|0)==0&(l+-45&255)>1)^1){q=1;g=m;h=n;l=o;f=p;continue b}if(o<<24>>24>-1&((o+-45&255)>1&(hK(g)|0)==0)){q=1;g=m;h=n;l=o;f=p;continue b}a[e>>0]=92;a[k+2>>0]=10;g=m;h=1;j=0;k=k+3|0;f=p;l=o}a[e>>0]=92;a[k+2>>0]=10;q=0;g=m;h=1;j=0;l=o;e=k+3|0;f=p}a[k>>0]=34;a[k+1>>0]=0;if(!h){if((j|0)==1?((a[b>>0]|0)+-45&255)<2:0){b=d;break}else e=19184;while(1){f=c[e>>2]|0;if(!f)break a;if(!(jK(f,b)|0)){b=d;break}else e=e+4|0}}else b=d}else b=82272;while(0);return b|0}function Xp(a){a=a|0;return Up(a,Yp(a)|0)|0}function Yp(a){a=a|0;var b=0;b=((sJ(a)|0)<<1)+2|0;b=b>>>0>1024?b:1024;a=c[42031]|0;if(b>>>0>(c[42030]|0)>>>0){if(!a)a=_I(b)|0;else a=bJ(a,b)|0;c[42031]=a;c[42030]=b}return a|0}function Zp(a,b){a=a|0;b=b|0;a=Kp(a)|0;while(1){if(!a){a=0;break}if((_p(a)|0)==0?jo(a,b,0)|0:0){a=1;break}a=Lp(a)|0}return a|0}function _p(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=En(b)|0;if((h|0)!=0?(a[h>>0]|0)!=37:0)d=0;else e=3;a:do if((e|0)==3){d=pm(b)|0;b:do if(d|0?(f=pm(Mp(b)|0)|0,f|0):0){h=Tl(c[(pm(to(b)|0)|0)+8>>2]|0)|0;g=d+12|0;e=f+12|0;d=0;while(1){if((d|0)>=(h|0))break b;f=c[(c[g>>2]|0)+(d<<2)>>2]|0;if((f|0?(i=c[(c[e>>2]|0)+(d<<2)>>2]|0,i|0):0)?yJ(f,i)|0:0){d=0;break a}d=d+1|0}}while(0);d=km(b,0)|0;if(d)if((Tl(c[d+8>>2]|0)|0)>0)d=0;else return (Tl(c[d+12>>2]|0)|0)<1|0;else d=1}while(0);return d|0}function $p(b,d){b=b|0;d=d|0;var e=0,f=0;c[42032]=0;e=Jm(b,82282)|0;if((e|0?((a[e>>0]|0)+-48|0)>>>0<10:0)?(f=CL(e,0,10)|0,(f|0)==0|(f|0)>59):0)c[4795]=f;aq(b,1);if(((bq(b,d,1)|0)!=-1?(cq(b,d)|0)!=-1:0)?(dq(b,d)|0)!=-1:0){c[4795]=128;b=$a[c[(c[(c[b+64>>2]|0)+8>>2]|0)+8>>2]&31](d)|0}else b=-1;return b|0}function aq(a,b){a=a|0;b=b|0;var d=0;c[a>>2]=c[a>>2]&-9;d=Kp(a)|0;while(1){if(!d)break;aq(d,0);d=Lp(d)|0}a:do if(b|0){b=eo(a)|0;while(1){if(!b)break a;c[b>>2]=c[b>>2]&-9;d=Qm(a,b)|0;while(1){if(!d)break;c[d>>2]=c[d>>2]&-9;d=Sm(a,d)|0}b=fo(a,b)|0}}while(0);return}function bq(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;if((e|0)==0?(Mp(b)|0)!=0:0){i=0;g=174185;k=94336}else{k=(a[b+24>>0]&1)==0?174185:82326;g=(tn(b)|0)==0;c[42033]=zm(b,2,96242,0)|0;c[42034]=zm(b,2,96251,0)|0;i=1;g=g?174185:82329}f=En(b)|0;if((f|0)!=0?(a[f>>0]|0)!=37:0){h=1;j=87638}else{h=0;j=174185;f=174185}do if((eq(b,d)|0)!=-1?(fq(b,d,g)|0)!=-1:0){g=(h|0)==0;if(h|i|0){if((fq(b,d,k)|0)==-1){f=-1;break}if((fq(b,d,87631)|0)==-1){f=-1;break}}if(!g?(qq(b,d,f)|0)==-1:0){f=-1;break}if(((fq(b,d,j)|0)!=-1?(fq(b,d,82337)|0)!=-1:0)?(c[42032]=(c[42032]|0)+1,(vq(b,d,e)|0)!=-1):0){c[b>>2]=c[b>>2]|8;f=0}else f=-1}else f=-1;while(0);return f|0}function cq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;a:do if((gq(a,b)|0)==-1)d=-1;else{k=km(to(a)|0,0)|0;i=(k|0)==0;j=k+12|0;k=k+8|0;h=eo(a)|0;while(1){if(!h){d=0;break a}if(hq(a,h,(c[h>>2]|0)>>>4,0)|0){if(i)d=0;else d=c[k>>2]|0;if((iq(h,b,d)|0)==-1){d=-1;break a}}g=Qm(a,h)|0;d=h;while(1){if(!g)break;f=g+-48|0;e=c[((c[g>>2]&3|0)==2?g:f)+40>>2]|0;if((d|0)!=(e|0)?(hq(a,e,(c[h>>2]|0)>>>4,0)|0)!=0:0){if(i)d=0;else d=c[k>>2]|0;if((iq(c[((c[g>>2]&3|0)==2?g:f)+40>>2]|0,b,d)|0)==-1){d=-1;break a}d=c[((c[g>>2]&3|0)==2?g:f)+40>>2]|0}if(jq(a,g)|0){if(i)e=0;else e=c[j>>2]|0;if((kq(g,b,e)|0)==-1){d=-1;break a}}g=Sm(a,g)|0}h=fo(a,h)|0}}while(0);return d|0}function dq(a,b){a=a|0;b=b|0;c[42032]=(c[42032]|0)+-1;if((eq(a,b)|0)==-1)a=-1;else a=((fq(a,b,95830)|0)==-1)<<31>>31;return a|0}function eq(a,b){a=a|0;b=b|0;var d=0;d=c[42032]|0;while(1){if((d|0)<=0){d=0;break}if((fq(a,b,134899)|0)==-1){d=-1;break}else d=d+-1|0}return d|0}function fq(a,b,d){a=a|0;b=b|0;d=d|0;return ab[c[(c[(c[a+64>>2]|0)+8>>2]|0)+4>>2]&63](b,d)|0}function gq(a,b){a=a|0;b=b|0;a=Kp(a)|0;while(1){if(!a){a=0;break}if(!(_p(a)|0)){if((bq(a,b,0)|0)==-1){a=-1;break}if((cq(a,b)|0)==-1){a=-1;break}if((dq(a,b)|0)==-1){a=-1;break}}else gq(a,b)|0;a=Lp(a)|0}return a|0}function hq(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;if((Zp(a,b)|0)==0?(sq(a,b,c,d)|0)!=0:0)if((tq(a,b)|0)==0?(uq(b)|0)==0:0)e=5;else a=1;else e=5;if((e|0)==5)a=0;return a|0}function iq(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=so(a)|0;do if((eq(d,b)|0)!=-1?(lq(a,b)|0)!=-1:0){if((nq(a)|0)==0?(oq(a,b,c)|0)==-1:0){a=-1;break}a=fq(d,b,82293)|0}else a=-1;while(0);return a|0}function jq(a,b){a=a|0;b=b|0;a=Kp(a)|0;while(1){if(!a){a=1;break}if((_p(a)|0)==0?fn(a,b,0)|0:0){a=0;break}a=Lp(a)|0}return a|0}function kq(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=c[a>>2]&3;g=c[((e|0)==3?a:a+48|0)+40>>2]|0;e=c[((e|0)==2?a:a+-48|0)+40>>2]|0;f=so(g)|0;do if((((((eq(f,b)|0)!=-1?(lq(g,b)|0)!=-1:0)?(mq(a,b,c[42033]|0)|0)!=-1:0)?(g=(rn(so(g)|0)|0)!=0,(fq(f,b,g?85095:85100)|0)!=-1):0)?(lq(e,b)|0)!=-1:0)?(mq(a,b,c[42034]|0)|0)!=-1:0){if(!(nq(a)|0)){if((oq(a,b,d)|0)==-1){a=-1;break}}else if((pq(a,b,1)|0)==-1){a=-1;break}a=fq(f,b,82293)|0}else a=-1;while(0);return a|0}function lq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+32|0;g=i;d=i+8|0;e=En(a)|0;f=so(a)|0;if(!e){j=a+8|0;a=c[j+4>>2]|0;e=g;c[e>>2]=c[j>>2];c[e+4>>2]=a;qL(d,82313,g)|0;if((fq(f,b,d)|0)==-1)a=-1;else h=4}else if((qq(f,b,e)|0)==-1)a=-1;else h=4;if((h|0)==4)a=0;l=i;return a|0}function mq(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0;a:do if((d|0)!=0?(e=so(b)|0,f=Km(b,d)|0,(a[f>>0]|0)!=0):0)if((fq(e,c,93017)|0)==-1)b=-1;else{do if(dp(f)|0){if((qq(e,c,f)|0)==-1){b=-1;break a}}else{b=XJ(f,58)|0;if(!b)if((rq(e,c,f,0)|0)==-1){b=-1;break a}else break;a[b>>0]=0;if((rq(e,c,f,0)|0)==-1){b=-1;break a}if((fq(e,c,93017)|0)==-1){b=-1;break a}if((rq(e,c,b+1|0,0)|0)==-1){b=-1;break a}a[b>>0]=58}while(0);b=0}else b=0;while(0);return b|0}function nq(a){a=a|0;return (c[a>>2]|0)>>>3&1|0}function oq(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;a:do if(!(c[a>>2]&2)){e=0;k=4}else{switch(pq(a,b,0)|0){case -1:{e=-1;break a}case 0:{e=0;k=4;break a}default:{}}e=1;k=4}while(0);b:do if((k|0)==4){f=pm(a)|0;j=so(a)|0;c:do if(f){i=f+12|0;h=bb[c[d>>2]&31](d,0,128)|0;while(1){if(!h)break c;do if(c[a>>2]&2){g=c[42033]|0;if(g|0?(c[h+16>>2]|0)==(c[g+16>>2]|0):0)break;g=c[42034]|0;if(!((g|0)!=0?(c[h+16>>2]|0)==(c[g+16>>2]|0):0))k=12}else k=12;while(0);if((k|0)==12){k=0;f=h+16|0;if((c[(c[i>>2]|0)+(c[f>>2]<<2)>>2]|0)!=(c[h+12>>2]|0)){g=e+1|0;if(e){if((fq(j,b,82308)|0)==-1){e=-1;break b}if((eq(j,b)|0)==-1){e=-1;break b}}else{if((eq(j,b)|0)==-1){e=-1;break b}if((fq(j,b,82305)|0)==-1){e=-1;break b}c[42032]=(c[42032]|0)+1}if((qq(j,b,c[h+8>>2]|0)|0)==-1){e=-1;break b}if((fq(j,b,82311)|0)==-1){e=-1;break b}if((qq(j,b,c[(c[i>>2]|0)+(c[f>>2]<<2)>>2]|0)|0)==-1){e=-1;break b}else e=g}}h=bb[c[d>>2]&31](d,h,8)|0}}while(0);if((e|0)>0){if((fq(j,b,82303)|0)==-1){e=-1;break}c[42032]=(c[42032]|0)+-1}c[a>>2]=c[a>>2]|8;e=0}while(0);return e|0}function pq(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0;e=En(b)|0;b=so(b)|0;if((e|0)!=0?(a[e>>0]|0)!=0:0)if((fq(b,c,82296)|0)!=-1?(qq(b,c,e)|0)!=-1:0)if((d|0)!=0?(fq(b,c,82303)|0)==-1:0)b=-1;else{b=1;f=7}else b=-1;else{b=0;f=7}return b|0}function qq(a,b,c){a=a|0;b=b|0;c=c|0;return rq(a,b,c,1)|0}function rq(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;if(!d)c=Wp(c,Yp(c)|0)|0;else c=Xp(c)|0;return fq(a,b,c)|0}function sq(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a:do if(0>>0|(0==(e|0)?(c[b>>2]|0)>>>4>>>0>>0:0))b=0;else{b=Tm(a,b)|0;while(1){if(!b){b=1;break a}if(0>>0|(0==(e|0)?(c[c[b+40>>2]>>2]|0)>>>4>>>0>>0:0)){b=0;break a}b=Um(a,b)|0}}while(0);return b|0}function tq(a,b){a=a|0;b=b|0;if(!(Tm(a,b)|0))a=(Qm(a,b)|0)==0&1;else a=0;return a|0}function uq(a){a=a|0;var b=0,d=0,e=0;a=pm(a)|0;a:do if(!a)a=0;else{d=a+8|0;e=c[d>>2]|0;b=a+12|0;a=bb[c[e>>2]&31](e,0,128)|0;while(1){if(!a){a=0;break a}if((c[(c[b>>2]|0)+(c[a+16>>2]<<2)>>2]|0)!=(c[a+12>>2]|0)){a=1;break a}e=c[d>>2]|0;a=bb[c[e>>2]&31](e,a,8)|0}}while(0);return a|0}function vq(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=km(a,0)|0;if(e)if(((wq(a,b,96286,c[e+16>>2]|0,d)|0)!=-1?(wq(a,b,96273,c[e+8>>2]|0,d)|0)!=-1:0)?(wq(a,b,96237,c[e+12>>2]|0,d)|0)!=-1:0)f=5;else a=-1;else f=5;if((f|0)==5)a=0;return a|0}function wq(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;m=(g|0)!=0;if(m)l=0;else l=Xl(f,0)|0;k=(l|0)==0;j=bb[c[f>>2]&31](f,0,128)|0;g=0;while(1){if(!j){n=23;break}i=j+12|0;n=c[i>>2]|0;if((n|0)!=0?(a[n>>0]|0)!=0:0)n=12;else n=7;do if((n|0)==7){n=0;if(!(a[j+22>>0]|0)){if(!k){h=bb[c[l>>2]&31](l,j,4)|0;o=c[h+12>>2]|0;if(o|0?a[o>>0]|0:0){n=12;break}if(!(a[h+22>>0]|0))n=12}}else n=12}while(0);if((n|0)==12){n=0;h=g+1|0;if(g){if((fq(b,d,82308)|0)==-1){g=-1;break}if((eq(b,d)|0)==-1){g=-1;break}}else{if((eq(b,d)|0)==-1){g=-1;break}if((fq(b,d,e)|0)==-1){g=-1;break}if((fq(b,d,82305)|0)==-1){g=-1;break}c[42032]=(c[42032]|0)+1}if((qq(b,d,c[j+8>>2]|0)|0)==-1){g=-1;break}if((fq(b,d,82311)|0)==-1){g=-1;break}if((qq(b,d,c[i>>2]|0)|0)==-1){g=-1;break}else g=h}j=bb[c[f>>2]&31](f,j,8)|0}do if((n|0)==23){if((g|0)>0){c[42032]=(c[42032]|0)+-1;if((g|0)!=1){if((fq(b,d,134901)|0)==-1){g=-1;break}if((eq(b,d)|0)==-1){g=-1;break}}g=(fq(b,d,82340)|0)==-1;if(m|g){g=g<<31>>31;break}}else if(m){g=0;break}Xl(f,l)|0;g=0}while(0);return g|0}function xq(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;switch(c[b>>2]&3){case 0:{g=19;break}case 1:{g=20;break}case 3:case 2:{g=21;break}default:{}}b=ab[g&63](a,b)|0;if(!b)b=-1;else{Bq(a,b,d,e,g,f);b=0}return b|0}function yq(a,b){a=a|0;b=b|0;if((so(b)|0)!=(a|0))b=fn(a,b,0)|0;return b|0}function zq(a,b){a=a|0;b=b|0;if((so(b)|0)!=(a|0))b=jo(a,b,0)|0;return b|0}function Aq(a,b){a=a|0;b=b|0;return a|0}function Bq(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;h=(f|0)!=0;if(h)ib[c&127](a,b,d);g=Kp(a)|0;while(1){if(!g)break;i=ab[e&63](g,b)|0;if(i|0)Bq(g,i,c,d,e,f);g=Lp(g)|0}if(!h)ib[c&127](a,b,d);return}function Cq(){var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=l;l=l+1200|0;r=t+800|0;g=t;c[42035]=0;c[42036]=-2;f=r;i=200;n=g;p=0;q=0;o=r;a:while(1){b[o>>1]=p;if((f+(i<<1)+-2|0)>>>0>o>>>0)k=i;else{m=o-f>>1;e=m+1|0;if(i>>>0>9999){s=75;break}k=i<<1;k=k>>>0<1e4?k:1e4;h=_I(k*6|3)|0;if(h){UN(h|0,f|0,e<<1|0)|0;i=h+(k>>>1<<2)|0;UN(i|0,n|0,e<<2|0)|0;if((f|0)==(r|0)){e=0;f=h}else{$I(f);e=0;f=h}}else{e=4;i=n}j=(e|0)==0;h=f+(m<<1)|0;switch((j?((f+(k<<1)+-2|0)>>>0>h>>>0?0:9):e)&15){case 9:{e=1;s=76;break a}case 4:{s=75;break a}case 0:{g=j?i+(m<<2)|0:g;n=i;o=j?h:o;break}default:{e=0;break a}}}if((p|0)==6){e=0;s=76;break}e=a[82344+p>>0]|0;j=e<<24>>24;do if(e<<24>>24!=-18){h=c[42036]|0;if((h|0)==-2){h=ip()|0;c[42036]=h}if((h|0)>=1)if(h>>>0<269)i=d[82424+h>>0]|0;else i=2;else{c[42036]=0;i=0}h=i+j|0;if(h>>>0<=59?(i|0)==(d[82693+h>>0]|0):0){p=a[82753+h>>0]|0;e=p<<24>>24;if(p<<24>>24<1){h=0-e|0;s=23;break}else{c[42036]=-2;g=g+4|0;c[g>>2]=c[42037];j=(q|0)==0?0:q+-1|0;h=o;break}}else s=22}else s=22;while(0);if((s|0)==22){s=0;p=a[82813+p>>0]|0;h=p&255;if(!(p<<24>>24)){h=c[42036]|0;b:do switch(q|0){case 0:{c[42035]=(c[42035]|0)+1;Dp(125369);h=o;break}case 3:if((h|0)<1)if(!h){e=1;s=76;break a}else{h=o;break b}else{c[42036]=-2;h=o;break b}default:h=o}while(0);while(1){if(e<<24>>24==18)break;if((h|0)==(f|0)){e=1;s=76;break a}e=h+-2|0;g=g+-4|0;h=e;e=a[82344+(b[e>>1]|0)>>0]|0}g=g+4|0;c[g>>2]=c[42037];e=1;j=3}else s=23}do if((s|0)==23){s=0;i=d[82893+h>>0]|0;e=c[g+(1-i<<2)>>2]|0;c:do switch(h|0){case 2:{Dq();Eq();break}case 3:{if(c[42038]|0){Dq();Eq();mn(c[42038]|0)|0;c[41987]=0;c[42038]=0}break}case 6:{Fq(c[g>>2]|0,c[g+-4>>2]|0,c[g+-8>>2]|0);break}case 7:{e=c[g>>2]|0;break}case 8:{e=0;break}case 9:{e=1;break}case 10:{e=0;break}case 11:{e=0;break}case 12:{e=1;break}case 21:if(!(c[g+-4>>2]|0)){Hq();break c}else{Gq();break c}case 24:{Iq();break}case 25:{Iq();break}case 26:{e=1;break}case 27:{e=0;break}case 30:{Jq(c[g>>2]|0,0,0);break}case 31:{Jq(c[g+-8>>2]|0,c[g>>2]|0,0);break}case 32:{Jq(c[g+-16>>2]|0,c[g+-8>>2]|0,c[g>>2]|0);break}case 33:{Kq(c[g+-8>>2]|0,c[g+-4>>2]|0);break}case 34:{Kq(258,0);break}case 35:{e=258;break}case 36:{e=259;break}case 37:{e=260;break}case 38:{e=c[g+-4>>2]|0;break}case 39:{e=0;break}case 48:{Lq(c[g+-8>>2]|0,c[g>>2]|0);break}case 49:{Lq(c[g>>2]|0,0);break}case 51:{Mq(c[g>>2]|0);break}case 52:{Nq();break}case 53:{e=c[g>>2]|0;break}case 54:{e=0;break}case 55:{e=0;break}case 59:{e=c[g>>2]|0;break}case 60:{e=c[g>>2]|0;break}case 61:{e=c[g>>2]|0;break}case 62:{e=Oq(c[g+-8>>2]|0,c[g>>2]|0)|0;break}default:{}}while(0);i=0-i|0;p=g+(i<<2)|0;i=o+(i<<1)|0;g=p+4|0;c[p+4>>2]=e;e=(d[82956+h>>0]|0)+-24|0;p=b[i>>1]|0;h=p+(a[83019+e>>0]|0)|0;if(h>>>0<60?(d[82693+h>>0]|0)==(p|0):0){e=a[82753+h>>0]|0;j=q;h=i;break}e=a[83054+e>>0]|0;j=q;h=i}while(0);i=k;p=e;q=j;o=h+2|0}if((s|0)==75){Dp(125382);e=2;s=76}if((s|0)==76)if((f|0)!=(r|0))$I(f);l=t;return e|0}function Dq(){var a=0,b=0;a=c[42039]|0;while(1){if(!a)break;Wq(a+8|0);Wq((c[42039]|0)+24|0);Wq((c[42039]|0)+16|0);b=Pq(c[42039]|0)|0;c[42039]=b;a=b}return}function Eq(){Ep();Nn(c[42038]|0);return}function Fq(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;g=h;f=c[42038]|0;if(!f){a[168160]=d&1|(e&255)<<1&2|a[168160]&-12|8;f=c[42041]|0;a[g>>0]=a[168160]|0;a[g+1>>0]=a[168161]|0;a[g+2>>0]=a[168162]|0;a[g+3>>0]=a[168163]|0;f=hn(b,g,f)|0;c[42038]=f}c[41987]=f;c[42039]=Qq(c[42039]|0,f)|0;cp(0,b)|0;l=h;return}function Gq(){var b=0,d=0,e=0,f=0,g=0,h=0;Vq(2);e=c[42039]|0;f=a[83089]|0;h=0;b=e+24|0;while(1){d=c[b>>2]|0;if(!d)break;if(((c[d>>2]|0)==267?(g=c[d+4>>2]|0,(a[g>>0]|0)==f<<24>>24):0)?(yJ(g,83089)|0)==0:0)b=c[d+8>>2]|0;else b=h;h=b;b=d+12|0}b=e+16|0;a:while(1){e=c[b>>2]|0;b=e+12|0;if(!(c[b>>2]|0))break;d=e+4|0;if((c[e>>2]|0)==262){e=c[d>>2]|0;d=eo(e)|0;while(1){if(!d)continue a;g=jo(c[c[42039]>>2]|0,d,0)|0;br(g,0,c[b>>2]|0,h);d=fo(e,d)|0}}else while(1){d=c[d>>2]|0;if(!d)continue a;br(c[d+4>>2]|0,c[d+8>>2]|0,c[b>>2]|0,h);d=d+12|0}}Wq((c[42039]|0)+8|0);Wq((c[42039]|0)+16|0);Wq((c[42039]|0)+24|0);c[(c[42039]|0)+4>>2]=0;return}function Hq(){var a=0;Vq(1);a=(c[42039]|0)+8|0;while(1){a=c[a>>2]|0;if(!a)break;ar(c[a+4>>2]|0);a=a+12|0}Wq((c[42039]|0)+8|0);Wq((c[42039]|0)+24|0);Wq((c[42039]|0)+16|0);c[(c[42039]|0)+4>>2]=0;return}function Iq(){var a=0,b=0;a=c[42039]|0;b=c[a+8>>2]|0;if(!b){b=c[a+4>>2]|0;if(!b)b=0;else{b=$q(b)|0;a=c[42039]|0}c[a+4>>2]=0}else{b=_q(b)|0;a=c[42039]|0;c[a+12>>2]=0;c[a+8>>2]=0}if(b|0)Sq(a+16|0,b);return}function Jq(a,b,d){a=a|0;b=b|0;d=d|0;if(d)b=Yq(b,d)|0;d=Zq(oo(c[c[42039]>>2]|0,a,1)|0,b)|0;Sq((c[42039]|0)+8|0,d);cp(c[42038]|0,a)|0;return}function Kq(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;if(d|0)Uq();d=(c[42039]|0)+24|0;while(1){d=c[d>>2]|0;if(!d)break;if(!(c[d+8>>2]|0))Uq();d=d+12|0}g=(b|0)==260?2:(b|0)==259&1;Vq(g);b=c[42039]|0;d=b+24|0;while(1){f=c[d>>2]|0;if(!f)break;do if((c[f>>2]|0)!=267){d=c[f+4>>2]|0;e=c[b>>2]|0;if(!((a[d+21>>0]|0)!=0&(e|0)==(c[42038]|0))){d=zm(e,g,c[d+8>>2]|0,c[f+8>>2]|0)|0;b=c[42039]|0;if((c[b>>2]|0)!=(c[42038]|0))break}a[d+22>>0]=1}while(0);d=f+12|0}Wq(b+24|0);return}function Lq(a,b){a=a|0;b=b|0;b=Rq(a,b)|0;Sq((c[42039]|0)+24|0,b);return}function Mq(a){a=a|0;var b=0;b=c[42039]|0;c[42039]=Qq(b,Jp(c[b>>2]|0,a,1)|0)|0;cp(c[42038]|0,a)|0;return}function Nq(){var a=0,b=0;a=c[42039]|0;b=c[a>>2]|0;a=Pq(a)|0;c[42039]=a;c[a+4>>2]=b;return}function Oq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=l;l=l+1024|0;f=g;d=sJ(a)|0;d=d+1+(sJ(b)|0)|0;if(d>>>0<1025)d=f;else d=_I(d)|0;yK(d,a)|0;JL(d,b)|0;e=ap(c[42038]|0,d)|0;cp(c[42038]|0,a)|0;cp(c[42038]|0,b)|0;if((d|0)!=(f|0))$I(d);l=g;return e|0}function Pq(a){a=a|0;var b=0;b=c[(c[42039]|0)+32>>2]|0;_n(c[42038]|0,a);return b|0}function Qq(a,b){a=a|0;b=b|0;var d=0;d=Zn(c[42038]|0,36)|0;c[d+32>>2]=a;c[d>>2]=b;return d|0}function Rq(a,b){a=a|0;b=b|0;return Tq(267,a,b)|0}function Sq(a,b){a=a|0;b=b|0;var d=0,e=0;d=a+4|0;e=c[d>>2]|0;if(e|0)c[e+12>>2]=b;c[d>>2]=b;if(!(c[a>>2]|0))c[a>>2]=b;return}function Tq(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=Zn(c[42038]|0,16)|0;c[e>>2]=a;c[e+4>>2]=b;c[e+8>>2]=d;return e|0}function Uq(){var a=0;a=l;l=l+16|0;$l(0,83093,a)|0;l=a;return} +function EI(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0.0,j=0,k=0,m=0,n=0,q=0,r=0,s=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0.0;H=l;l=l+112|0;E=H+80|0;D=H+64|0;C=H+48|0;G=4;F=_I(40)|0;c[F>>2]=0;w=H+32|0;x=H+16|0;y=H;A=H+96|0;G=SN(169984,1,F|0,G|0)|0;F=z;o=0;e=o;o=0;if((e|0)!=0&(p|0)!=0){f=TN(c[e>>2]|0,G|0,F|0)|0;if(!f)Ua(e|0,p|0);z=p}else f=-1;if((f|0)==1)e=z;else e=0;a:while(1){if(e|0){e=-2;break}g=a+4|0;o=0;fa(94,c[g>>2]|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=TN(c[e>>2]|0,G|0,F|0)|0;if(!f)Ua(e|0,p|0);z=p}else f=-1;if((f|0)==1){e=z;continue}c[42535]=0;c[42536]=0;o=0;fa(95,c[g>>2]<<1|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=TN(c[e>>2]|0,G|0,F|0)|0;if(!f)Ua(e|0,p|0);z=p}else f=-1;if((f|0)==1){e=z;continue}m=(c[42538]|0)/2|0;c[42539]=m;c[42540]=m+-1;m=c[g>>2]|0;g=c[a>>2]|0;e=0;f=-1;i=t;while(1){if((e|0)>=(m|0))break;I=+h[g+(e<<4)>>3];v=i>I;u=v?e:f;e=e+1|0;f=u;i=v?I:i}v=g+(f<<4)|0;c[x>>2]=c[v>>2];c[x+4>>2]=c[v+4>>2];c[x+8>>2]=c[v+8>>2];c[x+12>>2]=c[v+12>>2];v=g+(((f|0)==0?m:f)+-1<<4)|0;c[w>>2]=c[v>>2];c[w+4>>2]=c[v+4>>2];c[w+8>>2]=c[v+8>>2];c[w+12>>2]=c[v+12>>2];v=g+(((f|0)==(m+-1|0)?0:f+1|0)<<4)|0;c[y>>2]=c[v>>2];c[y+4>>2]=c[v+4>>2];c[y+8>>2]=c[v+8>>2];c[y+12>>2]=c[v+12>>2];I=+h[x>>3];if((+h[w>>3]==I?I==+h[y>>3]:0)?+h[y+8>>3]>+h[x+8>>3]:0)v=15;else v=12;b:do if((v|0)==12){v=0;o=0;e=aa(17,w|0,x|0,y|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=TN(c[f>>2]|0,G|0,F|0)|0;if(!g)Ua(f|0,p|0);z=p}else g=-1;if((g|0)==1){e=z;continue a}if((e|0)==1){g=c[42542]|0;e=c[42543]|0;f=0;while(1){if((f|0)>=(m|0))break b;j=c[a>>2]|0;if(!(((f|0)>0?(B=f+-1|0,+h[j+(f<<4)>>3]==+h[j+(B<<4)>>3]):0)?+h[j+(f<<4)+8>>3]==+h[j+(B<<4)+8>>3]:0)){u=c[42535]|0;c[g+(u<<3)>>2]=j+(f<<4);c[g+(u<<3)+4>>2]=g+(((u|0)%(m|0)|0)<<3);c[e+(u<<2)>>2]=g+(u<<3);c[42535]=u+1}f=f+1|0}}else v=15}while(0);c:do if((v|0)==15){v=0;j=c[42542]|0;e=c[42543]|0;g=m;while(1){f=g+-1|0;if((g|0)<=0)break c;k=c[a>>2]|0;if(((g|0)<(m|0)?+h[k+(f<<4)>>3]==+h[k+(g<<4)>>3]:0)?+h[k+(f<<4)+8>>3]==+h[k+(g<<4)+8>>3]:0){g=f;continue}g=c[42535]|0;c[j+(g<<3)>>2]=k+(f<<4);c[j+(g<<3)+4>>2]=j+(((g|0)%(m|0)|0)<<3);c[e+(g<<2)>>2]=j+(g<<3);c[42535]=g+1;g=f}}while(0);o=0;ga(27,e|0,c[42535]|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=TN(c[e>>2]|0,G|0,F|0)|0;if(!f)Ua(e|0,p|0);z=p}else f=-1;if((f|0)==1){e=z;continue}j=0;e=c[42536]|0;d:while(1){if((j|0)>=(e|0)){s=0;break}k=j+1|0;g=k;while(1){if((g|0)>=(e|0)){j=k;continue d}o=0;ga(28,j|0,g|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=TN(c[e>>2]|0,G|0,F|0)|0;if(!f)Ua(e|0,p|0);z=p}else f=-1;if((f|0)==1){e=z;continue a}g=g+1|0;e=c[42536]|0}}while(1){if((s|0)>=(e|0))break;o=0;f=$(39,s|0,b|0)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){j=TN(c[g>>2]|0,G|0,F|0)|0;if(!j)Ua(g|0,p|0);z=p}else j=-1;if((j|0)==1){e=z;continue a}if(f|0)break;s=s+1|0}if((s|0)==(e|0)){e=c[13918]|0;o=0;c[C>>2]=125503;c[C+4>>2]=192;c[C+8>>2]=125514;aa(13,e|0,125484,C|0)|0;e=o;o=0;if((e|0)!=0&(p|0)!=0){f=TN(c[e>>2]|0,G|0,F|0)|0;if(!f)Ua(e|0,p|0);z=p}else f=-1;if((f|0)==1){e=z;continue}else{v=41;break}}u=b+16|0;k=0;while(1){if((k|0)>=(e|0))break;o=0;f=$(39,k|0,u|0)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){j=TN(c[g>>2]|0,G|0,F|0)|0;if(!j)Ua(g|0,p|0);z=p}else j=-1;if((j|0)==1){e=z;continue a}if(f|0)break;k=k+1|0}if((k|0)==(e|0)){e=c[13918]|0;o=0;c[D>>2]=125503;c[D+4>>2]=200;c[D+8>>2]=125547;aa(13,e|0,125484,D|0)|0;e=o;o=0;if((e|0)!=0&(p|0)!=0){f=TN(c[e>>2]|0,G|0,F|0)|0;if(!f)Ua(e|0,p|0);z=p}else f=-1;if((f|0)==1){e=z;continue}else{v=48;break}}o=0;e=$(40,s|0,k|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=TN(c[f>>2]|0,G|0,F|0)|0;if(!g)Ua(f|0,p|0);z=p}else g=-1;if((g|0)==1){e=z;continue}if(!e){e=c[13918]|0;o=0;c[E>>2]=125503;c[E+4>>2]=207;c[E+8>>2]=125585;aa(13,e|0,125484,E|0)|0;e=o;o=0;if((e|0)!=0&(p|0)!=0){f=TN(c[e>>2]|0,G|0,F|0)|0;if(!f)Ua(e|0,p|0);z=p}else f=-1;if((f|0)==1){e=z;continue}o=0;fa(96,2);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=TN(c[e>>2]|0,G|0,F|0)|0;if(!f)Ua(e|0,p|0);z=p}else f=-1;if((f|0)==1){e=z;continue}else{v=53;break}}if((s|0)==(k|0)){o=0;fa(96,2);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=TN(c[e>>2]|0,G|0,F|0)|0;if(!f)Ua(e|0,p|0);z=p}else f=-1;if((f|0)==1){e=z;continue}else{v=56;break}}c[A>>2]=b;c[A+4>>2]=0;f=A+8|0;c[f>>2]=u;c[A+12>>2]=0;o=0;ga(29,1,A|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){g=TN(c[e>>2]|0,G|0,F|0)|0;if(!g)Ua(e|0,p|0);z=p}else g=-1;if((g|0)==1){e=z;continue}c[42541]=c[42539];q=s;e:while(1){if((q|0)==-1){g=f;e=0;break}r=c[42545]|0;c[r+(q*52|0)>>2]=2;e=0;while(1){if((e|0)>=3){v=65;break}v=c[r+(q*52|0)+4+(e<<4)+12>>2]|0;if(v|0?(c[v>>2]|0)==1:0){v=68;break}e=e+1|0}if((v|0)==65){v=0;if((e|0)==3){e=c[42537]|0;k=c[e+(c[42540]<<2)>>2]|0;o=0;e=aa(17,u|0,c[c[e+(c[42539]<<2)>>2]>>2]|0,c[k>>2]|0)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){j=TN(c[g>>2]|0,G|0,F|0)|0;if(!j)Ua(g|0,p|0);z=p}else j=-1;if((j|0)==1){e=z;continue a}j=(e|0)==1;n=j?f:k;j=j?k:f}else v=68}if((v|0)==68){v=0;k=c[r+(q*52|0)+4+(e<<4)>>2]|0;m=c[r+(q*52|0)+4+(e<<4)+4>>2]|0;o=0;e=aa(17,c[k>>2]|0,c[c[r+(q*52|0)+4+(((e+1|0)%3|0)<<4)+4>>2]>>2]|0,c[m>>2]|0)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){j=TN(c[g>>2]|0,G|0,F|0)|0;if(!j)Ua(g|0,p|0);z=p}else j=-1;if((j|0)==1){e=z;continue a}j=(e|0)==1;n=j?k:m;j=j?m:k}do if((q|0)==(s|0)){o=0;ga(29,2,j|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){g=TN(c[e>>2]|0,G|0,F|0)|0;if(!g)Ua(e|0,p|0);z=p}else g=-1;if((g|0)==1){e=z;continue a}o=0;ga(29,1,n|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){g=TN(c[e>>2]|0,G|0,F|0)|0;if(!g)Ua(e|0,p|0);z=p}else g=-1;if((g|0)==1){e=z;continue a}e=0}else{m=c[42537]|0;if((c[m+(c[42539]<<2)>>2]|0)!=(n|0)?(c[m+(c[42540]<<2)>>2]|0)!=(n|0):0){o=0;j=_(29,n|0)|0;e=o;o=0;if((e|0)!=0&(p|0)!=0){g=TN(c[e>>2]|0,G|0,F|0)|0;if(!g)Ua(e|0,p|0);z=p}else g=-1;if((g|0)==1){e=z;continue a}o=0;ga(30,2,j|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){g=TN(c[e>>2]|0,G|0,F|0)|0;if(!g)Ua(e|0,p|0);z=p}else g=-1;if((g|0)==1){e=z;continue a}o=0;ga(29,1,n|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){g=TN(c[e>>2]|0,G|0,F|0)|0;if(!g)Ua(e|0,p|0);z=p}else g=-1;if((g|0)==1){e=z;continue a}if((j|0)<=(c[42541]|0)){e=0;break}c[42541]=j;e=0;break}o=0;k=_(29,j|0)|0;e=o;o=0;if((e|0)!=0&(p|0)!=0){g=TN(c[e>>2]|0,G|0,F|0)|0;if(!g)Ua(e|0,p|0);z=p}else g=-1;if((g|0)==1){e=z;continue a}o=0;ga(30,1,k|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){g=TN(c[e>>2]|0,G|0,F|0)|0;if(!g)Ua(e|0,p|0);z=p}else g=-1;if((g|0)==1){e=z;continue a}o=0;ga(29,2,j|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){g=TN(c[e>>2]|0,G|0,F|0)|0;if(!g)Ua(e|0,p|0);z=p}else g=-1;if((g|0)==1){e=z;continue a}if((k|0)>=(c[42541]|0)){e=0;break}c[42541]=k;e=0}while(0);while(1){if((e|0)>=3){q=-1;continue e}g=c[r+(q*52|0)+4+(e<<4)+12>>2]|0;if(g|0?(c[g>>2]|0)==1:0)break;e=e+1|0}q=(g-(c[42545]|0)|0)/52|0}while(1){if(!g)break;g=c[g+4>>2]|0;e=e+1|0}o=0;fa(96,e|0);g=o;o=0;if((g|0)!=0&(p|0)!=0){j=TN(c[g>>2]|0,G|0,F|0)|0;if(!j)Ua(g|0,p|0);z=p}else j=-1;if((j|0)==1)e=z;else{v=94;break}}if((v|0)==41)e=-1;else if((v|0)==48)e=-1;else if((v|0)==53){c[d+4>>2]=2;e=c[42544]|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];F=e+16|0;c[F>>2]=c[u>>2];c[F+4>>2]=c[u+4>>2];c[F+8>>2]=c[u+8>>2];c[F+12>>2]=c[u+12>>2];c[d>>2]=e;e=0}else if((v|0)==56){c[d+4>>2]=2;e=c[42544]|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];F=e+16|0;c[F>>2]=c[u>>2];c[F+4>>2]=c[u+4>>2];c[F+8>>2]=c[u+8>>2];c[F+12>>2]=c[u+12>>2];c[d>>2]=e;e=0}else if((v|0)==94){c[d+4>>2]=e;g=c[42544]|0;while(1){e=e+-1|0;if(!f)break;F=g+(e<<4)|0;E=c[f>>2]|0;c[F>>2]=c[E>>2];c[F+4>>2]=c[E+4>>2];c[F+8>>2]=c[E+8>>2];c[F+12>>2]=c[E+12>>2];f=c[f+4>>2]|0}c[d>>2]=g;e=0}$I(G|0);l=H;return e|0}function FI(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=l;l=l+64|0;e=h+48|0;g=h+32|0;f=h+16|0;d=h;if((c[42548]|0)<(a|0)){b=c[42542]|0;if(!b){g=_I(a<<3)|0;c[42542]=g;if(!g){g=c[13918]|0;c[d>>2]=125503;c[d+4>>2]=523;c[d+8>>2]=125753;AL(g,125484,d)|0;Ua(169984,1)}g=_I(a<<2)|0;c[42543]=g;if(!g){g=c[13918]|0;c[f>>2]=125503;c[f+4>>2]=527;c[f+8>>2]=125772;AL(g,125484,f)|0;Ua(169984,1)}}else{f=bJ(b,a<<3)|0;c[42542]=f;if(!f){f=c[13918]|0;c[g>>2]=125503;c[g+4>>2]=533;c[g+8>>2]=125792;AL(f,125484,g)|0;Ua(169984,1)}g=bJ(c[42543]|0,a<<2)|0;c[42543]=g;if(!g){g=c[13918]|0;c[e>>2]=125503;c[e+4>>2]=539;c[e+8>>2]=125812;AL(g,125484,e)|0;Ua(169984,1)}}c[42548]=a}l=h;return}function GI(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+32|0;e=f+16|0;d=f;if((c[42538]|0)<(a|0)){b=c[42537]|0;if(!b){e=_I(a<<2)|0;c[42537]=e;if(!e){e=c[13918]|0;c[d>>2]=125503;c[d+4>>2]=573;c[d+8>>2]=125708;AL(e,125484,d)|0;Ua(169984,1)}}else{d=bJ(b,a<<2)|0;c[42537]=d;if(!d){d=c[13918]|0;c[e>>2]=125503;c[e+4>>2]=580;c[e+8>>2]=125730;AL(d,125484,e)|0;Ua(169984,1)}}c[42538]=a}l=f;return}function HI(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0;d=+h[b+8>>3];e=+h[b>>3];d=(+h[c>>3]-e)*(+h[a+8>>3]-d)-(+h[a>>3]-e)*(+h[c+8>>3]-d);return (d>0.0?1:d<0.0?2:3)|0}function II(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;h=i;a:while(1){if((b|0)>3)e=0;else{b=9;break}while(1){if((e|0)>=(b|0)){b=8;break a}f=e+1|0;d=(f|0)%(b|0)|0;g=(e+2|0)%(b|0)|0;if(!(QI(e,g,a,b)|0))e=f;else break}RI(c[a+(e<<2)>>2]|0,c[a+(d<<2)>>2]|0,c[a+(g<<2)>>2]|0);b=b+-1|0;while(1){if((d|0)>=(b|0))continue a;g=d+1|0;c[a+(d<<2)>>2]=c[a+(g<<2)>>2];d=g}}if((b|0)==8){a=c[13918]|0;c[h>>2]=125503;c[h+4>>2]=324;c[h+8>>2]=125648;AL(a,125484,h)|0}else if((b|0)==9)RI(c[a>>2]|0,c[a+4>>2]|0,c[a+8>>2]|0);l=i;return}function JI(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;i=c[42545]|0;j=i+(a*52|0)|0;k=i+(b*52|0)|0;g=0;while(1){if((g|0)==3)break;l=i+(a*52|0)+4+(g<<4)|0;m=i+(a*52|0)+4+(g<<4)+4|0;n=i+(a*52|0)+4+(g<<4)+12|0;f=0;while(1){if((f|0)==3)break;o=c[c[l>>2]>>2]|0;h=c[c[i+(b*52|0)+4+(f<<4)>>2]>>2]|0;if((o|0)==(h|0)){d=c[c[i+(b*52|0)+4+(f<<4)+4>>2]>>2]|0;if((c[c[m>>2]>>2]|0)==(d|0))e=10;else e=8}else{d=c[c[i+(b*52|0)+4+(f<<4)+4>>2]>>2]|0;e=8}if(((e|0)==8?(e=0,(o|0)==(d|0)):0)?(c[c[m>>2]>>2]|0)==(h|0):0)e=10;if((e|0)==10){c[n>>2]=k;c[i+(b*52|0)+4+(f<<4)+12>>2]=j}f=f+1|0}g=g+1|0}return}function KI(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=c[42545]|0;d=0;e=0;while(1){if((e|0)==3)break;d=d+((HI(c[c[f+(a*52|0)+4+(e<<4)>>2]>>2]|0,c[c[f+(a*52|0)+4+(e<<4)+4>>2]>>2]|0,b)|0)!=2&1)|0;e=e+1|0}return ((d|0)==3|(d|0)==0)&1|0}function LI(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[42545]|0;e=d+(a*52|0)|0;a:do if(!(c[e>>2]|0)){c[e>>2]=1;if((a|0)==(b|0))d=1;else{f=0;while(1){if((f|0)>=3)break;e=c[d+(a*52|0)+4+(f<<4)+12>>2]|0;if(e){if(LI((e-d|0)/52|0,b)|0){d=1;break a}d=c[42545]|0}f=f+1|0}c[d+(a*52|0)>>2]=0;d=0}}else d=0;while(0);return d|0}function MI(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+32|0;e=f+16|0;d=f;if((c[42546]|0)<(a|0)){b=c[42544]|0;if(!b){e=_I(a<<4)|0;c[42544]=e;if(!e){e=c[13918]|0;c[d>>2]=125503;c[d+4>>2]=593;c[d+8>>2]=125611;AL(e,125484,d)|0;Ua(169984,1)}}else{d=bJ(b,a<<4)|0;c[42544]=d;if(!d){d=c[13918]|0;c[e>>2]=125503;c[e+4>>2]=599;c[e+8>>2]=125629;AL(d,125484,e)|0;Ua(169984,1)}}c[42546]=a}l=f;return}function NI(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[42540]|0;e=c[42539]|0;f=(d|0)>=(e|0);if((a|0)==1)if(f){c[b+4>>2]=c[(c[42537]|0)+(e<<2)>>2];a=170156;d=-1}else{a=170156;d=-1}else if(f){c[b+4>>2]=c[(c[42537]|0)+(d<<2)>>2];a=170160;d=1}else{a=170160;d=1}f=(c[a>>2]|0)+d|0;c[a>>2]=f;c[(c[42537]|0)+(f<<2)>>2]=b;return}function OI(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;f=c[42541]|0;g=c[42537]|0;b=c[42539]|0;while(1){if((b|0)>=(f|0)){e=4;break}d=b+1|0;if((HI(c[c[g+(d<<2)>>2]>>2]|0,c[c[g+(b<<2)>>2]>>2]|0,c[a>>2]|0)|0)==1)break;else b=d}a:do if((e|0)==4){b=c[42540]|0;while(1){if((b|0)<=(f|0)){b=f;break a}d=b+-1|0;if((HI(c[c[g+(d<<2)>>2]>>2]|0,c[c[g+(b<<2)>>2]>>2]|0,c[a>>2]|0)|0)==2)break;else b=d}}while(0);return b|0}function PI(a,b){a=a|0;b=b|0;c[((a|0)==1?170160:170156)>>2]=b;return}function QI(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;f=c[c[d+(((a+-1+e|0)%(e|0)|0)<<2)>>2]>>2]|0;i=c[c[d+(a<<2)>>2]>>2]|0;g=c[c[d+(((a+1|0)%(e|0)|0)<<2)>>2]>>2]|0;k=(HI(f,i,g)|0)==1;j=c[c[d+(b<<2)>>2]>>2]|0;if(k)if((HI(i,j,f)|0)==1){f=HI(j,i,g)|0;g=1;h=5}else f=0;else{f=HI(i,j,g)|0;g=2;h=5}a:do if((h|0)==5)if((f|0)==(g|0)){f=0;while(1){if((f|0)>=(e|0)){f=1;break a}g=f;f=f+1|0;h=(f|0)%(e|0)|0;if((h|0)==(b|0)|((g|0)==(b|0)|((g|0)==(a|0)|(h|0)==(a|0))))continue;if(TI(i,j,c[c[d+(g<<2)>>2]>>2]|0,c[c[d+(h<<2)>>2]>>2]|0)|0){f=0;break}}}else f=0;while(0);return f|0}function RI(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=c[42536]|0;f=c[42547]|0;if((e|0)<(f|0))h=e;else{SI(f+20|0);h=c[42536]|0}g=c[42545]|0;c[42536]=h+1;f=g+(h*52|0)|0;c[f>>2]=0;c[g+(h*52|0)+4>>2]=a;c[g+(h*52|0)+8>>2]=b;c[g+(h*52|0)+16>>2]=0;c[g+(h*52|0)+20>>2]=b;c[g+(h*52|0)+24>>2]=d;c[g+(h*52|0)+32>>2]=0;c[g+(h*52|0)+36>>2]=d;c[g+(h*52|0)+40>>2]=a;c[g+(h*52|0)+48>>2]=0;e=0;while(1){if((e|0)==3)break;c[g+(h*52|0)+4+(e<<4)+8>>2]=f;e=e+1|0}return}function SI(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+32|0;e=f+16|0;d=f;if((c[42547]|0)<(a|0)){b=c[42545]|0;if(!b){e=_I(a*52|0)|0;c[42545]=e;if(!e){e=c[13918]|0;c[d>>2]=125503;c[d+4>>2]=552;c[d+8>>2]=125669;AL(e,125484,d)|0;Ua(169984,1)}}else{d=bJ(b,a*52|0)|0;c[42545]=d;if(!d){d=c[13918]|0;c[e>>2]=125503;c[e+4>>2]=558;c[e+8>>2]=125688;AL(d,125484,e)|0;Ua(169984,1)}}c[42547]=a}l=f;return}function TI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0;f=HI(a,b,c)|0;if((((f|0)!=3?(g=HI(a,b,d)|0,(g|0)!=3):0)?(h=HI(c,d,a)|0,(h|0)!=3):0)?(e=HI(c,d,b)|0,(e|0)!=3):0)return ((f|0)==1^(g|0)==1)&((h|0)==1^(e|0)==1)&1|0;if(((UI(a,b,c)|0)==0?(UI(a,b,d)|0)==0:0)?(UI(c,d,a)|0)==0:0)return (UI(c,d,b)|0)!=0|0;return 1}function UI(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0,f=0.0,g=0.0;e=+h[a>>3];g=+h[b>>3]-e;f=+h[a+8>>3];d=+h[b+8>>3]-f;e=+h[c>>3]-e;f=+h[c+8>>3]-f;if((HI(a,b,c)|0)==3?f*d+e*g>=0.0:0)a=f*f+e*e<=d*d+g*g&1;else a=0;return a|0}function VI(a,b){a=a|0;b=b|0;var c=0,d=0.0,e=0.0,f=0.0,g=0.0,i=0.0,j=0;d=+h[a+24>>3];a:do if(d<1.0e-07&d>-1.0e-07)a=WI(a,b)|0;else{g=+h[a+16>>3]/(d*3.0);f=+h[a+8>>3]/d;e=g*g;d=g*2.0*e-g*f+ +h[a>>3]/d;e=f*.3333333333333333-e;e=e*e*4.0*e;f=d*d+e;if(!(f<0.0)){i=(+C(+f)-d)*.5;e=+KJ(i);d=+KJ(-d-i)+e;h[b>>3]=d;if(f>0.0)a=1;else{d=d*-.5;h[b+16>>3]=d;a=1;c=7}}else{i=+K(+(+C(+-f)),+-d);d=+KJ(+C(+-e)*.5)*2.0;h[b>>3]=d*+E(+(i*.3333333333333333));h[b+8>>3]=+E(+((i+6.283185307179586)*.3333333333333333))*d;d=+E(+((i+-6.283185307179586)*.3333333333333333))*d;a=2;c=7}if((c|0)==7){h[b+(a<<3)>>3]=d;a=3}c=0;while(1){if((c|0)>=(a|0))break a;j=b+(c<<3)|0;h[j>>3]=+h[j>>3]-g;c=c+1|0}}while(0);return a|0}function WI(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;c=+h[a+16>>3];do if(!(c<1.0e-07&c>-1.0e-07)){d=+h[a+8>>3]/(c*2.0);c=d*d-+h[a>>3]/c;if(!(c<0.0))if(c==0.0){h[b>>3]=-d;a=1;break}else{c=+C(+c)-d;h[b>>3]=c;h[b+8>>3]=d*-2.0-c;a=2;break}else a=0}else a=XI(a,b)|0;while(0);return a|0}function XI(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;d=+h[a+8>>3];c=+h[a>>3];if(d<1.0e-07&d>-1.0e-07)a=c<1.0e-07&c>-1.0e-07?4:0;else{h[b>>3]=-c/d;a=1}return a|0}function YI(a){a=a|0;$I(c[a>>2]|0);$I(a);return}function ZI(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;e=c[a+4>>2]|0;i=(e*3|0)+-2|0;d=c[42550]|0;if((i|0)>(c[42549]|0)){if(!d)d=_I(i<<4)|0;else d=bJ(d,i<<4)|0;c[42550]=d;c[42549]=i;h=d;g=d}else{h=d;g=d}f=c[a>>2]|0;c[h>>2]=c[f>>2];c[h+4>>2]=c[f+4>>2];c[h+8>>2]=c[f+8>>2];c[h+12>>2]=c[f+12>>2];VN(h+16|0,f|0,16)|0;e=e+-1|0;d=1;a=2;while(1){if((d|0)>=(e|0))break;j=h+(a+2<<4)|0;k=h+(a+1<<4)|0;m=h+(a<<4)|0;l=f+(d<<4)|0;c[m>>2]=c[l>>2];c[m+4>>2]=c[l+4>>2];c[m+8>>2]=c[l+8>>2];c[m+12>>2]=c[l+12>>2];VN(k|0,l|0,16)|0;c[j>>2]=c[k>>2];c[j+4>>2]=c[k+4>>2];c[j+8>>2]=c[k+8>>2];c[j+12>>2]=c[k+12>>2];d=d+1|0;a=a+3|0}l=h+(a<<4)|0;m=f+(d<<4)|0;c[l>>2]=c[m>>2];c[l+4>>2]=c[m+4>>2];c[l+8>>2]=c[m+8>>2];c[l+12>>2]=c[m+12>>2];VN(h+(a+1<<4)|0,m|0,16)|0;c[b+4>>2]=i;c[b>>2]=g;return}function _I(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;x=l;l=l+16|0;p=x;do if(a>>>0<245){m=a>>>0<11?16:a+11&-8;a=m>>>3;o=c[42551]|0;d=o>>>a;if(d&3|0){b=(d&1^1)+a|0;a=170244+(b<<1<<2)|0;d=a+8|0;e=c[d>>2]|0;f=e+8|0;g=c[f>>2]|0;if((g|0)==(a|0))c[42551]=o&~(1<>2]=a;c[d>>2]=g}w=b<<3;c[e+4>>2]=w|3;w=e+w+4|0;c[w>>2]=c[w>>2]|1;w=f;l=x;return w|0}n=c[42553]|0;if(m>>>0>n>>>0){if(d|0){b=2<>>12&16;b=b>>>i;d=b>>>5&8;b=b>>>d;g=b>>>2&4;b=b>>>g;a=b>>>1&2;b=b>>>a;e=b>>>1&1;e=(d|i|g|a|e)+(b>>>e)|0;b=170244+(e<<1<<2)|0;a=b+8|0;g=c[a>>2]|0;i=g+8|0;d=c[i>>2]|0;if((d|0)==(b|0)){a=o&~(1<>2]=b;c[a>>2]=d;a=o}w=e<<3;h=w-m|0;c[g+4>>2]=m|3;f=g+m|0;c[f+4>>2]=h|1;c[g+w>>2]=h;if(n|0){e=c[42556]|0;b=n>>>3;d=170244+(b<<1<<2)|0;b=1<>2]|0}c[a>>2]=e;c[b+12>>2]=e;c[e+8>>2]=b;c[e+12>>2]=d}c[42553]=h;c[42556]=f;w=i;l=x;return w|0}j=c[42552]|0;if(j){d=(j&0-j)+-1|0;i=d>>>12&16;d=d>>>i;h=d>>>5&8;d=d>>>h;k=d>>>2&4;d=d>>>k;e=d>>>1&2;d=d>>>e;a=d>>>1&1;a=c[170508+((h|i|k|e|a)+(d>>>a)<<2)>>2]|0;d=(c[a+4>>2]&-8)-m|0;e=c[a+16+(((c[a+16>>2]|0)==0&1)<<2)>>2]|0;if(!e){k=a;h=d}else{do{i=(c[e+4>>2]&-8)-m|0;k=i>>>0>>0;d=k?i:d;a=k?e:a;e=c[e+16+(((c[e+16>>2]|0)==0&1)<<2)>>2]|0}while((e|0)!=0);k=a;h=d}i=k+m|0;if(i>>>0>k>>>0){f=c[k+24>>2]|0;b=c[k+12>>2]|0;do if((b|0)==(k|0)){a=k+20|0;b=c[a>>2]|0;if(!b){a=k+16|0;b=c[a>>2]|0;if(!b){d=0;break}}while(1){d=b+20|0;e=c[d>>2]|0;if(e|0){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}c[a>>2]=0;d=b}else{d=c[k+8>>2]|0;c[d+12>>2]=b;c[b+8>>2]=d;d=b}while(0);do if(f|0){b=c[k+28>>2]|0;a=170508+(b<<2)|0;if((k|0)==(c[a>>2]|0)){c[a>>2]=d;if(!d){c[42552]=j&~(1<>2]|0)!=(k|0)&1)<<2)>>2]=d;if(!d)break}c[d+24>>2]=f;b=c[k+16>>2]|0;if(b|0){c[d+16>>2]=b;c[b+24>>2]=d}b=c[k+20>>2]|0;if(b|0){c[d+20>>2]=b;c[b+24>>2]=d}}while(0);if(h>>>0<16){w=h+m|0;c[k+4>>2]=w|3;w=k+w+4|0;c[w>>2]=c[w>>2]|1}else{c[k+4>>2]=m|3;c[i+4>>2]=h|1;c[i+h>>2]=h;if(n|0){e=c[42556]|0;b=n>>>3;d=170244+(b<<1<<2)|0;b=1<>2]|0}c[a>>2]=e;c[b+12>>2]=e;c[e+8>>2]=b;c[e+12>>2]=d}c[42553]=h;c[42556]=i}w=k+8|0;l=x;return w|0}else n=m}else n=m}else n=m}else if(a>>>0<=4294967231){a=a+11|0;m=a&-8;k=c[42552]|0;if(k){e=0-m|0;a=a>>>8;if(a)if(m>>>0>16777215)j=31;else{o=(a+1048320|0)>>>16&8;v=a<>>16&4;v=v<>>16&2;j=14-(n|o|j)+(v<>>15)|0;j=m>>>(j+7|0)&1|j<<1}else j=0;d=c[170508+(j<<2)>>2]|0;a:do if(!d){d=0;a=0;v=57}else{a=0;i=d;h=m<<((j|0)==31?0:25-(j>>>1)|0);d=0;while(1){f=(c[i+4>>2]&-8)-m|0;if(f>>>0>>0)if(!f){e=0;d=i;a=i;v=61;break a}else{a=i;e=f}f=c[i+20>>2]|0;i=c[i+16+(h>>>31<<2)>>2]|0;d=(f|0)==0|(f|0)==(i|0)?d:f;f=(i|0)==0;if(f){v=57;break}else h=h<<((f^1)&1)}}while(0);if((v|0)==57){if((d|0)==0&(a|0)==0){a=2<>>12&16;o=o>>>i;h=o>>>5&8;o=o>>>h;j=o>>>2&4;o=o>>>j;n=o>>>1&2;o=o>>>n;d=o>>>1&1;a=0;d=c[170508+((h|i|j|n|d)+(o>>>d)<<2)>>2]|0}if(!d){i=a;h=e}else v=61}if((v|0)==61)while(1){v=0;n=(c[d+4>>2]&-8)-m|0;o=n>>>0>>0;e=o?n:e;a=o?d:a;d=c[d+16+(((c[d+16>>2]|0)==0&1)<<2)>>2]|0;if(!d){i=a;h=e;break}else v=61}if((i|0)!=0?h>>>0<((c[42553]|0)-m|0)>>>0:0){g=i+m|0;if(g>>>0<=i>>>0){w=0;l=x;return w|0}f=c[i+24>>2]|0;b=c[i+12>>2]|0;do if((b|0)==(i|0)){a=i+20|0;b=c[a>>2]|0;if(!b){a=i+16|0;b=c[a>>2]|0;if(!b){b=0;break}}while(1){d=b+20|0;e=c[d>>2]|0;if(e|0){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}c[a>>2]=0}else{w=c[i+8>>2]|0;c[w+12>>2]=b;c[b+8>>2]=w}while(0);do if(f){a=c[i+28>>2]|0;d=170508+(a<<2)|0;if((i|0)==(c[d>>2]|0)){c[d>>2]=b;if(!b){e=k&~(1<>2]|0)!=(i|0)&1)<<2)>>2]=b;if(!b){e=k;break}}c[b+24>>2]=f;a=c[i+16>>2]|0;if(a|0){c[b+16>>2]=a;c[a+24>>2]=b}a=c[i+20>>2]|0;if(a){c[b+20>>2]=a;c[a+24>>2]=b;e=k}else e=k}else e=k;while(0);do if(h>>>0>=16){c[i+4>>2]=m|3;c[g+4>>2]=h|1;c[g+h>>2]=h;b=h>>>3;if(h>>>0<256){d=170244+(b<<1<<2)|0;a=c[42551]|0;b=1<>2]|0}c[a>>2]=g;c[b+12>>2]=g;c[g+8>>2]=b;c[g+12>>2]=d;break}b=h>>>8;if(b)if(h>>>0>16777215)b=31;else{v=(b+1048320|0)>>>16&8;w=b<>>16&4;w=w<>>16&2;b=14-(u|v|b)+(w<>>15)|0;b=h>>>(b+7|0)&1|b<<1}else b=0;d=170508+(b<<2)|0;c[g+28>>2]=b;a=g+16|0;c[a+4>>2]=0;c[a>>2]=0;a=1<>2]=g;c[g+24>>2]=d;c[g+12>>2]=g;c[g+8>>2]=g;break}a=h<<((b|0)==31?0:25-(b>>>1)|0);d=c[d>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(h|0)){v=97;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){v=96;break}else{a=a<<1;d=b}}if((v|0)==96){c[e>>2]=g;c[g+24>>2]=d;c[g+12>>2]=g;c[g+8>>2]=g;break}else if((v|0)==97){v=d+8|0;w=c[v>>2]|0;c[w+12>>2]=g;c[v>>2]=g;c[g+8>>2]=w;c[g+12>>2]=d;c[g+24>>2]=0;break}}else{w=h+m|0;c[i+4>>2]=w|3;w=i+w+4|0;c[w>>2]=c[w>>2]|1}while(0);w=i+8|0;l=x;return w|0}else n=m}else n=m}else n=-1;while(0);d=c[42553]|0;if(d>>>0>=n>>>0){b=d-n|0;a=c[42556]|0;if(b>>>0>15){w=a+n|0;c[42556]=w;c[42553]=b;c[w+4>>2]=b|1;c[a+d>>2]=b;c[a+4>>2]=n|3}else{c[42553]=0;c[42556]=0;c[a+4>>2]=d|3;w=a+d+4|0;c[w>>2]=c[w>>2]|1}w=a+8|0;l=x;return w|0}i=c[42554]|0;if(i>>>0>n>>>0){u=i-n|0;c[42554]=u;w=c[42557]|0;v=w+n|0;c[42557]=v;c[v+4>>2]=u|1;c[w+4>>2]=n|3;w=w+8|0;l=x;return w|0}if(!(c[42669]|0)){c[42671]=4096;c[42670]=4096;c[42672]=-1;c[42673]=-1;c[42674]=0;c[42662]=0;c[42669]=p&-16^1431655768;a=4096}else a=c[42671]|0;j=n+48|0;k=n+47|0;h=a+k|0;f=0-a|0;m=h&f;if(m>>>0<=n>>>0){w=0;l=x;return w|0}a=c[42661]|0;if(a|0?(o=c[42659]|0,p=o+m|0,p>>>0<=o>>>0|p>>>0>a>>>0):0){w=0;l=x;return w|0}b:do if(!(c[42662]&4)){d=c[42557]|0;c:do if(d){e=170652;while(1){a=c[e>>2]|0;if(a>>>0<=d>>>0?(s=e+4|0,(a+(c[s>>2]|0)|0)>>>0>d>>>0):0)break;a=c[e+8>>2]|0;if(!a){v=118;break c}else e=a}b=h-i&f;if(b>>>0<2147483647){a=XN(b|0)|0;if((a|0)==((c[e>>2]|0)+(c[s>>2]|0)|0)){if((a|0)!=(-1|0)){h=b;g=a;v=135;break b}}else{e=a;v=126}}else b=0}else v=118;while(0);do if((v|0)==118){d=XN(0)|0;if((d|0)!=(-1|0)?(b=d,q=c[42670]|0,r=q+-1|0,b=((r&b|0)==0?0:(r+b&0-q)-b|0)+m|0,q=c[42659]|0,r=b+q|0,b>>>0>n>>>0&b>>>0<2147483647):0){s=c[42661]|0;if(s|0?r>>>0<=q>>>0|r>>>0>s>>>0:0){b=0;break}a=XN(b|0)|0;if((a|0)==(d|0)){h=b;g=d;v=135;break b}else{e=a;v=126}}else b=0}while(0);do if((v|0)==126){d=0-b|0;if(!(j>>>0>b>>>0&(b>>>0<2147483647&(e|0)!=(-1|0))))if((e|0)==(-1|0)){b=0;break}else{h=b;g=e;v=135;break b}a=c[42671]|0;a=k-b+a&0-a;if(a>>>0>=2147483647){h=b;g=e;v=135;break b}if((XN(a|0)|0)==(-1|0)){XN(d|0)|0;b=0;break}else{h=a+b|0;g=e;v=135;break b}}while(0);c[42662]=c[42662]|4;v=133}else{b=0;v=133}while(0);if(((v|0)==133?m>>>0<2147483647:0)?(g=XN(m|0)|0,s=XN(0)|0,t=s-g|0,u=t>>>0>(n+40|0)>>>0,!((g|0)==(-1|0)|u^1|g>>>0>>0&((g|0)!=(-1|0)&(s|0)!=(-1|0))^1)):0){h=u?t:b;v=135}if((v|0)==135){b=(c[42659]|0)+h|0;c[42659]=b;if(b>>>0>(c[42660]|0)>>>0)c[42660]=b;j=c[42557]|0;do if(j){b=170652;while(1){a=c[b>>2]|0;d=b+4|0;e=c[d>>2]|0;if((g|0)==(a+e|0)){v=143;break}f=c[b+8>>2]|0;if(!f)break;else b=f}if(((v|0)==143?(c[b+12>>2]&8|0)==0:0)?g>>>0>j>>>0&a>>>0<=j>>>0:0){c[d>>2]=e+h;w=(c[42554]|0)+h|0;u=j+8|0;u=(u&7|0)==0?0:0-u&7;v=j+u|0;u=w-u|0;c[42557]=v;c[42554]=u;c[v+4>>2]=u|1;c[j+w+4>>2]=40;c[42558]=c[42673];break}if(g>>>0<(c[42555]|0)>>>0)c[42555]=g;a=g+h|0;b=170652;while(1){if((c[b>>2]|0)==(a|0)){v=151;break}b=c[b+8>>2]|0;if(!b){a=170652;break}}if((v|0)==151)if(!(c[b+12>>2]&8)){c[b>>2]=g;m=b+4|0;c[m>>2]=(c[m>>2]|0)+h;m=g+8|0;m=g+((m&7|0)==0?0:0-m&7)|0;b=a+8|0;b=a+((b&7|0)==0?0:0-b&7)|0;k=m+n|0;i=b-m-n|0;c[m+4>>2]=n|3;do if((j|0)!=(b|0)){if((c[42556]|0)==(b|0)){w=(c[42553]|0)+i|0;c[42553]=w;c[42556]=k;c[k+4>>2]=w|1;c[k+w>>2]=w;break}a=c[b+4>>2]|0;if((a&3|0)==1){h=a&-8;e=a>>>3;d:do if(a>>>0<256){a=c[b+8>>2]|0;d=c[b+12>>2]|0;if((d|0)==(a|0)){c[42551]=c[42551]&~(1<>2]=d;c[d+8>>2]=a;break}}else{g=c[b+24>>2]|0;a=c[b+12>>2]|0;do if((a|0)==(b|0)){e=b+16|0;d=e+4|0;a=c[d>>2]|0;if(!a){a=c[e>>2]|0;if(!a){a=0;break}else d=e}while(1){e=a+20|0;f=c[e>>2]|0;if(f|0){a=f;d=e;continue}e=a+16|0;f=c[e>>2]|0;if(!f)break;else{a=f;d=e}}c[d>>2]=0}else{w=c[b+8>>2]|0;c[w+12>>2]=a;c[a+8>>2]=w}while(0);if(!g)break;d=c[b+28>>2]|0;e=170508+(d<<2)|0;do if((c[e>>2]|0)!=(b|0)){c[g+16+(((c[g+16>>2]|0)!=(b|0)&1)<<2)>>2]=a;if(!a)break d}else{c[e>>2]=a;if(a|0)break;c[42552]=c[42552]&~(1<>2]=g;d=b+16|0;e=c[d>>2]|0;if(e|0){c[a+16>>2]=e;c[e+24>>2]=a}d=c[d+4>>2]|0;if(!d)break;c[a+20>>2]=d;c[d+24>>2]=a}while(0);b=b+h|0;f=h+i|0}else f=i;b=b+4|0;c[b>>2]=c[b>>2]&-2;c[k+4>>2]=f|1;c[k+f>>2]=f;b=f>>>3;if(f>>>0<256){d=170244+(b<<1<<2)|0;a=c[42551]|0;b=1<>2]|0}c[a>>2]=k;c[b+12>>2]=k;c[k+8>>2]=b;c[k+12>>2]=d;break}b=f>>>8;do if(!b)b=0;else{if(f>>>0>16777215){b=31;break}v=(b+1048320|0)>>>16&8;w=b<>>16&4;w=w<>>16&2;b=14-(u|v|b)+(w<>>15)|0;b=f>>>(b+7|0)&1|b<<1}while(0);e=170508+(b<<2)|0;c[k+28>>2]=b;a=k+16|0;c[a+4>>2]=0;c[a>>2]=0;a=c[42552]|0;d=1<>2]=k;c[k+24>>2]=e;c[k+12>>2]=k;c[k+8>>2]=k;break}a=f<<((b|0)==31?0:25-(b>>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(f|0)){v=192;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){v=191;break}else{a=a<<1;d=b}}if((v|0)==191){c[e>>2]=k;c[k+24>>2]=d;c[k+12>>2]=k;c[k+8>>2]=k;break}else if((v|0)==192){v=d+8|0;w=c[v>>2]|0;c[w+12>>2]=k;c[v>>2]=k;c[k+8>>2]=w;c[k+12>>2]=d;c[k+24>>2]=0;break}}else{w=(c[42554]|0)+i|0;c[42554]=w;c[42557]=k;c[k+4>>2]=w|1}while(0);w=m+8|0;l=x;return w|0}else a=170652;while(1){b=c[a>>2]|0;if(b>>>0<=j>>>0?(w=b+(c[a+4>>2]|0)|0,w>>>0>j>>>0):0)break;a=c[a+8>>2]|0}f=w+-47|0;a=f+8|0;a=f+((a&7|0)==0?0:0-a&7)|0;f=j+16|0;a=a>>>0>>0?j:a;b=a+8|0;d=h+-40|0;u=g+8|0;u=(u&7|0)==0?0:0-u&7;v=g+u|0;u=d-u|0;c[42557]=v;c[42554]=u;c[v+4>>2]=u|1;c[g+d+4>>2]=40;c[42558]=c[42673];d=a+4|0;c[d>>2]=27;c[b>>2]=c[42663];c[b+4>>2]=c[42664];c[b+8>>2]=c[42665];c[b+12>>2]=c[42666];c[42663]=g;c[42664]=h;c[42666]=0;c[42665]=b;b=a+24|0;do{v=b;b=b+4|0;c[b>>2]=7}while((v+8|0)>>>0>>0);if((a|0)!=(j|0)){g=a-j|0;c[d>>2]=c[d>>2]&-2;c[j+4>>2]=g|1;c[a>>2]=g;b=g>>>3;if(g>>>0<256){d=170244+(b<<1<<2)|0;a=c[42551]|0;b=1<>2]|0}c[a>>2]=j;c[b+12>>2]=j;c[j+8>>2]=b;c[j+12>>2]=d;break}b=g>>>8;if(b)if(g>>>0>16777215)d=31;else{v=(b+1048320|0)>>>16&8;w=b<>>16&4;w=w<>>16&2;d=14-(u|v|d)+(w<>>15)|0;d=g>>>(d+7|0)&1|d<<1}else d=0;e=170508+(d<<2)|0;c[j+28>>2]=d;c[j+20>>2]=0;c[f>>2]=0;b=c[42552]|0;a=1<>2]=j;c[j+24>>2]=e;c[j+12>>2]=j;c[j+8>>2]=j;break}a=g<<((d|0)==31?0:25-(d>>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(g|0)){v=213;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){v=212;break}else{a=a<<1;d=b}}if((v|0)==212){c[e>>2]=j;c[j+24>>2]=d;c[j+12>>2]=j;c[j+8>>2]=j;break}else if((v|0)==213){v=d+8|0;w=c[v>>2]|0;c[w+12>>2]=j;c[v>>2]=j;c[j+8>>2]=w;c[j+12>>2]=d;c[j+24>>2]=0;break}}}else{w=c[42555]|0;if((w|0)==0|g>>>0>>0)c[42555]=g;c[42663]=g;c[42664]=h;c[42666]=0;c[42560]=c[42669];c[42559]=-1;c[42564]=170244;c[42563]=170244;c[42566]=170252;c[42565]=170252;c[42568]=170260;c[42567]=170260;c[42570]=170268;c[42569]=170268;c[42572]=170276;c[42571]=170276;c[42574]=170284;c[42573]=170284;c[42576]=170292;c[42575]=170292;c[42578]=170300;c[42577]=170300;c[42580]=170308;c[42579]=170308;c[42582]=170316;c[42581]=170316;c[42584]=170324;c[42583]=170324;c[42586]=170332;c[42585]=170332;c[42588]=170340;c[42587]=170340;c[42590]=170348;c[42589]=170348;c[42592]=170356;c[42591]=170356;c[42594]=170364;c[42593]=170364;c[42596]=170372;c[42595]=170372;c[42598]=170380;c[42597]=170380;c[42600]=170388;c[42599]=170388;c[42602]=170396;c[42601]=170396;c[42604]=170404;c[42603]=170404;c[42606]=170412;c[42605]=170412;c[42608]=170420;c[42607]=170420;c[42610]=170428;c[42609]=170428;c[42612]=170436;c[42611]=170436;c[42614]=170444;c[42613]=170444;c[42616]=170452;c[42615]=170452;c[42618]=170460;c[42617]=170460;c[42620]=170468;c[42619]=170468;c[42622]=170476;c[42621]=170476;c[42624]=170484;c[42623]=170484;c[42626]=170492;c[42625]=170492;w=h+-40|0;u=g+8|0;u=(u&7|0)==0?0:0-u&7;v=g+u|0;u=w-u|0;c[42557]=v;c[42554]=u;c[v+4>>2]=u|1;c[g+w+4>>2]=40;c[42558]=c[42673]}while(0);b=c[42554]|0;if(b>>>0>n>>>0){u=b-n|0;c[42554]=u;w=c[42557]|0;v=w+n|0;c[42557]=v;c[v+4>>2]=u|1;c[w+4>>2]=n|3;w=w+8|0;l=x;return w|0}}c[(kJ()|0)>>2]=12;w=0;l=x;return w|0}function $I(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;if(!a)return;d=a+-8|0;f=c[42555]|0;a=c[a+-4>>2]|0;b=a&-8;j=d+b|0;do if(!(a&1)){e=c[d>>2]|0;if(!(a&3))return;h=d+(0-e)|0;g=e+b|0;if(h>>>0>>0)return;if((c[42556]|0)==(h|0)){a=j+4|0;b=c[a>>2]|0;if((b&3|0)!=3){i=h;b=g;break}c[42553]=g;c[a>>2]=b&-2;c[h+4>>2]=g|1;c[h+g>>2]=g;return}d=e>>>3;if(e>>>0<256){a=c[h+8>>2]|0;b=c[h+12>>2]|0;if((b|0)==(a|0)){c[42551]=c[42551]&~(1<>2]=b;c[b+8>>2]=a;i=h;b=g;break}}f=c[h+24>>2]|0;a=c[h+12>>2]|0;do if((a|0)==(h|0)){d=h+16|0;b=d+4|0;a=c[b>>2]|0;if(!a){a=c[d>>2]|0;if(!a){a=0;break}else b=d}while(1){d=a+20|0;e=c[d>>2]|0;if(e|0){a=e;b=d;continue}d=a+16|0;e=c[d>>2]|0;if(!e)break;else{a=e;b=d}}c[b>>2]=0}else{i=c[h+8>>2]|0;c[i+12>>2]=a;c[a+8>>2]=i}while(0);if(f){b=c[h+28>>2]|0;d=170508+(b<<2)|0;if((c[d>>2]|0)==(h|0)){c[d>>2]=a;if(!a){c[42552]=c[42552]&~(1<>2]|0)!=(h|0)&1)<<2)>>2]=a;if(!a){i=h;b=g;break}}c[a+24>>2]=f;b=h+16|0;d=c[b>>2]|0;if(d|0){c[a+16>>2]=d;c[d+24>>2]=a}b=c[b+4>>2]|0;if(b){c[a+20>>2]=b;c[b+24>>2]=a;i=h;b=g}else{i=h;b=g}}else{i=h;b=g}}else{i=d;h=d}while(0);if(h>>>0>=j>>>0)return;a=j+4|0;e=c[a>>2]|0;if(!(e&1))return;if(!(e&2)){if((c[42557]|0)==(j|0)){j=(c[42554]|0)+b|0;c[42554]=j;c[42557]=i;c[i+4>>2]=j|1;if((i|0)!=(c[42556]|0))return;c[42556]=0;c[42553]=0;return}if((c[42556]|0)==(j|0)){j=(c[42553]|0)+b|0;c[42553]=j;c[42556]=h;c[i+4>>2]=j|1;c[h+j>>2]=j;return}f=(e&-8)+b|0;d=e>>>3;do if(e>>>0<256){b=c[j+8>>2]|0;a=c[j+12>>2]|0;if((a|0)==(b|0)){c[42551]=c[42551]&~(1<>2]=a;c[a+8>>2]=b;break}}else{g=c[j+24>>2]|0;a=c[j+12>>2]|0;do if((a|0)==(j|0)){d=j+16|0;b=d+4|0;a=c[b>>2]|0;if(!a){a=c[d>>2]|0;if(!a){d=0;break}else b=d}while(1){d=a+20|0;e=c[d>>2]|0;if(e|0){a=e;b=d;continue}d=a+16|0;e=c[d>>2]|0;if(!e)break;else{a=e;b=d}}c[b>>2]=0;d=a}else{d=c[j+8>>2]|0;c[d+12>>2]=a;c[a+8>>2]=d;d=a}while(0);if(g|0){a=c[j+28>>2]|0;b=170508+(a<<2)|0;if((c[b>>2]|0)==(j|0)){c[b>>2]=d;if(!d){c[42552]=c[42552]&~(1<>2]|0)!=(j|0)&1)<<2)>>2]=d;if(!d)break}c[d+24>>2]=g;a=j+16|0;b=c[a>>2]|0;if(b|0){c[d+16>>2]=b;c[b+24>>2]=d}a=c[a+4>>2]|0;if(a|0){c[d+20>>2]=a;c[a+24>>2]=d}}}while(0);c[i+4>>2]=f|1;c[h+f>>2]=f;if((i|0)==(c[42556]|0)){c[42553]=f;return}}else{c[a>>2]=e&-2;c[i+4>>2]=b|1;c[h+b>>2]=b;f=b}a=f>>>3;if(f>>>0<256){d=170244+(a<<1<<2)|0;b=c[42551]|0;a=1<>2]|0}c[b>>2]=i;c[a+12>>2]=i;c[i+8>>2]=a;c[i+12>>2]=d;return}a=f>>>8;if(a)if(f>>>0>16777215)a=31;else{h=(a+1048320|0)>>>16&8;j=a<>>16&4;j=j<>>16&2;a=14-(g|h|a)+(j<
    >>15)|0;a=f>>>(a+7|0)&1|a<<1}else a=0;e=170508+(a<<2)|0;c[i+28>>2]=a;c[i+20>>2]=0;c[i+16>>2]=0;b=c[42552]|0;d=1<>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(f|0)){a=73;break}e=d+16+(b>>>31<<2)|0;a=c[e>>2]|0;if(!a){a=72;break}else{b=b<<1;d=a}}if((a|0)==72){c[e>>2]=i;c[i+24>>2]=d;c[i+12>>2]=i;c[i+8>>2]=i;break}else if((a|0)==73){h=d+8|0;j=c[h>>2]|0;c[j+12>>2]=i;c[h>>2]=i;c[i+8>>2]=j;c[i+12>>2]=d;c[i+24>>2]=0;break}}else{c[42552]=b|d;c[e>>2]=i;c[i+24>>2]=e;c[i+12>>2]=i;c[i+8>>2]=i}while(0);j=(c[42559]|0)+-1|0;c[42559]=j;if(!j)a=170660;else return;while(1){a=c[a>>2]|0;if(!a)break;else a=a+8|0}c[42559]=-1;return}function aJ(a,b){a=a|0;b=b|0;var d=0;if(a){d=O(b,a)|0;if((b|a)>>>0>65535)d=((d>>>0)/(a>>>0)|0|0)==(b|0)?d:-1}else d=0;a=_I(d)|0;if(!a)return a|0;if(!(c[a+-4>>2]&3))return a|0;WN(a|0,0,d|0)|0;return a|0}function bJ(a,b){a=a|0;b=b|0;var d=0,e=0;if(!a){b=_I(b)|0;return b|0}if(b>>>0>4294967231){c[(kJ()|0)>>2]=12;b=0;return b|0}d=cJ(a+-8|0,b>>>0<11?16:b+11&-8)|0;if(d|0){b=d+8|0;return b|0}d=_I(b)|0;if(!d){b=0;return b|0}e=c[a+-4>>2]|0;e=(e&-8)-((e&3|0)==0?8:4)|0;UN(d|0,a|0,(e>>>0>>0?e:b)|0)|0;$I(a);b=d;return b|0}function cJ(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;l=a+4|0;m=c[l>>2]|0;d=m&-8;i=a+d|0;if(!(m&3)){if(b>>>0<256){a=0;return a|0}if(d>>>0>=(b+4|0)>>>0?(d-b|0)>>>0<=c[42671]<<1>>>0:0)return a|0;a=0;return a|0}if(d>>>0>=b>>>0){d=d-b|0;if(d>>>0<=15)return a|0;k=a+b|0;c[l>>2]=m&1|b|2;c[k+4>>2]=d|3;m=i+4|0;c[m>>2]=c[m>>2]|1;dJ(k,d);return a|0}if((c[42557]|0)==(i|0)){k=(c[42554]|0)+d|0;d=k-b|0;e=a+b|0;if(k>>>0<=b>>>0){a=0;return a|0}c[l>>2]=m&1|b|2;c[e+4>>2]=d|1;c[42557]=e;c[42554]=d;return a|0}if((c[42556]|0)==(i|0)){e=(c[42553]|0)+d|0;if(e>>>0>>0){a=0;return a|0}d=e-b|0;if(d>>>0>15){k=a+b|0;e=a+e|0;c[l>>2]=m&1|b|2;c[k+4>>2]=d|1;c[e>>2]=d;e=e+4|0;c[e>>2]=c[e>>2]&-2;e=k}else{c[l>>2]=m&1|e|2;e=a+e+4|0;c[e>>2]=c[e>>2]|1;e=0;d=0}c[42553]=d;c[42556]=e;return a|0}e=c[i+4>>2]|0;if(e&2|0){a=0;return a|0}j=(e&-8)+d|0;if(j>>>0>>0){a=0;return a|0}k=j-b|0;f=e>>>3;do if(e>>>0<256){e=c[i+8>>2]|0;d=c[i+12>>2]|0;if((d|0)==(e|0)){c[42551]=c[42551]&~(1<>2]=d;c[d+8>>2]=e;break}}else{h=c[i+24>>2]|0;d=c[i+12>>2]|0;do if((d|0)==(i|0)){f=i+16|0;e=f+4|0;d=c[e>>2]|0;if(!d){d=c[f>>2]|0;if(!d){f=0;break}else g=f}else g=e;while(1){f=d+20|0;e=c[f>>2]|0;if(e|0){d=e;g=f;continue}e=d+16|0;f=c[e>>2]|0;if(!f)break;else{d=f;g=e}}c[g>>2]=0;f=d}else{f=c[i+8>>2]|0;c[f+12>>2]=d;c[d+8>>2]=f;f=d}while(0);if(h|0){d=c[i+28>>2]|0;e=170508+(d<<2)|0;if((c[e>>2]|0)==(i|0)){c[e>>2]=f;if(!f){c[42552]=c[42552]&~(1<>2]|0)!=(i|0)&1)<<2)>>2]=f;if(!f)break}c[f+24>>2]=h;d=i+16|0;e=c[d>>2]|0;if(e|0){c[f+16>>2]=e;c[e+24>>2]=f}d=c[d+4>>2]|0;if(d|0){c[f+20>>2]=d;c[d+24>>2]=f}}}while(0);if(k>>>0<16){c[l>>2]=j|m&1|2;m=a+j+4|0;c[m>>2]=c[m>>2]|1;return a|0}else{i=a+b|0;c[l>>2]=m&1|b|2;c[i+4>>2]=k|3;m=a+j+4|0;c[m>>2]=c[m>>2]|1;dJ(i,k);return a|0}return 0}function dJ(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=a+b|0;d=c[a+4>>2]|0;do if(!(d&1)){f=c[a>>2]|0;if(!(d&3))return;h=a+(0-f)|0;b=f+b|0;if((c[42556]|0)==(h|0)){a=i+4|0;d=c[a>>2]|0;if((d&3|0)!=3)break;c[42553]=b;c[a>>2]=d&-2;c[h+4>>2]=b|1;c[i>>2]=b;return}e=f>>>3;if(f>>>0<256){a=c[h+8>>2]|0;d=c[h+12>>2]|0;if((d|0)==(a|0)){c[42551]=c[42551]&~(1<>2]=d;c[d+8>>2]=a;break}}g=c[h+24>>2]|0;a=c[h+12>>2]|0;do if((a|0)==(h|0)){e=h+16|0;d=e+4|0;a=c[d>>2]|0;if(!a){a=c[e>>2]|0;if(!a){a=0;break}else d=e}while(1){e=a+20|0;f=c[e>>2]|0;if(f|0){a=f;d=e;continue}e=a+16|0;f=c[e>>2]|0;if(!f)break;else{a=f;d=e}}c[d>>2]=0}else{f=c[h+8>>2]|0;c[f+12>>2]=a;c[a+8>>2]=f}while(0);if(g){d=c[h+28>>2]|0;e=170508+(d<<2)|0;if((c[e>>2]|0)==(h|0)){c[e>>2]=a;if(!a){c[42552]=c[42552]&~(1<>2]|0)!=(h|0)&1)<<2)>>2]=a;if(!a)break}c[a+24>>2]=g;d=h+16|0;e=c[d>>2]|0;if(e|0){c[a+16>>2]=e;c[e+24>>2]=a}d=c[d+4>>2]|0;if(d){c[a+20>>2]=d;c[d+24>>2]=a}}}else h=a;while(0);a=i+4|0;e=c[a>>2]|0;if(!(e&2)){if((c[42557]|0)==(i|0)){i=(c[42554]|0)+b|0;c[42554]=i;c[42557]=h;c[h+4>>2]=i|1;if((h|0)!=(c[42556]|0))return;c[42556]=0;c[42553]=0;return}if((c[42556]|0)==(i|0)){i=(c[42553]|0)+b|0;c[42553]=i;c[42556]=h;c[h+4>>2]=i|1;c[h+i>>2]=i;return}f=(e&-8)+b|0;d=e>>>3;do if(e>>>0<256){a=c[i+8>>2]|0;b=c[i+12>>2]|0;if((b|0)==(a|0)){c[42551]=c[42551]&~(1<>2]=b;c[b+8>>2]=a;break}}else{g=c[i+24>>2]|0;b=c[i+12>>2]|0;do if((b|0)==(i|0)){d=i+16|0;a=d+4|0;b=c[a>>2]|0;if(!b){b=c[d>>2]|0;if(!b){d=0;break}else a=d}while(1){d=b+20|0;e=c[d>>2]|0;if(e|0){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}c[a>>2]=0;d=b}else{d=c[i+8>>2]|0;c[d+12>>2]=b;c[b+8>>2]=d;d=b}while(0);if(g|0){b=c[i+28>>2]|0;a=170508+(b<<2)|0;if((c[a>>2]|0)==(i|0)){c[a>>2]=d;if(!d){c[42552]=c[42552]&~(1<>2]|0)!=(i|0)&1)<<2)>>2]=d;if(!d)break}c[d+24>>2]=g;b=i+16|0;a=c[b>>2]|0;if(a|0){c[d+16>>2]=a;c[a+24>>2]=d}b=c[b+4>>2]|0;if(b|0){c[d+20>>2]=b;c[b+24>>2]=d}}}while(0);c[h+4>>2]=f|1;c[h+f>>2]=f;if((h|0)==(c[42556]|0)){c[42553]=f;return}}else{c[a>>2]=e&-2;c[h+4>>2]=b|1;c[h+b>>2]=b;f=b}b=f>>>3;if(f>>>0<256){d=170244+(b<<1<<2)|0;a=c[42551]|0;b=1<>2]|0}c[a>>2]=h;c[b+12>>2]=h;c[h+8>>2]=b;c[h+12>>2]=d;return}b=f>>>8;if(b)if(f>>>0>16777215)b=31;else{g=(b+1048320|0)>>>16&8;i=b<>>16&4;i=i<>>16&2;b=14-(e|g|b)+(i<>>15)|0;b=f>>>(b+7|0)&1|b<<1}else b=0;e=170508+(b<<2)|0;c[h+28>>2]=b;c[h+20>>2]=0;c[h+16>>2]=0;a=c[42552]|0;d=1<>2]=h;c[h+24>>2]=e;c[h+12>>2]=h;c[h+8>>2]=h;return}a=f<<((b|0)==31?0:25-(b>>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(f|0)){b=69;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){b=68;break}else{a=a<<1;d=b}}if((b|0)==68){c[e>>2]=h;c[h+24>>2]=d;c[h+12>>2]=h;c[h+8>>2]=h;return}else if((b|0)==69){g=d+8|0;i=c[g>>2]|0;c[i+12>>2]=h;c[g>>2]=h;c[h+8>>2]=i;c[h+12>>2]=d;c[h+24>>2]=0;return}}function eJ(a,b){a=a|0;b=b|0;if(a>>>0<9){b=_I(b)|0;return b|0}else{b=fJ(a,b)|0;return b|0}return 0}function fJ(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;a=a>>>0>16?a:16;if(a+-1&a){d=16;while(1)if(d>>>0>>0)d=d<<1;else{a=d;break}}if((-64-a|0)>>>0<=b>>>0){c[(kJ()|0)>>2]=12;h=0;return h|0}g=b>>>0<11?16:b+11&-8;d=_I(g+12+a|0)|0;if(!d){h=0;return h|0}f=d+-8|0;do if(a+-1&d){e=(d+a+-1&0-a)+-8|0;b=f;e=(e-b|0)>>>0>15?e:e+a|0;b=e-b|0;a=d+-4|0;i=c[a>>2]|0;d=(i&-8)-b|0;if(!(i&3)){c[e>>2]=(c[f>>2]|0)+b;c[e+4>>2]=d;a=e;b=e;break}else{i=e+4|0;c[i>>2]=d|c[i>>2]&1|2;d=e+d+4|0;c[d>>2]=c[d>>2]|1;c[a>>2]=b|c[a>>2]&1|2;c[i>>2]=c[i>>2]|1;dJ(f,b);a=e;b=e;break}}else{a=f;b=f}while(0);a=a+4|0;d=c[a>>2]|0;if(d&3|0?(h=d&-8,h>>>0>(g+16|0)>>>0):0){i=h-g|0;f=b+g|0;c[a>>2]=g|d&1|2;c[f+4>>2]=i|3;h=b+h+4|0;c[h>>2]=c[h>>2]|1;dJ(f,i)}i=b+8|0;return i|0}function gJ(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=lJ(c[a+60>>2]|0)|0;a=jJ(Da(6,d|0)|0)|0;l=b;return a|0}function hJ(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;k=l;l=l+32|0;f=k;i=k+16|0;c[i>>2]=d;g=i+4|0;j=b+48|0;m=c[j>>2]|0;c[g>>2]=e-((m|0)!=0&1);h=b+44|0;c[i+8>>2]=c[h>>2];c[i+12>>2]=m;c[f>>2]=c[b+60>>2];c[f+4>>2]=i;c[f+8>>2]=2;f=jJ(ua(145,f|0)|0)|0;if((f|0)>=1){i=c[g>>2]|0;if(f>>>0>i>>>0){g=c[h>>2]|0;h=b+4|0;c[h>>2]=g;c[b+8>>2]=g+(f-i);if(!(c[j>>2]|0))f=e;else{c[h>>2]=g+1;a[d+(e+-1)>>0]=a[g>>0]|0;f=e}}}else c[b>>2]=c[b>>2]|f&48^16;l=k;return f|0}function iJ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=l;l=l+32|0;g=f;e=f+20|0;c[g>>2]=c[a+60>>2];c[g+4>>2]=0;c[g+8>>2]=b;c[g+12>>2]=e;c[g+16>>2]=d;if((jJ(ta(140,g|0)|0)|0)<0){c[e>>2]=-1;a=-1}else a=c[e>>2]|0;l=f;return a|0}function jJ(a){a=a|0;if(a>>>0>4294963200){c[(kJ()|0)>>2]=0-a;a=-1}return a|0}function kJ(){return 170700}function lJ(a){a=a|0;return a|0}function mJ(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+32|0;f=g;c[b+36>>2]=9;if((c[b>>2]&64|0)==0?(c[f>>2]=c[b+60>>2],c[f+4>>2]=21523,c[f+8>>2]=g+16,Ca(54,f|0)|0):0)a[b+75>>0]=-1;f=nJ(b,d,e)|0;l=g;return f|0}function nJ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;n=l;l=l+48|0;k=n+16|0;g=n;f=n+32|0;i=a+28|0;e=c[i>>2]|0;c[f>>2]=e;j=a+20|0;e=(c[j>>2]|0)-e|0;c[f+4>>2]=e;c[f+8>>2]=b;c[f+12>>2]=d;e=e+d|0;h=a+60|0;c[g>>2]=c[h>>2];c[g+4>>2]=f;c[g+8>>2]=2;g=jJ(va(146,g|0)|0)|0;a:do if((e|0)!=(g|0)){b=2;while(1){if((g|0)<0)break;e=e-g|0;p=c[f+4>>2]|0;o=g>>>0>p>>>0;f=o?f+8|0:f;b=b+(o<<31>>31)|0;p=g-(o?p:0)|0;c[f>>2]=(c[f>>2]|0)+p;o=f+4|0;c[o>>2]=(c[o>>2]|0)-p;c[k>>2]=c[h>>2];c[k+4>>2]=f;c[k+8>>2]=b;g=jJ(va(146,k|0)|0)|0;if((e|0)==(g|0)){m=3;break a}}c[a+16>>2]=0;c[i>>2]=0;c[j>>2]=0;c[a>>2]=c[a>>2]|32;if((b|0)==2)d=0;else d=d-(c[f+4>>2]|0)|0}else m=3;while(0);if((m|0)==3){p=c[a+44>>2]|0;c[a+16>>2]=p+(c[a+48>>2]|0);c[i>>2]=p;c[j>>2]=p}l=n;return d|0}function oJ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;c[e+4>>2]=b;b=jJ(Ea(91,e|0)|0)|0;l=d;return b|0}function pJ(){return}function qJ(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0;i=l;l=l+32|0;h=i;do if((g&4095|0)==0&(((g|0)<0)<<31>>31&-4096|0)==0){if(b>>>0>2147483646){c[(kJ()|0)>>2]=12;a=-1;break}c[h>>2]=a;c[h+4>>2]=b;c[h+8>>2]=d;c[h+12>>2]=e;c[h+16>>2]=f;c[h+20>>2]=g>>12;a=jJ(wa(192,h|0)|0)|0}else{c[(kJ()|0)>>2]=22;a=-1}while(0);l=i;return a|0}function rJ(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=d&255;a:do if(!f)b=b+(sJ(b)|0)|0;else{if(b&3){e=d&255;do{g=a[b>>0]|0;if(g<<24>>24==0?1:g<<24>>24==e<<24>>24)break a;b=b+1|0}while((b&3|0)!=0)}f=O(f,16843009)|0;e=c[b>>2]|0;b:do if(!((e&-2139062144^-2139062144)&e+-16843009))do{g=e^f;if((g&-2139062144^-2139062144)&g+-16843009|0)break b;b=b+4|0;e=c[b>>2]|0}while(!((e&-2139062144^-2139062144)&e+-16843009|0));while(0);e=d&255;while(1){g=a[b>>0]|0;if(g<<24>>24==0?1:g<<24>>24==e<<24>>24)break;else b=b+1|0}}while(0);return b|0}function sJ(b){b=b|0;var d=0,e=0,f=0;f=b;a:do if(!(f&3))e=4;else{d=f;while(1){if(!(a[b>>0]|0)){b=d;break a}b=b+1|0;d=b;if(!(d&3)){e=4;break}}}while(0);if((e|0)==4){while(1){d=c[b>>2]|0;if(!((d&-2139062144^-2139062144)&d+-16843009))b=b+4|0;else break}if((d&255)<<24>>24)do b=b+1|0;while((a[b>>0]|0)!=0)}return b-f|0}function tJ(b,e){b=b|0;e=e|0;var f=0,g=0;g=0;while(1){if((d[125833+g>>0]|0)==(b|0)){b=2;break}f=g+1|0;if((f|0)==87){f=125921;g=87;b=5;break}else g=f}if((b|0)==2)if(!g)f=125921;else{f=125921;b=5}if((b|0)==5)while(1){do{b=f;f=f+1|0}while((a[b>>0]|0)!=0);g=g+-1|0;if(!g)break;else b=5}return uJ(f,c[e+20>>2]|0)|0}function uJ(a,b){a=a|0;b=b|0;return vJ(a,b)|0}function vJ(a,b){a=a|0;b=b|0;if(!b)b=0;else b=wJ(c[b>>2]|0,c[b+4>>2]|0,a)|0;return (b|0?b:a)|0}function wJ(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=(c[b>>2]|0)+1794895138|0;h=xJ(c[b+8>>2]|0,o)|0;f=xJ(c[b+12>>2]|0,o)|0;g=xJ(c[b+16>>2]|0,o)|0;a:do if((h>>>0>>2>>>0?(n=d-(h<<2)|0,f>>>0>>0&g>>>0>>0):0)?((g|f)&3|0)==0:0){n=f>>>2;m=g>>>2;l=0;while(1){j=h>>>1;k=l+j|0;i=k<<1;g=i+n|0;f=xJ(c[b+(g<<2)>>2]|0,o)|0;g=xJ(c[b+(g+1<<2)>>2]|0,o)|0;if(!(g>>>0>>0&f>>>0<(d-g|0)>>>0)){f=0;break a}if(a[b+(g+f)>>0]|0){f=0;break a}f=yJ(e,b+g|0)|0;if(!f)break;f=(f|0)<0;if((h|0)==1){f=0;break a}else{l=f?l:k;h=f?j:h-j|0}}f=i+m|0;g=xJ(c[b+(f<<2)>>2]|0,o)|0;f=xJ(c[b+(f+1<<2)>>2]|0,o)|0;if(f>>>0>>0&g>>>0<(d-f|0)>>>0)f=(a[b+(f+g)>>0]|0)==0?b+f|0:0;else f=0}else f=0;while(0);return f|0}function xJ(a,b){a=a|0;b=b|0;var c=0;c=RN(a|0)|0;return ((b|0)==0?a:c)|0}function yJ(b,c){b=b|0;c=c|0;var d=0,e=0;d=a[b>>0]|0;e=a[c>>0]|0;if(d<<24>>24==0?1:d<<24>>24!=e<<24>>24)b=e;else{do{b=b+1|0;c=c+1|0;d=a[b>>0]|0;e=a[c>>0]|0}while(!(d<<24>>24==0?1:d<<24>>24!=e<<24>>24));b=e}return (d&255)-(b&255)|0}function zJ(a){a=a|0;return tJ(a,c[(AJ()|0)+188>>2]|0)|0}function AJ(){return BJ()|0}function BJ(){return 55800}function CJ(a,b,c){a=+a;b=+b;c=c|0;var d=0.0,e=0.0,f=0.0;f=a*a;d=f*(f*f)*(f*1.58969099521155e-10+-2.5050760253406863e-08)+(f*(f*2.7557313707070068e-06+-1.984126982985795e-04)+.00833333333332249);e=f*a;if(!c)a=e*(f*d+-.16666666666666632)+a;else a=a-(e*.16666666666666632+(f*(b*.5-e*d)-b));return +a}function DJ(a){a=+a;var b=0,d=0,e=0,f=0,g=0.0,i=0.0,k=0.0,l=0.0,m=0.0;h[j>>3]=a;b=c[j>>2]|0;d=c[j+4>>2]|0;e=(d|0)<0;do if(e|d>>>0<1048576){if((b|0)==0&(d&2147483647|0)==0){a=-1.0/(a*a);break}if(e){a=(a-a)/0.0;break}else{h[j>>3]=a*18014398509481984.0;d=c[j+4>>2]|0;e=-1077;b=c[j>>2]|0;f=9;break}}else if(d>>>0<=2146435071)if((b|0)==0&0==0&(d|0)==1072693248)a=0.0;else{e=-1023;f=9}while(0);if((f|0)==9){f=d+614242|0;c[j>>2]=b;c[j+4>>2]=(f&1048575)+1072079006;m=+h[j>>3]+-1.0;k=m*(m*.5);i=m/(m+2.0);l=i*i;g=l*l;h[j>>3]=m-k;d=c[j+4>>2]|0;c[j>>2]=0;c[j+4>>2]=d;a=+h[j>>3];g=m-a-k+i*(k+(g*(g*(g*.15313837699209373+.22222198432149784)+.3999999999940942)+l*(g*(g*(g*.14798198605116586+.1818357216161805)+.2857142874366239)+.6666666666666735)));l=a*1.4426950407214463;k=+(e+(f>>>20)|0);i=l+k;a=i+(l+(k-i)+(g*1.4426950407214463+(g+a)*1.6751713164886512e-10))}return +a}function EJ(a,b){a=+a;b=b|0;var d=0,e=0,f=0;h[j>>3]=a;d=c[j>>2]|0;e=c[j+4>>2]|0;f=ON(d|0,e|0,52)|0;switch(f&2047){case 0:{if(a!=0.0){a=+EJ(a*18446744073709551616.0,b);d=(c[b>>2]|0)+-64|0}else d=0;c[b>>2]=d;break}case 2047:break;default:{c[b>>2]=(f&2047)+-1022;c[j>>2]=d;c[j+4>>2]=e&-2146435073|1071644672;a=+h[j>>3]}}return +a}function FJ(a,b){a=+a;b=+b;var c=0.0,d=0.0,e=0.0,f=0.0;c=a*a;d=c*c;e=c*.5;f=1.0-e;return +(f+(1.0-f-e+(c*(c*(c*(c*2.480158728947673e-05+-.001388888888887411)+.0416666666666666)+d*d*(c*(2.087572321298175e-09-c*1.1359647557788195e-11)+-2.7557314351390663e-07))-a*b)))}function GJ(a){a=+a;var b=0,d=0,e=0,f=0,g=0.0,i=0.0,k=0.0,l=0.0,m=0.0;h[j>>3]=a;b=c[j>>2]|0;d=c[j+4>>2]|0;e=(d|0)<0;do if(e|d>>>0<1048576){if((b|0)==0&(d&2147483647|0)==0){a=-1.0/(a*a);break}if(e){a=(a-a)/0.0;break}else{h[j>>3]=a*18014398509481984.0;d=c[j+4>>2]|0;e=-1077;b=c[j>>2]|0;f=9;break}}else if(d>>>0<=2146435071)if((b|0)==0&0==0&(d|0)==1072693248)a=0.0;else{e=-1023;f=9}while(0);if((f|0)==9){f=d+614242|0;c[j>>2]=b;c[j+4>>2]=(f&1048575)+1072079006;k=+h[j>>3]+-1.0;i=k*(k*.5);l=k/(k+2.0);m=l*l;g=m*m;h[j>>3]=k-i;d=c[j+4>>2]|0;c[j>>2]=0;c[j+4>>2]=d;a=+h[j>>3];g=k-a-i+l*(i+(g*(g*(g*.15313837699209373+.22222198432149784)+.3999999999940942)+m*(g*(g*(g*.14798198605116586+.1818357216161805)+.2857142874366239)+.6666666666666735)));m=a*.4342944818781689;i=+(e+(f>>>20)|0);l=i*.30102999566361177;k=l+m;a=k+(m+(l-k)+(g*.4342944818781689+(i*3.694239077158931e-13+(g+a)*2.5082946711645275e-11)))}return +a}function HJ(a,b){a=+a;b=b|0;var d=0,e=0.0,f=0.0,g=0.0,i=0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0;r=l;l=l+48|0;m=r+16|0;n=r;h[j>>3]=a;d=c[j>>2]|0;i=c[j+4>>2]|0;o=ON(d|0,i|0,63)|0;q=i&2147483647;do if(q>>>0<1074752123)if((i&1048575|0)!=598523){d=(o|0)!=0;if(q>>>0<1073928573)if(d){g=a+1.5707963267341256;k=g+6.077100506506192e-11;h[b>>3]=k;h[b+8>>3]=g-k+6.077100506506192e-11;d=-1;break}else{g=a+-1.5707963267341256;k=g+-6.077100506506192e-11;h[b>>3]=k;h[b+8>>3]=g-k+-6.077100506506192e-11;d=1;break}else if(d){g=a+3.1415926534682512;k=g+1.2154201013012384e-10;h[b>>3]=k;h[b+8>>3]=g-k+1.2154201013012384e-10;d=-2;break}else{g=a+-3.1415926534682512;k=g+-1.2154201013012384e-10;h[b>>3]=k;h[b+8>>3]=g-k+-1.2154201013012384e-10;d=2;break}}else p=21;else{if(q>>>0<1075594812)if(q>>>0<1075183037){if((q|0)==1074977148){p=21;break}if(!o){g=a+-4.712388980202377;k=g+-1.8231301519518578e-10;h[b>>3]=k;h[b+8>>3]=g-k+-1.8231301519518578e-10;d=3;break}else{g=a+4.712388980202377;k=g+1.8231301519518578e-10;h[b>>3]=k;h[b+8>>3]=g-k+1.8231301519518578e-10;d=-3;break}}else{if((q|0)==1075388923){p=21;break}if(!o){g=a+-6.2831853069365025;k=g+-2.430840202602477e-10;h[b>>3]=k;h[b+8>>3]=g-k+-2.430840202602477e-10;d=4;break}else{g=a+6.2831853069365025;k=g+2.430840202602477e-10;h[b>>3]=k;h[b+8>>3]=g-k+2.430840202602477e-10;d=-4;break}}if(q>>>0>=1094263291){if(q>>>0>2146435071){k=a-a;h[b+8>>3]=k;h[b>>3]=k;d=0;break}c[j>>2]=d;c[j+4>>2]=i&1048575|1096810496;a=+h[j>>3];d=0;do{k=+(~~a|0);h[m+(d<<3)>>3]=k;a=(a-k)*16777216.0;d=d+1|0}while((d|0)!=2);h[m+16>>3]=a;if(a==0.0){d=1;while(1)if(+h[m+(d<<3)>>3]==0.0)d=d+-1|0;else break}else d=2;d=IJ(m,n,(q>>>20)+-1046|0,d+1|0,1)|0;a=+h[n>>3];if(!o){h[b>>3]=a;h[b+8>>3]=+h[n+8>>3];break}else{h[b>>3]=-a;h[b+8>>3]=-+h[n+8>>3];d=0-d|0;break}}else p=21}while(0);if((p|0)==21){g=a*.6366197723675814+6755399441055744.0+-6755399441055744.0;d=~~g;e=a-g*1.5707963267341256;f=g*6.077100506506192e-11;a=e-f;h[b>>3]=a;h[j>>3]=a;p=ON(c[j>>2]|0,c[j+4>>2]|0,52)|0;i=q>>>20;if((i-(p&2047)|0)>16){f=g*6.077100506303966e-11;k=e-f;f=g*2.0222662487959506e-21-(e-k-f);a=k-f;h[b>>3]=a;h[j>>3]=a;q=ON(c[j>>2]|0,c[j+4>>2]|0,52)|0;s=g*2.0222662487111665e-21;e=k-s;g=g*8.4784276603689e-32-(k-e-s);if((i-(q&2047)|0)>49){a=e-g;h[b>>3]=a;f=g}else e=k}h[b+8>>3]=e-a-f}l=r;return d|0}function IJ(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0.0;H=l;l=l+560|0;C=H+480|0;z=H+320|0;G=H+160|0;E=H;D=c[56044+(f<<2)>>2]|0;p=e+-1|0;y=(d+-3|0)/24|0;y=(y|0)>0?y:0;B=O(y,-24)|0;j=d+-24+B|0;if((D+p|0)>=0){n=D+e|0;k=y-p|0;m=0;while(1){if((k|0)<0)g=0.0;else g=+(c[56060+(k<<2)>>2]|0);h[z+(m<<3)>>3]=g;m=m+1|0;if((m|0)==(n|0))break;else k=k+1|0}}o=(e|0)>0;n=0;while(1){if(o){m=n+p|0;g=0.0;k=0;do{g=g+ +h[a+(k<<3)>>3]*+h[z+(m-k<<3)>>3];k=k+1|0}while((k|0)!=(e|0))}else g=0.0;h[E+(n<<3)>>3]=g;if((n|0)<(D|0))n=n+1|0;else break}t=(j|0)>0;u=24-j|0;v=23-j|0;w=(e|0)>0;x=(j|0)==0;k=D;a:while(1){g=+h[E+(k<<3)>>3];o=(k|0)>0;if(o){m=k;n=0;while(1){i=+(~~(g*5.9604644775390625e-08)|0);c[C+(n<<2)>>2]=~~(g-i*16777216.0);s=m;m=m+-1|0;g=+h[E+(m<<3)>>3]+i;if((s|0)<=1)break;else n=n+1|0}}g=+JJ(g,j);g=g-+A(+(g*.125))*8.0;m=~~g;g=g-+(m|0);do if(!t)if(!x)if(!(g>=.5)){p=0;s=m;break}else{n=2;F=20;break}else{n=c[C+(k+-1<<2)>>2]>>23;F=19;break}else{s=C+(k+-1<<2)|0;n=c[s>>2]|0;F=n>>u;n=n-(F<>2]=n;n=n>>v;m=F+m|0;F=19}while(0);if((F|0)==19){F=0;if((n|0)>0)F=20;else{p=n;s=m}}if((F|0)==20){F=0;s=m+1|0;if(o){m=0;r=0;do{p=C+(r<<2)|0;q=c[p>>2]|0;if(!m)if(!q)m=0;else{m=1;o=16777216;F=23}else{o=16777215;F=23}if((F|0)==23){F=0;c[p>>2]=o-q}r=r+1|0}while((r|0)!=(k|0))}else m=0;b:do if(t){switch(j|0){case 1:{o=8388607;break}case 2:{o=4194303;break}default:break b}r=C+(k+-1<<2)|0;c[r>>2]=c[r>>2]&o}while(0);if((n|0)==2){g=1.0-g;if(!m)p=2;else{p=2;g=g-+JJ(1.0,j)}}else p=n}if(!(g==0.0)){F=42;break}if((k|0)>(D|0)){m=0;n=k;do{n=n+-1|0;m=c[C+(n<<2)>>2]|m}while((n|0)>(D|0));if(m){F=41;break}else m=1}else m=1;while(1)if(!(c[C+(D-m<<2)>>2]|0))m=m+1|0;else break;o=m+k|0;if((m|0)<=0){k=o;continue}while(1){n=k+1|0;m=k+e|0;h[z+(m<<3)>>3]=+(c[56060+(n+y<<2)>>2]|0);if(w){g=0.0;k=0;do{g=g+ +h[a+(k<<3)>>3]*+h[z+(m-k<<3)>>3];k=k+1|0}while((k|0)!=(e|0))}else g=0.0;h[E+(n<<3)>>3]=g;if((n|0)<(o|0))k=n;else{k=o;continue a}}}if((F|0)==41)while(1){F=0;j=j+-24|0;k=k+-1|0;if(!(c[C+(k<<2)>>2]|0))F=41;else{o=k;break}}else if((F|0)==42){g=+JJ(g,0-j|0);if(g>=16777216.0){i=+(~~(g*5.9604644775390625e-08)|0);c[C+(k<<2)>>2]=~~(g-i*16777216.0);j=B+d|0;k=k+1|0;g=i}c[C+(k<<2)>>2]=~~g;o=k}g=+JJ(1.0,j);n=(o|0)>-1;if(n){j=o;while(1){h[E+(j<<3)>>3]=g*+(c[C+(j<<2)>>2]|0);if((j|0)>0){g=g*5.9604644775390625e-08;j=j+-1|0}else break}if(n){k=o;while(1){m=o-k|0;j=0;g=0.0;while(1){g=g+ +h[10840+(j<<3)>>3]*+h[E+(j+k<<3)>>3];if((j|0)>=(D|0)|(j|0)>=(m|0))break;else j=j+1|0}h[G+(m<<3)>>3]=g;if((k|0)>0)k=k+-1|0;else break}}}switch(f|0){case 0:{if(n){g=0.0;j=o;while(1){g=g+ +h[G+(j<<3)>>3];if((j|0)>0)j=j+-1|0;else break}}else g=0.0;i=(p|0)==0?g:-g;F=72;break}case 2:case 1:{if(n){g=0.0;j=o;while(1){g=g+ +h[G+(j<<3)>>3];if((j|0)>0)j=j+-1|0;else break}}else g=0.0;k=(p|0)==0;h[b>>3]=k?g:-g;g=+h[G>>3]-g;if((o|0)>=1){j=1;while(1){g=g+ +h[G+(j<<3)>>3];if((j|0)==(o|0))break;else j=j+1|0}}i=k?g:-g;b=b+8|0;F=72;break}case 3:{if((o|0)>0){j=o;g=+h[G+(o<<3)>>3];do{F=j;j=j+-1|0;E=G+(j<<3)|0;i=+h[E>>3];I=g;g=i+g;h[G+(F<<3)>>3]=I+(i-g);h[E>>3]=g}while((F|0)>1);k=(o|0)>1;if(k){j=o;g=+h[G+(o<<3)>>3];do{F=j;j=j+-1|0;E=G+(j<<3)|0;I=+h[E>>3];i=g;g=I+g;h[G+(F<<3)>>3]=i+(I-g);h[E>>3]=g}while((F|0)>2);if(k){j=o;i=0.0;while(1){i=i+ +h[G+(j<<3)>>3];if((j|0)>2)j=j+-1|0;else break}}else i=0.0}else i=0.0}else i=0.0;g=+h[G>>3];if(!p){h[b>>3]=g;g=+h[G+8>>3]}else{h[b>>3]=-g;i=-i;g=-+h[G+8>>3]}h[b+8>>3]=g;b=b+16|0;F=72;break}default:{}}if((F|0)==72)h[b>>3]=i;l=H;return s&7|0}function JJ(a,b){a=+a;b=b|0;var d=0,e=0;if((b|0)<=1023){if((b|0)<-1022){a=a*2.2250738585072014e-308;e=(b|0)<-2044;d=b+2044|0;a=e?a*2.2250738585072014e-308:a;b=e?((d|0)>-1022?d:-1022):b+1022|0}}else{a=a*8988465674311579538646525.0e283;d=(b|0)>2046;e=b+-2046|0;a=d?a*8988465674311579538646525.0e283:a;b=d?((e|0)<1023?e:1023):b+-1023|0}d=PN(b+1023|0,0,52)|0;e=z;c[j>>2]=d;c[j+4>>2]=e;return +(a*+h[j>>3])}function KJ(a){a=+a;var b=0,d=0,e=0,f=0.0,g=0.0;h[j>>3]=a;d=c[j+4>>2]|0;b=d&2147483647;do if(b>>>0>2146435071)a=a+a;else{if(b>>>0<1048576){h[j>>3]=a*18014398509481984.0;d=c[j+4>>2]|0;b=d&2147483647;if(!b)break;else e=696219795}else e=715094163;c[j>>2]=0;c[j+4>>2]=((b>>>0)/3|0)+e|d&-2147483648;f=+h[j>>3];g=f*f*(f/a);h[j>>3]=(g*(g*g)*(g*.14599619288661245+-.758397934778766)+(g*(g*1.6214297201053545+-1.8849797954337717)+1.87595182427177))*f;d=IN(c[j>>2]|0,c[j+4>>2]|0,-2147483648,0)|0;e=z;c[j>>2]=d&-1073741824;c[j+4>>2]=e;f=+h[j>>3];a=a/(f*f);a=(a-f)/(f+f+a)*f+f}while(0);return +a}function LJ(a,b){a=+a;b=+b;var d=0,e=0;h[j>>3]=a;e=c[j>>2]|0;d=c[j+4>>2]|0;h[j>>3]=b;d=c[j+4>>2]&-2147483648|d&2147483647;c[j>>2]=e;c[j+4>>2]=d;return +(+h[j>>3])}function MJ(a,b){a=+a;b=+b;return +(+LJ(a,b))}function NJ(a,b){a=+a;b=b|0;return +(+JJ(a,b))}function OJ(a,b){a=+a;b=+b;return +(+PJ(a,b))}function PJ(a,b){a=+a;b=+b;var d=0,e=0,f=0,g=0,i=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;h[j>>3]=a;i=c[j>>2]|0;l=c[j+4>>2]|0;h[j>>3]=b;n=c[j>>2]|0;o=c[j+4>>2]|0;e=ON(i|0,l|0,52)|0;e=e&2047;m=ON(n|0,o|0,52)|0;m=m&2047;p=l&-2147483648;g=PN(n|0,o|0,1)|0;k=z;a:do if(!((g|0)==0&(k|0)==0)?(f=QJ(b)|0,d=z&2147483647,!((e|0)==2047|(d>>>0>2146435072|(d|0)==2146435072&f>>>0>0))):0){d=PN(i|0,l|0,1)|0;f=z;if(!(f>>>0>k>>>0|(f|0)==(k|0)&d>>>0>g>>>0))return +((d|0)==(g|0)&(f|0)==(k|0)?a*0.0:a);if(!e){d=PN(i|0,l|0,12)|0;f=z;if((f|0)>-1|(f|0)==-1&d>>>0>4294967295){e=0;do{e=e+-1|0;d=PN(d|0,f|0,1)|0;f=z}while((f|0)>-1|(f|0)==-1&d>>>0>4294967295)}else e=0;i=PN(i|0,l|0,1-e|0)|0;g=z}else g=l&1048575|1048576;if(!m){f=PN(n|0,o|0,12)|0;k=z;if((k|0)>-1|(k|0)==-1&f>>>0>4294967295){d=0;do{d=d+-1|0;f=PN(f|0,k|0,1)|0;k=z}while((k|0)>-1|(k|0)==-1&f>>>0>4294967295)}else d=0;n=PN(n|0,o|0,1-d|0)|0;m=d;l=z}else l=o&1048575|1048576;f=JN(i|0,g|0,n|0,l|0)|0;d=z;k=(d|0)>-1|(d|0)==-1&f>>>0>4294967295;b:do if((e|0)>(m|0)){while(1){if(k){if((f|0)==0&(d|0)==0)break}else{f=i;d=g}i=PN(f|0,d|0,1)|0;g=z;e=e+-1|0;f=JN(i|0,g|0,n|0,l|0)|0;d=z;k=(d|0)>-1|(d|0)==-1&f>>>0>4294967295;if((e|0)<=(m|0))break b}b=a*0.0;break a}while(0);if(k){if((f|0)==0&(d|0)==0){b=a*0.0;break}}else{d=g;f=i}if(d>>>0<1048576|(d|0)==1048576&f>>>0<0)do{f=PN(f|0,d|0,1)|0;d=z;e=e+-1|0}while(d>>>0<1048576|(d|0)==1048576&f>>>0<0);if((e|0)>0){o=IN(f|0,d|0,0,-1048576)|0;d=z;e=PN(e|0,0,52)|0;d=d|z;e=o|e}else{e=ON(f|0,d|0,1-e|0)|0;d=z}c[j>>2]=e;c[j+4>>2]=d|p;b=+h[j>>3]}else q=3;while(0);if((q|0)==3){b=a*b;b=b/b}return +b}function QJ(a){a=+a;var b=0;h[j>>3]=a;b=c[j>>2]|0;z=c[j+4>>2]|0;return b|0}function RJ(a,b){a=+a;b=+b;var d=0.0,e=0,f=0,g=0,i=0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;q=l;l=l+32|0;m=q+24|0;n=q+16|0;o=q+8|0;p=q;h[j>>3]=a;t=c[j>>2]|0;g=c[j+4>>2]|0;h[j>>3]=b;e=c[j>>2]|0;g=g&2147483647;f=c[j+4>>2]&2147483647;i=g>>>0>>0|(g|0)==(f|0)&t>>>0>>0;s=i?e:t;r=i?f:g;e=i?t:e;f=i?g:f;g=ON(s|0,r|0,52)|0;i=ON(e|0,f|0,52)|0;c[j>>2]=s;c[j+4>>2]=r;a=+h[j>>3];c[j>>2]=e;c[j+4>>2]=f;k=+h[j>>3];do if((i|0)!=2047){if(!((e|0)==0&(f|0)==0|(g|0)==2047)){if((g-i|0)>64){a=a+k;break}if((g|0)>1533){d=5260135901548373507240989.0e186;b=a*1.90109156629516e-211;a=k*1.90109156629516e-211}else{t=(i|0)<573;d=t?1.90109156629516e-211:1.0;b=t?a*5260135901548373507240989.0e186:a;a=t?k*5260135901548373507240989.0e186:k}SJ(m,n,b);SJ(o,p,a);a=d*+C(+(+h[p>>3]+ +h[n>>3]+ +h[o>>3]+ +h[m>>3]))}}else a=k;while(0);l=q;return +a}function SJ(a,b,c){a=a|0;b=b|0;c=+c;var d=0.0,e=0.0;e=c*134217729.0;e=e+(c-e);d=c-e;c=c*c;h[a>>3]=c;h[b>>3]=d*d+(e*e-c+e*2.0*d);return}function TJ(a,b,d){a=+a;b=b|0;d=d|0;var e=0.0,f=0,g=0,i=0.0,k=0,m=0;k=l;l=l+16|0;g=k;h[j>>3]=a;f=c[j+4>>2]&2147483647;do if(f>>>0<1072243196)if(f>>>0<1044816030){h[b>>3]=a;h[d>>3]=1.0;break}else{h[b>>3]=+CJ(a,0.0,0);h[d>>3]=+FJ(a,0.0);break}else{if(f>>>0>2146435071){i=a-a;h[d>>3]=i;h[b>>3]=i;break}f=HJ(a,g)|0;m=g+8|0;e=+CJ(+h[g>>3],+h[m>>3],1);a=+FJ(+h[g>>3],+h[m>>3]);switch(f&3){case 0:{h[b>>3]=e;i=a;break}case 1:{h[b>>3]=a;i=-e;break}case 2:{h[b>>3]=-e;i=-a;break}case 3:{h[b>>3]=-a;i=e;break}default:{}}h[d>>3]=i}while(0);l=k;return}function UJ(a,b){a=+a;b=b|0;return +(+EJ(a,b))}function VJ(a){a=a|0;if(a>>>0<131072)a=(d[127725+((d[127725+(a>>>8)>>0]|0)<<5|a>>>3&31)>>0]|0)>>>(a&7)&1;else a=0;return a|0}function WJ(b,c,e){b=b|0;c=c|0;e=e|0;var f=0,g=0;if(!e)f=0;else{f=a[b>>0]|0;a:do if(!(f<<24>>24))f=0;else while(1){e=e+-1|0;g=a[c>>0]|0;if(!(f<<24>>24==g<<24>>24&((e|0)!=0&g<<24>>24!=0)))break a;b=b+1|0;c=c+1|0;f=a[b>>0]|0;if(!(f<<24>>24)){f=0;break}}while(0);f=(f&255)-(d[c>>0]|0)|0}return f|0}function XJ(b,c){b=b|0;c=c|0;b=rJ(b,c)|0;return ((a[b>>0]|0)==(c&255)<<24>>24?b:0)|0}function YJ(a){a=a|0;return ((a|0)==32|(a+-9|0)>>>0<5)&1|0}function ZJ(a,b,c){a=a|0;b=b|0;c=c|0;c=aK(a,b,c,-1,0)|0;return c|0}function _J(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;h=d&255;f=(e|0)!=0;a:do if(f&(b&3|0)!=0){g=d&255;while(1){if((a[b>>0]|0)==g<<24>>24){i=6;break a}b=b+1|0;e=e+-1|0;f=(e|0)!=0;if(!(f&(b&3|0)!=0)){i=5;break}}}else i=5;while(0);if((i|0)==5)if(f)i=6;else e=0;b:do if((i|0)==6){g=d&255;if((a[b>>0]|0)!=g<<24>>24){f=O(h,16843009)|0;c:do if(e>>>0>3)while(1){h=c[b>>2]^f;if((h&-2139062144^-2139062144)&h+-16843009|0)break;b=b+4|0;e=e+-4|0;if(e>>>0<=3){i=11;break c}}else i=11;while(0);if((i|0)==11)if(!e){e=0;break}while(1){if((a[b>>0]|0)==g<<24>>24)break b;b=b+1|0;e=e+-1|0;if(!e){e=0;break}}}}while(0);return (e|0?b:0)|0}function $J(a){a=a|0;return (a+-48|0)>>>0<10|0}function aK(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;j=l;l=l+128|0;h=j;c[h>>2]=0;i=h+4|0;c[i>>2]=a;c[h+44>>2]=a;g=h+8|0;c[g>>2]=(a|0)<0?-1:a+2147483647|0;c[h+76>>2]=-1;bK(h,0);d=cK(h,d,1,e,f)|0;if(b|0)c[b>>2]=a+((c[i>>2]|0)+(c[h+108>>2]|0)-(c[g>>2]|0));l=j;return d|0}function bK(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;c[a+104>>2]=b;d=c[a+8>>2]|0;e=c[a+4>>2]|0;f=d-e|0;c[a+108>>2]=f;c[a+100>>2]=(b|0)!=0&(f|0)>(b|0)?e+b|0:d;return}function cK(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;a:do if(e>>>0>36){c[(kJ()|0)>>2]=22;h=0;g=0}else{r=b+4|0;q=b+100|0;do{i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=dK(b)|0}while((YJ(i)|0)!=0);b:do switch(i|0){case 43:case 45:{i=((i|0)==45)<<31>>31;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;p=i;i=d[j>>0]|0;break b}else{p=i;i=dK(b)|0;break b}}default:p=0}while(0);j=(e|0)==0;do if((e|16|0)==16&(i|0)==48){i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=dK(b)|0;if((i|32|0)!=120)if(j){e=8;n=46;break}else{n=32;break}i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=dK(b)|0;if((d[130894+i>>0]|0)>15){g=(c[q>>2]|0)==0;if(!g)c[r>>2]=(c[r>>2]|0)+-1;if(!f){bK(b,0);h=0;g=0;break a}if(g){h=0;g=0;break a}c[r>>2]=(c[r>>2]|0)+-1;h=0;g=0;break a}else{e=16;n=46}}else{e=j?10:e;if(e>>>0>(d[130894+i>>0]|0)>>>0)n=32;else{if(c[q>>2]|0)c[r>>2]=(c[r>>2]|0)+-1;bK(b,0);c[(kJ()|0)>>2]=22;h=0;g=0;break a}}while(0);c:do if((n|0)==32)if((e|0)==10){e=i+-48|0;if(e>>>0<10){i=0;j=e;do{i=(i*10|0)+j|0;e=c[r>>2]|0;if(e>>>0<(c[q>>2]|0)>>>0){c[r>>2]=e+1;e=d[e>>0]|0}else e=dK(b)|0;j=e+-48|0}while(j>>>0<10&i>>>0<429496729);f=0}else{e=i;i=0;f=0}k=e+-48|0;if(k>>>0<10){j=e;do{e=HN(i|0,f|0,10,0)|0;l=z;m=((k|0)<0)<<31>>31;o=~m;if(l>>>0>o>>>0|(l|0)==(o|0)&e>>>0>~k>>>0){e=10;n=72;break c}i=IN(e|0,l|0,k|0,m|0)|0;f=z;e=c[r>>2]|0;if(e>>>0<(c[q>>2]|0)>>>0){c[r>>2]=e+1;j=d[e>>0]|0}else j=dK(b)|0;k=j+-48|0}while(k>>>0<10&(f>>>0<429496729|(f|0)==429496729&i>>>0<2576980378));if(k>>>0>9){j=p;e=f}else{e=10;n=72}}else{j=p;e=f}}else n=46;while(0);d:do if((n|0)==46){if(!(e+-1&e)){n=a[131150+((e*23|0)>>>5&7)>>0]|0;f=a[130894+i>>0]|0;j=f&255;if(e>>>0>j>>>0){i=0;k=j;do{i=k|i<>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=dK(b)|0;f=a[130894+j>>0]|0;k=f&255}while(i>>>0<134217728&e>>>0>k>>>0);k=0}else{j=i;k=0;i=0}l=ON(-1,-1,n|0)|0;m=z;if(e>>>0<=(f&255)>>>0|(m>>>0>>0|(m|0)==(k|0)&l>>>0>>0)){f=k;n=72;break}else j=k;while(1){i=PN(i|0,j|0,n|0)|0;k=z;i=i|f&255;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=dK(b)|0;f=a[130894+j>>0]|0;if(e>>>0<=(f&255)>>>0|(k>>>0>m>>>0|(k|0)==(m|0)&i>>>0>l>>>0)){f=k;n=72;break d}else j=k}}f=a[130894+i>>0]|0;j=f&255;if(e>>>0>j>>>0){i=0;k=j;do{i=k+(O(i,e)|0)|0;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=dK(b)|0;f=a[130894+j>>0]|0;k=f&255}while(i>>>0<119304647&e>>>0>k>>>0);k=0}else{j=i;i=0;k=0}if(e>>>0>(f&255)>>>0){n=MN(-1,-1,e|0,0)|0;o=z;m=k;while(1){if(m>>>0>o>>>0|(m|0)==(o|0)&i>>>0>n>>>0){f=m;n=72;break d}k=HN(i|0,m|0,e|0,0)|0;l=z;f=f&255;if(l>>>0>4294967295|(l|0)==-1&k>>>0>~f>>>0){f=m;n=72;break d}i=IN(k|0,l|0,f|0,0)|0;k=z;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=dK(b)|0;f=a[130894+j>>0]|0;if(e>>>0<=(f&255)>>>0){f=k;n=72;break}else m=k}}else{f=k;n=72}}while(0);if((n|0)==72)if(e>>>0>(d[130894+j>>0]|0)>>>0){do{i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=dK(b)|0}while(e>>>0>(d[130894+i>>0]|0)>>>0);c[(kJ()|0)>>2]=34;j=(g&1|0)==0&0==0?p:0;e=h;i=g}else{j=p;e=f}if(c[q>>2]|0)c[r>>2]=(c[r>>2]|0)+-1;if(!(e>>>0>>0|(e|0)==(h|0)&i>>>0>>0)){if(!((g&1|0)!=0|0!=0|(j|0)!=0)){c[(kJ()|0)>>2]=34;g=IN(g|0,h|0,-1,-1)|0;h=z;break}if(e>>>0>h>>>0|(e|0)==(h|0)&i>>>0>g>>>0){c[(kJ()|0)>>2]=34;break}}g=((j|0)<0)<<31>>31;g=JN(i^j|0,e^g|0,j|0,g|0)|0;h=z}while(0);z=h;return g|0}function dK(b){b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0;f=b+104|0;h=c[f>>2]|0;if((h|0)!=0?(c[b+108>>2]|0)>=(h|0):0)i=4;else{e=eK(b)|0;if((e|0)>=0){g=c[f>>2]|0;f=b+8|0;if(g){j=c[f>>2]|0;h=c[b+4>>2]|0;f=g-(c[b+108>>2]|0)|0;g=j;if((j-h|0)<(f|0))f=g;else f=h+(f+-1)|0}else{g=c[f>>2]|0;f=g}c[b+100>>2]=f;f=b+4|0;if(!g)f=c[f>>2]|0;else{f=c[f>>2]|0;j=b+108|0;c[j>>2]=g+1-f+(c[j>>2]|0)}f=f+-1|0;if((e|0)!=(d[f>>0]|0|0))a[f>>0]=e}else i=4}if((i|0)==4){c[b+100>>2]=0;e=-1}return e|0}function eK(a){a=a|0;var b=0,e=0;e=l;l=l+16|0;b=e;if((fK(a)|0)==0?(bb[c[a+32>>2]&31](a,b,1)|0)==1:0)a=d[b>>0]|0;else a=-1;l=e;return a|0}function fK(b){b=b|0;var d=0,e=0;d=b+74|0;e=a[d>>0]|0;a[d>>0]=e+255|e;d=b+20|0;e=b+28|0;if((c[d>>2]|0)>>>0>(c[e>>2]|0)>>>0)bb[c[b+36>>2]&31](b,0,0)|0;c[b+16>>2]=0;c[e>>2]=0;c[d>>2]=0;d=c[b>>2]|0;if(!(d&4)){e=(c[b+44>>2]|0)+(c[b+48>>2]|0)|0;c[b+8>>2]=e;c[b+4>>2]=e;d=d<<27>>31}else{c[b>>2]=d|32;d=-1}return d|0}function gK(a){a=a|0;return (a+-48|0)>>>0<10|0}function hK(a){a=a|0;if(!(iK(a)|0))a=($J(a)|0)!=0&1;else a=1;return a|0}function iK(a){a=a|0;return ((a|32)+-97|0)>>>0<26|0}function jK(b,c){b=b|0;c=c|0;var e=0,f=0,g=0;e=a[b>>0]|0;a:do if(!(e<<24>>24))b=0;else{g=b;b=e;f=e&255;while(1){e=a[c>>0]|0;if(!(e<<24>>24))break a;if(b<<24>>24!=e<<24>>24?(f=kK(f)|0,(f|0)!=(kK(d[c>>0]|0)|0)):0)break;b=g+1|0;c=c+1|0;e=a[b>>0]|0;if(!(e<<24>>24)){b=0;break a}else{g=b;b=e;f=e&255}}b=a[g>>0]|0}while(0);g=kK(b&255)|0;return g-(kK(d[c>>0]|0)|0)|0}function kK(a){a=a|0;var b=0;b=(lK(a)|0)==0;return (b?a:a|32)|0}function lK(a){a=a|0;return (a+-65|0)>>>0<26|0}function mK(a){a=a|0;return nK(a,0)|0}function nK(c,f){c=c|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0;k=(f<<1)+-1|0;l=f+-1|0;a:do if(!((c+-43008|0)>>>0<22272|((c+-11776|0)>>>0<30784|((c+-1536|0)>>>0<2560|(oK(c)|0)==0)))){g=(f|0)!=0;if(g&(c+-4256|0)>>>0<46){if((c|0)>4293)switch(c|0){case 4295:case 4301:break;default:break a}c=c+7264|0;break}if((c+-11520|0)>>>0<38&(g^1)){c=c+-7264|0;break}else g=0;do{i=a[59170+(g<<2)+2>>0]|0;j=i<<24>>24;h=c-(e[59170+(g<<2)>>1]|0)|0;if((h-(l&j)|0)>>>0<(d[59170+(g<<2)+3>>0]|0)>>>0){m=11;break}g=g+1|0}while((g|0)!=61);if((m|0)==11)if(i<<24>>24==1){c=f+c-(h&1)|0;break}else{c=(O(k,j)|0)+c|0;break}i=1-f|0;g=b[58682+(i<<1)>>1]|0;b:do if(g<<16>>16){h=0;while(1){if((g&65535|0)==(c|0))break;h=h+1|0;g=b[58682+(h<<2)+(i<<1)>>1]|0;if(!(g<<16>>16))break b}c=e[58682+(h<<2)+(f<<1)>>1]|0;break a}while(0);return ((c+-66600+(f*40|0)|0)>>>0<40?c+-40+(f*80|0)|0:c)|0}while(0);return c|0}function oK(a){a=a|0;if(a>>>0<131072)a=(d[131159+((d[131159+(a>>>8)>>0]|0)<<5|a>>>3&31)>>0]|0)>>>(a&7)&1;else a=a>>>0<196606&1;return a|0}function pK(a){a=a|0;var b=0;b=a;while(1)if(!(c[b>>2]|0))break;else b=b+4|0;return b-a>>2|0}function qK(b,c,e){b=b|0;c=c|0;e=e|0;var f=0,g=0,h=0;if(!e)b=0;else{f=a[b>>0]|0;a:do if(!(f<<24>>24))b=0;else{h=b;b=f;f=f&255;while(1){e=e+-1|0;g=a[c>>0]|0;if(!((e|0)!=0&g<<24>>24!=0))break a;if(b<<24>>24!=g<<24>>24?(g=kK(f)|0,(g|0)!=(kK(d[c>>0]|0)|0)):0)break;b=h+1|0;c=c+1|0;f=a[b>>0]|0;if(!(f<<24>>24)){b=0;break a}else{h=b;b=f;f=f&255}}b=a[h>>0]|0}while(0);b=kK(b&255)|0;b=b-(kK(d[c>>0]|0)|0)|0}return b|0}function rK(a){a=a|0;if(a>>>0>=255)if((a+-57344|0)>>>0<8185|(a>>>0<8232|(a+-8234|0)>>>0<47062))a=1;else return (a&65534|0)!=65534&(a+-65532|0)>>>0<1048580&1|0;else a=(a+1&127)>>>0>32&1;return a|0}function sK(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0;k=l;l=l+16|0;g=k;i=(f|0)==0?170768:f;f=c[i>>2]|0;a:do if(!d)if(!f)f=0;else j=17;else{h=(b|0)==0?g:b;if(!e)f=-2;else{if(!f){f=a[d>>0]|0;if(f<<24>>24>-1){c[h>>2]=f&255;f=f<<24>>24!=0&1;break}g=(c[c[(wK()|0)+188>>2]>>2]|0)==0;f=a[d>>0]|0;if(g){c[h>>2]=f<<24>>24&57343;f=1;break}f=(f&255)+-194|0;if(f>>>0>50){j=17;break}f=c[55208+(f<<2)>>2]|0;g=e+-1|0;if(g){d=d+1|0;j=11}}else{g=e;j=11}b:do if((j|0)==11){b=a[d>>0]|0;m=(b&255)>>>3;if((m+-16|m+(f>>26))>>>0>7){j=17;break a}while(1){d=d+1|0;f=(b&255)+-128|f<<6;g=g+-1|0;if((f|0)>=0)break;if(!g)break b;b=a[d>>0]|0;if((b&-64)<<24>>24!=-128){j=17;break a}}c[i>>2]=0;c[h>>2]=f;f=e-g|0;break a}while(0);c[i>>2]=f;f=-2}}while(0);if((j|0)==17){c[i>>2]=0;c[(kJ()|0)>>2]=84;f=-1}l=k;return f|0}function tK(a,b){a=a|0;b=b|0;if(!a)a=0;else a=uK(a,b,0)|0;return a|0}function uK(b,d,e){b=b|0;d=d|0;e=e|0;do if(b){if(d>>>0<128){a[b>>0]=d;b=1;break}if(!(c[c[(vK()|0)+188>>2]>>2]|0))if((d&-128|0)==57216){a[b>>0]=d;b=1;break}else{c[(kJ()|0)>>2]=84;b=-1;break}if(d>>>0<2048){a[b>>0]=d>>>6|192;a[b+1>>0]=d&63|128;b=2;break}if(d>>>0<55296|(d&-8192|0)==57344){a[b>>0]=d>>>12|224;a[b+1>>0]=d>>>6&63|128;a[b+2>>0]=d&63|128;b=3;break}if((d+-65536|0)>>>0<1048576){a[b>>0]=d>>>18|240;a[b+1>>0]=d>>>12&63|128;a[b+2>>0]=d>>>6&63|128;a[b+3>>0]=d&63|128;b=4;break}else{c[(kJ()|0)>>2]=84;b=-1;break}}else b=1;while(0);return b|0}function vK(){return BJ()|0}function wK(){return BJ()|0}function xK(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+272|0;n=p+8|0;o=p;do if(!(a[d>>0]|0)){d=Na(134135)|0;if(d|0?a[d>>0]|0:0)break;d=Na(134142+(b*12|0)|0)|0;if(d|0?a[d>>0]|0:0)break;d=Na(134214)|0;if(d|0?a[d>>0]|0:0)break;d=134219}while(0);e=0;a:do{switch(a[d+e>>0]|0){case 47:case 0:break a;default:{}}e=e+1|0}while(e>>>0<15);f=a[d>>0]|0;if(f<<24>>24!=46?(a[d+e>>0]|0)==0:0)if(f<<24>>24==67)m=15;else{k=d;m=16}else{d=134219;m=15}if((m|0)==15)if(!(a[d+1>>0]|0))m=18;else{k=d;m=16}b:do if((m|0)==16)if((yJ(k,134219)|0)!=0?(yJ(k,134227)|0)!=0:0){d=c[42693]|0;if(d|0)do{if(!(yJ(k,d+8|0)|0))break b;d=c[d+24>>2]|0}while((d|0)!=0);pa(170776);d=c[42693]|0;c:do if(d|0){while(1){if(!(yJ(k,d+8|0)|0))break;d=c[d+24>>2]|0;if(!d)break c}Fa(170776);break b}while(0);d:do if(((c[42678]|0)==0?(g=Na(134233)|0,(g|0)!=0):0)?(a[g>>0]|0)!=0:0){i=254-e|0;j=e+1|0;f=g;while(1){h=rJ(f,58)|0;d=a[h>>0]|0;g=h-f+((d<<24>>24!=0)<<31>>31)|0;if(g>>>0>>0){UN(n|0,f|0,g|0)|0;f=n+g|0;a[f>>0]=47;UN(f+1|0,k|0,e|0)|0;a[n+(j+g)>>0]=0;f=qa(n|0,o|0)|0;if(f|0)break;d=a[h>>0]|0}f=h+(d<<24>>24!=0&1)|0;if(!(a[f>>0]|0)){m=41;break d}}d=_I(28)|0;if(!d){oJ(f,c[o>>2]|0)|0;m=41;break}else{c[d>>2]=f;c[d+4>>2]=c[o>>2];o=d+8|0;UN(o|0,k|0,e|0)|0;a[o+e>>0]=0;c[d+24>>2]=c[42693];c[42693]=d;break}}else m=41;while(0);if((m|0)==41){d=_I(28)|0;if(d){c[d>>2]=c[13790];c[d+4>>2]=c[13791];o=d+8|0;UN(o|0,k|0,e|0)|0;a[o+e>>0]=0;c[d+24>>2]=c[42693];c[42693]=d}}Fa(170776);d=(b|0)==0&(d|0)==0?55160:d}else{d=k;m=18}while(0);do if((m|0)==18){if((b|0)==0?(a[d+1>>0]|0)==46:0){d=55160;break}d=0}while(0);l=p;return d|0}function yK(a,b){a=a|0;b=b|0;zK(a,b)|0;return a|0}function zK(b,d){b=b|0;d=d|0;var e=0,f=0;e=d;a:do if(!((e^b)&3)){if(e&3)do{e=a[d>>0]|0;a[b>>0]=e;if(!(e<<24>>24))break a;d=d+1|0;b=b+1|0}while((d&3|0)!=0);e=c[d>>2]|0;if(!((e&-2139062144^-2139062144)&e+-16843009)){f=b;while(1){d=d+4|0;b=f+4|0;c[f>>2]=e;e=c[d>>2]|0;if((e&-2139062144^-2139062144)&e+-16843009|0)break;else f=b}}f=8}else f=8;while(0);if((f|0)==8){f=a[d>>0]|0;a[b>>0]=f;if(f<<24>>24)do{d=d+1|0;b=b+1|0;f=a[d>>0]|0;a[b>>0]=f}while(f<<24>>24!=0)}return b|0}function AK(a){a=a|0;return ((a|0)==32|(a|0)==9)&1|0}function BK(a){a=a|0;if(!a)a=0;else a=(CK(56324,a)|0)!=0&1;return a|0}function CK(a,b){a=a|0;b=b|0;var d=0;if(!b)a=a+((pK(a)|0)<<2)|0;else{while(1){d=c[a>>2]|0;if((d|0)==0|(d|0)==(b|0))break;else a=a+4|0}a=d|0?a:0}return a|0}function DK(a,b){a=a|0;b=b|0;do switch(b|0){case 1:{a=EK(a)|0;break}case 2:{a=oK(a)|0;break}case 3:{a=FK(a)|0;break}case 4:{a=GK(a)|0;break}case 5:{a=gK(a)|0;break}case 6:{a=HK(a)|0;break}case 7:{a=IK(a)|0;break}case 8:{a=rK(a)|0;break}case 9:{a=VJ(a)|0;break}case 10:{a=BK(a)|0;break}case 11:{a=JK(a)|0;break}case 12:{a=KK(a)|0;break}default:a=0}while(0);return a|0}function EK(a){a=a|0;if(!(gK(a)|0))a=(oK(a)|0)!=0&1;else a=1;return a|0}function FK(a){a=a|0;return AK(a)|0}function GK(a){a=a|0;return ((a+-65529|0)>>>0<3|((a&-2|0)==8232|(a>>>0<32|(a+-127|0)>>>0<33)))&1|0}function HK(a){a=a|0;if(!(BK(a)|0))a=(rK(a)|0)!=0&1;else a=0;return a|0}function IK(a){a=a|0;return (mK(a)|0)!=(a|0)|0}function JK(a){a=a|0;return (LK(a)|0)!=(a|0)|0}function KK(a){a=a|0;return ((a+-48|0)>>>0<10|((a|32)+-97|0)>>>0<6)&1|0}function LK(a){a=a|0;return nK(a,1)|0}function MK(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+128|0;g=n+124|0;m=n;h=m;i=56412;j=h+124|0;do{c[h>>2]=c[i>>2];h=h+4|0;i=i+4|0}while((h|0)<(j|0));if((d+-1|0)>>>0>2147483646)if(!d){b=g;d=1;k=4}else{c[(kJ()|0)>>2]=75;d=-1}else k=4;if((k|0)==4){k=-2-b|0;k=d>>>0>k>>>0?k:d;c[m+48>>2]=k;g=m+20|0;c[g>>2]=b;c[m+44>>2]=b;d=b+k|0;b=m+16|0;c[b>>2]=d;c[m+28>>2]=d;d=NK(m,e,f)|0;if(k){m=c[g>>2]|0;a[m+(((m|0)==(c[b>>2]|0))<<31>>31)>>0]=0}}l=n;return d|0}function NK(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+224|0;n=s+120|0;p=s+80|0;q=s;r=s+136|0;f=p;g=f+40|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));c[n>>2]=c[e>>2];if((OK(0,d,n,q,p)|0)<0)e=-1;else{if((c[b+76>>2]|0)>-1)o=PK(b)|0;else o=0;e=c[b>>2]|0;m=e&32;if((a[b+74>>0]|0)<1)c[b>>2]=e&-33;f=b+48|0;if(!(c[f>>2]|0)){g=b+44|0;h=c[g>>2]|0;c[g>>2]=r;i=b+28|0;c[i>>2]=r;j=b+20|0;c[j>>2]=r;c[f>>2]=80;k=b+16|0;c[k>>2]=r+80;e=OK(b,d,n,q,p)|0;if(h){bb[c[b+36>>2]&31](b,0,0)|0;e=(c[j>>2]|0)==0?-1:e;c[g>>2]=h;c[f>>2]=0;c[k>>2]=0;c[i>>2]=0;c[j>>2]=0}}else e=OK(b,d,n,q,p)|0;f=c[b>>2]|0;c[b>>2]=f|m;if(o|0)QK(b);e=(f&32|0)==0?e:-1}l=s;return e|0}function OK(d,e,f,g,i){d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;I=l;l=l+64|0;D=I+16|0;E=I;A=I+24|0;G=I+8|0;H=I+20|0;c[D>>2]=e;w=(d|0)!=0;x=A+40|0;y=x;A=A+39|0;B=G+4|0;j=0;e=0;m=0;a:while(1){do if((e|0)>-1)if((j|0)>(2147483647-e|0)){c[(kJ()|0)>>2]=75;e=-1;break}else{e=j+e|0;break}while(0);r=c[D>>2]|0;j=a[r>>0]|0;if(!(j<<24>>24)){v=88;break}else k=r;b:while(1){switch(j<<24>>24){case 37:{j=k;v=9;break b}case 0:{j=k;break b}default:{}}u=k+1|0;c[D>>2]=u;j=a[u>>0]|0;k=u}c:do if((v|0)==9)while(1){v=0;if((a[k+1>>0]|0)!=37)break c;j=j+1|0;k=k+2|0;c[D>>2]=k;if((a[k>>0]|0)!=37)break;else v=9}while(0);j=j-r|0;if(w)RK(d,r,j);if(j|0)continue;u=($J(a[(c[D>>2]|0)+1>>0]|0)|0)==0;k=c[D>>2]|0;if(!u?(a[k+2>>0]|0)==36:0){s=(a[k+1>>0]|0)+-48|0;n=1;j=3}else{s=-1;n=m;j=1}j=k+j|0;c[D>>2]=j;k=a[j>>0]|0;u=(k<<24>>24)+-32|0;if(u>>>0>31|(1<>24)+-32|m;j=j+1|0;c[D>>2]=j;k=a[j>>0]|0;u=(k<<24>>24)+-32|0}while(!(u>>>0>31|(1<>24==42){if(($J(a[j+1>>0]|0)|0)!=0?(F=c[D>>2]|0,(a[F+2>>0]|0)==36):0){j=F+1|0;c[i+((a[j>>0]|0)+-48<<2)>>2]=10;j=c[g+((a[j>>0]|0)+-48<<3)>>2]|0;k=1;n=F+3|0}else{if(n|0){e=-1;break}if(w){u=(c[f>>2]|0)+(4-1)&~(4-1);j=c[u>>2]|0;c[f>>2]=u+4}else j=0;k=0;n=(c[D>>2]|0)+1|0}c[D>>2]=n;t=(j|0)<0;u=t?0-j|0:j;m=t?m|8192:m;t=k;j=n}else{j=SK(D)|0;if((j|0)<0){e=-1;break}u=j;t=n;j=c[D>>2]|0}do if((a[j>>0]|0)==46){if((a[j+1>>0]|0)!=42){c[D>>2]=j+1;p=SK(D)|0;j=c[D>>2]|0;break}if($J(a[j+2>>0]|0)|0?(C=c[D>>2]|0,(a[C+3>>0]|0)==36):0){p=C+2|0;c[i+((a[p>>0]|0)+-48<<2)>>2]=10;p=c[g+((a[p>>0]|0)+-48<<3)>>2]|0;j=C+4|0;c[D>>2]=j;break}if(t|0){e=-1;break a}if(w){q=(c[f>>2]|0)+(4-1)&~(4-1);j=c[q>>2]|0;c[f>>2]=q+4}else j=0;q=(c[D>>2]|0)+2|0;c[D>>2]=q;p=j;j=q}else p=-1;while(0);q=0;while(1){if(((a[j>>0]|0)+-65|0)>>>0>57){e=-1;break a}k=j;j=j+1|0;c[D>>2]=j;k=a[(a[k>>0]|0)+-65+(134246+(q*58|0))>>0]|0;n=k&255;if((n+-1|0)>>>0>=8)break;else q=n}if(!(k<<24>>24)){e=-1;break}o=(s|0)>-1;do if(k<<24>>24==19)if(o){e=-1;break a}else v=50;else{if(o){c[i+(s<<2)>>2]=n;o=g+(s<<3)|0;s=c[o+4>>2]|0;v=E;c[v>>2]=c[o>>2];c[v+4>>2]=s;v=50;break}if(!w){e=0;break a}TK(E,n,f);j=c[D>>2]|0}while(0);if((v|0)==50){v=0;if(!w){j=0;m=t;continue}}k=a[j+-1>>0]|0;k=(q|0)!=0&(k&15|0)==3?k&-33:k;j=m&-65537;s=(m&8192|0)==0?m:j;d:do switch(k|0){case 110:switch((q&255)<<24>>24){case 0:{c[c[E>>2]>>2]=e;j=0;m=t;continue a}case 1:{c[c[E>>2]>>2]=e;j=0;m=t;continue a}case 2:{j=c[E>>2]|0;c[j>>2]=e;c[j+4>>2]=((e|0)<0)<<31>>31;j=0;m=t;continue a}case 3:{b[c[E>>2]>>1]=e;j=0;m=t;continue a}case 4:{a[c[E>>2]>>0]=e;j=0;m=t;continue a}case 6:{c[c[E>>2]>>2]=e;j=0;m=t;continue a}case 7:{j=c[E>>2]|0;c[j>>2]=e;c[j+4>>2]=((e|0)<0)<<31>>31;j=0;m=t;continue a}default:{j=0;m=t;continue a}}case 112:{k=120;j=p>>>0>8?p:8;m=s|8;v=62;break}case 88:case 120:{j=p;m=s;v=62;break}case 111:{k=E;j=c[k>>2]|0;k=c[k+4>>2]|0;o=VK(j,k,x)|0;m=y-o|0;q=0;n=134710;p=(s&8|0)==0|(p|0)>(m|0)?p:m+1|0;m=s;v=68;break}case 105:case 100:{k=E;j=c[k>>2]|0;k=c[k+4>>2]|0;if((k|0)<0){j=JN(0,0,j|0,k|0)|0;k=z;m=E;c[m>>2]=j;c[m+4>>2]=k;m=1;n=134710;v=67;break d}else{m=(s&2049|0)!=0&1;n=(s&2048|0)==0?((s&1|0)==0?134710:134712):134711;v=67;break d}}case 117:{k=E;m=0;n=134710;j=c[k>>2]|0;k=c[k+4>>2]|0;v=67;break}case 99:{a[A>>0]=c[E>>2];r=A;q=0;n=134710;o=x;k=1;break}case 109:{k=zJ(c[(kJ()|0)>>2]|0)|0;v=72;break}case 115:{k=c[E>>2]|0;k=k|0?k:134720;v=72;break}case 67:{c[G>>2]=c[E>>2];c[B>>2]=0;c[E>>2]=G;p=-1;m=G;v=76;break}case 83:{j=c[E>>2]|0;if(!p){XK(d,32,u,0,s);j=0;v=85}else{m=j;v=76}break}case 65:case 71:case 70:case 69:case 97:case 103:case 102:case 101:{j=YK(d,+h[E>>3],u,p,s,k)|0;m=t;continue a}default:{q=0;n=134710;o=x;k=p;j=s}}while(0);e:do if((v|0)==62){s=E;r=c[s>>2]|0;s=c[s+4>>2]|0;o=UK(r,s,x,k&32)|0;n=(m&8|0)==0|(r|0)==0&(s|0)==0;q=n?0:2;n=n?134710:134710+(k>>4)|0;p=j;j=r;k=s;v=68}else if((v|0)==67){o=WK(j,k,x)|0;q=m;m=s;v=68}else if((v|0)==72){v=0;s=_J(k,0,p)|0;m=(s|0)==0;r=k;q=0;n=134710;o=m?k+p|0:s;k=m?p:s-k|0}else if((v|0)==76){v=0;o=m;j=0;k=0;while(1){n=c[o>>2]|0;if(!n)break;k=tK(H,n)|0;if((k|0)<0|k>>>0>(p-j|0)>>>0)break;j=k+j|0;if(p>>>0>j>>>0)o=o+4|0;else break}if((k|0)<0){e=-1;break a}XK(d,32,u,j,s);if(!j){j=0;v=85}else{n=0;while(1){k=c[m>>2]|0;if(!k){v=85;break e}k=tK(H,k)|0;n=k+n|0;if((n|0)>(j|0)){v=85;break e}RK(d,H,k);if(n>>>0>=j>>>0){v=85;break}else m=m+4|0}}}while(0);if((v|0)==68){v=0;k=(j|0)!=0|(k|0)!=0;j=(p|0)!=0|k;k=y-o+((k^1)&1)|0;r=j?o:x;o=x;k=j?((p|0)>(k|0)?p:k):p;j=(p|0)>-1?m&-65537:m}else if((v|0)==85){v=0;XK(d,32,u,j,s^8192);j=(u|0)>(j|0)?u:j;m=t;continue}p=o-r|0;o=(k|0)<(p|0)?p:k;s=o+q|0;m=(u|0)<(s|0)?s:u;XK(d,32,m,s,j);RK(d,n,q);XK(d,48,m,s,j^65536);XK(d,48,o,p,0);RK(d,r,p);XK(d,32,m,s,j^8192);j=m;m=t}f:do if((v|0)==88)if(!d)if(m){e=1;while(1){j=c[i+(e<<2)>>2]|0;if(!j)break;TK(g+(e<<3)|0,j,f);j=e+1|0;if((e|0)<9)e=j;else{e=j;break}}if((e|0)<10)while(1){if(c[i+(e<<2)>>2]|0){e=-1;break f}if((e|0)<9)e=e+1|0;else{e=1;break}}else e=1}else e=0;while(0);l=I;return e|0}function PK(a){a=a|0;return 0}function QK(a){a=a|0;return}function RK(a,b,d){a=a|0;b=b|0;d=d|0;if(!(c[a>>2]&32))_K(b,d,a)|0;return}function SK(b){b=b|0;var d=0,e=0;if(!($J(a[c[b>>2]>>0]|0)|0))d=0;else{d=0;do{e=c[b>>2]|0;d=(d*10|0)+-48+(a[e>>0]|0)|0;e=e+1|0;c[b>>2]=e}while(($J(a[e>>0]|0)|0)!=0)}return d|0}function TK(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0;a:do if(b>>>0<=20)do switch(b|0){case 9:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;c[a>>2]=b;break a}case 10:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;e=a;c[e>>2]=b;c[e+4>>2]=((b|0)<0)<<31>>31;break a}case 11:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;e=a;c[e>>2]=b;c[e+4>>2]=0;break a}case 12:{e=(c[d>>2]|0)+(8-1)&~(8-1);b=e;f=c[b>>2]|0;b=c[b+4>>2]|0;c[d>>2]=e+8;e=a;c[e>>2]=f;c[e+4>>2]=b;break a}case 13:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;e=(e&65535)<<16>>16;f=a;c[f>>2]=e;c[f+4>>2]=((e|0)<0)<<31>>31;break a}case 14:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;f=a;c[f>>2]=e&65535;c[f+4>>2]=0;break a}case 15:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;e=(e&255)<<24>>24;f=a;c[f>>2]=e;c[f+4>>2]=((e|0)<0)<<31>>31;break a}case 16:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;f=a;c[f>>2]=e&255;c[f+4>>2]=0;break a}case 17:{f=(c[d>>2]|0)+(8-1)&~(8-1);g=+h[f>>3];c[d>>2]=f+8;h[a>>3]=g;break a}case 18:{f=(c[d>>2]|0)+(8-1)&~(8-1);g=+h[f>>3];c[d>>2]=f+8;h[a>>3]=g;break a}default:break a}while(0);while(0);return}function UK(b,c,e,f){b=b|0;c=c|0;e=e|0;f=f|0;if(!((b|0)==0&(c|0)==0))do{e=e+-1|0;a[e>>0]=d[134758+(b&15)>>0]|0|f;b=ON(b|0,c|0,4)|0;c=z}while(!((b|0)==0&(c|0)==0));return e|0}function VK(b,c,d){b=b|0;c=c|0;d=d|0;if(!((b|0)==0&(c|0)==0))do{d=d+-1|0;a[d>>0]=b&7|48;b=ON(b|0,c|0,3)|0;c=z}while(!((b|0)==0&(c|0)==0));return d|0}function WK(b,c,d){b=b|0;c=c|0;d=d|0;var e=0;if(c>>>0>0|(c|0)==0&b>>>0>4294967295){while(1){e=NN(b|0,c|0,10,0)|0;d=d+-1|0;a[d>>0]=e&255|48;e=b;b=MN(b|0,c|0,10,0)|0;if(!(c>>>0>9|(c|0)==9&e>>>0>4294967295))break;else c=z}c=b}else c=b;if(c)while(1){d=d+-1|0;a[d>>0]=(c>>>0)%10|0|48;if(c>>>0<10)break;else c=(c>>>0)/10|0}return d|0}function XK(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+256|0;f=g;if((c|0)>(d|0)&(e&73728|0)==0){e=c-d|0;WN(f|0,b<<24>>24|0,(e>>>0<256?e:256)|0)|0;if(e>>>0>255){b=c-d|0;do{RK(a,f,256);e=e+-256|0}while(e>>>0>255);e=b&255}RK(a,f,e)}l=g;return}function YK(b,e,f,g,h,i){b=b|0;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;H=l;l=l+560|0;m=H+8|0;u=H;G=H+524|0;F=G;n=H+512|0;c[u>>2]=0;E=n+12|0;ZK(e)|0;if((z|0)<0){e=-e;C=1;B=134727}else{C=(h&2049|0)!=0&1;B=(h&2048|0)==0?((h&1|0)==0?134728:134733):134730}ZK(e)|0;do if(0==0&(z&2146435072|0)==2146435072){G=(i&32|0)!=0;j=C+3|0;XK(b,32,f,j,h&-65537);RK(b,B,C);RK(b,e!=e|0.0!=0.0?(G?134895:134754):G?134746:134750,3);XK(b,32,f,j,h^8192)}else{r=+UJ(e,u)*2.0;j=r!=0.0;if(j)c[u>>2]=(c[u>>2]|0)+-1;w=i|32;if((w|0)==97){p=i&32;s=(p|0)==0?B:B+9|0;q=C|2;j=12-g|0;do if(!(g>>>0>11|(j|0)==0)){e=8.0;do{j=j+-1|0;e=e*16.0}while((j|0)!=0);if((a[s>>0]|0)==45){e=-(e+(-r-e));break}else{e=r+e-e;break}}else e=r;while(0);k=c[u>>2]|0;j=(k|0)<0?0-k|0:k;j=WK(j,((j|0)<0)<<31>>31,E)|0;if((j|0)==(E|0)){j=n+11|0;a[j>>0]=48}a[j+-1>>0]=(k>>31&2)+43;o=j+-2|0;a[o>>0]=i+15;m=(g|0)<1;n=(h&8|0)==0;j=G;do{D=~~e;k=j+1|0;a[j>>0]=p|d[134758+D>>0];e=(e-+(D|0))*16.0;if((k-F|0)==1?!(n&(m&e==0.0)):0){a[k>>0]=46;j=j+2|0}else j=k}while(e!=0.0);if((g|0)!=0?(-2-F+j|0)<(g|0):0){k=j-F|0;j=g+2|0}else{j=j-F|0;k=j}E=E-o|0;F=E+q+j|0;XK(b,32,f,F,h);RK(b,s,q);XK(b,48,f,F,h^65536);RK(b,G,k);XK(b,48,j-k|0,0,0);RK(b,o,E);XK(b,32,f,F,h^8192);j=F;break}k=(g|0)<0?6:g;if(j){j=(c[u>>2]|0)+-28|0;c[u>>2]=j;e=r*268435456.0}else{e=r;j=c[u>>2]|0}D=(j|0)<0?m:m+288|0;m=D;do{y=~~e>>>0;c[m>>2]=y;m=m+4|0;e=(e-+(y>>>0))*1.0e9}while(e!=0.0);if((j|0)>0){n=D;p=m;while(1){o=(j|0)<29?j:29;j=p+-4|0;if(j>>>0>=n>>>0){m=0;do{x=PN(c[j>>2]|0,0,o|0)|0;x=IN(x|0,z|0,m|0,0)|0;y=z;v=NN(x|0,y|0,1e9,0)|0;c[j>>2]=v;m=MN(x|0,y|0,1e9,0)|0;j=j+-4|0}while(j>>>0>=n>>>0);if(m){n=n+-4|0;c[n>>2]=m}}m=p;while(1){if(m>>>0<=n>>>0)break;j=m+-4|0;if(!(c[j>>2]|0))m=j;else break}j=(c[u>>2]|0)-o|0;c[u>>2]=j;if((j|0)>0)p=m;else break}}else n=D;if((j|0)<0){g=((k+25|0)/9|0)+1|0;t=(w|0)==102;do{s=0-j|0;s=(s|0)<9?s:9;if(n>>>0>>0){o=(1<>>s;q=0;j=n;do{y=c[j>>2]|0;c[j>>2]=(y>>>s)+q;q=O(y&o,p)|0;j=j+4|0}while(j>>>0>>0);j=(c[n>>2]|0)==0?n+4|0:n;if(!q){n=j;j=m}else{c[m>>2]=q;n=j;j=m+4|0}}else{n=(c[n>>2]|0)==0?n+4|0:n;j=m}m=t?D:n;m=(j-m>>2|0)>(g|0)?m+(g<<2)|0:j;j=(c[u>>2]|0)+s|0;c[u>>2]=j}while((j|0)<0);j=n;g=m}else{j=n;g=m}y=D;if(j>>>0>>0){m=(y-j>>2)*9|0;o=c[j>>2]|0;if(o>>>0>=10){n=10;do{n=n*10|0;m=m+1|0}while(o>>>0>=n>>>0)}}else m=0;t=(w|0)==103;v=(k|0)!=0;n=k-((w|0)!=102?m:0)+((v&t)<<31>>31)|0;if((n|0)<(((g-y>>2)*9|0)+-9|0)){n=n+9216|0;s=D+4+(((n|0)/9|0)+-1024<<2)|0;n=(n|0)%9|0;if((n|0)<8){o=10;while(1){o=o*10|0;if((n|0)<7)n=n+1|0;else break}}else o=10;p=c[s>>2]|0;q=(p>>>0)%(o>>>0)|0;n=(s+4|0)==(g|0);if(!(n&(q|0)==0)){r=(((p>>>0)/(o>>>0)|0)&1|0)==0?9007199254740992.0:9007199254740994.0;x=(o|0)/2|0;e=q>>>0>>0?.5:n&(q|0)==(x|0)?1.0:1.5;if(C){x=(a[B>>0]|0)==45;e=x?-e:e;r=x?-r:r}n=p-q|0;c[s>>2]=n;if(r+e!=r){x=n+o|0;c[s>>2]=x;if(x>>>0>999999999){m=s;while(1){n=m+-4|0;c[m>>2]=0;if(n>>>0>>0){j=j+-4|0;c[j>>2]=0}x=(c[n>>2]|0)+1|0;c[n>>2]=x;if(x>>>0>999999999)m=n;else break}}else n=s;m=(y-j>>2)*9|0;p=c[j>>2]|0;if(p>>>0>=10){o=10;do{o=o*10|0;m=m+1|0}while(p>>>0>=o>>>0)}}else n=s}else n=s;n=n+4|0;n=g>>>0>n>>>0?n:g;x=j}else{n=g;x=j}w=n;while(1){if(w>>>0<=x>>>0){u=0;break}j=w+-4|0;if(!(c[j>>2]|0))w=j;else{u=1;break}}g=0-m|0;do if(t){j=k+((v^1)&1)|0;if((j|0)>(m|0)&(m|0)>-5){o=i+-1|0;k=j+-1-m|0}else{o=i+-2|0;k=j+-1|0}j=h&8;if(!j){if(u?(A=c[w+-4>>2]|0,(A|0)!=0):0)if(!((A>>>0)%10|0)){n=0;j=10;do{j=j*10|0;n=n+1|0}while(!((A>>>0)%(j>>>0)|0|0))}else n=0;else n=9;j=((w-y>>2)*9|0)+-9|0;if((o|32|0)==102){s=j-n|0;s=(s|0)>0?s:0;k=(k|0)<(s|0)?k:s;s=0;break}else{s=j+m-n|0;s=(s|0)>0?s:0;k=(k|0)<(s|0)?k:s;s=0;break}}else s=j}else{o=i;s=h&8}while(0);t=k|s;p=(t|0)!=0&1;q=(o|32|0)==102;if(q){v=0;j=(m|0)>0?m:0}else{j=(m|0)<0?g:m;j=WK(j,((j|0)<0)<<31>>31,E)|0;n=E;if((n-j|0)<2)do{j=j+-1|0;a[j>>0]=48}while((n-j|0)<2);a[j+-1>>0]=(m>>31&2)+43;j=j+-2|0;a[j>>0]=o;v=j;j=n-j|0}j=C+1+k+p+j|0;XK(b,32,f,j,h);RK(b,B,C);XK(b,48,f,j,h^65536);if(q){o=x>>>0>D>>>0?D:x;s=G+9|0;p=s;q=G+8|0;n=o;do{m=WK(c[n>>2]|0,0,s)|0;if((n|0)==(o|0)){if((m|0)==(s|0)){a[q>>0]=48;m=q}}else if(m>>>0>G>>>0){WN(G|0,48,m-F|0)|0;do m=m+-1|0;while(m>>>0>G>>>0)}RK(b,m,p-m|0);n=n+4|0}while(n>>>0<=D>>>0);if(t|0)RK(b,134774,1);if(n>>>0>>0&(k|0)>0)while(1){m=WK(c[n>>2]|0,0,s)|0;if(m>>>0>G>>>0){WN(G|0,48,m-F|0)|0;do m=m+-1|0;while(m>>>0>G>>>0)}RK(b,m,(k|0)<9?k:9);n=n+4|0;m=k+-9|0;if(!(n>>>0>>0&(k|0)>9)){k=m;break}else k=m}XK(b,48,k+9|0,9,0)}else{t=u?w:x+4|0;if((k|0)>-1){u=G+9|0;s=(s|0)==0;g=u;p=0-F|0;q=G+8|0;o=x;do{m=WK(c[o>>2]|0,0,u)|0;if((m|0)==(u|0)){a[q>>0]=48;m=q}do if((o|0)==(x|0)){n=m+1|0;RK(b,m,1);if(s&(k|0)<1){m=n;break}RK(b,134774,1);m=n}else{if(m>>>0<=G>>>0)break;WN(G|0,48,m+p|0)|0;do m=m+-1|0;while(m>>>0>G>>>0)}while(0);F=g-m|0;RK(b,m,(k|0)>(F|0)?F:k);k=k-F|0;o=o+4|0}while(o>>>0>>0&(k|0)>-1)}XK(b,48,k+18|0,18,0);RK(b,v,E-v|0)}XK(b,32,f,j,h^8192)}while(0);l=H;return ((j|0)<(f|0)?f:j)|0}function ZK(a){a=+a;var b=0;h[j>>3]=a;b=c[j>>2]|0;z=c[j+4>>2]|0;return b|0}function _K(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=e+16|0;g=c[f>>2]|0;if(!g)if(!($K(e)|0)){g=c[f>>2]|0;h=5}else f=0;else h=5;a:do if((h|0)==5){j=e+20|0;i=c[j>>2]|0;f=i;if((g-i|0)>>>0>>0){f=bb[c[e+36>>2]&31](e,b,d)|0;break}b:do if((a[e+75>>0]|0)>-1){i=d;while(1){if(!i){h=0;g=b;break b}g=i+-1|0;if((a[b+g>>0]|0)==10)break;else i=g}f=bb[c[e+36>>2]&31](e,b,i)|0;if(f>>>0>>0)break a;h=i;g=b+i|0;d=d-i|0;f=c[j>>2]|0}else{h=0;g=b}while(0);UN(f|0,g|0,d|0)|0;c[j>>2]=(c[j>>2]|0)+d;f=h+d|0}while(0);return f|0}function $K(b){b=b|0;var d=0,e=0;d=b+74|0;e=a[d>>0]|0;a[d>>0]=e+255|e;d=c[b>>2]|0;if(!(d&8)){c[b+8>>2]=0;c[b+4>>2]=0;e=c[b+44>>2]|0;c[b+28>>2]=e;c[b+20>>2]=e;c[b+16>>2]=e+(c[b+48>>2]|0);b=0}else{c[b>>2]=d|32;b=-1}return b|0}function aL(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=a+20|0;f=c[e>>2]|0;a=(c[a+16>>2]|0)-f|0;a=a>>>0>d>>>0?d:a;UN(f|0,b|0,a|0)|0;c[e>>2]=(c[e>>2]|0)+a;return d|0}function bL(b){b=b|0;var c=0,d=0,e=0,f=0;e=a[b>>0]|0;c=1;d=134776;f=97;while(1){if(e<<24>>24==f<<24>>24?(yJ(b,d)|0)==0:0)break;d=d+6|0;f=a[d>>0]|0;if(!(f<<24>>24)){c=0;break}else c=c+1|0}return c|0}function cL(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+16|0;g=h;do if(b>>>0>6)d=0;else{pa(170784);if((b|0)!=6){d=dL(b,d)|0;Fa(170784);break}if(!d){d=176258;b=0}else{b=g;e=134849;f=b+16|0;do{a[b>>0]=a[e>>0]|0;b=b+1|0;e=e+1|0}while((b|0)<(f|0));f=0;do{b=rJ(d,59)|0;e=b-d|0;if((e|0)<16){UN(g|0,d|0,e|0)|0;a[g+e>>0]=0;d=(a[b>>0]|0)==0?d:b+1|0}dL(f,g)|0;f=f+1|0}while((f|0)!=6);d=176258;b=0}while(1){f=c[170744+(b<<2)>>2]|0;f=f|0?f+8|0:134865;e=sJ(f)|0;UN(d|0,f|0,e|0)|0;f=d+e|0;a[f>>0]=59;b=b+1|0;if((b|0)==6)break;else d=d+(e+1)|0}a[f>>0]=0;Fa(170784);d=176258}while(0);l=h;return d|0}function dL(a,b){a=a|0;b=b|0;if(!b)a=c[170744+(a<<2)>>2]|0;else{b=xK(a,b)|0;c[170744+(a<<2)>>2]=b;a=b}return (a|0?a+8|0:134865)|0}function eL(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0;a:do if(!d)b=0;else{while(1){e=a[b>>0]|0;f=a[c>>0]|0;if(e<<24>>24!=f<<24>>24)break;d=d+-1|0;if(!d){b=0;break a}else{b=b+1|0;c=c+1|0}}b=(e&255)-(f&255)|0}while(0);return b|0}function fL(a){a=a|0;return gL(a)|0}function gL(a){a=a|0;return QN(a|0)|0}function hL(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;if((c[f+76>>2]|0)>-1)m=PK(f)|0;else m=0;g=e+-1|0;if((e|0)<2){n=f+74|0;l=a[n>>0]|0;a[n>>0]=l+255|l;if(m|0)QK(f);if(!g)a[b>>0]=0;else b=0}else{a:do if(g){k=f+4|0;l=f+8|0;e=b;while(1){h=c[k>>2]|0;o=h;p=(c[l>>2]|0)-o|0;i=_J(h,10,p)|0;j=(i|0)==0;i=j?p:1-o+i|0;i=i>>>0>>0?i:g;UN(e|0,h|0,i|0)|0;h=(c[k>>2]|0)+i|0;c[k>>2]=h;e=e+i|0;i=g-i|0;if(!(j&(i|0)!=0)){n=17;break a}if(h>>>0>=(c[l>>2]|0)>>>0){g=eK(f)|0;if((g|0)<0)break;else j=g}else{c[k>>2]=h+1;j=d[h>>0]|0}g=i+-1|0;h=e+1|0;a[e>>0]=j;if(!((g|0)!=0&(j&255|0)!=10)){e=h;n=17;break a}else e=h}if((e|0)!=(b|0)?(c[f>>2]&16|0)!=0:0)n=17;else b=0}else{e=b;n=17}while(0);if((n|0)==17)if(!b)b=0;else a[e>>0]=0;if(m)QK(f)}return b|0}function iL(b,c){b=b|0;c=c|0;var d=0;d=a[c>>0]|0;do if(d<<24>>24){b=XJ(b,d<<24>>24)|0;if(b){if(a[c+1>>0]|0)if(a[b+1>>0]|0){if(!(a[c+2>>0]|0)){b=jL(b,c)|0;break}if(a[b+2>>0]|0){if(!(a[c+3>>0]|0)){b=kL(b,c)|0;break}if(a[b+3>>0]|0)if(!(a[c+4>>0]|0)){b=lL(b,c)|0;break}else{b=mL(b,c)|0;break}else b=0}else b=0}else b=0}else b=0}while(0);return b|0}function jL(b,c){b=b|0;c=c|0;var e=0,f=0,g=0;g=(d[c>>0]|0)<<8|(d[c+1>>0]|0);f=d[b>>0]|0;while(1){c=b+1|0;e=a[c>>0]|0;if(!(e<<24>>24))break;f=f<<8&65280|e&255;if((f|0)==(g|0))break;else b=c}return (e<<24>>24?b:0)|0}function kL(b,c){b=b|0;c=c|0;var e=0,f=0;f=(d[c+1>>0]|0)<<16|(d[c>>0]|0)<<24|(d[c+2>>0]|0)<<8;e=b+2|0;c=a[e>>0]|0;b=(d[b+1>>0]|0)<<16|(d[b>>0]|0)<<24|(c&255)<<8;if(!((b|0)==(f|0)|c<<24>>24==0))do{e=e+1|0;c=a[e>>0]|0;b=(b|c&255)<<8}while(!((b|0)==(f|0)|c<<24>>24==0));return (c<<24>>24?e+-2|0:0)|0}function lL(b,c){b=b|0;c=c|0;var e=0,f=0;f=(d[c+1>>0]|0)<<16|(d[c>>0]|0)<<24|(d[c+2>>0]|0)<<8|(d[c+3>>0]|0);c=b+3|0;e=a[c>>0]|0;b=(d[b+1>>0]|0)<<16|(d[b>>0]|0)<<24|(d[b+2>>0]|0)<<8|e&255;if(!(e<<24>>24==0|(b|0)==(f|0)))do{c=c+1|0;e=a[c>>0]|0;b=b<<8|e&255}while(!(e<<24>>24==0|(b|0)==(f|0)));return (e<<24>>24?c+-3|0:0)|0}function mL(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=l;l=l+1056|0;t=v+1024|0;u=v;c[t>>2]=0;c[t+4>>2]=0;c[t+8>>2]=0;c[t+12>>2]=0;c[t+16>>2]=0;c[t+20>>2]=0;c[t+24>>2]=0;c[t+28>>2]=0;e=a[d>>0]|0;a:do if(e<<24>>24){s=0;do{if(!(a[b+s>>0]|0)){e=0;break a}r=t+(((e&255)>>>5&255)<<2)|0;c[r>>2]=c[r>>2]|1<<(e&31);s=s+1|0;c[u+((e&255)<<2)>>2]=s;e=a[d+s>>0]|0}while(e<<24>>24!=0);m=s>>>0>1;if(m){f=0;k=-1;g=1;b:while(1){h=1;e=f;while(1){f=g;c:while(1){j=1;while(1){g=a[d+(j+k)>>0]|0;i=a[d+f>>0]|0;if(g<<24>>24!=i<<24>>24)break c;if((j|0)==(h|0))break;j=j+1|0;f=j+e|0;if(f>>>0>=s>>>0){n=h;e=k;break b}}e=h+e|0;f=e+1|0;if(f>>>0>=s>>>0){n=h;e=k;break b}}h=f-k|0;if((g&255)<=(i&255))break;g=f+1|0;if(g>>>0>=s>>>0){n=h;e=k;break b}else e=f}g=e+2|0;if(g>>>0>=s>>>0){n=1;break}else{f=e+1|0;k=e}}if(m){h=0;m=-1;i=1;while(1){f=1;g=h;while(1){h=i;d:while(1){k=1;while(1){i=a[d+(k+m)>>0]|0;j=a[d+h>>0]|0;if(i<<24>>24!=j<<24>>24)break d;if((k|0)==(f|0))break;k=k+1|0;h=k+g|0;if(h>>>0>=s>>>0){i=n;g=m;h=26;break a}}g=f+g|0;h=g+1|0;if(h>>>0>=s>>>0){i=n;g=m;h=26;break a}}f=h-m|0;if((i&255)>=(j&255))break;i=h+1|0;if(i>>>0>=s>>>0){i=n;g=m;h=26;break a}else g=h}i=g+2|0;if(i>>>0>=s>>>0){i=n;f=1;h=26;break}else{h=g+1|0;m=g}}}else{i=n;f=1;g=-1;h=26}}else{i=1;e=-1;f=1;g=-1;h=26}}else{i=1;e=-1;s=0;f=1;g=-1;h=26}while(0);e:do if((h|0)==26){q=(g+1|0)>>>0>(e+1|0)>>>0;f=q?f:i;q=q?g:e;r=q+1|0;if(!(eL(d,d+f|0,r)|0))p=s-f|0;else{f=s-q+-1|0;p=0;f=(q>>>0>f>>>0?q:f)+1|0}k=s|63;m=s+-1|0;n=(p|0)!=0;o=s-f|0;e=b;j=0;g=b;while(1){h=e;do if((g-h|0)>>>0>>0){i=_J(g,0,k)|0;if(i)if((i-h|0)>>>0>>0){e=0;break e}else break;else{i=g+k|0;break}}else i=g;while(0);g=a[e+m>>0]|0;f:do if(!(1<<(g&31)&c[t+(((g&255)>>>5&255)<<2)>>2])){h=0;g=s}else{g=s-(c[u+((g&255)<<2)>>2]|0)|0;if(g|0){h=0;g=n&(j|0)!=0&g>>>0>>0?o:g;break}g=r>>>0>j>>>0?r:j;h=a[d+g>>0]|0;g:do if(!(h<<24>>24))g=r;else{while(1){if(h<<24>>24!=(a[e+g>>0]|0))break;g=g+1|0;h=a[d+g>>0]|0;if(!(h<<24>>24)){g=r;break g}}h=0;g=g-q|0;break f}while(0);while(1){if(g>>>0<=j>>>0)break e;g=g+-1|0;if((a[d+g>>0]|0)!=(a[e+g>>0]|0)){h=p;g=f;break}}}while(0);e=e+g|0;j=h;g=i}}while(0);l=v;return e|0}function nL(a,b,c){a=a|0;b=b|0;c=c|0;oL(a,b,c)|0;return a|0}function oL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;g=d;a:do if(!((g^b)&3)){f=(e|0)!=0;if(f&(g&3|0)!=0)do{g=a[d>>0]|0;a[b>>0]=g;if(!(g<<24>>24))break a;e=e+-1|0;d=d+1|0;b=b+1|0;f=(e|0)!=0}while(f&(d&3|0)!=0);if(f){if(a[d>>0]|0){b:do if(e>>>0>3){f=d;while(1){d=c[f>>2]|0;if((d&-2139062144^-2139062144)&d+-16843009|0){d=f;break b}c[b>>2]=d;e=e+-4|0;d=f+4|0;b=b+4|0;if(e>>>0>3)f=d;else break}}while(0);h=11}}else e=0}else h=11;while(0);c:do if((h|0)==11)if(!e)e=0;else while(1){h=a[d>>0]|0;a[b>>0]=h;if(!(h<<24>>24))break c;e=e+-1|0;b=b+1|0;if(!e){e=0;break}else d=d+1|0}while(0);WN(b|0,0,e|0)|0;return b|0}function pL(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=l;l=l+32|0;f=g;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;c[f+24>>2]=0;c[f+28>>2]=0;e=a[d>>0]|0;do if(!(e<<24>>24))d=0;else{if(!(a[d+1>>0]|0)){d=b;while(1)if((a[d>>0]|0)==e<<24>>24)d=d+1|0;else break;d=d-b|0;break}do{h=f+(((e&255)>>>5&255)<<2)|0;c[h>>2]=c[h>>2]|1<<(e&31);d=d+1|0;e=a[d>>0]|0}while(e<<24>>24!=0);e=a[b>>0]|0;a:do if(!(e<<24>>24))d=b;else{d=b;do{if(!(c[f+(((e&255)>>>5&255)<<2)>>2]&1<<(e&31)))break a;d=d+1|0;e=a[d>>0]|0}while(e<<24>>24!=0)}while(0);d=d-b|0}while(0);l=g;return d|0}function qL(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=rL(a,b,f)|0;l=e;return d|0}function rL(a,b,c){a=a|0;b=b|0;c=c|0;return MK(a,2147483647,b,c)|0}function sL(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;m=l;l=l+208|0;j=m+8|0;k=m;h=O(d,b)|0;i=k;c[i>>2]=1;c[i+4>>2]=0;a:do if(h|0){i=0-d|0;c[j+4>>2]=d;c[j>>2]=d;f=2;b=d;g=d;while(1){b=b+d+g|0;c[j+(f<<2)>>2]=b;if(b>>>0>>0){n=g;f=f+1|0;g=b;b=n}else break}g=a+h+i|0;if(g>>>0>a>>>0){h=g;f=1;b=1;do{do if((b&3|0)!=3){b=f+-1|0;if((c[j+(b<<2)>>2]|0)>>>0<(h-a|0)>>>0)tL(a,d,e,f,j);else vL(a,d,e,k,f,0,j);if((f|0)==1){wL(k,1);f=0;break}else{wL(k,b);f=1;break}}else{tL(a,d,e,f,j);uL(k,2);f=f+2|0}while(0);b=c[k>>2]|1;c[k>>2]=b;a=a+d|0}while(a>>>0>>0)}else{f=1;b=1}vL(a,d,e,k,f,0,j);g=k+4|0;while(1){if((f|0)==1&(b|0)==1){if(!(c[g>>2]|0))break a}else if((f|0)>=2){wL(k,2);n=f+-2|0;c[k>>2]=c[k>>2]^7;uL(k,1);vL(a+(0-(c[j+(n<<2)>>2]|0))+i|0,d,e,k,f+-1|0,1,j);wL(k,1);b=c[k>>2]|1;c[k>>2]=b;h=a+i|0;vL(h,d,e,k,n,1,j);a=h;f=n;continue}b=xL(k)|0;uL(k,b);a=a+i|0;f=b+f|0;b=c[k>>2]|0}}while(0);l=m;return}function tL(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+240|0;m=n;c[m>>2]=a;a:do if((e|0)>1){k=0-b|0;g=a;j=e;e=1;while(1){h=g+k|0;i=j+-2|0;g=h+(0-(c[f+(i<<2)>>2]|0))|0;if((ab[d&63](a,g)|0)>-1?(ab[d&63](a,h)|0)>-1:0)break a;a=e+1|0;e=m+(e<<2)|0;if((ab[d&63](g,h)|0)>-1){c[e>>2]=g;e=j+-1|0}else{c[e>>2]=h;g=h;e=i}if((e|0)<=1){e=a;break a}j=e;e=a;a=c[m>>2]|0}}else e=1;while(0);zL(b,m,e);l=n;return}function uL(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=a+4|0;if(b>>>0>31){e=c[f>>2]|0;c[a>>2]=e;c[f>>2]=0;b=b+-32|0;d=0}else{d=c[f>>2]|0;e=c[a>>2]|0}c[a>>2]=d<<32-b|e>>>b;c[f>>2]=d>>>b;return}function vL(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+240|0;n=p+232|0;o=p;q=c[e>>2]|0;c[n>>2]=q;j=c[e+4>>2]|0;k=n+4|0;c[k>>2]=j;c[o>>2]=a;a:do if((q|0)!=1|(j|0)!=0?(m=0-b|0,i=a+(0-(c[h+(f<<2)>>2]|0))|0,(ab[d&63](i,a)|0)>=1):0){e=1;g=(g|0)==0;j=i;while(1){if(g&(f|0)>1){g=a+m|0;i=c[h+(f+-2<<2)>>2]|0;if((ab[d&63](g,j)|0)>-1){i=10;break a}if((ab[d&63](g+(0-i)|0,j)|0)>-1){i=10;break a}}g=e+1|0;c[o+(e<<2)>>2]=j;q=xL(n)|0;uL(n,q);f=q+f|0;if(!((c[n>>2]|0)!=1|(c[k>>2]|0)!=0)){e=g;a=j;i=10;break a}a=j+(0-(c[h+(f<<2)>>2]|0))|0;if((ab[d&63](a,c[o>>2]|0)|0)<1){a=j;e=g;g=0;i=9;break}else{q=j;e=g;g=1;j=a;a=q}}}else{e=1;i=9}while(0);if((i|0)==9?(g|0)==0:0)i=10;if((i|0)==10){zL(b,o,e);tL(a,b,d,f,h)}l=p;return}function wL(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=a+4|0;if(b>>>0>31){e=c[a>>2]|0;c[f>>2]=e;c[a>>2]=0;b=b+-32|0;d=0}else{d=c[a>>2]|0;e=c[f>>2]|0}c[f>>2]=d>>>(32-b|0)|e<>2]=d<>2]|0)+-1|0)|0;if(!b){b=yL(c[a+4>>2]|0)|0;return ((b|0)==0?0:b+32|0)|0}else return b|0;return 0}function yL(a){a=a|0;var b=0;if(a)if(!(a&1)){b=a;a=0;do{a=a+1|0;b=b>>>1}while(!(b&1|0))}else a=0;else a=32;return a|0}function zL(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+256|0;e=h;a:do if((d|0)>=2?(g=b+(d<<2)|0,c[g>>2]=e,a|0):0)while(1){f=a>>>0<256?a:256;UN(e|0,c[b>>2]|0,f|0)|0;e=0;do{i=b+(e<<2)|0;e=e+1|0;UN(c[i>>2]|0,c[b+(e<<2)>>2]|0,f|0)|0;c[i>>2]=(c[i>>2]|0)+f}while((e|0)!=(d|0));a=a-f|0;if(!a)break a;e=c[g>>2]|0}while(0);l=h;return}function AL(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=NK(a,b,f)|0;l=e;return d|0}function BL(b){b=b|0;var d=0,e=0,f=0;f=l;l=l+16|0;e=f;oa(0,e|0)|0;d=0;e=(c[e+4>>2]|0)*65537^(e>>>4)+b;while(1){a[b+d>>0]=(e&15)+65|e<<1&32;d=d+1|0;if((d|0)==6)break;else e=e>>>5}l=f;return b|0}function CL(a,b,c){a=a|0;b=b|0;c=c|0;c=aK(a,b,c,-2147483648,0)|0;return c|0}function DL(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+32|0;f=h;e=a[d>>0]|0;a:do if(e<<24>>24!=0?(a[d+1>>0]|0)!=0:0){WN(f|0,0,32)|0;e=a[d>>0]|0;if(e<<24>>24)do{i=f+(((e&255)>>>5&255)<<2)|0;c[i>>2]=c[i>>2]|1<<(e&31);d=d+1|0;e=a[d>>0]|0}while(e<<24>>24!=0);d=a[b>>0]|0;if(!(d<<24>>24))e=b;else{e=b;do{if(c[f+(((d&255)>>>5&255)<<2)>>2]&1<<(d&31)|0)break a;e=e+1|0;d=a[e>>0]|0}while(d<<24>>24!=0)}}else g=3;while(0);if((g|0)==3)e=rJ(b,e<<24>>24)|0;l=h;return e-b|0}function EL(b,d){b=b|0;d=d|0;var e=0;if(!b){b=c[42698]|0;if(!b)b=0;else e=3}else e=3;do if((e|0)==3){b=b+(pL(b,d)|0)|0;if(!(a[b>>0]|0)){c[42698]=0;b=0;break}d=b+(DL(b,d)|0)|0;c[42698]=d;if(!(a[d>>0]|0)){c[42698]=0;break}else{c[42698]=d+1;a[d>>0]=0;break}}while(0);return b|0}function FL(b,c,d){b=b|0;c=c|0;d=d|0;var e=0;e=c&255;do{if(!d){c=0;break}d=d+-1|0;c=b+d|0}while((a[c>>0]|0)!=e<<24>>24);return c|0}function GL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0;if(!b){b=c[e>>2]|0;if(!b)b=0;else f=3}else f=3;do if((f|0)==3){b=b+(pL(b,d)|0)|0;if(!(a[b>>0]|0)){c[e>>2]=0;b=0;break}d=b+(DL(b,d)|0)|0;c[e>>2]=d;if(!(a[d>>0]|0)){c[e>>2]=0;break}else{c[e>>2]=d+1;a[d>>0]=0;break}}while(0);return b|0}function HL(a){a=a|0;var b=0,c=0;b=(sJ(a)|0)+1|0;c=_I(b)|0;if(!c)a=0;else a=UN(c|0,a|0,b|0)|0;return a|0}function IL(a,b){a=a|0;b=b|0;return FL(a,b,(sJ(a)|0)+1|0)|0}function JL(a,b){a=a|0;b=b|0;yK(a+(sJ(a)|0)|0,b)|0;return a|0}function KL(b,c){b=b|0;c=c|0;c=b+(DL(b,c)|0)|0;return (a[c>>0]|0?c:0)|0}function LL(a){a=a|0;var b=0;if((c[a+76>>2]|0)>-1){b=(PK(a)|0)==0;a=(c[a>>2]|0)>>>4&1}else a=(c[a>>2]|0)>>>4&1;return a|0}function ML(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;if((c[a+76>>2]|0)>-1)f=PK(a)|0;else f=0;NL(a);g=(c[a>>2]&1|0)!=0;if(!g){e=OL()|0;d=c[a+52>>2]|0;b=a+56|0;if(d|0)c[d+56>>2]=c[b>>2];b=c[b>>2]|0;if(b|0)c[b+52>>2]=d;if((c[e>>2]|0)==(a|0))c[e>>2]=b;PL()}b=QL(a)|0;b=$a[c[a+12>>2]&31](a)|0|b;d=c[a+92>>2]|0;if(d|0)$I(d);if(g){if(f|0)QK(a)}else $I(a);return b|0}function NL(a){a=a|0;var b=0;if(c[a+68>>2]|0){b=c[a+116>>2]|0;a=a+112|0;if(b|0)c[b+112>>2]=c[a>>2];a=c[a>>2]|0;if(!a)a=(SL()|0)+232|0;else a=a+116|0;c[a>>2]=b}return}function OL(){pa(170796);return 170804}function PL(){Fa(170796);return}function QL(a){a=a|0;var b=0,d=0;do if(a){if((c[a+76>>2]|0)<=-1){b=RL(a)|0;break}d=(PK(a)|0)==0;b=RL(a)|0;if(!d)QK(a)}else{if(!(c[13917]|0))b=0;else b=QL(c[13917]|0)|0;a=c[(OL()|0)>>2]|0;if(a)do{if((c[a+76>>2]|0)>-1)d=PK(a)|0;else d=0;if((c[a+20>>2]|0)>>>0>(c[a+28>>2]|0)>>>0)b=RL(a)|0|b;if(d|0)QK(a);a=c[a+56>>2]|0}while((a|0)!=0);PL()}while(0);return b|0}function RL(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=a+20|0;h=a+28|0;if((c[b>>2]|0)>>>0>(c[h>>2]|0)>>>0?(bb[c[a+36>>2]&31](a,0,0)|0,(c[b>>2]|0)==0):0)a=-1;else{d=a+4|0;e=c[d>>2]|0;f=a+8|0;g=c[f>>2]|0;if(e>>>0>>0)bb[c[a+40>>2]&31](a,e-g|0,1)|0;c[a+16>>2]=0;c[h>>2]=0;c[b>>2]=0;c[f>>2]=0;c[d>>2]=0;a=0}return a|0}function SL(){return BJ()|0}function TL(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+64|0;j=k+40|0;h=k+24|0;g=k+16|0;f=k;i=k+56|0;if(XJ(134882,a[d>>0]|0)|0){e=_I(1156)|0;if(!e)e=0;else{WN(e|0,0,124)|0;if(!(XJ(d,43)|0))c[e>>2]=(a[d>>0]|0)==114?8:4;if(XJ(d,101)|0){c[f>>2]=b;c[f+4>>2]=2;c[f+8>>2]=1;za(221,f|0)|0}if((a[d>>0]|0)==97){c[g>>2]=b;c[g+4>>2]=3;d=za(221,g|0)|0;if(!(d&1024)){c[h>>2]=b;c[h+4>>2]=4;c[h+8>>2]=d|1024;za(221,h|0)|0}f=c[e>>2]|128;c[e>>2]=f}else f=c[e>>2]|0;c[e+60>>2]=b;c[e+44>>2]=e+132;c[e+48>>2]=1024;d=e+75|0;a[d>>0]=-1;if((f&8|0)==0?(c[j>>2]=b,c[j+4>>2]=21523,c[j+8>>2]=i,(Ca(54,j|0)|0)==0):0)a[d>>0]=10;c[e+32>>2]=6;c[e+36>>2]=9;c[e+40>>2]=7;c[e+12>>2]=15;if(!(c[42677]|0))c[e+76>>2]=-1;UL(e)|0}}else{c[(kJ()|0)>>2]=22;e=0}l=k;return e|0}function UL(a){a=a|0;var b=0,d=0;b=OL()|0;c[a+56>>2]=c[b>>2];d=c[b>>2]|0;if(d|0)c[d+52>>2]=a;c[b>>2]=a;PL();return a|0}function VL(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;j=l;l=l+16|0;g=j;a:do if(!e)b=0;else{do if(f|0){i=(b|0)==0?g:b;b=a[e>>0]|0;if(b<<24>>24>-1){c[i>>2]=b&255;b=b<<24>>24!=0&1;break a}h=(c[c[(WL()|0)+188>>2]>>2]|0)==0;b=a[e>>0]|0;if(h){c[i>>2]=b<<24>>24&57343;b=1;break a}b=(b&255)+-194|0;if(b>>>0<=50){g=e+1|0;h=c[55208+(b<<2)>>2]|0;if(f>>>0<4?h&-2147483648>>>((f*6|0)+-6|0)|0:0)break;b=d[g>>0]|0;f=b>>>3;if((f+-16|f+(h>>26))>>>0<=7){b=b+-128|h<<6;if((b|0)>=0){c[i>>2]=b;b=2;break a}g=(d[e+2>>0]|0)+-128|0;if(g>>>0<=63){g=g|b<<6;if((g|0)>=0){c[i>>2]=g;b=3;break a}b=(d[e+3>>0]|0)+-128|0;if(b>>>0<=63){c[i>>2]=b|g<<6;b=4;break a}}}}}while(0);c[(kJ()|0)>>2]=84;b=-1}while(0);l=j;return b|0}function WL(){return BJ()|0}function XL(a,b){a=a|0;b=b|0;var c=0;c=sJ(a)|0;return ((YL(a,1,c,b)|0)!=(c|0))<<31>>31|0}function YL(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=O(d,b)|0;d=(b|0)==0?0:d;if((c[e+76>>2]|0)>-1){g=(PK(e)|0)==0;a=_K(a,f,e)|0;if(!g)QK(e)}else a=_K(a,f,e)|0;if((a|0)!=(f|0))d=(a>>>0)/(b>>>0)|0;return d|0}function ZL(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+16|0;j=m;k=e&255;a[j>>0]=k;g=b+16|0;h=c[g>>2]|0;if(!h)if(!($K(b)|0)){h=c[g>>2]|0;i=4}else f=-1;else i=4;do if((i|0)==4){i=b+20|0;g=c[i>>2]|0;if(g>>>0>>0?(f=e&255,(f|0)!=(a[b+75>>0]|0)):0){c[i>>2]=g+1;a[g>>0]=k;break}if((bb[c[b+36>>2]&31](b,j,1)|0)==1)f=d[j>>0]|0;else f=-1}while(0);l=m;return f|0}function _L(b,c){b=b|0;c=c|0;var d=0,e=0,f=0;d=b;e=134867;f=d+15|0;do{a[d>>0]=a[e>>0]|0;d=d+1|0;e=e+1|0}while((d|0)<(f|0));if(!c){a[b+14>>0]=48;a[b+15>>0]=0}else{e=c;d=14;while(1){d=d+1|0;if(e>>>0<10)break;else e=(e>>>0)/10|0}a[b+d>>0]=0;while(1){d=d+-1|0;a[b+d>>0]=(c>>>0)%10|0|48;if(c>>>0<10)break;else c=(c>>>0)/10|0}}return}function $L(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=l;l=l+48|0;f=g+40|0;e=g+8|0;d=g;c[d>>2]=a;c[d+4>>2]=b;d=ya(197,d|0)|0;if((d|0)==-9?(c[e>>2]=a,c[e+4>>2]=1,(za(221,e|0)|0)>=0):0){_L(e,a);c[f>>2]=e;c[f+4>>2]=b;b=jJ(xa(195,f|0)|0)|0}else b=jJ(d)|0;l=g;return b|0}function aM(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;c[e+4>>2]=b;b=jJ(Aa(33,e|0)|0)|0;l=d;return b|0}function bM(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+48|0;h=i+32|0;g=i+16|0;e=i;if(XJ(134882,a[d>>0]|0)|0){f=cM(d)|0;c[e>>2]=b;c[e+4>>2]=f|32768;c[e+8>>2]=438;e=jJ(Ba(5,e|0)|0)|0;if((e|0)>=0){if(f&524288|0){c[g>>2]=e;c[g+4>>2]=2;c[g+8>>2]=1;za(221,g|0)|0}b=TL(e,d)|0;if(!b){c[h>>2]=e;Da(6,h|0)|0;b=0}}else b=0}else{c[(kJ()|0)>>2]=22;b=0}l=i;return b|0}function cM(b){b=b|0;var c=0,d=0,e=0;d=(XJ(b,43)|0)==0;c=a[b>>0]|0;d=d?c<<24>>24!=114&1:2;e=(XJ(b,120)|0)==0;d=e?d:d|128;b=(XJ(b,101)|0)==0;b=b?d:d|524288;b=c<<24>>24==114?b:b|64;b=c<<24>>24==119?b|512:b;return (c<<24>>24==97?b|1024:b)|0}function dM(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=eM(a,b,f)|0;l=e;return d|0}function eM(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=l;l=l+128|0;e=g;f=e;h=f+124|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(h|0));c[e+32>>2]=18;c[e+44>>2]=a;c[e+76>>2]=-1;c[e+84>>2]=a;h=gM(e,b,d)|0;l=g;return h|0}function fM(a,b,c){a=a|0;b=b|0;c=c|0;return oM(a,b,c)|0}function gM(b,e,f){b=b|0;e=e|0;f=f|0;var i=0,j=0,k=0,m=0,n=0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;L=l;l=l+288|0;F=L+8|0;G=L+17|0;H=L;I=L+16|0;if((c[b+76>>2]|0)>-1)K=PK(b)|0;else K=0;i=a[e>>0]|0;a:do if(i<<24>>24){y=b+4|0;A=b+100|0;B=b+108|0;C=b+8|0;D=G+10|0;E=G+33|0;x=F+4|0;p=e;u=0;e=0;j=0;k=i;i=0;b:while(1){c:do if(!(YJ(k&255)|0)){k=(a[p>>0]|0)==37;d:do if(k){m=p+1|0;n=a[m>>0]|0;e:do switch(n<<24>>24){case 37:break d;case 42:{w=0;m=p+2|0;break}default:{if($J(n&255)|0?(a[p+2>>0]|0)==36:0){w=hM(f,(d[m>>0]|0)+-48|0)|0;m=p+3|0;break e}v=(c[f>>2]|0)+(4-1)&~(4-1);w=c[v>>2]|0;c[f>>2]=v+4}}while(0);if(!($J(d[m>>0]|0)|0))s=0;else{k=0;do{k=(k*10|0)+-48+(d[m>>0]|0)|0;m=m+1|0}while(($J(d[m>>0]|0)|0)!=0);s=k}p=a[m>>0]|0;n=m+1|0;if(p<<24>>24==109){k=(w|0)!=0&1;j=0;m=n;p=a[n>>0]|0;i=0}else k=0;n=m+1|0;switch(p<<24>>24){case 104:{v=(a[n>>0]|0)==104;p=v?-2:-1;m=v?m+2|0:n;break}case 108:{v=(a[n>>0]|0)==108;p=v?3:1;m=v?m+2|0:n;break}case 106:{p=3;m=n;break}case 116:case 122:{p=1;m=n;break}case 76:{p=2;m=n;break}case 110:case 112:case 67:case 83:case 91:case 99:case 115:case 88:case 71:case 70:case 69:case 65:case 103:case 102:case 101:case 97:case 120:case 117:case 111:case 105:case 100:{p=0;break}default:{J=136;break b}}r=d[m>>0]|0;t=(r&47|0)==3;r=t?r|32:r;t=t?1:p;q=r&255;switch(q<<24>>24){case 99:{s=(s|0)>1?s:1;break}case 91:break;case 110:{iM(w,t,u,((u|0)<0)<<31>>31);n=u;break c}default:{bK(b,0);do{n=c[y>>2]|0;if(n>>>0<(c[A>>2]|0)>>>0){c[y>>2]=n+1;n=d[n>>0]|0}else n=dK(b)|0}while((YJ(n)|0)!=0);if(!(c[A>>2]|0))n=c[y>>2]|0;else{n=(c[y>>2]|0)+-1|0;c[y>>2]=n}u=(c[B>>2]|0)+u+n-(c[C>>2]|0)|0}}bK(b,s);p=c[y>>2]|0;n=c[A>>2]|0;if(p>>>0>>0)c[y>>2]=p+1;else{if((dK(b)|0)<0){J=136;break b}n=c[A>>2]|0}if(n|0)c[y>>2]=(c[y>>2]|0)+-1;f:do switch(q<<24>>24){case 91:case 99:case 115:{v=(r|0)==99;g:do if((r|16|0)==115){WN(G|0,-1,257)|0;a[G>>0]=0;if((r|0)==115){a[E>>0]=0;a[D>>0]=0;a[D+1>>0]=0;a[D+2>>0]=0;a[D+3>>0]=0;a[D+4>>0]=0}}else{n=m+1|0;q=(a[n>>0]|0)==94;r=q&1;m=q?m+2|0:n;WN(G|0,r|0,257)|0;a[G>>0]=0;n=a[m>>0]|0;switch(n<<24>>24){case 45:{n=46;J=65;break}case 93:{n=94;J=65;break}default:{}}while(1){if((J|0)==65){J=0;a[G+n>>0]=r^1;n=m+1|0;m=n;n=a[n>>0]|0}h:do switch(n<<24>>24){case 0:{J=136;break b}case 93:break g;case 45:{q=m+1|0;n=a[q>>0]|0;switch(n<<24>>24){case 93:case 0:{n=45;break h}default:{}}m=a[m+-1>>0]|0;if((m&255)<(n&255)){p=(r^1)&255;m=m&255;do{m=m+1|0;a[G+m>>0]=p;n=a[q>>0]|0}while((m|0)<(n&255|0));m=q}else m=q;break}default:{}}while(0);n=(n&255)+1|0;J=65}}while(0);n=v?s+1|0:31;r=(t|0)==1;t=(k|0)!=0;i:do if(r){if(t){i=_I(n<<2)|0;if(!i){j=0;i=0;J=136;break b}}else i=w;c[F>>2]=0;c[x>>2]=0;q=n;j=0;j:while(1){p=(i|0)==0;do{k:while(1){n=c[y>>2]|0;if(n>>>0<(c[A>>2]|0)>>>0){c[y>>2]=n+1;n=d[n>>0]|0}else n=dK(b)|0;if(!(a[G+(n+1)>>0]|0))break j;a[I>>0]=n;switch(sK(H,I,1,F)|0){case -1:{j=0;J=136;break b}case -2:break;default:break k}}if(!p){c[i+(j<<2)>>2]=c[H>>2];j=j+1|0}}while(!(t&(j|0)==(q|0)));j=q<<1|1;n=bJ(i,j<<2)|0;if(!n){j=0;J=136;break b}else{p=q;q=j;i=n;j=p}}if(!(jM(F)|0)){j=0;J=136;break b}else{q=j;j=0;p=i}}else{if(t){j=_I(n)|0;if(!j){j=0;i=0;J=136;break b}else{p=n;i=0}while(1){do{n=c[y>>2]|0;if(n>>>0<(c[A>>2]|0)>>>0){c[y>>2]=n+1;n=d[n>>0]|0}else n=dK(b)|0;if(!(a[G+(n+1)>>0]|0)){q=i;p=0;i=0;break i}a[j+i>>0]=n;i=i+1|0}while((i|0)!=(p|0));i=p<<1|1;n=bJ(j,i)|0;if(!n){i=0;J=136;break b}else{q=p;p=i;j=n;i=q}}}if(!w)while(1){i=c[y>>2]|0;if(i>>>0<(c[A>>2]|0)>>>0){c[y>>2]=i+1;i=d[i>>0]|0}else i=dK(b)|0;if(!(a[G+(i+1)>>0]|0)){q=0;j=0;p=0;i=0;break i}}else j=0;while(1){i=c[y>>2]|0;if(i>>>0<(c[A>>2]|0)>>>0){c[y>>2]=i+1;i=d[i>>0]|0}else i=dK(b)|0;if(!(a[G+(i+1)>>0]|0)){q=j;j=w;p=0;i=0;break i}a[w+j>>0]=i;j=j+1|0}}while(0);if(!(c[A>>2]|0))n=c[y>>2]|0;else{n=(c[y>>2]|0)+-1|0;c[y>>2]=n}n=n-(c[C>>2]|0)+(c[B>>2]|0)|0;if(!n)break b;if(!((n|0)==(s|0)|v^1))break b;do if(t)if(r){c[w>>2]=p;break}else{c[w>>2]=j;break}while(0);if(!v){if(p|0)c[p+(q<<2)>>2]=0;if(!j){j=0;break f}a[j+q>>0]=0}break}case 120:case 88:case 112:{n=16;J=124;break}case 111:{n=8;J=124;break}case 117:case 100:{n=10;J=124;break}case 105:{n=0;J=124;break}case 71:case 103:case 70:case 102:case 69:case 101:case 65:case 97:{o=+kM(b,t,0);if((c[B>>2]|0)==((c[C>>2]|0)-(c[y>>2]|0)|0))break b;if(w)switch(t|0){case 0:{g[w>>2]=o;break f}case 1:{h[w>>3]=o;break f}case 2:{h[w>>3]=o;break f}default:break f}break}default:{}}while(0);do if((J|0)==124){J=0;n=cK(b,n,0,-1,-1)|0;if((c[B>>2]|0)==((c[C>>2]|0)-(c[y>>2]|0)|0))break b;if((w|0)!=0&(r|0)==112){c[w>>2]=n;break}else{iM(w,t,n,z);break}}while(0);e=e+((w|0)!=0&1)|0;n=(c[B>>2]|0)+u+(c[y>>2]|0)-(c[C>>2]|0)|0;break c}while(0);m=p+(k&1)|0;bK(b,0);k=c[y>>2]|0;if(k>>>0<(c[A>>2]|0)>>>0){c[y>>2]=k+1;k=d[k>>0]|0}else k=dK(b)|0;if((k|0)!=(d[m>>0]|0)){J=22;break b}n=u+1|0}else{m=p;while(1){k=m+1|0;if(!(YJ(d[k>>0]|0)|0))break;else m=k}bK(b,0);do{k=c[y>>2]|0;if(k>>>0<(c[A>>2]|0)>>>0){c[y>>2]=k+1;k=d[k>>0]|0}else k=dK(b)|0}while((YJ(k)|0)!=0);if(!(c[A>>2]|0))k=c[y>>2]|0;else{k=(c[y>>2]|0)+-1|0;c[y>>2]=k}n=(c[B>>2]|0)+u+k-(c[C>>2]|0)|0}while(0);p=m+1|0;k=a[p>>0]|0;if(!(k<<24>>24))break a;else u=n}if((J|0)==22){if(c[A>>2]|0)c[y>>2]=(c[y>>2]|0)+-1;if((e|0)!=0|(k|0)>-1)break;else{e=0;J=137}}else if((J|0)==136)if(!e){e=k;J=137}if((J|0)==137){k=e;e=-1}if(k){$I(j);$I(i)}}else e=0;while(0);if(K|0)QK(b);l=L;return e|0}function hM(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;e=l;l=l+16|0;d=e;c[d>>2]=c[a>>2];while(1){f=(c[d>>2]|0)+(4-1)&~(4-1);a=c[f>>2]|0;c[d>>2]=f+4;if(b>>>0>1)b=b+-1|0;else break}l=e;return a|0}function iM(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;a:do if(d|0)switch(e|0){case -2:{a[d>>0]=f;break a}case -1:{b[d>>1]=f;break a}case 0:{c[d>>2]=f;break a}case 1:{c[d>>2]=f;break a}case 3:{e=d;c[e>>2]=f;c[e+4>>2]=g;break a}default:break a}while(0);return}function jM(a){a=a|0;if(!a)a=1;else a=(c[a>>2]|0)==0&1;return a|0}function kM(b,e,f){b=b|0;e=e|0;f=f|0;var g=0.0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;switch(e|0){case 0:{l=-149;m=24;j=4;break}case 1:{l=-1074;m=53;j=4;break}case 2:{l=-1074;m=53;j=4;break}default:g=0.0}a:do if((j|0)==4){o=b+4|0;n=b+100|0;do{e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;e=d[e>>0]|0}else e=dK(b)|0}while((YJ(e)|0)!=0);b:do switch(e|0){case 43:case 45:{i=1-(((e|0)==45&1)<<1)|0;e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;h=d[e>>0]|0;break b}else{h=dK(b)|0;break b}}default:{h=e;i=1}}while(0);e=0;do{if((h|32|0)!=(a[134886+e>>0]|0))break;do if(e>>>0<7){h=c[o>>2]|0;if(h>>>0<(c[n>>2]|0)>>>0){c[o>>2]=h+1;h=d[h>>0]|0;break}else{h=dK(b)|0;break}}while(0);e=e+1|0}while(e>>>0<8);c:do switch(e|0){case 8:break;case 3:{j=23;break}default:{k=(f|0)!=0;if(k&e>>>0>3)if((e|0)==8)break c;else{j=23;break c}d:do if(!e){e=0;do{if((h|32|0)!=(a[134895+e>>0]|0))break d;do if(e>>>0<2){h=c[o>>2]|0;if(h>>>0<(c[n>>2]|0)>>>0){c[o>>2]=h+1;h=d[h>>0]|0;break}else{h=dK(b)|0;break}}while(0);e=e+1|0}while(e>>>0<3)}while(0);switch(e|0){case 3:{e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;e=d[e>>0]|0}else e=dK(b)|0;if((e|0)==40)e=1;else{if(!(c[n>>2]|0)){g=s;break a}c[o>>2]=(c[o>>2]|0)+-1;g=s;break a}while(1){h=c[o>>2]|0;if(h>>>0<(c[n>>2]|0)>>>0){c[o>>2]=h+1;h=d[h>>0]|0}else h=dK(b)|0;if(!((h+-48|0)>>>0<10|(h+-65|0)>>>0<26)?!((h|0)==95|(h+-97|0)>>>0<26):0)break;e=e+1|0}if((h|0)==41){g=s;break a}h=(c[n>>2]|0)==0;if(!h)c[o>>2]=(c[o>>2]|0)+-1;if(!k){c[(kJ()|0)>>2]=22;bK(b,0);g=0.0;break a}if(!e){g=s;break a}while(1){e=e+-1|0;if(!h)c[o>>2]=(c[o>>2]|0)+-1;if(!e){g=s;break a}}}case 0:{if((h|0)==48){e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;e=d[e>>0]|0}else e=dK(b)|0;if((e|32|0)==120){g=+lM(b,m,l,i,f);break a}if(!(c[n>>2]|0))e=48;else{c[o>>2]=(c[o>>2]|0)+-1;e=48}}else e=h;g=+mM(b,e,m,l,i,f);break a}default:{if(c[n>>2]|0)c[o>>2]=(c[o>>2]|0)+-1;c[(kJ()|0)>>2]=22;bK(b,0);g=0.0;break a}}}}while(0);if((j|0)==23){h=(c[n>>2]|0)==0;if(!h)c[o>>2]=(c[o>>2]|0)+-1;if((f|0)!=0&e>>>0>3)do{if(!h)c[o>>2]=(c[o>>2]|0)+-1;e=e+-1|0}while(e>>>0>3)}g=+(i|0)*t}while(0);return +g}function lM(a,b,e,f,g){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;var h=0.0,i=0,j=0,k=0.0,l=0,m=0,n=0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=a+4|0;i=c[y>>2]|0;x=a+100|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;j=d[i>>0]|0;l=0}else{j=dK(a)|0;l=0}a:while(1){switch(j|0){case 46:{w=8;break a}case 48:break;default:{s=0;n=0;o=1.0;h=0.0;i=0;m=j;t=l;v=0;u=0;l=0;j=0;break a}}i=c[y>>2]|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;j=d[i>>0]|0;l=1;continue}else{j=dK(a)|0;l=1;continue}}if((w|0)==8){i=c[y>>2]|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;j=d[i>>0]|0}else j=dK(a)|0;if((j|0)==48){l=0;j=0;do{i=c[y>>2]|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;m=d[i>>0]|0}else m=dK(a)|0;l=IN(l|0,j|0,-1,-1)|0;j=z}while((m|0)==48);s=1;n=0;o=1.0;h=0.0;i=0;t=1;v=0;u=0}else{s=1;n=0;o=1.0;h=0.0;i=0;m=j;t=l;v=0;u=0;l=0;j=0}}while(1){q=m+-48|0;p=m|32;if(q>>>0>=10){r=(m|0)==46;if(!(r|(p+-97|0)>>>0<6))break;if(r)if(!s){s=1;k=o;r=t;l=u;j=v;q=u;p=v}else{m=46;break}else w=20}else w=20;if((w|0)==20){w=0;m=(m|0)>57?p+-87|0:q;do if(!((v|0)<0|(v|0)==0&u>>>0<8))if((v|0)<0|(v|0)==0&u>>>0<14){o=o*.0625;k=o;h=h+o*+(m|0);break}else{t=(n|0)!=0|(m|0)==0;n=t?n:1;k=o;h=t?h:h+o*.5;break}else{k=o;i=m+(i<<4)|0}while(0);q=IN(u|0,v|0,1,0)|0;r=1;p=z}m=c[y>>2]|0;if(m>>>0<(c[x>>2]|0)>>>0){c[y>>2]=m+1;o=k;m=d[m>>0]|0;t=r;v=p;u=q;continue}else{o=k;m=dK(a)|0;t=r;v=p;u=q;continue}}do if(!t){i=(c[x>>2]|0)==0;if(!i)c[y>>2]=(c[y>>2]|0)+-1;if(g){if(!i)c[y>>2]=(c[y>>2]|0)+-1;if(!((s|0)==0|i))c[y>>2]=(c[y>>2]|0)+-1}else bK(a,0);h=+(f|0)*0.0}else{p=(s|0)==0;q=p?u:l;p=p?v:j;if((v|0)<0|(v|0)==0&u>>>0<8){l=u;j=v;while(1){i=i<<4;w=l;l=IN(l|0,j|0,1,0)|0;if(!((j|0)<0|(j|0)==0&w>>>0<7)){n=i;break}else j=z}}else n=i;if((m|32|0)==112){j=nM(a,g)|0;i=z;if((j|0)==0&(i|0)==-2147483648){if(!g){bK(a,0);h=0.0;break}if(!(c[x>>2]|0)){j=0;i=0}else{c[y>>2]=(c[y>>2]|0)+-1;j=0;i=0}}}else if(!(c[x>>2]|0)){j=0;i=0}else{c[y>>2]=(c[y>>2]|0)+-1;j=0;i=0}l=PN(q|0,p|0,2)|0;l=IN(l|0,z|0,-32,-1)|0;l=IN(l|0,z|0,j|0,i|0)|0;i=z;if(!n){h=+(f|0)*0.0;break}y=0-e|0;g=((y|0)<0)<<31>>31;if((i|0)>(g|0)|(i|0)==(g|0)&l>>>0>y>>>0){c[(kJ()|0)>>2]=34;h=+(f|0)*1797693134862315708145274.0e284*1797693134862315708145274.0e284;break}y=e+-106|0;g=((y|0)<0)<<31>>31;if((i|0)<(g|0)|(i|0)==(g|0)&l>>>0>>0){c[(kJ()|0)>>2]=34;h=+(f|0)*2.2250738585072014e-308*2.2250738585072014e-308;break}if((n|0)>-1){j=n;do{y=!(h>=.5);j=j<<1|(y^1)&1;h=h+(y?h:h+-1.0);l=IN(l|0,i|0,-1,-1)|0;i=z}while((j|0)>-1);o=h;m=j}else{o=h;m=n}y=((b|0)<0)<<31>>31;e=JN(32,0,e|0,((e|0)<0)<<31>>31|0)|0;i=IN(e|0,z|0,l|0,i|0)|0;e=z;if((e|0)<(y|0)|(e|0)==(y|0)&i>>>0>>0)if((i|0)>0)w=59;else{j=0;i=84;w=61}else{i=b;w=59}if((w|0)==59)if((i|0)<53){j=i;i=84-i|0;w=61}else{k=0.0;h=+(f|0)}if((w|0)==61){h=+(f|0);k=+MJ(+JJ(1.0,i),h);i=j}f=(m&1|0)==0&(o!=0.0&(i|0)<32);h=(f?0.0:o)*h+(k+h*+((m+(f&1)|0)>>>0))-k;if(!(h!=0.0))c[(kJ()|0)>>2]=34;h=+NJ(h,l)}while(0);return +h}function mM(a,b,e,f,g,h){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0.0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0,v=0,w=0,x=0,y=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0.0;J=l;l=l+512|0;G=J;H=f+e|0;I=0-H|0;D=a+4|0;E=a+100|0;k=0;a:while(1){switch(b|0){case 46:{A=6;break a}case 48:break;default:{v=0;p=k;q=0;o=0;break a}}b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0;k=1;continue}else{b=dK(a)|0;k=1;continue}}if((A|0)==6){b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0}else b=dK(a)|0;if((b|0)==48){k=0;b=0;while(1){k=IN(k|0,b|0,-1,-1)|0;o=z;b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0}else b=dK(a)|0;if((b|0)==48)b=o;else{v=1;p=1;q=k;break}}}else{v=1;p=k;q=0;o=0}}c[G>>2]=0;n=b+-48|0;m=(b|0)==46;b:do if(m|n>>>0<10){C=G+496|0;w=0;k=0;u=0;x=v;y=p;A=n;p=0;n=0;c:while(1){do if(m)if(!x){x=1;q=p;o=n}else break c;else{p=IN(p|0,n|0,1,0)|0;n=z;v=(b|0)!=48;if((k|0)>=125){if(!v)break;c[C>>2]=c[C>>2]|1;break}m=G+(k<<2)|0;if(!w)b=A;else b=b+-48+((c[m>>2]|0)*10|0)|0;c[m>>2]=b;w=w+1|0;y=(w|0)==9;w=y?0:w;k=k+(y&1)|0;u=v?p:u;y=1}while(0);b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0}else b=dK(a)|0;A=b+-48|0;m=(b|0)==46;if(!(m|A>>>0<10)){v=x;m=y;A=29;break b}}b=w;m=(y|0)!=0;A=37}else{w=0;k=0;u=0;m=p;p=0;n=0;A=29}while(0);do if((A|0)==29){C=(v|0)==0;q=C?p:q;o=C?n:o;m=(m|0)!=0;if(!(m&(b|32|0)==101))if((b|0)>-1){b=w;A=37;break}else{b=w;A=39;break}m=nM(a,h)|0;b=z;if((m|0)==0&(b|0)==-2147483648){if(!h){bK(a,0);i=0.0;break}if(!(c[E>>2]|0)){m=0;b=0}else{c[D>>2]=(c[D>>2]|0)+-1;m=0;b=0}}y=IN(m|0,b|0,q|0,o|0)|0;b=w;o=z;A=41}while(0);if((A|0)==37)if(c[E>>2]|0){c[D>>2]=(c[D>>2]|0)+-1;if(m){y=q;A=41}else A=40}else A=39;if((A|0)==39)if(m){y=q;A=41}else A=40;do if((A|0)==40){c[(kJ()|0)>>2]=22;bK(a,0);i=0.0}else if((A|0)==41){m=c[G>>2]|0;if(!m){i=+(g|0)*0.0;break}if(((n|0)<0|(n|0)==0&p>>>0<10)&((y|0)==(p|0)&(o|0)==(n|0))?(e|0)>30|(m>>>e|0)==0:0){i=+(g|0)*+(m>>>0);break}a=(f|0)/-2|0;E=((a|0)<0)<<31>>31;if((o|0)>(E|0)|(o|0)==(E|0)&y>>>0>a>>>0){c[(kJ()|0)>>2]=34;i=+(g|0)*1797693134862315708145274.0e284*1797693134862315708145274.0e284;break}a=f+-106|0;E=((a|0)<0)<<31>>31;if((o|0)<(E|0)|(o|0)==(E|0)&y>>>0>>0){c[(kJ()|0)>>2]=34;i=+(g|0)*2.2250738585072014e-308*2.2250738585072014e-308;break}if(b){if((b|0)<9){n=G+(k<<2)|0;m=c[n>>2]|0;while(1){m=m*10|0;if((b|0)>=8)break;else b=b+1|0}c[n>>2]=m}k=k+1|0}if((u|0)<9?(u|0)<=(y|0)&(y|0)<18:0){if((y|0)==9){i=+(g|0)*+((c[G>>2]|0)>>>0);break}if((y|0)<9){i=+(g|0)*+((c[G>>2]|0)>>>0)/+(c[56536+(8-y<<2)>>2]|0);break}a=e+27+(O(y,-3)|0)|0;b=c[G>>2]|0;if((a|0)>30|(b>>>a|0)==0){i=+(g|0)*+(b>>>0)*+(c[56536+(y+-10<<2)>>2]|0);break}}b=(y|0)%9|0;if(!b){b=0;n=0}else{u=(y|0)>-1?b:b+9|0;p=c[56536+(8-u<<2)>>2]|0;if(k){q=1e9/(p|0)|0;n=0;o=0;m=y;b=0;do{D=G+(b<<2)|0;E=c[D>>2]|0;a=((E>>>0)/(p>>>0)|0)+n|0;c[D>>2]=a;n=O(q,(E>>>0)%(p>>>0)|0)|0;a=(b|0)==(o|0)&(a|0)==0;m=a?m+-9|0:m;o=a?o+1&127:o;b=b+1|0}while((b|0)!=(k|0));if(!n)n=o;else{c[G+(k<<2)>>2]=n;n=o;k=k+1|0}}else{n=0;k=0;m=y}b=0;y=9-u+m|0}d:while(1){u=(y|0)<18;v=(y|0)==18;w=G+(n<<2)|0;while(1){if(!u){if(!v){m=y;break d}if((c[w>>2]|0)>>>0>=9007199){m=18;break d}}m=0;x=k;k=k+127|0;while(1){o=k&127;p=G+(o<<2)|0;k=PN(c[p>>2]|0,0,29)|0;k=IN(k|0,z|0,m|0,0)|0;m=z;if(m>>>0>0|(m|0)==0&k>>>0>1e9){q=MN(k|0,m|0,1e9,0)|0;k=NN(k|0,m|0,1e9,0)|0}else q=0;c[p>>2]=k;a=(o|0)==(n|0);x=(k|0)==0&(((o|0)!=(x+127&127|0)|a)^1)?o:x;if(a)break;else{m=q;k=o+-1|0}}b=b+-29|0;if(q|0)break;else k=x}n=n+127&127;k=x+127&127;m=G+((x+126&127)<<2)|0;if((n|0)==(x|0))c[m>>2]=c[m>>2]|c[G+(k<<2)>>2];else k=x;c[G+(n<<2)>>2]=q;y=y+9|0}e:while(1){w=k+1&127;x=G+((k+127&127)<<2)|0;while(1){q=(m|0)==18;v=(m|0)>27?9:1;y=n;while(1){p=0;while(1){n=p+y&127;if((n|0)==(k|0)){F=2;A=88;break}n=c[G+(n<<2)>>2]|0;o=c[56568+(p<<2)>>2]|0;if(n>>>0>>0){F=2;A=88;break}if(n>>>0>o>>>0)break;n=p+1|0;if((p|0)<1)p=n;else{F=n;A=88;break}}if((A|0)==88?(A=0,q&(F|0)==2):0){i=0.0;o=0;break e}b=v+b|0;if((y|0)==(k|0))y=k;else break}q=(1<>>v;p=0;n=y;o=y;do{D=G+(o<<2)|0;E=c[D>>2]|0;a=(E>>>v)+p|0;c[D>>2]=a;p=O(E&q,u)|0;a=(o|0)==(n|0)&(a|0)==0;m=a?m+-9|0:m;n=a?n+1&127:n;o=o+1&127}while((o|0)!=(k|0));if(!p)continue;if((w|0)!=(n|0))break;c[x>>2]=c[x>>2]|1}c[G+(k<<2)>>2]=p;k=w}do{n=o+y&127;m=k+1&127;if((n|0)==(k|0)){c[G+(m+-1<<2)>>2]=0;k=m}i=i*1.0e9+ +((c[G+(n<<2)>>2]|0)>>>0);o=o+1|0}while((o|0)!=2);t=+(g|0);j=i*t;o=b+53|0;p=o-f|0;q=(p|0)<(e|0);n=q?((p|0)>0?p:0):e;if((n|0)<53){K=+MJ(+JJ(1.0,105-n|0),j);r=+OJ(j,+JJ(1.0,53-n|0));s=K;i=r;r=K+(j-r)}else{s=0.0;i=0.0;r=j}m=y+2&127;if((m|0)!=(k|0)){m=c[G+(m<<2)>>2]|0;do if(m>>>0>=5e8){if((m|0)!=5e8){i=t*.75+i;break}if((y+3&127|0)==(k|0)){i=t*.5+i;break}else{i=t*.75+i;break}}else{if((m|0)==0?(y+3&127|0)==(k|0):0)break;i=t*.25+i}while(0);if((53-n|0)>1?!(+OJ(i,1.0)!=0.0):0)j=i+1.0;else j=i}else j=i;i=r+j-s;do if((o&2147483647|0)>(-2-H|0)){H=!(+B(+i)>=9007199254740992.0);b=b+((H^1)&1)|0;i=H?i:i*.5;if((b+50|0)<=(I|0)?!(j!=0.0&(q&((n|0)!=(p|0)|H))):0)break;c[(kJ()|0)>>2]=34}while(0);i=+NJ(i,b)}while(0);l=J;return +i}function nM(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,i=0;h=a+4|0;e=c[h>>2]|0;i=a+100|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=dK(a)|0;switch(e|0){case 43:case 45:{f=(e|0)==45&1;e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=dK(a)|0;if((b|0)!=0&(e+-48|0)>>>0>9?(c[i>>2]|0)!=0:0)c[h>>2]=(c[h>>2]|0)+-1;break}default:f=0}if((e+-48|0)>>>0>9)if(!(c[i>>2]|0)){f=-2147483648;e=0}else{c[h>>2]=(c[h>>2]|0)+-1;f=-2147483648;e=0}else{g=0;do{g=e+-48+(g*10|0)|0;e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=dK(a)|0}while((e+-48|0)>>>0<10&(g|0)<214748364);b=((g|0)<0)<<31>>31;if((e+-48|0)>>>0<10)do{b=HN(g|0,b|0,10,0)|0;g=z;e=IN(e|0,((e|0)<0)<<31>>31|0,-48,-1)|0;g=IN(e|0,z|0,b|0,g|0)|0;b=z;e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=dK(a)|0}while((e+-48|0)>>>0<10&((b|0)<21474836|(b|0)==21474836&g>>>0<2061584302));if((e+-48|0)>>>0<10)do{e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=dK(a)|0}while((e+-48|0)>>>0<10);if(c[i>>2]|0)c[h>>2]=(c[h>>2]|0)+-1;i=(f|0)!=0;e=JN(0,0,g|0,b|0)|0;f=i?z:b;e=i?e:g}z=f;return e|0}function oM(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=a+84|0;g=c[e>>2]|0;h=d+256|0;f=_J(g,0,h)|0;f=(f|0)==0?h:f-g|0;d=f>>>0>>0?f:d;UN(b|0,g|0,d|0)|0;c[a+4>>2]=g+d;b=g+f|0;c[a+8>>2]=b;c[e>>2]=b;return d|0}function pM(a,b,c){a=a|0;b=b|0;c=c|0;return qM(a,b,c)|0}function qM(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;if((c[a+76>>2]|0)>-1){e=(PK(a)|0)==0;b=rM(a,b,d)|0;if(!e)QK(a)}else b=rM(a,b,d)|0;return b|0}function rM(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;if((d|0)==1)b=b-(c[a+8>>2]|0)+(c[a+4>>2]|0)|0;e=a+20|0;f=a+28|0;if((c[e>>2]|0)>>>0>(c[f>>2]|0)>>>0?(bb[c[a+36>>2]&31](a,0,0)|0,(c[e>>2]|0)==0):0)b=-1;else{c[a+16>>2]=0;c[f>>2]=0;c[e>>2]=0;if((bb[c[a+40>>2]&31](a,b,d)|0)<0)b=-1;else{c[a+8>>2]=0;c[a+4>>2]=0;c[a>>2]=c[a>>2]&-17;b=0}}return b|0}function sM(b){b=b|0;var c=0,d=0,e=0,f=0,g=0;while(1){e=b+1|0;if(!(YJ(a[b>>0]|0)|0))break;else b=e}d=a[b>>0]|0;switch(d<<24>>24|0){case 45:{b=1;f=5;break}case 43:{b=0;f=5;break}default:{g=0;c=b;b=d}}if((f|0)==5){g=b;c=e;b=a[e>>0]|0}if(!($J(b<<24>>24)|0))b=0;else{b=0;do{b=(b*10|0)+48-(a[c>>0]|0)|0;c=c+1|0}while(($J(a[c>>0]|0)|0)!=0)}return (g|0?b:0-b|0)|0}function tM(a){a=a|0;return +(+uM(a,0))}function uM(a,b){a=a|0;b=b|0;return +(+vM(a,b,1))}function vM(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,g=0,h=0,i=0;i=l;l=l+128|0;h=i;f=h;g=f+124|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));f=h+4|0;c[f>>2]=a;g=h+8|0;c[g>>2]=-1;c[h+44>>2]=a;c[h+76>>2]=-1;bK(h,0);e=+kM(h,d,1);d=(c[f>>2]|0)-(c[g>>2]|0)+(c[h+108>>2]|0)|0;if(b|0)c[b>>2]=d|0?a+d|0:a;l=i;return +e}function wM(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;a:do if(!c)b=0;else{h=b;while(1){g=c>>>1;b=h+(O(g,d)|0)|0;f=ab[e&63](a,b)|0;if(!f)break a;if((c|0)==1){b=0;break a}f=(f|0)<0;c=f?g:c-g|0;if(!c){b=0;break}else h=f?h:b}}while(0);return b|0}function xM(a,c){a=a|0;c=c|0;var d=0,f=0,g=0;g=a+2|0;f=a+4|0;d=HN((e[c+2>>1]|0)<<16|(e[c>>1]|0)|0,e[c+4>>1]|0|0,(e[g>>1]|0)<<16|(e[a>>1]|0)|0,e[f>>1]|0|0)|0;c=IN(d|0,z|0,e[c+6>>1]|0|0,0)|0;d=z;b[a>>1]=c;a=ON(c|0,d|0,16)|0;b[g>>1]=a;b[f>>1]=d;z=d&65535;return c|0}function yM(a){a=a|0;UN(173880,58668,6)|0;UN(58668,a|0,6)|0;return 173880}function zM(a){a=a|0;var c=0,d=0;c=l;l=l+16|0;d=c;b[d>>1]=13070;b[d+2>>1]=a;b[d+4>>1]=a>>>16;yM(d)|0;l=c;return}function AM(a){a=a|0;var b=0;b=xM(a,58674)|0;b=PN(b|0,z|0,4)|0;a=z|1072693248;c[j>>2]=b;c[j+4>>2]=a;return +(+h[j>>3]+-1.0)}function BM(){return +(+AM(58668))}function CM(a,b){a=a|0;b=b|0;if(!a)b=aJ(1,24)|0;else WN(b|0,0,24)|0;return b|0}function DM(a){a=a|0;var b=0,d=0;b=c[a>>2]|0;if(b|0)do{$I(c[b>>2]|0);d=b;b=c[b+4>>2]|0;$I(d)}while((b|0)!=0);$I(a);return}function EM(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;h=a+16|0;a:do if(!(c[h>>2]|0)){k=a+12|0;g=c[k>>2]|0;if(g>>>0>>0){do if(b)if(!d){c[h>>2]=1;b=0;break a}else{h=a+8|0;c[h>>2]=d;g=1024;b=d;break}else{g=f<<3;g=g>>>0>1024?g:1024;j=_I(8)|0;if(!j){c[h>>2]=1;b=0;break a}b=_I(g)|0;c[j>>2]=b;d=b;if(!b){$I(j);c[h>>2]=1;b=0;break a}c[j+4>>2]=0;h=a+4|0;i=c[h>>2]|0;if(i|0)c[i+4>>2]=j;if(!(c[a>>2]|0))c[a>>2]=j;c[h>>2]=j;h=a+8|0;c[h>>2]=d}while(0);c[k>>2]=g}else{h=a+8|0;b=c[h>>2]|0;d=b}d=d+f&3;d=((d|0)==0?0:4-d|0)+f|0;c[h>>2]=b+d;c[k>>2]=g-d;if(e)WN(b|0,0,d|0)|0}else b=0;while(0);return b|0}function FM(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;v=l;l=l+48|0;h=v;t=GM()|0;a:do if(!t)b=12;else{u=CM(0,0)|0;if(!u){HM(t);b=12;break}WN(h|0,0,36)|0;c[h>>2]=u;c[h+4>>2]=t;c[h+16>>2]=b;c[h+32>>2]=d;e=h+28|0;c[e>>2]=-1;b=IM(h)|0;b:do if(!b){g=h+20|0;r=c[g>>2]|0;c[a>>2]=r+-1;i=c[h+8>>2]|0;if((c[e>>2]|0)<(r|0)){r=aJ(1,68)|0;if(r){q=(c[e>>2]|0)>>>31^1;c[r+60>>2]=q;c[r+64>>2]=0;c[r+28>>2]=c[g>>2];if((d&8|0)==0|(q|0)!=0){b=JM(0,t,i,r)|0;if(b|0){g=r;h=0;i=0;f=0;e=0;break}e=r+40|0;b=c[e>>2]|0;if((b|0)>0){b=_I((b<<2)+4|0)|0;if(!b){g=r;h=0;i=0;b=12;f=0;e=0;break}c[r+32>>2]=b;WN(b|0,-1,(c[e>>2]<<2)+4|0)|0;f=b;b=c[e>>2]|0}else f=0;q=aJ(b<<1|1,4)|0;c[r+36>>2]=q;if(!q){g=r;h=0;i=0;b=12;f=0;e=0;break}b=aJ(c[g>>2]|0,12)|0;if(!b){g=r;h=0;i=0;b=12;f=0;e=0;break}c[r+16>>2]=b;b=JM(u,t,i,r)|0;if(!b)b=f;else{g=r;h=0;i=0;f=0;e=0;break}}else b=0;p=h+24|0;b=KM(u,t,i,p,b)|0;if(!b){b=c[p>>2]|0;c[p>>2]=b+1;b=LM(u,0,0,b)|0;if((b|0)!=0?(s=MM(u,i,b)|0,(s|0)!=0):0){b=NM(u,t,s)|0;if(!b){o=_I(c[p>>2]<<2)|0;if(o){q=_I(c[p>>2]<<2)|0;if(q){b=c[p>>2]|0;if((b|0)>0)WN(o|0,0,b<<2|0)|0;OM(s,0,o,0)|0;f=c[p>>2]|0;if((f|0)>0){b=0;e=0;do{c[q+(e<<2)>>2]=b;n=o+(e<<2)|0;b=b+1+(c[n>>2]|0)|0;c[n>>2]=0;e=e+1|0}while((e|0)<(f|0));k=b}else k=0;m=aJ(k+1|0,32)|0;if(m){c[r>>2]=m;n=r+4|0;c[n>>2]=k;b=OM(s,m,o,q)|0;if(!b){c[r+20>>2]=0;f=s+24|0;b=c[f>>2]|0;e=0;while(1){e=e+1|0;if((c[b>>2]|0)<=-1)break;else b=b+32|0}j=aJ(e,32)|0;if(!j){g=r;h=o;i=q;b=12;f=o;e=q}else{c[r+8>>2]=j;f=c[f>>2]|0;e=c[f>>2]|0;if((e|0)>-1){b=0;do{c[j+(b<<5)+8>>2]=m+(c[q+(e<<2)>>2]<<5);c[j+(b<<5)+12>>2]=e;h=j+(b<<5)+16|0;c[h>>2]=0;i=f+12|0;g=c[i>>2]|0;if(g|0){e=0;do{w=e;e=e+1|0}while((c[g+(w<<2)>>2]|0)>-1);e=e<<2;g=_I(e)|0;c[h>>2]=g;if(!g){g=r;h=o;i=q;b=12;f=o;e=q;break b}UN(g|0,c[i>>2]|0,e|0)|0}c[j+(b<<5)+20>>2]=c[f+16>>2];b=b+1|0;f=f+32|0;e=c[f>>2]|0}while((e|0)>-1)}else b=0;c[j+(b<<5)+8>>2]=0;c[n>>2]=k;c[r+12>>2]=m+(c[q+(c[c[s+28>>2]>>2]<<2)>>2]<<5);c[r+52>>2]=c[p>>2];c[r+56>>2]=d;DM(u);HM(t);$I(o);$I(q);c[a+4>>2]=r;b=0;break a}}else{g=r;h=o;i=q;f=o;e=q}}else{g=r;h=o;i=q;b=12;f=o;e=q}}else{g=r;h=o;i=q;b=12;f=o;e=0}}else{g=r;h=o;i=0;b=12;f=0;e=0}}else{g=r;h=0;i=0;f=0;e=0}}else{g=r;h=0;i=0;b=12;f=0;e=0}}else{g=r;h=0;i=0;f=0;e=0}}else{g=r;h=0;i=0;b=12;f=0;e=0}}else{g=0;h=0;i=0;b=6;f=0;e=0}}else{g=0;h=0;i=0;f=0;e=0}while(0);DM(u);HM(t);if(h|0)$I(f);if(i|0)$I(e);c[a+4>>2]=g;PM(a)}while(0);l=v;return b|0}function GM(){var a=0,b=0;a=_I(20)|0;do if(a){b=_I(2048)|0;c[a+16>>2]=b;if(!b){$I(a);a=0;break}else{c[a>>2]=512;c[a+4>>2]=1024e3;c[a+8>>2]=128;c[a+12>>2]=0;break}}while(0);return a|0}function HM(a){a=a|0;$I(c[a+16>>2]|0);$I(a);return}function IM(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+16|0;p=u+4|0;q=u;r=c[b+32>>2]&1;s=b+16|0;e=c[s>>2]|0;t=c[b+4>>2]|0;d=TM(t,0)|0;a:do if(!d){m=(r|0)!=0;n=b+8|0;o=b+12|0;d=0;k=1;b:while(1){g=0;h=d;f=0;c:while(1){d=a[e>>0]|0;if(m){if(d<<24>>24==40)break;if((h|0)!=0&d<<24>>24==41)j=13;else j=14}else if(d<<24>>24==92)switch(a[e+1>>0]|0){case 40:break c;case 41:{j=13;break}default:j=14}else j=14;if((j|0)==13){j=0;i=LM(c[b>>2]|0,-1,-1,-1)|0;c[n>>2]=i;if(!i){d=12;break a}else i=f}else if((j|0)==14){j=0;d=gN(b,e)|0;if(d|0)break a;i=f;e=c[o>>2]|0}d:while(1){e:while(1){d=a[e>>0]|0;switch(d<<24>>24){case 42:case 92:break;default:{if(!m)break e;switch(d<<24>>24){case 123:case 63:case 43:break;default:break e}}}d=d<<24>>24==92;if(m&d)break;f=e+1|0;if(d)switch(a[f>>0]|0){case 123:case 63:case 43:break;default:break e}e=d?f:e;if((!m?(e|0)==((c[s>>2]|0)+1|0):0)?(a[e+-1>>0]|0)==94:0)break;if((a[e>>0]|0)==123){e=hN(e+1|0,r,p,q)|0;if(!e){j=28;break b}d=c[q>>2]|0;f=c[b>>2]|0;if(!d)d=LM(f,-1,-1,-1)|0;else j=36}else{c[p>>2]=0;c[q>>2]=-1;d=a[e>>0]|0;if(d<<24>>24==43){c[p>>2]=1;d=a[e>>0]|0}if(d<<24>>24==63){c[q>>2]=1;d=1}else d=-1;e=e+1|0;f=c[b>>2]|0;j=36}if((j|0)==36){j=0;d=bN(f,c[n>>2]|0,c[p>>2]|0,d,0)|0}c[n>>2]=d;if(!d){d=12;break a}}d=MM(c[b>>2]|0,g,c[n>>2]|0)|0;f=a[e>>0]|0;f:do if(m){if(f<<24>>24==124){j=40;break d}if((h|0)!=0&f<<24>>24==41|f<<24>>24==0)j=47;else{g=d;f=i;continue c}}else{switch(f<<24>>24){case 0:{j=47;break f}case 92:break;default:{g=d;f=i;continue c}}switch(a[e+1>>0]|0){case 124:case 41:break;default:{g=d;f=i;continue c}}d=cN(c[b>>2]|0,i,d)|0;if((a[e+1>>0]|0)==124){f=2;break d}if(!h){d=8;break a}e=e+2|0;f=92}while(0);if((j|0)==47){j=0;d=cN(c[b>>2]|0,i,d)|0;e=f<<24>>24==41?e+1|0:e}d=iN(b,d,UM(t)|0)|0;if(d|0)break a;d=f<<24>>24==0;f=(h|0)<1;if(f&d){j=50;break b}if(f|d){d=8;break a}g=VM(t)|0;h=h+-1|0;i=VM(t)|0}if((j|0)==40){f=1;d=cN(c[b>>2]|0,i,d)|0}g=0;e=e+f|0;f=d}d=SM(t,f)|0;if(d|0)break a;d=SM(t,g)|0;if(d|0)break a;d=TM(t,k)|0;if(d|0)break a;d=h+1|0;k=k+1|0;e=m?e+1|0:e+2|0}if((j|0)==28){d=10;break}else if((j|0)==50){c[b+20>>2]=k;d=0;break}}while(0);l=u;return d|0}function JM(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;x=RM(d)|0;y=(b|0)==0|(f|0)==0;if(!y){c[f+48>>2]=0;c[c[f+36>>2]>>2]=-1}g=f+28|0;z=_I((c[g>>2]<<3)+8|0)|0;do if(!z)g=12;else{c[z>>2]=-1;A=_I((c[g>>2]<<2)+4|0)|0;if(!A){$I(z);g=12;break}c[A>>2]=-1;B=_I((c[g>>2]<<3)+8|0)|0;if(!B){$I(z);$I(A);g=12;break}h=c[g>>2]|0;g=0;do{c[B+(g<<3)>>2]=-1;g=g+1|0}while(g>>>0<=h>>>0);SM(d,e)|0;g=TM(d,0)|0;a:do if((g|0)!=0|(RM(d)|0)<=(x|0)){e=z;n=0;h=0;m=0;l=-1}else{u=f+32|0;v=f+36|0;w=f+16|0;e=z;n=0;h=0;m=0;t=1;l=-1;s=0;while(1){b:do switch(UM(d)|0){case 6:{i=UM(d)|0;g=0;do{j=e+(g<<2)|0;g=g+1|0}while((c[j>>2]|0)>-1);c[j>>2]=i<<1|1;c[e+(g<<2)>>2]=-1;g=0;while(1)if((c[A+(g<<2)>>2]|0)>-1)g=g+1|0;else break;c[A+(g+-1<<2)>>2]=-1;g=0;j=t;i=s;break}case 0:{q=VM(d)|0;r=q+12|0;j=c[r>>2]|0;if((j|0)>-1){g=0;do{i=e+(g<<2)|0;g=g+1|0}while((c[i>>2]|0)>-1);c[i>>2]=j<<1;c[e+(g<<2)>>2]=-1;if(!y){g=0;while(1)if((c[A+(g<<2)>>2]|0)>-1)g=g+1|0;else break;c[(c[w>>2]|0)+(j*12|0)+8>>2]=0;if((g|0)>0){g=_I((g<<2)+4|0)|0;if(!g){g=12;j=t;i=s;break b}c[(c[w>>2]|0)+(j*12|0)+8>>2]=g;i=c[A>>2]|0;if((i|0)>-1){k=0;j=g;do{c[j>>2]=i;k=k+1|0;i=c[A+(k<<2)>>2]|0;j=g+(k<<2)|0}while((i|0)>-1);g=j}c[g>>2]=-1}}g=TM(d,c[r>>2]|0)|0;if(g|0){j=t;i=s;break b}g=TM(d,6)|0;if(g|0){j=t;i=s;break b}}c:do switch(c[q>>2]|0){case 0:{p=c[c[q+4>>2]>>2]|0;if((p|0)>-1|(p|0)==-4?(c[e>>2]|0)>-1:0){if(y){c[q+20>>2]=1;g=0}else{g=dN(b,q,m)|0;c[(c[u>>2]|0)+(m<<2)>>2]=s;if((l|0)>-1){j=c[v>>2]|0;i=0;while(1){k=j+(i<<2)|0;o=i+1|0;if((c[k>>2]|0)>-1)i=o;else break}c[k>>2]=m;c[j+(o<<2)>>2]=l;c[j+(i+2<<2)>>2]=-1;h=h+1|0;l=-1}eN(e,f,m)}c[e>>2]=-1;p=t+1|0;o=s;n=n+1|0;m=t}else{p=t;g=0;o=s}break}case 1:{j=c[q+4>>2]|0;k=c[j>>2]|0;j=c[j+4>>2]|0;g=SM(d,q)|0;if(!g){g=TM(d,5)|0;if(!g){g=SM(d,j)|0;if(!g){g=TM(d,0)|0;if(!g){i=k+20|0;g=TM(d,(c[i>>2]|0)+t|0)|0;if(!g){if((c[i>>2]|0)>0){i=(c[j+20>>2]|0)>0;g=i?t:-1;i=t+(i&1)|0}else{g=-1;i=t}g=TM(d,g)|0;if(!g){g=TM(d,4)|0;if(!g){g=SM(d,k)|0;if(!g){p=i;g=TM(d,0)|0;o=s}else{p=i;o=s}}else{p=i;o=s}}else{p=i;o=s}}else{p=t;o=s}}else{p=t;o=s}}else{p=t;o=s}}else{p=t;o=s}}else{p=t;o=s}break}case 2:{i=c[q+4>>2]|0;if(y){if((c[e>>2]|0)>-1)g=1;else g=(a[i+12>>0]&1)!=0;g=TM(d,g&1)|0;if(g|0){p=t;o=s;break c}}else{g=TM(d,m)|0;if(g|0){p=t;o=s;break c}g=TM(d,a[i+12>>0]&1)|0;if(g|0){p=t;o=s;break c}}g=SM(d,q)|0;if(!g){g=TM(d,1)|0;if(!g){g=SM(d,c[i>>2]|0)|0;if(!g){g=TM(d,0)|0;if(!g){if((c[e>>2]|0)<=-1?(a[i+12>>0]&1)==0:0){p=t;g=0;o=0;break c}if(y)g=0;else{g=dN(b,q,m)|0;c[(c[u>>2]|0)+(m<<2)>>2]=(a[i+12>>0]&1)==0?s:1;if((l|0)>-1){j=c[v>>2]|0;i=0;while(1){k=j+(i<<2)|0;o=i+1|0;if((c[k>>2]|0)>-1)i=o;else break}c[k>>2]=m;c[j+(o<<2)>>2]=l;c[j+(i+2<<2)>>2]=-1;h=h+1|0;l=-1}eN(e,f,m)}c[e>>2]=-1;p=t+1|0;o=0;n=n+1|0;m=t}else{p=t;o=s}}else{p=t;o=s}}else{p=t;o=s}}else{p=t;o=s}break}case 3:{j=c[q+4>>2]|0;k=c[j>>2]|0;j=c[j+4>>2]|0;i=(c[e>>2]|0)>-1;p=t+1|0;g=TM(d,i?p:t)|0;if(!g){g=TM(d,i?t:m)|0;if(!g){g=SM(d,e)|0;if(!g){g=TM(d,(c[e>>2]|0)>>>31^1)|0;if(!g){g=SM(d,q)|0;if(!g){g=SM(d,j)|0;if(!g){g=SM(d,k)|0;if(!g){g=TM(d,3)|0;if(!g){g=SM(d,j)|0;if(!g){g=TM(d,0)|0;if(g|0){p=t;o=s;break c}g=TM(d,2)|0;if(g|0){p=t;o=s;break c}g=SM(d,k)|0;if(g|0){p=t;o=s;break c}g=TM(d,0)|0;if(g|0){p=t;o=s;break c}if((c[e>>2]|0)>-1){if(y)g=0;else{g=dN(b,q,m)|0;c[(c[u>>2]|0)+(m<<2)>>2]=s;if((l|0)>-1){j=c[v>>2]|0;i=0;while(1){k=j+(i<<2)|0;o=i+1|0;if((c[k>>2]|0)>-1)i=o;else break}c[k>>2]=m;c[j+(o<<2)>>2]=l;c[j+(i+2<<2)>>2]=-1;h=h+1|0;l=-1}eN(e,f,m)}c[e>>2]=-1;n=n+1|0;m=t;i=p}else{g=0;i=t}t=(c[q+16>>2]|0)>0;p=t?i+2|0:i;o=s;m=t?i+1|0:m}else{p=t;o=s}}else{p=t;o=s}}else{p=t;o=s}}else{p=t;o=s}}else{p=t;o=s}}else{p=t;o=s}}else{p=t;o=s}}else{p=t;o=s}}else{p=t;o=s}break}default:{p=t;g=0;o=s}}while(0);j=c[r>>2]|0;if((j|0)>-1){i=0;do{k=A+(i<<2)|0;i=i+1|0}while((c[k>>2]|0)>-1);c[k>>2]=j;c[A+(i<<2)>>2]=-1;j=p;i=o}else{j=p;i=o}break}case 1:{g=VM(d)|0;if(y){i=c[(c[c[g+4>>2]>>2]|0)+20>>2]|0;c[g+20>>2]=(UM(d)|0)+i;i=0;l=-1}else{q=UM(d)|0;r=UM(d)|0;i=q;l=(q|0)==0?l:r}g=0;j=t;i=y?s:(i|0)==0&1;break}case 4:{i=UM(d)|0;j=UM(d)|0;g=0;m=(i|0)>-1?i:m;i=s;break}case 5:{g=VM(d)|0;if(y){j=c[g+4>>2]|0;c[g+20>>2]=(c[(c[j+4>>2]|0)+20>>2]|0)+(c[(c[j>>2]|0)+20>>2]|0);g=0;j=t;i=s}else{g=0;j=t;i=s}break}case 2:{while(1)if((c[e>>2]|0)>-1)e=e+4|0;else{g=0;j=t;i=s;break}break}case 3:{j=VM(d)|0;o=VM(d)|0;g=VM(d)|0;e=UM(d)|0;if(y){r=c[g+4>>2]|0;s=g+16|0;c[g+20>>2]=(c[(c[r>>2]|0)+20>>2]|0)+e+(c[(c[r+4>>2]|0)+20>>2]|0)+((c[s>>2]|0)>0?2:0);g=s}else g=g+16|0;e=VM(d)|0;i=UM(d)|0;k=UM(d)|0;if((c[g>>2]|0)>0){if(y)g=0;else{g=fN(b,j,i)|0;c[(c[u>>2]|0)+(i<<2)>>2]=1;if(!g)g=fN(b,o,k)|0;c[(c[u>>2]|0)+(k<<2)>>2]=1}n=n+2|0;j=t;i=1}else{g=0;j=t;i=1}break}default:{g=0;j=t;i=s}}while(0);if((g|0)!=0|(RM(d)|0)<=(x|0))break a;else{t=j;s=i}}}while(0);if(!y?(eN(e,f,m),(l|0)>-1):0){i=c[f+36>>2]|0;e=0;while(1){j=i+(e<<2)|0;k=e+1|0;if((c[j>>2]|0)>-1)e=k;else break}c[j>>2]=m;c[i+(k<<2)>>2]=l;c[i+(e+2<<2)>>2]=-1;h=h+1|0}c[f+48>>2]=n;c[f+40>>2]=n;c[f+44>>2]=h;$I(z);$I(A);$I(B)}while(0);return g|0}function KM(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=l;l=l+16|0;t=y+12|0;x=y+8|0;u=y+4|0;v=y;w=RM(b)|0;c[t>>2]=0;c[x>>2]=0;d=SM(b,d)|0;a:do if(!d){d=TM(b,0)|0;if(!d){b:do if((RM(b)|0)>(w|0)){g=0;i=0;j=0;c:while(1){q=UM(b)|0;r=VM(b)|0;d:do switch(q|0){case 0:{switch(c[r>>2]|0){case 0:{d=c[r+4>>2]|0;r=c[d>>2]|0;if(!((r|0)>-1|(r|0)==-4)){d=j;break d}r=d+8|0;d=(c[r>>2]|0)+j|0;c[r>>2]=d;if((d|0)<=(c[x>>2]|0)){d=j;break d}c[x>>2]=d;d=j;break d}case 3:{h=c[r+4>>2]|0;d=SM(b,c[h+4>>2]|0)|0;if(d|0)break b;d=TM(b,0)|0;if(d|0)break b;d=SM(b,c[h>>2]|0)|0;if(d|0)break b;break}case 1:{h=c[r+4>>2]|0;d=SM(b,c[h+4>>2]|0)|0;if(d|0)break b;d=TM(b,0)|0;if(d|0)break b;d=SM(b,c[h>>2]|0)|0;if(d|0)break b;break}case 2:{h=c[r+4>>2]|0;d=TM(b,j)|0;if(d|0)break b;d=SM(b,r)|0;if(d|0)break b;d=TM(b,1)|0;if(d|0)break b;d=SM(b,c[h>>2]|0)|0;if(d|0)break b;d=TM(b,0)|0;if(d|0)break b;if((c[h+4>>2]|0)<=1?(c[h+8>>2]|0)<=1:0)d=j;else{c[t>>2]=0;d=0}i=i+1|0;break d}default:{d=j;break d}}d=TM(b,0)|0;if(!d)d=j;else break b;break}case 1:{p=r+4|0;o=c[p>>2]|0;q=UM(b)|0;c[t>>2]=q;n=o+4|0;j=c[n>>2]|0;if((j|0)<=1)if((c[o+8>>2]|0)>1){c[u>>2]=0;if((j|0)>0)s=30;else{d=q;h=0;s=37}}else d=q;else{c[u>>2]=0;s=30}e:do if((s|0)==30){d=aN(a,b,c[o>>2]|0,(j|0)>1?1:2,t,f,v,x)|0;if(!d){h=0;k=q;m=1}else{s=34;break c}while(1){d=c[v>>2]|0;if(!h)h=d;else h=MM(a,h,d)|0;if(!h){d=12;s=34;break c}j=c[n>>2]|0;if((m|0)>=(j|0)){d=k;s=37;break e}k=c[t>>2]|0;m=m+1|0;d=aN(a,b,c[o>>2]|0,(m|0)<(j|0)?1:2,t,f,v,x)|0;if(d|0){s=34;break c}}}while(0);if((s|0)==37){s=0;n=o+8|0;k=c[n>>2]|0;if((k|0)==-1){k=c[t>>2]|0;d=aN(a,b,c[o>>2]|0,0,t,0,u,x)|0;if(d|0)break c;j=bN(a,c[u>>2]|0,0,-1,0)|0;c[u>>2]=j;if(!j){d=12;break c}else d=k}else if((j|0)<(k|0)){k=j;j=0;while(1){m=c[t>>2]|0;d=aN(a,b,c[o>>2]|0,0,t,0,v,x)|0;if(d|0){s=49;break c}if(!j){d=c[v>>2]|0;c[u>>2]=d}else{d=MM(a,c[v>>2]|0,j)|0;c[u>>2]=d}if(!d){d=12;s=49;break c}j=LM(a,-1,-1,-1)|0;if(!j){d=12;s=49;break c}j=cN(a,j,d)|0;c[u>>2]=j;if(!j){d=12;s=49;break c}k=k+1|0;if((k|0)>=(c[n>>2]|0)){d=m;break}}}else j=0;c[t>>2]=d;if(h){if(j){h=MM(a,h,j)|0;s=54}}else{h=j;s=54}if((s|0)==54){s=0;if(!h){d=12;break c}}c[p>>2]=c[h+4>>2];c[r>>2]=c[h>>2]}i=i+-1|0;h=d-q+g|0;if(!i){c[t>>2]=h;g=h;i=0;d=h}else g=h;break}default:d=j}while(0);if((RM(b)|0)>(w|0))j=d;else{d=0;break b}}break a}else{d=0;g=0}while(0);w=(c[e>>2]|0)+g|0;x=c[x>>2]|0;c[e>>2]=(x|0)>(w|0)?x:w}}while(0);l=y;return d|0}function LM(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=EM(a,0,0,1,20)|0;a=$M(a,0,f)|0;if(!a)a=0;else{c[f>>2]=b;c[f+4>>2]=d;c[f+8>>2]=e}return a|0}function MM(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;if(b){e=EM(a,0,0,1,8)|0;a=$M(a,1,e)|0;if(!a)d=0;else{c[e>>2]=b;c[e+4>>2]=d;c[a+16>>2]=(c[d+16>>2]|0)+(c[b+16>>2]|0);d=a}}return d|0}function NM(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+16|0;j=o+4|0;k=o;m=RM(b)|0;d=SM(b,d)|0;a:do if(!d){d=TM(b,0)|0;if(!d)if((RM(b)|0)>(m|0)){b:while(1){h=UM(b)|0;i=VM(b)|0;c:do switch(h|0){case 0:switch(c[i>>2]|0){case 0:{g=c[i+4>>2]|0;f=c[g>>2]|0;if((f|0)==-4){c[i+8>>2]=0;d=g+8|0;h=WM(a,c[d>>2]|0,0,1114111,0,0,-1)|0;c[i+24>>2]=h;if(!h){d=12;break a}h=WM(a,c[d>>2]|0,0,1114111,0,0,c[g+4>>2]|0)|0;c[i+28>>2]=h;if(!h){d=12;break a}else break c}d=i+8|0;if((f|0)<0){c[d>>2]=1;h=XM(a)|0;c[i+24>>2]=h;if(!h){d=12;break a}h=XM(a)|0;c[i+28>>2]=h;if(!h){d=12;break a}else break c}else{c[d>>2]=0;d=g+8|0;e=g+4|0;h=WM(a,c[d>>2]|0,f,c[e>>2]|0,0,0,-1)|0;c[i+24>>2]=h;if(!h){d=12;break a}h=WM(a,c[d>>2]|0,c[g>>2]|0,c[e>>2]|0,c[g+12>>2]|0,c[g+16>>2]|0,-1)|0;c[i+28>>2]=h;if(!h){d=12;break a}else break c}}case 3:{d=SM(b,i)|0;if(d|0)break a;d=TM(b,1)|0;if(d|0)break a;e=i+4|0;d=SM(b,c[(c[e>>2]|0)+4>>2]|0)|0;if(d|0)break a;d=TM(b,0)|0;if(d|0)break a;d=SM(b,c[c[e>>2]>>2]|0)|0;if(d|0)break a;d=TM(b,0)|0;if(!d)break c;else break a}case 1:{d=SM(b,i)|0;if(d|0)break a;d=TM(b,2)|0;if(d|0)break a;e=i+4|0;d=SM(b,c[(c[e>>2]|0)+4>>2]|0)|0;if(d|0)break a;d=TM(b,0)|0;if(d|0)break a;d=SM(b,c[c[e>>2]>>2]|0)|0;if(d|0)break a;d=TM(b,0)|0;if(!d)break c;else break a}case 2:{d=SM(b,i)|0;if(d|0)break a;d=TM(b,3)|0;if(d|0)break a;d=SM(b,c[c[i+4>>2]>>2]|0)|0;if(d|0)break a;d=TM(b,0)|0;if(!d)break c;else break a}default:break c}case 1:{d=c[i+4>>2]|0;e=c[d>>2]|0;f=d+4|0;g=c[f>>2]|0;if(!(c[e+8>>2]|0))h=(c[g+8>>2]|0)!=0;else h=1;c[i+8>>2]=h&1;h=YM(a,c[e+24>>2]|0,c[g+24>>2]|0,0,0)|0;c[i+24>>2]=h;if(!h){d=12;break a}h=YM(a,c[(c[d>>2]|0)+28>>2]|0,c[(c[f>>2]|0)+28>>2]|0,0,0)|0;c[i+28>>2]=h;if(!h){d=12;break a}break}case 3:{h=c[i+4>>2]|0;d=c[h>>2]|0;if(!(c[h+4>>2]|0))e=1;else e=(c[d+8>>2]|0)!=0&1;c[i+8>>2]=e;c[i+24>>2]=c[d+24>>2];c[i+28>>2]=c[d+28>>2];break}case 2:{g=c[i+4>>2]|0;d=c[g>>2]|0;e=d+8|0;if(!(c[e>>2]|0))f=0;else f=(c[(c[g+4>>2]|0)+8>>2]|0)!=0;c[i+8>>2]=f&1;if(c[e>>2]|0){d=ZM(b,d,0,0,j)|0;if(d|0)break b;e=_I((c[j>>2]<<2)+4|0)|0;if(!e){d=12;break b}c[e>>2]=-1;c[k>>2]=0;d=ZM(b,c[g>>2]|0,e,k,0)|0;if(d|0){n=45;break b}d=g+4|0;h=i+24|0;c[h>>2]=YM(a,c[(c[d>>2]|0)+24>>2]|0,c[(c[g>>2]|0)+24>>2]|0,e,c[k>>2]|0)|0;$I(e);if(!(c[h>>2]|0)){d=12;break b}else f=d}else{c[i+24>>2]=c[d+24>>2];f=g+4|0}d=c[f>>2]|0;if(c[d+8>>2]|0){d=ZM(b,d,0,0,j)|0;if(d|0)break b;e=_I((c[j>>2]<<2)+4|0)|0;if(!e){d=12;break b}c[e>>2]=-1;c[k>>2]=0;d=ZM(b,c[f>>2]|0,e,k,0)|0;if(d|0){n=52;break b}i=i+28|0;c[i>>2]=YM(a,c[(c[g>>2]|0)+28>>2]|0,c[(c[f>>2]|0)+28>>2]|0,e,c[k>>2]|0)|0;$I(e);if(!(c[i>>2]|0)){d=12;break b}}else c[i+28>>2]=c[d+28>>2];break}default:{}}while(0);if((RM(b)|0)<=(m|0)){d=0;break a}}if((n|0)==45)$I(e);else if((n|0)==52)$I(e)}else d=0}while(0);l=o;return d|0}function OM(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;a:while(1){switch(c[a>>2]|0){case 2:{a=c[a+4>>2]|0;if((c[a+8>>2]|0)==-1?(h=c[a>>2]|0,h=QM(c[h+28>>2]|0,c[h+24>>2]|0,b,d,e)|0,(h|0)!=0):0){a=h;break a}break}case 3:{f=c[a+4>>2]|0;a=OM(c[f>>2]|0,b,d,e)|0;if(a|0)break a;a=f+4|0;break}case 1:{f=c[a+4>>2]|0;g=f+4|0;a=QM(c[(c[f>>2]|0)+28>>2]|0,c[(c[g>>2]|0)+24>>2]|0,b,d,e)|0;if(a|0)break a;a=OM(c[f>>2]|0,b,d,e)|0;if(!a)a=g;else break a;break}default:{a=0;break a}}a=c[a>>2]|0}return a|0}function PM(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=c[a+4>>2]|0;if(h|0){e=h+4|0;a=c[h>>2]|0;if(c[e>>2]|0){d=0;do{if(c[a+(d<<5)+8>>2]|0){b=c[a+(d<<5)+16>>2]|0;if(b){$I(b);a=c[h>>2]|0}b=c[a+(d<<5)+28>>2]|0;if(b){$I(b);a=c[h>>2]|0}}d=d+1|0}while(d>>>0<(c[e>>2]|0)>>>0)}if(a|0)$I(a);d=h+8|0;a=c[d>>2]|0;if(a|0){if(c[a+8>>2]|0){while(1){b=c[a+16>>2]|0;if(b|0)$I(b);if(!(c[a+40>>2]|0))break;else a=a+32|0}a=c[d>>2]|0}$I(a)}f=h+16|0;a=c[f>>2]|0;if(a|0){g=h+28|0;b=c[g>>2]|0;if(b){e=0;do{d=c[a+(e*12|0)+8>>2]|0;if(d){$I(d);b=c[g>>2]|0;a=c[f>>2]|0}e=e+1|0}while(e>>>0>>0)}$I(a)}a=c[h+32>>2]|0;if(a|0)$I(a);a=c[h+20>>2]|0;if(a|0)$I(a);a=c[h+36>>2]|0;if(a|0)$I(a);$I(h)}return}function QM(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;g=c[a>>2]|0;h=(g|0)>-1;a:do if(!d)if(h){h=b+32|0;do{if((c[b>>2]|0)>-1?(y=e+(g<<2)|0,c[y>>2]=(c[y>>2]|0)+1,(c[h>>2]|0)>-1):0){g=h;do{y=e+(c[a>>2]<<2)|0;c[y>>2]=(c[y>>2]|0)+1;g=g+32|0}while((c[g>>2]|0)>-1)}a=a+32|0;g=c[a>>2]|0}while((g|0)>-1);g=0}else g=0;else if(h)while(1){h=c[b>>2]|0;b:do if((h|0)>-1){p=a+4|0;q=a+8|0;r=a+16|0;s=a+20|0;t=a+24|0;u=a+28|0;v=a+12|0;e=-1;g=b;while(1){o=h;while(1){if((o|0)!=(e|0))break;g=g+32|0;h=c[g>>2]|0;if((h|0)>-1)o=h;else break b}l=d+(c[f+(c[a>>2]<<2)>>2]<<5)|0;while(1){h=l+8|0;if(!(c[h>>2]|0))break;else l=l+32|0}c[l+40>>2]=0;c[l>>2]=c[p>>2];c[l+4>>2]=c[q>>2];c[h>>2]=d+(c[f+(o<<2)>>2]<<5);c[l+12>>2]=o;h=c[s>>2]|0;e=c[g+16>>2]|c[r>>2]|(h|0?4:0)|(c[t>>2]|0?8:0);i=l+20|0;c[i>>2]=e;j=c[u>>2]|0;if((j|0)>-1){c[i>>2]=e|256;h=j}c[l+24>>2]=h;e=c[t>>2]|0;if(!e)c[l+28>>2]=0;else{h=0;do{n=h;h=h+1|0}while((c[e+(n<<2)>>2]|0)!=0);h=_I(h<<2)|0;c[l+28>>2]=h;if(!h){g=12;break a}k=c[t>>2]|0;e=c[k>>2]|0;if(e){j=0;i=h;do{c[i>>2]=e;j=j+1|0;e=c[k+(j<<2)>>2]|0;i=h+(j<<2)|0}while((e|0)!=0);h=i}c[h>>2]=0}e=c[v>>2]|0;if(!e)h=0;else{h=0;while(1)if((c[e+(h<<2)>>2]|0)>-1)h=h+1|0;else break}k=g+12|0;i=c[k>>2]|0;if(!i)e=0;else{e=0;while(1)if((c[i+(e<<2)>>2]|0)>-1)e=e+1|0;else break}j=l+16|0;i=c[j>>2]|0;if(i|0)$I(i);c[j>>2]=0;h=e+h|0;if((h|0)>0){n=_I((h<<2)+4|0)|0;c[j>>2]=n;if(!n){g=12;break a}e=c[v>>2]|0;if((e|0)!=0?(w=c[e>>2]|0,(w|0)>-1):0){h=0;i=w;do{c[n+(h<<2)>>2]=i;h=h+1|0;i=c[e+(h<<2)>>2]|0}while((i|0)>-1);m=h}else m=0;j=c[k>>2]|0;if((j|0)!=0?(x=c[j>>2]|0,(x|0)>-1):0){k=(m|0)>0;h=m;i=0;l=x;do{c:do if(k){e=0;while(1){if((c[n+(e<<2)>>2]|0)==(l|0))break c;e=e+1|0;if((e|0)>=(m|0)){y=39;break}}}else y=39;while(0);if((y|0)==39){y=0;c[n+(h<<2)>>2]=l;h=h+1|0}i=i+1|0;l=c[j+(i<<2)>>2]|0}while((l|0)>-1)}else h=m;c[n+(h<<2)>>2]=-1}g=g+32|0;h=c[g>>2]|0;if((h|0)<=-1)break;else e=o}}while(0);a=a+32|0;if((c[a>>2]|0)<=-1){g=0;break}}else g=0;while(0);return g|0}function RM(a){a=a|0;return c[a+12>>2]|0}function SM(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[f>>2]=b;c[e>>2]=c[f>>2];b=_M(a,e)|0;l=d;return b|0}function TM(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[f>>2]=b;c[e>>2]=c[f>>2];b=_M(a,e)|0;l=d;return b|0}function UM(a){a=a|0;var b=0,d=0;b=c[a+16>>2]|0;d=a+12|0;a=(c[d>>2]|0)+-1|0;c[d>>2]=a;return c[b+(a<<2)>>2]|0}function VM(a){a=a|0;var b=0,d=0;b=c[a+16>>2]|0;d=a+12|0;a=(c[d>>2]|0)+-1|0;c[d>>2]=a;return c[b+(a<<2)>>2]|0}function WM(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;a=EM(a,0,0,1,64)|0;if(!a)a=0;else{c[a>>2]=b;c[a+4>>2]=d;c[a+8>>2]=e;c[a+20>>2]=f;c[a+24>>2]=g;c[a+28>>2]=h;c[a+32>>2]=-1;c[a+36>>2]=-1;c[a+40>>2]=-1}return a|0}function XM(a){a=a|0;a=EM(a,0,0,1,32)|0;if(!a)a=0;else{c[a>>2]=-1;c[a+4>>2]=-1;c[a+8>>2]=-1}return a|0}function YM(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=(e|0)==0;if(o)n=0;else{g=0;while(1)if((c[e+(g<<2)>>2]|0)>-1)g=g+1|0;else{n=g;break}}h=0;while(1)if((c[b+(h<<5)>>2]|0)>-1)h=h+1|0;else{g=0;break}while(1)if((c[d+(g<<5)>>2]|0)>-1)g=g+1|0;else break;g=EM(a,0,0,1,(g+h<<5)+32|0)|0;a:do if(!g)g=0;else{h=c[b>>2]|0;if((h|0)>-1){m=(n|0)>0;i=0;while(1){c[g+(i<<5)>>2]=h;c[g+(i<<5)+4>>2]=c[b+(i<<5)+4>>2];c[g+(i<<5)+8>>2]=c[b+(i<<5)+8>>2];c[g+(i<<5)+16>>2]=c[b+(i<<5)+16>>2]|f;c[g+(i<<5)+20>>2]=c[b+(i<<5)+20>>2];c[g+(i<<5)+24>>2]=c[b+(i<<5)+24>>2];c[g+(i<<5)+28>>2]=c[b+(i<<5)+28>>2];l=b+(i<<5)+12|0;j=c[l>>2]|0;h=(j|0)==0;if(o&h)h=0;else{if(h)k=0;else{h=0;while(1)if((c[j+(h<<2)>>2]|0)>-1)h=h+1|0;else{k=h;break}}h=EM(a,0,0,0,(k+n<<2)+4|0)|0;if(!h){g=0;break a}if((k|0)>0){l=c[l>>2]|0;j=0;do{c[h+(j<<2)>>2]=c[l+(j<<2)>>2];j=j+1|0}while((j|0)!=(k|0))}else k=0;if(m){j=0;do{c[h+(j+k<<2)>>2]=c[e+(j<<2)>>2];j=j+1|0}while((j|0)!=(n|0));j=n}else j=0;c[h+(j+k<<2)>>2]=-1}c[g+(i<<5)+12>>2]=h;i=i+1|0;h=c[b+(i<<5)>>2]|0;if((h|0)<=-1){n=i;break}}}else n=0;i=c[d>>2]|0;h=g+(n<<5)|0;if((i|0)>-1){m=0;l=n;do{c[h>>2]=i;c[g+(l<<5)+4>>2]=c[d+(m<<5)+4>>2];c[g+(l<<5)+8>>2]=c[d+(m<<5)+8>>2];c[g+(l<<5)+16>>2]=c[d+(m<<5)+16>>2];c[g+(l<<5)+20>>2]=c[d+(m<<5)+20>>2];c[g+(l<<5)+24>>2]=c[d+(m<<5)+24>>2];c[g+(l<<5)+28>>2]=c[d+(m<<5)+28>>2];j=d+(m<<5)+12|0;h=c[j>>2]|0;if(!h)h=0;else{i=0;while(1)if((c[h+(i<<2)>>2]|0)>-1)i=i+1|0;else break;h=EM(a,0,0,0,(i<<2)+4|0)|0;if(!h){g=0;break a}if((i|0)>0){k=c[j>>2]|0;j=0;do{c[h+(j<<2)>>2]=c[k+(j<<2)>>2];j=j+1|0}while((j|0)!=(i|0))}else i=0;c[h+(i<<2)>>2]=-1}c[g+(l<<5)+12>>2]=h;m=m+1|0;i=c[d+(m<<5)>>2]|0;l=m+n|0;h=g+(l<<5)|0}while((i|0)>-1)}c[h>>2]=-1}while(0);return g|0}function ZM(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;o=RM(a)|0;p=(f|0)!=0;if(p)c[f>>2]=0;b=SM(a,b)|0;a:do if(!b){m=(d|0)==0;l=(e|0)==0;if((RM(a)|0)>(o|0))while(1){b=VM(a)|0;b:do switch(c[b>>2]|0){case 0:{b=c[b+4>>2]|0;switch(c[b>>2]|0){case -3:break;case -2:{if(l)break b;c[e>>2]=c[e>>2]|c[b+4>>2];break b}default:break b}h=c[b+4>>2]|0;if((h|0)>-1){c:do if(!m){b=0;while(1){i=d+(b<<2)|0;j=c[i>>2]|0;if((j|0)<=-1)break;if((j|0)==(h|0))break c;else b=b+1|0}c[i>>2]=h;c[d+(b+1<<2)>>2]=-1}while(0);if(p)c[f>>2]=(c[f>>2]|0)+1}break}case 3:{b=c[b+4>>2]|0;h=c[b>>2]|0;if(c[h+8>>2]|0){k=h;n=6;break b}b=c[b+4>>2]|0;if(c[b+8>>2]|0){k=b;n=6}break}case 1:{b=c[b+4>>2]|0;h=SM(a,c[b>>2]|0)|0;if(h|0){g=h;break a}k=c[b+4>>2]|0;n=6;break}case 2:{b=c[c[b+4>>2]>>2]|0;if(c[b+8>>2]|0){k=b;n=6}break}default:{}}while(0);if((n|0)==6?(n=0,g=SM(a,k)|0,g|0):0)break a;if((RM(a)|0)<=(o|0)){g=0;break a}}else g=0}else g=b;while(0);return g|0}function _M(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+16|0;g=k;d=a+12|0;e=c[d>>2]|0;j=c[a>>2]|0;if((e|0)>=(j|0)){d=c[a+4>>2]|0;if((j|0)<(d|0)?(f=(c[a+8>>2]|0)+j|0,f=(f|0)>(d|0)?d:f,h=a+16|0,i=bJ(c[h>>2]|0,f<<2)|0,(i|0)!=0):0){c[a>>2]=f;c[h>>2]=i;c[g>>2]=c[b>>2];_M(a,g)|0;d=0}else d=12}else{c[(c[a+16>>2]|0)+(e<<2)>>2]=c[b>>2];c[d>>2]=(c[d>>2]|0)+1;d=0}l=k;return d|0}function $M(a,b,d){a=a|0;b=b|0;d=d|0;a=EM(a,0,0,1,32)|0;if((d|0)!=0&(a|0)!=0){c[a+4>>2]=d;c[a>>2]=b;c[a+8>>2]=-1;c[a+12>>2]=-1}else a=0;return a|0}function aN(b,d,e,f,g,h,i,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=RM(d)|0;SM(d,e)|0;e=TM(d,0)|0;a:do if(!e){q=(f&1|0)==0;p=(f&2|0)!=0;o=0;l=1;e=i;while(1){if((RM(d)|0)>(r|0))n=e;else{f=o;e=0;break a}b:while(1){c:while(1){switch(UM(d)|0){case 1:{i=7;break c}case 0:{e=VM(d)|0;switch(c[e>>2]|0){case 0:{i=9;break b}case 3:{i=19;break b}case 1:{i=26;break b}case 2:{i=33;break c}default:{}}break}default:{}}if((RM(d)|0)<=(r|0)){f=o;e=0;break a}}if((i|0)==7)e=VM(d)|0;else if((i|0)==33){f=c[e+4>>2]|0;e=SM(d,c[f>>2]|0)|0;if(e|0){f=o;break a}e=TM(d,0)|0;if(e|0){f=o;break a}e=bN(b,c[f>>2]|0,c[f+4>>2]|0,c[f+8>>2]|0,a[f+12>>0]&1)|0;c[n>>2]=e;if(!e){f=o;e=12;break a}e=c[e+4>>2]|0}if((RM(d)|0)>(r|0))n=e;else{f=o;e=0;break a}}if((i|0)==9){m=c[e+4>>2]|0;i=c[m+8>>2]|0;f=c[m>>2]|0;e=c[m+4>>2]|0;if(!((f|0)>-1|(f|0)==-4))if(q|(f|0)!=-3)if((f|0)==-3)if(p&(l|0)!=0){c[h+(e<<2)>>2]=1;f=-3;k=o;l=0}else{f=-3;k=o}else k=o;else{e=-1;f=-1;i=-1;k=o}else{i=(c[g>>2]|0)+i|0;k=o+1|0}e=LM(b,f,e,i)|0;c[n>>2]=e;if(!e)e=12;else{e=c[e+4>>2]|0;c[e+12>>2]=c[m+12>>2];c[e+16>>2]=c[m+16>>2];e=0}if((i|0)>(c[j>>2]|0)){c[j>>2]=i;f=n}else f=n}else if((i|0)==19){i=c[e+4>>2]|0;f=i+4|0;e=cN(b,c[i>>2]|0,c[f>>2]|0)|0;c[n>>2]=e;if(!e){f=o;e=12;break a}m=c[e+4>>2]|0;e=SM(d,c[f>>2]|0)|0;if(e|0){f=o;break a}e=TM(d,0)|0;if(e|0){f=o;break a}e=SM(d,m+4|0)|0;if(e|0){f=o;break a}e=TM(d,1)|0;if(e|0){f=o;break a}e=SM(d,c[i>>2]|0)|0;if(e|0){f=o;break a}k=o;f=m;e=TM(d,0)|0}else if((i|0)==26){m=c[e+4>>2]|0;i=m+4|0;e=MM(b,c[m>>2]|0,c[i>>2]|0)|0;c[n>>2]=e;if(!e){f=o;e=12;break a}f=c[e+4>>2]|0;c[f>>2]=0;k=f+4|0;c[k>>2]=0;e=SM(d,c[i>>2]|0)|0;if(e|0){f=o;break a}e=TM(d,0)|0;if(e|0){f=o;break a}e=SM(d,k)|0;if(e|0){f=o;break a}e=TM(d,1)|0;if(e|0){f=o;break a}e=SM(d,c[m>>2]|0)|0;if(e|0){f=o;break a}k=o;e=TM(d,0)|0}if(!e){o=k;e=f}else{f=k;break}}}else f=0;while(0);c[g>>2]=(c[g>>2]|0)+f;return e|0}function bN(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0;h=EM(b,0,0,1,16)|0;b=$M(b,2,h)|0;if(!b)b=0;else{c[h>>2]=d;c[h+4>>2]=e;c[h+8>>2]=f;h=h+12|0;a[h>>0]=a[h>>0]&-2|g&1;c[b+16>>2]=c[d+16>>2]}return b|0}function cN(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;if(b){e=EM(a,0,0,1,8)|0;a=$M(a,3,e)|0;if((d|0)!=0&(a|0)!=0){c[e>>2]=b;c[e+4>>2]=d;c[a+16>>2]=(c[d+16>>2]|0)+(c[b+16>>2]|0);d=a}else d=0}return d|0}function dN(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=EM(a,0,0,0,8)|0;if(((e|0)!=0?(d=LM(a,-3,d,-1)|0,c[e>>2]=d,(d|0)!=0):0)?(f=EM(a,0,0,0,32)|0,c[e+4>>2]=f,(f|0)!=0):0){a=b+4|0;c[f+4>>2]=c[a>>2];c[f>>2]=c[b>>2];c[f+8>>2]=-1;c[f+12>>2]=-1;f=f+16|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[a>>2]=e;c[b>>2]=1;a=0}else a=12;return a|0}function eN(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=c[a>>2]|0;if((f|0)>-1){g=c[b+16>>2]|0;e=0;b=f;do{f=b>>>1;c[((b&1|0)==0?g+(f*12|0)|0:g+(f*12|0)+4|0)>>2]=d;e=e+1|0;b=c[a+(e<<2)>>2]|0}while((b|0)>-1)}c[a>>2]=-1;return}function fN(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=EM(a,0,0,0,8)|0;if(((e|0)!=0?(d=LM(a,-3,d,-1)|0,c[e+4>>2]=d,(d|0)!=0):0)?(f=EM(a,0,0,0,32)|0,c[e>>2]=f,(f|0)!=0):0){a=b+4|0;c[f+4>>2]=c[a>>2];c[f>>2]=c[b>>2];c[f+8>>2]=-1;c[f+12>>2]=-1;f=f+16|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[a>>2]=e;c[b>>2]=1;a=0}else a=12;return a|0}function gN(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;m=l;l=l+16|0;j=m;i=b+32|0;h=c[i>>2]|0;g=h&1;a:do switch(a[d>>0]|0){case 91:{e=kN(b,d+1|0)|0;break}case 92:{e=d+1|0;f=lN(e)|0;if(f|0){e=gN(b,f)|0;c[b+12>>2]=d+2;break a}f=a[e>>0]|0;switch(f|0){case 0:{e=5;break a}case 98:{f=LM(c[b>>2]|0,-2,64,-1)|0;break}case 66:{f=LM(c[b>>2]|0,-2,128,-1)|0;break}case 60:{f=LM(c[b>>2]|0,-2,16,-1)|0;break}case 62:{f=LM(c[b>>2]|0,-2,32,-1)|0;break}case 120:{h=d+2|0;i=(a[h>>0]|0)==123;g=i?8:2;h=i?d+3|0:h;e=0;f=0;do{d=mN(a[h+e>>0]|0)|0;if((d|0)<0)break;f=d+(f<<4)|0;e=e+1|0}while((f|0)<1114112&(e|0)<(g|0));e=h+e|0;if(i){if((a[e>>0]|0)!=125){e=9;break a}e=e+1|0}j=c[b>>2]|0;i=b+24|0;k=c[i>>2]|0;c[i>>2]=k+1;f=LM(j,f,f,k)|0;e=e+-1|0;break}case 63:case 43:case 123:if(!g){e=13;break a}else{k=37;break a}case 124:{if(g|0){k=37;break a}e=LM(c[b>>2]|0,-1,-1,-1)|0;k=45;break a}default:{if(!((g|0)==0&(f+-49|0)>>>0<9)){k=37;break a}j=f+-48|0;k=c[b>>2]|0;i=b+24|0;f=c[i>>2]|0;c[i>>2]=f+1;f=LM(k,-4,j,f)|0;k=b+28|0;i=c[k>>2]|0;c[k>>2]=(j|0)<(i|0)?i:j}}d=e+1|0;e=f;k=45;break}case 46:{e=c[b>>2]|0;g=b+24|0;f=c[g>>2]|0;c[g>>2]=f+1;if(h&4){f=LM(e,0,9,f)|0;k=c[b>>2]|0;e=c[g>>2]|0;c[g>>2]=e+1;e=LM(k,11,1114111,e)|0;if((f|0)!=0&(e|0)!=0)e=cN(c[b>>2]|0,f,e)|0;else e=0}else e=LM(e,0,1114111,f)|0;d=d+1|0;k=45;break}case 94:{if((g|0)==0?(c[b+16>>2]|0)!=(d|0):0){e=d;k=37;break a}d=d+1|0;e=LM(c[b>>2]|0,-2,1,-1)|0;k=45;break}case 36:{e=d+1|0;if((g|0)==0?a[e>>0]|0:0){e=d;k=37;break a}d=e;e=LM(c[b>>2]|0,-2,2,-1)|0;k=45;break}case 63:case 43:case 123:case 42:{if(!g){e=d;k=37}else e=13;break}case 124:{if(!g){e=d;k=37}else k=36;break}case 0:{k=36;break}default:{e=d;k=37}}while(0);if((k|0)==36){e=LM(c[b>>2]|0,-1,-1,-1)|0;k=45}else if((k|0)==37){h=VL(j,e,-1)|0;if((h|0)<0)e=2;else{do if(c[i>>2]&2){if((JK(c[j>>2]|0)|0)==0?(IK(c[j>>2]|0)|0)==0:0){k=43;break}i=c[b>>2]|0;n=mK(c[j>>2]|0)|0;g=mK(c[j>>2]|0)|0;f=b+24|0;g=LM(i,n,g,c[f>>2]|0)|0;n=c[b>>2]|0;i=LK(c[j>>2]|0)|0;d=LK(c[j>>2]|0)|0;d=LM(n,i,d,c[f>>2]|0)|0;if((g|0)!=0&(d|0)!=0)g=cN(c[b>>2]|0,g,d)|0;else g=0}else k=43;while(0);if((k|0)==43){g=c[j>>2]|0;f=b+24|0;g=LM(c[b>>2]|0,g,g,c[f>>2]|0)|0}c[f>>2]=(c[f>>2]|0)+1;d=e+h|0;e=g;k=45}}if((k|0)==45)if(!e)e=12;else{c[b+8>>2]=e;c[b+12>>2]=d;e=0}l=m;return e|0}function hN(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;j=l;l=l+16|0;i=j+4|0;g=j;b=jN(b,i)|0;if((a[b>>0]|0)==44){b=jN(b+1|0,g)|0;h=c[g>>2]|0;g=c[i>>2]|0}else{i=c[i>>2]|0;c[g>>2]=i;h=i;g=i}do if(!(g>>>0>255|((h|0)>255|(h|0)>-1&(h|0)<(g|0)))){if(!d)if((a[b>>0]|0)==92)b=b+1|0;else{b=0;break}if((a[b>>0]|0)==125){c[e>>2]=g;c[f>>2]=h;b=b+1|0}else b=0}else b=0;while(0);l=j;return b|0}function iN(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;if((c[b+12>>2]|0)>-1){e=LM(c[a>>2]|0,-1,-1,-1)|0;if((e|0)!=0?(f=MM(c[a>>2]|0,e,b)|0,(f|0)!=0):0){e=c[b+16>>2]|0;c[f+16>>2]=e;g=6}else e=12}else{f=b;e=c[b+16>>2]|0;g=6}if((g|0)==6){c[f+12>>2]=d;c[f+16>>2]=e+1;c[a+8>>2]=f;e=0}return e|0}function jN(b,d){b=b|0;d=d|0;var e=0;c[d>>2]=-1;a:do if($J(a[b>>0]|0)|0){c[d>>2]=0;e=0;do{c[d>>2]=(e*10|0)+-48+(a[b>>0]|0);b=b+1|0;if(!($J(a[b>>0]|0)|0))break a;e=c[d>>2]|0}while((e|0)<=255)}while(0);return b|0}function kN(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+288|0;e=s+264|0;g=s;c[e>>2]=c[b>>2];h=e+8|0;c[h>>2]=0;c[e+12>>2]=32;p=_I(128)|0;r=e+4|0;c[r>>2]=p;if(!p)d=12;else{f=g+4|0;c[f>>2]=0;p=(a[d>>0]|0)==94;c[g>>2]=p&1;d=nN(b,p?d+1|0:d,e,g)|0;a:do if(!d){p=(c[g>>2]|0)==0;if(!p){sL(c[r>>2]|0,c[h>>2]|0,4,41);d=pN(e)|0;if(!d){d=12;e=0;break}c[d>>2]=1114112;c[d+4>>2]=1114112;c[d+8>>2]=-1;d=c[f>>2]|0;if(d){e=d<<2;f=EM(c[b>>2]|0,0,0,0,e+4|0)|0;if(!f){d=12;e=0;break}UN(f|0,g+8|0,e|0)|0;c[f+(d<<2)>>2]=0}else f=0}else f=0;m=c[h>>2]|0;if((m|0)>0){n=c[r>>2]|0;o=b+24|0;e=0;d=0;k=0;while(1){j=c[n+(k<<2)>>2]|0;g=c[j>>2]|0;h=j+4|0;i=c[h>>2]|0;do if(!p)if((g|0)>(d|0)){c[j>>2]=d;c[h>>2]=g+-1;d=i+1|0;q=14;break}else{j=i+1|0;d=(j|0)>=(d|0)?j:d;break}else q=14;while(0);if((q|0)==14){q=0;c[j+8>>2]=c[o>>2];c[j+16>>2]=f;j=$M(c[b>>2]|0,0,j)|0;e=cN(c[b>>2]|0,e,j)|0;if(!e){d=12;e=0;break a}}k=k+1|0;if((k|0)>=(m|0)){d=0;break}}}else{d=0;e=0}}else e=0;while(0);$I(c[r>>2]|0);r=b+24|0;c[r>>2]=(c[r>>2]|0)+1;c[b+8>>2]=e}l=s;return d|0}function lN(b){b=b|0;var d=0;d=a[b>>0]|0;b=0;while(1){if((a[56576+(b<<3)>>0]|0)==d<<24>>24)break;b=b+1|0;if((b|0)==12){b=12;break}}return c[56576+(b<<3)+4>>2]|0}function mN(a){a=a|0;var b=0;b=a+-48|0;if(b>>>0<10)return b|0;else{b=a|32;return ((b+-97|0)>>>0<6?b+-87|0:-1)|0}return 0}function nN(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=l;l=l+32|0;o=t;q=t+4|0;i=VL(o,d,-1)|0;g=a[d>>0]|0;a:do if((i|0)>=1){r=f+4|0;n=b+32|0;h=d;j=i;b:while(1){i=(h|0)==(d|0);if(!(i|g<<24>>24!=93)){s=5;break}c:do if(!(i|g<<24>>24!=45)){switch(a[h+1>>0]|0){case 93:break c;case 45:break;default:{g=11;break a}}if((a[h+2>>0]|0)==93){g=11;break a}}while(0);d:do if(g<<24>>24==91){switch(a[h+1>>0]|0){case 61:case 46:{g=3;break a}case 58:break;default:{s=17;break d}}i=h+2|0;g=0;e:while(1){switch(a[i+g>>0]|0){case 0:{s=16;break b}case 58:break e;default:{}}if((g|0)<13)g=g+1|0;else{s=16;break b}}UN(q|0,i|0,g|0)|0;a[q+g>>0]=0;j=bL(q)|0;if(!j){s=16;break b}h=i+(g+2)|0;if((a[i+(g+1)>>0]|0)!=93){s=16;break b}if(!(c[f>>2]|0)){g=1114111;m=0;k=1;s=25}else{g=c[r>>2]|0;if((g|0)>63){g=12;break a}c[r>>2]=g+1;c[f+8+(g<<2)>>2]=j}}else s=17;while(0);if((s|0)==17){s=0;i=c[o>>2]|0;h=h+j|0;if((a[h>>0]|0)==45?(p=h+1|0,(a[p>>0]|0)!=93):0){h=VL(o,p,-1)|0;g=c[o>>2]|0;if((h|0)<1|(i|0)>(g|0)){g=11;break a}j=0;m=i;h=p+h|0;k=0;s=25}else{j=0;g=i;m=i;k=0;s=25}}if((s|0)==25){s=0;i=pN(e)|0;if(!i){g=12;break a}c[i>>2]=m;c[i+4>>2]=g;c[i+12>>2]=j;c[i+8>>2]=-1;if(!(k|(c[n>>2]&2|0)==0)?(qN(e,m,g)|0)!=0:0){g=12;break a}}j=VL(o,h,-1)|0;g=a[h>>0]|0;if((j|0)<1){s=3;break a}}if((s|0)==5){c[b+12>>2]=h+1;g=0;break}else if((s|0)==16){g=4;break}}else s=3;while(0);if((s|0)==3)g=g<<24>>24?2:7;l=t;return g|0}function oN(a,b){a=a|0;b=b|0;return (c[c[a>>2]>>2]|0)-(c[c[b>>2]>>2]|0)|0}function pN(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;h=a+8|0;d=c[h>>2]|0;e=a+12|0;f=c[e>>2]|0;if((d|0)>=(f|0))if((f|0)<=32767?(c[e>>2]=f<<1,g=a+4|0,b=bJ(c[g>>2]|0,f<<3)|0,(b|0)!=0):0){c[g>>2]=b;d=c[h>>2]|0;i=6}else b=0;else{b=c[a+4>>2]|0;i=6}if((i|0)==6){c[h>>2]=d+1;i=EM(c[a>>2]|0,0,0,1,20)|0;c[b+(d<<2)>>2]=i;b=i}return b|0}function qN(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;a:do if((b|0)>(d|0))b=0;else while(1){b:do if(!(IK(b)|0)){if(!(JK(b)|0)){b=b+1|0;break}f=LK(b)|0;e=f;while(1){g=b+1|0;e=e+1|0;if((b|0)>=(d|0)){h=f;b=g;g=12;break b}if((LK(g)|0)==(e|0))b=g;else{h=f;b=g;g=12;break}}}else{f=mK(b)|0;e=f;while(1){g=b+1|0;e=e+1|0;if((b|0)>=(d|0)){h=f;b=g;g=12;break b}if((mK(g)|0)==(e|0))b=g;else{h=f;b=g;g=12;break}}}while(0);if((g|0)==12){g=0;f=pN(a)|0;if(!f){b=-1;break a}c[f>>2]=h;c[f+4>>2]=e+-1;c[f+8>>2]=-1}if((b|0)>(d|0)){b=0;break}}while(0);return b|0}function rN(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+16|0;k=n;i=c[a+4>>2]|0;j=i+56|0;h=(c[j>>2]&8|0)==0?d:0;a=c[i+40>>2]|0;if((a|0)>0&(h|0)!=0){a=_I(a<<2)|0;if(!a)a=12;else{g=a;d=a;m=3}}else{g=0;d=0;m=3}if((m|0)==3){if(!(c[i+60>>2]|0))a=tN(i,b,g,f,k)|0;else a=sN(i,b,g,f,k)|0;if(!a)uN(h,e,c[j>>2]|0,i,g,c[k>>2]|0);if(g)$I(d)}l=n;return a|0}function sN(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0;V=l;l=l+16|0;T=V;c[T>>2]=0;o=e&1;R=e&2;S=a+56|0;n=c[S>>2]&4;U=CM(0,0)|0;a:do if(U){p=EM(U,0,0,0,32)|0;if(!p){DM(U);e=12;break}c[p+24>>2]=0;c[p+28>>2]=0;Q=a+40|0;e=c[Q>>2]|0;if(e){e=_I(e<<2)|0;if(!e){m=0;k=0;j=e;e=12;i=0;h=0;g=0}else{j=e;i=e;C=6}}else{j=0;i=0;C=6}b:do if((C|0)==6){e=c[a+28>>2]|0;if(e){e=_I(e<<3)|0;if(!e){m=e;k=0;e=12;h=0;g=0;break}else{m=e;h=e}}else{m=0;h=0}P=a+52|0;e=c[P>>2]|0;if(e){e=_I(e<<2)|0;if(!e){k=e;e=12;g=0;break}else{k=e;g=e}}else{k=0;g=0}K=a+8|0;L=a+12|0;M=(d|0)==0;N=(d|0)!=0;O=a+32|0;J=(n|0)!=0;I=(o|0)==0;r=b;e=1;q=-1;v=-1;B=0;c:while(1){n=c[Q>>2]|0;if((n|0)>0){o=0;do{c[j+(o<<2)>>2]=-1;if(!M){c[d+(o<<2)>>2]=-1;n=c[Q>>2]|0}o=o+1|0}while((o|0)<(n|0))}n=c[P>>2]|0;if((n|0)>0)WN(g|0,0,n<<2|0)|0;G=e+q|0;e=VL(T,r,4)|0;if((e|0)<1)if((e|0)<0){e=1;break b}else e=1;F=r+e|0;H=c[T>>2]|0;n=c[K>>2]|0;o=n+8|0;if(c[o>>2]|0){w=(G|0)!=0;x=(B|0)==95;y=(G|0)==0;A=J&(B|0)==10;z=(G|0)<1&I;u=n;n=0;t=0;s=o;while(1){r=u+20|0;o=c[r>>2]|0;d:do if(o)if((o&1|0)==0|z|A){if(o&2|0?(E=c[T>>2]|0,!((E|R|0)==0|J&(E|0)==10)):0){q=t;break}do if(o&16|0){if(x){q=t;break d}if(EK(B)|0){q=t;break d}o=c[T>>2]|0;if((o|0)==95)break;if(!(EK(o)|0)){q=t;break d}}while(0);o=c[r>>2]|0;if(o&32){if(x){o=c[T>>2]|0;if((o|0)==95){q=t;break}}else{E=(EK(B)|0)==0;o=c[T>>2]|0;if(E|(o|0)==95){q=t;break}}if(EK(o)|0){q=t;break}o=c[r>>2]|0}q=c[T>>2]|0;do if((q|0)!=0&(w&(o&64|0)!=0)){if(x)o=1;else{o=(EK(B)|0)!=0;q=c[T>>2]|0}if((q|0)==95)if(o){q=t;break d}else break;else if(o^(EK(q)|0)!=0)break;else{q=t;break d}}while(0);if(!(c[r>>2]&128)){C=49;break}o=c[T>>2]|0;if(y|(o|0)==0){q=t;break}if(x)q=1;else{q=(EK(B)|0)!=0;o=c[T>>2]|0}if((o|0)==95)if(q){C=49;break}else{q=t;break}else if(q^(EK(o)|0)!=0){q=t;break}else{C=49;break}}else q=t;else C=49;while(0);do if((C|0)==49){C=0;if(!t){n=c[u+16>>2]|0;q=c[s>>2]|0;break}q=p+28|0;o=c[q>>2]|0;if(!o){o=EM(U,0,0,0,32)|0;if(!o){C=53;break c}c[o+24>>2]=p;c[o+28>>2]=0;E=EM(U,0,0,0,c[Q>>2]<<2)|0;c[o+20>>2]=E;if(!E){C=60;break c}c[q>>2]=o;p=o}else p=o;c[p>>2]=G;c[p+4>>2]=F;c[p+8>>2]=c[s>>2];c[p+12>>2]=c[u+12>>2];c[p+16>>2]=c[T>>2];if((c[Q>>2]|0)>0){q=c[p+20>>2]|0;o=0;do{c[q+(o<<2)>>2]=c[j+(o<<2)>>2];o=o+1|0}while((o|0)<(c[Q>>2]|0))}o=c[u+16>>2]|0;if(!o)q=t;else{q=c[o>>2]|0;if((q|0)<=-1){q=t;break}r=c[p+20>>2]|0;do{o=o+4|0;c[r+(q<<2)>>2]=G;q=c[o>>2]|0}while((q|0)>-1);q=t}}while(0);s=u+40|0;if(!(c[s>>2]|0))break;else{u=u+32|0;t=q}}if(n){o=c[n>>2]|0;if((o|0)>-1)do{c[j+(o<<2)>>2]=G;n=n+4|0;o=c[n>>2]|0}while((o|0)>-1)}else n=0;if(!q)C=171;else{s=G;r=F;w=q;x=n;C=79}}else{n=0;C=171}e:while(1){if((C|0)==79){if((w|0)==(c[L>>2]|0)){if((v|0)>=(s|0)){if(!(N&(v|0)==(s|0))){n=x;C=171;continue}n=c[Q>>2]|0;if(!(wN(n,c[O>>2]|0,j,d)|0)){n=x;C=171;continue}}else{if(M){v=s;n=x;C=171;continue}n=c[Q>>2]|0}if((n|0)>0)n=0;else{v=s;n=x;C=171;continue}while(1){c[d+(n<<2)>>2]=c[j+(n<<2)>>2];n=n+1|0;if((n|0)>=(c[Q>>2]|0)){v=s;n=x;C=171;continue e}}}u=w+8|0;if((c[u>>2]|0)!=0?(c[w+20>>2]&256|0)!=0:0){o=c[w+24>>2]|0;uN(o+1|0,m,c[S>>2]&-9,a,j,s);E=c[m+(o<<3)>>2]|0;o=(c[m+(o<<3)+4>>2]|0)-E|0;if(WJ(b+E|0,r+-1|0,o)|0){n=x;C=171;continue}E=(o|0)==0;n=E&1;q=c[w+12>>2]|0;if(E?c[k+(q<<2)>>2]|0:0){n=x;C=171;continue}c[k+(q<<2)>>2]=n;o=o+-1|0;r=r+o|0;o=o+s|0;q=c[T>>2]|0;n=VL(T,r,4)|0;if((n|0)<1)if((n|0)<0){e=1;break b}else n=1;D=r+n|0;E=n}else{q=c[T>>2]|0;if(!q){n=x;C=171;continue}n=VL(T,r,4)|0;if((n|0)<1)if((n|0)<0){e=1;break b}else n=1;o=s;D=r+n|0;E=n}s=o+e|0;if(!(c[u>>2]|0)){e=E;n=x;C=171;continue}y=(s|0)!=0;z=(q|0)==95;A=(s|0)==0;C=J&(q|0)==10;B=(s|0)<1&I;t=0;n=x;while(1){f:do if((c[w>>2]|0)>>>0<=q>>>0){if((c[w+4>>2]|0)>>>0>>0)break;r=w+20|0;e=c[r>>2]|0;do if(e|0){if(!((e&1|0)==0|B|C))break f;if(e&2|0?(x=c[T>>2]|0,!((x|R|0)==0|J&(x|0)==10)):0)break f;do if(e&16|0){if(z)break f;if(EK(q)|0)break f;e=c[T>>2]|0;if((e|0)==95)break;if(!(EK(e)|0))break f}while(0);e=c[r>>2]|0;if(e&32){if(z){e=c[T>>2]|0;if((e|0)==95)break f}else{x=(EK(q)|0)==0;e=c[T>>2]|0;if(x|(e|0)==95)break f}if(EK(e)|0)break f;e=c[r>>2]|0}o=c[T>>2]|0;do if((o|0)!=0&(y&(e&64|0)!=0)){if(z)e=1;else{e=(EK(q)|0)!=0;o=c[T>>2]|0}if((o|0)==95)if(e)break f;else break;else if(e^(EK(o)|0)!=0)break;else break f}while(0);do if(c[r>>2]&128|0){e=c[T>>2]|0;if(A|(e|0)==0)break f;if(z)o=1;else{o=(EK(q)|0)!=0;e=c[T>>2]|0}if((e|0)==95)if(o)break;else break f;else if(o^(EK(e)|0)!=0)break f;else break}while(0);e=c[r>>2]|0;do if(e&4){if(c[S>>2]&2|0)break;if(!(DK(q,c[w+24>>2]|0)|0))break f;e=c[r>>2]|0}while(0);do if(e&4|0){if(!(c[S>>2]&2))break;x=LK(q)|0;e=w+24|0;if(DK(x,c[e>>2]|0)|0)break;x=mK(q)|0;if(!(DK(x,c[e>>2]|0)|0))break f}while(0);if(!(c[r>>2]&8))break;if(vN(c[w+28>>2]|0,q,c[S>>2]&2)|0)break f}while(0);if(!t){t=c[u>>2]|0;n=c[w+16>>2]|0;break}o=p+28|0;e=c[o>>2]|0;if(!e){e=EM(U,0,0,0,32)|0;if(!e){C=145;break c}c[e+24>>2]=p;c[e+28>>2]=0;x=EM(U,0,0,0,c[Q>>2]<<2)|0;c[e+20>>2]=x;if(!x){C=152;break c}c[o>>2]=e;p=e}else p=e;c[p>>2]=s;c[p+4>>2]=D;c[p+8>>2]=c[u>>2];c[p+12>>2]=c[w+12>>2];c[p+16>>2]=c[T>>2];if((c[Q>>2]|0)>0){o=c[p+20>>2]|0;e=0;do{c[o+(e<<2)>>2]=c[j+(e<<2)>>2];e=e+1|0}while((e|0)<(c[Q>>2]|0))}e=c[w+16>>2]|0;if(!e)break;o=c[e>>2]|0;if((o|0)<=-1)break;r=c[p+20>>2]|0;do{c[r+(o<<2)>>2]=s;e=e+4|0;o=c[e>>2]|0}while((o|0)>-1)}while(0);u=w+40|0;if(!(c[u>>2]|0))break;else w=w+32|0}if(!t){e=E;C=171;continue}if(n){e=c[n>>2]|0;if((e|0)>-1){do{n=n+4|0;c[j+(e<<2)>>2]=s;e=c[n>>2]|0}while((e|0)>-1);q=v;o=D;e=E}else{q=v;o=D;e=E}}else{q=v;o=D;e=E;n=0}}else if((C|0)==171){C=0;r=c[p+24>>2]|0;if(!r)break;t=c[p+8>>2]|0;if(c[t+20>>2]&256|0)c[k+(c[p+12>>2]<<2)>>2]=0;s=c[p>>2]|0;u=c[p+4>>2]|0;c[T>>2]=c[p+16>>2];q=c[Q>>2]|0;if((q|0)>0){p=c[p+20>>2]|0;o=0;do{c[j+(o<<2)>>2]=c[p+(o<<2)>>2];o=o+1|0}while((o|0)<(q|0));p=r;q=v;o=u}else{p=r;q=v;o=u}}r=o;v=q;w=t;x=n;C=79}n=(v|0)>-1;if(n|(c[T>>2]|0)==0){C=180;break}c[T>>2]=H;r=F;q=G;B=H}if((C|0)==53){DM(U);if(j|0)$I(i);if(m|0)$I(h);if(!k){e=12;break a}$I(g);e=12;break a}else if((C|0)==60){DM(U);if(j|0)$I(i);if(m|0)$I(h);if(!k){e=12;break a}$I(g);e=12;break a}else if((C|0)==145){DM(U);if(j|0)$I(i);if(m|0)$I(h);if(!k){e=12;break a}$I(g);e=12;break a}else if((C|0)==152){DM(U);if(j|0)$I(i);if(m|0)$I(h);if(!k){e=12;break a}$I(g);e=12;break a}else if((C|0)==180){c[f>>2]=v;e=(n^1)&1;break}}while(0);DM(U);if(j|0)$I(i);if(m|0)$I(h);if(k)$I(g)}else e=12;while(0);l=V;return e|0} +function tN(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0;W=l;l=l+16|0;T=W;c[T>>2]=0;k=e&1;Q=e&2;R=a+56|0;j=c[R>>2]&4;if(!d)N=0;else N=c[a+40>>2]|0;P=N<<2;i=a+52|0;e=c[i>>2]|0;h=e<<3;g=h+8|0;e=P+12+h+(g+(O(P,e)|0)<<1)|0;U=_I(e)|0;if(!U)e=12;else{WN(U|0,0,e|0)|0;e=U+P|0;m=e&3;m=e+((m|0)==0?0:4-m|0)|0;e=m+g|0;n=e&3;n=e+((n|0)==0?0:4-n|0)|0;e=n+g|0;M=e&3;M=e+((M|0)==0?0:4-M|0)|0;e=M+h|0;g=e&3;i=c[i>>2]|0;h=(i|0)>0;if(h){e=e+((g|0)==0?0:4-g|0)|0;g=0;while(1){c[n+(g<<3)+4>>2]=e;e=e+P|0;c[m+(g<<3)+4>>2]=e;g=g+1|0;if((g|0)>=(i|0))break;else e=e+P|0}if(h){e=0;do{c[M+(e<<3)>>2]=-1;e=e+1|0}while((e|0)<(i|0))}}e=VL(T,b,4)|0;if((e|0)<1)if((e|0)<0)e=1;else{i=1;V=11}else{i=e;V=11}a:do if((V|0)==11){L=a+8|0;K=(j|0)!=0;E=(k|0)==0;F=(N|0)>0;G=a+12|0;H=(N|0)<1;I=a+44|0;J=a+32|0;C=a+36|0;D=(N|0)==0;h=0;v=b+i|0;u=0;j=0;e=-1;g=m;A=U;x=m;w=n;while(1){if((e|0)<0){a=c[L>>2]|0;k=a+8|0;b:do if(c[k>>2]|0){p=(u|0)!=0;q=(h|0)==95;r=(u|0)==0;t=K&(h|0)==10;s=(u|0)<1&E;while(1){c:while(1){o=a+12|0;if((c[M+(c[o>>2]<<3)>>2]|0)>=(u|0))break;n=a+20|0;b=c[n>>2]|0;if(!b){V=46;break}d:do if((b&1|0)==0|s|t){if(b&2|0?(B=c[T>>2]|0,!((B|Q|0)==0|K&(B|0)==10)):0)break;do if(b&16|0){if(q)break d;if(EK(h)|0)break d;b=c[T>>2]|0;if((b|0)==95)break;if(!(EK(b)|0))break d}while(0);b=c[n>>2]|0;if(b&32){if(q){b=c[T>>2]|0;if((b|0)==95)break}else{B=(EK(h)|0)==0;b=c[T>>2]|0;if(B|(b|0)==95)break}if(EK(b)|0)break;b=c[n>>2]|0}m=c[T>>2]|0;do if((m|0)!=0&(p&(b&64|0)!=0)){if(q)b=1;else{b=(EK(h)|0)!=0;m=c[T>>2]|0}if((m|0)==95)if(b)break d;else break;else if(b^(EK(m)|0)!=0)break;else break d}while(0);if(!(c[n>>2]&128)){V=46;break c}b=c[T>>2]|0;if(r|(b|0)==0)break;if(q)m=1;else{m=(EK(h)|0)!=0;b=c[T>>2]|0}if((b|0)==95)if(m){V=46;break c}else break;else if(m^(EK(b)|0)!=0)break;else{V=46;break c}}while(0);k=a+40|0;if(!(c[k>>2]|0))break b;else a=a+32|0}if((V|0)==46){V=0;c[g>>2]=c[k>>2];if(F)WN(c[g+4>>2]|0,-1,P|0)|0;k=c[a+16>>2]|0;if(k|0?(S=c[k>>2]|0,(S|0)>-1):0){m=g+4|0;b=S;do{if((b|0)<(N|0))c[(c[m>>2]|0)+(b<<2)>>2]=u;k=k+4|0;b=c[k>>2]|0}while((b|0)>-1)}k=(c[g>>2]|0)!=(c[G>>2]|0);if(k|H){j=k?j:1;e=k?e:u;k=g+4|0}else{k=g+4|0;j=c[k>>2]|0;e=0;do{c[d+(e<<2)>>2]=c[j+(e<<2)>>2];e=e+1|0}while((e|0)!=(N|0));j=1;e=u}B=c[o>>2]|0;c[M+(B<<3)>>2]=u;c[M+(B<<3)+4>>2]=k;g=g+8|0}k=a+40|0;if(!(c[k>>2]|0))break;else a=a+32|0}}while(0);c[g>>2]=0;g=c[T>>2]|0;if(!g)break;else h=g}else{if(D)break;h=c[T>>2]|0;if(!((g|0)!=(x|0)&(h|0)!=0))break}B=u+i|0;g=VL(T,v,4)|0;if((g|0)<1)if((g|0)<0){e=1;break a}else i=1;else i=g;z=v+i|0;if((j|0)!=0&(c[I>>2]|0)!=0){if(!(c[x>>2]|0))g=w;else{o=c[C>>2]|0;p=c[o>>2]|0;q=(p|0)>-1;n=x;g=w;do{m=n+4|0;e:do if(q){k=0;b=p;do{a=c[o+((k|1)<<2)>>2]|0;if((b|0)>=(N|0))break e;j=c[m>>2]|0;if((c[j+(a<<2)>>2]|0)==(c[d+(a<<2)>>2]|0)?(c[j+(b<<2)>>2]|0)<(c[d+(b<<2)>>2]|0):0)break e;k=k+2|0;b=c[o+(k<<2)>>2]|0}while((b|0)>-1);k=m;V=75}else{k=m;j=c[m>>2]|0;V=75}while(0);if((V|0)==75){V=0;c[g>>2]=c[n>>2];v=g+4|0;y=c[v>>2]|0;c[v>>2]=j;c[k>>2]=y;g=g+8|0}n=n+8|0}while((c[n>>2]|0)!=0)}c[g>>2]=0;y=x;j=0}else{y=w;w=x}k=c[w>>2]|0;if(!k){k=A;g=y}else{r=(B|0)!=0;s=(h|0)==95;t=(B|0)==0;v=K&(h|0)==10;u=(B|0)<1&E;q=w;a=A;g=y;while(1){b=k+8|0;if(c[b>>2]|0){p=q+4|0;o=a;n=b;while(1){f:do if((c[k>>2]|0)>>>0<=h>>>0?(c[k+4>>2]|0)>>>0>=h>>>0:0){m=k+20|0;a=c[m>>2]|0;do if(a|0){if(!((a&1|0)==0|u|v)){a=o;break f}if(a&2|0?(A=c[T>>2]|0,!((A|Q|0)==0|K&(A|0)==10)):0){a=o;break f}do if(a&16|0){if(s){a=o;break f}if(EK(h)|0){a=o;break f}a=c[T>>2]|0;if((a|0)==95)break;if(!(EK(a)|0)){a=o;break f}}while(0);a=c[m>>2]|0;if(a&32){if(s){a=c[T>>2]|0;if((a|0)==95){a=o;break f}}else{A=(EK(h)|0)==0;a=c[T>>2]|0;if(A|(a|0)==95){a=o;break f}}if(EK(a)|0){a=o;break f}a=c[m>>2]|0}b=c[T>>2]|0;do if((b|0)!=0&(r&(a&64|0)!=0)){if(s)a=1;else{a=(EK(h)|0)!=0;b=c[T>>2]|0}if((b|0)==95)if(a){a=o;break f}else break;else if(a^(EK(b)|0)!=0)break;else{a=o;break f}}while(0);do if(c[m>>2]&128|0){a=c[T>>2]|0;if(t|(a|0)==0){a=o;break f}if(s)b=1;else{b=(EK(h)|0)!=0;a=c[T>>2]|0}if((a|0)==95)if(b)break;else{a=o;break f}else if(b^(EK(a)|0)!=0){a=o;break f}else break}while(0);a=c[m>>2]|0;do if(a&4){if(c[R>>2]&2|0)break;if(!(DK(h,c[k+24>>2]|0)|0)){a=o;break f}a=c[m>>2]|0}while(0);do if(a&4|0){if(!(c[R>>2]&2))break;A=LK(h)|0;a=k+24|0;if(DK(A,c[a>>2]|0)|0)break;A=mK(h)|0;if(!(DK(A,c[a>>2]|0)|0)){a=o;break f}}while(0);if(!(c[m>>2]&8))break;if(vN(c[k+28>>2]|0,h,c[R>>2]&2)|0){a=o;break f}}while(0);if(F){b=c[p>>2]|0;a=0;do{c[o+(a<<2)>>2]=c[b+(a<<2)>>2];a=a+1|0}while((a|0)!=(N|0))}a=c[k+16>>2]|0;do if(a|0){b=c[a>>2]|0;if((b|0)<=-1)break;do{if((b|0)<(N|0))c[o+(b<<2)>>2]=B;a=a+4|0;b=c[a>>2]|0}while((b|0)>-1)}while(0);a=c[k+12>>2]|0;b=M+(a<<3)|0;if((c[b>>2]|0)>=(B|0)){a=c[M+(a<<3)+4>>2]|0;b=c[a>>2]|0;if(!(wN(N,c[J>>2]|0,o,b)|0)){a=o;break}c[a>>2]=o;if((c[n>>2]|0)!=(c[G>>2]|0)){a=b;break}if(F)e=0;else{j=1;a=b;e=B;break}while(1){c[d+(e<<2)>>2]=c[o+(e<<2)>>2];e=e+1|0;if((e|0)==(N|0)){j=1;a=b;e=B;break f}}}A=c[n>>2]|0;c[g>>2]=A;x=g+4|0;m=c[x>>2]|0;c[x>>2]=o;c[b>>2]=B;c[M+(a<<3)+4>>2]=x;do if((c[G>>2]|0)==(A|0)){if((e|0)==-1)if(F)e=0;else{e=B;j=1;break}else{if(!F)break;if((c[o>>2]|0)>(c[d>>2]|0))break;else e=0}do{c[d+(e<<2)>>2]=c[o+(e<<2)>>2];e=e+1|0}while((e|0)<(N|0));e=B;j=1}while(0);a=m;g=g+8|0}else a=o;while(0);n=k+40|0;if(!(c[n>>2]|0))break;else{k=k+32|0;o=a}}}q=q+8|0;k=c[q>>2]|0;if(!k){k=a;break}}}c[g>>2]=0;v=z;u=B;A=k;x=y}c[f>>2]=e;e=e>>>31}while(0);$I(U)}l=W;return e|0}function uN(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;if((d&8|0)==0&(g|0)>-1?(m=c[e+16>>2]|0,n=c[e+28>>2]|0,l=(a|0)!=0&(n|0)!=0,l):0){k=c[e+48>>2]|0;j=0;do{d=c[m+(j*12|0)>>2]|0;if((d|0)==(k|0))i=g;else i=c[f+(d<<2)>>2]|0;h=b+(j<<3)|0;c[h>>2]=i;d=c[m+(j*12|0)+4>>2]|0;if((d|0)==(k|0))d=g;else d=c[f+(d<<2)>>2]|0;e=b+(j<<3)+4|0;c[e>>2]=d;if((d|0)==-1|(i|0)==-1){c[e>>2]=-1;c[h>>2]=-1}j=j+1|0}while(j>>>0>>0&j>>>0>>0);if(l){d=0;do{i=b+(d<<3)+4|0;j=c[m+(d*12|0)+8>>2]|0;if(j|0?(o=c[j>>2]|0,(o|0)>-1):0){k=b+(d<<3)|0;h=0;f=o;e=c[k>>2]|0;do{if(!((e|0)>=(c[b+(f<<3)>>2]|0)?(c[i>>2]|0)<=(c[b+(f<<3)+4>>2]|0):0)){c[i>>2]=-1;c[k>>2]=-1;e=-1}h=h+1|0;f=c[j+(h<<2)>>2]|0}while((f|0)>-1)}d=d+1|0}while(d>>>0>>0&d>>>0>>0)}else d=0}else d=0;if(d>>>0>>0)WN(b+(d<<3)|0,-1,a-d<<3|0)|0;return}function vN(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=c[a>>2]|0;a:do if(!e)d=0;else{f=(d|0)==0;d=e;while(1){if(f){if(DK(b,d)|0){d=1;break a}}else{e=mK(b)|0;if(DK(e,c[a>>2]|0)|0){d=1;break a}e=LK(b)|0;if(DK(e,c[a>>2]|0)|0){d=1;break a}}a=a+4|0;d=c[a>>2]|0;if(!d){d=0;break}}}while(0);return d|0}function wN(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;a:do if((a|0)>0){f=0;while(1){h=c[d+(f<<2)>>2]|0;g=c[e+(f<<2)>>2]|0;if(!(c[b+(f<<2)>>2]|0)){if((h|0)<(g|0)){f=1;break a}if((h|0)>(g|0)){f=0;break a}}else{if((h|0)>(g|0)){f=1;break a}if((h|0)<(g|0)){f=0;break a}}f=f+1|0;if((f|0)>=(a|0)){f=0;break}}}else f=0;while(0);return f|0}function xN(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0;k=O(e,d)|0;e=(d|0)==0?0:e;if((c[f+76>>2]|0)>-1)j=PK(f)|0;else j=0;g=f+74|0;h=a[g>>0]|0;a[g>>0]=h+255|h;g=f+4|0;h=c[g>>2]|0;i=(c[f+8>>2]|0)-h|0;if((i|0)>0){i=i>>>0>>0?i:k;UN(b|0,h|0,i|0)|0;c[g>>2]=(c[g>>2]|0)+i;g=k-i|0;b=b+i|0}else g=k;a:do if(!g)l=13;else{i=f+32|0;while(1){if(fK(f)|0)break;h=bb[c[i>>2]&31](f,b,g)|0;if((h+1|0)>>>0<2)break;g=g-h|0;if(!g){l=13;break a}else b=b+h|0}if(j|0)QK(f);e=((k-g|0)>>>0)/(d>>>0)|0}while(0);if((l|0)==13)if(j)QK(f);return e|0}function yN(a){a=a|0;var b=0;if((c[a+76>>2]|0)>-1){b=(PK(a)|0)==0;a=zN(a)|0}else a=zN(a)|0;return a|0}function zN(a){a=a|0;var b=0;if(!(c[a>>2]&128))b=1;else b=(c[a+20>>2]|0)>>>0>(c[a+28>>2]|0)>>>0?2:1;b=bb[c[a+40>>2]&31](a,0,b)|0;if((b|0)>=0)b=b-(c[a+8>>2]|0)+(c[a+4>>2]|0)+(c[a+20>>2]|0)-(c[a+28>>2]|0)|0;return b|0}function AN(a){a=a|0;(c[a+76>>2]|0)>-1?PK(a)|0:0;return c[a+60>>2]|0}function BN(){var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+48|0;i=k+24|0;h=k+16|0;g=k;d=k+28|0;b=d;e=134988;f=b+20|0;do{a[b>>0]=a[e>>0]|0;b=b+1|0;e=e+1|0}while((b|0)<(f|0));e=d+13|0;b=0;while(1){BL(e)|0;c[g>>2]=d;c[g+4>>2]=32962;c[g+8>>2]=384;f=jJ(Ba(5,g|0)|0)|0;if((f|0)>-1){j=4;break}if((b|0)<99)b=b+1|0;else{b=0;break}}if((j|0)==4){c[h>>2]=d;sa(10,h|0)|0;b=TL(f,135008)|0;if(!b){c[i>>2]=f;Da(6,i|0)|0;b=0}}l=k;return b|0}function CN(a){a=a|0;var b=0,e=0,f=0;if((c[a+76>>2]|0)>=0?(PK(a)|0)!=0:0){b=a+4|0;e=c[b>>2]|0;if(e>>>0<(c[a+8>>2]|0)>>>0){c[b>>2]=e+1;b=d[e>>0]|0}else b=eK(a)|0}else f=3;do if((f|0)==3){b=a+4|0;e=c[b>>2]|0;if(e>>>0<(c[a+8>>2]|0)>>>0){c[b>>2]=e+1;b=d[e>>0]|0;break}else{b=eK(a)|0;break}}while(0);return b|0}function DN(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;if((c[d+76>>2]|0)>=0?(PK(d)|0)!=0:0){f=b&255;e=b&255;if((e|0)!=(a[d+75>>0]|0)?(i=d+20|0,j=c[i>>2]|0,j>>>0<(c[d+16>>2]|0)>>>0):0){c[i>>2]=j+1;a[j>>0]=f}else e=ZL(d,b)|0;QK(d)}else k=3;do if((k|0)==3){f=b&255;e=b&255;if((e|0)!=(a[d+75>>0]|0)?(g=d+20|0,h=c[g>>2]|0,h>>>0<(c[d+16>>2]|0)>>>0):0){c[g>>2]=h+1;a[h>>0]=f;break}e=ZL(d,b)|0}while(0);return e|0}function EN(a){a=a|0;return yN(a)|0}function FN(){}function GN(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;f=a&65535;e=b&65535;c=O(e,f)|0;d=a>>>16;a=(c>>>16)+(O(e,d)|0)|0;e=b>>>16;b=O(e,f)|0;return (z=(a>>>16)+(O(e,d)|0)+(((a&65535)+b|0)>>>16)|0,a+b<<16|c&65535|0)|0}function HN(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=a;f=c;c=GN(e,f)|0;a=z;return (z=(O(b,f)|0)+(O(d,e)|0)+a|a&0,c|0|0)|0}function IN(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;c=a+c>>>0;return (z=b+d+(c>>>0>>0|0)>>>0,c|0)|0}function JN(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;d=b-d-(c>>>0>a>>>0|0)>>>0;return (z=d,a-c>>>0|0)|0}function KN(b){b=b|0;var c=0;c=a[n+(b&255)>>0]|0;if((c|0)<8)return c|0;c=a[n+(b>>8&255)>>0]|0;if((c|0)<8)return c+8|0;c=a[n+(b>>16&255)>>0]|0;if((c|0)<8)return c+16|0;return (a[n+(b>>>24)>>0]|0)+24|0}function LN(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;l=a;j=b;k=j;h=d;n=e;i=n;if(!k){g=(f|0)!=0;if(!i){if(g){c[f>>2]=(l>>>0)%(h>>>0);c[f+4>>2]=0}n=0;f=(l>>>0)/(h>>>0)>>>0;return (z=n,f)|0}else{if(!g){n=0;f=0;return (z=n,f)|0}c[f>>2]=a|0;c[f+4>>2]=b&0;n=0;f=0;return (z=n,f)|0}}g=(i|0)==0;do if(h){if(!g){g=(R(i|0)|0)-(R(k|0)|0)|0;if(g>>>0<=31){m=g+1|0;i=31-g|0;b=g-31>>31;h=m;a=l>>>(m>>>0)&b|k<>>(m>>>0)&b;g=0;i=l<>2]=a|0;c[f+4>>2]=j|b&0;n=0;f=0;return (z=n,f)|0}g=h-1|0;if(g&h|0){i=(R(h|0)|0)+33-(R(k|0)|0)|0;p=64-i|0;m=32-i|0;j=m>>31;o=i-32|0;b=o>>31;h=i;a=m-1>>31&k>>>(o>>>0)|(k<>>(i>>>0))&b;b=b&k>>>(i>>>0);g=l<>>(o>>>0))&j|l<>31;break}if(f|0){c[f>>2]=g&l;c[f+4>>2]=0}if((h|0)==1){o=j|b&0;p=a|0|0;return (z=o,p)|0}else{p=KN(h|0)|0;o=k>>>(p>>>0)|0;p=k<<32-p|l>>>(p>>>0)|0;return (z=o,p)|0}}else{if(g){if(f|0){c[f>>2]=(k>>>0)%(h>>>0);c[f+4>>2]=0}o=0;p=(k>>>0)/(h>>>0)>>>0;return (z=o,p)|0}if(!l){if(f|0){c[f>>2]=0;c[f+4>>2]=(k>>>0)%(i>>>0)}o=0;p=(k>>>0)/(i>>>0)>>>0;return (z=o,p)|0}g=i-1|0;if(!(g&i)){if(f|0){c[f>>2]=a|0;c[f+4>>2]=g&k|b&0}o=0;p=k>>>((KN(i|0)|0)>>>0);return (z=o,p)|0}g=(R(i|0)|0)-(R(k|0)|0)|0;if(g>>>0<=30){b=g+1|0;i=31-g|0;h=b;a=k<>>(b>>>0);b=k>>>(b>>>0);g=0;i=l<>2]=a|0;c[f+4>>2]=j|b&0;o=0;p=0;return (z=o,p)|0}while(0);if(!h){k=i;j=0;i=0}else{m=d|0|0;l=n|e&0;k=IN(m|0,l|0,-1,-1)|0;d=z;j=i;i=0;do{e=j;j=g>>>31|j<<1;g=i|g<<1;e=a<<1|e>>>31|0;n=a>>>31|b<<1|0;JN(k|0,d|0,e|0,n|0)|0;p=z;o=p>>31|((p|0)<0?-1:0)<<1;i=o&1;a=JN(e|0,n|0,o&m|0,(((p|0)<0?-1:0)>>31|((p|0)<0?-1:0)<<1)&l|0)|0;b=z;h=h-1|0}while((h|0)!=0);k=j;j=0}h=0;if(f|0){c[f>>2]=a;c[f+4>>2]=b}o=(g|0)>>>31|(k|h)<<1|(h<<1|g>>>31)&0|j;p=(g<<1|0>>>31)&-2|i;return (z=o,p)|0}function MN(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return LN(a,b,c,d,0)|0}function NN(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g|0;LN(a,b,d,e,f)|0;l=g;return (z=c[f+4>>2]|0,c[f>>2]|0)|0}function ON(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){z=b>>>c;return a>>>c|(b&(1<>>c-32|0}function PN(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){z=b<>>32-c;return a<>8&255|0}function RN(a){a=a|0;return (a&255)<<24|(a>>8&255)<<16|(a>>16&255)<<8|a>>>24|0}function SN(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;q=q+1|0;c[a>>2]=q;while((f|0)<(e|0)){if(!(c[d+(f<<3)>>2]|0)){c[d+(f<<3)>>2]=q;c[d+((f<<3)+4)>>2]=b;c[d+((f<<3)+8)>>2]=0;z=e;return d|0}f=f+1|0}e=e*2|0;d=bJ(d|0,8*(e+1|0)|0)|0;d=SN(a|0,b|0,d|0,e|0)|0;z=e;return d|0}function TN(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;while((f|0)<(d|0)){e=c[b+(f<<3)>>2]|0;if(!e)break;if((e|0)==(a|0))return c[b+((f<<3)+4)>>2]|0;f=f+1|0}return 0}function UN(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;if((e|0)>=8192)return La(b|0,d|0,e|0)|0;h=b|0;g=b+e|0;if((b&3)==(d&3)){while(b&3){if(!e)return h|0;a[b>>0]=a[d>>0]|0;b=b+1|0;d=d+1|0;e=e-1|0}e=g&-4|0;f=e-64|0;while((b|0)<=(f|0)){c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];c[b+12>>2]=c[d+12>>2];c[b+16>>2]=c[d+16>>2];c[b+20>>2]=c[d+20>>2];c[b+24>>2]=c[d+24>>2];c[b+28>>2]=c[d+28>>2];c[b+32>>2]=c[d+32>>2];c[b+36>>2]=c[d+36>>2];c[b+40>>2]=c[d+40>>2];c[b+44>>2]=c[d+44>>2];c[b+48>>2]=c[d+48>>2];c[b+52>>2]=c[d+52>>2];c[b+56>>2]=c[d+56>>2];c[b+60>>2]=c[d+60>>2];b=b+64|0;d=d+64|0}while((b|0)<(e|0)){c[b>>2]=c[d>>2];b=b+4|0;d=d+4|0}}else{e=g-4|0;while((b|0)<(e|0)){a[b>>0]=a[d>>0]|0;a[b+1>>0]=a[d+1>>0]|0;a[b+2>>0]=a[d+2>>0]|0;a[b+3>>0]=a[d+3>>0]|0;b=b+4|0;d=d+4|0}}while((b|0)<(g|0)){a[b>>0]=a[d>>0]|0;b=b+1|0;d=d+1|0}return h|0}function VN(b,c,d){b=b|0;c=c|0;d=d|0;var e=0;if((c|0)<(b|0)&(b|0)<(c+d|0)){e=b;c=c+d|0;b=b+d|0;while((d|0)>0){b=b-1|0;c=c-1|0;d=d-1|0;a[b>>0]=a[c>>0]|0}b=e}else UN(b,c,d)|0;return b|0}function WN(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;h=b+e|0;d=d&255;if((e|0)>=67){while(b&3){a[b>>0]=d;b=b+1|0}f=h&-4|0;g=f-64|0;i=d|d<<8|d<<16|d<<24;while((b|0)<=(g|0)){c[b>>2]=i;c[b+4>>2]=i;c[b+8>>2]=i;c[b+12>>2]=i;c[b+16>>2]=i;c[b+20>>2]=i;c[b+24>>2]=i;c[b+28>>2]=i;c[b+32>>2]=i;c[b+36>>2]=i;c[b+40>>2]=i;c[b+44>>2]=i;c[b+48>>2]=i;c[b+52>>2]=i;c[b+56>>2]=i;c[b+60>>2]=i;b=b+64|0}while((b|0)<(f|0)){c[b>>2]=i;b=b+4|0}}while((b|0)<(h|0)){a[b>>0]=d;b=b+1|0}return h-e|0}function XN(a){a=a|0;var b=0,d=0;d=c[i>>2]|0;b=d+a|0;if((a|0)>0&(b|0)<(d|0)|(b|0)<0){W()|0;ra(12);return -1}c[i>>2]=b;if((b|0)>(V()|0)?(U()|0)==0:0){c[i>>2]=d;ra(12);return -1}return d|0}function YN(a){a=a|0;return +Ya[a&1]()}function ZN(a,b,c,d){a=a|0;b=+b;c=+c;d=+d;return +Za[a&7](+b,+c,+d)}function _N(a){a=a|0;return _a[a&3]()|0}function $N(a,b){a=a|0;b=b|0;return $a[a&31](b|0)|0}function aO(a,b,c){a=a|0;b=b|0;c=c|0;return ab[a&63](b|0,c|0)|0}function bO(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return bb[a&31](b|0,c|0,d|0)|0}function cO(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return cb[a&31](b|0,c|0,d|0,e|0)|0}function dO(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return db[a&3](b|0,c|0,d|0,e|0,f|0)|0}function eO(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;return eb[a&1](b|0,c|0,d|0,e|0,f|0,g|0)|0}function fO(a){a=a|0;fb[a&15]()}function gO(a,b){a=a|0;b=b|0;gb[a&127](b|0)}function hO(a,b,c){a=a|0;b=b|0;c=c|0;hb[a&31](b|0,c|0)}function iO(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ib[a&127](b|0,c|0,d|0)}function jO(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=g|0;jb[a&15](b|0,c|0,d|0,+e,+f,g|0)}function kO(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;kb[a&31](b|0,c|0,d|0,e|0)}function lO(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;lb[a&7](b|0,c|0,d|0,e|0,f|0)}function mO(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;mb[a&15](b|0,c|0,d|0,e|0,f|0,g|0)}function nO(){S(0);return 0.0}function oO(a,b,c){a=+a;b=+b;c=+c;S(1);return 0.0}function pO(){S(2);return 0}function qO(a){a=a|0;S(3);return 0}function rO(a,b){a=a|0;b=b|0;S(4);return 0}function sO(a,b,c){a=a|0;b=b|0;c=c|0;S(5);return 0}function tO(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;S(6);return 0}function uO(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;S(7);return 0}function vO(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;S(8);return 0}function wO(){S(9)}function xO(a){a=a|0;S(10)}function yO(a,b){a=a|0;b=b|0;S(11)}function zO(a,b,c){a=a|0;b=b|0;c=c|0;S(12)}function AO(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;S(13)}function BO(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;S(14)}function CO(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;S(15)}function DO(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;S(16)} + +// EMSCRIPTEN_END_FUNCS +var Ya=[nO,zA];var Za=[oO,Vu,Uu,Wu,Xu,oO,oO,oO];var _a=[pO,Gw,xx,pO];var $a=[qO,Sg,lg,Sn,Vn,aC,bC,SD,TD,UD,VD,WD,XD,YD,ZD,gJ,ub,pr,ml,pl,Cw,Hw,on,xw,eo,OB,ww,TB,UB,OI,qO,qO];var ab=[rO,un,Rn,Wn,zz,Az,rz,nz,Xy,nr,bg,Rg,sh,Wh,mi,xk,vk,nl,ql,Aq,zq,yq,Es,Us,Ps,Qs,Pt,XL,DN,tA,vB,Jm,xG,Qm,Sm,fo,PB,yJ,YE,KI,LI,oN,rO,rO,rO,rO,rO,rO,rO,rO,rO,rO,rO,rO,rO,rO,rO,rO,rO,rO,rO,rO,rO,rO];var bb=[sO,Ql,Wl,Qn,Un,hG,hJ,iJ,mJ,nJ,aL,$l,Yl,AL,vA,Fx,aD,HI,fM,sO,sO,sO,sO,sO,sO,sO,sO,sO,sO,sO,sO,sO];var cb=[tO,Om,Op,Pm,gn,wn,yn,Jn,In,Xn,$n,bo,zx,DC,BC,xE,jG,FG,EG,Nl,xA,tO,tO,tO,tO,tO,tO,tO,tO,tO,tO,tO];var db=[uO,vn,Yy,sz];var eb=[vO,lI];var fb=[wO,yA,Dw,Ew,Fw,Jw,Kw,Lw,nG,wO,wO,wO,wO,wO,wO,wO];var gb=[xO,Ab,Bb,Fb,Gb,Hb,$b,ac,yc,zc,Ac,Bc,Cc,Dc,Ec,Qc,Rc,Uc,Vc,Wc,Xc,Yc,Zc,_c,kd,ld,md,od,pd,qd,rd,sd,td,ud,vd,Gd,Hd,Id,Kd,Ld,Md,Nd,Od,Pd,Qd,Rd,Sd,Ud,fe,ge,he,ie,te,ue,ve,xe,Ke,Le,Me,Oe,Pe,Qe,Re,Se,Te,Ue,Ve,We,df,ef,ff,gf,Kf,Ff,zn,Dy,Vy,Fy,Ey,pz,by,ey,_D,dE,yf,rl,mm,mG,VC,WB,Ax,$I,GG,kI,FI,GI,MI,xO,xO,xO,xO,xO,xO,xO,xO,xO,xO,xO,xO,xO,xO,xO,xO,xO,xO,xO,xO,xO,xO,xO,xO,xO,xO,xO,xO,xO,xO,xO];var hb=[yO,Gc,Lc,ad,fd,Cd,_d,oe,De,af,nf,Yn,Zy,Bz,tz,oz,Ty,Uy,xz,yz,bE,fE,cm,ss,Iw,NB,jI,II,JI,NI,PI,yO];var ib=[zO,Ib,Jb,Mb,xc,Fc,Hc,Kc,$c,bd,ed,xd,yd,Bd,Vd,Wd,Zd,je,ke,ne,ye,ze,Ce,Xe,Ye,$e,hf,jf,mf,ck,dk,ek,jm,An,ao,Ko,Pp,ks,Fv,yx,dy,nB,CC,AC,$D,aE,cE,eE,gE,iG,XH,WH,Cm,cn,po,So,Vo,Bw,wA,Dx,RB,VB,YH,_H,$H,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO];var jb=[AO,Gt,Ht,It,Jt,Kt,Lt,Mt,Nt,AO,AO,AO,AO,AO,AO,AO];var kb=[BO,Kb,Ic,cd,nd,zd,Jd,Xd,le,Ae,Ne,Ze,kf,Bf,Af,zf,xf,wf,vf,_b,uf,tf,xn,Wy,qz,sL,QB,SB,BO,BO,BO,BO];var lb=[CO,Sc,wd,Dd,Td,we,ol,XB];var mb=[DO,Lb,Jc,dd,Ad,Yd,me,Be,_e,lf,YB,DO,DO,DO,DO,DO];return{___errno_location:kJ,___muldi3:HN,___udivdi3:MN,___uremdi3:NN,_bitshift64Lshr:ON,_bitshift64Shl:PN,_dtdisc:Ml,_dtextract:Ol,_dtopen:Rl,_free:$I,_htons:fL,_i64Add:IN,_i64Subtract:JN,_llvm_bswap_i16:QN,_llvm_bswap_i32:RN,_malloc:_I,_memalign:eJ,_memcpy:UN,_memmove:VN,_memset:WN,_realloc:bJ,_saveSetjmp:SN,_sbrk:XN,_testSetjmp:TN,_vizCreateFile:wb,_vizLastErrorMessage:vb,_vizRenderFromString:zb,_vizSetNop:yb,_vizSetY_invert:xb,dynCall_d:YN,dynCall_dddd:ZN,dynCall_i:_N,dynCall_ii:$N,dynCall_iii:aO,dynCall_iiii:bO,dynCall_iiiii:cO,dynCall_iiiiii:dO,dynCall_iiiiiii:eO,dynCall_v:fO,dynCall_vi:gO,dynCall_vii:hO,dynCall_viii:iO,dynCall_viiiddi:jO,dynCall_viiii:kO,dynCall_viiiii:lO,dynCall_viiiiii:mO,establishStackSpace:qb,getTempRet0:tb,runPostSets:FN,setTempRet0:sb,setThrew:rb,stackAlloc:nb,stackRestore:pb,stackSave:ob}}) + + +// EMSCRIPTEN_END_ASM +(Module.asmGlobalArg,Module.asmLibraryArg,buffer);var ___errno_location=Module["___errno_location"]=asm["___errno_location"];var ___muldi3=Module["___muldi3"]=asm["___muldi3"];var ___udivdi3=Module["___udivdi3"]=asm["___udivdi3"];var ___uremdi3=Module["___uremdi3"]=asm["___uremdi3"];var _bitshift64Lshr=Module["_bitshift64Lshr"]=asm["_bitshift64Lshr"];var _bitshift64Shl=Module["_bitshift64Shl"]=asm["_bitshift64Shl"];var _dtdisc=Module["_dtdisc"]=asm["_dtdisc"];var _dtextract=Module["_dtextract"]=asm["_dtextract"];var _dtopen=Module["_dtopen"]=asm["_dtopen"];var _free=Module["_free"]=asm["_free"];var _htons=Module["_htons"]=asm["_htons"];var _i64Add=Module["_i64Add"]=asm["_i64Add"];var _i64Subtract=Module["_i64Subtract"]=asm["_i64Subtract"];var _llvm_bswap_i16=Module["_llvm_bswap_i16"]=asm["_llvm_bswap_i16"];var _llvm_bswap_i32=Module["_llvm_bswap_i32"]=asm["_llvm_bswap_i32"];var _malloc=Module["_malloc"]=asm["_malloc"];var _memalign=Module["_memalign"]=asm["_memalign"];var _memcpy=Module["_memcpy"]=asm["_memcpy"];var _memmove=Module["_memmove"]=asm["_memmove"];var _memset=Module["_memset"]=asm["_memset"];var _realloc=Module["_realloc"]=asm["_realloc"];var _saveSetjmp=Module["_saveSetjmp"]=asm["_saveSetjmp"];var _sbrk=Module["_sbrk"]=asm["_sbrk"];var _testSetjmp=Module["_testSetjmp"]=asm["_testSetjmp"];var _vizCreateFile=Module["_vizCreateFile"]=asm["_vizCreateFile"];var _vizLastErrorMessage=Module["_vizLastErrorMessage"]=asm["_vizLastErrorMessage"];var _vizRenderFromString=Module["_vizRenderFromString"]=asm["_vizRenderFromString"];var _vizSetNop=Module["_vizSetNop"]=asm["_vizSetNop"];var _vizSetY_invert=Module["_vizSetY_invert"]=asm["_vizSetY_invert"];var establishStackSpace=Module["establishStackSpace"]=asm["establishStackSpace"];var getTempRet0=Module["getTempRet0"]=asm["getTempRet0"];var runPostSets=Module["runPostSets"]=asm["runPostSets"];var setTempRet0=Module["setTempRet0"]=asm["setTempRet0"];var setThrew=Module["setThrew"]=asm["setThrew"];var stackAlloc=Module["stackAlloc"]=asm["stackAlloc"];var stackRestore=Module["stackRestore"]=asm["stackRestore"];var stackSave=Module["stackSave"]=asm["stackSave"];var dynCall_d=Module["dynCall_d"]=asm["dynCall_d"];var dynCall_dddd=Module["dynCall_dddd"]=asm["dynCall_dddd"];var dynCall_i=Module["dynCall_i"]=asm["dynCall_i"];var dynCall_ii=Module["dynCall_ii"]=asm["dynCall_ii"];var dynCall_iii=Module["dynCall_iii"]=asm["dynCall_iii"];var dynCall_iiii=Module["dynCall_iiii"]=asm["dynCall_iiii"];var dynCall_iiiii=Module["dynCall_iiiii"]=asm["dynCall_iiiii"];var dynCall_iiiiii=Module["dynCall_iiiiii"]=asm["dynCall_iiiiii"];var dynCall_iiiiiii=Module["dynCall_iiiiiii"]=asm["dynCall_iiiiiii"];var dynCall_v=Module["dynCall_v"]=asm["dynCall_v"];var dynCall_vi=Module["dynCall_vi"]=asm["dynCall_vi"];var dynCall_vii=Module["dynCall_vii"]=asm["dynCall_vii"];var dynCall_viii=Module["dynCall_viii"]=asm["dynCall_viii"];var dynCall_viiiddi=Module["dynCall_viiiddi"]=asm["dynCall_viiiddi"];var dynCall_viiii=Module["dynCall_viiii"]=asm["dynCall_viiii"];var dynCall_viiiii=Module["dynCall_viiiii"]=asm["dynCall_viiiii"];var dynCall_viiiiii=Module["dynCall_viiiiii"]=asm["dynCall_viiiiii"];Module["asm"]=asm;Module["ccall"]=ccall;Module["Pointer_stringify"]=Pointer_stringify;Module["UTF8ToString"]=UTF8ToString;if(memoryInitializer){if(!isDataURI(memoryInitializer)){if(typeof Module["locateFile"]==="function"){memoryInitializer=Module["locateFile"](memoryInitializer)}else if(Module["memoryInitializerPrefixURL"]){memoryInitializer=Module["memoryInitializerPrefixURL"]+memoryInitializer}}if(ENVIRONMENT_IS_NODE||ENVIRONMENT_IS_SHELL){var data=Module["readBinary"](memoryInitializer);HEAPU8.set(data,GLOBAL_BASE)}else{addRunDependency("memory initializer");var applyMemoryInitializer=(function(data){if(data.byteLength)data=new Uint8Array(data);HEAPU8.set(data,GLOBAL_BASE);if(Module["memoryInitializerRequest"])delete Module["memoryInitializerRequest"].response;removeRunDependency("memory initializer")});function doBrowserLoad(){Module["readAsync"](memoryInitializer,applyMemoryInitializer,(function(){throw"could not load memory initializer "+memoryInitializer}))}var memoryInitializerBytes=tryParseAsDataURI(memoryInitializer);if(memoryInitializerBytes){applyMemoryInitializer(memoryInitializerBytes.buffer)}else if(Module["memoryInitializerRequest"]){function useRequest(){var request=Module["memoryInitializerRequest"];var response=request.response;if(request.status!==200&&request.status!==0){var data=tryParseAsDataURI(Module["memoryInitializerRequestURL"]);if(data){response=data.buffer}else{console.warn("a problem seems to have happened with Module.memoryInitializerRequest, status: "+request.status+", retrying "+memoryInitializer);doBrowserLoad();return}}applyMemoryInitializer(response)}if(Module["memoryInitializerRequest"].response){setTimeout(useRequest,0)}else{Module["memoryInitializerRequest"].addEventListener("load",useRequest)}}else{doBrowserLoad()}}}function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var initialStackTop;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout((function(){setTimeout((function(){Module["setStatus"]("")}),1);doRun()}),1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;STACKTOP=initialStackTop;exitRuntime();if(Module["onExit"])Module["onExit"](status)}if(ENVIRONMENT_IS_NODE){process["exit"](status)}Module["quit"](status,new ExitStatus(status))}Module["exit"]=exit;function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){Module.print(what);Module.printErr(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}Module["noExitRuntime"]=true;run() + + + + + return Module; +}; + +function render(instance, src, options) { + var i; + for (i = 0; i < options.files.length; i++) { + instance['ccall']('vizCreateFile', 'number', ['string', 'string'], [options.files[i].path, options.files[i].data]); + } + + instance['ccall']('vizSetY_invert', 'number', ['number'], [options.yInvert ? 1 : 0]); + instance['ccall']('vizSetNop', 'number', ['number'], [options.nop ? options.nop : 0]); + + var resultPointer = instance['ccall']('vizRenderFromString', 'number', ['string', 'string', 'string'], [src, options.format, options.engine]); + var resultString = instance['Pointer_stringify'](resultPointer); + instance['ccall']('free', 'number', ['number'], [resultPointer]); + + var errorMessagePointer = instance['ccall']('vizLastErrorMessage', 'number', [], []); + var errorMessageString = instance['Pointer_stringify'](errorMessagePointer); + instance['ccall']('free', 'number', ['number'], [errorMessagePointer]); + + if (errorMessageString != '') { + throw new Error(errorMessageString); + } + + return resultString; +} + +if (typeof importScripts === "function") { + var instance = Module(); + + onmessage = function(event) { + var id = event.data.id; + var src = event.data.src; + var options = event.data.options; + + try { + var result = render(instance, src, options); + postMessage({ id: id, result: result }); + } catch (e) { + var error; + if (e instanceof Error) { + error = { message: e.message, fileName: e.fileName, lineNumber: e.lineNumber }; + } else { + error = { message: e.toString() }; + } + postMessage({ id: id, error: error }); + } + } +} + +if (typeof exports === 'object' && typeof module !== 'undefined') { + module.exports = { render: render, Module: Module }; +} else if (typeof define === 'function' && define.amd) { + define(function() { return { render: render, Module: Module }; }); +} + +if (typeof global.Viz !== 'undefined') { + global.Viz.render = render; + global.Viz.Module = Module; +} + +})(typeof self !== 'undefined' ? self : this); diff --git a/src/data/extra/web/js/viz.js/viz.js b/src/data/extra/web/js/viz.js/viz.js new file mode 100644 index 00000000..d9e55bd5 --- /dev/null +++ b/src/data/extra/web/js/viz.js/viz.js @@ -0,0 +1,333 @@ +/* +Viz.js 2.1.2 (Graphviz 2.40.1, Expat 2.2.5, Emscripten 1.37.36) +Copyright (c) 2014-2018 Michael Daines +Licensed under MIT license + +This distribution contains other software in object code form: + +Graphviz +Licensed under Eclipse Public License - v 1.0 +http://www.graphviz.org + +Expat +Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd and Clark Cooper +Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006 Expat maintainers. +Licensed under MIT license +http://www.libexpat.org + +zlib +Copyright (C) 1995-2013 Jean-loup Gailly and Mark Adler +http://www.zlib.net/zlib_license.html +*/ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global.Viz = factory()); +}(this, (function () { 'use strict'; + + var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { + return typeof obj; + } : function (obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; + }; + + var classCallCheck = function (instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } + }; + + var createClass = function () { + function defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } + } + + return function (Constructor, protoProps, staticProps) { + if (protoProps) defineProperties(Constructor.prototype, protoProps); + if (staticProps) defineProperties(Constructor, staticProps); + return Constructor; + }; + }(); + + var _extends = Object.assign || function (target) { + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i]; + + for (var key in source) { + if (Object.prototype.hasOwnProperty.call(source, key)) { + target[key] = source[key]; + } + } + } + + return target; + }; + + var WorkerWrapper = function () { + function WorkerWrapper(worker) { + var _this = this; + + classCallCheck(this, WorkerWrapper); + + this.worker = worker; + this.listeners = []; + this.nextId = 0; + + this.worker.addEventListener('message', function (event) { + var id = event.data.id; + var error = event.data.error; + var result = event.data.result; + + _this.listeners[id](error, result); + delete _this.listeners[id]; + }); + } + + createClass(WorkerWrapper, [{ + key: 'render', + value: function render(src, options) { + var _this2 = this; + + return new Promise(function (resolve, reject) { + var id = _this2.nextId++; + + _this2.listeners[id] = function (error, result) { + if (error) { + reject(new Error(error.message, error.fileName, error.lineNumber)); + return; + } + resolve(result); + }; + + _this2.worker.postMessage({ id: id, src: src, options: options }); + }); + } + }]); + return WorkerWrapper; + }(); + + var ModuleWrapper = function ModuleWrapper(module, render) { + classCallCheck(this, ModuleWrapper); + + var instance = module(); + this.render = function (src, options) { + return new Promise(function (resolve, reject) { + try { + resolve(render(instance, src, options)); + } catch (error) { + reject(error); + } + }); + }; + }; + + // https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding + + + function b64EncodeUnicode(str) { + return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, function (match, p1) { + return String.fromCharCode('0x' + p1); + })); + } + + function defaultScale() { + if ('devicePixelRatio' in window && window.devicePixelRatio > 1) { + return window.devicePixelRatio; + } else { + return 1; + } + } + + function svgXmlToImageElement(svgXml) { + var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, + _ref$scale = _ref.scale, + scale = _ref$scale === undefined ? defaultScale() : _ref$scale, + _ref$mimeType = _ref.mimeType, + mimeType = _ref$mimeType === undefined ? "image/png" : _ref$mimeType, + _ref$quality = _ref.quality, + quality = _ref$quality === undefined ? 1 : _ref$quality; + + return new Promise(function (resolve, reject) { + var svgImage = new Image(); + + svgImage.onload = function () { + var canvas = document.createElement('canvas'); + canvas.width = svgImage.width * scale; + canvas.height = svgImage.height * scale; + + var context = canvas.getContext("2d"); + context.drawImage(svgImage, 0, 0, canvas.width, canvas.height); + + canvas.toBlob(function (blob) { + var image = new Image(); + image.src = URL.createObjectURL(blob); + image.width = svgImage.width; + image.height = svgImage.height; + + resolve(image); + }, mimeType, quality); + }; + + svgImage.onerror = function (e) { + var error; + + if ('error' in e) { + error = e.error; + } else { + error = new Error('Error loading SVG'); + } + + reject(error); + }; + + svgImage.src = 'data:image/svg+xml;base64,' + b64EncodeUnicode(svgXml); + }); + } + + function svgXmlToImageElementFabric(svgXml) { + var _ref2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, + _ref2$scale = _ref2.scale, + scale = _ref2$scale === undefined ? defaultScale() : _ref2$scale, + _ref2$mimeType = _ref2.mimeType, + mimeType = _ref2$mimeType === undefined ? 'image/png' : _ref2$mimeType, + _ref2$quality = _ref2.quality, + quality = _ref2$quality === undefined ? 1 : _ref2$quality; + + var multiplier = scale; + + var format = void 0; + if (mimeType == 'image/jpeg') { + format = 'jpeg'; + } else if (mimeType == 'image/png') { + format = 'png'; + } + + return new Promise(function (resolve, reject) { + fabric.loadSVGFromString(svgXml, function (objects, options) { + // If there's something wrong with the SVG, Fabric may return an empty array of objects. Graphviz appears to give us at least one element back even given an empty graph, so we will assume an error in this case. + if (objects.length == 0) { + reject(new Error('Error loading SVG with Fabric')); + } + + var element = document.createElement("canvas"); + element.width = options.width; + element.height = options.height; + + var canvas = new fabric.Canvas(element, { enableRetinaScaling: false }); + var obj = fabric.util.groupSVGElements(objects, options); + canvas.add(obj).renderAll(); + + var image = new Image(); + image.src = canvas.toDataURL({ format: format, multiplier: multiplier, quality: quality }); + image.width = options.width; + image.height = options.height; + + resolve(image); + }); + }); + } + + var Viz = function () { + function Viz() { + var _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, + workerURL = _ref3.workerURL, + worker = _ref3.worker, + Module = _ref3.Module, + render = _ref3.render; + + classCallCheck(this, Viz); + + if (typeof workerURL !== 'undefined') { + this.wrapper = new WorkerWrapper(new Worker(workerURL)); + } else if (typeof worker !== 'undefined') { + this.wrapper = new WorkerWrapper(worker); + } else if (typeof Module !== 'undefined' && typeof render !== 'undefined') { + this.wrapper = new ModuleWrapper(Module, render); + } else if (typeof Viz.Module !== 'undefined' && typeof Viz.render !== 'undefined') { + this.wrapper = new ModuleWrapper(Viz.Module, Viz.render); + } else { + throw new Error('Must specify workerURL or worker option, Module and render options, or include one of full.render.js or lite.render.js after viz.js.'); + } + } + + createClass(Viz, [{ + key: 'renderString', + value: function renderString(src) { + var _ref4 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, + _ref4$format = _ref4.format, + format = _ref4$format === undefined ? 'svg' : _ref4$format, + _ref4$engine = _ref4.engine, + engine = _ref4$engine === undefined ? 'dot' : _ref4$engine, + _ref4$files = _ref4.files, + files = _ref4$files === undefined ? [] : _ref4$files, + _ref4$images = _ref4.images, + images = _ref4$images === undefined ? [] : _ref4$images, + _ref4$yInvert = _ref4.yInvert, + yInvert = _ref4$yInvert === undefined ? false : _ref4$yInvert, + _ref4$nop = _ref4.nop, + nop = _ref4$nop === undefined ? 0 : _ref4$nop; + + for (var i = 0; i < images.length; i++) { + files.push({ + path: images[i].path, + data: '\n\n' + }); + } + + return this.wrapper.render(src, { format: format, engine: engine, files: files, images: images, yInvert: yInvert, nop: nop }); + } + }, { + key: 'renderSVGElement', + value: function renderSVGElement(src) { + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + + return this.renderString(src, _extends({}, options, { format: 'svg' })).then(function (str) { + var parser = new DOMParser(); + return parser.parseFromString(str, 'image/svg+xml').documentElement; + }); + } + }, { + key: 'renderImageElement', + value: function renderImageElement(src) { + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + var scale = options.scale, + mimeType = options.mimeType, + quality = options.quality; + + + return this.renderString(src, _extends({}, options, { format: 'svg' })).then(function (str) { + if ((typeof fabric === 'undefined' ? 'undefined' : _typeof(fabric)) === "object" && fabric.loadSVGFromString) { + return svgXmlToImageElementFabric(str, { scale: scale, mimeType: mimeType, quality: quality }); + } else { + return svgXmlToImageElement(str, { scale: scale, mimeType: mimeType, quality: quality }); + } + }); + } + }, { + key: 'renderJSONObject', + value: function renderJSONObject(src) { + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + var format = options.format; + + + if (format !== 'json' || format !== 'json0') { + format = 'json'; + } + + return this.renderString(src, _extends({}, options, { format: format })).then(function (str) { + return JSON.parse(str); + }); + } + }]); + return Viz; + }(); + + return Viz; + +}))); diff --git a/src/data/extra/web/js/vnotex.js b/src/data/extra/web/js/vnotex.js new file mode 100644 index 00000000..844826ed --- /dev/null +++ b/src/data/extra/web/js/vnotex.js @@ -0,0 +1,268 @@ +/* + The main object that will be provided to all scripts in VNoteX. + Maintain a list of workers for different tasks. + + Main: + - initialized() + - ready() + + Markdown scenario: + - markdownTextUpdated(p_text) + - basicMarkdownRendered() + - fullMarkdownRendered() +*/ +class VNoteX extends EventEmitter { + constructor() { + super(); + + this.kickedOff = false; + + this.initialized = false; + + // Registered workers. + // name -> worker. + this.workers = new Map(); + + this.numOfOngoingWorkers = 0; + + this.pendingData = { + text: null, + lineNumber: -1, + anchor: null + } + + this.numOfMuteScroll = 0; + + this.os = VNoteX.detectOS(); + + this.turndown = null; + + window.addEventListener('load', () => { + console.log('window load finished'); + + // Init DOM nodes. + this.contentContainer = document.getElementById('vx-content'); + this.inplacePreviewContainer = document.getElementById('vx-inplace-preview'); + + this.nodeLineMapper = new NodeLineMapper(this, this.contentContainer); + + this.graphPreviewer = new GraphPreviewer(this, this.inplacePreviewContainer); + + this.crossCopyer = new CrossCopy(this); + + this.initialized = true; + + // Signal out. + this.emit('initialized'); + this.emit('ready'); + }); + } + + registerWorker(p_worker) { + this.workers.set(p_worker.name, p_worker); + + p_worker.register(this); + } + + finishWorker(p_name) { + --this.numOfOngoingWorkers; + if (this.numOfOngoingWorkers == 0) { + // Signal out anyway. + this.emit('fullMarkdownRendered'); + + // Check pending work. + if (this.pendingData.text) { + this.setMarkdownText(this.pendingData.text); + } else if (this.pendingData.lineNumber > -1) { + this.scrollToLine(this.pendingData.lineNumber); + } + } + } + + getWorker(p_name) { + return this.workers.get(p_name); + } + + kickOffMarkdown() { + if (this.kickedOff) { + return; + } + + console.log('viewer is ready now, kick off Markdown'); + this.kickedOff = true; + + window.vxMarkdownAdapter.setReady(true); + } + + setMarkdownText(p_text) { + if (this.numOfOngoingWorkers > 0) { + this.pendingData.text = p_text; + console.info('wait for last render finish with remaing workers', + this.numOfOngoingWorkers); + } else { + this.numOfOngoingWorkers = this.workers.size; + this.pendingData.text = null; + console.log('start new round with ' + this.numOfOngoingWorkers + ' workers'); + this.emit('markdownTextUpdated', p_text); + } + } + + scrollToLine(p_lineNumber) { + if (p_lineNumber < 0) { + return; + } + if (this.numOfOngoingWorkers > 0) { + this.pendingData.lineNumber = p_lineNumber; + console.log('wait for render finish before scroll'); + } else { + this.pendingData.lineNumber = -1; + this.nodeLineMapper.scrollToLine(p_lineNumber); + } + } + + scrollToAnchor(p_anchor) { + if (!p_anchor) { + return; + } + if (this.numOfOngoingWorkers > 0) { + this.pendingData.anchor = p_anchor; + console.log('wait for render finish before scroll'); + } else { + this.pendingData.anchor = ''; + this.nodeLineMapper.scrollToAnchor(p_anchor); + } + } + + setBasicMarkdownRendered() { + this.setConstrainImageWidthEnabled(window.vxOptions.constrainImageWidthEnabled); + this.emit('basicMarkdownRendered'); + } + + muteScroll() { + ++this.numOfMuteScroll; + } + + unmuteScroll() { + window.setTimeout(() => { + if (this.numOfMuteScroll > 0) { + --this.numOfMuteScroll; + if (this.numOfMuteScroll == 0) { + this.nodeLineMapper.updateAfterScrollUnmuted(); + } + } + }, 1000); + } + + isScrollMuted() { + return this.numOfMuteScroll > 0; + } + + setTopLineNumber(p_lineNumber) { + window.vxMarkdownAdapter.setTopLineNumber(p_lineNumber); + } + + previewGraph(p_id, p_timeStamp, p_lang, p_text) { + if (this.graphPreviewer) { + this.graphPreviewer.previewGraph(p_id, p_timeStamp, p_lang, p_text); + } + } + + previewMath(p_id, p_timeStamp, p_text) { + if (this.graphPreviewer) { + this.graphPreviewer.previewMath(p_id, p_timeStamp, p_text); + } + } + + setGraphPreviewData(p_data) { + window.vxMarkdownAdapter.setGraphPreviewData(p_data.id, + p_data.timeStamp, + p_data.format, + p_data.data, + p_data.base64, + p_data.needScale); + } + + setMathPreviewData(p_data) { + window.vxMarkdownAdapter.setMathPreviewData(p_data.id, + p_data.timeStamp, + p_data.format, + p_data.data, + p_data.base64, + p_data.needScale); + } + + setHeadings(p_headings) { + window.vxMarkdownAdapter.setHeadings(p_headings); + } + + setCurrentHeadingAnchor(p_idx, p_anchor) { + window.vxMarkdownAdapter.setCurrentHeadingAnchor(p_idx, p_anchor); + } + + setSectionNumberEnabled(p_enabled) { + let sectionClass = 'vx-section-number'; + if (p_enabled) { + this.contentContainer.classList.add(sectionClass); + } else { + this.contentContainer.classList.remove(sectionClass); + } + } + + setConstrainImageWidthEnabled(p_enabled) { + let constrainClass = 'vx-constrain-image-width'; + if (p_enabled) { + this.contentContainer.classList.add(constrainClass); + } else { + this.contentContainer.classList.remove(constrainClass); + } + } + + scroll(p_up) { + EasyAccess.scroll(p_up); + } + + setKeyPress(p_key, p_ctrl, p_shift, p_meta) { + window.vxMarkdownAdapter.setKeyPress(p_key, p_ctrl, p_shift, p_meta); + } + + zoom(p_zoomIn) { + window.vxMarkdownAdapter.zoom(p_zoomIn); + } + + htmlToMarkdown(p_id, p_timeStamp, p_html) { + if (!this.turndown) { + this.turndown = new TurndownConverter(this); + } + + let markdown = this.turndown.turndown(p_html); + window.vxMarkdownAdapter.setMarkdownFromHtml(p_id, p_timeStamp, markdown); + } + + setCrossCopyTargets(p_targets) { + window.vxMarkdownAdapter.setCrossCopyTargets(p_targets); + } + + crossCopy(p_id, p_timeStamp, p_target, p_baseUrl, p_html) { + this.crossCopyer.crossCopy(p_id, p_timeStamp, p_target, p_baseUrl, p_html); + } + + setCrossCopyResult(p_id, p_timeStamp, p_html) { + window.vxMarkdownAdapter.setCrossCopyResult(p_id, p_timeStamp, p_html); + } + + static detectOS() { + let osName="Unknown OS"; + if (navigator.appVersion.indexOf("Win")!=-1) { + osName="Windows"; + } else if (navigator.appVersion.indexOf("Mac")!=-1) { + osName="MacOS"; + } else if (navigator.appVersion.indexOf("X11")!=-1) { + osName="UNIX"; + } else if (navigator.appVersion.indexOf("Linux")!=-1) { + osName="Linux"; + } + return osName + } +} + +window.vnotex = new VNoteX(); diff --git a/src/data/extra/web/js/vxworker.js b/src/data/extra/web/js/vxworker.js new file mode 100644 index 00000000..e8b84872 --- /dev/null +++ b/src/data/extra/web/js/vxworker.js @@ -0,0 +1,23 @@ +// Worker base class. +class VxWorker { + constructor() { + this.name = ''; + this.vnotex = null; + } + + // Called when registering this worker. + register(p_vnotex) { + this.vnotex = p_vnotex; + + this.registerInternal(); + } + + registerInternal() { + console.warning('RegisterInternal of VxWorker subclass is not implemented', this.name); + } + + finishWork() { + console.log('worker finished', this.name); + this.vnotex.finishWorker(this.name); + } +} diff --git a/src/data/extra/web/js/wavedrom.js b/src/data/extra/web/js/wavedrom.js new file mode 100644 index 00000000..4fe14107 --- /dev/null +++ b/src/data/extra/web/js/wavedrom.js @@ -0,0 +1,80 @@ +class WaveDromRenderer extends GraphRenderer { + constructor() { + super(); + + this.name = 'wavedrom'; + + this.graphDivClass = 'vx-wavedrom-graph'; + + this.extraScripts = [this.scriptFolderPath + '/wavedrom/theme-default.js', + this.scriptFolderPath + '/wavedrom/wavedrom.min.js']; + + this.langs = ['wavedrom', 'wave']; + } + + // Render @p_node as WaveDrom graph. + // Return true on success. + renderOne(p_node, p_idx) { + // Create a div container. + let graphDiv = document.createElement('div'); + graphDiv.id = 'vx-wavedrom-graph-' + p_idx; + graphDiv.classList.add(this.graphDivClass); + + Utils.checkSourceLine(p_node, graphDiv); + + Utils.replaceNodeWithPreCheck(p_node, graphDiv); + + try { + // ATTENTION: p_idx should start from 0 or style will be missing. + WaveDrom.RenderWaveForm(p_idx, + eval('(' + p_node.textContent + ')'), + 'vx-wavedrom-graph-'); + window.vxImageViewer.setupSVGToView(graphDiv.children[0], true); + } catch (p_err) { + console.error('failed to RenderWaveForm() for WaveDrom', p_err); + this.finishRenderingOne(); + return false; + } + + this.finishRenderingOne(); + return true; + } + + // p_callback(graphDiv). + renderText(p_container, p_text, p_idx, p_callback) { + if (!this.initialize(() => { + let graphDiv = this.renderTextInternal(p_container, p_text, p_idx); + p_callback(graphDiv); + })) { + return; + } + + let graphDiv = this.renderTextInternal(p_container, p_text, p_idx); + p_callback(graphDiv); + } + + // Render a graph from @p_text. + // Will append a div to @p_container and return the div. + renderTextInternal(p_container, p_text, p_idx) { + // Create a div container. + let graphDiv = document.createElement('div'); + graphDiv.id = 'vx-wavedrom-graph-stand-alone-' + p_idx + '0'; + + p_container.appendChild(graphDiv); + + try { + // Always use 0 as the index. + WaveDrom.RenderWaveForm(0, + eval('(' + p_text + ')'), + 'vx-wavedrom-graph-stand-alone-' + p_idx); + } catch (p_err) { + console.error('failed to RenderWaveForm() for WaveDrom', p_err); + p_container.removeChild(graphDiv); + return null; + } + + return graphDiv; + } +} + +window.vnotex.registerWorker(new WaveDromRenderer()); diff --git a/src/data/extra/web/js/wavedrom/README.md b/src/data/extra/web/js/wavedrom/README.md new file mode 100644 index 00000000..5649a7b7 --- /dev/null +++ b/src/data/extra/web/js/wavedrom/README.md @@ -0,0 +1,2 @@ +# [WaveDrom](https://github.com/wavedrom/wavedrom) +v2.1.2 diff --git a/src/data/extra/web/js/wavedrom/theme-default.js b/src/data/extra/web/js/wavedrom/theme-default.js new file mode 100644 index 00000000..a310df8c --- /dev/null +++ b/src/data/extra/web/js/wavedrom/theme-default.js @@ -0,0 +1,3 @@ +var WaveSkin=WaveSkin||{};WaveSkin.default=["svg",{"id":"svg","xmlns":"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink","height":"0"},["style",{"type":"text/css"},"text{font-size:11pt;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;fill-opacity:1;font-family:Helvetica}.muted{fill:#aaa}.warning{fill:#f6b900}.error{fill:#f60000}.info{fill:#0041c4}.success{fill:#00ab00}.h1{font-size:33pt;font-weight:bold}.h2{font-size:27pt;font-weight:bold}.h3{font-size:20pt;font-weight:bold}.h4{font-size:14pt;font-weight:bold}.h5{font-size:11pt;font-weight:bold}.h6{font-size:8pt;font-weight:bold}.s1{fill:none;stroke:#000;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none}.s2{fill:none;stroke:#000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none}.s3{color:#000;fill:none;stroke:#000;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:1, 3;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate}.s4{color:#000;fill:none;stroke:#000;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible}.s5{fill:#fff;stroke:none}.s6{color:#000;fill:#ffffb4;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate}.s7{color:#000;fill:#ffe0b9;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate}.s8{color:#000;fill:#b9e0ff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate}.s9{fill:#000;fill-opacity:1;stroke:none}.s10{color:#000;fill:#fff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate}.s11{fill:#0041c4;fill-opacity:1;stroke:none}.s12{fill:none;stroke:#0041c4;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none}"],["defs",["g",{"id":"socket"},["rect",{"y":"15","x":"6","height":"20","width":"20"}]],["g",{"id":"pclk"},["path",{"d":"M0,20 0,0 20,0","class":"s1"}]],["g",{"id":"nclk"},["path",{"d":"m0,0 0,20 20,0","class":"s1"}]],["g",{"id":"000"},["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"0m0"},["path",{"d":"m0,20 3,0 3,-10 3,10 11,0","class":"s1"}]],["g",{"id":"0m1"},["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"0mx"},["path",{"d":"M3,20 9,0 20,0","class":"s1"}],["path",{"d":"m20,15 -5,5","class":"s2"}],["path",{"d":"M20,10 10,20","class":"s2"}],["path",{"d":"M20,5 5,20","class":"s2"}],["path",{"d":"M20,0 4,16","class":"s2"}],["path",{"d":"M15,0 6,9","class":"s2"}],["path",{"d":"M10,0 9,1","class":"s2"}],["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"0md"},["path",{"d":"m8,20 10,0","class":"s3"}],["path",{"d":"m0,20 5,0","class":"s1"}]],["g",{"id":"0mu"},["path",{"d":"m0,20 3,0 C 7,10 10.107603,0 20,0","class":"s1"}]],["g",{"id":"0mz"},["path",{"d":"m0,20 3,0 C 10,10 15,10 20,10","class":"s1"}]],["g",{"id":"111"},["path",{"d":"M0,0 20,0","class":"s1"}]],["g",{"id":"1m0"},["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}]],["g",{"id":"1m1"},["path",{"d":"M0,0 3,0 6,10 9,0 20,0","class":"s1"}]],["g",{"id":"1mx"},["path",{"d":"m3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}],["path",{"d":"m20,15 -5,5","class":"s2"}],["path",{"d":"M20,10 10,20","class":"s2"}],["path",{"d":"M20,5 8,17","class":"s2"}],["path",{"d":"M20,0 7,13","class":"s2"}],["path",{"d":"M15,0 6,9","class":"s2"}],["path",{"d":"M10,0 5,5","class":"s2"}],["path",{"d":"M3.5,1.5 5,0","class":"s2"}]],["g",{"id":"1md"},["path",{"d":"m0,0 3,0 c 4,10 7,20 17,20","class":"s1"}]],["g",{"id":"1mu"},["path",{"d":"M0,0 5,0","class":"s1"}],["path",{"d":"M8,0 18,0","class":"s3"}]],["g",{"id":"1mz"},["path",{"d":"m0,0 3,0 c 7,10 12,10 17,10","class":"s1"}]],["g",{"id":"xxx"},["path",{"d":"m0,20 20,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}],["path",{"d":"M0,5 5,0","class":"s2"}],["path",{"d":"M0,10 10,0","class":"s2"}],["path",{"d":"M0,15 15,0","class":"s2"}],["path",{"d":"M0,20 20,0","class":"s2"}],["path",{"d":"M5,20 20,5","class":"s2"}],["path",{"d":"M10,20 20,10","class":"s2"}],["path",{"d":"m15,20 5,-5","class":"s2"}]],["g",{"id":"xm0"},["path",{"d":"M0,0 4,0 9,20","class":"s1"}],["path",{"d":"m0,20 20,0","class":"s1"}],["path",{"d":"M0,5 4,1","class":"s2"}],["path",{"d":"M0,10 5,5","class":"s2"}],["path",{"d":"M0,15 6,9","class":"s2"}],["path",{"d":"M0,20 7,13","class":"s2"}],["path",{"d":"M5,20 8,17","class":"s2"}]],["g",{"id":"xm1"},["path",{"d":"M0,0 20,0","class":"s1"}],["path",{"d":"M0,20 4,20 9,0","class":"s1"}],["path",{"d":"M0,5 5,0","class":"s2"}],["path",{"d":"M0,10 9,1","class":"s2"}],["path",{"d":"M0,15 7,8","class":"s2"}],["path",{"d":"M0,20 5,15","class":"s2"}]],["g",{"id":"xmx"},["path",{"d":"m0,20 20,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}],["path",{"d":"M0,5 5,0","class":"s2"}],["path",{"d":"M0,10 10,0","class":"s2"}],["path",{"d":"M0,15 15,0","class":"s2"}],["path",{"d":"M0,20 20,0","class":"s2"}],["path",{"d":"M5,20 20,5","class":"s2"}],["path",{"d":"M10,20 20,10","class":"s2"}],["path",{"d":"m15,20 5,-5","class":"s2"}]],["g",{"id":"xmd"},["path",{"d":"m0,0 4,0 c 3,10 6,20 16,20","class":"s1"}],["path",{"d":"m0,20 20,0","class":"s1"}],["path",{"d":"M0,5 4,1","class":"s2"}],["path",{"d":"M0,10 5.5,4.5","class":"s2"}],["path",{"d":"M0,15 6.5,8.5","class":"s2"}],["path",{"d":"M0,20 8,12","class":"s2"}],["path",{"d":"m5,20 5,-5","class":"s2"}],["path",{"d":"m10,20 2.5,-2.5","class":"s2"}]],["g",{"id":"xmu"},["path",{"d":"M0,0 20,0","class":"s1"}],["path",{"d":"m0,20 4,0 C 7,10 10,0 20,0","class":"s1"}],["path",{"d":"M0,5 5,0","class":"s2"}],["path",{"d":"M0,10 10,0","class":"s2"}],["path",{"d":"M0,15 10,5","class":"s2"}],["path",{"d":"M0,20 6,14","class":"s2"}]],["g",{"id":"xmz"},["path",{"d":"m0,0 4,0 c 6,10 11,10 16,10","class":"s1"}],["path",{"d":"m0,20 4,0 C 10,10 15,10 20,10","class":"s1"}],["path",{"d":"M0,5 4.5,0.5","class":"s2"}],["path",{"d":"M0,10 6.5,3.5","class":"s2"}],["path",{"d":"M0,15 8.5,6.5","class":"s2"}],["path",{"d":"M0,20 11.5,8.5","class":"s2"}]],["g",{"id":"ddd"},["path",{"d":"m0,20 20,0","class":"s3"}]],["g",{"id":"dm0"},["path",{"d":"m0,20 10,0","class":"s3"}],["path",{"d":"m12,20 8,0","class":"s1"}]],["g",{"id":"dm1"},["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"dmx"},["path",{"d":"M3,20 9,0 20,0","class":"s1"}],["path",{"d":"m20,15 -5,5","class":"s2"}],["path",{"d":"M20,10 10,20","class":"s2"}],["path",{"d":"M20,5 5,20","class":"s2"}],["path",{"d":"M20,0 4,16","class":"s2"}],["path",{"d":"M15,0 6,9","class":"s2"}],["path",{"d":"M10,0 9,1","class":"s2"}],["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"dmd"},["path",{"d":"m0,20 20,0","class":"s3"}]],["g",{"id":"dmu"},["path",{"d":"m0,20 3,0 C 7,10 10.107603,0 20,0","class":"s1"}]],["g",{"id":"dmz"},["path",{"d":"m0,20 3,0 C 10,10 15,10 20,10","class":"s1"}]],["g",{"id":"uuu"},["path",{"d":"M0,0 20,0","class":"s3"}]],["g",{"id":"um0"},["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}]],["g",{"id":"um1"},["path",{"d":"M0,0 10,0","class":"s3"}],["path",{"d":"m12,0 8,0","class":"s1"}]],["g",{"id":"umx"},["path",{"d":"m3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}],["path",{"d":"m20,15 -5,5","class":"s2"}],["path",{"d":"M20,10 10,20","class":"s2"}],["path",{"d":"M20,5 8,17","class":"s2"}],["path",{"d":"M20,0 7,13","class":"s2"}],["path",{"d":"M15,0 6,9","class":"s2"}],["path",{"d":"M10,0 5,5","class":"s2"}],["path",{"d":"M3.5,1.5 5,0","class":"s2"}]],["g",{"id":"umd"},["path",{"d":"m0,0 3,0 c 4,10 7,20 17,20","class":"s1"}]],["g",{"id":"umu"},["path",{"d":"M0,0 20,0","class":"s3"}]],["g",{"id":"umz"},["path",{"d":"m0,0 3,0 c 7,10 12,10 17,10","class":"s4"}]],["g",{"id":"zzz"},["path",{"d":"m0,10 20,0","class":"s1"}]],["g",{"id":"zm0"},["path",{"d":"m0,10 6,0 3,10 11,0","class":"s1"}]],["g",{"id":"zm1"},["path",{"d":"M0,10 6,10 9,0 20,0","class":"s1"}]],["g",{"id":"zmx"},["path",{"d":"m6,10 3,10 11,0","class":"s1"}],["path",{"d":"M0,10 6,10 9,0 20,0","class":"s1"}],["path",{"d":"m20,15 -5,5","class":"s2"}],["path",{"d":"M20,10 10,20","class":"s2"}],["path",{"d":"M20,5 8,17","class":"s2"}],["path",{"d":"M20,0 7,13","class":"s2"}],["path",{"d":"M15,0 6.5,8.5","class":"s2"}],["path",{"d":"M10,0 9,1","class":"s2"}]],["g",{"id":"zmd"},["path",{"d":"m0,10 7,0 c 3,5 8,10 13,10","class":"s1"}]],["g",{"id":"zmu"},["path",{"d":"m0,10 7,0 C 10,5 15,0 20,0","class":"s1"}]],["g",{"id":"zmz"},["path",{"d":"m0,10 20,0","class":"s1"}]],["g",{"id":"gap"},["path",{"d":"m7,-2 -4,0 c -5,0 -5,24 -10,24 l 4,0 C 2,22 2,-2 7,-2 z","class":"s5"}],["path",{"d":"M-7,22 C -2,22 -2,-2 3,-2","class":"s1"}],["path",{"d":"M-3,22 C 2,22 2,-2 7,-2","class":"s1"}]],["g",{"id":"0mv-3"},["path",{"d":"M9,0 20,0 20,20 3,20 z","class":"s6"}],["path",{"d":"M3,20 9,0 20,0","class":"s1"}],["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"1mv-3"},["path",{"d":"M2.875,0 20,0 20,20 9,20 z","class":"s6"}],["path",{"d":"m3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}]],["g",{"id":"xmv-3"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s6"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,5 3.5,1.5","class":"s2"}],["path",{"d":"M0,10 4.5,5.5","class":"s2"}],["path",{"d":"M0,15 6,9","class":"s2"}],["path",{"d":"M0,20 4,16","class":"s2"}]],["g",{"id":"dmv-3"},["path",{"d":"M9,0 20,0 20,20 3,20 z","class":"s6"}],["path",{"d":"M3,20 9,0 20,0","class":"s1"}],["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"umv-3"},["path",{"d":"M3,0 20,0 20,20 9,20 z","class":"s6"}],["path",{"d":"m3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}]],["g",{"id":"zmv-3"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s6"}],["path",{"d":"m6,10 3,10 11,0","class":"s1"}],["path",{"d":"M0,10 6,10 9,0 20,0","class":"s1"}]],["g",{"id":"vvv-3"},["path",{"d":"M20,20 0,20 0,0 20,0","class":"s6"}],["path",{"d":"m0,20 20,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}]],["g",{"id":"vm0-3"},["path",{"d":"M0,20 0,0 3,0 9,20","class":"s6"}],["path",{"d":"M0,0 3,0 9,20","class":"s1"}],["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"vm1-3"},["path",{"d":"M0,0 0,20 3,20 9,0","class":"s6"}],["path",{"d":"M0,0 20,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0","class":"s1"}]],["g",{"id":"vmx-3"},["path",{"d":"M0,0 0,20 3,20 6,10 3,0","class":"s6"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}],["path",{"d":"m20,15 -5,5","class":"s2"}],["path",{"d":"M20,10 10,20","class":"s2"}],["path",{"d":"M20,5 8,17","class":"s2"}],["path",{"d":"M20,0 7,13","class":"s2"}],["path",{"d":"M15,0 7,8","class":"s2"}],["path",{"d":"M10,0 9,1","class":"s2"}]],["g",{"id":"vmd-3"},["path",{"d":"m0,0 0,20 20,0 C 10,20 7,10 3,0","class":"s6"}],["path",{"d":"m0,0 3,0 c 4,10 7,20 17,20","class":"s1"}],["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"vmu-3"},["path",{"d":"m0,0 0,20 3,0 C 7,10 10,0 20,0","class":"s6"}],["path",{"d":"m0,20 3,0 C 7,10 10,0 20,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}]],["g",{"id":"vmz-3"},["path",{"d":"M0,0 3,0 C 10,10 15,10 20,10 15,10 10,10 3,20 L 0,20","class":"s6"}],["path",{"d":"m0,0 3,0 c 7,10 12,10 17,10","class":"s1"}],["path",{"d":"m0,20 3,0 C 10,10 15,10 20,10","class":"s1"}]],["g",{"id":"vmv-3-3"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s6"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s6"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-3-4"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s7"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s6"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-3-5"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s8"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s6"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-4-3"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s6"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s7"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-4-4"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s7"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s7"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-4-5"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s8"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s7"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-5-3"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s6"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s8"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-5-4"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s7"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s8"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-5-5"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s8"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s8"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"0mv-4"},["path",{"d":"M9,0 20,0 20,20 3,20 z","class":"s7"}],["path",{"d":"M3,20 9,0 20,0","class":"s1"}],["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"1mv-4"},["path",{"d":"M2.875,0 20,0 20,20 9,20 z","class":"s7"}],["path",{"d":"m3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}]],["g",{"id":"xmv-4"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s7"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,5 3.5,1.5","class":"s2"}],["path",{"d":"M0,10 4.5,5.5","class":"s2"}],["path",{"d":"M0,15 6,9","class":"s2"}],["path",{"d":"M0,20 4,16","class":"s2"}]],["g",{"id":"dmv-4"},["path",{"d":"M9,0 20,0 20,20 3,20 z","class":"s7"}],["path",{"d":"M3,20 9,0 20,0","class":"s1"}],["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"umv-4"},["path",{"d":"M3,0 20,0 20,20 9,20 z","class":"s7"}],["path",{"d":"m3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}]],["g",{"id":"zmv-4"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s7"}],["path",{"d":"m6,10 3,10 11,0","class":"s1"}],["path",{"d":"M0,10 6,10 9,0 20,0","class":"s1"}]],["g",{"id":"0mv-5"},["path",{"d":"M9,0 20,0 20,20 3,20 z","class":"s8"}],["path",{"d":"M3,20 9,0 20,0","class":"s1"}],["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"1mv-5"},["path",{"d":"M2.875,0 20,0 20,20 9,20 z","class":"s8"}],["path",{"d":"m3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}]],["g",{"id":"xmv-5"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s8"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,5 3.5,1.5","class":"s2"}],["path",{"d":"M0,10 4.5,5.5","class":"s2"}],["path",{"d":"M0,15 6,9","class":"s2"}],["path",{"d":"M0,20 4,16","class":"s2"}]],["g",{"id":"dmv-5"},["path",{"d":"M9,0 20,0 20,20 3,20 z","class":"s8"}],["path",{"d":"M3,20 9,0 20,0","class":"s1"}],["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"umv-5"},["path",{"d":"M3,0 20,0 20,20 9,20 z","class":"s8"}],["path",{"d":"m3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}]],["g",{"id":"zmv-5"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s8"}],["path",{"d":"m6,10 3,10 11,0","class":"s1"}],["path",{"d":"M0,10 6,10 9,0 20,0","class":"s1"}]],["g",{"id":"vvv-4"},["path",{"d":"M20,20 0,20 0,0 20,0","class":"s7"}],["path",{"d":"m0,20 20,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}]],["g",{"id":"vm0-4"},["path",{"d":"M0,20 0,0 3,0 9,20","class":"s7"}],["path",{"d":"M0,0 3,0 9,20","class":"s1"}],["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"vm1-4"},["path",{"d":"M0,0 0,20 3,20 9,0","class":"s7"}],["path",{"d":"M0,0 20,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0","class":"s1"}]],["g",{"id":"vmx-4"},["path",{"d":"M0,0 0,20 3,20 6,10 3,0","class":"s7"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}],["path",{"d":"m20,15 -5,5","class":"s2"}],["path",{"d":"M20,10 10,20","class":"s2"}],["path",{"d":"M20,5 8,17","class":"s2"}],["path",{"d":"M20,0 7,13","class":"s2"}],["path",{"d":"M15,0 7,8","class":"s2"}],["path",{"d":"M10,0 9,1","class":"s2"}]],["g",{"id":"vmd-4"},["path",{"d":"m0,0 0,20 20,0 C 10,20 7,10 3,0","class":"s7"}],["path",{"d":"m0,0 3,0 c 4,10 7,20 17,20","class":"s1"}],["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"vmu-4"},["path",{"d":"m0,0 0,20 3,0 C 7,10 10,0 20,0","class":"s7"}],["path",{"d":"m0,20 3,0 C 7,10 10,0 20,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}]],["g",{"id":"vmz-4"},["path",{"d":"M0,0 3,0 C 10,10 15,10 20,10 15,10 10,10 3,20 L 0,20","class":"s7"}],["path",{"d":"m0,0 3,0 c 7,10 12,10 17,10","class":"s1"}],["path",{"d":"m0,20 3,0 C 10,10 15,10 20,10","class":"s1"}]],["g",{"id":"vvv-5"},["path",{"d":"M20,20 0,20 0,0 20,0","class":"s8"}],["path",{"d":"m0,20 20,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}]],["g",{"id":"vm0-5"},["path",{"d":"M0,20 0,0 3,0 9,20","class":"s8"}],["path",{"d":"M0,0 3,0 9,20","class":"s1"}],["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"vm1-5"},["path",{"d":"M0,0 0,20 3,20 9,0","class":"s8"}],["path",{"d":"M0,0 20,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0","class":"s1"}]],["g",{"id":"vmx-5"},["path",{"d":"M0,0 0,20 3,20 6,10 3,0","class":"s8"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}],["path",{"d":"m20,15 -5,5","class":"s2"}],["path",{"d":"M20,10 10,20","class":"s2"}],["path",{"d":"M20,5 8,17","class":"s2"}],["path",{"d":"M20,0 7,13","class":"s2"}],["path",{"d":"M15,0 7,8","class":"s2"}],["path",{"d":"M10,0 9,1","class":"s2"}]],["g",{"id":"vmd-5"},["path",{"d":"m0,0 0,20 20,0 C 10,20 7,10 3,0","class":"s8"}],["path",{"d":"m0,0 3,0 c 4,10 7,20 17,20","class":"s1"}],["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"vmu-5"},["path",{"d":"m0,0 0,20 3,0 C 7,10 10,0 20,0","class":"s8"}],["path",{"d":"m0,20 3,0 C 7,10 10,0 20,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}]],["g",{"id":"vmz-5"},["path",{"d":"M0,0 3,0 C 10,10 15,10 20,10 15,10 10,10 3,20 L 0,20","class":"s8"}],["path",{"d":"m0,0 3,0 c 7,10 12,10 17,10","class":"s1"}],["path",{"d":"m0,20 3,0 C 10,10 15,10 20,10","class":"s1"}]],["g",{"id":"Pclk"},["path",{"d":"M-3,12 0,3 3,12 C 1,11 -1,11 -3,12 z","class":"s9"}],["path",{"d":"M0,20 0,0 20,0","class":"s1"}]],["g",{"id":"Nclk"},["path",{"d":"M-3,8 0,17 3,8 C 1,9 -1,9 -3,8 z","class":"s9"}],["path",{"d":"m0,0 0,20 20,0","class":"s1"}]],["g",{"id":"vvv-2"},["path",{"d":"M20,20 0,20 0,0 20,0","class":"s10"}],["path",{"d":"m0,20 20,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}]],["g",{"id":"vm0-2"},["path",{"d":"M0,20 0,0 3,0 9,20","class":"s10"}],["path",{"d":"M0,0 3,0 9,20","class":"s1"}],["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"vm1-2"},["path",{"d":"M0,0 0,20 3,20 9,0","class":"s10"}],["path",{"d":"M0,0 20,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0","class":"s1"}]],["g",{"id":"vmx-2"},["path",{"d":"M0,0 0,20 3,20 6,10 3,0","class":"s10"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}],["path",{"d":"m20,15 -5,5","class":"s2"}],["path",{"d":"M20,10 10,20","class":"s2"}],["path",{"d":"M20,5 8,17","class":"s2"}],["path",{"d":"M20,0 7,13","class":"s2"}],["path",{"d":"M15,0 7,8","class":"s2"}],["path",{"d":"M10,0 9,1","class":"s2"}]],["g",{"id":"vmd-2"},["path",{"d":"m0,0 0,20 20,0 C 10,20 7,10 3,0","class":"s10"}],["path",{"d":"m0,0 3,0 c 4,10 7,20 17,20","class":"s1"}],["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"vmu-2"},["path",{"d":"m0,0 0,20 3,0 C 7,10 10,0 20,0","class":"s10"}],["path",{"d":"m0,20 3,0 C 7,10 10,0 20,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}]],["g",{"id":"vmz-2"},["path",{"d":"M0,0 3,0 C 10,10 15,10 20,10 15,10 10,10 3,20 L 0,20","class":"s10"}],["path",{"d":"m0,0 3,0 c 7,10 12,10 17,10","class":"s1"}],["path",{"d":"m0,20 3,0 C 10,10 15,10 20,10","class":"s1"}]],["g",{"id":"0mv-2"},["path",{"d":"M9,0 20,0 20,20 3,20 z","class":"s10"}],["path",{"d":"M3,20 9,0 20,0","class":"s1"}],["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"1mv-2"},["path",{"d":"M2.875,0 20,0 20,20 9,20 z","class":"s10"}],["path",{"d":"m3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}]],["g",{"id":"xmv-2"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s10"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,5 3.5,1.5","class":"s2"}],["path",{"d":"M0,10 4.5,5.5","class":"s2"}],["path",{"d":"M0,15 6,9","class":"s2"}],["path",{"d":"M0,20 4,16","class":"s2"}]],["g",{"id":"dmv-2"},["path",{"d":"M9,0 20,0 20,20 3,20 z","class":"s10"}],["path",{"d":"M3,20 9,0 20,0","class":"s1"}],["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"umv-2"},["path",{"d":"M3,0 20,0 20,20 9,20 z","class":"s10"}],["path",{"d":"m3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}]],["g",{"id":"zmv-2"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s10"}],["path",{"d":"m6,10 3,10 11,0","class":"s1"}],["path",{"d":"M0,10 6,10 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-3-2"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s10"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s6"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-4-2"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s10"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s7"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-5-2"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s10"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s8"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-2-3"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s6"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s10"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-2-4"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s7"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s10"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-2-5"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s8"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s10"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-2-2"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s10"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s10"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"arrow0"},["path",{"d":"m-12,-3 9,3 -9,3 c 1,-2 1,-4 0,-6 z","class":"s11"}],["path",{"d":"M0,0 -15,0","class":"s12"}]],["marker",{"id":"arrowhead","style":"fill:#0041c4","markerHeight":"7","markerWidth":"10","markerUnits":"strokeWidth","viewBox":"0 -4 11 8","refX":"15","refY":"0","orient":"auto"},["path",{"d":"M0 -4 11 0 0 4z"}]],["marker",{"id":"arrowtail","style":"fill:#0041c4","markerHeight":"7","markerWidth":"10","markerUnits":"strokeWidth","viewBox":"-11 -4 11 8","refX":"-15","refY":"0","orient":"auto"},["path",{"d":"M0 -4 -11 0 0 4z"}]]],["g",{"id":"waves"},["g",{"id":"lanes"}],["g",{"id":"groups"}]]]; +try { module.exports = WaveSkin; } catch(err) {} + diff --git a/src/data/extra/web/js/wavedrom/wavedrom.min.js b/src/data/extra/web/js/wavedrom/wavedrom.min.js new file mode 100644 index 00000000..0ef15e9a --- /dev/null +++ b/src/data/extra/web/js/wavedrom/wavedrom.min.js @@ -0,0 +1,3 @@ +/*! wavedrom 2019-05-21 */ + +!function o(s,i,c){function l(t,e){if(!i[t]){if(!s[t]){var r="function"==typeof require&&require;if(!e&&r)return r(t,!0);if(u)return u(t,!0);var n=new Error("Cannot find module '"+t+"'");throw n.code="MODULE_NOT_FOUND",n}var a=i[t]={exports:{}};s[t][0].call(a.exports,function(e){return l(s[t][1][e]||e)},a,a.exports,o,s,i,c)}return i[t].exports}for(var u="function"==typeof require&&require,e=0;et+u.offsetWidth||e.yr+u.offsetHeight)&&(u.parentNode.removeChild(u),document.body.removeEventListener("mousedown",f,!1))}(l=document.getElementById(c+i)).childNodes[0].addEventListener("contextmenu",function(e){var t,r,n;(u=document.createElement("div")).className="wavedromMenu",u.style.top=e.y+"px",u.style.left=e.x+"px",t=document.createElement("ul"),(r=document.createElement("li")).innerHTML="Save as PNG",t.appendChild(r),(n=document.createElement("li")).innerHTML="Save as SVG",t.appendChild(n),u.appendChild(t),document.body.appendChild(u),r.addEventListener("click",function(){var e,t,r,n,a,o,s;e="",0!==i&&(e+=(t=document.getElementById(c+0)).innerHTML.substring(166,t.innerHTML.indexOf(''))),e=[l.innerHTML.slice(0,166),e,l.innerHTML.slice(166)].join(""),r="data:image/svg+xml;base64,"+btoa(e),(n=new Image).src=r,(a=document.createElement("canvas")).width=n.width,a.height=n.height,a.getContext("2d").drawImage(n,0,0),o=a.toDataURL("image/png"),(s=document.createElement("a")).href=o,s.download="wavedrom.png",s.click(),u.parentNode.removeChild(u),document.body.removeEventListener("mousedown",f,!1)},!1),n.addEventListener("click",function(){var e,t,r,n;e="",0!==i&&(e+=(t=document.getElementById(c+0)).innerHTML.substring(166,t.innerHTML.indexOf(''))),e=[l.innerHTML.slice(0,166),e,l.innerHTML.slice(166)].join(""),r="data:image/svg+xml;base64,"+btoa(e),(n=document.createElement("a")).href=r,n.download="wavedrom.svg",n.click(),u.parentNode.removeChild(u),document.body.removeEventListener("mousedown",f,!1)},!1),u.addEventListener("contextmenu",function(e){e.preventDefault()},!1),document.body.addEventListener("mousedown",f,!1),e.preventDefault()},!1)}},{}],2:[function(e,t,r){"use strict";t.exports=function(e,t,r){var n,a,o=r.x-t.x,s=r.y-t.y,i=(t.x+r.x)/2,c=(t.y+r.y)/2;switch(e.shape){case"-":break;case"~":n="M "+t.x+","+t.y+" c "+.7*o+", 0 "+.3*o+", "+s+" "+o+", "+s;break;case"-~":n="M "+t.x+","+t.y+" c "+.7*o+", 0 "+o+", "+s+" "+o+", "+s,e.label&&(i=t.x+.75*(r.x-t.x));break;case"~-":n="M "+t.x+","+t.y+" c 0, 0 "+.3*o+", "+s+" "+o+", "+s,e.label&&(i=t.x+.25*(r.x-t.x));break;case"-|":n="m "+t.x+","+t.y+" "+o+",0 0,"+s,e.label&&(i=r.x);break;case"|-":n="m "+t.x+","+t.y+" 0,"+s+" "+o+",0",e.label&&(i=t.x);break;case"-|-":n="m "+t.x+","+t.y+" "+o/2+",0 0,"+s+" "+o/2+",0";break;case"->":a="marker-end:url(#arrowhead);stroke:#0041c4;stroke-width:1;fill:none";break;case"~>":a="marker-end:url(#arrowhead);stroke:#0041c4;stroke-width:1;fill:none",n="M "+t.x+","+t.y+" c "+.7*o+", 0 "+.3*o+", "+s+" "+o+", "+s;break;case"-~>":a="marker-end:url(#arrowhead);stroke:#0041c4;stroke-width:1;fill:none",n="M "+t.x+","+t.y+" c "+.7*o+", 0 "+o+", "+s+" "+o+", "+s,e.label&&(i=t.x+.75*(r.x-t.x));break;case"~->":a="marker-end:url(#arrowhead);stroke:#0041c4;stroke-width:1;fill:none",n="M "+t.x+","+t.y+" c 0, 0 "+.3*o+", "+s+" "+o+", "+s,e.label&&(i=t.x+.25*(r.x-t.x));break;case"-|>":a="marker-end:url(#arrowhead);stroke:#0041c4;stroke-width:1;fill:none",n="m "+t.x+","+t.y+" "+o+",0 0,"+s,e.label&&(i=r.x);break;case"|->":a="marker-end:url(#arrowhead);stroke:#0041c4;stroke-width:1;fill:none",n="m "+t.x+","+t.y+" 0,"+s+" "+o+",0",e.label&&(i=t.x);break;case"-|->":a="marker-end:url(#arrowhead);stroke:#0041c4;stroke-width:1;fill:none",n="m "+t.x+","+t.y+" "+o/2+",0 0,"+s+" "+o/2+",0";break;case"<->":a="marker-end:url(#arrowhead);marker-start:url(#arrowtail);stroke:#0041c4;stroke-width:1;fill:none";break;case"<~>":a="marker-end:url(#arrowhead);marker-start:url(#arrowtail);stroke:#0041c4;stroke-width:1;fill:none",n="M "+t.x+","+t.y+" c "+.7*o+", 0 "+.3*o+", "+s+" "+o+", "+s;break;case"<-~>":a="marker-end:url(#arrowhead);marker-start:url(#arrowtail);stroke:#0041c4;stroke-width:1;fill:none",n="M "+t.x+","+t.y+" c "+.7*o+", 0 "+o+", "+s+" "+o+", "+s,e.label&&(i=t.x+.75*(r.x-t.x));break;case"<-|>":a="marker-end:url(#arrowhead);marker-start:url(#arrowtail);stroke:#0041c4;stroke-width:1;fill:none",n="m "+t.x+","+t.y+" "+o+",0 0,"+s,e.label&&(i=r.x);break;case"<-|->":a="marker-end:url(#arrowhead);marker-start:url(#arrowtail);stroke:#0041c4;stroke-width:1;fill:none",n="m "+t.x+","+t.y+" "+o/2+",0 0,"+s+" "+o/2+",0";break;default:a="fill:none;stroke:#F00;stroke-width:1"}return{lx:i,ly:c,d:n,style:a}}},{}],3:[function(e,t,r){t.exports={chars:[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,47,74,74,118,89,25,44,44,52,78,37,44,37,37,74,74,74,74,74,74,74,74,74,74,37,37,78,78,78,74,135,89,89,96,96,89,81,103,96,37,67,89,74,109,96,103,89,103,96,89,81,96,89,127,89,87,81,37,37,37,61,74,44,74,74,67,74,74,37,74,74,30,30,67,30,112,74,74,74,74,44,67,37,74,67,95,66,65,67,44,34,44,78,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,43,74,74,74,74,34,74,44,98,49,74,78,0,98,73,53,73,44,44,44,77,71,37,44,44,49,74,111,111,111,81,89,89,89,89,89,89,133,96,89,89,89,89,37,37,37,37,96,96,103,103,103,103,103,78,103,96,96,96,96,87,89,81,74,74,74,74,74,74,118,67,74,74,74,74,36,36,36,36,74,74,74,74,74,74,74,73,81,74,74,74,74,65,74,65,89,74,89,74,89,74,96,67,96,67,96,67,96,67,96,82,96,74,89,74,89,74,89,74,89,74,89,74,103,74,103,74,103,74,103,74,96,74,96,74,37,36,37,36,37,36,37,30,37,36,98,59,67,30,89,67,67,74,30,74,30,74,39,74,44,74,30,96,74,96,74,96,74,80,96,74,103,74,103,74,103,74,133,126,96,44,96,44,96,44,89,67,89,67,89,67,89,67,81,38,81,50,81,37,96,74,96,74,96,74,96,74,96,74,96,74,127,95,87,65,87,81,67,81,67,81,67,30,84,97,91,84,91,84,94,92,73,104,109,91,84,81,84,100,82,76,74,103,91,131,47,40,99,77,37,79,130,100,84,104,114,87,126,101,87,84,93,84,69,84,46,52,82,52,82,114,89,102,96,100,98,91,70,88,88,77,70,85,89,77,67,84,39,65,61,39,189,173,153,111,105,61,123,123,106,89,74,37,30,103,74,96,74,96,74,96,74,96,74,96,74,81,91,81,91,81,130,131,102,84,103,84,87,78,104,81,104,81,88,76,37,189,173,153,103,84,148,90,100,84,89,74,133,118,103,81],other:114}},{}],4:[function(e,t,r){"use strict";var n=e("onml/lib/stringify.js"),a=e("./w3.js");t.exports=function(e){var t=document.createElementNS(a.svg,"g");return t.innerHTML=n(e),t.childNodes[0]}},{"./w3.js":33,"onml/lib/stringify.js":36}],5:[function(e,t,r){"use strict";var n=e("./eva"),a=e("./render-wave-form");t.exports=function(){a(0,n("InputJSON_0"),"WaveDrom_Display_")}},{"./eva":6,"./render-wave-form":30}],6:[function(require,module,exports){"use strict";function eva(id){var TheTextBox,source;function erra(e){return{signal:[{name:["tspan",["tspan",{class:"error h5"},"Error: "],e.message]}]}}if(TheTextBox=document.getElementById(id),TheTextBox.type&&"textarea"===TheTextBox.type)try{source=eval("("+TheTextBox.value+")")}catch(e){return erra(e)}else try{source=eval("("+TheTextBox.innerHTML+")")}catch(e){return erra(e)}if("[object Object]"!==Object.prototype.toString.call(source))return erra({message:'[Semantic]: The root has to be an Object: "{signal:[...]}"'});if(source.signal){if("[object Array]"!==Object.prototype.toString.call(source.signal))return erra({message:'[Semantic]: "signal" object has to be an Array "signal:[]"'})}else if(source.assign){if("[object Array]"!==Object.prototype.toString.call(source.assign))return erra({message:'[Semantic]: "assign" object hasto be an Array "assign:[]"'})}else if(!source.reg)return erra({message:'[Semantic]: "signal:[...]" or "assign:[...]" property is missing inside the root Object'});return source}module.exports=eva},{}],7:[function(e,t,r){"use strict";t.exports=function(e){var t=0,r=0,n=[];return e.forEach(function(e){"vvv-2"===e||"vvv-3"===e||"vvv-4"===e||"vvv-5"===e?r+=1:0!==r&&(n.push(t-(r+1)/2),r=0),t+=1}),0!==r&&n.push(t-(r+1)/2),n}},{}],8:[function(e,t,r){"use strict";t.exports=function(e,t,r){var n,a,o=[];if(4===e.length){for(a=0;a"===o&&(i=!1,o=l.shift()),n=1;"."===l[0]||"|"===l[0];)l.shift(),n+=1;u=i?u.concat(h(a+o,0,n-r.period)):u.concat(h(a+o,t,n))}for(s=0;sdiv.wavedromMenu{position:fixed;border:solid 1pt#CCCCCC;background-color:white;box-shadow:0px 10px 20px #808080;cursor:default;margin:0px;padding:0px;}div.wavedromMenu>ul{margin:0px;padding:0px;}div.wavedromMenu>ul>li{padding:2px 10px;list-style:none;}div.wavedromMenu>ul>li:hover{background-color:#b5d5ff;}'}},{"./append-save-as-dialog":1,"./eva":6,"./render-wave-form":30}],18:[function(e,t,r){"use strict";t.exports=function e(t,r){var n,a,o={},s={x:10};for("string"!=typeof t[0]&&"number"!=typeof t[0]||(a=t[0],s.x=25),r.x+=s.x,n=0;n"===r&&(s=!1,r=a.shift()),o+=s?1:2*t.period,"|"===r&&n.push(["use",{"xlink:href":"#gap",transform:"translate("+t.xs*((o-(s?0:t.period))*t.hscale-t.phase)+")"}]);return n}t.exports=function(e,t,r){var n,a,o=[];if(e)for(n in e)r.period=e[n].period?e[n].period:1,r.phase=(e[n].phase?2*e[n].phase:0)+r.xmin_cfg,a=s(e[n].wave,r),o=o.concat([["g",{id:"wavegap_"+n+"_"+t,transform:"translate(0,"+(r.y0+n*r.yo)+")"}].concat(a)]);return["g",{id:"wavegaps_"+t}].concat(o)}},{}],23:[function(e,t,r){"use strict";var c=e("tspan");t.exports=function(e,r,n){var a,o,s,i=["g"];return e.forEach(function(e,t){i.push(["path",{id:"group_"+t+"_"+r,d:"m "+(e.x+.5)+","+(e.y*n.yo+3.5+n.yh0+n.yh1)+" c -3,0 -5,2 -5,5 l 0,"+(e.height*n.yo-16)+" c 0,3 2,5 5,5",style:"stroke:#0041c4;stroke-width:1;fill:none"}]),void 0!==e.name&&(a=e.x-10,o=n.yo*(e.y+e.height/2)+n.yh0+n.yh1,(s=c.parse(e.name)).unshift("text",{"text-anchor":"middle",class:"info","xml:space":"preserve"}),i.push(["g",{transform:"translate("+a+","+o+")"},["g",{transform:"rotate(270)"},s]]))}),i}},{tspan:37}],24:[function(e,t,r){"use strict";var n=e("tspan"),a=e("./text-width.js");t.exports=function(e,t){var r=a(t,8)+2;return["g",{transform:"translate("+e.x+","+e.y+")"},["rect",{x:-(r>>1),y:-5,width:r,height:10,style:"fill:#FFF;"}],["text",{"text-anchor":"middle",y:3,style:"font-size:8px;"}].concat(n.parse(t))]}},{"./text-width.js":32,tspan:37}],25:[function(e,t,r){"use strict";var s=e("./render-marks"),i=e("./render-arcs"),c=e("./render-gaps");t.exports=function(e,t,r,n,a,o){return[s(t,e,o,a)].concat(r.res).concat([i(n.lanes,e,a,o)]).concat([c(n.lanes,e,o)])}},{"./render-arcs":20,"./render-gaps":22,"./render-marks":26}],26:[function(e,t,r){"use strict";var m=e("tspan");function u(e,t,r){return e[t]&&e[t].text?[["text",{x:e.xmax*e.xs/2,y:r,fill:"#000","text-anchor":"middle","xml:space":"preserve"}].concat(m.parse(e[t].text))]:[]}function f(e,t,r,n,a,o,s){var i,c,l,u,f=1,d=0,h=[];if(void 0===e[t]||void 0===e[t][r])return[];if("string"==typeof(c=e[t][r]))c=c.split(" ");else if("number"==typeof c||"boolean"==typeof c)for(i=Number(c),c=[],u=0;u>o&1,t+n*(a/2-o-.5),r));return s}function n(e,o){var s=o.hspace/o.mod,i=["g",{transform:d(s/2,o.vspace/5)}],c=["g",{transform:d(s/2,o.vspace/2+4)}],l=["g",{transform:d(s/2,o.vspace)}],u=["g",{transform:d(0,o.vspace/4)}];return e.forEach(function(e){var t,r,n,a;if(t=0,r=o.mod-1,n=o.index*o.mod,a=(o.index+1)*o.mod-1,e.lsb/o.mod>>0===o.index)t=e.lsbm,n=e.lsb,e.msb/o.mod>>0===o.index&&(a=e.msb,r=e.msbm);else{if(e.msb/o.mod>>0!==o.index)return;a=e.msb,r=e.msbm}i.push(h(n,s*(o.mod-t-1))),t!==r&&i.push(h(a,s*(o.mod-r-1))),e.name&&c.push(p(e.name,s*(o.mod-(r+t)/2-1),0,s,e.bits)),void 0!==e.name&&void 0===e.type||u.push(["rect",{style:"fill-opacity:0.1"+function(e){var t=f[e];return void 0!==t?";fill:hsl("+t+",100%,50%)":""}(e.type),x:s*(o.mod-r-1),y:0,width:s*(r-t+1),height:o.vspace/2}]),void 0!==e.attr&&l.push(function(n,e,a,t,r){var o=a*(e.mod-(r+t)/2-1);return Array.isArray(n.attr)?n.attr.reduce(function(e,t,r){return null==t?e:e.concat([p(t,o,16*r,a,n.bits)])},["g",{}]):p(n.attr,o,0,a,n.bits)}(e,o,s,t,r))}),["g",u,i,c,l]}function u(e,t){return["g",{transform:d(4.5,(t.lanes-t.index-1)*t.vspace+.5),"text-anchor":"middle","font-size":t.fontsize,"font-family":t.fontfamily||"sans-serif","font-weight":t.fontweight||"normal"},function(e,t){var r=t.hspace,n=t.vspace,a=t.mod,o=["g",{transform:d(0,n/4),stroke:"black","stroke-width":1,"stroke-linecap":"round"}];o.push(c(r)),o.push(l(n/2)),o.push(c(r,0,n/2));for(var s=t.index*t.mod,i=t.mod;i===t.mod||e.some(function(e){return e.lsb===s})?o.push(l(n/2,i*(r/a))):(o.push(l(n/16,i*(r/a))),o.push(l(n/16,i*(r/a),7*n/16))),s++,--i;);return o}(e,t),n(e,t)]}t.exports=function(e,t){(t="object"==typeof t?t:{}).vspace=i(t.vspace,19,80),t.hspace=i(t.hspace,39,800),t.lanes=i(t.lanes,0,1),t.bits=i(t.bits,4,32),t.fontsize=i(t.fontsize,5,14),t.bigendian=t.bigendian||!1;var r,n=16*e.reduce(function(e,t){return Math.max(e,Array.isArray(t.attr)?t.attr.length:0)},0),a=function(e,t){return["svg",{xmlns:"http://www.w3.org/2000/svg",width:e,height:t,viewBox:[0,0,e,t].join(" ")}]}(t.hspace+9,(t.vspace+n)*t.lanes+5),o=0,s=t.bits/t.lanes;for(t.mod=0|s,e.forEach(function(e){e.lsb=o,e.lsbm=o%s,o+=e.bits,e.msb=o-1,e.msbm=e.msb%s}),r=0;r");a+=">"}switch(typeof t){case"string":case"number":case"boolean":return void(o+=t+i)}s=!1,o+=n(t)})?a+"/>"+i:s?a+function(e){var t=e.split("\n"),r=[];return t.forEach(function(e){""!==e.trim()&&r.push(e)}),r.join("\n")}(o)+""+i:a+i+r(o)+""+i}(e)}},{}],37:[function(e,t,r){"use strict";var n=e("./parse"),a=e("./reparse");r.parse=n,r.reparse=a},{"./parse":38,"./reparse":39}],38:[function(e,t,r){"use strict";var s=/||||||||<\/o>|<\/ins>|<\/s>|<\/sub>|<\/sup>|<\/b>|<\/i>|<\/tt>/;function i(r,e){e.add&&e.add.split(";").forEach(function(e){var t=e.split(" ");r[t[0]][t[1]]=!0}),e.del&&e.del.split(";").forEach(function(e){var t=e.split(" ");delete r[t[0]][t[1]]})}var c={"":{add:"text-decoration overline"},"":{del:"text-decoration overline"},"":{add:"text-decoration underline"},"":{del:"text-decoration underline"},"":{add:"text-decoration line-through"},"":{del:"text-decoration line-through"},"":{add:"font-weight bold"},"":{del:"font-weight bold"},"":{add:"font-style italic"},"":{del:"font-style italic"},"":{add:"baseline-shift sub;font-size .7em"},"":{del:"baseline-shift sub;font-size .7em"},"":{add:"baseline-shift super;font-size .7em"},"":{del:"baseline-shift super;font-size .7em"},"":{add:"font-family monospace"},"":{del:"font-family monospace"}};function l(n){return Object.keys(n).reduce(function(e,t){var r=Object.keys(n[t]);return 0 + + + + VNoteX Markdown Viewer + + + + + + + + + + + + +

    + + + + + + +
    + + diff --git a/src/main.cpp b/src/main.cpp new file mode 100644 index 00000000..086e2cb1 --- /dev/null +++ b/src/main.cpp @@ -0,0 +1,179 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +using namespace vnotex; + +void loadTranslators(QApplication &p_app); + +void initWebEngineSettings(); + +int main(int argc, char *argv[]) +{ + SingleInstanceGuard guard; + bool canRun = guard.tryRun(); + if (!canRun) { + return 0; + } + + QTextCodec *codec = QTextCodec::codecForName("UTF8"); + if (codec) { + QTextCodec::setCodecForLocale(codec); + } + + QCoreApplication::setAttribute(Qt::AA_UseHighDpiPixmaps); + + // This only takes effect on Win, X11 and Android. + QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling); + + // Set OpenGL option on Windows. + // Set environment QT_OPENGL to "angle/desktop/software". +#if defined(Q_OS_WIN) + { + auto option = SessionConfig::getOpenGLAtBootstrap(); + qInfo() << "OpenGL option" << SessionConfig::openGLToString(option); + switch (option) { + case SessionConfig::OpenGL::Desktop: + QCoreApplication::setAttribute(Qt::AA_UseDesktopOpenGL); + break; + + case SessionConfig::OpenGL::Angle: + QCoreApplication::setAttribute(Qt::AA_UseOpenGLES); + break; + + case SessionConfig::OpenGL::Software: + QCoreApplication::setAttribute(Qt::AA_UseSoftwareOpenGL); + break; + + default: + break; + } + } +#endif + + QApplication app(argc, argv); + + initWebEngineSettings(); + + const QString iconPath = ":/vnotex/data/core/icons/vnote.ico"; + // Make sense only on Windows. + app.setWindowIcon(QIcon(iconPath)); + + app.setApplicationName(ConfigMgr::c_appName); + app.setOrganizationName(ConfigMgr::c_orgName); + + try { + app.setApplicationVersion(ConfigMgr::getInst().getConfig().getVersion()); + } catch (Exception &e) { + MessageBoxHelper::notify(MessageBoxHelper::Critical, + QApplication::tr("%1 failed to start.").arg(ConfigMgr::c_appName), + QApplication::tr("Failed to initialize configuration manager. " + "Please check if all the files are intact or reinstall the application."), + e.what()); + return -1; + } + + // Init logger after app info is set. + Logger::init(false); + + qInfo() << QString("%1 (v%2) started at %3 (%4)").arg(ConfigMgr::c_appName, + app.applicationVersion(), + QDateTime::currentDateTime().toString(), + QSysInfo::productType()); + + qInfo() << "OpenSSL build version:" << QSslSocket::sslLibraryBuildVersionString() + << "link version:" << QSslSocket::sslLibraryVersionString(); + + if (QSslSocket::sslLibraryBuildVersionNumber() != QSslSocket::sslLibraryVersionNumber()) { + qWarning() << "versions of the built and linked OpenSSL mismatch, network may not work"; + } + + // TODO: parse command line options. + + if (app.styleSheet().isEmpty()) { + auto style = VNoteX::getInst().getThemeMgr().fetchQtStyleSheet(); + if (!style.isEmpty()) { + app.setStyleSheet(style); + } + } + + loadTranslators(app); + + MainWindow window; + + window.show(); + VNoteX::getInst().getThemeMgr().setBaseBackground(window.palette().color(QPalette::Base)); + + window.kickOffOnStart(); + + int ret = app.exec(); + return ret; +} + +void loadTranslators(QApplication &p_app) +{ + auto localeName = ConfigMgr::getInst().getCoreConfig().getLocale(); + if (!localeName.isEmpty()) { + QLocale::setDefault(QLocale(localeName)); + } + + QLocale locale; + qInfo() << "locale:" << locale.name(); + + const QString resourceTranslationFolder(QStringLiteral(":/translations")); + const QString envTranslationFolder(QStringLiteral("translations")); + + // Load missing translation for Qt (QTextEdit/QPlainTextEdit/QTextBrowser). + QScopedPointer widgetsTranslator(new QTranslator(&p_app)); + if (widgetsTranslator->load(locale, "widgets", "_", resourceTranslationFolder)) { + p_app.installTranslator(widgetsTranslator.take()); + } + + QScopedPointer dialogButtonBoxTranslator(new QTranslator(&p_app)); + if (dialogButtonBoxTranslator->load(locale, "qdialogbuttonbox", "_", resourceTranslationFolder)) { + p_app.installTranslator(dialogButtonBoxTranslator.take()); + } + + QScopedPointer webengineTranslator(new QTranslator(&p_app)); + if (webengineTranslator->load(locale, "qwebengine", "_", resourceTranslationFolder)) { + p_app.installTranslator(webengineTranslator.take()); + } + + // Load translation for Qt from resource. + QScopedPointer qtTranslator(new QTranslator(&p_app)); + if (qtTranslator->load(locale, "qt", "_", resourceTranslationFolder)) { + p_app.installTranslator(qtTranslator.take()); + } + + // Load translation for Qt from env. + QScopedPointer qtEnvTranslator(new QTranslator(&p_app)); + if (qtEnvTranslator->load(locale, "qt", "_", envTranslationFolder)) { + p_app.installTranslator(qtEnvTranslator.take()); + } +} + +void initWebEngineSettings() +{ + auto settings = QWebEngineSettings::defaultSettings(); + settings->setAttribute(QWebEngineSettings::LocalContentCanAccessRemoteUrls, true); +} diff --git a/src/src.pro b/src/src.pro new file mode 100644 index 00000000..e6eeedda --- /dev/null +++ b/src/src.pro @@ -0,0 +1,55 @@ +lessThan(QT_MAJOR_VERSION, 5): error("requires Qt 5 and above") + +equals(QT_MAJOR_VERSION, 5):lessThan(QT_MINOR_VERSION, 12): error("requires Qt 5.12 and above") + +QT += core gui widgets webenginewidgets webchannel network svg printsupport + +CONFIG -= qtquickcompiler + +# Enable message log in release build +DEFINES += QT_MESSAGELOGCONTEXT + +TARGET = vnotex +TEMPLATE = app + +win32:CONFIG(release, debug|release) { + DESTDIR = $$OUT_PWD/release +} else:win32:CONFIG(debug, debug|release) { + DESTDIR = $$OUT_PWD/debug +} else { + DESTDIR = $$OUT_PWD +} + +RC_ICONS = data/core/icons/vnote.ico +ICON = data/core/icons/vnote.icns + +SOURCES += \ + main.cpp + +INCLUDEPATH *= $$PWD + +LIBS_FOLDER = $$PWD/../libs + +include($$LIBS_FOLDER/vtitlebar/vtitlebar_export.pri) + +include($$LIBS_FOLDER/vtextedit/src/editor/editor_export.pri) + +include($$PWD/utils/utils.pri) + +include($$PWD/core/core.pri) + +include($$PWD/widgets/widgets.pri) + +RESOURCES += \ + $$PWD/data/core/core.qrc + +RCC_BINARY_SOURCES += $$PWD/data/extra/extra.qrc + +rcc_binary.commands = $$[QT_HOST_BINS]/rcc -name ${QMAKE_FILE_IN_BASE} -binary ${QMAKE_FILE_IN} -o ${QMAKE_FILE_OUT} +rcc_binary.depend_command = $$[QT_HOST_BINS]/rcc -list $$QMAKE_RESOURCE_FLAGS ${QMAKE_FILE_IN} +rcc_binary.input = RCC_BINARY_SOURCES +rcc_binary.output = $$DESTDIR/${QMAKE_FILE_IN_BASE}.rcc +rcc_binary.CONFIG += no_link target_predeps +QMAKE_EXTRA_COMPILERS += rcc_binary + +OTHER_FILES += $$RCC_BINARY_SOURCES diff --git a/src/utils/clipboardutils.cpp b/src/utils/clipboardutils.cpp new file mode 100644 index 00000000..4501df39 --- /dev/null +++ b/src/utils/clipboardutils.cpp @@ -0,0 +1,196 @@ +#include "clipboardutils.h" + +#include +#include +#include +#include +#include +#include +#include + +#include "utils.h" + +using namespace vnotex; + +QString ClipboardUtils::getTextFromClipboard() +{ + QClipboard *clipboard = QApplication::clipboard(); + QString subtype("plain"); + return clipboard->text(subtype); +} + +void ClipboardUtils::setTextToClipboard(const QString &p_text) +{ + QClipboard *clipboard = QApplication::clipboard(); + clipboard->setText(p_text); +} + +void ClipboardUtils::clearClipboard() +{ + QClipboard *clipboard = QApplication::clipboard(); + clipboard->setText(QString()); +} + +void ClipboardUtils::setMimeDataToClipboard(QClipboard *p_clipboard, + QMimeData *p_mimeData, + QClipboard::Mode p_mode) +{ +#if defined(Q_OS_WIN) || defined(Q_OS_LINUX) + // On Windows, setMimeData() may fail. We will repeatedly retry until succeed. + // On Linux, QXcbClipboard::setMimeData: Cannot set X11 selection owner. + setMimeDataLoop(p_clipboard, p_mimeData, p_mode); +#else + p_clipboard->setMimeData(p_mimeData, p_mode); +#endif +} + +bool ClipboardUtils::mimeDataEquals(const QMimeData *p_a, const QMimeData *p_b) +{ + if (!p_a && !p_b) { + return true; + } + + if ((p_a && !p_b) || (!p_a && p_b)) { + return false; + } + + if (p_a->hasUrls()) { + if (!p_b->hasUrls()) { + return false; + } + + if (p_a->urls() != p_b->urls()) { + return false; + } + } else if (p_b->hasUrls()) { + return false; + } + + if (p_a->hasText()) { + if (!p_b->hasText()) { + return false; + } + + if (p_a->text() != p_b->text()) { + return false; + } + } else if (p_b->hasText()) { + return false; + } + + if (p_a->hasColor()) { + if (!p_b->hasColor()) { + return false; + } + + if (p_a->colorData() != p_b->colorData()) { + return false; + } + } else if (p_b->hasColor()) { + return false; + } + + if (p_a->hasHtml()) { + if (!p_b->hasHtml()) { + return false; + } + + if (p_a->html() != p_b->html()) { + return false; + } + } else if (p_b->hasHtml()) { + return false; + } + + if (p_a->hasImage()) { + if (!p_b->hasImage()) { + return false; + } + + if (p_a->imageData() != p_b->imageData()) { + return false; + } + } else if (p_b->hasImage()) { + return false; + } + + return true; +} + +void ClipboardUtils::setMimeDataLoop(QClipboard *p_clipboard, + QMimeData *p_mimeData, + QClipboard::Mode p_mode) +{ + for (int i = 0; i < 100; ++i) { + // Make a backup. + auto tmp = cloneMimeData(p_mimeData); + + p_clipboard->setMimeData(p_mimeData, p_mode); + const QMimeData *out = p_clipboard->mimeData(p_mode); + if (mimeDataEquals(tmp.get(), out)) { + return; + } + + qDebug() << "failed to set mimeData, retry" << i; + p_mimeData = tmp.release(); + Utils::sleepWait(100 /* ms */); + } + + delete p_mimeData; +} + +std::unique_ptr ClipboardUtils::cloneMimeData(const QMimeData *p_mimeData) +{ + std::unique_ptr da(new QMimeData()); + if (p_mimeData->hasUrls()) { + da->setUrls(p_mimeData->urls()); + } + + if (p_mimeData->hasText()) { + da->setText(p_mimeData->text()); + } + + if (p_mimeData->hasColor()) { + da->setColorData(p_mimeData->colorData()); + } + + if (p_mimeData->hasHtml()) { + da->setHtml(p_mimeData->html()); + } + + if (p_mimeData->hasImage()) { + da->setImageData(p_mimeData->imageData()); + } + + return da; +} + +void ClipboardUtils::setImageToClipboard(QClipboard *p_clipboard, + const QImage &p_image, + QClipboard::Mode p_mode) +{ +#if defined(Q_OS_WIN) || defined(Q_OS_LINUX) + // On Windows, setImage() may fail. We will repeatedly retry until succeed. + // On Linux, QXcbClipboard::setMimeData: Cannot set X11 selection owner. + setImageLoop(p_clipboard, p_image, p_mode); +#else + p_clipboard->setImage(p_image, p_mode); +#endif +} + +void ClipboardUtils::setImageLoop(QClipboard *p_clipboard, + const QImage &p_image, + QClipboard::Mode p_mode) +{ + for (int i = 0; i < 100; ++i) { + p_clipboard->setImage(p_image, p_mode); + + QImage image = p_clipboard->image(p_mode); + if (!image.isNull()) { + break; + } + + qWarning() << "failed to set image, retry" << i; + Utils::sleepWait(100 /* ms */); + } +} diff --git a/src/utils/clipboardutils.h b/src/utils/clipboardutils.h new file mode 100644 index 00000000..47e83df9 --- /dev/null +++ b/src/utils/clipboardutils.h @@ -0,0 +1,45 @@ +#ifndef CLIPBOARDUTILS_H +#define CLIPBOARDUTILS_H + +#include + +#include + +namespace vnotex +{ + class ClipboardUtils + { + public: + ClipboardUtils() = delete; + + static QString getTextFromClipboard(); + + static void setTextToClipboard(const QString &p_text); + + // @p_mimeData will be owned by utils. + static void setMimeDataToClipboard(QClipboard *p_clipboard, + QMimeData *p_mimeData, + QClipboard::Mode p_mode = QClipboard::Clipboard); + + static void clearClipboard(); + + static std::unique_ptr cloneMimeData(const QMimeData *p_mimeData); + + static void setImageToClipboard(QClipboard *p_clipboard, + const QImage &p_image, + QClipboard::Mode p_mode = QClipboard::Clipboard); + + private: + static bool mimeDataEquals(const QMimeData *p_a, const QMimeData *p_b); + + static void setMimeDataLoop(QClipboard *p_clipboard, + QMimeData *p_mimeData, + QClipboard::Mode p_mode); + + static void setImageLoop(QClipboard *p_clipboard, + const QImage &p_image, + QClipboard::Mode p_mode); + }; +} // ns vnotex + +#endif // CLIPBOARDUTILS_H diff --git a/src/utils/docsutils.cpp b/src/utils/docsutils.cpp new file mode 100644 index 00000000..82990f04 --- /dev/null +++ b/src/utils/docsutils.cpp @@ -0,0 +1,57 @@ +#include "docsutils.h" + +#include + +#include "fileutils.h" + +using namespace vnotex; + +QStringList DocsUtils::s_searchPaths; + +QString DocsUtils::s_locale = "en_US"; + +void DocsUtils::addSearchPath(const QString &p_path) +{ + s_searchPaths.append(p_path); +} + +QString DocsUtils::getDocText(const QString &p_baseName) +{ + auto filePath = getDocFile(p_baseName); + if (!filePath.isEmpty()) { + return FileUtils::readTextFile(filePath); + } + + return ""; +} + +QString DocsUtils::getDocFile(const QString &p_baseName) +{ + const auto shortLocale = s_locale.split('_')[0]; + + const auto fullLocaleName = QString("%1/%2").arg(s_locale, p_baseName); + const auto shortLocaleName = QString("%1/%2").arg(shortLocale, p_baseName); + const auto defaultLocaleName = QString("%1/%2").arg(QStringLiteral("en"), p_baseName); + + for (const auto &pa : s_searchPaths) { + QDir dir(pa); + if (!dir.exists()) { + continue; + } + + if (dir.exists(fullLocaleName)) { + return dir.filePath(fullLocaleName); + } else if (dir.exists(shortLocaleName)) { + return dir.filePath(shortLocaleName); + } else if (dir.exists(defaultLocaleName)) { + return dir.filePath(defaultLocaleName); + } + } + + return ""; +} + +void DocsUtils::setLocale(const QString &p_locale) +{ + s_locale = p_locale; +} diff --git a/src/utils/docsutils.h b/src/utils/docsutils.h new file mode 100644 index 00000000..d1e6b5cd --- /dev/null +++ b/src/utils/docsutils.h @@ -0,0 +1,28 @@ +#ifndef DOCSUTILS_H +#define DOCSUTILS_H + +#include + +namespace vnotex +{ + class DocsUtils + { + public: + DocsUtils() = delete; + + static QString getDocText(const QString &p_baseName); + + static QString getDocFile(const QString &p_baseName); + + static void addSearchPath(const QString &p_path); + + static void setLocale(const QString &p_locale); + + private: + static QStringList s_searchPaths; + + static QString s_locale; + }; +} + +#endif // DOCSUTILS_H diff --git a/src/utils/fileutils.cpp b/src/utils/fileutils.cpp new file mode 100644 index 00000000..61020e9d --- /dev/null +++ b/src/utils/fileutils.cpp @@ -0,0 +1,334 @@ +#include "fileutils.h" + +#include +#include +#include +#include + +#include "../core/exception.h" +#include "pathutils.h" + +using namespace vnotex; + +QByteArray FileUtils::readFile(const QString &p_filePath) +{ + QFile file(p_filePath); + if (!file.open(QIODevice::ReadOnly)) { + Exception::throwOne(Exception::Type::FailToReadFile, + QString("fail to read file: %1").arg(p_filePath)); + } + + return file.readAll(); +} + +QString FileUtils::readTextFile(const QString &p_filePath) +{ + QFile file(p_filePath); + if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { + Exception::throwOne(Exception::Type::FailToReadFile, + QString("fail to read file: %1").arg(p_filePath)); + } + + QString text(file.readAll()); + file.close(); + return text; +} + +void FileUtils::writeFile(const QString &p_filePath, const QByteArray &p_data) +{ + QFile file(p_filePath); + if (!file.open(QIODevice::WriteOnly)) { + Exception::throwOne(Exception::Type::FailToWriteFile, + QString("fail to write to file: %1").arg(p_filePath)); + } + + file.write(p_data); + file.close(); +} + +void FileUtils::writeFile(const QString &p_filePath, const QString &p_text) +{ + QFile file(p_filePath); + if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) { + Exception::throwOne(Exception::Type::FailToWriteFile, + QString("fail to write to file: %1").arg(p_filePath)); + } + + QTextStream stream(&file); + stream << p_text; + file.close(); +} + +void FileUtils::renameFile(const QString &p_path, const QString &p_name) +{ + Q_ASSERT(PathUtils::isLegalFileName(p_name)); + QString newFilePath(PathUtils::concatenateFilePath(PathUtils::parentDirPath(p_path), p_name)); + QFile file(p_path); + if (!file.exists() || !file.rename(newFilePath)) { + Exception::throwOne(Exception::Type::FailToRenameFile, + QString("fail to rename file: %1").arg(p_path)); + } +} + +bool FileUtils::childExistsCaseInsensitive(const QString &p_dirPath, const QString &p_name) +{ + QDir dir(p_dirPath); + if (!dir.exists()) { + return false; + } + + auto name = p_name.toLower(); + auto children = dir.entryList(QDir::Dirs | QDir::Files | QDir::Hidden | QDir::NoDotAndDotDot); + for (const auto &child : children) { + if (child.toLower() == name) { + return true; + } + } + + return false; +} + +bool FileUtils::existsCaseInsensitive(const QString &p_path) +{ + return childExistsCaseInsensitive(PathUtils::parentDirPath(p_path), PathUtils::fileName(p_path)); +} + +void FileUtils::copyFile(const QString &p_filePath, + const QString &p_destPath, + bool p_move) +{ + if (PathUtils::areSamePaths(p_filePath, p_destPath)) { + return; + } + + QDir dir; + if (!dir.mkpath(PathUtils::parentDirPath(p_destPath))) { + Exception::throwOne(Exception::Type::FailToCreateDir, + QString("fail to create directory: %1").arg(PathUtils::parentDirPath(p_destPath))); + } + + bool failed = false; + if (p_move) { + QFile file(p_filePath); + if (!file.rename(p_destPath)) { + failed = true; + } + } else { + if (!QFile::copy(p_filePath, p_destPath)) { + failed = true; + } + } + + if (failed) { + Exception::throwOne(Exception::Type::FailToCopyFile, + QString("fail to copy file: %1 %2").arg(p_filePath, p_destPath)); + } +} + +void FileUtils::copyDir(const QString &p_dirPath, + const QString &p_destPath, + bool p_move) +{ + if (PathUtils::areSamePaths(p_dirPath, p_destPath)) { + return; + } + + if (QFileInfo::exists(p_destPath)) { + Exception::throwOne(Exception::Type::FailToCopyDir, + QString("target directory %1 already exists").arg(p_destPath)); + } + + // QDir.rename() could not move directory across dirves. + + // Create target directory. + QDir destDir(p_destPath); + if (!destDir.mkpath(p_destPath)) { + Exception::throwOne(Exception::Type::FailToCreateDir, + QString("fail to create directory: %1").arg(p_destPath)); + } + + // Copy directory contents recursively. + QDir srcDir(p_dirPath); + auto nodes = srcDir.entryInfoList(QDir::Dirs + | QDir::Files + | QDir::Hidden + | QDir::NoSymLinks + | QDir::NoDotAndDotDot); + for (const auto &node : nodes) { + auto name = node.fileName(); + if (node.isDir()) { + copyDir(srcDir.filePath(name), destDir.filePath(name), p_move); + } else { + Q_ASSERT(node.isFile()); + copyFile(srcDir.filePath(name), destDir.filePath(name), p_move); + } + } + + if (p_move) { + if (!destDir.rmdir(p_dirPath)) { + Exception::throwOne(Exception::Type::FailToRemoveDir, + QString("fail to remove source directory after move: %1").arg(p_dirPath)); + } + } +} + +QString FileUtils::renameIfExistsCaseInsensitive(const QString &p_path) +{ + QFileInfo fi(p_path); + auto dirPath = fi.absolutePath(); + auto baseName = fi.completeBaseName(); + auto suffix = fi.suffix(); + auto name = fi.fileName(); + int idx = 1; + while (childExistsCaseInsensitive(dirPath, name)) { + name = QString("%1_%2").arg(baseName, QString::number(idx)); + if (!suffix.isEmpty()) { + name += QStringLiteral(".") + suffix; + } + + ++idx; + } + + return PathUtils::concatenateFilePath(dirPath, name); +} + +void FileUtils::removeFile(const QString &p_filePath) +{ + Q_ASSERT(QFileInfo(p_filePath).isFile()); + QFile file(p_filePath); + if (!file.remove()) { + Exception::throwOne(Exception::Type::FailToRemoveFile, + QString("fail to remove file: %1").arg(p_filePath)); + } +} + +bool FileUtils::removeDirIfEmpty(const QString &p_dirPath) +{ + QDir dir(p_dirPath); + if (!dir.isEmpty()) { + return false; + } + + if (!dir.rmdir(p_dirPath)) { + Exception::throwOne(Exception::Type::FailToRemoveFile, + QString("fail to remove directory: %1").arg(p_dirPath)); + return false; + } + + return true; +} + +void FileUtils::removeDir(const QString &p_dirPath) +{ + QDir dir(p_dirPath); + if (!dir.removeRecursively()) { + Exception::throwOne(Exception::Type::FailToRemoveFile, + QString("fail to remove directory recursively: %1").arg(p_dirPath)); + } +} + +bool FileUtils::isPlatformNameCaseSensitive() +{ +#if defined(Q_OS_WIN) + return false; +#else + return true; +#endif +} + +bool FileUtils::isText(const QString &p_filePath) +{ + QMimeDatabase mimeDatabase; + auto mimeType = mimeDatabase.mimeTypeForFile(p_filePath); + if (mimeType.name().startsWith(QStringLiteral("text/"))) { + return true; + } + + return mimeType.inherits(QStringLiteral("text/plain")); +} + +QImage FileUtils::imageFromFile(const QString &p_filePath) +{ + QImage img(p_filePath); + if (!img.isNull()) { + return img; + } + + // @p_filePath may has a wrong suffix which indicates a wrong image format. + img.loadFromData(readFile(p_filePath)); + return img; +} + +QPixmap FileUtils::pixmapFromFile(const QString &p_filePath) +{ + QPixmap pixmap; + pixmap.loadFromData(readFile(p_filePath)); + return pixmap; +} + +QString FileUtils::generateUniqueFileName(const QString &p_folderPath, + const QString &p_hints, + const QString &p_suffix) +{ + auto fileName = generateRandomFileName(p_hints, p_suffix); + int suffixIdx = fileName.lastIndexOf(QLatin1Char('.')); + auto baseName = suffixIdx == -1 ? fileName : fileName.left(suffixIdx); + auto suffix = suffixIdx == -1 ? QStringLiteral("") : fileName.mid(suffixIdx); + int index = 1; + while (childExistsCaseInsensitive(p_folderPath, fileName)) { + fileName = QString("%1_%2%3").arg(baseName, QString::number(index++), suffix); + } + + return fileName; +} + +QString FileUtils::generateRandomFileName(const QString &p_hints, const QString &p_suffix) +{ + Q_UNUSED(p_hints); + + const QString timeStamp(QDateTime::currentDateTime().toString(QStringLiteral("sszzzmmHHMMdd"))); + QString baseName = QString::number(timeStamp.toLongLong() + qrand()); + + QString suffix; + if (!p_suffix.isEmpty()) { + suffix = QLatin1Char('.') + p_suffix.toLower(); + } + + return baseName + suffix; +} + +QTemporaryFile *FileUtils::createTemporaryFile(const QString &p_suffix) +{ + QString xx = p_suffix.isEmpty() ? QStringLiteral("XXXXXX") : QStringLiteral("XXXXXX."); + return new QTemporaryFile(QDir::tempPath() + QDir::separator() + xx + p_suffix); +} + +QString FileUtils::generateFileNameWithSequence(const QString &p_folderPath, + const QString &p_baseName, + const QString &p_suffix) +{ + auto fileName = p_suffix.isEmpty() ? p_baseName : p_baseName + QLatin1Char('.') + p_suffix; + auto suffix = p_suffix.isEmpty() ? QString() : QStringLiteral(".") + p_suffix; + int index = 1; + while (childExistsCaseInsensitive(p_folderPath, fileName)) { + fileName = QString("%1_%2%3").arg(p_baseName, QString::number(index++), suffix); + } + + return fileName; +} + +void FileUtils::removeEmptyDir(const QString &p_dirPath) +{ + QDir dir(p_dirPath); + qDebug() << "removeEmptyDir" << p_dirPath << dir.isEmpty(); + if (dir.isEmpty()) { + return; + } + + auto childDirs = dir.entryInfoList(QDir::AllDirs | QDir::NoDotAndDotDot | QDir::NoSymLinks); + for (const auto &child : childDirs) { + const auto childPath = child.absoluteFilePath(); + removeEmptyDir(childPath); + removeDirIfEmpty(childPath); + } +} diff --git a/src/utils/fileutils.h b/src/utils/fileutils.h new file mode 100644 index 00000000..95f125d1 --- /dev/null +++ b/src/utils/fileutils.h @@ -0,0 +1,76 @@ +#ifndef FILEUTILS_H +#define FILEUTILS_H + +#include +#include +#include +#include + +class QTemporaryFile; + +namespace vnotex +{ + class FileUtils + { + public: + FileUtils() = delete; + + static QByteArray readFile(const QString &p_filePath); + + static QString readTextFile(const QString &p_filePath); + + static void writeFile(const QString &p_filePath, const QByteArray &p_data); + + static void writeFile(const QString &p_filePath, const QString &p_text); + + // Rename file or dir. + static void renameFile(const QString &p_path, const QString &p_name); + + static bool childExistsCaseInsensitive(const QString &p_dirPath, const QString &p_name); + + static bool existsCaseInsensitive(const QString &p_path); + + static void copyFile(const QString &p_filePath, + const QString &p_destPath, + bool p_move = false); + + static void copyDir(const QString &p_dirPath, + const QString &p_destPath, + bool p_move = false); + + static void removeFile(const QString &p_filePath); + + // Return false if it is not deleted due to non-empty. + static bool removeDirIfEmpty(const QString &p_dirPath); + + static void removeDir(const QString &p_dirPath); + + static QString renameIfExistsCaseInsensitive(const QString &p_path); + + static bool isPlatformNameCaseSensitive(); + + static bool isText(const QString &p_filePath); + + static QImage imageFromFile(const QString &p_filePath); + + static QPixmap pixmapFromFile(const QString &p_filePath); + + static QString generateUniqueFileName(const QString &p_folderPath, + const QString &p_hints, + const QString &p_suffix); + + static QString generateRandomFileName(const QString &p_hints, const QString &p_suffix); + + static QString generateFileNameWithSequence(const QString &p_folderPath, + const QString &p_baseName, + const QString &p_suffix); + + static QTemporaryFile *createTemporaryFile(const QString &p_suffix); + + // Go through @p_dirPath recursively and delete all empty dirs. + // @p_dirPath itself is not deleted. + static void removeEmptyDir(const QString &p_dirPath); + }; +} // ns vnotex + +#endif // FILEUTILS_H diff --git a/src/utils/htmlutils.cpp b/src/utils/htmlutils.cpp new file mode 100644 index 00000000..f65bb83a --- /dev/null +++ b/src/utils/htmlutils.cpp @@ -0,0 +1,12 @@ +#include "htmlutils.h" + +#include + +using namespace vnotex; + +bool HtmlUtils::hasOnlyImgTag(const QString &p_html) +{ + // Tricky. + QRegExp reg(QStringLiteral("<(?:p|span|div) ")); + return !p_html.contains(reg); +} diff --git a/src/utils/htmlutils.h b/src/utils/htmlutils.h new file mode 100644 index 00000000..01766541 --- /dev/null +++ b/src/utils/htmlutils.h @@ -0,0 +1,17 @@ +#ifndef HTMLUTILS_H +#define HTMLUTILS_H + +#include + +namespace vnotex +{ + class HtmlUtils + { + public: + HtmlUtils() = delete; + + static bool hasOnlyImgTag(const QString &p_html); + }; +} + +#endif // HTMLUTILS_H diff --git a/src/utils/iconutils.cpp b/src/utils/iconutils.cpp new file mode 100644 index 00000000..bb227a59 --- /dev/null +++ b/src/utils/iconutils.cpp @@ -0,0 +1,83 @@ +#include "iconutils.h" + +#include +#include + +#include "fileutils.h" + +using namespace vnotex; + +QString IconUtils::s_defaultIconForeground; + +QString IconUtils::s_defaultIconDisabledForeground; + +QIcon IconUtils::fetchIcon(const QString &p_iconFile, + const QVector &p_overriddenColors) +{ + const auto suffix = QFileInfo(p_iconFile).suffix().toLower().toStdString(); + if (p_overriddenColors.isEmpty() || suffix != "svg") { + return QIcon(p_iconFile); + } + + auto content = FileUtils::readTextFile(p_iconFile); + if (content.isEmpty()) { + return QIcon(); + } + + QIcon icon; + for (const auto &color : p_overriddenColors) { + auto overriddenContent = replaceForegroundOfIcon(content, color.m_foreground); + auto data = overriddenContent.toLocal8Bit(); + QPixmap pixmap; + pixmap.loadFromData(data, suffix.c_str()); + icon.addPixmap(pixmap, color.m_mode, color.m_state); + } + + return icon; +} + +QIcon IconUtils::fetchIcon(const QString &p_iconFile, const QString &p_overriddenForeground) +{ + QVector colors; + if (!p_overriddenForeground.isEmpty()) { + colors.push_back(OverriddenColor(p_overriddenForeground, QIcon::Normal, QIcon::Off)); + } + + return fetchIcon(p_iconFile, colors); +} + +QString IconUtils::replaceForegroundOfIcon(const QString &p_iconContent, const QString &p_foreground) +{ + if (p_foreground.isEmpty()) { + return p_iconContent; + } + + // Must have a # to avoid fill="none". + QRegExp styleRe("(\\s|\"|;)(fill|stroke)(:|(=\"))#[^#\"\\s]+"); + if (p_iconContent.indexOf(styleRe) > -1) { + auto newContent(p_iconContent); + newContent.replace(styleRe, QString("\\1\\2\\3%1").arg(p_foreground)); + return newContent; + } + + return p_iconContent; +} + +QIcon IconUtils::fetchIcon(const QString &p_iconFile) +{ + return fetchIcon(p_iconFile, s_defaultIconForeground); +} + +void IconUtils::setDefaultIconForeground(const QString &p_fg, const QString &p_disabledFg) +{ + s_defaultIconForeground = p_fg; + s_defaultIconDisabledForeground = p_disabledFg; +} + +QIcon IconUtils::fetchIconWithDisabledState(const QString &p_iconFile) +{ + QVector colors; + colors.push_back(OverriddenColor(s_defaultIconForeground, QIcon::Normal, QIcon::Off)); + colors.push_back(OverriddenColor(s_defaultIconDisabledForeground, QIcon::Disabled, QIcon::Off)); + return fetchIcon(p_iconFile, colors); +} diff --git a/src/utils/iconutils.h b/src/utils/iconutils.h new file mode 100644 index 00000000..6de4036f --- /dev/null +++ b/src/utils/iconutils.h @@ -0,0 +1,58 @@ +#ifndef ICONUTILS_H +#define ICONUTILS_H + +#include +#include +#include + +namespace vnotex +{ + class IconUtils + { + public: + IconUtils() = delete; + + struct OverriddenColor + { + OverriddenColor() + : m_mode(QIcon::Normal), + m_state(QIcon::Off) + { + } + + OverriddenColor(const QString &p_foreground, + QIcon::Mode p_mode = QIcon::Normal, + QIcon::State p_state = QIcon::Off) + : m_foreground(p_foreground), + m_mode(p_mode), + m_state(p_state) + { + } + + QString m_foreground; + QIcon::Mode m_mode; + QIcon::State m_state; + }; + + static void setDefaultIconForeground(const QString &p_fg, const QString &p_disabledFg); + + static QIcon fetchIcon(const QString &p_iconFile, + const QVector &p_overriddenColors); + + static QIcon fetchIcon(const QString &p_iconFile, const QString &p_overriddenForeground); + + // Fetch icon from @p_iconFile with icon_fg as overridden foreground color. + static QIcon fetchIcon(const QString &p_iconFile); + + static QIcon fetchIconWithDisabledState(const QString &p_iconFile); + + private: + static QString replaceForegroundOfIcon(const QString &p_iconContent, const QString &p_foreground); + + static QString s_defaultIconForeground; + + static QString s_defaultIconDisabledForeground; + }; +} // ns vnotex + +#endif // ICONUTILS_H diff --git a/src/utils/pathutils.cpp b/src/utils/pathutils.cpp new file mode 100644 index 00000000..fa97b2cf --- /dev/null +++ b/src/utils/pathutils.cpp @@ -0,0 +1,227 @@ +#include "pathutils.h" + +#include +#include +#include +#include +#include +#include + +using namespace vnotex; + +const QString PathUtils::c_fileNameRegularExpression = QString("\\A(?:[^\\\\/:\\*\\?\"<>\\|\\s]| )+\\z"); + +QString PathUtils::parentDirPath(const QString &p_path) +{ + if (p_path.isEmpty()) { + return p_path; + } + + QFileInfo info(p_path); + Q_ASSERT(info.isAbsolute()); + return cleanPath(info.absolutePath()); +} + +QString PathUtils::dirOrParentDirPath(const QString &p_path) +{ + if (p_path.isEmpty()) { + return p_path; + } + + QFileInfo info(p_path); + if (info.isDir()) { + return p_path; + } else { + return info.absolutePath(); + } +} + +bool PathUtils::isEmptyDir(const QString &p_path) +{ + QFileInfo fi(p_path); + if (!fi.exists()) { + return true; + } + + return fi.isDir() && QDir(p_path).isEmpty(); +} + +QString PathUtils::concatenateFilePath(const QString &p_dirPath, const QString &p_name) +{ + auto dirPath = cleanPath(p_dirPath); + if (p_name.isEmpty()) { + return dirPath; + } + + if (dirPath.isEmpty()) { + return p_name; + } + + return dirPath + '/' + p_name; +} + +QString PathUtils::dirName(const QString &p_path) +{ + Q_ASSERT(QFileInfo(p_path).isDir()); + return QDir(p_path).dirName(); +} + +QString PathUtils::fileName(const QString &p_path) +{ + QFileInfo fi(p_path); + return fi.fileName(); +} + +QString PathUtils::normalizePath(const QString &p_path) +{ + auto absPath = QDir::cleanPath(QDir(p_path).absolutePath()); +#if defined(Q_OS_WIN) + return absPath.toLower(); +#else + return absPath; +#endif +} + +bool PathUtils::areSamePaths(const QString &p_a, const QString &p_b) +{ + return normalizePath(p_a) == normalizePath(p_b); +} + +bool PathUtils::pathContains(const QString &p_dir, const QString &p_path) +{ + auto rel = relativePath(p_dir, p_path); + if (rel.startsWith(QStringLiteral("../")) || rel == QStringLiteral("..")) { + return false; + } + + if (QFileInfo(rel).isAbsolute()) { + return false; + } + + return true; +} + +bool PathUtils::isLegalFileName(const QString &p_name) +{ + QRegularExpression nameRe(c_fileNameRegularExpression); + auto match = nameRe.match(p_name); + return match.hasMatch(); +} + +bool PathUtils::isLegalPath(const QString &p_path) +{ + // Ensure each part of the @p_path is a valid file name until we come to + // an existing parent directory. + if (p_path.isEmpty()) { + return false; + } + + if (QFileInfo::exists(p_path)) { +#if defined(Q_OS_WIN) + // On Windows, "/" and ":" will also make exists() return true. + if (p_path.startsWith('/') || p_path == ":") { + return false; + } +#endif + return true; + } + + bool ret = false; + int pos = -1; + QString basePath = parentDirPath(p_path); + QString name = dirName(p_path); + QScopedPointer validator(new QRegularExpressionValidator(QRegularExpression(c_fileNameRegularExpression))); + while (!name.isEmpty()) { + QValidator::State validFile = validator->validate(name, pos); + if (validFile != QValidator::Acceptable) { + break; + } + + if (QFileInfo::exists(basePath)) { + ret = true; +#if defined(Q_OS_WIN) + // On Windows, "/" and ":" will also make exists() return true. + if (basePath.startsWith('/') || basePath == ":") { + ret = false; + } +#endif + break; + } + + basePath = parentDirPath(basePath); + name = dirName(basePath); + } + + return ret; +} + +QString PathUtils::relativePath(const QString &p_dir, const QString &p_path) +{ + QDir dir(p_dir); + return cleanPath(dir.relativeFilePath(p_path)); +} + +QUrl PathUtils::pathToUrl(const QString &p_path) +{ + // Need to judge the path: Url, local file, resource file. + QUrl url; + QFileInfo pathInfo(p_path); + if (pathInfo.exists()) { + if (pathInfo.isNativePath()) { + // Local file. + url = QUrl::fromLocalFile(p_path); + } else { + // Resource file. + url = QUrl(QStringLiteral("qrc") + p_path); + } + } else { + // Url. + url = QUrl(p_path); + } + + return url; +} + +QString PathUtils::urlToPath(const QUrl &p_url) +{ + if (p_url.isLocalFile()) { + return p_url.toLocalFile(); + } else { + return p_url.toString(); + } +} + +QString PathUtils::encodeSpacesInPath(const QString &p_path) +{ + QString tmp(p_path); + tmp.replace(QLatin1Char(' '), QStringLiteral("%20")); + return tmp; +} + +void PathUtils::prependDotIfRelative(QString &p_path) +{ + if (QDir::isRelativePath(p_path) + && !p_path.startsWith(QStringLiteral("."))) { + p_path.prepend(QStringLiteral("./")); + } +} + +QString PathUtils::removeUrlParameters(const QString &p_url) +{ + int idx = p_url.indexOf(QLatin1Char('?')); + if (idx > -1) { + return p_url.left(idx); + } + return p_url; +} + +bool PathUtils::isImageUrl(const QString &p_url) +{ + QFileInfo info(removeUrlParameters(p_url)); + return QImageReader::supportedImageFormats().contains(info.suffix().toLower().toLatin1()); +} + +bool PathUtils::isDir(const QString &p_path) +{ + return QFileInfo(p_path).isDir(); +} diff --git a/src/utils/pathutils.h b/src/utils/pathutils.h new file mode 100644 index 00000000..8677cae4 --- /dev/null +++ b/src/utils/pathutils.h @@ -0,0 +1,80 @@ +#ifndef PATHUTILS_H +#define PATHUTILS_H + +#include +#include +#include + +namespace vnotex +{ + class PathUtils + { + public: + PathUtils() = delete; + + static QString cleanPath(const QString &p_path) + { + return QDir::cleanPath(p_path); + } + + // See testParentDirPath(). + static QString parentDirPath(const QString &p_path); + + // Return @p_path if it is a dir. Otherwise, return its parent dir. + static QString dirOrParentDirPath(const QString &p_path); + + // Whether @p_path is a dir. + static bool isDir(const QString &p_path); + + // Whether @p_folderPath is an empty directory. + static bool isEmptyDir(const QString &p_path); + + // Concatenate @p_dirPath and @p_name. + static QString concatenateFilePath(const QString &p_dirPath, const QString &p_name); + + // Get dir name of @p_path directory. + static QString dirName(const QString &p_path); + + // Get file name of @p_path file/directory. + static QString fileName(const QString &p_path); + + static QString absolutePath(const QString &p_path) + { + return QDir(p_path).absolutePath(); + } + + // Normalize @p_path for comparision. + static QString normalizePath(const QString &p_path); + + // Whether two paths point to the same file/directory. + static bool areSamePaths(const QString &p_a, const QString &p_b); + + // Whether @p_dir contains @p_path. + static bool pathContains(const QString &p_dir, const QString &p_path); + + static bool isLegalFileName(const QString &p_name); + + static bool isLegalPath(const QString &p_path); + + // Return relative path of @p_path to @p_dir. + static QString relativePath(const QString &p_dir, const QString &p_path); + + static QUrl pathToUrl(const QString &p_path); + + static QString urlToPath(const QUrl &p_url); + + static QString encodeSpacesInPath(const QString &p_path); + + static void prependDotIfRelative(QString &p_path); + + static QString removeUrlParameters(const QString &p_url); + + static bool isImageUrl(const QString &p_url); + + // Regular expression string for file/folder name. + // Forbidden chars: \/:*?"<>| and whitespaces except spaces. + static const QString c_fileNameRegularExpression; + }; +} // ns vnotex + +#endif // PATHUTILS_H diff --git a/src/utils/textutils.cpp b/src/utils/textutils.cpp new file mode 100644 index 00000000..b8cdaa94 --- /dev/null +++ b/src/utils/textutils.cpp @@ -0,0 +1,87 @@ +#include "textutils.h" + +#include + +using namespace vnotex; + +QString TextUtils::removeCodeBlockFence(const QString &p_text) +{ + auto text = unindentTextMultiLines(p_text); + Q_ASSERT(text.startsWith(QStringLiteral("```")) || text.startsWith(QStringLiteral("~~~"))); + int idx = text.indexOf(QLatin1Char('\n')) + 1; + int lidx = text.size() - 1; + // Trim spaces at the end. + while (lidx >= 0 && text[lidx].isSpace()) { + --lidx; + } + + Q_ASSERT(text[lidx] == QLatin1Char('`') || text[lidx] == QLatin1Char('~')); + return text.mid(idx, lidx + 1 - idx - 3); +} + +int TextUtils::fetchIndentation(const QString &p_text) +{ + int idx = firstNonSpace(p_text); + return idx == -1 ? 0 : idx; +} + +QString TextUtils::unindentText(const QString &p_text, int p_spaces) +{ + if (p_spaces == 0) { + return p_text; + } + + int idx = 0; + while (idx < p_spaces && idx < p_text.size() && p_text[idx].isSpace()) { + ++idx; + } + return p_text.right(p_text.size() - idx); +} + +int TextUtils::firstNonSpace(const QString &p_text) +{ + for (int i = 0; i < p_text.size(); ++i) { + if (!p_text.at(i).isSpace()) { + return i; + } + } + + return -1; +} + +QString TextUtils::unindentTextMultiLines(const QString &p_text) +{ + if (p_text.isEmpty()) { + return p_text; + } + + auto lines = p_text.split(QLatin1Char('\n')); + Q_ASSERT(lines.size() > 0); + + const int indentation = fetchIndentation(lines[0]); + if (indentation == 0) { + return p_text; + } + + QString res = lines[0].right(lines[0].size() - indentation); + for (int i = 1; i < lines.size(); ++i) { + const auto &line = lines[i]; + int idx = 0; + while (idx < indentation && idx < line.size() && line[idx].isSpace()) { + ++idx; + } + res = res + QLatin1Char('\n') + line.right(line.size() - idx); + } + + return res; +} + +QString TextUtils::purifyUrl(const QString &p_url) +{ + int idx = p_url.indexOf('?'); + if (idx > -1) { + return p_url.left(idx); + } + + return p_url; +} diff --git a/src/utils/textutils.h b/src/utils/textutils.h new file mode 100644 index 00000000..2d3f487c --- /dev/null +++ b/src/utils/textutils.h @@ -0,0 +1,29 @@ +#ifndef TEXTUTILS_H +#define TEXTUTILS_H + +#include + +namespace vnotex +{ + class TextUtils + { + public: + TextUtils() = delete; + + static int firstNonSpace(const QString &p_text); + + static QString removeCodeBlockFence(const QString &p_text); + + static int fetchIndentation(const QString &p_text); + + static QString unindentText(const QString &p_text, int p_spaces); + + // Unindent multi-lines text according to the indentation of the first line. + static QString unindentTextMultiLines(const QString &p_text); + + // Remove query in the url (?xxx). + static QString purifyUrl(const QString &p_url); + }; +} + +#endif // TEXTUTILS_H diff --git a/src/utils/urldragdroputils.cpp b/src/utils/urldragdroputils.cpp new file mode 100644 index 00000000..137f2880 --- /dev/null +++ b/src/utils/urldragdroputils.cpp @@ -0,0 +1,44 @@ +#include "urldragdroputils.h" + +#include +#include +#include +#include + +#include + +using namespace vnotex; + +bool UrlDragDropUtils::handleDragEnterEvent(QDragEnterEvent *p_event) +{ + if (p_event->mimeData()->hasFormat(QStringLiteral("text/uri-list"))) { + p_event->acceptProposedAction(); + return true; + } + + return false; +} + +bool UrlDragDropUtils::handleDropEvent(QDropEvent *p_event, std::function p_func) +{ + const QMimeData *mime = p_event->mimeData(); + if (mime->hasFormat(QStringLiteral("text/uri-list")) && mime->hasUrls()) { + QStringList files; + const auto urls = mime->urls(); + for (const auto &url : urls) { + if (url.isLocalFile()) { + QFileInfo info(url.toLocalFile()); + if (info.exists() && info.isFile()) { + files << PathUtils::cleanPath(info.absoluteFilePath()); + } + } + } + + p_func(files); + + p_event->acceptProposedAction(); + return true; + } + + return false; +} diff --git a/src/utils/urldragdroputils.h b/src/utils/urldragdroputils.h new file mode 100644 index 00000000..7579c686 --- /dev/null +++ b/src/utils/urldragdroputils.h @@ -0,0 +1,25 @@ +#ifndef URLDRAGDROPUTILS_H +#define URLDRAGDROPUTILS_H + +#include + +#include + +class QDragEnterEvent; +class QDropEvent; + +namespace vnotex +{ + // Help to handle Url-related Drag&Drop events. + class UrlDragDropUtils + { + public: + UrlDragDropUtils() = delete; + + static bool handleDragEnterEvent(QDragEnterEvent *p_event); + + static bool handleDropEvent(QDropEvent *p_event, std::function p_func); + }; +} + +#endif // URLDRAGDROPUTILS_H diff --git a/src/utils/utils.cpp b/src/utils/utils.cpp new file mode 100644 index 00000000..51ab5fd8 --- /dev/null +++ b/src/utils/utils.cpp @@ -0,0 +1,114 @@ +#include "utils.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +using namespace vnotex; + +void Utils::sleepWait(int p_milliseconds) +{ + if (p_milliseconds <= 0) { + return; + } + + QElapsedTimer t; + t.start(); + while (t.elapsed() < p_milliseconds) { + QCoreApplication::processEvents(); + } +} + +void Utils::appendMsg(QString &p_msg, const QString &p_new) +{ + if (p_msg.isEmpty()) { + p_msg = p_new; + } else { + p_msg += '\n' + p_new; + } +} + +QString Utils::dateTimeString(const QDateTime &p_dateTime) +{ + return p_dateTime.date().toString(Qt::DefaultLocaleLongDate) + + " " + + p_dateTime.time().toString(Qt::TextDate); +} + +QString Utils::dateTimeStringUniform(const QDateTime &p_dateTime) +{ + return p_dateTime.toString(Qt::ISODate); +} + +QDateTime Utils::dateTimeFromStringUniform(const QString &p_str) +{ + return QDateTime::fromString(p_str, Qt::ISODate); +} + +QChar Utils::keyToChar(int p_key, bool p_lowerCase) +{ + auto keyStr = QKeySequence(p_key).toString(); + if (keyStr.size() == 1) { + return p_lowerCase ? keyStr[0].toLower() : keyStr[0]; + } + + return QChar(); +} + +QString Utils::pickAvailableFontFamily(const QStringList &p_families) +{ + auto availableFonts = QFontDatabase().families(); + for (const auto& f : p_families) { + auto family = f.trimmed(); + if (family.isEmpty()) { + continue; + } + + for (auto availableFont : availableFonts) { + availableFont.remove(QRegularExpression("\\[.*\\]")); + availableFont = availableFont.trimmed(); + if (family == availableFont + || family.toLower() == availableFont.toLower()) { + return availableFont; + } + } + } + + return QString(); +} + +QPixmap Utils::svgToPixmap(const QByteArray &p_content, + QRgb p_background, + qreal p_scaleFactor) +{ + QSvgRenderer renderer(p_content); + QSize deSz = renderer.defaultSize(); + if (p_scaleFactor > 0) { + deSz *= p_scaleFactor; + } + + QPixmap pm(deSz); + if (p_background == 0x0) { + // Fill a transparent background to avoid glitchy preview. + pm.fill(QColor(255, 255, 255, 0)); + } else { + pm.fill(p_background); + } + + QPainter painter(&pm); + renderer.render(&painter); + return pm; +} + +bool Utils::fuzzyEqual(qreal p_a, qreal p_b) +{ + return std::abs(p_a - p_b) < std::pow(10, -6); +} diff --git a/src/utils/utils.h b/src/utils/utils.h new file mode 100644 index 00000000..209c222d --- /dev/null +++ b/src/utils/utils.h @@ -0,0 +1,58 @@ +#ifndef UTILS_H +#define UTILS_H + +#include +#include +#include +#include + +#if !defined(V_ASSERT) + #define V_ASSERT(cond) ((!(cond)) ? qt_assert(#cond, __FILE__, __LINE__) : qt_noop()) +#endif + +// Thanks to CGAL/cgal. +#ifndef __has_attribute + #define __has_attribute(x) 0 // Compatibility with non-clang compilers. +#endif + +#ifndef __has_cpp_attribute + #define __has_cpp_attribute(x) 0 // Compatibility with non-supporting compilers. +#endif + +#if !defined(V_TR) + #define V_TR(ctx, src) QCoreApplication::translate((ctx), (src)) +#endif + +class QWidget; + +namespace vnotex +{ + class Utils + { + public: + Utils() = delete; + + static void sleepWait(int p_milliseconds); + + // Append @p_new to @p_msg as a new line. + static void appendMsg(QString &p_msg, const QString &p_new); + + static QString dateTimeString(const QDateTime &p_dateTime); + + static QString dateTimeStringUniform(const QDateTime &p_dateTime); + + static QDateTime dateTimeFromStringUniform(const QString &p_str); + + static QChar keyToChar(int p_key, bool p_lowerCase); + + static QString pickAvailableFontFamily(const QStringList &p_families); + + static QPixmap svgToPixmap(const QByteArray &p_content, + QRgb p_background, + qreal p_scaleFactor); + + static bool fuzzyEqual(qreal p_a, qreal p_b); + }; +} // ns vnotex + +#endif // UTILS_H diff --git a/src/utils/utils.pri b/src/utils/utils.pri new file mode 100644 index 00000000..3b2ca05c --- /dev/null +++ b/src/utils/utils.pri @@ -0,0 +1,25 @@ +QT += widgets svg + +SOURCES += \ + $$PWD/docsutils.cpp \ + $$PWD/htmlutils.cpp \ + $$PWD/pathutils.cpp \ + $$PWD/textutils.cpp \ + $$PWD/urldragdroputils.cpp \ + $$PWD/utils.cpp \ + $$PWD/fileutils.cpp \ + $$PWD/iconutils.cpp \ + $$PWD/widgetutils.cpp \ + $$PWD/clipboardutils.cpp + +HEADERS += \ + $$PWD/docsutils.h \ + $$PWD/htmlutils.h \ + $$PWD/pathutils.h \ + $$PWD/textutils.h \ + $$PWD/urldragdroputils.h \ + $$PWD/utils.h \ + $$PWD/fileutils.h \ + $$PWD/iconutils.h \ + $$PWD/widgetutils.h \ + $$PWD/clipboardutils.h diff --git a/src/utils/widgetutils.cpp b/src/utils/widgetutils.cpp new file mode 100644 index 00000000..3d0199f0 --- /dev/null +++ b/src/utils/widgetutils.cpp @@ -0,0 +1,316 @@ +#include "widgetutils.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace vnotex; + +void WidgetUtils::setPropertyDynamically(QWidget *p_widget, + const char *p_prop, + const QVariant &p_val) +{ + p_widget->setProperty(p_prop, p_val); + p_widget->style()->unpolish(p_widget); + p_widget->style()->polish(p_widget); + p_widget->update(); +} + +qreal WidgetUtils::calculateScaleFactor(bool p_update) +{ + static qreal factor = -1; + + if (factor < 0 || p_update) { + factor = QGuiApplication::primaryScreen()->devicePixelRatio(); + } + + return factor; +} + +bool WidgetUtils::isScrollBarVisible(QAbstractScrollArea *p_widget, bool p_horizontal) +{ + auto scrollBar = p_horizontal ? p_widget->horizontalScrollBar() : p_widget->verticalScrollBar(); + if (scrollBar && scrollBar->isVisible() && scrollBar->minimum() != scrollBar->maximum()) { + return true; + } + + return false; +} + +QSize WidgetUtils::availableScreenSize(QWidget *p_widget) +{ + auto geo = QApplication::desktop()->availableGeometry(p_widget); + return geo.size(); +} + +void WidgetUtils::openUrlByDesktop(const QUrl &p_url) +{ + QDesktopServices::openUrl(p_url); +} + +bool WidgetUtils::processKeyEventLikeVi(QWidget *p_widget, + QKeyEvent *p_event, + QWidget *p_escTargetWidget) +{ + Q_ASSERT(p_widget); + + bool eventHandled = false; + int key = p_event->key(); + int modifiers = p_event->modifiers(); + if (!p_escTargetWidget) { + p_escTargetWidget = p_widget; + } + + switch (key) { + case Qt::Key_BracketLeft: + { + if (isViControlModifier(modifiers)) { + auto escEvent = new QKeyEvent(QEvent::KeyPress, + Qt::Key_Escape, + Qt::NoModifier); + QCoreApplication::postEvent(p_escTargetWidget, escEvent); + eventHandled = true; + } + + break; + } + + case Qt::Key_J: + { + if (isViControlModifier(modifiers)) { + // The event must be allocated on the heap since the post event queue will take ownership + // of the event and delete it once it has been posted. + auto downEvent = new QKeyEvent(QEvent::KeyPress, + Qt::Key_Down, + Qt::NoModifier); + QCoreApplication::postEvent(p_widget, downEvent); + eventHandled = true; + } + + break; + } + + case Qt::Key_K: + { + if (isViControlModifier(modifiers)) { + auto upEvent = new QKeyEvent(QEvent::KeyPress, + Qt::Key_Up, + Qt::NoModifier); + QCoreApplication::postEvent(p_widget, upEvent); + eventHandled = true; + } + + break; + } + + default: + break; + } + + if (eventHandled) { + p_event->accept(); + } + + return eventHandled; +} + +bool WidgetUtils::isViControlModifier(int p_modifiers) +{ +#if defined(Q_OS_MACOS) || defined(Q_OS_MAC) + return p_modifiers == Qt::MetaModifier; +#else + return p_modifiers == Qt::ControlModifier; +#endif +} + +void WidgetUtils::clearActionGroup(QActionGroup *p_actGroup) +{ + auto actions = p_actGroup->actions(); + for (auto action : actions) { + p_actGroup->removeAction(action); + } +} + +void WidgetUtils::addActionShortcut(QAction *p_action, + const QString &p_shortcut, + Qt::ShortcutContext p_context) +{ + QKeySequence kseq(p_shortcut); + if (kseq.isEmpty()) { + return; + } + + p_action->setShortcut(kseq); + p_action->setShortcutContext(p_context); + p_action->setText(QString("%1\t%2").arg(p_action->text(), kseq.toString(QKeySequence::NativeText))); +} + +void WidgetUtils::addActionShortcutText(QAction *p_action, + const QString &p_shortcut) +{ + QKeySequence kseq(p_shortcut); + if (kseq.isEmpty()) { + return; + } + + p_action->setText(QString("%1\t%2").arg(p_action->text(), kseq.toString(QKeySequence::NativeText))); +} + +void WidgetUtils::updateSize(QWidget *p_widget) +{ + p_widget->adjustSize(); + p_widget->updateGeometry(); +} + +void WidgetUtils::resizeToHideScrollBarLater(QScrollArea *p_scroll, bool p_vertical, bool p_horizontal) +{ + QTimer::singleShot(200, p_scroll, [p_scroll, p_vertical, p_horizontal]() { + WidgetUtils::resizeToHideScrollBar(p_scroll, p_vertical, p_horizontal); + }); +} + +void WidgetUtils::resizeToHideScrollBar(QScrollArea *p_scroll, bool p_vertical, bool p_horizontal) +{ + p_scroll->adjustSize(); + + if (p_horizontal && WidgetUtils::isScrollBarVisible(p_scroll, true)) { + auto scrollBar = p_scroll->horizontalScrollBar(); + auto delta = scrollBar->maximum() - scrollBar->minimum(); + int newWidth = p_scroll->width() + delta; + auto availableSize = WidgetUtils::availableScreenSize(p_scroll); + if (newWidth <= availableSize.width()) { + p_scroll->resize(newWidth, p_scroll->height()); + } + } + + if (p_vertical && WidgetUtils::isScrollBarVisible(p_scroll, false)) { + auto scrollBar = p_scroll->verticalScrollBar(); + auto delta = scrollBar->maximum() - scrollBar->minimum(); + int newHeight = p_scroll->height() + delta; + auto availableSize = WidgetUtils::availableScreenSize(p_scroll); + if (newHeight <= availableSize.height()) { + p_scroll->resize(p_scroll->width(), newHeight); + } + } + + p_scroll->updateGeometry(); +} + +QShortcut *WidgetUtils::createShortcut(const QString &p_shortcut, + QWidget *p_widget, + Qt::ShortcutContext p_context) +{ + QKeySequence kseq(p_shortcut); + if (kseq.isEmpty()) { + return nullptr; + } + + auto shortcut = new QShortcut(kseq, p_widget, nullptr, nullptr, p_context); + return shortcut; +} + +bool WidgetUtils::isMetaKey(int p_key) +{ + return p_key == Qt::Key_Control + || p_key == Qt::Key_Shift + || p_key == Qt::Key_Meta +#if defined(Q_OS_LINUX) + // For mapping Caps as Ctrl in KDE. + || p_key == Qt::Key_CapsLock +#endif + || p_key == Qt::Key_Alt; +} + +QVector WidgetUtils::getVisibleIndexes(const QListView *p_view) +{ + QVector indexes; + + auto firstItem = p_view->indexAt(QPoint(0, 0)); + if (!firstItem.isValid()) { + return indexes; + } + + auto lastItem = p_view->indexAt(p_view->viewport()->rect().bottomLeft()); + + int firstRow = firstItem.row(); + int lastRow = lastItem.isValid() ? lastItem.row() : (p_view->model()->rowCount() - 1); + for (int i = firstRow; i <= lastRow; ++i) { + if (p_view->isRowHidden(i)) { + continue; + } + auto item = firstItem.siblingAtRow(i); + if (item.isValid()) { + indexes.append(item); + } + } + + return indexes; +} + +QString WidgetUtils::getMonospaceFont() +{ + static QString font; + if (font.isNull()) { + QStringList candidates; + candidates << QStringLiteral("YaHei Consolas Hybrid") + << QStringLiteral("Consolas") + << QStringLiteral("Monaco") + << QStringLiteral("Andale Mono") + << QStringLiteral("Monospace") + << QStringLiteral("Courier New"); + auto availFamilies = QFontDatabase().families(); + for (const auto &candidate : candidates) { + QString family = candidate.trimmed().toLower(); + for (auto availFamily : availFamilies) { + availFamily.remove(QRegExp("\\[.*\\]")); + if (family == availFamily.trimmed().toLower()) { + font = availFamily; + return font; + } + } + } + + // Fallback to current font. + font = QFont().family(); + } + + return font; +} + +QAction *WidgetUtils::findActionByObjectName(const QList &p_actions, const QString &p_objName) +{ + for (auto act : p_actions) { + if (act->objectName() == p_objName) { + return act; + } + } + + return nullptr; +} + +// Insert @p_action into @p_menu after action @p_after. +void WidgetUtils::insertActionAfter(QMenu *p_menu, QAction *p_after, QAction *p_action) +{ + p_menu->insertAction(p_after, p_action); + if (p_after) { + p_menu->removeAction(p_after); + p_menu->insertAction(p_action, p_after); + } +} diff --git a/src/utils/widgetutils.h b/src/utils/widgetutils.h new file mode 100644 index 00000000..70cb61f2 --- /dev/null +++ b/src/utils/widgetutils.h @@ -0,0 +1,83 @@ +#ifndef WIDGETUTILS_H +#define WIDGETUTILS_H + +#include +#include +#include +#include +#include +#include + +class QWidget; +class QAbstractScrollArea; +class QKeyEvent; +class QActionGroup; +class QAction; +class QScrollArea; +class QListView; +class QMenu; +class QShortcut; + +namespace vnotex +{ + class WidgetUtils + { + public: + WidgetUtils() = delete; + + static void setPropertyDynamically(QWidget *p_widget, + const char *p_prop, + const QVariant &p_val = QVariant()); + + static qreal calculateScaleFactor(bool p_update = false); + + static bool isScrollBarVisible(QAbstractScrollArea *p_widget, bool p_horizontal); + + static QSize availableScreenSize(QWidget *p_widget); + + static void openUrlByDesktop(const QUrl &p_url); + + // Given @p_event, try to process it by injecting proper event instead if it + // triggers Vi operation. + // Return true if @p_event is handled properly. + // @p_escTargetWidget: the widget to accept the ESC event. + static bool processKeyEventLikeVi(QWidget *p_widget, + QKeyEvent *p_event, + QWidget *p_escTargetWidget = nullptr); + + static bool isViControlModifier(int p_modifiers); + + static bool isMetaKey(int p_key); + + static void clearActionGroup(QActionGroup *p_actGroup); + + static void addActionShortcut(QAction *p_action, + const QString &p_shortcut, + Qt::ShortcutContext p_context = Qt::WindowShortcut); + + // Just add a shortcut text hint to the action. + static void addActionShortcutText(QAction *p_action, + const QString &p_shortcut); + + static QShortcut *createShortcut(const QString &p_shortcut, + QWidget *p_widget, + Qt::ShortcutContext p_context = Qt::WindowShortcut); + + static void updateSize(QWidget *p_widget); + + static void resizeToHideScrollBarLater(QScrollArea *p_scroll, bool p_vertical, bool p_horizontal); + + static QVector getVisibleIndexes(const QListView *p_view); + + static QString getMonospaceFont(); + + static QAction *findActionByObjectName(const QList &p_actions, const QString &p_objName); + + static void insertActionAfter(QMenu *p_menu, QAction *p_after, QAction *p_action); + + private: + static void resizeToHideScrollBar(QScrollArea *p_scroll, bool p_vertical, bool p_horizontal); + }; +} // ns vnotex + +#endif // WIDGETUTILS_H diff --git a/src/widgets/attachmentdragdropareaindicator.cpp b/src/widgets/attachmentdragdropareaindicator.cpp new file mode 100644 index 00000000..7cb09896 --- /dev/null +++ b/src/widgets/attachmentdragdropareaindicator.cpp @@ -0,0 +1,46 @@ +#include "attachmentdragdropareaindicator.h" + +#include +#include +#include +#include + +#include "viewwindow.h" +#include +#include +#include +#include + +using namespace vnotex; + +AttachmentDragDropAreaIndicator::AttachmentDragDropAreaIndicator(ViewWindow *p_viewWindow) + : m_viewWindow(p_viewWindow) +{ +} + +bool AttachmentDragDropAreaIndicator::handleDragEnterEvent(QDragEnterEvent *p_event) +{ + if (isAccepted(p_event)) { + p_event->acceptProposedAction(); + return true; + } + return false; +} + +bool AttachmentDragDropAreaIndicator::handleDropEvent(QDropEvent *p_event) +{ + return UrlDragDropUtils::handleDropEvent(p_event, [this](const QStringList &p_files) { + auto buffer = m_viewWindow->getBuffer(); + Q_ASSERT(buffer && buffer->isAttachmentSupported()); + auto files = buffer->addAttachment(QString(), p_files); + if (!files.isEmpty()) { + VNoteX::getInst().showStatusMessageShort( + m_viewWindow->tr("Attached %n file(s)", "", files.size())); + } + }); +} + +bool AttachmentDragDropAreaIndicator::isAccepted(const QDragEnterEvent *p_event) +{ + return p_event->mimeData()->hasFormat(QStringLiteral("text/uri-list")); +} diff --git a/src/widgets/attachmentdragdropareaindicator.h b/src/widgets/attachmentdragdropareaindicator.h new file mode 100644 index 00000000..71a53b64 --- /dev/null +++ b/src/widgets/attachmentdragdropareaindicator.h @@ -0,0 +1,26 @@ +#ifndef ATTACHMENTDRAGDROPAREAINDICATOR_H +#define ATTACHMENTDRAGDROPAREAINDICATOR_H + +#include "dragdropareaindicator.h" + +namespace vnotex +{ + class ViewWindow; + + class AttachmentDragDropAreaIndicator : public DragDropAreaIndicatorInterface + { + public: + AttachmentDragDropAreaIndicator(ViewWindow *p_viewWindow); + + bool handleDragEnterEvent(QDragEnterEvent *p_event) Q_DECL_OVERRIDE; + + bool handleDropEvent(QDropEvent *p_event) Q_DECL_OVERRIDE; + + static bool isAccepted(const QDragEnterEvent *p_event); + + private: + ViewWindow *m_viewWindow = nullptr; + }; +} + +#endif // ATTACHMENTDRAGDROPAREAINDICATOR_H diff --git a/src/widgets/attachmentpopup.cpp b/src/widgets/attachmentpopup.cpp new file mode 100644 index 00000000..4a85438a --- /dev/null +++ b/src/widgets/attachmentpopup.cpp @@ -0,0 +1,276 @@ +#include "attachmentpopup.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "propertydefs.h" + +#include +#include +#include +#include +#include +#include + +#include "filesystemviewer.h" +#include "messageboxhelper.h" +#include "fileopenparameters.h" +#include + +using namespace vnotex; + +AttachmentPopup::AttachmentPopup(QToolButton *p_btn, QWidget *p_parent) + : QMenu(p_parent), + m_button(p_btn) +{ + setupUI(); + + connect(this, &QMenu::aboutToShow, + this, [this]() { + Q_ASSERT(m_buffer); + if (m_needUpdateAttachmentFolder) { + setRootFolder(m_buffer->getAttachmentFolderPath()); + } + + m_viewer->setFocus(); + }); +} + +void AttachmentPopup::setupUI() +{ + auto mainLayout = new QVBoxLayout(this); + + const auto &themeMgr = VNoteX::getInst().getThemeMgr(); + + auto buttonsLayout = new QHBoxLayout(); + + { + // Add. + auto addBtn = createButton(); + + auto act = new QAction(IconUtils::fetchIconWithDisabledState(themeMgr.getIconFile(QStringLiteral("add.svg"))), + tr("Add"), + addBtn); + connect(act, &QAction::triggered, + this, [this]() { + if (checkRootFolderAndSingleSelection()) { + // Get dest folder path before other dialogs. + const auto destFolderPath = getDestFolderPath(); + + static QString lastDirPath = QDir::homePath(); + auto files = QFileDialog::getOpenFileNames(this, tr("Select Files As Attachments"), lastDirPath); + if (files.isEmpty()) { + return; + } + + lastDirPath = QFileInfo(files[0]).path(); + + addAttachments(destFolderPath, files); + } + }); + addBtn->setDefaultAction(act); + buttonsLayout->addWidget(addBtn); + } + + { + // New File. + auto newFileBtn = createButton(); + + auto act = new QAction(IconUtils::fetchIconWithDisabledState(themeMgr.getIconFile(QStringLiteral("new_file.svg"))), + tr("New File"), + newFileBtn); + connect(act, &QAction::triggered, + this, [this]() { + if (checkRootFolderAndSingleSelection()) { + // Get dest folder path before other dialogs. + const auto destFolderPath = getDestFolderPath(); + auto name = QInputDialog::getText(this, + tr("New Attachment"), + tr("File name:")); + if (!name.isEmpty()) { + newAttachmentFile(destFolderPath, name); + } + } + }); + newFileBtn->setDefaultAction(act); + buttonsLayout->addWidget(newFileBtn); + } + + { + // New Folder. + auto newFolderBtn = createButton(); + + auto act = new QAction(IconUtils::fetchIconWithDisabledState(themeMgr.getIconFile(QStringLiteral("new_folder.svg"))), + tr("New Folder"), + newFolderBtn); + connect(act, &QAction::triggered, + this, [this]() { + if (checkRootFolderAndSingleSelection()) { + // Get dest folder path before other dialogs. + const auto destFolderPath = getDestFolderPath(); + auto name = QInputDialog::getText(this, + tr("New Attachment"), + tr("Folder name:")); + if (!name.isEmpty()) { + newAttachmentFolder(destFolderPath, name); + } + } + }); + newFolderBtn->setDefaultAction(act); + buttonsLayout->addWidget(newFolderBtn); + } + + { + // Open folder. + auto openFolderBtn = createButton(); + + auto act = new QAction(IconUtils::fetchIconWithDisabledState(themeMgr.getIconFile(QStringLiteral("open_folder.svg"))), + tr("Open Folder"), + openFolderBtn); + connect(act, &QAction::triggered, + this, [this]() { + WidgetUtils::openUrlByDesktop(QUrl::fromLocalFile(m_viewer->rootPath())); + }); + openFolderBtn->setDefaultAction(act); + buttonsLayout->addWidget(openFolderBtn); + } + + buttonsLayout->addStretch(); + + mainLayout->addLayout(buttonsLayout); + + m_viewer = new FileSystemViewer(this); + connect(m_viewer, &FileSystemViewer::renameFile, + this, [this](const QString &p_path, const QString &p_name) { + try { + m_buffer->renameAttachment(p_path, p_name); + showPopupLater(QStringList() << PathUtils::concatenateFilePath(PathUtils::parentDirPath(p_path), p_name)); + } catch (Exception &p_e) { + MessageBoxHelper::notify(MessageBoxHelper::Warning, + tr("Failed to rename attachment (%1) to (%2).").arg(p_path, p_name), + tr("Please try another name again."), + p_e.what(), + this); + } + }); + connect(m_viewer, &FileSystemViewer::removeFiles, + this, [this](QStringList p_paths) { + if (p_paths.isEmpty()) { + return; + } + + // Filter out children paths. + QStringList paths; + std::sort(p_paths.begin(), p_paths.end()); + for (int i = p_paths.size() - 1; i >= 0; --i) { + bool skip = false; + for (int j = i - 1; j >= 0; --j) { + // Check if [j] is parent of [i]. + if (p_paths[j].size() < p_paths[i].size() + && p_paths[i].startsWith(p_paths[j]) && p_paths[i].at(p_paths[j].size()) == '/') { + skip = true; + break; + } + } + + if (!skip) { + paths << p_paths[i]; + } + } + + m_buffer->removeAttachment(paths); + }); + connect(m_viewer, &FileSystemViewer::openFiles, + this, [this](const QStringList &p_paths) { + hide(); + for (const auto &file : p_paths) { + auto paras = QSharedPointer::create(); + paras->m_nodeAttachedTo = m_buffer->getNode(); + Q_ASSERT(paras->m_nodeAttachedTo); + emit VNoteX::getInst().openFileRequested(file, paras); + } + }); + mainLayout->addWidget(m_viewer); + + setMinimumSize(320, 384); +} + +QToolButton *AttachmentPopup::createButton() +{ + auto btn = new QToolButton(this); + btn->setProperty(PropertyDefs::s_actionToolButton, true); + return btn; +} + +bool AttachmentPopup::checkRootFolderAndSingleSelection() +{ + const auto rootPath = m_viewer->rootPath(); + bool ret = !rootPath.isEmpty() && m_viewer->selectedCount() <= 1; + if (!ret) { + MessageBoxHelper::notify(MessageBoxHelper::Information, + tr("Please select one directory to continue."), + this); + } + return ret; +} + +void AttachmentPopup::setRootFolder(const QString &p_folderPath) +{ + m_viewer->setRootPath(p_folderPath); + m_needUpdateAttachmentFolder = false; +} + +void AttachmentPopup::setBuffer(Buffer *p_buffer) +{ + if (m_buffer == p_buffer) { + return; + } + + m_buffer = p_buffer; + m_needUpdateAttachmentFolder = true; +} + +QString AttachmentPopup::getDestFolderPath() const +{ + const auto selectedPaths = m_viewer->getSelectedPaths(); + Q_ASSERT(selectedPaths.size() <= 1); + QString destFolderPath; + if (selectedPaths.isEmpty()) { + destFolderPath = m_viewer->rootPath(); + } else { + destFolderPath = PathUtils::dirOrParentDirPath(selectedPaths[0]); + } + return destFolderPath; +} + +void AttachmentPopup::addAttachments(const QString &p_destFolderPath, const QStringList &p_files) +{ + auto files = m_buffer->addAttachment(p_destFolderPath, p_files); + showPopupLater(files); +} + +void AttachmentPopup::newAttachmentFile(const QString &p_destFolderPath, const QString &p_name) +{ + auto file = m_buffer->newAttachmentFile(p_destFolderPath, p_name); + showPopupLater(QStringList() << file); +} + +void AttachmentPopup::newAttachmentFolder(const QString &p_destFolderPath, const QString &p_name) +{ + auto folder = m_buffer->newAttachmentFolder(p_destFolderPath, p_name); + showPopupLater(QStringList() << folder); +} + +void AttachmentPopup::showPopupLater(const QStringList &p_pathsToSelect) +{ + QTimer::singleShot(250, this, [this, p_pathsToSelect]() { + m_viewer->scrollToAndSelect(p_pathsToSelect); + m_button->showMenu(); + }); +} diff --git a/src/widgets/attachmentpopup.h b/src/widgets/attachmentpopup.h new file mode 100644 index 00000000..2a4d062f --- /dev/null +++ b/src/widgets/attachmentpopup.h @@ -0,0 +1,52 @@ +#ifndef ATTACHMENTPOPUP_H +#define ATTACHMENTPOPUP_H + +#include + +class QToolButton; + +namespace vnotex +{ + class FileSystemViewer; + class Buffer; + + class AttachmentPopup : public QMenu + { + Q_OBJECT + public: + AttachmentPopup(QToolButton *p_btn, QWidget *p_parent = nullptr); + + void setBuffer(Buffer *p_buffer); + + private: + void setupUI(); + + QToolButton *createButton(); + + bool checkRootFolderAndSingleSelection(); + + void addAttachments(const QString &p_destFolderPath, const QStringList &p_files); + + void setRootFolder(const QString &p_folderPath); + + QString getDestFolderPath() const; + + void newAttachmentFile(const QString &p_destFolderPath, const QString &p_name); + + void newAttachmentFolder(const QString &p_destFolderPath, const QString &p_name); + + void showPopupLater(const QStringList &p_pathsToSelect = QStringList()); + + Buffer *m_buffer = nullptr; + + // Managed by QObject. + FileSystemViewer *m_viewer = nullptr; + + bool m_needUpdateAttachmentFolder = true; + + // Button for this menu. + QToolButton *m_button = nullptr; + }; +} + +#endif // ATTACHMENTPOPUP_H diff --git a/src/widgets/biaction.cpp b/src/widgets/biaction.cpp new file mode 100644 index 00000000..d07b130f --- /dev/null +++ b/src/widgets/biaction.cpp @@ -0,0 +1,99 @@ +#include "biaction.h" + +#include +#include +#include + +using namespace vnotex; + +BiAction::BiAction(const QIcon &p_icon, + const QString &p_text, + const QIcon &p_altIcon, + const QString &p_altText, + QObject *p_parent) + : QAction(p_icon, p_text, p_parent) +{ + m_resources[State::Default].m_icon = p_icon; + m_resources[State::Default].m_text = p_text; + + m_resources[State::Alternative].m_icon = p_altIcon; + m_resources[State::Alternative].m_text = p_altText; + + connect(this, &QAction::triggered, + this, [this]() { + toggleState(); + }); +} + +BiAction::State BiAction::previousState() const +{ + if (m_state == State::Default) { + return State::Alternative; + } else { + return State::Default; + } +} + +BiAction::State BiAction::state() const +{ + return m_state; +} + +void BiAction::setState(BiAction::State p_state) +{ + if (p_state == m_state) { + return; + } + + const QString preText = m_resources[m_state].m_text; + auto preMenu = m_resources[m_state].m_menu; + + m_state = p_state; + + auto &resource = m_resources[m_state]; + if (!resource.m_icon.isNull()) { + setIcon(resource.m_icon); + } + + // Use replacement instead since there may exist shortcut text. + setText(text().replace(preText, resource.m_text)); + + setMenu(resource.m_menu); + if (resource.m_menu) { + resource.m_menu->setEnabled(true); + } + + if (preMenu) { + preMenu->setEnabled(false); + } + + updateToolButtonPopupMode(); +} + +void BiAction::setStateMenu(BiAction::State p_state, QMenu *p_menu) +{ + m_resources[p_state].m_menu = p_menu; + if (m_state == p_state) { + setMenu(m_resources[m_state].m_menu); + updateToolButtonPopupMode(); + } +} + +void BiAction::toggleState() +{ + setState(previousState()); +} + +void BiAction::setToolButtonForAction(QToolButton *p_btn) +{ + m_toolBtn = p_btn; + updateToolButtonPopupMode(); +} + +void BiAction::updateToolButtonPopupMode() +{ + if (m_toolBtn) { + m_toolBtn->setPopupMode(menu() ? QToolButton::MenuButtonPopup + : QToolButton::DelayedPopup); + } +} diff --git a/src/widgets/biaction.h b/src/widgets/biaction.h new file mode 100644 index 00000000..f379859c --- /dev/null +++ b/src/widgets/biaction.h @@ -0,0 +1,60 @@ +#ifndef BIACTION_H +#define BIACTION_H + +#include + +class QToolButton; + +namespace vnotex +{ + // Action with two states. + class BiAction : public QAction + { + Q_OBJECT + public: + enum State + { + Default, + Alternative, + Max + }; + + BiAction(const QIcon &p_icon, + const QString &p_text, + const QIcon &p_altIcon, + const QString &p_altText, + QObject *p_parent = nullptr); + + BiAction::State previousState() const; + BiAction::State state() const; + void setState(BiAction::State p_state); + + void toggleState(); + + void setStateMenu(BiAction::State p_state, QMenu *p_menu); + + void setToolButtonForAction(QToolButton *p_btn); + + private: + struct StateResource + { + QIcon m_icon; + + QString m_text; + + QMenu *m_menu = nullptr; + }; + + void updateToolButtonPopupMode(); + + State m_state = State::Default; + + StateResource m_resources[State::Max]; + + // Managed by QObject. + // We will use this to control the menu indicator of the button. + QToolButton *m_toolBtn = nullptr; + }; +} + +#endif // BIACTION_H diff --git a/src/widgets/dialogs/deleteconfirmdialog.cpp b/src/widgets/dialogs/deleteconfirmdialog.cpp new file mode 100644 index 00000000..026882a2 --- /dev/null +++ b/src/widgets/dialogs/deleteconfirmdialog.cpp @@ -0,0 +1,211 @@ +#include "deleteconfirmdialog.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "global.h" +#include +#include "selectionitemwidget.h" + +using namespace vnotex; + +DeleteConfirmDialog::DeleteConfirmDialog(const QString &p_title, + const QString &p_text, + const QString &p_info, + const QVector &p_items, + DeleteConfirmDialog::Flags p_flags, + bool p_noAskChecked, + QWidget *p_parent) + : ScrollDialog(p_parent), + m_items(p_items) +{ + setupUI(p_title, p_text, p_info, p_flags, p_noAskChecked); + + updateItemsList(); + + updateCountLabel(); +} + +void DeleteConfirmDialog::setupUI(const QString &p_title, + const QString &p_text, + const QString &p_info, + DeleteConfirmDialog::Flags p_flags, + bool p_noAskChecked) +{ + auto mainWidget = new QWidget(this); + setCentralWidget(mainWidget); + + auto mainLayout = new QVBoxLayout(mainWidget); + + // Text. + if (!p_text.isEmpty()) { + auto textLabel = new QLabel(p_text, mainWidget); + textLabel->setWordWrap(true); + mainLayout->addWidget(textLabel); + } + + // Info. + if (!p_info.isEmpty()) { + auto infoLabel = new QLabel(p_info, mainWidget); + infoLabel->setWordWrap(true); + mainLayout->addWidget(infoLabel); + } + + // Ask again. + if (p_flags & Flag::AskAgain) { + m_noAskCB = new QCheckBox(tr("Do not ask again"), mainWidget); + m_noAskCB->setChecked(p_noAskChecked); + mainLayout->addWidget(m_noAskCB); + } + + // Count. + { + QHBoxLayout *labelLayout = new QHBoxLayout(); + + m_countLabel = new QLabel("Items", mainWidget); + + labelLayout->addWidget(m_countLabel); + labelLayout->addStretch(); + labelLayout->setContentsMargins(0, 0, 0, 0); + + mainLayout->addLayout(labelLayout); + } + + // List and preview. + { + auto listLayout = new QHBoxLayout(); + + m_listWidget = new QListWidget(mainWidget); + connect(m_listWidget, &QListWidget::currentRowChanged, + this, &DeleteConfirmDialog::currentFileChanged); + connect(m_listWidget, &QListWidget::itemActivated, + this, [this](QListWidgetItem *p_item) { + if (!p_item) { + return; + } + + auto widget = getItemWidget(p_item); + Q_ASSERT(widget); + QString filePath = m_items[widget->getData().toInt()].m_path; + if (!filePath.isEmpty()) { + WidgetUtils::openUrlByDesktop(QUrl::fromLocalFile(filePath)); + } + }); + + listLayout->addWidget(m_listWidget); + + if (p_flags & Flag::Preview) { + m_previewer = new QLabel(mainWidget); + m_previewer->setScaledContents(true); + + m_previewArea = new QScrollArea(mainWidget); + m_previewArea->setBackgroundRole(QPalette::Dark); + m_previewArea->setWidget(m_previewer); + m_previewArea->setMinimumSize(256, 256); + + listLayout->addWidget(m_previewArea); + } + + mainLayout->addLayout(listLayout); + } + + setDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); + + setWindowTitle(p_title); +} + +QVector DeleteConfirmDialog::getConfirmedItems() const +{ + QVector confirmedItems; + + for (int i = 0; i < m_listWidget->count(); ++i) { + SelectionItemWidget *widget = getItemWidget(m_listWidget->item(i)); + if (widget->isChecked()) { + confirmedItems.push_back(m_items[widget->getData().toInt()]); + } + } + + return confirmedItems; +} + +void DeleteConfirmDialog::updateItemsList() +{ + m_listWidget->clear(); + + for (int i = 0; i < m_items.size(); ++i) { + auto itemWidget = new SelectionItemWidget(m_items[i].m_icon, m_items[i].m_name, this); + itemWidget->setChecked(true); + itemWidget->setData(i); + itemWidget->setToolTip(m_items[i].m_tip); + connect(itemWidget, &SelectionItemWidget::checkStateChanged, + this, &DeleteConfirmDialog::updateCountLabel); + + QListWidgetItem *item = new QListWidgetItem(m_listWidget); + QSize size = itemWidget->sizeHint(); + size.setHeight(size.height() * 2); + item->setSizeHint(size); + + m_listWidget->setItemWidget(item, itemWidget); + } + + m_listWidget->setMinimumSize(m_listWidget->sizeHint()); + m_listWidget->setCurrentRow(-1); + m_listWidget->setCurrentRow(0); +} + +bool DeleteConfirmDialog::isNoAskChecked() const +{ + return m_noAskCB->isChecked(); +} + +void DeleteConfirmDialog::currentFileChanged(int p_row) +{ + if (m_previewer) { + bool succeed = false; + if (p_row > -1) { + SelectionItemWidget *widget = getItemWidget(m_listWidget->item(p_row)); + if (widget) { + int idx = widget->getData().toInt(); + Q_ASSERT(idx < m_items.size()); + QPixmap image(m_items[idx].m_path); + if (!image.isNull()) { + m_previewer->setPixmap(image); + m_previewer->adjustSize(); + succeed = true; + } + } + } + + m_previewArea->setVisible(succeed); + if (succeed) { + resizeToHideScrollBarLater(true, true); + } + } +} + +SelectionItemWidget *DeleteConfirmDialog::getItemWidget(QListWidgetItem *p_item) const +{ + QWidget *wid = m_listWidget->itemWidget(p_item); + return static_cast(wid); +} + +void DeleteConfirmDialog::updateCountLabel() +{ + int total = m_listWidget->count(); + int checked = 0; + + for (int i = 0; i < total; ++i) { + SelectionItemWidget *widget = getItemWidget(m_listWidget->item(i)); + if (widget->isChecked()) { + ++checked; + } + } + + m_countLabel->setText(tr("%1/%2 Items").arg(checked).arg(total)); +} diff --git a/src/widgets/dialogs/deleteconfirmdialog.h b/src/widgets/dialogs/deleteconfirmdialog.h new file mode 100644 index 00000000..e3445604 --- /dev/null +++ b/src/widgets/dialogs/deleteconfirmdialog.h @@ -0,0 +1,111 @@ +#ifndef DELETECONFIRMDIALOG_H +#define DELETECONFIRMDIALOG_H + +#include "scrolldialog.h" + +#include + +class QLabel; +class QListWidget; +class QListWidgetItem; +class QCheckBox; +class QScrollArea; + +namespace vnotex +{ + class SelectionItemWidget; + + // Information about a deletion item needed to confirm. + struct ConfirmItemInfo + { + ConfirmItemInfo() + { + } + + ConfirmItemInfo(const QString &p_name, + const QString &p_tip, + const QString &p_path, + void *p_data) + : m_name(p_name), + m_tip(p_tip), + m_path(p_path), + m_data(p_data) + { + } + + ConfirmItemInfo(const QIcon &p_icon, + const QString &p_name, + const QString &p_tip, + const QString &p_path, + void *p_data) + : m_icon(p_icon), + m_name(p_name), + m_tip(p_tip), + m_path(p_path), + m_data(p_data) + { + } + + QIcon m_icon; + QString m_name; + QString m_tip; + QString m_path; + void *m_data = nullptr; + }; + + + class DeleteConfirmDialog : public ScrollDialog + { + Q_OBJECT + public: + enum Flag { + None = 0, + AskAgain = 0x1, + Preview = 0x2 + }; + Q_DECLARE_FLAGS(Flags, Flag) + + DeleteConfirmDialog(const QString &p_title, + const QString &p_text, + const QString &p_info, + const QVector &p_items, + DeleteConfirmDialog::Flags p_flags, + bool p_noAskChecked, + QWidget *p_parent = nullptr); + + QVector getConfirmedItems() const; + + bool isNoAskChecked() const; + + private slots: + void currentFileChanged(int p_row); + + void updateCountLabel(); + + private: + void setupUI(const QString &p_title, + const QString &p_text, + const QString &p_info, + DeleteConfirmDialog::Flags p_flags, + bool p_noAskChecked); + + void updateItemsList(); + + SelectionItemWidget *getItemWidget(QListWidgetItem *p_item) const; + + QVector m_items; + + QLabel *m_countLabel = nullptr; + QListWidget *m_listWidget = nullptr; + + QLabel *m_previewer = nullptr; + + QScrollArea *m_previewArea = nullptr; + + QCheckBox *m_noAskCB = nullptr; + }; + + Q_DECLARE_OPERATORS_FOR_FLAGS(DeleteConfirmDialog::Flags) +} // ns vnotex + +#endif // DELETECONFIRMDIALOG_H diff --git a/src/widgets/dialogs/dialog.cpp b/src/widgets/dialogs/dialog.cpp new file mode 100644 index 00000000..b3849e67 --- /dev/null +++ b/src/widgets/dialogs/dialog.cpp @@ -0,0 +1,138 @@ +#include "dialog.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include "../propertydefs.h" + +using namespace vnotex; + +Dialog::Dialog(QWidget *p_parent, Qt::WindowFlags p_flags) + : QDialog(p_parent, p_flags) +{ + m_layout = new QVBoxLayout(this); +} + +void Dialog::setCentralWidget(QWidget *p_widget) +{ + Q_ASSERT(!m_centralWidget && p_widget); + m_centralWidget = p_widget; + m_layout->addWidget(m_centralWidget); +} + +void Dialog::setDialogButtonBox(QDialogButtonBox::StandardButtons p_buttons, + QDialogButtonBox::StandardButton p_defaultButton) +{ + if (m_dialogButtonBox) { + m_dialogButtonBox->setStandardButtons(p_buttons); + } else { + m_dialogButtonBox = new QDialogButtonBox(p_buttons, this); + connect(m_dialogButtonBox, &QDialogButtonBox::accepted, + this, &Dialog::acceptedButtonClicked); + connect(m_dialogButtonBox, &QDialogButtonBox::rejected, this, &QDialog::reject); + connect(m_dialogButtonBox, &QDialogButtonBox::clicked, + this, [this](QAbstractButton *p_button) { + switch (m_dialogButtonBox->buttonRole(p_button)) { + case QDialogButtonBox::ResetRole: + resetButtonClicked(); + break; + + case QDialogButtonBox::ApplyRole: + appliedButtonClicked(); + break; + + default: + break; + } + }); + + m_layout->addWidget(m_dialogButtonBox); + } + + // If default button is not set, the first button with the accept role is made + // the default button when the dialog is shown. + if (p_defaultButton != QDialogButtonBox::NoButton) { + auto btn = m_dialogButtonBox->button(p_defaultButton); + if (btn) { + btn->setDefault(true); + } + } +} + +QDialogButtonBox *Dialog::getDialogButtonBox() const +{ + return m_dialogButtonBox; +} + +void Dialog::setInformationText(const QString &p_text, InformationLevel p_level) +{ + if (!m_infoTextEdit) { + m_infoTextEdit = new QPlainTextEdit(this); + m_infoTextEdit->setReadOnly(true); + m_infoTextEdit->setMaximumHeight(m_infoTextEdit->minimumSizeHint().height()); + m_layout->insertWidget(1, m_infoTextEdit); + } + + m_infoTextEdit->setPlainText(p_text); + m_infoTextEdit->setVisible(!p_text.isEmpty()); + + // Change the style. + const char *level = ""; + switch (p_level) { + case InformationLevel::Info: + level = "info"; + break; + + case InformationLevel::Warning: + level = "warning"; + break; + + case InformationLevel::Error: + level = "error"; + break; + } + + WidgetUtils::setPropertyDynamically(m_infoTextEdit, PropertyDefs::s_state, level); + WidgetUtils::updateSize(this); +} + +void Dialog::acceptedButtonClicked() +{ + QDialog::accept(); +} + +void Dialog::resetButtonClicked() +{ +} + +void Dialog::appliedButtonClicked() +{ +} + +void Dialog::setButtonEnabled(QDialogButtonBox::StandardButton p_button, bool p_enabled) +{ + QPushButton *button = getDialogButtonBox()->button(p_button); + if (button) { + button->setEnabled(p_enabled); + } +} + +void Dialog::completeButStay() +{ + Q_ASSERT(m_centralWidget); + m_centralWidget->setEnabled(false); + m_completed = true; +} + +bool Dialog::isCompleted() const +{ + return m_completed; +} diff --git a/src/widgets/dialogs/dialog.h b/src/widgets/dialogs/dialog.h new file mode 100644 index 00000000..d6910c8b --- /dev/null +++ b/src/widgets/dialogs/dialog.h @@ -0,0 +1,61 @@ +#ifndef DIALOG_H +#define DIALOG_H + +#include +#include + +class QBoxLayout; +class QPlainTextEdit; + +namespace vnotex +{ + class Dialog : public QDialog + { + Q_OBJECT + public: + explicit Dialog(QWidget *p_parent = nullptr, Qt::WindowFlags p_flags = Qt::WindowFlags()); + + virtual void setCentralWidget(QWidget *p_widget); + + void setDialogButtonBox(QDialogButtonBox::StandardButtons p_buttons, + QDialogButtonBox::StandardButton p_defaultButton = QDialogButtonBox::NoButton); + + QDialogButtonBox *getDialogButtonBox() const; + + enum class InformationLevel + { + Info, + Warning, + Error + }; + + void setInformationText(const QString &p_text, InformationLevel p_level = InformationLevel::Info); + + void setButtonEnabled(QDialogButtonBox::StandardButton p_button, bool p_enabled); + + // Dialog has completed but just stay the GUI to let user know information. + void completeButStay(); + + bool isCompleted() const; + + protected: + virtual void acceptedButtonClicked(); + + virtual void resetButtonClicked(); + + virtual void appliedButtonClicked(); + + QBoxLayout *m_layout = nullptr; + + QWidget *m_centralWidget = nullptr; + + private: + QPlainTextEdit *m_infoTextEdit = nullptr; + + QDialogButtonBox *m_dialogButtonBox = nullptr; + + bool m_completed = false; + }; +} // ns vnotex + +#endif // DIALOG_H diff --git a/src/widgets/dialogs/filepropertiesdialog.cpp b/src/widgets/dialogs/filepropertiesdialog.cpp new file mode 100644 index 00000000..0d3150ee --- /dev/null +++ b/src/widgets/dialogs/filepropertiesdialog.cpp @@ -0,0 +1,61 @@ +#include "filepropertiesdialog.h" + +#include +#include +#include +#include + +#include "../lineedit.h" +#include "../widgetsfactory.h" +#include + + +using namespace vnotex; + +FilePropertiesDialog::FilePropertiesDialog(const QString &p_path, QWidget *p_parent) + : ScrollDialog(p_parent), + m_path(p_path) +{ + Q_ASSERT(!p_path.isEmpty()); + setupUI(); + + LineEdit::selectBaseName(m_nameLineEdit); + + m_nameLineEdit->setFocus(); +} + +void FilePropertiesDialog::setupUI() +{ + auto widget = new QWidget(this); + setCentralWidget(widget); + + auto mainLayout = new QFormLayout(widget); + mainLayout->setContentsMargins(0, 0, 0, 0); + + const QFileInfo info(m_path); + + mainLayout->addRow(tr("Location:"), new QLabel(info.absolutePath(), widget)); + + setupNameLineEdit(widget); + m_nameLineEdit->setText(info.fileName()); + mainLayout->addRow(tr("Name:"), m_nameLineEdit); + + mainLayout->addRow(tr("Size:"), new QLabel(tr("%1 Bytes").arg(info.size()), widget)); + + setDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); + + setWindowTitle(tr("Properties")); +} + +void FilePropertiesDialog::setupNameLineEdit(QWidget *p_parent) +{ + m_nameLineEdit = WidgetsFactory::createLineEdit(p_parent); + auto validator = new QRegularExpressionValidator(QRegularExpression(PathUtils::c_fileNameRegularExpression), + m_nameLineEdit); + m_nameLineEdit->setValidator(validator); +} + +QString FilePropertiesDialog::getFileName() const +{ + return m_nameLineEdit->text(); +} diff --git a/src/widgets/dialogs/filepropertiesdialog.h b/src/widgets/dialogs/filepropertiesdialog.h new file mode 100644 index 00000000..6e166f78 --- /dev/null +++ b/src/widgets/dialogs/filepropertiesdialog.h @@ -0,0 +1,29 @@ +#ifndef FILEPROPERTIESDIALOG_H +#define FILEPROPERTIESDIALOG_H + +#include "scrolldialog.h" + +class QLineEdit; + +namespace vnotex +{ + class FilePropertiesDialog : public ScrollDialog + { + Q_OBJECT + public: + FilePropertiesDialog(const QString &p_path, QWidget *p_parent = nullptr); + + QString getFileName() const; + + private: + void setupUI(); + + void setupNameLineEdit(QWidget *p_parent); + + QString m_path; + + QLineEdit *m_nameLineEdit = nullptr; + }; +} + +#endif // FILEPROPERTIESDIALOG_H diff --git a/src/widgets/dialogs/folderfilesfilterwidget.cpp b/src/widgets/dialogs/folderfilesfilterwidget.cpp new file mode 100644 index 00000000..642035e0 --- /dev/null +++ b/src/widgets/dialogs/folderfilesfilterwidget.cpp @@ -0,0 +1,204 @@ +#include "folderfilesfilterwidget.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "../widgetsfactory.h" +#include "../lineedit.h" +#include +#include +#include "selectionitemwidget.h" + +using namespace vnotex; + +FolderFilesFilterWidget::FolderFilesFilterWidget(QWidget *p_parent) + : QWidget(p_parent) +{ + m_scanTimer = new QTimer(this); + m_scanTimer->setSingleShot(true); + m_scanTimer->setInterval(2000); + connect(m_scanTimer, &QTimer::timeout, + this, &FolderFilesFilterWidget::scanSuffixes); + + setupUI(); +} + +void FolderFilesFilterWidget::setupUI() +{ + auto mainLayout = new QFormLayout(this); + mainLayout->setContentsMargins(0, 0, 0, 0); + + { + auto pathLayout = new QHBoxLayout(); + pathLayout->setContentsMargins(0, 0, 0, 0); + mainLayout->addRow(tr("Folder:"), pathLayout); + + m_folderPathEdit = WidgetsFactory::createLineEdit(this); + pathLayout->addWidget(m_folderPathEdit); + connect(m_folderPathEdit, &QLineEdit::textChanged, + this, [this]() { + m_ready = false; + m_scanTimer->start(); + }); + + auto browseBtn = new QPushButton(tr("Browse"), this); + pathLayout->addWidget(browseBtn); + connect(browseBtn, &QPushButton::clicked, + this, [this]() { + static QString lastBrowsePath = QDir::homePath(); + auto folderPath = QFileDialog::getExistingDirectory(this, + tr("Select Notebook Root Folder"), + lastBrowsePath, + QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks); + if (!folderPath.isEmpty()) { + lastBrowsePath = PathUtils::parentDirPath(folderPath); + m_folderPathEdit->setText(folderPath); + } + }); + } + + { + auto layout = new QHBoxLayout(); + mainLayout->addRow(tr("Select files:"), layout); + layout->setContentsMargins(0, 0, 0, 0); + + m_suffixList = new QListWidget(this); + layout->addWidget(m_suffixList); + + auto btnLayout = new QVBoxLayout(); + layout->addLayout(btnLayout); + btnLayout->setContentsMargins(0, 0, 0, 0); + + auto selectAllBtn = new QPushButton(tr("Select All"), this); + btnLayout->addWidget(selectAllBtn); + connect(selectAllBtn, &QPushButton::clicked, + this, [this]() { + for (int i = 0; i < m_suffixList->count(); ++i) { + SelectionItemWidget *widget = getItemWidget(m_suffixList->item(i)); + widget->setChecked(true); + } + }); + + auto clearBtn = new QPushButton(tr("Clear"), this); + btnLayout->addWidget(clearBtn); + connect(clearBtn, &QPushButton::clicked, + this, [this]() { + for (int i = 0; i < m_suffixList->count(); ++i) { + SelectionItemWidget *widget = getItemWidget(m_suffixList->item(i)); + widget->setChecked(false); + } + }); + + btnLayout->addStretch(); + } +} + +QString FolderFilesFilterWidget::getFolderPath() const +{ + Q_ASSERT(m_ready); + return m_folderPathEdit->text(); +} + +QStringList FolderFilesFilterWidget::getSuffixes() const +{ + Q_ASSERT(m_ready); + QStringList suffixes; + for (int i = 0; i < m_suffixList->count(); ++i) { + auto widget = getItemWidget(m_suffixList->item(i)); + if (widget->isChecked()) { + suffixes << widget->getData().toString(); + } + } + + return suffixes; +} + +static void scanDir(const QString &p_path, QSet &p_suffixes) +{ + QDir dir(p_path); + auto children = dir.entryInfoList(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot | QDir::NoSymLinks); + for (const auto &child : children) { + if (child.isDir()) { + scanDir(child.filePath(), p_suffixes); + } else { + if (!child.suffix().isEmpty()) { + p_suffixes.insert(child.suffix()); + } + } + } +} + +static bool shouldSuffixBeChecked(const QString &p_suffix) +{ + QStringList suffixes = {QStringLiteral("md"), + QStringLiteral("markdown"), + QStringLiteral("cpp"), + QStringLiteral("py"), + QStringLiteral("js"), + QStringLiteral("css"), + QStringLiteral("html"), + QStringLiteral("txt")}; + auto suf = p_suffix.toLower(); + return suffixes.contains(suf); +} + +void FolderFilesFilterWidget::scanSuffixes() +{ + m_suffixList->clear(); + + auto folderPath = m_folderPathEdit->text(); + bool validFolderPath = QFileInfo::exists(folderPath) && PathUtils::isLegalPath(folderPath); + if (validFolderPath) { + WidgetUtils::setPropertyDynamically(m_folderPathEdit, "State"); + + QSet suffixes; + scanDir(folderPath, suffixes); + + for (const auto &suffix : suffixes) { + auto itemWidget = new SelectionItemWidget(suffix, this); + itemWidget->setChecked(shouldSuffixBeChecked(suffix)); + itemWidget->setData(suffix); + + QListWidgetItem *item = new QListWidgetItem(m_suffixList); + QSize size = itemWidget->sizeHint(); + size.setHeight(size.height() * 2); + item->setSizeHint(size); + + m_suffixList->setItemWidget(item, itemWidget); + } + } else { + WidgetUtils::setPropertyDynamically(m_folderPathEdit, "State", "error"); + qWarning() << "invalid folder path" << folderPath; + } + + WidgetUtils::updateSize(m_suffixList); + + m_ready = true; + emit filesChanged(); +} + +SelectionItemWidget *FolderFilesFilterWidget::getItemWidget(QListWidgetItem *p_item) const +{ + QWidget *wid = m_suffixList->itemWidget(p_item); + return static_cast(wid); +} + +bool FolderFilesFilterWidget::isReady() const +{ + return m_ready; +} + +QLineEdit *FolderFilesFilterWidget::getFolderPathEdit() const +{ + return m_folderPathEdit; +} diff --git a/src/widgets/dialogs/folderfilesfilterwidget.h b/src/widgets/dialogs/folderfilesfilterwidget.h new file mode 100644 index 00000000..204324bb --- /dev/null +++ b/src/widgets/dialogs/folderfilesfilterwidget.h @@ -0,0 +1,55 @@ +#ifndef FOLDERFILESFILTERWIDGET_H +#define FOLDERFILESFILTERWIDGET_H + +#include +#include + +class QTimer; +class QLineEdit; +class QListWidget; +class QListWidgetItem; + +namespace vnotex +{ + class SelectionItemWidget; + + // Filter files within a folder by suffix. + class FolderFilesFilterWidget : public QWidget + { + Q_OBJECT + public: + explicit FolderFilesFilterWidget(QWidget *p_parent = nullptr); + + QLineEdit *getFolderPathEdit() const; + + QString getFolderPath() const; + + QStringList getSuffixes() const; + + // Whether complete scanning files. + bool isReady() const; + + signals: + // Folder path or selected suffixes changed. + void filesChanged(); + + private slots: + void scanSuffixes(); + + private: + void setupUI(); + + SelectionItemWidget *getItemWidget(QListWidgetItem *p_item) const; + + // Managed by QObject. + QTimer *m_scanTimer = nullptr; + + QLineEdit *m_folderPathEdit = nullptr; + + QListWidget *m_suffixList = nullptr; + + bool m_ready = false; + }; +} + +#endif // FOLDERFILESFILTERWIDGET_H diff --git a/src/widgets/dialogs/folderpropertiesdialog.cpp b/src/widgets/dialogs/folderpropertiesdialog.cpp new file mode 100644 index 00000000..d1d936b8 --- /dev/null +++ b/src/widgets/dialogs/folderpropertiesdialog.cpp @@ -0,0 +1,105 @@ +#include "folderpropertiesdialog.h" + +#include + +#include "notebook/notebook.h" +#include "notebook/node.h" +#include "../widgetsfactory.h" +#include +#include "exception.h" +#include "nodeinfowidget.h" +#include +#include + +using namespace vnotex; + +FolderPropertiesDialog::FolderPropertiesDialog(Node *p_node, QWidget *p_parent) + : ScrollDialog(p_parent), + m_node(p_node) +{ + Q_ASSERT(m_node); + setupUI(); + + m_infoWidget->getNameLineEdit()->selectAll(); + m_infoWidget->getNameLineEdit()->setFocus(); +} + +void FolderPropertiesDialog::setupUI() +{ + setupNodeInfoWidget(this); + setCentralWidget(m_infoWidget); + + setDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); + setButtonEnabled(QDialogButtonBox::Ok, false); + + setWindowTitle(m_node->getName() + QStringLiteral(" ") + tr("Properties")); +} + +void FolderPropertiesDialog::setupNodeInfoWidget(QWidget *p_parent) +{ + m_infoWidget = new NodeInfoWidget(m_node, p_parent); + connect(m_infoWidget, &NodeInfoWidget::inputEdited, + this, &FolderPropertiesDialog::validateInputs); +} + +void FolderPropertiesDialog::validateInputs() +{ + bool valid = true; + QString msg; + + valid = valid && validateNameInput(msg); + setInformationText(msg, valid ? ScrollDialog::InformationLevel::Info + : ScrollDialog::InformationLevel::Error); + setButtonEnabled(QDialogButtonBox::Ok, valid); +} + +bool FolderPropertiesDialog::validateNameInput(QString &p_msg) +{ + p_msg.clear(); + + auto name = m_infoWidget->getName(); + if (name.isEmpty()) { + p_msg = tr("Please specify a name for the folder."); + return false; + } + + if (name != m_node->getName() + && m_infoWidget->getParentNode()->hasChild(name, false)) { + p_msg = tr("Name conflicts with existing folder."); + return false; + } + + return true; +} + +void FolderPropertiesDialog::acceptedButtonClicked() +{ + if (saveFolderProperties()) { + accept(); + } +} + +bool FolderPropertiesDialog::saveFolderProperties() +{ + try { + if (m_infoWidget->getName() != m_node->getName()) { + // Close the node first. + auto event = QSharedPointer::create(); + emit VNoteX::getInst().nodeAboutToRename(m_node, event); + if (!event->m_response.toBool()) { + return false; + } + + m_node->updateName(m_infoWidget->getName()); + } + } catch (Exception &p_e) { + QString msg = tr("Failed to save folder (%1) in (%2) (%3).").arg(m_node->getName(), + m_node->getNotebook()->getName(), + p_e.what()); + qCritical() << msg; + setInformationText(msg, ScrollDialog::InformationLevel::Error); + return false; + } + + return true; +} diff --git a/src/widgets/dialogs/folderpropertiesdialog.h b/src/widgets/dialogs/folderpropertiesdialog.h new file mode 100644 index 00000000..c145f585 --- /dev/null +++ b/src/widgets/dialogs/folderpropertiesdialog.h @@ -0,0 +1,38 @@ +#ifndef FOLDERPROPERTIESDIALOG_H +#define FOLDERPROPERTIESDIALOG_H + +#include "scrolldialog.h" + +namespace vnotex +{ + class Node; + class NodeInfoWidget; + + class FolderPropertiesDialog : public ScrollDialog + { + Q_OBJECT + public: + FolderPropertiesDialog(Node *p_node, QWidget *p_parent = nullptr); + + protected: + void acceptedButtonClicked() Q_DECL_OVERRIDE; + + private slots: + void validateInputs(); + + private: + void setupUI(); + + void setupNodeInfoWidget(QWidget *p_parent); + + bool validateNameInput(QString &p_msg); + + bool saveFolderProperties(); + + NodeInfoWidget *m_infoWidget = nullptr; + + Node *m_node = nullptr; + }; +} // ns vnotex + +#endif // FOLDERPROPERTIESDIALOG_H diff --git a/src/widgets/dialogs/imageinsertdialog.cpp b/src/widgets/dialogs/imageinsertdialog.cpp new file mode 100644 index 00000000..9bcc4e2b --- /dev/null +++ b/src/widgets/dialogs/imageinsertdialog.cpp @@ -0,0 +1,333 @@ +#include "imageinsertdialog.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include +#include +#include +#include + +using namespace vnotex; + +int ImageInsertDialog::s_lastScaleSliderValue = 10; + +ImageInsertDialog::ImageInsertDialog(const QString &p_title, + const QString &p_imageTitle, + const QString &p_imageAlt, + const QString &p_imagePath, + bool p_browserEnabled, + QWidget *p_parent) + : Dialog(p_parent), + m_browserEnabled(p_browserEnabled) +{ + m_imagePathCheckTimer = new QTimer(this); + m_imagePathCheckTimer->setSingleShot(true); + m_imagePathCheckTimer->setInterval(500); + connect(m_imagePathCheckTimer, &QTimer::timeout, + this, &ImageInsertDialog::checkImagePathInput); + + setupUI(p_title, p_imageTitle, p_imageAlt, p_imagePath); + + checkInput(); +} + +void ImageInsertDialog::setupUI(const QString &p_title, + const QString &p_imageTitle, + const QString &p_imageAlt, + const QString &p_imagePath) +{ + auto mainWidget = new QWidget(this); + setCentralWidget(mainWidget); + + auto mainLayout = new QVBoxLayout(mainWidget); + + auto gridLayout = new QGridLayout(); + mainLayout->addLayout(gridLayout); + + // Image Path. + m_imagePathEdit = WidgetsFactory::createLineEdit(p_imagePath, mainWidget); + m_imagePathEdit->setReadOnly(!m_browserEnabled); + gridLayout->addWidget(new QLabel(tr("From:"), mainWidget), 0, 0, 1, 1); + gridLayout->addWidget(m_imagePathEdit, 0, 1, 1, 3); + connect(m_imagePathEdit, &QLineEdit::textChanged, + this, [this]() { + m_imagePathCheckTimer->start(); + }); + + m_browseBtn = new QPushButton(tr("&Browse"), mainWidget); + m_browseBtn->setEnabled(m_browserEnabled); + gridLayout->addWidget(m_browseBtn, 0, 4, 1, 1); + connect(m_browseBtn, &QPushButton::clicked, + this, &ImageInsertDialog::browseFile); + + // Image Title. + m_imageTitleEdit = WidgetsFactory::createLineEdit(p_imageTitle, mainWidget); + auto titleValidator = new QRegExpValidator(QRegExp(vte::MarkdownUtils::c_imageTitleRegExp), m_imageTitleEdit); + m_imageTitleEdit->setValidator(titleValidator); + gridLayout->addWidget(new QLabel(tr("Title:"), mainWidget), 1, 0, 1, 1); + gridLayout->addWidget(m_imageTitleEdit, 1, 1, 1, 3); + connect(m_imageTitleEdit, &QLineEdit::textChanged, + this, &ImageInsertDialog::checkInput); + + // Image Alt. + m_imageAltEdit = WidgetsFactory::createLineEdit(p_imageAlt, mainWidget); + auto altValidator = new QRegExpValidator(QRegExp(vte::MarkdownUtils::c_imageAltRegExp), m_imageAltEdit); + m_imageAltEdit->setValidator(altValidator); + gridLayout->addWidget(new QLabel(tr("Alt text:"), mainWidget), 2, 0, 1, 1); + gridLayout->addWidget(m_imageAltEdit, 2, 1, 1, 3); + + // Scale. + m_widthSpin = WidgetsFactory::createSpinBox(mainWidget); + m_widthSpin->setMinimum(1); + m_widthSpin->setSingleStep(10); + m_widthSpin->setSuffix(" px"); + connect(m_widthSpin, static_cast(&QSpinBox::valueChanged), + this, [this](int p_val) { + if (m_image.isNull()) { + return; + } + + int height = m_image.height() * (1.0 * p_val / m_image.width()); + m_imageLabel->resize(p_val, height); + }); + // 0.1 to 2.0 -> 1 to 20. + m_scaleSlider = new QSlider(mainWidget); + m_scaleSlider->setOrientation(Qt::Horizontal); + m_scaleSlider->setMinimum(1); + m_scaleSlider->setMaximum(20); + m_scaleSlider->setValue(s_lastScaleSliderValue); + m_scaleSlider->setSingleStep(1); + m_scaleSlider->setPageStep(5); + connect(m_scaleSlider, &QSlider::valueChanged, + this, &ImageInsertDialog::handleScaleSliderValueChanged); + m_sliderLabel = new QLabel("1x", mainWidget); + gridLayout->addWidget(new QLabel(tr("Scaling width:"), mainWidget), 3, 0, 1, 1); + gridLayout->addWidget(m_widthSpin, 3, 1, 1, 1); + gridLayout->addWidget(m_scaleSlider, 3, 2, 1, 2); + gridLayout->addWidget(m_sliderLabel, 3, 4, 1, 1); + + // Preview area. + m_imageLabel = new QLabel(mainWidget); + m_imageLabel->setScaledContents(true); + m_previewArea = new QScrollArea(mainWidget); + m_previewArea->setBackgroundRole(QPalette::Dark); + m_previewArea->setWidget(m_imageLabel); + m_previewArea->setMinimumSize(256, 256); + gridLayout->addWidget(m_previewArea, 4, 0, 1, 5); + + setImageControlsVisible(false); + + gridLayout->setColumnStretch(0, 0); + gridLayout->setColumnStretch(1, 0); + gridLayout->setColumnStretch(2, 1); + gridLayout->setColumnStretch(3, 1); + gridLayout->setColumnStretch(4, 0); + + setDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); + + setWindowTitle(p_title); +} + +void ImageInsertDialog::setImageControlsVisible(bool p_visible) +{ + m_widthSpin->setEnabled(p_visible); + m_scaleSlider->setEnabled(p_visible); + m_sliderLabel->setEnabled(p_visible); + + m_previewArea->setVisible(p_visible); +} + +void ImageInsertDialog::showEvent(QShowEvent *p_event) +{ + Dialog::showEvent(p_event); + + m_imageTitleEdit->selectAll(); + m_imageTitleEdit->setFocus(); +} + +void ImageInsertDialog::checkImagePathInput() +{ + const QString text = m_imagePathEdit->text(); + QUrl url = QUrl::fromUserInput(text); + if (text.isEmpty() || !url.isValid()) { + setImage(QImage()); + return; + } + + if (url.isLocalFile()) { + setImage(FileUtils::imageFromFile(url.toLocalFile())); + m_source = Source::LocalFile; + } else { + setImage(QImage()); + m_source = Source::ImageData; + + if (!m_downloader) { + m_downloader = new vte::Downloader(this); + connect(m_downloader, &vte::Downloader::downloadFinished, + this, &ImageInsertDialog::handleImageDownloaded); + } + + m_downloader->downloadAsync(url); + } + + m_imageTitleEdit->setText(QFileInfo(text).baseName()); + + checkInput(); +} + +void ImageInsertDialog::checkInput() +{ + setButtonEnabled(QDialogButtonBox::Ok, !m_image.isNull()); +} + +void ImageInsertDialog::browseFile() +{ + QString bpath(QDir::homePath()); + QString filePath = QFileDialog::getOpenFileName(this, + tr("Select Image To Insert"), + bpath, + tr("Images (*.png *.xpm *.jpg *.bmp *.gif *.svg);;All (*.*)")); + if (filePath.isEmpty()) { + return; + } + + m_source = Source::LocalFile; + + setImagePath(filePath); + + m_imageTitleEdit->selectAll(); + m_imageTitleEdit->setFocus(); +} + +QString ImageInsertDialog::getImageTitle() const +{ + return m_imageTitleEdit->text(); +} + +QString ImageInsertDialog::getImageAltText() const +{ + return m_imageAltEdit->text(); +} + +QString ImageInsertDialog::getImagePath() const +{ + if (m_tempFile.isNull()) { + return m_imagePathEdit->text(); + } else { + return m_tempFile->fileName(); + } +} + +ImageInsertDialog::Source ImageInsertDialog::getImageSource() const +{ + return m_source; +} + +void ImageInsertDialog::setImageSource(ImageInsertDialog::Source p_source) +{ + m_source = p_source; +} + +const QImage &ImageInsertDialog::getImage() const +{ + return m_image; +} + +void ImageInsertDialog::setImage(const QImage &p_image) +{ + m_image = p_image; + if (m_image.isNull()) { + m_imageLabel->clear(); + setImageControlsVisible(false); + } else { + m_imageLabel->setPixmap(QPixmap::fromImage(m_image)); + + m_imageLabel->adjustSize(); + + m_widthSpin->setMaximum(m_image.width() * 5); + + // Set the scaling widgets. + if (m_scaleSlider->value() == s_lastScaleSliderValue) { + handleScaleSliderValueChanged(s_lastScaleSliderValue); + } else { + m_scaleSlider->setValue(s_lastScaleSliderValue); + } + + setImageControlsVisible(true); + } + + checkInput(); +} + +void ImageInsertDialog::setImagePath(const QString &p_path) +{ + m_tempFile.reset(); + m_imagePathEdit->setText(p_path); +} + +int ImageInsertDialog::getScaledWidth() const +{ + if (m_image.isNull()) { + return 0; + } + + int val = m_widthSpin->value(); + return val == m_image.width() ? 0 : val; +} + +void ImageInsertDialog::handleImageDownloaded(const QByteArray &p_data, const QString &p_url) +{ + setImage(QImage::fromData(p_data)); + + // Save it to a temp file to avoid potential data loss via QImage. + bool savedToFile = false; + if (!p_data.isEmpty()) { + auto format = QFileInfo(PathUtils::removeUrlParameters(p_url)).suffix(); + m_tempFile.reset(FileUtils::createTemporaryFile(format)); + if (m_tempFile->open()) { + savedToFile = -1 != m_tempFile->write(p_data); + m_tempFile->close(); + } + } + + m_source = savedToFile ? Source::LocalFile : Source::ImageData; + if (!savedToFile) { + m_tempFile.reset(); + } +} + +void ImageInsertDialog::handleScaleSliderValueChanged(int p_val) +{ + if (m_image.isNull()) { + return; + } + + int width = m_image.width(); + qreal factor = 1.0; + if (p_val != 10) { + factor = p_val / 10.0; + width = m_image.width() * factor; + } + + m_widthSpin->setValue(width); + m_sliderLabel->setText(QString::number(factor) + "x"); + + s_lastScaleSliderValue = p_val; +} diff --git a/src/widgets/dialogs/imageinsertdialog.h b/src/widgets/dialogs/imageinsertdialog.h new file mode 100644 index 00000000..d1cda918 --- /dev/null +++ b/src/widgets/dialogs/imageinsertdialog.h @@ -0,0 +1,117 @@ +#ifndef IMAGEINSERTDIALOG_H +#define IMAGEINSERTDIALOG_H + +#include "dialog.h" + +#include +#include + +class QLineEdit; +class QPushButton; +class QSpinBox; +class QSlider; +class QLabel; +class QTimer; +class QTemporaryFile; +class QScrollArea; + +namespace vte +{ + class Downloader; +} + +namespace vnotex +{ + class ImageInsertDialog : public Dialog + { + Q_OBJECT + public: + enum Source + { + LocalFile, + ImageData + }; + + ImageInsertDialog(const QString &p_title, + const QString &p_imageTitle, + const QString &p_imageAlt, + const QString &p_imagePath, + bool p_browserEnabled = true, + QWidget *p_parent = nullptr); + + QString getImageTitle() const; + + QString getImageAltText() const; + + QString getImagePath() const; + void setImagePath(const QString &p_path); + + ImageInsertDialog::Source getImageSource() const; + void setImageSource(ImageInsertDialog::Source p_source); + + const QImage &getImage() const; + void setImage(const QImage &p_image); + + // Return 0 if no scaling. + int getScaledWidth() const; + + protected: + void showEvent(QShowEvent *p_event) Q_DECL_OVERRIDE; + + private slots: + void checkImagePathInput(); + + void checkInput(); + + void browseFile(); + + void handleImageDownloaded(const QByteArray &p_data, const QString &p_url); + + void handleScaleSliderValueChanged(int p_val); + + private: + void setupUI(const QString &p_title, + const QString &p_imageTitle, + const QString &p_imageAlt, + const QString &p_imagePath); + + void setImageControlsVisible(bool p_visible); + + bool m_browserEnabled = true; + + Source m_source = Source::LocalFile; + + QLineEdit *m_imagePathEdit = nullptr; + + QPushButton *m_browseBtn = nullptr; + + QLineEdit *m_imageTitleEdit = nullptr; + + QLineEdit *m_imageAltEdit = nullptr; + + QSpinBox *m_widthSpin = nullptr; + + QSlider *m_scaleSlider = nullptr; + + QLabel *m_sliderLabel = nullptr; + + QLabel *m_imageLabel = nullptr; + + QScrollArea *m_previewArea = nullptr; + + QImage m_image; + + // Managed by QObject. + vte::Downloader *m_downloader = nullptr; + + // Managed by QObject. + QTimer *m_imagePathCheckTimer = nullptr; + + // Used to hold downloaded image, to avoid data loss via QImage. + QSharedPointer m_tempFile; + + static int s_lastScaleSliderValue; + }; +} + +#endif // IMAGEINSERTDIALOG_H diff --git a/src/widgets/dialogs/importfolderdialog.cpp b/src/widgets/dialogs/importfolderdialog.cpp new file mode 100644 index 00000000..016a73e7 --- /dev/null +++ b/src/widgets/dialogs/importfolderdialog.cpp @@ -0,0 +1,113 @@ +#include "importfolderdialog.h" + +#include +#include +#include +#include + +#include "folderfilesfilterwidget.h" +#include "vnotex.h" +#include "exception.h" +#include +#include +#include +#include "importfolderutils.h" + +using namespace vnotex; + +ImportFolderDialog::ImportFolderDialog(Node *p_node, QWidget *p_parent) + : ScrollDialog(p_parent), + m_parentNode(p_node) +{ + setupUI(); + + m_filterWidget->getFolderPathEdit()->setFocus(); +} + +void ImportFolderDialog::setupUI() +{ + auto widget = new QWidget(this); + auto mainLayout = new QVBoxLayout(widget); + setCentralWidget(widget); + + auto label = new QLabel(tr("Import folder into (%1).").arg(m_parentNode->fetchAbsolutePath()), widget); + label->setWordWrap(true); + mainLayout->addWidget(label); + + setupFolderFilesFilterWidget(widget); + mainLayout->addWidget(m_filterWidget); + + setDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); + setButtonEnabled(QDialogButtonBox::Ok, false); + + setWindowTitle(tr("Import Folder")); +} + +void ImportFolderDialog::setupFolderFilesFilterWidget(QWidget *p_parent) +{ + m_filterWidget = new FolderFilesFilterWidget(p_parent); + connect(m_filterWidget, &FolderFilesFilterWidget::filesChanged, + this, [this]() { + validateInputs(); + }); +} + +const QSharedPointer &ImportFolderDialog::getNewNode() const +{ + return m_newNode; +} + +void ImportFolderDialog::acceptedButtonClicked() +{ + if (isCompleted() || importFolder()) { + accept(); + } +} + +void ImportFolderDialog::validateInputs() +{ + bool valid = true; + QString msg; + + auto folder = m_filterWidget->getFolderPath(); + if (!QFileInfo::exists(folder) || !PathUtils::isLegalPath(folder)) { + msg = tr("Please specify a valid folder to import."); + valid = false; + } + + setInformationText(msg, valid ? ScrollDialog::InformationLevel::Info + : ScrollDialog::InformationLevel::Error); + setButtonEnabled(QDialogButtonBox::Ok, valid); +} + +bool ImportFolderDialog::importFolder() +{ + const auto folder = m_filterWidget->getFolderPath(); + auto nb = m_parentNode->getNotebook(); + m_newNode = nullptr; + try { + m_newNode = nb->copyAsNode(m_parentNode, Node::Type::Folder, folder); + } catch (Exception &p_e) { + auto msg = tr("Failed to add folder (%1) as node (%2).").arg(folder, p_e.what()); + qCritical() << msg; + setInformationText(msg, ScrollDialog::InformationLevel::Error); + return false; + } + + QString errMsg; + ImportFolderUtils::importFolderContents(nb, + m_newNode.data(), + m_filterWidget->getSuffixes(), + errMsg); + + emit nb->nodeUpdated(m_parentNode); + + if (!errMsg.isEmpty()) { + qWarning() << errMsg; + setInformationText(errMsg, ScrollDialog::InformationLevel::Error); + completeButStay(); + return false; + } + + return true; +} diff --git a/src/widgets/dialogs/importfolderdialog.h b/src/widgets/dialogs/importfolderdialog.h new file mode 100644 index 00000000..b2067ab0 --- /dev/null +++ b/src/widgets/dialogs/importfolderdialog.h @@ -0,0 +1,41 @@ +#ifndef IMPORTFOLDERDIALOG_H +#define IMPORTFOLDERDIALOG_H + +#include "scrolldialog.h" + +namespace vnotex +{ + class Node; + class FolderFilesFilterWidget; + + class ImportFolderDialog : public ScrollDialog + { + Q_OBJECT + public: + // Import a folder under @p_node. + ImportFolderDialog(Node *p_node, QWidget *p_parent = nullptr); + + const QSharedPointer &getNewNode() const; + + protected: + void acceptedButtonClicked() Q_DECL_OVERRIDE; + + private slots: + void validateInputs(); + + private: + void setupUI(); + + void setupFolderFilesFilterWidget(QWidget *p_parent = nullptr); + + bool importFolder(); + + Node *m_parentNode = nullptr; + + QSharedPointer m_newNode; + + FolderFilesFilterWidget *m_filterWidget = nullptr; + }; +} + +#endif // IMPORTFOLDERDIALOG_H diff --git a/src/widgets/dialogs/importfolderutils.cpp b/src/widgets/dialogs/importfolderutils.cpp new file mode 100644 index 00000000..3dfa1beb --- /dev/null +++ b/src/widgets/dialogs/importfolderutils.cpp @@ -0,0 +1,108 @@ +#include "importfolderutils.h" + +#include +#include +#include +#include "legacynotebookutils.h" +#include + +using namespace vnotex; + +#define TR(x) QCoreApplication::translate("ImportFolderUtils", (x)) + +void ImportFolderUtils::importFolderContents(Notebook *p_notebook, + Node *p_node, + const QStringList &p_suffixes, + QString &p_errMsg) +{ + auto rootDir = p_node->toDir(); + auto children = rootDir.entryInfoList(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot | QDir::NoSymLinks); + for (const auto &child : children) { + if (child.isDir()) { + if (p_notebook->isBuiltInFolder(p_node, child.fileName())) { + continue; + } + + QSharedPointer node; + try { + node = p_notebook->addAsNode(p_node, Node::Type::Folder, child.fileName(), NodeParameters()); + } catch (Exception &p_e) { + Utils::appendMsg(p_errMsg, TR("Failed to add folder (%1) as node (%2).").arg(child.fileName(), p_e.what())); + continue; + } + + importFolderContents(p_notebook, node.data(), p_suffixes, p_errMsg); + } else if (!p_notebook->isBuiltInFile(p_node, child.fileName())) { + if (p_suffixes.contains(child.suffix())) { + try { + p_notebook->addAsNode(p_node, Node::Type::File, child.fileName(), NodeParameters()); + } catch (Exception &p_e) { + Utils::appendMsg(p_errMsg, TR("Failed to add file (%1) as node (%2).").arg(child.filePath(), p_e.what())); + } + } + } + } +} + +void ImportFolderUtils::importFolderContentsByLegacyConfig(Notebook *p_notebook, + Node *p_node, + QString &p_errMsg) +{ + auto rootDir = p_node->toDir(); + + const auto config = LegacyNotebookUtils::getFolderConfig(rootDir.absolutePath()); + + // Remove the config file. + LegacyNotebookUtils::removeFolderConfigFile(rootDir.absolutePath()); + + // Folders. + LegacyNotebookUtils::forEachFolder(config, [&rootDir, p_notebook, p_node, &p_errMsg](const QString &name) { + if (!rootDir.exists(name)) { + Utils::appendMsg(p_errMsg, TR("Folder (%1) does not exist.").arg(name)); + return; + } + + if (p_notebook->isBuiltInFolder(p_node, name)) { + Utils::appendMsg(p_errMsg, TR("Folder (%1) conflicts with built-in folder.").arg(name)); + return; + } + + QSharedPointer node; + try { + NodeParameters paras; + paras.m_createdTimeUtc = LegacyNotebookUtils::getCreatedTimeUtcOfFolder(rootDir.filePath(name)); + node = p_notebook->addAsNode(p_node, Node::Type::Folder, name, paras); + } catch (Exception &p_e) { + Utils::appendMsg(p_errMsg, TR("Failed to add folder (%1) as node (%2).").arg(name, p_e.what())); + return; + } + + ImportFolderUtils::importFolderContentsByLegacyConfig(p_notebook, node.data(), p_errMsg); + }); + + // Files. + LegacyNotebookUtils::forEachFile(config, [&rootDir, p_notebook, p_node, &p_errMsg](const LegacyNotebookUtils::FileInfo &info) { + if (!rootDir.exists(info.m_name)) { + Utils::appendMsg(p_errMsg, TR("File (%1) does not exist.").arg(info.m_name)); + return; + } + + if (p_notebook->isBuiltInFile(p_node, info.m_name)) { + Utils::appendMsg(p_errMsg, TR("File (%1) conflicts with built-in file.").arg(info.m_name)); + return; + } + + QSharedPointer node; + try { + NodeParameters paras; + paras.m_createdTimeUtc = info.m_createdTimeUtc; + paras.m_modifiedTimeUtc = info.m_modifiedTimeUtc; + paras.m_attachmentFolder = info.m_attachmentFolder; + paras.m_tags = info.m_tags; + node = p_notebook->addAsNode(p_node, Node::Type::File, info.m_name, paras); + } catch (Exception &p_e) { + Utils::appendMsg(p_errMsg, TR("Failed to add file (%1) as node (%2).").arg(info.m_name, p_e.what())); + return; + } + }); +} diff --git a/src/widgets/dialogs/importfolderutils.h b/src/widgets/dialogs/importfolderutils.h new file mode 100644 index 00000000..06d68fb5 --- /dev/null +++ b/src/widgets/dialogs/importfolderutils.h @@ -0,0 +1,31 @@ +#ifndef IMPORTFOLDERUTILS_H +#define IMPORTFOLDERUTILS_H + +#include + +namespace vnotex +{ + class Notebook; + class Node; + + class ImportFolderUtils + { + public: + ImportFolderUtils() = delete; + + // Process folder @p_node. + // @p_node has already been added. + static void importFolderContents(Notebook *p_notebook, + Node *p_node, + const QStringList &p_suffixes, + QString &p_errMsg); + + // Process folder @p_node by legacy notebook config. + // @p_node has already been added. + static void importFolderContentsByLegacyConfig(Notebook *p_notebook, + Node *p_node, + QString &p_errMsg); + }; +} + +#endif // IMPORTFOLDERUTILS_H diff --git a/src/widgets/dialogs/importlegacynotebookdialog.cpp b/src/widgets/dialogs/importlegacynotebookdialog.cpp new file mode 100644 index 00000000..7bca67de --- /dev/null +++ b/src/widgets/dialogs/importlegacynotebookdialog.cpp @@ -0,0 +1,138 @@ +#include "importlegacynotebookdialog.h" + +#include +#include + +#include "notebookinfowidget.h" +#include +#include +#include +#include "vnotex.h" +#include "notebookmgr.h" +#include "legacynotebookutils.h" +#include "../messageboxhelper.h" +#include +#include "importfolderutils.h" + +using namespace vnotex; + +ImportLegacyNotebookDialog::ImportLegacyNotebookDialog(QWidget *p_parent) + : NewNotebookDialog(p_parent) +{ + setWindowTitle(tr("Import Legacy Notebook")); + + m_infoWidget->setMode(NotebookInfoWidget::Mode::CreateFromLegacy); + m_infoWidget->getRootFolderPathLineEdit()->setFocus(); +} + +void ImportLegacyNotebookDialog::acceptedButtonClicked() +{ + if (isCompleted()) { + accept(); + return; + } + + // Warn user about the transformation. + int ret = MessageBoxHelper::questionOkCancel(MessageBoxHelper::Warning, + tr("Once imported, the legacy notebook could no longer be recognized by legacy VNote!"), + QString(), + tr("Welcome to VNoteX and the new VNote!"), + this); + if (ret && importLegacyNotebook()) { + accept(); + return; + } +} + +bool ImportLegacyNotebookDialog::validateRootFolderInput(QString &p_msg) +{ + const auto rootFolderPath = m_infoWidget->getRootFolderPath(); + if (!QFileInfo::exists(rootFolderPath) || !PathUtils::isLegalPath(rootFolderPath)) { + Utils::appendMsg(p_msg, tr("Please specify a valid root folder to import.")); + return false; + } + + if (!LegacyNotebookUtils::isLegacyNotebookRootFolder(rootFolderPath)) { + Utils::appendMsg(p_msg, tr("Failed to recognize a legacy notebook from the root folder.")); + return false; + } + + // Check if there already exists one notebook with the same root folder. + { + auto ¬ebookMgr = VNoteX::getInst().getNotebookMgr(); + auto notebook = notebookMgr.findNotebookByRootFolderPath(rootFolderPath); + if (notebook) { + Utils::appendMsg(p_msg, + tr("There already exists a notebook (%1) with the same root folder.").arg(notebook->getName())); + return false; + } + } + + return true; +} + +bool ImportLegacyNotebookDialog::importLegacyNotebook() +{ + const auto rootFolderPath = m_infoWidget->getRootFolderPath(); + + auto ¬ebookMgr = VNoteX::getInst().getNotebookMgr(); + auto imageFolder = LegacyNotebookUtils::getImageFolderOfNotebook(rootFolderPath); + if (imageFolder.isEmpty()) { + imageFolder = Notebook::c_defaultImageFolder; + } + auto attachmentFolder = LegacyNotebookUtils::getAttachmentFolderOfNotebook(rootFolderPath); + if (attachmentFolder.isEmpty()) { + attachmentFolder = Notebook::c_defaultAttachmentFolder; + } + auto paras = NotebookParameters::createNotebookParameters(notebookMgr, + m_infoWidget->getType(), + m_infoWidget->getName(), + m_infoWidget->getDescription(), + rootFolderPath, + m_infoWidget->getIcon(), + imageFolder, + attachmentFolder, + LegacyNotebookUtils::getCreatedTimeUtcOfFolder(rootFolderPath), + m_infoWidget->getBackend(), + m_infoWidget->getVersionController(), + m_infoWidget->getConfigMgr()); + paras->m_ensureEmptyRootFolder = false; + QSharedPointer nb; + try { + nb = notebookMgr.newNotebook(paras); + } catch (Exception &p_e) { + QString msg = tr("Failed to create notebook in %1 (%2).").arg(rootFolderPath, p_e.what()); + qCritical() << msg; + setInformationText(msg, ScrollDialog::InformationLevel::Error); + return false; + } + + QString errMsg; + + // Copy legacy recycle bin folder into new one or just delete it if it is empty. + { + auto legacyBinFolder = LegacyNotebookUtils::getRecycleBinFolderOfNotebook(rootFolderPath); + if (!legacyBinFolder.isEmpty()) { + auto binFolderPath = PathUtils::concatenateFilePath(rootFolderPath, legacyBinFolder); + if (PathUtils::isEmptyDir(binFolderPath)) { + FileUtils::removeDir(binFolderPath); + } else { + nb->moveDirToRecycleBin(binFolderPath); + } + } + } + + auto rootNode = nb->getRootNode(); + ImportFolderUtils::importFolderContentsByLegacyConfig(nb.data(), rootNode.data(), errMsg); + + emit nb->nodeUpdated(rootNode.data()); + + if (!errMsg.isEmpty()) { + qWarning() << errMsg; + setInformationText(errMsg, ScrollDialog::InformationLevel::Error); + completeButStay(); + return false; + } + + return true; +} diff --git a/src/widgets/dialogs/importlegacynotebookdialog.h b/src/widgets/dialogs/importlegacynotebookdialog.h new file mode 100644 index 00000000..730d3263 --- /dev/null +++ b/src/widgets/dialogs/importlegacynotebookdialog.h @@ -0,0 +1,24 @@ +#ifndef IMPORTLEGACYNOTEBOOKDIALOG_H +#define IMPORTLEGACYNOTEBOOKDIALOG_H + +#include "newnotebookdialog.h" + +namespace vnotex +{ + class ImportLegacyNotebookDialog : public NewNotebookDialog + { + Q_OBJECT + public: + explicit ImportLegacyNotebookDialog(QWidget *p_parent = nullptr); + + protected: + void acceptedButtonClicked() Q_DECL_OVERRIDE; + + bool validateRootFolderInput(QString &p_msg) Q_DECL_OVERRIDE; + + private: + bool importLegacyNotebook(); + }; +} + +#endif // IMPORTLEGACYNOTEBOOKDIALOG_H diff --git a/src/widgets/dialogs/importnotebookdialog.cpp b/src/widgets/dialogs/importnotebookdialog.cpp new file mode 100644 index 00000000..b746ec6c --- /dev/null +++ b/src/widgets/dialogs/importnotebookdialog.cpp @@ -0,0 +1,155 @@ +#include "importnotebookdialog.h" + +#include + +#include "../widgetsfactory.h" +#include "vnotex.h" +#include "notebookmgr.h" +#include "notebook/inotebookfactory.h" +#include "notebook/notebookparameters.h" +#include "versioncontroller/iversioncontrollerfactory.h" +#include "notebookconfigmgr/inotebookconfigmgrfactory.h" +#include "notebookbackend/inotebookbackendfactory.h" +#include "configmgr.h" +#include +#include +#include "exception.h" +#include "notebookinfowidget.h" + +using namespace vnotex; + +ImportNotebookDialog::ImportNotebookDialog(QWidget *p_parent) + : ScrollDialog(p_parent) +{ + setupUI(); + + m_infoWidget->getRootFolderPathLineEdit()->setFocus(); +} + +void ImportNotebookDialog::setupUI() +{ + setupNotebookInfoWidget(this); + setCentralWidget(m_infoWidget); + + setDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); + setButtonEnabled(QDialogButtonBox::Ok, false); + + setWindowTitle(tr("Import Notebook")); +} + +void ImportNotebookDialog::setupNotebookInfoWidget(QWidget *p_parent) +{ + m_infoWidget = new NotebookInfoWidget(NotebookInfoWidget::Import, p_parent); + connect(m_infoWidget, &NotebookInfoWidget::basicInfoEdited, + this, &ImportNotebookDialog::validateInputs); + connect(m_infoWidget, &NotebookInfoWidget::notebookBackendEdited, + this, &ImportNotebookDialog::validateInputs); +} + +void ImportNotebookDialog::acceptedButtonClicked() +{ + if (importNotebook()) { + accept(); + } +} + +void ImportNotebookDialog::validateInputs() +{ + bool valid = true; + QString msg; + + valid = valid && validateRootFolderInput(msg); + + if (valid) { + valid = createNotebookToImport(msg); + } else { + m_notebookToImport.clear(); + } + + m_infoWidget->setNotebook(m_notebookToImport.data()); + + setInformationText(msg, valid ? ScrollDialog::InformationLevel::Info + : ScrollDialog::InformationLevel::Error); + setButtonEnabled(QDialogButtonBox::Ok, valid); +} + +bool ImportNotebookDialog::validateRootFolderInput(QString &p_msg) +{ + auto rootFolderPath = m_infoWidget->getRootFolderPath(); + if (rootFolderPath.isEmpty() || !QFileInfo::exists(rootFolderPath)) { + Utils::appendMsg(p_msg, tr("The root folder specified does not exist.")); + return false; + } + + auto ¬ebookMgr = VNoteX::getInst().getNotebookMgr(); + + // Check if there already exists one notebook with the same root folder. + { + auto notebook = notebookMgr.findNotebookByRootFolderPath(rootFolderPath); + if (notebook) { + Utils::appendMsg(p_msg, + tr("There already exists a notebook (%1) with the same root folder.").arg(notebook->getName())); + return false; + } + } + + // Check if it is a valid bundle notebook root folder. + { + auto factory = notebookMgr.getBundleNotebookFactory(); + auto backendName = m_infoWidget->getBackend(); + auto backend = notebookMgr.createNotebookBackend(backendName, rootFolderPath); + if (!factory->checkRootFolder(backend)) { + Utils::appendMsg(p_msg, + tr("Not a valid %1 root folder (%2).").arg(factory->getDisplayName(), rootFolderPath)); + return false; + } + + } + + return true; +} + +bool ImportNotebookDialog::createNotebookToImport(QString &p_msg) +{ + auto ¬ebookMgr = VNoteX::getInst().getNotebookMgr(); + auto factory = notebookMgr.getBundleNotebookFactory(); + + auto rootFolderPath = m_infoWidget->getRootFolderPath(); + + auto backendName = m_infoWidget->getBackend(); + auto backend = notebookMgr.createNotebookBackend(backendName, rootFolderPath); + + try { + m_notebookToImport = factory->createNotebook(notebookMgr, + rootFolderPath, + backend); + } catch (Exception &p_e) { + Utils::appendMsg(p_msg, tr("Fail to create notebook from root folder (%1) (%2).").arg(rootFolderPath, p_e.what())); + return false; + } + + Q_ASSERT(m_notebookToImport); + return true; +} + +bool ImportNotebookDialog::importNotebook() +{ + if (!m_notebookToImport) { + QString msg = tr("Fail to import notebook."); + qCritical() << msg; + setInformationText(msg, ScrollDialog::InformationLevel::Error); + return false; + } + + try { + auto ¬ebookMgr = VNoteX::getInst().getNotebookMgr(); + notebookMgr.importNotebook(m_notebookToImport); + } catch (Exception &p_e) { + QString msg = tr("Fail to import notebook (%1).").arg(p_e.what()); + qCritical() << msg; + setInformationText(msg, ScrollDialog::InformationLevel::Error); + return false; + } + + return true; +} diff --git a/src/widgets/dialogs/importnotebookdialog.h b/src/widgets/dialogs/importnotebookdialog.h new file mode 100644 index 00000000..c5e69528 --- /dev/null +++ b/src/widgets/dialogs/importnotebookdialog.h @@ -0,0 +1,43 @@ +#ifndef IMPORTNOTEBOOKDIALOG_H +#define IMPORTNOTEBOOKDIALOG_H + +#include "scrolldialog.h" + +class QGroupBox; +class QComboBox; + +namespace vnotex +{ + class NotebookInfoWidget; + class Notebook; + + class ImportNotebookDialog : public ScrollDialog + { + Q_OBJECT + public: + explicit ImportNotebookDialog(QWidget *p_parent = nullptr); + + protected: + void acceptedButtonClicked() Q_DECL_OVERRIDE; + + private slots: + void validateInputs(); + + private: + void setupUI(); + + void setupNotebookInfoWidget(QWidget *p_parent = nullptr); + + bool validateRootFolderInput(QString &p_msg); + + bool createNotebookToImport(QString &p_msg); + + bool importNotebook(); + + NotebookInfoWidget *m_infoWidget = nullptr; + + QSharedPointer m_notebookToImport; + }; +} // ns vnotex + +#endif // IMPORTNOTEBOOKDIALOG_H diff --git a/src/widgets/dialogs/legacynotebookutils.cpp b/src/widgets/dialogs/legacynotebookutils.cpp new file mode 100644 index 00000000..d3403b0a --- /dev/null +++ b/src/widgets/dialogs/legacynotebookutils.cpp @@ -0,0 +1,98 @@ +#include "legacynotebookutils.h" + +#include +#include + +#include +#include +#include + +using namespace vnotex; + +const QString LegacyNotebookUtils::c_legacyFolderConfigFile = "_vnote.json"; + +static QDateTime stringToDateTime(const QString &p_str) +{ + if (p_str.isEmpty()) { + return QDateTime::currentDateTimeUtc(); + } + return Utils::dateTimeFromStringUniform(p_str); +} + +bool LegacyNotebookUtils::isLegacyNotebookRootFolder(const QString &p_folderPath) +{ + return QFileInfo::exists(getFolderConfigFile(p_folderPath)); +} + +QDateTime LegacyNotebookUtils::getCreatedTimeUtcOfFolder(const QString &p_folderPath) +{ + auto ti = getFolderConfig(p_folderPath).value(QStringLiteral("created_time")).toString(); + return stringToDateTime(ti); +} + +QString LegacyNotebookUtils::getAttachmentFolderOfNotebook(const QString &p_folderPath) +{ + return getFolderConfig(p_folderPath).value(QStringLiteral("attachment_folder")).toString(); +} + +QString LegacyNotebookUtils::getImageFolderOfNotebook(const QString &p_folderPath) +{ + return getFolderConfig(p_folderPath).value(QStringLiteral("image_folder")).toString(); +} + +QString LegacyNotebookUtils::getRecycleBinFolderOfNotebook(const QString &p_folderPath) +{ + return getFolderConfig(p_folderPath).value(QStringLiteral("recycle_bin_folder")).toString(); +} + +QString LegacyNotebookUtils::getFolderConfigFile(const QString &p_folderPath) +{ + return PathUtils::concatenateFilePath(p_folderPath, c_legacyFolderConfigFile); +} + +QJsonObject LegacyNotebookUtils::getFolderConfig(const QString &p_folderPath) +{ + auto configFile = getFolderConfigFile(p_folderPath); + return QJsonDocument::fromJson(FileUtils::readFile(configFile)).object(); +} + +void LegacyNotebookUtils::removeFolderConfigFile(const QString &p_folderPath) +{ + auto configFile = getFolderConfigFile(p_folderPath); + FileUtils::removeFile(configFile); +} + +void LegacyNotebookUtils::forEachFolder(const QJsonObject &p_config, std::function p_func) +{ + auto folderArray = p_config.value(QStringLiteral("sub_directories")).toArray(); + for (const auto &folder : folderArray) { + const auto name = folder.toObject().value(QStringLiteral("name")).toString(); + p_func(name); + } +} + +void LegacyNotebookUtils::forEachFile(const QJsonObject &p_config, std::function p_func) +{ + auto fileArray = p_config.value(QStringLiteral("files")).toArray(); + for (const auto &file : fileArray) { + const auto obj = file.toObject(); + FileInfo info; + info.m_name = obj.value(QStringLiteral("name")).toString(); + { + auto ti = obj.value(QStringLiteral("created_time")).toString(); + info.m_createdTimeUtc = stringToDateTime(ti); + } + { + auto ti = obj.value(QStringLiteral("created_time")).toString(); + info.m_modifiedTimeUtc = stringToDateTime(ti); + } + info.m_attachmentFolder = obj.value(QStringLiteral("attachment_folder")).toString(); + { + auto arr = obj.value(QStringLiteral("tags")).toArray(); + for (const auto &tag : arr) { + info.m_tags << tag.toString(); + } + } + p_func(info); + } +} diff --git a/src/widgets/dialogs/legacynotebookutils.h b/src/widgets/dialogs/legacynotebookutils.h new file mode 100644 index 00000000..501b07c5 --- /dev/null +++ b/src/widgets/dialogs/legacynotebookutils.h @@ -0,0 +1,55 @@ +#ifndef LEGACYNOTEBOOKUTILS_H +#define LEGACYNOTEBOOKUTILS_H + +#include +#include +#include + +#include + +namespace vnotex +{ + class LegacyNotebookUtils + { + public: + struct FileInfo + { + QString m_name; + + QDateTime m_createdTimeUtc = QDateTime::currentDateTimeUtc(); + + QDateTime m_modifiedTimeUtc = QDateTime::currentDateTimeUtc(); + + QString m_attachmentFolder; + + QStringList m_tags; + }; + + LegacyNotebookUtils() = delete; + + static bool isLegacyNotebookRootFolder(const QString &p_folderPath); + + static QDateTime getCreatedTimeUtcOfFolder(const QString &p_folderPath); + + static QString getAttachmentFolderOfNotebook(const QString &p_folderPath); + + static QString getImageFolderOfNotebook(const QString &p_folderPath); + + static QString getRecycleBinFolderOfNotebook(const QString &p_folderPath); + + static QJsonObject getFolderConfig(const QString &p_folderPath); + + static void removeFolderConfigFile(const QString &p_folderPath); + + static void forEachFolder(const QJsonObject &p_config, std::function p_func); + + static void forEachFile(const QJsonObject &p_config, std::function p_func); + + private: + static QString getFolderConfigFile(const QString &p_folderPath); + + static const QString c_legacyFolderConfigFile; + }; +} + +#endif // LEGACYNOTEBOOKUTILS_H diff --git a/src/widgets/dialogs/linkinsertdialog.cpp b/src/widgets/dialogs/linkinsertdialog.cpp new file mode 100644 index 00000000..d2309a21 --- /dev/null +++ b/src/widgets/dialogs/linkinsertdialog.cpp @@ -0,0 +1,111 @@ +#include "linkinsertdialog.h" + +#include +#include +#include + +#include +#include + +using namespace vnotex; + +LinkInsertDialog::LinkInsertDialog(const QString &p_title, + const QString &p_linkText, + const QString &p_linkUrl, + bool p_linkTextOptional, + QWidget *p_parent) + : ScrollDialog(p_parent), + m_linkTextOptional(p_linkTextOptional) +{ + setupUI(p_title, p_linkText, p_linkUrl); + + checkInput(); +} + +void LinkInsertDialog::setupUI(const QString &p_title, + const QString &p_linkText, + const QString &p_linkUrl) +{ + auto mainWidget = new QWidget(this); + setCentralWidget(mainWidget); + + auto mainLayout = new QFormLayout(mainWidget); + + m_linkTextEdit = WidgetsFactory::createLineEdit(p_linkText, mainWidget); + mainLayout->addRow(tr("&Text:"), m_linkTextEdit); + connect(m_linkTextEdit, &QLineEdit::textChanged, + this, [this]() { + checkInput(false); + }); + + m_linkUrlEdit = WidgetsFactory::createLineEdit(p_linkUrl, mainWidget); + mainLayout->addRow(tr("&Url:"), m_linkUrlEdit); + connect(m_linkUrlEdit, &QLineEdit::textChanged, + this, [this]() { + checkInput(true); + }); + + setDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); + + setWindowTitle(p_title); +} + +void LinkInsertDialog::checkInput(bool p_autoCompleteText) +{ + bool ok = true; + + const auto linkUrl = m_linkUrlEdit->text(); + if (linkUrl.isEmpty()) { + ok = false; + } else { + const auto linkText = m_linkTextEdit->text(); + if (linkText.isEmpty()) { + // Try to guess the text from url. + if (p_autoCompleteText) { + int idx = linkUrl.lastIndexOf(QRegularExpression(QStringLiteral("[/\\\\]"))); + if (idx != -1 && idx != linkUrl.size() - 1) { + m_linkTextEdit->setText(linkUrl.mid(idx + 1)); + } else { + ok = m_linkTextOptional; + } + } else { + ok = m_linkTextOptional; + } + } + } + + setButtonEnabled(QDialogButtonBox::Ok, ok); +} + +QString LinkInsertDialog::getLinkText() const +{ + return m_linkTextEdit->text(); +} + +QString LinkInsertDialog::getLinkUrl() const +{ + // For local file, translate to URL without spaces. + auto text = m_linkUrlEdit->text(); + if (text.isEmpty()) { + return text; + } + + auto url = QUrl::fromUserInput(text); + if (url.isLocalFile()) { + return url.toString(QUrl::EncodeSpaces); + } + return text; +} + +void LinkInsertDialog::showEvent(QShowEvent *p_event) +{ + ScrollDialog::showEvent(p_event); + + if (!m_linkUrlEdit->text().isEmpty() || m_linkTextEdit->text().isEmpty()) { + m_linkTextEdit->setFocus(); + m_linkTextEdit->selectAll(); + } else { + m_linkUrlEdit->setFocus(); + m_linkUrlEdit->selectAll(); + } +} diff --git a/src/widgets/dialogs/linkinsertdialog.h b/src/widgets/dialogs/linkinsertdialog.h new file mode 100644 index 00000000..6bb54ac1 --- /dev/null +++ b/src/widgets/dialogs/linkinsertdialog.h @@ -0,0 +1,43 @@ +#ifndef LINKINSERTDIALOG_H +#define LINKINSERTDIALOG_H + +#include "scrolldialog.h" + +class QLineEdit; + +namespace vnotex +{ + class LinkInsertDialog : public ScrollDialog + { + Q_OBJECT + public: + LinkInsertDialog(const QString &p_title, + const QString &p_linkText, + const QString &p_linkUrl, + bool p_linkTextOptional, + QWidget *p_parent = nullptr); + + QString getLinkText() const; + + QString getLinkUrl() const; + + protected: + void showEvent(QShowEvent *p_event) Q_DECL_OVERRIDE; + + private slots: + void checkInput(bool p_autoCompleteText = true); + + private: + void setupUI(const QString &p_title, + const QString &p_linkText, + const QString &p_linkUrl); + + bool m_linkTextOptional = false; + + QLineEdit *m_linkTextEdit = nullptr; + + QLineEdit *m_linkUrlEdit = nullptr; + }; +} + +#endif // LINKINSERTDIALOG_H diff --git a/src/widgets/dialogs/managenotebooksdialog.cpp b/src/widgets/dialogs/managenotebooksdialog.cpp new file mode 100644 index 00000000..4a8d915e --- /dev/null +++ b/src/widgets/dialogs/managenotebooksdialog.cpp @@ -0,0 +1,280 @@ +#include "managenotebooksdialog.h" + +#include +#include +#include +#include +#include +#include +#include + +#include "notebook/notebook.h" +#include "notebookinfowidget.h" +#include "vnotex.h" +#include "notebookmgr.h" +#include "../messageboxhelper.h" +#include +#include +#include "../widgetsfactory.h" +#include "exception.h" +#include "../propertydefs.h" +#include "../listwidget.h" + +using namespace vnotex; + +ManageNotebooksDialog::ManageNotebooksDialog(const Notebook *p_notebook, QWidget *p_parent) + : Dialog(p_parent) +{ + setupUI(); + + loadNotebooks(p_notebook); +} + +void ManageNotebooksDialog::setupUI() +{ + auto widget = new QWidget(this); + setCentralWidget(widget); + + auto mainLayout = new QHBoxLayout(widget); + + setupNotebookList(widget); + mainLayout->addWidget(m_notebookList); + mainLayout->setStretchFactor(m_notebookList, 1); + + { + m_infoScrollArea = new QScrollArea(widget); + m_infoScrollArea->setWidgetResizable(true); + mainLayout->addWidget(m_infoScrollArea); + mainLayout->setStretchFactor(m_infoScrollArea, 3); + + auto infoWidget = new QWidget(widget); + m_infoScrollArea->setWidget(infoWidget); + + auto infoLayout = new QVBoxLayout(infoWidget); + + setupNotebookInfoWidget(infoWidget); + infoLayout->addWidget(m_notebookInfoWidget); + + auto btnLayout = new QHBoxLayout(); + infoLayout->addLayout(btnLayout); + + m_closeNotebookBtn = new QPushButton(tr("Close"), infoWidget); + btnLayout->addStretch(); + btnLayout->addWidget(m_closeNotebookBtn); + connect(m_closeNotebookBtn, &QPushButton::clicked, + this, [this]() { + if (checkUnsavedChanges()) { + return; + } + closeNotebook(m_notebookInfoWidget->getNotebook()); + }); + + m_deleteNotebookBtn = new QPushButton(tr("Delete"), infoWidget); + WidgetUtils::setPropertyDynamically(m_deleteNotebookBtn, PropertyDefs::s_dangerousButton, true); + btnLayout->addWidget(m_deleteNotebookBtn); + connect(m_deleteNotebookBtn, &QPushButton::clicked, + this, [this]() { + if (checkUnsavedChanges()) { + return; + } + removeNotebook(m_notebookInfoWidget->getNotebook()); + }); + } + + setDialogButtonBox(QDialogButtonBox::Ok + | QDialogButtonBox::Apply + | QDialogButtonBox::Reset + | QDialogButtonBox::Cancel); + + setWindowTitle(tr("Manage Notebooks")); +} + +Notebook *ManageNotebooksDialog::getNotebookFromItem(const QListWidgetItem *p_item) const +{ + Notebook *notebook = nullptr; + if (p_item) { + auto id = static_cast(p_item->data(Qt::UserRole).toULongLong()); + notebook = VNoteX::getInst().getNotebookMgr().findNotebookById(id).data(); + } + + return notebook; +} + +void ManageNotebooksDialog::setupNotebookList(QWidget *p_parent) +{ + m_notebookList = new ListWidget(p_parent); + connect(m_notebookList, &QListWidget::currentItemChanged, + this, [this](QListWidgetItem *p_item, QListWidgetItem *p_previous) { + auto notebook = getNotebookFromItem(p_item); + if (m_changesUnsaved) { + // Have unsaved changes. + if (m_notebook != notebook) { + checkUnsavedChanges(); + + QTimer::singleShot(50, this, [this, p_previous]() { + m_notebookList->setCurrentItem(p_previous); + }); + } + + return; + } + + m_notebook = notebook; + selectNotebook(m_notebook); + }); +} + +void ManageNotebooksDialog::setupNotebookInfoWidget(QWidget *p_parent) +{ + m_notebookInfoWidget = new NotebookInfoWidget(NotebookInfoWidget::Edit, p_parent); + connect(m_notebookInfoWidget, &NotebookInfoWidget::basicInfoEdited, + this, [this]() { + bool unsaved = false; + if (m_notebook) { + if (m_notebook->getName() != m_notebookInfoWidget->getName() + || m_notebook->getDescription() != m_notebookInfoWidget->getDescription()) { + unsaved = true; + } + } + + setChangesUnsaved(unsaved); + }); +} + +void ManageNotebooksDialog::loadNotebooks(const Notebook *p_notebook) +{ + setChangesUnsaved(false); + + m_notebookList->clear(); + + bool hasCurrentItem = false; + auto ¬ebookMgr = VNoteX::getInst().getNotebookMgr(); + const auto ¬ebooks = notebookMgr.getNotebooks(); + for (auto &nb : notebooks) { + auto item = new QListWidgetItem(nb->getName()); + item->setData(Qt::UserRole, nb->getId()); + item->setToolTip(nb->getName()); + m_notebookList->addItem(item); + + if (nb.data() == p_notebook) { + hasCurrentItem = true; + m_notebookList->setCurrentItem(item, QItemSelectionModel::ClearAndSelect); + } + } + + if (!hasCurrentItem && !notebooks.isEmpty()) { + m_notebookList->setCurrentRow(0); + } +} + +void ManageNotebooksDialog::selectNotebook(Notebook *p_notebook) +{ + m_notebookInfoWidget->setNotebook(p_notebook); + setChangesUnsaved(false); + + WidgetUtils::resizeToHideScrollBarLater(m_infoScrollArea, false, true); +} + +void ManageNotebooksDialog::acceptedButtonClicked() +{ + if (saveChangesToNotebook()) { + accept(); + } +} + +void ManageNotebooksDialog::resetButtonClicked() +{ + m_notebookInfoWidget->clear(); + selectNotebook(m_notebook); +} + +void ManageNotebooksDialog::appliedButtonClicked() +{ + Q_ASSERT(m_changesUnsaved); + if (saveChangesToNotebook()) { + loadNotebooks(m_notebook); + } +} + +void ManageNotebooksDialog::setChangesUnsaved(bool p_unsaved) +{ + m_changesUnsaved = p_unsaved; + setButtonEnabled(QDialogButtonBox::Apply, m_changesUnsaved); + setButtonEnabled(QDialogButtonBox::Reset, m_changesUnsaved); +} + +bool ManageNotebooksDialog::saveChangesToNotebook() +{ + if (!m_changesUnsaved || !m_notebook) { + return true; + } + + m_notebook->updateName(m_notebookInfoWidget->getName()); + m_notebook->updateDescription(m_notebookInfoWidget->getDescription()); + return true; +} + +void ManageNotebooksDialog::closeNotebook(const Notebook *p_notebook) +{ + Q_ASSERT(p_notebook); + int ret = MessageBoxHelper::questionOkCancel(MessageBoxHelper::Question, + tr("Close notebook %1?") + .arg(p_notebook->getName()), + tr("The notebook could be imported again later."), + tr("Notebook location: %1").arg(p_notebook->getRootFolderAbsolutePath()), + this); + if (ret != QMessageBox::Ok) { + return; + } + + try + { + VNoteX::getInst().getNotebookMgr().closeNotebook(p_notebook->getId()); + } catch (Exception &p_e) { + MessageBoxHelper::notify(MessageBoxHelper::Warning, + tr("Fail to close notebook (%1)").arg(p_e.what()), + this); + loadNotebooks(nullptr); + return; + } + + loadNotebooks(nullptr); +} + +void ManageNotebooksDialog::removeNotebook(const Notebook *p_notebook) +{ + Q_ASSERT(p_notebook); + int ret = MessageBoxHelper::questionOkCancel(MessageBoxHelper::Warning, + tr("Delete notebook %1 from disk?").arg(p_notebook->getName()), + tr("It will delete all files belonging to this notebook from disk. " + "It is dangerous since it will bypass system's recycle bin!"), + tr("Notebook location: %1").arg(p_notebook->getRootFolderAbsolutePath()), + this); + if (ret != QMessageBox::Ok) { + return; + } + + try { + VNoteX::getInst().getNotebookMgr().removeNotebook(p_notebook->getId()); + } catch (Exception &p_e) { + MessageBoxHelper::notify(MessageBoxHelper::Warning, + tr("Fail to delete notebook (%1)").arg(p_e.what()), + this); + loadNotebooks(nullptr); + return; + } + + loadNotebooks(nullptr); +} + +bool ManageNotebooksDialog::checkUnsavedChanges() +{ + if (m_changesUnsaved) { + MessageBoxHelper::notify(MessageBoxHelper::Warning, + tr("There are unsaved changes to current notebook."), + this); + return true; + } + + return false; +} diff --git a/src/widgets/dialogs/managenotebooksdialog.h b/src/widgets/dialogs/managenotebooksdialog.h new file mode 100644 index 00000000..1aed63f4 --- /dev/null +++ b/src/widgets/dialogs/managenotebooksdialog.h @@ -0,0 +1,70 @@ +#ifndef MANAGENOTEBOOKSDIALOG_H +#define MANAGENOTEBOOKSDIALOG_H + +#include "dialog.h" + +class QListWidget; +class QListWidgetItem; +class QMenu; +class QPushButton; +class QScrollArea; + +namespace vnotex +{ + class Notebook; + class NotebookInfoWidget; + + class ManageNotebooksDialog : public Dialog + { + Q_OBJECT + public: + ManageNotebooksDialog(const Notebook *p_notebook, QWidget *p_parent = nullptr); + + protected: + void acceptedButtonClicked() Q_DECL_OVERRIDE; + + void resetButtonClicked() Q_DECL_OVERRIDE; + + void appliedButtonClicked() Q_DECL_OVERRIDE; + + private slots: + void selectNotebook(Notebook *p_notebook); + + private: + void setupUI(); + + void setupNotebookList(QWidget *p_parent = nullptr); + + void setupNotebookInfoWidget(QWidget *p_parent = nullptr); + + void loadNotebooks(const Notebook *p_notebook); + + void setChangesUnsaved(bool p_unsaved); + + bool saveChangesToNotebook(); + + Notebook *getNotebookFromItem(const QListWidgetItem *p_item) const; + + void closeNotebook(const Notebook *p_notebook); + + void removeNotebook(const Notebook *p_notebook); + + bool checkUnsavedChanges(); + + QListWidget *m_notebookList = nullptr; + + NotebookInfoWidget *m_notebookInfoWidget = nullptr; + + bool m_changesUnsaved = false; + + Notebook *m_notebook = nullptr; + + QScrollArea *m_infoScrollArea = nullptr; + + QPushButton *m_closeNotebookBtn = nullptr; + + QPushButton *m_deleteNotebookBtn = nullptr; + }; +} // ns vnotex + +#endif // MANAGENOTEBOOKSDIALOG_H diff --git a/src/widgets/dialogs/newfolderdialog.cpp b/src/widgets/dialogs/newfolderdialog.cpp new file mode 100644 index 00000000..492ea83a --- /dev/null +++ b/src/widgets/dialogs/newfolderdialog.cpp @@ -0,0 +1,101 @@ +#include "newfolderdialog.h" + +#include + +#include "notebook/notebook.h" +#include "notebook/node.h" +#include "../widgetsfactory.h" +#include +#include "exception.h" +#include "nodeinfowidget.h" + +using namespace vnotex; + +NewFolderDialog::NewFolderDialog(Node *p_node, QWidget *p_parent) + : ScrollDialog(p_parent) +{ + Q_ASSERT(p_node && p_node->isLoaded()); + setupUI(p_node); + + m_infoWidget->getNameLineEdit()->setFocus(); +} + +void NewFolderDialog::setupUI(const Node *p_node) +{ + setupNodeInfoWidget(p_node, this); + setCentralWidget(m_infoWidget); + + setDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); + setButtonEnabled(QDialogButtonBox::Ok, false); + + setWindowTitle(tr("New Folder")); +} + +void NewFolderDialog::setupNodeInfoWidget(const Node *p_node, QWidget *p_parent) +{ + m_infoWidget = new NodeInfoWidget(p_node, Node::Type::Folder, p_parent); + connect(m_infoWidget, &NodeInfoWidget::inputEdited, + this, &NewFolderDialog::validateInputs); +} + +void NewFolderDialog::validateInputs() +{ + bool valid = true; + QString msg; + + valid = valid && validateNameInput(msg); + setInformationText(msg, valid ? ScrollDialog::InformationLevel::Info + : ScrollDialog::InformationLevel::Error); + setButtonEnabled(QDialogButtonBox::Ok, valid); +} + +bool NewFolderDialog::validateNameInput(QString &p_msg) +{ + p_msg.clear(); + + auto name = m_infoWidget->getName(); + if (name.isEmpty()) { + p_msg = tr("Please specify a name for the folder."); + return false; + } + + if (m_infoWidget->getParentNode()->hasChild(name, false)) { + p_msg = tr("Name conflicts with existing folder."); + return false; + } + + return true; +} + +void NewFolderDialog::acceptedButtonClicked() +{ + if (newFolder()) { + accept(); + } +} + +bool NewFolderDialog::newFolder() +{ + m_newNode.clear(); + + Notebook *notebook = const_cast(m_infoWidget->getNotebook()); + Node *parentNode = const_cast(m_infoWidget->getParentNode()); + try { + m_newNode = notebook->newNode(parentNode, Node::Type::Folder, m_infoWidget->getName()); + } catch (Exception &p_e) { + QString msg = tr("Fail to create folder under %1 in %2 (%3).").arg(parentNode->getName(), + notebook->getName(), + p_e.what()); + qCritical() << msg; + setInformationText(msg, ScrollDialog::InformationLevel::Error); + return false; + } + + emit notebook->nodeUpdated(parentNode); + return true; +} + +const QSharedPointer &NewFolderDialog::getNewNode() const +{ + return m_newNode; +} diff --git a/src/widgets/dialogs/newfolderdialog.h b/src/widgets/dialogs/newfolderdialog.h new file mode 100644 index 00000000..00ff00ed --- /dev/null +++ b/src/widgets/dialogs/newfolderdialog.h @@ -0,0 +1,41 @@ +#ifndef NEWFOLDERDIALOG_H +#define NEWFOLDERDIALOG_H + +#include "scrolldialog.h" + +namespace vnotex +{ + class Node; + class NodeInfoWidget; + + class NewFolderDialog : public ScrollDialog + { + Q_OBJECT + public: + // New a folder under @p_node. + NewFolderDialog(Node *p_node, QWidget *p_parent = nullptr); + + const QSharedPointer &getNewNode() const; + + protected: + void acceptedButtonClicked() Q_DECL_OVERRIDE; + + private slots: + void validateInputs(); + + private: + void setupUI(const Node *p_node); + + void setupNodeInfoWidget(const Node *p_node, QWidget *p_parent); + + bool validateNameInput(QString &p_msg); + + bool newFolder(); + + NodeInfoWidget *m_infoWidget = nullptr; + + QSharedPointer m_newNode; + }; +} // ns vnotex + +#endif // NEWFOLDERDIALOG_H diff --git a/src/widgets/dialogs/newnotebookdialog.cpp b/src/widgets/dialogs/newnotebookdialog.cpp new file mode 100644 index 00000000..9bc35ca2 --- /dev/null +++ b/src/widgets/dialogs/newnotebookdialog.cpp @@ -0,0 +1,155 @@ +#include "newnotebookdialog.h" + +#include + +#include "../widgetsfactory.h" +#include "vnotex.h" +#include "notebookmgr.h" +#include "notebook/inotebookfactory.h" +#include "notebook/notebookparameters.h" +#include "configmgr.h" +#include +#include +#include "exception.h" +#include "notebookinfowidget.h" + +using namespace vnotex; + +NewNotebookDialog::NewNotebookDialog(QWidget *p_parent) + : ScrollDialog(p_parent) +{ + setupUI(); + + m_infoWidget->getNameLineEdit()->setFocus(); +} + +void NewNotebookDialog::setupUI() +{ + setupNotebookInfoWidget(this); + setCentralWidget(m_infoWidget); + + setDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); + setButtonEnabled(QDialogButtonBox::Ok, false); + + setWindowTitle(tr("New Notebook")); +} + +void NewNotebookDialog::setupNotebookInfoWidget(QWidget *p_parent) +{ + m_infoWidget = new NotebookInfoWidget(NotebookInfoWidget::Create, p_parent); + connect(m_infoWidget, &NotebookInfoWidget::rootFolderEdited, + this, &NewNotebookDialog::handleRootFolderPathChanged); + connect(m_infoWidget, &NotebookInfoWidget::basicInfoEdited, + this, &NewNotebookDialog::validateInputs); + + { + auto whatsThis = tr("
    Both absolute and relative paths are supported. ~ and environment variable are not supported now."); + auto rootFolderEdit = m_infoWidget->getRootFolderPathLineEdit(); + rootFolderEdit->setWhatsThis(rootFolderEdit->whatsThis() + whatsThis); + } +} + +void NewNotebookDialog::validateInputs() +{ + bool valid = true; + QString msg; + + valid = valid && validateNameInput(msg); + valid = valid && validateRootFolderInput(msg); + + setInformationText(msg, valid ? ScrollDialog::InformationLevel::Info + : ScrollDialog::InformationLevel::Error); + setButtonEnabled(QDialogButtonBox::Ok, valid); +} + +bool NewNotebookDialog::validateNameInput(QString &p_msg) +{ + if (m_infoWidget->getName().isEmpty()) { + Utils::appendMsg(p_msg, tr("Please specify a name for the notebook.")); + return false; + } + + return true; +} + +bool NewNotebookDialog::validateRootFolderInput(QString &p_msg) +{ + auto rootFolderPath = m_infoWidget->getRootFolderPath(); + if (!PathUtils::isLegalPath(rootFolderPath)) { + Utils::appendMsg(p_msg, tr("Please specify a valid root folder for the notebook.")); + return false; + } + + { + QFileInfo finfo(rootFolderPath); + if (finfo.exists()) { + if (finfo.isDir()) { + if (!QDir(rootFolderPath).isEmpty()) { + Utils::appendMsg(p_msg, + tr("Root folder of the notebook must be empty. " + "If you want to import existing data, please try other operations.")); + return false; + } + } else { + Utils::appendMsg(p_msg, tr("Root folder should be a directory.")); + return false; + } + } + } + + // Check if there already exists one notebook with the same root folder. + { + auto ¬ebookMgr = VNoteX::getInst().getNotebookMgr(); + auto notebook = notebookMgr.findNotebookByRootFolderPath(rootFolderPath); + if (notebook) { + Utils::appendMsg(p_msg, + tr("There already exists a notebook (%1) with the same root folder.").arg(notebook->getName())); + return false; + } + } + + return true; +} + +void NewNotebookDialog::acceptedButtonClicked() +{ + if (newNotebook()) { + accept(); + } +} + +bool NewNotebookDialog::newNotebook() +{ + auto ¬ebookMgr = VNoteX::getInst().getNotebookMgr(); + auto paras = NotebookParameters::createNotebookParameters(notebookMgr, + m_infoWidget->getType(), + m_infoWidget->getName(), + m_infoWidget->getDescription(), + m_infoWidget->getRootFolderPath(), + m_infoWidget->getIcon(), + Notebook::c_defaultImageFolder, + Notebook::c_defaultAttachmentFolder, + QDateTime::currentDateTimeUtc(), + m_infoWidget->getBackend(), + m_infoWidget->getVersionController(), + m_infoWidget->getConfigMgr()); + try { + notebookMgr.newNotebook(paras); + } catch (Exception &p_e) { + QString msg = tr("Fail to create notebook in %1 (%2).") + .arg(m_infoWidget->getRootFolderPath(), p_e.what()); + qCritical() << msg; + setInformationText(msg, ScrollDialog::InformationLevel::Error); + return false; + } + + return true; +} + +void NewNotebookDialog::handleRootFolderPathChanged() +{ + auto nameEdit = m_infoWidget->getNameLineEdit(); + if (nameEdit->text().isEmpty()) { + nameEdit->setText(PathUtils::dirName(m_infoWidget->getRootFolderPath())); + } +} diff --git a/src/widgets/dialogs/newnotebookdialog.h b/src/widgets/dialogs/newnotebookdialog.h new file mode 100644 index 00000000..02cc6d9f --- /dev/null +++ b/src/widgets/dialogs/newnotebookdialog.h @@ -0,0 +1,41 @@ +#ifndef NEWNOTEBOOKDIALOG_H +#define NEWNOTEBOOKDIALOG_H + +#include "scrolldialog.h" + +namespace vnotex +{ + class NotebookInfoWidget; + + class NewNotebookDialog : public ScrollDialog + { + Q_OBJECT + public: + explicit NewNotebookDialog(QWidget *p_parent = nullptr); + + protected: + void acceptedButtonClicked() Q_DECL_OVERRIDE; + + virtual bool validateRootFolderInput(QString &p_msg); + + virtual void handleRootFolderPathChanged(); + + NotebookInfoWidget *m_infoWidget = nullptr; + + private slots: + void validateInputs(); + + private: + void setupUI(); + + void setupNotebookInfoWidget(QWidget *p_parent = nullptr); + + bool validateNameInput(QString &p_msg); + + // Create a new notebook. + // Return true if succeeded. + bool newNotebook(); + }; +} // ns vnotex + +#endif // NEWNOTEBOOKDIALOG_H diff --git a/src/widgets/dialogs/newnotebookfromfolderdialog.cpp b/src/widgets/dialogs/newnotebookfromfolderdialog.cpp new file mode 100644 index 00000000..620f57ac --- /dev/null +++ b/src/widgets/dialogs/newnotebookfromfolderdialog.cpp @@ -0,0 +1,166 @@ +#include "newnotebookfromfolderdialog.h" + +#include +#include +#include + +#include "../widgetsfactory.h" +#include "folderfilesfilterwidget.h" +#include "notebookinfowidget.h" +#include "vnotex.h" +#include "notebookmgr.h" +#include +#include +#include +#include +#include +#include "exception.h" +#include "importfolderutils.h" + +using namespace vnotex; + +NewNotebookFromFolderDialog::NewNotebookFromFolderDialog(QWidget *p_parent) + : ScrollDialog(p_parent) +{ + setupUI(); + + m_filterWidget->getFolderPathEdit()->setFocus(); +} + +void NewNotebookFromFolderDialog::setupUI() +{ + auto widget = new QWidget(this); + auto mainLayout = new QVBoxLayout(widget); + setCentralWidget(widget); + + { + auto box = new QGroupBox(tr("Source Folder"), widget); + auto layout = new QVBoxLayout(box); + setupFolderFilesFilterWidget(widget); + layout->addWidget(m_filterWidget); + + mainLayout->addWidget(box); + } + + setupNotebookInfoWidget(widget); + mainLayout->addWidget(m_infoWidget); + + setDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); + setButtonEnabled(QDialogButtonBox::Ok, false); + + setWindowTitle(tr("New Notebook From Folder")); +} + +void NewNotebookFromFolderDialog::setupFolderFilesFilterWidget(QWidget *p_parent) +{ + m_filterWidget = new FolderFilesFilterWidget(p_parent); + connect(m_filterWidget, &FolderFilesFilterWidget::filesChanged, + this, [this]() { + m_infoWidget->setRootFolderPath(m_filterWidget->getFolderPath()); + validateInputs(); + }); +} + +void NewNotebookFromFolderDialog::setupNotebookInfoWidget(QWidget *p_parent) +{ + m_infoWidget = new NotebookInfoWidget(NotebookInfoWidget::CreateFromFolder, p_parent); + connect(m_infoWidget, &NotebookInfoWidget::basicInfoEdited, + this, &NewNotebookFromFolderDialog::validateInputs); +} + +void NewNotebookFromFolderDialog::validateInputs() +{ + bool valid = true; + QString msg; + + valid = valid && validateNameInput(msg); + valid = valid && validateRootFolderInput(msg); + + setInformationText(msg, valid ? ScrollDialog::InformationLevel::Info + : ScrollDialog::InformationLevel::Error); + setButtonEnabled(QDialogButtonBox::Ok, valid); +} + +bool NewNotebookFromFolderDialog::validateNameInput(QString &p_msg) +{ + p_msg.clear(); + + if (m_infoWidget->getName().isEmpty()) { + Utils::appendMsg(p_msg, tr("Please specify a name for the notebook.")); + return false; + } + + return true; +} + +bool NewNotebookFromFolderDialog::validateRootFolderInput(QString &p_msg) +{ + auto rootFolderPath = m_infoWidget->getRootFolderPath(); + if (!QFileInfo::exists(rootFolderPath) || !PathUtils::isLegalPath(rootFolderPath)) { + Utils::appendMsg(p_msg, tr("Please specify a valid folder for the new notebook.")); + return false; + } + + // Check if there already exists one notebook with the same root folder. + { + auto ¬ebookMgr = VNoteX::getInst().getNotebookMgr(); + auto notebook = notebookMgr.findNotebookByRootFolderPath(rootFolderPath); + if (notebook) { + Utils::appendMsg(p_msg, + tr("There already exists a notebook (%1) with the same root folder.").arg(notebook->getName())); + return false; + } + } + + return true; +} + +void NewNotebookFromFolderDialog::acceptedButtonClicked() +{ + if (isCompleted() || newNotebookFromFolder()) { + accept(); + } +} + +bool NewNotebookFromFolderDialog::newNotebookFromFolder() +{ + const auto rootFolderPath = m_infoWidget->getRootFolderPath(); + auto ¬ebookMgr = VNoteX::getInst().getNotebookMgr(); + auto paras = NotebookParameters::createNotebookParameters(notebookMgr, + m_infoWidget->getType(), + m_infoWidget->getName(), + m_infoWidget->getDescription(), + rootFolderPath, + m_infoWidget->getIcon(), + Notebook::c_defaultImageFolder, + Notebook::c_defaultAttachmentFolder, + QDateTime::currentDateTimeUtc(), + m_infoWidget->getBackend(), + m_infoWidget->getVersionController(), + m_infoWidget->getConfigMgr()); + paras->m_ensureEmptyRootFolder = false; + QSharedPointer nb; + try { + nb = notebookMgr.newNotebook(paras); + } catch (Exception &p_e) { + QString msg = tr("Failed to create notebook in %1 (%2).").arg(rootFolderPath, p_e.what()); + qCritical() << msg; + setInformationText(msg, ScrollDialog::InformationLevel::Error); + return false; + } + + QString errMsg; + auto rootNode = nb->getRootNode(); + ImportFolderUtils::importFolderContents(nb.data(), rootNode.data(), m_filterWidget->getSuffixes(), errMsg); + + emit nb->nodeUpdated(rootNode.data()); + + if (!errMsg.isEmpty()) { + qWarning() << errMsg; + setInformationText(errMsg, ScrollDialog::InformationLevel::Error); + completeButStay(); + return false; + } + + return true; +} diff --git a/src/widgets/dialogs/newnotebookfromfolderdialog.h b/src/widgets/dialogs/newnotebookfromfolderdialog.h new file mode 100644 index 00000000..8115380c --- /dev/null +++ b/src/widgets/dialogs/newnotebookfromfolderdialog.h @@ -0,0 +1,46 @@ +#ifndef NEWNOTEBOOKFROMFOLDERDIALOG_H +#define NEWNOTEBOOKFROMFOLDERDIALOG_H + +#include "scrolldialog.h" + +namespace vnotex +{ + class NotebookInfoWidget; + class FolderFilesFilterWidget; + class Node; + class Notebook; + + class NewNotebookFromFolderDialog : public ScrollDialog + { + Q_OBJECT + public: + explicit NewNotebookFromFolderDialog(QWidget *p_parent = nullptr); + + protected: + void acceptedButtonClicked() Q_DECL_OVERRIDE; + + private slots: + void validateInputs(); + + private: + void setupUI(); + + void setupFolderFilesFilterWidget(QWidget *p_parent = nullptr); + + void setupNotebookInfoWidget(QWidget *p_parent = nullptr); + + bool validateNameInput(QString &p_msg); + + bool validateRootFolderInput(QString &p_msg); + + // Create a new notebook. + // Return true if succeeded. + bool newNotebookFromFolder(); + + NotebookInfoWidget *m_infoWidget = nullptr; + + FolderFilesFilterWidget *m_filterWidget = nullptr; + }; +} + +#endif // NEWNOTEBOOKFROMFOLDERDIALOG_H diff --git a/src/widgets/dialogs/newnotedialog.cpp b/src/widgets/dialogs/newnotedialog.cpp new file mode 100644 index 00000000..ebdf72dd --- /dev/null +++ b/src/widgets/dialogs/newnotedialog.cpp @@ -0,0 +1,118 @@ +#include "newnotedialog.h" + +#include + +#include "notebook/notebook.h" +#include "notebook/node.h" +#include "../widgetsfactory.h" +#include +#include "exception.h" +#include "nodeinfowidget.h" + +using namespace vnotex; + +const QString NewNoteDialog::c_defaultNoteName = "new_note.md"; + +NewNoteDialog::NewNoteDialog(Node *p_node, QWidget *p_parent) + : ScrollDialog(p_parent) +{ + Q_ASSERT(p_node && p_node->isLoaded()); + setupUI(p_node); + + initDefaultValues(); + + m_infoWidget->getNameLineEdit()->setFocus(); +} + +void NewNoteDialog::setupUI(const Node *p_node) +{ + setupNodeInfoWidget(p_node, this); + setCentralWidget(m_infoWidget); + + setDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); + setButtonEnabled(QDialogButtonBox::Ok, false); + + setWindowTitle(tr("New Note")); +} + +void NewNoteDialog::setupNodeInfoWidget(const Node *p_node, QWidget *p_parent) +{ + m_infoWidget = new NodeInfoWidget(p_node, Node::Type::File, p_parent); + connect(m_infoWidget, &NodeInfoWidget::inputEdited, + this, &NewNoteDialog::validateInputs); +} + +void NewNoteDialog::validateInputs() +{ + bool valid = true; + QString msg; + + valid = valid && validateNameInput(msg); + setInformationText(msg, valid ? ScrollDialog::InformationLevel::Info + : ScrollDialog::InformationLevel::Error); + setButtonEnabled(QDialogButtonBox::Ok, valid); +} + +bool NewNoteDialog::validateNameInput(QString &p_msg) +{ + p_msg.clear(); + + auto name = m_infoWidget->getName(); + if (name.isEmpty()) { + p_msg = tr("Please specify a name for the note."); + return false; + } + + if (m_infoWidget->getParentNode()->hasChild(name, false)) { + p_msg = tr("Name conflicts with existing note."); + return false; + } + + return true; +} + +void NewNoteDialog::acceptedButtonClicked() +{ + if (newNote()) { + accept(); + } +} + +bool NewNoteDialog::newNote() +{ + m_newNode.clear(); + + Notebook *notebook = const_cast(m_infoWidget->getNotebook()); + Node *parentNode = const_cast(m_infoWidget->getParentNode()); + try { + m_newNode = notebook->newNode(parentNode, Node::Type::File, m_infoWidget->getName()); + } catch (Exception &p_e) { + QString msg = tr("Fail to create note under %1 in %2 (%3).").arg(parentNode->getName(), + notebook->getName(), + p_e.what()); + qCritical() << msg; + setInformationText(msg, ScrollDialog::InformationLevel::Error); + return false; + } + + emit notebook->nodeUpdated(m_newNode.data()); + + return true; +} + +const QSharedPointer &NewNoteDialog::getNewNode() const +{ + return m_newNode; +} + +void NewNoteDialog::initDefaultValues() +{ + { + auto lineEdit = m_infoWidget->getNameLineEdit(); + lineEdit->setText(c_defaultNoteName); + int dotIndex = c_defaultNoteName.lastIndexOf('.'); + lineEdit->setSelection(0, (dotIndex == -1) ? c_defaultNoteName.size() : dotIndex); + + validateInputs(); + } +} diff --git a/src/widgets/dialogs/newnotedialog.h b/src/widgets/dialogs/newnotedialog.h new file mode 100644 index 00000000..54cdbb26 --- /dev/null +++ b/src/widgets/dialogs/newnotedialog.h @@ -0,0 +1,46 @@ +#ifndef NEWNOTEDIALOG_H +#define NEWNOTEDIALOG_H + +#include "scrolldialog.h" + +namespace vnotex +{ + class Notebook; + class Node; + class NodeInfoWidget; + + class NewNoteDialog : public ScrollDialog + { + Q_OBJECT + public: + // New a note under @p_node. + NewNoteDialog(Node *p_node, QWidget *p_parent = nullptr); + + const QSharedPointer &getNewNode() const; + + protected: + void acceptedButtonClicked() Q_DECL_OVERRIDE; + + private slots: + void validateInputs(); + + private: + void setupUI(const Node *p_node); + + void setupNodeInfoWidget(const Node *p_node, QWidget *p_parent); + + bool validateNameInput(QString &p_msg); + + bool newNote(); + + void initDefaultValues(); + + NodeInfoWidget *m_infoWidget = nullptr; + + QSharedPointer m_newNode; + + static const QString c_defaultNoteName; + }; +} // ns vnotex + +#endif // NEWNOTEDIALOG_H diff --git a/src/widgets/dialogs/nodeinfowidget.cpp b/src/widgets/dialogs/nodeinfowidget.cpp new file mode 100644 index 00000000..77d7cfb5 --- /dev/null +++ b/src/widgets/dialogs/nodeinfowidget.cpp @@ -0,0 +1,121 @@ +#include "nodeinfowidget.h" + +#include + +#include "notebook/notebook.h" +#include "../widgetsfactory.h" +#include +#include +#include "exception.h" +#include "nodelabelwithupbutton.h" + +using namespace vnotex; + +NodeInfoWidget::NodeInfoWidget(const Node *p_node, QWidget *p_parent) + : QWidget(p_parent), + m_mode(Mode::Edit) +{ + setupUI(p_node->getParent()); + + setNode(p_node); + + setStateAccordingToModeAndNodeType(p_node->getType()); +} + +NodeInfoWidget::NodeInfoWidget(const Node *p_parentNode, + Node::Type p_typeToCreate, + QWidget *p_parent) + : QWidget(p_parent), + m_mode(Mode::Create) +{ + setupUI(p_parentNode); + + setStateAccordingToModeAndNodeType(p_typeToCreate); +} + +void NodeInfoWidget::setupUI(const Node *p_parentNode) +{ + m_mainLayout = new QFormLayout(this); + + m_mainLayout->addRow(tr("Notebook:"), + new QLabel(p_parentNode->getNotebook()->getName(), this)); + + m_parentNodeLabel = new NodeLabelWithUpButton(p_parentNode, this); + connect(m_parentNodeLabel, &NodeLabelWithUpButton::nodeChanged, + this, &NodeInfoWidget::inputEdited); + m_mainLayout->addRow(tr("Location:"), m_parentNodeLabel); + + setupNameLineEdit(this); + m_mainLayout->addRow(tr("Name:"), m_nameLineEdit); + + m_createdDateTimeLabel = new QLabel(this); + m_mainLayout->addRow(tr("Created time:"), m_createdDateTimeLabel); + + m_modifiedDateTimeLabel = new QLabel(this); + m_mainLayout->addRow(tr("Modified time:"), m_modifiedDateTimeLabel); +} + +void NodeInfoWidget::setupNameLineEdit(QWidget *p_parent) +{ + m_nameLineEdit = WidgetsFactory::createLineEdit(p_parent); + auto validator = new QRegularExpressionValidator(QRegularExpression(PathUtils::c_fileNameRegularExpression), + m_nameLineEdit); + m_nameLineEdit->setValidator(validator); + connect(m_nameLineEdit, &QLineEdit::textEdited, + this, &NodeInfoWidget::inputEdited); +} + +void NodeInfoWidget::setStateAccordingToModeAndNodeType(Node::Type p_type) +{ + bool createMode = m_mode == Mode::Create; + bool isNote = p_type == Node::Type::File; + + m_parentNodeLabel->setReadOnly(!createMode); + + bool visible = !createMode; + m_createdDateTimeLabel->setVisible(visible); + m_mainLayout->labelForField(m_createdDateTimeLabel)->setVisible(visible); + + visible = !createMode && isNote; + m_modifiedDateTimeLabel->setVisible(visible); + m_mainLayout->labelForField(m_modifiedDateTimeLabel)->setVisible(visible); +} + +QLineEdit *NodeInfoWidget::getNameLineEdit() const +{ + return m_nameLineEdit; +} + +QString NodeInfoWidget::getName() const +{ + return getNameLineEdit()->text().trimmed(); +} + +const Notebook *NodeInfoWidget::getNotebook() const +{ + return getParentNode()->getNotebook(); +} + +const Node *NodeInfoWidget::getParentNode() const +{ + return m_parentNodeLabel->getNode(); +} + +void NodeInfoWidget::setNode(const Node *p_node) +{ + if (m_node == p_node) { + return; + } + + m_node = p_node; + if (m_node) { + Q_ASSERT(getNotebook() == m_node->getNotebook()); + m_nameLineEdit->setText(m_node->getName()); + m_parentNodeLabel->setNode(m_node->getParent()); + + auto createdTime = Utils::dateTimeString(m_node->getCreatedTimeUtc().toLocalTime()); + m_createdDateTimeLabel->setText(createdTime); + auto modifiedTime = Utils::dateTimeString(m_node->getModifiedTimeUtc().toLocalTime()); + m_modifiedDateTimeLabel->setText(modifiedTime); + } +} diff --git a/src/widgets/dialogs/nodeinfowidget.h b/src/widgets/dialogs/nodeinfowidget.h new file mode 100644 index 00000000..2a894a54 --- /dev/null +++ b/src/widgets/dialogs/nodeinfowidget.h @@ -0,0 +1,65 @@ +#ifndef NODEINFOWIDGET_H +#define NODEINFOWIDGET_H + +#include + +#include "notebook/node.h" + +class QLineEdit; +class QLabel; +class QFormLayout; + +namespace vnotex +{ + class Notebook; + class NodeLabelWithUpButton; + + class NodeInfoWidget : public QWidget + { + Q_OBJECT + public: + enum Mode { Create, Edit }; + + NodeInfoWidget(const Node *p_node, QWidget *p_parent = nullptr); + + NodeInfoWidget(const Node *p_parentNode, + Node::Type p_typeToCreate, + QWidget *p_parent = nullptr); + + QLineEdit *getNameLineEdit() const; + + QString getName() const; + + const Notebook *getNotebook() const; + + const Node *getParentNode() const; + + signals: + void inputEdited(); + + private: + void setupUI(const Node *p_parentNode); + + void setupNameLineEdit(QWidget *p_parent); + + void setStateAccordingToModeAndNodeType(Node::Type p_type); + + void setNode(const Node *p_node); + + Mode m_mode; + + QFormLayout *m_mainLayout = nullptr; + + QLineEdit *m_nameLineEdit = nullptr; + + NodeLabelWithUpButton *m_parentNodeLabel = nullptr; + + QLabel *m_createdDateTimeLabel = nullptr; + + QLabel *m_modifiedDateTimeLabel = nullptr; + + const Node *m_node = nullptr; + }; +} // ns vnotex + +#endif // NODEINFOWIDGET_H diff --git a/src/widgets/dialogs/nodelabelwithupbutton.cpp b/src/widgets/dialogs/nodelabelwithupbutton.cpp new file mode 100644 index 00000000..ee2f611a --- /dev/null +++ b/src/widgets/dialogs/nodelabelwithupbutton.cpp @@ -0,0 +1,76 @@ +#include "nodelabelwithupbutton.h" + +#include +#include +#include + +#include "notebook/node.h" +#include +#include "vnotex.h" + +using namespace vnotex; + +NodeLabelWithUpButton::NodeLabelWithUpButton(const Node *p_node, QWidget *p_parent) + : QWidget(p_parent), + m_node(p_node) +{ + setupUI(); +} + +void NodeLabelWithUpButton::setupUI() +{ + auto mainLayout = new QHBoxLayout(this); + mainLayout->setContentsMargins(0, 0, 0, 0); + + m_label = new QLabel(this); + mainLayout->addWidget(m_label, 1); + + auto iconFile = VNoteX::getInst().getThemeMgr().getIconFile("up_parent_node.svg"); + m_upButton = new QPushButton(IconUtils::fetchIconWithDisabledState(iconFile), + "", + this); + m_upButton->setToolTip(tr("Up")); + connect(m_upButton, &QPushButton::clicked, + this, [this]() { + if (!m_node->isRoot()) { + m_node = m_node->getParent(); + updateLabelAndButton(); + emit nodeChanged(m_node); + } + }); + mainLayout->addWidget(m_upButton, 0); + + updateLabelAndButton(); +} + +void NodeLabelWithUpButton::updateLabelAndButton() +{ + m_label->setText(m_node->fetchRelativePath()); + m_upButton->setVisible(!m_readOnly && !m_node->isRoot()); +} + +const Node *NodeLabelWithUpButton::getNode() const +{ + return m_node; +} + +void NodeLabelWithUpButton::setNode(const Node *p_node) +{ + if (m_node == p_node) { + return; + } + + m_node = p_node; + updateLabelAndButton(); + emit nodeChanged(m_node); +} + +void NodeLabelWithUpButton::setReadOnly(bool p_readonly) +{ + if (m_readOnly == p_readonly) { + return; + } + + m_readOnly = p_readonly; + updateLabelAndButton(); +} diff --git a/src/widgets/dialogs/nodelabelwithupbutton.h b/src/widgets/dialogs/nodelabelwithupbutton.h new file mode 100644 index 00000000..c17a8a4a --- /dev/null +++ b/src/widgets/dialogs/nodelabelwithupbutton.h @@ -0,0 +1,43 @@ +#ifndef NODELABELWITHUPBUTTON_H +#define NODELABELWITHUPBUTTON_H + +#include + +class QLabel; +class QPushButton; + +namespace vnotex +{ + class Node; + + class NodeLabelWithUpButton : public QWidget + { + Q_OBJECT + public: + NodeLabelWithUpButton(const Node *p_node, QWidget *p_parent = nullptr); + + const Node *getNode() const; + + void setNode(const Node *p_node); + + void setReadOnly(bool p_readonly); + + signals: + void nodeChanged(const Node *p_node); + + private: + void setupUI(); + + void updateLabelAndButton(); + + QLabel *m_label = nullptr; + + QPushButton *m_upButton = nullptr; + + const Node *m_node = nullptr; + + bool m_readOnly = false; + }; +} // ns vnotex + +#endif // NODELABELWITHUPBUTTON_H diff --git a/src/widgets/dialogs/notebookinfowidget.cpp b/src/widgets/dialogs/notebookinfowidget.cpp new file mode 100644 index 00000000..154fe4c7 --- /dev/null +++ b/src/widgets/dialogs/notebookinfowidget.cpp @@ -0,0 +1,377 @@ +#include "notebookinfowidget.h" + +#include + +#include "../widgetsfactory.h" +#include "notebook/notebook.h" +#include "vnotex.h" +#include "notebook/inotebookfactory.h" +#include "notebook/notebookparameters.h" +#include "versioncontroller/iversioncontrollerfactory.h" +#include "versioncontroller/iversioncontroller.h" +#include "notebookconfigmgr/inotebookconfigmgrfactory.h" +#include "notebookconfigmgr/inotebookconfigmgr.h" +#include "notebookbackend/inotebookbackendfactory.h" +#include "notebookbackend/inotebookbackend.h" +#include "notebookmgr.h" +#include "configmgr.h" +#include +#include "exception.h" + +using namespace vnotex; + +NotebookInfoWidget::NotebookInfoWidget(NotebookInfoWidget::Mode p_mode, QWidget *p_parent) + : QWidget(p_parent), + m_mode(p_mode) +{ + setupUI(); + + setMode(p_mode); +} + +void NotebookInfoWidget::setupUI() +{ + auto mainLayout = new QVBoxLayout(this); + + auto basicInfoGroup = setupBasicInfoGroupBox(this); + mainLayout->addWidget(basicInfoGroup); + + auto advancedInfoGroup = setupAdvancedInfoGroupBox(this); + mainLayout->addWidget(advancedInfoGroup); +} + +QGroupBox *NotebookInfoWidget::setupBasicInfoGroupBox(QWidget *p_parent) +{ + auto box = new QGroupBox(tr("Basic Information"), p_parent); + auto mainLayout = new QFormLayout(box); + + { + setupNotebookTypeComboBox(box); + mainLayout->addRow(tr("Type:"), m_typeComboBox); + } + + { + m_nameLineEdit = WidgetsFactory::createLineEdit(box); + m_nameLineEdit->setPlaceholderText(tr("Name of notebook")); + connect(m_nameLineEdit, &QLineEdit::textEdited, + this, &NotebookInfoWidget::basicInfoEdited); + mainLayout->addRow(tr("Name:"), m_nameLineEdit); + } + + { + mainLayout->addRow(tr("Icon:"), new QLabel("default", box)); + } + + { + m_descriptionLineEdit = WidgetsFactory::createLineEdit(box); + m_descriptionLineEdit->setPlaceholderText(tr("Description of notebook")); + connect(m_descriptionLineEdit, &QLineEdit::textEdited, + this, &NotebookInfoWidget::basicInfoEdited); + mainLayout->addRow(tr("Description:"), m_descriptionLineEdit); + } + + { + auto layout = setupNotebookRootFolderPath(box); + mainLayout->addRow(tr("Root folder:"), layout); + } + + return box; +} + +void NotebookInfoWidget::setupNotebookTypeComboBox(QWidget *p_parent) +{ + m_typeComboBox = WidgetsFactory::createComboBox(p_parent); + m_typeComboBox->setToolTip(tr("Type of notebook")); + + QString whatsThis = tr("Specify the type of notebook.
    "); + auto ¬ebookMgr = VNoteX::getInst().getNotebookMgr(); + for (auto &factory : notebookMgr.getAllNotebookFactories()) { + m_typeComboBox->addItem(factory->getDisplayName(), factory->getName()); + whatsThis += tr("%1: %2
    ").arg(factory->getDisplayName(), + factory->getDescription()); + } + + m_typeComboBox->setWhatsThis(whatsThis); +} + +QLayout *NotebookInfoWidget::setupNotebookRootFolderPath(QWidget *p_parent) +{ + m_rootFolderPathLineEdit = WidgetsFactory::createLineEdit(p_parent); + m_rootFolderPathLineEdit->setPlaceholderText(tr("Path of notebook root folder")); + auto whatsThis = tr("Notebook Root Folder is the folder containing all data of one notebook in VNoteX."); + m_rootFolderPathLineEdit->setWhatsThis(whatsThis); + connect(m_rootFolderPathLineEdit, &QLineEdit::textChanged, + this, [this]() { + emit rootFolderEdited(); + emit basicInfoEdited(); + }); + + m_rootFolderPathBrowseButton = new QPushButton(tr("Browse"), p_parent); + connect(m_rootFolderPathBrowseButton, &QPushButton::clicked, + this, [this]() { + auto &config = ConfigMgr::getInst().getSessionConfig(); + auto browsePath = config.getNewNotebookDefaultRootFolderPath(); + auto rootFolderPath = QFileDialog::getExistingDirectory(this, + tr("Select Notebook Root Folder"), + browsePath, + QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks); + if (!rootFolderPath.isEmpty()) { + config.setNewNotebookDefaultRootFolderPath(PathUtils::parentDirPath(rootFolderPath)); + m_rootFolderPathLineEdit->setText(rootFolderPath); + } + }); + + auto layout = new QHBoxLayout(); + layout->addWidget(m_rootFolderPathLineEdit); + layout->addWidget(m_rootFolderPathBrowseButton); + return layout; +} + +QGroupBox *NotebookInfoWidget::setupAdvancedInfoGroupBox(QWidget *p_parent) +{ + auto box = new QGroupBox(tr("Advanced Information"), p_parent); + auto mainLayout = new QFormLayout(box); + + { + setupConfigMgrComboBox(box); + mainLayout->addRow(tr("Configuration manager:"), m_configMgrComboBox); + } + + { + setupVersionControllerComboBox(box); + mainLayout->addRow(tr("Version control:"), m_versionControllerComboBox); + } + + { + setupBackendComboBox(box); + mainLayout->addRow(tr("Backend:"), m_backendComboBox); + } + + return box; +} + +void NotebookInfoWidget::setupConfigMgrComboBox(QWidget *p_parent) +{ + m_configMgrComboBox = WidgetsFactory::createComboBox(p_parent); + m_configMgrComboBox->setToolTip(tr("Configuration manager of notebook")); + + QString whatsThis = tr("Specify configruation manager of notebook.
    "); + auto ¬ebookMgr = VNoteX::getInst().getNotebookMgr(); + for (auto &factory : notebookMgr.getAllNotebookConfigMgrFactories()) { + m_configMgrComboBox->addItem(factory->getDisplayName(), factory->getName()); + whatsThis += tr("%1: %2
    ").arg(factory->getDisplayName(), + factory->getDescription()); + } + + m_configMgrComboBox->setWhatsThis(whatsThis); +} + +void NotebookInfoWidget::setupVersionControllerComboBox(QWidget *p_parent) +{ + m_versionControllerComboBox = WidgetsFactory::createComboBox(p_parent); + m_versionControllerComboBox->setToolTip(tr("Version control of notebook")); + + QString whatsThis = tr("Specify version control of notebook.
    "); + auto ¬ebookMgr = VNoteX::getInst().getNotebookMgr(); + for (auto &factory : notebookMgr.getAllVersionControllerFactories()) { + m_versionControllerComboBox->addItem(factory->getDisplayName(), factory->getName()); + whatsThis += tr("%1: %2
    ").arg(factory->getDisplayName(), + factory->getDescription()); + } + + m_versionControllerComboBox->setWhatsThis(whatsThis); +} + +void NotebookInfoWidget::setupBackendComboBox(QWidget *p_parent) +{ + m_backendComboBox = WidgetsFactory::createComboBox(p_parent); + m_backendComboBox->setToolTip(tr("Backend of notebook")); + + QString whatsThis = tr("Specify backend of notebook.
    "); + auto ¬ebookMgr = VNoteX::getInst().getNotebookMgr(); + for (auto &factory : notebookMgr.getAllNotebookBackendFactories()) { + m_backendComboBox->addItem(factory->getDisplayName(), factory->getName()); + whatsThis += tr("%1: %2
    ").arg(factory->getDisplayName(), + factory->getDescription()); + } + + m_backendComboBox->setWhatsThis(whatsThis); + + connect(m_backendComboBox, QOverload::of(&QComboBox::activated), + this, &NotebookInfoWidget::notebookBackendEdited); +} + +static void setCurrentComboBoxByData(QComboBox *p_box, const QVariant &p_data) +{ + int idx = p_box->findData(p_data); + p_box->setCurrentIndex(idx); +} + +void NotebookInfoWidget::setNotebook(const Notebook *p_notebook) +{ + Q_ASSERT(m_mode != Mode::Create + && m_mode != Mode::CreateFromFolder + && m_mode != Mode::CreateFromLegacy); + if (m_notebook == p_notebook) { + return; + } + + bool isImport = m_mode == Mode::Import; + clear(isImport, isImport); + + m_notebook = p_notebook; + if (m_notebook) { + setCurrentComboBoxByData(m_typeComboBox, m_notebook->getType()); + m_nameLineEdit->setText(m_notebook->getName()); + m_descriptionLineEdit->setText(m_notebook->getDescription()); + m_rootFolderPathLineEdit->setText(m_notebook->getRootFolderPath()); + setCurrentComboBoxByData(m_configMgrComboBox, m_notebook->getConfigMgr()->getName()); + setCurrentComboBoxByData(m_versionControllerComboBox, m_notebook->getVersionController()->getName()); + setCurrentComboBoxByData(m_backendComboBox, m_notebook->getBackend()->getName()); + } +} + +const Notebook *NotebookInfoWidget::getNotebook() const +{ + Q_ASSERT(m_mode != Mode::Create + && m_mode != Mode::CreateFromFolder + && m_mode != Mode::CreateFromLegacy); + return m_notebook; +} + +QLineEdit *NotebookInfoWidget::getNameLineEdit() const +{ + return m_nameLineEdit; +} + +QLineEdit *NotebookInfoWidget::getRootFolderPathLineEdit() const +{ + return m_rootFolderPathLineEdit; +} + +QLineEdit *NotebookInfoWidget::getDescriptionLineEdit() const +{ + return m_descriptionLineEdit; +} + +QComboBox *NotebookInfoWidget::getTypeComboBox() const +{ + return m_typeComboBox; +} + +QComboBox *NotebookInfoWidget::getConfigMgrComboBox() const +{ + return m_configMgrComboBox; +} + +QComboBox *NotebookInfoWidget::getVersionControllerComboBox() const +{ + return m_versionControllerComboBox; +} + +void NotebookInfoWidget::setStateAccordingToMode() +{ + switch (m_mode) { + case CreateFromFolder: + m_rootFolderPathLineEdit->setReadOnly(true); + m_rootFolderPathBrowseButton->setVisible(false); + break; + + case Edit: + m_typeComboBox->setEnabled(false); + m_rootFolderPathLineEdit->setReadOnly(true); + m_rootFolderPathBrowseButton->setVisible(false); + m_configMgrComboBox->setEnabled(false); + m_versionControllerComboBox->setEnabled(false); + m_backendComboBox->setEnabled(false); + break; + + case Import: + m_typeComboBox->setEnabled(false); + m_nameLineEdit->setEnabled(false); + m_descriptionLineEdit->setEnabled(false); + m_configMgrComboBox->setEnabled(false); + m_versionControllerComboBox->setEnabled(false); + break; + + case CreateFromLegacy: + // Support bundled notebook only. + m_typeComboBox->setEnabled(false); + break; + + default: + break; + } +} + +QComboBox *NotebookInfoWidget::getBackendComboBox() const +{ + return m_backendComboBox; +} + +QString NotebookInfoWidget::getName() const +{ + return getNameLineEdit()->text().trimmed(); +} + +QString NotebookInfoWidget::getDescription() const +{ + return getDescriptionLineEdit()->text().trimmed(); +} + +QString NotebookInfoWidget::getRootFolderPath() const +{ + return getRootFolderPathLineEdit()->text().trimmed(); +} + +QIcon NotebookInfoWidget::getIcon() const +{ + return QIcon(); +} + +QString NotebookInfoWidget::getType() const +{ + return getTypeComboBox()->currentData().toString(); +} + +QString NotebookInfoWidget::getConfigMgr() const +{ + return getConfigMgrComboBox()->currentData().toString(); +} + +QString NotebookInfoWidget::getVersionController() const +{ + return getVersionControllerComboBox()->currentData().toString(); +} + +QString NotebookInfoWidget::getBackend() const +{ + return getBackendComboBox()->currentData().toString(); +} + +void NotebookInfoWidget::clear(bool p_skipRootFolder, bool p_skipBackend) +{ + Q_UNUSED(p_skipBackend); + + m_notebook = nullptr; + m_nameLineEdit->clear(); + m_descriptionLineEdit->clear(); + if (!p_skipRootFolder) { + m_rootFolderPathLineEdit->clear(); + } +} + +void NotebookInfoWidget::setRootFolderPath(const QString &p_path) +{ + Q_ASSERT(m_mode == Mode::CreateFromFolder); + m_rootFolderPathLineEdit->setText(p_path); + if (m_nameLineEdit->text().isEmpty()) { + m_nameLineEdit->setText(PathUtils::dirName(p_path)); + } +} + +void NotebookInfoWidget::setMode(Mode p_mode) +{ + m_mode = p_mode; + setStateAccordingToMode(); +} diff --git a/src/widgets/dialogs/notebookinfowidget.h b/src/widgets/dialogs/notebookinfowidget.h new file mode 100644 index 00000000..4c4a2aca --- /dev/null +++ b/src/widgets/dialogs/notebookinfowidget.h @@ -0,0 +1,112 @@ +#ifndef NOTEBOOKINFOWIDGET_H +#define NOTEBOOKINFOWIDGET_H + +#include + +class QComboBox; +class QPushButton; +class QLineEdit; +class QGroupBox; + +namespace vnotex +{ + class Notebook; + + class NotebookInfoWidget : public QWidget + { + Q_OBJECT + public: + enum Mode { Create, CreateFromFolder, Edit, Import, CreateFromLegacy }; + + explicit NotebookInfoWidget(NotebookInfoWidget::Mode p_mode, QWidget *p_parent = nullptr); + + QLineEdit *getNameLineEdit() const; + + QLineEdit *getRootFolderPathLineEdit() const; + void setRootFolderPath(const QString &p_path); + + QString getName() const; + + QString getDescription() const; + + QString getRootFolderPath() const; + + QIcon getIcon() const; + + QString getType() const; + + QString getConfigMgr() const; + + QString getVersionController() const; + + QString getBackend() const; + + void clear(bool p_skipRootFolder = false, bool p_skipBackend = false); + + void setMode(Mode p_mode); + + const Notebook *getNotebook() const; + + public slots: + void setNotebook(const Notebook *p_notebook); + + signals: + // Give caller a chance to change the name according to the root folder. + void rootFolderEdited(); + + // Emit when name, description, or root folder path is edited. + void basicInfoEdited(); + + void notebookBackendEdited(); + + private: + void setupUI(); + + void setStateAccordingToMode(); + + QGroupBox *setupBasicInfoGroupBox(QWidget *p_parent = nullptr); + + void setupNotebookTypeComboBox(QWidget *p_parent = nullptr); + + QLayout *setupNotebookRootFolderPath(QWidget *p_parent = nullptr); + + QGroupBox *setupAdvancedInfoGroupBox(QWidget *p_parent = nullptr); + + void setupConfigMgrComboBox(QWidget *p_parent = nullptr); + + void setupVersionControllerComboBox(QWidget *p_parent = nullptr); + + void setupBackendComboBox(QWidget *p_parent = nullptr); + + QLineEdit *getDescriptionLineEdit() const; + + QComboBox *getTypeComboBox() const; + + QComboBox *getConfigMgrComboBox() const; + + QComboBox *getVersionControllerComboBox() const; + + QComboBox *getBackendComboBox() const; + + Mode m_mode = Mode::Create; + + const Notebook *m_notebook = nullptr; + + QLineEdit *m_nameLineEdit = nullptr; + + QLineEdit *m_descriptionLineEdit = nullptr; + + QComboBox *m_typeComboBox = nullptr; + + QComboBox *m_configMgrComboBox = nullptr; + + QComboBox *m_versionControllerComboBox = nullptr; + + QComboBox *m_backendComboBox = nullptr; + + QLineEdit *m_rootFolderPathLineEdit = nullptr; + QPushButton *m_rootFolderPathBrowseButton = nullptr; + }; +} // ns vnotex + +#endif // NOTEBOOKINFOWIDGET_H diff --git a/src/widgets/dialogs/notepropertiesdialog.cpp b/src/widgets/dialogs/notepropertiesdialog.cpp new file mode 100644 index 00000000..42c00786 --- /dev/null +++ b/src/widgets/dialogs/notepropertiesdialog.cpp @@ -0,0 +1,107 @@ +#include "notepropertiesdialog.h" + +#include + +#include "notebook/notebook.h" +#include "notebook/node.h" +#include "../widgetsfactory.h" +#include +#include "exception.h" +#include "nodeinfowidget.h" +#include "../lineedit.h" +#include +#include + +using namespace vnotex; + +NotePropertiesDialog::NotePropertiesDialog(Node *p_node, QWidget *p_parent) + : ScrollDialog(p_parent), + m_node(p_node) +{ + Q_ASSERT(m_node); + setupUI(); + + LineEdit::selectBaseName(m_infoWidget->getNameLineEdit()); + + m_infoWidget->getNameLineEdit()->setFocus(); +} + +void NotePropertiesDialog::setupUI() +{ + setupNodeInfoWidget(this); + setCentralWidget(m_infoWidget); + + setDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); + setButtonEnabled(QDialogButtonBox::Ok, false); + + setWindowTitle(m_node->getName() + QStringLiteral(" ") + tr("Properties")); +} + +void NotePropertiesDialog::setupNodeInfoWidget(QWidget *p_parent) +{ + m_infoWidget = new NodeInfoWidget(m_node, p_parent); + connect(m_infoWidget, &NodeInfoWidget::inputEdited, + this, &NotePropertiesDialog::validateInputs); +} + +void NotePropertiesDialog::validateInputs() +{ + bool valid = true; + QString msg; + + valid = valid && validateNameInput(msg); + setInformationText(msg, valid ? ScrollDialog::InformationLevel::Info + : ScrollDialog::InformationLevel::Error); + setButtonEnabled(QDialogButtonBox::Ok, valid); +} + +bool NotePropertiesDialog::validateNameInput(QString &p_msg) +{ + p_msg.clear(); + + auto name = m_infoWidget->getName(); + if (name.isEmpty()) { + p_msg = tr("Please specify a name for the note."); + return false; + } + + if (name != m_node->getName() + && m_infoWidget->getParentNode()->hasChild(name, false)) { + p_msg = tr("Name conflicts with existing note."); + return false; + } + + return true; +} + +void NotePropertiesDialog::acceptedButtonClicked() +{ + if (saveNoteProperties()) { + accept(); + } +} + +bool NotePropertiesDialog::saveNoteProperties() +{ + try { + if (m_infoWidget->getName() != m_node->getName()) { + // Close the node first. + auto event = QSharedPointer::create(); + emit VNoteX::getInst().nodeAboutToRename(m_node, event); + if (!event->m_response.toBool()) { + return false; + } + + m_node->updateName(m_infoWidget->getName()); + } + } catch (Exception &p_e) { + QString msg = tr("Failed to save note (%1) in (%2) (%3).").arg(m_node->getName(), + m_node->getNotebook()->getName(), + p_e.what()); + qCritical() << msg; + setInformationText(msg, ScrollDialog::InformationLevel::Error); + return false; + } + + return true; +} diff --git a/src/widgets/dialogs/notepropertiesdialog.h b/src/widgets/dialogs/notepropertiesdialog.h new file mode 100644 index 00000000..728ea949 --- /dev/null +++ b/src/widgets/dialogs/notepropertiesdialog.h @@ -0,0 +1,38 @@ +#ifndef NOTEPROPERTIESDIALOG_H +#define NOTEPROPERTIESDIALOG_H + +#include "scrolldialog.h" + +namespace vnotex +{ + class Node; + class NodeInfoWidget; + + class NotePropertiesDialog : public ScrollDialog + { + Q_OBJECT + public: + NotePropertiesDialog(Node *p_node, QWidget *p_parent = nullptr); + + protected: + void acceptedButtonClicked() Q_DECL_OVERRIDE; + + private slots: + void validateInputs(); + + private: + void setupUI(); + + void setupNodeInfoWidget(QWidget *p_parent); + + bool validateNameInput(QString &p_msg); + + bool saveNoteProperties(); + + NodeInfoWidget *m_infoWidget = nullptr; + + Node *m_node = nullptr; + }; +} // ns vnotex + +#endif // NOTEPROPERTIESDIALOG_H diff --git a/src/widgets/dialogs/scrolldialog.cpp b/src/widgets/dialogs/scrolldialog.cpp new file mode 100644 index 00000000..302211d1 --- /dev/null +++ b/src/widgets/dialogs/scrolldialog.cpp @@ -0,0 +1,43 @@ +#include "scrolldialog.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +using namespace vnotex; + +ScrollDialog::ScrollDialog(QWidget *p_parent, Qt::WindowFlags p_flags) + : Dialog(p_parent, p_flags) +{ + m_scrollArea = new QScrollArea(this); + m_scrollArea->setWidgetResizable(true); + m_layout->addWidget(m_scrollArea); +} + +void ScrollDialog::setCentralWidget(QWidget *p_widget) +{ + Q_ASSERT(!m_centralWidget && p_widget); + m_centralWidget = p_widget; + m_scrollArea->setWidget(p_widget); +} + +void ScrollDialog::showEvent(QShowEvent *p_event) +{ + QDialog::showEvent(p_event); + + resizeToHideScrollBarLater(false, true); +} + +void ScrollDialog::resizeToHideScrollBarLater(bool p_vertical, bool p_horizontal) +{ + WidgetUtils::resizeToHideScrollBarLater(m_scrollArea, p_vertical, p_horizontal); +} diff --git a/src/widgets/dialogs/scrolldialog.h b/src/widgets/dialogs/scrolldialog.h new file mode 100644 index 00000000..62137a24 --- /dev/null +++ b/src/widgets/dialogs/scrolldialog.h @@ -0,0 +1,28 @@ +#ifndef SCROLLDIALOG_H +#define SCROLLDIALOG_H + +#include "dialog.h" + +class QScrollArea; + +namespace vnotex +{ + class ScrollDialog : public Dialog + { + Q_OBJECT + public: + ScrollDialog(QWidget *p_parent = nullptr, Qt::WindowFlags p_flags = Qt::WindowFlags()); + + void setCentralWidget(QWidget *p_widget) Q_DECL_OVERRIDE; + + void resizeToHideScrollBarLater(bool p_vertical, bool p_horizontal); + + protected: + void showEvent(QShowEvent *p_event) Q_DECL_OVERRIDE; + + private: + QScrollArea *m_scrollArea = nullptr; + }; +} // ns vnotex + +#endif // SCROLLDIALOG_H diff --git a/src/widgets/dialogs/selectdialog.cpp b/src/widgets/dialogs/selectdialog.cpp new file mode 100644 index 00000000..23593c37 --- /dev/null +++ b/src/widgets/dialogs/selectdialog.cpp @@ -0,0 +1,107 @@ +#include "selectdialog.h" + +#include + +#include + +using namespace vnotex; + +SelectDialog::SelectDialog(const QString &p_title, QWidget *p_parent) + : QDialog(p_parent) +{ + setupUI(p_title); +} + +void SelectDialog::setupUI(const QString &p_title) +{ + auto mainLayout = new QVBoxLayout(this); + mainLayout->setContentsMargins(0, 0, 0, 0); + + m_list = new QListWidget(this); + m_list->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + m_list->setSelectionMode(QAbstractItemView::SingleSelection); + m_list->setAttribute(Qt::WA_MacShowFocusRect, false); + connect(m_list, &QListWidget::itemActivated, + this, &SelectDialog::selectionChosen); + + // Add cancel item. + QListWidgetItem *cancelItem = new QListWidgetItem(tr("Cancel")); + cancelItem->setData(Qt::UserRole, CANCEL_ID); + + m_list->addItem(cancelItem); + m_list->setCurrentRow(0); + + mainLayout->addWidget(m_list); + + setWindowTitle(p_title); +} + +void SelectDialog::addSelection(const QString &p_selectStr, int p_selectID) +{ + Q_ASSERT(p_selectID >= 0); + + QListWidgetItem *item = new QListWidgetItem(p_selectStr); + item->setData(Qt::UserRole, p_selectID); + m_list->insertItem(m_list->count() - 1, item); + + m_list->setCurrentRow(0); +} + +void SelectDialog::selectionChosen(QListWidgetItem *p_item) +{ + m_choice = p_item->data(Qt::UserRole).toInt(); + if (m_choice == CANCEL_ID) { + reject(); + } else { + accept(); + } +} + +int SelectDialog::getSelection() const +{ + return m_choice; +} + +void SelectDialog::updateSize() +{ + Q_ASSERT(m_list->count() > 0); + + int height = 0; + for (int i = 0; i < m_list->count(); ++i) { + height += m_list->sizeHintForRow(i); + } + + height += 2 * m_list->count(); + int wid = width(); + m_list->resize(wid, height); + resize(wid, height); +} + +void SelectDialog::showEvent(QShowEvent *p_event) +{ + QDialog::showEvent(p_event); + + updateSize(); +} + +void SelectDialog::keyPressEvent(QKeyEvent *p_event) +{ + if (WidgetUtils::processKeyEventLikeVi(m_list, p_event, this)) { + return; + } + + // On Mac OS X, it is `Command+O` to activate an item, instead of Return. +#if defined(Q_OS_MACOS) || defined(Q_OS_MAC) + int key = p_event->key(); + if (key == Qt::Key_Return || key == Qt::Key_Enter) { + p_event->accept(); + if (auto item = m_list->currentItem()) { + selectionChosen(item); + } + + return; + } +#endif + + QDialog::keyPressEvent(p_event); +} diff --git a/src/widgets/dialogs/selectdialog.h b/src/widgets/dialogs/selectdialog.h new file mode 100644 index 00000000..b2aec89f --- /dev/null +++ b/src/widgets/dialogs/selectdialog.h @@ -0,0 +1,48 @@ +#ifndef SELECTDIALOG_H +#define SELECTDIALOG_H + +#include +#include + +class QPushButton; +class QMouseEvent; +class QListWidget; +class QListWidgetItem; +class QShowEvent; +class QKeyEvent; + +namespace vnotex +{ + class SelectDialog : public QDialog + { + Q_OBJECT + public: + SelectDialog(const QString &p_title, QWidget *p_parent = nullptr); + + // @p_selectID should >= 0. + void addSelection(const QString &p_selectStr, int p_selectID); + + int getSelection() const; + + protected: + void showEvent(QShowEvent *p_event) Q_DECL_OVERRIDE; + + void keyPressEvent(QKeyEvent *p_event) Q_DECL_OVERRIDE; + + private slots: + void selectionChosen(QListWidgetItem *p_item); + + private: + enum { CANCEL_ID = -1 }; + + void setupUI(const QString &p_title); + + void updateSize(); + + int m_choice = CANCEL_ID; + + QListWidget *m_list = nullptr; + }; +} // ns vnotex + +#endif // SELECTDIALOG_H diff --git a/src/widgets/dialogs/selectionitemwidget.cpp b/src/widgets/dialogs/selectionitemwidget.cpp new file mode 100644 index 00000000..f783dfc0 --- /dev/null +++ b/src/widgets/dialogs/selectionitemwidget.cpp @@ -0,0 +1,89 @@ +#include "selectionitemwidget.h" + +#include +#include +#include +#include + +#include "global.h" + +using namespace vnotex; + +SelectionItemWidget::SelectionItemWidget(const QIcon &p_icon, + const QString &p_text, + QWidget *p_parent) + : QWidget(p_parent) +{ + setupUI(p_text); + + setIcon(p_icon); +} + +SelectionItemWidget::SelectionItemWidget(const QString &p_text, + QWidget *p_parent) + : QWidget(p_parent) +{ + setupUI(p_text); +} + +void SelectionItemWidget::setupUI(const QString &p_text) +{ + QHBoxLayout *mainLayout = new QHBoxLayout(this); + mainLayout->setContentsMargins(CONTENTS_MARGIN, 0, 0, 0); + + m_checkBox = new QCheckBox(this); + mainLayout->addWidget(m_checkBox); + connect(m_checkBox, &QCheckBox::stateChanged, + this, &SelectionItemWidget::checkStateChanged); + + m_iconLabel = new QLabel(this); + m_iconLabel->setVisible(false); + mainLayout->addWidget(m_iconLabel); + + m_textLabel = new QLabel(p_text, this); + mainLayout->addWidget(m_textLabel); + + mainLayout->addStretch(); +} + +bool SelectionItemWidget::isChecked() const +{ + return m_checkBox->isChecked(); +} + +const QVariant &SelectionItemWidget::getData() const +{ + return m_data; +} + +void SelectionItemWidget::setChecked(bool p_checked) +{ + m_checkBox->setChecked(p_checked); +} + +void SelectionItemWidget::setToolTip(const QString &p_tip) +{ + m_textLabel->setToolTip(p_tip); +} + +void SelectionItemWidget::setData(const QVariant &p_data) +{ + m_data = p_data; +} + +void SelectionItemWidget::setIcon(const QIcon &p_icon) +{ + if (!p_icon.isNull()) { + int iconHeight = qMax(m_textLabel->minimumSizeHint().height(), 16); + auto pixmap = p_icon.pixmap(QSize(iconHeight, iconHeight)); + m_iconLabel->setPixmap(pixmap); + } + + m_iconLabel->setVisible(!p_icon.isNull()); +} + +void SelectionItemWidget::mouseDoubleClickEvent(QMouseEvent *p_event) +{ + p_event->accept(); + setChecked(!isChecked()); +} diff --git a/src/widgets/dialogs/selectionitemwidget.h b/src/widgets/dialogs/selectionitemwidget.h new file mode 100644 index 00000000..09d3340f --- /dev/null +++ b/src/widgets/dialogs/selectionitemwidget.h @@ -0,0 +1,54 @@ +#ifndef SELECTIONITEMWIDGET_H +#define SELECTIONITEMWIDGET_H + +#include +#include + +class QCheckBox; +class QLabel; + +namespace vnotex +{ + // Tree/List item widget with checkbox. + class SelectionItemWidget : public QWidget + { + Q_OBJECT + public: + SelectionItemWidget(const QIcon &p_icon, + const QString &p_text, + QWidget *p_parent = nullptr); + + SelectionItemWidget(const QString &p_text, + QWidget *p_parent = nullptr); + + bool isChecked() const; + void setChecked(bool p_checked); + + const QVariant &getData() const; + void setData(const QVariant &p_data); + + void setToolTip(const QString &p_tip); + + void setIcon(const QIcon &p_icon); + + signals: + // Emit when item's check state changed. + void checkStateChanged(int p_state); + + protected: + void mouseDoubleClickEvent(QMouseEvent *p_event); + + private: + void setupUI(const QString &p_text); + + QCheckBox *m_checkBox = nullptr; + + QLabel *m_iconLabel = nullptr; + + QLabel *m_textLabel = nullptr; + + QVariant m_data; + }; +} + +#endif // SELECTIONITEMWIDGET_H diff --git a/src/widgets/dialogs/settings/appearancepage.cpp b/src/widgets/dialogs/settings/appearancepage.cpp new file mode 100644 index 00000000..3b117173 --- /dev/null +++ b/src/widgets/dialogs/settings/appearancepage.cpp @@ -0,0 +1,76 @@ +#include "appearancepage.h" + +#include +#include +#include + +#include +#include +#include +#include + +using namespace vnotex; + +AppearancePage::AppearancePage(QWidget *p_parent) + : SettingsPage(p_parent) +{ + setupUI(); +} + +void AppearancePage::setupUI() +{ + auto mainLayout = new QFormLayout(this); + + { + const QString label(tr("System title bar")); + m_systemTitleBarCheckBox = WidgetsFactory::createCheckBox(label, this); + m_systemTitleBarCheckBox->setToolTip(tr("Use system title bar")); + mainLayout->addRow(m_systemTitleBarCheckBox); + addSearchItem(label, m_systemTitleBarCheckBox->toolTip(), m_systemTitleBarCheckBox); + connect(m_systemTitleBarCheckBox, &QCheckBox::stateChanged, + this, &AppearancePage::pageIsChanged); + } + + { + m_toolBarIconSizeSpinBox = WidgetsFactory::createSpinBox(this); + m_toolBarIconSizeSpinBox->setToolTip(tr("Icon size of the main window tool bar")); + + m_toolBarIconSizeSpinBox->setRange(1, 48); + m_toolBarIconSizeSpinBox->setSingleStep(1); + + const QString label(tr("Main tool bar icon size:")); + mainLayout->addRow(label, m_toolBarIconSizeSpinBox); + addSearchItem(label, m_toolBarIconSizeSpinBox->toolTip(), m_toolBarIconSizeSpinBox); + connect(m_toolBarIconSizeSpinBox, QOverload::of(&QSpinBox::valueChanged), + this, &AppearancePage::pageIsChanged); + } +} + +void AppearancePage::loadInternal() +{ + const auto &sessionConfig = ConfigMgr::getInst().getSessionConfig(); + const auto &coreConfig = ConfigMgr::getInst().getCoreConfig(); + + if (m_systemTitleBarCheckBox) { + m_systemTitleBarCheckBox->setChecked(sessionConfig.getSystemTitleBarEnabled()); + } + + m_toolBarIconSizeSpinBox->setValue(coreConfig.getToolBarIconSize()); +} + +void AppearancePage::saveInternal() +{ + auto &sessionConfig = ConfigMgr::getInst().getSessionConfig(); + auto &coreConfig = ConfigMgr::getInst().getCoreConfig(); + + if (m_systemTitleBarCheckBox) { + sessionConfig.setSystemTitleBarEnabled(m_systemTitleBarCheckBox->isChecked()); + } + + coreConfig.setToolBarIconSize(m_toolBarIconSizeSpinBox->value()); +} + +QString AppearancePage::title() const +{ + return tr("Appearance"); +} diff --git a/src/widgets/dialogs/settings/appearancepage.h b/src/widgets/dialogs/settings/appearancepage.h new file mode 100644 index 00000000..aaad115d --- /dev/null +++ b/src/widgets/dialogs/settings/appearancepage.h @@ -0,0 +1,33 @@ +#ifndef APPEARANCEPAGE_H +#define APPEARANCEPAGE_H + +#include "settingspage.h" + +class QCheckBox; +class QSpinBox; + +namespace vnotex +{ + class AppearancePage : public SettingsPage + { + Q_OBJECT + public: + explicit AppearancePage(QWidget *p_parent = nullptr); + + QString title() const Q_DECL_OVERRIDE; + + protected: + void loadInternal() Q_DECL_OVERRIDE; + + void saveInternal() Q_DECL_OVERRIDE; + + private: + void setupUI(); + + QCheckBox *m_systemTitleBarCheckBox = nullptr; + + QSpinBox *m_toolBarIconSizeSpinBox = nullptr; + }; +} + +#endif // APPEARANCEPAGE_H diff --git a/src/widgets/dialogs/settings/editorpage.cpp b/src/widgets/dialogs/settings/editorpage.cpp new file mode 100644 index 00000000..db7ac616 --- /dev/null +++ b/src/widgets/dialogs/settings/editorpage.cpp @@ -0,0 +1,80 @@ +#include "editorpage.h" + +#include +#include +#include + +#include +#include +#include + +using namespace vnotex; + +EditorPage::EditorPage(QWidget *p_parent) + : SettingsPage(p_parent) +{ + setupUI(); +} + +void EditorPage::setupUI() +{ + auto mainLayout = new QFormLayout(this); + + { + m_autoSavePolicyComboBox = WidgetsFactory::createComboBox(this); + m_autoSavePolicyComboBox->setToolTip(tr("Auto save policy")); + + m_autoSavePolicyComboBox->addItem(tr("None"), (int)EditorConfig::AutoSavePolicy::None); + m_autoSavePolicyComboBox->addItem(tr("Auto Save"), (int)EditorConfig::AutoSavePolicy::AutoSave); + m_autoSavePolicyComboBox->addItem(tr("Backup File"), (int)EditorConfig::AutoSavePolicy::BackupFile); + + const QString label(tr("Auto save policy:")); + mainLayout->addRow(label, m_autoSavePolicyComboBox); + addSearchItem(label, m_autoSavePolicyComboBox->toolTip(), m_autoSavePolicyComboBox); + connect(m_autoSavePolicyComboBox, QOverload::of(&QComboBox::currentIndexChanged), + this, &EditorPage::pageIsChanged); + } +} + +void EditorPage::loadInternal() +{ + const auto &editorConfig = ConfigMgr::getInst().getEditorConfig(); + + { + int idx = m_autoSavePolicyComboBox->findData(static_cast(editorConfig.getAutoSavePolicy())); + Q_ASSERT(idx != -1); + m_autoSavePolicyComboBox->setCurrentIndex(idx); + } +} + +void EditorPage::saveInternal() +{ + auto &editorConfig = ConfigMgr::getInst().getEditorConfig(); + + { + auto policy = m_autoSavePolicyComboBox->currentData().toInt(); + editorConfig.setAutoSavePolicy(static_cast(policy)); + } + + notifyEditorConfigChange(); +} + +QString EditorPage::title() const +{ + return tr("Editor"); +} + +void EditorPage::notifyEditorConfigChange() +{ + static QTimer *timer = nullptr; + if (!timer) { + timer = new QTimer(); + timer->setSingleShot(true); + timer->setInterval(1000); + auto& configMgr = ConfigMgr::getInst(); + connect(timer, &QTimer::timeout, + &configMgr, &ConfigMgr::editorConfigChanged); + } + + timer->start(); +} diff --git a/src/widgets/dialogs/settings/editorpage.h b/src/widgets/dialogs/settings/editorpage.h new file mode 100644 index 00000000..15442b8d --- /dev/null +++ b/src/widgets/dialogs/settings/editorpage.h @@ -0,0 +1,33 @@ +#ifndef EDITORPAGE_H +#define EDITORPAGE_H + +#include "settingspage.h" + +class QComboBox; + +namespace vnotex +{ + class EditorPage : public SettingsPage + { + Q_OBJECT + public: + explicit EditorPage(QWidget *p_parent = nullptr); + + QString title() const Q_DECL_OVERRIDE; + + // Should be called by all editors setting page when saved. + static void notifyEditorConfigChange(); + + protected: + void loadInternal() Q_DECL_OVERRIDE; + + void saveInternal() Q_DECL_OVERRIDE; + + private: + void setupUI(); + + QComboBox *m_autoSavePolicyComboBox = nullptr; + }; +} + +#endif // EDITORPAGE_H diff --git a/src/widgets/dialogs/settings/generalpage.cpp b/src/widgets/dialogs/settings/generalpage.cpp new file mode 100644 index 00000000..84a83552 --- /dev/null +++ b/src/widgets/dialogs/settings/generalpage.cpp @@ -0,0 +1,97 @@ +#include "generalpage.h" + +#include +#include + +#include +#include +#include +#include + +using namespace vnotex; + +GeneralPage::GeneralPage(QWidget *p_parent) + : SettingsPage(p_parent) +{ + setupUI(); +} + +void GeneralPage::setupUI() +{ + auto mainLayout = new QFormLayout(this); + + { + m_localeComboBox = WidgetsFactory::createComboBox(this); + m_localeComboBox->setToolTip(tr("Interface language")); + + m_localeComboBox->addItem(tr("Default"), QString()); + for (const auto &loc : ConfigMgr::getInst().getCoreConfig().getAvailableLocales()) { + QLocale locale(loc); + m_localeComboBox->addItem(QString("%1 (%2)").arg(locale.nativeLanguageName(), locale.nativeCountryName()), + loc); + } + + const QString label(tr("Language:")); + mainLayout->addRow(label, m_localeComboBox); + addSearchItem(label, m_localeComboBox->toolTip(), m_localeComboBox); + connect(m_localeComboBox, QOverload::of(&QComboBox::currentIndexChanged), + this, &GeneralPage::pageIsChanged); + } + +#if defined(Q_OS_WIN) + { + m_openGLComboBox = WidgetsFactory::createComboBox(this); + m_openGLComboBox->setToolTip(tr("OpenGL implementation used to render application")); + + m_openGLComboBox->addItem(tr("None"), SessionConfig::OpenGL::None); + m_openGLComboBox->addItem(tr("Desktop"), SessionConfig::OpenGL::Desktop); + m_openGLComboBox->addItem(tr("OpenGL ES"), SessionConfig::OpenGL::Angle); + m_openGLComboBox->addItem(tr("Software"), SessionConfig::OpenGL::Software); + + const QString label(tr("OpenGL:")); + mainLayout->addRow(label, m_openGLComboBox); + addSearchItem(label, m_openGLComboBox->toolTip(), m_openGLComboBox); + connect(m_openGLComboBox, QOverload::of(&QComboBox::currentIndexChanged), + this, &GeneralPage::pageIsChanged); + } +#endif +} + +void GeneralPage::loadInternal() +{ + const auto &coreConfig = ConfigMgr::getInst().getCoreConfig(); + + { + int idx = m_localeComboBox->findData(coreConfig.getLocale()); + Q_ASSERT(idx != -1); + m_localeComboBox->setCurrentIndex(idx); + } + + if (m_openGLComboBox) { + const auto &sessionConfig = ConfigMgr::getInst().getSessionConfig(); + int idx = m_openGLComboBox->findData(sessionConfig.getOpenGL()); + Q_ASSERT(idx != -1); + m_openGLComboBox->setCurrentIndex(idx); + } +} + +void GeneralPage::saveInternal() +{ + auto &coreConfig = ConfigMgr::getInst().getCoreConfig(); + + { + auto locale = m_localeComboBox->currentData().toString(); + coreConfig.setLocale(locale); + } + + if (m_openGLComboBox) { + auto &sessionConfig = ConfigMgr::getInst().getSessionConfig(); + int opt = m_openGLComboBox->currentData().toInt(); + sessionConfig.setOpenGL(static_cast(opt)); + } +} + +QString GeneralPage::title() const +{ + return tr("General"); +} diff --git a/src/widgets/dialogs/settings/generalpage.h b/src/widgets/dialogs/settings/generalpage.h new file mode 100644 index 00000000..f81ef5e4 --- /dev/null +++ b/src/widgets/dialogs/settings/generalpage.h @@ -0,0 +1,32 @@ +#ifndef GENERALPAGE_H +#define GENERALPAGE_H + +#include "settingspage.h" + +class QComboBox; + +namespace vnotex +{ + class GeneralPage : public SettingsPage + { + Q_OBJECT + public: + explicit GeneralPage(QWidget *p_parent = nullptr); + + QString title() const Q_DECL_OVERRIDE; + + protected: + void loadInternal() Q_DECL_OVERRIDE; + + void saveInternal() Q_DECL_OVERRIDE; + + private: + void setupUI(); + + QComboBox *m_localeComboBox = nullptr; + + QComboBox *m_openGLComboBox = nullptr; + }; +} + +#endif // GENERALPAGE_H diff --git a/src/widgets/dialogs/settings/markdowneditorpage.cpp b/src/widgets/dialogs/settings/markdowneditorpage.cpp new file mode 100644 index 00000000..85a15d8e --- /dev/null +++ b/src/widgets/dialogs/settings/markdowneditorpage.cpp @@ -0,0 +1,111 @@ +#include "markdowneditorpage.h" + +#include +#include + +#include +#include +#include +#include + +#include "editorpage.h" + +using namespace vnotex; + +MarkdownEditorPage::MarkdownEditorPage(QWidget *p_parent) + : SettingsPage(p_parent) +{ + setupUI(); +} + +void MarkdownEditorPage::setupUI() +{ + auto mainLayout = new QFormLayout(this); + + { + const QString label(tr("Insert file name as title")); + m_insertFileNameAsTitleCheckBox = WidgetsFactory::createCheckBox(label, this); + m_insertFileNameAsTitleCheckBox->setToolTip(tr("Insert file name as title when creating note")); + mainLayout->addRow(m_insertFileNameAsTitleCheckBox); + addSearchItem(label, m_insertFileNameAsTitleCheckBox->toolTip(), m_insertFileNameAsTitleCheckBox); + connect(m_insertFileNameAsTitleCheckBox, &QCheckBox::stateChanged, + this, &MarkdownEditorPage::pageIsChanged); + } + + { + const QString label(tr("Section number")); + m_sectionNumberCheckBox = WidgetsFactory::createCheckBox(label, this); + m_sectionNumberCheckBox->setToolTip(tr("Display section number of headings in read mode")); + mainLayout->addRow(m_sectionNumberCheckBox); + addSearchItem(label, m_sectionNumberCheckBox->toolTip(), m_sectionNumberCheckBox); + connect(m_sectionNumberCheckBox, &QCheckBox::stateChanged, + this, &MarkdownEditorPage::pageIsChanged); + } + + { + const QString label(tr("Constrain image width")); + m_constrainImageWidthCheckBox = WidgetsFactory::createCheckBox(label, this); + m_constrainImageWidthCheckBox->setToolTip(tr("Constrain image width to the window")); + mainLayout->addRow(m_constrainImageWidthCheckBox); + addSearchItem(label, m_constrainImageWidthCheckBox->toolTip(), m_constrainImageWidthCheckBox); + connect(m_constrainImageWidthCheckBox, &QCheckBox::stateChanged, + this, &MarkdownEditorPage::pageIsChanged); + } + + { + const QString label(tr("Constrain in-place preview width")); + m_constrainInPlacePreviewWidthCheckBox = WidgetsFactory::createCheckBox(label, this); + m_constrainInPlacePreviewWidthCheckBox->setToolTip(tr("Constrain in-place preview width to the window")); + mainLayout->addRow(m_constrainInPlacePreviewWidthCheckBox); + addSearchItem(label, m_constrainInPlacePreviewWidthCheckBox->toolTip(), m_constrainInPlacePreviewWidthCheckBox); + connect(m_constrainInPlacePreviewWidthCheckBox, &QCheckBox::stateChanged, + this, &MarkdownEditorPage::pageIsChanged); + } + + { + const QString label(tr("Fetch images to local in Parse And Paste")); + m_fetchImagesToLocalCheckBox = WidgetsFactory::createCheckBox(label, this); + m_fetchImagesToLocalCheckBox->setToolTip(tr("Fetch images to local in Parse To Markdown And Paste")); + mainLayout->addRow(m_fetchImagesToLocalCheckBox); + addSearchItem(label, m_fetchImagesToLocalCheckBox->toolTip(), m_fetchImagesToLocalCheckBox); + connect(m_fetchImagesToLocalCheckBox, &QCheckBox::stateChanged, + this, &MarkdownEditorPage::pageIsChanged); + } +} + +void MarkdownEditorPage::loadInternal() +{ + const auto &markdownConfig = ConfigMgr::getInst().getEditorConfig().getMarkdownEditorConfig(); + + m_insertFileNameAsTitleCheckBox->setChecked(markdownConfig.getInsertFileNameAsTitle()); + + m_sectionNumberCheckBox->setChecked(markdownConfig.getSectionNumberEnabled()); + + m_constrainImageWidthCheckBox->setChecked(markdownConfig.getConstrainImageWidthEnabled()); + + m_constrainInPlacePreviewWidthCheckBox->setChecked(markdownConfig.getConstrainInPlacePreviewWidthEnabled()); + + m_fetchImagesToLocalCheckBox->setChecked(markdownConfig.getFetchImagesInParseAndPaste()); +} + +void MarkdownEditorPage::saveInternal() +{ + auto &markdownConfig = ConfigMgr::getInst().getEditorConfig().getMarkdownEditorConfig(); + + markdownConfig.setInsertFileNameAsTitle(m_insertFileNameAsTitleCheckBox->isChecked()); + + markdownConfig.setSectionNumberEnabled(m_sectionNumberCheckBox->isChecked()); + + markdownConfig.setConstrainImageWidthEnabled(m_constrainImageWidthCheckBox->isChecked()); + + markdownConfig.setConstrainInPlacePreviewWidthEnabled(m_constrainInPlacePreviewWidthCheckBox->isChecked()); + + markdownConfig.setFetchImagesInParseAndPaste(m_fetchImagesToLocalCheckBox->isChecked()); + + EditorPage::notifyEditorConfigChange(); +} + +QString MarkdownEditorPage::title() const +{ + return tr("Markdown Editor"); +} diff --git a/src/widgets/dialogs/settings/markdowneditorpage.h b/src/widgets/dialogs/settings/markdowneditorpage.h new file mode 100644 index 00000000..a2e797d0 --- /dev/null +++ b/src/widgets/dialogs/settings/markdowneditorpage.h @@ -0,0 +1,38 @@ +#ifndef MARKDOWNEDITORPAGE_H +#define MARKDOWNEDITORPAGE_H + +#include "settingspage.h" + +class QCheckBox; + +namespace vnotex +{ + class MarkdownEditorPage : public SettingsPage + { + Q_OBJECT + public: + explicit MarkdownEditorPage(QWidget *p_parent = nullptr); + + QString title() const Q_DECL_OVERRIDE; + + protected: + void loadInternal() Q_DECL_OVERRIDE; + + void saveInternal() Q_DECL_OVERRIDE; + + private: + void setupUI(); + + QCheckBox *m_insertFileNameAsTitleCheckBox = nullptr; + + QCheckBox *m_sectionNumberCheckBox = nullptr; + + QCheckBox *m_constrainImageWidthCheckBox = nullptr; + + QCheckBox *m_constrainInPlacePreviewWidthCheckBox = nullptr; + + QCheckBox *m_fetchImagesToLocalCheckBox = nullptr; + }; +} + +#endif // MARKDOWNEDITORPAGE_H diff --git a/src/widgets/dialogs/settings/settingsdialog.cpp b/src/widgets/dialogs/settings/settingsdialog.cpp new file mode 100644 index 00000000..627436ec --- /dev/null +++ b/src/widgets/dialogs/settings/settingsdialog.cpp @@ -0,0 +1,193 @@ +#include "settingsdialog.h" + +#include +#include +#include + +#include +#include +#include + +#include "generalpage.h" +#include "editorpage.h" +#include "texteditorpage.h" +#include "markdowneditorpage.h" +#include "appearancepage.h" + +using namespace vnotex; + +SettingsDialog::SettingsDialog(QWidget *p_parent) + : ScrollDialog(p_parent) +{ + setupUI(); + + setupPages(); +} + +void SettingsDialog::setupUI() +{ + auto *widget = new QWidget(this); + setCentralWidget(widget); + + auto mainLayout = new QHBoxLayout(widget); + + setupPageExplorer(mainLayout, widget); + + m_pageLayout = new QStackedLayout(); + mainLayout->addLayout(m_pageLayout, 3); + + setDialogButtonBox(QDialogButtonBox::Ok + | QDialogButtonBox::Apply + | QDialogButtonBox::Reset + | QDialogButtonBox::Cancel); + + setWindowTitle(tr("Settings")); +} + +void SettingsDialog::setupPageExplorer(QBoxLayout *p_layout, QWidget *p_parent) +{ + auto layout = new QVBoxLayout(); + + m_searchEdit = WidgetsFactory::createLineEdit(p_parent); + m_searchEdit->setPlaceholderText(tr("Type to search")); + layout->addWidget(m_searchEdit); + + m_pageExplorer = new TreeWidget(TreeWidget::None, p_parent); + TreeWidget::setupSingleColumnHeaderlessTree(m_pageExplorer, false, false); + TreeWidget::showHorizontalScrollbar(m_pageExplorer); + layout->addWidget(m_pageExplorer); + + connect(m_pageExplorer, &QTreeWidget::currentItemChanged, + this, [this](QTreeWidgetItem *p_item, QTreeWidgetItem *p_previous) { + Q_UNUSED(p_previous); + auto page = itemPage(p_item); + m_pageLayout->setCurrentWidget(page); + }); + + p_layout->addLayout(layout, 1); +} + +void SettingsDialog::setupPages() +{ + // General. + { + auto page = new GeneralPage(this); + m_pageLayout->addWidget(page); + + auto item = new QTreeWidgetItem(m_pageExplorer); + setupPage(item, page); + } + + // Appearance. + { + auto page = new AppearancePage(this); + m_pageLayout->addWidget(page); + + auto item = new QTreeWidgetItem(m_pageExplorer); + setupPage(item, page); + } + + // Editor. + { + auto page = new EditorPage(this); + m_pageLayout->addWidget(page); + + auto item = new QTreeWidgetItem(m_pageExplorer); + setupPage(item, page); + + // Text Editor. + { + auto subPage = new TextEditorPage(this); + m_pageLayout->addWidget(subPage); + + auto subItem = new QTreeWidgetItem(item); + setupPage(subItem, subPage); + } + + // Markdown Editor. + { + auto subPage = new MarkdownEditorPage(this); + m_pageLayout->addWidget(subPage); + + auto subItem = new QTreeWidgetItem(item); + setupPage(subItem, subPage); + } + } + + setChangesUnsaved(false); + m_pageExplorer->setCurrentItem(m_pageExplorer->topLevelItem(0), 0, QItemSelectionModel::ClearAndSelect); + m_pageLayout->setCurrentIndex(0); + + m_ready = true; +} + +void SettingsDialog::setupPage(QTreeWidgetItem *p_item, SettingsPage *p_page) +{ + p_item->setText(0, p_page->title()); + p_item->setData(0, Qt::UserRole, QVariant::fromValue(p_page)); + + p_page->load(); + + connect(p_page, &SettingsPage::changed, + this, [this]() { + if (m_ready) { + setChangesUnsaved(true); + } + }); +} + +SettingsPage *SettingsDialog::itemPage(QTreeWidgetItem *p_item) const +{ + Q_ASSERT(p_item); + return p_item->data(0, Qt::UserRole).value(); +} + +void SettingsDialog::setChangesUnsaved(bool p_unsaved) +{ + m_changesUnsaved = p_unsaved; + setButtonEnabled(QDialogButtonBox::Apply, m_changesUnsaved); + setButtonEnabled(QDialogButtonBox::Reset, m_changesUnsaved); +} + +void SettingsDialog::acceptedButtonClicked() +{ + if (m_changesUnsaved) { + savePages(); + } + + accept(); +} + +void SettingsDialog::resetButtonClicked() +{ + m_ready = false; + forEachPage([](SettingsPage *p_page) { + p_page->reset(); + }); + m_ready = true; + + setChangesUnsaved(false); +} + +void SettingsDialog::appliedButtonClicked() +{ + Q_ASSERT(m_changesUnsaved); + savePages(); +} + +void SettingsDialog::savePages() +{ + forEachPage([](SettingsPage *p_page) { + p_page->save(); + }); + + setChangesUnsaved(false); +} + +void SettingsDialog::forEachPage(const std::function &p_func) +{ + for (int i = 0; i < m_pageLayout->count(); ++i) { + auto page = dynamic_cast(m_pageLayout->widget(i)); + p_func(page); + } +} diff --git a/src/widgets/dialogs/settings/settingsdialog.h b/src/widgets/dialogs/settings/settingsdialog.h new file mode 100644 index 00000000..7c8dbcd7 --- /dev/null +++ b/src/widgets/dialogs/settings/settingsdialog.h @@ -0,0 +1,59 @@ +#ifndef SETTINGSDIALOG_H +#define SETTINGSDIALOG_H + +#include "../scrolldialog.h" + +#include + +class QTreeWidget; +class QStackedLayout; +class QLineEdit; +class QTreeWidgetItem; + +namespace vnotex +{ + class SettingsPage; + + class SettingsDialog : public ScrollDialog + { + Q_OBJECT + public: + explicit SettingsDialog(QWidget *p_parent = nullptr); + + protected: + void acceptedButtonClicked() Q_DECL_OVERRIDE; + + void resetButtonClicked() Q_DECL_OVERRIDE; + + void appliedButtonClicked() Q_DECL_OVERRIDE; + + private: + void setupUI(); + + void setupPageExplorer(QBoxLayout *p_layout, QWidget *p_parent); + + void setupPages(); + + void setupPage(QTreeWidgetItem *p_item, SettingsPage *p_page); + + SettingsPage *itemPage(QTreeWidgetItem *p_item) const; + + void setChangesUnsaved(bool p_unsaved); + + void savePages(); + + void forEachPage(const std::function &p_func); + + QLineEdit *m_searchEdit = nullptr; + + QTreeWidget *m_pageExplorer = nullptr; + + QStackedLayout *m_pageLayout = nullptr; + + bool m_changesUnsaved = false; + + bool m_ready = false; + }; +} + +#endif // SETTINGSDIALOG_H diff --git a/src/widgets/dialogs/settings/settingspage.cpp b/src/widgets/dialogs/settings/settingspage.cpp new file mode 100644 index 00000000..5a27cda1 --- /dev/null +++ b/src/widgets/dialogs/settings/settingspage.cpp @@ -0,0 +1,73 @@ +#include "settingspage.h" + +using namespace vnotex; + + +SettingsPage::SettingsPage(QWidget *p_parent) + : QWidget(p_parent) +{ +} + +SettingsPage::~SettingsPage() +{ +} + +bool SettingsPage::search(const QString &p_key) +{ + bool hit = false; + for (const auto& item : m_searchItems) { + if (item.m_words.contains(p_key, Qt::CaseInsensitive)) { + // Continue to search all the matched targets. + hit = true; + searchHit(item.m_target); + } + } + + return hit; +} + +void SettingsPage::searchHit(QWidget *p_target) +{ + Q_UNUSED(p_target); +} + +void SettingsPage::addSearchItem(const QString &p_words, QWidget *p_target) +{ + m_searchItems.push_back(SearchItem(p_words, p_target)); +} + +void SettingsPage::addSearchItem(const QString &p_name, const QString &p_tooltip, QWidget *p_target) +{ + addSearchItem(p_name + QStringLiteral(" ") + p_tooltip, p_target); +} + +void SettingsPage::pageIsChanged() +{ + m_changed = true; + emit changed(); +} + +void SettingsPage::load() +{ + loadInternal(); + m_changed = false; +} + +void SettingsPage::save() +{ + if (!m_changed) { + return; + } + + saveInternal(); + m_changed = false; +} + +void SettingsPage::reset() +{ + if (!m_changed) { + return; + } + + load(); +} diff --git a/src/widgets/dialogs/settings/settingspage.h b/src/widgets/dialogs/settings/settingspage.h new file mode 100644 index 00000000..22a2acfe --- /dev/null +++ b/src/widgets/dialogs/settings/settingspage.h @@ -0,0 +1,65 @@ +#ifndef SETTINGSPAGE_H +#define SETTINGSPAGE_H + +#include + +namespace vnotex +{ + class SettingsPage : public QWidget + { + Q_OBJECT + public: + explicit SettingsPage(QWidget *p_parent = nullptr); + + virtual ~SettingsPage(); + + void load(); + + void save(); + + void reset(); + + virtual QString title() const = 0; + + bool search(const QString &p_key); + + signals: + void changed(); + + protected: + virtual void loadInternal() = 0; + + virtual void saveInternal() = 0; + + // Subclass could override this method to highlight matched target. + virtual void searchHit(QWidget *p_target); + + void addSearchItem(const QString &p_words, QWidget *p_target); + + void addSearchItem(const QString &p_name, const QString &p_tooltip, QWidget *p_target); + + protected slots: + void pageIsChanged(); + + private: + struct SearchItem + { + SearchItem() = default; + + SearchItem(const QString &p_words, QWidget *p_target) + : m_words(p_words), + m_target(p_target) + { + } + + QString m_words; + QWidget *m_target = nullptr; + }; + + QVector m_searchItems; + + bool m_changed = false; + }; +} + +#endif // SETTINGSPAGE_H diff --git a/src/widgets/dialogs/settings/texteditorpage.cpp b/src/widgets/dialogs/settings/texteditorpage.cpp new file mode 100644 index 00000000..7dac0a9d --- /dev/null +++ b/src/widgets/dialogs/settings/texteditorpage.cpp @@ -0,0 +1,193 @@ +#include "texteditorpage.h" + +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "editorpage.h" + +using namespace vnotex; + +TextEditorPage::TextEditorPage(QWidget *p_parent) + : SettingsPage(p_parent) +{ + setupUI(); +} + +void TextEditorPage::setupUI() +{ + auto mainLayout = new QFormLayout(this); + + { + m_lineNumberComboBox = WidgetsFactory::createComboBox(this); + m_lineNumberComboBox->setToolTip(tr("Line number type")); + + m_lineNumberComboBox->addItem(tr("None"), (int)TextEditorConfig::LineNumberType::None); + m_lineNumberComboBox->addItem(tr("Absolute"), (int)TextEditorConfig::LineNumberType::Absolute); + m_lineNumberComboBox->addItem(tr("Relative"), (int)TextEditorConfig::LineNumberType::Relative); + + const QString label(tr("Line number:")); + mainLayout->addRow(label, m_lineNumberComboBox); + addSearchItem(label, m_lineNumberComboBox->toolTip(), m_lineNumberComboBox); + connect(m_lineNumberComboBox, QOverload::of(&QComboBox::currentIndexChanged), + this, &TextEditorPage::pageIsChanged); + } + + { + const QString label(tr("Fold text")); + m_textFoldingCheckBox = WidgetsFactory::createCheckBox(label, this); + m_textFoldingCheckBox->setToolTip(tr("Text folding")); + mainLayout->addRow(m_textFoldingCheckBox); + addSearchItem(label, m_textFoldingCheckBox->toolTip(), m_textFoldingCheckBox); + connect(m_textFoldingCheckBox, &QCheckBox::stateChanged, + this, &TextEditorPage::pageIsChanged); + } + + { + m_inputModeComboBox = WidgetsFactory::createComboBox(this); + m_inputModeComboBox->setToolTip(tr("Input mode like Vi")); + + m_inputModeComboBox->addItem(tr("Normal"), (int)TextEditorConfig::InputMode::NormalMode); + m_inputModeComboBox->addItem(tr("Vi"), (int)TextEditorConfig::InputMode::ViMode); + + const QString label(tr("Input mode:")); + mainLayout->addRow(label, m_inputModeComboBox); + addSearchItem(label, m_inputModeComboBox->toolTip(), m_inputModeComboBox); + connect(m_inputModeComboBox, QOverload::of(&QComboBox::currentIndexChanged), + this, &TextEditorPage::pageIsChanged); + } + + { + m_centerCursorComboBox = WidgetsFactory::createComboBox(this); + m_centerCursorComboBox->setToolTip(tr("Force to center text cursor")); + + m_centerCursorComboBox->addItem(tr("Never"), (int)TextEditorConfig::CenterCursor::NeverCenter); + m_centerCursorComboBox->addItem(tr("Always Center"), (int)TextEditorConfig::CenterCursor::AlwaysCenter); + m_centerCursorComboBox->addItem(tr("Center On Bottom"), (int)TextEditorConfig::CenterCursor::CenterOnBottom); + + const QString label(tr("Center cursor:")); + mainLayout->addRow(label, m_centerCursorComboBox); + addSearchItem(label, m_centerCursorComboBox->toolTip(), m_centerCursorComboBox); + connect(m_centerCursorComboBox, QOverload::of(&QComboBox::currentIndexChanged), + this, &TextEditorPage::pageIsChanged); + } + + { + m_wrapModeComboBox = WidgetsFactory::createComboBox(this); + m_wrapModeComboBox->setToolTip(tr("Word wrap mode of editor")); + + m_wrapModeComboBox->addItem(tr("No Wrap"), (int)TextEditorConfig::WrapMode::NoWrap); + m_wrapModeComboBox->addItem(tr("Word Wrap"), (int)TextEditorConfig::WrapMode::WordWrap); + m_wrapModeComboBox->addItem(tr("Wrap Anywhere"), (int)TextEditorConfig::WrapMode::WrapAnywhere); + m_wrapModeComboBox->addItem(tr("Word Wrap Or Wrap Anywhere"), (int)TextEditorConfig::WrapMode::WordWrapOrAnywhere); + + const QString label(tr("Wrap mode:")); + mainLayout->addRow(label, m_wrapModeComboBox); + addSearchItem(label, m_wrapModeComboBox->toolTip(), m_wrapModeComboBox); + connect(m_wrapModeComboBox, QOverload::of(&QComboBox::currentIndexChanged), + this, &TextEditorPage::pageIsChanged); + } + + { + const QString label(tr("Expand Tab")); + m_expandTabCheckBox = WidgetsFactory::createCheckBox(label, this); + m_expandTabCheckBox->setToolTip(tr("Expand Tab into spaces")); + mainLayout->addRow(m_expandTabCheckBox); + addSearchItem(label, m_expandTabCheckBox->toolTip(), m_expandTabCheckBox); + connect(m_expandTabCheckBox, &QCheckBox::stateChanged, + this, &TextEditorPage::pageIsChanged); + } + + { + m_tabStopWidthSpinBox = WidgetsFactory::createSpinBox(this); + m_tabStopWidthSpinBox->setToolTip(tr("Number of spaces to use where Tab is needed")); + + m_tabStopWidthSpinBox->setRange(1, 32); + m_tabStopWidthSpinBox->setSingleStep(1); + + const QString label(tr("Tab stop width:")); + mainLayout->addRow(label, m_tabStopWidthSpinBox); + addSearchItem(label, m_tabStopWidthSpinBox->toolTip(), m_tabStopWidthSpinBox); + connect(m_tabStopWidthSpinBox, QOverload::of(&QSpinBox::valueChanged), + this, &TextEditorPage::pageIsChanged); + } +} + +void TextEditorPage::loadInternal() +{ + const auto &textConfig = ConfigMgr::getInst().getEditorConfig().getTextEditorConfig(); + + { + int idx = m_lineNumberComboBox->findData(static_cast(textConfig.getLineNumberType())); + Q_ASSERT(idx != -1); + m_lineNumberComboBox->setCurrentIndex(idx); + } + + m_textFoldingCheckBox->setChecked(textConfig.getTextFoldingEnabled()); + + { + int idx = m_inputModeComboBox->findData(static_cast(textConfig.getInputMode())); + Q_ASSERT(idx != -1); + m_inputModeComboBox->setCurrentIndex(idx); + } + + { + int idx = m_centerCursorComboBox->findData(static_cast(textConfig.getCenterCursor())); + Q_ASSERT(idx != -1); + m_centerCursorComboBox->setCurrentIndex(idx); + } + + { + int idx = m_wrapModeComboBox->findData(static_cast(textConfig.getWrapMode())); + Q_ASSERT(idx != -1); + m_wrapModeComboBox->setCurrentIndex(idx); + } + + m_expandTabCheckBox->setChecked(textConfig.getExpandTabEnabled()); + + m_tabStopWidthSpinBox->setValue(textConfig.getTabStopWidth()); +} + +void TextEditorPage::saveInternal() +{ + auto &textConfig = ConfigMgr::getInst().getEditorConfig().getTextEditorConfig(); + + { + auto lineNumber = m_lineNumberComboBox->currentData().toInt(); + textConfig.setLineNumberType(static_cast(lineNumber)); + } + + textConfig.setTextFoldingEnabled(m_textFoldingCheckBox->isChecked()); + + { + auto inputMode = m_inputModeComboBox->currentData().toInt(); + textConfig.setInputMode(static_cast(inputMode)); + } + + { + auto centerCursor = m_centerCursorComboBox->currentData().toInt(); + textConfig.setCenterCursor(static_cast(centerCursor)); + } + + { + auto wrapMode = m_wrapModeComboBox->currentData().toInt(); + textConfig.setWrapMode(static_cast(wrapMode)); + } + + textConfig.setExpandTabEnabled(m_expandTabCheckBox->isChecked()); + + textConfig.setTabStopWidth(m_tabStopWidthSpinBox->value()); + + EditorPage::notifyEditorConfigChange(); +} + +QString TextEditorPage::title() const +{ + return tr("Text Editor"); +} diff --git a/src/widgets/dialogs/settings/texteditorpage.h b/src/widgets/dialogs/settings/texteditorpage.h new file mode 100644 index 00000000..77716614 --- /dev/null +++ b/src/widgets/dialogs/settings/texteditorpage.h @@ -0,0 +1,44 @@ +#ifndef TEXTEDITORPAGE_H +#define TEXTEDITORPAGE_H + +#include "settingspage.h" + +class QComboBox; +class QCheckBox; +class QSpinBox; + +namespace vnotex +{ + class TextEditorPage : public SettingsPage + { + Q_OBJECT + public: + explicit TextEditorPage(QWidget *p_parent = nullptr); + + QString title() const Q_DECL_OVERRIDE; + + protected: + void loadInternal() Q_DECL_OVERRIDE; + + void saveInternal() Q_DECL_OVERRIDE; + + private: + void setupUI(); + + QComboBox *m_lineNumberComboBox = nullptr; + + QCheckBox *m_textFoldingCheckBox = nullptr; + + QComboBox *m_inputModeComboBox = nullptr; + + QComboBox *m_centerCursorComboBox = nullptr; + + QComboBox *m_wrapModeComboBox = nullptr; + + QCheckBox *m_expandTabCheckBox = nullptr; + + QSpinBox *m_tabStopWidthSpinBox = nullptr; + }; +} + +#endif // TEXTEDITORPAGE_H diff --git a/src/widgets/dragdropareaindicator.cpp b/src/widgets/dragdropareaindicator.cpp new file mode 100644 index 00000000..4ef3ae5d --- /dev/null +++ b/src/widgets/dragdropareaindicator.cpp @@ -0,0 +1,51 @@ +#include "dragdropareaindicator.h" + +#include +#include +#include +#include + +using namespace vnotex; + +DragDropAreaIndicator::DragDropAreaIndicator(DragDropAreaIndicatorInterface *p_interface, + const QString &p_text, + QWidget *p_parent) + : QFrame(p_parent), + m_interface(p_interface) +{ + setupUI(p_text); + + setAcceptDrops(true); +} + +void DragDropAreaIndicator::setupUI(const QString &p_text) +{ + auto mainLayout = new QHBoxLayout(this); + + auto label = new QLabel(p_text, this); + label->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter); + mainLayout->addWidget(label); +} + +void DragDropAreaIndicator::dragEnterEvent(QDragEnterEvent *p_event) +{ + if (m_interface->handleDragEnterEvent(p_event)) { + return; + } + QFrame::dragEnterEvent(p_event); +} + +void DragDropAreaIndicator::dropEvent(QDropEvent *p_event) +{ + if (m_interface->handleDropEvent(p_event)) { + hide(); + return; + } + QFrame::dropEvent(p_event); +} + +void DragDropAreaIndicator::mouseReleaseEvent(QMouseEvent *p_event) +{ + QFrame::mouseReleaseEvent(p_event); + hide(); +} diff --git a/src/widgets/dragdropareaindicator.h b/src/widgets/dragdropareaindicator.h new file mode 100644 index 00000000..32418366 --- /dev/null +++ b/src/widgets/dragdropareaindicator.h @@ -0,0 +1,42 @@ +#ifndef DRAGDROPAREAINDICATOR_H +#define DRAGDROPAREAINDICATOR_H + +#include + +namespace vnotex +{ + class DragDropAreaIndicatorInterface + { + public: + virtual ~DragDropAreaIndicatorInterface() {} + + virtual bool handleDragEnterEvent(QDragEnterEvent *p_event) = 0; + + virtual bool handleDropEvent(QDropEvent *p_event) = 0; + }; + + class DragDropAreaIndicator : public QFrame + { + Q_OBJECT + public: + DragDropAreaIndicator(DragDropAreaIndicatorInterface *p_interface, + const QString &p_text, + QWidget *p_parent = nullptr); + + protected: + // To accept specific drop. + void dragEnterEvent(QDragEnterEvent *p_event) Q_DECL_OVERRIDE; + + // Drop the data. + void dropEvent(QDropEvent *p_event) Q_DECL_OVERRIDE; + + void mouseReleaseEvent(QMouseEvent *p_event) Q_DECL_OVERRIDE; + + private: + void setupUI(const QString &p_text); + + DragDropAreaIndicatorInterface *m_interface = nullptr; + }; +} + +#endif // DRAGDROPAREAINDICATOR_H diff --git a/src/widgets/editors/editormarkdownvieweradapter.cpp b/src/widgets/editors/editormarkdownvieweradapter.cpp new file mode 100644 index 00000000..0f49d555 --- /dev/null +++ b/src/widgets/editors/editormarkdownvieweradapter.cpp @@ -0,0 +1,17 @@ +#include "editormarkdownvieweradapter.h" + +#include + +using namespace vnotex; + +EditorMarkdownViewerAdapter::EditorMarkdownViewerAdapter(Buffer *p_buffer, + QObject *p_parent) + : MarkdownViewerAdapter(p_parent), + m_buffer(p_buffer) +{ +} + +void EditorMarkdownViewerAdapter::setBuffer(Buffer *p_buffer) +{ + m_buffer = p_buffer; +} diff --git a/src/widgets/editors/editormarkdownvieweradapter.h b/src/widgets/editors/editormarkdownvieweradapter.h new file mode 100644 index 00000000..3bf2b618 --- /dev/null +++ b/src/widgets/editors/editormarkdownvieweradapter.h @@ -0,0 +1,25 @@ +#ifndef EDITORMARKDOWNVIEWERADAPTER_H +#define EDITORMARKDOWNVIEWERADAPTER_H + +#include "markdownvieweradapter.h" + +namespace vnotex +{ + class Buffer; + + class EditorMarkdownViewerAdapter : public MarkdownViewerAdapter + { + Q_OBJECT + public: + EditorMarkdownViewerAdapter(Buffer *p_buffer, QObject *p_parent = nullptr); + + void setBuffer(Buffer *p_buffer); + + public slots: + + private: + Buffer *m_buffer = nullptr; + }; +} + +#endif // EDITORMARKDOWNVIEWERADAPTER_H diff --git a/src/widgets/editors/markdowneditor.cpp b/src/widgets/editors/markdowneditor.cpp new file mode 100644 index 00000000..57c47e52 --- /dev/null +++ b/src/widgets/editors/markdowneditor.cpp @@ -0,0 +1,1023 @@ +#include "markdowneditor.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "previewhelper.h" +#include "../outlineprovider.h" + +using namespace vnotex; + +// We set the property of the clipboard to mark that we are requesting a rich paste. +static const char *c_clipboardPropertyMark = "RichPaste"; + +MarkdownEditor::Heading::Heading(const QString &p_name, int p_level, int p_blockNumber) + : m_name(p_name), + m_level(p_level), + m_blockNumber(p_blockNumber) +{ +} + +MarkdownEditor::MarkdownEditor(const MarkdownEditorConfig &p_config, + const QSharedPointer &p_editorConfig, + QWidget *p_parent) + : vte::VMarkdownEditor(p_editorConfig, p_parent), + m_config(p_config) +{ + setupShortcuts(); + + connect(m_textEdit, &vte::VTextEdit::canInsertFromMimeDataRequested, + this, &MarkdownEditor::handleCanInsertFromMimeData); + connect(m_textEdit, &vte::VTextEdit::insertFromMimeDataRequested, + this, &MarkdownEditor::handleInsertFromMimeData); + connect(m_textEdit, &vte::VTextEdit::contextMenuEventRequested, + this, &MarkdownEditor::handleContextMenuEvent); + + connect(getHighlighter(), &vte::PegMarkdownHighlighter::headersUpdated, + this, [this](const QVector &p_headerRegions) { + // TODO: insert heading sequence. + updateHeadings(p_headerRegions); + }); + connect(m_textEdit, &vte::VTextEdit::cursorLineChanged, + this, &MarkdownEditor::currentHeadingChanged); +} + +MarkdownEditor::~MarkdownEditor() +{ + +} + +void MarkdownEditor::setPreviewHelper(PreviewHelper *p_helper) +{ + auto highlighter = getHighlighter(); + connect(highlighter, &vte::PegMarkdownHighlighter::codeBlocksUpdated, + p_helper, &PreviewHelper::codeBlocksUpdated); + connect(highlighter, &vte::PegMarkdownHighlighter::mathBlocksUpdated, + p_helper, &PreviewHelper::mathBlocksUpdated); + + auto previewMgr = getPreviewMgr(); + connect(p_helper, &PreviewHelper::inplacePreviewCodeBlockUpdated, + previewMgr, &vte::PreviewMgr::updateCodeBlocks); + connect(p_helper, &PreviewHelper::inplacePreviewMathBlockUpdated, + previewMgr, &vte::PreviewMgr::updateMathBlocks); + connect(p_helper, &PreviewHelper::potentialObsoletePreviewBlocksUpdated, + previewMgr, &vte::PreviewMgr::checkBlocksForObsoletePreview); +} + +void MarkdownEditor::typeHeading(int p_level) +{ + enterInsertModeIfApplicable(); + vte::MarkdownUtils::typeHeading(m_textEdit, p_level); +} + +void MarkdownEditor::typeBold() +{ + enterInsertModeIfApplicable(); + vte::MarkdownUtils::typeBold(m_textEdit); +} + +void MarkdownEditor::typeItalic() +{ + enterInsertModeIfApplicable(); + vte::MarkdownUtils::typeItalic(m_textEdit); +} + +void MarkdownEditor::typeStrikethrough() +{ + enterInsertModeIfApplicable(); + vte::MarkdownUtils::typeStrikethrough(m_textEdit); +} + +void MarkdownEditor::typeUnorderedList() +{ + enterInsertModeIfApplicable(); + vte::MarkdownUtils::typeUnorderedList(m_textEdit); +} + +void MarkdownEditor::typeOrderedList() +{ + enterInsertModeIfApplicable(); + vte::MarkdownUtils::typeOrderedList(m_textEdit); +} + +void MarkdownEditor::typeTodoList(bool p_checked) +{ + enterInsertModeIfApplicable(); + vte::MarkdownUtils::typeTodoList(m_textEdit, p_checked); +} + +void MarkdownEditor::typeCode() +{ + enterInsertModeIfApplicable(); + vte::MarkdownUtils::typeCode(m_textEdit); +} + +void MarkdownEditor::typeCodeBlock() +{ + enterInsertModeIfApplicable(); + vte::MarkdownUtils::typeCodeBlock(m_textEdit); +} + +void MarkdownEditor::typeMath() +{ + enterInsertModeIfApplicable(); + vte::MarkdownUtils::typeMath(m_textEdit); +} + +void MarkdownEditor::typeMathBlock() +{ + enterInsertModeIfApplicable(); + vte::MarkdownUtils::typeMathBlock(m_textEdit); +} + +void MarkdownEditor::typeQuote() +{ + enterInsertModeIfApplicable(); + vte::MarkdownUtils::typeQuote(m_textEdit); +} + +void MarkdownEditor::typeLink() +{ + QString linkText; + QString linkUrl; + + // Try get Url or text from selection. + auto cursor = m_textEdit->textCursor(); + QRegularExpression urlReg("[\\.\\\\/]"); + if (cursor.hasSelection()) { + auto text = vte::TextEditUtils::getSelectedText(cursor).trimmed(); + if (!text.isEmpty() && !text.contains(QLatin1Char('\n'))) { + if (text.contains(urlReg) && QUrl::fromUserInput(text).isValid()) { + linkUrl = text; + } else { + linkText = text; + } + } + } + + // Fetch link from clipboard. + if (linkUrl.isEmpty() && linkText.isEmpty()) { + const auto clipboard = QApplication::clipboard(); + const auto mimeData = clipboard->mimeData(); + const QString text = mimeData->text().trimmed(); + // No multi-line. + if (!text.isEmpty() && !text.contains(QLatin1Char('\n'))) { + if (text.contains(urlReg) && QUrl::fromUserInput(text).isValid()) { + linkUrl = text; + } else { + linkText = text; + } + } + } + + LinkInsertDialog dialog(tr("Insert Link"), linkText, linkUrl, false, this); + if (dialog.exec() == QDialog::Accepted) { + linkText = dialog.getLinkText(); + linkUrl = dialog.getLinkUrl(); + + enterInsertModeIfApplicable(); + vte::MarkdownUtils::typeLink(m_textEdit, linkText, linkUrl); + } +} + +void MarkdownEditor::typeImage() +{ + Q_ASSERT(m_buffer); + ImageInsertDialog dialog(tr("Insert Image"), "", "", "", true, this); + + // Try fetch image from clipboard. + { + QClipboard *clipboard = QApplication::clipboard(); + const QMimeData *mimeData = clipboard->mimeData(); + + QUrl url; + if (mimeData->hasImage()) { + QImage im = qvariant_cast(mimeData->imageData()); + if (im.isNull()) { + return; + } + + dialog.setImage(im); + dialog.setImageSource(ImageInsertDialog::Source::ImageData); + } else if (mimeData->hasUrls()) { + QList urls = mimeData->urls(); + if (urls.size() == 1) { + url = urls[0]; + } + } else if (mimeData->hasText()) { + url = QUrl::fromUserInput(mimeData->text()); + } + + if (url.isValid()) { + if (url.isLocalFile()) { + dialog.setImagePath(url.toLocalFile()); + } else { + dialog.setImagePath(url.toString()); + } + } + } + + if (dialog.exec() != QDialog::Accepted) { + return; + } + + enterInsertModeIfApplicable(); + if (dialog.getImageSource() == ImageInsertDialog::Source::LocalFile) { + insertImageToBufferFromLocalFile(dialog.getImageTitle(), + dialog.getImageAltText(), + dialog.getImagePath(), + dialog.getScaledWidth()); + } else { + auto image = dialog.getImage(); + if (!image.isNull()) { + insertImageToBufferFromData(dialog.getImageTitle(), + dialog.getImageAltText(), + image, + dialog.getScaledWidth()); + } + } +} + +void MarkdownEditor::setBuffer(Buffer *p_buffer) +{ + m_buffer = p_buffer; +} + +bool MarkdownEditor::insertImageToBufferFromLocalFile(const QString &p_title, + const QString &p_altText, + const QString &p_srcImagePath, + int p_scaledWidth, + int p_scaledHeight, + bool p_insertText, + QString *p_urlInLink) +{ + auto destFileName = generateImageFileNameToInsertAs(p_title, QFileInfo(p_srcImagePath).suffix()); + + QString destFilePath; + try { + destFilePath = m_buffer->insertImage(p_srcImagePath, destFileName); + } catch (Exception e) { + MessageBoxHelper::notify(MessageBoxHelper::Warning, + QString("Failed to insert image from local file %1 (%2)").arg(p_srcImagePath, e.what()), + this); + return false; + } + + insertImageLink(p_title, + p_altText, + destFilePath, + p_scaledWidth, + p_scaledHeight, + p_insertText, + p_urlInLink); + return true; +} + +QString MarkdownEditor::generateImageFileNameToInsertAs(const QString &p_title, const QString &p_suffix) +{ + return FileUtils::generateRandomFileName(p_title, p_suffix); +} + +bool MarkdownEditor::insertImageToBufferFromData(const QString &p_title, + const QString &p_altText, + const QImage &p_image, + int p_scaledWidth, + int p_scaledHeight) +{ + // Save as PNG by default. + auto destFileName = generateImageFileNameToInsertAs(p_title, QStringLiteral("png")); + + QString destFilePath; + try { + destFilePath = m_buffer->insertImage(p_image, destFileName); + } catch (Exception e) { + MessageBoxHelper::notify(MessageBoxHelper::Warning, + QString("Failed to insert image from data (%1)").arg(e.what()), + this); + return false; + } + + insertImageLink(p_title, p_altText, destFilePath, p_scaledWidth, p_scaledHeight); + return true; +} + +void MarkdownEditor::insertImageLink(const QString &p_title, + const QString &p_altText, + const QString &p_destImagePath, + int p_scaledWidth, + int p_scaledHeight, + bool p_insertText, + QString *p_urlInLink) +{ + const auto urlInLink = getRelativeLink(p_destImagePath); + if (p_urlInLink) { + *p_urlInLink = urlInLink; + } + static_cast(m_buffer)->addInsertedImage(p_destImagePath, urlInLink); + if (p_insertText) { + const auto imageLink = vte::MarkdownUtils::generateImageLink(p_title, + urlInLink, + p_altText, + p_scaledWidth, + p_scaledHeight); + m_textEdit->insertPlainText(imageLink); + } +} + +void MarkdownEditor::handleCanInsertFromMimeData(const QMimeData *p_source, bool *p_handled, bool *p_allowed) +{ + if (p_source->hasImage() || p_source->hasUrls()) { + if (p_source->hasImage() || (!p_source->hasText() && !p_source->hasHtml())) { + // Change to Rich Paste. + QClipboard *clipboard = QApplication::clipboard(); + clipboard->setProperty(c_clipboardPropertyMark, true); + } + *p_handled = true; + *p_allowed = true; + } +} + +void MarkdownEditor::handleInsertFromMimeData(const QMimeData *p_source, bool *p_handled) +{ + QClipboard *clipboard = QApplication::clipboard(); + if (!clipboard->property(c_clipboardPropertyMark).toBool()) { + // Default paste. + return; + } else { + clipboard->setProperty(c_clipboardPropertyMark, false); + } + + if (processHtmlFromMimeData(p_source)) { + *p_handled = true; + return; + } + + if (processImageFromMimeData(p_source)) { + *p_handled = true; + return; + } + + if (processUrlFromMimeData(p_source)) { + *p_handled = true; + return; + } +} + +bool MarkdownEditor::processHtmlFromMimeData(const QMimeData *p_source) +{ + if (!p_source->hasHtml()) { + return false; + } + + // Process . + QRegExp reg("]*)src=\"([^\"]+)\"([^>]*)>"); + const QString html(p_source->html()); + if (reg.indexIn(html) != -1 && HtmlUtils::hasOnlyImgTag(html)) { + if (p_source->hasImage()) { + // Both image data and URL are embedded. + SelectDialog dialog(tr("Insert From Clipboard"), this); + dialog.addSelection(tr("Insert From URL"), 0); + dialog.addSelection(tr("Insert From Image Data"), 1); + dialog.addSelection(tr("Insert As Image Link"), 2); + + if (dialog.exec() == QDialog::Accepted) { + int selection = dialog.getSelection(); + if (selection == 1) { + // Insert from image data. + insertImageFromMimeData(p_source); + return true; + } else if (selection == 2) { + // Insert as link. + auto imageLink = vte::MarkdownUtils::generateImageLink("", reg.cap(2), ""); + m_textEdit->insertPlainText(imageLink); + return true; + } + } else { + return true; + } + } + + insertImageFromUrl(reg.cap(2)); + return true; + } + + return false; +} + +bool MarkdownEditor::processImageFromMimeData(const QMimeData *p_source) +{ + if (!p_source->hasImage()) { + return false; + } + + // Image url in the clipboard. + if (p_source->hasText()) { + SelectDialog dialog(tr("Insert From Clipboard"), this); + dialog.addSelection(tr("Insert As Image"), 0); + dialog.addSelection(tr("Insert As Text"), 1); + dialog.addSelection(tr("Insert As Image Link"), 2); + + if (dialog.exec() == QDialog::Accepted) { + int selection = dialog.getSelection(); + if (selection == 1) { + // Insert as text. + Q_ASSERT(p_source->hasText() && p_source->hasImage()); + m_textEdit->insertFromMimeDataOfBase(p_source); + return true; + } else if (selection == 2) { + // Insert as link. + auto imageLink = vte::MarkdownUtils::generateImageLink("", p_source->text(), ""); + m_textEdit->insertPlainText(imageLink); + return true; + } + } else { + return true; + } + } + + insertImageFromMimeData(p_source); + return true; +} + +bool MarkdownEditor::processUrlFromMimeData(const QMimeData *p_source) +{ + QUrl url; + if (p_source->hasUrls()) { + const auto urls = p_source->urls(); + if (urls.size() == 1) { + url = urls[0]; + } + } else if (p_source->hasText()) { + // Try to get URL from text. + const QString text = p_source->text(); + if (QFileInfo::exists(text)) { + url = QUrl::fromLocalFile(text); + } else { + url = QUrl::fromUserInput(text); + if (url.scheme() != QStringLiteral("https") && url.scheme() != QStringLiteral("http")) { + url.clear(); + } + } + } + + if (!url.isValid()) { + return false; + } + + const bool isImage = PathUtils::isImageUrl(PathUtils::urlToPath(url)); + QString localFile = url.toLocalFile(); + if (!url.isLocalFile() || !QFileInfo::exists(localFile)) { + localFile.clear(); + } + + bool isTextFile = false; + if (!isImage && !localFile.isEmpty()) { + const auto mimeType = QMimeDatabase().mimeTypeForFile(localFile); + if (mimeType.isValid() && mimeType.inherits(QStringLiteral("text/plain"))) { + isTextFile = true; + } + } + + SelectDialog dialog(tr("Insert From Clipboard"), this); + if (isImage) { + dialog.addSelection(tr("Insert As Image"), 0); + dialog.addSelection(tr("Insert As Image Link"), 1); + if (!localFile.isEmpty()) { + dialog.addSelection(tr("Insert As Relative Image Link"), 7); + } + } + + dialog.addSelection(tr("Insert As Link"), 2); + if (!localFile.isEmpty()) { + dialog.addSelection(tr("Insert As Relative Link"), 3); + + if (m_buffer->isAttachmentSupported() && !m_buffer->isAttachment(localFile)) { + dialog.addSelection(tr("Attach And Insert Link"), 6); + } + } + + dialog.addSelection(tr("Insert As Text"), 4); + if (!localFile.isEmpty() && isTextFile) { + dialog.addSelection(tr("Insert File Content"), 5); + } + + // FIXME: After calling dialog.exec(), p_source->hasUrl() returns false. + if (dialog.exec() == QDialog::Accepted) { + bool relativeLink = false; + switch (dialog.getSelection()) { + case 0: + { + // Insert As Image. + insertImageFromUrl(PathUtils::urlToPath(url)); + return true; + } + + case 7: + // Insert As Relative Image Link. + relativeLink = true; + Q_FALLTHROUGH(); + + case 1: + { + // Insert As Image Link. + QString urlInLink; + if (relativeLink) { + urlInLink = getRelativeLink(localFile); + } else { + urlInLink = url.toString(QUrl::EncodeSpaces); + } + + enterInsertModeIfApplicable(); + const auto imageLink = vte::MarkdownUtils::generateImageLink("", urlInLink, ""); + m_textEdit->insertPlainText(imageLink); + return true; + } + + case 6: + { + // Attach And Insert Link. + QStringList fileList; + fileList << localFile; + fileList = m_buffer->addAttachment(QString(), fileList); + + // Update localFile to point to the attachment file. + localFile = fileList[0]; + Q_FALLTHROUGH(); + } + + case 3: + // Insert As Relative link. + relativeLink = true; + Q_FALLTHROUGH(); + + case 2: + { + // Insert As Link. + QString linkText; + if (!localFile.isEmpty()) { + linkText = QFileInfo(localFile).fileName(); + } + + QString linkUrl; + if (relativeLink) { + Q_ASSERT(!localFile.isEmpty()); + linkUrl = getRelativeLink(localFile); + } else { + linkUrl = url.toString(QUrl::EncodeSpaces); + } + + LinkInsertDialog linkDialog(QObject::tr("Insert Link"), linkText, linkUrl, false, this); + if (linkDialog.exec() == QDialog::Accepted) { + linkText = linkDialog.getLinkText(); + linkUrl = linkDialog.getLinkUrl(); + + enterInsertModeIfApplicable(); + vte::MarkdownUtils::typeLink(m_textEdit, linkText, linkUrl); + } + + return true; + } + + case 4: + { + // Insert As Text. + enterInsertModeIfApplicable(); + if (p_source->hasText()) { + m_textEdit->insertPlainText(p_source->text()); + } else { + m_textEdit->insertPlainText(url.toString()); + } + + return true; + } + + case 5: + { + // Insert File Content. + Q_ASSERT(!localFile.isEmpty() && isTextFile); + enterInsertModeIfApplicable(); + m_textEdit->insertPlainText(FileUtils::readTextFile(localFile)); + return true; + } + + default: + Q_ASSERT(false); + break; + } + } else { + // Nothing happens. + return true; + } + + return false; +} + +void MarkdownEditor::insertImageFromMimeData(const QMimeData *p_source) +{ + QImage image = qvariant_cast(p_source->imageData()); + if (image.isNull()) { + return; + } + + ImageInsertDialog dialog(tr("Insert Image From Clipboard"), "", "", "", false, this); + dialog.setImage(image); + if (dialog.exec() == QDialog::Accepted) { + enterInsertModeIfApplicable(); + insertImageToBufferFromData(dialog.getImageTitle(), + dialog.getImageAltText(), + image, + dialog.getScaledWidth()); + } +} + +void MarkdownEditor::insertImageFromUrl(const QString &p_url) +{ + ImageInsertDialog dialog(tr("Insert Image From URL"), "", "", "", false, this); + dialog.setImagePath(p_url); + if (dialog.exec() == QDialog::Accepted) { + enterInsertModeIfApplicable(); + if (dialog.getImageSource() == ImageInsertDialog::Source::LocalFile) { + insertImageToBufferFromLocalFile(dialog.getImageTitle(), + dialog.getImageAltText(), + dialog.getImagePath(), + dialog.getScaledWidth()); + } else { + auto image = dialog.getImage(); + if (!image.isNull()) { + insertImageToBufferFromData(dialog.getImageTitle(), + dialog.getImageAltText(), + image, + dialog.getScaledWidth()); + } + } + } +} + +QString MarkdownEditor::getRelativeLink(const QString &p_path) +{ + auto relativePath = PathUtils::relativePath(PathUtils::parentDirPath(m_buffer->getContentPath()), p_path); + auto link = PathUtils::encodeSpacesInPath(QDir::fromNativeSeparators(relativePath)); + if (m_config.getPrependDotInRelativeLink()) { + PathUtils::prependDotIfRelative(link); + } + + return link; +} + +const QVector &MarkdownEditor::getHeadings() const +{ + return m_headings; +} + +int MarkdownEditor::getCurrentHeadingIndex() const +{ + int blockNumber = m_textEdit->textCursor().blockNumber(); + return getHeadingIndexByBlockNumber(blockNumber); +} + +void MarkdownEditor::updateHeadings(const QVector &p_headerRegions) +{ + auto doc = document(); + + QVector headings; + headings.reserve(p_headerRegions.size()); + + // Assume that each block contains only one line. + // Only support # syntax for now. + QRegExp headerReg(vte::MarkdownUtils::c_headerRegExp); + for (auto const ® : p_headerRegions) { + auto block = doc->findBlock(reg.m_startPos); + if (!block.isValid()) { + continue; + } + + if (!block.contains(reg.m_endPos - 1)) { + qWarning() << "header accross multiple blocks, starting from block" << block.blockNumber() << block.text(); + } + + if (headerReg.exactMatch(block.text())) { + int level = headerReg.cap(1).length(); + Heading heading(headerReg.cap(2).trimmed(), level, block.blockNumber()); + headings.append(heading); + } + } + + OutlineProvider::makePerfectHeadings(headings, m_headings); + + emit headingsChanged(); + + emit currentHeadingChanged(); +} + +int MarkdownEditor::getHeadingIndexByBlockNumber(int p_blockNumber) const +{ + if (m_headings.isEmpty()) { + return -1; + } + + int left = 0, right = m_headings.size() - 1; + while (left < right) { + int mid = left + (right - left + 1) / 2; + int val = m_headings[mid].m_blockNumber; + if (val == -1) { + // Search to right. + for (int i = mid + 1; i <= right; ++i) { + if (m_headings[i].m_blockNumber != -1) { + mid = i; + val = m_headings[i].m_blockNumber; + break; + } + } + + if (val == -1) { + // Search to left. + for (int i = mid - 1; i >= left; --i) { + if (m_headings[i].m_blockNumber != -1) { + mid = i; + val = m_headings[i].m_blockNumber; + break; + } + } + } + } + + if (val == -1) { + // No more valid values. + break; + } + + if (val == p_blockNumber) { + return mid; + } else if (val > p_blockNumber) { + right = mid - 1; + } else { + left = mid; + } + } + + if (m_headings[left].m_blockNumber <= p_blockNumber && m_headings[left].m_blockNumber != -1) { + return left; + } + // Find the last heading with block number not greater than @p_blockNumber. + return -1; +} + +void MarkdownEditor::scrollToHeading(int p_idx) +{ + if (p_idx < 0 || p_idx >= m_headings.size()) { + return; + } + + if (m_headings[p_idx].m_blockNumber == -1) { + return; + } + + scrollToLine(m_headings[p_idx].m_blockNumber, true); +} + +void MarkdownEditor::handleContextMenuEvent(QContextMenuEvent *p_event, bool *p_handled, QScopedPointer *p_menu) +{ + *p_handled = true; + p_menu->reset(m_textEdit->createStandardContextMenu(p_event->pos())); + auto menu = p_menu->data(); + + QAction *copyAct = nullptr; + QAction *pasteAct = nullptr; + QAction *firstAct = nullptr; + { + const auto actions = menu->actions(); + firstAct = actions.isEmpty() ? nullptr : actions.first(); + copyAct = WidgetUtils::findActionByObjectName(actions, "edit-copy"); + pasteAct = WidgetUtils::findActionByObjectName(actions, "edit-paste"); + } + + if (pasteAct && pasteAct->isEnabled()) { + QClipboard *clipboard = QApplication::clipboard(); + const QMimeData *mimeData = clipboard->mimeData(); + + // Rich Paste. + auto richPasteAct = new QAction(tr("Rich Paste"), menu); + WidgetUtils::addActionShortcutText(richPasteAct, + ConfigMgr::getInst().getEditorConfig().getShortcut(EditorConfig::Shortcut::RichPaste)); + connect(richPasteAct, &QAction::triggered, + this, &MarkdownEditor::richPaste); + WidgetUtils::insertActionAfter(menu, pasteAct, richPasteAct); + + if (mimeData->hasHtml()) { + // Parse To Markdown And Paste. + auto parsePasteAct = new QAction(tr("Parse To Markdown And Paste"), menu); + connect(parsePasteAct, &QAction::triggered, + this, &MarkdownEditor::parseToMarkdownAndPaste); + WidgetUtils::insertActionAfter(menu, richPasteAct, parsePasteAct); + } + } +} + +void MarkdownEditor::richPaste() +{ + QClipboard *clipboard = QApplication::clipboard(); + clipboard->setProperty(c_clipboardPropertyMark, true); + m_textEdit->paste(); + clipboard->setProperty(c_clipboardPropertyMark, false); +} + +void MarkdownEditor::setupShortcuts() +{ + const auto &editorConfig = ConfigMgr::getInst().getEditorConfig(); + + { + auto shortcut = WidgetUtils::createShortcut(editorConfig.getShortcut(EditorConfig::Shortcut::RichPaste), + this); + if (shortcut) { + QObject::connect(shortcut, &QShortcut::activated, + this, &MarkdownEditor::richPaste); + } + } +} + +void MarkdownEditor::parseToMarkdownAndPaste() +{ + if (isReadOnly()) { + return; + } + + QClipboard *clipboard = QApplication::clipboard(); + const QMimeData *mimeData = clipboard->mimeData(); + QString html(mimeData->html()); + if (!html.isEmpty()) { + emit htmlToMarkdownRequested(0, ++m_timeStamp, html); + } +} + +void MarkdownEditor::handleHtmlToMarkdownData(quint64 p_id, TimeStamp p_timeStamp, const QString &p_text) +{ + Q_UNUSED(p_id); + if (m_timeStamp == p_timeStamp && !p_text.isEmpty()) { + QString text(p_text); + + const auto &editorConfig = ConfigMgr::getInst().getEditorConfig().getMarkdownEditorConfig(); + if (editorConfig.getFetchImagesInParseAndPaste()) { + fetchImagesToLocalAndReplace(text); + } + + insertText(text); + } +} + + +static QString purifyImageTitle(QString p_title) +{ + return p_title.remove(QRegExp("[\\r\\n\\[\\]]")); +} + +void MarkdownEditor::fetchImagesToLocalAndReplace(QString &p_text) +{ + auto regs = vte::MarkdownUtils::fetchImageRegionsViaParser(p_text); + if (regs.isEmpty()) { + return; + } + + // Sort it in ascending order. + std::sort(regs.begin(), regs.end()); + + QProgressDialog proDlg(tr("Fetching images to local..."), + tr("Abort"), + 0, + regs.size(), + this); + proDlg.setWindowModality(Qt::WindowModal); + proDlg.setWindowTitle(tr("Fetch Images To Local")); + + QRegExp zhihuRegExp("^https?://www\\.zhihu\\.com/equation\\?tex=(.+)$"); + + QRegExp regExp(vte::MarkdownUtils::c_imageLinkRegExp); + for (int i = regs.size() - 1; i >= 0; --i) { + proDlg.setValue(regs.size() - 1 - i); + if (proDlg.wasCanceled()) { + break; + } + + const auto ® = regs[i]; + QString linkText = p_text.mid(reg.m_startPos, reg.m_endPos - reg.m_startPos); + if (regExp.indexIn(linkText) == -1) { + continue; + } + + const QString imageTitle = purifyImageTitle(regExp.cap(1).trimmed()); + const QString imageUrl = regExp.cap(2).trimmed(); + + const int maxUrlLength = 100; + QString urlToDisplay(imageUrl); + if (urlToDisplay.size() > maxUrlLength) { + urlToDisplay = urlToDisplay.left(maxUrlLength) + "..."; + } + proDlg.setLabelText(tr("Fetching image (%1)").arg(urlToDisplay)); + + // Handle equation from zhihu.com like http://www.zhihu.com/equation?tex=P. + if (zhihuRegExp.indexIn(imageUrl) != -1) { + QString tex = zhihuRegExp.cap(1).trimmed(); + + // Remove the +. + tex.replace(QChar('+'), " "); + + tex = QUrl::fromPercentEncoding(tex.toUtf8()); + if (tex.isEmpty()) { + continue; + } + + tex = "$" + tex + "$"; + p_text.replace(reg.m_startPos, + reg.m_endPos - reg.m_startPos, + tex); + continue; + } + + // Only handle absolute file path or network path. + QString srcImagePath; + QFileInfo info(TextUtils::purifyUrl(imageUrl)); + + // For network image. + QScopedPointer tmpFile; + + if (info.exists()) { + if (info.isAbsolute()) { + // Absolute local path. + srcImagePath = info.absoluteFilePath(); + } + } else { + // Network path. + QByteArray data = vte::Downloader::download(QUrl(imageUrl)); + if (!data.isEmpty()) { + tmpFile.reset(FileUtils::createTemporaryFile(info.suffix())); + if (tmpFile->open() && tmpFile->write(data) > -1) { + srcImagePath = tmpFile->fileName(); + } + + // Need to close it explicitly to flush cache of small file. + tmpFile->close(); + } + } + + if (srcImagePath.isEmpty()) { + continue; + } + + // Insert image without inserting text. + QString urlInLink; + bool ret = insertImageToBufferFromLocalFile(imageTitle, + QString(), + srcImagePath, + 0, + 0, + false, + &urlInLink); + if (!ret || urlInLink.isEmpty()) { + continue; + } + + // Replace URL in link. + QString newLink = QString("![%1](%2%3%4)") + .arg(imageTitle, urlInLink, regExp.cap(3), regExp.cap(6)); + p_text.replace(reg.m_startPos, + reg.m_endPos - reg.m_startPos, + newLink); + } + + proDlg.setValue(regs.size()); +} diff --git a/src/widgets/editors/markdowneditor.h b/src/widgets/editors/markdowneditor.h new file mode 100644 index 00000000..566a94e9 --- /dev/null +++ b/src/widgets/editors/markdowneditor.h @@ -0,0 +1,169 @@ +#ifndef MARKDOWNEDITOR_H +#define MARKDOWNEDITOR_H + +#include + +#include +#include + +#include + +class QMimeData; +class QMenu; + +namespace vte +{ + class MarkdownEditorConfig; +} + +namespace vnotex +{ + class PreviewHelper; + class Buffer; + class MarkdownEditorConfig; + + class MarkdownEditor : public vte::VMarkdownEditor + { + Q_OBJECT + public: + struct Heading + { + Heading() = default; + + Heading(const QString &p_name, int p_level, int p_blockNumber = -1); + + QString m_name; + + int m_level = -1; + + int m_blockNumber = -1; + }; + + MarkdownEditor(const MarkdownEditorConfig &p_config, + const QSharedPointer &p_editorConfig, + QWidget *p_parent = nullptr); + + virtual ~MarkdownEditor(); + + void setPreviewHelper(PreviewHelper *p_helper); + + void setBuffer(Buffer *p_buffer); + + // @p_level: [0, 6], 0 for none. + void typeHeading(int p_level); + + void typeBold(); + + void typeItalic(); + + void typeStrikethrough(); + + void typeUnorderedList(); + + void typeOrderedList(); + + void typeTodoList(bool p_checked); + + void typeCode(); + + void typeCodeBlock(); + + void typeMath(); + + void typeMathBlock(); + + void typeQuote(); + + void typeLink(); + + void typeImage(); + + const QVector &getHeadings() const; + int getCurrentHeadingIndex() const; + + void scrollToHeading(int p_idx); + + public slots: + void handleHtmlToMarkdownData(quint64 p_id, TimeStamp p_timeStamp, const QString &p_text); + + signals: + void headingsChanged(); + + void currentHeadingChanged(); + + void htmlToMarkdownRequested(quint64 p_id, TimeStamp p_timeStamp, const QString &p_html); + + private slots: + void handleCanInsertFromMimeData(const QMimeData *p_source, bool *p_handled, bool *p_allowed); + + void handleInsertFromMimeData(const QMimeData *p_source, bool *p_handled); + + void handleContextMenuEvent(QContextMenuEvent *p_event, bool *p_handled, QScopedPointer *p_menu); + + void richPaste(); + + void parseToMarkdownAndPaste(); + + private: + // @p_scaledWidth: 0 for not overridden. + // @p_insertText: whether insert text into the buffer after inserting image file. + // @p_urlInLink: store the url in link if not null. + bool insertImageToBufferFromLocalFile(const QString &p_title, + const QString &p_altText, + const QString &p_srcImagePath, + int p_scaledWidth = 0, + int p_scaledHeight = 0, + bool p_insertText = true, + QString *p_urlInLink = nullptr); + + bool insertImageToBufferFromData(const QString &p_title, + const QString &p_altText, + const QImage &p_image, + int p_scaledWidth = 0, + int p_scaledHeight = 0); + + void insertImageLink(const QString &p_title, + const QString &p_altText, + const QString &p_destImagePath, + int p_scaledWidth, + int p_scaledHeight, + bool p_insertText = true, + QString *p_urlInLink = nullptr); + + // Return true if it is processed. + bool processHtmlFromMimeData(const QMimeData *p_source); + + // Return true if it is processed. + bool processImageFromMimeData(const QMimeData *p_source); + + // Return true if it is processed. + bool processUrlFromMimeData(const QMimeData *p_source); + + void insertImageFromMimeData(const QMimeData *p_source); + + void insertImageFromUrl(const QString &p_url); + + QString getRelativeLink(const QString &p_path); + + void updateHeadings(const QVector &p_headerRegions); + + int getHeadingIndexByBlockNumber(int p_blockNumber) const; + + void setupShortcuts(); + + void fetchImagesToLocalAndReplace(QString &p_text); + + static QString generateImageFileNameToInsertAs(const QString &p_title, const QString &p_suffix); + + const MarkdownEditorConfig &m_config; + + Buffer *m_buffer = nullptr; + + QVector m_headings; + + // TimeStamp used as sequence number to interact with Web side. + TimeStamp m_timeStamp = 0; + }; +} + +#endif // MARKDOWNEDITOR_H diff --git a/src/widgets/editors/markdownviewer.cpp b/src/widgets/editors/markdownviewer.cpp new file mode 100644 index 00000000..3dd8e58a --- /dev/null +++ b/src/widgets/editors/markdownviewer.cpp @@ -0,0 +1,419 @@ +#include "markdownviewer.h" + +#include +#include +#include +#include +#include +#include + +#include "../webpage.h" +#include "markdownvieweradapter.h" +#include "previewhelper.h" +#include +#include +#include +#include "../widgetsfactory.h" + +using namespace vnotex; + +// We set the property of the clipboard to mark that the URL copied in the +// clipboard has been altered. +static const char *c_propertyImageUrlAltered = "CopiedImageUrlAltered"; + +// Indicate whether this clipboard change is triggered by cross copy. +static const char *c_propertyCrossCopy = "CrossCopy"; + +MarkdownViewer::MarkdownViewer(MarkdownViewerAdapter *p_adapter, + const QColor &p_background, + qreal p_zoomFactor, + QWidget *p_parent) + : WebViewer(p_parent), + m_adapter(p_adapter) +{ + m_adapter->setParent(this); + + auto page = new WebPage(this); + setPage(page); + + // Avoid white flash before loading content. + // Setting Qt::transparent will force GrayScale antialias rendering. + page->setBackgroundColor(p_background); + + if (!Utils::fuzzyEqual(p_zoomFactor, 1.0)) { + setZoomFactor(p_zoomFactor); + } + + auto channel = new QWebChannel(this); + channel->registerObject(QStringLiteral("vxAdapter"), m_adapter); + page->setWebChannel(channel); + + connect(QApplication::clipboard(), &QClipboard::changed, + this, &MarkdownViewer::handleClipboardChanged); + + connect(m_adapter, &MarkdownViewerAdapter::keyPressed, + this, &MarkdownViewer::handleWebKeyPress); + + connect(m_adapter, &MarkdownViewerAdapter::zoomed, + this, [this](bool p_zoomIn) { + p_zoomIn ? zoomIn() : zoomOut(); + }); + + connect(m_adapter, &MarkdownViewerAdapter::crossCopyReady, + this, [this](quint64 p_id, quint64 p_timeStamp, const QString &p_html) { + Q_UNUSED(p_id); + Q_UNUSED(p_timeStamp); + std::unique_ptr mimeData(new QMimeData()); + mimeData->setHtml(p_html); + ClipboardUtils::setMimeDataToClipboard(QApplication::clipboard(), mimeData.release()); + }); +} + +MarkdownViewerAdapter *MarkdownViewer::adapter() const +{ + return m_adapter; +} + +void MarkdownViewer::setPreviewHelper(PreviewHelper *p_previewHelper) +{ + connect(p_previewHelper, &PreviewHelper::graphPreviewRequested, + this, [this, p_previewHelper](quint64 p_id, + TimeStamp p_timeStamp, + const QString &p_lang, + const QString &p_text) { + if (m_adapter->isViewerReady()) { + m_adapter->graphPreviewRequested(p_id, p_timeStamp, p_lang, p_text); + } else { + p_previewHelper->handleGraphPreviewData(MarkdownViewerAdapter::PreviewData()); + } + }); + connect(p_previewHelper, &PreviewHelper::mathPreviewRequested, + this, [this, p_previewHelper](quint64 p_id, + TimeStamp p_timeStamp, + const QString &p_text) { + if (m_adapter->isViewerReady()) { + m_adapter->mathPreviewRequested(p_id, p_timeStamp, p_text); + } else { + p_previewHelper->handleMathPreviewData(MarkdownViewerAdapter::PreviewData()); + } + }); + connect(m_adapter, &MarkdownViewerAdapter::graphPreviewDataReady, + p_previewHelper, &PreviewHelper::handleGraphPreviewData); + connect(m_adapter, &MarkdownViewerAdapter::mathPreviewDataReady, + p_previewHelper, &PreviewHelper::handleMathPreviewData); +} + +void MarkdownViewer::contextMenuEvent(QContextMenuEvent *p_event) +{ + QScopedPointer menu(page()->createStandardContextMenu()); + const QList actions = menu->actions(); + +#if defined(Q_OS_WIN) + if (!m_copyImageUrlActionHooked) { + // "Copy Image URL" action will put the encoded URL to the clipboard as text + // and the URL as URLs. If the URL contains Chinese, OneNote or Word could not + // recognize it. + // We need to change it to only-space-encoded text. + QAction *copyImageUrlAct = pageAction(QWebEnginePage::CopyImageUrlToClipboard); + if (actions.contains(copyImageUrlAct)) { + connect(copyImageUrlAct, &QAction::triggered, + this, &MarkdownViewer::handleCopyImageUrlAction); + m_copyImageUrlActionHooked = true; + } + } +#endif + + // We need to replace the "Copy Image" action: + // - the default one use the fully-encoded URL to fetch the image while + // Windows seems to not recognize it. + // - We need to remove the html to let it be recognized by some web pages. + { + auto defaultCopyImageAct = pageAction(QWebEnginePage::CopyImageToClipboard); + if (actions.contains(defaultCopyImageAct)) { + QAction *copyImageAct = new QAction(defaultCopyImageAct->text(), menu.data()); + copyImageAct->setToolTip(defaultCopyImageAct->toolTip()); + connect(copyImageAct, &QAction::triggered, + this, &MarkdownViewer::copyImage); + menu->insertAction(defaultCopyImageAct, copyImageAct); + defaultCopyImageAct->setVisible(false); + } + } + + { + auto copyAct = pageAction(QWebEnginePage::Copy); + if (actions.contains(copyAct)) { + setupCrossCopyMenu(menu.data(), copyAct); + } + } + + hideUnusedActions(menu.data()); + + p_event->accept(); + + bool valid = false; + for (auto act : menu->actions()) { + // There may be one action visible with text being empty. + if (act->isVisible() && !act->text().isEmpty()) { + valid = true; + break; + } + } + + if (valid) { + menu->exec(p_event->globalPos()); + } +} + +void MarkdownViewer::handleCopyImageUrlAction() +{ + // To avoid failure of setting clipboard mime data. + QCoreApplication::processEvents(); + + QClipboard *clipboard = QApplication::clipboard(); + const QMimeData *mimeData = clipboard->mimeData(); + clipboard->setProperty(c_propertyImageUrlAltered, false); + if (clipboard->ownsClipboard() + && mimeData->hasText() + && mimeData->hasUrls()) { + QString text = mimeData->text(); + QList urls = mimeData->urls(); + if (urls.size() == 1 + && urls[0].isLocalFile() + && urls[0].toEncoded() == text) { + QString spaceOnlyText = urls[0].toString(QUrl::EncodeSpaces); + if (spaceOnlyText != text) { + // Set new mime data. + QMimeData *data = new QMimeData(); + data->setUrls(urls); + data->setText(spaceOnlyText); + ClipboardUtils::setMimeDataToClipboard(clipboard, data, QClipboard::Clipboard); + clipboard->setProperty(c_propertyImageUrlAltered, true); + qDebug() << "clipboard copy image URL altered" << spaceOnlyText; + } + } + } +} + +void MarkdownViewer::copyImage() +{ +#if defined(Q_OS_WIN) + Q_ASSERT(m_copyImageUrlActionHooked); + // triggerPageAction(QWebEnginePage::CopyImageUrlToClipboard) will not really + // trigger the corresponding action. It just do the stuff directly. + QAction *copyImageUrlAct = pageAction(QWebEnginePage::CopyImageUrlToClipboard); + copyImageUrlAct->trigger(); + + QCoreApplication::processEvents(); + + QClipboard *clipboard = QApplication::clipboard(); + if (clipboard->property(c_propertyImageUrlAltered).toBool()) { + const QMimeData *mimeData = clipboard->mimeData(); + QString imgPath; + if (mimeData->hasUrls()) { + QList urls = mimeData->urls(); + if (!urls.isEmpty() && urls[0].isLocalFile()) { + imgPath = urls[0].toLocalFile(); + } + } + + if (!imgPath.isEmpty()) { + QImage img = FileUtils::imageFromFile(imgPath); + if (!img.isNull()) { + m_copyImageTriggered = false; + ClipboardUtils::setImageToClipboard(clipboard, img, QClipboard::Clipboard); + return; + } + } + } +#endif + + m_copyImageTriggered = true; + + // Fall back. + triggerPageAction(QWebEnginePage::CopyImageToClipboard); +} + +void MarkdownViewer::handleClipboardChanged(QClipboard::Mode p_mode) +{ + if (!hasFocus() || p_mode != QClipboard::Clipboard) { + return; + } + + QClipboard *clipboard = QApplication::clipboard(); + if (!clipboard->ownsClipboard()) { + return; + } + + const QMimeData *mimeData = clipboard->mimeData(); + if (m_copyImageTriggered) { + m_copyImageTriggered = false; + removeHtmlFromImageData(clipboard, mimeData); + return; + } + + if (clipboard->property(c_propertyCrossCopy).toBool()) { + clipboard->setProperty(c_propertyCrossCopy, false); + if (mimeData->hasHtml() && !mimeData->hasImage() && !m_crossCopyTarget.isEmpty()) { + crossCopy(m_crossCopyTarget, url().toString(), mimeData->html()); + } + } +} + +void MarkdownViewer::removeHtmlFromImageData(QClipboard *p_clipboard, + const QMimeData *p_mimeData) +{ + if (!p_mimeData->hasImage()) { + return; + } + + if (p_mimeData->hasHtml()) { + qDebug() << "remove HTML from image QMimeData" << p_mimeData->html(); + QMimeData *data = new QMimeData(); + data->setImageData(p_mimeData->imageData()); + ClipboardUtils::setMimeDataToClipboard(p_clipboard, data, QClipboard::Clipboard); + } +} + +void MarkdownViewer::hideUnusedActions(QMenu *p_menu) +{ + QList unusedActions; + + // QWebEnginePage uses different actions of Back/Forward/Reload. + // [Woboq](https://code.woboq.org/qt5/qtwebengine/src/webenginewidgets/api/qwebenginepage.cpp.html#1652) + // We tell these three actions by name. + const QStringList actionNames({QWebEnginePage::tr("&Back"), + QWebEnginePage::tr("&Forward"), + QWebEnginePage::tr("&Reload")}); + + const QList actions = p_menu->actions(); + for (auto it : actions) { + if (actionNames.contains(it->text())) { + unusedActions.append(it); + } + } + + // SavePage. + QAction *act = pageAction(QWebEnginePage::SavePage); + unusedActions.append(act); + + // ViewSource. + act = pageAction(QWebEnginePage::ViewSource); + unusedActions.append(act); + + // DownloadImageToDisk. + act = pageAction(QWebEnginePage::DownloadImageToDisk); + unusedActions.append(act); + + // DownloadLinkToDisk. + act = pageAction(QWebEnginePage::DownloadLinkToDisk); + unusedActions.append(act); + + for (auto it : unusedActions) { + if (it) { + it->setVisible(false); + } + } +} + +void MarkdownViewer::handleWebKeyPress(int p_key, bool p_ctrl, bool p_shift, bool p_meta) +{ + Q_UNUSED(p_shift); +#if defined(Q_OS_MACOS) || defined(Q_OS_MAC) + bool macCtrl = p_meta; +#else + Q_UNUSED(p_meta); + bool macCtrl = false; +#endif + + switch (p_key) { + // Esc + case 27: + break; + + // Dash + case 189: + if (p_ctrl || macCtrl) { + // Zoom out. + zoomOut(); + } + break; + + // Equal + case 187: + if (p_ctrl || macCtrl) { + // Zoom in. + zoomIn(); + } + break; + + // 0 + case 48: + if (p_ctrl || macCtrl) { + // Recover zoom. + restoreZoom(); + } + break; + + default: + break; + } +} + +void MarkdownViewer::zoomOut() +{ + qreal factor = zoomFactor(); + if (factor > 0.25) { + factor -= 0.25; + setZoomFactor(factor); + emit zoomFactorChanged(factor); + } +} + +void MarkdownViewer::zoomIn() +{ + qreal factor = zoomFactor(); + factor += 0.25; + setZoomFactor(factor); + emit zoomFactorChanged(factor); +} + +void MarkdownViewer::restoreZoom() +{ + setZoomFactor(1); + emit zoomFactorChanged(1); +} + +void MarkdownViewer::setupCrossCopyMenu(QMenu *p_menu, QAction *p_copyAct) +{ + const auto &targets = m_adapter->getCrossCopyTargets(); + if (targets.isEmpty()) { + return; + } + + auto subMenu = WidgetsFactory::createMenu(tr("Cross Copy"), p_menu); + + for (const auto &target : targets) { + auto act = subMenu->addAction(target); + act->setData(target); + } + + connect(subMenu, &QMenu::triggered, + this, [this](QAction *p_act) { + // selectedText() will return a plain text, so we trigger the Copy action here. + m_crossCopyTarget = p_act->data().toString(); + + QClipboard *clipboard = QApplication::clipboard(); + clipboard->setProperty(c_propertyCrossCopy, true); + // Will handle the remaining logics in handleClipboardChanged(). + triggerPageAction(QWebEnginePage::Copy); + }); + + auto menuAct = p_menu->insertMenu(p_copyAct, subMenu); + p_menu->removeAction(p_copyAct); + p_menu->insertAction(menuAct, p_copyAct); +} + +void MarkdownViewer::crossCopy(const QString &p_target, const QString &p_baseUrl, const QString &p_html) +{ + emit m_adapter->crossCopyRequested(0, 0, p_target, p_baseUrl, p_html); +} diff --git a/src/widgets/editors/markdownviewer.h b/src/widgets/editors/markdownviewer.h new file mode 100644 index 00000000..72d8c81d --- /dev/null +++ b/src/widgets/editors/markdownviewer.h @@ -0,0 +1,74 @@ +#ifndef MARKDOWNVIEWER_H +#define MARKDOWNVIEWER_H + +#include "../webviewer.h" + +#include + +namespace vnotex +{ + class MarkdownViewerAdapter; + class PreviewHelper; + + class MarkdownViewer : public WebViewer + { + Q_OBJECT + public: + // @p_adapter will be managed by MarkdownViewer. + MarkdownViewer(MarkdownViewerAdapter *p_adapter, + const QColor &p_background, + qreal p_zoomFactor, + QWidget *p_parent = nullptr); + + MarkdownViewerAdapter *adapter() const; + + void setPreviewHelper(PreviewHelper *p_previewHelper); + + signals: + void zoomFactorChanged(qreal p_factor); + + protected: + void contextMenuEvent(QContextMenuEvent *p_event) Q_DECL_OVERRIDE; + + private slots: + void handleClipboardChanged(QClipboard::Mode p_mode); + + void handleWebKeyPress(int p_key, bool p_ctrl, bool p_shift, bool p_meta); + + private: + void handleCopyImageUrlAction(); + + // Copy the clicked image. + // Used to replace the default CopyImageToClipboard action. + void copyImage(); + + void removeHtmlFromImageData(QClipboard *p_clipboard, const QMimeData *p_mimeData); + + void hideUnusedActions(QMenu *p_menu); + + void zoomOut(); + + void zoomIn(); + + void restoreZoom(); + + void setupCrossCopyMenu(QMenu *p_menu, QAction *p_copyAct); + + // @p_baseUrl: if it is a folder, please end it with '/'. It is not used now in web side. + void crossCopy(const QString &p_target, const QString &p_baseUrl, const QString &p_html); + + // Managed by QObject. + MarkdownViewerAdapter *m_adapter = nullptr; + + // Whether this view has hooked the Copy Image Url action. + bool m_copyImageUrlActionHooked = false; + + // Whether CopyImage action has been triggered. + bool m_copyImageTriggered = false; + + // Target name of cross copy going to execute. + QString m_crossCopyTarget; + }; +} + +#endif // MARKDOWNVIEWER_H diff --git a/src/widgets/editors/markdownvieweradapter.cpp b/src/widgets/editors/markdownvieweradapter.cpp new file mode 100644 index 00000000..4b546e86 --- /dev/null +++ b/src/widgets/editors/markdownvieweradapter.cpp @@ -0,0 +1,270 @@ +#include "markdownvieweradapter.h" + +#include + +#include "../outlineprovider.h" + +using namespace vnotex; + +MarkdownViewerAdapter::MarkdownData::MarkdownData(const QString &p_text, + int p_lineNumber, + const QString &p_anchor) + : m_text(p_text), + m_position(p_lineNumber, p_anchor) +{ +} + +MarkdownViewerAdapter::Position::Position(int p_lineNumber, const QString &p_anchor) + : m_lineNumber(p_lineNumber), + m_anchor(p_anchor) +{ +} + +QJsonObject MarkdownViewerAdapter::Position::toJson() const +{ + QJsonObject obj; + obj["lineNumber"] = m_lineNumber; + obj["anchor"] = m_anchor; + return obj; +} + +MarkdownViewerAdapter::PreviewData::PreviewData(quint64 p_id, + TimeStamp p_timeStamp, + const QString &p_format, + const QByteArray &p_data, + bool p_needScale) + : m_id(p_id), + m_timeStamp(p_timeStamp), + m_format(p_format), + m_data(p_data), + m_needScale(p_needScale) +{ +} + +MarkdownViewerAdapter::Heading::Heading(const QString &p_name, int p_level, const QString &p_anchor) + : m_name(p_name), + m_level(p_level), + m_anchor(p_anchor) +{ +} + +MarkdownViewerAdapter::Heading MarkdownViewerAdapter::Heading::fromJson(const QJsonObject &p_obj) +{ + return Heading(p_obj.value(QStringLiteral("name")).toString(), + p_obj.value(QStringLiteral("level")).toInt(), + p_obj.value(QStringLiteral("anchor")).toString()); +} + +MarkdownViewerAdapter::MarkdownViewerAdapter(QObject *p_parent) + : QObject(p_parent) +{ +} + +MarkdownViewerAdapter::~MarkdownViewerAdapter() +{ +} + +void MarkdownViewerAdapter::setText(int p_revision, + const QString &p_text, + int p_lineNumber) +{ + if (p_revision == m_revision) { + // Only sync line number position. + scrollToPosition(Position(p_lineNumber, "")); + return; + } + + m_revision = p_revision; + if (m_viewerReady) { + emit textUpdated(p_text); + scrollToPosition(Position(p_lineNumber, "")); + } else { + m_pendingData.reset(new MarkdownData(p_text, p_lineNumber, "")); + } +} + +void MarkdownViewerAdapter::setReady(bool p_ready) +{ + if (m_viewerReady == p_ready) { + return; + } + + m_viewerReady = p_ready; + if (m_viewerReady) { + if (m_pendingData) { + emit textUpdated(m_pendingData->m_text); + scrollToPosition(m_pendingData->m_position); + m_pendingData.reset(); + } + + emit viewerReady(); + } + +} + +void MarkdownViewerAdapter::scrollToLine(int p_lineNumber) +{ + if (p_lineNumber == -1) { + return; + } + Q_ASSERT(m_viewerReady); + m_topLineNumber = -1; + emit editLineNumberUpdated(p_lineNumber); +} + +void MarkdownViewerAdapter::setTopLineNumber(int p_lineNumber) +{ + if (m_topLineNumber == p_lineNumber) { + return; + } + + m_topLineNumber = p_lineNumber; +} + +void MarkdownViewerAdapter::scrollToPosition(const Position &p_pos) +{ + if (p_pos.m_lineNumber >= 0) { + scrollToLine(p_pos.m_lineNumber); + } else { + // Anchor. + scrollToAnchor(p_pos.m_anchor); + } +} + +int MarkdownViewerAdapter::getTopLineNumber() const +{ + return m_topLineNumber; +} + +void MarkdownViewerAdapter::setGraphPreviewData(quint64 p_id, + quint64 p_timeStamp, + const QString &p_format, + const QString &p_data, + bool p_base64, + bool p_needScale) +{ + auto ba = p_data.toUtf8(); + if (p_base64 && !ba.isEmpty()) { + ba = QByteArray::fromBase64(ba); + } + emit graphPreviewDataReady(PreviewData(p_id, p_timeStamp, p_format, ba, p_needScale)); +} + +bool MarkdownViewerAdapter::isViewerReady() const +{ + return m_viewerReady; +} + +void MarkdownViewerAdapter::setMathPreviewData(quint64 p_id, + quint64 p_timeStamp, + const QString &p_format, + const QString &p_data, + bool p_base64, + bool p_needScale) +{ + auto ba = p_data.toUtf8(); + if (p_base64 && !ba.isEmpty()) { + ba = QByteArray::fromBase64(ba); + } + emit mathPreviewDataReady(PreviewData(p_id, p_timeStamp, p_format, ba, p_needScale)); +} + +void MarkdownViewerAdapter::setHeadings(const QJsonArray &p_headings) +{ + QVector headings; + headings.reserve(p_headings.size()); + for (auto const &arr : p_headings) { + headings.push_back(MarkdownViewerAdapter::Heading::fromJson(arr.toObject())); + } + + OutlineProvider::makePerfectHeadings(headings, m_headings); + m_currentHeadingIndex = -1; + + emit headingsChanged(); +} + +void MarkdownViewerAdapter::setCurrentHeadingAnchor(int p_index, const QString &p_anchor) +{ + m_currentHeadingIndex = -1; + if (p_index > -1) { + for (int i = p_index; i < m_headings.size(); ++i) { + if (m_headings[i].m_anchor == p_anchor) { + m_currentHeadingIndex = i; + break; + } + } + } + + emit currentHeadingChanged(); +} + +const QVector &MarkdownViewerAdapter::getHeadings() const +{ + return m_headings; +} + +int MarkdownViewerAdapter::getCurrentHeadingIndex() const +{ + return m_currentHeadingIndex; +} + +void MarkdownViewerAdapter::scrollToHeading(int p_idx) +{ + if (p_idx < 0 || p_idx >= m_headings.size()) { + return; + } + + if (m_headings[p_idx].m_anchor.isEmpty()) { + return; + } + + scrollToPosition(Position(-1, m_headings[p_idx].m_anchor)); +} + +void MarkdownViewerAdapter::scrollToAnchor(const QString &p_anchor) +{ + if (p_anchor.isEmpty()) { + return; + } + Q_ASSERT(m_viewerReady); + m_currentHeadingIndex = -1; + emit anchorScrollRequested(p_anchor); +} + +void MarkdownViewerAdapter::scroll(bool p_up) +{ + emit scrollRequested(p_up); +} + +void MarkdownViewerAdapter::setKeyPress(int p_key, bool p_ctrl, bool p_shift, bool p_meta) +{ + emit keyPressed(p_key, p_ctrl, p_shift, p_meta); +} + +void MarkdownViewerAdapter::zoom(bool p_zoomIn) +{ + emit zoomed(p_zoomIn); +} + +void MarkdownViewerAdapter::setMarkdownFromHtml(quint64 p_id, quint64 p_timeStamp, const QString &p_text) +{ + emit htmlToMarkdownReady(p_id, p_timeStamp, p_text); +} + +void MarkdownViewerAdapter::setCrossCopyTargets(const QJsonArray &p_targets) +{ + m_crossCopyTargets.clear(); + for (const auto &target : p_targets) { + m_crossCopyTargets << target.toString(); + } +} + +const QStringList &MarkdownViewerAdapter::getCrossCopyTargets() const +{ + return m_crossCopyTargets; +} + +void MarkdownViewerAdapter::setCrossCopyResult(quint64 p_id, quint64 p_timeStamp, const QString &p_html) +{ + emit crossCopyReady(p_id, p_timeStamp, p_html); +} diff --git a/src/widgets/editors/markdownvieweradapter.h b/src/widgets/editors/markdownvieweradapter.h new file mode 100644 index 00000000..46527db3 --- /dev/null +++ b/src/widgets/editors/markdownvieweradapter.h @@ -0,0 +1,222 @@ +#ifndef MARKDOWNVIEWERADAPTER_H +#define MARKDOWNVIEWERADAPTER_H + +#include +#include +#include +#include +#include + +#include + +namespace vnotex +{ + // Adapter and interface between CPP and JS. + class MarkdownViewerAdapter : public QObject + { + Q_OBJECT + public: + struct Position + { + Position() = default; + + Position(int p_lineNumber, const QString &p_anchor); + + QJsonObject toJson() const; + + int m_lineNumber = -1; + + QString m_anchor; + }; + + struct MarkdownData + { + MarkdownData() = default; + + MarkdownData(const QString &p_text, + int p_lineNumber, + const QString &p_anchor); + + QString m_text; + + Position m_position; + }; + + struct PreviewData + { + PreviewData() = default; + + PreviewData(quint64 p_id, + TimeStamp p_timeStamp, + const QString &p_format, + const QByteArray &p_data, + bool p_needScale); + + quint64 m_id = 0; + + quint64 m_timeStamp = 0; + + QString m_format; + + QByteArray m_data; + + bool m_needScale = false; + }; + + struct Heading + { + Heading() = default; + + Heading(const QString &p_name, int p_level, const QString &p_anchor = QString()); + + static Heading fromJson(const QJsonObject &p_obj); + + QString m_name; + + int m_level = -1; + + QString m_anchor; + }; + + explicit MarkdownViewerAdapter(QObject *p_parent = nullptr); + + virtual ~MarkdownViewerAdapter(); + + // @p_lineNumber: the line number needed to sync, -1 for invalid. + void setText(int p_revision, + const QString &p_text, + int p_lineNumber); + + void scrollToPosition(const Position &p_pos); + + int getTopLineNumber() const; + + bool isViewerReady() const; + + const QVector &getHeadings() const; + int getCurrentHeadingIndex() const; + + void scrollToHeading(int p_idx); + + void scroll(bool p_up); + + const QStringList &getCrossCopyTargets() const; + + // Functions to be called from web side. + public slots: + void setReady(bool p_ready); + + // The line number at the top. + void setTopLineNumber(int p_lineNumber); + + // Web sets back the preview result. + void setGraphPreviewData(quint64 p_id, + quint64 p_timeStamp, + const QString &p_format, + const QString &p_data, + bool p_base64 = false, + bool p_needScale = false); + + // Web sets back the preview result. + void setMathPreviewData(quint64 p_id, + quint64 p_timeStamp, + const QString &p_format, + const QString &p_data, + bool p_base64 = false, + bool p_needScale = false); + + // Set the headings. + void setHeadings(const QJsonArray &p_headings); + + // Set current heading anchor. + void setCurrentHeadingAnchor(int p_index, const QString &p_anchor); + + void setKeyPress(int p_key, bool p_ctrl, bool p_shift, bool p_meta); + + void zoom(bool p_zoomIn); + + // Set back the result of htmlToMarkdown() call. + void setMarkdownFromHtml(quint64 p_id, quint64 p_timeStamp, const QString &p_text); + + void setCrossCopyTargets(const QJsonArray &p_targets); + + void setCrossCopyResult(quint64 p_id, quint64 p_timeStamp, const QString &p_html); + + // Signals to be connected at web side. + signals: + // Current Markdown text is updated. + void textUpdated(const QString &p_text); + + // Current editor line number is updated. + void editLineNumberUpdated(int p_lineNumber); + + // Request to preview graph. + void graphPreviewRequested(quint64 p_id, + quint64 p_timeStamp, + const QString &p_lang, + const QString &p_text); + + // Request to preview math. + void mathPreviewRequested(quint64 p_id, + quint64 p_timeStamp, + const QString &p_text); + + void anchorScrollRequested(const QString &p_anchor); + + void scrollRequested(bool p_up); + + void htmlToMarkdownRequested(quint64 p_id, quint64 p_timeStamp, const QString &p_html); + + void crossCopyRequested(quint64 p_id, + quint64 p_timeStamp, + const QString &p_target, + const QString &p_baseUrl, + const QString &p_html); + + // Signals to be connected at cpp side. + signals: + void graphPreviewDataReady(const PreviewData &p_data); + + void mathPreviewDataReady(const PreviewData &p_data); + + void viewerReady(); + + void headingsChanged(); + + void currentHeadingChanged(); + + void keyPressed(int p_key, bool p_ctrl, bool p_shift, bool p_meta); + + void zoomed(bool p_zoomIn); + + void htmlToMarkdownReady(quint64 p_id, quint64 p_timeStamp, const QString &p_text); + + void crossCopyReady(quint64 p_id, quint64 p_timeStamp, const QString &p_html); + + private: + void scrollToLine(int p_lineNumber); + + void scrollToAnchor(const QString &p_anchor); + + int m_revision = 0; + + // Whether web side viewer is ready to handle text update. + bool m_viewerReady = false; + + // Pending Markdown data for the viewer once it is ready. + QScopedPointer m_pendingData; + + // Source line number of the top element node at web side. + int m_topLineNumber = -1; + + // Headings from web side. + QVector m_headings; + + int m_currentHeadingIndex = -1; + + // Targets supported by cross copy. Set by web. + QStringList m_crossCopyTargets; + }; +} + +#endif // MARKDOWNVIEWERADAPTER_H diff --git a/src/widgets/editors/previewhelper.cpp b/src/widgets/editors/previewhelper.cpp new file mode 100644 index 00000000..2a187f6c --- /dev/null +++ b/src/widgets/editors/previewhelper.cpp @@ -0,0 +1,416 @@ +#include "previewhelper.h" + +#include +#include +#include + +#include +#include +#include + +#include +#include + +#include "markdowneditor.h" + +using namespace vnotex; + +PreviewHelper::CodeBlockPreviewData::CodeBlockPreviewData(const vte::peg::FencedCodeBlock &p_codeBlock) + : m_startBlock(p_codeBlock.m_startBlock), + m_endBlock(p_codeBlock.m_endBlock), + m_lang(p_codeBlock.m_lang) +{ +} + +void PreviewHelper::CodeBlockPreviewData::updateInplacePreview(QTextDocument *p_doc, + const QPixmap &p_image, + const QString &p_imageName, + QRgb p_background, + int p_tabStopWidth) +{ + const auto block = p_doc->findBlockByNumber(m_endBlock); + if (block.isValid()) { + m_inplacePreview.reset(new vte::PreviewItem()); + m_inplacePreview->m_startPos = block.position(); + m_inplacePreview->m_endPos = m_inplacePreview->m_startPos + block.length(); + m_inplacePreview->m_blockPos = m_inplacePreview->m_startPos; + m_inplacePreview->m_blockNumber = m_endBlock; + m_inplacePreview->m_padding = vte::PreviewMgr::calculateBlockMargin(block, p_tabStopWidth); + m_inplacePreview->m_name = p_imageName; + m_inplacePreview->m_backgroundColor = p_background; + m_inplacePreview->m_isBlockwise = true; + m_inplacePreview->m_image = p_image; + } else { + m_inplacePreview.clear(); + } +} + +PreviewHelper::MathBlockPreviewData::MathBlockPreviewData(const vte::peg::MathBlock &p_mathBlock) + : m_blockNumber(p_mathBlock.m_blockNumber), + m_previewedAsBlock(p_mathBlock.m_previewedAsBlock), + m_index(p_mathBlock.m_index), + m_length(p_mathBlock.m_length) +{ +} + +void PreviewHelper::MathBlockPreviewData::updateInplacePreview(QTextDocument *p_doc, + const QPixmap &p_image, + const QString &p_imageName, + int p_tabStopWidth) +{ + const auto block = p_doc->findBlockByNumber(m_blockNumber); + if (block.isValid()) { + m_inplacePreview.reset(new vte::PreviewItem()); + m_inplacePreview->m_startPos = block.position() + m_index; + m_inplacePreview->m_endPos = m_inplacePreview->m_startPos + m_length; + m_inplacePreview->m_blockPos = block.position(); + m_inplacePreview->m_blockNumber = m_blockNumber; + m_inplacePreview->m_padding = vte::PreviewMgr::calculateBlockMargin(block, p_tabStopWidth); + m_inplacePreview->m_name = p_imageName; + m_inplacePreview->m_isBlockwise = m_previewedAsBlock; + m_inplacePreview->m_image = p_image; + } else { + m_inplacePreview.clear(); + } +} + +int PreviewHelper::GraphPreviewData::s_imageIndex = 0; + +PreviewHelper::GraphPreviewData::GraphPreviewData(TimeStamp p_timeStamp, + const QString &p_format, + const QByteArray &p_data, + QRgb p_background, + qreal p_scaleFactor) + : m_timeStamp(p_timeStamp), + m_background(p_background) +{ + if (p_data.isEmpty()) { + return; + } + + m_name = QString::number(++s_imageIndex); + + bool needScale = p_scaleFactor > 1.01; + if (needScale) { + if (p_format == QStringLiteral("svg")) { + m_image = Utils::svgToPixmap(p_data, p_background, p_scaleFactor); + } else { + QPixmap tmpImg; + tmpImg.loadFromData(p_data, p_format.toLocal8Bit().data()); + m_image = tmpImg.scaledToWidth(tmpImg.width() * p_scaleFactor, Qt::SmoothTransformation); + } + } else { + m_image.loadFromData(p_data, p_format.toLocal8Bit().data()); + } +} + +bool PreviewHelper::GraphPreviewData::isNull() const +{ + return m_timeStamp == 0; +} + +PreviewHelper::PreviewHelper(MarkdownEditor *p_editor, QObject *p_parent) + : QObject(p_parent), + m_inplacePreviewSources(SourceFlag::FlowChart + | SourceFlag::Mermaid + | SourceFlag::WaveDrom + | SourceFlag::PlantUml + | SourceFlag::Graphviz + | SourceFlag::Math), + m_codeBlockCache(100, nullptr), + m_mathBlockCache(100, nullptr) +{ + setMarkdownEditor(p_editor); +} + +void PreviewHelper::codeBlocksUpdated(vte::TimeStamp p_timeStamp, + const QVector &p_codeBlocks) +{ + Q_UNUSED(p_timeStamp); + if (!m_inplacePreviewEnabled) { + return; + } + + ++m_codeBlockTimeStamp; + m_codeBlocksData.clear(); + + bool needUpdateEditorInplacePreview = true; + + for (const auto &cb : p_codeBlocks) { + const auto needPreview = isLangNeedPreview(cb.m_lang); + if (!needPreview.first && !needPreview.second) { + continue; + } + + m_codeBlocksData.append(CodeBlockPreviewData(cb)); + const int blockPreviewIdx = m_codeBlocksData.size() - 1; + + bool cacheHit = false; + auto &cachedData = m_codeBlockCache.get(cb.m_text); + if (cachedData) { + cacheHit = true; + cachedData->m_timeStamp = m_codeBlockTimeStamp; + m_codeBlocksData[blockPreviewIdx].updateInplacePreview(m_document, + cachedData->m_image, + cachedData->m_name, + cachedData->m_background, + m_tabStopWidth); + } + + if (m_inplacePreviewEnabled && needPreview.first && !cacheHit) { + // No need to update in-place preview for now. + needUpdateEditorInplacePreview = false; + m_codeBlocksData[blockPreviewIdx].m_text = cb.m_text; + inplacePreviewCodeBlock(blockPreviewIdx); + } + } + + if (needUpdateEditorInplacePreview) { + updateEditorInplacePreviewCodeBlock(); + } +} + +bool PreviewHelper::checkPreviewSourceLang(SourceFlag p_flag, const QString &p_lang) const +{ + switch (p_flag) { + case SourceFlag::FlowChart: + return p_lang == QStringLiteral("flow") || p_lang == QStringLiteral("flowchart"); + + case SourceFlag::WaveDrom: + return p_lang == QStringLiteral("wavedrom"); + + case SourceFlag::Mermaid: + return p_lang == QStringLiteral("mermaid"); + + case SourceFlag::PlantUml: + return p_lang == QStringLiteral("puml") || p_lang == QStringLiteral("plantuml"); + + case SourceFlag::Graphviz: + return p_lang == QStringLiteral("dot"); + + case SourceFlag::Math: + return p_lang == QStringLiteral("mathjax"); + } + + return false; +} + +QPair PreviewHelper::isLangNeedPreview(const QString &p_lang) const +{ + QPair res(false, false); + if ((isInplacePreviewSourceEnabled(SourceFlag::FlowChart) && checkPreviewSourceLang(SourceFlag::FlowChart, p_lang)) + || (isInplacePreviewSourceEnabled(SourceFlag::WaveDrom) && checkPreviewSourceLang(SourceFlag::WaveDrom, p_lang)) + || (isInplacePreviewSourceEnabled(SourceFlag::Mermaid) && checkPreviewSourceLang(SourceFlag::Mermaid, p_lang)) + || (isInplacePreviewSourceEnabled(SourceFlag::PlantUml) && checkPreviewSourceLang(SourceFlag::PlantUml, p_lang)) + || (isInplacePreviewSourceEnabled(SourceFlag::Graphviz) && checkPreviewSourceLang(SourceFlag::Graphviz, p_lang)) + || (isInplacePreviewSourceEnabled(SourceFlag::Math) && checkPreviewSourceLang(SourceFlag::Math, p_lang))) { + res.first = res.second = true; + } + return res; +} + +bool PreviewHelper::isInplacePreviewSourceEnabled(SourceFlag p_flag) const +{ + return m_inplacePreviewSources & p_flag; +} + +void PreviewHelper::inplacePreviewCodeBlock(int p_blockPreviewIdx) +{ + const auto &blockData = m_codeBlocksData[p_blockPreviewIdx]; + Q_ASSERT(!blockData.m_text.isEmpty()); + if (checkPreviewSourceLang(SourceFlag::FlowChart, blockData.m_lang) + || checkPreviewSourceLang(SourceFlag::WaveDrom, blockData.m_lang) + || checkPreviewSourceLang(SourceFlag::Mermaid, blockData.m_lang) + || checkPreviewSourceLang(SourceFlag::PlantUml, blockData.m_lang) + || checkPreviewSourceLang(SourceFlag::Graphviz, blockData.m_lang) + || checkPreviewSourceLang(SourceFlag::Math, blockData.m_lang)) { + emit graphPreviewRequested(p_blockPreviewIdx, + m_codeBlockTimeStamp, + blockData.m_lang, + TextUtils::removeCodeBlockFence(blockData.m_text)); + } +} + +void PreviewHelper::handleGraphPreviewData(const MarkdownViewerAdapter::PreviewData &p_data) +{ + if (p_data.m_timeStamp != m_codeBlockTimeStamp) { + return; + } + if (p_data.m_id >= m_codeBlocksData.size() || p_data.m_data.isEmpty()) { + updateEditorInplacePreviewCodeBlock(); + return; + } + + auto &blockData = m_codeBlocksData[p_data.m_id]; + auto previewData = QSharedPointer::create(p_data.m_timeStamp, + p_data.m_format, + p_data.m_data, + 0, + p_data.m_needScale ? getEditorScaleFactor() : 1); + m_codeBlockCache.set(blockData.m_text, previewData); + blockData.m_text.clear(); + + blockData.updateInplacePreview(m_document, + previewData->m_image, + previewData->m_name, + previewData->m_background, + m_tabStopWidth); + + updateEditorInplacePreviewCodeBlock(); +} + +void PreviewHelper::updateEditorInplacePreviewCodeBlock() +{ + QSet obsoleteBlocks; + QVector> previewItems; + previewItems.reserve(m_codeBlocksData.size()); + for (const auto &blockData : m_codeBlocksData) { + if (blockData.m_inplacePreview) { + if (!blockData.m_inplacePreview->m_image.isNull()) { + previewItems.append(blockData.m_inplacePreview); + } else { + obsoleteBlocks.insert(blockData.m_inplacePreview->m_blockNumber); + } + } else { + obsoleteBlocks.insert(blockData.m_endBlock); + } + } + + if (previewItems.isEmpty() && m_previousInplacePreviewCodeBlockSize == 0) { + return; + } + + emit inplacePreviewCodeBlockUpdated(previewItems); + + m_previousInplacePreviewCodeBlockSize = previewItems.size(); + + if (!obsoleteBlocks.isEmpty()) { + emit potentialObsoletePreviewBlocksUpdated(obsoleteBlocks.toList()); + } + + m_codeBlockCache.setCapacityHint(m_codeBlocksData.size()); +} + +void PreviewHelper::setMarkdownEditor(MarkdownEditor *p_editor) +{ + Q_ASSERT(!m_editor); + m_editor = p_editor; + if (m_editor) { + m_document = m_editor->document(); + m_tabStopWidth = m_editor->getConfig().m_tabStopWidth; + } +} + +void PreviewHelper::mathBlocksUpdated(const QVector &p_mathBlocks) +{ + if (!m_inplacePreviewEnabled || !isInplacePreviewSourceEnabled(SourceFlag::Math)) { + return; + } + + ++m_mathBlockTimeStamp; + m_mathBlocksData.clear(); + m_mathBlocksData.reserve(p_mathBlocks.size()); + + bool needUpdateEditorInplacePreview = true; + + for (const auto &mb : p_mathBlocks) { + m_mathBlocksData.append(MathBlockPreviewData(mb)); + const int blockPreviewIdx = m_mathBlocksData.size() - 1; + + bool cacheHit = false; + auto &cachedData = m_mathBlockCache.get(mb.m_text); + if (cachedData) { + cacheHit = true; + cachedData->m_timeStamp = m_mathBlockTimeStamp; + m_mathBlocksData[blockPreviewIdx].updateInplacePreview(m_document, + cachedData->m_image, + cachedData->m_name, + m_tabStopWidth); + } + + if (!cacheHit) { + needUpdateEditorInplacePreview = false; + m_mathBlocksData[blockPreviewIdx].m_text = mb.m_text; + inplacePreviewMathBlock(blockPreviewIdx); + } + } + + if (needUpdateEditorInplacePreview) { + updateEditorInplacePreviewMathBlock(); + } +} + +void PreviewHelper::inplacePreviewMathBlock(int p_blockPreviewIdx) +{ + const auto &blockData = m_mathBlocksData[p_blockPreviewIdx]; + Q_ASSERT(!blockData.m_text.isEmpty()); + emit mathPreviewRequested(p_blockPreviewIdx, m_mathBlockTimeStamp, blockData.m_text); +} + +void PreviewHelper::updateEditorInplacePreviewMathBlock() +{ + QSet obsoleteBlocks; + QVector> previewItems; + previewItems.reserve(m_mathBlocksData.size()); + for (const auto &blockData : m_mathBlocksData) { + if (blockData.m_inplacePreview) { + if (!blockData.m_inplacePreview->m_image.isNull()) { + previewItems.append(blockData.m_inplacePreview); + } else { + obsoleteBlocks.insert(blockData.m_inplacePreview->m_blockNumber); + } + } else { + obsoleteBlocks.insert(blockData.m_blockNumber); + } + } + + if (previewItems.isEmpty() && m_previousInplacePreviewMathBlockSize == 0) { + return; + } + + emit inplacePreviewMathBlockUpdated(previewItems); + + m_previousInplacePreviewMathBlockSize = previewItems.size(); + + if (!obsoleteBlocks.isEmpty()) { + emit potentialObsoletePreviewBlocksUpdated(obsoleteBlocks.toList()); + } + + m_mathBlockCache.setCapacityHint(m_mathBlocksData.size()); +} + +void PreviewHelper::handleMathPreviewData(const MarkdownViewerAdapter::PreviewData &p_data) +{ + if (p_data.m_timeStamp != m_mathBlockTimeStamp) { + return; + } + if (p_data.m_id >= m_mathBlocksData.size() || p_data.m_data.isEmpty()) { + updateEditorInplacePreviewMathBlock(); + return; + } + + auto &blockData = m_mathBlocksData[p_data.m_id]; + auto previewData = QSharedPointer::create(p_data.m_timeStamp, + p_data.m_format, + p_data.m_data, + 0, + p_data.m_needScale ? getEditorScaleFactor() : 1); + m_mathBlockCache.set(blockData.m_text, previewData); + blockData.m_text.clear(); + + blockData.updateInplacePreview(m_document, + previewData->m_image, + previewData->m_name, + m_tabStopWidth); + + updateEditorInplacePreviewMathBlock(); +} + +qreal PreviewHelper::getEditorScaleFactor() const +{ + if (m_editor) { + return m_editor->getConfig().m_scaleFactor; + } + + return 1; +} diff --git a/src/widgets/editors/previewhelper.h b/src/widgets/editors/previewhelper.h new file mode 100644 index 00000000..7f6b693f --- /dev/null +++ b/src/widgets/editors/previewhelper.h @@ -0,0 +1,221 @@ +#ifndef PREVIEWHELPER_H +#define PREVIEWHELPER_H + +#include +#include + +#include +#include +#include +#include "markdownvieweradapter.h" + +class QTimer; +class QTextDocument; + +namespace vte +{ + namespace peg + { + struct FencedCodeBlock; + struct MathBlock; + } + + struct PreviewItem; +} + +namespace vnotex +{ + class MarkdownEditor; + + // Helper to manage in-place preview and focus preview. + class PreviewHelper : public QObject + { + Q_OBJECT + public: + enum SourceFlag + { + FlowChart = 0x1, + Mermaid = 0x2, + WaveDrom = 0x4, + PlantUml = 0x8, + Graphviz = 0x10, + Math = 0x20 + }; + Q_DECLARE_FLAGS(SourceFlags, SourceFlag); + + PreviewHelper(MarkdownEditor *p_editor, QObject *p_parent = nullptr); + + void setMarkdownEditor(MarkdownEditor *p_editor); + + public slots: + void codeBlocksUpdated(vte::TimeStamp p_timeStamp, + const QVector &p_codeBlocks); + + void mathBlocksUpdated(const QVector &p_mathBlocks); + + void handleGraphPreviewData(const MarkdownViewerAdapter::PreviewData &p_data); + + void handleMathPreviewData(const MarkdownViewerAdapter::PreviewData &p_data); + + signals: + // Request to preview graph. + // There must be a corresponding call to handleGraphPreviewData(). + void graphPreviewRequested(quint64 p_id, + TimeStamp p_timeStamp, + const QString &p_lang, + const QString &p_text); + + // Request to preview math. + // There must be a corresponding call to handleMathPreviewData(). + void mathPreviewRequested(quint64 p_id, + TimeStamp p_timeStamp, + const QString &p_text); + + // Request to do in-place preview for @p_previewItems. + void inplacePreviewCodeBlockUpdated(const QVector> &p_previewItems); + + // Request to do in-place preview for @p_previewItems. + void inplacePreviewMathBlockUpdated(const QVector> &p_previewItems); + + void potentialObsoletePreviewBlocksUpdated(const QList &p_blocks); + + private: + // Preview data of each related code block. + struct CodeBlockPreviewData + { + CodeBlockPreviewData() = default; + + CodeBlockPreviewData(const vte::peg::FencedCodeBlock &p_codeBlock); + + void updateInplacePreview(QTextDocument *p_doc, + const QPixmap &p_image, + const QString &p_imageName, + QRgb p_background, + int p_tabStopWidth); + + // Start and end block of the fenced code block. + int m_startBlock = 0; + int m_endBlock = 0; + + QString m_lang; + + // Including the fence text. + // Will be filled only when preview is needed. + QString m_text; + + QSharedPointer m_inplacePreview; + }; + + struct MathBlockPreviewData + { + MathBlockPreviewData() = default; + + MathBlockPreviewData(const vte::peg::MathBlock &p_mathBlock); + + void updateInplacePreview(QTextDocument *p_doc, + const QPixmap &p_image, + const QString &p_imageName, + int p_tabStopWidth); + + // Block number for in-place preview. + int m_blockNumber = -1; + + // Whether it should be previewed as block or not. + bool m_previewedAsBlock = false; + + // Start index wihtin block with number m_blockNumber, including the start mark. + int m_index = -1; + + // Length of this math in block with number m_blockNumber, including the end mark. + int m_length = -1; + + // Including the guarding marks. + // Will be filled only when preview is needed. + QString m_text; + + QSharedPointer m_inplacePreview; + }; + + // Data of the preview result. + struct GraphPreviewData + { + GraphPreviewData() = default; + + GraphPreviewData(TimeStamp p_timeStamp, + const QString &p_format, + const QByteArray &p_data, + QRgb p_background = 0x0, + qreal p_scaleFactor = 1); + + bool isNull() const; + + TimeStamp m_timeStamp = 0; + + QPixmap m_image; + + // Name of the image for identification in resource manager. + QString m_name; + + // Background color to override. + // 0x0 indicates it is not specified. + QRgb m_background = 0x0; + + // An increasing index to used as the image name. + static int s_imageIndex; + }; + + // Return . + QPair isLangNeedPreview(const QString &p_lang) const; + + bool isInplacePreviewSourceEnabled(SourceFlag p_flag) const; + + bool checkPreviewSourceLang(SourceFlag p_flag, const QString &p_lang) const; + + // Inplace preview code block m_codeBlocksData[@p_blockPreviewIdx]. + void inplacePreviewCodeBlock(int p_blockPreviewIdx); + + void inplacePreviewMathBlock(int p_blockPreviewIdx); + + void updateEditorInplacePreviewCodeBlock(); + + void updateEditorInplacePreviewMathBlock(); + + qreal getEditorScaleFactor() const; + + MarkdownEditor *m_editor = nullptr; + + QTextDocument *m_document = nullptr; + + // Need to init it in the constructor. + SourceFlags m_inplacePreviewSources; + + bool m_inplacePreviewEnabled = true; + + TimeStamp m_codeBlockTimeStamp = 0; + + TimeStamp m_mathBlockTimeStamp = 0; + + // Sorted by startBlock in ascending order. + QVector m_codeBlocksData; + + QVector m_mathBlocksData; + + // Tab stop width of the editor, used for block margin calculation. + int m_tabStopWidth = 4; + + // To record the size of previous inplace preview of code block. + int m_previousInplacePreviewCodeBlockSize = 0; + + // To record the size of previous inplace preview of math block. + int m_previousInplacePreviewMathBlockSize = 0; + + // {text} -> GraphPreviewData. + vte::LruCache> m_codeBlockCache; + + vte::LruCache> m_mathBlockCache; + }; +} + +Q_DECLARE_OPERATORS_FOR_FLAGS(vnotex::PreviewHelper::SourceFlags) + +#endif // PREVIEWHELPER_H diff --git a/src/widgets/editors/texteditor.cpp b/src/widgets/editors/texteditor.cpp new file mode 100644 index 00000000..e3ca9def --- /dev/null +++ b/src/widgets/editors/texteditor.cpp @@ -0,0 +1,11 @@ +#include "texteditor.h" + +#include + +using namespace vnotex; + +TextEditor::TextEditor(const QSharedPointer &p_config, + QWidget *p_parent) + : vte::VTextEditor(p_config, p_parent) +{ +} diff --git a/src/widgets/editors/texteditor.h b/src/widgets/editors/texteditor.h new file mode 100644 index 00000000..3f9f9b91 --- /dev/null +++ b/src/widgets/editors/texteditor.h @@ -0,0 +1,17 @@ +#ifndef TEXTEDITOR_H +#define TEXTEDITOR_H + +#include + +namespace vnotex +{ + class TextEditor : public vte::VTextEditor + { + Q_OBJECT + public: + TextEditor(const QSharedPointer &p_config, + QWidget *p_parent = nullptr); + }; +} + +#endif // TEXTEDITOR_H diff --git a/src/widgets/editreaddiscardaction.cpp b/src/widgets/editreaddiscardaction.cpp new file mode 100644 index 00000000..6b1ee96d --- /dev/null +++ b/src/widgets/editreaddiscardaction.cpp @@ -0,0 +1,58 @@ +#include "editreaddiscardaction.h" + +#include +#include + +#include "widgetsfactory.h" + +using namespace vnotex; + +EditReadDiscardAction::EditReadDiscardAction(const QIcon &p_editIcon, + const QString &p_editText, + const QIcon &p_readIcon, + const QString &p_readText, + const QIcon &p_discardIcon, + const QString &p_discardText, + QObject *p_parent) + : BiAction(p_editIcon, + p_editText, + p_readIcon, + p_readText, + p_parent) +{ + m_readMenu.reset(WidgetsFactory::createMenu(nullptr)); + m_discardAct = m_readMenu->addAction(p_discardIcon, + p_discardText, + m_readMenu.data(), + [this]() { + emit triggered(Action::Discard); + }); + setStateMenu(State::Alternative, m_readMenu.data()); + + connect(this, &BiAction::triggered, + this, [this]() { + switch (previousState()) { + case State::Default: + emit triggered(Action::Edit); + break; + + case State::Alternative: + emit triggered(Action::Read); + break; + + default: + Q_ASSERT(false); + break; + } + }); +} + +EditReadDiscardAction::~EditReadDiscardAction() +{ + +} + +QAction *EditReadDiscardAction::getDiscardAction() const +{ + return m_discardAct; +} diff --git a/src/widgets/editreaddiscardaction.h b/src/widgets/editreaddiscardaction.h new file mode 100644 index 00000000..bdced1d5 --- /dev/null +++ b/src/widgets/editreaddiscardaction.h @@ -0,0 +1,43 @@ +#ifndef EDITREADDISCARDACTION_H +#define EDITREADDISCARDACTION_H + +#include "biaction.h" + +#include + +namespace vnotex +{ + class EditReadDiscardAction : public BiAction + { + Q_OBJECT + public: + enum Action + { + Edit, + Read, + Discard + }; + + EditReadDiscardAction(const QIcon &p_editIcon, + const QString &p_editText, + const QIcon &p_readIcon, + const QString &p_readText, + const QIcon &p_discardIcon, + const QString &p_discardText, + QObject *p_parent = nullptr); + + ~EditReadDiscardAction(); + + QAction *getDiscardAction() const; + + signals: + void triggered(Action p_act); + + private: + QScopedPointer m_readMenu; + + QAction *m_discardAct = nullptr; + }; +} + +#endif // EDITREADDISCARDACTION_H diff --git a/src/widgets/filesystemviewer.cpp b/src/widgets/filesystemviewer.cpp new file mode 100644 index 00000000..46460430 --- /dev/null +++ b/src/widgets/filesystemviewer.cpp @@ -0,0 +1,230 @@ +#include "filesystemviewer.h" + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include "widgetsfactory.h" +#include "dialogs/filepropertiesdialog.h" +#include "treeview.h" + +using namespace vnotex; + +FileSystemViewer::FileSystemViewer(QWidget *p_parent) + : QWidget(p_parent) +{ + setupUI(); +} + +void FileSystemViewer::setupUI() +{ + auto mainLayout = new QVBoxLayout(this); + mainLayout->setContentsMargins(0, 0, 0, 0); + + auto fileModel = new QFileSystemModel(this); + + m_viewer = new TreeView(this); + m_viewer->setModel(fileModel); + m_viewer->setSelectionMode(QAbstractItemView::ExtendedSelection); + m_viewer->setContextMenuPolicy(Qt::CustomContextMenu); + m_viewer->setHeaderHidden(true); + // Show only the Name column. + for (int i = 1; i < fileModel->columnCount(); ++i) { + m_viewer->hideColumn(i); + } + + connect(m_viewer, &QTreeView::customContextMenuRequested, + this, [this](const QPoint &p_pos) { + // @p_pos is the position in the coordinate of parent widget if parent is a popup. + auto pos = p_pos; + if (m_fixContextMenuPos) { + pos = mapFromParent(p_pos); + pos = m_viewer->mapFromParent(pos); + } + auto index = m_viewer->indexAt(pos); + QScopedPointer menu(WidgetsFactory::createMenu()); + if (index.isValid()) { + createContextMenuOnItem(menu.data()); + } + + if (!menu->isEmpty()) { + menu->exec(m_viewer->mapToGlobal(pos)); + } + }); + connect(m_viewer, &QTreeView::activated, + this, [this](const QModelIndex &p_index) { + if (!this->fileModel()->isDir(p_index)) { + QStringList files; + files << this->fileModel()->filePath(p_index); + emit openFiles(files); + } + }); + + auto index = fileModel->setRootPath(QDir::homePath()); + m_viewer->setRootIndex(index); + + mainLayout->addWidget(m_viewer); + + setFocusProxy(m_viewer); + + connect(m_viewer, &QTreeView::expanded, + this, &FileSystemViewer::resizeTreeToContents); + connect(m_viewer, &QTreeView::collapsed, + this, &FileSystemViewer::resizeTreeToContents); + connect(fileModel, &QFileSystemModel::directoryLoaded, + this, &FileSystemViewer::resizeTreeToContents); +} + +void FileSystemViewer::resizeTreeToContents() +{ + m_viewer->resizeColumnToContents(0); +} + +QFileSystemModel *FileSystemViewer::fileModel() const +{ + return static_cast(m_viewer->model()); +} + +int FileSystemViewer::selectedCount() const +{ + return m_viewer->selectionModel()->selectedRows().size(); +} + +QModelIndex FileSystemViewer::getSelectedIndex() const +{ + const auto modelIndexList = m_viewer->selectionModel()->selectedRows(); + return modelIndexList.size() == 1 ? modelIndexList[0] : QModelIndex(); +} + +void FileSystemViewer::setRootPath(const QString &p_rootPath) +{ + auto model = fileModel(); + auto index = model->setRootPath(p_rootPath); + if (!index.isValid()) { + qWarning() << "failed to set root path to" << p_rootPath; + index = model->setRootPath(""); + } + + m_viewer->setRootIndex(index); + resizeTreeToContents(); +} + +QString FileSystemViewer::rootPath() const +{ + return fileModel()->rootPath(); +} + +QStringList FileSystemViewer::getSelectedPaths() const +{ + const auto modelIndexList = m_viewer->selectionModel()->selectedRows(); + auto model = fileModel(); + QStringList filePaths; + for (const auto &index : modelIndexList) { + filePaths << model->filePath(index); + } + + return filePaths; +} + +void FileSystemViewer::createContextMenuOnItem(QMenu *p_menu) +{ + auto act = createAction(Action::Open, p_menu); + p_menu->addAction(act); + + act = createAction(Action::Delete, p_menu); + p_menu->addAction(act); + + const auto modelIndexList = m_viewer->selectionModel()->selectedRows(); + if (modelIndexList.size() == 1) { + act = createAction(Action::CopyPath, p_menu); + p_menu->addAction(act); + + act = createAction(Action::Properties, p_menu); + p_menu->addAction(act); + } +} + +QAction *FileSystemViewer::createAction(Action p_act, QObject *p_parent) +{ + QAction *act = nullptr; + const auto &themeMgr = VNoteX::getInst().getThemeMgr(); + switch (p_act) { + case Action::Open: + act = new QAction(tr("&Open"), p_parent); + connect(act, &QAction::triggered, + this, [this]() { + auto paths = getSelectedPaths(); + Q_ASSERT(paths.size() > 0); + emit openFiles(paths); + }); + break; + + case Action::Delete: + act = new QAction(tr("&Delete"), p_parent); + connect(act, &QAction::triggered, + this, [this]() { + auto paths = getSelectedPaths(); + emit removeFiles(paths); + }); + break; + + case Action::Properties: + act = new QAction(IconUtils::fetchIconWithDisabledState(themeMgr.getIconFile("properties.svg")), + tr("&Properties"), + p_parent); + connect(act, &QAction::triggered, + this, [this]() { + auto paths = getSelectedPaths(); + Q_ASSERT(paths.size() == 1); + FilePropertiesDialog dialog(paths[0], this); + int ret = dialog.exec(); + if (ret) { + auto newName = dialog.getFileName(); + if (newName != PathUtils::fileName(paths[0])) { + // Rename. + emit renameFile(paths[0], newName); + } + } + }); + break; + + case Action::CopyPath: + act = new QAction(tr("Cop&y Path"), p_parent); + connect(act, &QAction::triggered, + this, [this]() { + auto paths = getSelectedPaths(); + Q_ASSERT(paths.size() == 1); + ClipboardUtils::setTextToClipboard(paths[0]); + VNoteX::getInst().showStatusMessageShort(tr("Copied path: %1").arg(paths[0])); + }); + break; + } + return act; +} + +void FileSystemViewer::scrollToAndSelect(const QStringList &p_paths) +{ + auto selectionModel = m_viewer->selectionModel(); + selectionModel->clear(); + + bool isFirst = true; + auto model = fileModel(); + for (const auto &pa : p_paths) { + auto index = model->index(pa); + if (index.isValid()) { + if (isFirst) { + m_viewer->scrollTo(index); + isFirst = false; + } + selectionModel->select(index, QItemSelectionModel::SelectCurrent); + } + } +} diff --git a/src/widgets/filesystemviewer.h b/src/widgets/filesystemviewer.h new file mode 100644 index 00000000..1ad9106c --- /dev/null +++ b/src/widgets/filesystemviewer.h @@ -0,0 +1,67 @@ +#ifndef FILESYSTEMVIEWER_H +#define FILESYSTEMVIEWER_H + +#include +#include + +class QTreeView; +class QFileSystemModel; +class QMenu; + +namespace vnotex +{ + class FileSystemViewer : public QWidget + { + Q_OBJECT + public: + explicit FileSystemViewer(QWidget *p_parent = nullptr); + + int selectedCount() const; + + void setRootPath(const QString &p_rootPath); + + QString rootPath() const; + + QStringList getSelectedPaths() const; + + void scrollToAndSelect(const QStringList &p_paths); + + signals: + void renameFile(const QString &p_path, const QString &p_name); + + // Should detect children relationship. + void removeFiles(const QStringList &p_paths); + + void openFiles(const QStringList &p_paths); + + private slots: + // Resize the first column. + void resizeTreeToContents(); + + private: + enum Action { + Open, + Delete, + Properties, + CopyPath + }; + + void setupUI(); + + QFileSystemModel *fileModel() const; + + // Valid only when there is only one selected index. + QModelIndex getSelectedIndex() const; + + void createContextMenuOnItem(QMenu *p_menu); + + QAction *createAction(Action p_act, QObject *p_parent); + + // Managed by QObject. + QTreeView *m_viewer = nullptr; + + bool m_fixContextMenuPos = true; + }; +} + +#endif // FILESYSTEMVIEWER_H diff --git a/src/widgets/findandreplacewidget.cpp b/src/widgets/findandreplacewidget.cpp new file mode 100644 index 00000000..3ec7516a --- /dev/null +++ b/src/widgets/findandreplacewidget.cpp @@ -0,0 +1,267 @@ +#include "findandreplacewidget.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "lineedit.h" +#include "widgetsfactory.h" +#include +#include +#include +#include "propertydefs.h" +#include "configmgr.h" +#include "widgetconfig.h" + +using namespace vnotex; + +FindAndReplaceWidget::FindAndReplaceWidget(QWidget *p_parent) + : QWidget(p_parent) +{ + m_findTextTimer = new QTimer(this); + m_findTextTimer->setSingleShot(true); + m_findTextTimer->setInterval(500); + connect(m_findTextTimer, &QTimer::timeout, + this, [this]() { + emit findTextChanged(m_findLineEdit->text(), m_options); + }); + + setupUI(); + + auto options = ConfigMgr::getInst().getWidgetConfig().getFindAndReplaceOptions(); + setFindOptions(options); +} + +void FindAndReplaceWidget::setupUI() +{ + auto mainLayout = new QVBoxLayout(this); + + // Title. + { + auto titleLayout = new QHBoxLayout(); + titleLayout->setContentsMargins(0, 0, 0, 0); + mainLayout->addLayout(titleLayout); + + auto label = new QLabel(tr("Find And Replace"), this); + titleLayout->addWidget(label); + + const auto &themeMgr = VNoteX::getInst().getThemeMgr(); + auto iconFile = themeMgr.getIconFile(QStringLiteral("close.svg")); + auto closeBtn = new QToolButton(this); + closeBtn->setProperty(PropertyDefs::s_actionToolButton, true); + titleLayout->addWidget(closeBtn); + + auto closeAct = new QAction(IconUtils::fetchIcon(iconFile), QString(), closeBtn); + closeBtn->setDefaultAction(closeAct); + connect(closeAct, &QAction::triggered, + this, &FindAndReplaceWidget::close); + } + + auto gridLayout = new QGridLayout(); + gridLayout->setContentsMargins(0, 0, 0, 0); + mainLayout->addLayout(gridLayout); + + // Find. + { + auto label = new QLabel(tr("Find:"), this); + + m_findLineEdit = WidgetsFactory::createLineEdit(this); + m_findLineEdit->setPlaceholderText(tr("Type to search")); + connect(m_findLineEdit, &QLineEdit::textChanged, + m_findTextTimer, QOverload<>::of(&QTimer::start)); + + auto findNextBtn = new QPushButton(tr("Find &Next"), this); + findNextBtn->setDefault(true); + connect(findNextBtn, &QPushButton::clicked, + this, &FindAndReplaceWidget::findNext); + + auto findPrevBtn = new QPushButton(tr("Find &Previous"), this); + connect(findPrevBtn, &QPushButton::clicked, + this, &FindAndReplaceWidget::findPrevious); + + gridLayout->addWidget(label, 0, 0); + gridLayout->addWidget(m_findLineEdit, 0, 1); + gridLayout->addWidget(findNextBtn, 0, 2); + gridLayout->addWidget(findPrevBtn, 0, 3); + } + + // Replace. + { + auto label = new QLabel(tr("Replace with:"), this); + + m_replaceLineEdit = WidgetsFactory::createLineEdit(this); + m_replaceLineEdit->setPlaceholderText(tr("\\1, \\2 for back reference in regular expression")); + m_replaceRelatedWidgets.push_back(m_replaceLineEdit); + + auto replaceBtn = new QPushButton(tr("Replace"), this); + connect(replaceBtn, &QPushButton::clicked, + this, &FindAndReplaceWidget::replace); + m_replaceRelatedWidgets.push_back(replaceBtn); + + auto replaceFindBtn = new QPushButton(tr("Replace And Find"), this); + connect(replaceFindBtn, &QPushButton::clicked, + this, &FindAndReplaceWidget::replaceAndFind); + m_replaceRelatedWidgets.push_back(replaceFindBtn); + + auto replaceAllBtn = new QPushButton(tr("Replace All"), this); + connect(replaceAllBtn, &QPushButton::clicked, + this, &FindAndReplaceWidget::replaceAll); + m_replaceRelatedWidgets.push_back(replaceAllBtn); + + gridLayout->addWidget(label, 1, 0); + gridLayout->addWidget(m_replaceLineEdit, 1, 1); + gridLayout->addWidget(replaceBtn, 1, 2); + gridLayout->addWidget(replaceFindBtn, 1, 3); + gridLayout->addWidget(replaceAllBtn, 1, 4); + } + + // Options. + { + auto optionLayout = new QHBoxLayout(); + optionLayout->setContentsMargins(0, 0, 0, 0); + gridLayout->addLayout(optionLayout, 2, 1, 1, 4); + + m_caseSensitiveCheckBox = WidgetsFactory::createCheckBox(tr("&Case sensitive"), this); + connect(m_caseSensitiveCheckBox, &QCheckBox::stateChanged, + this, &FindAndReplaceWidget::updateFindOptions); + optionLayout->addWidget(m_caseSensitiveCheckBox); + + m_wholeWordOnlyCheckBox = WidgetsFactory::createCheckBox(tr("&Whole word only"), this); + connect(m_wholeWordOnlyCheckBox, &QCheckBox::stateChanged, + this, &FindAndReplaceWidget::updateFindOptions); + optionLayout->addWidget(m_wholeWordOnlyCheckBox); + + m_regularExpressionCheckBox = WidgetsFactory::createCheckBox(tr("Re&gular expression"), this); + connect(m_regularExpressionCheckBox, &QCheckBox::stateChanged, + this, &FindAndReplaceWidget::updateFindOptions); + optionLayout->addWidget(m_regularExpressionCheckBox); + + m_incrementalSearchCheckBox = WidgetsFactory::createCheckBox(tr("&Incremental search"), this); + connect(m_incrementalSearchCheckBox, &QCheckBox::stateChanged, + this, &FindAndReplaceWidget::updateFindOptions); + optionLayout->addWidget(m_incrementalSearchCheckBox); + + optionLayout->addStretch(); + } +} + +void FindAndReplaceWidget::close() +{ + hide(); +} + +void FindAndReplaceWidget::setReplaceEnabled(bool p_enabled) +{ + for (auto widget : m_replaceRelatedWidgets) { + widget->setEnabled(p_enabled); + } +} + +void FindAndReplaceWidget::keyPressEvent(QKeyEvent *p_event) +{ + switch (p_event->key()) { + case Qt::Key_Escape: + close(); + return; + + case Qt::Key_Return: + { + const int modifiers = p_event->modifiers(); + if (modifiers != Qt::ShiftModifier && modifiers != Qt::NoModifier) { + break; + } + + if (!m_findLineEdit->hasFocus() && !m_replaceLineEdit->hasFocus()) { + break; + } + + if (modifiers == Qt::ShiftModifier) { + findPrevious(); + } else { + findNext(); + } + return; + } + + default: + break; + } + QWidget::keyPressEvent(p_event); +} + +void FindAndReplaceWidget::findNext() +{ + +} + +void FindAndReplaceWidget::findPrevious() +{ + +} + +void FindAndReplaceWidget::updateFindOptions() +{ + m_options = FindOption::None; + + if (m_caseSensitiveCheckBox->isChecked()) { + m_options |= FindOption::CaseSensitive; + } + if (m_wholeWordOnlyCheckBox->isChecked()) { + m_options |= FindOption::WholeWordOnly; + } + if (m_regularExpressionCheckBox->isChecked()) { + m_options |= FindOption::RegularExpression; + } + if (m_incrementalSearchCheckBox->isChecked()) { + m_options |= FindOption::IncrementalSearch; + } + + ConfigMgr::getInst().getWidgetConfig().setFindAndReplaceOptions(m_options); +} + +void FindAndReplaceWidget::replace() +{ + +} + +void FindAndReplaceWidget::replaceAndFind() +{ + +} + +void FindAndReplaceWidget::replaceAll() +{ + +} + +void FindAndReplaceWidget::setFindOptions(FindOptions p_options) +{ + if (p_options == m_options) { + return; + } + + m_options = p_options; + m_caseSensitiveCheckBox->setChecked(m_options & FindOption::CaseSensitive); + m_wholeWordOnlyCheckBox->setChecked(m_options & FindOption::WholeWordOnly); + m_regularExpressionCheckBox->setChecked(m_options & FindOption::RegularExpression); + m_incrementalSearchCheckBox->setChecked(m_options & FindOption::IncrementalSearch); +} + +void FindAndReplaceWidget::open(const QString &p_text) +{ + show(); + + if (!p_text.isEmpty()) { + m_findLineEdit->setText(p_text); + } + + m_findLineEdit->setFocus(); + m_findLineEdit->selectAll(); +} diff --git a/src/widgets/findandreplacewidget.h b/src/widgets/findandreplacewidget.h new file mode 100644 index 00000000..ae3e60f0 --- /dev/null +++ b/src/widgets/findandreplacewidget.h @@ -0,0 +1,72 @@ +#ifndef FINDANDREPLACEWIDGET_H +#define FINDANDREPLACEWIDGET_H + +#include + +#include + +#include + +class QLineEdit; +class QCheckBox; +class QTimer; + +namespace vnotex +{ + class FindAndReplaceWidget : public QWidget + { + Q_OBJECT + public: + explicit FindAndReplaceWidget(QWidget *p_parent = nullptr); + + void setReplaceEnabled(bool p_enabled); + + void open(const QString &p_text); + + void close(); + + signals: + void findTextChanged(const QString &p_text, FindOptions p_options); + + protected: + void keyPressEvent(QKeyEvent *p_event) Q_DECL_OVERRIDE; + + private slots: + void findNext(); + + void findPrevious(); + + void updateFindOptions(); + + void replace(); + + void replaceAndFind(); + + void replaceAll(); + + private: + void setupUI(); + + void setFindOptions(FindOptions p_options); + + QLineEdit *m_findLineEdit = nullptr; + + QLineEdit *m_replaceLineEdit = nullptr; + + QVector m_replaceRelatedWidgets; + + QCheckBox *m_caseSensitiveCheckBox = nullptr; + + QCheckBox *m_wholeWordOnlyCheckBox = nullptr; + + QCheckBox *m_regularExpressionCheckBox = nullptr; + + QCheckBox *m_incrementalSearchCheckBox = nullptr; + + FindOptions m_options = FindOption::None; + + QTimer *m_findTextTimer = nullptr; + }; +} + +#endif // FINDANDREPLACEWIDGET_H diff --git a/src/widgets/fullscreentoggleaction.cpp b/src/widgets/fullscreentoggleaction.cpp new file mode 100644 index 00000000..69099788 --- /dev/null +++ b/src/widgets/fullscreentoggleaction.cpp @@ -0,0 +1,53 @@ +#include "fullscreentoggleaction.h" + +#include + +using namespace vnotex; + +FullScreenToggleAction::FullScreenToggleAction(QWidget *p_window, + const QIcon &p_icon, + QObject *p_parent) + : BiAction(p_icon, + tr("F&ull Screen"), + QIcon(), + tr("Exit F&ull Screen"), + p_parent), + m_window(p_window) +{ + setCheckable(true); + + if (m_window) { + m_window->installEventFilter(this); + } + + connect(this, &QAction::triggered, + this, [this](bool p_checked) { + if ((p_checked && !m_window->isFullScreen()) + || (!p_checked && m_window->isFullScreen())) { + setWindowFullScreen(m_window, p_checked); + } + }); +} + +bool FullScreenToggleAction::eventFilter(QObject *p_object, QEvent *p_event) +{ + if (p_object == m_window) { + if (p_event->type() == QEvent::WindowStateChange) { + if (m_window->isFullScreen() != isChecked()) { + trigger(); + } + } + } + + return false; +} + +void FullScreenToggleAction::setWindowFullScreen(QWidget *p_window, bool p_set) +{ + Q_ASSERT(p_window); + if (p_set) { + p_window->setWindowState(p_window->windowState() | Qt::WindowFullScreen); + } else { + p_window->setWindowState(p_window->windowState() & ~Qt::WindowFullScreen); + } +} diff --git a/src/widgets/fullscreentoggleaction.h b/src/widgets/fullscreentoggleaction.h new file mode 100644 index 00000000..579a5152 --- /dev/null +++ b/src/widgets/fullscreentoggleaction.h @@ -0,0 +1,26 @@ +#ifndef FULLSCREENTOGGLEACTION_H +#define FULLSCREENTOGGLEACTION_H + +#include "biaction.h" + +namespace vnotex +{ + class FullScreenToggleAction : public BiAction + { + Q_OBJECT + public: + FullScreenToggleAction(QWidget *p_window, + const QIcon &p_icon, + QObject *p_parent = nullptr); + + static void setWindowFullScreen(QWidget *p_window, bool p_set); + + protected: + bool eventFilter(QObject *p_object, QEvent *p_event) Q_DECL_OVERRIDE; + + private: + QWidget *m_window; + }; +} // ns vnotex + +#endif // FULLSCREENTOGGLEACTION_H diff --git a/src/widgets/lineedit.cpp b/src/widgets/lineedit.cpp new file mode 100644 index 00000000..0abc3bfe --- /dev/null +++ b/src/widgets/lineedit.cpp @@ -0,0 +1,82 @@ +#include "lineedit.h" + +#include + +#include + +using namespace vnotex; + +LineEdit::LineEdit(QWidget *p_parent) + : QLineEdit(p_parent) +{ +} + +LineEdit::LineEdit(const QString &p_contents, QWidget *p_parent) + : QLineEdit(p_contents, p_parent) +{ +} + +void LineEdit::keyPressEvent(QKeyEvent *p_event) +{ + // Note that QKeyEvent starts with isAccepted() == true, so you do not + // need to call QKeyEvent::accept() - just do not call the base class + // implementation if you act upon the key. + bool accept = false; + int modifiers = p_event->modifiers(); + switch (p_event->key()) { + case Qt::Key_H: + // Backspace. + if (WidgetUtils::isViControlModifier(modifiers)) { + backspace(); + accept = true; + } + + break; + + case Qt::Key_W: + // Delete one word backward. + if (WidgetUtils::isViControlModifier(modifiers)) { + if (!hasSelectedText()) { + cursorWordBackward(true); + } + + backspace(); + accept = true; + } + + break; + + case Qt::Key_U: + { + if (WidgetUtils::isViControlModifier(modifiers)) { + if (hasSelectedText()) { + backspace(); + } else { + int pos = cursorPosition(); + if (pos > 0) { + cursorBackward(true, pos); + backspace(); + } + } + + accept = true; + } + + break; + } + + default: + break; + } + + if (!accept) { + QLineEdit::keyPressEvent(p_event); + } +} + +void LineEdit::selectBaseName(QLineEdit *p_lineEdit) +{ + auto name = p_lineEdit->text(); + int dotIndex = name.lastIndexOf('.'); + p_lineEdit->setSelection(0, (dotIndex == -1) ? name.size() : dotIndex); +} diff --git a/src/widgets/lineedit.h b/src/widgets/lineedit.h new file mode 100644 index 00000000..321b62dd --- /dev/null +++ b/src/widgets/lineedit.h @@ -0,0 +1,24 @@ +#ifndef LINEEDIT_H +#define LINEEDIT_H + +#include + +namespace vnotex +{ + // A line edit with Vi-like shortcuts like Ctlr+W/U/H. + class LineEdit : public QLineEdit + { + Q_OBJECT + public: + explicit LineEdit(QWidget *p_parent = nullptr); + + LineEdit(const QString &p_contents, QWidget *p_parent = nullptr); + + static void selectBaseName(QLineEdit *p_lineEdit); + + protected: + void keyPressEvent(QKeyEvent *p_event) Q_DECL_OVERRIDE; + }; +} + +#endif // LINEEDIT_H diff --git a/src/widgets/lineeditdelegate.cpp b/src/widgets/lineeditdelegate.cpp new file mode 100644 index 00000000..8c5219e0 --- /dev/null +++ b/src/widgets/lineeditdelegate.cpp @@ -0,0 +1,42 @@ +#include "lineeditdelegate.h" + +#include "lineedit.h" + +using namespace vnotex; + +LineEditDelegate::LineEditDelegate(QObject *p_parent) + : QStyledItemDelegate(p_parent) +{ +} + +QWidget *LineEditDelegate::createEditor(QWidget *p_parent, + const QStyleOptionViewItem &p_option, + const QModelIndex &p_index) const +{ + Q_UNUSED(p_option); + Q_UNUSED(p_index); + return new LineEdit(p_parent); +} + +void LineEditDelegate::setEditorData(QWidget *p_editor, const QModelIndex &p_index) const +{ + const auto text = p_index.model()->data(p_index, Qt::EditRole).toString(); + auto edit = static_cast(p_editor); + edit->setText(text); +} + +void LineEditDelegate::setModelData(QWidget *p_editor, + QAbstractItemModel *p_model, + const QModelIndex &p_index) const +{ + auto edit = static_cast(p_editor); + p_model->setData(p_index, edit->text(), Qt::EditRole); +} + +void LineEditDelegate::updateEditorGeometry(QWidget *p_editor, + const QStyleOptionViewItem &p_option, + const QModelIndex &p_index) const +{ + Q_UNUSED(p_index); + p_editor->setGeometry(p_option.rect); +} diff --git a/src/widgets/lineeditdelegate.h b/src/widgets/lineeditdelegate.h new file mode 100644 index 00000000..2d4a954f --- /dev/null +++ b/src/widgets/lineeditdelegate.h @@ -0,0 +1,30 @@ +#ifndef LINEEDITDELEGATE_H +#define LINEEDITDELEGATE_H + +#include + +namespace vnotex +{ + class LineEditDelegate : public QStyledItemDelegate + { + Q_OBJECT + public: + LineEditDelegate(QObject *p_parent = nullptr); + + QWidget *createEditor(QWidget *p_parent, + const QStyleOptionViewItem &p_option, + const QModelIndex &p_index) const Q_DECL_OVERRIDE; + + void setEditorData(QWidget *p_editor, const QModelIndex &p_index) const Q_DECL_OVERRIDE; + + void setModelData(QWidget *p_editor, + QAbstractItemModel *p_model, + const QModelIndex &p_index) const Q_DECL_OVERRIDE; + + void updateEditorGeometry(QWidget *p_editor, + const QStyleOptionViewItem &p_option, + const QModelIndex &p_index) const Q_DECL_OVERRIDE; + }; +} + +#endif // LINEEDITDELEGATE_H diff --git a/src/widgets/listwidget.cpp b/src/widgets/listwidget.cpp new file mode 100644 index 00000000..e4f7a302 --- /dev/null +++ b/src/widgets/listwidget.cpp @@ -0,0 +1,43 @@ +#include "listwidget.h" + +#include +#include + +using namespace vnotex; + +ListWidget::ListWidget(QWidget *p_parent) + : QListWidget(p_parent) +{ +} + +void ListWidget::keyPressEvent(QKeyEvent *p_event) +{ + if (WidgetUtils::processKeyEventLikeVi(this, p_event)) { + return; + } + + QListWidget::keyPressEvent(p_event); +} + +QVector ListWidget::getVisibleItems(const QListWidget *p_widget) +{ + QVector items; + + auto firstItem = p_widget->itemAt(0, 0); + if (!firstItem) { + return items; + } + + auto lastItem = p_widget->itemAt(p_widget->viewport()->rect().bottomLeft()); + + int firstRow = p_widget->row(firstItem); + int lastRow = lastItem ? p_widget->row(lastItem) : (p_widget->count() - 1); + for (int i = firstRow; i <= lastRow; ++i) { + auto item = p_widget->item(i); + if (!item->isHidden() && item->flags() != Qt::NoItemFlags) { + items.append(item); + } + } + + return items; +} diff --git a/src/widgets/listwidget.h b/src/widgets/listwidget.h new file mode 100644 index 00000000..a153cee2 --- /dev/null +++ b/src/widgets/listwidget.h @@ -0,0 +1,22 @@ +#ifndef LISTWIDGET_H +#define LISTWIDGET_H + +#include +#include + +namespace vnotex +{ + class ListWidget : public QListWidget + { + Q_OBJECT + public: + explicit ListWidget(QWidget *p_parent = nullptr); + + static QVector getVisibleItems(const QListWidget *p_widget); + + protected: + void keyPressEvent(QKeyEvent *p_event) Q_DECL_OVERRIDE; + }; +} + +#endif // LISTWIDGET_H diff --git a/src/widgets/mainwindow.cpp b/src/widgets/mainwindow.cpp new file mode 100644 index 00000000..d2822a54 --- /dev/null +++ b/src/widgets/mainwindow.cpp @@ -0,0 +1,482 @@ +#include "mainwindow.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "toolbox.h" +#include "notebookexplorer.h" +#include "vnotex.h" +#include "notebookmgr.h" +#include "buffermgr.h" +#include "viewarea.h" +#include +#include +#include +#include +#include +#include +#include "viewwindow.h" +#include "outlineviewer.h" +#include +#include "navigationmodemgr.h" + +#include + +using namespace vnotex; + +MainWindow::MainWindow(QWidget *p_parent) + : QMainWindow(p_parent) +{ + VNoteX::getInst().setMainWindow(this); + + NavigationModeMgr::init(this); + + setupUI(); + + setupShortcuts(); + + loadStateAndGeometry(); + + connect(qApp, &QCoreApplication::aboutToQuit, + this, &MainWindow::closeOnQuit); +} + +MainWindow::~MainWindow() +{ + // Should be desturcted before status bar. + delete m_viewArea; + m_viewArea = nullptr; +} + +void MainWindow::kickOffOnStart() +{ + VNoteX::getInst().initLoad(); + + emit mainWindowStarted(); + + emit layoutChanged(); + + demoWidget(); +} + +void MainWindow::setupUI() +{ + setupCentralWidget(); + setupDocks(); + setupToolBar(); + setupStatusBar(); + + activateDock(m_docks[DockIndex::NavigationDock]); +} + +void MainWindow::setupStatusBar() +{ + m_statusBarHelper.setupStatusBar(this); + connect(&VNoteX::getInst(), &VNoteX::statusMessageRequested, + statusBar(), &QStatusBar::showMessage); +} + +void MainWindow::setupCentralWidget() +{ + m_viewArea = new ViewArea(this); + NavigationModeMgr::getInst().registerNavigationTarget(m_viewArea); + connect(&VNoteX::getInst().getBufferMgr(), &BufferMgr::bufferRequested, + m_viewArea, &ViewArea::openBuffer); + + connect(m_viewArea, &ViewArea::statusWidgetChanged, + this, [this](QWidget *p_widget) { + if (m_viewAreaStatusWidget) { + // Will hide it. + statusBar()->removeWidget(m_viewAreaStatusWidget); + } + + m_viewAreaStatusWidget = p_widget; + if (m_viewAreaStatusWidget) { + statusBar()->addPermanentWidget(m_viewAreaStatusWidget); + m_viewAreaStatusWidget->show(); + } + }); + connect(m_viewArea, &ViewArea::currentViewWindowChanged, + this, [this]() { + setWindowTitle(getViewAreaTitle()); + }); + connect(m_viewArea, &ViewArea::currentViewWindowUpdated, + this, [this]() { + setWindowTitle(getViewAreaTitle()); + }); + + { + auto notebookMgr = &VNoteX::getInst().getNotebookMgr(); + connect(notebookMgr, &NotebookMgr::notebookAboutToClose, + this, [this](const Notebook *p_notebook) { + m_viewArea->close(p_notebook, true); + }); + connect(notebookMgr, &NotebookMgr::notebookAboutToRemove, + this, [this](const Notebook *p_notebook) { + m_viewArea->close(p_notebook, true); + }); + } + + setCentralWidget(m_viewArea); +} + +void MainWindow::setupDocks() +{ + setTabPosition(Qt::LeftDockWidgetArea, QTabWidget::West); + setTabPosition(Qt::RightDockWidgetArea, QTabWidget::East); + setTabPosition(Qt::TopDockWidgetArea, QTabWidget::North); + setTabPosition(Qt::BottomDockWidgetArea, QTabWidget::North); + setDockNestingEnabled(true); + + // The order of m_docks should be identical with enum DockIndex. + setupNavigationDock(); + + setupOutlineDock(); + + for (int i = 1; i < m_docks.size(); ++i) { + tabifyDockWidget(m_docks[i - 1], m_docks[i]); + } + + // Activate the first dock. + activateDock(m_docks[0]); +} + +void MainWindow::activateDock(QDockWidget *p_dock) +{ + p_dock->show(); + Q_FOREACH(QTabBar* tabBar, this->findChildren()) { + bool found = false; + for (int i = 0; i < tabBar->count(); ++i) { + if (p_dock == reinterpret_cast(tabBar->tabData(i).toULongLong())) { + tabBar->setCurrentIndex(i); + found = true; + break; + } + } + + if (found) { + break; + } + } + p_dock->setFocus(); +} + +void MainWindow::setupNavigationDock() +{ + auto dock = new QDockWidget(tr("Navigation"), this); + m_docks.push_back(dock); + + dock->setObjectName(QStringLiteral("NavigationDock.vnotex")); + dock->setAllowedAreas(Qt::AllDockWidgetAreas); + + setupNavigationToolBox(); + dock->setWidget(m_navigationToolBox); + dock->setFocusProxy(m_navigationToolBox); + addDockWidget(Qt::LeftDockWidgetArea, dock); + + connect(dock, &QDockWidget::visibilityChanged, + this, &MainWindow::layoutChanged); +} + +void MainWindow::setupOutlineDock() +{ + auto dock = new QDockWidget(tr("Outline"), this); + m_docks.push_back(dock); + + dock->setObjectName(QStringLiteral("OutlineDock.vnotex")); + dock->setAllowedAreas(Qt::AllDockWidgetAreas); + + setupOutlineViewer(); + dock->setWidget(m_outlineViewer); + dock->setFocusProxy(m_outlineViewer); + addDockWidget(Qt::LeftDockWidgetArea, dock); + + connect(dock, &QDockWidget::visibilityChanged, + this, &MainWindow::layoutChanged); +} + +void MainWindow::setupNavigationToolBox() +{ + m_navigationToolBox = new ToolBox(this); + m_navigationToolBox->setObjectName("NavigationToolBox.vnotex"); + + NavigationModeMgr::getInst().registerNavigationTarget(m_navigationToolBox); + + const auto &themeMgr = VNoteX::getInst().getThemeMgr(); + + // Notebook explorer. + setupNotebookExplorer(m_navigationToolBox); + m_navigationToolBox->addItem(m_notebookExplorer, + themeMgr.getIconFile("notebook_explorer.svg"), + tr("Notebooks"), + nullptr); + + /* + // History explorer. + auto historyExplorer = new QWidget(this); + m_navigationToolBox->addItem(historyExplorer, + themeMgr.getIconFile("history_explorer.svg"), + tr("History"), + nullptr); + + // Tag explorer. + auto tagExplorer = new QWidget(this); + m_navigationToolBox->addItem(tagExplorer, + themeMgr.getIconFile("tag_explorer.svg"), + tr("Tags"), + nullptr); + */ +} + +void MainWindow::setupNotebookExplorer(QWidget *p_parent) +{ + m_notebookExplorer = new NotebookExplorer(p_parent); + connect(&VNoteX::getInst(), &VNoteX::newNotebookRequested, + m_notebookExplorer, &NotebookExplorer::newNotebook); + connect(&VNoteX::getInst(), &VNoteX::newNotebookFromFolderRequested, + m_notebookExplorer, &NotebookExplorer::newNotebookFromFolder); + connect(&VNoteX::getInst(), &VNoteX::importNotebookRequested, + m_notebookExplorer, &NotebookExplorer::importNotebook); + connect(&VNoteX::getInst(), &VNoteX::newFolderRequested, + m_notebookExplorer, &NotebookExplorer::newFolder); + connect(&VNoteX::getInst(), &VNoteX::newNoteRequested, + m_notebookExplorer, &NotebookExplorer::newNote); + connect(&VNoteX::getInst(), &VNoteX::importFileRequested, + m_notebookExplorer, &NotebookExplorer::importFile); + connect(&VNoteX::getInst(), &VNoteX::importFolderRequested, + m_notebookExplorer, &NotebookExplorer::importFolder); + connect(&VNoteX::getInst(), &VNoteX::importLegacyNotebookRequested, + m_notebookExplorer, &NotebookExplorer::importLegacyNotebook); + connect(&VNoteX::getInst(), &VNoteX::locateNodeRequested, + m_notebookExplorer, &NotebookExplorer::locateNode); + + auto notebookMgr = &VNoteX::getInst().getNotebookMgr(); + connect(notebookMgr, &NotebookMgr::notebooksUpdated, + m_notebookExplorer, &NotebookExplorer::loadNotebooks); + connect(notebookMgr, &NotebookMgr::notebookUpdated, + m_notebookExplorer, &NotebookExplorer::reloadNotebook); + connect(notebookMgr, &NotebookMgr::currentNotebookChanged, + m_notebookExplorer, &NotebookExplorer::setCurrentNotebook); + connect(m_notebookExplorer, &NotebookExplorer::notebookActivated, + notebookMgr, &NotebookMgr::setCurrentNotebook); +} + +void MainWindow::closeEvent(QCloseEvent *p_event) +{ + // TODO: support minimized to system tray. + + if (isVisible()) { + saveStateAndGeometry(); + } + + // Signal out the close event. + auto event = QSharedPointer::create(); + event->m_response = true; + emit mainWindowClosed(event); + if (!event->m_response.toBool()) { + // Stop the close. + p_event->ignore(); + return; + } + + QMainWindow::closeEvent(p_event); +} + +void MainWindow::saveStateAndGeometry() +{ + if (m_layoutReset) { + return; + } + + SessionConfig::MainWindowStateGeometry sg; + sg.m_mainState = saveState(); + sg.m_mainGeometry = saveGeometry(); + + auto& sessionConfig = ConfigMgr::getInst().getSessionConfig(); + sessionConfig.setMainWindowStateGeometry(sg); +} + +void MainWindow::loadStateAndGeometry() +{ + const auto& sessionConfig = ConfigMgr::getInst().getSessionConfig(); + const auto sg = sessionConfig.getMainWindowStateGeometry(); + + if (!sg.m_mainGeometry.isEmpty()) { + restoreGeometry(sg.m_mainGeometry); + } + + if (!sg.m_mainState.isEmpty()) { + // Will also restore the state of dock widgets. + restoreState(sg.m_mainState); + } +} + +void MainWindow::resetStateAndGeometry() +{ + if (m_layoutReset) { + return; + } + + m_layoutReset = true; + SessionConfig::MainWindowStateGeometry sg; + auto& sessionConfig = ConfigMgr::getInst().getSessionConfig(); + sessionConfig.setMainWindowStateGeometry(sg); +} + +void MainWindow::setContentAreaExpanded(bool p_expanded) +{ + for (auto dock : m_docks) { + if (!dock->isFloating()) { + dock->setVisible(!p_expanded); + } + } +} + +bool MainWindow::isContentAreaExpanded() const +{ + for (auto dock : m_docks) { + if (!dock->isFloating() && dock->isVisible()) { + return false; + } + } + return true; +} + +void MainWindow::demoWidget() +{ +} + +QString MainWindow::getViewAreaTitle() const +{ + QString title; + const auto win = m_viewArea->getCurrentViewWindow(); + if (win) { + title = win->getName(); + } + return title.isEmpty() ? QString() : QString("%1 - %2").arg(title, ConfigMgr::c_appName); +} + +void MainWindow::setupOutlineViewer() +{ + // Do not provide title here since there is one in the dock title. + m_outlineViewer = new OutlineViewer(QString(), this); + m_outlineViewer->setObjectName("OutlineViewer.vnotex"); + + connect(m_viewArea, &ViewArea::currentViewWindowChanged, + this, [this]() { + auto win = m_viewArea->getCurrentViewWindow(); + m_outlineViewer->setOutlineProvider(win ? win->getOutlineProvider() : nullptr); + }); + connect(m_outlineViewer, &OutlineViewer::focusViewArea, + this, &MainWindow::focusViewArea); +} + +const QVector &MainWindow::getDocks() const +{ + return m_docks; +} + +void MainWindow::focusViewArea() +{ + m_viewArea->focus(); +} + +void MainWindow::setupToolBar() +{ + const int sz = ConfigMgr::getInst().getCoreConfig().getToolBarIconSize(); + const QSize iconSize(sz, sz); + if (!ConfigMgr::getInst().getSessionConfig().getSystemTitleBarEnabled()) { + // Use unified tool bar as title bar. + auto framelessFlags = Qt::WindowTitleHint | Qt::WindowSystemMenuHint | Qt::WindowMinMaxButtonsHint + | Qt::WindowCloseButtonHint | Qt::WindowFullscreenButtonHint; + + auto winFlags = windowFlags(); + winFlags |= Qt::CustomizeWindowHint; + winFlags &= ~framelessFlags; + setWindowFlags(winFlags); + + auto toolBar = new VToolBar(tr("Global"), this); + toolBar->setIconSize(iconSize); + m_toolBarHelper.setupToolBars(this, toolBar); + toolBar->addTitleBarIcons(ToolBarHelper::generateIcon(QStringLiteral("minimize.svg")), + ToolBarHelper::generateIcon(QStringLiteral("maximize.svg")), + ToolBarHelper::generateIcon(QStringLiteral("maximize_restore.svg")), + ToolBarHelper::generateDangerousIcon(QStringLiteral("close.svg"))); + } else { + auto toolBar = new QToolBar(tr("Global"), this); + toolBar->setIconSize(iconSize); + m_toolBarHelper.setupToolBars(this, toolBar); + } + + // Disable the context menu above tool bar. + setContextMenuPolicy(Qt::NoContextMenu); +} + +void MainWindow::closeOnQuit() +{ + // No user interaction is available. + emit mainWindowClosedOnQuit(); +} + +void MainWindow::setupShortcuts() +{ + const auto &coreConfig = ConfigMgr::getInst().getCoreConfig(); + // Focus Navigation dock. + { + auto keys = coreConfig.getShortcut(CoreConfig::Shortcut::NavigationDock); + auto shortcut = WidgetUtils::createShortcut(keys, this); + if (shortcut) { + auto dock = m_docks[DockIndex::NavigationDock]; + dock->setToolTip(QString("%1\t%2").arg(dock->windowTitle(), + QKeySequence(keys).toString(QKeySequence::NativeText))); + connect(shortcut, &QShortcut::activated, + this, [this]() { + activateDock(m_docks[DockIndex::NavigationDock]); + }); + } + } + + // Focus Outline dock. + { + auto keys = coreConfig.getShortcut(CoreConfig::Shortcut::OutlineDock); + auto shortcut = WidgetUtils::createShortcut(keys, this); + if (shortcut) { + auto dock = m_docks[DockIndex::OutlineDock]; + dock->setToolTip(QString("%1\t%2").arg(dock->windowTitle(), + QKeySequence(keys).toString(QKeySequence::NativeText))); + connect(shortcut, &QShortcut::activated, + this, [this]() { + activateDock(m_docks[DockIndex::OutlineDock]); + }); + } + } +} + +void MainWindow::setStayOnTop(bool p_enabled) +{ + bool shown = isVisible(); + Qt::WindowFlags flags = windowFlags(); + + Qt::WindowFlags magicFlag = Qt::WindowStaysOnTopHint; + if (p_enabled) { + setWindowFlags(flags | magicFlag); + } else { + setWindowFlags(flags ^ magicFlag); + } + + if (shown) { + show(); + } +} diff --git a/src/widgets/mainwindow.h b/src/widgets/mainwindow.h new file mode 100644 index 00000000..c4fb96f7 --- /dev/null +++ b/src/widgets/mainwindow.h @@ -0,0 +1,123 @@ +#ifndef MAINWINDOW_H +#define MAINWINDOW_H + +#include +#include + +#include "toolbarhelper.h" +#include "statusbarhelper.h" + +class QDockWidget; + +namespace vnotex +{ + class ToolBox; + class NotebookExplorer; + class ViewArea; + class Event; + class OutlineViewer; + + class MainWindow : public QMainWindow + { + Q_OBJECT + public: + explicit MainWindow(QWidget *p_parent = nullptr); + + ~MainWindow(); + + MainWindow(const MainWindow &) = delete; + void operator=(const MainWindow &) = delete; + + void kickOffOnStart(); + + void resetStateAndGeometry(); + + const QVector &getDocks() const; + + void setContentAreaExpanded(bool p_expanded); + // Should be called after MainWindow is shown. + bool isContentAreaExpanded() const; + + void focusViewArea(); + + void setStayOnTop(bool p_enabled); + + signals: + void mainWindowStarted(); + + // @m_response of @p_event: true to continue the close, false to stop the close. + void mainWindowClosed(const QSharedPointer &p_event); + + // No user interaction is available. + void mainWindowClosedOnQuit(); + + void layoutChanged(); + + protected: + void closeEvent(QCloseEvent *p_event) Q_DECL_OVERRIDE; + + private slots: + void closeOnQuit(); + + private: + // Index in m_docks. + enum DockIndex + { + NavigationDock = 0, + OutlineDock + }; + + void setupUI(); + + void setupCentralWidget(); + + void setupNavigationToolBox(); + + void setupOutlineViewer(); + + void setupNavigationDock(); + + void setupOutlineDock(); + + void setupNotebookExplorer(QWidget *p_parent = nullptr); + + void setupDocks(); + + void setupStatusBar(); + + void saveStateAndGeometry(); + + void loadStateAndGeometry(); + + // Used to test widget in development. + void demoWidget(); + + QString getViewAreaTitle() const; + + void activateDock(QDockWidget *p_dock); + + void setupToolBar(); + + void setupShortcuts(); + + ToolBarHelper m_toolBarHelper; + + StatusBarHelper m_statusBarHelper; + + ToolBox *m_navigationToolBox = nullptr; + + NotebookExplorer *m_notebookExplorer = nullptr; + + ViewArea *m_viewArea = nullptr; + + QWidget *m_viewAreaStatusWidget = nullptr; + + OutlineViewer *m_outlineViewer = nullptr; + + QVector m_docks; + + bool m_layoutReset = false; + }; +} // ns vnotex + +#endif // MAINWINDOW_H diff --git a/src/widgets/markdownviewwindow.cpp b/src/widgets/markdownviewwindow.cpp new file mode 100644 index 00000000..4e7afcc7 --- /dev/null +++ b/src/widgets/markdownviewwindow.cpp @@ -0,0 +1,794 @@ +#include "markdownviewwindow.h" + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "editors/markdowneditor.h" +#include "textviewwindow.h" +#include "textviewwindowhelper.h" +#include "editors/markdownviewer.h" +#include "editors/editormarkdownvieweradapter.h" +#include "editors/previewhelper.h" +#include "dialogs/deleteconfirmdialog.h" +#include "outlineprovider.h" +#include "toolbarhelper.h" + +using namespace vnotex; + +MarkdownViewWindow::MarkdownViewWindow(const QSharedPointer &p_paras, QWidget *p_parent) + : ViewWindow(p_parent), + m_openParas(p_paras) +{ + // Need to setup before setupUI() since the tool bar action will need the provider. + setupOutlineProvider(); + + setupUI(); + + m_previewHelper = new PreviewHelper(nullptr, this); + + setModeInternal(modeFromOpenParameters(*p_paras)); + + m_initialized = true; +} + +MarkdownViewWindow::~MarkdownViewWindow() +{ + if (m_textEditorStatusWidget) { + getMainStatusWidget()->removeWidget(m_textEditorStatusWidget.get()); + m_textEditorStatusWidget->setParent(nullptr); + } + + if (m_viewerStatusWidget) { + getMainStatusWidget()->removeWidget(m_viewerStatusWidget.get()); + m_viewerStatusWidget->setParent(nullptr); + } +} + +void MarkdownViewWindow::setupUI() +{ + // Central widget. + m_splitter = new QSplitter(this); + m_splitter->setContentsMargins(0, 0, 0, 0); + setCentralWidget(m_splitter); + + // Get the focus event from splitter. + m_splitter->installEventFilter(this); + + // Status widget. + // We use a QTabWidget as status widget since we have two widgets for different modes. + auto stackedWidget = QSharedPointer::create(this); + stackedWidget->setContentsMargins(0, 0, 0, 0); + setStatusWidget(stackedWidget); + + setupToolBar(); +} + +void MarkdownViewWindow::setMode(Mode p_mode) +{ + setModeInternal(p_mode); +} + +void MarkdownViewWindow::setModeInternal(Mode p_mode) +{ + if (p_mode == m_mode) { + return; + } + + m_previousMode = m_mode; + m_mode = p_mode; + + switch (m_mode) { + case Mode::Read: + { + if (!m_viewer) { + setupViewer(); + if (m_initialized) { + syncViewerFromBuffer(true); + } + } + + // Avoid focus glitch. + m_viewer->show(); + m_viewer->setFocus(); + + if (m_editor) { + m_editor->hide(); + } + + getMainStatusWidget()->setCurrentWidget(m_viewerStatusWidget.get()); + break; + } + + case Mode::Edit: + { + if (!m_editor) { + // We need viewer to preview. + if (!m_viewer) { + setupViewer(); + } + + setupTextEditor(); + + if (m_initialized) { + syncTextEditorFromBuffer(true); + } + } + + // Avoid focus glitch. + m_editor->show(); + m_editor->setFocus(); + + Q_ASSERT(m_viewer); + m_viewer->hide(); + + getMainStatusWidget()->setCurrentWidget(m_textEditorStatusWidget.get()); + break; + } + + default: + Q_ASSERT(false); + break; + } + + // Let editor to show or scrollToLine will not work correctly. + QCoreApplication::processEvents(); + + if (m_initialized) { + doSyncEditorFromBufferContent(true); + } + + emit modeChanged(); +} + +void MarkdownViewWindow::setModified(bool p_modified) +{ + if (m_editor) { + m_editor->setModified(p_modified); + } +} + +void MarkdownViewWindow::handleEditorConfigChange() +{ + const auto &editorConfig = ConfigMgr::getInst().getEditorConfig(); + const auto &markdownEditorConfig = editorConfig.getMarkdownEditorConfig(); + + if (markdownEditorConfig.revision() != m_markdownEditorConfigRevision) { + m_markdownEditorConfigRevision = markdownEditorConfig.revision(); + HtmlTemplateHelper::updateMarkdownViewerTemplate(markdownEditorConfig); + if (m_editor) { + auto config = createMarkdownEditorConfig(markdownEditorConfig); + m_editor->setConfig(config); + + if (markdownEditorConfig.getTextEditorConfig().getZoomDelta() != 0) { + m_editor->zoom(markdownEditorConfig.getTextEditorConfig().getZoomDelta()); + } + } + + updateWebViewerConfig(markdownEditorConfig); + } +} + +QString MarkdownViewWindow::getLatestContent() const +{ + Q_ASSERT(m_editor); + return m_editor->getText(); +} + +void MarkdownViewWindow::syncEditorFromBuffer() +{ + m_bufferRevision = getBuffer() ? getBuffer()->getRevision() : 0; + syncTextEditorFromBuffer(false); + syncViewerFromBuffer(false); +} + +void MarkdownViewWindow::syncEditorFromBufferContent() +{ + doSyncEditorFromBufferContent(false); +} + +void MarkdownViewWindow::doSyncEditorFromBufferContent(bool p_syncPosition) +{ + auto buffer = getBuffer(); + Q_ASSERT(buffer); + // m_bufferRevision may already be the same as the buffer revision, in which + // case we will call editor or viewer to update its content. + m_bufferRevision = buffer->getRevision(); + switch (m_mode) { + case Mode::Read: + syncViewerFromBufferContent(p_syncPosition); + break; + + case Mode::Edit: + syncTextEditorFromBufferContent(p_syncPosition); + break; + + default: + Q_ASSERT(false); + } +} + +void MarkdownViewWindow::handleBufferChangedInternal() +{ + TextViewWindowHelper::handleBufferChanged(this); + + auto buffer = getBuffer(); + if (m_openParas && m_openParas->m_newFile) { + Q_ASSERT(m_mode != Mode::Read); + const auto &markdownEditorConfig = ConfigMgr::getInst().getEditorConfig().getMarkdownEditorConfig(); + if (markdownEditorConfig.getInsertFileNameAsTitle() && buffer->getContent().isEmpty()) { + const auto title = QString("# %1\n").arg(QFileInfo(buffer->getName()).baseName()); + m_editor->insertText(title); + } + } + + m_openParas.clear(); +} + +void MarkdownViewWindow::setupToolBar() +{ + auto toolBar = new QToolBar(this); + const auto &editorConfig = ConfigMgr::getInst().getEditorConfig(); + const int iconSize = editorConfig.getToolBarIconSize(); + toolBar->setIconSize(QSize(iconSize, iconSize)); + + addToolBar(toolBar); + + addAction(toolBar, ViewWindowToolBarHelper::EditReadDiscard); + addAction(toolBar, ViewWindowToolBarHelper::Save); + + toolBar->addSeparator(); + + addAction(toolBar, ViewWindowToolBarHelper::Attachment); + + toolBar->addSeparator(); + + addAction(toolBar, ViewWindowToolBarHelper::TypeHeading); + addAction(toolBar, ViewWindowToolBarHelper::TypeBold); + addAction(toolBar, ViewWindowToolBarHelper::TypeItalic); + addAction(toolBar, ViewWindowToolBarHelper::TypeStrikethrough); + addAction(toolBar, ViewWindowToolBarHelper::TypeUnorderedList); + addAction(toolBar, ViewWindowToolBarHelper::TypeOrderedList); + addAction(toolBar, ViewWindowToolBarHelper::TypeTodoList); + addAction(toolBar, ViewWindowToolBarHelper::TypeCheckedTodoList); + addAction(toolBar, ViewWindowToolBarHelper::TypeCode); + addAction(toolBar, ViewWindowToolBarHelper::TypeCodeBlock); + addAction(toolBar, ViewWindowToolBarHelper::TypeMath); + addAction(toolBar, ViewWindowToolBarHelper::TypeMathBlock); + addAction(toolBar, ViewWindowToolBarHelper::TypeQuote); + addAction(toolBar, ViewWindowToolBarHelper::TypeLink); + addAction(toolBar, ViewWindowToolBarHelper::TypeImage); + addAction(toolBar, ViewWindowToolBarHelper::TypeTable); + + toolBar->addSeparator(); + + ToolBarHelper::addSpacer(toolBar); + addAction(toolBar, ViewWindowToolBarHelper::Outline); +} + +void MarkdownViewWindow::setupTextEditor() +{ + Q_ASSERT(!m_editor); + Q_ASSERT(m_viewer); + const auto &editorConfig = ConfigMgr::getInst().getEditorConfig(); + const auto &markdownEditorConfig = editorConfig.getMarkdownEditorConfig(); + + m_editorConfigRevision = editorConfig.revision(); + m_markdownEditorConfigRevision = markdownEditorConfig.revision(); + + m_editor = new MarkdownEditor(markdownEditorConfig, + createMarkdownEditorConfig(markdownEditorConfig), + this); + m_splitter->insertWidget(0, m_editor); + + if (markdownEditorConfig.getTextEditorConfig().getZoomDelta() != 0) { + m_editor->zoom(markdownEditorConfig.getTextEditorConfig().getZoomDelta()); + } + + TextViewWindowHelper::connectEditor(this); + + // Status widget. + m_textEditorStatusWidget = m_editor->statusWidget(); + getMainStatusWidget()->addWidget(m_textEditorStatusWidget.get()); + m_textEditorStatusWidget->show(); + + m_previewHelper->setMarkdownEditor(m_editor); + m_editor->setPreviewHelper(m_previewHelper); + + // Connect viewer and editor. + connect(adapter(), &MarkdownViewerAdapter::viewerReady, + m_editor->getHighlighter(), &vte::PegMarkdownHighlighter::updateHighlight); + connect(m_editor, &MarkdownEditor::htmlToMarkdownRequested, + adapter(), &MarkdownViewerAdapter::htmlToMarkdownRequested); + connect(adapter(), &MarkdownViewerAdapter::htmlToMarkdownReady, + m_editor, &MarkdownEditor::handleHtmlToMarkdownData); + + // Connect outline pipeline. + connect(m_editor, &MarkdownEditor::headingsChanged, + this, [this]() { + if (getMode() != Mode::Read) { + auto outline = headingsToOutline(m_editor->getHeadings()); + m_outlineProvider->setOutline(outline); + } + }); + connect(m_editor, &MarkdownEditor::currentHeadingChanged, + this, [this]() { + if (getMode() != Mode::Read) { + m_outlineProvider->setCurrentHeadingIndex(m_editor->getCurrentHeadingIndex()); + } + }); +} + +QStackedWidget *MarkdownViewWindow::getMainStatusWidget() const +{ + return static_cast(m_statusWidget.get()); +} + +bool MarkdownViewWindow::eventFilter(QObject *p_obj, QEvent *p_event) +{ + if (p_obj == m_splitter) { + if (p_event->type() == QEvent::FocusIn) { + focusEditor(); + } + } + + return ViewWindow::eventFilter(p_obj, p_event); +} + +void MarkdownViewWindow::focusEditor() +{ + switch (m_mode) { + case Mode::Read: + m_viewer->setFocus(); + break; + + case Mode::Edit: + m_editor->setFocus(); + break; + + default: + Q_ASSERT(false); + break; + } +} + +void MarkdownViewWindow::setupViewer() +{ + Q_ASSERT(!m_viewer); + const auto &editorConfig = ConfigMgr::getInst().getEditorConfig(); + const auto &markdownEditorConfig = editorConfig.getMarkdownEditorConfig(); + + m_editorConfigRevision = editorConfig.revision(); + m_markdownEditorConfigRevision = markdownEditorConfig.revision(); + + HtmlTemplateHelper::updateMarkdownViewerTemplate(markdownEditorConfig); + + auto adapter = new EditorMarkdownViewerAdapter(nullptr, this); + m_viewer = new MarkdownViewer(adapter, + VNoteX::getInst().getThemeMgr().getBaseBackground(), + markdownEditorConfig.getZoomFactorInReadMode(), + this); + m_splitter->addWidget(m_viewer); + + // Status widget. + { + // TODO: implement a real status widget for viewer. + auto label = new QLabel(tr("Markdown Web Viewer"), this); + label->setAlignment(Qt::AlignRight | Qt::AlignVCenter); + m_viewerStatusWidget.reset(label); + getMainStatusWidget()->addWidget(m_viewerStatusWidget.get()); + m_viewerStatusWidget->show(); + } + + m_viewer->setPreviewHelper(m_previewHelper); + + connect(m_viewer, &MarkdownViewer::zoomFactorChanged, + this, [this](qreal p_factor) { + auto &markdownEditorConfig = ConfigMgr::getInst().getEditorConfig().getMarkdownEditorConfig(); + markdownEditorConfig.setZoomFactorInReadMode(p_factor); + showZoomFactor(p_factor); + }); + + // Connect outline pipeline. + connect(adapter, &MarkdownViewerAdapter::headingsChanged, + this, [this]() { + if (getMode() == Mode::Read) { + auto outline = headingsToOutline(this->adapter()->getHeadings()); + m_outlineProvider->setOutline(outline); + } + }); + connect(adapter, &MarkdownViewerAdapter::currentHeadingChanged, + this, [this]() { + if (getMode() == Mode::Read) { + m_outlineProvider->setCurrentHeadingIndex(this->adapter()->getCurrentHeadingIndex()); + } + }); +} + +void MarkdownViewWindow::syncTextEditorFromBuffer(bool p_syncPositionFromReadMode) +{ + if (!m_editor) { + return; + } + + const bool old = m_propogateEditorToBuffer; + m_propogateEditorToBuffer = false; + + auto buffer = getBuffer(); + m_editor->setBuffer(buffer); + if (buffer) { + m_editor->setReadOnly(buffer->isReadOnly()); + m_editor->setBasePath(buffer->getContentBasePath()); + m_editor->setText(buffer->getContent()); + m_editor->setModified(buffer->isModified()); + + int lineNumber = -1; + if (p_syncPositionFromReadMode) { + lineNumber = getReadLineNumber(); + } + m_editor->scrollToLine(lineNumber, false); + } else { + m_editor->setReadOnly(true); + m_editor->setBasePath(""); + m_editor->setText(""); + m_editor->setModified(false); + } + + m_textEditorBufferRevision = m_bufferRevision; + m_propogateEditorToBuffer = old; +} + +void MarkdownViewWindow::syncViewerFromBuffer(bool p_syncPositionFromEditMode) +{ + if (!m_viewer) { + return; + } + + auto buffer = getBuffer(); + adapter()->setBuffer(buffer); + if (buffer) { + int lineNumber = -1; + if (p_syncPositionFromEditMode) { + lineNumber = getEditLineNumber(); + } + + // TODO: Check buffer for last position recover. + + // Use getPath() instead of getBasePath() to make in-page anchor work. + m_viewer->setHtml(HtmlTemplateHelper::getMarkdownViewerTemplate(), + PathUtils::pathToUrl(buffer->getContentPath())); + adapter()->setText(m_bufferRevision, buffer->getContent(), lineNumber); + } else { + m_viewer->setHtml(""); + adapter()->setText(0, "", -1); + } + m_viewerBufferRevision = m_bufferRevision; +} + +void MarkdownViewWindow::syncTextEditorFromBufferContent(bool p_syncPosition) +{ + Q_ASSERT(m_editor); + if (m_textEditorBufferRevision == m_bufferRevision) { + if (p_syncPosition) { + m_editor->scrollToLine(getReadLineNumber(), false); + } + return; + } + + const bool old = m_propogateEditorToBuffer; + m_propogateEditorToBuffer = false; + + auto buffer = getBuffer(); + Q_ASSERT(buffer); + m_editor->setText(buffer->getContent()); + m_editor->setModified(buffer->isModified()); + + m_textEditorBufferRevision = m_bufferRevision; + m_propogateEditorToBuffer = old; +} + +void MarkdownViewWindow::syncViewerFromBufferContent(bool p_syncPosition) +{ + Q_ASSERT(m_viewer); + if (m_viewerBufferRevision == m_bufferRevision) { + if (p_syncPosition) { + adapter()->scrollToPosition(MarkdownViewerAdapter::Position(getEditLineNumber(), QString())); + } + return; + } + + auto buffer = getBuffer(); + Q_ASSERT(buffer); + adapter()->setText(m_bufferRevision, + buffer->getContent(), + p_syncPosition ? getEditLineNumber() : -1); + + m_viewerBufferRevision = m_bufferRevision; +} + +void MarkdownViewWindow::setBufferRevisionAfterInvalidation(int p_bufferRevision) +{ + m_bufferRevision = p_bufferRevision; + switch (m_mode) { + case Mode::Edit: + m_textEditorBufferRevision = p_bufferRevision; + break; + + case Mode::Read: + m_viewerBufferRevision = p_bufferRevision; + break; + + default: + Q_ASSERT(false); + } +} + +EditorMarkdownViewerAdapter *MarkdownViewWindow::adapter() const +{ + if (m_viewer) { + return dynamic_cast(m_viewer->adapter()); + } + + return nullptr; +} + +int MarkdownViewWindow::getEditLineNumber() const +{ + if (m_previousMode == Mode::Edit || m_previousMode == Mode::FocusPreview) { + if (m_editor) { + return m_editor->getTopLine(); + } + } + + return -1; +} + +int MarkdownViewWindow::getReadLineNumber() const +{ + if (m_previousMode == Mode::Read) { + if (m_viewer) { + return adapter()->getTopLineNumber(); + } + } + + return -1; +} + +void MarkdownViewWindow::handleTypeAction(TypeAction p_action) +{ + Q_ASSERT(inModeCanInsert() && m_editor); + Q_ASSERT(!getBuffer()->isReadOnly()); + switch (p_action) { + case TypeAction::Heading1: + Q_FALLTHROUGH(); + case TypeAction::Heading2: + Q_FALLTHROUGH(); + case TypeAction::Heading3: + Q_FALLTHROUGH(); + case TypeAction::Heading4: + Q_FALLTHROUGH(); + case TypeAction::Heading5: + Q_FALLTHROUGH(); + case TypeAction::Heading6: + m_editor->typeHeading(p_action - TypeAction::Heading1 + 1); + break; + + case TypeAction::HeadingNone: + m_editor->typeHeading(0); + break; + + case TypeAction::Bold: + m_editor->typeBold(); + break; + + case TypeAction::Italic: + m_editor->typeItalic(); + break; + + case TypeAction::Strikethrough: + m_editor->typeStrikethrough(); + break; + + case TypeAction::UnorderedList: + m_editor->typeUnorderedList(); + break; + + case TypeAction::OrderedList: + m_editor->typeOrderedList(); + break; + + case TypeAction::TodoList: + m_editor->typeTodoList(false); + break; + + case TypeAction::CheckedTodoList: + m_editor->typeTodoList(true); + break; + + case TypeAction::Code: + m_editor->typeCode(); + break; + + case TypeAction::CodeBlock: + m_editor->typeCodeBlock(); + break; + + case TypeAction::Math: + m_editor->typeMath(); + break; + + case TypeAction::MathBlock: + m_editor->typeMathBlock(); + break; + + case TypeAction::Quote: + m_editor->typeQuote(); + break; + + case TypeAction::Link: + m_editor->typeLink(); + break; + + case TypeAction::Image: + m_editor->typeImage(); + break; + + default: + qWarning() << "TypeAction not handled" << p_action; + break; + } +} + +void MarkdownViewWindow::detachFromBufferInternal() +{ + auto buffer = getBuffer(); + if (buffer && buffer->getAttachViewWindowCount() == 1) { + const auto state = buffer->state(); + if (state == Buffer::StateFlag::Normal || state == Buffer::StateFlag::Discarded) { + // We are the last ViewWindow of this buffer. Clear obsolete images. + clearObsoleteImages(); + } + } +} + +void MarkdownViewWindow::clearObsoleteImages() +{ + const auto obsoleteImages = static_cast(getBuffer())->clearObsoleteImages(); + if (obsoleteImages.isEmpty()) { + return; + } + + auto buffer = getBuffer(); + Q_ASSERT(buffer); + auto &markdownEditorConfig = ConfigMgr::getInst().getEditorConfig().getMarkdownEditorConfig(); + if (markdownEditorConfig.getConfirmBeforeClearObsoleteImages()) { + QVector items; + for (auto const &imgPath : obsoleteImages) { + items.push_back(ConfirmItemInfo(imgPath, imgPath, imgPath, nullptr)); + } + + DeleteConfirmDialog dialog(tr("Clear Obsolete Images"), + tr("These images seems not in use anymore. Please confirm the deletion of them."), + tr("Deleted images could be found in the recycle bin of notebook if it is from a bundle notebook."), + items, + DeleteConfirmDialog::Flag::AskAgain | DeleteConfirmDialog::Flag::Preview, + false, + this); + if (dialog.exec() == QDialog::Accepted) { + items = dialog.getConfirmedItems(); + markdownEditorConfig.setConfirmBeforeClearObsoleteImages(!dialog.isNoAskChecked()); + for (const auto &item : items) { + buffer->removeImage(item.m_path); + } + } + } else { + for (const auto &imgPath : obsoleteImages) { + buffer->removeImage(imgPath); + } + } +} + +QSharedPointer MarkdownViewWindow::getOutlineProvider() +{ + return m_outlineProvider; +} + +template +QSharedPointer MarkdownViewWindow::headingsToOutline(const QVector &p_headings) +{ + auto outline = QSharedPointer::create(); + if (!p_headings.isEmpty()) { + outline->m_headings.reserve(p_headings.size()); + for (const auto &heading : p_headings) { + outline->m_headings.push_back(Outline::Heading(heading.m_name, heading.m_level)); + } + } + + return outline; +} + +void MarkdownViewWindow::setupOutlineProvider() +{ + m_outlineProvider.reset(new OutlineProvider(nullptr)); + connect(m_outlineProvider.data(), &OutlineProvider::headingClicked, + this, [this](int p_idx) { + switch (getMode()) { + case Mode::Read: + adapter()->scrollToHeading(p_idx); + break; + + default: + m_editor->scrollToHeading(p_idx); + break; + } + }); +} + +QSharedPointer MarkdownViewWindow::createMarkdownEditorConfig(const MarkdownEditorConfig &p_config) +{ + const auto &themeMgr = VNoteX::getInst().getThemeMgr(); + auto textEditorConfig = TextViewWindowHelper::createTextEditorConfig(p_config.getTextEditorConfig(), + themeMgr.getFile(Theme::File::MarkdownEditorStyle), + themeMgr.getMarkdownEditorHighlightTheme()); + auto editorConfig = QSharedPointer::create(textEditorConfig); + editorConfig->m_constrainInPlacePreviewWidthEnabled = p_config.getConstrainInPlacePreviewWidthEnabled(); + return editorConfig; +} + +void MarkdownViewWindow::scrollUp() +{ + if (m_mode == Mode::Read) { + adapter()->scroll(true); + } else { + QScrollBar *vbar = m_editor->getTextEdit()->verticalScrollBar(); + if (vbar && (vbar->minimum() != vbar->maximum())) { + vbar->triggerAction(QAbstractSlider::SliderSingleStepAdd); + } + } +} + +void MarkdownViewWindow::scrollDown() +{ + if (m_mode == Mode::Read) { + adapter()->scroll(false); + } else { + QScrollBar *vbar = m_editor->getTextEdit()->verticalScrollBar(); + if (vbar && (vbar->minimum() != vbar->maximum())) { + vbar->triggerAction(QAbstractSlider::SliderSingleStepSub); + } + } +} + +void MarkdownViewWindow::updateWebViewerConfig(const MarkdownEditorConfig &p_config) +{ + if (!m_viewer) { + return; + } + + m_viewer->setZoomFactor(p_config.getZoomFactorInReadMode()); +} + +void MarkdownViewWindow::zoom(bool p_zoomIn) +{ + // Only editor will receive the wheel event. + Q_ASSERT(m_mode != Mode::Read); + m_editor->zoom(m_editor->zoomDelta() + (p_zoomIn ? 1 : -1)); + auto &textEditorConfig = ConfigMgr::getInst().getEditorConfig().getMarkdownEditorConfig().getTextEditorConfig(); + textEditorConfig.setZoomDelta(m_editor->zoomDelta()); + showZoomDelta(m_editor->zoomDelta()); +} diff --git a/src/widgets/markdownviewwindow.h b/src/widgets/markdownviewwindow.h new file mode 100644 index 00000000..3db50739 --- /dev/null +++ b/src/widgets/markdownviewwindow.h @@ -0,0 +1,156 @@ +#ifndef MARKDOWNVIEWWINDOW_H +#define MARKDOWNVIEWWINDOW_H + +#include "viewwindow.h" + +#include + +class QSplitter; +class QStackedWidget; + +namespace vte +{ + class MarkdownEditorConfig; +} + +namespace vnotex +{ + struct FileOpenParameters; + class MarkdownEditor; + class MarkdownViewer; + class EditorMarkdownViewerAdapter; + class PreviewHelper; + struct Outline; + class MarkdownEditorConfig; + + class MarkdownViewWindow : public ViewWindow + { + Q_OBJECT + public: + friend class TextViewWindowHelper; + + MarkdownViewWindow(const QSharedPointer &p_paras, QWidget *p_parent = nullptr); + + ~MarkdownViewWindow(); + + QString getLatestContent() const Q_DECL_OVERRIDE; + + void setMode(Mode p_mode) Q_DECL_OVERRIDE; + + QSharedPointer getOutlineProvider() Q_DECL_OVERRIDE; + + public slots: + void handleEditorConfigChange() Q_DECL_OVERRIDE; + + protected slots: + void setModified(bool p_modified) Q_DECL_OVERRIDE; + + void handleBufferChangedInternal() Q_DECL_OVERRIDE; + + void handleTypeAction(TypeAction p_action) Q_DECL_OVERRIDE; + + protected: + void syncEditorFromBuffer() Q_DECL_OVERRIDE; + + void syncEditorFromBufferContent() Q_DECL_OVERRIDE; + + bool eventFilter(QObject *p_obj, QEvent *p_event) Q_DECL_OVERRIDE; + + void detachFromBufferInternal() Q_DECL_OVERRIDE; + + void scrollUp() Q_DECL_OVERRIDE; + + void scrollDown() Q_DECL_OVERRIDE; + + void zoom(bool p_zoomIn) Q_DECL_OVERRIDE; + + private: + void setupUI(); + + void setupToolBar(); + + void setupTextEditor(); + + QStackedWidget *getMainStatusWidget() const; + + // Focus appropriate editor according to current mode. + void focusEditor(); + + void setupViewer(); + + void syncTextEditorFromBuffer(bool p_syncPositionFromReadMode); + + void syncViewerFromBuffer(bool p_syncPositionFromEditMode); + + // Non-virtual function of syncEditorFromBufferContent(). + void doSyncEditorFromBufferContent(bool p_syncPosition); + + void syncTextEditorFromBufferContent(bool p_syncPosition); + + void syncViewerFromBufferContent(bool p_syncPosition); + + // When we have new changes to the buffer content from our ViewWindow, + // we will invalidate the contents of the buffer and the buffer will + // call this function to tell us now the latest buffer revision. + void setBufferRevisionAfterInvalidation(int p_bufferRevision); + + EditorMarkdownViewerAdapter *adapter() const; + + // We need a non-virtual version for constructor. + void setModeInternal(Mode p_mode); + + // Get the position to sync from editor. + // Return -1 for an invalid position. + int getEditLineNumber() const; + + // Get the position to sync from viewer. + // Return -1 for an invalid position. + int getReadLineNumber() const; + + void clearObsoleteImages(); + + void setupOutlineProvider(); + + void updateWebViewerConfig(const MarkdownEditorConfig &p_config); + + template + static QSharedPointer headingsToOutline(const QVector &p_headings); + + static QSharedPointer createMarkdownEditorConfig(const MarkdownEditorConfig &p_config); + + bool m_initialized = false; + + // Splitter to hold editor and viewer. + QSplitter *m_splitter = nullptr; + + // Managed by QObject. + MarkdownEditor *m_editor = nullptr; + + // Managed by QObject. + MarkdownViewer *m_viewer = nullptr; + + QSharedPointer m_textEditorStatusWidget; + + QSharedPointer m_viewerStatusWidget; + + // Managed by QObject. + PreviewHelper *m_previewHelper = nullptr; + + // Whether propogate the state from editor to buffer. + bool m_propogateEditorToBuffer = false; + + int m_textEditorBufferRevision = 0; + + int m_viewerBufferRevision = 0; + + int m_markdownEditorConfigRevision = 0; + + Mode m_previousMode = Mode::Invalid; + + QSharedPointer m_openParas; + + QSharedPointer m_outlineProvider; + }; +} + +#endif // MARKDOWNVIEWWINDOW_H diff --git a/src/widgets/messageboxhelper.cpp b/src/widgets/messageboxhelper.cpp new file mode 100644 index 00000000..f478d06c --- /dev/null +++ b/src/widgets/messageboxhelper.cpp @@ -0,0 +1,181 @@ +#include "messageboxhelper.h" + +#include + +using namespace vnotex; + +QString MessageBoxHelper::TypeTitle(MessageBoxHelper::Type p_type) +{ + QString title; + switch (p_type) { + case Question: + title = QMessageBox::tr("Question"); + break; + + case Information: + title = QMessageBox::tr("Information"); + break; + + case Warning: + title = QMessageBox::tr("Warning"); + break; + + case Critical: + title = QMessageBox::tr("Critical"); + break; + } + + return title; +} + +QMessageBox::Icon MessageBoxHelper::TypeIcon(MessageBoxHelper::Type p_type) +{ + auto icon = QMessageBox::NoIcon; + switch (p_type) { + case Question: + icon = QMessageBox::Question; + break; + + case Information: + icon = QMessageBox::Information; + break; + + case Warning: + icon = QMessageBox::Warning; + break; + + case Critical: + icon = QMessageBox::Critical; + break; + } + + return icon; +} + +int MessageBoxHelper::showMessageBox(MessageBoxHelper::Type p_type, + const QString &p_text, + const QString &p_informationText, + const QString &p_detailedText, + QMessageBox::StandardButtons p_buttons, + QMessageBox::StandardButton p_defaultButton, + QWidget *p_parent) +{ + return showMessageBox(TypeIcon(p_type), + TypeTitle(p_type), + p_text, + p_informationText, + p_detailedText, + p_buttons, + p_defaultButton, + p_parent); +} + +int MessageBoxHelper::showMessageBox(QMessageBox::Icon p_icon, + const QString &p_title, + const QString &p_text, + const QString &p_informationText, + const QString &p_detailedText, + QMessageBox::StandardButtons p_buttons, + QMessageBox::StandardButton p_defaultButton, + QWidget *p_parent) +{ + QMessageBox msgBox(p_icon, p_title, p_text, p_buttons, p_parent); + msgBox.setTextInteractionFlags(msgBox.textInteractionFlags() + | Qt::TextSelectableByMouse); + msgBox.setInformativeText(p_informationText); + msgBox.setDetailedText(p_detailedText); + msgBox.setDefaultButton(p_defaultButton); + return msgBox.exec(); +} + +void MessageBoxHelper::notify(MessageBoxHelper::Type p_type, + const QString &p_text, + const QString &p_informationText, + const QString &p_detailedText, + QWidget *p_parent) +{ + showMessageBox(p_type, + p_text, + p_informationText, + p_detailedText, + QMessageBox::Ok, + QMessageBox::Ok, + p_parent); +} + +void MessageBoxHelper::notify(MessageBoxHelper::Type p_type, + const QString &p_text, + QWidget *p_parent) +{ + showMessageBox(p_type, + p_text, + QString(), + QString(), + QMessageBox::Ok, + QMessageBox::Ok, + p_parent); +} + +int MessageBoxHelper::questionOkCancel(MessageBoxHelper::Type p_type, + const QString &p_text, + const QString &p_informationText, + const QString &p_detailedText, + QWidget *p_parent) +{ + int ret = showMessageBox(p_type, + p_text, + p_informationText, + p_detailedText, + QMessageBox::Ok | QMessageBox::Cancel, + QMessageBox::Ok, + p_parent); + return ret; +} + +int MessageBoxHelper::questionYesNo(MessageBoxHelper::Type p_type, + const QString &p_text, + const QString &p_informationText, + const QString &p_detailedText, + QWidget *p_parent) +{ + int ret = showMessageBox(p_type, + p_text, + p_informationText, + p_detailedText, + QMessageBox::Yes | QMessageBox::No, + QMessageBox::Yes, + p_parent); + return ret; +} + +int MessageBoxHelper::questionYesNoCancel(MessageBoxHelper::Type p_type, + const QString &p_text, + const QString &p_informationText, + const QString &p_detailedText, + QWidget *p_parent) +{ + int ret = showMessageBox(p_type, + p_text, + p_informationText, + p_detailedText, + QMessageBox::Yes | QMessageBox::No | QMessageBox::Cancel, + QMessageBox::Yes, + p_parent); + return ret; +} + +int MessageBoxHelper::questionSaveDiscardCancel(MessageBoxHelper::Type p_type, + const QString &p_text, + const QString &p_informationText, + const QString &p_detailedText, + QWidget *p_parent) +{ + int ret = showMessageBox(p_type, + p_text, + p_informationText, + p_detailedText, + QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel, + QMessageBox::Save, + p_parent); + return ret; +} diff --git a/src/widgets/messageboxhelper.h b/src/widgets/messageboxhelper.h new file mode 100644 index 00000000..acd1a536 --- /dev/null +++ b/src/widgets/messageboxhelper.h @@ -0,0 +1,86 @@ +#ifndef MESSAGEBOXHELPER_H +#define MESSAGEBOXHELPER_H + +#include + +namespace vnotex +{ + class MessageBoxHelper + { + public: + MessageBoxHelper() = delete; + + enum Type + { + Question, + Information, + Warning, + Critical + }; + + // No choice required from user. + static void notify(MessageBoxHelper::Type p_type, + const QString &p_text, + const QString &p_informationText = QString(), + const QString &p_detailedText = QString(), + QWidget *p_parent = nullptr); + + static void notify(MessageBoxHelper::Type p_type, + const QString &p_text, + QWidget *p_parent); + + // Ask user for OK/Cancel action. + static int questionOkCancel(MessageBoxHelper::Type p_type, + const QString &p_text, + const QString &p_informationText = QString(), + const QString &p_detailedText = QString(), + QWidget *p_parent = nullptr); + + // Ask user for Yes/No action. + static int questionYesNo(MessageBoxHelper::Type p_type, + const QString &p_text, + const QString &p_informationText = QString(), + const QString &p_detailedText = QString(), + QWidget *p_parent = nullptr); + + // Ask user for Yes/No/Cancel action. + static int questionYesNoCancel(MessageBoxHelper::Type p_type, + const QString &p_text, + const QString &p_informationText = QString(), + const QString &p_detailedText = QString(), + QWidget *p_parent = nullptr); + + // Ask user for Save/Discard/Cancel action. + static int questionSaveDiscardCancel(MessageBoxHelper::Type p_type, + const QString &p_text, + const QString &p_informationText = QString(), + const QString &p_detailedText = QString(), + QWidget *p_parent = nullptr); + + private: + // Use default title. + static int showMessageBox(MessageBoxHelper::Type p_type, + const QString &p_text, + const QString &p_informationText, + const QString &p_detailedText, + QMessageBox::StandardButtons p_buttons, + QMessageBox::StandardButton p_defaultButton, + QWidget *p_parent); + + static int showMessageBox(QMessageBox::Icon p_icon, + const QString &p_title, + const QString &p_text, + const QString &p_informationText, + const QString &p_detailedText, + QMessageBox::StandardButtons p_buttons, + QMessageBox::StandardButton p_defaultButton, + QWidget *p_parent); + + static QString TypeTitle(MessageBoxHelper::Type p_type); + + static QMessageBox::Icon TypeIcon(MessageBoxHelper::Type p_type); + + }; +} // ns vnotex + +#endif // MESSAGEBOXHELPER_H diff --git a/src/widgets/navigationmode.cpp b/src/widgets/navigationmode.cpp new file mode 100644 index 00000000..852f66d5 --- /dev/null +++ b/src/widgets/navigationmode.cpp @@ -0,0 +1,217 @@ +#include "navigationmode.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "treewidget.h" +#include +#include +#include + +using namespace vnotex; + +NavigationMode::NavigationMode(Type p_type, QWidget *p_widget) + : m_type(p_type), + m_widget(p_widget) +{ +} + +void NavigationMode::registerNavigation(QChar p_majorKey) +{ + m_majorKey = p_majorKey; +} + +void NavigationMode::hideNavigation() +{ + clearNavigation(); +} + +void NavigationMode::clearNavigation() +{ + m_secondKeyMap.clear(); + for (auto label : m_navigationLabels) { + delete label; + } + m_navigationLabels.clear(); + + m_isMajorKeyConsumed = false; +} + +QChar NavigationMode::generateSecondKey(int p_idx) +{ + if (p_idx < 0 || p_idx >= c_maxNumOfNavigationItems) { + return QChar(); + } + + if (p_idx < 26) { + return QChar('a' + p_idx); + } else { + return QChar('0' + p_idx - 26); + } +} + +QString NavigationMode::generateLabelString(QChar p_secondKey) const +{ + return p_secondKey.isNull() ? QString(m_majorKey) : QString(m_majorKey) + p_secondKey; +} + +static QString generateNavigationLabelStyle(const QString &p_str, bool p_tiny) +{ + static int lastLen = -1; + static int pxWidth = 24; + static int pxHeight = 24; + const int fontPt = p_tiny ? 12 : 15; + + auto fontFamily = WidgetUtils::getMonospaceFont(); + + if (p_str.size() != lastLen) { + QFont font(fontFamily, fontPt); + font.setBold(true); + QFontMetrics fm(font); + pxWidth = fm.width(p_str); + pxHeight = fm.capHeight() + 5; + lastLen = p_str.size(); + } + + const auto &themeMgr = VNoteX::getInst().getThemeMgr(); + QColor bg(themeMgr.paletteColor(QStringLiteral("widgets#navigationlabel#bg"))); + bg.setAlpha(200); + + QString style = QString("background-color: %1;" + "color: %2;" + "font-size: %3pt;" + "font: bold;" + "font-family: %4;" + "border-radius: 3px;" + "min-width: %5px;" + "max-width: %5px;") + .arg(bg.name(QColor::HexArgb)) + .arg(themeMgr.paletteColor(QStringLiteral("widgets#navigationlabel#fg"))) + .arg(fontPt) + .arg(fontFamily) + .arg(pxWidth); + + if (p_tiny) { + style += QString("margin: 0px;" + "padding: 0px;" + "min-height: %1px;" + "max-height: %1px;").arg(pxHeight); + } + + return style; +} + +QLabel *NavigationMode::createNavigationLabel(QChar p_secondKey, QWidget *p_parent) const +{ + QString labelStr = generateLabelString(p_secondKey); + QLabel *label = new QLabel(labelStr, p_parent); + label->setStyleSheet(generateNavigationLabelStyle(labelStr, false)); + return label; +} + +NavigationMode::Status NavigationMode::handleKeyNavigation(int p_key) +{ + Status sta; + auto keyChar = Utils::keyToChar(p_key, true); + if (m_isMajorKeyConsumed && !keyChar.isNull()) { + m_isMajorKeyConsumed = false; + sta.m_isTargetHit = true; + auto it = m_secondKeyMap.find(keyChar); + if (it != m_secondKeyMap.end()) { + sta.m_isKeyConsumed = true; + handleTargetHit(it.value()); + } + } else if (keyChar == m_majorKey) { + // Major key pressed. + sta.m_isKeyConsumed = true; + switch (m_type) { + case Type::SingleKey: + sta.m_isTargetHit = true; + handleTargetHit(nullptr); + break; + + case Type::StagedDoubleKeys: + // Hit the major stage. + handleTargetHit(nullptr); + + // Show the second stage. + showNavigationWithDoubleKeys(); + + Q_FALLTHROUGH(); + + case Type::DoubleKeys: + if (m_secondKeyMap.isEmpty()) { + sta.m_isTargetHit = true; + } else { + m_isMajorKeyConsumed = true; + } + break; + } + } + + return sta; +} + +void NavigationMode::showNavigation() +{ + clearNavigation(); + + if (!isTargetVisible()) { + return; + } + + switch (m_type) { + case Type::SingleKey: + Q_FALLTHROUGH(); + case Type::StagedDoubleKeys: + { + auto label = createNavigationLabel(QChar(), m_widget); + placeNavigationLabel(-1, nullptr, label); + label->show(); + m_navigationLabels.append(label); + break; + } + + case Type::DoubleKeys: + { + showNavigationWithDoubleKeys(); + break; + } + } +} + +bool NavigationMode::isTargetVisible() +{ + return m_widget->isVisible(); +} + +QVector NavigationMode::getVisibleNavigationItems() +{ + return QVector(); +} + +void NavigationMode::showNavigationWithDoubleKeys() +{ + // Generate labels for visible items. + auto items = getVisibleNavigationItems(); + for (int i = 0; i < items.size(); ++i) { + const auto key = generateSecondKey(i); + if (key.isNull()) { + break; + } + + m_secondKeyMap[key] = items[i]; + + auto label = createNavigationLabel(key, m_widget); + placeNavigationLabel(i, items[i], label); + label->show(); + + m_navigationLabels.append(label); + } +} diff --git a/src/widgets/navigationmode.h b/src/widgets/navigationmode.h new file mode 100644 index 00000000..805042c5 --- /dev/null +++ b/src/widgets/navigationmode.h @@ -0,0 +1,88 @@ +#ifndef NAVIGATIONMODE_H +#define NAVIGATIONMODE_H + +#include +#include +#include + +#include + +class QListWidget; +class QListWidgetItem; +class QTreeWidget; +class QTreeWidgetItem; +class QLabel; +class QWidget; + +namespace vnotex +{ + // Interface for Navigation Mode. + // Need to inherit this class if one widget wants to support Navigation mode. + class NavigationMode + { + public: + struct Status + { + bool m_isKeyConsumed = false; + bool m_isTargetHit = false; + }; + + virtual ~NavigationMode() {} + + virtual void registerNavigation(QChar p_majorKey); + + virtual void showNavigation(); + + virtual void hideNavigation(); + + virtual NavigationMode::Status handleKeyNavigation(int p_key); + + protected: + enum class Type + { + SingleKey, + DoubleKeys, + StagedDoubleKeys + }; + + explicit NavigationMode(NavigationMode::Type p_type, QWidget *p_widget); + + // @p_item: if it is null, that means it is a major key hit; otherwise, it is a second key hit. + virtual void handleTargetHit(void *p_item) = 0; + + virtual bool isTargetVisible(); + + virtual QVector getVisibleNavigationItems(); + + // @p_idx: -1 for SingleKey and the major stage of StagedDoubleKeys. + virtual void placeNavigationLabel(int p_idx, void * p_item, QLabel *p_label) = 0; + + virtual void showNavigationWithDoubleKeys(); + + virtual void clearNavigation(); + + // a-z and 0-9 are allowed for second key. + static const int c_maxNumOfNavigationItems = 36; + + private: + QString generateLabelString(QChar p_secondKey) const; + + QLabel *createNavigationLabel(QChar p_secondKey, QWidget *p_parent) const; + + static QChar generateSecondKey(int p_idx); + + Type m_type = Type::SingleKey; + + QWidget *m_widget = nullptr; + + QChar m_majorKey; + + QMap m_secondKeyMap; + + bool m_isMajorKeyConsumed = false; + + QVector m_navigationLabels; + }; +} // ns vnotex + +#endif // NAVIGATIONMODE_H diff --git a/src/widgets/navigationmodemgr.cpp b/src/widgets/navigationmodemgr.cpp new file mode 100644 index 00000000..7949e3e7 --- /dev/null +++ b/src/widgets/navigationmodemgr.cpp @@ -0,0 +1,161 @@ +#include "navigationmodemgr.h" + +#include +#include +#include +#include +#include + +#include +#include +#include +#include "navigationmode.h" + +using namespace vnotex; + +QWidget *NavigationModeMgr::s_widget = nullptr; + +NavigationModeMgr::NavigationModeMgr() + : QObject(nullptr) +{ + Q_ASSERT(s_widget); + const auto &coreConfig = ConfigMgr::getInst().getCoreConfig(); + auto keys = coreConfig.getShortcut(CoreConfig::Shortcut::NavigationMode); + auto shortcut = WidgetUtils::createShortcut(keys, s_widget, Qt::ApplicationShortcut); + if (!shortcut) { + qWarning() << "failed to create shortcut for NavigationMode" << keys; + return; + } + connect(shortcut, &QShortcut::activated, + this, &NavigationModeMgr::triggerNavigationMode); +} + +NavigationModeMgr::~NavigationModeMgr() +{ +} + +NavigationModeMgr &NavigationModeMgr::getInst() +{ + static NavigationModeMgr mgr; + return mgr; +} + +void NavigationModeMgr::registerNavigationTarget(NavigationMode *p_target) +{ + auto key = getNextMajorKey(); + if (!key.isNull()) { + p_target->registerNavigation(key); + m_targets.push_back(Target(p_target, true)); + } else { + qWarning() << "failed to register navigation target for no major key available" << p_target; + } +} + +QChar NavigationModeMgr::getNextMajorKey() +{ + QChar ret = m_nextMajorKey; + if (m_nextMajorKey == 'z') { + m_nextMajorKey = QChar(); + } else if (!m_nextMajorKey.isNull()) { + m_nextMajorKey = QChar(m_nextMajorKey.toLatin1() + 1); + } + return ret; +} + +void NavigationModeMgr::triggerNavigationMode() +{ + if (m_targets.isEmpty()) { + qInfo() << "no navigation target"; + return; + } + + m_activated = true; + + qApp->installEventFilter(this); + + for (auto &target : m_targets) { + target.m_available = true; + target.m_target->showNavigation(); + } +} + +void NavigationModeMgr::init(QWidget *p_widget) +{ + s_widget = p_widget; +} + +void NavigationModeMgr::exitNavigationMode() +{ + m_activated = false; + qApp->removeEventFilter(this); + + for (auto &target : m_targets) { + target.m_available = true; + target.m_target->hideNavigation(); + } +} + +bool NavigationModeMgr::eventFilter(QObject *p_obj, QEvent *p_event) +{ + if (m_activated) { + switch (p_event->type()) { + case QEvent::KeyPress: + { + bool ret = handleKeyPress(static_cast(p_event)); + if (ret) { + return true; + } + break; + } + + case QEvent::MouseButtonPress: + exitNavigationMode(); + break; + + default: + break; + } + } + + return QObject::eventFilter(p_obj, p_event); +} + +bool NavigationModeMgr::handleKeyPress(QKeyEvent *p_event) +{ + int key = p_event->key(); + auto modifiers = p_event->modifiers(); + + if (WidgetUtils::isMetaKey(key)) { + return false; + } + + bool hasConsumed = false; + bool pending = false; + for (auto &target : m_targets) { + if (hasConsumed) { + target.m_available = false; + target.m_target->hideNavigation(); + continue; + } + if (target.m_available) { + auto sta = target.m_target->handleKeyNavigation(key); + if (sta.m_isKeyConsumed) { + hasConsumed = true; + if (!sta.m_isTargetHit) { + // Consumed but not hit. Need more keys. + pending = true; + } + } else { + // Do not ask this target any more. + target.m_available = false; + target.m_target->hideNavigation(); + } + } + } + + if (!pending) { + exitNavigationMode(); + } + + return true; +} diff --git a/src/widgets/navigationmodemgr.h b/src/widgets/navigationmodemgr.h new file mode 100644 index 00000000..526b365e --- /dev/null +++ b/src/widgets/navigationmodemgr.h @@ -0,0 +1,68 @@ +#ifndef NAVIGATIONMODEMGR_H +#define NAVIGATIONMODEMGR_H + +#include + +#include +#include + +class QKeyEvent; + +namespace vnotex +{ + class NavigationMode; + + class NavigationModeMgr : public QObject + { + Q_OBJECT + public: + ~NavigationModeMgr(); + + void registerNavigationTarget(NavigationMode *p_target); + + static NavigationModeMgr &getInst(); + + static void init(QWidget *p_widget); + + protected: + bool eventFilter(QObject *p_obj, QEvent *p_event) Q_DECL_OVERRIDE; + + private slots: + void triggerNavigationMode(); + + private: + struct Target + { + Target() = default; + + Target(NavigationMode *p_target, bool p_available) + : m_target(p_target), + m_available(p_available) + { + } + + NavigationMode *m_target = nullptr; + + bool m_available = false; + }; + + NavigationModeMgr(); + + QChar getNextMajorKey(); + + void exitNavigationMode(); + + // Return true if the event is consumed. + bool handleKeyPress(QKeyEvent *p_event); + + QChar m_nextMajorKey = 'a'; + + QVector m_targets; + + bool m_activated = false; + + static QWidget *s_widget; + }; +} + +#endif // NAVIGATIONMODEMGR_H diff --git a/src/widgets/navigationmodewrapper.h b/src/widgets/navigationmodewrapper.h new file mode 100644 index 00000000..c8380f96 --- /dev/null +++ b/src/widgets/navigationmodewrapper.h @@ -0,0 +1,100 @@ +#ifndef NAVIGATIONMODEWRAPPER_H +#define NAVIGATIONMODEWRAPPER_H + +#include "navigationmode.h" + +#include +#include + +#include +#include + +#include "listwidget.h" +#include "treewidget.h" + +namespace vnotex +{ + template + class NavigationModeWrapper : public NavigationMode + { + public: + NavigationModeWrapper(T *p_widget); + + // NavigationMode. + protected: + QVector getVisibleNavigationItems() Q_DECL_OVERRIDE; + + void placeNavigationLabel(int p_idx, void *p_item, QLabel *p_label) Q_DECL_OVERRIDE; + + void handleTargetHit(void *p_item) Q_DECL_OVERRIDE; + + private: + QVector getVisibleItems() const + { + return QVector(); + } + + T *m_widget = nullptr; + }; + + template + NavigationModeWrapper::NavigationModeWrapper(T *p_widget) + : NavigationMode(NavigationMode::Type::DoubleKeys, p_widget), + m_widget(p_widget) + { + } + + template + QVector NavigationModeWrapper::getVisibleNavigationItems() + { + QVector items; + auto rawItems = getVisibleItems(); + items.reserve(rawItems.size()); + for (auto it : rawItems) { + items.push_back(it); + } + return items; + } + + template + void NavigationModeWrapper::placeNavigationLabel(int p_idx, void *p_item, QLabel *p_label) + { + Q_UNUSED(p_idx); + Q_ASSERT(p_item); + + int extraWidth = p_label->width() + 2; + auto vbar = m_widget->verticalScrollBar(); + if (vbar && vbar->minimum() != vbar->maximum()) { + extraWidth += vbar->width(); + } + + auto item = static_cast(p_item); + const auto rt = m_widget->visualItemRect(item); + const int x = rt.x() + m_widget->width() - extraWidth; + const int y = rt.y(); + p_label->move(x, y); + } + + template + void NavigationModeWrapper::handleTargetHit(void *p_item) + { + Q_ASSERT(p_item); + auto item = static_cast(p_item); + m_widget->setCurrentItem(item); + m_widget->setFocus(); + } + + template <> + inline QVector NavigationModeWrapper::getVisibleItems() const + { + return TreeWidget::getVisibleItems(m_widget); + } + + template <> + inline QVector NavigationModeWrapper::getVisibleItems() const + { + return ListWidget::getVisibleItems(m_widget); + } +} + +#endif // NAVIGATIONMODEWRAPPER_H diff --git a/src/widgets/notebookexplorer.cpp b/src/widgets/notebookexplorer.cpp new file mode 100644 index 00000000..cf505fde --- /dev/null +++ b/src/widgets/notebookexplorer.cpp @@ -0,0 +1,357 @@ +#include "notebookexplorer.h" + +#include +#include + +#include "titlebar.h" +#include "dialogs/newnotebookdialog.h" +#include "dialogs/newnotebookfromfolderdialog.h" +#include "dialogs/newfolderdialog.h" +#include "dialogs/newnotedialog.h" +#include "dialogs/managenotebooksdialog.h" +#include "dialogs/importnotebookdialog.h" +#include "dialogs/importfolderdialog.h" +#include "dialogs/importlegacynotebookdialog.h" +#include "vnotex.h" +#include "mainwindow.h" +#include "notebook/notebook.h" +#include "notebookmgr.h" +#include +#include +#include +#include "notebookselector.h" +#include "notebooknodeexplorer.h" +#include "messageboxhelper.h" +#include +#include +#include +#include +#include +#include "navigationmodemgr.h" + +using namespace vnotex; + +NotebookExplorer::NotebookExplorer(QWidget *p_parent) + : QFrame(p_parent) +{ + setupUI(); +} + +void NotebookExplorer::setupUI() +{ + auto mainLayout = new QVBoxLayout(this); + mainLayout->setContentsMargins(0, 0, 0, 0); + + // Title bar. + auto titleBar = setupTitleBar(this); + mainLayout->addWidget(titleBar); + + // Selector. + m_selector = new NotebookSelector(this); + m_selector->setWhatsThis(tr("Select one of all the notebooks as current notebook.
    " + "Move mouse on one item to check its details.")); + NavigationModeMgr::getInst().registerNavigationTarget(m_selector); + connect(m_selector, QOverload::of(&QComboBox::activated), + this, [this](int p_idx) { + auto id = static_cast(m_selector->itemData(p_idx).toULongLong()); + emit notebookActivated(id); + }); + mainLayout->addWidget(m_selector); + + m_nodeExplorer = new NotebookNodeExplorer(this); + connect(m_nodeExplorer, &NotebookNodeExplorer::nodeActivated, + &VNoteX::getInst(), &VNoteX::openNodeRequested); + connect(m_nodeExplorer, &NotebookNodeExplorer::nodeAboutToMove, + &VNoteX::getInst(), &VNoteX::nodeAboutToMove); + connect(m_nodeExplorer, &NotebookNodeExplorer::nodeAboutToRemove, + &VNoteX::getInst(), &VNoteX::nodeAboutToRemove); + mainLayout->addWidget(m_nodeExplorer); + + setFocusProxy(m_nodeExplorer); +} + +TitleBar *NotebookExplorer::setupTitleBar(QWidget *p_parent) +{ + auto titleBar = new TitleBar(tr("Notebook"), + TitleBar::Action::Menu, + p_parent); + titleBar->setWhatsThis(tr("This title bar contains buttons and menu to manage notebooks and notes.")); + + titleBar->addMenuSeparator(); + auto newNoteAct = titleBar->addMenuAction(QStringLiteral("new_note.svg"), + tr("New N&ote"), + titleBar, + []() { + emit VNoteX::getInst().newNoteRequested(); + }); + WidgetUtils::addActionShortcutText(newNoteAct, + ConfigMgr::getInst().getCoreConfig().getShortcut(CoreConfig::Shortcut::NewNote)); + + titleBar->addMenuSeparator(); + auto newFolderAct = titleBar->addMenuAction(QStringLiteral("new_folder.svg"), + tr("New &Folder"), + titleBar, + []() { + emit VNoteX::getInst().newFolderRequested(); + }); + + connect(this, &NotebookExplorer::updateTitleBarMenuActions, + this, [=]() { + newFolderAct->setEnabled(m_currentNotebook); + newNoteAct->setEnabled(m_currentNotebook); + }); + + titleBar->addMenuSeparator(); + titleBar->addMenuAction(QStringLiteral("new_notebook.svg"), + tr("New &Notebook"), + titleBar, + []() { + emit VNoteX::getInst().newNotebookRequested(); + }); + + titleBar->addMenuAction(QStringLiteral("new_notebook_from_folder.svg"), + tr("N&ew Notebook From Folder"), + titleBar, + []() { + emit VNoteX::getInst().newNotebookFromFolderRequested(); + }); + + titleBar->addMenuAction(QStringLiteral("import_notebook.svg"), + tr("&Import Notebook"), + titleBar, + []() { + emit VNoteX::getInst().importNotebookRequested(); + }); + + titleBar->addMenuAction(QStringLiteral("import_notebook_of_vnote2.svg"), + tr("Import Legacy Notebook Of &VNote 2.0"), + titleBar, + []() { + emit VNoteX::getInst().importLegacyNotebookRequested(); + }); + + titleBar->addMenuAction(QStringLiteral("manage_notebooks.svg"), + tr("&Manage Notebooks"), + titleBar, + [this]() { + ManageNotebooksDialog dialog(m_currentNotebook.data(), + VNoteX::getInst().getMainWindow()); + dialog.exec(); + }); + + titleBar->addMenuSeparator(); + titleBar->addMenuAction(tr("Import File"), + titleBar, + [this]() { + emit VNoteX::getInst().importFileRequested(); + }); + + titleBar->addMenuAction(tr("Import Folder"), + titleBar, + [this]() { + emit VNoteX::getInst().importFolderRequested(); + }); + + return titleBar; +} + +void NotebookExplorer::loadNotebooks() +{ + auto ¬ebookMgr = VNoteX::getInst().getNotebookMgr(); + const auto ¬ebooks = notebookMgr.getNotebooks(); + m_selector->setNotebooks(notebooks); + + emit updateTitleBarMenuActions(); +} + +void NotebookExplorer::reloadNotebook(const Notebook *p_notebook) +{ + m_selector->reloadNotebook(p_notebook); +} + +void NotebookExplorer::setCurrentNotebook(const QSharedPointer &p_notebook) +{ + m_currentNotebook = p_notebook; + + ID id = p_notebook ? p_notebook->getId() : Notebook::InvalidId; + m_selector->setCurrentNotebook(id); + + m_nodeExplorer->setNotebook(p_notebook); + + emit updateTitleBarMenuActions(); +} + +void NotebookExplorer::newNotebook() +{ + NewNotebookDialog dialog(VNoteX::getInst().getMainWindow()); + dialog.exec(); +} + +void NotebookExplorer::importNotebook() +{ + ImportNotebookDialog dialog(VNoteX::getInst().getMainWindow()); + dialog.exec(); +} + +void NotebookExplorer::newFolder() +{ + auto node = checkNotebookAndGetCurrentExploredFolderNode(); + if (!node) { + return; + } + + if (m_currentNotebook->isRecycleBinNode(node) + || m_currentNotebook->isNodeInRecycleBin(node)) { + MessageBoxHelper::notify(MessageBoxHelper::Information, + tr("Could not create folder within Recycle Bin."), + VNoteX::getInst().getMainWindow()); + return; + } + + NewFolderDialog dialog(node, VNoteX::getInst().getMainWindow()); + if (dialog.exec() == QDialog::Accepted) { + m_nodeExplorer->setCurrentNode(dialog.getNewNode().data()); + } +} + +void NotebookExplorer::newNote() +{ + auto node = checkNotebookAndGetCurrentExploredFolderNode(); + if (!node) { + return; + } + + if (m_currentNotebook->isRecycleBinNode(node) + || m_currentNotebook->isNodeInRecycleBin(node)) { + MessageBoxHelper::notify(MessageBoxHelper::Information, + tr("Could not create note within Recycle Bin."), + VNoteX::getInst().getMainWindow()); + return; + } + + NewNoteDialog dialog(node, VNoteX::getInst().getMainWindow()); + if (dialog.exec() == QDialog::Accepted) { + m_nodeExplorer->setCurrentNode(dialog.getNewNode().data()); + + // Open it right now. + auto paras = QSharedPointer::create(); + paras->m_mode = FileOpenParameters::Mode::Edit; + paras->m_newFile = true; + emit VNoteX::getInst().openNodeRequested(dialog.getNewNode().data(), paras); + } +} + +Node *NotebookExplorer::currentExploredFolderNode() const +{ + Q_ASSERT(m_currentNotebook); + + auto node = m_nodeExplorer->getCurrentNode(); + if (node) { + if (node->getType() == Node::Type::File) { + node = node->getParent(); + } + Q_ASSERT(node && node->getType() == Node::Type::Folder); + } else { + node = m_currentNotebook->getRootNode().data(); + } + + return node; +} + +Node *NotebookExplorer::checkNotebookAndGetCurrentExploredFolderNode() const +{ + if (!m_currentNotebook) { + MessageBoxHelper::notify(MessageBoxHelper::Information, + tr("Please first create a notebook to hold your data."), + VNoteX::getInst().getMainWindow()); + return nullptr; + } + + auto node = currentExploredFolderNode(); + Q_ASSERT(m_currentNotebook.data() == node->getNotebook()); + return node; +} + +void NotebookExplorer::newNotebookFromFolder() +{ + NewNotebookFromFolderDialog dialog(VNoteX::getInst().getMainWindow()); + dialog.exec(); +} + +void NotebookExplorer::importFile() +{ + auto node = checkNotebookAndGetCurrentExploredFolderNode(); + if (!node) { + return; + } + + if (m_currentNotebook->isRecycleBinNode(node) + || m_currentNotebook->isNodeInRecycleBin(node)) { + MessageBoxHelper::notify(MessageBoxHelper::Information, + tr("Could not create file within Recycle Bin."), + VNoteX::getInst().getMainWindow()); + return; + } + + static QString lastFolderPath = QDir::homePath(); + QStringList files = QFileDialog::getOpenFileNames(VNoteX::getInst().getMainWindow(), + tr("Select Files To Import"), + lastFolderPath); + if (files.isEmpty()) { + return; + } + + QString errMsg; + for (const auto &file : files) { + try { + m_currentNotebook->copyAsNode(node, Node::Type::File, file); + } catch (Exception &p_e) { + errMsg += tr("Failed to add file (%1) as node (%2).\n").arg(file, p_e.what()); + } + } + + if (!errMsg.isEmpty()) { + MessageBoxHelper::notify(MessageBoxHelper::Critical, errMsg, VNoteX::getInst().getMainWindow()); + } + + emit m_currentNotebook->nodeUpdated(node); + m_nodeExplorer->setCurrentNode(node); +} + +void NotebookExplorer::importFolder() +{ + auto node = checkNotebookAndGetCurrentExploredFolderNode(); + if (!node) { + return; + } + + if (m_currentNotebook->isRecycleBinNode(node) + || m_currentNotebook->isNodeInRecycleBin(node)) { + MessageBoxHelper::notify(MessageBoxHelper::Information, + tr("Could not create folder within Recycle Bin."), + VNoteX::getInst().getMainWindow()); + return; + } + + ImportFolderDialog dialog(node, VNoteX::getInst().getMainWindow()); + if (dialog.exec() == QDialog::Accepted) { + m_nodeExplorer->setCurrentNode(dialog.getNewNode().data()); + } +} + +void NotebookExplorer::importLegacyNotebook() +{ + ImportLegacyNotebookDialog dialog(VNoteX::getInst().getMainWindow()); + dialog.exec(); +} + +void NotebookExplorer::locateNode(Node *p_node) +{ + Q_ASSERT(p_node); + auto nb = p_node->getNotebook(); + if (nb != m_currentNotebook) { + emit notebookActivated(nb->getId()); + } + m_nodeExplorer->setCurrentNode(p_node); + m_nodeExplorer->setFocus(); +} diff --git a/src/widgets/notebookexplorer.h b/src/widgets/notebookexplorer.h new file mode 100644 index 00000000..c76760b6 --- /dev/null +++ b/src/widgets/notebookexplorer.h @@ -0,0 +1,71 @@ +#ifndef NOTEBOOKEXPLORER_H +#define NOTEBOOKEXPLORER_H + +#include +#include + +#include "global.h" + +namespace vnotex +{ + class Notebook; + class TitleBar; + class NotebookSelector; + class NotebookNodeExplorer; + class Node; + + class NotebookExplorer : public QFrame + { + Q_OBJECT + public: + explicit NotebookExplorer(QWidget *p_parent = nullptr); + + public slots: + void newNotebook(); + + void newNotebookFromFolder(); + + void importNotebook(); + + void loadNotebooks(); + + void reloadNotebook(const Notebook *p_notebook); + + void setCurrentNotebook(const QSharedPointer &p_notebook); + + void newFolder(); + + void newNote(); + + void importFile(); + + void importFolder(); + + void importLegacyNotebook(); + + void locateNode(Node *p_node); + + signals: + void notebookActivated(ID p_notebookId); + + // Internal use only. + void updateTitleBarMenuActions(); + + private: + void setupUI(); + + TitleBar *setupTitleBar(QWidget *p_parent = nullptr); + + Node *currentExploredFolderNode() const; + + Node *checkNotebookAndGetCurrentExploredFolderNode() const; + + NotebookSelector *m_selector = nullptr; + + NotebookNodeExplorer *m_nodeExplorer = nullptr; + + QSharedPointer m_currentNotebook; + }; +} // ns vnotex + +#endif // NOTEBOOKEXPLORER_H diff --git a/src/widgets/notebooknodeexplorer.cpp b/src/widgets/notebooknodeexplorer.cpp new file mode 100644 index 00000000..37917535 --- /dev/null +++ b/src/widgets/notebooknodeexplorer.cpp @@ -0,0 +1,1328 @@ +#include "notebooknodeexplorer.h" + +#include + +#include +#include +#include "exception.h" +#include "messageboxhelper.h" +#include "vnotex.h" +#include "mainwindow.h" +#include +#include "treewidget.h" +#include "dialogs/notepropertiesdialog.h" +#include "dialogs/folderpropertiesdialog.h" +#include "dialogs/deleteconfirmdialog.h" +#include +#include +#include +#include "notebookmgr.h" +#include "widgetsfactory.h" +#include "navigationmodemgr.h" + +#include +#include + +using namespace vnotex; + +const QString NotebookNodeExplorer::c_nodeIconForegroundName = "widgets#notebookexplorer#node_icon#fg"; + +QIcon NotebookNodeExplorer::s_folderNodeIcon; + +QIcon NotebookNodeExplorer::s_fileNodeIcon; + +QIcon NotebookNodeExplorer::s_recycleBinNodeIcon; + +NotebookNodeExplorer::NodeData::NodeData() +{ +} + +NotebookNodeExplorer::NodeData::NodeData(Node *p_node, bool p_loaded) + : m_type(NodeType::Node), + m_node(p_node), + m_loaded(p_loaded) +{ +} + +NotebookNodeExplorer::NodeData::NodeData(const QString &p_name) + : m_type(NodeType::Attachment), + m_name(p_name), + m_loaded(true) +{ +} + +NotebookNodeExplorer::NodeData::NodeData(const NodeData &p_other) +{ + m_type = p_other.m_type; + switch (m_type) { + case NodeType::Node: + m_node = p_other.m_node; + break; + + case NodeType::Attachment: + m_name = p_other.m_name; + break; + + default: + m_node = p_other.m_node; + m_name = p_other.m_name; + break; + } + + m_loaded = p_other.m_loaded; +} + +NotebookNodeExplorer::NodeData::~NodeData() +{ +} + +NotebookNodeExplorer::NodeData &NotebookNodeExplorer::NodeData::operator=(const NodeData &p_other) +{ + if (&p_other == this) { + return *this; + } + + m_type = p_other.m_type; + switch (m_type) { + case NodeType::Node: + m_node = p_other.m_node; + break; + + case NodeType::Attachment: + m_name = p_other.m_name; + break; + + default: + m_node = p_other.m_node; + m_name = p_other.m_name; + break; + } + + m_loaded = p_other.m_loaded; + + return *this; +} + +bool NotebookNodeExplorer::NodeData::isValid() const +{ + return m_type != NodeType::Invalid; +} + +bool NotebookNodeExplorer::NodeData::isNode() const +{ + return m_type == NodeType::Node; +} + +bool NotebookNodeExplorer::NodeData::isAttachment() const +{ + return m_type == NodeType::Attachment; +} + +NotebookNodeExplorer::NodeData::NodeType NotebookNodeExplorer::NodeData::getType() const +{ + return m_type; +} + +Node *NotebookNodeExplorer::NodeData::getNode() const +{ + Q_ASSERT(isNode()); + return m_node; +} + +const QString &NotebookNodeExplorer::NodeData::getName() const +{ + Q_ASSERT(isAttachment()); + return m_name; +} + +void NotebookNodeExplorer::NodeData::clear() +{ + m_type = NodeType::Invalid; + m_node = nullptr; + m_name.clear(); + m_loaded = false; +} + +bool NotebookNodeExplorer::NodeData::matched(const Node *p_node) const +{ + if (isNode() && m_node == p_node) { + return true; + } + + return false; +} + +bool NotebookNodeExplorer::NodeData::isLoaded() const +{ + return m_loaded; +} + + +NotebookNodeExplorer::NotebookNodeExplorer(QWidget *p_parent) + : QWidget(p_parent) +{ + initNodeIcons(); + + setupUI(); +} + +void NotebookNodeExplorer::initNodeIcons() const +{ + if (!s_folderNodeIcon.isNull()) { + return; + } + + const auto &themeMgr = VNoteX::getInst().getThemeMgr(); + const auto fg = themeMgr.paletteColor(c_nodeIconForegroundName); + const QString folderIconName("folder_node.svg"); + const QString fileIconName("file_node.svg"); + const QString recycleBinIconName("recycle_bin.svg"); + + s_folderNodeIcon = IconUtils::fetchIcon(themeMgr.getIconFile(folderIconName), fg); + s_fileNodeIcon = IconUtils::fetchIcon(themeMgr.getIconFile(fileIconName), fg); + s_recycleBinNodeIcon = IconUtils::fetchIcon(themeMgr.getIconFile(recycleBinIconName), fg); +} + +void NotebookNodeExplorer::setupUI() +{ + auto mainLayout = new QVBoxLayout(this); + mainLayout->setContentsMargins(0, 0, 0, 0); + + m_splitter = new QSplitter(this); + mainLayout->addWidget(m_splitter); + + setupMasterExplorer(m_splitter); + m_splitter->addWidget(m_masterExplorer); + + setFocusProxy(m_masterExplorer); +} + +void NotebookNodeExplorer::setupMasterExplorer(QWidget *p_parent) +{ + m_masterExplorer = new TreeWidget(TreeWidget::ClickSpaceToClearSelection, p_parent); + TreeWidget::setupSingleColumnHeaderlessTree(m_masterExplorer, true, true); + TreeWidget::showHorizontalScrollbar(m_masterExplorer); + + m_navigationWrapper.reset(new NavigationModeWrapper(m_masterExplorer)); + NavigationModeMgr::getInst().registerNavigationTarget(m_navigationWrapper.data()); + + connect(m_masterExplorer, &QTreeWidget::itemExpanded, + this, [this](QTreeWidgetItem *p_item) { + auto cnt = p_item->childCount(); + for (int i = 0; i < cnt; ++i) { + auto child = p_item->child(i); + auto data = getItemNodeData(child); + if (data.isNode() && !data.isLoaded()) { + loadNode(child, data.getNode(), 1); + } + } + }); + + connect(m_masterExplorer, &QTreeWidget::customContextMenuRequested, + this, [this](const QPoint &p_pos) { + if (!m_notebook) { + return; + } + + auto item = m_masterExplorer->itemAt(p_pos); + auto data = getItemNodeData(item); + QScopedPointer menu(WidgetsFactory::createMenu()); + if (!data.isValid()) { + createContextMenuOnRoot(menu.data()); + } else { + if (!allSelectedItemsSameType()) { + return; + } + + if (data.isNode()) { + createContextMenuOnNode(menu.data(), data.getNode()); + } else if (data.isAttachment()) { + createContextMenuOnAttachment(menu.data(), data.getName()); + } + } + + if (!menu->isEmpty()) { + menu->exec(m_masterExplorer->mapToGlobal(p_pos)); + } + }); + + connect(m_masterExplorer, &QTreeWidget::itemActivated, + this, [this](QTreeWidgetItem *p_item, int p_column) { + Q_UNUSED(p_column); + auto data = getItemNodeData(p_item); + if (!data.isValid()) { + return; + } + + if (data.isNode()) { + emit nodeActivated(data.getNode(), QSharedPointer::create()); + } else if (data.isAttachment()) { + // TODO. + } + }); +} + +void NotebookNodeExplorer::setNotebook(const QSharedPointer &p_notebook) +{ + if (p_notebook == m_notebook) { + return; + } + + if (m_notebook) { + disconnect(m_notebook.data(), nullptr, this, nullptr); + } + + saveNotebookTreeState(); + + m_notebook = p_notebook; + + if (m_notebook) { + connect(m_notebook.data(), &Notebook::nodeUpdated, + this, [this](const Node *p_node) { + updateNode(p_node->getParent()); + }); + } + + generateNodeTree(); +} + +void NotebookNodeExplorer::clearExplorer() +{ + m_masterExplorer->clear(); +} + +void NotebookNodeExplorer::generateNodeTree() +{ + clearExplorer(); + + if (!m_notebook) { + return; + } + + try { + auto rootNode = m_notebook->getRootNode(); + + loadRootNode(rootNode.data()); + } catch (Exception &p_e) { + QString msg = tr("Fail to load nodes of notebook (%1) (%2).") + .arg(m_notebook->getName(), p_e.what()); + qCritical() << msg; + MessageBoxHelper::notify(MessageBoxHelper::Critical, msg, VNoteX::getInst().getMainWindow()); + } + + // Restore current item. + auto currentNode = stateCache()->getCurrentItem(); + + if (currentNode) { + setCurrentNode(currentNode); + } else { + // Do not focus the recycle bin. + focusNormalNode(); + } + + stateCache()->clear(); +} + +void NotebookNodeExplorer::loadRootNode(const Node *p_node) const +{ + Q_ASSERT(p_node->isLoaded()); + + // Render recycle bin node first. + auto recycleBinNode = m_notebook->getRecycleBinNode(); + if (recycleBinNode) { + loadRecycleBinNode(recycleBinNode.data()); + } + + for (auto &child : p_node->getChildren()) { + if (recycleBinNode == child) { + continue; + } + + auto item = new QTreeWidgetItem(m_masterExplorer); + loadNode(item, child.data(), 1); + } +} + +static void clearTreeWigetItemChildren(QTreeWidgetItem *p_item) +{ + auto children = p_item->takeChildren(); + for (auto &child : children) { + delete child; + } +} + +void NotebookNodeExplorer::loadNode(QTreeWidgetItem *p_item, Node *p_node, int p_level) const +{ + if (!p_node->isLoaded()) { + p_node->load(); + } + + clearTreeWigetItemChildren(p_item); + + fillTreeItem(p_item, p_node, p_level > 0); + + loadChildren(p_item, p_node, p_level - 1); + + if (stateCache()->contains(p_item)) { + p_item->setExpanded(true); + } +} + +void NotebookNodeExplorer::loadChildren(QTreeWidgetItem *p_item, Node *p_node, int p_level) const +{ + if (p_level < 0) { + return; + } + + for (auto &child : p_node->getChildren()) { + auto item = new QTreeWidgetItem(p_item); + loadNode(item, child.data(), p_level); + } +} + +void NotebookNodeExplorer::loadRecycleBinNode(Node *p_node) const +{ + auto item = new QTreeWidgetItem(); + item->setWhatsThis(Column::Name, + tr("Recycle bin of this notebook. Deleted files could be found here. " + "It is organized in folders named by date. Nodes could be moved to " + "other folders by Cut and Paste.")); + m_masterExplorer->insertTopLevelItem(0, item); + + loadRecycleBinNode(item, p_node, 1); +} + +void NotebookNodeExplorer::loadRecycleBinNode(QTreeWidgetItem *p_item, Node *p_node, int p_level) const +{ + if (!p_node->isLoaded()) { + p_node->load(); + } + + clearTreeWigetItemChildren(p_item); + + setItemNodeData(p_item, NodeData(p_node, true)); + p_item->setText(Column::Name, tr("Recycle Bin")); + p_item->setIcon(Column::Name, getNodeItemIcon(p_node)); + + loadChildren(p_item, p_node, p_level - 1); + + // No need to restore state. +} + +void NotebookNodeExplorer::fillTreeItem(QTreeWidgetItem *p_item, Node *p_node, bool p_loaded) const +{ + setItemNodeData(p_item, NodeData(p_node, p_loaded)); + p_item->setText(Column::Name, p_node->getName()); + p_item->setIcon(Column::Name, getNodeItemIcon(p_node)); + p_item->setToolTip(Column::Name, p_node->getName()); +} + +QIcon NotebookNodeExplorer::getNodeItemIcon(const Node *p_node) const +{ + switch (p_node->getType()) { + case Node::Type::File: + return s_fileNodeIcon; + + case Node::Type::Folder: + { + if (p_node->getUse() == Node::Use::RecycleBin) { + return s_recycleBinNodeIcon; + } + + return s_folderNodeIcon; + } + } + + return QIcon(); +} + +Node *NotebookNodeExplorer::getCurrentNode() const +{ + auto item = m_masterExplorer->currentItem(); + if (item) { + auto data = getItemNodeData(item); + while (data.isAttachment()) { + item = item->parent(); + if (item) { + data = getItemNodeData(item); + } else { + data.clear(); + } + } + + if (data.isNode()) { + return data.getNode(); + } + } + + return nullptr; +} + +void NotebookNodeExplorer::setItemNodeData(QTreeWidgetItem *p_item, const NodeData &p_data) +{ + p_item->setData(Column::Name, Qt::UserRole, QVariant::fromValue(p_data)); +} + +NotebookNodeExplorer::NodeData NotebookNodeExplorer::getItemNodeData(const QTreeWidgetItem *p_item) +{ + if (!p_item) { + return NodeData(); + } + + return p_item->data(Column::Name, Qt::UserRole).value(); +} + +void NotebookNodeExplorer::updateNode(Node *p_node) +{ + if (p_node && p_node->getNotebook() != m_notebook) { + return; + } + + auto item = findNode(p_node); + if (item) { + bool expanded = item->isExpanded(); + item->setExpanded(false); + + if (m_notebook->isRecycleBinNode(p_node)) { + loadRecycleBinNode(item, p_node, 1); + } else { + loadNode(item, p_node, 1); + } + + item->setExpanded(expanded); + } else { + saveNotebookTreeState(false); + + generateNodeTree(); + } +} + +QTreeWidgetItem *NotebookNodeExplorer::findNode(const Node *p_node) const +{ + if (!p_node) { + return nullptr; + } + + auto cnt = m_masterExplorer->topLevelItemCount(); + for (int i = 0; i < cnt; ++i) { + auto item = findNode(m_masterExplorer->topLevelItem(i), p_node); + if (item) { + return item; + } + } + + return nullptr; +} + +QTreeWidgetItem *NotebookNodeExplorer::findNode(QTreeWidgetItem *p_item, const Node *p_node) const +{ + auto data = getItemNodeData(p_item); + if (data.matched(p_node)) { + return p_item; + } + + auto cnt = p_item->childCount(); + for (int i = 0; i < cnt; ++i) { + auto item = findNode(p_item->child(i), p_node); + if (item) { + return item; + } + } + + return nullptr; +} + +QTreeWidgetItem *NotebookNodeExplorer::findNodeChild(QTreeWidgetItem *p_item, const Node *p_node) const +{ + auto cnt = p_item->childCount(); + for (int i = 0; i < cnt; ++i) { + auto child = p_item->child(i); + auto data = getItemNodeData(child); + if (data.matched(p_node)) { + return child; + } + } + + return nullptr; +} + +QTreeWidgetItem *NotebookNodeExplorer::findNodeTopLevelItem(QTreeWidget *p_tree, const Node *p_node) const +{ + auto cnt = p_tree->topLevelItemCount(); + for (int i = 0; i < cnt; ++i) { + auto child = p_tree->topLevelItem(i); + auto data = getItemNodeData(child); + if (data.matched(p_node)) { + return child; + } + } + + return nullptr; +} + +void NotebookNodeExplorer::setCurrentNode(Node *p_node) +{ + if (!p_node || !p_node->getParent()) { + m_masterExplorer->setCurrentItem(nullptr); + return; + } + + Q_ASSERT(p_node->getNotebook() == m_notebook); + + // Nodes from root to p_node. + QList nodes; + auto node = p_node; + while (node->getParent()) { + nodes.push_front(node); + node = node->getParent(); + } + + QList items; + auto nodeIt = nodes.constBegin(); + auto item = findNodeTopLevelItem(m_masterExplorer, *nodeIt); + if (!item) { + return; + } + items.push_back(item); + + ++nodeIt; + while (nodeIt != nodes.constEnd()) { + if (!item) { + return; + } + + // Find *nodeIt in children of item. + auto data = getItemNodeData(item); + Q_ASSERT(data.isNode()); + if (!data.isLoaded()) { + loadNode(item, data.getNode(), 1); + } + + auto childItem = findNodeChild(item, *nodeIt); + if (!childItem) { + return; + } + items.push_back(childItem); + + item = childItem; + ++nodeIt; + } + + Q_ASSERT(getItemNodeData(item).getNode() == p_node); + + for (auto &it : items) { + it->setExpanded(true); + } + + m_masterExplorer->setCurrentItem(item); +} + +void NotebookNodeExplorer::saveNotebookTreeState(bool p_saveCurrentItem) +{ + if (m_notebook) { + stateCache()->save(m_masterExplorer, p_saveCurrentItem); + } +} + +QSharedPointer> NotebookNodeExplorer::stateCache() const +{ + Q_ASSERT(m_notebook); + auto it = m_stateCache.find(m_notebook.data()); + if (it == m_stateCache.end()) { + auto keyFunc = [](const QTreeWidgetItem *p_item, bool &p_ok) { + auto data = NotebookNodeExplorer::getItemNodeData(p_item); + if (data.isNode()) { + p_ok = true; + return data.getNode(); + } + + p_ok = false; + return static_cast(nullptr); + }; + auto cache = QSharedPointer>::create(keyFunc); + it = const_cast(this)->m_stateCache.insert(m_notebook.data(), cache); + } + + return it.value(); +} + +void NotebookNodeExplorer::clearStateCache(const Notebook *p_notebook) +{ + auto it = m_stateCache.find(p_notebook); + if (it != m_stateCache.end()) { + it.value()->clear(); + } +} + +void NotebookNodeExplorer::createContextMenuOnRoot(QMenu *p_menu) +{ + auto act = createAction(Action::NewNote, p_menu); + p_menu->addAction(act); + + act = createAction(Action::NewFolder, p_menu); + p_menu->addAction(act); + + if (isPasteOnNodeAvailable(nullptr)) { + p_menu->addSeparator(); + act = createAction(Action::Paste, p_menu); + p_menu->addAction(act); + } + + p_menu->addSeparator(); + + act = createAction(Action::OpenLocation, p_menu); + p_menu->addAction(act); +} + +void NotebookNodeExplorer::createContextMenuOnNode(QMenu *p_menu, const Node *p_node) +{ + const int selectedSize = m_masterExplorer->selectedItems().size(); + QAction *act = nullptr; + + if (m_notebook->isRecycleBinNode(p_node)) { + // Recycle bin node. + if (selectedSize == 1) { + act = createAction(Action::EmptyRecycleBin, p_menu); + p_menu->addAction(act); + + act = createAction(Action::OpenLocation, p_menu); + p_menu->addAction(act); + } + } else if (m_notebook->isNodeInRecycleBin(p_node)) { + // Node in recycle bin. + act = createAction(Action::Cut, p_menu); + p_menu->addAction(act); + + act = createAction(Action::DeleteFromRecycleBin, p_menu); + p_menu->addAction(act); + + if (selectedSize == 1) { + p_menu->addSeparator(); + + act = createAction(Action::CopyPath, p_menu); + p_menu->addAction(act); + + act = createAction(Action::OpenLocation, p_menu); + p_menu->addAction(act); + } + } else { + act = createAction(Action::NewNote, p_menu); + p_menu->addAction(act); + + act = createAction(Action::NewFolder, p_menu); + p_menu->addAction(act); + + p_menu->addSeparator(); + + act = createAction(Action::Copy, p_menu); + p_menu->addAction(act); + + act = createAction(Action::Cut, p_menu); + p_menu->addAction(act); + + if (selectedSize == 1 && isPasteOnNodeAvailable(p_node)) { + act = createAction(Action::Paste, p_menu); + p_menu->addAction(act); + } + + act = createAction(Action::Delete, p_menu); + p_menu->addAction(act); + + act = createAction(Action::RemoveFromConfig, p_menu); + p_menu->addAction(act); + + if (selectedSize == 1) { + p_menu->addSeparator(); + + act = createAction(Action::CopyPath, p_menu); + p_menu->addAction(act); + + act = createAction(Action::OpenLocation, p_menu); + p_menu->addAction(act); + + act = createAction(Action::Properties, p_menu); + p_menu->addAction(act); + } + } +} + +void NotebookNodeExplorer::createContextMenuOnAttachment(QMenu *p_menu, const QString &p_name) +{ + Q_UNUSED(p_menu); + Q_UNUSED(p_name); +} + +static QIcon generateMenuActionIcon(const QString &p_name) +{ + const auto &themeMgr = VNoteX::getInst().getThemeMgr(); + return IconUtils::fetchIconWithDisabledState(themeMgr.getIconFile(p_name)); +} + +QAction *NotebookNodeExplorer::createAction(Action p_act, QObject *p_parent) +{ + QAction *act = nullptr; + switch (p_act) { + case Action::NewNote: + act = new QAction(generateMenuActionIcon("new_note.svg"), + tr("New N&ote"), + p_parent); + connect(act, &QAction::triggered, + this, []() { + emit VNoteX::getInst().newNoteRequested(); + }); + break; + + case Action::NewFolder: + act = new QAction(generateMenuActionIcon("new_folder.svg"), + tr("New &Folder"), + p_parent); + connect(act, &QAction::triggered, + this, []() { + emit VNoteX::getInst().newFolderRequested(); + }); + break; + + case Action::Properties: + act = new QAction(generateMenuActionIcon("properties.svg"), + tr("&Properties"), + p_parent); + connect(act, &QAction::triggered, + this, [this]() { + auto node = getCurrentNode(); + if (!node) { + return; + } + + int ret = QDialog::Rejected; + switch (node->getType()) { + case Node::Type::File: + { + NotePropertiesDialog dialog(node, VNoteX::getInst().getMainWindow()); + ret = dialog.exec(); + break; + } + + case Node::Type::Folder: + FolderPropertiesDialog dialog(node, VNoteX::getInst().getMainWindow()); + ret = dialog.exec(); + break; + } + + if (ret == QDialog::Accepted) { + setCurrentNode(node); + } + }); + break; + + case Action::OpenLocation: + act = new QAction(tr("Open &Location"), p_parent); + connect(act, &QAction::triggered, + this, [this]() { + QString locationPath; + auto node = getCurrentNode(); + if (node) { + locationPath = node->fetchAbsolutePath(); + if (node->getType() == Node::Type::File) { + locationPath = PathUtils::parentDirPath(locationPath); + } + } else if (m_notebook) { + locationPath = m_notebook->getRootFolderAbsolutePath(); + } + + if (!locationPath.isEmpty()) { + WidgetUtils::openUrlByDesktop(QUrl::fromLocalFile(locationPath)); + } + }); + break; + + case Action::CopyPath: + act = new QAction(tr("Cop&y Path"), p_parent); + connect(act, &QAction::triggered, + this, [this]() { + auto node = getCurrentNode(); + if (node) { + auto nodePath = node->fetchAbsolutePath(); + ClipboardUtils::setTextToClipboard(nodePath); + VNoteX::getInst().showStatusMessageShort(tr("Copied path: %1").arg(nodePath)); + } + }); + break; + + case Action::Copy: + act = new QAction(tr("&Copy"), p_parent); + connect(act, &QAction::triggered, + this, [this]() { + copySelectedNodes(false); + }); + break; + + case Action::Cut: + act = new QAction(tr("C&ut"), p_parent); + connect(act, &QAction::triggered, + this, [this]() { + copySelectedNodes(true); + }); + break; + + case Action::Paste: + act = new QAction(tr("&Paste"), p_parent); + connect(act, &QAction::triggered, + this, [this]() { + pasteNodesFromClipboard(); + }); + break; + + case Action::EmptyRecycleBin: + act = new QAction(tr("&Empty"), p_parent); + connect(act, &QAction::triggered, + this, [this]() { + auto rbNode = m_notebook->getRecycleBinNode().data(); + auto rbNodePath = rbNode->fetchAbsolutePath(); + int ret = MessageBoxHelper::questionOkCancel(MessageBoxHelper::Warning, + tr("Empty the recycle bin of this notebook?"), + tr("All files in recycle bin will be deleted permanently."), + tr("Location of recycle bin: %1").arg(rbNodePath)); + if (ret != QMessageBox::Ok) { + return; + } + + try { + m_notebook->emptyNode(rbNode, true); + } catch (Exception &p_e) { + MessageBoxHelper::notify(MessageBoxHelper::Critical, + tr("Fail to empty recycle bin (%1) (%2).") + .arg(rbNodePath, p_e.what()), + VNoteX::getInst().getMainWindow()); + } + + updateNode(rbNode); + }); + break; + + case Action::Delete: + act = new QAction(tr("&Delete"), p_parent); + connect(act, &QAction::triggered, + this, [this]() { + removeSelectedNodes(false); + }); + break; + + case Action::DeleteFromRecycleBin: + act = new QAction(tr("&Delete From Recycle Bin"), p_parent); + connect(act, &QAction::triggered, + this, [this]() { + removeSelectedNodes(true); + }); + break; + + case Action::RemoveFromConfig: + act = new QAction(tr("&Remove From Index"), p_parent); + connect(act, &QAction::triggered, + this, [this]() { + removeSelectedNodesFromConfig(); + }); + break; + } + + return act; +} + +void NotebookNodeExplorer::copySelectedNodes(bool p_move) +{ + auto nodes = getSelectedNodes(); + if (nodes.isEmpty()) { + return; + } + + filterAwayChildrenNodes(nodes); + + ClipboardData cdata(VNoteX::getInst().getInstanceId(), + p_move ? ClipboardData::MoveNode : ClipboardData::CopyNode); + for (auto node : nodes) { + auto item = QSharedPointer::create(node->getNotebook()->getId(), + node->fetchRelativePath()); + cdata.addItem(item); + } + + auto text = cdata.toJsonText(); + ClipboardUtils::setTextToClipboard(text); + + size_t nrItems = cdata.getData().size(); + VNoteX::getInst().showStatusMessageShort(tr("Copied %n item(s)", "", static_cast(nrItems))); +} + +QVector NotebookNodeExplorer::getSelectedNodes() const +{ + QVector nodes; + + auto items = m_masterExplorer->selectedItems(); + for (auto &item : items) { + auto data = getItemNodeData(item); + if (data.isNode()) { + nodes.push_back(data.getNode()); + } + } + + return nodes; +} + +QSharedPointer NotebookNodeExplorer::tryFetchClipboardData() +{ + auto text = ClipboardUtils::getTextFromClipboard(); + return ClipboardData::fromJsonText(text); +} + +static bool isValidClipboardData(const ClipboardData *p_data) +{ + if (!p_data) { + return false; + } + + if (p_data->getInstanceId() != VNoteX::getInst().getInstanceId()) { + return false; + } + + if (p_data->getData().isEmpty()) { + return false; + } + + auto act = p_data->getAction(); + if (act != ClipboardData::CopyNode && act != ClipboardData::MoveNode) { + return false; + } + + return true; +} + +bool NotebookNodeExplorer::isPasteOnNodeAvailable(const Node *p_node) const +{ + Q_UNUSED(p_node); + auto cdata = tryFetchClipboardData(); + return isValidClipboardData(cdata.data()); +} + +static QSharedPointer getNodeFromClipboardDataItem(const NodeClipboardDataItem *p_item) +{ + Q_ASSERT(p_item); + auto notebook = VNoteX::getInst().getNotebookMgr().findNotebookById(p_item->m_notebookId); + if (!notebook) { + Exception::throwOne(Exception::Type::InvalidArgument, + QString("fail to find notebook by ID (%1)").arg(p_item->m_notebookId)); + return nullptr; + } + + auto node = notebook->loadNodeByPath(p_item->m_nodeRelativePath); + Q_ASSERT(!node || node->fetchRelativePath() == p_item->m_nodeRelativePath); + return node; +} + +void NotebookNodeExplorer::pasteNodesFromClipboard() +{ + // Identify the dest node. + auto destNode = getCurrentNode(); + if (!destNode) { + destNode = m_notebook->getRootNode().data(); + } else { + // Current node may be a file node. + if (destNode->getType() == Node::Type::File) { + destNode = destNode->getParent(); + } + } + + Q_ASSERT(destNode && destNode->getType() == Node::Type::Folder); + + // Fetch source nodes from clipboard. + auto cdata = tryFetchClipboardData(); + if (!isValidClipboardData(cdata.data())) { + MessageBoxHelper::notify(MessageBoxHelper::Warning, + tr("Invalid clipboard data to paste."), + VNoteX::getInst().getMainWindow()); + return; + } + + QVector> srcNodes; + auto items = cdata->getData(); + for (auto &item : items) { + auto nodeItem = dynamic_cast(item.data()); + Q_ASSERT(nodeItem); + auto src = getNodeFromClipboardDataItem(nodeItem); + if (!src) { + continue; + } else if (src == destNode) { + MessageBoxHelper::notify(MessageBoxHelper::Warning, + tr("Destination is detected in sources (%1). Operation is cancelled.") + .arg(destNode->fetchAbsolutePath()), + VNoteX::getInst().getMainWindow()); + return; + } + + srcNodes.push_back(src); + } + + bool isMove = cdata->getAction() == ClipboardData::MoveNode; + QVector pastedNodes; + QSet nodesNeedUpdate; + for (auto srcNode : srcNodes) { + if (isMove) { + // Notice the view area to close any opened view windows. + auto event = QSharedPointer::create(); + emit nodeAboutToMove(srcNode.data(), event); + if (!event->m_response.toBool()) { + continue; + } + } + + auto srcPath = srcNode->fetchAbsolutePath(); + auto srcParentNode = srcNode->getParent(); + + try { + auto notebook = destNode->getNotebook(); + auto pastedNode = notebook->copyNodeAsChildOf(srcNode, destNode, isMove); + pastedNodes.push_back(pastedNode.data()); + } catch (Exception &p_e) { + MessageBoxHelper::notify(MessageBoxHelper::Critical, + tr("Fail to copy source (%1) to destination (%2) (%3).") + .arg(srcPath, destNode->fetchAbsolutePath(), p_e.what()), + VNoteX::getInst().getMainWindow()); + } + + if (isMove) { + nodesNeedUpdate.insert(srcParentNode); + } + } + + for (auto node : nodesNeedUpdate) { + updateNode(node); + + // Deleted src nodes may be the current node in cache. Clear the cache. + clearStateCache(node->getNotebook()); + } + + // Update and expand dest node. Select all pasted nodes. + updateAndExpandNode(destNode); + selectNodes(pastedNodes); + + if (isMove) { + ClipboardUtils::clearClipboard(); + } + + VNoteX::getInst().showStatusMessageShort(tr("Pasted %n item(s)", "", pastedNodes.size())); +} + +void NotebookNodeExplorer::setNodeExpanded(const Node *p_node, bool p_expanded) +{ + auto item = findNode(p_node); + if (item) { + item->setExpanded(p_expanded); + } +} + +void NotebookNodeExplorer::selectNodes(const QVector &p_nodes) +{ + bool firstItem = true; + for (auto node : p_nodes) { + auto item = findNode(node); + if (item) { + auto flags = firstItem ? QItemSelectionModel::ClearAndSelect : QItemSelectionModel::Select; + m_masterExplorer->setCurrentItem(item, 0, flags); + firstItem = false; + } + } +} + +void NotebookNodeExplorer::removeSelectedNodes(bool p_skipRecycleBin) +{ + QString text; + QString info; + if (p_skipRecycleBin) { + text = tr("Delete these folders and notes permanently?"); + info = tr("Files will be deleted permanently and could not be found even " + "in operating system's recycle bin."); + } else { + text = tr("Delete these folders and notes?"); + info = tr("Deleted files could be found in the recycle bin of notebook."); + } + + auto nodes = confirmSelectedNodes(tr("Confirm Deletion"), text, info); + removeNodes(nodes, p_skipRecycleBin, false); +} + +QVector NotebookNodeExplorer::confirmSelectedNodes(const QString &p_title, + const QString &p_text, + const QString &p_info) const +{ + auto nodes = getSelectedNodes(); + if (nodes.isEmpty()) { + return nodes; + } + + QVector items; + for (const auto &node : nodes) { + items.push_back(ConfirmItemInfo(getNodeItemIcon(node), + node->getName(), + node->fetchAbsolutePath(), + node->fetchAbsolutePath(), + (void *)node)); + } + + DeleteConfirmDialog dialog(p_title, + p_text, + p_info, + items, + DeleteConfirmDialog::Flag::None, + false, + VNoteX::getInst().getMainWindow()); + + QVector nodesToDelete; + if (dialog.exec()) { + items = dialog.getConfirmedItems(); + for (const auto &item : items) { + nodesToDelete.push_back(static_cast(item.m_data)); + } + } + + return nodesToDelete; +} + +void NotebookNodeExplorer::removeNodes(QVector p_nodes, + bool p_skipRecycleBin, + bool p_configOnly) +{ + if (p_nodes.isEmpty()) { + return; + } + + filterAwayChildrenNodes(p_nodes); + + int nrDeleted = 0; + QSet nodesNeedUpdate; + for (auto node : p_nodes) { + auto srcName = node->getName(); + auto srcPath = node->fetchAbsolutePath(); + auto srcParentNode = node->getParent(); + try { + auto event = QSharedPointer::create(); + emit nodeAboutToRemove(node, event); + if (!event->m_response.toBool()) { + continue; + } + + if (p_configOnly || p_skipRecycleBin) { + m_notebook->removeNode(node, false, p_configOnly); + } else { + m_notebook->moveNodeToRecycleBin(node); + } + + ++nrDeleted; + } catch (Exception &p_e) { + MessageBoxHelper::notify(MessageBoxHelper::Critical, + tr("Fail to delete/remove item %1 (%2) (%3).") + .arg(srcName, srcPath, p_e.what()), + VNoteX::getInst().getMainWindow()); + } + + nodesNeedUpdate.insert(srcParentNode); + } + + for (auto node : nodesNeedUpdate) { + updateNode(node); + } + + if (!p_configOnly && !p_skipRecycleBin) { + updateNode(m_notebook->getRecycleBinNode().data()); + } + + VNoteX::getInst().showStatusMessageShort(tr("Deleted/Removed %n item(s)", "", nrDeleted)); +} + +void NotebookNodeExplorer::removeSelectedNodesFromConfig() +{ + auto nodes = confirmSelectedNodes(tr("Confirm Removal"), + tr("Remove these folders and notes from index?"), + tr("Files are not touched but just removed from notebook index.")); + removeNodes(nodes, false, true); +} + +void NotebookNodeExplorer::filterAwayChildrenNodes(QVector &p_nodes) +{ + for (int i = p_nodes.size() - 1; i > 0; --i) { + // Check if j is i's ancestor. + for (int j = p_nodes.size() - 1; j >= 0; --j) { + if (i == j) { + continue; + } + + if (Node::isAncestor(p_nodes[j], p_nodes[i])) { + p_nodes.remove(i); + break; + } + } + } +} + +void NotebookNodeExplorer::updateAndExpandNode(Node *p_node) +{ + setNodeExpanded(p_node, false); + updateNode(p_node); + setNodeExpanded(p_node, true); +} + +bool NotebookNodeExplorer::allSelectedItemsSameType() const +{ + auto items = m_masterExplorer->selectedItems(); + if (items.size() < 2) { + return true; + } + + auto type = getItemNodeData(items.first()).getType(); + for (int i = 1; i < items.size(); ++i) { + auto itype = getItemNodeData(items[i]).getType(); + if (itype != type) { + return false; + } + } + + if (type == NodeData::NodeType::Node) { + bool hasNormalNode = false; + bool hasNodeInRecycleBin = false; + for (auto &item : items) { + auto node = getItemNodeData(item).getNode(); + if (m_notebook->isRecycleBinNode(node)) { + return false; + } else if (m_notebook->isNodeInRecycleBin(node)) { + if (hasNormalNode) { + return false; + } + + hasNodeInRecycleBin = true; + } else { + if (hasNodeInRecycleBin) { + return false; + } + + hasNormalNode = true; + } + } + } + + return true; +} + +void NotebookNodeExplorer::reload() +{ + updateNode(nullptr); +} + +void NotebookNodeExplorer::focusNormalNode() +{ + auto item = m_masterExplorer->currentItem(); + if (item && item != m_masterExplorer->topLevelItem(0)) { + // Not recycle bin. + return; + } + + auto cnt = m_masterExplorer->topLevelItemCount(); + if (cnt > 1) { + m_masterExplorer->setCurrentItem(m_masterExplorer->topLevelItem(1)); + } +} diff --git a/src/widgets/notebooknodeexplorer.h b/src/widgets/notebooknodeexplorer.h new file mode 100644 index 00000000..f6716acb --- /dev/null +++ b/src/widgets/notebooknodeexplorer.h @@ -0,0 +1,219 @@ +#ifndef NOTEBOOKNODEEXPLORER_H +#define NOTEBOOKNODEEXPLORER_H + +#include +#include +#include +#include + +#include "qtreewidgetstatecache.h" +#include "clipboarddata.h" +#include "navigationmodewrapper.h" + +class QSplitter; +class QTreeWidget; +class QTreeWidgetItem; +class QMenu; + +namespace vnotex +{ + class Notebook; + class Node; + class TreeWidget; + struct FileOpenParameters; + class Event; + + class NotebookNodeExplorer : public QWidget + { + Q_OBJECT + public: + // Used for a QTreeWidgetItem to hold the info of a node. + // Make it public since we need to hold it in a QTreeWidgetItem. + class NodeData + { + public: + enum class NodeType { Node, Attachment, Invalid }; + + NodeData(); + + explicit NodeData(Node *p_node, bool p_loaded); + + explicit NodeData(const QString &p_name); + + NodeData(const NodeData &p_other); + + ~NodeData(); + + NodeData &operator=(const NodeData &p_other); + + bool isValid() const; + + bool isNode() const; + + bool isAttachment() const; + + NodeData::NodeType getType() const; + + Node *getNode() const; + + const QString &getName() const; + + void clear(); + + bool matched(const Node *p_node) const; + + bool isLoaded() const; + + private: + NodeType m_type = NodeType::Invalid; + + union + { + Node *m_node = nullptr; + QString m_name; + }; + + bool m_loaded = false; + }; + + explicit NotebookNodeExplorer(QWidget *p_parent = nullptr); + + void setNotebook(const QSharedPointer &p_notebook); + + Node *getCurrentNode() const; + + // Update the tree of @p_node. + // If @p_node is null, update the whole tree. + void updateNode(Node *p_node); + + void setCurrentNode(Node *p_node); + + void reload(); + + signals: + void nodeActivated(Node *p_node, const QSharedPointer &p_paras); + + void fileActivated(const QString &p_path); + + // @m_response of @p_event: true to continue the move, false to cancel the move. + void nodeAboutToMove(Node *p_node, const QSharedPointer &p_event); + + // @m_response of @p_event: true to continue the removal, false to cancel the removal. + void nodeAboutToRemove(Node *p_node, const QSharedPointer &p_event); + + private: + enum Column { Name = 0 }; + + enum Action { NewNote, NewFolder, Properties, OpenLocation, CopyPath, + Copy, Cut, Paste, EmptyRecycleBin, Delete, + DeleteFromRecycleBin, RemoveFromConfig }; + + void setupUI(); + + void setupMasterExplorer(QWidget *p_parent = nullptr); + + void clearExplorer(); + + void generateNodeTree(); + + void loadRootNode(const Node *p_node) const; + + void loadNode(QTreeWidgetItem *p_item, Node *p_node, int p_level) const; + + void loadChildren(QTreeWidgetItem *p_item, Node *p_node, int p_level) const; + + void loadRecycleBinNode(Node *p_node) const; + + void loadRecycleBinNode(QTreeWidgetItem *p_item, Node *p_node, int p_level) const; + + void fillTreeItem(QTreeWidgetItem *p_item, Node *p_node, bool p_loaded) const; + + QIcon getNodeItemIcon(const Node *p_node) const; + + void initNodeIcons() const; + + QTreeWidgetItem *findNode(const Node *p_node) const; + + QTreeWidgetItem *findNode(QTreeWidgetItem *p_item, const Node *p_node) const; + + QTreeWidgetItem *findNodeChild(QTreeWidgetItem *p_item, const Node *p_node) const; + + QTreeWidgetItem *findNodeTopLevelItem(QTreeWidget *p_tree, const Node *p_node) const; + + void saveNotebookTreeState(bool p_saveCurrentItem = true); + + QSharedPointer> stateCache() const; + + void clearStateCache(const Notebook *p_notebook); + + void createContextMenuOnRoot(QMenu *p_menu); + + void createContextMenuOnNode(QMenu *p_menu, const Node *p_node); + + void createContextMenuOnAttachment(QMenu *p_menu, const QString &p_name); + + // Factory function to create action. + QAction *createAction(Action p_act, QObject *p_parent); + + void copySelectedNodes(bool p_move); + + void pasteNodesFromClipboard(); + + // Only return selected Nodes. + QVector getSelectedNodes() const; + + void removeSelectedNodes(bool p_skipRecycleBin); + + void removeSelectedNodesFromConfig(); + + QVector confirmSelectedNodes(const QString &p_title, + const QString &p_text, + const QString &p_info) const; + + static QSharedPointer tryFetchClipboardData(); + + bool isPasteOnNodeAvailable(const Node *p_node) const; + + void setNodeExpanded(const Node *p_node, bool p_expanded); + + void selectNodes(const QVector &p_nodes); + + // @p_skipRecycleBin is irrelevant if @p_configOnly is true. + void removeNodes(QVector p_nodes, bool p_skipRecycleBin, bool p_configOnly); + + void filterAwayChildrenNodes(QVector &p_nodes); + + void updateAndExpandNode(Node *p_node); + + // Check if all selected items are the same type for operations. + bool allSelectedItemsSameType() const; + + // Skip the recycle bin node if possible. + void focusNormalNode(); + + static NotebookNodeExplorer::NodeData getItemNodeData(const QTreeWidgetItem *p_item); + + static void setItemNodeData(QTreeWidgetItem *p_item, const NodeData &p_data); + + QSplitter *m_splitter = nullptr; + + TreeWidget *m_masterExplorer = nullptr; + + QSharedPointer m_notebook; + + QHash>> m_stateCache; + + QScopedPointer> m_navigationWrapper; + + static QIcon s_folderNodeIcon; + static QIcon s_fileNodeIcon; + static QIcon s_recycleBinNodeIcon; + + static const QString c_nodeIconForegroundName; + }; +} + + +Q_DECLARE_METATYPE(vnotex::NotebookNodeExplorer::NodeData); + +#endif // NOTEBOOKNODEEXPLORER_H diff --git a/src/widgets/notebookselector.cpp b/src/widgets/notebookselector.cpp new file mode 100644 index 00000000..9d0c39ea --- /dev/null +++ b/src/widgets/notebookselector.cpp @@ -0,0 +1,178 @@ +#include "notebookselector.h" + +#include +#include +#include +#include +#include +#include + +#include "vnotex.h" +#include "notebook/notebook.h" +#include +#include + +using namespace vnotex; + +NotebookSelector::NotebookSelector(QWidget *p_parent) + : QComboBox(p_parent), + NavigationMode(NavigationMode::Type::StagedDoubleKeys, this) +{ + auto itemDelegate = new QStyledItemDelegate(this); + setItemDelegate(itemDelegate); + + view()->installEventFilter(this); + + setSizeAdjustPolicy(QComboBox::AdjustToMinimumContentsLengthWithIcon); +} + +void NotebookSelector::setNotebooks(const QVector> &p_notebooks) +{ + clear(); + + for (auto &nb : p_notebooks) { + addNotebookItem(nb); + } + + updateGeometry(); +} + +void NotebookSelector::reloadNotebook(const Notebook *p_notebook) +{ + Q_ASSERT(p_notebook); + int idx = findNotebook(p_notebook->getId()); + Q_ASSERT(idx != -1); + + setItemIcon(idx, generateItemIcon(p_notebook)); + setItemText(idx, p_notebook->getName()); + setItemToolTip(idx, generateItemToolTip(p_notebook)); + + int curIdx = currentIndex(); + if (curIdx == idx) { + setToolTip(getItemToolTip(idx)); + } +} + +void NotebookSelector::addNotebookItem(const QSharedPointer &p_notebook) +{ + int idx = count(); + addItem(generateItemIcon(p_notebook.data()), p_notebook->getName(), p_notebook->getId()); + setItemToolTip(idx, generateItemToolTip(p_notebook.data())); +} + +QIcon NotebookSelector::generateItemIcon(const Notebook *p_notebook) +{ + if (!p_notebook->getIcon().isNull()) { + return p_notebook->getIcon(); + } + + const auto &themeMgr = VNoteX::getInst().getThemeMgr(); + QString iconFile; + const auto &type = p_notebook->getType(); + if (type == "native.vnotex") { + iconFile = themeMgr.getIconFile("native_notebook_default.svg"); + } else { + iconFile = themeMgr.getIconFile("notebook_default.svg"); + } + + return IconUtils::fetchIcon(iconFile); +} + +QString NotebookSelector::generateItemToolTip(const Notebook *p_notebook) +{ + return tr("Notebook: %1\nRoot folder: %2\nDescription: %3") + .arg(p_notebook->getName(), + p_notebook->getRootFolderAbsolutePath(), + p_notebook->getDescription()); +} + +QString NotebookSelector::getItemToolTip(int p_idx) const +{ + return itemData(p_idx, Qt::ToolTipRole).toString(); +} + +void NotebookSelector::setItemToolTip(int p_idx, const QString &p_tooltip) +{ + setItemData(p_idx, p_tooltip, Qt::ToolTipRole); +} + +void NotebookSelector::setCurrentNotebook(ID p_id) +{ + int idx = findNotebook(p_id); + setCurrentIndex(idx); + setToolTip(getItemToolTip(idx)); +} + +int NotebookSelector::findNotebook(ID p_id) const +{ + return findData(p_id); +} + +QVector NotebookSelector::getVisibleNavigationItems() +{ + QVector items; + auto listView = dynamic_cast(view()); + if (listView) { + m_navigationIndexes = WidgetUtils::getVisibleIndexes(listView); + for (auto &index : m_navigationIndexes) { + items.push_back(&index); + } + } + return items; +} + +void NotebookSelector::placeNavigationLabel(int p_idx, void *p_item, QLabel *p_label) +{ + if (p_idx == -1) { + // Major. + p_label->move(rect().topRight() - QPoint(p_label->width() + 2, 2)); + } else { + // Second. + // Reparent it to the list view. + auto listView = view(); + p_label->setParent(listView); + + auto index = *static_cast(p_item); + + int extraWidth = p_label->width() + 2; + auto vbar = listView->verticalScrollBar(); + if (vbar && vbar->minimum() != vbar->maximum()) { + extraWidth += vbar->width(); + } + + const auto rt = listView->visualRect(index); + const int x = rt.x() + view()->width() - extraWidth; + const int y = rt.y(); + p_label->move(x, y); + } +} + +void NotebookSelector::handleTargetHit(void *p_item) +{ + if (!p_item) { + setFocus(); + showPopup(); + } else { + hidePopup(); + auto index = *static_cast(p_item); + setCurrentIndex(index.row()); + emit activated(index.row()); + } +} + +bool NotebookSelector::eventFilter(QObject *p_obj, QEvent *p_event) +{ + if (p_event->type() == QEvent::KeyPress && p_obj == view()) { + if (WidgetUtils::processKeyEventLikeVi(view(), static_cast(p_event))) { + return true; + } + } + return QComboBox::eventFilter(p_obj, p_event); +} + +void NotebookSelector::clearNavigation() +{ + m_navigationIndexes.clear(); + + NavigationMode::clearNavigation(); +} diff --git a/src/widgets/notebookselector.h b/src/widgets/notebookselector.h new file mode 100644 index 00000000..7b3b4c14 --- /dev/null +++ b/src/widgets/notebookselector.h @@ -0,0 +1,55 @@ +#ifndef NOTEBOOKSELECTOR_H +#define NOTEBOOKSELECTOR_H + +#include +#include + +#include "global.h" +#include "navigationmode.h" + +namespace vnotex +{ + class Notebook; + + class NotebookSelector : public QComboBox, public NavigationMode + { + Q_OBJECT + public: + explicit NotebookSelector(QWidget *p_parent = nullptr); + + void setNotebooks(const QVector> &p_notebooks); + + void reloadNotebook(const Notebook *p_notebook); + + void setCurrentNotebook(ID p_id); + + // NavigationMode. + protected: + QVector getVisibleNavigationItems() Q_DECL_OVERRIDE; + + void placeNavigationLabel(int p_idx, void *p_item, QLabel *p_label) Q_DECL_OVERRIDE; + + void handleTargetHit(void *p_item) Q_DECL_OVERRIDE; + + void clearNavigation() Q_DECL_OVERRIDE; + + protected: + bool eventFilter(QObject *p_obj, QEvent *p_event) Q_DECL_OVERRIDE; + + private: + void addNotebookItem(const QSharedPointer &p_notebook); + + QIcon generateItemIcon(const Notebook *p_notebook); + + QString generateItemToolTip(const Notebook *p_notebook); + + QString getItemToolTip(int p_idx) const; + void setItemToolTip(int p_idx, const QString &p_tooltip); + + int findNotebook(ID p_id) const; + + QVector m_navigationIndexes; + }; +} // ns vnotex + +#endif // NOTEBOOKSELECTOR_H diff --git a/src/widgets/outlinepopup.cpp b/src/widgets/outlinepopup.cpp new file mode 100644 index 00000000..d252e14b --- /dev/null +++ b/src/widgets/outlinepopup.cpp @@ -0,0 +1,45 @@ +#include "outlinepopup.h" + +#include +#include + +#include "outlineviewer.h" + +using namespace vnotex; + +OutlinePopup::OutlinePopup(QToolButton *p_btn, QWidget *p_parent) + : QMenu(p_parent), + m_button(p_btn) +{ + setupUI(); + + connect(this, &QMenu::aboutToShow, + this, [this]() { + m_viewer->setFocus(); + }); +} + +void OutlinePopup::setupUI() +{ + auto mainLayout = new QVBoxLayout(this); + + m_viewer = new OutlineViewer(tr("Outline"), this); + mainLayout->addWidget(m_viewer); + + setMinimumSize(320, 384); +} + +void OutlinePopup::setOutlineProvider(const QSharedPointer &p_provider) +{ + m_viewer->setOutlineProvider(p_provider); +} + +void OutlinePopup::showEvent(QShowEvent* p_event) +{ + QMenu::showEvent(p_event); + + const auto p = pos(); + const auto btnRect = m_button->geometry(); + // Move it to right-aligned. + move(p.x() + btnRect.width() - geometry().width(), p.y()); +} diff --git a/src/widgets/outlinepopup.h b/src/widgets/outlinepopup.h new file mode 100644 index 00000000..437e803d --- /dev/null +++ b/src/widgets/outlinepopup.h @@ -0,0 +1,36 @@ +#ifndef OUTLINEPOPUP_H +#define OUTLINEPOPUP_H + +#include +#include + +class QToolButton; + +namespace vnotex +{ + class OutlineProvider; + class OutlineViewer; + + class OutlinePopup : public QMenu + { + Q_OBJECT + public: + OutlinePopup(QToolButton *p_btn, QWidget *p_parent = nullptr); + + void setOutlineProvider(const QSharedPointer &p_provider); + + protected: + void showEvent(QShowEvent* p_event) Q_DECL_OVERRIDE; + + private: + void setupUI(); + + // Managed by QObject. + OutlineViewer *m_viewer = nullptr; + + // Button with this menu. + QToolButton *m_button = nullptr; + }; +} + +#endif // OUTLINEPOPUP_H diff --git a/src/widgets/outlineprovider.cpp b/src/widgets/outlineprovider.cpp new file mode 100644 index 00000000..5eea70f2 --- /dev/null +++ b/src/widgets/outlineprovider.cpp @@ -0,0 +1,65 @@ +#include "outlineprovider.h" + +using namespace vnotex; + +void Outline::clear() +{ + m_headings.clear(); +} + +bool Outline::operator==(const Outline &p_a) const +{ + return m_headings == p_a.m_headings; +} + +bool Outline::isEmpty() const +{ + return m_headings.isEmpty(); +} + +Outline::Heading::Heading(const QString &p_name, int p_level) + : m_name(p_name), + m_level(p_level) +{ +} + +bool Outline::Heading::operator==(const Outline::Heading &p_a) const +{ + return m_level == p_a.m_level && m_name == p_a.m_name; +} + +OutlineProvider::OutlineProvider(QObject *p_parent) + : QObject(p_parent) +{ +} + +OutlineProvider::~OutlineProvider() +{ +} + +void OutlineProvider::setOutline(const QSharedPointer &p_outline) +{ + m_outline = p_outline; + m_currentHeadingIndex = -1; + emit outlineChanged(); +} + +const QSharedPointer &OutlineProvider::getOutline() const +{ + return m_outline; +} + +int OutlineProvider::getCurrentHeadingIndex() const +{ + return m_currentHeadingIndex; +} + +void OutlineProvider::setCurrentHeadingIndex(int p_idx) +{ + if (m_currentHeadingIndex == p_idx) { + return; + } + + m_currentHeadingIndex = p_idx; + emit currentHeadingChanged(); +} diff --git a/src/widgets/outlineprovider.h b/src/widgets/outlineprovider.h new file mode 100644 index 00000000..2993db06 --- /dev/null +++ b/src/widgets/outlineprovider.h @@ -0,0 +1,100 @@ +#ifndef OUTLINEPROVIDER_H +#define OUTLINEPROVIDER_H + +#include +#include +#include + +namespace vnotex +{ + // Toc content. + struct Outline + { + struct Heading + { + Heading() = default; + + Heading(const QString &p_name, int p_level); + + bool operator==(const Heading &p_a) const; + + QString m_name; + + // Heading level, 1-based. + int m_level = -1; + }; + + void clear(); + + bool operator==(const Outline &p_a) const; + + bool isEmpty() const; + + QVector m_headings; + }; + + // Used to hold toc-related data of one ViewWindow. + class OutlineProvider : public QObject + { + Q_OBJECT + public: + explicit OutlineProvider(QObject *p_parent = nullptr); + + virtual ~OutlineProvider(); + + // Get the outline. + const QSharedPointer &getOutline() const; + void setOutline(const QSharedPointer &p_outline); + + // Get current heading index in outline. + int getCurrentHeadingIndex() const; + void setCurrentHeadingIndex(int p_idx); + + template + static void makePerfectHeadings(const QVector &p_headings, QVector &p_perfectHeadings); + + signals: + void outlineChanged(); + + void currentHeadingChanged(); + + void headingClicked(int p_idx); + + private: + QSharedPointer m_outline; + + int m_currentHeadingIndex = -1; + }; + + template + void OutlineProvider::makePerfectHeadings(const QVector &p_headings, QVector &p_perfectHeadings) + { + p_perfectHeadings.clear(); + if (p_headings.isEmpty()) { + return; + } + + int baseLevel = INT_MAX; + for (const auto &heading : p_headings) { + if (heading.m_level < baseLevel) { + baseLevel = heading.m_level; + } + } + + p_perfectHeadings.reserve(p_headings.size()); + int curLevel = baseLevel - 1; + for (const auto &heading : p_headings) { + while (heading.m_level > curLevel + 1) { + curLevel += 1; + + // Insert empty level which is an invalid header. + p_perfectHeadings.append(T(tr("[EMPTY]"), curLevel)); + } + + p_perfectHeadings.append(heading); + curLevel = heading.m_level; + } + } +} + +#endif // OUTLINEPROVIDER_H diff --git a/src/widgets/outlineviewer.cpp b/src/widgets/outlineviewer.cpp new file mode 100644 index 00000000..55d09304 --- /dev/null +++ b/src/widgets/outlineviewer.cpp @@ -0,0 +1,299 @@ +#include "outlineviewer.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "treewidget.h" +#include "titlebar.h" + +#include "configmgr.h" +#include "widgetconfig.h" +#include "navigationmodemgr.h" + +using namespace vnotex; + +// Use static expansion when the level is 6. +#define STATIC_EXPANDED_LEVEL 6 + +OutlineViewer::OutlineViewer(const QString &p_title, QWidget *p_parent) + : QFrame(p_parent) +{ + setupUI(p_title); + + m_autoExpandedLevel = ConfigMgr::getInst().getWidgetConfig().getOutlineAutoExpandedLevel(); + + m_expandTimer = new QTimer(this); + m_expandTimer->setSingleShot(true); + m_expandTimer->setInterval(1000); + connect(m_expandTimer, &QTimer::timeout, + this, [this]() { + // Auto adjust items after current heading change. + if (m_autoExpandedLevel == STATIC_EXPANDED_LEVEL) { + return; + } + + expandTree(m_autoExpandedLevel); + + auto curItem = m_tree->currentItem(); + if (curItem) { + m_tree->scrollToItem(curItem); + } + }); +} + +void OutlineViewer::setupUI(const QString &p_title) +{ + auto mainLayout = new QVBoxLayout(this); + mainLayout->setContentsMargins(0, 0, 0, 0); + + { + auto titleBar = setupTitleBar(p_title, this); + mainLayout->addWidget(titleBar); + } + + m_tree = new TreeWidget(TreeWidget::Flag::None, this); + TreeWidget::setupSingleColumnHeaderlessTree(m_tree, false, false); + m_tree->setSelectionMode(QAbstractItemView::SingleSelection); + TreeWidget::showHorizontalScrollbar(m_tree); + m_navigationWrapper.reset(new NavigationModeWrapper(m_tree)); + NavigationModeMgr::getInst().registerNavigationTarget(m_navigationWrapper.data()); + mainLayout->addWidget(m_tree); + connect(m_tree, &QTreeWidget::currentItemChanged, + this, [this](QTreeWidgetItem *p_cur, QTreeWidgetItem *p_pre) { + Q_UNUSED(p_pre); + activateItem(p_cur); + }); + connect(m_tree, &QTreeWidget::itemClicked, + this, [this](QTreeWidgetItem *p_item, int p_col) { + Q_UNUSED(p_col); + // Will duplicate the signal. That's fine. + activateItem(p_item, true); + }); + + setFocusProxy(m_tree); +} + +TitleBar *OutlineViewer::setupTitleBar(const QString &p_title, QWidget *p_parent) +{ + auto titleBar = new TitleBar(p_title, TitleBar::Action::None, p_parent); + + auto decreaseBtn = titleBar->addActionButton(QStringLiteral("decrease_outline_level.svg"), tr("Decrease Expansion Level")); + connect(decreaseBtn, &QToolButton::clicked, + this, [this]() { + auto &config = ConfigMgr::getInst().getWidgetConfig(); + m_autoExpandedLevel = config.getOutlineAutoExpandedLevel() - 1; + if (m_autoExpandedLevel < 1) { + m_autoExpandedLevel = 1; + } else { + config.setOutlineAutoExpandedLevel(m_autoExpandedLevel); + expandTree(m_autoExpandedLevel); + } + + showLevel(); + }); + + auto increaseBtn = titleBar->addActionButton(QStringLiteral("increase_outline_level.svg"), tr("Increase Expansion Level")); + connect(increaseBtn, &QToolButton::clicked, + this, [this]() { + auto &config = ConfigMgr::getInst().getWidgetConfig(); + m_autoExpandedLevel = config.getOutlineAutoExpandedLevel() + 1; + if (m_autoExpandedLevel > 6) { + m_autoExpandedLevel = 6; + } else { + config.setOutlineAutoExpandedLevel(m_autoExpandedLevel); + expandTree(m_autoExpandedLevel); + } + + showLevel(); + }); + + return titleBar; +} + +void OutlineViewer::setOutlineProvider(const QSharedPointer &p_provider) +{ + if (m_provider == p_provider) { + return; + } + + if (m_provider) { + disconnect(m_provider.data(), 0, this, 0); + disconnect(this, 0, m_provider.data(), 0); + } + + m_provider = p_provider; + if (m_provider) { + connect(m_provider.data(), &OutlineProvider::outlineChanged, + this, [this]() { + if (isVisible()) { + updateOutline(m_provider->getOutline()); + } + }); + connect(m_provider.data(), &OutlineProvider::currentHeadingChanged, + this, [this]() { + updateCurrentHeading(m_provider->getCurrentHeadingIndex()); + }); + if (isVisible()) { + updateOutline(m_provider->getOutline()); + updateCurrentHeading(m_provider->getCurrentHeadingIndex()); + } + } else { + updateOutline(nullptr); + updateCurrentHeading(-1); + } + +} + +void OutlineViewer::showEvent(QShowEvent *p_event) +{ + QFrame::showEvent(p_event); + + // Update the tree. + if (m_provider) { + updateOutline(m_provider->getOutline()); + updateCurrentHeading(m_provider->getCurrentHeadingIndex()); + } else { + updateOutline(nullptr); + } +} + +void OutlineViewer::updateOutline(const QSharedPointer &p_outline) +{ + m_muted = true; + if (!p_outline) { + if (m_outline.isEmpty()) { + return; + } + m_outline.clear(); + } else { + if (m_outline == *p_outline) { + return; + } + m_outline = *p_outline; + } + + updateTreeToOutline(m_tree, m_outline); + + expandTree(m_autoExpandedLevel); + m_muted = false; +} + +void OutlineViewer::updateCurrentHeading(int p_idx) +{ + if (m_currentHeadingIndex == p_idx) { + return; + } + + m_currentHeadingIndex = p_idx; + if (m_currentHeadingIndex >= m_outline.m_headings.size()) { + m_currentHeadingIndex = -1; + } + + m_muted = true; + highlightHeading(m_currentHeadingIndex); + m_muted = false; + + m_expandTimer->start(); +} + +void OutlineViewer::updateTreeToOutline(QTreeWidget *p_tree, const Outline &p_outline) +{ + p_tree->clear(); + if (p_outline.isEmpty()) { + p_tree->update(); + return; + } + + int idx = 0; + renderTreeAtLevel(p_outline.m_headings, idx, 1, p_tree, nullptr, nullptr); +} + +void OutlineViewer::renderTreeAtLevel(const QVector &p_headings, + int &p_index, + int p_level, + QTreeWidget *p_tree, + QTreeWidgetItem *p_parentItem, + QTreeWidgetItem *p_lastItem) +{ + while (p_index < p_headings.size()) { + const auto &heading = p_headings[p_index]; + QTreeWidgetItem *item = nullptr; + if (heading.m_level == p_level) { + if (p_parentItem) { + item = new QTreeWidgetItem(p_parentItem); + } else { + item = new QTreeWidgetItem(p_tree); + } + + fillTreeItem(item, heading, p_index); + + p_lastItem = item; + ++p_index; + } else if (heading.m_level < p_level) { + return; + } else { + renderTreeAtLevel(p_headings, p_index, p_level + 1, p_tree, p_lastItem, nullptr); + } + } +} + +void OutlineViewer::fillTreeItem(QTreeWidgetItem *p_item, const Outline::Heading &p_heading, int p_index) +{ + p_item->setData(Column::Name, Qt::UserRole, p_index); + p_item->setText(Column::Name, p_heading.m_name); + p_item->setToolTip(Column::Name, p_heading.m_name); +} + +void OutlineViewer::highlightHeading(int p_idx) +{ + if (p_idx == -1) { + m_tree->setCurrentItem(nullptr); + return; + } + + auto item = TreeWidget::findItem(m_tree, p_idx); + m_tree->setCurrentItem(item); +} + +void OutlineViewer::expandTree(int p_level) +{ + int cnt = m_tree->topLevelItemCount(); + if (cnt == 0) { + return; + } + + // Get the base level from the first heading. + int baseLevel = m_outline.m_headings[0].m_level; + int delta = p_level - baseLevel; + if (delta <= 0) { + m_tree->collapseAll(); + } else { + m_tree->expandToDepth(delta - 1); + } +} + +void OutlineViewer::showLevel() +{ + QToolTip::showText(mapToGlobal(QPoint(0, 0)), tr("Expansion level: %1").arg(m_autoExpandedLevel), this); +} + +void OutlineViewer::activateItem(QTreeWidgetItem *p_item, bool p_focus) +{ + if (!p_item || m_tree->selectedItems().isEmpty()) { + return; + } + + m_currentHeadingIndex = p_item->data(Column::Name, Qt::UserRole).toInt(); + if (m_currentHeadingIndex != -1 && !m_muted) { + emit m_provider->headingClicked(m_currentHeadingIndex); + if (p_focus) { + emit focusViewArea(); + } + } +} diff --git a/src/widgets/outlineviewer.h b/src/widgets/outlineviewer.h new file mode 100644 index 00000000..e0f68735 --- /dev/null +++ b/src/widgets/outlineviewer.h @@ -0,0 +1,84 @@ +#ifndef OUTLINEVIEWER_H +#define OUTLINEVIEWER_H + +#include +#include +#include +#include +#include + +#include "outlineprovider.h" +#include "navigationmodewrapper.h" + +class QTreeWidget; +class QTreeWidgetItem; +class QTimer; + +namespace vnotex +{ + class TitleBar; + + class OutlineViewer : public QFrame + { + Q_OBJECT + public: + explicit OutlineViewer(const QString &p_title, QWidget *p_parent = nullptr); + + void setOutlineProvider(const QSharedPointer &p_provider); + + static void updateTreeToOutline(QTreeWidget *p_tree, const Outline &p_outline); + + signals: + void focusViewArea(); + + protected: + void showEvent(QShowEvent *p_event) Q_DECL_OVERRIDE; + + private: + enum Column { Name = 0 }; + + void setupUI(const QString &p_title); + + TitleBar *setupTitleBar(const QString &p_title, QWidget *p_parent = nullptr); + + void updateOutline(const QSharedPointer &p_outline); + + void updateCurrentHeading(int p_idx); + + void highlightHeading(int p_idx); + + void expandTree(int p_level); + + void showLevel(); + + // Do not response if m_muted is true. + void activateItem(QTreeWidgetItem *p_item, bool p_focus = false); + + static void renderTreeAtLevel(const QVector &p_headings, + int &p_index, + int p_level, + QTreeWidget *p_tree, + QTreeWidgetItem *p_parentItem, + QTreeWidgetItem *p_lastItem); + + static void fillTreeItem(QTreeWidgetItem *p_item, const Outline::Heading &p_heading, int p_index); + + bool m_muted = false; + + QTimer *m_expandTimer = nullptr; + + QTreeWidget *m_tree = nullptr; + + QSharedPointer m_provider; + + Outline m_outline; + + int m_currentHeadingIndex = -1; + + int m_autoExpandedLevel = 6; + + QScopedPointer> m_navigationWrapper; + }; +} + +#endif // OUTLINEVIEWER_H diff --git a/src/widgets/propertydefs.cpp b/src/widgets/propertydefs.cpp new file mode 100644 index 00000000..6b99d2ed --- /dev/null +++ b/src/widgets/propertydefs.cpp @@ -0,0 +1,11 @@ +#include "propertydefs.h" + +using namespace vnotex; + +const char *PropertyDefs::s_actionToolButton = "ActionToolButton"; + +const char *PropertyDefs::s_toolButtonWithoutMenuIndicator = "NoMenuIndicator"; + +const char *PropertyDefs::s_dangerousButton = "DangerousButton"; + +const char *PropertyDefs::s_state = "State"; diff --git a/src/widgets/propertydefs.h b/src/widgets/propertydefs.h new file mode 100644 index 00000000..2c548e30 --- /dev/null +++ b/src/widgets/propertydefs.h @@ -0,0 +1,23 @@ +#ifndef PROPERTYDEFS_H +#define PROPERTYDEFS_H + +namespace vnotex +{ + // Define properties used for QSS. + class PropertyDefs + { + public: + PropertyDefs() = delete; + + static const char *s_actionToolButton; + + static const char *s_toolButtonWithoutMenuIndicator; + + static const char *s_dangerousButton; + + // Values: info/warning/error. + static const char *s_state; + }; +} + +#endif // PROPERTYDEFS_H diff --git a/src/widgets/qtreewidgetstatecache.h b/src/widgets/qtreewidgetstatecache.h new file mode 100644 index 00000000..be22d554 --- /dev/null +++ b/src/widgets/qtreewidgetstatecache.h @@ -0,0 +1,92 @@ +#ifndef QTREEWIDGETSTATECACHE_H +#define QTREEWIDGETSTATECACHE_H + +#include + +#include +#include +#include + +namespace vnotex +{ + template + class QTreeWidgetStateCache + { + public: + typedef std::function ItemKeyFunc; + + explicit QTreeWidgetStateCache(const ItemKeyFunc &p_keyFunc) + : m_keyFunc(p_keyFunc), + m_currentItem(0) + { + } + + void save(QTreeWidget *p_tree, bool p_saveCurrentItem) + { + clear(); + + auto cnt = p_tree->topLevelItemCount(); + for (int i = 0; i < cnt; ++i) { + save(p_tree->topLevelItem(i)); + } + + if (p_saveCurrentItem) { + auto item = p_tree->currentItem(); + bool ok; + Key key = m_keyFunc(item, ok); + if (ok) { + m_currentItem = key; + } + } + } + + bool contains(QTreeWidgetItem *p_item) const + { + bool ok; + Key key = m_keyFunc(p_item, ok); + if (ok) { + return m_expansionCache.contains(key); + } + + return false; + } + + void clear() + { + m_expansionCache.clear(); + m_currentItem = 0; + } + + Key getCurrentItem() const + { + return m_currentItem; + } + + private: + void save(QTreeWidgetItem *p_item) + { + if (!p_item->isExpanded()) { + return; + } + + bool ok; + Key key = m_keyFunc(p_item, ok); + if (ok) { + m_expansionCache.insert(key); + } + + auto cnt = p_item->childCount(); + for (int i = 0; i < cnt; ++i) { + save(p_item->child(i)); + } + } + + QSet m_expansionCache; + + ItemKeyFunc m_keyFunc; + + Key m_currentItem; + }; +} // ns vnotex + +#endif // QTREEWIDGETSTATECACHE_H diff --git a/src/widgets/statusbarhelper.cpp b/src/widgets/statusbarhelper.cpp new file mode 100644 index 00000000..fc10a4bc --- /dev/null +++ b/src/widgets/statusbarhelper.cpp @@ -0,0 +1,14 @@ +#include "statusbarhelper.h" + +#include +#include + +#include "mainwindow.h" + +using namespace vnotex; + +void StatusBarHelper::setupStatusBar(MainWindow *p_win) +{ + m_statusBar = new QStatusBar(p_win); + p_win->setStatusBar(m_statusBar); +} diff --git a/src/widgets/statusbarhelper.h b/src/widgets/statusbarhelper.h new file mode 100644 index 00000000..7bf65a34 --- /dev/null +++ b/src/widgets/statusbarhelper.h @@ -0,0 +1,25 @@ +#ifndef STATUSBARHELPER_H +#define STATUSBARHELPER_H + +class QStatusBar; +class QWidget; + +namespace vnotex +{ + class MainWindow; + + class StatusBarHelper + { + public: + StatusBarHelper() + { + } + + void setupStatusBar(MainWindow *p_win); + + private: + QStatusBar *m_statusBar; + }; +} // ns vnotex + +#endif // STATUSBARHELPER_H diff --git a/src/widgets/textviewwindow.cpp b/src/widgets/textviewwindow.cpp new file mode 100644 index 00000000..bfa58449 --- /dev/null +++ b/src/widgets/textviewwindow.cpp @@ -0,0 +1,183 @@ +#include "textviewwindow.h" + +#include +#include +#include +#include + +#include +#include + +#include "textviewwindowhelper.h" +#include "toolbarhelper.h" +#include "editors/texteditor.h" +#include +#include + +using namespace vnotex; + +TextViewWindow::TextViewWindow(QWidget *p_parent) + : ViewWindow(p_parent) +{ + m_mode = Mode::Edit; + setupUI(); +} + +void TextViewWindow::setupUI() +{ + const auto &editorConfig = ConfigMgr::getInst().getEditorConfig(); + const auto &textEditorConfig = editorConfig.getTextEditorConfig(); + + m_editorConfigRevision = editorConfig.revision(); + m_textEditorConfigRevision = textEditorConfig.revision(); + + // Central widget. + { + auto config = createTextEditorConfig(textEditorConfig); + m_editor = new TextEditor(config, this); + setCentralWidget(m_editor); + + if (textEditorConfig.getZoomDelta() != 0) { + m_editor->zoom(textEditorConfig.getZoomDelta()); + } + } + + TextViewWindowHelper::connectEditor(this); + + // Status widget. + setStatusWidget(m_editor->statusWidget()); + + setupToolBar(); +} + +void TextViewWindow::setupToolBar() +{ + auto toolBar = new QToolBar(this); + const auto &editorConfig = ConfigMgr::getInst().getEditorConfig(); + const int iconSize = editorConfig.getToolBarIconSize(); + toolBar->setIconSize(QSize(iconSize, iconSize)); + + addToolBar(toolBar); + + addAction(toolBar, ViewWindowToolBarHelper::Save); + + toolBar->addSeparator(); + + addAction(toolBar, ViewWindowToolBarHelper::Attachment); + + toolBar->addSeparator(); + + ToolBarHelper::addSpacer(toolBar); + addAction(toolBar, ViewWindowToolBarHelper::FindAndReplace); +} + +void TextViewWindow::handleBufferChangedInternal() +{ + TextViewWindowHelper::handleBufferChanged(this); +} + +void TextViewWindow::syncEditorFromBuffer() +{ + const bool old = m_propogateEditorToBuffer; + m_propogateEditorToBuffer = false; + + auto buffer = getBuffer(); + if (buffer) { + m_editor->setSyntax(QFileInfo(buffer->getPath()).suffix()); + m_editor->setReadOnly(buffer->isReadOnly()); + m_editor->setText(buffer->getContent()); + m_editor->setModified(buffer->isModified()); + } else { + m_editor->setSyntax(""); + m_editor->setReadOnly(true); + m_editor->setText(""); + m_editor->setModified(false); + } + + m_bufferRevision = buffer ? buffer->getRevision() : 0; + m_propogateEditorToBuffer = old; +} + +void TextViewWindow::syncEditorFromBufferContent() +{ + const bool old = m_propogateEditorToBuffer; + m_propogateEditorToBuffer = false; + + auto buffer = getBuffer(); + Q_ASSERT(buffer); + m_editor->setText(buffer->getContent()); + m_editor->setModified(buffer->isModified()); + + m_bufferRevision = buffer->getRevision(); + m_propogateEditorToBuffer = old; +} + +QString TextViewWindow::getLatestContent() const +{ + return m_editor->getText(); +} + +void TextViewWindow::setModified(bool p_modified) +{ + m_editor->setModified(p_modified); +} + +void TextViewWindow::handleEditorConfigChange() +{ + const auto &editorConfig = ConfigMgr::getInst().getEditorConfig(); + const auto &textEditorConfig = editorConfig.getTextEditorConfig(); + + if (m_textEditorConfigRevision != textEditorConfig.revision()) { + m_textEditorConfigRevision = textEditorConfig.revision(); + auto config = createTextEditorConfig(textEditorConfig); + m_editor->setConfig(config); + + if (textEditorConfig.getZoomDelta() != 0) { + m_editor->zoom(textEditorConfig.getZoomDelta()); + } + } +} + +void TextViewWindow::setBufferRevisionAfterInvalidation(int p_bufferRevision) +{ + m_bufferRevision = p_bufferRevision; +} + +void TextViewWindow::setMode(Mode p_mode) +{ + Q_UNUSED(p_mode); + Q_ASSERT(false); +} + +QSharedPointer TextViewWindow::createTextEditorConfig(const TextEditorConfig &p_config) +{ + const auto &themeMgr = VNoteX::getInst().getThemeMgr(); + auto config = TextViewWindowHelper::createTextEditorConfig(p_config, + themeMgr.getFile(Theme::File::TextEditorStyle), + themeMgr.getEditorHighlightTheme()); + return config; +} + +void TextViewWindow::scrollUp() +{ + QScrollBar *vbar = m_editor->getTextEdit()->verticalScrollBar(); + if (vbar && (vbar->minimum() != vbar->maximum())) { + vbar->triggerAction(QAbstractSlider::SliderSingleStepAdd); + } +} + +void TextViewWindow::scrollDown() +{ + QScrollBar *vbar = m_editor->getTextEdit()->verticalScrollBar(); + if (vbar && (vbar->minimum() != vbar->maximum())) { + vbar->triggerAction(QAbstractSlider::SliderSingleStepSub); + } +} + +void TextViewWindow::zoom(bool p_zoomIn) +{ + m_editor->zoom(m_editor->zoomDelta() + (p_zoomIn ? 1 : -1)); + auto &textEditorConfig = ConfigMgr::getInst().getEditorConfig().getTextEditorConfig(); + textEditorConfig.setZoomDelta(m_editor->zoomDelta()); + showZoomDelta(m_editor->zoomDelta()); +} diff --git a/src/widgets/textviewwindow.h b/src/widgets/textviewwindow.h new file mode 100644 index 00000000..5e57e16a --- /dev/null +++ b/src/widgets/textviewwindow.h @@ -0,0 +1,69 @@ +#ifndef TEXTVIEWWINDOW_H +#define TEXTVIEWWINDOW_H + +#include "viewwindow.h" + +namespace vte +{ + class TextEditorConfig; +} + +namespace vnotex +{ + class TextEditor; + class TextEditorConfig; + + class TextViewWindow : public ViewWindow + { + Q_OBJECT + public: + friend class TextViewWindowHelper; + + explicit TextViewWindow(QWidget *p_parent = nullptr); + + QString getLatestContent() const Q_DECL_OVERRIDE; + + void setMode(Mode p_mode) Q_DECL_OVERRIDE; + + public slots: + void handleEditorConfigChange() Q_DECL_OVERRIDE; + + protected slots: + void setModified(bool p_modified) Q_DECL_OVERRIDE; + + void handleBufferChangedInternal() Q_DECL_OVERRIDE; + + protected: + void syncEditorFromBuffer() Q_DECL_OVERRIDE; + + void syncEditorFromBufferContent() Q_DECL_OVERRIDE; + + void scrollUp() Q_DECL_OVERRIDE; + + void scrollDown() Q_DECL_OVERRIDE; + + void zoom(bool p_zoomIn) Q_DECL_OVERRIDE; + + private: + void setupUI(); + + void setupToolBar(); + + // When we have new changes to the buffer content from our ViewWindow, + // we will invalidate the contents of the buffer and the buffer will + // call this function to tell us now the latest buffer revision. + void setBufferRevisionAfterInvalidation(int p_bufferRevision); + + static QSharedPointer createTextEditorConfig(const TextEditorConfig &p_config); + + // Managed by QObject. + TextEditor *m_editor = nullptr; + + // Whether propogate the state from editor to buffer. + bool m_propogateEditorToBuffer = false; + + int m_textEditorConfigRevision = 0; + }; +} + +#endif // TEXTVIEWWINDOW_H diff --git a/src/widgets/textviewwindowhelper.h b/src/widgets/textviewwindowhelper.h new file mode 100644 index 00000000..76386a59 --- /dev/null +++ b/src/widgets/textviewwindowhelper.h @@ -0,0 +1,133 @@ +#ifndef TEXTVIEWWINDOWHELPER_H +#define TEXTVIEWWINDOWHELPER_H + +#include + +#include +#include +#include +#include + +namespace vnotex +{ + class TextEditorConfig; + + // Abstract some common logics for TextViewWindow and MarkdownViewWindow. + class TextViewWindowHelper + { + public: + TextViewWindowHelper() = delete; + + template + static void connectEditor(_ViewWindow *p_win) + { + auto editor = p_win->m_editor; + p_win->connect(editor, &vte::VTextEditor::focusIn, + p_win, [p_win]() { + emit p_win->focused(p_win); + }); + + p_win->connect(editor->getTextEdit(), &vte::VTextEdit::contentsChanged, + p_win, [p_win, editor]() { + if (p_win->m_propogateEditorToBuffer) { + p_win->getBuffer()->setModified(editor->isModified()); + p_win->getBuffer()->invalidateContent( + p_win, [p_win](int p_revision) { + p_win->setBufferRevisionAfterInvalidation(p_revision); + }); + } + }); + } + + template + static void handleBufferChanged(_ViewWindow *p_win) + { + p_win->m_propogateEditorToBuffer = false; + p_win->syncEditorFromBuffer(); + p_win->m_propogateEditorToBuffer = true; + + emit p_win->statusChanged(); + emit p_win->modeChanged(); + } + + static QSharedPointer createTextEditorConfig(const TextEditorConfig &p_config, + const QString &p_themeFile, + const QString &p_syntaxTheme) + { + auto editorConfig = QSharedPointer::create(); + + if (!p_themeFile.isEmpty()) { + editorConfig->m_theme = vte::Theme::createThemeFromFile(p_themeFile); + } + + editorConfig->m_syntaxTheme = p_syntaxTheme; + + switch (p_config.getLineNumberType()) { + case TextEditorConfig::LineNumberType::Absolute: + editorConfig->m_lineNumberType = vte::VTextEditor::LineNumberType::Absolute; + break; + + case TextEditorConfig::LineNumberType::Relative: + editorConfig->m_lineNumberType = vte::VTextEditor::LineNumberType::Relative; + break; + + case TextEditorConfig::LineNumberType::None: + editorConfig->m_lineNumberType = vte::VTextEditor::LineNumberType::None; + break; + } + + editorConfig->m_textFoldingEnabled = p_config.getTextFoldingEnabled(); + + switch (p_config.getInputMode()) { + case TextEditorConfig::InputMode::ViMode: + editorConfig->m_inputMode = vte::InputMode::ViMode; + break; + + default: + editorConfig->m_inputMode = vte::InputMode::NormalMode; + break; + } + + editorConfig->m_scaleFactor = WidgetUtils::calculateScaleFactor(); + + switch (p_config.getCenterCursor()) { + case TextEditorConfig::CenterCursor::NeverCenter: + editorConfig->m_centerCursor = vte::CenterCursor::NeverCenter; + break; + + case TextEditorConfig::CenterCursor::AlwaysCenter: + editorConfig->m_centerCursor = vte::CenterCursor::AlwaysCenter; + break; + + case TextEditorConfig::CenterCursor::CenterOnBottom: + editorConfig->m_centerCursor = vte::CenterCursor::CenterOnBottom; + break; + } + + switch (p_config.getWrapMode()) { + case TextEditorConfig::WrapMode::NoWrap: + editorConfig->m_wrapMode = vte::WrapMode::NoWrap; + break; + + case TextEditorConfig::WrapMode::WordWrap: + editorConfig->m_wrapMode = vte::WrapMode::WordWrap; + break; + + case TextEditorConfig::WrapMode::WrapAnywhere: + editorConfig->m_wrapMode = vte::WrapMode::WrapAnywhere; + break; + + case TextEditorConfig::WrapMode::WordWrapOrAnywhere: + editorConfig->m_wrapMode = vte::WrapMode::WordWrapOrAnywhere; + break; + } + + editorConfig->m_expandTab = p_config.getExpandTabEnabled(); + editorConfig->m_tabStopWidth = p_config.getTabStopWidth(); + + return editorConfig; + } + }; +} + +#endif diff --git a/src/widgets/titlebar.cpp b/src/widgets/titlebar.cpp new file mode 100644 index 00000000..37531695 --- /dev/null +++ b/src/widgets/titlebar.cpp @@ -0,0 +1,172 @@ +#include "titlebar.h" + +#include +#include +#include +#include + +#include "vnotex.h" +#include "thememgr.h" +#include +#include "widgetsfactory.h" + +#include "propertydefs.h" + +using namespace vnotex; + +const char *TitleBar::c_titleProp = "TitleBarTitle"; + +const QString TitleBar::c_actionButtonForegroundName = "widgets#titlebar#button#fg"; + +const QString TitleBar::c_menuIconForegroundName = "widgets#titlebar#menu_icon#fg"; + +const QString TitleBar::c_menuIconDisabledForegroundName = "widgets#titlebar#menu_icon#disabled_fg"; + +TitleBar::TitleBar(const QString &p_title, + TitleBar::Actions p_actionFlags, + QWidget *p_parent) + : QWidget(p_parent) +{ + setupUI(p_title, p_actionFlags); +} + +void TitleBar::setupUI(const QString &p_title, TitleBar::Actions p_actionFlags) +{ + auto mainLayout = new QHBoxLayout(this); + mainLayout->setContentsMargins(0, 0, 0, 0); + + // Title label. + { + auto titleLabel = new QLabel(p_title, this); + titleLabel->setProperty(c_titleProp, true); + mainLayout->addWidget(titleLabel); + } + + mainLayout->addStretch(); + + { + setupActionButtons(p_actionFlags); + + m_buttonWidget = new QWidget(this); + mainLayout->addWidget(m_buttonWidget); + + auto btnLayout = new QHBoxLayout(m_buttonWidget); + btnLayout->setContentsMargins(0, 0, 0, 0); + for (auto btn : m_actionButtons) { + btnLayout->addWidget(btn); + } + + setActionButtonsVisible(false); + } + + setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed); +} + +QToolButton *TitleBar::newActionButton(const QString &p_iconName, const QString &p_text, QWidget *p_parent) +{ + auto btn = new QToolButton(p_parent); + btn->setProperty(PropertyDefs::s_actionToolButton, true); + + const auto &themeMgr = VNoteX::getInst().getThemeMgr(); + auto iconFile = themeMgr.getIconFile(p_iconName); + const auto fg = themeMgr.paletteColor(c_actionButtonForegroundName); + auto icon = IconUtils::fetchIcon(iconFile, fg); + + auto act = new QAction(icon, p_text, btn); + btn->setDefaultAction(act); + return btn; +} + +void TitleBar::setupActionButtons(TitleBar::Actions p_actionFlags) +{ + if (p_actionFlags & Action::Settings) { + auto btn = newActionButton("settings.svg", tr("Settings"), this); + connect(btn, &QToolButton::triggered, + this, [this]() { + + }); + m_actionButtons.push_back(btn); + } + + if (p_actionFlags & Action::Menu) { + auto btn = newActionButton("menu.svg", tr("Menu"), this); + btn->setPopupMode(QToolButton::InstantPopup); + m_actionButtons.push_back(btn); + + m_menu = WidgetsFactory::createMenu(this); + btn->setMenu(m_menu); + connect(m_menu, &QMenu::aboutToShow, + this, [this]() { + m_alwaysShowActionButtons = true; + setActionButtonsVisible(true); + }); + connect(m_menu, &QMenu::aboutToHide, + this, [this]() { + m_alwaysShowActionButtons = false; + setActionButtonsVisible(false); + }); + } +} + +void TitleBar::enterEvent(QEvent *p_event) +{ + QWidget::enterEvent(p_event); + setActionButtonsVisible(true); +} + +void TitleBar::leaveEvent(QEvent *p_event) +{ + QWidget::leaveEvent(p_event); + setActionButtonsVisible(m_alwaysShowActionButtons); +} + +void TitleBar::setActionButtonsVisible(bool p_visible) +{ + m_buttonWidget->setVisible(p_visible); +} + +QIcon TitleBar::generateMenuActionIcon(const QString &p_iconName) +{ + const auto &themeMgr = VNoteX::getInst().getThemeMgr(); + const auto fg = themeMgr.paletteColor(c_menuIconForegroundName); + const auto disabledFg = themeMgr.paletteColor(c_menuIconDisabledForegroundName); + + QVector colors; + colors.push_back(IconUtils::OverriddenColor(fg, QIcon::Normal)); + colors.push_back(IconUtils::OverriddenColor(disabledFg, QIcon::Disabled)); + + auto iconFile = themeMgr.getIconFile(p_iconName); + return IconUtils::fetchIcon(iconFile, colors); +} + +QAction *TitleBar::addMenuAction(const QString &p_iconName, const QString &p_text) +{ + auto act = m_menu->addAction(generateMenuActionIcon(p_iconName), p_text); + return act; +} + +void TitleBar::addMenuSeparator() +{ + Q_ASSERT(m_menu); + m_menu->addSeparator(); +} + +QToolButton *TitleBar::addActionButton(const QString &p_iconName, const QString &p_text) +{ + auto btn = newActionButton(p_iconName, p_text, this); + auto layout = actionButtonLayout(); + if (!m_menu) { + m_actionButtons.push_back(btn); + layout->addWidget(btn); + } else { + int idx = m_actionButtons.size() - 1; + m_actionButtons.insert(idx, btn); + layout->insertWidget(idx, btn); + } + return btn; +} + +QHBoxLayout *TitleBar::actionButtonLayout() const +{ + return static_cast(m_buttonWidget->layout()); +} diff --git a/src/widgets/titlebar.h b/src/widgets/titlebar.h new file mode 100644 index 00000000..00016b63 --- /dev/null +++ b/src/widgets/titlebar.h @@ -0,0 +1,94 @@ +#ifndef TITLEBAR_H +#define TITLEBAR_H + +#include +#include +#include + +class QToolButton; +class QHBoxLayout; + +namespace vnotex +{ + class TitleBar : public QWidget + { + Q_OBJECT + public: + enum Action + { + None = 0, + Settings = 0x1, + Menu = 0x2 + }; + Q_DECLARE_FLAGS(Actions, Action) + + TitleBar(const QString &p_title, + TitleBar::Actions p_actionFlags, + QWidget *p_parent = nullptr); + + QToolButton *addActionButton(const QString &p_iconName, const QString &p_text); + + // Add action to the menu. + QAction *addMenuAction(const QString &p_iconName, const QString &p_text); + + template + QAction *addMenuAction(const QString &p_iconName, const QString &p_text, const QObject *p_context, Functor p_functor); + + template + QAction *addMenuAction(const QString &p_text, const QObject *p_context, Functor p_functor); + + void addMenuSeparator(); + + protected: + void enterEvent(QEvent *p_event) Q_DECL_OVERRIDE; + + void leaveEvent(QEvent *p_event) Q_DECL_OVERRIDE; + + private: + void setupUI(const QString &p_title, TitleBar::Actions p_actionFlags); + + void setupActionButtons(TitleBar::Actions p_actionFlags); + + void setActionButtonsVisible(bool p_visible); + + QHBoxLayout *actionButtonLayout() const; + + static QToolButton *newActionButton(const QString &p_iconName, const QString &p_text, QWidget *p_parent); + + static QIcon generateMenuActionIcon(const QString &p_iconName); + + QVector m_actionButtons; + + QWidget *m_buttonWidget = nullptr; + + bool m_alwaysShowActionButtons = false; + + QMenu *m_menu = nullptr; + + static const char *c_titleProp; + + static const QString c_actionButtonForegroundName; + + static const QString c_menuIconForegroundName; + + static const QString c_menuIconDisabledForegroundName; + }; + + Q_DECLARE_OPERATORS_FOR_FLAGS(TitleBar::Actions) + + template + QAction *TitleBar::addMenuAction(const QString &p_iconName, const QString &p_text, const QObject *p_context, Functor p_functor) + { + auto act = m_menu->addAction(generateMenuActionIcon(p_iconName), p_text, p_context, p_functor); + return act; + } + + template + QAction *TitleBar::addMenuAction(const QString &p_text, const QObject *p_context, Functor p_functor) + { + auto act = m_menu->addAction(p_text, p_context, p_functor); + return act; + } +} // ns vnotex + +#endif // TITLEBAR_H diff --git a/src/widgets/toolbarhelper.cpp b/src/widgets/toolbarhelper.cpp new file mode 100644 index 00000000..8a7f1ffe --- /dev/null +++ b/src/widgets/toolbarhelper.cpp @@ -0,0 +1,413 @@ +#include "toolbarhelper.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "mainwindow.h" +#include "vnotex.h" +#include "widgetsfactory.h" +#include +#include +#include +#include "fullscreentoggleaction.h" +#include +#include +#include +#include "dialogs/settings/settingsdialog.h" + +using namespace vnotex; + +static QToolBar *createToolBar(MainWindow *p_win, const QString &p_title, const QString &p_name) +{ + auto tb = p_win->addToolBar(p_title); + tb->setObjectName(p_name); + tb->setMovable(false); + return tb; +} + +QToolBar *ToolBarHelper::setupFileToolBar(MainWindow *p_win, QToolBar *p_toolBar) +{ + auto tb = p_toolBar; + if (!tb) { + tb = createToolBar(p_win, MainWindow::tr("File"), "FileToolBar"); + } + + // New. + { + const auto &coreConfig = ConfigMgr::getInst().getCoreConfig(); + + auto newBtn = WidgetsFactory::createToolButton(tb); + newBtn->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); + + // Popup menu. + auto newMenu = WidgetsFactory::createMenu(tb); + newBtn->setMenu(newMenu); + + // New note. + auto newNoteAct = newMenu->addAction(generateIcon("new_note.svg"), + MainWindow::tr("New Note"), + newMenu, + []() { + emit VNoteX::getInst().newNoteRequested(); + }); + WidgetUtils::addActionShortcut(newNoteAct, + coreConfig.getShortcut(CoreConfig::Shortcut::NewNote)); + newBtn->setDefaultAction(newNoteAct); + // To hide the shortcut text shown in button. + newBtn->setText(MainWindow::tr("New Note")); + + newMenu->addSeparator(); + + // New folder. + newMenu->addAction(generateIcon("new_folder.svg"), + MainWindow::tr("New Folder"), + newMenu, + []() { + emit VNoteX::getInst().newFolderRequested(); + }); + + newMenu->addSeparator(); + + // New notebook. + newMenu->addAction(generateIcon("new_notebook.svg"), + MainWindow::tr("New Notebook"), + newMenu, + []() { + emit VNoteX::getInst().newNotebookRequested(); + }); + + // New notebook from folder. + newMenu->addAction(generateIcon("new_notebook_from_folder.svg"), + MainWindow::tr("New Notebook From Folder"), + newMenu, + []() { + emit VNoteX::getInst().newNotebookFromFolderRequested(); + }); + + // Import notebook. + newMenu->addAction(generateIcon("import_notebook.svg"), + MainWindow::tr("Import Notebook"), + newMenu, + []() { + emit VNoteX::getInst().importNotebookRequested(); + }); + + // Import notebook of VNote 2.0. + newMenu->addAction(generateIcon("import_notebook_of_vnote2.svg"), + MainWindow::tr("Import Legacy Notebook Of VNote 2.0"), + newMenu, + []() { + emit VNoteX::getInst().importLegacyNotebookRequested(); + }); + + newMenu->addSeparator(); + + // Import file. + newMenu->addAction(MainWindow::tr("Import File"), + newMenu, + []() { + emit VNoteX::getInst().importFileRequested(); + }); + + // Import folder. + newMenu->addAction(MainWindow::tr("Import Folder"), + newMenu, + []() { + emit VNoteX::getInst().importFolderRequested(); + }); + + newMenu->addSeparator(); + + // Open file. + newMenu->addAction(MainWindow::tr("Open File"), + newMenu, + [p_win]() { + static QString lastDirPath = QDir::homePath(); + auto files = QFileDialog::getOpenFileNames(p_win, MainWindow::tr("Open File"), lastDirPath); + if (files.isEmpty()) { + return; + } + + lastDirPath = QFileInfo(files[0]).path(); + + for (const auto &file : files) { + emit VNoteX::getInst().openFileRequested(file, + QSharedPointer::create()); + } + }); + + + tb->addWidget(newBtn); + } + + return tb; +} + +QToolBar *ToolBarHelper::setupQuickAccessToolBar(MainWindow *p_win, QToolBar *p_toolBar) +{ + auto tb = p_toolBar; + if (!tb) { + tb = createToolBar(p_win, MainWindow::tr("Quick Access"), "QuickAccessToolBar"); + } + + return tb; +} + +QToolBar *ToolBarHelper::setupSettingsToolBar(MainWindow *p_win, QToolBar *p_toolBar) +{ + auto tb = p_toolBar; + if (!tb) { + tb = createToolBar(p_win, MainWindow::tr("Settings"), "SettingsToolBar"); + } + + // Spacer. + addSpacer(tb); + + // Expand. + { + const auto &coreConfig = ConfigMgr::getInst().getCoreConfig(); + + auto btn = WidgetsFactory::createToolButton(tb); + + auto expandAct = new QAction(generateIcon("expand.svg"), + MainWindow::tr("Expand Content Area"), + btn); + WidgetUtils::addActionShortcut(expandAct, + coreConfig.getShortcut(CoreConfig::Shortcut::ExpandContentArea)); + expandAct->setCheckable(true); + MainWindow::connect(expandAct, &QAction::triggered, + p_win, &MainWindow::setContentAreaExpanded); + MainWindow::connect(p_win, &MainWindow::layoutChanged, + [expandAct, p_win]() { + expandAct->setChecked(p_win->isContentAreaExpanded()); + }); + btn->setDefaultAction(expandAct); + + auto menu = WidgetsFactory::createMenu(tb); + btn->setMenu(menu); + + auto fullScreenAct = new FullScreenToggleAction(p_win, + generateIcon("fullscreen.svg"), + menu); + WidgetUtils::addActionShortcut(fullScreenAct, + coreConfig.getShortcut(CoreConfig::Shortcut::FullScreen)); + menu->addAction(fullScreenAct); + + auto stayOnTopAct = menu->addAction(generateIcon("stay_on_top.svg"), MainWindow::tr("Stay On Top"), + p_win, &MainWindow::setStayOnTop); + stayOnTopAct->setCheckable(true); + + menu->addSeparator(); + + { + // Windows. + auto subMenu = menu->addMenu(MainWindow::tr("Windows")); + for (auto dock : p_win->getDocks()) { + subMenu->addAction(dock->toggleViewAction()); + } + } + + tb->addWidget(btn); + } + + // Settings. + { + const auto &coreConfig = ConfigMgr::getInst().getCoreConfig(); + + auto btn = WidgetsFactory::createToolButton(tb); + + auto menu = WidgetsFactory::createMenu(tb); + btn->setMenu(menu); + + auto settingsAct = menu->addAction(generateIcon("settings.svg"), + MainWindow::tr("Settings"), + menu, + [p_win]() { + SettingsDialog dialog(p_win); + dialog.exec(); + }); + WidgetUtils::addActionShortcut(settingsAct, + coreConfig.getShortcut(CoreConfig::Shortcut::Settings)); + btn->setDefaultAction(settingsAct); + + menu->addSeparator(); + + menu->addAction(MainWindow::tr("Open User Configuration Folder"), + menu, + []() { + auto folderPath = ConfigMgr::getInst().getUserFolder(); + WidgetUtils::openUrlByDesktop(QUrl::fromLocalFile(folderPath)); + }); + + menu->addAction(MainWindow::tr("Open Default Configuration Folder"), + menu, + []() { + auto folderPath = ConfigMgr::getInst().getAppFolder(); + WidgetUtils::openUrlByDesktop(QUrl::fromLocalFile(folderPath)); + }); + + menu->addSeparator(); + + menu->addAction(MainWindow::tr("Edit User Configuration"), + menu, + []() { + auto file = ConfigMgr::getInst().getConfigFilePath(ConfigMgr::Source::User); + auto paras = QSharedPointer::create(); + emit VNoteX::getInst().openFileRequested(file, paras); + }); + + menu->addAction(MainWindow::tr("Open Default Configuration"), + menu, + []() { + auto file = ConfigMgr::getInst().getConfigFilePath(ConfigMgr::Source::App); + auto paras = QSharedPointer::create(); + paras->m_readOnly = true; + emit VNoteX::getInst().openFileRequested(file, paras); + }); + + menu->addSeparator(); + + menu->addAction(MainWindow::tr("Reset Main Window Layout"), + menu, + [p_win]() { + p_win->resetStateAndGeometry(); + }); + + tb->addWidget(btn); + } + + // WhatsThis. + { + auto btn = WidgetsFactory::createToolButton(tb); + + auto menu = WidgetsFactory::createMenu(tb); + btn->setMenu(menu); + + auto whatsThisAct = menu->addAction(generateIcon("whatsthis.svg"), + MainWindow::tr("What's This?"), + menu, + []() { + QWhatsThis::enterWhatsThisMode(); + }); + whatsThisAct->setToolTip(MainWindow::tr("Enter WhatsThis mode and click somewhere to show help information")); + btn->setDefaultAction(whatsThisAct); + + menu->addSeparator(); + + menu->addAction(MainWindow::tr("Shortcuts Help"), + menu, + []() { + const auto file = DocsUtils::getDocFile(QStringLiteral("shortcuts.md")); + if (!file.isEmpty()) { + auto paras = QSharedPointer::create(); + paras->m_readOnly = true; + emit VNoteX::getInst().openFileRequested(file, paras); + } + }); + + menu->addSeparator(); + + menu->addAction(MainWindow::tr("View Logs"), + menu, + []() { + const auto file = ConfigMgr::getInst().getLogFile(); + if (QFileInfo::exists(file)) { + auto paras = QSharedPointer::create(); + paras->m_readOnly = true; + emit VNoteX::getInst().openFileRequested(file, paras); + } + }); + + menu->addSeparator(); + + menu->addAction(MainWindow::tr("About"), + menu, + [p_win]() { + auto info = MainWindow::tr("

    %1

    \n%2\n").arg(qApp->applicationDisplayName(), + qApp->applicationVersion()); + const auto text = DocsUtils::getDocText(QStringLiteral("about_vnotex.txt")); + QMessageBox::about(p_win, MainWindow::tr("About"), info + text); + }); + + tb->addWidget(btn); + } + + return tb; +} + +static const QString c_fgPalette = QStringLiteral("widgets#toolbar#icon#fg"); +static const QString c_disabledPalette = QStringLiteral("widgets#toolbar#icon#disabled_fg"); +static const QString c_dangerousPalette = QStringLiteral("widgets#toolbar#icon#dangerous_fg"); + +QIcon ToolBarHelper::generateIcon(const QString &p_iconName) +{ + const auto &themeMgr = VNoteX::getInst().getThemeMgr(); + const auto fg = themeMgr.paletteColor(c_fgPalette); + const auto disabledFg = themeMgr.paletteColor(c_disabledPalette); + + QVector colors; + colors.push_back(IconUtils::OverriddenColor(fg, QIcon::Normal)); + colors.push_back(IconUtils::OverriddenColor(disabledFg, QIcon::Disabled)); + + auto iconFile = themeMgr.getIconFile(p_iconName); + return IconUtils::fetchIcon(iconFile, colors); +} + +QIcon ToolBarHelper::generateDangerousIcon(const QString &p_iconName) +{ + const auto &themeMgr = VNoteX::getInst().getThemeMgr(); + const auto fg = themeMgr.paletteColor(c_fgPalette); + const auto disabledFg = themeMgr.paletteColor(c_disabledPalette); + const auto dangerousFg = themeMgr.paletteColor(c_dangerousPalette); + + QVector colors; + colors.push_back(IconUtils::OverriddenColor(fg, QIcon::Normal)); + colors.push_back(IconUtils::OverriddenColor(disabledFg, QIcon::Disabled)); + colors.push_back(IconUtils::OverriddenColor(dangerousFg, QIcon::Active)); + + auto iconFile = themeMgr.getIconFile(p_iconName); + return IconUtils::fetchIcon(iconFile, colors); +} + +void ToolBarHelper::setupToolBars(MainWindow *p_win) +{ + m_toolBars.clear(); + + auto quickAccessTb = setupQuickAccessToolBar(p_win, nullptr); + m_toolBars.insert(quickAccessTb->objectName(), quickAccessTb); + + auto fileTab = setupFileToolBar(p_win, nullptr); + m_toolBars.insert(fileTab->objectName(), fileTab); + + auto settingsToolBar = setupSettingsToolBar(p_win, nullptr); + m_toolBars.insert(settingsToolBar->objectName(), settingsToolBar); +} + +void ToolBarHelper::setupToolBars(MainWindow *p_win, QToolBar *p_toolBar) +{ + m_toolBars.clear(); + + p_toolBar->setObjectName(QStringLiteral("UnifiedToolBar")); + p_toolBar->setMovable(false); + p_win->addToolBar(p_toolBar); + + setupQuickAccessToolBar(p_win, p_toolBar); + setupFileToolBar(p_win, p_toolBar); + setupSettingsToolBar(p_win, p_toolBar); + m_toolBars.insert(p_toolBar->objectName(), p_toolBar); +} + +void ToolBarHelper::addSpacer(QToolBar *p_toolBar) +{ + auto spacer = new QWidget(p_toolBar); + spacer->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Fixed); + auto act = p_toolBar->addWidget(spacer); + act->setEnabled(false); +} diff --git a/src/widgets/toolbarhelper.h b/src/widgets/toolbarhelper.h new file mode 100644 index 00000000..c49744e2 --- /dev/null +++ b/src/widgets/toolbarhelper.h @@ -0,0 +1,40 @@ +#ifndef TOOLBARHELPER_H +#define TOOLBARHELPER_H + +#include +#include + +class QToolBar; + +namespace vnotex +{ + class MainWindow; + + // Tool bar helper for MainWindow. + class ToolBarHelper + { + public: + // Setup all tool bars of main window. + void setupToolBars(MainWindow *p_win); + + // Setup tool bars of main window into one unified tool bar. + void setupToolBars(MainWindow *p_win, QToolBar *p_toolBar); + + static QIcon generateIcon(const QString &p_iconName); + + static QIcon generateDangerousIcon(const QString &p_iconName); + + static void addSpacer(QToolBar *p_toolBar); + + private: + static QToolBar *setupFileToolBar(MainWindow *p_win, QToolBar *p_toolBar); + + static QToolBar *setupQuickAccessToolBar(MainWindow *p_win, QToolBar *p_toolBar); + + static QToolBar *setupSettingsToolBar(MainWindow *p_win, QToolBar *p_toolBar); + + QHash m_toolBars; + }; +} // ns vnotex + +#endif // TOOLBARHELPER_H diff --git a/src/widgets/toolbox.cpp b/src/widgets/toolbox.cpp new file mode 100644 index 00000000..50be9bc4 --- /dev/null +++ b/src/widgets/toolbox.cpp @@ -0,0 +1,190 @@ +#include "toolbox.h" + +#include +#include +#include +#include +#include +#include +#include + +#include +#include "global.h" +#include +#include "thememgr.h" +#include "vnotex.h" + +using namespace vnotex; + +const char *ToolBox::c_titleProp = "ToolBoxTitle"; + +const char *ToolBox::c_titleButtonProp = "ToolBoxTitleButton"; + +const QString ToolBox::c_titleButtonForegroundName = "widgets#toolbox#title#button#fg"; + +const QString ToolBox::c_titleButtonActiveForegroundName = "widgets#toolbox#title#button#active_fg"; + +ToolBox::ToolBox(QWidget *p_parent) + : QFrame(p_parent), + NavigationMode(NavigationMode::Type::DoubleKeys, this), + m_buttonLayout(nullptr), + m_widgetLayout(nullptr), + m_buttonActionGroup(nullptr), + m_currentIndex(-1) +{ + setupUI(); +} + +void ToolBox::setupUI() +{ + auto mainLayout = new QVBoxLayout(this); + mainLayout->setContentsMargins(CONTENTS_MARGIN, 0, CONTENTS_MARGIN, 0); + + auto titleWid = new QWidget(this); + titleWid->setProperty(c_titleProp, true); + mainLayout->addWidget(titleWid); + + m_buttonLayout = new QHBoxLayout(titleWid); + m_buttonLayout->addStretch(); + m_buttonLayout->setContentsMargins(0, 0, 0, 0); + m_buttonLayout->setSpacing(0); + + m_buttonActionGroup = new QActionGroup(titleWid); + + m_widgetLayout = new QStackedLayout(); + mainLayout->addLayout(m_widgetLayout); +} + +int ToolBox::addItem(QWidget *p_widget, + const QString &p_iconFile, + const QString &p_text, + QWidget *p_focusWidget) +{ + int idx = m_items.size(); + + auto icon = generateTitleIcon(p_iconFile); + auto btn = generateItemButton(icon, p_text, idx); + m_buttonLayout->insertWidget(idx, btn); + m_widgetLayout->insertWidget(idx, p_widget); + + ItemInfo item; + item.m_widget = p_widget; + item.m_focusWidget = p_focusWidget; + item.m_text = p_text; + item.m_button = btn; + + m_items.push_back(item); + + if (idx == 0) { + setCurrentIndex(idx, false); + } + + return idx; +} + +QVector ToolBox::getVisibleNavigationItems() +{ + QVector items; + items.reserve(m_items.size()); + for (const auto &item : m_items) { + items.push_back(item.m_widget); + } + return items; +} + +void ToolBox::placeNavigationLabel(int p_idx, void *p_item, QLabel *p_label) +{ + Q_UNUSED(p_item); + QRect rect = m_items[p_idx].m_button->geometry(); + p_label->move(rect.x(), rect.y() + rect.height() / 2); +} + +void ToolBox::handleTargetHit(void *p_item) +{ + if (p_item) { + auto widget = static_cast(p_item); + setCurrentWidget(widget, true); + } +} + +void ToolBox::setCurrentWidget(QWidget *p_widget, bool p_focus) +{ + int idx = -1; + for (int i = 0; i < m_items.size(); ++i) { + if (m_items[i].m_widget == p_widget) { + idx = i; + break; + } + } + + setCurrentIndex(idx, p_focus); +} + +QIcon ToolBox::generateTitleIcon(const QString &p_iconFile) const +{ + const auto &themeMgr = VNoteX::getInst().getThemeMgr(); + const auto fg = themeMgr.paletteColor(c_titleButtonForegroundName); + const auto activeFg = themeMgr.paletteColor(c_titleButtonActiveForegroundName); + + QVector colors; + colors.push_back(IconUtils::OverriddenColor(fg, QIcon::Normal, QIcon::Off)); + colors.push_back(IconUtils::OverriddenColor(activeFg, QIcon::Normal, QIcon::On)); + + return IconUtils::fetchIcon(p_iconFile, colors); +} + +QToolButton *ToolBox::generateItemButton(const QIcon &p_icon, const QString &p_text, int p_itemIdx) const +{ + auto btn = new QToolButton(); + btn->setProperty(c_titleButtonProp, true); + + auto act = new QAction(p_icon, p_text, m_buttonActionGroup); + act->setCheckable(true); + act->setData(p_itemIdx); + + btn->setDefaultAction(act); + connect(btn, &QToolButton::triggered, + this, [this](QAction *p_action) { + const_cast(this)->setCurrentIndex(p_action->data().toInt(), true); + }); + + return btn; +} + +void ToolBox::setCurrentIndex(int p_idx, bool p_focus) +{ + if (p_idx < 0 || p_idx >= m_items.size()) { + m_currentIndex = m_items.isEmpty() ? -1 : 0; + } else { + m_currentIndex = p_idx; + } + + setCurrentButtonIndex(m_currentIndex); + m_widgetLayout->setCurrentIndex(m_currentIndex); + + auto widget = m_widgetLayout->widget(m_currentIndex); + if (widget && p_focus) { + if (m_items[m_currentIndex].m_focusWidget) { + m_items[m_currentIndex].m_focusWidget->setFocus(); + } else { + widget->setFocus(); + } + } +} + +void ToolBox::setCurrentButtonIndex(int p_idx) +{ + for (int i = 0; i < m_items.size(); ++i) { + auto btn = m_items[i].m_button; + btn->setChecked(p_idx == i); + btn->setToolButtonStyle(p_idx == i ? Qt::ToolButtonTextBesideIcon : Qt::ToolButtonIconOnly); + } +} + +void ToolBox::focusInEvent(QFocusEvent *p_event) +{ + QFrame::focusInEvent(p_event); + + // Focus current tab. + setCurrentIndex(m_currentIndex, true); +} diff --git a/src/widgets/toolbox.h b/src/widgets/toolbox.h new file mode 100644 index 00000000..26049ba8 --- /dev/null +++ b/src/widgets/toolbox.h @@ -0,0 +1,90 @@ +#ifndef TOOLBOX_H +#define TOOLBOX_H + +#include +#include +#include + +#include "navigationmode.h" + +class QToolButton; +class QStackedLayout; +class QBoxLayout; +class QActionGroup; + +namespace vnotex +{ + class ThemeMgr; + + class ToolBox : public QFrame, public NavigationMode + { + Q_OBJECT + public: + explicit ToolBox(QWidget *p_parent = nullptr); + + // Returns the index of newly added item. + int addItem(QWidget *p_widget, + const QString &p_iconFile, + const QString &p_text, + QWidget *p_focusWidget = nullptr); + + void setCurrentIndex(int p_idx, bool p_focus); + + void setCurrentWidget(QWidget *p_widget, bool p_focus); + + // NavigationMode. + protected: + QVector getVisibleNavigationItems() Q_DECL_OVERRIDE; + + void placeNavigationLabel(int p_idx, void *p_item, QLabel *p_label) Q_DECL_OVERRIDE; + + void handleTargetHit(void *p_item) Q_DECL_OVERRIDE; + + protected: + void focusInEvent(QFocusEvent *p_event) Q_DECL_OVERRIDE; + + private: + struct ItemInfo + { + ItemInfo() + : m_widget(nullptr), + m_focusWidget(nullptr), + m_button(nullptr) + { + } + + QWidget *m_widget; + QWidget *m_focusWidget; + QString m_text; + QToolButton *m_button; + }; + + void setupUI(); + + QToolButton *generateItemButton(const QIcon &p_icon, const QString &p_text, int p_itemIdx) const; + + QIcon generateTitleIcon(const QString &p_iconFile) const; + + void setCurrentButtonIndex(int p_idx); + + QBoxLayout *m_buttonLayout; + + QStackedLayout *m_widgetLayout; + + QActionGroup *m_buttonActionGroup; + + int m_currentIndex; + + QVector m_items; + + static const char *c_titleProp; + + static const char *c_titleButtonProp; + + static const QString c_titleButtonForegroundName; + + static const QString c_titleButtonActiveForegroundName; + }; +} // ns vnotex + +#endif // TOOLBOX_H diff --git a/src/widgets/treeview.cpp b/src/widgets/treeview.cpp new file mode 100644 index 00000000..a00a7c81 --- /dev/null +++ b/src/widgets/treeview.cpp @@ -0,0 +1,21 @@ +#include "treeview.h" + +#include + +#include + +using namespace vnotex; + +TreeView::TreeView(QWidget *p_parent) + : QTreeView(p_parent) +{ +} + +void TreeView::keyPressEvent(QKeyEvent *p_event) +{ + if (WidgetUtils::processKeyEventLikeVi(this, p_event)) { + return; + } + + QTreeView::keyPressEvent(p_event); +} diff --git a/src/widgets/treeview.h b/src/widgets/treeview.h new file mode 100644 index 00000000..5d69909e --- /dev/null +++ b/src/widgets/treeview.h @@ -0,0 +1,20 @@ +#ifndef TREEVIEW_H +#define TREEVIEW_H + +#include +#include + +namespace vnotex +{ + class TreeView : public QTreeView + { + Q_OBJECT + public: + explicit TreeView(QWidget *p_parent = nullptr); + + protected: + void keyPressEvent(QKeyEvent *p_event) Q_DECL_OVERRIDE; + }; +} + +#endif // TREEVIEW_H diff --git a/src/widgets/treewidget.cpp b/src/widgets/treewidget.cpp new file mode 100644 index 00000000..9ff0f78a --- /dev/null +++ b/src/widgets/treewidget.cpp @@ -0,0 +1,214 @@ +#include "treewidget.h" + +#include +#include +#include + +#include + +using namespace vnotex; + +TreeWidget::TreeWidget(QWidget *p_parent) + : QTreeWidget(p_parent) +{ +} + +TreeWidget::TreeWidget(TreeWidget::Flags p_flags, QWidget *p_parent) + : QTreeWidget(p_parent), + m_flags(p_flags) +{ +} + +void TreeWidget::mousePressEvent(QMouseEvent *p_event) +{ + QTreeWidget::mousePressEvent(p_event); + + if (m_flags & Flag::ClickSpaceToClearSelection) { + auto idx = indexAt(p_event->pos()); + if (!idx.isValid()) { + clearSelection(); + setCurrentItem(NULL); + } + } +} + +void TreeWidget::setupSingleColumnHeaderlessTree(QTreeWidget *p_widget, bool p_contextMenu, bool p_extendedSelection) +{ + p_widget->setColumnCount(1); + p_widget->setHeaderHidden(true); + if (p_contextMenu) { + p_widget->setContextMenuPolicy(Qt::CustomContextMenu); + } + if (p_extendedSelection) { + p_widget->setSelectionMode(QAbstractItemView::ExtendedSelection); + } +} + +void TreeWidget::showHorizontalScrollbar(QTreeWidget *p_tree) +{ + p_tree->header()->setHorizontalScrollMode(QAbstractItemView::ScrollPerPixel); + p_tree->header()->setSectionResizeMode(QHeaderView::ResizeToContents); + p_tree->header()->setStretchLastSection(false); +} + +QTreeWidgetItem *TreeWidget::findItem(const QTreeWidget *p_widget, const QVariant &p_data) +{ + int nrTop = p_widget->topLevelItemCount(); + for (int i = 0; i < nrTop; ++i) { + auto item = findItemHelper(p_widget->topLevelItem(i), p_data); + if (item) { + return item; + } + } + + return nullptr; +} + +QTreeWidgetItem *TreeWidget::findItemHelper(QTreeWidgetItem *p_item, const QVariant &p_data) +{ + if (!p_item) { + return nullptr; + } + + if (p_item->data(0, Qt::UserRole) == p_data) { + return p_item; + } + + int nrChild = p_item->childCount(); + for (int i = 0; i < nrChild; ++i) { + auto item = findItemHelper(p_item->child(i), p_data); + if (item) { + return item; + } + } + + return nullptr; +} + +void TreeWidget::keyPressEvent(QKeyEvent *p_event) +{ + if (WidgetUtils::processKeyEventLikeVi(this, p_event)) { + return; + } + + switch (p_event->key()) { + case Qt::Key_Return: + Q_FALLTHROUGH(); + case Qt::Key_Enter: + { + auto item = currentItem(); + if (item && item->childCount() > 0) { + item->setExpanded(!item->isExpanded()); + } + + break; + } + + default: + break; + } + + QTreeWidget::keyPressEvent(p_event); +} + +QTreeWidgetItem *TreeWidget::nextItem(const QTreeWidget *p_tree, + QTreeWidgetItem *p_item, + bool p_forward) +{ + QTreeWidgetItem *nItem = NULL; + if (p_forward) { + if (p_item->isExpanded() && p_item->childCount() > 0) { + nItem = p_item->child(0); + } else { + while (!nItem && p_item) { + nItem = nextSibling(p_tree, p_item, true); + p_item = p_item->parent(); + } + } + } else { + nItem = nextSibling(p_tree, p_item, false); + if (!nItem) { + nItem = p_item->parent(); + } else { + nItem = lastItemOfTree(nItem); + } + } + + return nItem; +} + +QTreeWidgetItem *TreeWidget::lastItemOfTree(QTreeWidgetItem *p_item) +{ + if (p_item->isExpanded() && p_item->childCount() > 0) { + return p_item->child(p_item->childCount() - 1); + } else { + return p_item; + } +} + +QTreeWidgetItem *TreeWidget::nextSibling(const QTreeWidget *p_tree, + QTreeWidgetItem *p_item, + bool p_forward) +{ + if (!p_item) { + return NULL; + } + + QTreeWidgetItem *pa = p_item->parent(); + if (pa) { + int idx = pa->indexOfChild(p_item); + if (p_forward) { + ++idx; + if (idx >= pa->childCount()) { + return NULL; + } + } else { + --idx; + if (idx < 0) { + return NULL; + } + } + + return pa->child(idx); + } else { + // Top level item. + int idx = p_tree->indexOfTopLevelItem(p_item); + if (p_forward) { + ++idx; + if (idx >= p_tree->topLevelItemCount()) { + return NULL; + } + } else { + --idx; + if (idx < 0) { + return NULL; + } + } + + return p_tree->topLevelItem(idx); + } +} + +QVector TreeWidget::getVisibleItems(const QTreeWidget *p_widget) +{ + QVector items; + + auto firstItem = p_widget->itemAt(0, 0); + if (!firstItem) { + return items; + } + + auto lastItem = p_widget->itemAt(p_widget->viewport()->rect().bottomLeft()); + + auto item = firstItem; + while (item) { + items.append(item); + if (item == lastItem) { + break; + } + + item = nextItem(p_widget, item, true); + } + + return items; +} diff --git a/src/widgets/treewidget.h b/src/widgets/treewidget.h new file mode 100644 index 00000000..f7c1bc32 --- /dev/null +++ b/src/widgets/treewidget.h @@ -0,0 +1,57 @@ +#ifndef TREEWIDGET_H +#define TREEWIDGET_H + +#include +#include + +namespace vnotex +{ + class TreeWidget : public QTreeWidget + { + Q_OBJECT + public: + enum Flag + { + None = 0, + ClickSpaceToClearSelection = 0x1 + }; + Q_DECLARE_FLAGS(Flags, Flag) + + explicit TreeWidget(QWidget *p_parent = nullptr); + + TreeWidget(TreeWidget::Flags p_flags, QWidget *p_parent = nullptr); + + static void setupSingleColumnHeaderlessTree(QTreeWidget *p_widget, bool p_contextMenu, bool p_extendedSelection); + + static void showHorizontalScrollbar(QTreeWidget *p_tree); + + static QTreeWidgetItem *findItem(const QTreeWidget *p_widget, const QVariant &p_data); + + // Next visible item. + static QTreeWidgetItem *nextItem(const QTreeWidget* p_tree, + QTreeWidgetItem *p_item, + bool p_forward); + + static QVector getVisibleItems(const QTreeWidget *p_widget); + + protected: + void mousePressEvent(QMouseEvent *p_event) Q_DECL_OVERRIDE; + + void keyPressEvent(QKeyEvent *p_event) Q_DECL_OVERRIDE; + + private: + static QTreeWidgetItem *findItemHelper(QTreeWidgetItem *p_item, const QVariant &p_data); + + static QTreeWidgetItem *nextSibling(const QTreeWidget *p_widget, + QTreeWidgetItem *p_item, + bool p_forward); + + static QTreeWidgetItem *lastItemOfTree(QTreeWidgetItem *p_item); + + Flags m_flags = Flag::None; + }; + + Q_DECLARE_OPERATORS_FOR_FLAGS(TreeWidget::Flags) +} // ns vnotex + +#endif // TREEWIDGET_H diff --git a/src/widgets/viewarea.cpp b/src/widgets/viewarea.cpp new file mode 100644 index 00000000..b58b8304 --- /dev/null +++ b/src/widgets/viewarea.cpp @@ -0,0 +1,976 @@ +#include "viewarea.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "viewwindow.h" +#include "mainwindow.h" +#include "events.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace vnotex; + +ViewArea::ViewArea(QWidget *p_parent) + : QWidget(p_parent), + NavigationMode(NavigationMode::Type::DoubleKeys, this) +{ + setupUI(); + + setAcceptDrops(true); + + setupGlobalShortcuts(); + + connect(this, &ViewArea::viewSplitsCountChanged, + this, &ViewArea::handleViewSplitsCountChange); + + auto mainWindow = VNoteX::getInst().getMainWindow(); + connect(mainWindow, &MainWindow::mainWindowClosed, + this, [this](const QSharedPointer &p_event) { + if (p_event->m_handled) { + return; + } + + // TODO: save last opened files. + + bool ret = close(false); + if (!ret) { + p_event->m_response = false; + p_event->m_handled = true; + } + }); + + connect(mainWindow, &MainWindow::mainWindowClosedOnQuit, + this, [this]() { + close(true); + }); + + connect(&VNoteX::getInst(), &VNoteX::nodeAboutToMove, + this, [this](Node *p_node, const QSharedPointer &p_event) { + if (p_event->m_handled) { + return; + } + + bool ret = close(p_node, false); + p_event->m_response = ret; + p_event->m_handled = !ret; + }); + + connect(&VNoteX::getInst(), &VNoteX::nodeAboutToRemove, + this, [this](Node *p_node, const QSharedPointer &p_event) { + if (p_event->m_handled) { + return; + } + + bool ret = close(p_node, false); + p_event->m_response = ret; + p_event->m_handled = !ret; + }); + + connect(&VNoteX::getInst(), &VNoteX::nodeAboutToRename, + this, [this](Node *p_node, const QSharedPointer &p_event) { + if (p_event->m_handled) { + return; + } + + bool ret = close(p_node, false); + p_event->m_response = ret; + p_event->m_handled = !ret; + }); + + auto &configMgr = ConfigMgr::getInst(); + connect(&configMgr, &ConfigMgr::editorConfigChanged, + this, [this]() { + forEachViewWindow([](ViewWindow *p_win) { + p_win->handleEditorConfigChange(); + return true; + }); + }); + + m_fileCheckTimer = new QTimer(this); + m_fileCheckTimer->setSingleShot(false); + m_fileCheckTimer->setInterval(2000); + connect(m_fileCheckTimer, &QTimer::timeout, + this, [this]() { + auto win = getCurrentViewWindow(); + if (win) { + win->checkFileMissingOrChangedOutsidePeriodically(); + } + }); + + connect(qApp, &QApplication::focusChanged, + this, [this](QWidget *p_old, QWidget *p_now) { + if (!p_now) { + m_fileCheckTimer->stop(); + } else if (!p_old && m_currentSplit) { + m_fileCheckTimer->start(); + } + }); +} + +ViewArea::~ViewArea() +{ + // All splits/workspaces/windows should be released during close() before destruction. + Q_ASSERT(m_splits.isEmpty() && m_currentSplit == nullptr); + Q_ASSERT(m_workspaces.isEmpty()); +} + +void ViewArea::setupUI() +{ + setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + + m_mainLayout = new QVBoxLayout(this); + m_mainLayout->setContentsMargins(0, 0, 0, 0); + + showSceneWidget(); +} + +QSize ViewArea::sizeHint() const +{ + const QSize preferredSize(400, 300); + auto sz = QWidget::sizeHint(); + if (sz.width() < preferredSize.width()) { + sz = preferredSize; + } + + return sz; +} + +void ViewArea::openBuffer(Buffer *p_buffer, const QSharedPointer &p_paras) +{ + // We allow multiple ViewWindows of the same buffer in different workspaces by default. + auto wins = findBufferInViewSplits(p_buffer); + if (wins.isEmpty()) { + if (!m_currentSplit) { + addFirstViewSplit(); + } + + Q_ASSERT(m_currentSplit); + + // Create a ViewWindow from @p_buffer. + auto window = p_buffer->createViewWindow(p_paras, nullptr); + m_currentSplit->addViewWindow(window); + setCurrentViewWindow(window); + } else { + auto selectedWin = wins.first(); + for (auto win : wins) { + // Prefer window in current split. + if (win->getViewSplit() == m_currentSplit) { + selectedWin = win; + break; + } + } + + setCurrentViewWindow(selectedWin); + } + + if (p_paras->m_focus) { + auto win = getCurrentViewWindow(); + if (win) { + win->setFocus(Qt::OtherFocusReason); + } + } +} + +QVector ViewArea::findBufferInViewSplits(const Buffer *p_buffer) const +{ + QVector wins; + for (auto split : m_splits) { + auto winsInSplit = split->findBuffer(p_buffer); + if (!winsInSplit.isEmpty()) { + wins.append(winsInSplit); + } + } + + return wins; +} + +ViewSplit *ViewArea::createViewSplit(QWidget *p_parent) +{ + auto workspace = createWorkspace(); + m_workspaces.push_back(workspace); + + auto split = new ViewSplit(m_workspaces, workspace, p_parent); + connect(split, &ViewSplit::viewWindowCloseRequested, + this, [this](ViewWindow *p_win) { + closeViewWindow(p_win, false, true); + }); + connect(split, &ViewSplit::verticalSplitRequested, + this, [this](ViewSplit *p_split) { + splitViewSplit(p_split, SplitType::Vertical); + }); + connect(split, &ViewSplit::horizontalSplitRequested, + this, [this](ViewSplit *p_split) { + splitViewSplit(p_split, SplitType::Horizontal); + }); + connect(split, &ViewSplit::maximizeSplitRequested, + this, &ViewArea::maximizeViewSplit); + connect(split, &ViewSplit::distributeSplitsRequested, + this, &ViewArea::distributeViewSplits); + connect(split, &ViewSplit::removeSplitRequested, + this, [this](ViewSplit *p_split) { + removeViewSplit(p_split, false); + }); + connect(split, &ViewSplit::removeSplitAndWorkspaceRequested, + this, [this](ViewSplit *p_split) { + removeViewSplit(p_split, true); + }); + connect(split, &ViewSplit::newWorkspaceRequested, + this, &ViewArea::newWorkspaceInViewSplit); + connect(split, &ViewSplit::removeWorkspaceRequested, + this, [this](ViewSplit *p_split) { + removeWorkspaceInViewSplit(p_split, true); + }); + connect(split, &ViewSplit::focused, + this, [this](ViewSplit *p_split) { + setCurrentViewSplit(p_split); + checkCurrentViewWindowChange(); + }); + connect(split, &ViewSplit::currentViewWindowChanged, + this, [this](ViewWindow *p_win) { + checkCurrentViewWindowChange(); + if (shouldUseGlobalStatusWidget()) { + if (p_win) { + p_win->setStatusWidgetVisible(false); + } + m_currentStatusWidget = p_win ? p_win->statusWidget() : nullptr; + emit statusWidgetChanged(m_currentStatusWidget.get()); + } else { + Q_ASSERT(!m_currentStatusWidget); + if (p_win) { + p_win->setStatusWidgetVisible(true); + } + } + }); + return split; +} + +void ViewArea::showSceneWidget() +{ + Q_ASSERT(!m_sceneWidget); + Q_ASSERT(m_splits.isEmpty()); + auto text = DocsUtils::getDocText(QStringLiteral("get_started.txt")); + // TODO: a more informative widget, such as adding workspace list and LRU files. + m_sceneWidget = new QLabel(text, this); + m_mainLayout->addWidget(m_sceneWidget); +} + +void ViewArea::hideSceneWidget() +{ + Q_ASSERT(m_sceneWidget); + m_mainLayout->removeWidget(m_sceneWidget); + delete m_sceneWidget; + m_sceneWidget = nullptr; +} + +void ViewArea::addFirstViewSplit() +{ + Q_ASSERT(!m_currentSplit && m_splits.isEmpty()); + + auto split = createViewSplit(this); + + m_splits.push_back(split); + setCurrentViewSplit(split); + + hideSceneWidget(); + m_mainLayout->addWidget(m_currentSplit); + + emit viewSplitsCountChanged(); + checkCurrentViewWindowChange(); + + m_fileCheckTimer->start(); +} + +static ViewSplit *fetchFirstChildViewSplit(const QSplitter *p_splitter) +{ + if (p_splitter->count() == 0) { + return nullptr; + } + + auto child = p_splitter->widget(0); + auto split = dynamic_cast(child); + if (split) { + return split; + } + + auto childSplitter = dynamic_cast(child); + Q_ASSERT(childSplitter); + return fetchFirstChildViewSplit(childSplitter); +} + +void ViewArea::removeViewSplit(ViewSplit *p_split, bool p_removeWorkspace) +{ + if (p_removeWorkspace) { + // Remove workspace. + bool ret = removeWorkspaceInViewSplit(p_split, false); + if (!ret) { + return; + } + } else { + // Detach workspace. + p_split->setWorkspace(nullptr); + } + + // Remove split. + disconnect(p_split, 0, this, 0); + disconnect(this, 0, p_split, 0); + m_splits.removeAll(p_split); + + // Get new current split. + ViewSplit *newCurrentSplit = nullptr; + auto splitter = tryGetParentSplitter(p_split); + if (splitter) { + Q_ASSERT(splitter->count() >= 2); + p_split->hide(); + p_split->setParent(this); + + newCurrentSplit = fetchFirstChildViewSplit(splitter); + + if (splitter->count() == 1) { + // Remove the splitter if there is only one child in it after the removal. + unwrapSplitter(splitter); + } + } else { + Q_ASSERT(m_splits.isEmpty()); + m_mainLayout->removeWidget(p_split); + if (!m_splits.isEmpty()) { + newCurrentSplit = m_splits.first(); + } + } + + p_split->deleteLater(); + + // Show scene widget and update current split. + if (m_splits.isEmpty()) { + Q_ASSERT(newCurrentSplit == nullptr); + setCurrentViewSplit(newCurrentSplit); + showSceneWidget(); + + m_fileCheckTimer->stop(); + } else if (m_currentSplit == p_split) { + setCurrentViewSplit(newCurrentSplit); + } + + emit viewSplitsCountChanged(); + checkCurrentViewWindowChange(); +} + +ViewWindow *ViewArea::getCurrentViewWindow() const +{ + auto split = getCurrentViewSplit(); + if (split) { + return split->getCurrentViewWindow(); + } + + return nullptr; +} + +void ViewArea::setCurrentViewWindow(ViewWindow *p_win) +{ + auto split = p_win->getViewSplit(); + Q_ASSERT(split); + + setCurrentViewSplit(split); + + split->setCurrentViewWindow(p_win); + checkCurrentViewWindowChange(); +} + +ViewSplit *ViewArea::getCurrentViewSplit() const +{ + return m_currentSplit; +} + +void ViewArea::setCurrentViewSplit(ViewSplit *p_split) +{ + Q_ASSERT(!p_split || m_splits.contains(p_split)); + if (p_split == m_currentSplit) { + return; + } + + if (m_currentSplit) { + m_currentSplit->setActive(false); + } + + m_currentSplit = p_split; + if (m_currentSplit) { + m_currentSplit->setActive(true); + } +} + +bool ViewArea::closeViewWindow(ViewWindow *p_win, bool p_force, bool p_removeSplitIfEmpty) +{ + Q_ASSERT(p_win && p_win->getViewSplit()); + // Make it current ViewWindow. + setCurrentViewWindow(p_win); + + if (!p_win->aboutToClose(p_force)) { + return false; + } + + // Remove the status widget. + if (m_currentStatusWidget && p_win == getCurrentViewWindow()) { + Q_ASSERT(m_currentStatusWidget == p_win->statusWidget()); + emit statusWidgetChanged(nullptr); + } + + auto split = p_win->getViewSplit(); + split->takeViewWindow(p_win); + + delete p_win; + + if (p_removeSplitIfEmpty && split->getViewWindowCount() == 0) { + // Remove this split and workspace. + removeViewSplit(split, true); + } + + return true; +} + +QSharedPointer ViewArea::createWorkspace() +{ + // Get the id of the workspace. + ID id = 1; + QSet usedIds; + for (auto ws : m_workspaces) { + usedIds.insert(ws->c_id); + } + + while (true) { + if (usedIds.contains(id)) { + ++id; + } else { + break; + } + } + + return QSharedPointer::create(id); +} + +void ViewArea::splitViewSplit(ViewSplit *p_split, SplitType p_type) +{ + Q_ASSERT(p_split); + // Create the new split. + auto newSplit = createViewSplit(this); + + // Clone a ViewWindow for the same buffer to display in the new split. + { + auto win = p_split->getCurrentViewWindow(); + if (win) { + auto buffer = win->getBuffer(); + auto newWindow = buffer->createViewWindow(QSharedPointer::create(), newSplit); + newSplit->addViewWindow(newWindow); + } + } + + // Obey Vim's practice, which is the opposite of Qt. + auto orientation = p_type == SplitType::Vertical ? Qt::Horizontal : Qt::Vertical; + auto splitter = tryGetParentSplitter(p_split); + if (splitter) { + int idx = splitter->indexOf(p_split); + if (splitter->orientation() == orientation) { + // Same orientation. + splitter->insertWidget(idx + 1, newSplit); + } else { + // Split it further. + auto newSplitter = createSplitter(orientation, this); + splitter->replaceWidget(idx, newSplitter); + + newSplitter->addWidget(p_split); + newSplitter->addWidget(newSplit); + } + } else { + Q_ASSERT(p_split->parent() == this); + m_mainLayout->removeWidget(p_split); + + auto newSplitter = createSplitter(orientation, this); + newSplitter->addWidget(p_split); + newSplitter->addWidget(newSplit); + + m_mainLayout->addWidget(newSplitter); + } + + m_splits.push_back(newSplit); + setCurrentViewSplit(newSplit); + + // Let Qt decide the size of splitter first. + QCoreApplication::sendPostedEvents(); + + distributeViewSplitsOfSplitter(tryGetParentSplitter(newSplit)); + + emit viewSplitsCountChanged(); + checkCurrentViewWindowChange(); +} + +QSplitter *ViewArea::createSplitter(Qt::Orientation p_orientation, QWidget *p_parent) const +{ + auto splitter = new QSplitter(p_orientation, p_parent); + splitter->setChildrenCollapsible(false); + return splitter; +} + +QSplitter *ViewArea::tryGetParentSplitter(const QWidget *p_widget) const +{ + return dynamic_cast(p_widget->parent()); +} + +void ViewArea::distributeViewSplitsOfSplitter(QSplitter *p_splitter) +{ + if (!p_splitter || p_splitter->count() <= 1) { + return; + } + + // Distribute the direct children of splitter. + { + auto sizes = p_splitter->sizes(); + int totalWidth = 0; + for (auto sz : sizes) { + totalWidth += sz; + } + + int newWidth = totalWidth / sizes.size(); + if (newWidth <= 0) { + return; + } + + for (int i = 0; i < sizes.size(); ++i) { + sizes[i] = newWidth; + } + + p_splitter->setSizes(sizes); + } + + // Distribute child splitter. + for (int i = 0; i < p_splitter->count(); ++i) { + auto childSplitter = dynamic_cast(p_splitter->widget(i)); + if (childSplitter) { + distributeViewSplitsOfSplitter(childSplitter); + } + } + + return; +} + +void ViewArea::unwrapSplitter(QSplitter *p_splitter) +{ + Q_ASSERT(p_splitter->count() == 1); + auto paSplitter = tryGetParentSplitter(p_splitter); + if (paSplitter) { + Q_ASSERT(paSplitter->count() >= 2); + int idx = paSplitter->indexOf(p_splitter); + auto child = p_splitter->widget(0); + child->setParent(this); + paSplitter->replaceWidget(idx, child); + } else { + // This is the top child of ViewArea. + Q_ASSERT(p_splitter->parent() == this); + m_mainLayout->removeWidget(p_splitter); + // Maybe another splitter or ViewSplit. + auto child = p_splitter->widget(0); + child->setParent(this); + m_mainLayout->addWidget(child); + } + + delete p_splitter; +} + +void ViewArea::maximizeViewSplit(ViewSplit *p_split) +{ + QWidget *widget = p_split; + while (widget && widget != this) { + maximizeWidgetOfSplitter(widget); + widget = dynamic_cast(widget->parent()); + } +} + +void ViewArea::maximizeWidgetOfSplitter(QWidget *p_widget) +{ + auto splitter = tryGetParentSplitter(p_widget); + if (!splitter || splitter->count() <= 1) { + return; + } + + const int minSplitWidth = 20 * WidgetUtils::calculateScaleFactor(); + auto sizes = splitter->sizes(); + int totalWidth = 0; + for (auto sz : sizes) { + totalWidth += sz; + } + + int newWidth = totalWidth - minSplitWidth * (sizes.size() - 1); + if (newWidth <= 0) { + return; + } + + int idx = splitter->indexOf(p_widget); + for (int i = 0; i < sizes.size(); ++i) { + sizes[i] = (i == idx) ? newWidth : minSplitWidth; + } + + splitter->setSizes(sizes); +} + +void ViewArea::distributeViewSplits() +{ + // Get the top splitter if there is any. + auto splitter = dynamic_cast(m_mainLayout->itemAt(0)->widget()); + if (!splitter) { + return; + } + + distributeViewSplitsOfSplitter(splitter); +} + +void ViewArea::removeWorkspace(QSharedPointer p_workspace) +{ + if (!p_workspace) { + return; + } + Q_ASSERT(!p_workspace->m_visible && p_workspace->m_viewWindows.isEmpty()); + + p_workspace->clear(); + m_workspaces.removeAll(p_workspace); +} + +void ViewArea::newWorkspaceInViewSplit(ViewSplit *p_split) +{ + auto workspace = createWorkspace(); + m_workspaces.push_back(workspace); + + p_split->setWorkspace(workspace); +} + +bool ViewArea::removeWorkspaceInViewSplit(ViewSplit *p_split, bool p_insertNew) +{ + // Close all the ViewWindows. + setCurrentViewSplit(p_split); + bool stopped = !p_split->forEachViewWindow([this](ViewWindow *p_win) { + bool ret = closeViewWindow(p_win, false, false); + // User cancels closing this ViewWindow, thus cancals closing the ViewSplit. + return ret; + }); + if (stopped) { + return false; + } + + Q_ASSERT(p_split->getViewWindowCount() == 0); + auto workspace = p_split->getWorkspace(); + p_split->setWorkspace(nullptr); + removeWorkspace(workspace); + + if (p_insertNew) { + // Find an invisible workspace. + bool found = false; + for (auto &ws : m_workspaces) { + if (!ws->m_visible) { + p_split->setWorkspace(ws); + found = true; + break; + } + } + + // No invisible workspace. Create a new empty workspace. + if (!found) { + newWorkspaceInViewSplit(p_split); + } + } + + return true; +} + +bool ViewArea::shouldUseGlobalStatusWidget() const +{ + return m_splits.size() <= 1; +} + +void ViewArea::handleViewSplitsCountChange() +{ + if (shouldUseGlobalStatusWidget()) { + // Hide the status widget for all ViewWindows. + forEachViewWindow([](ViewWindow *p_win) { + p_win->setStatusWidgetVisible(false); + return true; + }); + + // Show global status widget for current ViewWindow. + auto win = getCurrentViewWindow(); + m_currentStatusWidget = win ? win->statusWidget() : nullptr; + emit statusWidgetChanged(m_currentStatusWidget.get()); + } else { + // Show standalone status widget for all ViewWindows. + emit statusWidgetChanged(nullptr); + m_currentStatusWidget = nullptr; + + forEachViewWindow([](ViewWindow *p_win) { + p_win->setStatusWidgetVisible(true); + return true; + }); + } +} + +void ViewArea::forEachViewWindow(const std::function &p_func) +{ + for (auto split : m_splits) { + if (!split->forEachViewWindow(p_func)) { + return; + } + } + + for (auto &ws : m_workspaces) { + if (!ws->m_visible) { + for (auto win : ws->m_viewWindows) { + if (!p_func(win)) { + return; + } + } + } + } +} + +bool ViewArea::close(bool p_force) +{ + return closeIf(p_force, [](ViewWindow *p_win) { + Q_UNUSED(p_win); + return true; + }); +} + +void ViewArea::setupGlobalShortcuts() +{ + const auto &coreConfig = ConfigMgr::getInst().getCoreConfig(); + + // CloseTab. + { + QKeySequence kseq(coreConfig.getShortcut(CoreConfig::CloseTab)); + if (!kseq.isEmpty()) { + auto shortcut = new QShortcut(kseq, this); + connect(shortcut, &QShortcut::activated, + this, [this]() { + auto win = getCurrentViewWindow(); + if (win) { + closeViewWindow(win, false, true); + } + }); + } + } + + // LocateNode. + { + QKeySequence kseq(coreConfig.getShortcut(CoreConfig::LocateNode)); + if (!kseq.isEmpty()) { + auto shortcut = new QShortcut(kseq, this); + connect(shortcut, &QShortcut::activated, + this, [this]() { + auto win = getCurrentViewWindow(); + if (win) { + auto node = win->getBuffer()->getNode(); + if (node) { + emit VNoteX::getInst().locateNodeRequested(node); + } + } + }); + } + } +} + +bool ViewArea::close(Node *p_node, bool p_force) +{ + return closeIf(p_force, [p_node](ViewWindow *p_win) { + auto buffer = p_win->getBuffer(); + return buffer->match(p_node) || buffer->isChildOf(p_node); + }); +} + +bool ViewArea::close(const Notebook *p_notebook, bool p_force) +{ + return close(p_notebook->getRootNode().data(), p_force); +} + +void ViewArea::checkCurrentViewWindowChange() +{ + auto win = getCurrentViewWindow(); + if (win == m_currentWindow) { + return; + } + + m_currentWindow = win; + emit currentViewWindowChanged(); +} + +bool ViewArea::closeIf(bool p_force, const std::function &p_func) +{ + // Go through all hidden workspace. Use current split to show the workspace. + if (m_workspaces.size() > m_splits.size()) { + if (!m_currentSplit) { + // Create at least one split. + addFirstViewSplit(); + } + + // Need to restore it. + auto currentWorkspace = m_currentSplit->getWorkspace(); + + QVector> hiddenWorkspaces; + for (auto &ws : m_workspaces) { + if (!ws->m_visible) { + Q_ASSERT(ws != currentWorkspace); + hiddenWorkspaces.push_back(ws); + } + } + + Q_ASSERT(!hiddenWorkspaces.isEmpty()); + for (auto &ws : hiddenWorkspaces) { + m_currentSplit->setWorkspace(ws); + + // Go through this split. + bool stopped = !m_currentSplit->forEachViewWindow([this, p_force, p_func](ViewWindow *p_win) { + if (p_func(p_win)) { + // Do not remove the split even if it is empty. + bool ret = closeViewWindow(p_win, p_force, false); + return ret; + } + return true; + }); + + if (stopped) { + // User cancels the close of one ViewWindow. No need to restore the workspace. + return false; + } + + // Remove this workspace. + m_currentSplit->setWorkspace(nullptr); + removeWorkspace(ws); + } + + // Restore. + m_currentSplit->setWorkspace(currentWorkspace); + } + + Q_ASSERT(m_workspaces.size() == m_splits.size()); + + // Go through all splits. + // Collect the ViewWindows first. Collect empty splits. + QVector wins; + QVector emptySplits; + for (auto split : m_splits) { + if (split->getViewWindowCount() == 0) { + emptySplits.push_back(split); + continue; + } + split->forEachViewWindow([p_func, &wins](ViewWindow *p_win) { + if (p_func(p_win)) { + wins.push_back(p_win); + } + return true; + }); + } + + if (!emptySplits.isEmpty()) { + // Remove empty splits. + for (auto split : emptySplits) { + removeViewSplit(split, true); + } + } + + if (wins.isEmpty()) { + return true; + } + + // Close the ViewWindow. + for (auto win : wins) { + bool ret = closeViewWindow(win, p_force, true); + if (!ret) { + return false; + } + } + + return true; +} + +void ViewArea::focus() +{ + auto win = getCurrentViewWindow(); + if (win) { + win->setFocus(); + } +} + +QVector ViewArea::getVisibleNavigationItems() +{ + QVector items; + m_navigationItems.clear(); + + int idx = 0; + for (auto split : m_splits) { + if (split->getViewWindowCount() == 0) { + continue; + } + if (idx >= NavigationMode::c_maxNumOfNavigationItems) { + break; + } + auto info = split->getNavigationModeInfo(); + for (int i = 0; i < info.size() && idx < NavigationMode::c_maxNumOfNavigationItems; ++i, ++idx) { + items.push_back(info[i].m_viewWindow); + m_navigationItems.push_back(info[i]); + } + } + return items; +} + +void ViewArea::placeNavigationLabel(int p_idx, void *p_item, QLabel *p_label) +{ + Q_UNUSED(p_item); + Q_ASSERT(p_idx > -1); + p_label->setParent(m_navigationItems[p_idx].m_viewWindow->getViewSplit()); + p_label->move(m_navigationItems[p_idx].m_topLeft); +} + +void ViewArea::handleTargetHit(void *p_item) +{ + if (p_item) { + setCurrentViewWindow(static_cast(p_item)); + } +} + +void ViewArea::clearNavigation() +{ + NavigationMode::clearNavigation(); + + m_navigationItems.clear(); +} + +void ViewArea::dragEnterEvent(QDragEnterEvent *p_event) +{ + if (UrlDragDropUtils::handleDragEnterEvent(p_event)) { + return; + } + + QWidget::dragEnterEvent(p_event); +} + +void ViewArea::dropEvent(QDropEvent *p_event) +{ + if (UrlDragDropUtils::handleDropEvent(p_event, [](const QStringList &p_files) { + for (const auto &file : p_files) { + emit VNoteX::getInst().openFileRequested(file, QSharedPointer::create()); + } + })) { + return; + } + + QWidget::dropEvent(p_event); +} diff --git a/src/widgets/viewarea.h b/src/widgets/viewarea.h new file mode 100644 index 00000000..b4864c33 --- /dev/null +++ b/src/widgets/viewarea.h @@ -0,0 +1,221 @@ +#ifndef VIEWAREA_H +#define VIEWAREA_H + +#include +#include + +#include + +#include +#include "global.h" +#include "navigationmode.h" +#include "viewsplit.h" + +class QLayout; +class QSplitter; + +namespace vnotex +{ + class Buffer; + class ViewWindow; + class Event; + class Notebook; + struct FileOpenParameters; + + // Hold a list of ViewWindow. A ViewSplit could display any ViewWorkspace. + // A ViewWorkspace could only be displayed by one ViewSplit at a time. + // If a ViewWorkspace is visible, it is managed by its ViewSplit and + // its state may not reflect the real fact. + struct ViewWorkspace + { + explicit ViewWorkspace(ID p_id) + : c_id(p_id) + { + } + + ~ViewWorkspace() + { + Q_ASSERT(m_viewWindows.isEmpty()); + } + + void clear() + { + m_visible = false; + m_viewWindows.clear(); + m_currentViewWindowIndex = 0; + } + + const ID c_id = 0; + + // Whether it is displayed by a ViewSplit now. + bool m_visible = false; + + QVector m_viewWindows; + + int m_currentViewWindowIndex = 0; + }; + + // ViewArea -- ViewSplit -- ViewWindow. + // ViewSplit may be put within a splitter. + // There may be multiple ViewWindow for the same buffer. + class ViewArea : public QWidget, public NavigationMode + { + Q_OBJECT + public: + explicit ViewArea(QWidget *p_parent = nullptr); + + ~ViewArea(); + + QSize sizeHint() const Q_DECL_OVERRIDE; + + public slots: + void openBuffer(Buffer *p_buffer, const QSharedPointer &p_paras); + + bool close(const Notebook *p_notebook, bool p_force); + + ViewWindow *getCurrentViewWindow() const; + + void focus(); + + // NavigationMode. + protected: + QVector getVisibleNavigationItems() Q_DECL_OVERRIDE; + + void placeNavigationLabel(int p_idx, void *p_item, QLabel *p_label) Q_DECL_OVERRIDE; + + void handleTargetHit(void *p_item) Q_DECL_OVERRIDE; + + void clearNavigation() Q_DECL_OVERRIDE; + + protected: + // To accept specific drop. + void dragEnterEvent(QDragEnterEvent *p_event) Q_DECL_OVERRIDE; + + // Drop the data. + void dropEvent(QDropEvent *p_event) Q_DECL_OVERRIDE; + + signals: + // Status widget of ViewArea is changed. + // MainWindow should set the corresponding status widget accordingly. + void statusWidgetChanged(QWidget *p_widget); + + // Count of ViewSplit is chagned. + // Used internally. + void viewSplitsCountChanged(); + + void currentViewWindowChanged(); + + // State of current view window has update. + void currentViewWindowUpdated(); + + private slots: + // Return true if @p_win is closed. + // @p_removeSplitIfEmpty: whether remove the workspace and split if @p_win is that only ViewWindow left. + bool closeViewWindow(ViewWindow *p_win, bool p_force, bool p_removeSplitIfEmpty); + + void maximizeViewSplit(ViewSplit *p_split); + + void distributeViewSplits(); + + void newWorkspaceInViewSplit(ViewSplit *p_split); + + // @p_insertNew: whether to find an available workspace for @p_split after removal. + // Return true if removed. + bool removeWorkspaceInViewSplit(ViewSplit *p_split, bool p_insertNew); + + void handleViewSplitsCountChange(); + + bool close(bool p_force); + + private: + enum class SplitType + { + Vertical, + Horizontal + }; + + void setupUI(); + + // Find given @p_buffer among all view splits. + // Does not search invisible work spaces. + QVector findBufferInViewSplits(const Buffer *p_buffer) const; + + ViewSplit *createViewSplit(QWidget *p_parent); + + // A Scene widget will be used when there is no split. + // Usually it is used to show some help message. + void showSceneWidget(); + + void hideSceneWidget(); + + void addFirstViewSplit(); + + // Close all the ViewWindows in @p_split if @p_removeWorkspace is true. + // Otherwise, detach the Workpace from it and remove the split. + void removeViewSplit(ViewSplit *p_split, bool p_removeWorkspace); + + void setCurrentViewWindow(ViewWindow *p_win); + + ViewSplit *getCurrentViewSplit() const; + void setCurrentViewSplit(ViewSplit *p_split); + + QSharedPointer createWorkspace(); + + void splitViewSplit(ViewSplit *p_split, SplitType p_type); + + QSplitter *tryGetParentSplitter(const QWidget *p_widget) const; + + // Distribute all splits within @p_splitter recursively. + void distributeViewSplitsOfSplitter(QSplitter *p_splitter); + + void unwrapSplitter(QSplitter *p_splitter); + + void maximizeWidgetOfSplitter(QWidget *p_widget); + + QSplitter *createSplitter(Qt::Orientation p_orientation, QWidget *p_parent) const; + + // Do not use the reference since it will remove the value in @m_workspaces. + // Should have done the clean up of ViewWindow before calling this. + void removeWorkspace(QSharedPointer p_workspace); + + bool shouldUseGlobalStatusWidget() const; + + // Iterate through all ViewWindows including both ViewSplits and Workspaces. + // Should NOT use this function to close ViewWindow. + void forEachViewWindow(const std::function &p_func); + + void setupGlobalShortcuts(); + + // Close all ViewWindows related to @p_node. + bool close(Node *p_node, bool p_force); + + // Go through all ViewWindows and judge whether to close it by @p_func. + bool closeIf(bool p_force, const std::function &p_func); + + void checkCurrentViewWindowChange(); + + QLayout *m_mainLayout = nullptr; + + QWidget *m_sceneWidget = nullptr; + + QVector m_splits; + + QVector> m_workspaces; + + ViewSplit *m_currentSplit = nullptr; + + ViewWindow *m_currentWindow = nullptr; + + // Current global status widget. + // When there is no split window, we will make the status widget global. + // Otherwise, we will display the status widget at the bottom of each view window. + QSharedPointer m_currentStatusWidget; + + QVector m_navigationItems; + + // Timer to check file change outside periodically. + QTimer *m_fileCheckTimer = nullptr; + }; +} // ns vnotex + +#endif // VIEWAREA_H diff --git a/src/widgets/viewsplit.cpp b/src/widgets/viewsplit.cpp new file mode 100644 index 00000000..8032473b --- /dev/null +++ b/src/widgets/viewsplit.cpp @@ -0,0 +1,642 @@ +#include "viewsplit.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "viewwindow.h" +#include "viewarea.h" +#include +#include +#include +#include +#include "widgetsfactory.h" +#include +#include +#include +#include +#include +#include "propertydefs.h" +#include "fileopenparameters.h" + +using namespace vnotex; + +QIcon ViewSplit::s_windowListIcon; + +QIcon ViewSplit::s_windowListActiveIcon; + +QIcon ViewSplit::s_menuIcon; + +QIcon ViewSplit::s_menuActiveIcon; + +const QString ViewSplit::c_activeActionButtonForegroundName = "widgets#viewsplit#action_button#active_fg"; + +const QString ViewSplit::c_actionButtonForegroundName = "widgets#viewsplit#action_button#fg"; + +ViewSplit::ViewSplit(const QVector> &p_allWorkspaces, + const QSharedPointer &p_workspace, + QWidget *p_parent) + : QTabWidget(p_parent), + m_allWorkspaces(p_allWorkspaces) +{ + setAcceptDrops(true); + + setupUI(); + + setWorkspace(p_workspace); +} + +ViewSplit::~ViewSplit() +{ + Q_ASSERT(!m_workspace); +} + +void ViewSplit::setupUI() +{ + // Property of QTabWidget. + setUsesScrollButtons(true); + setElideMode(Qt::ElideRight); + setTabsClosable(true); + setMovable(true); + setDocumentMode(true); + + setupCornerWidget(); + setupTabBar(); + + connect(this, &QTabWidget::tabCloseRequested, + this, [this](int p_idx) { + emit focused(this); + closeTab(p_idx); + }); + connect(this, &QTabWidget::tabBarDoubleClicked, + this, &ViewSplit::closeTab); + connect(this, &QTabWidget::tabBarClicked, + this, [this](int p_idx) { + Q_UNUSED(p_idx); + focusCurrentViewWindow(); + emit focused(this); + }); + connect(this, &QTabWidget::currentChanged, + this, [this](int p_idx) { + Q_UNUSED(p_idx); + focusCurrentViewWindow(); + emit currentViewWindowChanged(getCurrentViewWindow()); + }); +} + +void ViewSplit::focusCurrentViewWindow() +{ + auto win = getCurrentViewWindow(); + if (win) { + win->setFocus(); + } +} + +void ViewSplit::setupCornerWidget() +{ + initIcons(); + + // Container. + auto widget = new QWidget(this); + auto layout = new QHBoxLayout(widget); + layout->setContentsMargins(0, 0, 0, 0); + + // Widnow list button. + { + m_windowListButton = new QToolButton(this); + m_windowListButton->setPopupMode(QToolButton::InstantPopup); + m_windowListButton->setProperty(PropertyDefs::s_actionToolButton, true); + + auto act = new QAction(s_windowListIcon, tr("Windows List"), m_windowListButton); + m_windowListButton->setDefaultAction(act); + + auto menu = WidgetsFactory::createMenu(m_windowListButton); + connect(menu, &QMenu::aboutToShow, + this, [this, menu]() { + updateWindowList(menu); + }); + connect(menu, &QMenu::triggered, + this, [this](QAction *p_act) { + int idx = p_act->data().toInt(); + setCurrentViewWindow(getViewWindow(idx)); + }); + m_windowListButton->setMenu(menu); + + layout->addWidget(m_windowListButton); + } + + // Menu button. + { + m_menuButton = new QToolButton(this); + m_menuButton->setPopupMode(QToolButton::InstantPopup); + m_menuButton->setProperty(PropertyDefs::s_actionToolButton, true); + + auto act = new QAction(s_menuIcon, tr("Workspaces and Splits"), m_menuButton); + m_menuButton->setDefaultAction(act); + + auto menu = WidgetsFactory::createMenu(m_menuButton); + connect(menu, &QMenu::aboutToShow, + this, [this, menu]() { + updateMenu(menu); + }); + m_menuButton->setMenu(menu); + + layout->addWidget(m_menuButton); + } + + widget->installEventFilter(this); + + setCornerWidget(widget, Qt::TopRightCorner); +} + +bool ViewSplit::eventFilter(QObject *p_object, QEvent *p_event) +{ + if (p_object == cornerWidget()) { + if (p_event->type() == QEvent::Resize) { + auto resizeEve = static_cast(p_event); + int height = resizeEve->size().height(); + if (height > 0) { + // Make corner widget visible even when there is no tab. + cornerWidget()->setMinimumHeight(height); + } + } + } else if (p_object == tabBar()) { + if (p_event->type() == QEvent::MouseButtonRelease) { + auto mouseEve = static_cast(p_event); + if (mouseEve->button() == Qt::MiddleButton) { + int idx = tabBar()->tabAt(mouseEve->pos()); + closeTab(idx); + } + } + } + + return false; +} + +void ViewSplit::setupTabBar() +{ + auto bar = tabBar(); + bar->setContextMenuPolicy(Qt::CustomContextMenu); + + // Middle click to close tab. + bar->installEventFilter(this); + + connect(bar, &QTabBar::customContextMenuRequested, + this, [this](const QPoint &p_pos) { + int idx = tabBar()->tabAt(p_pos); + if (idx == -1) { + return; + } + + QScopedPointer menu(WidgetsFactory::createMenu()); + createContextMenuOnTabBar(menu.data(), idx); + + if (!menu->isEmpty()) { + menu->exec(tabBar()->mapToGlobal(p_pos)); + } + }); +} + +void ViewSplit::initIcons() +{ + if (!s_windowListIcon.isNull()) { + return; + } + + const auto &themeMgr = VNoteX::getInst().getThemeMgr(); + const QString windowListIconName("split_window_list.svg"); + const QString menuIconName("split_menu.svg"); + const QString fg = themeMgr.paletteColor(c_actionButtonForegroundName); + const QString activeFg = themeMgr.paletteColor(c_activeActionButtonForegroundName); + + s_windowListIcon = IconUtils::fetchIcon(themeMgr.getIconFile(windowListIconName), fg); + s_windowListActiveIcon = IconUtils::fetchIcon(themeMgr.getIconFile(windowListIconName), activeFg); + + s_menuIcon = IconUtils::fetchIcon(themeMgr.getIconFile(menuIconName), fg); + s_menuActiveIcon = IconUtils::fetchIcon(themeMgr.getIconFile(menuIconName), activeFg); +} + +void ViewSplit::setWorkspace(const QSharedPointer &p_workspace) +{ + if (m_workspace == p_workspace) { + return; + } + + updateAndTakeCurrentWorkspace(); + + m_workspace = p_workspace; + if (m_workspace) { + Q_ASSERT(!m_workspace->m_visible); + + for (auto win : m_workspace->m_viewWindows) { + addViewWindow(win); + } + + int idx = m_workspace->m_currentViewWindowIndex; + if (idx >= 0 && idx < m_workspace->m_viewWindows.size()) { + setCurrentViewWindow(m_workspace->m_viewWindows[idx]); + } + + m_workspace->m_visible = true; + } +} + +void ViewSplit::updateAndTakeCurrentWorkspace() +{ + if (m_workspace) { + // Store current workspace. + m_workspace->m_currentViewWindowIndex = currentIndex(); + + // Take all the view windows out. + int cnt = getViewWindowCount(); + m_workspace->m_viewWindows.resize(cnt); + for (int i = cnt - 1; i >= 0; --i) { + auto window = getViewWindow(i); + takeViewWindow(window); + + m_workspace->m_viewWindows[i] = window; + } + + m_workspace->m_visible = false; + + m_workspace = nullptr; + } else { + Q_ASSERT(getViewWindowCount() == 0); + } +} + +QVector ViewSplit::findBuffer(const Buffer *p_buffer) const +{ + QVector wins; + int cnt = getViewWindowCount(); + for (int i = 0; i < cnt; ++i) { + auto win = getViewWindow(i); + if (win->getBuffer() == p_buffer) { + wins.push_back(win); + } + } + + return wins; +} + +ViewWindow *ViewSplit::getViewWindow(int p_idx) const +{ + return dynamic_cast(widget(p_idx)); +} + +int ViewSplit::getViewWindowCount() const +{ + return count(); +} + +void ViewSplit::addViewWindow(ViewWindow *p_win) +{ + int idx = addTab(p_win, p_win->getIcon(), p_win->getName()); + setTabToolTip(idx, p_win->getTitle()); + + p_win->setViewSplit(this); + p_win->setVisible(true); + + connect(p_win, &ViewWindow::focused, + this, [this]() { + emit focused(this); + }); + + connect(p_win, &ViewWindow::statusChanged, + this, [this]() { + auto win = dynamic_cast(sender()); + int idx = indexOf(win); + Q_ASSERT(idx != -1); + setTabIcon(idx, win->getIcon()); + }); + + connect(p_win, &ViewWindow::nameChanged, + this, [this]() { + auto win = dynamic_cast(sender()); + int idx = indexOf(win); + Q_ASSERT(idx != -1); + setTabText(idx, win->getName()); + }); +} + +ViewWindow *ViewSplit::getCurrentViewWindow() const +{ + return dynamic_cast(currentWidget()); +} + +void ViewSplit::setCurrentViewWindow(ViewWindow *p_win) +{ + if (!p_win) { + return; + } + + Q_ASSERT(p_win->getViewSplit() == this); + setCurrentWidget(p_win); +} + +void ViewSplit::takeViewWindow(ViewWindow *p_win) +{ + Q_ASSERT(p_win->getViewSplit() == this); + p_win->setViewSplit(nullptr); + + int idx = indexOf(p_win); + Q_ASSERT(idx != -1); + removeTab(idx); + + disconnect(p_win, 0, this, 0); + + p_win->setVisible(false); + p_win->setParent(nullptr); +} + +QSharedPointer ViewSplit::getWorkspace() const +{ + return m_workspace; +} + +void ViewSplit::setActive(bool p_active) +{ + if (p_active) { + m_windowListButton->defaultAction()->setIcon(s_windowListActiveIcon); + m_menuButton->defaultAction()->setIcon(s_menuActiveIcon); + } else { + m_windowListButton->defaultAction()->setIcon(s_windowListIcon); + m_menuButton->defaultAction()->setIcon(s_menuIcon); + } +} + +void ViewSplit::updateWindowList(QMenu *p_menu) +{ + p_menu->clear(); + + if (!m_windowListActionGroup) { + m_windowListActionGroup = new QActionGroup(p_menu); + } else { + WidgetUtils::clearActionGroup(m_windowListActionGroup); + } + + auto currentViewWindow = getCurrentViewWindow(); + int cnt = getViewWindowCount(); + if (cnt == 0) { + // Add a dummy entry. + auto act = p_menu->addAction(tr("No window to show here")); + act->setEnabled(false); + return; + } + + for (int i = 0; i < cnt; ++i) { + auto window = getViewWindow(i); + + auto act = new QAction(window->getIcon(), + window->getName(), + m_windowListActionGroup); + act->setToolTip(window->getTitle()); + act->setData(i); + act->setCheckable(true); + p_menu->addAction(act); + + if (currentViewWindow == window) { + act->setChecked(true); + } + } +} + +void ViewSplit::updateMenu(QMenu *p_menu) +{ + p_menu->clear(); + + const auto &themeMgr = VNoteX::getInst().getThemeMgr(); + + // Workspaces. + { + p_menu->addSection(tr("Workspaces")); + if (!m_workspaceActionGroup) { + m_workspaceActionGroup = new QActionGroup(p_menu); + connect(m_workspaceActionGroup, &QActionGroup::triggered, + this, [this](QAction *p_act) { + int idx = p_act->data().toInt(); + const auto &newWorkspace = m_allWorkspaces[idx]; + if (newWorkspace != m_workspace) { + setWorkspace(newWorkspace); + } + }); + } else { + WidgetUtils::clearActionGroup(m_workspaceActionGroup); + } + + for (int i = 0; i < m_allWorkspaces.size(); ++i) { + auto act = new QAction(tr("Workspace %1").arg(m_allWorkspaces[i]->c_id), + m_workspaceActionGroup); + act->setData(i); + act->setCheckable(true); + act->setEnabled(!m_allWorkspaces[i]->m_visible); + p_menu->addAction(act); + + if (m_allWorkspaces[i] == m_workspace) { + act->setEnabled(true); + act->setChecked(true); + } + } + + p_menu->addSeparator(); + p_menu->addAction(tr("New Workspace"), + [this]() { + emit newWorkspaceRequested(this); + }); + + p_menu->addAction(tr("Remove Workspace"), + [this]() { + emit removeWorkspaceRequested(this); + }); + } + + // Splits. + { + p_menu->addSection(tr("Split")); + auto icon = themeMgr.getIconFile(QStringLiteral("vertical_split.svg")); + auto act = p_menu->addAction(IconUtils::fetchIconWithDisabledState(icon), + tr("Vertical Split"), + [this]() { + emit verticalSplitRequested(this); + }); + + icon = themeMgr.getIconFile(QStringLiteral("horizontal_split.svg")); + act = p_menu->addAction(IconUtils::fetchIconWithDisabledState(icon), + tr("Horizontal Split"), + [this]() { + emit horizontalSplitRequested(this); + }); + + act = p_menu->addAction(tr("Maximize Split"), + [this]() { + emit maximizeSplitRequested(this); + }); + + act = p_menu->addAction(tr("Distribute Splits"), + [this]() { + emit distributeSplitsRequested(); + }); + + act = p_menu->addAction(tr("Remove Split"), + [this]() { + emit removeSplitRequested(this); + }); + + act = p_menu->addAction(tr("Remove Split And Workspace"), + [this]() { + emit removeSplitAndWorkspaceRequested(this); + }); + } +} + +void ViewSplit::createContextMenuOnTabBar(QMenu *p_menu, int p_tabIdx) const +{ + Q_ASSERT(p_tabIdx > -1); + + // Close Tab. + auto closeTabAct = p_menu->addAction(tr("Close Tab"), + [this, p_tabIdx]() { + const_cast(this)->closeTab(p_tabIdx); + }); + WidgetUtils::addActionShortcutText(closeTabAct, + ConfigMgr::getInst().getCoreConfig().getShortcut(CoreConfig::Shortcut::CloseTab)); + + // Close Other Tabs. + p_menu->addAction(tr("Close Other Tabs"), + [this, p_tabIdx]() { + QVector windowsNeedToClose; + int cnt = getViewWindowCount(); + for (int i = 0; i < cnt; ++i) { + if (i != p_tabIdx) { + windowsNeedToClose.push_back(getViewWindow(i)); + } + } + + for (auto win : windowsNeedToClose) { + emit const_cast(this)->viewWindowCloseRequested(win); + } + }); + + // Close Tabs To The Right. + p_menu->addAction(tr("Close Tabs To The Right"), + [this, p_tabIdx]() { + int cnt = getViewWindowCount(); + for (int i = cnt - 1; i > p_tabIdx; --i) { + const_cast(this)->closeTab(i); + } + }); + + p_menu->addSeparator(); + + // Copy Path. + p_menu->addAction(tr("Copy Path"), + [this, p_tabIdx]() { + auto win = getViewWindow(p_tabIdx); + if (win) { + const auto filePath = win->getBuffer()->getPath(); + ClipboardUtils::setTextToClipboard(filePath); + VNoteX::getInst().showStatusMessageShort(tr("Copied path: %1").arg(filePath)); + } + }); + + // Open Location. + p_menu->addAction(tr("Open Location"), + [this, p_tabIdx]() { + auto win = getViewWindow(p_tabIdx); + if (win) { + const auto location = PathUtils::parentDirPath(win->getBuffer()->getPath()); + WidgetUtils::openUrlByDesktop(QUrl::fromLocalFile(location)); + } + }); + + // Locate Node. + auto win = getViewWindow(p_tabIdx); + if (win && win->getBuffer()->getNode()) { + auto locateNodeAct = p_menu->addAction(tr("Locate Node"), + [this, p_tabIdx]() { + auto win = getViewWindow(p_tabIdx); + auto node = win->getBuffer()->getNode(); + if (node) { + emit VNoteX::getInst().locateNodeRequested(node); + } + }); + WidgetUtils::addActionShortcutText(locateNodeAct, + ConfigMgr::getInst().getCoreConfig().getShortcut(CoreConfig::Shortcut::LocateNode)); + } +} + +void ViewSplit::closeTab(int p_idx) +{ + auto win = getViewWindow(p_idx); + if (win) { + emit viewWindowCloseRequested(win); + } +} + +void ViewSplit::mousePressEvent(QMouseEvent *p_event) +{ + QTabWidget::mousePressEvent(p_event); + + // For an empty QTabWidget, we need to focus this split when user press + // the space of widget. + emit focused(this); +} + +bool ViewSplit::forEachViewWindow(const std::function &p_func) +{ + int cnt = getViewWindowCount(); + for (int i = 0; i < cnt; ++i) { + auto win = getViewWindow(i); + if (!p_func(win)) { + return false; + } + } + return true; +} + +QVector ViewSplit::getNavigationModeInfo() const +{ + QVector infos; + auto bar = tabBar(); + for (int i = 0; i < bar->count(); ++i) { + QPoint tl = bar->tabRect(i).topLeft(); + if (tl.x() < 0 || tl.x() >= bar->width()) { + continue; + } + + ViewWindowNavigationModeInfo info; + info.m_topLeft = bar->mapToParent(tl); + info.m_viewWindow = getViewWindow(i); + infos.append(info); + } + + return infos; +} + +void ViewSplit::dragEnterEvent(QDragEnterEvent *p_event) +{ + if (UrlDragDropUtils::handleDragEnterEvent(p_event)) { + return; + } + + QTabWidget::dragEnterEvent(p_event); +} + +void ViewSplit::dropEvent(QDropEvent *p_event) +{ + if (UrlDragDropUtils::handleDropEvent(p_event, [](const QStringList &p_files) { + for (const auto &file : p_files) { + emit VNoteX::getInst().openFileRequested(file, QSharedPointer::create()); + } + })) { + return; + } + + QTabWidget::dropEvent(p_event); +} diff --git a/src/widgets/viewsplit.h b/src/widgets/viewsplit.h new file mode 100644 index 00000000..71379781 --- /dev/null +++ b/src/widgets/viewsplit.h @@ -0,0 +1,145 @@ +#ifndef VIEWSPLIT_H +#define VIEWSPLIT_H + +#include + +#include + +#include + +class QToolButton; +class QMenu; +class QActionGroup; + +namespace vnotex +{ + class ViewWindow; + struct ViewWorkspace; + + class ViewSplit : public QTabWidget + { + Q_OBJECT + public: + struct ViewWindowNavigationModeInfo + { + // Top left position of the ViewWindow relative to the view split. + QPoint m_topLeft; + + ViewWindow *m_viewWindow = nullptr; + }; + + explicit ViewSplit(const QVector> &p_allWorkspaces, + const QSharedPointer &p_workspace, + QWidget *p_parent = nullptr); + + ~ViewSplit(); + + QVector findBuffer(const Buffer *p_buffer) const; + + int getViewWindowCount() const; + + void addViewWindow(ViewWindow *p_win); + + ViewWindow *getCurrentViewWindow() const; + void setCurrentViewWindow(ViewWindow *p_win); + + // @p_win is not deleted. + void takeViewWindow(ViewWindow *p_win); + + void setWorkspace(const QSharedPointer &p_workspace); + + QSharedPointer getWorkspace() const; + + void setActive(bool p_active); + + // @p_func: return true if going well, return false to stop the iteration. + // Return false if there is a break. + bool forEachViewWindow(const std::function &p_func); + + QVector getNavigationModeInfo() const; + + signals: + void viewWindowCloseRequested(ViewWindow *p_win); + + void verticalSplitRequested(ViewSplit *p_split); + + void horizontalSplitRequested(ViewSplit *p_split); + + void maximizeSplitRequested(ViewSplit *p_split); + + void distributeSplitsRequested(); + + void removeSplitRequested(ViewSplit *p_split); + + void removeSplitAndWorkspaceRequested(ViewSplit *p_split); + + void newWorkspaceRequested(ViewSplit *p_split); + + void removeWorkspaceRequested(ViewSplit *p_split); + + void focused(ViewSplit *p_split); + + void currentViewWindowChanged(ViewWindow *p_win); + + protected: + bool eventFilter(QObject *p_object, QEvent *p_event) Q_DECL_OVERRIDE; + + void mousePressEvent(QMouseEvent *p_event) Q_DECL_OVERRIDE; + + // To accept specific drop. + void dragEnterEvent(QDragEnterEvent *p_event) Q_DECL_OVERRIDE; + + // Drop the data. + void dropEvent(QDropEvent *p_event) Q_DECL_OVERRIDE; + + private slots: + void closeTab(int p_idx); + + private: + void setupUI(); + + void setupCornerWidget(); + + void setupTabBar(); + + ViewWindow *getViewWindow(int p_idx) const; + + void updateAndTakeCurrentWorkspace(); + + void initIcons(); + + void updateWindowList(QMenu *p_menu); + + void updateMenu(QMenu *p_menu); + + void createContextMenuOnTabBar(QMenu *p_menu, int p_tabIdx) const; + + void focusCurrentViewWindow(); + + const QVector> &m_allWorkspaces; + + QSharedPointer m_workspace; + + QToolButton *m_windowListButton = nullptr; + + QToolButton *m_menuButton = nullptr; + + QActionGroup *m_windowListActionGroup = nullptr; + + QActionGroup *m_workspaceActionGroup = nullptr; + + static QIcon s_windowListIcon; + + static QIcon s_windowListActiveIcon; + + static QIcon s_menuIcon; + + static QIcon s_menuActiveIcon; + + static const QString c_activeActionButtonForegroundName; + + static const QString c_actionButtonForegroundName; + }; +} // ns vnotex + +#endif // VIEWSPLIT_H diff --git a/src/widgets/viewwindow.cpp b/src/widgets/viewwindow.cpp new file mode 100644 index 00000000..50f716c8 --- /dev/null +++ b/src/widgets/viewwindow.cpp @@ -0,0 +1,883 @@ +#include "viewwindow.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include "toolbarhelper.h" +#include "vnotex.h" +#include +#include +#include +#include +#include +#include "messageboxhelper.h" +#include "editreaddiscardaction.h" +#include "viewsplit.h" +#include "attachmentpopup.h" +#include "outlinepopup.h" +#include "dragdropareaindicator.h" +#include "attachmentdragdropareaindicator.h" +#include "exception.h" +#include "findandreplacewidget.h" + +using namespace vnotex; + +QIcon ViewWindow::s_savedIcon; + +QIcon ViewWindow::s_modifiedIcon; + +ViewWindow::ViewWindow(QWidget *p_parent) + : QFrame(p_parent) +{ + setupUI(); + + initIcons(); + + setupShortcuts(); + + // Need to use this global-wise way, especially for the WebView. + connect(qApp, &QApplication::focusChanged, + this, [this](QWidget *p_old, QWidget *p_now) { + if (p_now == this || isAncestorOf(p_now)) { + bool hadFocus = p_old && (p_old == this || isAncestorOf(p_old)); + if (!hadFocus) { + emit focused(this); + } + } + }); + + m_syncBufferContentTimer = new QTimer(this); + m_syncBufferContentTimer->setSingleShot(true); + m_syncBufferContentTimer->setInterval(500); + connect(m_syncBufferContentTimer, &QTimer::timeout, + this, [this]() { + Q_ASSERT(getBuffer()); + if (getBuffer()->getRevision() != m_bufferRevision) { + syncEditorFromBufferContent(); + } + }); + + connect(this, &ViewWindow::bufferChanged, + this, [this]() { + auto buffer = getBuffer(); + if (buffer) { + connect(buffer, &Buffer::modified, + this, &ViewWindow::statusChanged); + + // To make it convenient to disconnect, do not connect directly to + // the timer. + connect(buffer, &Buffer::contentsChanged, + this, [this]() { + m_syncBufferContentTimer->start(); + }); + + connect(buffer, &Buffer::nameChanged, + this, &ViewWindow::nameChanged); + + connect(buffer, &Buffer::attachmentChanged, + this, &ViewWindow::attachmentChanged); + } + + handleBufferChangedInternal(); + }); +} + +ViewWindow::~ViewWindow() +{ + Q_ASSERT(!m_buffer); + if (m_statusWidget) { + m_statusWidget->setParent(nullptr); + } +} + +void ViewWindow::setupUI() +{ + m_mainLayout = new QVBoxLayout(this); + m_mainLayout->setContentsMargins(0, 0, 0, 0); + + m_topLayout = new QVBoxLayout(); + m_topLayout->setContentsMargins(0, 0, 0, 0); + m_mainLayout->addLayout(m_topLayout, 0); + + m_bottomLayout = new QVBoxLayout(); + m_bottomLayout->setContentsMargins(0, 0, 0, 0); + m_mainLayout->addLayout(m_bottomLayout, 0); +} + +void ViewWindow::initIcons() +{ + if (!s_savedIcon.isNull()) { + return; + } + + const auto &themeMgr = VNoteX::getInst().getThemeMgr(); + const QString savedIconName("saved.svg"); + const QString unsavedIconFg("base#icon#warning_fg"); + s_savedIcon = IconUtils::fetchIcon(themeMgr.getIconFile(savedIconName)); + s_modifiedIcon = IconUtils::fetchIcon(themeMgr.getIconFile(savedIconName), + themeMgr.paletteColor(unsavedIconFg)); +} + +Buffer *ViewWindow::getBuffer() const +{ + return m_buffer; +} + +void ViewWindow::attachToBuffer(Buffer *p_buffer) +{ + Q_ASSERT(p_buffer); + Q_ASSERT(m_buffer != p_buffer); + + detachFromBuffer(); + + m_buffer = p_buffer; + m_buffer->attachViewWindow(this); + + emit bufferChanged(); + + if (m_buffer->getAttachViewWindowCount() == 1) { + QTimer::singleShot(1000, this, &ViewWindow::checkBackupFileOfPreviousSession); + } +} + +void ViewWindow::detachFromBuffer(bool p_quiet) +{ + if (!m_buffer) { + return; + } + + detachFromBufferInternal(); + + disconnect(this, 0, m_buffer, 0); + disconnect(m_buffer, 0, this, 0); + + m_buffer->detachViewWindow(this); + m_buffer = nullptr; + + if (!p_quiet) { + emit bufferChanged(); + } +} + +const QIcon &ViewWindow::getIcon() const +{ + if (m_buffer) { + return m_buffer->isModified() ? s_modifiedIcon : s_savedIcon; + } else { + return s_savedIcon; + } +} + +QString ViewWindow::getName() const +{ + if (m_buffer) { + return m_buffer->getName(); + } else { + return tr("[No Buffer]"); + } +} + +ViewSplit *ViewWindow::getViewSplit() const +{ + return m_viewSplit; +} + +void ViewWindow::setViewSplit(ViewSplit *p_split) +{ + m_viewSplit = p_split; +} + +QString ViewWindow::getTitle() const +{ + if (m_buffer) { + return m_buffer->getPath(); + } else { + return tr("[No Buffer]"); + } +} + +void ViewWindow::setCentralWidget(QWidget *p_widget) +{ + Q_ASSERT(!m_centralWidget); + m_centralWidget = p_widget; + + // Insert after top layout. + m_mainLayout->insertWidget(1, m_centralWidget, 1); + + setFocusProxy(m_centralWidget); + + m_centralWidget->show(); +} + +void ViewWindow::addTopWidget(QWidget *p_widget) +{ + m_topLayout->addWidget(p_widget); +} + +void ViewWindow::addBottomWidget(QWidget *p_widget) +{ + m_bottomLayout->addWidget(p_widget); +} + +void ViewWindow::setStatusWidget(const QSharedPointer &p_widget) +{ + m_statusWidget = p_widget; + m_bottomLayout->insertWidget(0, p_widget.data()); + p_widget->show(); +} + +QSharedPointer ViewWindow::statusWidget() +{ + return m_statusWidget; +} + +void ViewWindow::setStatusWidgetVisible(bool p_visible) +{ + if (m_statusWidget) { + if (p_visible) { + // Need to add it to the right layout again since global status widget will set it as + // a child of the main status bar. + setStatusWidget(m_statusWidget); + } else { + m_statusWidget->hide(); + } + } +} + +QAction *ViewWindow::addAction(QToolBar *p_toolBar, ViewWindowToolBarHelper::Action p_action) +{ + QAction *act = nullptr; + switch (p_action) { + case ViewWindowToolBarHelper::Save: + { + act = ViewWindowToolBarHelper::addAction(p_toolBar, p_action); + connect(this, &ViewWindow::statusChanged, + this, [this, act]() { + auto buffer = getBuffer(); + act->setEnabled(buffer ? !buffer->isReadOnly() && buffer->isModified() : false); + }); + connect(act, &QAction::triggered, + this, [this]() { + if (Normal != checkFileMissingOrChangedOutside()) { + return; + } + + save(false); + }); + break; + } + + case ViewWindowToolBarHelper::EditReadDiscard: + { + // A combined button with Edit/Read/Discard. + act = ViewWindowToolBarHelper::addAction(p_toolBar, p_action); + auto erdAct = dynamic_cast(act); + Q_ASSERT(erdAct); + connect(this, &ViewWindow::modeChanged, + this, [this, erdAct]() { + updateEditReadDiscardActionState(erdAct); + }); + connect(erdAct, QOverload::of(&EditReadDiscardAction::triggered), + this, [this, erdAct](EditReadDiscardAction::Action p_act) { + int ret = checkFileMissingOrChangedOutside(); + if (Normal != ret && SavedOrReloaded != ret) { + // Recover the icon of the action. + updateEditReadDiscardActionState(erdAct); + return; + } + + switch (p_act) { + case EditReadDiscardAction::Action::Edit: + setMode(Mode::Edit); + break; + case EditReadDiscardAction::Action::Read: + if (save(false)) { + setMode(Mode::Read); + } + break; + case EditReadDiscardAction::Action::Discard: + discardChangesAndRead(); + break; + } + setFocus(); + }); + break; + } + + case ViewWindowToolBarHelper::TypeHeading: + { + act = ViewWindowToolBarHelper::addAction(p_toolBar, p_action); + connect(this, &ViewWindow::modeChanged, + this, [this, act]() { + act->setEnabled(inModeCanInsert() && getBuffer() && !getBuffer()->isReadOnly()); + }); + + auto toolBtn = dynamic_cast(p_toolBar->widgetForAction(act)); + Q_ASSERT(toolBtn); + // MUST use the menu for the event. QToolButton won't trigger the event + // if we call action->trigger(). + connect(toolBtn->menu(), &QMenu::triggered, + this, [this](QAction *p_act) { + TypeAction action = static_cast(TypeAction::Heading1 + p_act->data().toInt() - 1); + handleTypeAction(action); + }); + break; + } + + case ViewWindowToolBarHelper::TypeBold: + Q_FALLTHROUGH(); + case ViewWindowToolBarHelper::TypeItalic: + Q_FALLTHROUGH(); + case ViewWindowToolBarHelper::TypeStrikethrough: + Q_FALLTHROUGH(); + case ViewWindowToolBarHelper::TypeUnorderedList: + Q_FALLTHROUGH(); + case ViewWindowToolBarHelper::TypeOrderedList: + Q_FALLTHROUGH(); + case ViewWindowToolBarHelper::TypeTodoList: + Q_FALLTHROUGH(); + case ViewWindowToolBarHelper::TypeCheckedTodoList: + Q_FALLTHROUGH(); + case ViewWindowToolBarHelper::TypeCode: + Q_FALLTHROUGH(); + case ViewWindowToolBarHelper::TypeCodeBlock: + Q_FALLTHROUGH(); + case ViewWindowToolBarHelper::TypeMath: + Q_FALLTHROUGH(); + case ViewWindowToolBarHelper::TypeMathBlock: + Q_FALLTHROUGH(); + case ViewWindowToolBarHelper::TypeQuote: + Q_FALLTHROUGH(); + case ViewWindowToolBarHelper::TypeLink: + Q_FALLTHROUGH(); + case ViewWindowToolBarHelper::TypeImage: + Q_FALLTHROUGH(); + case ViewWindowToolBarHelper::TypeTable: + { + act = ViewWindowToolBarHelper::addAction(p_toolBar, p_action); + connect(this, &ViewWindow::modeChanged, + this, [this, act]() { + act->setEnabled(inModeCanInsert() && getBuffer() && !getBuffer()->isReadOnly()); + }); + connect(act, &QAction::triggered, + this, [this, p_action]() { + handleTypeAction(toolBarActionToTypeAction(p_action)); + }); + break; + } + + case ViewWindowToolBarHelper::Attachment: + { + act = ViewWindowToolBarHelper::addAction(p_toolBar, p_action); + auto popup = static_cast(static_cast(p_toolBar->widgetForAction(act))->menu()); + connect(this, &ViewWindow::bufferChanged, + this, [this, act, popup]() { + auto buffer = getBuffer(); + act->setEnabled(buffer ? buffer->isAttachmentSupported() : false); + act->setIcon(getAttachmentIcon(buffer)); + popup->setBuffer(buffer); + }); + connect(this, &ViewWindow::attachmentChanged, + this, [this, act]() { + act->setIcon(getAttachmentIcon(getBuffer())); + }); + break; + } + + case ViewWindowToolBarHelper::Outline: + { + act = ViewWindowToolBarHelper::addAction(p_toolBar, p_action); + auto popup = static_cast(static_cast(p_toolBar->widgetForAction(act))->menu()); + popup->setOutlineProvider(getOutlineProvider()); + break; + } + + case ViewWindowToolBarHelper::FindAndReplace: + { + act = ViewWindowToolBarHelper::addAction(p_toolBar, p_action); + connect(act, &QAction::triggered, + this, [this]() { + showFindAndReplaceWidget(); + }); + break; + } + } + + return act; +} + +const QIcon &ViewWindow::getAttachmentIcon(Buffer *p_buffer) const +{ + static QIcon emptyIcon = ToolBarHelper::generateIcon("attachment_editor.svg"); + static QIcon fullIcon = ToolBarHelper::generateIcon("attachment_full_editor.svg"); + if (p_buffer && p_buffer->hasAttachment()) { + return fullIcon; + } else { + return emptyIcon; + } +} + +bool ViewWindow::saveInternal(bool p_force) +{ + if (m_buffer) { + auto code = m_buffer->save(p_force); + if (code == Buffer::OperationCode::Success) { + setModified(false); + return true; + } + return false; + } + return true; +} + +bool ViewWindow::aboutToClose(bool p_force) +{ + if (!aboutToCloseInternal(p_force)) { + return false; + } + + if (m_buffer) { + m_buffer->syncContent(this); + + if (m_buffer->getAttachViewWindowCount() == 1) { + // Update the buffer state. + m_buffer->checkFileExistsOnDisk(); + m_buffer->checkFileChangedOutside(); + if (m_buffer->isModified()) { + if (p_force) { + // Just discard. + m_buffer->discard(); + } else { + // Check file missing or changed outside. + int ret = checkFileMissingOrChangedOutside(); + switch (ret) { + case Normal: + Q_FALLTHROUGH(); + case SavedOrReloaded: + break; + + case Discarded: + m_buffer->discard(); + break; + + default: + return false; + } + + if (m_buffer->isModified()) { + // Ask to save changes. + ret = MessageBoxHelper::questionSaveDiscardCancel(MessageBoxHelper::Question, + tr("Save changes before closing note (%1)?").arg(m_buffer->getName()), + tr("Note path (%1).").arg(m_buffer->getPath()), + "", + this); + switch (ret) { + case QMessageBox::Save: + { + if (!save(false)) { + return false; + } + break; + } + + case QMessageBox::Discard: + m_buffer->discard(); + break; + + case QMessageBox::Cancel: + Q_FALLTHROUGH(); + default: + return false; + } + } + } + } + } + + detachFromBuffer(true); + } + + return true; +} + +ViewWindow::Mode ViewWindow::modeFromOpenParameters(const FileOpenParameters &p_paras) +{ + switch (p_paras.m_mode) { + case FileOpenParameters::Mode::Edit: + return ViewWindow::Mode::Edit; + + case FileOpenParameters::Mode::Read: + Q_FALLTHROUGH(); + default: + return ViewWindow::Mode::Read; + } +} + +ViewWindow::Mode ViewWindow::getMode() const +{ + return m_mode; +} + +bool ViewWindow::reload() +{ + if (m_buffer) { + auto code = m_buffer->reload(); + if (code == Buffer::OperationCode::Success) { + setModified(false); + return true; + } + return false; + } + return true; +} + +void ViewWindow::discardChangesAndRead() +{ + auto buffer = getBuffer(); + Q_ASSERT(buffer); + buffer->syncContent(this); + + if (buffer->isModified()) { + // Ask to save changes. + int ret = MessageBoxHelper::questionSaveDiscardCancel(MessageBoxHelper::Question, + tr("Discard changes to note %(1)?").arg(buffer->getName()), + tr("Note path (%1).").arg(buffer->getPath()), + "", + this); + switch (ret) { + case QMessageBox::Save: + // Save and read. + if (!save(false)) { + return; + } + break; + + case QMessageBox::Discard: + // Reload buffer and read. + if (!reload()) { + return; + } + break; + + case QMessageBox::Cancel: + Q_FALLTHROUGH(); + default: + return; + } + } + setMode(Mode::Read); +} + +bool ViewWindow::inModeCanInsert() const +{ + return m_mode == Mode::Edit || m_mode == Mode::FocusPreview || m_mode == Mode::FullPreview; +} + +void ViewWindow::handleTypeAction(TypeAction p_action) +{ + Q_UNUSED(p_action); + Q_ASSERT(false); +} + +ViewWindow::TypeAction ViewWindow::toolBarActionToTypeAction(ViewWindowToolBarHelper::Action p_action) +{ + Q_ASSERT(p_action >= ViewWindowToolBarHelper::Action::TypeBold + && p_action <= ViewWindowToolBarHelper::Action::TypeTable); + return static_cast(TypeAction::Bold + (p_action - ViewWindowToolBarHelper::Action::TypeBold)); +} + +void ViewWindow::detachFromBufferInternal() +{ +} + +void ViewWindow::checkBackupFileOfPreviousSession() +{ + Q_ASSERT(m_buffer); + const auto &backupFile = m_buffer->getBackupFileOfPreviousSession(); + if (backupFile.isEmpty()) { + return; + } + + qDebug() << "checkBackupFileOfPreviousSession" << backupFile; + + // Ask to whether save or discard backup file. + const auto fileModifiedTime = Utils::dateTimeString(QFileInfo(m_buffer->getContentPath()).lastModified()); + const auto backupFileModifiedTime = Utils::dateTimeString(QFileInfo(backupFile).lastModified()); + int ret = MessageBoxHelper::questionYesNoCancel(MessageBoxHelper::Warning, + tr("Found backup file (%1) of file (%2). Do you want to recover from backup file?").arg(backupFile, m_buffer->getPath()), + tr("'Yes' to recover from backup file, 'No' to discard it, and 'Cancel' to exit."), + tr("It may be caused by crash while editing this file before.\n\n" + "File last modified time: %1\n" + "Backup file last modified time: %2").arg(fileModifiedTime, backupFileModifiedTime), + this); + switch (ret) { + case QMessageBox::Yes: + m_buffer->recoverFromBackupFileOfPreviousSession(); + break; + + case QMessageBox::No: + // Simply delete the backup file. + m_buffer->discardBackupFileOfPreviousSession(); + break; + + case QMessageBox::Cancel: + Q_FALLTHROUGH(); + default: + // Close ViewWindow. + Q_ASSERT(m_viewSplit); + emit m_viewSplit->viewWindowCloseRequested(this); + break; + } +} + +DragDropAreaIndicator *ViewWindow::getAttachmentDragDropArea() +{ + if (!m_attachmentDragDropIndicator) { + m_attachmentDragDropIndicatorInterface.reset(new AttachmentDragDropAreaIndicator(this)); + m_attachmentDragDropIndicator = new DragDropAreaIndicator(m_attachmentDragDropIndicatorInterface.data(), + tr("Drag&Drop Files To Attach"), + this); + + m_attachmentDragDropIndicator->hide(); + addTopWidget(m_attachmentDragDropIndicator); + } + + return m_attachmentDragDropIndicator; +} + +void ViewWindow::addToolBar(QToolBar *p_bar) +{ + Q_ASSERT(!m_toolBar && !m_attachmentDragDropIndicator); + + m_toolBar = p_bar; + addTopWidget(p_bar); + + p_bar->setAcceptDrops(true); + + // Enable Drag&Drop on it. + p_bar->installEventFilter(this); +} + +bool ViewWindow::eventFilter(QObject *p_obj, QEvent *p_event) +{ + if (p_obj == m_toolBar) { + switch (p_event->type()) { + case QEvent::DragEnter: + if (m_buffer && m_buffer->isAttachmentSupported() && AttachmentDragDropAreaIndicator::isAccepted(dynamic_cast(p_event))) { + getAttachmentDragDropArea()->show(); + } + break; + + case QEvent::HoverLeave: + if (m_attachmentDragDropIndicator) { + m_attachmentDragDropIndicator->hide(); + } + break; + + default: + break; + } + } + return QFrame::eventFilter(p_obj, p_event); +} + +bool ViewWindow::aboutToCloseInternal(bool p_force) +{ + Q_UNUSED(p_force); + return true; +} + +QSharedPointer ViewWindow::getOutlineProvider() +{ + return nullptr; +} + +int ViewWindow::checkFileMissingOrChangedOutside() +{ + if (!m_buffer) { + return Normal; + } + + if (!m_buffer->checkFileExistsOnDisk()) { + int ret = MessageBoxHelper::questionSaveDiscardCancel(MessageBoxHelper::Warning, + tr("File is missing on disk (%1).").arg(m_buffer->getPath()), + tr("Do you want to force to save the buffer to the file?"), + tr("The file may be deleted from outside. Please choose to save the buffer to a new file or just discard it."), + this); + switch (ret) { + case QMessageBox::Save: + if (!save(true)) { + return Failed; + } else { + m_fileChangeCheckEnabled = true; + return SavedOrReloaded; + } + break; + + case QMessageBox::Discard: + return Discarded; + + default: + return Failed; + } + } else if (m_buffer->checkFileChangedOutside()) { + int ret = MessageBoxHelper::questionSaveDiscardCancel(MessageBoxHelper::Warning, + tr("File is changed from outside (%1).").arg(m_buffer->getPath()), + tr("Do you want to override the file from buffer?"), + tr("The file is changed from outside. Please choose to save the buffer to the file or just discard the buffer and reload the file."), + this); + switch (ret) { + case QMessageBox::Save: + if (!save(true)) { + return Failed; + } else { + m_fileChangeCheckEnabled = true; + return SavedOrReloaded; + } + + case QMessageBox::Discard: + if (!reload()) { + // Return Discarded here to let ViewWindow be closed. + return Discarded; + } else { + return SavedOrReloaded; + } + + default: + return Failed; + } + } + + m_fileChangeCheckEnabled = true; + return Normal; +} + +void ViewWindow::checkFileMissingOrChangedOutsidePeriodically() +{ + if (m_fileChangeCheckEnabled) { + // Disable it first. + m_fileChangeCheckEnabled = false; + int ret = checkFileMissingOrChangedOutside(); + m_fileChangeCheckEnabled = ret != Discarded; + } +} + +bool ViewWindow::save(bool p_force) +{ + if (!p_force && !m_buffer->isModified()) { + return true; + } + + if (m_buffer->isReadOnly()) { + MessageBoxHelper::notify(MessageBoxHelper::Warning, + tr("This is a read-only note (%1), on which modification is not allowed.").arg(m_buffer->getName()), + tr("Please save your changes to another note."), + "", + this); + return false; + } + + if (!saveInternal(p_force)) { + MessageBoxHelper::notify(MessageBoxHelper::Warning, + tr("Failed to save note (%1).").arg(m_buffer->getName()), + tr("Please check the file (%1) and try it again.").arg(m_buffer->getPath()), + "", + this); + return false; + } + + return true; +} + +void ViewWindow::updateEditReadDiscardActionState(EditReadDiscardAction *p_act) +{ + switch (getMode()) { + case Mode::Read: + p_act->setState(BiAction::State::Default); + break; + + default: + p_act->setState(BiAction::State::Alternative); + break; + } +} + +void ViewWindow::setupShortcuts() +{ +} + +void ViewWindow::wheelEvent(QWheelEvent *p_event) +{ + if (p_event->modifiers() & Qt::ControlModifier) { + QPoint angle = p_event->angleDelta(); + if (!angle.isNull() && (angle.y() != 0)) { + // Zoom in/out current tab. + zoom(angle.y() > 0); + } + + p_event->accept(); + return; + } + + QFrame::wheelEvent(p_event); +} + +void ViewWindow::showZoomFactor(qreal p_factor) +{ + VNoteX::getInst().showStatusMessageShort(tr("Zoomed: %1%").arg(p_factor * 100)); +} + +void ViewWindow::showZoomDelta(int p_delta) +{ + VNoteX::getInst().showStatusMessageShort(tr("Zoomed: %1%2").arg(p_delta > 0 ? "+" : "").arg(p_delta)); +} + +void ViewWindow::showFindAndReplaceWidget() +{ + if (!m_findAndReplace) { + m_findAndReplace = new FindAndReplaceWidget(this); + m_mainLayout->addWidget(m_findAndReplace); + } + + m_findAndReplace->open(QString()); +} + +void ViewWindow::hideFindAndReplaceWidget() +{ + if (m_findAndReplace) { + m_findAndReplace->close(); + } +} + +void ViewWindow::keyPressEvent(QKeyEvent *p_event) +{ + switch (p_event->key()) { + case Qt::Key_Escape: + if (findAndReplaceWidgetVisible()) { + hideFindAndReplaceWidget(); + return; + } + break; + + default: + break; + } + QFrame::keyPressEvent(p_event); +} + +bool ViewWindow::findAndReplaceWidgetVisible() const +{ + return m_findAndReplace && m_findAndReplace->isVisible(); +} diff --git a/src/widgets/viewwindow.h b/src/widgets/viewwindow.h new file mode 100644 index 00000000..faf2e2e5 --- /dev/null +++ b/src/widgets/viewwindow.h @@ -0,0 +1,280 @@ +#ifndef VIEWWINDOW_H +#define VIEWWINDOW_H + +#include +#include +#include + +#include + +#include "viewwindowtoolbarhelper.h" + +class QVBoxLayout; +class QTimer; + +namespace vnotex +{ + class ViewSplit; + struct FileOpenParameters; + class DragDropAreaIndicator; + class DragDropAreaIndicatorInterface; + class OutlineProvider; + class EditReadDiscardAction; + class FindAndReplaceWidget; + + class ViewWindow : public QFrame + { + Q_OBJECT + public: + enum Mode + { + Read, + Edit, + FullPreview, + FocusPreview, + Invalid + }; + + explicit ViewWindow(QWidget *p_parent = nullptr); + + virtual ~ViewWindow(); + + Buffer *getBuffer() const; + + void attachToBuffer(Buffer *p_buffer); + + void detachFromBuffer(bool p_quiet = false); + + virtual const QIcon &getIcon() const; + + virtual QString getName() const; + + QString getTitle() const; + + ViewSplit *getViewSplit() const; + void setViewSplit(ViewSplit *p_split); + + QSharedPointer statusWidget(); + + // Whether should show standalone status widget. + void setStatusWidgetVisible(bool p_visible); + + // Get latest content from editor instead of buffer. + virtual QString getLatestContent() const = 0; + + // Will be called before close. + // Return true if it is OK to proceed. + bool aboutToClose(bool p_force); + + ViewWindow::Mode getMode() const; + virtual void setMode(Mode p_mode) = 0; + + virtual QSharedPointer getOutlineProvider(); + + // Called by upside. + void checkFileMissingOrChangedOutsidePeriodically(); + + public slots: + virtual void handleEditorConfigChange() = 0; + + signals: + // Emit when the attached buffer is changed. + void bufferChanged(); + + // Emit when this ViewWindow get focused. + void focused(ViewWindow *p_win); + + // Emit when the status of this ViewWindow has changed, + // such as modification state. + void statusChanged(); + + void modeChanged(); + + void nameChanged(); + + void attachmentChanged(); + + protected: + enum TypeAction + { + Heading1, + Heading2, + Heading3, + Heading4, + Heading5, + Heading6, + HeadingNone, + + // Make sure the order is identical with ViewWindowToolBarHelper::Action. + Bold, + Italic, + Strikethrough, + UnorderedList, + OrderedList, + TodoList, + CheckedTodoList, + Code, + CodeBlock, + Math, + MathBlock, + Quote, + Link, + Image, + TypeTable + }; + + protected slots: + // Handle current buffer change. + virtual void handleBufferChangedInternal() = 0; + + // Handle all kinds of type action. + virtual void handleTypeAction(TypeAction p_action); + + protected: + void setCentralWidget(QWidget *p_widget); + + void addTopWidget(QWidget *p_widget); + + void addToolBar(QToolBar *p_bar); + + void addBottomWidget(QWidget *p_widget); + + void setStatusWidget(const QSharedPointer &p_widget); + + bool eventFilter(QObject *p_obj, QEvent *p_event) Q_DECL_OVERRIDE; + + void wheelEvent(QWheelEvent *p_event) Q_DECL_OVERRIDE; + + void keyPressEvent(QKeyEvent *p_event) Q_DECL_OVERRIDE; + + // Provide some common actions of tool bar for ViewWindow. + QAction *addAction(QToolBar *p_toolBar, ViewWindowToolBarHelper::Action p_action); + + // ViewWindow should set editor's modification state. + virtual void setModified(bool p_modified) = 0; + + // Return true if it is OK to proceed. + virtual bool aboutToCloseInternal(bool p_force); + + // Sync buffer changes to editor. + virtual void syncEditorFromBuffer() = 0; + + // Sync buffer content changes to editor. + virtual void syncEditorFromBufferContent() = 0; + + // Whether we are in a mode that enable us to insert text. + bool inModeCanInsert() const; + + virtual void detachFromBufferInternal(); + + virtual void scrollUp() = 0; + + virtual void scrollDown() = 0; + + virtual void zoom(bool p_zoomIn) = 0; + + void showZoomFactor(qreal p_factor); + + void showZoomDelta(int p_delta); + + void showFindAndReplaceWidget(); + + void hideFindAndReplaceWidget(); + + bool findAndReplaceWidgetVisible() const; + + static ViewWindow::Mode modeFromOpenParameters(const FileOpenParameters &p_paras); + + QSharedPointer m_statusWidget; + + // The revision of the buffer of the last sync content. + int m_bufferRevision = 0; + + // Whether there is change of editor config since last update. + // Subclass should maintain it. + int m_editorConfigRevision = 0; + + Mode m_mode = Mode::Invalid; + + private: + void setupUI(); + + void initIcons(); + + void setupShortcuts(); + + void discardChangesAndRead(); + + void checkBackupFileOfPreviousSession(); + + DragDropAreaIndicator *getAttachmentDragDropArea(); + + const QIcon &getAttachmentIcon(Buffer *p_buffer) const; + + // A wrapper of saveInternal(). + bool save(bool p_force = false); + + // Save buffer content to file. + bool saveInternal(bool p_force = false); + + // Discard changes and reload buffer content from file. + bool reload(); + + void updateEditReadDiscardActionState(EditReadDiscardAction *p_act); + + // Return code of checkFileMissingOrChangedOutside(). + enum + { + // File is not missing or changed outside. + Normal, + // Force save the buffer to file or reload the buffer from file. + SavedOrReloaded, + // Discard the buffer. + Discarded, + // User do not handle it. + Failed + }; + int checkFileMissingOrChangedOutside(); + + static ViewWindow::TypeAction toolBarActionToTypeAction(ViewWindowToolBarHelper::Action p_action); + + Buffer *m_buffer = nullptr; + + // Null if this window has not been added to any split. + ViewSplit *m_viewSplit = nullptr; + + // Managed by QObject. + QWidget *m_centralWidget = nullptr; + + // Managed by QObject. + QVBoxLayout *m_mainLayout = nullptr; + + // Managed by QObject. + QVBoxLayout *m_topLayout = nullptr; + + // Managed by QObject. + QVBoxLayout *m_bottomLayout = nullptr; + + QTimer *m_syncBufferContentTimer = nullptr; + + // Managed by QObject. + // Allocated on necessary. Use getAttachmentDragDropArea() to access. + DragDropAreaIndicator *m_attachmentDragDropIndicator = nullptr; + + QScopedPointer m_attachmentDragDropIndicatorInterface; + + // Managed by QObject. + QToolBar *m_toolBar = nullptr; + + // Whether check file missing or changed outside. + bool m_fileChangeCheckEnabled = true; + + // Managed by QObject. + FindAndReplaceWidget *m_findAndReplace = nullptr; + + static QIcon s_savedIcon; + static QIcon s_modifiedIcon; + }; +} // ns vnotex + +#endif // VIEWWINDOW_H diff --git a/src/widgets/viewwindowtoolbarhelper.cpp b/src/widgets/viewwindowtoolbarhelper.cpp new file mode 100644 index 00000000..cef72b08 --- /dev/null +++ b/src/widgets/viewwindowtoolbarhelper.cpp @@ -0,0 +1,318 @@ +#include "viewwindowtoolbarhelper.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "toolbarhelper.h" +#include +#include +#include +#include +#include "editreaddiscardaction.h" +#include "widgetsfactory.h" +#include "attachmentpopup.h" +#include "propertydefs.h" +#include "outlinepopup.h" + +using namespace vnotex; + +typedef EditorConfig::Shortcut Shortcut; + +static const char *s_context = "ViewWindowToolBarHelper"; + +#define TR(x) QCoreApplication::translate(s_context, (x)) + +// To get the right shortcut context, we use a separate QShrotcut for the action shortcut. +// @p_parentAction: the parent action of @p_action which is in a menu of @p_parentAction. +void ViewWindowToolBarHelper::addActionShortcut(QAction *p_action, + const QString &p_shortcut, + QWidget *p_widget, + QAction *p_parentAction) +{ + auto shortcut = WidgetUtils::createShortcut(p_shortcut, p_widget, Qt::WidgetWithChildrenShortcut); + if (!shortcut) { + return; + } + + QObject::connect(shortcut, &QShortcut::activated, + p_action, [p_action, p_parentAction]() { + if (p_action->isEnabled()) { + if (p_parentAction) { + if (p_parentAction->isEnabled()) { + p_action->trigger(); + } + } else { + p_action->trigger(); + } + } + }); + p_action->setText(QString("%1\t%2").arg(p_action->text(), shortcut->key().toString(QKeySequence::NativeText))); +} + +void ViewWindowToolBarHelper::addButtonShortcut(QToolButton *p_btn, + const QString &p_shortcut, + QWidget *p_widget) +{ + auto shortcut = WidgetUtils::createShortcut(p_shortcut, p_widget, Qt::WidgetWithChildrenShortcut); + if (!shortcut) { + return; + } + + QObject::connect(shortcut, &QShortcut::activated, + p_btn, [p_btn]() { + if (p_btn->isEnabled()) { + p_btn->click(); + } + }); + auto act = p_btn->defaultAction(); + if (act) { + act->setText(QString("%1\t%2").arg(act->text(), shortcut->key().toString(QKeySequence::NativeText))); + } else { + p_btn->setText(QString("%1\t%2").arg(p_btn->text(), shortcut->key().toString(QKeySequence::NativeText))); + } +} + +QAction *ViewWindowToolBarHelper::addAction(QToolBar *p_tb, Action p_action) +{ + auto viewWindow = static_cast(p_tb->parent()); + const auto &editorConfig = ConfigMgr::getInst().getEditorConfig(); + + QAction *act = nullptr; + switch (p_action) { + case Action::Save: + act = p_tb->addAction(ToolBarHelper::generateIcon("save_editor.svg"), + TR("Save")); + addActionShortcut(act, editorConfig.getShortcut(Shortcut::Save), viewWindow); + break; + + case Action::EditReadDiscard: + { + auto erdAct = new EditReadDiscardAction(ToolBarHelper::generateIcon("edit_editor.svg"), + TR("Edit"), + ToolBarHelper::generateIcon("read_editor.svg"), + TR("Read"), + ToolBarHelper::generateIcon("discard_editor.svg"), + TR("Discard"), + p_tb); + act = erdAct; + addActionShortcut(erdAct, editorConfig.getShortcut(Shortcut::EditRead), viewWindow); + + auto discardAct = erdAct->getDiscardAction(); + addActionShortcut(discardAct, editorConfig.getShortcut(Shortcut::Discard), viewWindow); + + p_tb->addAction(erdAct); + + auto toolBtn = dynamic_cast(p_tb->widgetForAction(erdAct)); + Q_ASSERT(toolBtn); + erdAct->setToolButtonForAction(toolBtn); + break; + } + + case Action::TypeHeading: + { + act = p_tb->addAction(ToolBarHelper::generateIcon("type_heading_editor.svg"), + TR("Heading")); + + auto toolBtn = dynamic_cast(p_tb->widgetForAction(act)); + Q_ASSERT(toolBtn); + toolBtn->setPopupMode(QToolButton::InstantPopup); + toolBtn->setProperty(PropertyDefs::s_toolButtonWithoutMenuIndicator, true); + + auto menu = WidgetsFactory::createMenu(p_tb); + + auto act1 = menu->addAction(TR("Heading 1")); + addActionShortcut(act1, + editorConfig.getShortcut(EditorConfig::Shortcut::TypeHeading1), + viewWindow, + act); + act1->setData(1); + + auto act2 = menu->addAction(TR("Heading 2")); + addActionShortcut(act2, + editorConfig.getShortcut(EditorConfig::Shortcut::TypeHeading2), + viewWindow, + act); + act2->setData(2); + + auto act3 = menu->addAction(TR("Heading 3")); + addActionShortcut(act3, + editorConfig.getShortcut(EditorConfig::Shortcut::TypeHeading3), + viewWindow, + act); + act3->setData(3); + + auto act4 = menu->addAction(TR("Heading 4")); + addActionShortcut(act4, + editorConfig.getShortcut(EditorConfig::Shortcut::TypeHeading4), + viewWindow, + act); + act4->setData(4); + + auto act5 = menu->addAction(TR("Heading 5")); + addActionShortcut(act5, + editorConfig.getShortcut(EditorConfig::Shortcut::TypeHeading5), + viewWindow, + act); + act5->setData(5); + + auto act6 = menu->addAction(TR("Heading 6")); + addActionShortcut(act6, + editorConfig.getShortcut(EditorConfig::Shortcut::TypeHeading6), + viewWindow, + act); + act6->setData(6); + + auto act7 = menu->addAction(TR("Clear")); + addActionShortcut(act7, + editorConfig.getShortcut(EditorConfig::Shortcut::TypeHeadingNone), + viewWindow, + act); + act7->setData(7); + + toolBtn->setMenu(menu); + break; + } + + case Action::TypeBold: + act = p_tb->addAction(ToolBarHelper::generateIcon("type_bold_editor.svg"), + TR("Bold")); + addActionShortcut(act, editorConfig.getShortcut(Shortcut::TypeBold), viewWindow); + break; + + case Action::TypeItalic: + act = p_tb->addAction(ToolBarHelper::generateIcon("type_italic_editor.svg"), + TR("Italic")); + addActionShortcut(act, editorConfig.getShortcut(Shortcut::TypeItalic), viewWindow); + break; + + case Action::TypeStrikethrough: + act = p_tb->addAction(ToolBarHelper::generateIcon("type_strikethrough_editor.svg"), + TR("Strikethrough")); + addActionShortcut(act, editorConfig.getShortcut(Shortcut::TypeStrikethrough), viewWindow); + break; + + case Action::TypeUnorderedList: + act = p_tb->addAction(ToolBarHelper::generateIcon("type_unordered_list_editor.svg"), + TR("Unordered List")); + addActionShortcut(act, editorConfig.getShortcut(Shortcut::TypeUnorderedList), viewWindow); + break; + + case Action::TypeOrderedList: + act = p_tb->addAction(ToolBarHelper::generateIcon("type_ordered_list_editor.svg"), + TR("Ordered List")); + addActionShortcut(act, editorConfig.getShortcut(Shortcut::TypeOrderedList), viewWindow); + break; + + case Action::TypeTodoList: + act = p_tb->addAction(ToolBarHelper::generateIcon("type_todo_list_editor.svg"), + TR("Todo List")); + addActionShortcut(act, editorConfig.getShortcut(Shortcut::TypeTodoList), viewWindow); + break; + + case Action::TypeCheckedTodoList: + act = p_tb->addAction(ToolBarHelper::generateIcon("type_checked_todo_list_editor.svg"), + TR("Checked Todo List")); + addActionShortcut(act, editorConfig.getShortcut(Shortcut::TypeCheckedTodoList), viewWindow); + break; + + case Action::TypeCode: + act = p_tb->addAction(ToolBarHelper::generateIcon("type_code_editor.svg"), + TR("Code")); + addActionShortcut(act, editorConfig.getShortcut(Shortcut::TypeCode), viewWindow); + break; + + case Action::TypeCodeBlock: + act = p_tb->addAction(ToolBarHelper::generateIcon("type_code_block_editor.svg"), + TR("Code Block")); + addActionShortcut(act, editorConfig.getShortcut(Shortcut::TypeCodeBlock), viewWindow); + break; + + case Action::TypeMath: + act = p_tb->addAction(ToolBarHelper::generateIcon("type_math_editor.svg"), + TR("Math")); + addActionShortcut(act, editorConfig.getShortcut(Shortcut::TypeMath), viewWindow); + break; + + case Action::TypeMathBlock: + act = p_tb->addAction(ToolBarHelper::generateIcon("type_math_block_editor.svg"), + TR("Math Block")); + addActionShortcut(act, editorConfig.getShortcut(Shortcut::TypeMathBlock), viewWindow); + break; + + case Action::TypeQuote: + act = p_tb->addAction(ToolBarHelper::generateIcon("type_quote_editor.svg"), + TR("Quote")); + addActionShortcut(act, editorConfig.getShortcut(Shortcut::TypeQuote), viewWindow); + break; + + case Action::TypeLink: + act = p_tb->addAction(ToolBarHelper::generateIcon("type_link_editor.svg"), + TR("Link")); + addActionShortcut(act, editorConfig.getShortcut(Shortcut::TypeLink), viewWindow); + break; + + case Action::TypeImage: + act = p_tb->addAction(ToolBarHelper::generateIcon("type_image_editor.svg"), + TR("Image")); + addActionShortcut(act, editorConfig.getShortcut(Shortcut::TypeImage), viewWindow); + break; + + case Action::TypeTable: + act = p_tb->addAction(ToolBarHelper::generateIcon("type_table_editor.svg"), + TR("Table")); + addActionShortcut(act, editorConfig.getShortcut(Shortcut::TypeTable), viewWindow); + break; + + case Action::Attachment: + { + act = p_tb->addAction(ToolBarHelper::generateIcon("attachment_editor.svg"), + TR("Attachments")); + + auto toolBtn = dynamic_cast(p_tb->widgetForAction(act)); + Q_ASSERT(toolBtn); + toolBtn->setPopupMode(QToolButton::InstantPopup); + toolBtn->setProperty(PropertyDefs::s_toolButtonWithoutMenuIndicator, true); + + auto menu = new AttachmentPopup(toolBtn, p_tb); + toolBtn->setMenu(menu); + break; + } + + case Action::Outline: + { + act = p_tb->addAction(ToolBarHelper::generateIcon("outline_editor.svg"), + TR("Outline")); + + auto toolBtn = dynamic_cast(p_tb->widgetForAction(act)); + Q_ASSERT(toolBtn); + toolBtn->setPopupMode(QToolButton::InstantPopup); + toolBtn->setProperty(PropertyDefs::s_toolButtonWithoutMenuIndicator, true); + + addButtonShortcut(toolBtn, editorConfig.getShortcut(Shortcut::Outline), viewWindow); + + auto menu = new OutlinePopup(toolBtn, p_tb); + toolBtn->setMenu(menu); + break; + } + + case Action::FindAndReplace: + { + act = p_tb->addAction(ToolBarHelper::generateIcon("find_replace_editor.svg"), + TR("Find And Replace")); + addActionShortcut(act, editorConfig.getShortcut(Shortcut::FindAndReplace), viewWindow); + break; + } + + default: + Q_ASSERT(false); + break; + } + + return act; +} diff --git a/src/widgets/viewwindowtoolbarhelper.h b/src/widgets/viewwindowtoolbarhelper.h new file mode 100644 index 00000000..10fd0b81 --- /dev/null +++ b/src/widgets/viewwindowtoolbarhelper.h @@ -0,0 +1,60 @@ +#ifndef VIEWWINDOWTOOLBARHELPER_H +#define VIEWWINDOWTOOLBARHELPER_H + +class QToolBar; +class QAction; +class QWidget; +class QString; +class QToolButton; + +namespace vnotex +{ + // Help to setup common buttons of ViewWindow tool bar. + class ViewWindowToolBarHelper + { + public: + enum Action + { + Save, + EditReadDiscard, + + // Make sure they are put together. + // Including Heading1-6 and HeadingNone. + TypeHeading, + TypeBold, + TypeItalic, + TypeStrikethrough, + TypeUnorderedList, + TypeOrderedList, + TypeTodoList, + TypeCheckedTodoList, + TypeCode, + TypeCodeBlock, + TypeMath, + TypeMathBlock, + TypeQuote, + TypeLink, + TypeImage, + TypeTable, + + Attachment, + Outline, + FindAndReplace + }; + + static QAction *addAction(QToolBar *p_tb, Action p_action); + + static void addActionShortcut(QAction *p_action, + const QString &p_shortcut, + QWidget *p_widget, + QAction *p_parentAction = nullptr); + + static void addButtonShortcut(QToolButton *p_btn, + const QString &p_shortcut, + QWidget *p_widget); + + ViewWindowToolBarHelper() = delete; + }; +} + +#endif // VIEWWINDOWTOOLBARHELPER_H diff --git a/src/widgets/webpage.cpp b/src/widgets/webpage.cpp new file mode 100644 index 00000000..8390f6df --- /dev/null +++ b/src/widgets/webpage.cpp @@ -0,0 +1,24 @@ +#include "webpage.h" + +using namespace vnotex; + +WebPage::WebPage(QWidget *p_parent) + : QWebEnginePage(p_parent) +{ + +} + +bool WebPage::acceptNavigationRequest(const QUrl &p_url, + NavigationType p_type, + bool p_isMainFrame) +{ + Q_UNUSED(p_type); + if (!p_isMainFrame) { + return true; + } else if (p_url.scheme() == QStringLiteral("data")) { + // Qt 5.12 and above will trigger this when calling QWebEngineView::setHtml(). + return true; + } + + return false; +} diff --git a/src/widgets/webpage.h b/src/widgets/webpage.h new file mode 100644 index 00000000..1aa35b45 --- /dev/null +++ b/src/widgets/webpage.h @@ -0,0 +1,21 @@ +#ifndef WEBPAGE_H +#define WEBPAGE_H + +#include + +namespace vnotex +{ + class WebPage : public QWebEnginePage + { + Q_OBJECT + public: + explicit WebPage(QWidget *p_parent = nullptr); + + protected: + bool acceptNavigationRequest(const QUrl &p_url, + NavigationType p_type, + bool p_isMainFrame) Q_DECL_OVERRIDE; + }; +} + +#endif // WEBPAGE_H diff --git a/src/widgets/webviewer.cpp b/src/widgets/webviewer.cpp new file mode 100644 index 00000000..a71263b7 --- /dev/null +++ b/src/widgets/webviewer.cpp @@ -0,0 +1,14 @@ +#include "webviewer.h" + +using namespace vnotex; + +WebViewer::WebViewer(QWidget *p_parent) + : QWebEngineView(p_parent) +{ + setAcceptDrops(false); +} + +WebViewer::~WebViewer() +{ + +} diff --git a/src/widgets/webviewer.h b/src/widgets/webviewer.h new file mode 100644 index 00000000..65ef1721 --- /dev/null +++ b/src/widgets/webviewer.h @@ -0,0 +1,18 @@ +#ifndef WEBVIEWER_H +#define WEBVIEWER_H + +#include + +namespace vnotex +{ + class WebViewer : public QWebEngineView + { + Q_OBJECT + public: + explicit WebViewer(QWidget *p_parent = nullptr); + + virtual ~WebViewer(); + }; +} + +#endif // WEBVIEWER_H diff --git a/src/widgets/widgets.pri b/src/widgets/widgets.pri new file mode 100644 index 00000000..92ffeb93 --- /dev/null +++ b/src/widgets/widgets.pri @@ -0,0 +1,154 @@ +SOURCES += \ + $$PWD/attachmentdragdropareaindicator.cpp \ + $$PWD/attachmentpopup.cpp \ + $$PWD/biaction.cpp \ + $$PWD/dialogs/dialog.cpp \ + $$PWD/dialogs/filepropertiesdialog.cpp \ + $$PWD/dialogs/imageinsertdialog.cpp \ + $$PWD/dialogs/importfolderdialog.cpp \ + $$PWD/dialogs/importlegacynotebookdialog.cpp \ + $$PWD/dialogs/importnotebookdialog.cpp \ + $$PWD/dialogs/legacynotebookutils.cpp \ + $$PWD/dialogs/linkinsertdialog.cpp \ + $$PWD/dialogs/newnotebookfromfolderdialog.cpp \ + $$PWD/dialogs/selectdialog.cpp \ + $$PWD/dialogs/selectionitemwidget.cpp \ + $$PWD/dialogs/settings/appearancepage.cpp \ + $$PWD/dialogs/settings/editorpage.cpp \ + $$PWD/dialogs/settings/generalpage.cpp \ + $$PWD/dialogs/settings/markdowneditorpage.cpp \ + $$PWD/dialogs/settings/settingspage.cpp \ + $$PWD/dialogs/settings/settingsdialog.cpp \ + $$PWD/dialogs/settings/texteditorpage.cpp \ + $$PWD/dragdropareaindicator.cpp \ + $$PWD/editors/editormarkdownvieweradapter.cpp \ + $$PWD/editors/markdowneditor.cpp \ + $$PWD/editors/markdownviewer.cpp \ + $$PWD/editors/markdownvieweradapter.cpp \ + $$PWD/editors/previewhelper.cpp \ + $$PWD/editors/texteditor.cpp \ + $$PWD/editreaddiscardaction.cpp \ + $$PWD/filesystemviewer.cpp \ + $$PWD/dialogs/folderfilesfilterwidget.cpp \ + $$PWD/findandreplacewidget.cpp \ + $$PWD/fullscreentoggleaction.cpp \ + $$PWD/lineedit.cpp \ + $$PWD/lineeditdelegate.cpp \ + $$PWD/listwidget.cpp \ + $$PWD/mainwindow.cpp \ + $$PWD/markdownviewwindow.cpp \ + $$PWD/navigationmodemgr.cpp \ + $$PWD/outlinepopup.cpp \ + $$PWD/outlineprovider.cpp \ + $$PWD/outlineviewer.cpp \ + $$PWD/propertydefs.cpp \ + $$PWD/textviewwindow.cpp \ + $$PWD/toolbarhelper.cpp \ + $$PWD/treeview.cpp \ + $$PWD/viewsplit.cpp \ + $$PWD/viewwindow.cpp \ + $$PWD/viewwindowtoolbarhelper.cpp \ + $$PWD/webpage.cpp \ + $$PWD/webviewer.cpp \ + $$PWD/widgetsfactory.cpp \ + $$PWD/toolbox.cpp \ + $$PWD/navigationmode.cpp \ + $$PWD/titlebar.cpp \ + $$PWD/notebookexplorer.cpp \ + $$PWD/dialogs/newnotebookdialog.cpp \ + $$PWD/dialogs/scrolldialog.cpp \ + $$PWD/notebookselector.cpp \ + $$PWD/notebooknodeexplorer.cpp \ + $$PWD/messageboxhelper.cpp \ + $$PWD/dialogs/newfolderdialog.cpp \ + $$PWD/treewidget.cpp \ + $$PWD/dialogs/newnotedialog.cpp \ + $$PWD/dialogs/managenotebooksdialog.cpp \ + $$PWD/dialogs/notebookinfowidget.cpp \ + $$PWD/dialogs/nodelabelwithupbutton.cpp \ + $$PWD/dialogs/notepropertiesdialog.cpp \ + $$PWD/dialogs/folderpropertiesdialog.cpp \ + $$PWD/dialogs/nodeinfowidget.cpp \ + $$PWD/statusbarhelper.cpp \ + $$PWD/dialogs/deleteconfirmdialog.cpp \ + $$PWD/dialogs/importfolderutils.cpp \ + $$PWD/viewarea.cpp + +HEADERS += \ + $$PWD/attachmentdragdropareaindicator.h \ + $$PWD/attachmentpopup.h \ + $$PWD/biaction.h \ + $$PWD/dialogs/dialog.h \ + $$PWD/dialogs/importfolderutils.h \ + $$PWD/dialogs/filepropertiesdialog.h \ + $$PWD/dialogs/imageinsertdialog.h \ + $$PWD/dialogs/importfolderdialog.h \ + $$PWD/dialogs/importlegacynotebookdialog.h \ + $$PWD/dialogs/importnotebookdialog.h \ + $$PWD/dialogs/legacynotebookutils.h \ + $$PWD/dialogs/linkinsertdialog.h \ + $$PWD/dialogs/newnotebookfromfolderdialog.h \ + $$PWD/dialogs/selectdialog.h \ + $$PWD/dialogs/selectionitemwidget.h \ + $$PWD/dialogs/settings/appearancepage.h \ + $$PWD/dialogs/settings/editorpage.h \ + $$PWD/dialogs/settings/generalpage.h \ + $$PWD/dialogs/settings/markdowneditorpage.h \ + $$PWD/dialogs/settings/settingspage.h \ + $$PWD/dialogs/settings/settingsdialog.h \ + $$PWD/dialogs/settings/texteditorpage.h \ + $$PWD/dragdropareaindicator.h \ + $$PWD/editors/editormarkdownvieweradapter.h \ + $$PWD/editors/markdowneditor.h \ + $$PWD/editors/markdownviewer.h \ + $$PWD/editors/markdownvieweradapter.h \ + $$PWD/editors/previewhelper.h \ + $$PWD/editors/texteditor.h \ + $$PWD/editreaddiscardaction.h \ + $$PWD/filesystemviewer.h \ + $$PWD/dialogs/folderfilesfilterwidget.h \ + $$PWD/findandreplacewidget.h \ + $$PWD/fullscreentoggleaction.h \ + $$PWD/lineedit.h \ + $$PWD/lineeditdelegate.h \ + $$PWD/listwidget.h \ + $$PWD/mainwindow.h \ + $$PWD/markdownviewwindow.h \ + $$PWD/navigationmodemgr.h \ + $$PWD/navigationmodewrapper.h \ + $$PWD/outlinepopup.h \ + $$PWD/outlineprovider.h \ + $$PWD/outlineviewer.h \ + $$PWD/propertydefs.h \ + $$PWD/textviewwindow.h \ + $$PWD/textviewwindowhelper.h \ + $$PWD/toolbarhelper.h \ + $$PWD/treeview.h \ + $$PWD/viewsplit.h \ + $$PWD/viewwindow.h \ + $$PWD/viewwindowtoolbarhelper.h \ + $$PWD/webpage.h \ + $$PWD/webviewer.h \ + $$PWD/widgetsfactory.h \ + $$PWD/toolbox.h \ + $$PWD/navigationmode.h \ + $$PWD/titlebar.h \ + $$PWD/notebookexplorer.h \ + $$PWD/dialogs/newnotebookdialog.h \ + $$PWD/dialogs/scrolldialog.h \ + $$PWD/notebookselector.h \ + $$PWD/notebooknodeexplorer.h \ + $$PWD/messageboxhelper.h \ + $$PWD/dialogs/newfolderdialog.h \ + $$PWD/qtreewidgetstatecache.h \ + $$PWD/treewidget.h \ + $$PWD/dialogs/newnotedialog.h \ + $$PWD/dialogs/managenotebooksdialog.h \ + $$PWD/dialogs/notebookinfowidget.h \ + $$PWD/dialogs/nodelabelwithupbutton.h \ + $$PWD/dialogs/notepropertiesdialog.h \ + $$PWD/dialogs/folderpropertiesdialog.h \ + $$PWD/dialogs/nodeinfowidget.h \ + $$PWD/statusbarhelper.h \ + $$PWD/dialogs/deleteconfirmdialog.h \ + $$PWD/viewarea.h diff --git a/src/widgets/widgetsfactory.cpp b/src/widgets/widgetsfactory.cpp new file mode 100644 index 00000000..ccf581ee --- /dev/null +++ b/src/widgets/widgetsfactory.cpp @@ -0,0 +1,67 @@ +#include "widgetsfactory.h" + +#include +#include +#include +#include +#include +#include +#include + +#include "lineedit.h" + +using namespace vnotex; + +QMenu *WidgetsFactory::createMenu(QWidget *p_parent) +{ + auto menu = new QMenu(p_parent); + menu->setToolTipsVisible(true); + return menu; +} + +QMenu *WidgetsFactory::createMenu(const QString &p_title, QWidget *p_parent) +{ + auto menu = new QMenu(p_title, p_parent); + menu->setToolTipsVisible(true); + return menu; +} + +QLineEdit *WidgetsFactory::createLineEdit(QWidget *p_parent) +{ + return new LineEdit(p_parent); +} + +QLineEdit *WidgetsFactory::createLineEdit(const QString &p_contents, QWidget *p_parent) +{ + return new LineEdit(p_contents, p_parent); +} + +QComboBox *WidgetsFactory::createComboBox(QWidget *p_parent) +{ + auto comboBox = new QComboBox(p_parent); + auto itemDelegate = new QStyledItemDelegate(comboBox); + comboBox->setItemDelegate(itemDelegate); + return comboBox; +} + +QCheckBox *WidgetsFactory::createCheckBox(const QString &p_text, QWidget *p_parent) +{ + return new QCheckBox(p_text, p_parent); +} + +QSpinBox *WidgetsFactory::createSpinBox(QWidget *p_parent) +{ + return new QSpinBox(p_parent); +} + +QDoubleSpinBox *WidgetsFactory::createDoubleSpinBox(QWidget *p_parent) +{ + return new QDoubleSpinBox(p_parent); +} + +QToolButton *WidgetsFactory::createToolButton(QWidget *p_parent) +{ + auto tb = new QToolButton(p_parent); + tb->setPopupMode(QToolButton::MenuButtonPopup); + return tb; +} diff --git a/src/widgets/widgetsfactory.h b/src/widgets/widgetsfactory.h new file mode 100644 index 00000000..a5eb5bce --- /dev/null +++ b/src/widgets/widgetsfactory.h @@ -0,0 +1,41 @@ +#ifndef WIDGETSFACTORY_H +#define WIDGETSFACTORY_H + +class QMenu; +class QWidget; +class QLineEdit; +class QString; +class QComboBox; +class QCheckBox; +class QSpinBox; +class QToolButton; +class QDoubleSpinBox; + +namespace vnotex +{ + class WidgetsFactory + { + public: + WidgetsFactory() = delete; + + static QMenu *createMenu(QWidget *p_parent = nullptr); + + static QMenu *createMenu(const QString &p_title, QWidget *p_parent = nullptr); + + static QLineEdit *createLineEdit(QWidget *p_parent = nullptr); + + static QLineEdit *createLineEdit(const QString &p_contents, QWidget *p_parent = nullptr); + + static QComboBox *createComboBox(QWidget *p_parent = nullptr); + + static QCheckBox *createCheckBox(const QString &p_text, QWidget *p_parent = nullptr); + + static QSpinBox *createSpinBox(QWidget *p_parent = nullptr); + + static QDoubleSpinBox *createDoubleSpinBox(QWidget *p_parent = nullptr); + + static QToolButton *createToolButton(QWidget *p_parent = nullptr); + }; +} // ns vnotex + +#endif // WIDGETSFACTORY_H diff --git a/tests/common.pri b/tests/common.pri new file mode 100644 index 00000000..cde7de31 --- /dev/null +++ b/tests/common.pri @@ -0,0 +1,8 @@ +lessThan(QT_MAJOR_VERSION, 5): error("requires Qt 5 and above") + +equals(QT_MAJOR_VERSION, 5):lessThan(QT_MINOR_VERSION, 12): error("requires Qt 5.12 and above") + +QT += core gui widgets network svg webenginewidgets webchannel +QT += testlib + +CONFIG += c++11 testcase diff --git a/tests/test_core/test_core.pro b/tests/test_core/test_core.pro new file mode 100644 index 00000000..f82e91e4 --- /dev/null +++ b/tests/test_core/test_core.pro @@ -0,0 +1,5 @@ +TEMPLATE = subdirs + +SUBDIRS = \ + test_notebook \ + test_theme diff --git a/tests/test_core/test_notebook/test_notebook.cpp b/tests/test_core/test_notebook/test_notebook.cpp new file mode 100644 index 00000000..f5115575 --- /dev/null +++ b/tests/test_core/test_notebook/test_notebook.cpp @@ -0,0 +1,119 @@ +#include "test_notebook.h" + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace tests; + +using namespace vnotex; + +TestNotebook::TestNotebook(QObject *p_parent) + : QObject(p_parent) +{ + m_testDir.reset(new QTemporaryDir); + Q_ASSERT(m_testDir->isValid()); +} + +void TestNotebook::testVersionControllerServer() +{ + Q_ASSERT(!m_vcServer); + + m_vcServer.reset(new NameBasedServer); + + // Dummy Version Controller. + auto dummyFactory = QSharedPointer::create(); + m_vcServer->registerItem(dummyFactory->getName(), dummyFactory); + + auto factory = m_vcServer->getItem(dummyFactory->getName()); + auto dummyVC = factory->createVersionController(); + QCOMPARE(dummyVC->getName(), dummyFactory->getName()); +} + +void TestNotebook::testNotebookConfigMgrServer() +{ + Q_ASSERT(!m_ncmServer); + + m_ncmServer.reset(new NameBasedServer); + + // VX Notebook Config Manager. + auto vxFactory = QSharedPointer::create(); + m_ncmServer->registerItem(vxFactory->getName(), vxFactory); + + auto factory = m_ncmServer->getItem(vxFactory->getName()); + auto vxConfigMgr = factory->createNotebookConfigMgr(nullptr); + QCOMPARE(vxConfigMgr->getName(), vxFactory->getName()); +} + +void TestNotebook::testNotebookBackendServer() +{ + Q_ASSERT(!m_backendServer); + + m_backendServer.reset(new NameBasedServer); + + // Local Notebook Backend. + auto localFactory = QSharedPointer::create(); + m_backendServer->registerItem(localFactory->getName(), localFactory); + + auto factory = m_backendServer->getItem(localFactory->getName()); + auto localBackend = factory->createNotebookBackend(""); + QCOMPARE(localBackend->getName(), localFactory->getName()); +} + +void TestNotebook::testNotebookServer() +{ + Q_ASSERT(!m_nbServer); + + m_nbServer.reset(new NameBasedServer); + + // Bundle Notebook. + auto bundleFacotry = QSharedPointer::create(); + m_nbServer->registerItem(bundleFacotry->getName(), bundleFacotry); + + auto factory = m_nbServer->getItem(bundleFacotry->getName()); + QVERIFY(factory == bundleFacotry); +} + +void TestNotebook::testBundleNotebookFactoryNewNotebook() +{ + auto nbFactory = m_nbServer->getItem("bundle.vnotex"); + + NotebookParameters para; + para.m_name = "test_notebook"; + para.m_description = "notebook description"; + para.m_rootFolderPath = getTestFolderPath(); + para.m_notebookBackend = m_backendServer->getItem("local.vnotex") + ->createNotebookBackend(para.m_rootFolderPath); + para.m_versionController = m_vcServer->getItem("dummy.vnotex")->createVersionController(); + para.m_notebookConfigMgr = m_ncmServer->getItem("vx.vnotex")->createNotebookConfigMgr(para.m_notebookBackend); + + auto notebook = nbFactory->newNotebook(para); + + // Verify the notebook is created. + QVERIFY(QDir(para.m_rootFolderPath).exists()); + auto configMgr = dynamic_cast(para.m_notebookConfigMgr.data()); + const auto notebookConfigFolder = PathUtils::concatenateFilePath(para.m_rootFolderPath, + configMgr->getConfigFolderName()); + const auto notebookConfigPath = PathUtils::concatenateFilePath(notebookConfigFolder, + configMgr->getConfigName()); + QVERIFY(QFileInfo::exists(notebookConfigPath)); +} + +QString TestNotebook::getTestFolderPath() const +{ + return m_testDir->path(); +} + +QTEST_MAIN(tests::TestNotebook) diff --git a/tests/test_core/test_notebook/test_notebook.h b/tests/test_core/test_notebook/test_notebook.h new file mode 100644 index 00000000..d0d58511 --- /dev/null +++ b/tests/test_core/test_notebook/test_notebook.h @@ -0,0 +1,51 @@ +#ifndef TEST_NOTEBOOK_H +#define TEST_NOTEBOOK_H + +#include +#include + +#include + +class QTemporaryDir; + +namespace vnotex +{ + class IVersionControllerFactory; + class INotebookConfigMgrFactory; + class INotebookBackendFactory; + class INotebookFactory; +} + +namespace tests +{ + class TestNotebook : public QObject + { + Q_OBJECT + public: + explicit TestNotebook(QObject *p_parent = nullptr); + + private slots: + // Define test cases here per slot. + void testVersionControllerServer(); + + void testNotebookConfigMgrServer(); + + void testNotebookBackendServer(); + + void testNotebookServer(); + + void testBundleNotebookFactoryNewNotebook(); + + private: + QString getTestFolderPath() const; + + QSharedPointer m_testDir; + + QSharedPointer> m_vcServer; + QSharedPointer> m_ncmServer; + QSharedPointer> m_backendServer; + QSharedPointer> m_nbServer; + }; +} // ns tests + +#endif // TEST_NOTEBOOK_H diff --git a/tests/test_core/test_notebook/test_notebook.pro b/tests/test_core/test_notebook/test_notebook.pro new file mode 100644 index 00000000..b3dce514 --- /dev/null +++ b/tests/test_core/test_notebook/test_notebook.pro @@ -0,0 +1,23 @@ +include($$PWD/../../common.pri) + +TARGET = test_notebook +TEMPLATE = app + +SRC_FOLDER = $$PWD/../../../src +CORE_FOLDER = $$SRC_FOLDER/core + +INCLUDEPATH *= $$SRC_FOLDER + +LIBS_FOLDER = $$PWD/../../../libs +include($$LIBS_FOLDER/vtitlebar/vtitlebar_export.pri) +include($$LIBS_FOLDER/vtextedit/src/editor/editor_export.pri) + +include($$CORE_FOLDER/core.pri) +include($$SRC_FOLDER/widgets/widgets.pri) +include($$SRC_FOLDER/utils/utils.pri) + +SOURCES += \ + test_notebook.cpp + +HEADERS += \ + test_notebook.h diff --git a/tests/test_core/test_theme/test_theme.cpp b/tests/test_core/test_theme/test_theme.cpp new file mode 100644 index 00000000..02004151 --- /dev/null +++ b/tests/test_core/test_theme/test_theme.cpp @@ -0,0 +1,159 @@ +#include "test_theme.h" + +#include + +#include + +using namespace tests; + +using namespace vnotex; + +TestTheme::TestTheme(QObject *p_parent) + : QObject(p_parent) +{ + +} + +void TestTheme::checkKeyValue(const QJsonObject &p_obj, + const QString &p_key, + const QString &p_val) +{ + auto val = Theme::findValueByKeyPath(p_obj, p_key); + QCOMPARE(val.toString(), p_val); +} + +void TestTheme::testTranslatePaletteObject() +{ + QJsonObject palette; + + // Normal. + { + QJsonObject base; + base["a"] = "green"; + base["b"] = "blue"; + palette["base"] = base; + + auto ret = Theme::translatePaletteObjectOnce(palette, palette, "base"); + QCOMPARE(ret.first, false); + QCOMPARE(ret.second, 0); + + checkKeyValue(palette, "base#a", "green"); + checkKeyValue(palette, "base#b", "blue"); + } + + // @. + { + auto baseObj = palette["base"].toObject(); + baseObj["c"] = "@base#b"; + palette["base"] = baseObj; + + auto ret = Theme::translatePaletteObjectOnce(palette, palette, "base"); + QCOMPARE(ret.first, true); + QCOMPARE(ret.second, 0); + checkKeyValue(palette, "base#a", "green"); + checkKeyValue(palette, "base#b", "blue"); + checkKeyValue(palette, "base#c", "blue"); + } + + // @&@. + { + auto baseObj = palette["base"].toObject(); + baseObj["e"] = "@base#d"; + baseObj["d"] = "@base#a"; + palette["base"] = baseObj; + + auto ret = Theme::translatePaletteObjectOnce(palette, palette, "base"); + QCOMPARE(ret.first, true); + QCOMPARE(ret.second, 1); + + ret = Theme::translatePaletteObjectOnce(palette, palette, "base"); + QCOMPARE(ret.first, true); + QCOMPARE(ret.second, 0); + + checkKeyValue(palette, "base#d", "green"); + checkKeyValue(palette, "base#e", "green"); + } + + // Cyclic @. + { + auto baseObj = palette["base"].toObject(); + baseObj["f"] = "@base#g"; + baseObj["g"] = "@base#h"; + baseObj["h"] = "@base#f"; + palette["base"] = baseObj; + + auto ret = Theme::translatePaletteObjectOnce(palette, palette, "base"); + QCOMPARE(ret.first, true); + QCOMPARE(ret.second, 3); + + ret = Theme::translatePaletteObjectOnce(palette, palette, "base"); + QCOMPARE(ret.first, true); + QCOMPARE(ret.second, 3); + + checkKeyValue(palette, "base#a", "green"); + checkKeyValue(palette, "base#b", "blue"); + checkKeyValue(palette, "base#c", "blue"); + checkKeyValue(palette, "base#d", "green"); + checkKeyValue(palette, "base#e", "green"); + + QVERIFY(Theme::isRef(Theme::findValueByKeyPath(palette, "base#f").toString())); + QVERIFY(Theme::isRef(Theme::findValueByKeyPath(palette, "base#g").toString())); + QVERIFY(Theme::isRef(Theme::findValueByKeyPath(palette, "base#h").toString())); + } +} + +void TestTheme::testTranslateStyleByPalette() +{ + QJsonObject palette; + + { + QJsonObject baseObj; + baseObj["a"] = "green"; + baseObj["b"] = "blue"; + baseObj["c"] = "red"; + palette["base"] = baseObj; + } + + // Space or column prefix. + { + QString style = "color: @base#a;\n background:@base#b;"; + Theme::translateStyleByPalette(palette, style); + QVERIFY(style == "color: green;\n background:blue;"); + } + + // Reference beyond palette. + { + QString style = "color: @base#a;\n background: @base#d;"; + Theme::translateStyleByPalette(palette, style); + QVERIFY(style == "color: green;\n background: @base#d;"); + } +} + +void TestTheme::testTranslateUrlToAbsolute() +{ +#if defined(Q_OS_WIN) + const QString basePath("C:\\vnotex\\theme"); + + QString style = "image: url(menu.svg); image:url(c:/vnotex/abs.svg);"; + Theme::translateUrlToAbsolute(basePath, style); + QVERIFY(style == "image: url(C:/vnotex/theme/menu.svg); image:url(c:/vnotex/abs.svg);"); +#else + const QString basePath("/usr/bin/vnotex/theme"); + QString style = "image: url(menu.svg); image:url(/usr/bin/abs.svg);"; + Theme::translateUrlToAbsolute(basePath, style); + QVERIFY(style == "image: url(/usr/bin/vnotex/theme/menu.svg); image:url(/usr/bin/abs.svg);"); +#endif +} + +void TestTheme::testTranslateScaledSize() +{ + const qreal factor = 1.5; + + { + QString style = "width: $20px; height:$-4px;"; + Theme::translateScaledSize(factor, style); + QVERIFY(style == "width: 30px; height:-6px;"); + } +} + +QTEST_MAIN(tests::TestTheme) diff --git a/tests/test_core/test_theme/test_theme.h b/tests/test_core/test_theme/test_theme.h new file mode 100644 index 00000000..f7626868 --- /dev/null +++ b/tests/test_core/test_theme/test_theme.h @@ -0,0 +1,39 @@ +#ifndef TEST_THEME_H +#define TEST_THEME_H + +#include + +namespace vnotex +{ + class IVersionControllerFactory; + class INotebookConfigMgrFactory; + class INotebookBackendFactory; + class INotebookFactory; +} + +namespace tests +{ + class TestTheme : public QObject + { + Q_OBJECT + public: + explicit TestTheme(QObject *p_parent = nullptr); + + private slots: + // Define test cases here per slot. + void testTranslatePaletteObject(); + + void testTranslateStyleByPalette(); + + void testTranslateUrlToAbsolute(); + + void testTranslateScaledSize(); + + private: + void checkKeyValue(const QJsonObject &p_obj, + const QString &p_key, + const QString &p_val); + }; +} // ns tests + +#endif // TEST_THEME_H diff --git a/tests/test_core/test_theme/test_theme.pro b/tests/test_core/test_theme/test_theme.pro new file mode 100644 index 00000000..5a573c89 --- /dev/null +++ b/tests/test_core/test_theme/test_theme.pro @@ -0,0 +1,22 @@ +include($$PWD/../../common.pri) + +TARGET = test_theme +TEMPLATE = app + +SRC_FOLDER = $$PWD/../../../src +CORE_FOLDER = $$SRC_FOLDER/core +UTILS_FOLDER = $$SRC_FOLDER/utils + +INCLUDEPATH *= $$SRC_FOLDER +INCLUDEPATH *= $$SRC_FOLDER/core + +include($$UTILS_FOLDER/utils.pri) + +SOURCES += \ + test_theme.cpp \ + $$CORE_FOLDER/theme.cpp \ + +HEADERS += \ + test_theme.h \ + $$CORE_FOLDER/exception.h \ + $$CORE_FOLDER/theme.h \ diff --git a/tests/test_utils/test_utils.cpp b/tests/test_utils/test_utils.cpp new file mode 100644 index 00000000..6dc2fce7 --- /dev/null +++ b/tests/test_utils/test_utils.cpp @@ -0,0 +1,230 @@ +#include "test_utils.h" + +#include +#include + +#include +#include + +using namespace tests; + +using namespace vnotex; + +void TestUtils::testParentDirPath_data() +{ + QTest::addColumn("path"); + QTest::addColumn("result"); + + QTest::newRow("empty") << "" << ""; + +#if defined(Q_OS_WIN) + QTest::newRow("win_root") << "c:\\" << "C:/"; + QTest::newRow("win_normal") << "c:\\users\\tamlok" << "C:/users"; + QTest::newRow("win_slash") << "c:\\users\\tamlok\\" << "C:/users/tamlok"; + QTest::newRow("win_ext") << "c:\\users\\tamlok\\vnotex.md" << "C:/users/tamlok"; + QTest::newRow("win_case") << "c:\\users\\Tamlok\\Vnotex.md" << "C:/users/Tamlok"; + QTest::newRow("win_sep") << "c:/users/tamlok/vnotex.md" << "C:/users/tamlok"; +#else + QTest::newRow("linux_root") << "/home" << "/"; + QTest::newRow("linux_normal") << "/home/tamlok" << "/home"; + QTest::newRow("linux_slash") << "/home/tamlok/" << "/home/tamlok"; + QTest::newRow("linux_ext") << "/home/tamlok/vnotex.md" << "/home/tamlok"; + QTest::newRow("linux_case") << "/home/Tamlok/vnotex.md" << "/home/Tamlok"; +#endif +} + +void TestUtils::testParentDirPath() +{ + QFETCH(QString, path); + QFETCH(QString, result); + + QCOMPARE(PathUtils::parentDirPath(path), result); +} + +void TestUtils::testCleanPath_data() +{ + QTest::addColumn("path"); + QTest::addColumn("result"); + + QTest::newRow("empty") << "" << ""; + +#if defined(Q_OS_WIN) + QTest::newRow("win_root") << "c:" << "c:"; + QTest::newRow("win_normal") << "c:\\users\\tamlok" << "c:/users/tamlok"; + QTest::newRow("win_slash") << "c:\\users\\tamlok\\" << "c:/users/tamlok"; + QTest::newRow("win_ext") << "C:\\users\\tamlok\\vnotex.md" << "C:/users/tamlok/vnotex.md"; + QTest::newRow("win_case") << "c:\\users\\Tamlok" << "c:/users/Tamlok"; + QTest::newRow("win_sep") << "c:/users/tamlok" << "c:/users/tamlok"; +#else + QTest::newRow("linux_root") << "/home" << "/home"; + QTest::newRow("linux_normal") << "/home/tamlok" << "/home/tamlok"; + QTest::newRow("linux_slash") << "/home/tamlok/" << "/home/tamlok"; + QTest::newRow("linux_ext") << "/home/tamlok/vnotex.md" << "/home/tamlok/vnotex.md"; + QTest::newRow("linux_case") << "/home/Tamlok/vnotex.md" << "/home/Tamlok/vnotex.md"; +#endif +} + +void TestUtils::testCleanPath() +{ + QFETCH(QString, path); + QFETCH(QString, result); + + QCOMPARE(PathUtils::cleanPath(path), result); +} + +void TestUtils::testAreSamePaths_data() +{ + QTest::addColumn("patha"); + QTest::addColumn("pathb"); + QTest::addColumn("result"); + + QTest::newRow("empty") << "" << "" << true; + +#if defined(Q_OS_WIN) + QTest::newRow("win_normal") << "c:\\users\\tamlok" << "c:\\users\\tamlok" << true; + QTest::newRow("win_slash") << "c:\\users\\vnotex\\" << "c:/users/vnotex" << true; + QTest::newRow("win_file") << "C:\\users\\tamlok\\vnotex.md" << "C:/users/tamlok/vnotex.md" << true; + QTest::newRow("win_file_false") << "C:\\users\\tamlok\\vnote.md" << "C:/users/tamlok/vnotex.md" << false; + QTest::newRow("win_case") << "c:\\users\\Tamlok" << "C:/users/tamlok" << true; +#else + QTest::newRow("linux_normal") << "/home/tamlok" << "/home/tamlok" << true; + QTest::newRow("linux_slash") << "/home/tamlok/" << "/home/tamlok" << true; + QTest::newRow("linux_file") << "/home/tamlok/vnotex.md" << "/home/tamlok/vnotex.md" << true; + QTest::newRow("linux_file_false") << "/home/tamlok/vnote.md" << "/home/tamlok/vnotex.md" << false; + QTest::newRow("linux_case") << "/home/Tamlok/vnotex.md" << "/home/tamlok/vnotex.md" << false; +#endif +} + +void TestUtils::testAreSamePaths() +{ + QFETCH(QString, patha); + QFETCH(QString, pathb); + QFETCH(bool, result); + + QCOMPARE(PathUtils::areSamePaths(patha, pathb), result); +} + +void TestUtils::testPathContains_data() +{ + QTest::addColumn("patha"); + QTest::addColumn("pathb"); + QTest::addColumn("result"); + + QTest::newRow("empty") << "" << "" << true; + +#if defined(Q_OS_WIN) + QTest::newRow("win_same") << "c:\\users\\tamlok" << "c:\\users\\tamlok" << true; + QTest::newRow("win_slash") << "c:\\users\\vnotex\\" << "c:\\users\\vnotex" << true; + QTest::newRow("win_file") << "C:\\users\\tamlok" << "C:/users/tamlok/vnotex.md" << true; + QTest::newRow("win_relative") << "C:\\users\\tamlok" << "tamlok/vnotex.md" << true; + QTest::newRow("win_root") << "c:\\users\\Tamlok" << "D:/users/tamlok" << false; + QTest::newRow("win_case") << "c:\\users\\Tamlok" << "c:/users/tamlok/abc" << true; + QTest::newRow("win_parent") << "c:\\users\\Tamlok\\abc" << "c:/users/tamlok" << false; + QTest::newRow("win_parents") << "c:\\users\\Tamlok\\abc\\def" << "c:/users/tamlok" << false; +#else + QTest::newRow("linux_same") << "/home/tamlok" << "/home/tamlok" << true; + QTest::newRow("linux_slash") << "/home/tamlok/" << "/home/tamlok" << true; + QTest::newRow("linux_file") << "/home/tamlok" << "/home/tamlok/vnotex.md" << true; + QTest::newRow("linux_relative") << "/home/tamlok" << "tamlok/vnotex.md" << true; + QTest::newRow("linux_root") << "/home/tamlok" << "/tamlok/vnotex.md" << false; + QTest::newRow("linux_case") << "/home/Tamlok" << "/home/tamlok/vnotex.md" << false; + QTest::newRow("linux_parent") << "/home/tamlok/abc" << "/home/tamlok" << false; + QTest::newRow("linux_parents") << "/home/tamlok/abc/def" << "/home/tamlok" << false; +#endif +} + +void TestUtils::testPathContains() +{ + QFETCH(QString, patha); + QFETCH(QString, pathb); + QFETCH(bool, result); + + QCOMPARE(PathUtils::pathContains(patha, pathb), result); +} + +void TestUtils::testConcatenateFilePath_data() +{ + QTest::addColumn("dirPath"); + QTest::addColumn("name"); + QTest::addColumn("result"); + + QTest::newRow("emptyDir") << "" << "filea" << "filea"; + +#if defined(Q_OS_WIN) + QTest::newRow("win_absolute") << "c:\\users\\tamlok" << "filea" << "c:/users/tamlok/filea"; + QTest::newRow("win_slash") << "c:\\users\\vnotex\\" << "filea" << "c:/users/vnotex/filea"; + QTest::newRow("win_slash2") << "C:/users/tamlok///" << "filea" << "C:/users/tamlok/filea"; + QTest::newRow("win_relative") << "users\\tamlok" << "filea" << "users/tamlok/filea"; + QTest::newRow("win_path") << "c:\\users\\tamlok" << "folder/filea" << "c:/users/tamlok/folder/filea"; +#else + QTest::newRow("linux_absolute") << "/home/tamlok" << "filea" << "/home/tamlok/filea"; + QTest::newRow("linux_slash") << "/home/tamlok///" << "filea" << "/home/tamlok/filea"; + QTest::newRow("linux_relative") << "home/tamlok" << "filea" << "home/tamlok/filea"; + QTest::newRow("linux_path") << "/home/tamloK" << "folder/filea" << "/home/tamloK/folder/filea"; +#endif +} + +void TestUtils::testConcatenateFilePath() +{ + QFETCH(QString, dirPath); + QFETCH(QString, name); + QFETCH(QString, result); + + QCOMPARE(PathUtils::concatenateFilePath(dirPath, name), result); +} + +void TestUtils::testRenameFile() +{ + QTemporaryDir dir; + const QString testFolderPath(dir.path()); + + // File. + { + QString fileAPath = testFolderPath + "/filea.md"; + QFile fileA(fileAPath); + QVERIFY(fileA.open(QIODevice::WriteOnly | QIODevice::Text)); + fileA.write(QByteArray()); + fileA.close(); + QVERIFY(QFileInfo::exists(fileAPath)); + FileUtils::renameFile(fileAPath, "fileb.md"); + QString newFileAPath = testFolderPath + "/fileb.md"; + QVERIFY(QFileInfo::exists(newFileAPath)); + } + + // Folder. + { + QDir paDir(testFolderPath); + QString dirAPath = testFolderPath + "/dira"; + QVERIFY(paDir.mkdir("dira")); + FileUtils::renameFile(dirAPath, "dirb"); + QVERIFY(paDir.exists("dirb")); + } +} + +void TestUtils::testIsText() +{ + QTemporaryDir dir; + const QString testFolderPath(dir.path()); + + { + auto filePath = testFolderPath + "/text"; + QFile file(filePath); + QVERIFY(file.open(QIODevice::WriteOnly | QIODevice::Text)); + file.write(QByteArray(5, 'v')); + file.close(); + QVERIFY(QFileInfo::exists(filePath)); + QVERIFY(FileUtils::isText(filePath)); + } + + { + auto filePath = testFolderPath + "/bin"; + QFile file(filePath); + QVERIFY(file.open(QIODevice::WriteOnly)); + file.write(reinterpret_cast(&file), sizeof(file)); + file.close(); + QVERIFY(QFileInfo::exists(filePath)); + QVERIFY(!FileUtils::isText(filePath)); + } +} + +QTEST_MAIN(tests::TestUtils) diff --git a/tests/test_utils/test_utils.h b/tests/test_utils/test_utils.h new file mode 100644 index 00000000..31243393 --- /dev/null +++ b/tests/test_utils/test_utils.h @@ -0,0 +1,38 @@ +#ifndef TESTS_UTILS_TEST_UTILS_H +#define TESTS_UTILS_TEST_UTILS_H + +#include + +namespace tests +{ + class TestUtils : public QObject + { + Q_OBJECT + + private slots: + // Define test cases here per slot. + + // PathUtils Tests. + void testParentDirPath_data(); + void testParentDirPath(); + + void testCleanPath_data(); + void testCleanPath(); + + void testAreSamePaths_data(); + void testAreSamePaths(); + + void testPathContains_data(); + void testPathContains(); + + void testConcatenateFilePath_data(); + void testConcatenateFilePath(); + + // FileUtils Tests. + void testRenameFile(); + + void testIsText(); + }; +} // ns tests + +#endif // TESTS_UTILS_TEST_UTILS_H diff --git a/tests/test_utils/test_utils.pro b/tests/test_utils/test_utils.pro new file mode 100644 index 00000000..be437e34 --- /dev/null +++ b/tests/test_utils/test_utils.pro @@ -0,0 +1,19 @@ +include($$PWD/../common.pri) + +TARGET = test_utils +TEMPLATE = app + +SRC_FOLDER = $$PWD/../../src +UTILS_FOLDER = $$SRC_FOLDER/utils + +INCLUDEPATH *= $$SRC_FOLDER + +SOURCES += \ + test_utils.cpp \ + $$UTILS_FOLDER/pathutils.cpp \ + $$UTILS_FOLDER/fileutils.cpp + +HEADERS += \ + test_utils.h \ + $$UTILS_FOLDER/pathutils.h \ + $$UTILS_FOLDER/fileutils.h diff --git a/tests/tests.pro b/tests/tests.pro new file mode 100644 index 00000000..95e8f08d --- /dev/null +++ b/tests/tests.pro @@ -0,0 +1,5 @@ +TEMPLATE = subdirs + +SUBDIRS = \ + test_utils \ + test_core diff --git a/vnotex.pro b/vnotex.pro new file mode 100644 index 00000000..473ecb32 --- /dev/null +++ b/vnotex.pro @@ -0,0 +1,11 @@ +TEMPLATE = subdirs + +CONFIG += c++11 + +SUBDIRS = \ + libs \ + src \ + tests + +src.depends = libs +tests.depends = libs